web+coder: segmented per-agent slash menu (agent commands + skills) + cross-agent skill execution
Coder / menu now shows two groups: the active agent's commands first (manifest + live ACP available_commands), BooCoder skills second. SlashCommandPicker gains an opt-in groups prop (flat items path unchanged -> BooChat byte-identical, parity verified); ChatInput takes slashGroups; CoderPane builds the groups. Skills run under the selected agent: coder skill_invoke accepts a provider and, when external, injects the server-side skill body into a dispatched task instead of native inference. Also folds in the initial-chat skill fix (handleLandingSkill: create chat -> assign to pane -> invoke, same transition as a text send) that resolves the landing-page blank screen. BooChat slash menu + skill invocation unchanged. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -332,18 +332,32 @@ export const api = {
|
||||
request<CoderMessageWire[]>(
|
||||
`/api/coder/sessions/${sessionId}/messages${chatId ? `?chat_id=${encodeURIComponent(chatId)}` : ''}`,
|
||||
),
|
||||
skillInvoke: (sessionId: string, paneId: string, skillName: string, userMessage: string | null) =>
|
||||
skillInvoke: (
|
||||
sessionId: string,
|
||||
paneId: string,
|
||||
skillName: string,
|
||||
userMessage: string | null,
|
||||
// v2.5.9: when the active provider is external, the skill runs under that
|
||||
// agent (body injected into a dispatched task) → response carries task_id.
|
||||
config?: { provider?: string; model?: string; mode_id?: string; thinking_option_id?: string },
|
||||
) =>
|
||||
request<{
|
||||
user_message_id: string;
|
||||
assistant_message_id: string;
|
||||
synth_assistant_id: string;
|
||||
tool_message_id: string;
|
||||
assistant_message_id?: string;
|
||||
synth_assistant_id?: string;
|
||||
tool_message_id?: string;
|
||||
task_id?: string;
|
||||
dispatched?: boolean;
|
||||
}>(`/api/coder/sessions/${sessionId}/skill_invoke`, {
|
||||
method: 'POST',
|
||||
body: JSON.stringify({
|
||||
pane_id: paneId,
|
||||
skill_name: skillName,
|
||||
user_message: userMessage,
|
||||
...(config?.provider ? { provider: config.provider } : {}),
|
||||
...(config?.model ? { model: config.model } : {}),
|
||||
...(config?.mode_id ? { mode_id: config.mode_id } : {}),
|
||||
...(config?.thinking_option_id ? { thinking_option_id: config.thinking_option_id } : {}),
|
||||
}),
|
||||
}),
|
||||
// Queue a new-file create from the RightRail browser → BooCoder
|
||||
|
||||
Reference in New Issue
Block a user