patch_artifact
Cambia PEDAZOS de un artefacto ya guardado, sin volver a mandarlo entero. Es la forma normal de editarlo: save_artifact cobra el archivo completo en cada guardado (un artefacto de 100 KB son ~50.000 tokens de salida), un parche cobra lo que cambia.
Cada edit es un reemplazo LITERAL (no es una regex) sobre el HTML guardado:
edits: [{ buscar: "<td>42</td>", reemplazar: "<td>57</td>" }]
Las reglas, que son lo que lo hace seguro:
· Cada `buscar` tiene que aparecer EXACTAMENTE UNA VEZ. Con 0 o con varias no se guarda nada y se te dice cuántas hay: ampliá el fragmento —sumale la línea de arriba o la de abajo— hasta que sea único. Si querés cambiar todas a propósito, mandá todas:true en ese edit.
· Es atómico: si un solo edit no encaja, no se aplica ninguno y no se crea versión.
· Se aplican EN ORDEN sobre el texto en memoria, así que el edit 3 ve lo que hicieron el 1 y el 2.
· Queda como una versión nueva, igual que save_artifact: la anterior sigue en el historial y se puede restaurar.
El texto exacto para `buscar` sale de **get_artifact con buscar="…"**, que devuelve sólo los fragmentos que coinciden con su contexto alrededor: ~800 caracteres en vez de los 107.000 del archivo.
Se parchea el HTML GUARDADO —para un artefacto react, markdown o mermaid, el ya envuelto—, que es exactamente lo que devuelve get_artifact.
Con base_version se exige que la versión viva sea esa: si alguien guardó en el medio no se pisa nada y se te dice cuál es la actual.Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| nota | No | Qué cambió, en una línea. Es lo que se lee en el historial de versiones. | |
| edits | Yes | Los reemplazos, en orden. Hasta 50. | |
| artifact_id | Yes | ID del artefacto a editar | |
| base_version | No | La versión sobre la que calculaste los edits. Si ya no es la viva, se rechaza el parche. | |
| workspace_id | No | UUID del workspace, o su nombre tal como lo dice el usuario ('Acme', 'el personal'). Omitir si el token ya tiene workspace fijo |