practice entry points: sidebar filter, practice draft, graph picker

- Sidebar: the three-way kind filter (Teaching/All/Practice, persisted
  in localStorage) above the search; two new-session doors (Teaching →
  /chat/new, Practice → /chat/new?mode=practice); practice rows carry
  the dumbbell badge and 'Practicing…' busy meta.
- Draft: ?mode=practice swaps the copy (title, empty state, 'What do
  you want to practice?') and startDraftSession posts kind:'practice'.
- Graph entry (home composer): teach|practice switch on the stats row's
  left edge (StatsBar leadingSlot); practice mode shows the propositions
  chip that opens the chain table as a picker (its floating bar becomes
  'Practice these' — no delete fence); the picks seed the opening prompt
  ('Propositions from the map:…') while the title stays the typed text.
This commit is contained in:
amosblomqvist
2026-10-04 22:01:42 +03:00
parent 59bf5bf219
commit e76e42f764
9 changed files with 290 additions and 33 deletions
+10 -2
View File
@@ -15,8 +15,16 @@ export const dynamic = "force-dynamic";
* default); the session the first send creates is stamped from it
* server-side (per-session models, owner 2026-09-28).
*/
export default function NewSessionPage() {
export default async function NewSessionPage({
searchParams,
}: {
searchParams: Promise<{ mode?: string }>;
}) {
const { mode } = await searchParams;
return (
<NewSession initialConfigured={slotsConfigured(readSettingsRecord()?.models)} />
<NewSession
initialConfigured={slotsConfigured(readSettingsRecord()?.models)}
mode={mode === "practice" ? "practice" : "teach"}
/>
);
}