Repository navigation
FE-1828: Add interview length controls to Brunch - #10053
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
PR SummaryMedium Risk Overview The website persists a Labs toggle and level, renders a five-stop picker and status pill via new Brunch assistant hooks ( Reviewed by Cursor Bugbot for commit 4d1fdc8. Bugbot is set up for automated code reviews on this repo. Configure here. |
232063f to
511e5a7
Compare
f08676c to
3867f58
Compare
Carry an optional question allowance in a version-two contextual user message, read it from the current delivery, and restate it as the agent's one conditional instruction. The eliciting skill says how each level changes questioning and records the level on the `appetite` entity; the context projection keeps submission context out of the model's view of user turns. Without an allowance, requests and guidance are unchanged. Co-authored-by: Kostandin Angjellari <kostandinangjellari@gmail.com>
Add a default-off Interview length Labs setting and a five-stop picker in the composer and Voice dock. Brunch counts completed replies against a per-mode cap, sends the allowance with each submission, shows an estimate from questions left, notes level changes in the transcript, and passes the level to Live without interrupting speech. Petrinaut gains generic `renderComposerStatus`, `renderSystemMessage` and `inputMode` slots. Co-authored-by: Kostandin Angjellari <kostandinangjellari@gmail.com>
Tell the agent that the host's remaining count replaces its own estimate of turns left and to record the level only until the appetite entity has it. Give the library a dependency-free interview-budget entry that owns the levels and the allowance builder, so the website derives its levels, caps and allowance from it. Send Live a quiet note per level change without pending or failed states, drop the note animation, slider hover preview and trigger refocus workaround, and correct the changeset and docs.
Add `--interview-length` to the persona launcher: it turns on the website's Interview length at that level through the panel's storage and records it in `run.json`, so Quick, Standard and Thorough runs of a case can be compared. The transport no longer guesses Voice from a message's source: Voice reports its input mode when it mounts, before it can submit.
The share dropdown renders inside the full editor, which takes over a second under CI load, past Testing Library's one-second default. It failed intermittently on unrelated branches; wait up to five seconds for each step.
Without it, re-hovering the trigger showed the tooltip over the picker's description. Disabling the tooltip remounts the trigger, so restore focus to it after Escape, as #9894 did.
Only the Off note carried the guard; the notes for Quick, Standard, Thorough and Deep reused the startup instruction without it.
Dragging the rail, stepping with the keys or clicking stops set the level at every stop, so the transcript stacked a note per stop and Live got a quiet note per stop. A change with no message since the last note now replaces it, and returning to the earlier level removes it. Live hears the level once per turn: when the person's utterance is finalized or before Brunch's next reply, only if it differs from what Live last heard.
3867f58 to
4d1fdc8
Compare
🌟 Purpose
People can choose how much questioning Brunch does before it wraps up, through an experimental Interview length setting in Chat and Voice. Minutes are an estimate derived from replies remaining, not a timer.
To see it working:
yarn dev:brunch, then enable Use Brunch and Interview length in User settings → Labs.🔍 Changes
submissionContext.interviewBudgetin a version-two contextual user message. Missing or malformed allowances mean Off. Off leaves the request and guidance unchanged; projection keeps submission context out of visible history and model user turns.@hashintel/brunch-agent/interview-budgetowns the allowance schema and builder, including the leaf entry needed by NodeNext Voice server code.This replaces #9894 after the Ledger and website-layout changes. The guidance now uses Ledger
appetiteandassumedclaims rather than retired workpiece headings. Persona runs accept--interview-length quick|standard|thorough|deepand record the choice. The old slider hover-position preview, note animation and trigger-refocus workaround were not carried over; failed quiet Live updates are logged rather than retried or shown as warnings.The assistant-panel reconciliation was conflict-free.
git range-diffmatched every original feature commit after restacking. Brunch still uses the built-in chat: the empty-canvas prompt reaches the same feature-aware submission path as composer text, rather than using the plugin's newonPromptcallback. No chat migration was pulled forward.The PR includes a patch changeset for
@hashintel/petrinaut, a website user guide atapps/petrinaut-website/docs/interview-length.md, and updates to the library assistant guide and Brunch architecture docs. It does not change the Turbo graph.Verification
The following command passed independently on this branch after reconciliation: all 54 tasks passed, exit 0. The website type check covers both browser and NodeNext API projects.
mise exec -- turbo run build test:unit lint:tsc lint:eslint \ --filter @hashintel/petrinaut \ --filter @hashintel/petrinaut-core \ --filter @apps/petrinaut-website \ --filter @hashintel/brunch-agent \ --filter @apps/brunch-agent \ --force --continue=dependencies-successful --output-logs errors-onlyRepository-wide
mise exec -- yarn lint:formatalso passed. Coverage includes envelope bounds and version-one byte equality, Off preserving requests and instructions, malformed allowances, remaining-count guidance, mode-specific caps, counting across wrap-up and reload, level-change note placement, context projection and quiet Voice updates.The combined interview-length/Words empty-canvas regression test is added by the custom-words PR, not by this branch. It mounts the real website/editor/chat path and checks submission context, visible refusal, close/reopen without resubmission and subsequent composer context.
TypeError: isStream is not a functioninDerivedLogger.addduring Brunch logger construction. A fresh forced build of main passed all 29 build tasks, but loading that built application reproduced the identical startup failure. The feature stack changes neither the logger, its build configuration, backend-utils nor the lockfile. Whether to fix this here or separately is not yet decided; no logger/bundler fix is included.🚫 Blocked by
support-desk-staffingpersona at Quick, Standard and Thorough and check observed question counts. Real-model adherence to the Ledger-oriented guidance is not yet verified.