fix(tunnels): skip tunnel creation for terminal-only tools

This commit is contained in:
Fusion
2026-05-20 18:11:33 +02:00
parent 19db7db8d0
commit 50fcf5c077
+75 -61
View File
@@ -437,44 +437,52 @@ async def start_instance(
} }
instance_port = tool_type.default_port instance_port = tool_type.default_port
logger.info("Tool type for instance %s: name=%s, default_port=%s", logger.info("Tool type for instance %s: name=%s, default_port=%s, interfaces=%s",
instance.id, tool_type.name, instance_port) instance.id, tool_type.name, instance_port, tool_type.interfaces)
# Create temporary Cloudflare tunnel for public access # Only create Cloudflare tunnel for web-enabled tools
try: if "web" in tool_type.interfaces:
logger.info("Creating temporary tunnel for instance %s (container=%s, port=%d)", # Create temporary Cloudflare tunnel for public access
instance.id, instance.container_name, instance_port) try:
tunnel_info = start_cloudflared_tunnel( logger.info("Creating temporary tunnel for instance %s (container=%s, port=%d)",
container_name=instance.container_name or instance.name, instance.id, instance.container_name, instance_port)
port=instance_port, tunnel_info = start_cloudflared_tunnel(
) container_name=instance.container_name or instance.name,
instance.tunnel_id = tunnel_info["pid"] port=instance_port,
instance.public_url = tunnel_info["url"] )
instance.url = tunnel_info["url"] instance.tunnel_id = tunnel_info["pid"]
await session.commit() instance.public_url = tunnel_info["url"]
logger.info( instance.url = tunnel_info["url"]
"Created temporary tunnel for instance %s: pid=%s, url=%s", await session.commit()
instance.id, logger.info(
tunnel_info["pid"], "Created temporary tunnel for instance %s: pid=%s, url=%s",
tunnel_info["url"], instance.id,
) tunnel_info["pid"],
except Exception as exc: tunnel_info["url"],
import traceback )
error_msg = str(exc) except Exception as exc:
error_trace = traceback.format_exc() import traceback
logger.error( error_msg = str(exc)
"Failed to create tunnel for instance %s: %s\nTraceback:\n%s", error_trace = traceback.format_exc()
instance.id, logger.error(
error_msg, "Failed to create tunnel for instance %s: %s\nTraceback:\n%s",
error_trace, instance.id,
) error_msg,
instance.status = "error" error_trace,
)
instance.status = "error"
instance.url = None
await session.commit()
return {
"status": "error",
"error": f"Failed to create tunnel: {error_msg}",
}
else:
# Terminal-only tool - no tunnel needed
logger.info("Instance %s is terminal-only (no web interface), skipping tunnel creation", instance.id)
instance.url = None instance.url = None
instance.public_url = None
await session.commit() await session.commit()
return {
"status": "error",
"error": f"Failed to create tunnel: {error_msg}",
}
return {"status": instance.status, "url": instance.url} return {"status": instance.status, "url": instance.url}
@@ -597,33 +605,39 @@ async def restart_instance(
instance_port = tool_type.default_port instance_port = tool_type.default_port
# Create new temporary tunnel # Only create tunnel for web-enabled tools
try: if "web" in tool_type.interfaces:
tunnel_info = start_cloudflared_tunnel( # Create new temporary tunnel
container_name=instance.container_name or instance.name, try:
port=instance_port, tunnel_info = start_cloudflared_tunnel(
) container_name=instance.container_name or instance.name,
instance.tunnel_id = tunnel_info["pid"] port=instance_port,
instance.public_url = tunnel_info["url"] )
instance.url = tunnel_info["url"] instance.tunnel_id = tunnel_info["pid"]
logger.info( instance.public_url = tunnel_info["url"]
"Created new tunnel for instance %s: %s", instance.url = tunnel_info["url"]
instance.id, logger.info(
tunnel_info["url"], "Created new tunnel for instance %s: %s",
) instance.id,
except Exception as exc: tunnel_info["url"],
logger.warning( )
"Failed to create tunnel for instance %s: %s", except Exception as exc:
instance.id, logger.warning(
exc, "Failed to create tunnel for instance %s: %s",
) instance.id,
instance.status = "error" exc,
)
instance.status = "error"
instance.url = None
await session.commit()
return {
"status": "error",
"error": f"Failed to create tunnel: {exc}",
}
else:
# Terminal-only tool
instance.url = None instance.url = None
await session.commit() instance.public_url = None
return {
"status": "error",
"error": f"Failed to create tunnel: {exc}",
}
await session.commit() await session.commit()
return {"status": instance.status, "url": instance.url} return {"status": instance.status, "url": instance.url}