feat(FN-2086): merge fusion/fn-2086
This commit is contained in:
@@ -3118,6 +3118,54 @@ describe("HeartbeatMonitor", () => {
|
|||||||
|
|
||||||
const responseText = result.content[0] && "text" in result.content[0] ? result.content[0].text : "";
|
const responseText = result.content[0] && "text" in result.content[0] ? result.content[0].text : "";
|
||||||
expect(responseText).toContain("Created FN-100");
|
expect(responseText).toContain("Created FN-100");
|
||||||
|
expect(result.details).toEqual({ taskId: "FN-100" });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("task_create tracking uses details.taskId instead of regex", async () => {
|
||||||
|
const store = createMockStore();
|
||||||
|
const prefixedTaskStore = createMockTaskStoreForTools({
|
||||||
|
createTask: vi.fn().mockResolvedValue({
|
||||||
|
id: "ABC-999",
|
||||||
|
description: "Follow-up task",
|
||||||
|
dependencies: [],
|
||||||
|
column: "triage",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const monitor = new HeartbeatMonitor({ store, taskStore: prefixedTaskStore, rootDir: "/tmp" });
|
||||||
|
|
||||||
|
const tools = monitor.createHeartbeatTools("agent-001", prefixedTaskStore, "FN-001");
|
||||||
|
await tools[0]!.execute("call-1", { description: "Follow-up task" }, undefined as any, undefined as any, undefined as any);
|
||||||
|
|
||||||
|
expect(prefixedTaskStore.logEntry).toHaveBeenCalledWith(
|
||||||
|
"ABC-999",
|
||||||
|
"Created by agent agent-001 during heartbeat run",
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("task_create tracking handles missing details gracefully", async () => {
|
||||||
|
const store = createMockStore();
|
||||||
|
const missingDetailsTaskStore = createMockTaskStoreForTools({
|
||||||
|
createTask: vi.fn().mockResolvedValue({
|
||||||
|
id: undefined,
|
||||||
|
description: "Follow-up task",
|
||||||
|
dependencies: [],
|
||||||
|
column: "triage",
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
const monitor = new HeartbeatMonitor({ store, taskStore: missingDetailsTaskStore, rootDir: "/tmp" });
|
||||||
|
|
||||||
|
const tools = monitor.createHeartbeatTools("agent-001", missingDetailsTaskStore, "FN-001");
|
||||||
|
const result = await tools[0]!.execute("call-1", { description: "Follow-up task" }, undefined as any, undefined as any, undefined as any);
|
||||||
|
|
||||||
|
expect(result).toBeDefined();
|
||||||
|
expect(missingDetailsTaskStore.logEntry).toHaveBeenCalledWith(
|
||||||
|
"unknown",
|
||||||
|
"Created by agent agent-001 during heartbeat run",
|
||||||
|
undefined,
|
||||||
|
undefined,
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("logs agent link on created task", async () => {
|
it("logs agent link on created task", async () => {
|
||||||
|
|||||||
@@ -1421,11 +1421,7 @@ export class HeartbeatMonitor {
|
|||||||
execute: async (id: string, params: Static<typeof taskCreateParams>, signal, onUpdate, ctx) => {
|
execute: async (id: string, params: Static<typeof taskCreateParams>, signal, onUpdate, ctx) => {
|
||||||
const result = await baseCreateTool.execute(id, params, signal, onUpdate, ctx);
|
const result = await baseCreateTool.execute(id, params, signal, onUpdate, ctx);
|
||||||
|
|
||||||
// Extract created task ID from the response text ("Created FN-XXX: ...")
|
const createdTaskId = (result.details as { taskId?: string })?.taskId ?? "unknown";
|
||||||
const firstContent = result.content[0];
|
|
||||||
const responseText = firstContent && "text" in firstContent ? firstContent.text : "";
|
|
||||||
const taskIdMatch = responseText.match(/Created (FN-\d+|KB-\d+|\w+-\d+):/);
|
|
||||||
const createdTaskId = taskIdMatch?.[1] ?? "unknown";
|
|
||||||
|
|
||||||
// Log agent link on the created task with run context for correlation
|
// Log agent link on the created task with run context for correlation
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -443,7 +443,7 @@ export function createTaskCreateTool(store: TaskStore): ToolDefinition {
|
|||||||
type: "text" as const,
|
type: "text" as const,
|
||||||
text: `Created ${task.id}: ${params.description}${deps}`,
|
text: `Created ${task.id}: ${params.description}${deps}`,
|
||||||
}],
|
}],
|
||||||
details: {},
|
details: { taskId: task.id },
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user