/** * A run's SHORT JOB TITLE (`AgentSession.title`; api-types 0.113.0, operator ruling 2026-10-12: crew * derives the title, every skin shows the same one). Pure and deterministic, derived at DTO assembly * from what the run already records (`problem`), so it costs nothing on `GET /runs`, survives a * restart and never needs a model call. * * The rules, in order: * 1. Only the operator's words: an attached studio context pack (`---` + `[studio context pack …]`) * and the engine's ` ||| ` step scaffold are cut off. * 2. Runs crew words itself: an onboarding run reads "Set up "; a chat's ask run (its problem * is the chat-scope statement) reads "A conversation about ". * 3. The first sentence or clause (a stop is `.`/`!`/`?`/`;` followed by a space, a line break, or a * `:` after more than one word: "Recon: survey …" keeps its label). * 4. Still longer than {@link JOB_TITLE_MAX}: cut at the first aside (" — ", ", meaning", " when ", * " because ", " (" …) that leaves a real headline (a clause end: no ellipsis); then, if still too * long, at a word boundary with an ellipsis, the ellipsis inside the budget. * 5. A lowercase first word is capitalised unless it looks like an identifier (`repo-learn`). * * The full problem stays on the run (`problem`); a skin shows it on hover. */ /** The longest title, in characters (a headline that fits one or two lines of a list row). */ export declare const JOB_TITLE_MAX = 60; export declare function jobTitle(problem: string | null | undefined): string; //# sourceMappingURL=job-title.d.ts.map