@sweny-ai/core 0.1.77 → 0.1.78
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/browser.d.ts +11 -5
- package/dist/browser.js +11 -11
- package/dist/claude.d.ts +16 -0
- package/dist/claude.js +98 -9
- package/dist/cli/config.d.ts +22 -0
- package/dist/cli/config.js +56 -9
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +56 -57
- package/dist/cli/marketplace.js +35 -9
- package/dist/cli/publish.d.ts +10 -0
- package/dist/cli/publish.js +22 -14
- package/dist/loader.d.ts +40 -0
- package/dist/loader.js +73 -0
- package/dist/mcp-catalog.d.ts +47 -0
- package/dist/mcp-catalog.js +304 -0
- package/dist/mcp.d.ts +6 -9
- package/dist/mcp.js +24 -314
- package/dist/schema.d.ts +183 -151
- package/dist/schema.js +49 -7
- package/dist/skills/custom-loader.d.ts +40 -0
- package/dist/skills/custom-loader.js +107 -32
- package/dist/skills/index.d.ts +13 -1
- package/dist/skills/index.js +12 -3
- package/dist/studio.js +4 -1
- package/dist/templates.d.ts +29 -8
- package/dist/templates.js +30 -20
- package/dist/types.d.ts +12 -0
- package/dist/verify.js +42 -4
- package/package.json +8 -4
- package/dist/__tests__/cascade.test.d.ts +0 -11
- package/dist/__tests__/cascade.test.js +0 -452
- package/dist/__tests__/claude.test.d.ts +0 -1
- package/dist/__tests__/claude.test.js +0 -427
- package/dist/__tests__/custom-loader.test.d.ts +0 -1
- package/dist/__tests__/custom-loader.test.js +0 -116
- package/dist/__tests__/executor.test.d.ts +0 -1
- package/dist/__tests__/executor.test.js +0 -1635
- package/dist/__tests__/integration/datadog.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/datadog.integration.test.js +0 -23
- package/dist/__tests__/integration/e2e-workflow.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/e2e-workflow.integration.test.js +0 -75
- package/dist/__tests__/integration/github.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/github.integration.test.js +0 -37
- package/dist/__tests__/integration/harness.d.ts +0 -24
- package/dist/__tests__/integration/harness.js +0 -34
- package/dist/__tests__/integration/linear.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/linear.integration.test.js +0 -15
- package/dist/__tests__/integration/sentry.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/sentry.integration.test.js +0 -20
- package/dist/__tests__/integration/slack.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/slack.integration.test.js +0 -22
- package/dist/__tests__/integration/sources.integration.test.d.ts +0 -1
- package/dist/__tests__/integration/sources.integration.test.js +0 -123
- package/dist/__tests__/publish.test.d.ts +0 -1
- package/dist/__tests__/publish.test.js +0 -180
- package/dist/__tests__/requires.test.d.ts +0 -1
- package/dist/__tests__/requires.test.js +0 -82
- package/dist/__tests__/retry.test.d.ts +0 -1
- package/dist/__tests__/retry.test.js +0 -213
- package/dist/__tests__/schema.test.d.ts +0 -1
- package/dist/__tests__/schema.test.js +0 -600
- package/dist/__tests__/skill-config-integration.test.d.ts +0 -1
- package/dist/__tests__/skill-config-integration.test.js +0 -204
- package/dist/__tests__/skills-index.test.d.ts +0 -1
- package/dist/__tests__/skills-index.test.js +0 -119
- package/dist/__tests__/skills.test.d.ts +0 -1
- package/dist/__tests__/skills.test.js +0 -565
- package/dist/__tests__/spec-conformance.test.d.ts +0 -18
- package/dist/__tests__/spec-conformance.test.js +0 -1084
- package/dist/__tests__/studio.test.d.ts +0 -1
- package/dist/__tests__/studio.test.js +0 -403
- package/dist/__tests__/templates.test.d.ts +0 -1
- package/dist/__tests__/templates.test.js +0 -49
- package/dist/__tests__/testing.test.d.ts +0 -1
- package/dist/__tests__/testing.test.js +0 -242
- package/dist/__tests__/verify.test.d.ts +0 -1
- package/dist/__tests__/verify.test.js +0 -517
- package/dist/__tests__/version-consistency.test.d.ts +0 -1
- package/dist/__tests__/version-consistency.test.js +0 -312
- package/dist/__tests__/workflow-builder.test.d.ts +0 -1
- package/dist/__tests__/workflow-builder.test.js +0 -110
- package/dist/__tests__/workflow-yaml.test.d.ts +0 -1
- package/dist/__tests__/workflow-yaml.test.js +0 -201
- package/dist/cli/__tests__/diagram.test.d.ts +0 -1
- package/dist/cli/__tests__/diagram.test.js +0 -225
- package/dist/cli/__tests__/report-cloud.test.d.ts +0 -1
- package/dist/cli/__tests__/report-cloud.test.js +0 -165
- package/dist/cli/__tests__/upgrade.test.d.ts +0 -1
- package/dist/cli/__tests__/upgrade.test.js +0 -317
- package/dist/cli/__tests__/version-check.test.d.ts +0 -1
- package/dist/cli/__tests__/version-check.test.js +0 -209
- package/dist/cli/config.test.d.ts +0 -1
- package/dist/cli/config.test.js +0 -200
- package/dist/cli/credentials.test.d.ts +0 -1
- package/dist/cli/credentials.test.js +0 -172
- package/dist/cli/e2e.test.d.ts +0 -1
- package/dist/cli/e2e.test.js +0 -690
- package/dist/cli/marketplace.test.d.ts +0 -1
- package/dist/cli/marketplace.test.js +0 -355
- package/dist/cli/new.test.d.ts +0 -1
- package/dist/cli/new.test.js +0 -1043
- package/dist/cli/output.test.d.ts +0 -1
- package/dist/cli/output.test.js +0 -180
- package/dist/cli/publish.test.d.ts +0 -1
- package/dist/cli/publish.test.js +0 -610
- package/dist/cli/renderer.test.d.ts +0 -1
- package/dist/cli/renderer.test.js +0 -302
- package/dist/executor.test.d.ts +0 -1
- package/dist/executor.test.js +0 -618
- package/dist/mcp.test.d.ts +0 -1
- package/dist/mcp.test.js +0 -735
- package/dist/mermaid.test.d.ts +0 -1
- package/dist/mermaid.test.js +0 -256
- package/dist/sources.test.d.ts +0 -1
- package/dist/sources.test.js +0 -265
- package/dist/sources.validation.test.d.ts +0 -12
- package/dist/sources.validation.test.js +0 -380
- package/dist/workflow-builder.test.d.ts +0 -1
- package/dist/workflow-builder.test.js +0 -123
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from "vitest";
|
|
2
|
-
import { evaluateRequires } from "../requires.js";
|
|
3
|
-
describe("evaluateRequires", () => {
|
|
4
|
-
it("returns null when requires is undefined", () => {
|
|
5
|
-
expect(evaluateRequires(undefined, { input: {} })).toBeNull();
|
|
6
|
-
});
|
|
7
|
-
it("returns null when all checks pass", () => {
|
|
8
|
-
const requires = {
|
|
9
|
-
output_required: ["input.repoUrl"],
|
|
10
|
-
output_matches: [{ path: "triage.recommendation", equals: "implement" }],
|
|
11
|
-
};
|
|
12
|
-
const ctx = {
|
|
13
|
-
input: { repoUrl: "https://x" },
|
|
14
|
-
triage: { recommendation: "implement" },
|
|
15
|
-
};
|
|
16
|
-
expect(evaluateRequires(requires, ctx)).toBeNull();
|
|
17
|
-
});
|
|
18
|
-
it("reports missing input field", () => {
|
|
19
|
-
const requires = { output_required: ["input.repoUrl"] };
|
|
20
|
-
const err = evaluateRequires(requires, { input: {} });
|
|
21
|
-
expect(err).not.toBeNull();
|
|
22
|
-
expect(err).toMatch(/^requires failed:/);
|
|
23
|
-
expect(err).toMatch(/'input\.repoUrl'/);
|
|
24
|
-
});
|
|
25
|
-
it("reports missing prior node output", () => {
|
|
26
|
-
const requires = { output_required: ["triage.recommendation"] };
|
|
27
|
-
const err = evaluateRequires(requires, { input: {} });
|
|
28
|
-
expect(err).not.toBeNull();
|
|
29
|
-
expect(err).toMatch(/'triage\.recommendation'/);
|
|
30
|
-
});
|
|
31
|
-
it("reports null upstream value as missing", () => {
|
|
32
|
-
const requires = { output_required: ["triage.recommendation"] };
|
|
33
|
-
const err = evaluateRequires(requires, {
|
|
34
|
-
input: {},
|
|
35
|
-
triage: { recommendation: null },
|
|
36
|
-
});
|
|
37
|
-
expect(err).toMatch(/null/);
|
|
38
|
-
});
|
|
39
|
-
it("supports `any:` wildcard semantics on requires paths", () => {
|
|
40
|
-
const requires = {
|
|
41
|
-
output_required: ["any:scan.findings[*].severity"],
|
|
42
|
-
};
|
|
43
|
-
const ctx = { input: {}, scan: { findings: [{ severity: "low" }, { severity: "high" }] } };
|
|
44
|
-
expect(evaluateRequires(requires, ctx)).toBeNull();
|
|
45
|
-
});
|
|
46
|
-
it("reports output_matches failure with operator description", () => {
|
|
47
|
-
const requires = {
|
|
48
|
-
output_matches: [{ path: "triage.recommendation", equals: "implement" }],
|
|
49
|
-
};
|
|
50
|
-
const err = evaluateRequires(requires, {
|
|
51
|
-
input: {},
|
|
52
|
-
triage: { recommendation: "skip" },
|
|
53
|
-
});
|
|
54
|
-
expect(err).toMatch(/equals "implement"/);
|
|
55
|
-
expect(err).toMatch(/got \["skip"\]/);
|
|
56
|
-
});
|
|
57
|
-
it("aggregates multiple failures into one string", () => {
|
|
58
|
-
const requires = {
|
|
59
|
-
output_required: ["input.a", "input.b"],
|
|
60
|
-
output_matches: [{ path: "input.c", equals: 1 }],
|
|
61
|
-
};
|
|
62
|
-
const err = evaluateRequires(requires, { input: { c: 2 } });
|
|
63
|
-
expect(err).toMatch(/'input\.a'/);
|
|
64
|
-
expect(err).toMatch(/'input\.b'/);
|
|
65
|
-
expect(err).toMatch(/'input\.c'/);
|
|
66
|
-
});
|
|
67
|
-
it("does not crash when context map is empty", () => {
|
|
68
|
-
const requires = { output_required: ["input.x"] };
|
|
69
|
-
const err = evaluateRequires(requires, {});
|
|
70
|
-
expect(err).not.toBeNull();
|
|
71
|
-
});
|
|
72
|
-
// ── Test 10: malformed block with no checks declared (fix B) ──
|
|
73
|
-
it("returns failure when requires block has no checks declared (fix B defensive guard)", () => {
|
|
74
|
-
// Post-merge fix B: evaluateRequires fails loudly when a requires block
|
|
75
|
-
// exists but declares neither output_required nor output_matches.
|
|
76
|
-
// Passing on_fail directly to bypass TypeScript's NodeRequires type.
|
|
77
|
-
const err = evaluateRequires({ on_fail: "fail" }, { input: {} });
|
|
78
|
-
expect(err).not.toBeNull();
|
|
79
|
-
expect(err).toMatch(/^requires failed:/);
|
|
80
|
-
expect(err).toMatch(/no checks declared/);
|
|
81
|
-
});
|
|
82
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,213 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from "vitest";
|
|
2
|
-
import { buildRetryPreamble } from "../retry.js";
|
|
3
|
-
const tc = (tool, output) => ({ tool, input: {}, output });
|
|
4
|
-
const silentLogger = {
|
|
5
|
-
info: () => { },
|
|
6
|
-
warn: () => { },
|
|
7
|
-
error: () => { },
|
|
8
|
-
debug: () => { },
|
|
9
|
-
};
|
|
10
|
-
function fakeClaude(askResult) {
|
|
11
|
-
return {
|
|
12
|
-
run: async () => ({ status: "success", data: {}, toolCalls: [] }),
|
|
13
|
-
evaluate: async () => "x",
|
|
14
|
-
ask: vi.fn(async () => {
|
|
15
|
-
if (typeof askResult === "function")
|
|
16
|
-
return askResult();
|
|
17
|
-
return askResult;
|
|
18
|
-
}),
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
describe("buildRetryPreamble", () => {
|
|
22
|
-
const verifyError = "verify failed:\n - any_tool_called: required one of [foo]";
|
|
23
|
-
const nodeInstruction = "Open a PR with the fix";
|
|
24
|
-
it("uses default preamble when no instruction is provided", async () => {
|
|
25
|
-
const claude = fakeClaude("");
|
|
26
|
-
const result = await buildRetryPreamble({
|
|
27
|
-
retry: { max: 1 },
|
|
28
|
-
verifyError,
|
|
29
|
-
context: {},
|
|
30
|
-
toolCalls: [],
|
|
31
|
-
nodeInstruction,
|
|
32
|
-
claude,
|
|
33
|
-
logger: silentLogger,
|
|
34
|
-
});
|
|
35
|
-
expect(result).toMatch(/Previous attempt failed verification/);
|
|
36
|
-
expect(result).toContain(verifyError);
|
|
37
|
-
expect(claude.ask).not.toHaveBeenCalled();
|
|
38
|
-
});
|
|
39
|
-
it("uses static string preamble when instruction is a string", async () => {
|
|
40
|
-
const claude = fakeClaude("");
|
|
41
|
-
const result = await buildRetryPreamble({
|
|
42
|
-
retry: { max: 1, instruction: "Remember to call linear_create_issue first." },
|
|
43
|
-
verifyError,
|
|
44
|
-
context: {},
|
|
45
|
-
toolCalls: [],
|
|
46
|
-
nodeInstruction,
|
|
47
|
-
claude,
|
|
48
|
-
logger: silentLogger,
|
|
49
|
-
});
|
|
50
|
-
expect(result).toContain("Remember to call linear_create_issue first.");
|
|
51
|
-
expect(result).toContain(verifyError);
|
|
52
|
-
expect(claude.ask).not.toHaveBeenCalled();
|
|
53
|
-
});
|
|
54
|
-
it("calls claude.ask with default reflection prompt when instruction.auto is true", async () => {
|
|
55
|
-
const claude = fakeClaude("Diagnosis: you forgot to call foo. Strategy: call foo first.");
|
|
56
|
-
const askSpy = claude.ask;
|
|
57
|
-
const result = await buildRetryPreamble({
|
|
58
|
-
retry: { max: 1, instruction: { auto: true } },
|
|
59
|
-
verifyError,
|
|
60
|
-
context: {},
|
|
61
|
-
toolCalls: [tc("bar", { ok: true })],
|
|
62
|
-
nodeInstruction,
|
|
63
|
-
claude,
|
|
64
|
-
logger: silentLogger,
|
|
65
|
-
});
|
|
66
|
-
expect(askSpy).toHaveBeenCalledOnce();
|
|
67
|
-
const callArg = askSpy.mock.calls[0][0];
|
|
68
|
-
expect(callArg.instruction).toMatch(/Briefly diagnose the failure/);
|
|
69
|
-
expect(callArg.instruction).toContain(nodeInstruction);
|
|
70
|
-
expect(callArg.instruction).toContain(verifyError);
|
|
71
|
-
expect(callArg.instruction).toContain("bar");
|
|
72
|
-
expect(result).toContain("Diagnosis: you forgot to call foo");
|
|
73
|
-
expect(result).toContain(verifyError);
|
|
74
|
-
});
|
|
75
|
-
it("calls claude.ask with author prompt when instruction.reflect is set", async () => {
|
|
76
|
-
const claude = fakeClaude("Custom diagnosis.");
|
|
77
|
-
const askSpy = claude.ask;
|
|
78
|
-
await buildRetryPreamble({
|
|
79
|
-
retry: { max: 1, instruction: { reflect: "Focus on the missing tool calls only." } },
|
|
80
|
-
verifyError,
|
|
81
|
-
context: {},
|
|
82
|
-
toolCalls: [],
|
|
83
|
-
nodeInstruction,
|
|
84
|
-
claude,
|
|
85
|
-
logger: silentLogger,
|
|
86
|
-
});
|
|
87
|
-
const callArg = askSpy.mock.calls[0][0];
|
|
88
|
-
expect(callArg.instruction).toContain("Focus on the missing tool calls only.");
|
|
89
|
-
expect(callArg.instruction).toContain(verifyError);
|
|
90
|
-
});
|
|
91
|
-
it("falls back to default preamble when claude.ask throws", async () => {
|
|
92
|
-
const claude = fakeClaude(() => {
|
|
93
|
-
throw new Error("network exploded");
|
|
94
|
-
});
|
|
95
|
-
const warnSpy = vi.fn();
|
|
96
|
-
const logger = { ...silentLogger, warn: warnSpy };
|
|
97
|
-
const result = await buildRetryPreamble({
|
|
98
|
-
retry: { max: 1, instruction: { auto: true } },
|
|
99
|
-
verifyError,
|
|
100
|
-
context: {},
|
|
101
|
-
toolCalls: [],
|
|
102
|
-
nodeInstruction,
|
|
103
|
-
claude,
|
|
104
|
-
logger,
|
|
105
|
-
});
|
|
106
|
-
expect(result).toMatch(/Previous attempt failed verification/);
|
|
107
|
-
expect(result).toContain(verifyError);
|
|
108
|
-
expect(warnSpy).toHaveBeenCalledOnce();
|
|
109
|
-
expect(warnSpy.mock.calls[0][0]).toMatch(/reflection/i);
|
|
110
|
-
});
|
|
111
|
-
it("falls back to default preamble when claude.ask returns empty string", async () => {
|
|
112
|
-
const claude = fakeClaude(" ");
|
|
113
|
-
const warnSpy = vi.fn();
|
|
114
|
-
const logger = { ...silentLogger, warn: warnSpy };
|
|
115
|
-
const result = await buildRetryPreamble({
|
|
116
|
-
retry: { max: 1, instruction: { auto: true } },
|
|
117
|
-
verifyError,
|
|
118
|
-
context: {},
|
|
119
|
-
toolCalls: [],
|
|
120
|
-
nodeInstruction,
|
|
121
|
-
claude,
|
|
122
|
-
logger,
|
|
123
|
-
});
|
|
124
|
-
expect(result).toMatch(/Previous attempt failed verification/);
|
|
125
|
-
expect(warnSpy).toHaveBeenCalledOnce();
|
|
126
|
-
});
|
|
127
|
-
it("includes tool call summary in reflection prompt (names + ok/error)", async () => {
|
|
128
|
-
const claude = fakeClaude("ok");
|
|
129
|
-
const askSpy = claude.ask;
|
|
130
|
-
await buildRetryPreamble({
|
|
131
|
-
retry: { max: 1, instruction: { auto: true } },
|
|
132
|
-
verifyError,
|
|
133
|
-
context: {},
|
|
134
|
-
toolCalls: [tc("foo", { ok: true }), tc("bar", { error: "boom" })],
|
|
135
|
-
nodeInstruction,
|
|
136
|
-
claude,
|
|
137
|
-
logger: silentLogger,
|
|
138
|
-
});
|
|
139
|
-
const promptText = askSpy.mock.calls[0][0].instruction;
|
|
140
|
-
expect(promptText).toContain("foo");
|
|
141
|
-
expect(promptText).toContain("bar");
|
|
142
|
-
expect(promptText).toMatch(/error/i);
|
|
143
|
-
});
|
|
144
|
-
// ── Test 5: whitespace-only ask response falls back to default preamble ──
|
|
145
|
-
it("falls back to default preamble when claude.ask returns whitespace-only string", async () => {
|
|
146
|
-
// Locks the trim() behavior at retry.ts:54 — whitespace-only is treated as empty.
|
|
147
|
-
const warnSpy = vi.fn();
|
|
148
|
-
const logger = { ...silentLogger, warn: warnSpy };
|
|
149
|
-
const claude = fakeClaude("\n\n\t ");
|
|
150
|
-
const result = await buildRetryPreamble({
|
|
151
|
-
retry: { max: 1, instruction: { auto: true } },
|
|
152
|
-
verifyError,
|
|
153
|
-
context: {},
|
|
154
|
-
toolCalls: [],
|
|
155
|
-
nodeInstruction,
|
|
156
|
-
claude,
|
|
157
|
-
logger,
|
|
158
|
-
});
|
|
159
|
-
expect(result).toMatch(/Previous attempt failed verification/);
|
|
160
|
-
expect(result).toContain(verifyError);
|
|
161
|
-
expect(warnSpy).toHaveBeenCalledOnce();
|
|
162
|
-
expect(warnSpy.mock.calls[0][0]).toMatch(/empty/i);
|
|
163
|
-
});
|
|
164
|
-
// ── Test 6: nodeInstruction containing the same header as defaultPreamble ──
|
|
165
|
-
it("produces a correct preamble even when nodeInstruction contains the default header verbatim", async () => {
|
|
166
|
-
// Regression: if buildReflectionPrompt did brittle string-replace on the header,
|
|
167
|
-
// embedding the header in the instruction would corrupt output. Assert it still
|
|
168
|
-
// produces a preamble starting with "## Reflection on previous attempt".
|
|
169
|
-
const tricky = "## Previous attempt failed verification\nDo the thing anyway.";
|
|
170
|
-
const claude = fakeClaude("Here is my diagnosis.");
|
|
171
|
-
const result = await buildRetryPreamble({
|
|
172
|
-
retry: { max: 1, instruction: { auto: true } },
|
|
173
|
-
verifyError,
|
|
174
|
-
context: {},
|
|
175
|
-
toolCalls: [],
|
|
176
|
-
nodeInstruction: tricky,
|
|
177
|
-
claude,
|
|
178
|
-
logger: silentLogger,
|
|
179
|
-
});
|
|
180
|
-
// The returned preamble should start with the reflection header, not the
|
|
181
|
-
// default header, because claude.ask returned a non-empty string.
|
|
182
|
-
expect(result).toMatch(/^## Reflection on previous attempt/);
|
|
183
|
-
expect(result).toContain("Here is my diagnosis.");
|
|
184
|
-
expect(result).toContain(verifyError);
|
|
185
|
-
});
|
|
186
|
-
// ── Test 7: instruction.reflect = "" (empty string, bypasses Zod) ──
|
|
187
|
-
it("uses empty string as reflect prompt when reflect is '' (documents current behavior)", async () => {
|
|
188
|
-
// Zod schema requires reflect: string.min(1), but programmatic construction
|
|
189
|
-
// can bypass it. Current code: `typeof inst.reflect === "string" ? inst.reflect : DEFAULT`
|
|
190
|
-
// An empty string IS a string, so it gets used verbatim — the reflection prompt
|
|
191
|
-
// sent to claude.ask will contain the empty reflect line.
|
|
192
|
-
// FUTURE: consider falling back to DEFAULT_REFLECTION_PROMPT on empty reflect.
|
|
193
|
-
const claude = fakeClaude("diagnosis from empty reflect.");
|
|
194
|
-
const askSpy = claude.ask;
|
|
195
|
-
await buildRetryPreamble({
|
|
196
|
-
// Cast to bypass TypeScript's NodeRetry type (which mirrors Zod min(1))
|
|
197
|
-
retry: { max: 1, instruction: { reflect: "" } },
|
|
198
|
-
verifyError,
|
|
199
|
-
context: {},
|
|
200
|
-
toolCalls: [],
|
|
201
|
-
nodeInstruction,
|
|
202
|
-
claude,
|
|
203
|
-
logger: silentLogger,
|
|
204
|
-
});
|
|
205
|
-
expect(askSpy).toHaveBeenCalledOnce();
|
|
206
|
-
// The reflection prompt is built from the empty string — it should NOT contain
|
|
207
|
-
// the default "Briefly diagnose" text because reflect="" was used instead.
|
|
208
|
-
const sentInstruction = askSpy.mock.calls[0][0].instruction;
|
|
209
|
-
expect(sentInstruction).not.toContain("Briefly diagnose");
|
|
210
|
-
// The verify error is always included regardless of reflect content.
|
|
211
|
-
expect(sentInstruction).toContain(verifyError);
|
|
212
|
-
});
|
|
213
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|