Canvas: Render logs using XTerm

Use Server Sent Events to stream logs.

Change-Id: I3790a22a39b71409636a81dbe2a2cc8bf4977cb4
diff --git a/apps/canvas/front/package-lock.json b/apps/canvas/front/package-lock.json
index 1913878..247a513 100644
--- a/apps/canvas/front/package-lock.json
+++ b/apps/canvas/front/package-lock.json
@@ -39,6 +39,8 @@
 				"tailwind-merge": "^2.5.4",
 				"tailwindcss-animate": "^1.0.7",
 				"uuid": "^11.0.2",
+				"xterm": "^5.3.0",
+				"xterm-addon-fit": "^0.8.0",
 				"zod": "^3.23.8",
 				"zustand": "^5.0.1"
 			},
@@ -7089,6 +7091,23 @@
 				"url": "https://github.com/chalk/ansi-styles?sponsor=1"
 			}
 		},
+		"node_modules/xterm": {
+			"version": "5.3.0",
+			"resolved": "https://registry.npmjs.org/xterm/-/xterm-5.3.0.tgz",
+			"integrity": "sha512-8QqjlekLUFTrU6x7xck1MsPzPA571K5zNqWm0M0oroYEWVOptZ0+ubQSkQ3uxIEhcIHRujJy6emDWX4A7qyFzg==",
+			"deprecated": "This package is now deprecated. Move to @xterm/xterm instead.",
+			"license": "MIT"
+		},
+		"node_modules/xterm-addon-fit": {
+			"version": "0.8.0",
+			"resolved": "https://registry.npmjs.org/xterm-addon-fit/-/xterm-addon-fit-0.8.0.tgz",
+			"integrity": "sha512-yj3Np7XlvxxhYF/EJ7p3KHaMt6OdwQ+HDu573Vx1lRXsVxOcnVJs51RgjZOouIZOczTsskaS+CpXspK81/DLqw==",
+			"deprecated": "This package is now deprecated. Move to @xterm/addon-fit instead.",
+			"license": "MIT",
+			"peerDependencies": {
+				"xterm": "^5.0.0"
+			}
+		},
 		"node_modules/yallist": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",