/** * Referências de artefato dentro do input de uma tool. * * Um nó de tool é declarado no PLANO, antes de qualquer execução. O que ele * precisa escrever, porém, só existe DEPOIS que os nós anteriores produziram * seus artefatos. Sem uma forma de referenciar isso, um nó de tool só serve * para entrada constante — e é por isso que o caminho seguro existia sem * ninguém passar por ele em produção. * * A ponte é um marcador declarativo no input, resolvido pelo runtime * imediatamente antes da chamada: * * { file: 'out/api.md', content: { $artifact: 'architecture' } } * { file: 'out/run.md', content: { $deliverable: true } } * * Resolução DETERMINÍSTICA e sem modelo: é substituição de valor, não * interpretação. Referência a nó inexistente é erro, nunca string vazia — * escrever um arquivo vazio e chamar isso de entrega é a falha silenciosa que * a verificação por evidência existe para impedir. * * ## O limite que não se afrouxa * * `code.execute` NÃO aceita marcador nenhum. Substituir saída de modelo dentro * de código que vai ser executado é injeção com outro nome, e o fato de a * sandbox isolar filesystem e processo não torna o código executado inócuo: * ele ainda tem rede, e ainda decide o que devolver para a verificação. Quem * precisa levar artefato para dentro de um script grava o arquivo com * `fs.write` e lê de lá, dentro da zona permitida. */ /** Marcador de artefato de um nó específico. */ export interface ArtifactRefMarker { $artifact: string; } /** Marcador do documento único com tudo que o run produziu. */ export interface DeliverableMarker { $deliverable: true; } /** Como o runtime resolve cada marcador. Injetado pelo Orchestrator. */ export interface RefResolution { /** Conteúdo textual do artefato daquele nó. Lança quando o nó não produziu nada. */ artifact(nodeId: string): string; /** Documento único com os artefatos do run. */ deliverable(): string; } /** * Tools que recusam marcador em QUALQUER campo do input. Regra por tool, não * por campo: um campo esquecido numa allowlist vira exatamente o buraco que a * regra tentava fechar. */ export declare const REF_FORBIDDEN_TOOLS: Set; /** True quando o input carrega algum marcador (usado para recusar antes de resolver). */ export declare function hasRefMarker(input: unknown, depth?: number): boolean; /** * Substitui os marcadores do input pelos valores reais. Nunca muda a forma do * input: só troca folhas. Input sem marcador volta idêntico. */ export declare function resolveToolInput(toolId: string, input: unknown, res: RefResolution): unknown; //# sourceMappingURL=input-refs.d.ts.map