fix(05-03): normalize shared-volume attachment paths
- strip /workspace and /agents roots before forwarding attachments upstream - reuse the same normalization for send-file events returned to Matrix
This commit is contained in:
parent
cafb0ec9e4
commit
9a0316076a
1 changed files with 27 additions and 6 deletions
33
sdk/real.py
33
sdk/real.py
|
|
@ -191,6 +191,27 @@ class RealPlatformClient(PlatformClient):
|
||||||
code = getattr(exc, "code", None) or "PLATFORM_CONNECTION_ERROR"
|
code = getattr(exc, "code", None) or "PLATFORM_CONNECTION_ERROR"
|
||||||
return PlatformError(str(exc), code=code)
|
return PlatformError(str(exc), code=code)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _normalize_workspace_path(location: str) -> str | None:
|
||||||
|
if not location:
|
||||||
|
return None
|
||||||
|
|
||||||
|
path = Path(location)
|
||||||
|
if not path.is_absolute():
|
||||||
|
normalized = path.as_posix()
|
||||||
|
return normalized or None
|
||||||
|
|
||||||
|
parts = path.parts
|
||||||
|
if len(parts) >= 2 and parts[1] == "workspace":
|
||||||
|
relative = Path(*parts[2:]).as_posix()
|
||||||
|
return relative or None
|
||||||
|
if len(parts) >= 3 and parts[1] == "agents":
|
||||||
|
relative = Path(*parts[3:]).as_posix()
|
||||||
|
return relative or None
|
||||||
|
|
||||||
|
relative = path.as_posix().lstrip("/")
|
||||||
|
return relative or None
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _attachment_paths(attachments: list[Attachment] | None) -> list[str]:
|
def _attachment_paths(attachments: list[Attachment] | None) -> list[str]:
|
||||||
if not attachments:
|
if not attachments:
|
||||||
|
|
@ -198,18 +219,18 @@ class RealPlatformClient(PlatformClient):
|
||||||
paths = []
|
paths = []
|
||||||
for attachment in attachments:
|
for attachment in attachments:
|
||||||
if attachment.workspace_path:
|
if attachment.workspace_path:
|
||||||
paths.append(attachment.workspace_path)
|
normalized = RealPlatformClient._normalize_workspace_path(
|
||||||
|
attachment.workspace_path
|
||||||
|
)
|
||||||
|
if normalized:
|
||||||
|
paths.append(normalized)
|
||||||
return paths
|
return paths
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _attachment_from_send_file_event(event: MsgEventSendFile) -> Attachment:
|
def _attachment_from_send_file_event(event: MsgEventSendFile) -> Attachment:
|
||||||
location = str(event.path)
|
location = str(event.path)
|
||||||
filename = Path(location).name or None
|
filename = Path(location).name or None
|
||||||
workspace_path = location
|
workspace_path = RealPlatformClient._normalize_workspace_path(location)
|
||||||
if workspace_path.startswith("/workspace/"):
|
|
||||||
workspace_path = workspace_path[len("/workspace/") :]
|
|
||||||
elif workspace_path == "/workspace":
|
|
||||||
workspace_path = ""
|
|
||||||
return Attachment(
|
return Attachment(
|
||||||
url=location,
|
url=location,
|
||||||
mime_type="application/octet-stream",
|
mime_type="application/octet-stream",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue