adyou 0.6.1 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -59,7 +59,9 @@ export async function buildBrief(url, opts) {
59
59
  - proofPoints: 숫자·수상·후기·보증 등 사이트에 실제로 있는 증거 문구 0~5(없으면 빈 배열 · 만들지 않는다)`,
60
60
  user: JSON.stringify({ url: site.finalUrl, title: site.title, description: site.description, lang: site.lang, headings: site.headings, prices: site.prices, colorsFound: site.colors.slice(0, 8), themeColor: site.themeColor, textExcerpt: site.text.slice(0, 3500), goal: opts.goal, markets: opts.markets, hints: opts.hints || '' }),
61
61
  });
62
- brief = { url: site.finalUrl, ...out, palette: { primary: /^#[0-9a-f]{6}$/i.test(out.palette.primary) ? out.palette.primary.toLowerCase() : fallbackPalette.primary, dark: /^#[0-9a-f]{6}$/i.test(out.palette.dark) ? out.palette.dark : fallbackPalette.dark, light: /^#[0-9a-f]{6}$/i.test(out.palette.light) ? out.palette.light : fallbackPalette.light }, logoUrl: site.logo, ogImage: site.ogImage, specialCategory: out.specialCategory || special, siteImages: site.images };
62
+ // 🔴 LLM 업종 (realestate_construction ) specialCategory 넣는 오탐(2026-09-16) 실제 특별 카테고리 낱말이 있을 때만 인정
63
+ const specialOk = (v) => v && /금융|대출|투자|보험|암호|도박|카지노|정치|선거|의료|의약|병원|시술|담배|성인|finance|gambl|politic|medical|pharma|tobacco|adult/i.test(v) ? v : null;
64
+ brief = { url: site.finalUrl, ...out, specialCategory: specialOk(out.specialCategory) || special, palette: { primary: /^#[0-9a-f]{6}$/i.test(out.palette.primary) ? out.palette.primary.toLowerCase() : fallbackPalette.primary, dark: /^#[0-9a-f]{6}$/i.test(out.palette.dark) ? out.palette.dark : fallbackPalette.dark, light: /^#[0-9a-f]{6}$/i.test(out.palette.light) ? out.palette.light : fallbackPalette.light }, logoUrl: site.logo, ogImage: site.ogImage, siteImages: site.images };
63
65
  }
64
66
  else {
65
67
  brief = { url: site.finalUrl, company: site.title.split(/[|·—\-–:]/)[0].trim() || new URL(site.finalUrl).hostname, offer: site.description || site.headings[0] || site.title, category: '', audience: ['사이트 방문자'], usp: site.headings.slice(0, 3), tone: '단정하고 명확', language: site.lang || 'ko', palette: fallbackPalette, logoUrl: site.logo, ogImage: site.ogImage, specialCategory: special, industry: 'other', visualGenres: ['photoreal'], siteImages: site.images, notes: 'LLM 키가 없어 규칙으로 만든 최소 브리프예요. `adpilot brief --edit` 로 다듬어 주세요.' };
@@ -70,7 +70,7 @@ async function veo(i, cfg) {
70
70
  costKrw = s.cost_krw;
71
71
  // 🔴 Veo 「No video in response」 = 안전 필터(실사 인물·식품 등)로 결과가 비어 옴 · 접수비는 발생 → 호출자가 다른 테이크로 1회 재시도(retryable)
72
72
  if (s.status === 'failed')
73
- throw Object.assign(new Error(`영상 생성 실패: ${s.error || '알 수 없음'}`), { fatal: true, costKrw, retryable: /No video in response|filtered|safety/i.test(String(s.error || '')) });
73
+ throw Object.assign(new Error(`영상 생성 실패: ${s.error || '알 수 없음'}`), { fatal: true, costKrw, retryable: /No video in response|filtered|safety|internal server|try again|temporar/i.test(String(s.error || '')) });
74
74
  if (s.status === 'completed') {
75
75
  const dl = await fetch(`${cfg.base}/v1/video/generation/${acc.operation_id}/download`, { headers: H, signal: AbortSignal.timeout(300_000) });
76
76
  if (!dl.ok)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "adyou",
3
- "version": "0.6.1",
3
+ "version": "0.6.2",
4
4
  "description": "ADYou — 대행사 없이, 당신이 직접. 사이트 주소 하나로 광고 소재·매체 등록·자동 운영·보고까지: AI 광고 자율주행 CLI + MCP 서버(Meta·Google · 생성은 항상 PAUSED · 승인 뒤 시작)",
5
5
  "type": "module",
6
6
  "license": "MIT",