/** * Manifesto de arquivos: transformar a saída do agente em arquivos de verdade. * * O Blueprint Engine (`cli/blueprint.ts`) já definia o contrato de * materialização — declare a árvore, escreva cada arquivo completo, zero stub — * mas só em `--prompt-only`, isto é, num texto para a pessoa colar em outra * ferramenta. Dentro do runtime, o contrato não existia: o agente entregava * código dentro de um artefato de texto, e o texto ia para o content store. * * Este módulo é o parser determinístico daquele contrato. Ele não interpreta * intenção: reconhece um marcador explícito e o bloco de código que vem depois. * * ## Formato reconhecido, e só ele * * ### FILE: src/routes/pagination.ts * ```ts * export function paginate() { ... } * ``` * * O marcador aceita qualquer nível de heading, negrito ou comentário HTML — * variações que o mesmo modelo produz entre uma resposta e outra. O que NÃO é * aceito é inferir caminho de outro lugar (do texto ao redor, do nome da * linguagem na cerca). Adivinhar o destino de um arquivo que vai ser gravado é * o tipo de heurística cujo erro só aparece depois de gravado. * * ## Arquivo que contém cerca * * O bloco termina na primeira cerca de fechamento com pelo menos o mesmo * comprimento da de abertura e sem info string — a convenção padrão de * markdown. Um arquivo `.md` cujo conteúdo tem ``` precisa, portanto, ser * aberto com ````, exatamente como em qualquer documento markdown aninhado. * Sem a convenção, o arquivo sairia cortado na primeira cerca interna, e o * corte seria silencioso — por isso a cerca não fechada é recusada em vez de * engolir o resto da resposta. * * ## Tudo ou nada * * A validação roda sobre o manifesto INTEIRO antes de qualquer escrita. * Materialização parcial que se declara concluída é a dishonestidade que a * verificação por evidência existe para impedir: o usuário veria "6 arquivos * escritos" sem saber que 3 foram recusados. */ /** Teto de arquivos por manifesto. Acima disso não é uma entrega, é um dump. */ export declare const MAX_FILES = 60; /** Teto por arquivo. */ export declare const MAX_FILE_BYTES: number; /** Teto do manifesto inteiro. */ export declare const MAX_TOTAL_BYTES: number; export interface ManifestFile { /** Caminho relativo declarado pelo agente, normalizado para separador posix. */ path: string; content: string; /** Linguagem da cerca, quando declarada. Informativo: não decide nada. */ language?: string; } export interface ManifestParse { files: ManifestFile[]; /** Marcadores encontrados sem bloco de código utilizável depois. */ orphanMarkers: string[]; } /** * Extrai os arquivos declarados. Determinístico e tolerante ao que não * reconhece: texto entre marcadores é ignorado, não vira conteúdo de arquivo. */ export declare function parseFileManifest(text: string): ManifestParse; export interface ManifestRejection { path: string; reason: string; } export interface ManifestValidation { accepted: ManifestFile[]; rejected: ManifestRejection[]; } /** * Valida o manifesto inteiro ANTES de escrever qualquer coisa. * * Caminho é validado aqui além da checagem de zona da `ToolRegistry`: aquela * responde "está dentro da sandbox?", esta responde "é um caminho que o agente * tinha o direito de declarar?". Um caminho absoluto que por acaso caia dentro * da zona ainda é um agente decidindo onde gravar. */ export declare function validateManifest(parsed: ManifestParse): ManifestValidation; //# sourceMappingURL=file-manifest.d.ts.map