Let bots ask multiple-choice questions before acting

ask_user puts up to six questions on one card (radios for one pick,
checkboxes for several, an optional typed Other) as a [question:ID] chip.
The user's answers are checked against the questions, stored in
bot_questions and sent to the bot as their chat message; Skip says so.
Offered in chat replies and user-started tasks, never in routines, hook
calls or chatroom sessions.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-28 11:10:23 +01:00
co-authored by Claude Opus 5.5
parent 07f87ce4ea
commit d7dfe0e78e
45 changed files with 1448 additions and 6 deletions
+28
View File
@@ -0,0 +1,28 @@
type Params = {
id: number | string;
};
/**
* How a bot names questions it asked the user: `[question:4]`. The chat
* turns it into a link (`linkComputerRefs`) that renders as a chip opening
* the card the user answers them in.
*/
export default function botQuestionRef({ id }: Params) {
return `[question:${id}]`;
}
/**
* The link target a question ref becomes, e.g. `#question-4`.
*/
export const BotQuestionRefHrefPrefix = "#question-";
/**
* The id in a question ref's link target, or null.
*/
export function botQuestionRefId({ href }: { href?: string | null }) {
if (!href?.startsWith(BotQuestionRefHrefPrefix)) return null;
const id = Number(href.slice(BotQuestionRefHrefPrefix.length));
return Number.isInteger(id) && id > 0 ? id : null;
}