 		self.imageCache = imageCache
 		self.delegateQueue = queue
 		self.appIncomingQueue = DispatchQueue(label: "session.appserver.incoming", qos: .userInitiated, target: .global(qos: .userInitiated))
+		self.appOutgoingQueue = DispatchQueue(label: "session.appserver.outgoing", qos: .userInteractive, target: .global(qos: .userInteractive))
 		var ws = wsWorker
 		if nil == ws {
 			ws = SessionWebSocketWorker(conInfo: connectionInfo, wspaceId: workspace.wspaceId)

			eventObserver.send(value: SessionEvent(.sessionError, props: ["error": errorData.error.localizedDescription]))
			delegateQueue.async { self.delegate?.sessionErrorReceived(errorData.error, details: nil) }
		case .computeStatus(let status):
			computeStatus = status
			informDelegate = true
		case .execComplete(let execData):
			if !execData.images.isEmpty {
				imageCache.cache(images: execData.images)

	public weak var delegate: SessionDelegate?
	/// status of compute engine
	public private(set) var computeStatus: SessionResponse.ComputeStatus = .initializing
	public var computeIsRunning: Bool { return computeStatus == .running }
	
	
	// swiftlint:disable:next force_try
	public var project: AppProject { return try! conInfo.project(withId: workspace.projectId) }
