v2.3.0-sampling-params-ask-user: agent sampling params, ask_user_input in CoderPane, UX polish

Add top_p/top_k/min_p/presence_penalty to AGENTS.md frontmatter and thread
through inference (agents.ts parser → Agent type → stream-phase → sentinel
summaries). Null means omit from request body, preserving provider defaults.

Wire ask_user_input interactive card into both BooCoder frontends: the
CoderPane in BooChat's SPA (CoderMessageList now renders AskUserInputCard
instead of ToolCallLine for ask_user_input tool calls) and the standalone
coder SPA (MessageBubble + new AskUserInputCard + shadcn ui primitives).

Additional fixes: SessionLandingPage uses ChatInput with slash-command
support and lazy chat creation; Session.tsx hydrate-race fix for empty pane
promotion; AgentPicker wider dropdown with line-clamp; ModelPicker min-width;
Textarea converted to forwardRef; Recon agent added to AGENTS.md; codecontext
host port exposed in docker-compose.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-26 21:02:21 +00:00
parent 31e1b32be1
commit 792bbb9da3
21 changed files with 721 additions and 79 deletions

View File

@@ -1,4 +1,4 @@
import { useCallback, useEffect, useState } from 'react';
import { useCallback, useEffect, useRef, useState } from 'react';
import {
Link,
useLocation,
@@ -75,6 +75,19 @@ function SessionInner({ sessionId }: { sessionId: string }) {
});
const { chats, renameChat } = chatsHook;
// v2.3: fix hydrate race — if workspace hydrate clobbers the chat-pane
// promotion (panes[0] is still 'empty' while an open chat exists),
// re-promote immediately. Guarded by a ref to avoid infinite loops.
const promotedRef = useRef(false);
useEffect(() => {
if (panes.length !== 1 || panes[0]?.kind !== 'empty') return;
const openChat = chats.find((c) => c.status === 'open');
if (!openChat) return;
if (promotedRef.current) return;
promotedRef.current = true;
initializeFirstChatIfEmpty(openChat.id);
}, [panes, chats, initializeFirstChatIfEmpty]);
// v1.8 Level 1: branch indicator. Polls every 30s; server caches the same
// span so back-to-back loads are cheap. Returns null until the first fetch
// resolves or if the project isn't a git repo.