// 输入框里的 `/` 指令。只有一个,只作用于这一次输入,不是开关: // - /先给方案:新会话按「先看方案再执行」建(proposeFirst,服务端在选定方案前拒绝执行类能力); // 在已有会话里发,转成一句"先给方案"的要求(模型按它做,服务端不强制)。 // 原来的 `/重跑` 改成会话顶部的「重新运行」按钮(结束后才有):藏在指令里很少有人发现。 // 旧会话 scope.proposeFirst 照常生效。 export type AgentCommand = { name: "/先给方案"; description: string }; export const PROPOSE_FIRST: AgentCommand = { name: "/先给方案", description: "这次先给方案,选定后再执行" }; /** 新会话和会话里可用的指令(同一份) */ export const COMMANDS: AgentCommand[] = [PROPOSE_FIRST]; /** 拆出开头的指令:「/先给方案 把沙丘收进来」→ { command: "/先给方案", rest: "把沙丘收进来" } */ export function parseCommand( text: string, commands: AgentCommand[] = 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 = "先给出方案让我选,选定前不要执行有副作用的操作。";