feat: add mergeable skill bundles with incremental compilation

Refactor skill compilation around mergeable bundle patches so dynamic skill updates no longer require full rebuilds. Keep dependency closures accurate by recomputing affected nodes from direct dependency data.
This commit is contained in:
Harry
2026-02-28 14:29:08 +08:00
parent 865321abb4
commit a0d1816a6e
8 changed files with 418 additions and 270 deletions

View File

@ -1635,7 +1635,7 @@ class LLMNode(Node[LLMNodeData]):
)
if bundle is not None and file_tree is not None:
skill_entry = SkillCompiler().compile_one(
skill_entry = SkillCompiler().compile_document(
bundle=bundle,
document=SkillDocument(
skill_id="anonymous", content=result_text, metadata=message.metadata or {}
@ -1676,7 +1676,7 @@ class LLMNode(Node[LLMNodeData]):
plain_text = segment_group.text
if plain_text and bundle is not None and file_tree is not None:
skill_entry = SkillCompiler().compile_one(
skill_entry = SkillCompiler().compile_document(
bundle=bundle,
document=SkillDocument(
skill_id="anonymous", content=plain_text, metadata=message.metadata or {}
@ -2040,7 +2040,7 @@ class LLMNode(Node[LLMNodeData]):
tool_deps_list: list[ToolDependencies] = []
for prompt in self.node_data.prompt_template:
if isinstance(prompt, LLMNodeChatModelMessage):
skill_entry = SkillCompiler().compile_one(
skill_entry = SkillCompiler().compile_document(
bundle=bundle,
document=SkillDocument(skill_id="anonymous", content=prompt.text, metadata=prompt.metadata or {}),
file_tree=file_tree,