const URL_RE = /\bhttps?:\/\/[^\s<>"')\]]+|\bwww\.[^\s<>"')\]]+/gi; export function stripUrlsForTitle(input: string): string { return input.replace(URL_RE, '[URL]').replace(/\s+/g, ' ').trim(); } export function isUrlOnlyTitleInput(input: string): boolean { const trimmed = input.trim(); if (!trimmed) return false; return stripUrlsForTitle(trimmed).replace(/\[URL\]/g, '').trim().length === 0; } export function buildTitleFallback(input: string): string { if (isUrlOnlyTitleInput(input)) return 'URLの確認'; return stripUrlsForTitle(input).slice(0, 40).trim() || '新しい依頼'; } export function buildTitlePrompt(input: string): string | null { if (isUrlOnlyTitleInput(input)) return null; const sanitized = stripUrlsForTitle(input).slice(0, 500); return [ '以下の依頼内容から20文字以内の簡潔なタイトルを日本語で生成してください。', 'URLそのものから内容を推測しないでください。URLは必要なら「URL」として扱ってください。', 'タイトルのみ出力してください。', '', sanitized, ].join('\n'); }