// 输入框里的 `/` 指令(AGUI-3)。只作用于这一次输入,不是开关: // - /先给方案:新会话按「先看方案再执行」建(proposeFirst,服务端在选定方案前拒绝执行类能力); // 在已有会话里发,转成一句"先给方案"的要求(模型按它做,服务端不强制)。 // - /重跑:用同一个目标新开一次会话(已有会话里才有)。 // 旧的「先看方案再执行」开关只是每次新建时的本地状态,没有存进设置;旧会话 scope.proposeFirst 照常生效。 export type AgentCommand = { name: "/先给方案" | "/重跑"; description: string }; export const PROPOSE_FIRST: AgentCommand = { name: "/先给方案", description: "这次先给方案,选定后再执行" }; export const RERUN: AgentCommand = { name: "/重跑", description: "用同一个目标重新开始" }; /** 新会话可用的指令 */ export const NEW_RUN_COMMANDS: AgentCommand[] = [PROPOSE_FIRST]; /** 会话里可用的指令 */ export const RUN_COMMANDS: AgentCommand[] = [PROPOSE_FIRST, RERUN]; /** 拆出开头的指令:「/先给方案 把沙丘收进来」→ { command: "/先给方案", rest: "把沙丘收进来" } */ export function parseCommand( text: string, commands: AgentCommand[] = RUN_COMMANDS, ): { command: AgentCommand["name"] | null; rest: string } { const t = text.trim(); for (const c of commands) if (t === c.name || t.startsWith(`${c.name} `) || t.startsWith(`${c.name}\n`)) return { command: c.name, rest: t.slice(c.name.length).trim() }; return { command: null, rest: t }; } /** 已有会话里发 /先给方案:转成给模型的一句要求 */ export const PROPOSE_FIRST_MESSAGE = "先给出方案让我选,选定前不要执行有副作用的操作。";