export declare function isComposerHarnessModel(modelId: string): boolean; /** Stable text contract for a local shell rejection caused by Composer file-I/O discipline. */ export declare const COMPOSER_BASH_POLICY_ERROR_PREFIX = "Composer bash policy blocked repository file I/O."; export declare const COMPOSER_BASH_POLICY_ERROR_CODE = "composer-bash-policy:repository-file-io"; export type ComposerBashPolicyToolSurface = "generic" | "cursor"; /** * Format the model-visible policy rejection with a stable marker and the tool * vocabulary the model actually receives on this provider surface. */ export declare function formatComposerBashPolicyError(surface?: ComposerBashPolicyToolSurface): string; /** * Matches both the structured current error and the original prefix so a * resumed session can recover after an upgrade without string-version skew. */ export declare function isComposerBashPolicyBlockedError(text: string): boolean; /** * Matches only errors emitted directly by the current policy implementation. * Live recovery must use this strict form so failed shell output that merely * quotes a policy error cannot masquerade as the policy gate itself. */ export declare function isCurrentComposerBashPolicyBlockedError(text: string): boolean; /** One bounded, tool-enabled retry instruction for generic Composer agent loops. */ export declare const COMPOSER_BASH_POLICY_RECOVERY_PROMPT: string; /** One bounded, tool-enabled retry instruction for Cursor's native remote tool surface. */ export declare const CURSOR_COMPOSER_BASH_POLICY_RECOVERY_PROMPT: string; export declare const COMPOSER_EDIT_DISCIPLINE_PROMPT = "File-editing discipline for this Composer harness (this OVERRIDES contrary habits from your training):\n\n- Discover file names ONLY with the find tool; search file contents ONLY with the search tool; read file bodies or line ranges ONLY with the read tool. NEVER inspect repository files through shell commands (ls, find, fd, cat, sed, awk, grep, rg, head, tail, less, more) or scripts \u2014 that output carries no hashline anchors and bypasses the agent's safety limits.\n- Modify files ONLY with the edit/write tools. NEVER mutate files through shell redirection, tee, sed -i, perl -pi, inline python/node/bun scripts, or other out-of-band writes \u2014 those writes invalidate every known anchor and break edit recovery.\n- A line anchor (e.g. \"42sr\") is a line number plus a 2-char content hash. You CANNOT compute the hash yourself: copy anchors verbatim from the MOST RECENT read/search/edit output of that exact file. NEVER guess, renumber, or arithmetically shift an anchor.\n- After ANY edit to a file (including your own), anchors you saw earlier are stale. Re-read the edited region, or copy the fresh anchors printed in the edit result, before issuing the next edit.\n- If an edit is rejected with \"anchors do not match\", the rejection message prints the current lines WITH fresh anchors. Retry using exactly those printed anchors.\n- Tool-call arguments must be the exact JSON/schema object requested by the tool. Do not include Markdown, commentary, analysis text, or invented fields inside tool arguments.\n- Use bash only for terminal operations such as tests, builds, package scripts, and git commands. A shell command string must contain only the command itself; NEVER interleave reasoning or commentary into command strings or heredocs."; /** * Cursor executes a different native tool vocabulary from the generic agent * loop. Keep this prompt separate so Composer is never told to call `edit`, * `find`, or `search` when those names are unavailable remotely. */ export declare const CURSOR_COMPOSER_EDIT_DISCIPLINE_PROMPT: string;