mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-11 17:26:57 +02:00
Repris du pré-vol d'OpenFox (tool-preflight, 2.0.154). Un write sur un fichier existant jamais lu était refusé par le tracker… une fois tout le fichier généré. builder.md demande des fichiers écrits en entier : un refus pouvait coûter des minutes de décodage pour rien. - Les schémas write, edit, mem_add et mem_edit annoncent le chemin AVANT le contenu. Une map Go sort ses clés par ordre alphabétique : le modèle, qui suit l'ordre du schéma, déroulait tout le contenu avant le chemin. L'interface nomme aussi le fichier dès le début de la frappe. - Dès que le chemin d'un write/edit est complet dans le flux, les gardes du mode Code (fichier lu, chemin permis) sont vérifiées. Refus : la génération est coupée, l'appel réduit à son chemin entre dans l'historique avec le refus pour résultat, et le modèle repart (lire le fichier d'abord). Rien n'est écrit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
51 lines
1.3 KiB
Go
51 lines
1.3 KiB
Go
package loki
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
)
|
|
|
|
// orderedProps : propriétés d'un schéma d'outil sérialisées DANS L'ORDRE donné.
|
|
//
|
|
// Une map Go sort ses clés par ordre alphabétique : write annonçait content
|
|
// AVANT file, edit new avant old. Le modèle écrit ses arguments dans l'ordre
|
|
// du schéma — il déroulait donc tout le contenu d'un fichier avant d'en donner
|
|
// le chemin. Le chemin d'abord permet de refuser en plein flux une écriture
|
|
// interdite (fichier non lu) au lieu d'attendre la fin, et à l'interface de
|
|
// nommer le fichier dès le début de la frappe (repris d'OpenFox, 2.0.154).
|
|
type orderedProps []propEntry
|
|
|
|
type propEntry struct {
|
|
Key string
|
|
Schema map[string]any
|
|
}
|
|
|
|
func (o orderedProps) MarshalJSON() ([]byte, error) {
|
|
var b bytes.Buffer
|
|
b.WriteByte('{')
|
|
for i, p := range o {
|
|
if i > 0 {
|
|
b.WriteByte(',')
|
|
}
|
|
k, err := json.Marshal(p.Key)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
v, err := json.Marshal(p.Schema)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
b.Write(k)
|
|
b.WriteByte(':')
|
|
b.Write(v)
|
|
}
|
|
b.WriteByte('}')
|
|
return b.Bytes(), nil
|
|
}
|
|
|
|
// preflightRefusal : write/edit refusé pendant le flux, dès que son chemin est
|
|
// connu (voir runChat). msg vide = chemin vérifié et accepté.
|
|
type preflightRefusal struct {
|
|
name, id, file, msg string
|
|
}
|