feat(FN-4396): merge fusion/fn-4396
This commit is contained in:
@@ -2134,7 +2134,6 @@ describe("Workflow Steps Execution", () => {
|
||||
description: "Check for vulnerabilities",
|
||||
gateMode: "gate",
|
||||
prompt: "Scan for security issues.",
|
||||
gateMode: "gate",
|
||||
enabled: true,
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
@@ -2333,7 +2332,7 @@ describe("Workflow Steps Execution", () => {
|
||||
expect(store.moveTask).toHaveBeenCalledWith("FN-001", "in-review");
|
||||
expect(store.logEntry).toHaveBeenCalledWith(
|
||||
"FN-001",
|
||||
expect.stringContaining("gateMode=advisory"),
|
||||
expect.stringContaining("Advisory workflow step failed"),
|
||||
);
|
||||
expect(store.updateTask).not.toHaveBeenCalledWith(
|
||||
"FN-001",
|
||||
@@ -2367,7 +2366,6 @@ describe("Workflow Steps Execution", () => {
|
||||
description: "Check for vulnerabilities",
|
||||
gateMode: "gate",
|
||||
prompt: "Scan for security issues.",
|
||||
gateMode: "gate",
|
||||
enabled: true,
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
@@ -2466,7 +2464,6 @@ describe("Workflow Steps Execution", () => {
|
||||
description: "Check for vulnerabilities",
|
||||
gateMode: "gate",
|
||||
prompt: "Scan for security issues.",
|
||||
gateMode: "gate",
|
||||
enabled: true,
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
@@ -2572,7 +2569,6 @@ describe("Workflow Steps Execution", () => {
|
||||
description: "Check for vulnerabilities",
|
||||
gateMode: "gate",
|
||||
prompt: "Scan for security issues.",
|
||||
gateMode: "gate",
|
||||
enabled: true,
|
||||
createdAt: new Date().toISOString(),
|
||||
updatedAt: new Date().toISOString(),
|
||||
|
||||
44
packages/engine/src/__tests__/token-budget-enforcer.test.ts
Normal file
44
packages/engine/src/__tests__/token-budget-enforcer.test.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { enforceTaskTokenBudget, resolveTaskTokenBudget } from "../token-budget-enforcer.js";
|
||||
|
||||
describe("resolveTaskTokenBudget", () => {
|
||||
it("prefers task override", () => {
|
||||
const result = resolveTaskTokenBudget(
|
||||
{ id: "FN-1", description: "x", column: "todo", dependencies: [], steps: [], currentStep: 0, createdAt: "", updatedAt: "", tokenBudgetOverride: { soft: 10, hard: 20 } } as any,
|
||||
{ taskTokenBudget: { soft: 100, hard: 200 } } as any,
|
||||
{ taskTokenBudget: { soft: 1000, hard: 2000 } } as any,
|
||||
);
|
||||
expect(result).toEqual({ soft: 10, hard: 20, source: "task-override" });
|
||||
});
|
||||
});
|
||||
|
||||
describe("enforceTaskTokenBudget", () => {
|
||||
it("fires soft once and hard pause once", async () => {
|
||||
const updateTask = vi.fn(async () => undefined);
|
||||
const pauseTask = vi.fn(async () => undefined);
|
||||
const notify = vi.fn(async () => undefined);
|
||||
const task = {
|
||||
id: "FN-1",
|
||||
description: "x",
|
||||
column: "in-progress",
|
||||
dependencies: [],
|
||||
steps: [],
|
||||
currentStep: 0,
|
||||
createdAt: "",
|
||||
updatedAt: "",
|
||||
tokenUsage: { totalTokens: 150 },
|
||||
} as any;
|
||||
|
||||
await enforceTaskTokenBudget({
|
||||
store: { updateTask, pauseTask },
|
||||
task,
|
||||
projectSettings: { taskTokenBudget: { soft: 100, hard: 140 } } as any,
|
||||
globalSettings: {} as any,
|
||||
notify,
|
||||
});
|
||||
|
||||
expect(updateTask).toHaveBeenCalled();
|
||||
expect(pauseTask).toHaveBeenCalledWith("FN-1", true, undefined);
|
||||
expect(notify).toHaveBeenCalledWith(expect.objectContaining({ kind: "hard" }));
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user