feat: tool MCP create_entite (concept, composantLogiciel, service)
Comble le manque revele par le test Phase 3 : creation autonome d'entites de la couche connaissance/technique, la ou seul le pilotage etait creable via MCP. Tool generique cadre : type valide contre liste blanche, dossier resolu via trilium_ids.json (pas d'ID en dur), garde-fou anti-doublon, definition posee seulement pour les concepts. Passe le serveur a 20 tools. Teste de bout en bout.
This commit is contained in:
+49
-1
@@ -248,6 +248,21 @@ TOOLS = [
|
||||
"required": ["source_id", "nom", "cible_id"],
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "create_entite",
|
||||
"description": "Cree une entite de la couche connaissance/technique. type : concept, composantLogiciel ou service. Range automatiquement dans le bon dossier. definition (optionnelle) n est posee que pour les concepts (les fait remonter dans le briefing). Garde-fou anti-doublon sur le titre.",
|
||||
"inputSchema": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"type": {"type": "string", "description": "concept | composantLogiciel | service"},
|
||||
"projet": {"type": "string"},
|
||||
"titre": {"type": "string"},
|
||||
"contenu": {"type": "string"},
|
||||
"definition": {"type": "string", "description": "concept uniquement"},
|
||||
},
|
||||
"required": ["type", "projet", "titre"],
|
||||
},
|
||||
},
|
||||
{
|
||||
"name": "move_note",
|
||||
"description": "Deplace une note d un parent vers un autre (3 args : note_id, ancien_parent_id, nouveau_parent_id). Gere les clones.",
|
||||
@@ -483,6 +498,39 @@ def tool_update_note(note_id, contenu, format="markdown"):
|
||||
update_note_content(note_id, body)
|
||||
return {"id": note_id, "titre": note.get("title", ""), "format": format, "status": "mis a jour"}
|
||||
|
||||
def tool_create_entite(type, projet, titre, contenu=None, definition=None):
|
||||
"""Cree une entite de la couche connaissance/technique (concept, composantLogiciel,
|
||||
service). Le type est valide contre une liste blanche ; le dossier cible est resolu
|
||||
via trilium_ids.json. Garde-fou anti-doublon sur le titre dans le dossier cible.
|
||||
La permission projet est comportementale (le tool accepte tout projet)."""
|
||||
import json, os
|
||||
from trilium_api import create_note, get_note_id, set_label, find_note_by_title
|
||||
MAPPING = {
|
||||
"concept": "Concepts",
|
||||
"composantLogiciel": "EnvironnementTechnique",
|
||||
"service": "EnvironnementTechnique",
|
||||
}
|
||||
if type not in MAPPING:
|
||||
return {"error": "Type non supporte : %s. Types valides : %s" % (type, ", ".join(MAPPING.keys()))}
|
||||
with open(os.path.expanduser("~/App/Context_continuity/trilium_ids.json")) as f:
|
||||
ids = json.load(f)
|
||||
dossier_cle = MAPPING[type]
|
||||
if dossier_cle not in ids:
|
||||
return {"error": "Dossier cible absent de trilium_ids.json : %s" % dossier_cle}
|
||||
parent_id = ids[dossier_cle]
|
||||
# Anti-doublon : refuse si une note du meme titre existe deja dans le dossier cible
|
||||
existant = find_note_by_title(titre, parent_id)
|
||||
if existant:
|
||||
return {"error": "Doublon : une note '%s' existe deja dans le dossier (%s)" % (titre, existant)}
|
||||
body = contenu if contenu else " "
|
||||
res = create_note(parent_id, titre, content=body)
|
||||
nid = get_note_id(res)
|
||||
set_label(nid, "type", type)
|
||||
set_label(nid, "projet", projet)
|
||||
if type == "concept" and definition:
|
||||
set_label(nid, "definition", definition)
|
||||
return {"id": nid, "titre": titre, "type": type, "projet": projet, "status": "cree"}
|
||||
|
||||
def tool_add_relation(source_id, nom, cible_id):
|
||||
ok, message = add_relation_safe(source_id, nom, cible_id)
|
||||
return {"success": ok, "message": message}
|
||||
@@ -521,7 +569,7 @@ DISPATCH = {
|
||||
"close_session": tool_close_session, "get_skills": tool_get_skills,
|
||||
"add_skill": tool_add_skill,
|
||||
"move_note": tool_move_note,
|
||||
"add_relation": tool_add_relation,
|
||||
"add_relation": tool_add_relation, "create_entite": tool_create_entite,
|
||||
"update_note": tool_update_note,
|
||||
"get_note": tool_get_note, "get_children": tool_get_children,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user