Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions multimodal/omni-tars/omni-agent/tarko.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,5 @@ export default {
},
},
},

} as AgentAppConfig;
4 changes: 4 additions & 0 deletions multimodal/tarko/agent-server-next/examples/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ const server = new AgentServer({
},
},
},
webui: {
type: 'remote',
remoteUrl: process.env.WEBUI_REMOTE_URL,
}
},
});

Expand Down
38 changes: 38 additions & 0 deletions multimodal/tarko/agent-server-next/src/controllers/sessions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import type { HonoContext } from '../types';
import { getCurrentUserId } from '../middlewares/auth';
import { SessionInfo } from '@tarko/interface';
import { ShareService } from '../services';
import { filterSessionModel } from '../utils';

/**
* Get all sessions (with multi-tenant support)
Expand Down Expand Up @@ -33,6 +35,8 @@ export async function getAllSessions(c: HonoContext) {
sessions = await server.storageProvider.getAllSessions();
}

filterSessionModel(sessions);

return c.json({ sessions }, 200);
} catch (error) {
console.error('Failed to get sessions:', error);
Expand Down Expand Up @@ -87,6 +91,8 @@ export async function getSessionDetails(c: HonoContext) {
if (server.storageProvider && sessionId) {
const sessionInfo = await server.storageProvider.getSessionInfo(sessionId);

sessionInfo && filterSessionModel([sessionInfo]);

if (sessionInfo) {
return c.json(
{
Expand All @@ -108,6 +114,8 @@ export async function getSessionDetails(c: HonoContext) {
* Get session events
*/
export async function getSessionEvents(c: HonoContext) {


const server = c.get('server');
const sessionId = c.req.query('sessionId');

Expand Down Expand Up @@ -310,3 +318,33 @@ export async function generateSummary(c: HonoContext) {
);
}
}

/**
* Share a session
*/
export async function shareSession(c: HonoContext) {
const { sessionId, upload } = await c.req.json()

if (!sessionId) {
return c.json({ error: 'Session ID is required' }, 400);
}

try {
const server = c.get('server');
const shareService = new ShareService(server.appConfig, server.storageProvider, server);

// Get agent instance if session is active (for slug generation)
const agent = server.getSessionPool().get(sessionId)?.agent;
const result = await shareService.shareSession(sessionId, upload, agent, server.versionInfo);
if (result.success) {
return c.json(result, 200);
} else {
return c.json({
error: result.error || 'Failed to share session',
}, 500);
}
} catch (error) {
console.error(`Error sharing session ${sessionId}:`, error);
return c.json({ error: 'Failed to share session' }, 500);
}
}
55 changes: 5 additions & 50 deletions multimodal/tarko/agent-server-next/src/controllers/share.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,59 +3,14 @@
* SPDX-License-Identifier: Apache-2.0
*/

import { createErrorResponse } from '../utils/error-handler';
import { ShareService } from "../services";
import type { HonoContext } from '../types';

/**
* Get share configuration
*/
export async function getShareConfig(c: HonoContext) {
try {
const server = c.get('server');

// Basic share configuration
const shareConfig: any = {
enabled: true,
maxSessions: 100,
defaultExpirationDays: 7,
supportedFormats: ['json', 'markdown', 'html'],
features: {
publicSharing: true,
passwordProtection: false, // Could be enhanced later
customExpiration: true,
downloadFormats: ['json', 'markdown'],
},
limits: {
maxFileSize: 10 * 1024 * 1024, // 10MB
maxEvents: 1000,
maxSharedSessions: 50,
},
};

// Add storage-specific limitations if storage is configured
if (server.storageProvider) {
const storageInfo = server.getStorageInfo();
shareConfig.storage = {
type: storageInfo.type,
persistent: true,
};
} else {
shareConfig.storage = {
type: 'memory',
persistent: false,
};
shareConfig.features.publicSharing = false; // Disable public sharing without persistent storage
}

return c.json(
{
shareConfig,
timestamp: Date.now(),
},
200,
);
} catch (error) {
console.error('Failed to get share config:', error);
return c.json(createErrorResponse(error), 500);
}
export function getShareConfig(c: HonoContext) {
const server = c.get('server');
const shareService = new ShareService(server.appConfig, server.storageProvider, server);
return c.json(shareService.getShareConfig(), 200);
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,6 @@ export async function accessLogMiddleware(c: HonoContext, next: Next) {
const url = c.req.url;
const requestId = c.get('requestId') || 'unknown';

logger.info(`[${requestId}] ${method} ${url} - Request started`);

try {
await next();
const duration = Date.now() - start;
Expand All @@ -32,4 +30,4 @@ export async function accessLogMiddleware(c: HonoContext, next: Next) {
logger.error(`[${requestId}] ${method} ${url} - Error (${duration}ms):`, error);
throw error;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,14 @@ export async function sessionRestoreMiddleware(

// If not exist, restored the AgentSession instance based on the database data.
if (!session) {
logger.info('session instance not exist, prepare to restore')

const start = Date.now();

const restored = await server.getSessionFactory().restoreSession(sessionId);

if (restored?.session) {
logger.info(`Session ${sessionId} restored from storage`);
logger.info(`Session ${sessionId} restored from storage, cost: `, Date.now() - start);

session = restored?.session;
sessionPool.set(sessionId, session);
Expand Down
1 change: 1 addition & 0 deletions multimodal/tarko/agent-server-next/src/routes/sessions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ export function createSessionRoutes(): Hono<{ Variables: ContextVariables }> {
router.post('/api/v1/sessions/update', sessionsController.updateSession);
router.post('/api/v1/sessions/delete', sessionsController.deleteSession);
router.post('/api/v1/sessions/generate-summary', sessionsController.generateSummary);
router.post('/api/v1/sessions/share', sessionsController.shareSession);

return router;
}
Loading