kevlar-4u 1.0.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.
- package/README.md +357 -0
- package/config/mcp-config.json +9 -0
- package/dist/__tests__/configureWizard.test.d.ts +2 -0
- package/dist/__tests__/configureWizard.test.d.ts.map +1 -0
- package/dist/__tests__/configureWizard.test.js +89 -0
- package/dist/__tests__/configureWizard.test.js.map +1 -0
- package/dist/__tests__/createPersonaTool.test.d.ts +2 -0
- package/dist/__tests__/createPersonaTool.test.d.ts.map +1 -0
- package/dist/__tests__/createPersonaTool.test.js +292 -0
- package/dist/__tests__/createPersonaTool.test.js.map +1 -0
- package/dist/__tests__/createPersonaWizard.test.d.ts +2 -0
- package/dist/__tests__/createPersonaWizard.test.d.ts.map +1 -0
- package/dist/__tests__/createPersonaWizard.test.js +138 -0
- package/dist/__tests__/createPersonaWizard.test.js.map +1 -0
- package/dist/__tests__/deletePersonaWizard.test.d.ts +2 -0
- package/dist/__tests__/deletePersonaWizard.test.d.ts.map +1 -0
- package/dist/__tests__/deletePersonaWizard.test.js +78 -0
- package/dist/__tests__/deletePersonaWizard.test.js.map +1 -0
- package/dist/__tests__/e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e.test.js +121 -0
- package/dist/__tests__/e2e.test.js.map +1 -0
- package/dist/__tests__/errors.test.d.ts +2 -0
- package/dist/__tests__/errors.test.d.ts.map +1 -0
- package/dist/__tests__/errors.test.js +86 -0
- package/dist/__tests__/errors.test.js.map +1 -0
- package/dist/__tests__/execution.test.d.ts +2 -0
- package/dist/__tests__/execution.test.d.ts.map +1 -0
- package/dist/__tests__/execution.test.js +792 -0
- package/dist/__tests__/execution.test.js.map +1 -0
- package/dist/__tests__/getModesTool.test.d.ts +2 -0
- package/dist/__tests__/getModesTool.test.d.ts.map +1 -0
- package/dist/__tests__/getModesTool.test.js +47 -0
- package/dist/__tests__/getModesTool.test.js.map +1 -0
- package/dist/__tests__/helpTool.test.d.ts +2 -0
- package/dist/__tests__/helpTool.test.d.ts.map +1 -0
- package/dist/__tests__/helpTool.test.js +18 -0
- package/dist/__tests__/helpTool.test.js.map +1 -0
- package/dist/__tests__/listPersonasTool.test.d.ts +2 -0
- package/dist/__tests__/listPersonasTool.test.d.ts.map +1 -0
- package/dist/__tests__/listPersonasTool.test.js +110 -0
- package/dist/__tests__/listPersonasTool.test.js.map +1 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +56 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/observability.test.d.ts +2 -0
- package/dist/__tests__/observability.test.d.ts.map +1 -0
- package/dist/__tests__/observability.test.js +60 -0
- package/dist/__tests__/observability.test.js.map +1 -0
- package/dist/__tests__/parser.test.d.ts +2 -0
- package/dist/__tests__/parser.test.d.ts.map +1 -0
- package/dist/__tests__/parser.test.js +259 -0
- package/dist/__tests__/parser.test.js.map +1 -0
- package/dist/__tests__/persona_creation_debug.test.d.ts +2 -0
- package/dist/__tests__/persona_creation_debug.test.d.ts.map +1 -0
- package/dist/__tests__/persona_creation_debug.test.js +56 -0
- package/dist/__tests__/persona_creation_debug.test.js.map +1 -0
- package/dist/__tests__/resetPersonasWizard.test.d.ts +2 -0
- package/dist/__tests__/resetPersonasWizard.test.d.ts.map +1 -0
- package/dist/__tests__/resetPersonasWizard.test.js +74 -0
- package/dist/__tests__/resetPersonasWizard.test.js.map +1 -0
- package/dist/__tests__/reviewContentWizard.test.d.ts +2 -0
- package/dist/__tests__/reviewContentWizard.test.d.ts.map +1 -0
- package/dist/__tests__/reviewContentWizard.test.js +148 -0
- package/dist/__tests__/reviewContentWizard.test.js.map +1 -0
- package/dist/__tests__/sanitize.test.d.ts +2 -0
- package/dist/__tests__/sanitize.test.d.ts.map +1 -0
- package/dist/__tests__/sanitize.test.js +138 -0
- package/dist/__tests__/sanitize.test.js.map +1 -0
- package/dist/__tests__/server.test.d.ts +2 -0
- package/dist/__tests__/server.test.d.ts.map +1 -0
- package/dist/__tests__/server.test.js +49 -0
- package/dist/__tests__/server.test.js.map +1 -0
- package/dist/execution/aggregator.d.ts +43 -0
- package/dist/execution/aggregator.d.ts.map +1 -0
- package/dist/execution/aggregator.js +132 -0
- package/dist/execution/aggregator.js.map +1 -0
- package/dist/execution/base.d.ts +62 -0
- package/dist/execution/base.d.ts.map +1 -0
- package/dist/execution/base.js +5 -0
- package/dist/execution/base.js.map +1 -0
- package/dist/execution/client.d.ts +9 -0
- package/dist/execution/client.d.ts.map +1 -0
- package/dist/execution/client.js +30 -0
- package/dist/execution/client.js.map +1 -0
- package/dist/execution/config.d.ts +30 -0
- package/dist/execution/config.d.ts.map +1 -0
- package/dist/execution/config.js +95 -0
- package/dist/execution/config.js.map +1 -0
- package/dist/execution/index.d.ts +19 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +151 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/limiter.d.ts +32 -0
- package/dist/execution/limiter.d.ts.map +1 -0
- package/dist/execution/limiter.js +147 -0
- package/dist/execution/limiter.js.map +1 -0
- package/dist/execution/lock.d.ts +17 -0
- package/dist/execution/lock.d.ts.map +1 -0
- package/dist/execution/lock.js +37 -0
- package/dist/execution/lock.js.map +1 -0
- package/dist/execution/modes/direct_api.d.ts +11 -0
- package/dist/execution/modes/direct_api.d.ts.map +1 -0
- package/dist/execution/modes/direct_api.js +213 -0
- package/dist/execution/modes/direct_api.js.map +1 -0
- package/dist/execution/modes/index.d.ts +7 -0
- package/dist/execution/modes/index.d.ts.map +1 -0
- package/dist/execution/modes/index.js +7 -0
- package/dist/execution/modes/index.js.map +1 -0
- package/dist/execution/modes/orchestration.d.ts +11 -0
- package/dist/execution/modes/orchestration.d.ts.map +1 -0
- package/dist/execution/modes/orchestration.js +110 -0
- package/dist/execution/modes/orchestration.js.map +1 -0
- package/dist/execution/modes/sampling.d.ts +9 -0
- package/dist/execution/modes/sampling.d.ts.map +1 -0
- package/dist/execution/modes/sampling.js +66 -0
- package/dist/execution/modes/sampling.js.map +1 -0
- package/dist/execution/parallel.d.ts +16 -0
- package/dist/execution/parallel.d.ts.map +1 -0
- package/dist/execution/parallel.js +90 -0
- package/dist/execution/parallel.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/reviewDispatcherPrompt.d.ts +2 -0
- package/dist/prompts/reviewDispatcherPrompt.d.ts.map +1 -0
- package/dist/prompts/reviewDispatcherPrompt.js +67 -0
- package/dist/prompts/reviewDispatcherPrompt.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +156 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/configureTool.d.ts +17 -0
- package/dist/tools/configureTool.d.ts.map +1 -0
- package/dist/tools/configureTool.js +104 -0
- package/dist/tools/configureTool.js.map +1 -0
- package/dist/tools/configureWizardTool.d.ts +11 -0
- package/dist/tools/configureWizardTool.d.ts.map +1 -0
- package/dist/tools/configureWizardTool.js +205 -0
- package/dist/tools/configureWizardTool.js.map +1 -0
- package/dist/tools/createPersonaTool.d.ts +37 -0
- package/dist/tools/createPersonaTool.d.ts.map +1 -0
- package/dist/tools/createPersonaTool.js +353 -0
- package/dist/tools/createPersonaTool.js.map +1 -0
- package/dist/tools/createPersonaWizardTool.d.ts +13 -0
- package/dist/tools/createPersonaWizardTool.d.ts.map +1 -0
- package/dist/tools/createPersonaWizardTool.js +713 -0
- package/dist/tools/createPersonaWizardTool.js.map +1 -0
- package/dist/tools/deletePersonaTool.d.ts +10 -0
- package/dist/tools/deletePersonaTool.d.ts.map +1 -0
- package/dist/tools/deletePersonaTool.js +75 -0
- package/dist/tools/deletePersonaTool.js.map +1 -0
- package/dist/tools/deletePersonaWizardTool.d.ts +11 -0
- package/dist/tools/deletePersonaWizardTool.d.ts.map +1 -0
- package/dist/tools/deletePersonaWizardTool.js +184 -0
- package/dist/tools/deletePersonaWizardTool.js.map +1 -0
- package/dist/tools/getModesTool.d.ts +12 -0
- package/dist/tools/getModesTool.d.ts.map +1 -0
- package/dist/tools/getModesTool.js +78 -0
- package/dist/tools/getModesTool.js.map +1 -0
- package/dist/tools/helpTool.d.ts +7 -0
- package/dist/tools/helpTool.d.ts.map +1 -0
- package/dist/tools/helpTool.js +65 -0
- package/dist/tools/helpTool.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +30 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/listPersonasTool.d.ts +7 -0
- package/dist/tools/listPersonasTool.d.ts.map +1 -0
- package/dist/tools/listPersonasTool.js +118 -0
- package/dist/tools/listPersonasTool.js.map +1 -0
- package/dist/tools/resetPersonasTool.d.ts +7 -0
- package/dist/tools/resetPersonasTool.d.ts.map +1 -0
- package/dist/tools/resetPersonasTool.js +447 -0
- package/dist/tools/resetPersonasTool.js.map +1 -0
- package/dist/tools/resetPersonasWizardTool.d.ts +9 -0
- package/dist/tools/resetPersonasWizardTool.d.ts.map +1 -0
- package/dist/tools/resetPersonasWizardTool.js +125 -0
- package/dist/tools/resetPersonasWizardTool.js.map +1 -0
- package/dist/tools/reviewContentWizardTool.d.ts +13 -0
- package/dist/tools/reviewContentWizardTool.d.ts.map +1 -0
- package/dist/tools/reviewContentWizardTool.js +411 -0
- package/dist/tools/reviewContentWizardTool.js.map +1 -0
- package/dist/tools/reviewTool.d.ts +10 -0
- package/dist/tools/reviewTool.d.ts.map +1 -0
- package/dist/tools/reviewTool.js +133 -0
- package/dist/tools/reviewTool.js.map +1 -0
- package/dist/tools/types.d.ts +14 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +2 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/utils/errors.d.ts +30 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +47 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +18 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +52 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/observability.d.ts +61 -0
- package/dist/utils/observability.d.ts.map +1 -0
- package/dist/utils/observability.js +69 -0
- package/dist/utils/observability.js.map +1 -0
- package/dist/utils/parser.d.ts +27 -0
- package/dist/utils/parser.d.ts.map +1 -0
- package/dist/utils/parser.js +178 -0
- package/dist/utils/parser.js.map +1 -0
- package/dist/utils/personaIdMaps.d.ts +7 -0
- package/dist/utils/personaIdMaps.d.ts.map +1 -0
- package/dist/utils/personaIdMaps.js +51 -0
- package/dist/utils/personaIdMaps.js.map +1 -0
- package/dist/utils/sanitize.d.ts +4 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +49 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/types.d.ts +8 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +2 -0
- package/dist/utils/types.js.map +1 -0
- package/package.json +42 -0
- package/skills/_template.md +66 -0
- package/skills/tmp/wizard-create-cwzrrpim_draft.json +26 -0
- package/skills/tmp/wizard-create-cwzrrpim_wizard.json +26 -0
- package/skills/tmp/wizard-create-d81intme_draft.json +26 -0
- package/skills/tmp/wizard-create-d81intme_wizard.json +26 -0
- package/skills/tmp/wizard-create-g50jqzmh_draft.json +8 -0
- package/skills/tmp/wizard-create-g50jqzmh_wizard.json +8 -0
- package/skills/tmp/wizard-create-onupu9wb_draft.json +8 -0
- package/skills/tmp/wizard-create-onupu9wb_wizard.json +8 -0
- package/skills/tmp/wizard-review-fwbxe3d2_review_wizard.json +9 -0
- package/skills/tmp/wizard-review-sypg5e9d_review_wizard.json +9 -0
- package/skills/wechat_official/wechat_official.md +26 -0
- package/skills/wechat_official/wechat_official_1.md +31 -0
- package/skills/xiaohongshu/xiaohongshu.md +26 -0
- package/skills/xiaohongshu/xiaohongshu_1.md +29 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import * as path from "path";
|
|
4
|
+
import * as os from "os";
|
|
5
|
+
import * as fs from "fs";
|
|
6
|
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
7
|
+
import { InMemoryTransport } from "@modelcontextprotocol/sdk/inMemory.js";
|
|
8
|
+
import { createKevlarServer } from "../server.js";
|
|
9
|
+
let tmpDir;
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "kevlar-e2e-"));
|
|
12
|
+
process.env.KEVLAR_SKILLS_DIR = tmpDir;
|
|
13
|
+
});
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
16
|
+
delete process.env.KEVLAR_SKILLS_DIR;
|
|
17
|
+
});
|
|
18
|
+
describe("End-to-End integration test", () => {
|
|
19
|
+
it("calls review_content_wizard via MCP client (multi-turn)", async () => {
|
|
20
|
+
const server = createKevlarServer();
|
|
21
|
+
// Seed a test persona
|
|
22
|
+
const personaPath = path.join(tmpDir, "e2e_persona.md");
|
|
23
|
+
fs.writeFileSync(personaPath, [
|
|
24
|
+
"---",
|
|
25
|
+
"id: e2e_persona",
|
|
26
|
+
"name: E2E Tester",
|
|
27
|
+
"name_en: E2E Tester",
|
|
28
|
+
"version: 1.0.0",
|
|
29
|
+
"author: kevlar-core",
|
|
30
|
+
"tags: [e2e]",
|
|
31
|
+
"description: E2E test persona",
|
|
32
|
+
"blindSpot: none",
|
|
33
|
+
"---",
|
|
34
|
+
"常用平台:通用",
|
|
35
|
+
"性格特质:温和",
|
|
36
|
+
"盲区:无",
|
|
37
|
+
].join("\n"), "utf-8");
|
|
38
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
39
|
+
const client = new Client({ name: "kevlar-e2e-test", version: "1.0.0" }, { capabilities: {} });
|
|
40
|
+
await Promise.all([
|
|
41
|
+
client.connect(clientTransport),
|
|
42
|
+
server.connect(serverTransport),
|
|
43
|
+
]);
|
|
44
|
+
try {
|
|
45
|
+
// Step 1: Start wizard with content
|
|
46
|
+
const step1 = await client.callTool({
|
|
47
|
+
name: "review_content_wizard",
|
|
48
|
+
arguments: {
|
|
49
|
+
userMessage: "请评测这篇内容:这是一个用于 E2E 测试的文本",
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
assert.ok(step1, "Step 1 response should exist");
|
|
53
|
+
assert.ok(Array.isArray(step1.content), "Step 1 response should have content array");
|
|
54
|
+
assert.equal(step1.content[0].type, "text");
|
|
55
|
+
const step1Text = step1.content[0].text;
|
|
56
|
+
assert.ok(step1Text.includes("这份内容准备投放在哪些平台"), "Should ask about target platform");
|
|
57
|
+
// Extract sessionId
|
|
58
|
+
const sessionIdMatch = step1Text.match(/sessionId:\s*([a-z0-9-]+)/);
|
|
59
|
+
assert.ok(sessionIdMatch, "Should include sessionId");
|
|
60
|
+
const sessionId = sessionIdMatch[1];
|
|
61
|
+
// Step 2: Specify no platform → show all personas
|
|
62
|
+
const step2 = await client.callTool({
|
|
63
|
+
name: "review_content_wizard",
|
|
64
|
+
arguments: {
|
|
65
|
+
sessionId,
|
|
66
|
+
userMessage: "通用",
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
assert.ok(step2, "Step 2 response should exist");
|
|
70
|
+
assert.ok(Array.isArray(step2.content), "Step 2 response should have content array");
|
|
71
|
+
assert.equal(step2.content[0].type, "text");
|
|
72
|
+
const step2Text = step2.content[0].text;
|
|
73
|
+
assert.ok(step2Text.includes("E2E Tester"), "Should list the persona");
|
|
74
|
+
assert.ok(step2Text.includes("currentStep: confirmSelection"), "Should be in confirmation step");
|
|
75
|
+
// Step 3: Confirm → execute review
|
|
76
|
+
const step3 = await client.callTool({
|
|
77
|
+
name: "review_content_wizard",
|
|
78
|
+
arguments: {
|
|
79
|
+
sessionId,
|
|
80
|
+
userMessage: "确认",
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
assert.ok(step3, "Step 3 response should exist");
|
|
84
|
+
assert.ok(Array.isArray(step3.content), "Step 3 response should have content array");
|
|
85
|
+
assert.equal(step3.content[0].type, "text");
|
|
86
|
+
const step3Text = step3.content[0].text;
|
|
87
|
+
assert.ok(step3Text.includes("E2E Tester"), "Should include persona name in report");
|
|
88
|
+
assert.ok(step3Text.includes("这是一个用于 E2E 测试的文本"), "Should include the provided content");
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
await client.close();
|
|
92
|
+
await server.close();
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
it("starts create_persona_wizard via MCP client", async () => {
|
|
96
|
+
const server = createKevlarServer();
|
|
97
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
98
|
+
const client = new Client({ name: "kevlar-e2e-test", version: "1.0.0" }, { capabilities: {} });
|
|
99
|
+
await Promise.all([
|
|
100
|
+
client.connect(clientTransport),
|
|
101
|
+
server.connect(serverTransport),
|
|
102
|
+
]);
|
|
103
|
+
try {
|
|
104
|
+
const response = await client.callTool({
|
|
105
|
+
name: "create_persona_wizard",
|
|
106
|
+
arguments: {
|
|
107
|
+
userMessage: "开始创建人设",
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
assert.ok(response, "Response should exist");
|
|
111
|
+
assert.ok(Array.isArray(response.content), "Response should have content array");
|
|
112
|
+
const textOutput = response.content[0].text;
|
|
113
|
+
assert.ok(textOutput.includes("年龄段"), "Should ask about age range");
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await client.close();
|
|
117
|
+
await server.close();
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=e2e.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { describe, it } from "node:test";
|
|
2
|
+
import assert from "node:assert/strict";
|
|
3
|
+
import { ErrorCode, isKevlarError, getErrorMessage, formatErrorResponse, } from "../utils/errors.js";
|
|
4
|
+
describe("ErrorCode", () => {
|
|
5
|
+
it("has validation error codes", () => {
|
|
6
|
+
assert.equal(ErrorCode.VALIDATION_ERROR, "VALIDATION_ERROR");
|
|
7
|
+
assert.equal(ErrorCode.INVALID_INPUT, "INVALID_INPUT");
|
|
8
|
+
assert.equal(ErrorCode.CONTENT_TOO_LONG, "CONTENT_TOO_LONG");
|
|
9
|
+
assert.equal(ErrorCode.PERSONA_NOT_FOUND, "PERSONA_NOT_FOUND");
|
|
10
|
+
assert.equal(ErrorCode.DUPLICATE_ID, "DUPLICATE_ID");
|
|
11
|
+
assert.equal(ErrorCode.INVALID_ID_FORMAT, "INVALID_ID_FORMAT");
|
|
12
|
+
assert.equal(ErrorCode.PATH_TRAVERSAL, "PATH_TRAVERSAL");
|
|
13
|
+
});
|
|
14
|
+
it("has resource error codes", () => {
|
|
15
|
+
assert.equal(ErrorCode.FILE_NOT_FOUND, "FILE_NOT_FOUND");
|
|
16
|
+
assert.equal(ErrorCode.FILE_READ_ERROR, "FILE_READ_ERROR");
|
|
17
|
+
assert.equal(ErrorCode.FILE_WRITE_ERROR, "FILE_WRITE_ERROR");
|
|
18
|
+
assert.equal(ErrorCode.PERMISSION_DENIED, "PERMISSION_DENIED");
|
|
19
|
+
});
|
|
20
|
+
it("has runtime error codes", () => {
|
|
21
|
+
assert.equal(ErrorCode.INTERNAL_ERROR, "INTERNAL_ERROR");
|
|
22
|
+
assert.equal(ErrorCode.UNKNOWN_TOOL, "UNKNOWN_TOOL");
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("isKevlarError", () => {
|
|
26
|
+
it("returns true for KevlarError-like objects", () => {
|
|
27
|
+
const err = new Error("test");
|
|
28
|
+
err.code = ErrorCode.VALIDATION_ERROR;
|
|
29
|
+
err.recoverable = false;
|
|
30
|
+
assert.equal(isKevlarError(err), true);
|
|
31
|
+
});
|
|
32
|
+
it("returns false for plain Error", () => {
|
|
33
|
+
assert.equal(isKevlarError(new Error("test")), false);
|
|
34
|
+
});
|
|
35
|
+
it("returns false for string", () => {
|
|
36
|
+
assert.equal(isKevlarError("error"), false);
|
|
37
|
+
});
|
|
38
|
+
it("returns false for null", () => {
|
|
39
|
+
assert.equal(isKevlarError(null), false);
|
|
40
|
+
});
|
|
41
|
+
it("returns false for object without code", () => {
|
|
42
|
+
const err = new Error("test");
|
|
43
|
+
err.recoverable = false;
|
|
44
|
+
assert.equal(isKevlarError(err), false);
|
|
45
|
+
});
|
|
46
|
+
it("returns false for object without recoverable", () => {
|
|
47
|
+
const err = new Error("test");
|
|
48
|
+
err.code = ErrorCode.VALIDATION_ERROR;
|
|
49
|
+
assert.equal(isKevlarError(err), false);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
describe("getErrorMessage", () => {
|
|
53
|
+
it("returns message from Error instance", () => {
|
|
54
|
+
assert.equal(getErrorMessage(new Error("hello")), "hello");
|
|
55
|
+
});
|
|
56
|
+
it("returns stringified value for non-Error", () => {
|
|
57
|
+
assert.equal(getErrorMessage("raw string"), "raw string");
|
|
58
|
+
});
|
|
59
|
+
it("stringifies objects", () => {
|
|
60
|
+
assert.equal(getErrorMessage({ foo: 1 }), "[object Object]");
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe("formatErrorResponse", () => {
|
|
64
|
+
it("formats KevlarError with code prefix", () => {
|
|
65
|
+
const err = new Error("Not found");
|
|
66
|
+
err.code = ErrorCode.FILE_NOT_FOUND;
|
|
67
|
+
err.recoverable = false;
|
|
68
|
+
const result = formatErrorResponse(err);
|
|
69
|
+
assert.ok(result.isError);
|
|
70
|
+
assert.ok(result.content[0].text.includes(ErrorCode.FILE_NOT_FOUND));
|
|
71
|
+
assert.ok(result.content[0].text.includes("Not found"));
|
|
72
|
+
});
|
|
73
|
+
it("formats regular Error with generic prefix", () => {
|
|
74
|
+
const result = formatErrorResponse(new Error("Something broke"));
|
|
75
|
+
assert.ok(result.isError);
|
|
76
|
+
assert.ok(result.content[0].text.includes("操作失败"));
|
|
77
|
+
assert.ok(result.content[0].text.includes("Something broke"));
|
|
78
|
+
});
|
|
79
|
+
it("formats string fallback", () => {
|
|
80
|
+
const result = formatErrorResponse("epic fail");
|
|
81
|
+
assert.ok(result.isError);
|
|
82
|
+
assert.ok(result.content[0].text.includes("操作失败"));
|
|
83
|
+
assert.ok(result.content[0].text.includes("epic fail"));
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
//# sourceMappingURL=errors.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.test.js","sourceRoot":"","sources":["../../src/__tests__/errors.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execution.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/execution.test.ts"],"names":[],"mappings":""}
|