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>
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import * as React from 'react';
|
|
|
|
const RadioGroupContext = React.createContext<{
|
|
value: string | undefined;
|
|
onValueChange: (v: string) => void;
|
|
disabled?: boolean;
|
|
} | null>(null);
|
|
|
|
interface RadioGroupProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
value?: string;
|
|
onValueChange?: (value: string) => void;
|
|
disabled?: boolean;
|
|
}
|
|
|
|
const RadioGroup = React.forwardRef<HTMLDivElement, RadioGroupProps>(
|
|
({ className, value, onValueChange, disabled, ...props }, ref) => {
|
|
const ctx = React.useMemo(() => ({ value, onValueChange: onValueChange ?? (() => {}), disabled }), [value, onValueChange, disabled]);
|
|
return (
|
|
<RadioGroupContext.Provider value={ctx}>
|
|
<div
|
|
ref={ref}
|
|
role="radiogroup"
|
|
className={className}
|
|
{...props}
|
|
/>
|
|
</RadioGroupContext.Provider>
|
|
);
|
|
},
|
|
);
|
|
RadioGroup.displayName = 'RadioGroup';
|
|
|
|
interface RadioGroupItemProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
value: string;
|
|
}
|
|
|
|
const RadioGroupItem = React.forwardRef<HTMLInputElement, RadioGroupItemProps>(
|
|
({ className, value, ...props }, ref) => {
|
|
const ctx = React.useContext(RadioGroupContext);
|
|
if (!ctx) return <input ref={ref} type="radio" className={className} value={value} {...props} />;
|
|
const checked = ctx.value === value;
|
|
return (
|
|
<input
|
|
ref={ref}
|
|
type="radio"
|
|
checked={checked}
|
|
disabled={ctx.disabled}
|
|
onChange={() => ctx.onValueChange(value)}
|
|
className={className}
|
|
{...props}
|
|
/>
|
|
);
|
|
},
|
|
);
|
|
RadioGroupItem.displayName = 'RadioGroupItem';
|
|
|
|
export { RadioGroup, RadioGroupItem };
|