d25d482dc2
Publish CLI Package / publish-npm (push) Waiting to run
Publish Python SDK / publish-pypi (push) Waiting to run
Publish TypeScript SDK / publish-npm (push) Waiting to run
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
/**
|
|
* Shared MCP utilities - safe for both client and server.
|
|
* No server-side dependencies (database, fs, etc.) should be imported here.
|
|
*/
|
|
|
|
import { isMcpTool, MCP } from '@/executor/constants'
|
|
|
|
/**
|
|
* Sanitizes a string by removing invisible Unicode characters that cause HTTP header errors.
|
|
* Handles characters like U+2028 (Line Separator) that can be introduced via copy-paste.
|
|
*/
|
|
export function sanitizeForHttp(value: string): string {
|
|
return value
|
|
.replace(/[\u2028\u2029\u200B-\u200D\uFEFF]/g, '')
|
|
.replace(/[\x00-\x1F\x7F]/g, '')
|
|
.trim()
|
|
}
|
|
|
|
/**
|
|
* Sanitizes all header key-value pairs for HTTP usage.
|
|
*/
|
|
export function sanitizeHeaders(
|
|
headers: Record<string, string> | undefined
|
|
): Record<string, string> | undefined {
|
|
if (!headers) return headers
|
|
return Object.fromEntries(
|
|
Object.entries(headers)
|
|
.map(([key, value]) => [sanitizeForHttp(key), sanitizeForHttp(value)])
|
|
.filter(([key, value]) => key !== '' && value !== '')
|
|
)
|
|
}
|
|
|
|
/**
|
|
* Client-safe MCP constants
|
|
* Note: CLIENT_TIMEOUT should match DEFAULT_EXECUTION_TIMEOUT_MS from @/lib/core/execution-limits
|
|
* (5 minutes = 300 seconds for free tier). Keep in sync if that value changes.
|
|
*/
|
|
export const MCP_CLIENT_CONSTANTS = {
|
|
CLIENT_TIMEOUT: 5 * 60 * 1000, // 5 minutes - matches DEFAULT_EXECUTION_TIMEOUT_MS
|
|
MAX_RETRIES: 3,
|
|
RECONNECT_DELAY: 1000,
|
|
} as const
|
|
|
|
/**
|
|
* Create standardized MCP tool ID from server ID and tool name
|
|
*/
|
|
export function createMcpToolId(serverId: string, toolName: string): string {
|
|
const normalizedServerId = isMcpTool(serverId) ? serverId : `${MCP.TOOL_PREFIX}${serverId}`
|
|
return `${normalizedServerId}-${toolName}`
|
|
}
|