/** * A model denying it can do something it can. * * Asked to open a local page and log in, qwen3-coder answered "I cannot visit websites or perform * login actions. I don't have the ability to access external URLs, submit forms, or handle * authentication" — with the browser tool enabled, and its description saying in as many words that * it opens a url, fills form fields and clicks. Told there was a browser right there, it said "I * can't directly access or control the built-in browser in this environment", and then, asked about * vision, "I don't have the ability to visually perceive or interpret visual content". * * Every one of those is false about this program. * * ## Why it happens, and why an instruction does not fix it * * Two causes, and they need different answers. * * A truncated prompt is the common one: the tools are described at the top, so a window too small to * hold them means the model is answering about a toolset it was never shown. In that case the denial * is honest from where it is standing, and the fix is the window — nothing said here helps. * * The other is a habit in the weights. Models distilled from assistants that genuinely could not * browse learned to say so, and the phrasing survives being handed a browser. That is the same shape * as the identity problem — a fact about this program that a language model was asked to recall * instead of being told — and it is answered the same way: KONECK knows which tools it passed, so it * does not need the model's opinion on whether they exist. * * ## What this does about it * * Only what the evidence supports. A denial about a tool that IS enabled produces a correction to * the model and a note to the reader saying which tool exists and what it does. A denial about a * tool that is genuinely absent produces nothing, because then the model is right. */ export interface Capability { /** The tool that makes the denial false. */ tool: string; /** What is being denied, in the reader's words. */ what: string; /** What the tool actually does, for the correction. */ does: string; patterns: readonly RegExp[]; } export declare const CAPABILITIES: readonly Capability[]; /** Whether a denial is about what the tools can do, rather than about permission or state. */ export declare function isCapabilityDenial(text: string): boolean; /** * The capabilities a reply denies that this run actually has. * * `have` is the tool names passed to the model on this turn, so a tool genuinely withheld — lean * mode deferred it, the workspace is read-only, no browser is installed — produces nothing. A * denial that happens to be true must never be contradicted. */ export declare function deniedCapabilities(text: string, have: readonly string[]): readonly Capability[]; /** What the model is told, so it does the thing rather than being informed it could have. */ export declare function capabilityCorrection(denied: readonly Capability[]): string; /** * What the reader is told. * * Named as KONECK's own note, the way the identity answer is, because it is a fact about this * program rather than the model's view of itself — and because somebody who has just been told the * agent cannot browse needs to know which of the two to believe. * * ## It does not claim an outcome it does not have * * The first version ended "KONECK has told it otherwise and asked again", written before the retry * had happened. On a machine whose window was truncating the prompt the retry came back empty, so * what the reader got was a claim that something had been asked again, no second answer, and a * finished run — reported as "koneck says they asked again, but nothing is running at all". Which * was fair: the sentence described an intention as though it were a result. * * So the wording follows what is actually known at the point it is said, and the outcome is * reported separately when there is one. */ export declare function capabilityNotice(denied: readonly Capability[], model: string, opts?: { retrying: boolean; }): string; /** * When the window is why it said that, and correcting it would be noise. * * The tools are described at the top of the prompt, so a window too small to hold them means the * model is answering about a toolset it was never shown — and its denial is honest from where it is * standing. Arguing with it then is worse than useless: the correction is one more message on a * prompt already being cut, and the retry comes back empty. What the reader needs is the number and * the fix, not a second attempt that cannot work. */ export declare function deniedBecauseNoRoom(denied: readonly Capability[], model: string, floorTokens: number, limitTokens: number, howToFix: string): string; //# sourceMappingURL=capability-claims.d.ts.map