mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-08-30 17:14:40 +08:00
Merge pull request #8615 from Kilo-Org/deadpan-agenda
fix(vscode): sync mode picker from assistant messages too
This commit is contained in:
@@ -26,13 +26,22 @@ describe("resolveSessionAgent", () => {
|
||||
expect(result).toBe("code")
|
||||
})
|
||||
|
||||
it("ignores assistant messages", () => {
|
||||
it("returns the latest assistant agent when it is last", () => {
|
||||
const result = resolveSessionAgent(
|
||||
[makeMessage({ role: "assistant", agent: "code" }), makeMessage({ agent: "plan" })],
|
||||
[makeMessage({ agent: "plan" }), makeMessage({ role: "assistant", agent: "code" })],
|
||||
new Set(["plan", "code"]),
|
||||
)
|
||||
|
||||
expect(result).toBe("plan")
|
||||
expect(result).toBe("code")
|
||||
})
|
||||
|
||||
it("ignores unknown agent names on assistant messages", () => {
|
||||
const result = resolveSessionAgent(
|
||||
[makeMessage({ agent: "code" }), makeMessage({ role: "assistant", agent: "task" })],
|
||||
new Set(["code"]),
|
||||
)
|
||||
|
||||
expect(result).toBe("code")
|
||||
})
|
||||
|
||||
it("ignores unknown agent names", () => {
|
||||
@@ -49,9 +58,18 @@ describe("resolveSessionAgent", () => {
|
||||
expect(result).toBeUndefined()
|
||||
})
|
||||
|
||||
it("returns undefined when no valid user agent exists", () => {
|
||||
it("returns agent from assistant when no user has agent", () => {
|
||||
const result = resolveSessionAgent(
|
||||
[makeMessage({ role: "assistant", agent: "code" }), makeMessage({ agent: undefined })],
|
||||
[makeMessage({ agent: undefined }), makeMessage({ role: "assistant", agent: "code" })],
|
||||
new Set(["code"]),
|
||||
)
|
||||
|
||||
expect(result).toBe("code")
|
||||
})
|
||||
|
||||
it("returns undefined when no message has a valid agent", () => {
|
||||
const result = resolveSessionAgent(
|
||||
[makeMessage({ agent: undefined }), makeMessage({ role: "assistant", agent: undefined })],
|
||||
new Set(["code"]),
|
||||
)
|
||||
|
||||
|
||||
@@ -2,9 +2,7 @@ import type { Message } from "../types/messages"
|
||||
|
||||
export function resolveSessionAgent(messages: Message[], names: Set<string>): string | undefined {
|
||||
for (let i = messages.length - 1; i >= 0; i--) {
|
||||
const msg = messages[i]
|
||||
if (msg.role !== "user") continue
|
||||
const name = msg.agent?.trim()
|
||||
const name = messages[i]?.agent?.trim()
|
||||
if (!name) continue
|
||||
if (!names.has(name)) continue
|
||||
return name
|
||||
|
||||
@@ -857,11 +857,12 @@ export const SessionProvider: ParentComponent = (props) => {
|
||||
return [...msgs, message]
|
||||
})
|
||||
|
||||
if (message.role === "user") {
|
||||
const agent = message.agent?.trim()
|
||||
if (agent && agentNames().has(agent)) {
|
||||
setStore("agentSelections", message.sessionID, agent)
|
||||
}
|
||||
// Sync mode picker from any message role (user or assistant).
|
||||
// agentNames() already excludes subagent/hidden agents, so subtask
|
||||
// assistant messages (e.g. "task" agent) are silently ignored.
|
||||
const agent = message.agent?.trim()
|
||||
if (agent && agentNames().has(agent)) {
|
||||
setStore("agentSelections", message.sessionID, agent)
|
||||
}
|
||||
|
||||
if (message.parts && message.parts.length > 0) {
|
||||
|
||||
Reference in New Issue
Block a user