mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-24 15:38:12 +02:00
Mode Code : une écriture interdite est refusée dès son chemin, pas après le fichier
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>
This commit is contained in:
1 parent
15495431fc
commit
b955181bb9
3 files changed
+206
-19
No files matched your search
@@ -0,0 +1,50 @@
|
||||
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
|
||||
}
|
||||
Reference in new issue
Block a user