|
@@ -1,5 +1,6 @@
|
|
|
import { chatTranscriptRouter } from './chatTranscriptApi.js'
|
|
import { chatTranscriptRouter } from './chatTranscriptApi.js'
|
|
|
import {DesktopEnvironments} from './desktopEnvironments.js'
|
|
import {DesktopEnvironments} from './desktopEnvironments.js'
|
|
|
|
|
+import {DesktopHostHub} from './desktopHosts.js'
|
|
|
import type {GrokAuth} from './grokAuth.js'
|
|
import type {GrokAuth} from './grokAuth.js'
|
|
|
import {GrokCloud} from './grokCloud.js'
|
|
import {GrokCloud} from './grokCloud.js'
|
|
|
import {WorkspaceInspector} from './workspaceInspector.js'
|
|
import {WorkspaceInspector} from './workspaceInspector.js'
|
|
@@ -115,6 +116,7 @@ export interface ApplicationRuntime {
|
|
|
chatPushJobs: ChatPushJobManager
|
|
chatPushJobs: ChatPushJobManager
|
|
|
chatCache?: ChatCacheCoordinator
|
|
chatCache?: ChatCacheCoordinator
|
|
|
desktopEnvironments:DesktopEnvironments
|
|
desktopEnvironments:DesktopEnvironments
|
|
|
|
|
+ desktopHosts:DesktopHostHub
|
|
|
grokAuth:GrokAuth
|
|
grokAuth:GrokAuth
|
|
|
workspaceRoutines:WorkspaceRoutines
|
|
workspaceRoutines:WorkspaceRoutines
|
|
|
workspacePlugins:WorkspacePlugins
|
|
workspacePlugins:WorkspacePlugins
|
|
@@ -251,6 +253,7 @@ export function createApplication(options: ApplicationOptions = {}): Application
|
|
|
workspaceMemory.start()
|
|
workspaceMemory.start()
|
|
|
const grokCloud=new GrokCloud(workspace,auth,workspaceNodes,sharedComputers,options.grokFetch)
|
|
const grokCloud=new GrokCloud(workspace,auth,workspaceNodes,sharedComputers,options.grokFetch)
|
|
|
const desktopEnvironments=new DesktopEnvironments(workspace,auth,workspaceNodes)
|
|
const desktopEnvironments=new DesktopEnvironments(workspace,auth,workspaceNodes)
|
|
|
|
|
+ const desktopHosts=new DesktopHostHub(workspace,auth)
|
|
|
workspaceRuntime.desktopEnvironments=desktopEnvironments
|
|
workspaceRuntime.desktopEnvironments=desktopEnvironments
|
|
|
grokCloud.preferDesktop=(owner,agent)=>!!desktopEnvironments.selected(owner,agent)
|
|
grokCloud.preferDesktop=(owner,agent)=>!!desktopEnvironments.selected(owner,agent)
|
|
|
grokCloud.beforeSelection=(owner,id)=>desktopEnvironments.assertIdle(owner,id)
|
|
grokCloud.beforeSelection=(owner,id)=>desktopEnvironments.assertIdle(owner,id)
|
|
@@ -361,6 +364,7 @@ export function createApplication(options: ApplicationOptions = {}): Application
|
|
|
await next()
|
|
await next()
|
|
|
})
|
|
})
|
|
|
app.use(runners.middleware())
|
|
app.use(runners.middleware())
|
|
|
|
|
+ app.use(desktopHosts.middleware())
|
|
|
app.use(async (ctx, next) => {
|
|
app.use(async (ctx, next) => {
|
|
|
const user = auth.current(ctx)
|
|
const user = auth.current(ctx)
|
|
|
if (user && user.role !== 'admin' && (ctx.path.startsWith('/api/') || ctx.path.startsWith('/node/') || ctx.path.startsWith('/ws/') || ctx.path.startsWith('/Users/') || ctx.path.startsWith('/attachments/'))) {
|
|
if (user && user.role !== 'admin' && (ctx.path.startsWith('/api/') || ctx.path.startsWith('/node/') || ctx.path.startsWith('/ws/') || ctx.path.startsWith('/Users/') || ctx.path.startsWith('/attachments/'))) {
|
|
@@ -441,6 +445,7 @@ export function createApplication(options: ApplicationOptions = {}): Application
|
|
|
const computerRouter=computerControls.router();app.use(computerRouter.routes());app.use(computerRouter.allowedMethods())
|
|
const computerRouter=computerControls.router();app.use(computerRouter.routes());app.use(computerRouter.allowedMethods())
|
|
|
const applicationRouter = workspaceRouter(workspace, workspaceRuntime, workspaceNodes, workspaceAssets, uploads, auth, push, csrf)
|
|
const applicationRouter = workspaceRouter(workspace, workspaceRuntime, workspaceNodes, workspaceAssets, uploads, auth, push, csrf)
|
|
|
app.use(runners.adminRouter().routes())
|
|
app.use(runners.adminRouter().routes())
|
|
|
|
|
+ app.use(desktopHosts.adminRouter().routes())
|
|
|
app.use(applicationRouter.routes())
|
|
app.use(applicationRouter.routes())
|
|
|
app.use(async (ctx, next) => {
|
|
app.use(async (ctx, next) => {
|
|
|
if (ctx.path.includes('/plugins/yaoyao') || ctx.path.startsWith('/api/app/groups')) throw new HttpError(410, '请使用新版聊天接口', 'retired_plugin_api')
|
|
if (ctx.path.includes('/plugins/yaoyao') || ctx.path.startsWith('/api/app/groups')) throw new HttpError(410, '请使用新版聊天接口', 'retired_plugin_api')
|
|
@@ -510,6 +515,7 @@ export function createApplication(options: ApplicationOptions = {}): Application
|
|
|
workspaceRoutines,
|
|
workspaceRoutines,
|
|
|
workspacePlugins,
|
|
workspacePlugins,
|
|
|
desktopEnvironments,
|
|
desktopEnvironments,
|
|
|
|
|
+ desktopHosts,
|
|
|
grokAuth:grokCloud.authorization,
|
|
grokAuth:grokCloud.authorization,
|
|
|
realtime,
|
|
realtime,
|
|
|
app,
|
|
app,
|
|
@@ -535,8 +541,9 @@ export function createApplication(options: ApplicationOptions = {}): Application
|
|
|
close: () => {
|
|
close: () => {
|
|
|
workspaceMemory.close()
|
|
workspaceMemory.close()
|
|
|
runners.close()
|
|
runners.close()
|
|
|
- workspaceAssets.close()
|
|
|
|
|
- desktopEnvironments.close()
|
|
|
|
|
|
|
+ workspaceAssets.close()
|
|
|
|
|
+ desktopEnvironments.close()
|
|
|
|
|
+ desktopHosts.close()
|
|
|
grokCloud.authorization.close()
|
|
grokCloud.authorization.close()
|
|
|
workspaceRoutines.close()
|
|
workspaceRoutines.close()
|
|
|
workspacePlugins.close()
|
|
workspacePlugins.close()
|