diff --git a/api/bin/dify-cli-darwin-amd64 b/api/bin/dify-cli-darwin-amd64 index 19d03eec9a..8b73d5dfdf 100755 Binary files a/api/bin/dify-cli-darwin-amd64 and b/api/bin/dify-cli-darwin-amd64 differ diff --git a/api/bin/dify-cli-darwin-arm64 b/api/bin/dify-cli-darwin-arm64 index 5974a01470..93ac8441f9 100755 Binary files a/api/bin/dify-cli-darwin-arm64 and b/api/bin/dify-cli-darwin-arm64 differ diff --git a/api/bin/dify-cli-linux-amd64 b/api/bin/dify-cli-linux-amd64 index 98a4dca553..becf5b6775 100755 Binary files a/api/bin/dify-cli-linux-amd64 and b/api/bin/dify-cli-linux-amd64 differ diff --git a/api/bin/dify-cli-linux-arm64 b/api/bin/dify-cli-linux-arm64 index 8ba5a73cee..c1d9e76a40 100755 Binary files a/api/bin/dify-cli-linux-arm64 and b/api/bin/dify-cli-linux-arm64 differ diff --git a/api/core/app/entities/app_asset_entities.py b/api/core/app/entities/app_asset_entities.py index 8f7f5e7787..a3c62c5211 100644 --- a/api/core/app/entities/app_asset_entities.py +++ b/api/core/app/entities/app_asset_entities.py @@ -107,7 +107,7 @@ class AppAssetFileTree(BaseModel): while current: parts.append(current.name) current = self.get(current.parent_id) if current.parent_id else None - return "/" + "/".join(reversed(parts)) + return "/".join(reversed(parts)) def relative_path(self, a: AppAssetNode, b: AppAssetNode) -> str: """ diff --git a/api/core/sandbox/manager.py b/api/core/sandbox/manager.py index d2bb1a917f..d832b8b6e0 100644 --- a/api/core/sandbox/manager.py +++ b/api/core/sandbox/manager.py @@ -135,6 +135,7 @@ class SandboxManager: @classmethod def delete_storage(cls, tenant_id: str, user_id: str) -> None: + # FIXME(Mairuis): move to SandboxArtifactService storage = ArchiveSandboxStorage(tenant_id, SandboxBuilder.draft_id(user_id)) storage.delete() diff --git a/api/core/workflow/nodes/llm/node.py b/api/core/workflow/nodes/llm/node.py index 587e3af6b2..6bb6499c01 100644 --- a/api/core/workflow/nodes/llm/node.py +++ b/api/core/workflow/nodes/llm/node.py @@ -55,6 +55,7 @@ from core.prompt.utils.prompt_message_util import PromptMessageUtil from core.rag.entities.citation_metadata import RetrievalSourceMetadata from core.sandbox import Sandbox from core.sandbox.bash.session import SandboxBashSession +from core.sandbox.entities.config import AppAssets from core.skill.constants import SkillAttrs from core.skill.entities.skill_artifact_set import SkillArtifactSet from core.skill.entities.skill_document import SkillDocument @@ -1509,9 +1510,10 @@ class LLMNode(Node[LLMNodeData]): # Compile skill references after jinja2 rendering if artifact_set is not None and file_tree is not None: skill_artifact = SkillCompiler().compile_one( - artifact_set, - SkillDocument(skill_id="anonymous", content=result_text, metadata={}), - file_tree, + artifact_set=artifact_set, + document=SkillDocument(skill_id="anonymous", content=result_text, metadata={}), + file_tree=file_tree, + base_path=AppAssets.PATH, ) result_text = skill_artifact.content @@ -1551,9 +1553,10 @@ class LLMNode(Node[LLMNodeData]): # Compile skill references after context and variable substitution if plain_text and artifact_set is not None and file_tree is not None: skill_artifact = SkillCompiler().compile_one( - artifact_set, - SkillDocument(skill_id="anonymous", content=plain_text, metadata={}), - file_tree, + artifact_set=artifact_set, + document=SkillDocument(skill_id="anonymous", content=plain_text, metadata={}), + file_tree=file_tree, + base_path=AppAssets.PATH, ) plain_text = skill_artifact.content @@ -1823,7 +1826,10 @@ class LLMNode(Node[LLMNodeData]): for prompt in self.node_data.prompt_template: if isinstance(prompt, LLMNodeChatModelMessage): skill_artifact = SkillCompiler().compile_one( - artifact_set, SkillDocument(skill_id="anonymous", content=prompt.text, metadata={}), file_tree + artifact_set=artifact_set, + document=SkillDocument(skill_id="anonymous", content=prompt.text, metadata={}), + file_tree=file_tree, + base_path=AppAssets.PATH, ) tool_artifacts.append(skill_artifact.tools)