import type { VisualQuestionEntry } from '../adapters/visual/wire.js'; /** * What one gesture would answer an open question (#515). * * The catalogue declares why a question is open as typed conditions, and * ADR 0110 put them on the design step so a host could build the answering * affordance instead of re-deriving it. This is the editor's own use of that * shape: a question row, a menu entry and a count chip all offer the same * verb, and the verb is a lookup over the trigger, never a guess from the * phrasing. A trigger this table does not know yields no verb, and the row * stays what it was: a question a person reads. * * Every verb runs a gesture the surface already has - the connection tool, * the Add-subject form, the properties panel - so what a verb can reach is * exactly what a reviewer can reach by hand, and anything it stages still * lands through the changeset. */ export type QuestionVerb = { /** Arm the connection tool from the subject, kinds narrowed to these. */ readonly kind: 'connect'; readonly label: string; /** Qualified relationship kind ids the trigger names; empty = any. */ readonly kinds: readonly string[]; /** Which end the subject is: `outgoing` draws from it, `incoming` to it. */ readonly direction: 'outgoing' | 'incoming'; } | { /** Open the Add-subject form with this kind preselected. */ readonly kind: 'add'; readonly label: string; /** The palette label of the first kind the trigger names. */ readonly subjectKind: string; } | { /** Select the subject and put the properties panel in front. */ readonly kind: 'describe'; readonly label: string; }; /** * The first actionable condition decides. `opensWhen` requires every * condition to hold, so closing any one of them closes the question, and the * first the table knows is as good a door as any. */ export declare const verbFor: (entry: VisualQuestionEntry) => QuestionVerb | null; /** * The question, ready to paste into an assistant that is not on the socket * (#515, ADR 0151): claude.ai in a tab, a desktop app with no session, any * chat. It carries what the design step would have given an agent - the * phrasing, why it matters, what closes it - and the operations skeleton the * trigger implies, so the answer comes back as a document `apply` accepts * rather than as prose someone has to translate. */ export declare const assistantBrief: (entry: VisualQuestionEntry, subject: { readonly id: string; readonly name: string; } | null) => string;