feat(editeur): #93 edition inline — Editer/Forge remplacent la vue lecture
Le conteneur d'edition (#editor-container, CodeMirror ou iframe Forge) est deplace dans la zone de contenu du document (#content-area ou pane active) au lieu de l'overlay plein ecran : le mode edition remplace la vue lecture. L'overlay reste monte (transparent, pointer-events: none) car le ruban d'edition mobile y est ancre ; il ne sert plus que de repli quand la cible n'est pas le document affiche. Garde-fou dans renderFile() pour liberer proprement la session (destroy CodeMirror/Yjs, retrait de l'iframe Forge) ; forge-close passe par closeEditor() ; cache d'onglet invalide au retour en lecture. Assistant IA : app_context.editing annonce le document en cours d'edition (frontend bookslm.js + backend bookslm.py), et chaque ecriture d'outil (edit_file, append_to_file, create_file, restore_backup) recharge le document affiche (obsigate:file-written) — tampon CodeMirror remplace avec auto-save neutralisee, parent-reload pour l'iframe Forge, re-rendu de la vue lecture sinon. Tests : tests/frontend/editor-inline.test.mjs (19), tests/test_bookslm.py::TestGeneralPrompt (3 nouveaux). Fiche : docs/features/editeur-inline.md.
This commit is contained in:
@@ -666,6 +666,45 @@ class TestGeneralPrompt:
|
||||
assert "notes/recent.md" in prompt
|
||||
assert "auth" in prompt
|
||||
|
||||
def test_general_prompt_includes_edited_document(self):
|
||||
"""#93 — the live edition session is announced to the assistant."""
|
||||
from backend.bookslm import build_general_system_prompt
|
||||
|
||||
prompt = build_general_system_prompt(
|
||||
["Alpha"],
|
||||
app_context={
|
||||
"current_path": "notes/a.md",
|
||||
"editing": {"vault": "Alpha", "path": "notes/a.md", "surface": "editor"},
|
||||
},
|
||||
)
|
||||
|
||||
assert "Document en cours d'édition" in prompt
|
||||
assert "notes/a.md" in prompt
|
||||
assert "edit_file" in prompt
|
||||
|
||||
def test_general_prompt_marks_forge_surface(self):
|
||||
"""#93 — Forge (iframe) is distinguished from the CodeMirror editor."""
|
||||
from backend.bookslm import build_general_system_prompt
|
||||
|
||||
prompt = build_general_system_prompt(
|
||||
["Alpha"],
|
||||
app_context={"editing": {"vault": "Alpha", "path": "notes/a.md", "surface": "forge"}},
|
||||
)
|
||||
|
||||
assert "dans Forge" in prompt
|
||||
assert "Document en cours d'édition" in prompt
|
||||
|
||||
def test_general_prompt_ignores_malformed_editing(self):
|
||||
"""#93 — a malformed `editing` payload must not break the prompt."""
|
||||
from backend.bookslm import build_general_system_prompt
|
||||
|
||||
prompt = build_general_system_prompt(
|
||||
["Alpha"],
|
||||
app_context={"editing": {"vault": "Alpha"}},
|
||||
)
|
||||
|
||||
assert "Document en cours d'édition" not in prompt
|
||||
|
||||
def test_general_prompt_without_app_context_is_unchanged(self):
|
||||
"""No context → no app-context block (backwards compatible)."""
|
||||
from backend.bookslm import build_general_system_prompt
|
||||
|
||||
Reference in New Issue
Block a user