PageSourceSearch

https://rimvio.vercel.app/_next/static/chunks/0_j6pd4cty5wa.js?dpl=dpl_7RF4wixduynNaYL7xT1HmXcq5s9a

js rimvio.vercel.app collected 2026-10-03 07:39:29 UTC 451,326 bytes, 25 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,809214,447733,e=>{"use strict";var t=e.i(607298),n=e.i(462653);function a(e,t){let n=e.lat-t.lat,a=e.lng-t.lng;return n*n+a*a}function i(e,t){let n=e.filter(e=>e.visible),i=e.filter(e=>!e.visible);if(n.length<=1)return[...e];let o=n.find(e=>e.id===t||e.placeId===t)??n.find(e=>e.selected)??n[0],r=n.filter(e=>e.id!==o.id),l=[o],s=o;for(;r.length>0;){let e=0,t=a(s,r[0]);for(let n=1;n<r.length;n+=1){let i=a(s,r[n]);i<t&&(t=i,e=n)}let n=r.splice(e,1)[0];l.push(n),s=n}return[...l,...i]}e.s(["optimizeWorkspaceNodeRoute",0,i],447733);var o=e.i(572473),r=e.i(301008),l=e.i(137032),s=e.i(429163);e.i(951206);var c=e.i(104342);function u(e){return{nodes:e.nodes,filter:e.filter,selectedIds:e.selectedIds,compareIds:e.compareIds,summaryKo:e.summaryKo}}function d(e,t){return{...e,...t,version:e.version,workspaceId:e.workspaceId,contextEventId:e.contextEventId,domain:t.domain??e.domain,query:t.query??e.query,surfacePrimary:t.surfacePrimary??e.surfacePrimary,status:t.status??e.status,committedAtIso:t.committedAtIso??e.committedAtIso,lastChangeKo:void 0!==t.lastChangeKo?t.lastChangeKo:e.lastChangeKo,lastWhy:void 0!==t.lastWhy?t.lastWhy:e.lastWhy,relationshipEdges:t.relationshipEdges??e.relationshipEdges??[],openedAtIso:e.openedAtIso,updatedAtIso:new Date().toISOString(),history:[...e.history,u(e)].slice(-20),future:[]}}function p(e,t){return e.map(e=>{let n=!0;if(null!=t.minRating&&(null==e.rating||e.rating<t.minRating)&&(n=!1),null!=t.maxPriceBand&&(null==e.priceBand||e.priceBand>t.maxPriceBand)&&(n=!1),t.tagIncludes?.length&&(t.tagIncludes.every(t=>{if(e.tags.includes(t))return!0;if(!t.startsWith("cuisine:"))return!1;let n=(0,s.parseCuisineFromText)(t.slice(8));if(!n)return!1;let a=`${e.title} ${e.summaryKo} ${e.tags.join(" ")}`;return(0,s.blobMatchesCuisine)(a,e.tags,n)})||(n=!1)),t.queryIncludes?.trim()){let a=t.queryIncludes.trim().toLowerCase();`${e.title} ${e.summaryKo} ${e.tags.join(" ")}`.toLowerCase().includes(a)||e.tags.some(e=>e.toLowerCase().includes(a))||(n=!1)}return{...e,visible:n}})}e.s(["applyWorkspaceTransition",0,function(e){let a=(0,r.readContextWorkspace)(e.contextEventId);if(!a||"closed"===a.status)return null;if("undo"===e.op){let e=a.history[a.history.length-1];if(!e)return a;let t={...a,...e,updatedAtIso:new Date().toISOString(),lastChangeKo:"되돌렸어요",history:a.history.slice(0,-1),future:[u(a),...a.future].slice(0,20)};return(0,r.writeContextWorkspace)((0,l.withWorkspaceRelationships)(t)),t}if("redo"===e.op){let e=a.future[0];if(!e)return a;let t={...a,...e,updatedAtIso:new Date().toISOString(),lastChangeKo:"다시 적용했어요",history:[...a.history,u(a)].slice(-20),future:a.future.slice(1)};return(0,r.writeContextWorkspace)((0,l.withWorkspaceRelationships)(t)),t}if("close"===e.op){let e=d(a,{nodes:a.nodes,filter:a.filter,selectedIds:a.selectedIds,compareIds:a.compareIds,summaryKo:a.summaryKo,status:"closed",lastChangeKo:"워크스페이스를 닫았어요"});return(0,r.writeContextWorkspace)((0,l.withWorkspaceRelationships)(e)),e}let s=[...a.nodes],m={...a.filter},g=[...a.selectedIds],h=[...a.compareIds],y=a.summaryKo,f=e.changeKo?.trim()||null,b=a.status,k=a.lastWhy,K=0,I=0,v=e.domain??a.domain,x=e.query?.trim()||null;if("replace_candidates"===e.op){let i=(e.replaceHits??[]).map((e,n)=>(0,t.placeHitToWorkspaceNode)(e,n,v)),r=(e.replaceCandidates??[]).map((e,n)=>(0,t.candidateToWorkspaceNode)(e,n,v)),l=new Map;for(let e of[...r,...i])l.set(e.placeId,e);let c=a.nodes.filter(e=>e.bookmarked).length;s=(0,o.mergePreservePinnedNodes)(a.nodes,[...l.values()],36),g=g.filter(e=>s.some(t=>t.id===e)),h=h.filter(e=>s.some(t=>t.id===e)),m={},f=f??(c>0?`후보 갱신 \xb7 고정 ${c}곳 유지`:`후보 ${s.length}곳으로 바꿨어요`),y=`${(0,n.domainLabelKo)(v)} ${s.length}곳`}if("add_nodes"===e.op||"find_similar"===e.op){let a=(e.addHits??[]).map((e,n)=>(0,t.placeHitToWorkspaceNode)(e,n,v)),i=(e.addCandidates??[]).map((e,n)=>(0,t.candidateToWorkspaceNode)(e,n,v)),o=new Set(s.map(e=>e.placeId)),r=[];for(let e of[...i,...a])o.has(e.placeId)||(o.add(e.placeId),r.push(e));if("find_similar"===e.op&&0===r.length){let e=s.filter(e=>g.includes(e.id)||e.selected)[0]??s.find(e=>e.visible)??null;if(e)for(let t=0;t<3;t+=1){let n=`${e.placeId}-sim-${Date.now()}-${t}`;r.push({...e,id:`ws:${v}:${n}`,kind:v,placeId:n,title:`${e.title} \xb7 비슷한 ${t+1}`,lat:e.lat+(t+1)*.004,lng:e.lng+(t+1)*.003,tags:[...new Set([...e.tags,"similar"])],selected:!1,bookmarked:!1})}}s=[...s,...r].slice(0,32),K=r.length,f=f??(r.length>0?`${r.length}곳 더 넣었어요`:"추가할 곳이 없어요"),y=`${(0,n.domainLabelKo)(v)} ${s.filter(e=>e.visible).length}곳`}if("filter"===e.op){m={...m,...e.filter??{}};let t=(s=(0,o.forcePinnedVisible)(p(s,m))).filter(e=>e.visible).length;f=f??`${t}곳만 남겼어요`,y=`${(0,n.domainLabelKo)(a.domain)} ${t}곳`}if("sort"===e.op&&(s=function(e,t){if(!t)return[...e];let n=[...e];return"price_asc"===t?n.sort((e,t)=>
1(e.priceBand??99)-(t.priceBand??99)):"rating_desc"===t&&n.sort((e,t)=>(t.rating??0)-(e.rating??0)),n}(s,e.sortBy??null),f=f??"정렬했어요"),"remove"===e.op){let t=new Set(e.nodeIds??[]);I=s.length-(s=s.filter(e=>!t.has(e.id)&&!t.has(e.placeId))).length,g=g.filter(e=>!t.has(e)),h=h.filter(e=>!t.has(e)),f=f??"빼 두었어요",y=`${s.filter(e=>e.visible).length}곳`}if("select"===e.op){let t=new Set(e.nodeIds??[]);g=(s=s.map(e=>({...e,selected:t.has(e.id)||t.has(e.placeId)}))).filter(e=>e.selected).map(e=>e.id),f=f??"선택했어요"}if("deselect"===e.op){let t=new Set(e.nodeIds??[]);g=(s=s.map(e=>0===t.size||t.has(e.id)||t.has(e.placeId)?{...e,selected:!1}:e)).filter(e=>e.selected).map(e=>e.id),f=f??"선택을 해제했어요"}if("bookmark"===e.op){let t=new Set(e.nodeIds??[]),n=e.pin,a=(s=s.map(e=>{if(!t.has(e.id)&&!t.has(e.placeId))return e;let a=!0===n||!1!==n&&!e.bookmarked;return{...e,bookmarked:a,visible:!!a||e.visible}})).filter(e=>e.bookmarked).length,i=s.some(e=>(t.has(e.id)||t.has(e.placeId))&&e.bookmarked);f=f??(!1!==n&&i?`고정했어요 \xb7 장바구니 ${a}`:`고정 해제 \xb7 장바구니 ${a}`)}if("compare"===e.op&&(h=(e.nodeIds??g).slice(0,5),f=f??`${h.length}곳 비교`),"simulate"===e.op){let t=e.simulateScenarioKo?.trim()||"가정";if(/비|rain/i.test(t)){let e=e=>{let t=`${e.title} ${e.summaryKo} ${e.tags.join(" ")}`,n=0;return/실내|박물관|미술관|몰|아케이드|카페|식당|호텔|숙소|indoor|museum|mall|cafe/iu.test(t)&&(n+=4),("eatery"===e.kind||"lodging"===e.kind)&&(n+=2),("poi"===e.kind||"amenity"===e.kind)&&(n+=1),(e.tags.includes("photo_spot")||/야외|공원|다리|bridge|park|outdoor/iu.test(t))&&(n-=3),(e.bookmarked||e.selected)&&(n+=5),n};s=[...s].sort((t,n)=>e(n)-e(t)),f="비 예보 · 실내 위주 동선으로 바꿨어요"}else if(/한적|덜\s*붐|quiet|crowd|혼잡/i.test(t)){let e=e=>{let t=`${e.title} ${e.summaryKo} ${e.tags.join(" ")}`,n=e.rating??0;return/한적|조용|골목|사찰|절|temple|quiet|local/iu.test(t)&&(n+=2),(e.tags.includes("photo_spot")||/유명|핫플|관광|도톤보리|난바/iu.test(t))&&(n-=1.5),(e.bookmarked||e.selected)&&(n+=4),n};s=[...s].sort((t,n)=>e(n)-e(t)),f="덜 붐비는 순으로 바꿨어요"}else/100|예산|budget|달러/i.test(t)?(m={...m,maxPriceBand:2},s=(0,o.forcePinnedVisible)(p(s,m)),f="예산 가정 · 저가 숙소만 남겼어요"):f=`가정: ${t}`;y=`동선 ${s.filter(e=>e.visible).length}곳`}"optimize_route"===e.op&&(s=i(s,g[0]??null),f=f??"동선을 가까운 순으로 바꿨어요",y=`동선 ${s.filter(e=>e.visible).length}곳`),"commit"===e.op&&(b="committing",f=f??"지구에 남기는 중…");let _=s.filter(e=>e.visible).length;"deselect"!==e.op&&(k=function(e){let t=(0,n.domainLabelKo)(e.prev.domain),a=[...e.nodeIds??[]],i=new Date().toISOString();switch(e.op){case"add_nodes":case"find_similar":return{actionKo:`${t} ${(e.addedCount??0)||"후보"} 생성`,reasonsKo:["find_similar"===e.op?"선택 노드와 유사도 높음":"검색 의도와 장소 조건 일치","예산·평점 후보군에 포함"],impactsKo:[`보이는 곳 ${e.nextVisibleCount}곳`,"선택지 다양성 증가"],nodeIds:a,atIso:i};case"filter":return{actionKo:"필터 적용",reasonsKo:[e.changeKo?.trim()||"말한 조건에 맞춤","예산·평점·태그 교집합"],impactsKo:[`${e.nextVisibleCount}곳만 남김`,"노이즈 후보 감소"],nodeIds:a,atIso:i};case"remove":return{actionKo:"노드 삭제",reasonsKo:["사용자가 제외를 요청"],impactsKo:[`${e.removedCount??1}곳 제거`,`남은 곳 ${e.nextVisibleCount}`],nodeIds:a,atIso:i};case"compare":return{actionKo:"비교 묶음",reasonsKo:["나란히 보고 고르기"],impactsKo:[`${a.length||e.prev.compareIds.length}곳 비교`],nodeIds:a,atIso:i};case"simulate":return{actionKo:"가정 시뮬",reasonsKo:[e.simulateScenarioKo?.trim()||"가정 시나리오","날씨·예산 조건 반영"],impactsKo:[e.changeKo?.trim()||"우선순위 재정렬",`보이는 곳 ${e.nextVisibleCount}`],nodeIds:a,atIso:i};case"optimize_route":return{actionKo:"동선 최적화",reasonsKo:["가까운 순 방문","이동 거리 최소화"],impactsKo:["예상 이동 감소","방문 순서 갱신"],nodeIds:a,atIso:i};case"select":return{actionKo:"노드 선택",reasonsKo:["자세히 보기 / 다음 편집 대상"],impactsKo:["WHY · 예약 준비 가능"],nodeIds:a,atIso:i};case"bookmark":return{actionKo:"작업장 고정",reasonsKo:["장바구니 핀 · X 전까지 유지","다른 검색에도 남김"],impactsKo:[e.changeKo?.trim()||"고정 목록 갱신"],nodeIds:a,atIso:i};case"commit":return{actionKo:"Reality Commit 준비",reasonsKo:["Draft → Globe 반영"],impactsKo:[`${e.nextVisibleCount}곳 Forest에 심기`],nodeIds:a,atIso:i};default:return{actionKo:e.changeKo?.trim()||"Workspace 변경",reasonsKo:["자연어 의도 반영"],impactsKo:[`보이는 곳 ${e.nextVisibleCount}`],nodeIds:a,atIso:i}}}({op:e.op,prev:a,nextVisibleCount:_,addedCount:K,removedCount:I,nodeIds:e.n
1odeIds??("compare"===e.op?h:g),simulateScenarioKo:e.simulateScenarioKo,changeKo:f}));let w=d(a,{nodes:s,filter:m,selectedIds:g,compareIds:h,summaryKo:y,lastChangeKo:f,status:b,lastWhy:k,domain:v,query:x??void 0});if((0,r.writeContextWorkspace)((0,l.withWorkspaceRelationships)(w,x)),"select"===e.op&&g.length>0){let e=s.find(e=>g.includes(e.id)&&e.selected)??s.find(e=>e.selected)??null;e&&("lodging"===e.kind?(0,c.recordHotelSelected)({contextEventId:a.contextEventId,labelKo:e.title,placeId:e.placeId,objectId:e.id}):"eatery"===e.kind&&(0,c.recordRestaurantAdded)({contextEventId:a.contextEventId,labelKo:e.title,placeId:e.placeId,objectId:e.id}))}return w},"parseWorkspaceUtteranceTransition",0,function(e){let t=e.trim();if(!t)return null;if(/되돌|undo/i.test(t))return{op:"undo"};if(/다시\s*적용|redo/i.test(t))return{op:"redo"};if(/동선|최적화|optimize|route\s*opt|가까운\s*순/i.test(t))return{op:"optimize_route"};if(/비슷|similar|관련|더\s*넣/i.test(t))return{op:"find_similar"};if(/오션|ocean|바다\s*뷰|씨뷰|sea\s*view/i.test(t))return{op:"filter",filter:{tagIncludes:["ocean_view"]}};if(/평점|별점|rating|별\s*\d/i.test(t)){let e=t.match(/(\d+(?:\.\d+)?)/);return{op:"filter",filter:{minRating:e?.[1]?Number(e[1]):4.5}}}return/더\s*싸|저렴|싼|가성비|budget|cheap|가격\s*낮은/i.test(t)?{op:"filter",filter:{maxPriceBand:2},sortBy:"price_asc"}:/예약\s*가능|바로\s*예약|reservable/i.test(t)?{op:"filter",filter:{tagIncludes:["reservable"]}}:/현지인|로컬|local\s*favorite/i.test(t)?{op:"filter",filter:{tagIncludes:["local_favorite"]}}:/고정\s*해제|핀\s*해제|언핀|unpin|장바구니\s*빼/i.test(t)?{op:"bookmark",pin:!1}:/고정|핀\s*하|장바구니|pin\s*(this|it)?|bookmark/i.test(t)?{op:"bookmark",pin:!0}:/삭제|지워|빼|제외|없애|remove|delete/i.test(t)?{op:"remove"}:/비교|compare|vs/i.test(t)?{op:"compare"}:/만약|가정|if\s+it|비가|비\s*오면|예산\s*넘/i.test(t)?{op:"simulate",simulateScenarioKo:t}:/이거|이걸로|commit|확정|남겨|지구에|커밋/i.test(t)?{op:"commit"}:null}],809214)},363626,839160,e=>{"use strict";var t=e.i(809214),n=e.i(301008),a=e.i(416094),i=e.i(565354),o=e.i(471580);e.s(["commitContextWorkspaceToGlobe",0,function(e){let r=e.contextEventId.trim(),l=(0,n.readContextWorkspace)(r);if(!l||"closed"===l.status)return{ok:!1,state:null,committedCount:0};(0,t.applyWorkspaceTransition)({contextEventId:r,op:"commit"});let s=(0,n.readContextWorkspace)(r);if(!s)return{ok:!1,state:null,committedCount:0};let c=new Set((e.nodeIds??s.selectedIds).map(e=>e.trim()).filter(Boolean)),u=s.nodes.filter(e=>e.visible);c.size>0&&(u=u.filter(e=>c.has(e.id)||c.has(e.placeId))),0===u.length&&(u=s.nodes.filter(e=>e.visible).slice(0,8));let d="eatery"===s.domain?"eatery":"lodging"===s.domain?"lodging":"poi";(0,a.stampSearchToolResultsToDiff)({contextEventId:r,domain:d,query:s.query,candidates:u.map(e=>({id:e.placeId,labelKo:e.title,lat:e.lat,lng:e.lng,rating:e.rating,priceBand:e.priceBand,amountLabel:e.amountLabel,source:"liteapi"===e.source||"seed"===e.source||"review"===e.source||"booking"===e.source?e.source:"maps"})),summaryKo:`${u.length}곳 지구에 남겼어요`,batchId:`workspace-commit:${s.workspaceId}`});let p=(0,i.ensureSessionGraph)({contextEventId:r}),m=u.map((e,t)=>{var n;let a;return a=(n={contextEventId:r,domain:e.kind,placeId:e.placeId,title:e.title,lat:e.lat,lng:e.lng,rating:e.rating,priceBand:e.priceBand,index:t}).domain,{id:`gnode:${n.contextEventId}:${n.domain}:${n.placeId.slice(0,24)}`,labelKo:n.title,kind:a,lat:n.lat,lng:n.lng,rating:n.rating,walkMinutes:null,reservable:!1,localFavorite:!1,priceBand:n.priceBand,pinned:0===n.index,visible:!0,alwaysVisible:!1,parentId:null,groupId:null,accent:0===n.index?"orange":"default",projectFolderKo:null,attrs:{placeId:n.placeId,workspaceCommit:!0,rank:n.index+1}}}),g=new Set(m.map(e=>e.kind)),h=p.nodes.filter(e=>!g.has(e.kind));(0,i.writeSessionGraph)({...p,nodes:[...h,...m],selectionIds:m.slice(0,1).map(e=>e.id),updatedAtIso:new Date().toISOString()}),(0,o.bumpSessionGraphProjection)(r);let y={...s,status:"committed",committedAtIso:new Date().toISOString(),updatedAtIso:new Date().toISOString(),lastChangeKo:`${u.length}곳 지구에 남겼어요`,summaryKo:`${u.length}곳 커밋됨`,selectedIds:u.map(e=>e.id),lastWhy:{actionKo:"Reality Commit",reasonsKo:["사용자가 Swipe로 승인"],impactsKo:[`${u.length}곳 Globe Forest에 반영`],nodeIds:u.map(e=>e.id),atIso:new Date().toISOString()},nodes:s.nodes.map(e=>({...e,selected:u.some(t=>t.id===e.id)}
1))};return(0,n.writeContextWorkspace)(y),{ok:!0,state:y,committedCount:u.length}}],363626);let r=/(?:작업장|워크스페이스|workspace)\s*(?:띄워|열어|열기|펼쳐|펼치기|보여)(?:\s*(?:줘|주세요|봐|요))?|^(?:펼치기|작업장\s*열기)$|(?:open|expand)\s*(?:the\s*)?workspace/iu;e.s(["isOpenWorkspaceUtterance",0,function(e){let t=e.trim();return!!t&&!(t.length>64)&&r.test(t)}],839160)},461727,99638,e=>{"use strict";var t=e.i(878884);e.s(["estimateWorkspaceProgressPercent",0,function(e){let n=e.nodes.filter(e=>e.visible&&!(0,t.isWorkspaceReadySlotNode)(e)),a=18;return n.length>0&&(a+=14),n.length>=3&&(a+=8),n.some(e=>"lodging"===e.kind)&&(a+=10),n.some(e=>"eatery"===e.kind)&&(a+=6),e.selectedIds.length>0&&(a+=14),e.nodes.some(e=>e.bookmarked)&&(a+=8),e.realityDraft?.days?.length&&(a+=10),e.constraintMemory?.destinationKo&&(a+=6),(e.constraintMemory?.maxNightlyPriceKrw!=null||e.constraintMemory?.keepTopN!=null||null!=e.filter.minRating||null!=e.filter.maxPriceBand||(e.filter.tagIncludes?.length??0)>0||e.filter.queryIncludes)&&(a+=8),e.lastChangeKo&&(a+=4),Math.min(96,a)}],461727),e.s(["WORKSPACE_AGENT_PLAN_VERSION",0,1],99638)},804250,e=>{"use strict";var t=e.i(305125),n=e.i(902308),a=e.i(233466),i=e.i(429163);function o(e){let t=(0,a.parseOrdinalIndex)(e.utterance),n=null;return null==t&&(n=e.utterance.match(/^([\uac00-\ud7a3A-Za-z0-9·\s]{2,24}?)\s*(?:을|를)?\s*(?:day\s*|데이\s*|Day\s*)\d+/iu)?.[1]?.trim()||null)&&/^(?:그거|이거|저거|호텔|숙소|맛집|식당|카페|장소)$/u.test(n)&&(n=null),{kind:"move_schedule",dayIndex:e.dayIndex,entityId:null,ordinalIndex:t,queryIncludes:n&&n.length>=2?n:null}}e.s(["parseWorkspacePatch",0,function(e){let r=e.trim();if(!r)return null;let l=r.match(/(?:day\s*|데이\s*|Day\s*)(\d+)\s*(?:일차)?\s*(?:숙소(?:로)?|일정(?:으로|에)?|에|로)?\s*(?:옮|넣어|추가|배정)/iu);if(l?.[1])return o({dayIndex:Math.max(0,Number(l[1])-1),utterance:r});if(/일정\s*(?:에\s*)?넣|스케줄\s*(?:에\s*)?넣/iu.test(r)){let e=r.match(/(\d+)\s*일차?/);return o({dayIndex:e?.[1]?Math.max(0,Number(e[1])-1):1,utterance:r})}{let e=/빼|삭제|지워|제외|없애/iu.test(r),t=(0,a.parseOrdinalIndex)(r);if(e&&null!=t)return{kind:"delete_entity",entityIds:[],ordinalIndex:t}}{let e=r.match(/(?:day\s*|데이\s*|Day\s*)(\d+)\s*(?:일차|일)?|(?:(\d+)\s*일차)/iu);if((e?.[1]||e?.[2])&&/빼|삭제|지워|제외|없애/iu.test(r)&&!/넣|추가|바꿔|교체|찾아/iu.test(r)&&!/\d+\s*번/u.test(r)){let t=Math.max(0,Number(e[1]||e[2])-1),n=r.match(/([\uac00-\ud7a3A-Za-z0-9·]{2,16})\s*(?:는|은|을|를)?\s*(?:빼|삭제|지워|제외|없애)/u)?.[1]?.trim()||r.match(/(?:에서|의)\s*([\uac00-\ud7a3A-Za-z0-9·]{2,16})\s*(?:를|을)?\s*(?:빼|삭제|지워)/u)?.[1]?.trim()||null;if(n&&!/^(?:day|데이|일정|일차)$/iu.test(n))return{kind:"remove_schedule",dayIndex:t,entityId:null,queryIncludes:n}}}if(/(?:day\s*|데이\s*|Day\s*)?(\d+)\s*(?:일차|일)?/iu.test(r)&&/동선|루트|이동\s*(?:을\s*)?(?:다시|재)|route\s*rebuild/iu.test(r)){let e=r.match(/(?:day\s*|데이\s*|Day\s*)?(\d+)\s*(?:일차|일)?/iu);return{kind:"rebuild_route",dayIndex:Math.max(0,Number(e?.[1]??"1")-1)}}{let e=(0,i.parseCuisineFromText)(r),t=(0,i.parseMinRatingFromText)(r),a=(0,n.parseMaxNightlyPriceKrw)(r),o=(0,i.isWorkspaceNlControlUtterance)(r),l=/더\s*싼|더\s*싸|저렴한\s*순|가성비|싼\s*순|cheap|cheaper/iu.test(r),s=/이\s*중|그중|그\s*중|필터|정렬|가까운\s*순|평점\s*높|별점\s*높|상위\s*\d|남겨|남기|\d+\s*개\s*만|\d+\s*곳\s*만/iu.test(r),c=/다시\s*(?:찾|보여|검색|골라)|다른\s*(?:거|곳|호텔|숙소)/iu.test(r),u=/역\s*근처|역앞|역세권|([가-힣A-Za-z0-9]+역)\s*(근처|주변|앞|에서)/u.test(r)||/근처|주변|near/iu.test(r)&&/난바|도톤|우메다|namba|umeda|USJ|유니버설|유니버셜/iu.test(r),d=/찾아|검색|보여|해줘|호텔|숙소|lodging|hotel/iu.test(r),p=/이\s*중|그중|그\s*중|남겨|남기/iu.test(r);if((l||s||o)&&!c&&!(u&&d&&!p&&!c)){let n=function(e){let t=e.match(/(?:상위\s*)?(\d+)\s*개|(?:만\s*)?(\d+)\s*개\s*(?
1:만|보여|남|골라)|(\d+)\s*곳\s*(?:만|보여|남|골라)/u);if(!t)return null;let n=Number(t[1]||t[2]||t[3]);return!Number.isFinite(n)||n<1||n>20?null:n}(r),i=null!=a&&(s||o||/남겨|남기|만\s*(?:남겨|남기|보여|골라|해줘)/iu.test(r))?a:null,c=l||/가성비|싼\s*순/iu.test(r),u=null!=t||/평점\s*높|별점\s*높|rating/iu.test(r),d=/가까운\s*순/iu.test(r);return{kind:"filter_entity",filter:{...null!=t?{minRating:t}:u?{minRating:4}:{},...e?{tagIncludes:[e.tag],queryIncludes:e.needles[0]??null}:{},...null!=n?{keepTopN:n}:{},...null!=i?{maxNightlyPriceKrw:i}:{},...c&&null==n&&null==i?{relativeCheaper:!0}:{},sortBy:c?"value":u||null!=t?"rating":d?"value":null}}}if(l&&c)return{kind:"replace_entity",domain:/맛집|식당|restaurant/iu.test(r)?"eatery":"lodging",cheaper:!0,query:r}}if(/역\s*근처|역앞|역세권|station\s*near|near\s*(the\s*)?station/iu.test(r)||/([가-힣A-Za-z0-9]+역)\s*(근처|주변|앞)/u.test(r)){let e=r.match(/([가-힣A-Za-z0-9]+역)/u),n=(0,t.parseLodgingStayTypeFromText)(r);return{kind:"spatial_constraint",nearLabelKo:e?.[1]?.trim()||"역",stationNear:!0,meters:800,stayType:n??null}}if(/근처|주변|near/iu.test(r)&&/난바|도톤|우메다|namba|umeda/iu.test(r)){let e=r.match(/(난바|도톤보리|우메다|Namba|Umeda)/iu)?.[1]??"근처",n=(0,t.parseLodgingStayTypeFromText)(r);return{kind:"spatial_constraint",nearLabelKo:e,stationNear:/역/u.test(r),meters:1e3,stayType:n??null}}if(/근처|주변|near/iu.test(r)&&/USJ|유니버설|유니버셜|universal/iu.test(r))return{kind:"spatial_constraint",nearLabelKo:"유니버설 스튜디오 재팬",stationNear:!1,meters:1500,stayType:(0,t.parseLodgingStayTypeFromText)(r)??null};let s=(0,t.parseLodgingStayTypeFromText)(r);if(s){if(/만\s*(?:보|해|줘|남)|위주/iu.test(r)&&!/찾아|검색|다시|바꿔|교체/iu.test(r))return{kind:"filter_entity",filter:{tagIncludes:[`stay:${s}`]}};
1if(/만\s*(보|해|줘)|위주|바꿔|바꾸|선호|보여|찾아|검색|해줘|보여줘|로\s*해|으로\s*해/iu.test(r)||"hotel"!==s)return{kind:"replace_entity",domain:"lodging",stayType:s,query:r}}return/빼|삭제|지워|제외|없애/iu.test(r)?{kind:"delete_entity",entityIds:[]}:/시뮬|시뮬레이션|what\s*if|가정해/iu.test(r)?{kind:"simulation",scenarioKo:r}:/드래프트|draft|초안\s*만들|준비\s*해/iu.test(r)?{kind:"create_draft",labelKo:r}:/비교|connect|연결해/iu.test(r)?{kind:"connect_entity",fromId:"",toId:"",relation:"compare",labelKo:"비교"}:null}])},20957,931544,204667,890503,751382,472181,374581,779267,905699,540422,421610,357220,710297,954696,361888,352904,69225,399947,589233,21251,429105,205592,84549,227603,75010,577996,549419,519384,85724,80933,158460,36824,e=>{"use strict";e.i(804250);var t=e.i(809214),n=e.i(301008),a=e.i(137032),i=e.i(305125);function o(){return{stayType:null,maxPriceBand:null,minRating:null,stationNear:!1,onsenRequired:!1,editCount:0,lastEditKo:"",updatedAtIso:new Date(0).toISOString()}}function r(e){return`stay:${e}`}function l(e){let t=e.trim();if(!t)return null;let n=(0,i.parseLodgingStayTypeFromText)(t),a=/더\s*싸|저렴|싼|가성비|budget|cheap|가격\s*낮은/iu.test(t),o=/역\s*근처|역앞|역세권|역에서\s*가깝|station\s*near|near\s*(the\s*)?station|가까운\s*역/iu.test(t),r=/온천|onsen|노천탕|温泉/iu.test(t),l=null;if(/평점|별점|rating|리뷰\s*좋은|평\s*높은/iu.test(t)){let e=t.match(/(\d+(?:\.\d+)?)/);l=e?.[1]?Number(e[1]):4.5}let s={...n?{stayType:n}:{},...a?{maxPriceBand:2}:{},...o?{stationNear:!0}:{},...r?{onsenRequired:!0}:{},...null!=l?{minRating:l}:{}};return null==s.stayType&&null==s.maxPriceBand&&null==s.minRating&&!0!==s.stationNear&&!0!==s.onsenRequired?null:(!n||/위주|바꿔|바꾸|으로\s*해|로\s*해|만\s*보|선호|중심|필수로|우선|좀\s*더|더\s*싸|저렴|가성비|역\s*근처|역앞|역세권|온천|료칸|캡슐|호스텔|게스트|한옥|민박|리조트|patch|prefer|instead|only/iu.test(t)||a||o||!r,s)}function s(e,t,n){let a=e??o();return{stayType:void 0!==t.stayType?t.stayType:a.stayType,maxPriceBand:void 0!==t.maxPriceBand?t.maxPriceBand:a.maxPriceBand,minRating:void 0!==t.minRating?t.minRating:a.minRating,stationNear:void 0!==t.stationNear?t.stationNear:a.stationNear,onsenRequired:void 0!==t.onsenRequired?t.onsenRequired:a.onsenRequired,editCount:a.editCount+1,lastEditKo:n,updatedAtIso:new Date().toISOString()}}function c(e){let t=[];if(e.stayType){let n=(0,i.getLodgingStayTypeEntry)(e.stayType)?.labelKo??e.stayType;t.push(`숙소 선호 → ${n}`)}return null!=e.maxPriceBand&&t.push("예산 비중 ↑"),e.stationNear&&t.push("역 근처 우선"),e.onsenRequired&&t.push("온천 필수"),null!=e.minRating&&t.push(`평점 ${e.minRating}+`),t.join(" · ")||"작업 조건을 바꿨어요"}function u(e,t,n){let a=(0,i.getLodgingStayTypeEntry)(n);return!!a&&a.filterSignal.test(`${e} ${t}`)}e.s(["describeWorkspaceRealityPatch",0,c,"emptyWorkspaceRealityPlan",0,o,"mergeWorkspaceRealityPlan",0,s,"nodeMatchesStayTypeBlob",0,u,"parseWorkspaceRealityPatch",0,l,"stayTypeTag",0,r],931544);var d=e.i(44877);function p(e){var o;let p,m,g,h=e.contextEventId.trim(),y=e.utterance.trim(),f=e.patch??l(y);if(!h||!f)return{handled:!1,replyKo:null,needsRescout:!1,scoutQuery:null,plan:null,visibleCount:0};let b=(0,n.readContextWorkspace)(h);if(!b)return{handled:!1,replyKo:null,needsRescout:!1,scoutQuery:null,plan:null,visibleCount:0};let k=c(f),K=s(b.realityPlan,f,k),I=b.nodes.map(e=>({...e,tags:function(e,t,n,a){let i=[...n];if(a.stayType&&u(e,t,a.stayType)){let e=r(a.stayType);i.includes(e)||i.push(e)}return a.onsenRequired&&/온천|onsen|노천|温泉/iu.test(`${e} ${t}`)&&!i.includes("onsen")&&i.push("onsen"),i}(e.title,e.summaryKo,e.tags,K)}));(0,n.writeContextWorkspace)((0,a.withWorkspaceRelationships)({...b,nodes:I,realityPlan:K,lastChangeKo:k,updatedAtIso:new Date().toISOString()}));let v=(p=[],K.stayType&&p.push(r(K.stayType)),K.onsenRequired&&p.push("onsen"),{maxPriceBand:K.maxPriceBand,minRating:K.minRating,tagIncludes:p.length?p:null,queryIncludes:null}),x=null!=K.maxPriceBand&&K.maxPriceBand<=2?"price_asc":null!=K.minRating?"rating_desc":null;(0,t.applyWorkspaceTransition)({contextEventId:h,op:"filter",filter:v,sortBy:x,changeKo:k});
1let _=(0,n.readContextWorkspace)(h);_&&(0,n.writeContextWorkspace)({..._,realityPlan:K,lastChangeKo:k});let w=(0,n.readContextWorkspace)(h)?.nodes.filter(e=>e.visible).length??0,C=null!=f.stayType&&f.stayType!==(b.realityPlan?.stayType??null)||!0===f.stationNear||!0===f.onsenRequired||w<2,S=(o={utterance:y,plan:K,areaHint:b.summaryKo?.replace(/\s*여행.*$/u,"").trim()||b.query||null},m=(0,i.resolveLodgingStaySearchKeyword)({stayType:o.plan.stayType,message:o.utterance,areaHint:o.areaHint}),g=[],(m?g.push(m):o.plan.stayType&&g.push((0,i.getLodgingStayTypeEntry)(o.plan.stayType)?.searchKeywordKo??"숙소"),o.plan.stationNear&&g.push("역 근처"),o.plan.onsenRequired&&g.push("온천"),null!=o.plan.maxPriceBand&&o.plan.maxPriceBand<=2&&g.push("가성비"),0===g.length)?o.utterance.trim()||"숙소":g.join(" "));if(K.stayType)try{(0,d.learnPreference)({domain:"lodging",key:"stayType",value:K.stayType,sourceContextId:h})}catch{}let T=K.stayType?(0,i.getLodgingStayTypeEntry)(K.stayType)?.labelKo:null;return{handled:!0,replyKo:T?`숙소 선호를 ${T}(으)로 바꿨어요${C?" · 후보를 다시 맞출게요":` \xb7 ${w}곳`}`:`${k}${C?" · 후보를 다시 맞출게요":` \xb7 ${w}곳`}`,needsRescout:C,scoutQuery:S,plan:K,visibleCount:w}}e.s(["applyWorkspaceRealityPatch",0,p],204667),e.i(783503);var m=e.i(965156),g=e.i(743787),h=e.i(741226);e.i(183587);var y=e.i(15524);let f=/USJ|유니버설|유니버셜|universal\s*studios?/iu;function b(e){let t=e.trim();if(!t)return"";let n=t.match(/([가-힣A-Za-z0-9·]+역)/u)?.[1];if(n)return n;let a=t.match(/([가-힣A-Za-z0-9·\s]{2,24}?)\s*(?:근처|주변|앞|near|around)/iu)?.[1];return a?a.replace(/^(?:의|이|그|저)\s*/u,"").replace(/\s*(?:호텔|숙소|맛집|카페).*$/u,"").trim():t}function k(e){let t=(0,h.resolveOsakaMetroStationFromText)(e);return t?{geoId:`geo:jp:osaka:metro:${t.id}`,labelKo:`${t.nameKo}역`,lat:t.lat,lng:t.lng,kind:"station",provider:"osaka_metro"}:null}function K(e){let t=e.trim();if(!t)return null;let n=t.match(/([가-힣A-Za-z0-9·]+역)/u)?.[1]?.trim();if(n){let e=k(n)??k(t);if(e)return e;let a=(0,g.resolveWorldGeoEntity)(n);if(a?.node&&Number.isFinite(a.node.centroid.lat)&&Number.isFinite(a.node.centroid.lng))return{geoId:a.node.id,labelKo:a.node.labels.ko,lat:a.node.centroid.lat,lng:a.node.centroid.lng,kind:"poi"===a.node.kind||/역|駅|station/iu.test(n)?"station":"city"===a.node.kind?"city":"area",provider:"world_geo"}}let a=b(t);if(a&&a.length>=2&&a!==t){let e=k(a);if(e)return e;let t=(0,g.resolveWorldGeoEntity)(a);if(t?.node&&Number.isFinite(t.node.centroid.lat)&&Number.isFinite(t.node.centroid.lng)&&("poi"===t.node.kind||/역|駅|station|USJ|유니버설/iu.test(a)))return{geoId:t.node.id,labelKo:t.node.labels.ko,lat:t.node.centroid.lat,lng:t.node.centroid.lng,kind:"poi"===t.node.kind?"poi":"city"===t.node.kind?"city":"area",provider:"world_geo"}}if(f.test(t)){let e=(0,m.getWorldGeoNode)("geo:jp:osaka:usj");if(e)return{geoId:e.id,labelKo:e.labels.ko,lat:e.centroid.lat,lng:e.centroid.lng,kind:"poi",provider:"world_geo"}}let i=k(t);if(i)return i;let o=(0,g.resolveWorldGeoEntity)(t);return o?.node&&Number.isFinite(o.node.centroid.lat)&&Number.isFinite(o.node.centroid.lng)?("city"===o.node.kind||"prefecture"===o.node.kind||"metropolis"===o.node.kind)&&/근처|주변|near|호텔|숙소|캡슐|호텔로/iu.test(t)&&/역/u.test(t)?null:{geoId:o.node.id,labelKo:o.node.labels.ko,lat:o.node.centroid.lat,lng:o.node.centroid.lng,kind:"poi"===o.node.kind?"poi":"city"===o.node.kind?"city":"area",provider:"world_geo"}:null}async function I(e){let t=K(e);if(t)return t;let n=b(e)||e.trim();if(!n)return null;let a=k(n);if(a)return a;for(let t of function(e,t){let n=e.trim();if(!n)return[];let a=[n],i=n.replace(/(?:역|駅|station)$/iu,"").trim();return(/오사카|大阪|osaka|도쿄|東京|교토|京都|japan|일본/iu.test(t)||/역$/u.test(n)||(0,h.resolveOsakaMetroStationFromText)(n)||/[가-힣]/u.test(i))&&(a.push(`${i} Station Osaka Japan`),a.push(`${i}駅 大阪`),a.push(`${n} 大阪`)),[...new Set(a.map(e=>e.trim()).filter(Boolean))]}(n,e))try{let e=await (0,y.resolveLocationFromText)(t),a=e?.entity;if(!a||!Number.isFinite(a.lat)||!Number.isFinite(a.lng))continue;let i=/역|駅|station/iu.test(n)||/station/iu.test(a.labelEn)?"station":a.admin.city?"area":"poi";return{geoId:a.id||`geo:geocode:${a.lat.toFixed(5)},${a.lng.toFixed(5)}`,labelKo:a.labelKo||n,lat:a.lat,lng:a.lng,kind:i,provider:"registry"===a.provider?"registry":"nominatim"}}catch{}return null}e.s(["buildAnchorLodgingContinuumUtterance",0,function(e,t){let n=e.trim();return/여행|트립|trip/iu.test(n)?n:`${t.labelKo} 여행 \xb7 ${n}`},"extractNearPlaceLabelFromUtterance",0,b,"isNearLodgingUtterance",0,function(e){let t=e.trim();return!!t&&/근처|주변|near|around|기준/iu.test(t)&&/숙소|호텔|hotel|lodging|캡슐|료칸/iu.test(t)},"resolveRealityAnchorFromUtterance",0,K,"resolveRealityAnchorFromUtteranceAsync",0,I],890503);let v=/숙소|호텔|hotel|lodging|캡슐|료칸|맛집|식당|레스토랑|이자카야|카페|cafe|커피|명소|관광|놀거리|볼거리|poi|약국|편의점|쇼핑|마트|아울렛|restaurant/iu;function x(e){let t=e.trim();return!!t&&/근처|주변|near|around|기준으로|기준\s/iu.test(t)&&v.test(t)}
1function _(e){if(!e.hasNearConstraint)return{ok:!1,code:"NO_NEAR_CONSTRAINT",statusKo:"근처 조건이 없어요",candidates:[]};let t=e.candidates??[];if(t.length>=2&&!e.anchor){let e=t.slice(0,3).map(e=>e.labelKo).join(" · ");return{ok:!1,code:"ANCHOR_AMBIGUOUS",statusKo:`어느 곳인지 골라 주세요 \xb7 ${e}`,candidates:t.slice(0,3)}}let n=e.anchor,a=e.nearLabelKo?.trim()||"그곳";return n&&Number.isFinite(n.lat)&&Number.isFinite(n.lng)?"city"===n.kind?{ok:!1,code:"ANCHOR_CITY_REJECTED",statusKo:`${n.labelKo}은(는) 너무 넓어요 \xb7 역\xb7명소처럼 구체적인 기준으로 말해 주세요`,candidates:[]}:{ok:!0,anchor:{id:n.geoId,labelKo:n.labelKo,lat:n.lat,lng:n.lng,kind:n.kind}}:{ok:!1,code:"ANCHOR_NOT_FOUND",statusKo:`'${a}'을(를) 찾지 못했어요`,candidates:t.slice(0,3)}}function w(e){let t=e.utterance.trim();if(!x(t))return{gated:!1};let n=b(t);return{gated:!0,..._({hasNearConstraint:!0,anchor:K(t),nearLabelKo:n,candidates:e.candidates})}}async function C(e){let t=e.utterance.trim();if(!x(t))return{gated:!1};let n=b(t);return{gated:!0,..._({hasNearConstraint:!0,anchor:await I(t),nearLabelKo:n,candidates:e.candidates})}}e.s(["gateNearScoutAnchor",0,w,"gateNearScoutAnchorAsync",0,C],751382);var S=e.i(767299);function T(e,t,n,a){return 1e3*(0,S.haversineKm)(e,t,n,a)}function L(e){let t=function(e){let t=e.patchMeters;if("number"==typeof t&&Number.isFinite(t)&&t>0)return Math.round(t);let n=e.fallbackMeters;return"number"==typeof n&&Number.isFinite(n)&&n>0?Math.round(n):800}({patchMeters:e.patchMeters??e.radiusMeters}),n=[],a=[];for(let i of e.candidates){let o=i.lat,r=i.lng;if(null==o||null==r||!Number.isFinite(o)||!Number.isFinite(r)){a.push(i);continue}T(e.anchor.lat,e.anchor.lng,o,r)<=t?n.push(i):a.push(i)}let i=e.anchor.labelKo?.trim()||"기준점",o=null;return e.candidates.length>0&&0===n.length?o=`${i} ${t}m 안쪽에 맞는 곳이 없어요`:a.length>0&&n.length>0&&(o=`${i} ${t}m \xb7 ${n.length}곳 (${a.length}곳 제외)`),{kept:n,dropped:a,radiusMeters:t,keptCount:n.length,droppedCount:a.length,statusKo:o}}function E(e){var a;let i=e.contextEventId.trim(),o=(0,n.readContextWorkspace)(i);if(!o)return null;let r=e.anchor.lat,l=e.anchor.lng;if(null==r||null==l||!Number.isFinite(r)||!Number.isFinite(l))return null;let s=e.geoId?.trim()||e.anchor.entityId||`anchor:${e.anchor.titleKo}`,c=o.nodes.find(t=>t.id===e.anchor.entityId||t.placeId===s||t.placeId===e.anchor.entityId||"poi"===t.kind&&/usj|유니버설|유니버셜|universal/iu.test(t.title)&&/usj|유니버설|유니버셜|universal/iu.test(e.anchor.titleKo))??null;if(c){if(e.mapOnlyLocate){let e=c.tags.includes("place_locate")||c.tags.includes("address_locate")?c:{...c,tags:[...c.tags,"place_locate"]};e!==c&&(0,n.writeContextWorkspace)({...o,nodes:o.nodes.map(t=>t.id===c.id?e:t),updatedAtIso:new Date().toISOString()})}return(0,t.applyWorkspaceTransition)({contextEventId:i,op:"select",nodeIds:[c.id],changeKo:`Anchor \xb7 ${c.title}`}),c.id}let u="hotel"===(a=e.anchor.kind)||"lodging"===a?"lodging":"station"===a||"amenity"===a?"amenity":"restaurant"===a||"cafe"===a?"eatery":"poi",d="lodging"===u?"lodging":"eatery"===u?"eatery":"poi",p=e.mapOnlyLocate?(0,t.applyWorkspaceTransition)({contextEventId:i,op:"add_nodes",domain:d,addHits:[{id:s,labelKo:e.anchor.titleKo||e.anchor.labelKo,domain:d,lat:r,lng:l,rating:null,walkMinutes:null,reservable:!1,localFavorite:!1,priceBand:null,source:"maps",reasonKo:e.summaryKo??`${e.anchor.labelKo} 위치`,activitySubtype:"place_locate"}],changeKo:`위치 \xb7 ${e.anchor.labelKo}`}):(0,t.applyWorkspaceTransition)({contextEventId:i,op:"add_nodes",domain:d,addCandidates:[{id:s,labelKo:e.anchor.titleKo||e.anchor.labelKo,lat:r,lng:l,rating:null,walkMinutes:null,amountLabel:null,priceBand:null,source:"reality_anchor"}],changeKo:`Anchor + ${e.anchor.labelKo}`}),m=p?.nodes.find(t=>t.placeId===s||t.title===e.anchor.titleKo||t.id.includes(s))??null;return m?((0,t.applyWorkspaceTransition)({contextEventId:i,op:"select",nodeIds:[m.id],changeKo:`위치 \xb7 ${m.title}`}),m.id):null}e.s(["DEFAULT_NEAR_RADIUS_METERS",0,800,"distanceGateNearScout",0,L,"metersBetween",0,T],472181),e.s(["ensureWorkspaceAnchorNode",0,E],374581);let P="__anchor_retype__",A=["난바역","모리노미아역","텐노지역","우메다역"];e.s(["ANCHOR_RETYPE_CHIP_UTTERANCE",0,P,"buildAnchorFailSoftChips",0,function(e){let t=e.utterance.trim(),n=(e.candidates??[]).map(e=>
1e.labelKo.trim()).filter(Boolean).slice(0,3),a=(n.length>0?n:"ANCHOR_NOT_FOUND"===e.code||"ANCHOR_AMBIGUOUS"===e.code||"ANCHOR_CITY_REJECTED"===e.code?[...A]:[]).map(e=>({labelKo:e,utterance:function(e){let t=e.utterance.trim(),n=e.nearLabelKo.trim();if(!t||!n)return t;let a=b(t);return a&&a!==n?t.replace(a,n):/근처|주변/u.test(t)?t:(/맛집|식당|카페|호텔|숙소|캡슐|놀거리|명소/u.test(t),`${n} 근처 ${t}`)}({utterance:t,nearLabelKo:e})}));return a.push({labelKo:"다시 입력",utterance:P}),a}],779267);var $=e.i(488529),j=e.i(628632),R=e.i(820371),D=e.i(497436),M=e.i(909047);let W=/호텔|숙소|캡슐|료칸|맛집|레스토랑|카페|편의점|약국|병원|찾아\s*줘|추천해|hotel|restaurant|cafe|near\s+me/iu,O=/[가-힣A-Za-z0-9]{1,12}동\s+\d{1,5}(?:-\d{1,5})?\s*$/u,N=/[가-힣A-Za-z0-9]+(?:대로|로|길)\s+\d{1,5}(?:-\d{1,5})?\s*$/u,F=/[가-힣]{1,10}구\s+[가-힣A-Za-z0-9]{1,12}동\b/u,B=/(?:丁目|番地|番地目|\d+[--]\d+(?:[--]\d+)?号?|[都道府県市区町村郡].{0,24}\d)/u,U=/(?:路|街|巷|大道|弄).{0,12}\d+号?|\d+号|(?:省|市|区|县).{2,40}\d/u,q=/\b\d{1,6}\s+[A-Za-z0-9.'\-]+(?:\s+[A-Za-z0-9.'\-]+){0,6}\s+(?:Street|St\.?|Avenue|Ave\.?|Road|Rd\.?|Boulevard|Blvd\.?|Drive|Dr\.?|Lane|Ln\.?|Way|Court|Ct\.?|Place|Pl\.?|Highway|Hwy\.?)\b/iu,H=/(?:^|\s)\d{1,6}(?:[--/]\d{1,4})?(?:\s|,).{2,60}$|(?:^|\s).{2,40}\s\d{1,6}(?:[--/]\d{1,4})?\s*$/u;function z(e){let t=e.trim().replace(/\s+/gu," ");return!(!t||t.length<4||W.test(t))&&(O.test(t)||N.test(t)||F.test(t))}function G(e){let t=e.trim().replace(/\s+/gu," ");return!(!t||t.length<4||W.test(t))&&!!(z(t)||B.test(t)&&/\d/u.test(t)||U.test(t)||q.test(t)||H.test(t)&&/\d/u.test(t)&&t.length>=6&&t.length<=120&&!/^(어디|where|what|how)\b/iu.test(t)&&/[A-Za-z가-힣一-龯ぁ-んァ-ン]/u.test(t))}function J(e,t){let n=e=>e*Math.PI/180,a=n(t.lat-e.lat),i=n(t.lng-e.lng),o=Math.sin(a/2)**2+Math.cos(n(e.lat))*Math.cos(n(t.lat))*Math.sin(i/2)**2;return 12742*Math.atan2(Math.sqrt(o),Math.sqrt(1-o))}e.s(["haversineKm",0,J],905699);var V=e.i(178716),Q=e.i(304431),Y=e.i(298205),Z=e.i(653809);function X(e){var t,n;let a,i,o,r,l,s=e.osmId?`${e.osmType??"node"}-${e.osmId}`:e.placeId;return{id:`geo:osm:${s}`,labelKo:e.labelKo,subtitleKo:(t=e.displayName,n=e.labelKo,i=(a=t.split(",").map(e=>e.trim()).filter(Boolean)).find(e=>/(?:특별시|광역시|특별자치시|특별자치도|都|道|府|県|省|市)$/u.test(e)),o=a.find(e=>/(?:구|区|郡)$/u.test(e)),r=a.find(e=>/(?:동|町|丁目)$/u.test(e)&&e!==n),(l=[i?.replace(/(?:특별시|광역시|특별자치시|특별자치도)/u,"").trim()??null,o??null,r&&r!==n?r:null].filter(Boolean)).length>0?l.join(" · "):a.slice(1,4).join(" · ")||t),lat:e.lat,lng:e.lng,addressKo:e.displayName,provider:"nominatim"}}async function ee(e){var t;let n,a=e.query.trim().replace(/\s+/gu," ");if(!a||!G(a))return[];let i=Math.min(8,Math.max(1,e.maxResults??6)),o=null!=e.lat&&null!=e.lng&&Number.isFinite(e.lat)&&Number.isFinite(e.lng)?{lat:e.lat,lng:e.lng}:null,r=[],l=(n=a.trim(),/한국|서울|부산|인천|대구|대전|광주|경기도|계양|계산동|테헤란|korea|seoul|busan/iu.test(n)||O.test(n)||N.test(n)||F.test(n)?"kr":/일본|도쿄|오사카|교토|나고야|후쿠오카|東京|大阪|京都|japan|tokyo|osaka|kyoto/iu.test(n)||/[一-龯ぁ-んァ-ン]/.test(n)&&B.test(n)?"jp":/중국|베이징|상하이|광저우|심천|北京|上海|广州|深圳|china|beijing|shanghai/iu.test(n)||U.test(n)?"cn":/\b(?:USA|United States|New York|Los Angeles|Chicago|San Francisco|California|NYC|TX|CA)\b/iu.test(n)||q.test(n)?"us":/\b(?:UK|United Kingdom|London|England|Manchester)\b/iu.test(n)?"gb":null);if(z(a)&&(0,Y.isNaverSearchConfigured)())try{for(let e of(await (0,Z.fetchNaverLocalPlaceCandidates)({query:a,display:12}))){if(null==e.lat||null==e.lng)continue;let t=(e.address??e.name).trim();t&&r.push({id:`geo:naver:${e.place_id}`,labelKo:e.name.trim()||a,subtitleKo:t.length>42?`${t.slice(0,41)}…`:t,lat:e.lat,lng:e.lng,addressKo:t,provider:"naver"})}}catch{}for(let e of(await (0,V.nominatimAutocomplete)(a,i)))r.push(X(e));if(r.length<2&&l)for(let e of(await (0,V.nominatimAutocomplete)(a,i)))r.push(X(e));if(r.length<2)try{for(let e of(await (0,Q.findPlacesByName)({placeName:a,userLat:o?.lat,userLng:o?.lng,maxResults:i})))r.push({id:`geo:gplace:${e.google_place_id??`${e.lat},${e.lng}`}`,labelKo:e.place_name,subtitleKo:(e.formatted_address??e.place_name).slice(0,48),lat:e.lat,lng:e.lng,addressKo:e.formatted_address??e.place_name,provider:"google"})}catch{}return(t=function(e,t=120){let n=[];for(let a of e)n.find(e=>1e3*J({lat:e.lat,lng:e.lng},{lat:a.lat,lng:a.lng})<t)||n.push(a);return n}(r),!o?t:[...t].sort((e,t)=>
1J(o,{lat:e.lat,lng:e.lng})-J(o,{lat:t.lat,lng:t.lng}))).slice(0,i)}var et=e.i(607298),en=e.i(556307);let ea="rimvio-globe-projection-layer-policy",ei={mode:"overview",activeContextEventId:null,visiblePlaceIds:[]},eo={...ei};function er(){window.dispatchEvent(new CustomEvent(ea))}function el(){return eo}function es(e){return eo={...eo,...e,visiblePlaceIds:void 0!==e.visiblePlaceIds?[...e.visiblePlaceIds]:eo.visiblePlaceIds},er(),eo}function ec(e){let t=e?.explicitContextEventId?.trim()??"";if(t&&(0,n.hasProvisionalContextWorkspace)(t))return t;let a=el().activeContextEventId?.trim()??"";if(a&&(0,n.hasProvisionalContextWorkspace)(a))return a;let i=(0,n.listDraftContextWorkspaceEventIds)();for(let e of i)if((0,n.readContextWorkspaceExpanded)(e))return e;return i[0]?.trim()||null}async function eu(e){let t=e.trim();if(!t||t.length<2)return null;try{let e=`https://ko.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(t)}`,n=await fetch(e,{headers:{Accept:"application/json","User-Agent":"RimvioLocationEngine/1.0 (https://rimvio.com; location-os)"},signal:AbortSignal.timeout(8e3),redirect:"follow"});if(!n.ok)return null;let a=await n.json();if("disambiguation"===a.type)return null;let i=a.title?.trim();if(!i)return null;let o=a.coordinates?.lat,r=a.coordinates?.lon;return{titleKo:i,displayTitle:a.displaytitle?.replace(/<[^>]+>/gu,"").trim()||i,lat:"number"==typeof o&&Number.isFinite(o)?o:null,lng:"number"==typeof r&&Number.isFinite(r)?r:null,pageUrl:a.content_urls?.desktop?.page??null,description:a.description?.trim()||null}}catch{return null}}e.s(["publishContextOnlyGlobeProjection",0,function(e){es({mode:"context_only",activeContextEventId:e.trim(),visiblePlaceIds:[]})},"publishFocusGlobeProjection",0,function(e){es({mode:"focus",activeContextEventId:e.contextEventId.trim(),visiblePlaceIds:e.visiblePlaceIds})},"publishGlobeProjectionLayerPolicy",0,es,"readGlobeProjectionLayerPolicy",0,el,"resetGlobeProjectionLayerPolicy",0,function(){eo={...ei},er()},"subscribeGlobeProjectionLayerPolicy",0,function(e){return window.addEventListener(ea,e),()=>window.removeEventListener(ea,e)}],540422),e.s(["hasActiveWorkspaceForGlobePrompt",0,function(e){return null!=ec(e)},"resolveActiveWorkspaceContextId",0,ec],421610);let ed=[{match:/오사카\s*성|osaka\s*castle|大阪城|geo:jp:osaka:osaka-castle/iu,geoId:"geo:jp:osaka:osaka-castle",labelKo:"오사카성",lat:34.6873,lng:135.5262,geometry:{type:"Polygon",coordinates:[[[135.5218,34.6852],[135.5308,34.6852],[135.5308,34.6908],[135.5218,34.6908],[135.5218,34.6852]]]}},{match:/경복궁|gyeongbokgung|geo:kr:seoul:gyeongbokgung/iu,geoId:"geo:kr:seoul:gyeongbokgung",labelKo:"경복궁",lat:37.5796,lng:126.977,geometry:{type:"Polygon",coordinates:[[[126.9742,37.5758],[126.9798,37.5758],[126.9798,37.5808],[126.9742,37.5808],[126.9742,37.5758]]]}}];async function ep(e,t){let n=await (0,V.nominatimGeocodeWithGeometry)(e);if(!n)return null;var a,i={geoId:t?.trim()||`geo:osm:${n.placeId}`,labelKo:n.labelKo,lat:n.lat,lng:n.lng,geometry:n.geometry,boundingbox:n.boundingbox,providerId:"osm",osmType:n.osmType,osmId:n.osmId};let o=null;return(a=i.geometry,a?.type==="Polygon"||a?.type==="MultiPolygon")?o=i.geometry:i.boundingbox&&(o=function(e){let[t,n,a,i]=e;return{type:"Polygon",coordinates:[[[a,t],[i,t],[i,n],[a,n],[a,t]]]}}(i.boundingbox)),o&&Number.isFinite(i.lat)&&Number.isFinite(i.lng)?{geoId:i.geoId,labelKo:i.labelKo,lat:i.lat,lng:i.lng,geometry:o,providerId:i.providerId,osmType:i.osmType??null,osmId:i.osmId??null}:null}async function em(e){let{need:t,providerId:n}=e,a=t.placeQuery?.trim()||t.utterance.trim()||t.geoId?.trim()||"";if("cached_overlay"===n){var i;let e,n,o=(i={query:a,geoId:t.geoId,labelKo:t.placeQuery},e=`${i.geoId??""} ${i.query} ${i.labelKo??""}`,(n=ed.find(t=>t.match.test(e)))?{geoId:n.geoId,labelKo:i.labelKo?.trim()||n.labelKo,lat:n.lat,lng:n.lng,geometry:n.geometry,providerId:"cached_overlay",osmType:null,osmId:null}:null);return o?{ok:!0,object:o}:{ok:!1,reasonKo:"캐시 footprint 없음"}}if("osm"!==n)return{ok:!1,reasonKo:`${n} geometry 미지원`};if(a.length<2)return{ok:!1,reasonKo:"장소 쿼리 없음"};let o=await ep(a,t.geoId);if(!o){let e=await eu(a);e?.titleKo&&e.titleKo!==a&&(o=await ep(e.titleKo,t.geoId))}return o?{ok:!0,object:o}
1:{ok:!1,reasonKo:"OSM Nominatim miss"}}let eg=new Set;function eh(e){let t=[...function(e){switch(e.needId){case"metro_network":return[{providerId:"cached_overlay",priority:100,reasonKo:"오사카·도시 메트로 캐시 오버레이"},{providerId:"osm",priority:40,reasonKo:"OSM subway relations"}];case"shinkansen_network":return[{providerId:"cached_overlay",priority:100,reasonKo:"신칸센 캐시 오버레이"},{providerId:"osm",priority:30,reasonKo:"OSM shinkansen routes"}];case"rail_network":if("한국"===e.regionKo||"korail"===e.operatorHint||/한국|KTX|전국\s*노선/iu.test(e.utterance))return[{providerId:"cached_overlay",priority:100,reasonKo:"한국 철도 캐시 오버레이"},{providerId:"gtfs",priority:40,reasonKo:"GTFS (미연결)"}];return[{providerId:"cached_overlay",priority:80,reasonKo:"오사카 JR 캐시 오버레이"},{providerId:"gtfs",priority:50,reasonKo:"GTFS rail feed (미연결)"},{providerId:"osm",priority:40,reasonKo:"OSM rail routes"}];case"poi_geometry":return[{providerId:"osm",priority:100,reasonKo:"Nominatim / OSM polygon_geojson"},{providerId:"cached_overlay",priority:40,reasonKo:"시드 footprint (오프라인 폴백)"}];case"poi_set":case"event_set":case"amenity_set":return[{providerId:"vendor_api",priority:80,reasonKo:"도메인 Vendor / Maps"},{providerId:"osm",priority:50,reasonKo:"OSM POI / amenity"},{providerId:"workspace_graph",priority:20,reasonKo:"이미 Workspace에 있는 객체"}];default:return[]}}(e)].sort((e,t)=>t.priority-e.priority);return{need:e,candidates:t,selected:t[0]??null}}async function ey(e){let t=e.contextEventId.trim();if(!t)return{ok:!1,statusKo:"context 없음",providerId:null,geometryType:null};let a={needId:"poi_geometry",utterance:e.utterance?.trim()||`${e.labelKo} 위치`,placeQuery:e.query.trim()||e.labelKo,geoId:e.geoId,lat:e.lat,lng:e.lng,regionKo:null,operatorHint:null},i=eh(a),o="Geometry Acquire 실패";for(let e of i.candidates){let i=await em({need:a,providerId:e.providerId});if(!i.ok){o=i.reasonKo;continue}let r=function(e){let{need:t,object:a,contextEventId:i}=e;var o,r={contextEventId:i,object:a};for(let e of(r.object,r.contextEventId.trim(),new Date().toISOString(),eg))e();let l=`${a.labelKo} 영역 \xb7 ${a.providerId}`,s=!1,c=(0,n.readContextWorkspace)(i);if(c&&("editing"===c.status||"committing"===c.status)){let e=(o={need:t,providerId:a.providerId,object:a,statusKo:l},{id:`patch_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,kind:"absorb_geometry",patch:{kind:"absorb_geometry",needId:o.need.needId,providerId:o.providerId,geoId:o.object.geoId,geometryType:o.object.geometry.type,labelKo:o.object.labelKo},utterance:o.need.utterance,statusKo:o.statusKo,atIso:new Date().toISOString(),answerForbidden:!0}),i=Array.isArray(c.patches)?c.patches:[];(0,n.writeContextWorkspace)({...c,lastChangeKo:l,patches:[...i,e].slice(-40),updatedAtIso:e.atIso}),s=!0}return{statusKo:l,providerId:a.providerId,workspacePatched:s,geometryType:a.geometry.type}}({need:a,object:i.object,contextEventId:t});return{ok:!0,statusKo:r.statusKo,providerId:r.providerId,geometryType:r.geometryType}}return{ok:!1,statusKo:o,providerId:i.selected?.providerId??null,geometryType:null}}e.s(["resolveRealityProvider",0,eh],357220);let ef=/(?:어디야|어디에\s*있|어디\s*있|어디\s*가|위치가|위치\s*(?:알려|보여|어때)|어디에\s*위치|where(?:'s|\s+is)|locate)/iu,eb=/(?:위치|좌표|지도에?\s*(?:보여|띄워|올려))/iu,ek=/호텔|숙소|캡슐|료칸|맛집|레스토랑|카페|편의점|약국|병원|찾아\s*줘|추천해|근처\s*(?:숙소|호텔|맛집)|예약\s*준비/iu,eK=/(?:어디야|어디에\s*있(?:어|나요|습니까)?|어디\s*있(?:어|나요)?|어디\s*가|위치가|위치\s*(?:알려|보여)(?:줘|주세요)?|어디에\s*위치|where(?:'s|\s+is)|locate|알려줘|보여줘|해줘|해바|해봐|해죠|좀|please|위치|좌표)/giu;function eI(e){(0,n.writeContextWorkspaceExpanded)(e,!0),(0,en.dispatchContextWorkspaceExpand)({contextEventId:e,source:"nl_open"})}function ev(e){let t=(0,$.answerAdminDivisionQuestion)(e);return t?t.hit.node.labels.ko:e.trim().replace(eK," ").replace(/\s+/gu," ").trim()||e.trim()}async function ex(e){let t,n=(t=ev(e))?function(e){let t=K(e);if(t){let n=(0,g.resolveWorldGeoEntity)(e);return{geoId:t.geoId,labelKo:t.labelKo,lat:t.lat,lng:t.lng,kind:t.kind,hierarchyKo:n?(0,$.formatWorldGeoHierarchyKo)(n):t.labelKo,provider:"reality_graph"}}let n=(0,g.resolveWorldGeoEntity)(e);if(n?.node&&Number.isFinite(n.node.centroid.lat)&&Number.isFinite(n.node.centroid.lng)){var a;return{geoId:n.node.id,labelKo:n.node.labels.ko,lat:n.node.centroid.lat,lng:n.node.centroid.lng,kind:"poi"===(a=n.node.kind)?"poi":"city"===a||"metropolis"===a?"city":"area",hierarchyKo:(0,$.formatWorldGeoHierarchyKo)(n),provider:"reality_graph"}}return null}(t)??function(e){let t=[...(0,j.matchCatalogEntries)(e,R.LANDMARK_CATALOG)].sort((e,t)=>
1t.confidence-e.confidence)[0];if(!t?.geoId)return null;let n=(0,m.getWorldGeoNode)(t.geoId);if(!n||!Number.isFinite(n.centroid.lat)||!Number.isFinite(n.centroid.lng))return null;let a=(0,g.resolveWorldGeoById)(n.id);return{geoId:n.id,labelKo:n.labels.ko||t.label,lat:n.centroid.lat,lng:n.centroid.lng,kind:"poi",hierarchyKo:a?(0,$.formatWorldGeoHierarchyKo)(a):n.labels.ko,provider:"landmark"}}(t)??function(e){let t=(0,M.resolveRunPlaceFromText)(e);if(t){let e=(0,g.resolveWorldGeoEntity)(t.placeLabel);return{geoId:e?.node.id??`geo:reg:${t.placeLabel}`,labelKo:t.placeLabel,lat:t.lat,lng:t.lng,kind:"city",hierarchyKo:e?(0,$.formatWorldGeoHierarchyKo)(e):`대한민국 → ${t.placeLabel}`,provider:"registry"}}let n=(0,D.classifyOverseasManualPlace)(e);if(n){let e=(0,g.resolveWorldGeoEntity)(n.label);return{geoId:e?.node.id??`geo:reg:${n.label}`,labelKo:n.label,lat:n.lat,lng:n.lng,kind:"city"===n.kind?"city":"area",hierarchyKo:e?(0,$.formatWorldGeoHierarchyKo)(e):`${n.countryLabel} → ${n.label}`,provider:"registry"}}return null}(t):null;if(n)return n;let a=ev(e);if(!a)return null;let i=await (0,y.resolveLocationFromText)(a);if(!i)return null;let{entity:o}=i;return{geoId:o.id,labelKo:o.labelKo,lat:o.lat,lng:o.lng,kind:o.admin.city?"city":"poi",hierarchyKo:o.hierarchyKo||o.labelKo,provider:"nominatim"===o.provider||"google"===o.provider?"nominatim":"registry"}}function e_(e){return{entityId:e.geoId,titleKo:e.labelKo,labelKo:e.labelKo,kind:"poi"===e.kind?"attraction":"station"===e.kind?"station":"place",lat:e.lat,lng:e.lng}}function ew(e){let t=ec({explicitContextEventId:e.contextEventId??null})??null,a=!1;return t&&(0,n.hasProvisionalContextWorkspace)(t)||(t=e.contextEventId?.trim()||`place_${Date.now()}`,(0,et.openMapContextWorkspace)({contextEventId:t,domain:"poi",query:e.query,summaryKo:`${e.query} 위치`,candidates:[]}),a=!0),{contextEventId:t,openedWorkspace:a}}async function eC(e){let n=e.utterance.trim();if(!n||!function(e){let t=e.trim();if(!t)return!1;if((0,$.answerAdminDivisionQuestion)(t))return!0;if(ek.test(t))return!1;if(ef.test(t)||eb.test(t))return!0;let n=ev(t);return G(t)||G(n)}(n))return null;let a=(0,$.answerAdminDivisionQuestion)(n),i=ev(n);if(G(i)||G(n)){let n=await ee({query:i,lat:e.lat,lng:e.lng});if(0===n.length)return{handled:!0,statusKo:"주소를 못 찾았어요 · 도시·구를 더 붙여 주세요",contextEventId:ec({explicitContextEventId:e.contextEventId??null})??`place_${Date.now()}`,workspaceMutated:!1,openedWorkspace:!1};let{contextEventId:a,openedWorkspace:o}=ew({contextEventId:e.contextEventId,query:i}),r=function(e){let{contextEventId:n,query:a,candidates:i}=e,o=(0,t.applyWorkspaceTransition)({contextEventId:n,op:"add_nodes",domain:"poi",addHits:i.map(e=>({id:e.id,labelKo:i.length>1?`${e.labelKo} \xb7 ${e.subtitleKo}`:e.labelKo,domain:"poi",lat:e.lat,lng:e.lng,rating:null,walkMinutes:null,reservable:!1,localFavorite:!1,priceBand:null,source:"maps",reasonKo:e.addressKo,activitySubtype:"address_locate"})),changeKo:i.length>1?`주소 후보 ${i.length}곳 \xb7 골라주세요`:`주소 \xb7 ${i[0].labelKo}`}),r=i.map(e=>{let t=o?.nodes.find(t=>t.placeId===e.id||t.id.endsWith(e.id)||t.id.includes(e.id.replace(/^geo:/u,"")))??null;return{nodeId:t?.id??`ws:poi:${e.id}`,title:e.labelKo,subtitleKo:e.subtitleKo,kind:"poi",ctaKo:"이 위치 →"}});if(1===i.length){let e=i[0];E({contextEventId:n,anchor:e_({geoId:e.id,labelKo:e.labelKo,lat:e.lat,lng:e.lng,kind:"poi",hierarchyKo:e.subt
1itleKo||e.addressKo,provider:"nominatim"}),geoId:e.id,summaryKo:e.addressKo,mapOnlyLocate:!0}),ey({contextEventId:n,query:e.labelKo,labelKo:e.labelKo,geoId:e.id,lat:e.lat,lng:e.lng,utterance:a}).catch(()=>{})}eI(n);let l=i.length>1?`${a} \xb7 ${i.length}곳 후보 \xb7 탭해서 골라주세요`:`${i[0].labelKo} \xb7 ${i[0].subtitleKo}`;return{statusKo:l.length>72?`${l.slice(0,71).trimEnd()}…`:l,objects:r,workspaceMutated:!!o}}({contextEventId:a,query:i,candidates:n});return{handled:!0,statusKo:r.statusKo,contextEventId:a,workspaceMutated:r.workspaceMutated,openedWorkspace:o,objects:r.objects}}let o=await ex(n);if(!o)return{handled:!0,statusKo:"위치를 못 찾았어요 · 지명을 다시 말해 주세요",contextEventId:ec({explicitContextEventId:e.contextEventId??null})??`place_${Date.now()}`,workspaceMutated:!1,openedWorkspace:!1};let{contextEventId:r,openedWorkspace:l}=ew({contextEventId:e.contextEventId,query:o.labelKo}),s=E({contextEventId:r,anchor:e_(o),geoId:o.geoId,summaryKo:`${o.labelKo} 위치`,mapOnlyLocate:!0});return eI(r),ey({contextEventId:r,query:o.labelKo,labelKo:o.labelKo,geoId:o.geoId,lat:o.lat,lng:o.lng,utterance:n}
1).catch(()=>{}),{handled:!0,statusKo:function(e,t){if(t?.trim()){let e=t.trim().split(/\n+/u)[0]??t;return e.length>72?`${e.slice(0,71).trimEnd()}…`:e}let n=e.hierarchyKo&&e.hierarchyKo!==e.labelKo?`${e.labelKo} \xb7 ${e.hierarchyKo}`:`${e.labelKo} \xb7 지도에 올렸어요`;return n.length>72?`${n.slice(0,71).trimEnd()}…`:n}(o,a?.answerKo),contextEventId:r,workspaceMutated:!!s,openedWorkspace:l}}e.s(["tryApplyPlaceLocateFromUtterance",0,eC],710297),e.s([],954696);let eS=["Discover","Analyze","Compare","Simulate","Prepare","Commit"];function eT(e,t,n){return{id:"header",kind:"header",labelKo:e,bodyKo:n,valueKo:t,primary:!0,meta:{controlSurface:!0}}}let eL={width:320,height:420},eE={width:200,height:56},eP=new Map,eA=[],e$=null,ej=10,eR=new Set,eD=Object.freeze([]),eM=eD;function eW(){for(let e of(eM=0===eA.length?eD:eA.map(e=>eP.get(e)).filter(e=>!!e),eR))e()}function eO(e){return"compact"===e?{...eE}:"workspace"===e?{width:376,height:520}:{...eL}}function eN(){return eM}function eF(e){let t=e.trim();for(let e of eN())if(e.entityId===t)return e;return null}function eB(e){let t=e.entityId.trim();if(!t)throw Error("openCalloutWindow: entityId required");let n=eF(t);if(n)return eU(n.id)??n;for(;eA.length>=3;){let e=eA.findIndex(e=>{let t=eP.get(e);return t&&!t.locked});if(e<0){let e=eA.shift();e&&(eP.delete(e),e$===e&&(e$=null));break}let[t]=eA.splice(e,1);t&&(eP.delete(t),e$===t&&(e$=null))}let a=new Date().toISOString(),i=e.mode??"floating",o=++ej,r={id:`callout_${Date.now().toString(36)}_${t.slice(0,10)}`,entityId:t,mode:i,position:e.seedPosition??{x:80+28*eA.length,y:120},size:eO(i),scale:1,zIndex:o,locked:!0===e.locked,anchored:!0,createdAtIso:a,updatedAtIso:a};return eP.set(r.id,r),eA.push(r.id),e$=r.id,eW(),r}function eU(e){let t=eP.get(e.trim());if(!t)return null;let n={...t,zIndex:++ej,updatedAtIso:new Date().toISOString()};return eP.set(n.id,n),e$=n.id,eW(),n}function eq(e){let t=[];for(let n of e){let e=n.trim();e&&t.push(eB({entityId:e,mode:"floating"}))}return t}e.s(["clearAllCalloutWindows",0,function(){!function(){if(0===eP.size&&0===eA.length&&null===e$){eM=eD;return}eP.clear(),eA.length=0,e$=null,ej=10,eW()}()},"closeCalloutWindow",0,function(e){let t=e.trim();if(!eP.has(t))return!1;eP.delete(t);let n=eA.indexOf(t);return n>=0&&eA.splice(n,1),e$===t&&(e$=eA.length?eA[eA.length-1]:null),eW(),!0},"findCalloutWindowByEntity",0,eF,"focusCalloutWindow",0,eU,"getCalloutWindowsSnapshot",0,eN,"getFocusedCalloutWindowId",0,function(){return e$},"openCalloutWindow",0,eB,"openCalloutWindowsFromAgent",0,eq,"setCalloutWindowMode",0,function(e,t){let n=eP.get(e.trim());if(!n)return null;let a={...n,mode:t,size:eO(t),scale:"compact"===t?1:n.scale,updatedAtIso:new Date().toISOString()};return eP.set(a.id,a),eW(),a},"subscribeCalloutWindows",0,function(e){return eR.add(e),()=>{eR.delete(e)}},"updateCalloutWindowLayout",0,function(e,t){let n=eP.get(e.trim());if(!n)return null;let a={...n,position:t.position??n.position,size:{width:t.size?.width??n.size.width,height:t.size?.height??n.size.height},scale:null!=t.scale?Math.min(1.75,Math.max(.85,t.scale)):n.scale,anchored:t.anchored??n.anchored,updatedAtIso:new Date().toISOString()};return eP.set(a.id,a),eW(),a}],361888);let eH=new Map,ez=new Map;function eG(e){eH.set(e.workspaceId,e)}function eJ(e){let t=e.workspaceId.trim(),n=ez.get(t)??[];ez.set(t,[...n,e].slice(-80))}function eV(e){window.dispatchEvent(new CustomEvent("rimvio:reality-projection-event",{detail:e}))}function eQ(e){window.dispatchEvent(new CustomEvent("rimvio:reality-projection-refresh",{detail:e}))}e.s(["appendProjectionEvent",0,eJ,"writeProjectionSnapshot",0,eG],352904),e.s(["dispatchProjectionEvent",0,eV,"dispatchProjectionRefresh",0,eQ],69225);var eY=e.i(152719);let eZ={price:.2,location:.4,scheduleFit:.4};function eX(e,t,n){if("compare"===e.kind)return!1;let a=new Set(n),i=t.find(t=>t.id===e.fromId),o=t.find(t=>t.id===e.toId);return!(a.has(e.fromId)&&a.has(e.toId)&&(!i||!o||i.kind===o.kind&&a.has(i.id)&&a.has(o.id)))&&(!i||!o||i.kind!==o.kind)&&("nearby"===e.kind||"route"===e.kind)}e.s(["DEFAULT_COMPARE_CRITERIA_WEIGHTS",0,eZ,"TRIP_CONTEXT_COMPARE_WEIGHTS",0,eZ],399947),e.s(["isMeaningfulWorksp
1aceMapEdge",0,eX],589233);let e0=new Map,e1=new Set,e2=Object.freeze({mode:"default",contextEventId:""});function e3(){for(let e of e1)e()}function e5(e){let t=e.trim();if(!t)return e2;let n=e0.get(t);if(n)return n;let a={mode:"default",contextEventId:t};return e0.set(t,a),a}function e4(e){let t=new Set(e.compareIds),n=[];for(let a of e.relationshipEdges)if((t.has(a.fromId)||t.has(a.toId))&&eX(a,e.nodes,e.compareIds)&&(n.push({id:a.id,fromEntityId:a.fromId,toEntityId:a.toId,kind:a.kind,labelKo:a.labelKo,meters:a.meters}),n.length>=24))break;return n}e.s(["enterCompareDecisionProjection",0,function(e){let t=e.contextEventId.trim();if(!t)return null;let n=[...e.workspace.compareIds].slice(0,5);if(n.length<2)return null;let a=e.selectedEntityId?.trim()||e.workspace.selectedIds.find(e=>n.includes(e))||n[0]||null,i={mode:"compare_decision",contextEventId:t,candidateEntityIds:n,criteriaWeights:e.criteriaWeights??eZ,selectedEntityId:a,relationships:e4(e.workspace)};return e0.set(t,i),e3(),i},"exitCompareDecisionProjection",0,function(e){let t=e.trim();t&&(e0.set(t,{mode:"default",contextEventId:t}),e3())},"readWorkspaceProjection",0,e5,"selectCompareDecisionEntity",0,function(e){let t=e.contextEventId.trim(),n=e5(t);if("compare_decision"!==n.mode)return null;let a=e.entityId.trim();if(!n.candidateEntityIds.includes(a))return null;let i={...n,selectedEntityId:a};return e0.set(t,i),e3(),i},"subscribeWorkspaceProjection",0,function(e){return e1.add(e),()=>{e1.delete(e)}},"syncCompareDecisionProjectionFromWorkspace",0,function(e){let t=e.contextEventId.trim(),n=e5(t);if("compare_decision"!==n.mode)return n;let a=[...e.workspace.compareIds].slice(0,5);if(a.length<2){let e={mode:"default",contextEventId:t};return e0.set(t,e),e3(),e}let i=n.selectedEntityId&&a.includes(n.selectedEntityId)?n.selectedEntityId:a[0]??null,o={mode:"compare_decision",contextEventId:t,candidateEntityIds:a,criteriaWeights:n.criteriaWeights,selectedEntityId:i,relationships:e4(e.workspace)};return e0.set(t,o),e3(),o}],21251);let e7=new Map,e6=new Set;function e8(e){let t=e.contextEventId.trim();if(!t)return null;let a=(0,n.readContextWorkspace)(t);if(!a)return null;let i=(0,eY.readLastAgentProductTurn)(),o=i?.contextEventId===t?i:null,r=e5(t),l="compare_decision"===r.mode?r.candidateEntityIds:a.compareIds??[],s=a.nodes.filter(e=>e.visible),c=a.selectedIds??[],u=c.length>0?c.slice(0,3):s.slice(0,3).map(e=>e.id),d={contextEventId:t,workspaceId:a.workspaceId,revision:(a.patches?.length??0)+s.length,updatedAtIso:new Date().toISOString(),statusKo:(0,eY.formatAgentProductStatusLog)(o)??a.lastChangeKo??null,workLog:o?.statusLog??[],lastStage:o?.stagesCompleted[o.stagesCompleted.length-1]??null,mapPins:s.map(e=>({id:e.id,kind:e.kind,title:e.title,lat:e.lat,lng:e.lng,visible:e.visible,selected:e.selected,bookmarked:e.bookmarked})),selectedIds:c,calloutFocusIds:u,compareEntityIds:l,visibleCount:s.length,preparePending:!0===e.preparePending,commitPending:!0===e.commitPending};for(let e of(e7.set(t,d),e6))e();return window.dispatchEvent(new CustomEvent("rimvio:agent-runtime-projection")),d}function e9(e,t,n){return{id:`autoproj_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,type:e,workspaceId:t,payload:n,atIso:new Date().toISOString(),draftOnly:!0}}function te(e){let t=e.contextEventId.trim(),i=[],o=[],r=[],l=()=>({ok:!1,contextEventId:t,stages:o,logs:i,eventIds:r,calloutCount:0,manualRefreshRequired:!1});if(!t)return l();let s=(0,n.readContextWorkspace)(t);if(!s)return l();o.push("patch"),i.push({stage:"patch",message:e.patchRecord?`Patch \xb7 ${e.patchRecord.kind} \xb7 ${e.patchRecord.statusKo}`:"Patch · applied"}),o.push("projection_event");let c=s.nodes.filter(e=>e.visible).map(e=>e.id),u=s.nodes.filter(e=>!e.visible).map(e=>e.id),d=e.patchRecord?.kind??"unknown",p=[e9("OBJECT_STATE_CHANGED",t,{patchKind:d,visibleCount:c.length,auto:!0})];if("create_entity"===d||"replace_entity"===d||"filter_entity"===d)for(let e of c.slice(0,8))p.push(e9("OBJECT_VISIBLE_CHANGED",t,{objectId:e,visible:!0,auto:!0}));for(let e of(("connect_entity"===d||"spatial_constraint"===d||"move_schedule"===d||(s.relationshipEdges?.length??0)>0)&&p.push(e9("RELATION_UPDATED",t,{edgeCount:s.relationshipEdges?.length??0,auto:!0}
1)),p))eJ(e),eV(e),r.push(e.id);i.push({stage:"projection_event",message:`Projection Event \xb7 ${p.length} emitted`}),o.push("map_marker_update"),(0,n.writeContextWorkspaceExpanded)(t,!0),(0,en.dispatchContextWorkspaceExpand)({contextEventId:t,source:"scout_patch"}),eG({workspaceId:t,visibleObjectIds:c,hiddenObjectIds:u,hotelType:s.realityPlan?.stayType??null,revision:(s.patches?.length??0)+1,updatedAtIso:new Date().toISOString()}),i.push({stage:"map_marker_update",message:`Map Marker Update \xb7 visible=${c.length}`}),o.push("relationship_update"),s=(0,n.readContextWorkspace)(t)??s;let m=(0,a.withWorkspaceRelationships)(s,e.patchRecord?.utterance??s.query),g=new Map([...m.relationshipEdges??[]].map(e=>[e.id,e]));for(let e of s.relationshipEdges??[])g.set(e.id,e);(0,n.writeContextWorkspace)({...m,relationshipEdges:[...g.values()].slice(0,64),lastChangeKo:s.lastChangeKo,updatedAtIso:new Date().toISOString()}),i.push({stage:"relationship_update",message:`Relationship Update \xb7 edges=${g.size}`}),o.push("callout_update");let h=e.entityIds?.filter(Boolean)??s.selectedIds??c.slice(0,3),y=function(e){let t=e.contextEventId.trim(),a=(0,n.readContextWorkspace)(t);if(!a)return{schemas:[],opened:0,refreshed:0,calloutCount:0};let i=!0===e.openWindows,o=e.maxWindows??3,r=(e.entityIds??[]).map(e=>e.trim()).filter(Boolean);if(0===r.length){let e=a.selectedIds[0],t=a.nodes.filter(e=>e.visible);r=e?[e,...t.filter(t=>t.id!==e).slice(0,o-1).map(e=>e.id)]:t.slice(0,o).map(e=>e.id)}r=[...new Set(r)].slice(0,o);let l=[],s=0,c=0;for(let e of r){let t=function(e){let t,n,a=e.state,i=e.entityId?.trim(),o=(i?a.nodes.find(e=>e.id===i||e.placeId===i):null)??a.nodes.find(e=>e.selected)??a.nodes.find(e=>e.visible)??null;if(!o)return null;let r=a.patches?.[a.patches.length-1]??null,l=e.intent??(r?{action:r.kind,target:o.kind,rawText:r.utterance}:null);return{object:(n={heroImageUrl:(t=(function(e){let t=[],n=new Set;for(let a of e){let e=a?.trim()??"";!e||n.has(e)||(n.add(e),t.push(e))}return t})([o.thumbnailUrl,...o.galleryUrls??[]]).slice(0,12))[0]??null,galleryUrls:t,kindHint:"lodging"===o.kind||"eatery"===o.kind||"poi"===o.kind||"amenity"===o.kind?o.kind:"other"},{id:o.id,title:o.title,type:o.kind,priceLabelKo:o.amountLabel,priceWon:null,whyLinesKo:o.summaryKo?.trim()?[o.summaryKo.trim()]:[],evidence:[{id:"price",title:"가격",value:o.amountLabel??"—",present:!!o.amountLabel},{id:"rating",title:"평점",value:null!=o.rating?String(o.rating):"—",present:null!=o.rating},{id:"photo",title:"사진",value:n.galleryUrls.length>0?`${n.galleryUrls.length}장`:"—",present:n.galleryUrls.length>0}],canPrepare:"lodging"===o.kind||"eatery"===o.kind}),context:{contextId:a.contextEventId,titleKo:a.summaryKo||a.query||"Workspace",purposeKo:a.domain,situationKo:r?.statusKo??a.lastChangeKo},intent:l,agent:null}}({state:a,entityId:e});if(!t)continue;let n=function(e){var t;let n,a,i,o;return a=function(e,t){switch(e){case"Discover":return[eT("Discover",t.object.title,t.context.situationKo??t.context.titleKo),{id:"evidence",kind:"evidence",labelKo:"Evidence",bodyKo:t.object.evidence.filter(e=>e.present).map(e=>`${e.title}: ${e.value}`).join(" · ")||"근거 수집 중",valueKo:null,primary:!0,meta:{items:t.object.evidence.filter(e=>e.present)}},{id:"why",kind:"why",labelKo:"추천 이유",bodyKo:t.object.whyLinesKo.join(" · ")||"Context 기반 후보",valueKo:null,primary:!1,meta:{lines:[...t.object.whyLinesKo]}}];case"Analyze":return[eT("Analyze",t.object.title,t.context.situationKo),{id:"problem",kind:"note",labelKo:"문제",bodyKo:t.agent?.problemKo??"조건 재검토",valueKo:null,primary:!0,meta:{}},{id:"recommendation",kind:"note",labelKo:"추천",bodyKo:t.agent?.recommendationKo??"Workspace에서 분석",valueKo:null,primary:!1,meta:{}},{id:"why",kind:"why",labelKo:"추천 이유",bodyKo:t.object.whyLinesKo.join(" · ")||null,valueKo:null,primary:!1,meta:{}}];case"Compare":let n,a,i;return n=t.compare,a=n?.priceDeltaKo??function(e){if(null==e||!Number.isFinite(e))return null;if(0===e)return"가격 변화 없음";
1let t=Math.abs(Math.round(e)).toLocaleString("ko-KR");return e<0?`가격 ${t}원 감소`:`가격 ${t}원 증가`}(n?.priceDeltaWon??null),i=n?.distanceDeltaKo??function(e){if(null==e||!Number.isFinite(e))return null;if(0===e)return"거리 변화 없음";let t=Math.abs(Math.round(e)),n=t>=1e3?`${(t/1e3).toFixed(1)}km`:`${t}m`;return e<0?`거리 ${n} 가까움`:`거리 ${n} 멀어짐`}(n?.distanceDeltaMeters??null),[eT("Compare",t.object.title,n?.alternativeTitle?`vs ${n.alternativeTitle}`:t.context.situationKo),{id:"impact",kind:"impact",labelKo:"Impact",bodyKo:n?.impactSummaryKo??"비교 Impact 계산",valueKo:null,primary:!0,meta:{}},{id:"price_delta",kind:"price_delta",labelKo:"가격 변화",bodyKo:a,valueKo:a,primary:!1,meta:{priceDeltaWon:n?.priceDeltaWon??null}},{id:"distance_delta",kind:"distance_delta",labelKo:"거리 변화",bodyKo:i,valueKo:i,primary:!1,meta:{distanceDeltaMeters:n?.distanceDeltaMeters??null}}];case"Simulate":return[eT("Simulate",t.object.title,t.context.situationKo),{id:"simulation",kind:"simulation",labelKo:"Simulation",bodyKo:t.agent?.recommendationKo??"What-if 미리보기 · Reality 변경 없음",valueKo:"SIMULATION_ONLY",primary:!0,meta:{simulationOnly:!0}},{id:"impact",kind:"impact",labelKo:"Impact",bodyKo:t.compare?.impactSummaryKo??"시뮬 Impact 대기",valueKo:null,primary:!1,meta:{}}];case"Prepare":return[eT("Prepare",t.object.title,t.context.situationKo),{id:"prepare",kind:"prepare",labelKo:"Prepare",bodyKo:t.object.canPrepare?"예약 준비 Draft 생성":"Prepare 불가 · 정보 부족",valueKo:t.object.priceLabelKo,primary:!0,meta:{canPrepare:t.object.canPrepare}},{id:"note",kind:"note",labelKo:"안내",bodyKo:"Callout은 Prepare까지 · Commit은 Field",valueKo:null,primary:!1,meta:{}}];case"Commit":return[eT("Commit",t.object.title,"Field Reality Action"),{id:"commit_handoff",kind:"commit_handoff",labelKo:"Commit",bodyKo:"Callout에서 Commit 불가 · Field로 넘기세요",valueKo:"Field",primary:!0,meta:{handoffOnly:!0,commitForbiddenInCallout:!0}}]}}(n=function(e){var t;if(e.forceState&&(t=e.forceState,eS.includes(t)))return e.forceState;if(function(e){if(!e)return!1;let t=(e.rawText??"").toLowerCase();return/커밋|확정|지구에|commit|결제\s*확정/iu.test(t)}(e.intent))return"Commit";if(function(e){if(!e)return!1;let t=e.action.toLowerCase(),n=(e.rawText??"").toLowerCase();return"prepare"===t||"create_draft"===t||/예약\s*준비|prepare|준비해/iu.test(n)}(e.intent))return"Prepare";if(function(e){if(!e)return!1;let t=e.action.toLowerCase(),n=(e.rawText??"").toLowerCase();return"simulate"===t||/시뮬|what.?if|바꾸면|시뮬레이션/iu.test(n)}(e.intent))return"Simulate";if(function(e){if(!e)return!1;let t=e.action.toLowerCase(),n=(e.rawText??"").toLowerCase();return"compare"===t||/비교|compare|vs/iu.test(n)||t.includes("compare")}(e.intent)||e.compare?.alternativeTitle)return"Compare";if(function(e){if(!e)return!1;let t=e.action.toLowerCase(),n=(e.rawText??"").toLowerCase();return"optimize"===t||"optimize_context"===t||"analyze_context"===t||/분석|왜|이유|analyze/iu.test(n)}(e.intent))return"Analyze";let n=e.agent?.phase?.toLowerCase()??"";return n.includes("validate")||n.includes("draft")?e.agent?.recommendationKo?.includes("대체")?"Compare":"Analyze":n.includes("prepare")?"Prepare":n.includes("simulate")?"Simulate":"Discover"}(e),e),i=function(e,t){switch(e){case"Discover":return[{id:"analyze",labelKo:"분석",enabled:!0,primary:!1,verb:"analyze"},{id:"compare",labelKo:"비교",enabled:!0,primary:!0,verb:"compare"}];case"Analyze":return[{id:"compare",labelKo:"비교",enabled:!0,primary:!0,verb:"compare"},{id:"simulate",labelKo:"시뮬",enabled:!0,primary:!1,verb:"simulate"}];case"Compare":return[{id:"simulate",labelKo:"시뮬",enabled:!0,primary:!1,verb:"simulate"},{id:"prepare",labelKo:"Prepare",enabled:t,primary:!0,verb:"prepare"}];case"Simulate":return[{id:"prepare",labelKo:"Prepare",enabled:t,primary:!0,verb:"prepare"}];case"Prepare":return[{id:"handoff",labelKo:"Field로",enabled:!0,primary:!0,verb:"handoff_field"}];case"Commit":return[{id:"handoff",labelKo:"Field에서 확정",enabled:!0,primary:!0,verb
1:"handoff_field"}]}}(n,e.object.canPrepare),o=[(t={state:n,objectId:e.object.id,contextId:e.context.contextId,intentAction:e.intent?.action??"none",agentPhase:e.agent?.phase??"none",situationKo:e.context.situationKo??e.context.titleKo}).state,t.objectId,t.contextId,t.intentAction,t.agentPhase,t.situationKo].join("|"),{state:n,objectId:e.object.id,objectTitle:e.object.title,contextId:e.context.contextId,blocks:a,actions:i,fingerprint:o,fixedUi:!1,commitForbiddenInCallout:!0,summaryKo:function(e,t){switch(e){case"Discover":return`Discover \xb7 Evidence \xb7 추천 이유 \xb7 ${t.object.title}`;case"Analyze":return`Analyze \xb7 ${t.agent?.problemKo??"분석"}`;case"Compare":return"Compare · Impact · 가격 변화 · 거리 변화";case"Simulate":return"Simulate · SIMULATION_ONLY";case"Prepare":return`Prepare \xb7 ${t.object.title}`;case"Commit":return"Commit · Field handoff only"}}(n,e)}}(t);l.push(n),i&&(eF(e)?c+=1:(eB({entityId:e,mode:"floating"}),s+=1))}return{schemas:l,opened:s,refreshed:c,calloutCount:l.length}}({contextEventId:t,entityIds:h.length?h:null});i.push({stage:"callout_update",message:`Callout Update \xb7 schemas=${y.schemas.length}`}),o.push("ui_refresh"),eQ({workspaceId:t,eventIds:r,atIso:new Date().toISOString(),draftOnly:!0}),i.push({stage:"ui_refresh",message:"UI Refresh · auto (no manual refresh)"});{let e=(0,eY.readLastAgentProductTurn)();if(e?.contextEventId===t){let t=(0,eY.advanceAgentProductStage)(e,"projection");(0,eY.advanceAgentProductStage)(t,"agent_status")}}return e8({contextEventId:t}),{ok:!0,contextEventId:t,stages:o,logs:i,eventIds:r,calloutCount:y.schemas.length,manualRefreshRequired:!1}}e.s(["readAgentRuntimeProjection",0,function(e){return e7.get(e.trim())??null},"writeAgentRuntimeProjectionFromWorkspace",0,e8],429105),e.s(["runAutoProjectionAfterPatch",0,te],205592);let tt=[],tn=new Set,ta={version:1,families:{}};function ti(){for(let e of tn)e()}function to(e){return ta=function(e,t){let n,a=e?.version===1?e:{version:1,families:{}},i=t.atIso??new Date().toISOString(),o=a.families[t.family],r=o?.lineIds??[];switch(t.op){case"clear":n=[];break;case"replace":default:n=[...t.lineIds];break;case"add":n=[...new Set([...r,...t.lineIds])];break;case"remove":{let e=new Set(t.lineIds);n=r.filter(t=>!e.has(t))}}return{version:1,families:{...a.families,[t.family]:{visibility:n.length>0?"show":"hide",lineIds:n,labelKo:t.labelKo,providerId:t.providerId,needId:t.needId,updatedAtIso:i}}}}(ta,e),ti(),ta}e.s(["applyNetworkAbsorbVisibilityPatch",0,to,"getNetworkAbsorbVisibleLineIds",0,function(e){var t;let n;return t=ta,(n=t?.families[e])&&"hide"!==n.visibility?n.lineIds:tt},"setNetworkAbsorbProjection",0,function(e){ta=e?.version===1?e:{version:1,families:{}},ti()},"subscribeNetworkAbsorbProjection",0,function(e){return tn.add(e),()=>{tn.delete(e)}}],84549),e.i(524667),e.i(162527),e.s([],227603);var tr=e.i(865427);function tl(e){return{actor:e.actor??"ai",approval:e.approval??"none",atIso:e.atIso??new Date().toISOString(),actionKo:e.actionKo.trim(),beforeKo:e.beforeKo?.trim()||null,afterKo:e.afterKo?.trim()||null}}function ts(e){let t="ai"===e.actor?"AI":"user"===e.actor?"사용자":"시스템",n=[`${t} \xb7 ${e.actionKo}`];return e.beforeKo&&e.afterKo&&n.push(`${e.beforeKo} → ${e.afterKo}`),n.join(" · ")}function tc(e){let t=e.atIso??new Date().toISOString();return{id:`atrace_${t}_${Math.random().toString(36).slice(2,8)}`,atIso:t,kind:e.kind,summaryKo:e.summaryKo.trim(),ownership:e.ownership,evidenceLinesKo:(e.evidenceLinesKo??[]).map(e=>e.trim()).filter(Boolean).slice(0,4),entityIds:(e.entityIds??[]).filter(Boolean).slice(0,8)}}function tu(e,t){return[...e??[],t].slice(-40)}e.s(["buildAgentActionOwnership",0,tl,"ownershipSummaryKo",0,ts],75010),e.s(["appendAgentTrace",0,tu,"createAgentTraceEntry",0,tc],577996);var td=e.i(902308),tp=e.i(167604);let tm=/거기(?:서|에서|서\s*근처)?|그곳(?:에서|근처)?|여기(?:서|근처)?|같은\s*(?:역|ê³³|동네|근처)|ê·¸\s*근처/iu,tg=/(?:맛집|호텔|숙소|카페|놀거리|관광|약국)도|(?:그리고|또)\s*(?:맛집|호텔|숙소|카페|놀거리)/iu,th=/후쿠오카|fukuoka|도쿄|tokyo|êµ
1í† |kyoto|오사카|osaka|서울|부산|제주|나고야|삿포로|ê³ ë² |오사카성/iu;function ty(e){return th.test(e.trim())}function tf(){return{maxNightlyPriceKrw:null,maxPriceBand:null,destinationKo:null,nearLabelKo:null,stayType:null,minRating:null,keepTopN:null,sortBy:null,updatedAtIso:new Date(0).toISOString()}}e.s(["isDestinationPivotUtterance",0,ty,"planConstraintInheritance",0,function(e){let t=e.utterance.trim(),n=tm.test(t.trim()),a=tg.test(t.trim()),i=ty(t),o=!!e.previousTarget&&!!e.nextTarget&&"mixed"!==e.previousTarget&&"mixed"!==e.nextTarget&&e.previousTarget!==e.nextTarget,r=/근처|주변|쪽|역\s*앞/iu.test(t),l=/만원|원\s*이하|저렴|더\s*싸|가성비|budget|cheap/iu.test(t),s=[];return i?(s.push({field:"destination",op:"from_utterance",reason:"explicit_destination_change"}),s.push({field:"near",op:r?"from_utterance":"drop",reason:"new_destination_drops_old_near"})):a&&e.hasPreviousNear?s.push({field:"near",op:"keep",reason:"target_stack_keeps_spatial"}):n&&e.hasPreviousNear?s.push({field:"near",op:"keep",reason:"locale_deixis"}):e.switchJob&&!r&&e.hasPreviousNear?s.push({field:"near",op:"drop",reason:"new_job_without_near_or_deixis"}):s.push({field:"near",op:r?"from_utterance":"keep",reason:r?"utterance_near":"default_keep_or_empty"}),o&&"eatery"===e.nextTarget?s.push({field:"stayType",op:"drop",reason:"lodging_to_eatery"}):s.push({field:"stayType",op:"from_utterance",reason:"merge_utterance_else_keep"}
1),s.push({field:"budget",op:l?"from_utterance":e.switchJob&&o?"drop":"keep",reason:l?"utterance_budget":e.switchJob&&o?"target_change_drops_budget":"keep_budget_same_domain"}),s.push({field:"minRating",op:/평점|별점|rating/iu.test(t)?"from_utterance":"keep",reason:"rating_policy"}),s.push({field:"keepTopN",op:/\d+\s*(?:개|곳)\s*만|상위\s*\d/iu.test(t)?"from_utterance":"keep",reason:"keep_top_n_policy"}),s.push({field:"sortBy",op:/가성비|싼\s*순|평점\s*높|별점\s*높|가까운\s*순/iu.test(t)?"from_utterance":"keep",reason:"sort_policy"}),s}],549419);let tb=/([가-힣A-Za-z0-9]{2,16})(?:역)?\s*(?:쪽|근처|중심|주변|앞으로)/u;function tk(e){let t={...tf(),...e.prev??{}},n=e.utterance.trim();if(!n)return t;let a=(0,td.parseMaxNightlyPriceKrw)(n),o=(0,i.parseLodgingStayTypeFromText)(n),r=function(e){let t=e.trim();if(!t)return null;let n=t.match(/([가-힣A-Za-z0-9]+역)/u)?.[1]?.trim();if(n&&/근처|주변|앞|에서/u.test(t))return n;let a=t.match(tb),i=a?.[1]?.trim();return!i||/호텔|숙소|찾아|다시|더|싼|가격|예약/u.test(i)?null:i}(n),l=function(e){if(!/평점|별점|rating/iu.test(e))return null;let t=e.match(/(?:평점|별점|rating)\s*(?:이?\s*)?(\d+(?:\.\d+)?)\s*(?:\+|이상|점)?/iu);if(t?.[1]){let e=Number(t[1]);return Number.isFinite(e)&&e>=1&&e<=5?e:4}return/평점\s*높|별점\s*높|rating\s*high/iu.test(e)?4:null}(n),s=function(e){let t=e.match(/(?:상위\s*)?(\d+)\s*개|(?:만\s*)?(\d+)\s*개\s*(?:만|보여|남|골라)|(\d+)\s*곳\s*(?:만|보여|남|골라)/u);if(!t)return null;let n=Number(t[1]||t[2]||t[3]);return!Number.isFinite(n)||n<1||n>20?null:n}(n),c=/가성비|싼\s*순|더\s*싸|더\s*싼|저렴한\s*순|cheap|cheaper/iu.test(n)?"value":/평점\s*높|별점\s*높|rating/iu.test(n)?"rating":/가까운\s*순/iu.test(n)?"value":null,u=/더\s*싸|저렴|가성비|budget|cheap/iu.test(n),d=(0,tp.extractTravelDestination)(n),p=ty(n)&&/(?:로|으로)\s*(?:바꿔|변경|가)|바꿔|변경|옮|가자|갈래/iu.test(n),m=null!=d&&(p||!t.destinationKo||d!==t.destinationKo)?d:t.destinationKo;return{maxNightlyPriceKrw:null!=a?a:t.maxNightlyPriceKrw,maxPriceBand:(u||null!=a)&&(null!=a&&a<=8e4||u)?2:t.maxPriceBand,destinationKo:m??d??t.destinationKo,nearLabelKo:r??(p?null:t.nearLabelKo),stayType:o??t.stayType,minRating:l??t.minRating,keepTopN:s??t.keepTopN,sortBy:c??t.sortBy,updatedAtIso:new Date().toISOString()}}function tK(e,t){let n=e.trim();if(!t)return n;let a=[];if(t.destinationKo&&!n.toLowerCase().includes(t.destinationKo.toLowerCase())&&a.push(t.destinationKo),t.nearLabelKo&&a.push(`${t.nearLabelKo} 근처`),t.stayType){let e="capsule"===t.stayType?"캡슐호텔":"ryokan"===t.stayType?"료칸":"hotel"===t.stayType?"호텔":t.stayType;a.push(e)}if(null!=t.maxNightlyPriceKrw?a.push(`1박 ${Math.round(t.maxNightlyPriceKrw/1e4)}만원대`):null!=t.maxPriceBand&&t.maxPriceBand<=2&&a.push("저렴"),null!=t.minRating&&a.push(`평점 ${t.minRating}+`),null!=t.keepTopN&&a.push(`${t.keepTopN}개만`),"value"===t.sortBy?a.push("가성비"):"rating"===t.sortBy&&a.push("평점 높은"),0===a.length)return n;let i=a.filter(e=>{let t=e.replace(/\s+/g,"");return t&&!n.includes(t)&&!n.includes(e)}).filter(e=>!(/캡슐호텔|료칸|호텔/u.test(e)&&/캡슐|료칸|호텔/u.test(n)));return 0===i.length?n:`${n} ${i.join(" ")}`.trim()}function tI(e){if(!e)return[];let t=[];return e.destinationKo&&t.push(`목적지 \xb7 ${e.destinationKo}`),e.nearLabelKo&&t.push(`위치 \xb7 ${e.nearLabelKo}`),null!=e.maxNightlyPriceKrw?t.push(`예산 \xb7 1박 ${e.maxNightlyPriceKrw.toLocaleString("ko-KR")}원 이하`):null!=e.maxPriceBand&&e.maxPriceBand<=2&&t.push("예산 · 저렴 선호"),e.stayType&&t.push(`숙소 타입 \xb7 ${e.stayType}`),null!=e.minRating&&t.push(`평점 \xb7 ${e.minRating}+`),null!=e.keepTopN&&t.push(`상위 \xb7 ${e.keepTopN}곳`),"value"===e.sortBy?t.push("정렬 · 가성비"):"rating"===e.sortBy&&t.push("정렬 · 평점"),t.slice(0,6)}function tv(e){let t=(0,n.readContextWorkspace)(e.contextEventId);if(!t)return null;let a=tk({prev:t.constraintMemory??null,utterance:e.utterance});
1return(0,n.writeContextWorkspace)({...t,constraintMemory:a,updatedAtIso:new Date().toISOString()}),a}e.s(["applyConstraintMemoryToScoutQuery",0,tK,"constraintMemoryLinesKo",0,tI,"emptyConstraintMemory",0,tf,"mergeConstraintMemoryFromUtterance",0,tk],519384),e.s(["rememberConstraintsOnWorkspace",0,tv,"scoutQueryWithConstraintMemory",0,function(e){let t=(0,n.readContextWorkspace)(e.contextEventId),a=tk({prev:t?.constraintMemory??null,utterance:e.utterance});return t&&(0,n.writeContextWorkspace)({...t,constraintMemory:a,updatedAtIso:new Date().toISOString()}),tK(e.utterance,a)},"stampAgentConstitutionOnWorkspace",0,function(e){var t;let a=(0,n.readContextWorkspace)(e.contextEventId);if(!a)return null;let i=tk({prev:a.constraintMemory??null,utterance:e.utterance}),o=tI(i),r=a.nodes.find(e=>e.selected&&e.visible)??a.nodes.find(e=>e.visible)??null,l=r?function(e){let t=[],n=[],a=(e,a)=>{let i=a.trim();!i||t.includes(i)||(t.push(i),n.push(e))};null!=e.walkMinutes&&Number.isFinite(e.walkMinutes)&&a("distance",`도보 ${Math.round(e.walkMinutes)}분`),e.node.amountLabel?.trim()&&a("price",`요금 \xb7 ${e.node.amountLabel.trim()}`),null!=e.node.rating&&Number.isFinite(e.node.rating)&&a("rating",`평점 ★ ${e.node.rating.toFixed(1)}`),e.judgmentKo?.trim()&&a("schedule",e.judgmentKo.trim());let i=e.constraints;if(i?.nearLabelKo&&a("constraint",`${i.nearLabelKo} 위치 조건 충족`),i?.maxNightlyPriceKrw!=null&&e.node.amountLabel&&a("preference","예산 조건과 맞춤"),e.node.tags.some(e=>e.startsWith("stay:"))){let t=e.node.tags.find(e=>e.startsWith("stay:"));t&&a("preference",`타입 \xb7 ${t.replace("stay:","")}`)}return{ok:t.length>=1,linesKo:t.slice(0,4),kinds:n.slice(0,4)}}({node:r,constraints:i,judgmentKo:a.lastWhy?.reasonsKo[0]??null}):{ok:!1,linesKo:[],kinds:[]},s=r?(t={titleKo:r.title,evidence:l,fallbackKo:a.lastChangeKo}).evidence.ok&&0!==t.evidence.linesKo.length?{ok:!0,copyKo:`${t.titleKo} \xb7 ${t.evidence.linesKo[0]}`,evidence:t.evidence}:{ok:!1,copyKo:t.fallbackKo?.trim()||`${t.titleKo} \xb7 근거를 모으는 중이에요`,evidence:t.evidence}:null,c="replace"===e.mutationMode?"replace":"refine"===e.mutationMode?"refine":"note",u=tl({actor:"ai",approval:"none",actionKo:"replace"===e.mutationMode?"후보 재검색·교체":"refine"===e.mutationMode?"후보 다듬기":"작업 반영",beforeKo:e.beforeSummaryKo??null,afterKo:a.summaryKo}),d=tc({kind:c,summaryKo:ts(u),ownership:u,evidenceLinesKo:[...o,...s?.evidence.linesKo??[]],entityIds:r?[r.id]:[]}),p={...a,constraintMemory:i,agentTrace:tu(a.agentTrace,d),lastChangeKo:s?.ok&&s.copyKo?s.copyKo:a.lastChangeKo??u.actionKo,lastWhy:r?{actionKo:u.actionKo,reasonsKo:s?.evidence.linesKo.length?[...s.evidence.linesKo]:o.length>0?o:["Context 조건 반영"],impactsKo:[`Actor \xb7 ${u.actor}`,u.actionKo],nodeIds:[r.id],atIso:u.atIso}:a.lastWhy,updatedAtIso:new Date().toISOString()};return(0,n.writeContextWorkspace)(p),p}],85724);var tx=e.i(447733);let t_=/^day[_-]?\d+$/iu;function tw(e,t){return e.tags.some(e=>RegExp(`^day[_-]?${t}$`,"iu").test(e))}function tC(e,t){let n=t.trim().toLowerCase();return n?e.find(e=>`${e.title} ${e.summaryKo} ${e.tags.join(" ")}`.toLowerCase().includes(n))??null:null}e.s(["applyWorkspacePatch",0,function e(a){var r,l;let c=a.contextEventId.trim(),u=a.utterance?.trim()||null;if(!c)return{ok:!1,statusKo:"Workspace 없음",record:null,needsRescout:!1,scoutQuery:null};let d=(0,n.readContextWorkspace)(c);if(!d||"editing"!==d.status&&"committing"!==d.status)return{ok:!1,statusKo:"편집 중인 Workspace 없음",record:null,needsRescout:!1,scoutQuery:null};let m=a.patch,g="Patch 적용",h=!1,y=null;switch(m.kind){case"replace_entity":{let e=p({contextEventId:c,utterance:u??m.query??"더 싼 호텔",patch:{...m.cheaper?{maxPriceBand:2}:{},...m.stayType?{stayType:m.stayType}:{}}});g=e.replyKo??"후보를 교체 패치했어요",h=e.needsRescout,y=e.scoutQuery;break}case"spatial_constraint":{let e=(0,i.normalizeLodgingStayType)(m.stayType)??(0,i.parseLodgingStayTypeFromText)(u??"")??null,n=p({contextEventId:c,utterance:u??`${m.nearLabelKo} 근처`,patch:{stationNear:!0===m.stationNear,...e?{stayType:e}:{}}}),a=K(u??m.nearLabelKo);a&&E({contextEventId:c,anchor:{entityId:a.geoId,titleKo:a.labelKo,labelKo:a.labelKo,kind:"station"===a.kind?"station":"attraction",lat:a.lat,lng:a.lng},geoId:a.geoId,summaryKo:`${a.labelKo} \xb7 숙소 기준점`}),(0,t.applyWorkspaceTransition)({contextEventId:c,op:"filter",filter:{queryIncludes:m.nearLabelKo},changeKo:e?`${m.nearLabelKo} 근처 \xb7 ${e}`:`${m.nearLabelKo} 근처 제약`}),g=n.replyKo??(e?`공간 제약 \xb7 ${m.nearLabelKo} 근처 ${e}`:`공간 제약 \xb7 ${m.nearLabelKo} 근처`),h=!0;let o=!!e||/숙소|호텔|lodging|hotel|캡슐|료칸/iu.test(u??"")||"lodging"===d.domain;y=(o?(0,i.resolveLodgingStaySearchKeyword)({stayType:e,message:u,areaHint:m.nearLabelKo}):null)||`${m.nearLabelKo}
1 근처 ${o?"숙소":"장소"}`,u?.trim()&&o&&(y=u.trim());break}case"filter_entity":{let e=m.filter.sortBy??null,a=m.filter.keepTopN??null,r=!!m.filter.relativeCheaper,l=m.filter.maxNightlyPriceKrw??null,d={minRating:m.filter.minRating??null,maxPriceBand:m.filter.maxPriceBand??null,tagIncludes:m.filter.tagIncludes??null,queryIncludes:m.filter.queryIncludes??null},f=d;if(null!=d.maxPriceBand){let e=(0,n.readContextWorkspace)(c);e&&0===e.nodes.filter(e=>!!(e.bookmarked||e.selected||"reality_anchor"===e.source||e.tags.includes("reality_anchor"))||!!e.visible&&null!=e.priceBand&&e.priceBand<=d.maxPriceBand).length&&(f={...d,maxPriceBand:null})}(0,t.applyWorkspaceTransition)({contextEventId:c,op:"filter",filter:f,changeKo:"필터 패치"});let b=m.filter.tagIncludes??[];if(b.some(e=>e.startsWith("stay:"))){let e=b.find(e=>e.startsWith("stay:"))?.replace(/^stay:/,""),t=e?(0,i.normalizeLodgingStayType)(e):null,a=(0,n.readContextWorkspace)(c),r=a?.nodes.filter(t=>t.visible&&null!=e&&t.tags.includes(`stay:${e}`)).length??0;if(a&&t&&r>0){let e=s(a.realityPlan??o(),{stayType:t},`${t}만`);(0,n.writeContextWorkspace)({...a,realityPlan:e,lastChangeKo:`${t} \xb7 ${r}곳`,updatedAtIso:new Date().toISOString()}),g=`${t} \xb7 ${r}곳`,h=!1}else{let e=p({contextEventId:c,utterance:u??"필터",patch:t?{stayType:t}:{}});h=e.needsRescout,y=e.scoutQuery,g=e.replyKo??"필터 패치 적용"}}else if(e||null!=a||r||null!=l){let t=(0,n.readContextWorkspace)(c);if(t){let i=function(e,t){if(!t)return[...e];let n=[...e];return"price"===t?n.sort((e,t)=>(e.priceBand??99)-(t.priceBand??99)):"rating"===t?n.sort((e,t)=>(t.rating??0)-(e.rating??0)):n.sort((e,t)=>{let n=(e.priceBand??99)-(t.priceBand??99);return 0!==n?n:(t.rating??0)-(e.rating??0)}),n}(t.nodes,e);null!=l&&(i=function(e,t){let n=e.filter(e=>e.visible&&"reality_anchor"!==e.source&&!e.tags.includes("reality_anchor")),a=new Set;for(let t of e)(t.bookmarked||t.selected)&&a.add(t.id);for(let e of n){let n=function(e){let t=e.amountLabel?.trim()??"";if(!t)return null;let n=t.match(/(\d[\d,]*)/);if(!n?.[1])return null;let a=Number(n[1].replace(/,/gu,""));return Number.isFinite(a)?a:null}(e);(null==n||n<=t)&&a.add(e.id)}if(0===a.size)for(let e of n)a.add(e.id);return e.map(e=>"reality_anchor"===e.source||e.tags.includes("reality_anchor")||!n.some(t=>t.id===e.id)?e:{...e,visible:a.has(e.id)})}(i,l)),(e||null!=a||r)&&(i=function(e,t,n){let a=e.filter(e=>e.visible&&"reality_anchor"!==e.source&&!e.tags.includes("reality_anchor")),i=new Set;for(let t of e)(t.bookmarked||t.selected)&&i.add(t.id);if(null!=t&&t>=1)for(let e of a.slice(0,t))i.add(e.id);else if(n&&a.length>1){let e=a.map(e=>e.priceBand).filter(e=>null!=e&&Number.isFinite(e)).sort((e,t)=>e-t);if(e.length>0){let t=e[Math.floor((e.length-1)/2)];for(let e of a)(null==e.priceBand||e.priceBand<=t)&&i.add(e.id)}else for(let e of a)i.add(e.id)}else for(let e of a)i.add(e.id);if(0===i.size)for(let e of a)i.add(e.id);return e.map(e=>"reality_anchor"===e.source||e.tags.includes("reality_anchor")||!a.some(t=>t.id===e.id)?e:{...e,visible:i.has(e.id)})}(i,a,r));let o=i.filter(e=>e.visible).length;(0,n.writeContextWorkspace)({...t,nodes:i,summaryKo:`${o}곳`,lastChangeKo:null!=l?`지금 후보 안에서 ${Math.round(l/1e4)}만원 이하만 남겼어요`:null!=a?`지금 후보 안에서 상위 ${a}곳만 남겼어요`:r?"지금 후보 안에서 더 싼 쪽으로 골랐어요":"지금 후보 안에서 정렬했어요",updatedAtIso:new Date().toISOString()}),g=null!=l?`지금 후보 \xb7 ${Math.round(l/1e4)}만원 이하`:null!=a?`지금 후보 \xb7 상위 ${a}곳`:r?"지금 후보 · 가성비 정리":"지금 후보 · 정렬"}else g="필터 패치 적용"}else{let e=(0,n.readContextWorkspace)(c)?.nodes.filter(e=>e.visible).length??0;g=`필터 패치 \xb7 ${e}곳`}break}case"delete_entity":{let e=(0,n.readContextWorkspace)(c),a=e?e.nodes.filter(e=>e.visible&&"reality_anchor"!==e.source&&!e.tags.includes("reality_anchor")&&("lodging"===e.kind||"eatery"===e.kind||"poi"===e.kind||"amenity"===e.kind)):[],i=null!=m.ordinalIndex&&m.ordinalIndex>=0&&m.ordinalIndex<a.length?a[m.ordinalIndex].id:null,o=[];if(0===m.entityIds.length&&null==i&&0===d.selectedIds.length&&u?.trim()){let t=u.match(/([\uac00-\ud7a3A-Za-z0-9·\s]{2,28}?)\s*(?:을|를|은|는)?\s*(?:빼|삭제|지워|제외|없애)/u)?.[1]?.trim().replace(/^(?:이|그|저)\s*(?
1:호텔|숙소|맛집|거|곳)?\s*/u,"").trim()??"";if(t.length>=2&&!/^(?:이|그|저|호텔|숙소|맛집)$/u.test(t)){let n=t.toLowerCase();o=(e?.nodes??[]).filter(e=>!!e.visible&&(`${e.title} ${e.summaryKo}`.toLowerCase().includes(n)||n.includes(e.title.toLowerCase()))).map(e=>e.id)}}let r=m.entityIds.length>0?m.entityIds:i?[i]:o.length>0?o:d.selectedIds.length>0?d.selectedIds:[];if(0===r.length){g="삭제할 Entity 없음";break}(0,t.applyWorkspaceTransition)({contextEventId:c,op:"remove",nodeIds:r,changeKo:"Entity 삭제 패치"}),g=`${r.length}곳 삭제 패치`;break}case"create_entity":g="Create Entity · Tool 스카우트 대기",h=!0,y=m.query??u;break;case"connect_entity":{let e=m.fromId||d.selectedIds[0]||d.nodes.find(e=>e.selected)?.id||"",a=m.toId||d.selectedIds[1]||d.compareIds[0]||"";if(e&&a){(0,t.applyWorkspaceTransition)({contextEventId:c,op:"compare",nodeIds:[e,a],changeKo:"Connect Entity 패치"});let i=(0,n.readContextWorkspace)(c);if(i){let t=`patch_connect_${e}_${a}`;(0,n.writeContextWorkspace)({...i,relationshipEdges:[...(i.relationshipEdges??[]).filter(e=>e.id!==t),{id:t,kind:m.relation??"nearby",fromId:e,toId:a,labelKo:m.labelKo??"연결",meters:m.meters??null}]})}g="Connect Entity 패치"}else g="연결할 Entity 선택 필요";break}case"disconnect_entity":{let e=(0,n.readContextWorkspace)(c);e&&(0,n.writeContextWorkspace)({...e,relationshipEdges:(e.relationshipEdges??[]).filter(e=>(e.fromId!==m.fromId||e.toId!==m.toId)&&(e.fromId!==m.toId||e.toId!==m.fromId)),lastChangeKo:"Disconnect Entity 패치",updatedAtIso:new Date().toISOString()}),g="Disconnect Entity 패치";break}case"move_schedule":{let t=(0,n.readContextWorkspace)(c),a=m.dayIndex+1,i=/호텔|숙소|lodging|hotel/iu.test(u??"")?"lodging":/맛집|식당|레스토랑|카페|eatery|cafe|restaurant/iu.test(u??"")?"eatery":null,o=t?t.nodes.filter(e=>e.visible&&("eatery"===e.kind||"lodging"===e.kind||"poi"===e.kind||"amenity"===e.kind)&&"reality_anchor"!==e.source&&!e.tags.includes("reality_anchor")).filter(e=>!i||e.kind===i):[],r=null!=m.ordinalIndex&&m.ordinalIndex>=0&&m.ordinalIndex<o.length?o[m.ordinalIndex].id:null,l=m.queryIncludes&&t?tC(i?t.nodes.filter(e=>e.kind===i):t.nodes,m.queryIncludes)?.id??null:null,s=m.entityId||r||l||t?.selectedIds[0]||t?.nodes.find(e=>e.selected)?.id||o[0]?.id||t?.nodes.find(e=>e.visible)?.id||null;if(t&&s){let i=`schedule:day${a}`,o=t.relationshipEdges??[],r={id:`schedule_${s}_day${a}`,kind:"route",fromId:s,toId:i,labelKo:`Day${a} Draft`,meters:null},l=[...o.filter(e=>!(e.id.startsWith("schedule_")&&(e.fromId===s||e.toId?.startsWith("schedule:day")))),r].slice(0,64),d=t.nodes.map(e=>{let t;return e.id===s?(t=[...e.tags.filter(e=>!t_.test(e)),`day_${a}`],{...e,tags:t,selected:!0}):e}),p=d.find(e=>e.id===s)??null,h=(0,tr.buildRealityDraft)({contextTitleKo:t.summaryKo||t.query||"여행",destinationKo:t.realityDraft?.destinationKo??null,stayLabelKo:t.realityDraft?.stayLabelKo??null,nodes:d})??t.realityDraft??null;(0,n.writeContextWorkspace)({...t,nodes:d,selectedIds:[s],relationshipEdges:l,realityDraft:h,lastChangeKo:p?`${p.title} \xb7 Day${a} 일정에 넣었어요`:`Day${a} Draft \xb7 일정 이동`,realityPlan:{...t.realityPlan??{stayType:null,maxPriceBand:null,minRating:null,stationNear:!1,onsenRequired:!1,editCount:0,lastEditKo:"",updatedAtIso:new Date().toISOString()},lastEditKo:`move_schedule:day${a}:${s}`,editCount:(t.realityPlan?.editCount??0)+1,updatedAtIso:new Date().toISOString()},updatedAtIso:new Date().toISOString()}),g=p?`${p.title} \xb7 Day${a} 일정에 넣었어요`:`Day${a} Draft 생성`,e({contextEventId:c,patch:{kind:"rebuild_route",dayIndex:m.dayIndex},utterance:u??`Day${a} 동선`,skipAutoProjection:!0});{let e=(0,n.readContextWorkspace)(c);e?.lastChangeKo?.includes("동선")&&(g=`${g} \xb7 ${e.lastChangeKo}`)}}else t&&(0,n.writeContextWorkspace)({...t,lastChangeKo:`Day${a} Draft`,realityPlan:{...t.realityPlan??{stayType:null,maxPriceBand:null,minRating:null,stationNear:!1,onsenRequired:!1,editCount:0,lastEditKo:"",updatedAtIso:new Date().toISOString()},lastEditKo:`move_schedule:day${a}`,editCount:(t.realityPlan?.editCount??0)+1,updatedAtIso:new Date().toISOString()},updatedAtIso:new Date().toISOString()}),g=`Day${a} Draft 생성`;break}
1case"remove_schedule":{let t=(0,n.readContextWorkspace)(c),a=m.dayIndex+1;if(!t){g="삭제할 일정 없음";break}let i=t.nodes.filter(e=>tw(e,a)),o=(m.entityId?t.nodes.find(e=>e.id===m.entityId||e.placeId===m.entityId):null)??(m.queryIncludes?tC(i.length>0?i:t.nodes,m.queryIncludes):null)??i[0]??null;if(!o){g=`Day${a}에서 뺄 장소 없음`;break}let r=t.nodes.map(e=>{let t;return e.id===o.id?(t=e.tags.filter(e=>!RegExp(`^day[_-]?${a}$`,"iu").test(e)),{...e,tags:t}):e}),l=(t.relationshipEdges??[]).filter(e=>e.id!==`schedule_${o.id}_day${a}`&&(e.fromId!==o.id||e.toId!==`schedule:day${a}`)&&(e.toId!==o.id||e.fromId!==`schedule:day${a}`)),s=(0,tr.buildRealityDraft)({contextTitleKo:t.summaryKo||t.query||"여행",destinationKo:t.realityDraft?.destinationKo??null,stayLabelKo:t.realityDraft?.stayLabelKo??null,nodes:r})??t.realityDraft??null;(0,n.writeContextWorkspace)({...t,nodes:r,relationshipEdges:l,realityDraft:s,lastChangeKo:`${o.title} \xb7 Day${a}에서 뺐어요`,updatedAtIso:new Date().toISOString()}),g=`${o.title} \xb7 Day${a}에서 뺐어요`,e({contextEventId:c,patch:{kind:"rebuild_route",dayIndex:m.dayIndex},utterance:u??`Day${a} 동선`,skipAutoProjection:!0});break}case"rebuild_route":{let e=(0,n.readContextWorkspace)(c),t=m.dayIndex+1;if(!e){g="동선 재구성 실패";break}let a=(r=e.nodes.filter(e=>
1e.visible&&tw(e,t))).length<=1?[...r]:(0,tx.optimizeWorkspaceNodeRoute)(r,r[0]?.id??null).filter(e=>r.some(t=>t.id===e.id)),i=`schedule:day${t}`,o=(e.relationshipEdges??[]).filter(e=>!(e.toId===i||e.fromId===i||"route"===e.kind&&e.id.startsWith(`route_day${t}_`))),l=a.slice(0,-1).map((e,n)=>{let i,o,r,l=a[n+1];return{id:`route_day${t}_${e.id}_${l.id}`,kind:"route",fromId:e.id,toId:l.id,labelKo:`Day${t} ${n+1}→${n+2}`,meters:(o=(i=e=>e*Math.PI/180)(l.lat-e.lat),r=i(l.lng-e.lng),Math.round(12742e3*Math.asin(Math.min(1,Math.sqrt(Math.sin(o/2)**2+Math.cos(i(e.lat))*Math.cos(i(l.lat))*Math.sin(r/2)*Math.sin(r/2))))))}}),s=a.map(e=>({id:`schedule_${e.id}_day${t}`,kind:"route",fromId:e.id,toId:i,labelKo:`Day${t} Draft`,meters:null})),u=l.reduce((e,t)=>e+(t.meters??0),0),d=(0,tr.buildRealityDraft)({contextTitleKo:e.summaryKo||e.query||"여행",destinationKo:e.realityDraft?.destinationKo??null,stayLabelKo:e.realityDraft?.stayLabelKo??null,nodes:e.nodes})??e.realityDraft??null;(0,n.writeContextWorkspace)({...e,relationshipEdges:[...o,...s,...l].slice(0,64),realityDraft:d,lastChangeKo:a.length>0?`Day${t} 동선 \xb7 ${a.length}곳${u>0?` \xb7 약 ${Math.round(u/1e3)}km`:""}`:`Day${t} 동선 다시 짜기`,updatedAtIso:new Date().toISOString()}),g=a.length>0?`Day${t} 동선 \xb7 ${a.length}곳`:`Day${t} 동선 다시 짰어요`;break}case"move_entity":{let e=(0,n.readContextWorkspace)(c);e&&null!=m.lat&&null!=m.lng?((0,n.writeContextWorkspace)({...e,nodes:e.nodes.map(e=>e.id===m.entityId||e.placeId===m.entityId?{...e,lat:m.lat,lng:m.lng}:e),lastChangeKo:"Move Entity 패치",updatedAtIso:new Date().toISOString()}),g="Move Entity 패치"):g="Move Entity · 좌표 없음";break}case"update_entity":g="Update Entity 패치";break;case"create_draft":g=m.labelKo?.slice(0,40)??"Draft 생성 패치";break;case"simulation":(0,t.applyWorkspaceTransition)({contextEventId:c,op:"simulate",changeKo:m.scenarioKo?.slice(0,40)??"Simulation 패치"}),g="Simulation 패치";break;case"absorb_network":if(g=m.labelKo?.trim()||`네트워크 ${m.lineCount}노선 \xb7 ${m.providerId}`,m.family&&m.visibilityOp){let e=to({family:m.family,op:m.visibilityOp,lineIds:m.lineIds??[],labelKo:m.labelKo??g,providerId:m.providerId,needId:m.needId}),t=(0,n.readContextWorkspace)(c);t&&(0,n.writeContextWorkspace)({...t,networkAbsorb:e,updatedAtIso:new Date().toISOString()})}break;case"absorb_geometry":g=`${m.labelKo} 영역 \xb7 ${m.geometryType} \xb7 ${m.providerId}`;break;default:g="알 수 없는 Patch"}let f=(l={patch:m,utterance:u,statusKo:g},{id:`patch_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,kind:l.patch.kind,patch:l.patch,utterance:l.utterance,statusKo:l.statusKo,atIso:new Date().toISOString(),answerForbidden:!0});if(!function(e,t){let a=(0,n.readContextWorkspace)(e);if(!a)return;let i=Array.isArray(a.patches)?a.patches:[];(0,n.writeContextWorkspace)({...a,patches:[...i,t].slice(-40),lastChangeKo:t.statusKo,updatedAtIso:t.atIso})}(c,f),u?.trim()&&("filter_entity"===m.kind||"spatial_constraint"===m.kind||"replace_entity"===m.kind)&&tv({contextEventId:c,utterance:u}),!a.skipAutoProjection){let e="delete_entity"===m.kind?[]:(0,n.readContextWorkspace)(c)?.selectedIds??[];te({contextEventId:c,patchRecord:f,entityIds:e.length?e:null})}return{ok:!0,statusKo:g,record:f,needsRescout:h,scoutQuery:y}}],80933),e.s([],20957),e.s([],158460);let tS=["distance","rating","contextFit"],tT=.4,tL=.2,tE=.2,tP=.2;function tA(e){var t;let n,a,i,o,r,l,s=e.trim();return s&&function(e){let t=e.trim();if(!t||/캡슐\s*호텔|캡슐호텔|호스텔|게스트\s*하우스|료칸|capsule|hostel|ryokan/iu.test(t)&&!/근처|주변|near|around|기준|맛집|식당|카페|cafe/iu.test(t))return!1;let n=/찾아|보여|근처|주변|near|around|기준|기반으로/iu.test(t),a=/맛집|식당|카페|cafe|restaurant|food|숙소|호텔|hotel|놀거리|관광|attraction/iu.test(t),i=/호텔|숙소|hotel|위치|근처|주변|기준|USJ|역|station|내\s*위치/iu.test(t);return n&&a&&i}(s)?{type:"SPATIAL_DISCOVERY",targetEntity:/카페|cafe|커피/iu.test(s)?"cafe":/숙소|호텔|hotel|lodging/iu.test(s)&&/근처|주변|near|기준/iu.test(s)&&/USJ|유니버설|유니버셜|도톤보리|역|attraction|관광|놀거리/iu.test(s)?"hotel":/놀거리|관광|attraction|테마파|아쿠아/iu.test(s)?"attraction":/편의|약국|amenity/iu.test(s)?"amenity":/맛집|식당|먹을|restaurant|food|맛\s*집/iu.test(s)?"restaurant":/숙소|호텔|hotel|lodging/iu.test(s)?"hotel":"restaurant",anchorEntity:/내\s*위치|현재\s*위치|my\s*location|gps/iu.test(s)?"user_location":/USJ|유니버설|유니버셜/iu.test(s)&&/근처|주변|near/iu.test(s)?"attraction":/역|駅|station/iu.test(s)&&/근처|주변|near|around/iu.test(s)?"station":(/호텔|숙소|hotel|namba|난바/iu.test(s),"hotel"),relation:/같은\s*동네|같은\s*구역|same\s*area|일대/iu.test(s)?"same_area":/안|내부|inside|within/iu.test(s)?"inside":/경로|루트|따라|route\s*along|가는\s*길/iu.test(s)?"route_along":/도보|걸어서|walking\s*distance|걸어서\s*갈/iu.test(s)?"walking_distance":"nearby",constraints:(n=s.match(/(\d+)\s*분/),a=s.match(/(\d+)\s*m(?:eters?)?/i),i=s.match(/(\d+(?:\.\d+)?)\s*km/i),o=null,a?o=Number(a[1]):i&&(o=Math.round(1e3*Number(i[1]))),r=null,/저렴|싼|가성비|budget|low/iu.test(s)?r="low":/고급|비싸|luxury|high/iu.test(s)?r="high":/적당|중간|mid/iu.test(s)&&(r="mid"),l=null,/점심|lunch/iu.test(s)?l="lunch":/저녁|dinner/iu.test(s)&&(l="dinner"),t={walkingTime:n?Number(n[1]):null,distance:o,category:/라멘|스시|야키토리/iu.test(s)?s.match(/(라멘|스시|야키토리)/iu)?.[1]??null:null,budgetBand:r,scheduleWindow:l},{distance:t?.distance??null,walkingTime:t?.walkingTime??null,category:t?.category??null,budgetBand:t?.budgetBand??null,scheduleWindow:t?.scheduleWindow??null}),rawText:s}:null}function t$(e){return e.trim().toLowerCase().replace(/\s+/g,"")}function tj(e,t){let n=t$(e),a=t$(t),i=0;for(let e of(/namba|난바/.test(a)&&/namba|난바/.test(n)&&(i+=40),/umeda|우메다/.test(a)&&/umeda|우메다/.test(n)&&(i+=40),/doton|도톤/.test(a)&&/doton|도톤/.test(n)&&(i+=40),/usj|유니버설/.test(a)&&/usj|universal|유니버설/.test(n)&&(i+=40),a.match(/[a-z0-9가-힣]{2,}/g)??[]))!/호텔|숙소|근처|주변|맛집|찾아|기준|기반|보여/.test(e)&&n.includes(e)&&(i+=12);return i}function tR(e){return{anchorId:e.anchor.entityId,type:e.anchor.kind,location:{lat:e.anchor.lat,lng:e.anchor.lng},contextId:e.contextId}}function tD(e){return{entityId:e.entityId,titleKo:e.titleKo,type:e.kind,lat:e.lat??null,lng:e.lng??null,pinRole:"anchor_candidate"}}function tM(e,t,n,a){var i,o;let r,l={entityId:e.entityId,titleKo:e.titleKo,labelKo:(i=e.titleKo,o=t.anchorEntity,r=i.trim(),/namba|난바/i.test(r)&&(/hotel|호텔/i.test(r)||"hotel"===o)?"N
1amba Hotel":r||"Anchor"),kind:t.anchorEntity,lat:e.lat??null,lng:e.lng??null};return{ok:!0,anchor:l,source:a,resolver:tR({anchor:l,contextId:n})}}function tW(e,t,n){return!!t&&t.candidate.entityId!==e.entityId&&!(t.score<40)&&20>tj(e.titleKo,n.rawText)}let tO=[{id:"add_to_schedule",labelKo:"일정 추가",enabled:!0,primary:!0},{id:"compare",labelKo:"비교",enabled:!0,primary:!1},{id:"prepare_reservation",labelKo:"예약 준비",enabled:!0,primary:!1}],tN={nearby:1e3,walking_distance:800,route_along:1500,same_area:2500,inside:500};function tF(e){return Number.isNaN(e)?0:Math.max(0,Math.min(1,e))}function tB(e,t,n,a){e.push({stage:t,message:n}),a&&console.log(`[SpatialRetrieval:${t}] ${n}`)}function tU(e){return"restaurant"===e?"Restaurant":"cafe"===e?"Cafe":"hotel"===e?"Hotel":"attraction"===e?"Attraction":e.charAt(0).toUpperCase()+e.slice(1)}function tq(e){return"nearby"===e?"Nearby":"walking_distance"===e?"Walking Distance":"route_along"===e?"Route Along":"same_area"===e?"Same Area":"inside"===e?"Inside":e.charAt(0).toUpperCase()+e.slice(1)}function tH(e){let t=0;return"number"==typeof e.rating&&(t+=10*e.rating),e.enrichmentTags.includes("has_photo")&&(t+=8),e.enrichmentTags.includes("high_rating")&&(t+=5),e.enrichmentTags.includes("priced")&&(t+=2),e.enrichmentTags.includes("reservable")&&(t+=3),"number"==typeof e.walkMinutes&&Number.isFinite(e.walkMinutes)&&(t+=Math.max(0,20-e.walkMinutes)),"number"==typeof e.reviewCount&&e.reviewCount>50&&(t+=4),t}function tz(e){return{id:e.entityId,labelKo:e.titleKo,lat:e.lat,lng:e.lng,rating:e.rating??null,walkMinutes:e.walkMinutes??null,amountLabel:null,priceBand:null,source:"spatial_retrieval"}}e.s(["applySpatialDiscoveryToWorkspace",0,function(e){var i;let o=e.contextEventId.trim(),r=e.utterance.trim();if(!o||!r||!tA(r))return{handled:!1,statusKo:null,entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:null};let l=(0,n.readContextWorkspace)(o);if(!l||"editing"!==l.status&&"committing"!==l.status)return{handled:!1,statusKo:null,entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:null};let s=l.nodes.filter(e=>Number.isFinite(e.lat)&&Number.isFinite(e.lng)).map(e=>({entityId:e.id,titleKo:e.title,kind:"lodging"===e.kind?"hotel":"eatery"===e.kind?"restaurant":"amenity"===e.kind?"station":"attraction",lat:e.lat,lng:e.lng,selected:e.selected,contextAnchor:e.bookmarked||e.selected}));if(x(r)){let e=w({utterance:r});if(e.gated&&!e.ok)return{handled:!0,statusKo:e.statusKo,entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:null};e.gated&&e.ok&&(E({contextEventId:o,anchor:{entityId:e.anchor.id,titleKo:e.anchor.labelKo,labelKo:e.anchor.labelKo,kind:"station"===e.anchor.kind?"station":"attraction",lat:e.anchor.lat,lng:e.anchor.lng},geoId:e.anchor.id,summaryKo:`${e.anchor.labelKo} \xb7 검색 기준점`}),s=[{entityId:e.anchor.id,titleKo:e.anchor.labelKo,kind:"station"===e.anchor.kind?"station":"attraction",lat:e.anchor.lat,lng:e.anchor.lng,selected:!0,contextAnchor:!0},...s.filter(t=>t.entityId!==e.anchor.id)])}let c=function(e){var t,n,a;let i,o,r,l=[],s=!1!==e.log,c=tA(e.text.trim());if(!c)return tB(l,"intent","Intent 파싱 실패",s),{ok:!1,reasonKo:"SPATIAL_DISCOVERY Intent로 해석할 수 없어요",stage:"intent",logs:l,intent:null};tB(l,"intent",`Intent 생성 \xb7 type=${c.type} \xb7 targetEntity=${c.targetEntity} \xb7 anchorEntity=${c.anchorEntity} \xb7 relation=${c.relation}`,s);let u=(i=(t={workspaceId:e.workspaceId,contextTitleKo:e.contextTitleKo,intent:c}).workspaceId.trim(),{workspaceId:i,contextId:(o=t.contextTitleKo?.trim()||(t.intent.rawText.includes("오사카")?"Osaka Trip":"Active Workspace"),"osaka_trip"===(r=o.trim().toLowerCase().replace(/[^a-z0-9가-힣]+/gi,"_").replace(/^_+|_+$/g,""))||/osaka/.test(r)?"osaka_trip":r.length>=2?r.slice(0,48):i.trim()||"context"),titleKo:o});tB(l,"context",`Context \xb7 ${u.titleKo} (${u.workspaceId})`,s);let d=function(e){var t;let n=e.intent,a=e.contextId.trim()||"context",i=e.candidates??[];if("user_location"===n.anchorEntity){let e={entityId:"anchor_user_location",titleKo:"내 위치",labelKo:"내 위치",kind:"user_location",lat:null,lng:null};return{ok:!0,anchor:e,source:"selected",resolver:tR({anchor:e,contextId:a})}}
1let o=(t=n.anchorEntity,i.filter(e=>{var n;let a;return n=e.kind,a=n.toLowerCase(),"hotel"===t?"hotel"===a||"lodging"===a:"attraction"===t?"attraction"===a||"poi"===a||"place"===a:"station"===t?"station"===a||"amenity"===a:"place"===t||"user_location"!==t&&a===t})),r=function(e,t){let n=null,a=-1,i=-1;for(let o of e){let e=tj(o.titleKo,t.rawText);e>a?(i=a,a=e,n=o):e>i&&(i=e)}return!n||a<12||i>=12&&a-i<8?null:{candidate:n,score:a}}(o,n),l=o.find(e=>!0===e.selected);if(l&&!tW(l,r,n))return tM(l,n,a,"selected");let s=o.find(e=>!0===e.contextAnchor);if(s&&!tW(s,r,n))return tM(s,n,a,"context_anchor");let c=o.find(e=>!0===e.recentInteraction);return c&&!tW(c,r,n)?tM(c,n,a,"recent_interaction"):r?tM(r.candidate,n,a,"nl_match"):{ok:!1,reason:o.length>1?"ambiguous":"not_found",candidates:(o.length>0?o:i).slice(0,3).map(tD),askUser:!1}}({intent:c,contextId:u.contextId,candidates:e.candidates});if(!d.ok){for(let e of(tB(l,"anchor",`Anchor ambiguous \xb7 project ${d.candidates.length} candidates (askUser=false)`,s),d.candidates))tB(l,"projection",`anchor_candidate \xb7 ${e.titleKo} (${e.entityId})`,s);return{ok:!1,reasonKo:"기준 장소 후보를 지도에 표시했어요",stage:"anchor",logs:l,intent:c,anchorCandidates:d.candidates,askUser:!1}}let{anchor:p,resolver:m,source:g}=d;tB(l,"anchor",`Entity Resolver \xb7 source=${g} \xb7 anchorId=${m.anchorId} \xb7 type=${m.type} \xb7 contextId=${m.contextId}`,s),tB(l,"anchor",`anchorEntity = ${p.labelKo}`,s),tB(l,"anchor",`targetEntity = ${tU(c.targetEntity)}`,s),tB(l,"anchor",`relation = ${tq(c.relation)}`,s);let h=function(e){let{intent:t,anchor:n}=e,a=t.relation,i=t.constraints.distance??(null!=t.constraints.walkingTime?80*t.constraints.walkingTime:tN[a]??1e3),o=null!=n.lat&&null!=n.lng?{lat:n.lat,lng:n.lng}:null,r=t.constraints.category?.trim()||t.targetEntity,l=[...tS];return{targetEntity:t.targetEntity,relation:a,anchor:n,constraints:t.constraints,center:o,radiusMeters:i,radius:i,category:r,ranking:l,engine:{center:o,radius:i,category:r,ranking:l,relation:a}}}({intent:c,anchor:p}),y=h.engine;tB(l,"query",`Spatial Query \xb7 center=${y.center?`${y.center.lat},${y.center.lng}`:"null"} \xb7 radius=${y.radius} \xb7 category=${y.category} \xb7 ranking=[${y.ranking.join(",")}]`,s);let f=function(e){var t,n;let{query:a}=e,i=a.center;if(!i)return[];let o=e.inventory&&e.inventory.length>0?e.inventory.filter(e=>{let t=e.kind.toLowerCase();return"restaurant"===a.targetEntity?"restaurant"===t||"eatery"===t||"cafe"===t:"cafe"===a.targetEntity?"cafe"===t:"hotel"!==a.targetEntity||"hotel"===t||"lodging"===t}).map(e=>({id:e.entityId,title:e.titleKo,lat:e.lat,lng:e.lng,rating:e.rating??3.5,budgetBand:e.budgetBand??"mid",scheduleTags:e.scheduleTags??["any"]})):[...(t=a.targetEntity,"restaurant"===t||"cafe"===t?[{id:"ent_rest_ichiran",title:"Ichiran",lat:i.lat+.004,lng:i.lng+.002,rating:4.4,budgetBand:"mid",scheduleTags:["lunch","dinner"]},{id:"ent_rest_kukuru",title:"Kukuru Takoyaki",lat:i.lat+.002,lng:i.lng-.003,rating:4.1,budgetBand:"low",scheduleTags:["snack","dinner"]},{id:"ent_rest_sushi",title:"Sushiro Namba",lat:i.lat-.003,lng:i.lng+.001,rating:4,budgetBand:"mid",scheduleTags:["lunch","dinner"]}]:"hotel"===t?[{id:"ent_hotel_near_1",title:"Station Capsule",lat:i.lat+.001,lng:i.lng+.001,rating:3.8,budgetBand:"low",scheduleTags:["night"]}]:[{id:"ent_attr_1",title:"Dotonbori",lat:i.lat+.005,lng:i.lng,rating:4.6,budgetBand:"mid",scheduleTags:["day","evening"]}])],r=[];for(let e of o){if(e.id===a.anchor.entityId)continue;let t=Math.round(function(e,t){let n=e=>e*Math.PI/180,a=n(t.lat-e.lat),i=n(t.lng-e.lng);return 12742e3*Math.asin(Math.min(1,Math.sqrt(Math.sin(a/2)**2+Math.cos(n(e.lat))*Math.cos(n(t.lat))*Math.sin(i/2)**2)))}(i,{lat:e.lat,lng:e.lng}));(function(e,t){let n=e.radius;switch(e.relation){case"nearby":case"route_along":case"same_area":default:return t<=n;case"walking_distance":return t<=n&&t/80<=15;case"inside":return t<=Math.min(n,600)}})(a,t)&&r.push({entityId:e.id,titleKo:e.title,kind:a.targetEntity,lat:e.lat,lng:e.lng,metersFromAnchor:t,walkMinutes:Math.max(1,Math.round(t/80)),rating:e.rating,budgetBand:e.budgetBand,scheduleTags:e.scheduleTags})}return[...(n={query:a,entities:r}).entities.map(e=>({...e,contextScore:function(e){let{query:t}
1=e,n=Math.max(1,t.radius),a=0;null!=e.metersFromAnchor&&(a=tF(1-e.metersFromAnchor/n));let i=tF((e.rating??3.5)/5),o=t.constraints.budgetBand?.toLowerCase()??null,r=e.budgetBand?.toLowerCase()??null,l=.7;o&&r?l=o===r?1:o.includes(r)||r.includes(o)?.75:.35:o||(l=.75);let s=t.constraints.scheduleWindow?.toLowerCase()??null,c=(e.scheduleTags??[]).map(e=>e.toLowerCase()),u=.7;s&&c.length>0?u=c.some(e=>e.includes(s)||s.includes(e))?1:.4:s||(u=.8);let d=tF(a*tT+i*tL+l*tE+u*tP);return{distance:Math.round(1e3*a)/1e3,rating:Math.round(1e3*i)/1e3,budgetFit:Math.round(1e3*l)/1e3,scheduleFit:Math.round(1e3*u)/1e3,total:Math.round(1e3*d)/1e3}}({query:n.query,metersFromAnchor:e.metersFromAnchor,rating:e.rating,budgetBand:e.budgetBand,scheduleTags:e.scheduleTags})}))].sort((e,t)=>{let n=e.contextScore?.total??0,a=t.contextScore?.total??0;return a!==n?a-n:(e.metersFromAnchor??1e9)-(t.metersFromAnchor??1e9)}).slice(0,12)}({query:h});for(let e of(tB(l,"retrieval",`Entity Retrieval \xb7 ${f.length}개 \xb7 Context Score ranked`,s),f.slice(0,3)))tB(l,"retrieval",`  ${e.titleKo} \xb7 score=${e.contextScore?.total??"?"} \xb7 ${e.metersFromAnchor}m`,s);let b=function(e){var t,n,a,i;let o=[(t=e.anchor,n=e.contextId,{id:t.entityId,type:t.kind,location:{lat:t.lat,lng:t.lng},attributes:{titleKo:t.titleKo||t.labelKo},contextLinks:[n]})];for(let t of e.entities)o.push((a=e.contextId,i=e.anchor.entityId,{id:t.entityId,type:t.kind,location:{lat:t.lat,lng:t.lng},attributes:{titleKo:t.titleKo,rating:t.rating??null,budgetBand:t.budgetBand??null,scheduleTags:t.scheduleTags,contextScore:t.contextScore?.total},contextLinks:[a,i]}));return o}({anchor:p,entities:f,contextId:u.contextId}),k=(n={anchor:p,entities:f,relation:c.relation}).entities.map(e=>{var t;let a={from:(t={fromId:n.anchor.entityId,toId:e.entityId,type:n.relation,distance:e.metersFromAnchor,walkingTime:e.walkMinutes}).fromId,to:t.toId,type:t.type,metadata:{distance:t.distance,walkingTime:t.walkingTime}};return{id:`rel_${n.anchor.entityId}_${e.entityId}_${n.relation}`,fromId:n.anchor.entityId,toId:e.entityId,relation:n.relation,meters:e.metersFromAnchor,walkMinutes:e.walkMinutes,reality:a}}),K=k.map(e=>e.reality);tB(l,"reality_graph",`Reality Graph \xb7 nodes=${b.length} \xb7 edges=${K.length}`,s),s&&console.log(function(e){var t;let n=[`🏨 ${e.anchorLabel}`,""];if(0===e.targets.length)return n.push("(no discovered entities)"),n.join("\n");for(let a of(n.push(" |"),n.push(" |"),n.push(` ${"nearby"===(t=e.relation)?"Nearby":"walking_distance"===t?"Walking Distance":"route_along"===t?"Route Along":"same_area"===t?"Same Area":"inside"===t?"Inside":t}`),n.push(" |"),n.push(" |"),n.push(""),e.targets))n.push(`🍣 ${a}`),n.push("");return n.join("\n").trimEnd()}({anchorLabel:p.labelKo,relation:c.relation,targets:f.map(e=>e.titleKo)}));let I=function(e){let t=[];for(let n of(null!=e.anchor.lat&&null!=e.anchor.lng&&t.push({entityId:e.anchor.entityId,titleKo:e.anchor.titleKo,kind:e.anchor.kind,lat:e.anchor.lat,lng:e.anchor.lng,role:"anchor"}),e.entities))t.push({entityId:n.entityId,titleKo:n.titleKo,kind:n.kind,lat:n.lat,lng:n.lng,role:"discovered"});return t}({anchor:p,entities:f});tB(l,"projection",`Projection \xb7 pins=${I.length} (anchor+discovered) \xb7 auto map update`,s);let v=(a={anchor:p,entities:f,context:u,relation:c.relation,constraints:c.constraints,realityRelationships:K}).entities.map(e=>{var t,n,i,o;let r,l,s,c,u,d,p=a.realityRelationships?.find(t=>t.to===e.entityId)??null;return n={entity:(t={entity:e,anchor:a.anchor,context:a.context,relation:a.relation,constraints:a.constraints,realityEdge:p}).entity,anchor:t.anchor,constraints:t.constraints},r=[],l=n.entity.contextScore,null!=n.entity.metersFromAnchor&&n.entity.metersFromAnchor<=800?r.push("호텔 근처"):r.push(`${n.anchor.labelKo} 기준`),s=n.entity.scheduleTags??[],"dinner"===(c=n.constraints.scheduleWindow)||s.some(e=>/dinner|저녁/i.test(e))?r.push("Day1 저녁 적합"):"lunch"===c||s.some(e=>/lunch|점심/i.test(e))?r.push("점심 일정 적합"):l&&l.scheduleFit>=.7&&r.push("일정 적합"),l&&l.budgetFit>=.7?r.push("예산 적합"):"low"===n.entity.budgetBand&&r.push("가성비"),u=[...new Set(r)].slice(0,3),d=[{fromId:t.anchor.entityId,toId:t.entity.entityId,type:t.relation,labelKo:"nearby"===(i=t.relation)?"Nearby":"walking_distance"===i?"Walking Distance":"route_along"===i?"Route Along":"same_area"===i?"Same Area":"inside"===i?"Inside":i,anchorTitleKo:t.anchor.labelKo,distanceMeters:t.realityEdge?.metadata.distance??t.entity.metersFromAnchor,walkingMinutes:t.realityEdge?.metadata.walkingTime??t.entity.walk
1Minutes}],{entityId:t.entity.entityId,mode:"discovery",titleKo:t.entity.titleKo,emoji:"restaurant"===(o=t.entity.kind)||"cafe"===o?"🍣":"hotel"===o?"🏨":"attraction"===o?"🎡":"📍",evidence:function(e){let t=[{id:"hotel_relation",kind:"hotel_relation",labelKo:"Hotel Relation",valueKo:`🏨 ${e.anchor.labelKo}`}];null!=e.entity.metersFromAnchor&&t.push({id:"distance",kind:"distance",labelKo:"거리",valueKo:`${e.entity.metersFromAnchor}m`}),null!=e.entity.walkMinutes&&t.push({id:"walking",kind:"walking",labelKo:"도보",valueKo:`${e.entity.walkMinutes}분`});for(let n=0;n<e.why.length;n++)t.push({id:`why_${n}`,kind:"why",labelKo:"추천 이유",valueKo:e.why[n],checked:!0});return t}({entity:t.entity,anchor:t.anchor,why:u}),relationships:d,actions:tO,whyLinesKo:u.map(e=>`✓ ${e}`)}});tB(l,"callout",`Context Aware Callout \xb7 ${v.length} \xb7 mode=discovery`,s),s&&v[0]&&console.log(function(e){let t=e.relationships[0],n=[`${e.emoji} ${e.titleKo}`,"","Hotel Relation:",t?`🏨 ${t.anchorTitleKo}`:"—",""];for(let t of e.evidence)"distance"===t.kind&&n.push(`거리:
2${t.valueKo}`),"walking"===t.kind&&n.push(`도보:
3${t.valueKo}`);for(let t of(n.push("","추천 이유:"),e.whyLinesKo))n.push(t);return n.push("","Actions:"),n.push(e.actions.map(e=>`[${e.labelKo}]`).join(" ")),n.join("\n")}(v[0]));let x=function(e){let t=[];e.realityEntities.filter(e=>e.contextLinks.length>1||"hotel"!==e.type);let n=e.realityEntities.slice(1);for(let e of n)t.push({stage:"entity_created",entityId:e.id,message:`Entity Created \xb7 ${e.type} \xb7 ${e.attributes.titleKo}`}),t.push({stage:"projection_event",entityId:e.id,message:`Projection Event \xb7 ${e.id}`});for(let a of(t.push({stage:"map_update",entityId:null,message:`Map Update \xb7 +${n.length} entities \xb7 pins=${e.pins.length}`}),e.pins.filter(e=>"discovered"===e.role)))t.push({stage:"marker_created",entityId:a.entityId,message:`Marker 생성 \xb7 ${a.titleKo}`});for(let n of(t.push({stage:"relationship_layer_update",entityId:null,message:`Relationship Layer Update \xb7 edges=${e.relationships.length}`}),e.callouts))t.push({stage:"callout_created",entityId:n.entityId,message:`Callout 생성 \xb7 ${n.titleKo} \xb7 mode=${n.mode}`});return t}({realityEntities:b,relationships:K,pins:I,callouts:v});for(let e of x)("entity_created"===e.stage||"map_update"===e.stage||"relationship_layer_update"===e.stage||"callout_created"===e.stage)&&tB(l,"projection",e.message,s);let _=`Spatial Retrieval
4Intent \xb7 ${c.type}
5anchorEntity = ${p.labelKo}
6targetEntity = ${tU(c.targetEntity)}
7relation = ${tq(c.relation)}
8Spatial Query \xb7 r=${h.radius} \xb7 ranking=${h.ranking.join("+")}
9Reality Graph \xb7 ${b.length} nodes \xb7 ${K.length} edges
10Callout \xb7 ${v.length} discovery`;return{ok:!0,intent:c,context:u,anchor:p,resolver:m,query:h,entities:f,realityEntities:b,relations:k,realityRelationships:K,pins:I,callouts:v,projectionEvents:x,logs:l,summaryKo:_}}({text:r,workspaceId:l.workspaceId,contextTitleKo:l.summaryKo||l.query||"Workspace",candidates:s,log:!1});if(!c.ok)return"anchor"===c.stage&&c.anchorCandidates?.length?{handled:!0,statusKo:`기준 후보 ${c.anchorCandidates.length}곳 \xb7 지도에서 고르세요`,entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:null}:{handled:!0,statusKo:c.reasonKo?.slice(0,72)??"Spatial Discovery 실패",entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:null};let u="hotel"===(i=c.intent.targetEntity)?"lodging":"restaurant"===i||"cafe"===i?"eatery":"amenity"===i?"amenity":"poi",d=c.entities,p=K(r);E({contextEventId:o,anchor:{entityId:p?.geoId??c.anchor.entityId,titleKo:p?.labelKo??c.anchor.titleKo,labelKo:p?.labelKo??c.anchor.labelKo,kind:c.anchor.kind,lat:p?.lat??c.anchor.lat,lng:p?.lng??c.anchor.lng},geoId:p?.geoId??null,summaryKo:`${c.anchor.labelKo} \xb7 기준점`});let m=p?.lat??c.anchor.lat,g=p?.lng??c.anchor.lng,h=null;if(null!=m&&null!=g&&Number.isFinite(m)&&Number.isFinite(g)){let e=c.intent.constraints.distance??c.query.radiusMeters??800,t=L({anchor:{lat:m,lng:g,labelKo:p?.labelKo??c.anchor.labelKo},candidates:d.map(e=>({id:e.entityId,labelKo:e.titleKo,lat:e.lat,lng:e.lng})),radiusMeters:e}),n=new Set(t.kept.map(e=>e.id));if(d=d.filter(e=>n.has(e.entityId)),h=t.statusKo,0===d.length)return{handled:!0,statusKo:h??"반경 안 후보 없음",entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:c.anchor.labelKo}}let y=[...d.map(tz).map(e=>{let t,n;return{...e,enriched:!0,enrichmentTags:(t=[],n=`${e.labelKo??""} ${e.amountLabel??""}`.toLowerCase(),/capsule|캡슐/iu.test(n)&&t.push("capsule"),/onsen|온천/iu.test(n)&&t.push("onsen"),"number"==typeof e.rating&&e.rating>=4.2&&t.push("high_rating"),("number"==typeof e.priceKrw||"number"==typeof e.priceBand)&&t.pu
10sh("priced"),(e.thumbnailUrl||Array.isArray(e.images)&&e.images.length>0)&&t.push("has_photo"),e.reservable&&t.push("reservable"),t)}})].sort((e,t)=>tH(t)-tH(e));{let e=(0,eY.readLastAgentProductTurn)();e&&e.contextEventId===o||(e=(0,eY.beginAgentProductTurn)({contextEventId:o,utterance:r})),e=(0,eY.advanceAgentProductStage)(e,"planner"),e=(0,eY.advanceAgentProductStage)(e,"object_discovery"),e=(0,eY.advanceAgentProductStage)(e,"object_enrichment"),(0,eY.advanceAgentProductStage)(e,"candidate_evaluation")}let f=(0,t.applyWorkspaceTransition)({contextEventId:o,op:"find_similar",domain:u,query:r,addCandidates:y,changeKo:`${c.anchor.labelKo} 기준 ${d.length}곳`}),b=(0,n.readContextWorkspace)(o)??f;if(!b)return{handled:!0,statusKo:"Workspace 업데이트 실패",entityCount:0,relationCount:0,calloutCount:0,anchorTitleKo:c.anchor.labelKo};let k=new Map,I=[];for(let e of d){let t=b.nodes.find(t=>t.placeId===e.entityId||t.id===e.entityId||t.id.endsWith(`:${e.entityId}`)||t.placeId.endsWith(e.entityId))??null;t&&(I.push(t.id),k.set(t.id,e.metersFromAnchor??null))}let v=b.nodes.find(e=>e.id===c.anchor.entityId||e.placeId===c.anchor.entityId)??null,_=(0,a.withWorkspaceRelationships)({...b,domain:u},r),C=function(e){let t=new Map(e.existing.map(e=>[e.id,e]));for(let n of e.toNodeIds){let a=`spatial_nearby_${e.fromId}_${n}`,i=e.metersByEntityId.get(n)??null;t.set(a,{id:a,kind:"nearby",fromId:e.fromId,toId:n,labelKo:null!=i?`Nearby \xb7 ${i}m`:"Nearby",meters:i})}return[...t.values()].slice(0,64)}({existing:_.relationshipEdges??[],fromId:v?.id??c.anchor.entityId,toNodeIds:I,metersByEntityId:k});(0,n.writeContextWorkspace)({..._,relationshipEdges:C,lastChangeKo:`${c.anchor.labelKo} 근처 ${d.length}곳 \xb7 관계 ${I.length}`,updatedAtIso:new Date().toISOString()});{let e=(0,eY.readLastAgentProductTurn)();e?.contextEventId===o&&(0,eY.advanceAgentProductStage)(e,"workspace_patch")}e.skipAutoProjection&&e8({contextEventId:o});let S=I.slice(0,3),T=0;if(e.skipAutoProjection)try{eq(S)}catch{}else{(0,n.writeContextWorkspaceExpanded)(o,!0),(0,en.dispatchContextWorkspaceExpand)({contextEventId:o,source:"scout_patch"});try{eq(S),T=te({contextEventId:o,entityIds:S}).calloutCount}catch{T=0}}let P="restaurant"===c.intent.targetEntity||"cafe"===c.intent.targetEntity?"맛집":"hotel"===c.intent.targetEntity?"숙소":"attraction"===c.intent.targetEntity?"명소":"장소";return{handled:!0,statusKo:`${c.anchor.labelKo} 기준 ${P} ${d.length}곳 \xb7 Callout ${T}`.slice(0,72),entityCount:d.length,relationCount:I.length,calloutCount:T,anchorTitleKo:c.anchor.labelKo}},"isSpatialDiscoveryUtterance",0,function(e){return null!=tA(e.trim())}],36824)},609577,e=>{"use strict";var t=e.i(99638);e.i(20957);var n=e.i(804250),a=e.i(36824),i=e.i(742361),o=e.i(428898),r=e.i(441956),l=e.i(167604);function s(e){var t;return{id:(t=e.index,`ws_step_${t+1}`),kind:e.kind,labelKo:e.labelKo,utterance:e.utterance.trim(),status:"pending",noteKo:e.noteKo??null,expect:e.expect,observation:null}}function c(e){return(0,n.parseWorkspacePatch)(e)?"workspace_patch":(0,a.isSpatialDiscoveryUtterance)(e)?"spatial_discovery":/예약\s*준비|prepare/iu.test(e)?"reality_prepare":"workspace_prompt"}function u(e){return[s({index:0,kind:c(e),labelKo:"Workspace 반영",utterance:e})]}e.s(["compileWorkspaceAgentPlan",0,function(e){let n,a,d,p,m,g,h,y,f,b,k,K,I,v,x,_,w,C,S,T,L,E,P,A,$,j=e.utterance.trim(),R=function(e){if(/(?:day\s*|데이\s*|)\d+\s*(?:일차|일)?/iu.test(e)&&/빼|빼고|삭제|지워/iu.test(e)&&/넣|추가|바꿔|교체/iu.test(e))return"day_modify_b";if(/(?:호텔|숙소)/iu.test(e)&&/(?:가성비|이\s*중|그중|그\s*중|\d+\s*개)/iu.test(e)&&/(?:day\s*|데이\s*|\d+\s*일차)/iu.test(e)&&/(?:넣어|넣고|추가|배치)/iu.test(e))return"scout_refine_day";if(/(?:호텔|숙소)/iu.test(e)&&/(?:맛집|저녁|식당|카페)/iu.test(e)&&/(?:day\s*1|1일차|일정|넣어|넣고|추가)/iu.test(e))return"compound_c";{let t=(0,i.concurrentDiscoveryResourceTypes)(e),n=(0,o.hasLodgingDomainCue)(e)||t.includes("hotel"),a=(0,r.hasEateryDomainCue)(e)||t.includes("restaurant"),l=t.includes("activity");if(n&&a||n&&l||a&&l)return"scout_domains"}return/(?:도|추가로|같이).{0,8}(?:호텔|숙소)/iu.test(e)&&/(?:usj|유니버설|근처)/iu.test(e)?"add_a":/(?:이\s*중|그중|그\s*중)/iu.test(e)&&/(?:남겨|골라|보여|3개|비교)/iu.test(e)?"refine_chain":"single"}(j);switch(R){case"day_modify_b":a=j.match(/(?:day\s*|데이\s*)?(\d+)\s*(?:일차|일)?/iu),d=a?.[1]??"2",p=j.match(/([\uac00-\ud7a3A-Za-z0-9·]{2,12})\s*(?:는|은|을|를)?\s*빼/u),m=j.match(/([\uac00-\ud7a3A-Za-z0-9·]{2,12})\s*(?:을|를|를)?\s*(?:넣|추가)/u),g=p?.[1]?.trim()||"해당 장소",h=m?.[1]?.trim()||"대체 장소",n=[s({index:0,kind:"workspace_patch",labelKo:`Day ${d} \xb7 ${g} 제거`,utterance:`Day ${d}에서 ${g} 빼줘`,noteKo:"B · remove_schedule",expect:{workspaceMutated:!0}}),s({index:1,kind:"workspace_patch",labelKo:`${h} 검색\xb7추가`,utterance:`${h}을 Day ${d}에 넣어줘`,noteKo:"B · move_schedule add",expect:{workspaceMutated:!0}}),s({index:2,kind:"workspace_patch",labelKo:`Day ${d} 동선 다시`,utterance:`Day ${d} 이동 동선 다시 짜줘`,noteKo:"B · rebuild_route",expect:{workspaceMutated:!0}})];break;case"scout_refine_day":var D;let M,W,O,N,F,B;F=(M=(D=j).match(/(?:day\s*|데이\s*)(\d+)|\b(\d+)\s*일차/iu),Number.isFinite(W=Number(M?.[1]||M?.[2]||"2"))&&W>=1&&W<=14?W:2),B=(O=D.match(/(?:상위\s*)?(\d+)\s*개|(?:만\s*)?(\d+)\s*개\s*(?
10:만|보여|남|골라)/u),Number.isFinite(N=Number(O?.[1]||O?.[2]||"3"))&&N>=2&&N<=5?N:3),n=[s({index:0,kind:"workspace_prompt",labelKo:"호텔 검색",utterance:function(e){let t=e.match(/([가-힣A-Za-z0-9]+역)/u)?.[1];if(t)return`${t} 근처 호텔 찾아줘`;let n=e.match(/(난바|도톤보리|우메다|신사이바시|Namba|Umeda)/iu)?.[1];return n?`${n} 근처 호텔 찾아줘`:"호텔 찾아줘"}(D),noteKo:"P5 · scout lodging",expect:{workspaceMutated:!0,requireVisibleDomain:!0,target:"lodging",minVisible:1}}),s({index:1,kind:"workspace_patch",labelKo:`가성비 TOP ${B}`,utterance:`이중에 가성비 좋은 것만 ${B}개`,noteKo:"P5 · soft refine + compare",expect:{workspaceMutated:!0,target:"lodging",minVisible:1}}),s({index:2,kind:"workspace_patch",labelKo:`Day ${F}에 넣기`,utterance:`첫 번째 호텔을 Day ${F}에 넣어줘`,noteKo:"P5 · move_schedule",expect:{workspaceMutated:!0,requireDay:F}}),s({index:3,kind:"workspace_patch",labelKo:`Day ${F} 동선`,utterance:`Day ${F} 이동 동선 다시 짜줘`,noteKo:"P5 · rebuild_route",expect:{workspaceMutated:!0}})];break;case"compound_c":y=j.match(/([^.]{0,48}(?:호텔|숙소)[^.]{0,40}?(?:골라|찾아|하나)?)/iu)?.[1]?.trim()||"난바역 근처 호텔 하나 찾아줘",f=j.match(/([^.]{0,40}(?:맛집|저녁|식당|카페)[^.]{0,36})/iu)?.[1]?.trim()||"근처 저녁 맛집 찾아줘",k=(b=/중\s*(?:에서|에)|이\s*중|그중|그\s*중|골라서|이하|미만|남겨/iu.test(j))&&/만원|만\s*원|이하|미만/iu.test(j)?j.match(/(?:그중|그\s*중|이\s*중(?:에서)?|으로)?\s*[^,]{0,24}?(\d+(?:\.\d+)?\s*만\s*원?\s*(?:이하|미만|아래))/u)?.[1]??j.match(/(\d+(?:\.\d+)?\s*만\s*원?\s*(?:이하|미만|아래))/u)?.[1]:null,n=b?[s({index:0,kind:"workspace_patch",labelKo:"호텔 후보 선별",utterance:k?`그중 ${k}만 남겨줘`:"이중에 가성비 좋은 것만 남겨줘",noteKo:"C · soft lodging filter",expect:{workspaceMutated:!0}}),s({index:1,kind:"workspace_patch",labelKo:"Day 1 숙소로 넣기",utterance:"첫 번째 호텔을 Day 1 숙소로 넣어줘",noteKo:"C · move_schedule lodging",expect:{workspaceMutated:!0}}),s({index:2,kind:"workspace_patch",labelKo:"저녁 맛집 Day 1",utterance:/카페/iu.test(f)?"첫 번째 카페를 Day 1에 넣어줘":"첫 번째 맛집을 Day 1에 넣어줘",noteKo:"C · move_schedule eatery",expect:{workspaceMutated:!0}}),s({index:3,kind:"workspace_patch",labelKo:"동선 업데이트",utterance:"Day 1 이동 동선 다시 짜줘",noteKo:"C · rebuild_route",expect:{workspaceMutated:!0}})]:[s({index:0,kind:c(y),labelKo:"호텔 검색·선별",utterance:/찾아|골라|검색/iu.test(y)?y:`${y} 찾아줘`,noteKo:"C · lodging",expect:{workspaceMutated:!0,requireVisibleDomain:!0,target:"lodging"}}),s({index:1,kind:"workspace_patch",labelKo:"Day 1 숙소로 넣기",utterance:"첫 번째 호텔을 Day 1 숙소로 넣어줘",noteKo:"C · move_schedule lodging"}),s({index:2,kind:c(f),labelKo:"저녁 맛집 검색",utterance:/찾아|추가|넣어/iu.test(f)?f:`${f} 찾아 추가해줘`,noteKo:"C · eatery",expect:{workspaceMutated:!0,requireVisibleDomain:!0,target:"eatery"}}),s({index:3,kind:"workspace_patch",labelKo:"동선 업데이트",utterance:"Day 1 이동 동선 다시 짜줘",noteKo:"C · rebuild_route",expect:{workspaceMutated:!0}})];break;case"refine_chain":n=[s({index:0,kind:c(j),labelKo:"후보 필터·정렬",utterance:j,noteKo:"refine · in-set",expect:{workspaceMutated:!0}})];break;case"scout_domains":K=(0,l.extractTravelDestination)(j)?.trim(),v=(I=j.match(/([가-힣A-Za-z0-9]+역)/u)?.[1]||j.match(/(난바|도톤보리|우메다|신사이바시|USJ|유니버설)/iu)?.[1]||K)?`${I} 근처 호텔 찾아줘`:K?`${K} 호텔 찾아줘`:"호텔 찾아줘",x=I?`${I} 근처 맛집 찾아줘`:K?`${K} 맛집 찾아줘`:"맛집 찾아줘",_=I?`${I} 근처 놀거리 찾아줘`:K?`${K} 놀거리 찾아줘`:"놀거리 찾아줘",w=(0,i.concurrentDiscoveryResourceTypes)(j),C=(0,o.hasLodgingDomainCue)(j)||w.includes("hotel")||0===w.length,S=(0,r.hasEateryDomainCue)(j)||w.includes("restaurant"),T=w.includes("activity"),L=[],E=0,C&&L.push(s({index:E++,kind:"workspace_prompt",labelKo:"호텔 검색",utterance:v,n
10oteKo:"scout_domains · lodging",expect:{workspaceMutated:!0,requireVisibleDomain:!0,target:"lodging",minVisible:1}})),S&&L.push(s({index:E++,kind:"workspace_prompt",labelKo:"맛집 검색",utterance:x,noteKo:"scout_domains · eatery",expect:{workspaceMutated:!0,requireVisibleDomain:!0,target:"eatery",minVisible:1}})),T&&L.push(s({index:E++,kind:"workspace_prompt",labelKo:"놀거리 검색",utterance:_,noteKo:"scout_domains · activity",expect:{workspaceMutated:!0,minVisible:1}})),P=j.match(/(?:상위\s*)?(\d+)\s*개|(?:만\s*)?(\d+)\s*개\s*(?:만|보여|남|골라)/u),Number.isFinite(A=Number(P?.[1]||P?.[2]||""))&&A>=2&&A<=5&&/가성비|이\s*중|그중|남|골라/iu.test(j)?L.push(s({index:E++,kind:"workspace_patch",labelKo:`가성비 TOP ${A}`,utterance:`이중에 가성비 좋은 것만 ${A}개`,noteKo:"scout_domains · soft refine",expect:{workspaceMutated:!0,minVisible:1}})):/가성비|더\s*싸|저렴/iu.test(j)&&C&&L.push(s({index:E++,kind:"workspace_patch",labelKo:"가성비 선별",utterance:"이중에 가성비 좋은 것만 남겨줘",noteKo:"scout_domains · value filter",expect:{workspaceMutated:!0}})),($=j.match(/(\d+)\s*만\s*원?\s*(?:이하|미만|아래)/u)?.[1])&&L.push(s({index:E++,kind:"workspace_patch",labelKo:`예산 ${$}만 이하`,utterance:`그중 ${$}만원 이하만 남겨줘`,noteKo:"scout_domains · budget",expect:{workspaceMutated:!0}})),n=L.length>0?L:u(j);break;case"add_a":n=[s({index:0,kind:"workspace_prompt",labelKo:"추가 호텔 검색",utterance:j,noteKo:"A · add lodging",expect:{workspaceMutated:!0,requireVisibleDomain:!0,target:"lodging"}})];break;default:n=u(j)}return{version:t.WORKSPACE_AGENT_PLAN_VERSION,planId:`wap_${Date.now().toString(36)}`,contextEventId:e.contextEventId?.trim()||null,sourceUtterance:j,planKind:R,steps:n,createdAtIso:new Date().toISOString(),cursor:0}}])},511783,952347,90641,e=>{"use strict";var t=e.i(301008),n=e.i(809214),a=e.i(556307),i=e.i(399947),o=e.i(589233);function r(e){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):0}function l(e){let t=e.price+e.location+e.scheduleFit;return t<=0?i.TRIP_CONTEXT_COMPARE_WEIGHTS:{price:e.price/t,location:e.location/t,scheduleFit:e.scheduleFit/t}}function s(e){let t=[e.summaryKo,e.query,e.realityDraft?.destinationKo??"",e.realityDraft?.contextTitleKo??"",e.realityDraft?.stayLabelKo??""].join(" ").toLowerCase();return e.realityDraft?.days?.length||/trip|여행|오사카|osaka|도쿄|tokyo|일정|usj|유니버설/i.test(t)?i.TRIP_CONTEXT_COMPARE_WEIGHTS:"eatery"===e.domain?l({price:.35,location:.4,scheduleFit:.25}):i.TRIP_CONTEXT_COMPARE_WEIGHTS}function c(e){let t=(e.amountLabel?.trim()??"").replace(/[^\d]/g,"");if(t.length>=3){let e=Number(t);if(Number.isFinite(e)&&e>0)return e}return null!=e.priceBand&&Number.isFinite(e.priceBand)?8e4*e.priceBand:null}function u(e){let t=`${e.title} ${e.tags.join(" ")} ${e.summaryKo}`;return"poi"===e.kind||/usj|유니버설|도톤|doton|난바|namba|관광|theme|attraction/iu.test(t)}function d(e,t,n){let a=null,i=new Set(t.map(e=>e.id));for(let t of n){if(t.fromId!==e.id&&t.toId!==e.id||"nearby"!==t.kind&&"route"!==t.kind)continue;let n=t.fromId===e.id?t.toId:t.fromId;i.has(n)&&null!=t.meters&&Number.isFinite(t.meters)&&(a=null==a?t.meters:Math.min(a,t.meters))}for(let n of t){if(n.id===e.id)continue;let t=function(e,t){let n=e=>e*Math.PI/180,a=n(t.lat-e.lat),i=n(t.lng-e.lng);return 12742e3*Math.asin(Math.min(1,Math.sqrt(Math.sin(a/2)**2+Math.cos(n(e.lat))*Math.cos(n(t.lat))*Math.sin(i/2)**2)))}(e,n);a=null==a?t:Math.min(a,t)}return a}function p(e,t){let n=t??s(e),a=e.compareIds.slice(0,5),i=[];for(let t of a){let p=function(e){let t,n,a,i,p=e.state,m=p.nodes.find(t=>t.id===e.entityId);if(!m)return null;let g=e.candidateEntityIds??(p.compareIds.length>=2?p.compareIds:[m.id]),h=g.map(e=>p.nodes.find(t=>t.id===e)).filter(e=>null!=e),y=l(e.weights??s(p)),f=(t=p.realityDraft?.nodeIds.map(e=>p.nodes.find(t=>t.id===e)).filter(e=>null!=e&&u(e))??[]).length>0?t.slice(0,4):p.nodes.filter(e=>e.visible&&u(e)).slice(0,4),b=function(e,t){let n=t.map(c).filter(e=>null!=e),a=c(e);if(null==a||0===n.length)return r((e.rating??3.5)/5);let i=Math.min(...n),o=Math.max(...n);return o<=i?.85:r(1-(a-i)/(o-i))}(m,h),k=null==(n=d(m,f,p.relationshipEdges))?.7*r((m.rating??3.5)/5)+.15:r(1-n/3e3),K=function(e,t,n){let a=t.realityDraft;if(!a?.days?.length){let a=.55;(e.bookmarked||e.selected)&&(a+=.15);let i=d(e,n,t.relationshipEdges);return null!=i&&i<1500&&(a+=.2),r(a)}let i=null;for(let t of a.days)if(t.nodes.some(t=>t.nodeId===e.id)){i=t.day;break}let o=a.days.filter(e=>e.nodes.some(e=>{let n=t.nodes.find(t=>
10t.id===e.nodeId);return n?u(n):/usj|유니버설|theme/i.test(e.title)})),l=.5;if(null!=i)l+=.25,o.some(e=>e.day===i)&&(l+=.2);else{let a=d(e,n,t.relationshipEdges);null!=a&&a<2e3&&(l+=.25),null!=a&&a<800&&(l+=.15)}return e.bookmarked&&(l+=.05),r(l)}(m,p,f),I=(i=r(b*(a=l(y)).price+k*a.location+K*a.scheduleFit),{price:Math.round(1e3*b)/1e3,location:Math.round(1e3*k)/1e3,scheduleFit:Math.round(1e3*K)/1e3,total:Math.round(100*i)});return{mode:"compare_decision",entityId:m.id,titleKo:m.title,imageUrl:m.thumbnailUrl?.trim()||m.galleryUrls?.find(e=>e.trim())?.trim()||null,scores:I,weights:y,judgmentKo:function(e){let{node:t,scores:n,anchors:a,state:i}=e,o=n.location>=n.scheduleFit&&n.location>=n.price?"location":n.scheduleFit>=n.price?"scheduleFit":"price",r=a[0],l=function(e){if(null==e||!Number.isFinite(e))return null;let t=Math.max(1,Math.round(e/80));return`${t}분`}(r?d(t,[r],i.relationshipEdges):null),s=i.realityDraft?.days.find(e=>e.nodes.some(e=>{let t=i.nodes.find(t=>t.id===e.nodeId);return!!t&&u(t)}));if("scheduleFit"===o&&s){let e=s.nodes.find(e=>{let t=i.nodes.find(t=>t.id===e.nodeId);return t?u(t):/usj|유니버설/i.test(e.title)});return e?`${s.day}일차 ${e.title} 방문 후 이동 최소`:`${s.day}일차 일정과 동선이 맞음`}return"location"===o&&r&&l?`${r.title}까지 이동 ${l} \xb7 동선 부담 최소`:"price"===o?"가격은 저렴하지만 이동 증가":n.total>=88?"Context 기준 최우선 후보":n.location<.45?"가격은 저렴하지만 이동 증가":t.summaryKo.trim()||"Context 적합도 보통"}({node:m,scores:I,anchors:f,state:p}),relationships:function(e,t,n){let a=new Set(n),i=[];for(let r of t.relationshipEdges){if(r.fromId!==e&&r.toId!==e||!(0,o.isMeaningfulWorkspaceMapEdge)(r,t.nodes,n))continue;let l=r.fromId===e?r.toId:r.fromId;if((a.has(l)||"route"===r.kind||"nearby"===r.kind)&&(i.push({id:r.id,fromEntityId:r.fromId,toEntityId:r.toId,kind:r.kind,labelKo:r.labelKo,meters:r.meters}),i.length>=8))break}return i}(m.id,p,g),actions:["select"]}}({entityId:t,state:e,weights:n,candidateEntityIds:a});p&&i.push(p)}return[...i].sort((e,t)=>t.scores.total-e.scores.total)}e.s(["buildDecisionProjectionsForCompare",0,p,"resolveCompareCriteriaWeights",0,s],952347);var m=e.i(21251);let g=[{target:"hotel",re:/호텔|숙소|모텔|게스트\s*하우스|료칸|ryokan|hotel|lodging|stay/iu},{target:"restaurant",re:/맛집|식당|카페|레스토랑|음식|restaurant|cafe|eatery|food/iu},{target:"hospital",re:/병원|클리닉|pharmacy|약국|hospital|clinic/iu},{target:"realestate",re:/부동산|매물|아파트|오피스텔|real\s*estate|property/iu},{target:"company",re:/회사|기업|오피스|company|office|corp/iu}];function h(e){return"lodging"===e?"hotel":"eatery"===e?"restaurant":"amenity"===e?"hospital":"place"}function y(e){switch(e){case"hotel":case"lodging":return"숙소";case"restaurant":case"eatery":return"맛집";case"hospital":case"amenity":return"편의";case"realestate":return"매물";case"company":return"회사";default:return"후보"}}function f(e){let i=e.contextEventId.trim(),o=(e={})=>({ok:!1,intent:null,weights:null,candidateEntityIds:[],decisions:[],projection:null,replyKo:null,...e});if(!i)return o();let r=(0,t.readContextWorkspace)(i);if(!r||"closed"===r.status||"committed"===r.status)return o({replyKo:"열린 Workspace가 없어요"});let l=e.intent??function(e){let t=e.utterance.trim(),n=e.contextId.trim();if(!t||!n||!/비교|compare|vs\.?|대비/iu.test(t))return null;let a=null;for(let e of g)if(e.re.test(t)){a=e.target;break}return!a&&e.sessionDomain&&(a=h(e.sessionDomain)),a||(a="place"),{intent:"compare",target:a,contextId:n,criteriaFromContext:!0}}({utterance:e.utterance,contextId:i,sessionDomain:r.domain});if(!l)return o();let c=(l.criteriaFromContext,s(r)),u=function(e){let{state:t,target:n}=e;if(e.explicitNodeIds&&e.explicitNodeIds.length>=2)return[...e.explicitNodeIds].slice(0,5);let a=function(e,t){let n=function(e){switch(e){case"hotel":case"lodging":return"lodging";case"restaurant":case"eatery":return"eatery";case"hospital":case"amenity":return"amenity";case"realestate":case"company":case"poi":case"place":return"poi";default:return null}}(t),a=e.nodes.filter(e=>e.visible);if(!n)return a;let i=a.filter(e=>e.kind===n);return i.length>0?i:a}(t,n),i=new Set(a.map(e=>e.id)),o=t.selectedIds.filter(e=>i.has(e));if(o.length>=2)return o.slice(0,5);let r=a.filter(e=>e.bookmarked).map(e=>e.id);if(r.length>=2)return r.slice(0,5);if(t.compareIds.length>=2){let e=t.compareIds.filter(e=>t.nodes.some(t=>t.id===e));if(e.length>=2)return e.slice(0,5)}return a.slice(0,5).map(e=>e.id)}({state:r,target:l.target,explicitNodeIds:e.explicitNodeIds});if(u.length<2)return o({intent:l,weights:c,candidateEntityIds:u,replyKo:`${y(l.target)} 후보가 2곳 이상 필요해요`});let d=(0,n.applyWorkspaceTransition)({contextEventId:i,op:"compare",nodeIds:[...u]});if(!d)return o({intent:l,weights:c,candidateEntityIds:u,replyKo:"비교를 적용하지 못했어요"});
10(0,t.writeContextWorkspaceExpanded)(i,!0),(0,a.dispatchContextWorkspaceExpand)({contextEventId:i,source:"nl_open"});let f=(0,m.enterCompareDecisionProjection)({contextEventId:i,workspace:d,criteriaWeights:c}),b=p(d,c);return{ok:!!f&&b.length>=2,intent:l,weights:c,candidateEntityIds:u,decisions:b,projection:f,replyKo:`${y(l.target)} ${b.length}곳 Context 판단`}}e.s(["runCompareDecisionPipeline",0,f],90641),e.s(["tryEnterCompareDecisionAfterRefine",0,function(e){var n;let a=(0,t.readContextWorkspace)(e.contextEventId);if(!a||"closed"===a.status||"committed"===a.status)return{entered:!1,result:null,replyKo:null};let i=e.keepTopN??a.constraintMemory?.keepTopN??null;if(n=e.utterance,!(null!=i&&!(i<2)&&!(i>5)&&/이\s*중|그중|그\s*중|가성비|상위|비교|개만|곳만|남겨|랭킹|top/iu.test(n)))return{entered:!1,result:null,replyKo:null};let o=a.nodes.filter(e=>e.visible&&"reality_anchor"!==e.source&&!e.tags.includes("reality_anchor")&&("lodging"===e.kind||"eatery"===e.kind||"poi"===e.kind||"amenity"===e.kind));if(o.length<2)return{entered:!1,result:null,replyKo:null};let r=Math.min(i??3,5,o.length),l=o.slice(0,r).map(e=>e.id);if(l.length<2)return{entered:!1,result:null,replyKo:null};let s=h(a.domain),c=f({utterance:e.utterance,contextEventId:e.contextEventId,explicitNodeIds:l,intent:{intent:"compare",target:s,contextId:e.contextEventId,criteriaFromContext:!0}});return{entered:c.ok,result:c,replyKo:c.ok?c.replyKo??`가성비 TOP ${l.length} \xb7 비교`:null}}],511783)},186634,e=>{"use strict";e.s(["projectAgentTurnSurfaces",0,function(e){let t=(e.factsKo??[]).map(e=>e.trim()).filter(Boolean).slice(0,3),n=(e.entityTitlesKo??[]).map(e=>e.trim()).filter(Boolean).slice(0,3),a=[];for(let n of(e.reasonKo?.trim()&&a.push(e.reasonKo.trim()),t))a.includes(n)||a.push(n);for(let t of(null!=e.candidateCount&&e.candidateCount>0&&a.length<3&&a.push(`후보 ${e.candidateCount}곳`),n)){if(a.length>=3)break;a.push(t)}let i=["replace"===e.mutationMode?"후보를 다시 찾아 교체했어요":"refine"===e.mutationMode?"지금 셋 안에서 다듬었어요":"작업을 반영했어요",e.reasonKo?.trim(),n[0]?`예: ${n[0]}`:null].filter(Boolean).join(" · ");return{calloutLinesKo:a.slice(0,3),llmReplyKo:i}}])},229563,e=>{"use strict";var t=e.i(181164),n=e.i(902308);let a=/더\s*싸|저렴한\s*순|가성비|싼\s*순|평점\s*높|별점\s*높|상위\s*\d|이\s*중|그중|그\s*중|필터|정렬|가까운\s*순|남겨|남기|\d+\s*개\s*만|\d+\s*곳\s*만|(?:번|번째)\s*빼|빼\s*(?:줘|봐|달)/iu,i=/(?:쪽으로|중심으로|근처로|주변으로|역\s*앞|동네로)|(?:[가-힣A-Za-z0-9·]+역)\s*(?:근처|주변|앞)|(?:난바|우메다|신사이바시|도톤보리|모리노미야|모리노미아|신주쿠|시부야|긴자|명동|홍대|강남|해운대|서면)\s*(?:쪽|근처|중심|로|으로)?/iu,o=/(?:캡슐|호스텔|게스트\s*하우스|료칸|리조트|비즈니스\s*호텔|도미토리).{0,12}(?:찾|보여|바꿔|해\s*줘|해줘|로\s*해)|(?:찾|보여|바꿔).{0,12}(?:캡슐|호스텔|게스트\s*하우스|료칸)/iu,r=/다시\s*(?:찾|보여|검색|골라)|다른\s*(?:거|곳|호텔|숙소)|바꿔\s*(?:줘|봐|달)|교체|re-?\s*search|refresh/iu,l=/(?:유니버설|유니버셜|usj|universal|디즈니|disney).{0,24}(?:찾|보여|검색)|(?:찾|보여|검색).{0,24}(?:유니버설|유니버셜|usj|universal|디즈니)|유니버설\s*스튜디오|유니버셜\s*스튜디오/iu;e.s(["resolveWorkspaceMutationMode",0,function(e){let s=e.utterance.trim();return s?o.test(s)?{mode:"replace",reason:"clear_stay_type",replyHintKo:"숙소 타입을 바꿔 다시 찾았어요"}:l.test(s)?{mode:"replace",reason:"clear_research",replyHintKo:"명소를 찾아 작업장에 넣었어요"}:i.test(s)?{mode:"replace",reason:"clear_location",replyHintKo:"위치를 반영해 후보를 다시 찾았어요"}:a.test(s)?{mode:"refine",reason:/상위|이\s*중|그중|그\s*중|필터|남겨|남기|\d+\s*개\s*만|(?:번|번째)\s*빼/iu.test(s)?"soft_filter":"soft_rank",replyHintKo:e.hasVisibleCandidates?"지금 후보 안에서 다시 골랐어요":null}:null!=(0,n.parseMaxNightlyPriceKrw)(s)&&/찾|다시|보여|검색|미만|이하|대로|아래/iu.test(s)?{mode:"replace",reason:"clear_hard_price",replyHintKo:"가격 기준으로 후보를 다시 찾았어요"}:(0,t.isSameProjectReSearchUtterance)(s)||r.test(s)?{mode:"replace",reason:"clear_research",replyHintKo:"조건을 반영해 후보를 다시 찾았어요"}:{mode:"none",reason:"none",replyHintKo:null}:{mode:"none",reason:"none",replyHintKo:null}}])},784565,868268,699117,302860,107762,308924,991669,300123,993281,914394,264226,842064,111,381251,265340,689295,e=>{"use strict";var t=e.i(440840),n=e.i(542483);e.i(387004),e.i(399698);var a=e.i(301008);function i(e){var i;
10let o=e.utterance.trim(),r=e.intent??(0,t.classifyIntentFamily)(o),l=e.maxNodes??12,s=e.graph,c=e.lodgingDiff??null,u=s?.contextEventId?(0,a.readContextWorkspace)(s.contextEventId):null,d=e.compilerIr??(u?.compilerIr?(0,n.compileContextFromUtterance)({utterance:o,graph:s,workspace:u,priorIr:u.compilerIr,contextLabelKo:u.compilerIr.contextLabelKo}):(0,n.compileContextFromUtterance)({utterance:o,graph:s,workspace:u})),p=new Set((e.discoveryPlaceIds??[]).map(e=>e.trim()).filter(Boolean)),m={version:1,contextEventId:s?.contextEventId??"",utterance:o,intent:r,selectionIds:[],projectFolders:[],activeFilters:{},anchorLat:null,anchorLng:null,nodes:[],edgeCount:0,relevantEdgeIds:[],lodgingDiff:c,compilerIr:d,stats:{graphNodeTotal:0,packedNodeCount:0,truncated:!1},builtAtIso:new Date().toISOString()};if(!s)return m;let g=new Set(s.selectionIds),h=[...s.nodes].map(e=>({node:e,score:function(e,t){let n=0;t.selected.has(e.id)&&(n+=100),e.pinned&&(n+=40);let a="string"==typeof e.attrs?.catalogId?e.attrs.catalogId:"",i="string"==typeof e.attrs?.searchId?e.attrs.searchId:"";(t.discoveryPlaceIds?.has(e.id)||a&&t.discoveryPlaceIds?.has(a)||i&&t.discoveryPlaceIds?.has(i))&&(n+=70),e.alwaysVisible&&(n+=15),e.visible||"compare"===e.kind||"note"===e.kind||(n-=20);let o=t.utterance;switch(e.labelKo&&o.includes(e.labelKo)&&(n+=50),/apa|아파/iu.test(o)&&/apa|아파/iu.test(e.labelKo)&&(n+=30),t.intent){case"Reserve":case"Purchase":e.reservable&&(n+=25),("lodging"===e.kind||"eatery"===e.kind)&&(n+=10);break;case"Search":case"Filter":e.visible&&("eatery"===e.kind||"lodging"===e.kind)&&(n+=20),e.localFavorite&&(n+=12);break;case"Compare":"compare"===e.kind&&(n+=40);break;case"Pin":("lodging"===e.kind||/호텔|숙소/iu.test(e.labelKo))&&(n+=15);break;case"Delete":case"Move":case"Share":(t.selected.has(e.id)||e.pinned)&&(n+=20)}let r=t.preference;return r&&("eatery"===e.kind&&(n+=Math.round(18*r.food)),"lodging"===e.kind&&(n+=Math.round(8*r.luxury),r.budgetSensitive>=.65&&(n+=6)),r.romantic>=.7&&/분위기|뷰|로맨|한강|야경/i.test(e.labelKo)&&(n+=Math.round(10*r.romantic)),r.crowdAvoidance>=.7&&/한적|조용|로컬|local/i.test(e.labelKo)&&(n+=Math.round(8*r.crowdAvoidance))),n}(e,{selected:g,intent:r,utterance:o,discoveryPlaceIds:p,preference:d.preference})})).filter(e=>e.score>0||g.has(e.node.id)||e.node.pinned||p.has(e.node.id)).sort((e,t)=>t.score-e.score),y=new Map;for(let e of s.selectionIds){let t=s.nodes.find(t=>t.id===e);t&&y.set(t.id,t)}for(let e of s.nodes)e.pinned&&y.set(e.id,e);for(let e of s.nodes){let t="string"==typeof e.attrs?.catalogId?e.attrs.catalogId:"",n="string"==typeof e.attrs?.searchId?e.attrs.searchId:"";(p.has(e.id)||t&&p.has(t)||n&&p.has(n))&&y.set(e.id,e)}for(let e of h){if(y.size>=l)break;y.set(e.node.id,e.node)}let f=[...y.values()].slice(0,l),b=new Set(f.map(e=>e.id)),k=(i=s.edges,i.filter(e=>b.has(e.fromId)||b.has(e.toId)).map(e=>e.id).slice(0,24));return{version:1,contextEventId:s.contextEventId,utterance:o,intent:r,selectionIds:s.selectionIds,projectFolders:s.projectFolders,activeFilters:s.activeFilters,anchorLat:s.anchorLat,anchorLng:s.anchorLng,nodes:f.map(e=>{let t;return t=g.has(e.id),{id:e.id,labelKo:e.labelKo,kind:e.kind,pinned:e.pinned,selected:t,visible:e.visible,reservable:e.reservable,localFavorite:e.localFavorite,lat:e.lat,lng:e.lng,whyIncludedKo:function(e,t,n,a){if(t)return"선택됨";if(e.pinned)return"고정";if(a?.has(e.id))return"최근 스카우트";let i="string"==typeof e.attrs?.catalogId?e.attrs.catalogId:"",o="string"==typeof e.attrs?.searchId?e.attrs.searchId:"";if(a&&(a.has(i)||a.has(o)))return"지도 포커스";if("Reserve"===n&&e.reservable)return"예약 가능";if("Filter"===n||"Search"===n){if(e.localFavorite)return"현지 시그널";if(e.visible)return"검색 결과"}return"Compare"===n&&"compare"===e.kind?"비교":"lodging"===e.kind||"eatery"===e.kind?"장소":"관련"}(e,t,r,p)}}),edgeCount:s.edges.length,relevantEdgeIds:k,lodgingDiff:c,compilerIr:d,stats:{graphNodeTotal:s.nodes.length,packedNodeCount:f.length,truncated:s.nodes.length>f.length},builtAtIso:new Date().toISOString()}}e.s(["buildContextPack",0,i],868268);var o=e.i(58584);function r(e){let t=e.trim();return!!t&&/다른\s*곳|다른\s*데|다른\s*식당|더\s*보여|차순위|또\s*보여|alternative|more\s*options|next\s*tier/iu.test(t)}e.i(796940),e.s([],784565),e.s(["isAlternatePlaceSearch",0,r],699117);var l=e.i(902308),s=e.i(974235),c=e.i(441956),u=e.i(428898),d=e.i(400120),p=e.i(731923),m=e.i(578090);e.i(64057);var g=e.i(74104);let h=/주변|근처|nearby|찾|검색|추천|배치|꽂|pin|探|近く/iu,y=/비슷한|같은\s*가격|비슷한\s*가격|similar\s*price/iu,f=/꽂|배치|찾|추천|주변|nearby|pin/iu,b=/^(?:음료|음료수|드링크|drink|beverage|커피|coffee|카페|cafe|차|주스|juice|스무디|smoothie|디저트|dessert|베이커리|bakery|간식|snack)$/iu;function k(e){let t=e?.trim()??"";if(!t)return{lodgingSimilar:!0,eateryNearby:!0,lodgingMode:"nearby"};let n=(0,g.resolveEntities)(t);if(n.entities.length>0){let e=(0,g.entitiesImplyLodging)(n.entities)||(0,u.hasLodgingDomainCue)(t)||y.test(t),a=(0,g.entitiesImplyEatery)(n.entities)||(0,c.hasEateryDomainCue)(t),i=y.test(t)?"similar_price":e&&h.test(t)||e?"nearby":null;return e&&!a?{lodgingSimilar:!0,eateryNearby:!1,lodgingMode:i}:a&&!e?{lodgingSimilar:!1,eateryNearby:!0,lodgingMode:null}:!e&&!a&&n.entities.some(e=>"Station"===e.kind||"Airport"===e.kind)?{lodgingSimilar:!1,eateryNearby:!1,lodgingMode:null}:e||a?{lodgingSimilar:e,eateryNearby:a,lodgingMode:i}:f.test(t)?{lodgingSimilar:!0,eateryNearby:!0,lodgingMode:"nearby"}:b.test(t)?{lodgingSimilar:!1,eateryNearby:!0,lodgingMode:null}:{lodgingSimilar:!0,eateryNearby:!0,lodgingMode:"nearby"}}let a=(0,u.hasLodgingDomainCue)(t)||y.test(t),i=(0,d.hasFoodBrandCue)(t)||(0,p.utteranceHasConcreteDishSlot)(t)||(0,m.parseCuisineCandidates)(t).length>0||(0,c.hasEateryDomainCue)(t),o=y.test(t)?"similar_price":a&&h.test(t)||a?"nearby":null;return i&&!a?{lodgingSimilar:!1,eateryNearby:!0,lodgingMode:null}:a||i?{lodgingSimilar:a,eateryNearby:i,lodgingMode:o}:f.test(t)?{lodgingSimilar:!0,eateryNearby:!0,lodgingMode:"nearby"}:b.test(t)?{lodgingSimilar:!1,eateryNearby:!0,lodgingMode:null}:{lodgingSimilar:!0,eateryNearby:!0,lodgingMode:"nearby"}}e.s(["classifyContextConditionAnchorRequest",0,k,"filterLodgingRowsForContextCondition",0,function(e){let t=e.max??4,n=e.anchorPlaceId.trim(),a=e.rows.filter(e=>{let t=e.placeId.trim();return!!t&&(!n||t!==n)&&(!!n.startsWith("context-center:")||t!==n)});return"similar_price"!==e.lodgingMode?a.slice(0,t):function(e){let t=e.max??3,n=e.anchorPlaceId.trim(),a=e.rows.filter(e=>e.placeId.trim()!==n),i=e.anchorPriceKrw;if(null==i||!Number.isFinite(i)||i<=0)return a.slice(0,t);let o=.65*i,r=1.35*i,l=a.filter(e=>null!=e.priceKrw&&Number.isFinite(e.priceKrw)&&e.priceKrw>=o&&e.priceKrw<=r);return(l.length>0?l:a).slice(0,t)}({rows:a,anchorPlaceId:n,anchorPriceKrw:e.anchorPriceKrw,max:t})}],302860);var K=e.i(131843),I=e.i(676751),v=e.i(742361),x=e.i(305125);let _=/^(?:가격|얼마|예산|체크인|체크아웃|날짜|인원|몇\s*명|위치|어디\s*쪽|리뷰|후기|방|객
10실|어때|더\s*싸|더\s*좋)/iu,w=/(?:도\s*찾아|도\s*보여|함께|같이|플러스|plus|\balso\b|그리고\s*(?:숙소|호텔|게스트|료칸|캡슐|펜션|리조트|한옥|글램핑))/iu,C=/(?:이전\s*(?:검색|거|거\s*)?무시|다\s*무시|처음부터|리셋|reset|무시하고|안\s*보고)/iu,S=/(?:도쿄|오사카|교토|후쿠오카|제주|부산|서울|나고야|삿포로|osaka|tokyo|kyoto|fukuoka|jeju)/iu;function T(e){let t=e.trim(),n=(0,x.parseLodgingStayTypeFromText)(t);if(n)return{domain:"lodging",kind:n,destinationLabel:L(t)};if(/숙소|숙박|lodging|accommodation/iu.test(t))return{domain:"lodging",kind:null,destinationLabel:L(t)};if(/맛집|식당|카페|먹을|레스토랑|eatery|restaurant|food/iu.test(t)||(0,m.parseCuisineCandidates)(t).length>0){let e=(0,m.parseCuisineCandidates)(t)[0]??null;return{domain:"eatery",kind:e?.id??null,destinationLabel:L(t)}}return/놀거리|관광|명소|activity|attraction/iu.test(t)?{domain:"activity",kind:null,destinationLabel:L(t)}:/날씨|기온|weather/iu.test(t)?{domain:"weather",kind:null,destinationLabel:L(t)}:/항공|비행|flight/iu.test(t)?{domain:"flight",kind:null,destinationLabel:L(t)}:/여행|출장|trip/iu.test(t)?{domain:"trip",kind:null,destinationLabel:L(t)}:{domain:"unknown",kind:null,destinationLabel:L(t)}}function L(e){let t=e.match(S);return t?.[0]?.trim()??null}function E(e){let t=T(e.nextText),n=e.previousSlice??(e.previousText?.trim()?T(e.previousText):null);return C.test(e.nextText)?{relationship:"discard",reason:"explicit_discard",previous:n,next:t,clearPriorDomainKinds:!0,mergeKinds:!1}:n&&"unknown"!==n.domain?_.test(e.nextText.trim())||/^(?:가격은|후기는|어때|더\s*(?:싸|좋))/iu.test(e.nextText.trim())&&n.domain===t.domain?{relationship:"continue",reason:"slot_follow_up",previous:n,next:{domain:n.domain,kind:n.kind,destinationLabel:t.destinationLabel??n.destinationLabel},clearPriorDomainKinds:!1,mergeKinds:!1}:"lodging"===n.domain&&"lodging"===t.domain&&w.test(e.nextText)&&t.kind&&n.kind&&t.kind!==n.kind?{relationship:"merge",reason:"additive_same_domain",previous:n,next:t,clearPriorDomainKinds:!1,mergeKinds:!0}:"eatery"===n.domain&&"eatery"===t.domain&&n.kind&&t.kind&&n.kind!==t.kind?{relationship:"replace",reason:"eatery_cuisine_conflict",previous:n,next:t,clearPriorDomainKinds:!0,mergeKinds:!1}:"lodging"===n.domain&&"lodging"===t.domain&&(0,x.lodgingStayTypesConflict)(n.kind,t.kind)?{relationship:"replace",reason:"lodging_stay_type_conflict",previous:n,next:t,clearPriorDomainKinds:!0,mergeKinds:!1}:n.domain===t.domain&&t.destinationLabel&&n.destinationLabel&&t.destinationLabel.toLowerCase()!==n.destinationLabel.toLowerCase()?{relationship:"branch",reason:"destination_branch",previous:n,next:t,clearPriorDomainKinds:!1,mergeKinds:!1}:n.domain!==t.domain&&"unknown"!==t.domain?{relationship:"replace",reason:"domain_switch",previous:n,next:t,clearPriorDomainKinds:!0,mergeKinds:!1}:n.domain===t.domain&&n.kind===t.kind?{relationship:"continue",reason:"same_slice",previous:n,next:t,clearPriorDomainKinds:!1,mergeKinds:!1}:{relationship:"replace",reason:"default_new_target",previous:n,next:t,clearPriorDomainKinds:!0,mergeKinds:!1}:{relationship:"replace",reason:"no_prior_intent",previous:n,next:t,clearPriorDomainKinds:!0,mergeKinds:!1}}function P(e){return"lodging"!==e.domain?null:e.kind?(0,x.lodgingStayTypeToBand)(e.kind):"any"}function A(e){return"lodging"===e.domain&&e.kind?(0,x.normalizeLodgingStayType)(e.kind):null}e.s(["detectIntentRelationship",0,E,"lodgingKindFromIntentSlice",0,P,"lodgingStayTypeFromIntentSlice",0,A],107762);var $=e.i(219466),j=e.i(426394);e.i(294021);var R=e.i(727944),D=e.i(109730),M=e.i(799301);let W=/주변|근처|찾|검색|추천|배치|꽂|nearby|search|보여|알려/iu;function O(e){let t=e.trim();return!t||!(null!=(0,l.parseMaxNightlyPriceKrw)(t)||(0,d.hasFoodBrandCue)(t)||(0,p.utteranceHasConcreteDishSlot)(t)||(0,m.parseCuisineCandidates)(t).length>0||(0,u.hasLodgingDomainCue)(t)||(0,c.hasEateryDomainCue)(t))&&/찾|추천|뭐|어디|있어|보여|알려|해줘|줘|search|recommend|what|where/iu.test(t)}e.s(["isAmbiguousDiscoveryIntent",0,O,"isFollowUpDiscoveryTurn",0,function(e,t){let n=e.trim();
10if(!n||0===t.length)return!1;let a=(0,M.resolveLocalDiscoveryDomain)(n);if("activity"===a&&!t.some(e=>"activity"===e.kind)||"amenity"===a&&!t.some(e=>"amenity"===e.kind))return!1;if(function(e,t){let n=e.trim();if(!n||0===t.length)return!1;let a=k(n),i=t.some(e=>"lodging"===e.kind),o=t.some(e=>"eatery"===e.kind);return!!a.lodgingSimilar&&!a.eateryNearby&&!!o||!!a.eateryNearby&&!a.lodgingSimilar&&!!i}(n,t))return!0;let i=k(n);return!!W.test(n.trim())&&(!!i.lodgingSimilar||!!i.eateryNearby)||O(n)}],308924);let N=/주변|근처|찾|검색|추천|배치|다시\s*찾|재검색|nearby|search/iu,F=/작업\s*:|목표\s*:|식사·맛집\s*맞추|단계별\s*실행/iu;function B(e){return`rimvio-scout-turn-constraints:${e.trim()}`}function U(e){let t=e.trim();if(!t)return!1;let n=(0,p.parseUtteranceIntentSlots)(t);return!(n.dishFocus?.trim()||n.dessertOnly||n.replaceDish||(0,$.isInstantEaterySearch)(t)||F.test(t)||N.test(t)&&(0,c.hasEateryDomainCue)(t))}function q(e){let t=(0,p.parseUtteranceIntentSlots)(e.message);if(t.dishFocus?.trim())return t.dishFocus.trim();let n=U(e.message);return n&&e.menuFocusQuery?.trim()?e.menuFocusQuery.trim():n?e.prior?.eateryFocus?.trim()?e.prior.eateryFocus.trim():e.previousSpec?.eateryFocus?.trim()||null:e.menuFocusQuery?.trim()||null}function H(e){switch(e){case"walk":default:return 800;case"transit":return 1200;case"car":return 2e3}}e.s(["clearScoutTurnConstraints",0,function(e){try{sessionStorage.removeItem(B(e))}catch{}},"mergeScoutTurnConstraints",0,function(e){let t=e.slots??(0,p.parseUtteranceIntentSlots)(e.message),n=e.prior??function(e=new Date().toISOString()){return{eateryFocus:null,menuFocusId:null,transport:null,budget:null,vibe:null,areaHint:null,excludeKeywords:[],updatedAtIso:e}}(),a=e.spec??null,i=U(e.message),o=i?n.eateryFocus:null,r=i?n.menuFocusId:null;t.dessertOnly?(o="디저트",r="dessert"):t.dishFocus?.trim()?(o=t.dishFocus.trim(),r=t.cuisineId):a?.eateryFocus?.trim()&&(o=a.eateryFocus.trim(),!r&&n.menuFocusId&&n.eateryFocus===o&&(r=n.menuFocusId));let l=new Set([...n.excludeKeywords,...t.excludeKeywords]);return{eateryFocus:o,menuFocusId:r,transport:a?.transport??n.transport,budget:a?.budget??n.budget,vibe:a?.vibe??n.vibe,areaHint:t.areaHint?.trim()||n.areaHint,excludeKeywords:[...l],updatedAtIso:new Date().toISOString()}},"readScoutTurnConstraints",0,function(e){try{let t=sessionStorage.getItem(B(e));if(!t)return null;return JSON.parse(t)}catch{return null}},"resolveAccumulatedEateryFocus",0,q,"shouldCarryPriorEateryFocus",0,U,"writeScoutTurnConstraints",0,function(e,t){try{sessionStorage.setItem(B(e),JSON.stringify(t))}catch{}}],991669);let z=D.parseTransportField,G=D.parseBudgetField,J=D.parseVibeField;function V(e){let t=(0,u.parseLodgingKindFromText)(e);return"any"===t?null:t}let Q=["resourceFocus","menuFocus","lodgingKind","vibe","transport","budget"];function Y(e){let t=e.activityCluster?.filter(e=>e.trim().length>0),n=1===e.resourceTypes.length&&"amenity"===e.resourceTypes[0];return{version:1,resourceTypes:e.resourceTypes,transport:e.transport,budget:e.budget,vibe:e.vibe,lodgingKind:e.lodgingKind,...e.lodgingStayType?{lodgingStayType:e.lodgingStayType}:{},radiusM:n?K.INSTANT_POI_RADIUS_M:H(e.transport),...null!=e.maxNightlyPriceKrw&&e.maxNightlyPriceKrw>0?{maxNightlyPriceKrw:Math.round(e.maxNightlyPriceKrw)}:{},...e.eateryFocus?.trim()?{eateryFocus:e.eateryFocus.trim()}:{},...e.activityFocus?.trim()?{activityFocus:e.activityFocus.trim()}:{},...e.activitySubtype?{activitySubtype:e.activitySubtype}:{},...t&&t.length>0?{activityCluster:t}:{},...e.companion?{companion:e.companion}:{},...e.fieldHints?{fieldHints:e.fieldHints}:{}}}function Z(e,t,n){let a=(0,D.parseContextFields)(t),i=(0,R.applyFieldsToDiscoverySpec)({pack:a,previous:n??null});return{...e,...a.location?.nearHotel&&i.transport?{transport:i.transport,radiusM:H(i.transport)}:{},vibe:i.vibe??e.vibe,budget:i.budget??e.budget,...null!=i.maxNightlyPriceKrw&&i.maxNightlyPriceKrw>0&&null==e.maxNightlyPriceKrw?{maxNightlyPriceKrw:Math.round(i.maxNightlyPriceKrw)}:{},...i.eateryFocus?.trim()&&!e.eateryFocus?.trim()?{eateryFocus:i.eateryFocus.trim()}:{},...i.companion?{companion:i.companion}:{},...i.fieldHints?{fieldHints:{...e.fieldHints??{},...i.fieldHints}}:{}}
10}function X(e,t){let n=t.trim();if(!n)return e;let a=(0,p.parseUtteranceIntentSlots)(n),i=(0,D.parseContextFields)(n),o=(0,R.applyFieldsToDiscoverySpec)({pack:i,previous:e}),r=V(n),s=o.maxNightlyPriceKrw??(0,l.parseMaxNightlyPriceKrw)(n)??e.maxNightlyPriceKrw??null,c=o.transport??(i.distance?.closer?"walk":null)??e.transport,u=r??e.lodgingKind,d=o.eateryFocus?.trim()||a.dishFocus?.trim()||(a.dessertOnly?"디저트":null)||e.eateryFocus,m=o.budget??(null!=s||"hostel"===u?"low":null)??e.budget;return Y({resourceTypes:e.resourceTypes,transport:c,budget:m,vibe:o.vibe??e.vibe,lodgingKind:u,maxNightlyPriceKrw:s,eateryFocus:d,activityFocus:e.activityFocus,activitySubtype:e.activitySubtype,activityCluster:e.activityCluster,companion:o.companion??e.companion??null,fieldHints:o.fieldHints?{...e.fieldHints??{},...o.fieldHints}:e.fieldHints??null})}function ee(e){let t=e.trim();if(!t||(0,j.isActionFirstUtterance)(t))return!1;let n=k(t),a=/주변|근처|찾|검색|추천|배치|nearby|search/iu.test(t),i=(0,l.parseMaxNightlyPriceKrw)(t);if(a&&(n.lodgingSimilar||n.eateryNearby)&&null==i&&!G(t)||O(t))return!1;let o=(0,p.parseUtteranceIntentSlots)(t),s=(0,D.parseContextFields)(t);return!!(r(t)||z(t)||G(t)||null!=i||J(t)||V(t)&&!/주변|근처|찾|검색|추천|배치|nearby|search/iu.test(t)||null!=o.dishFocus||o.dessertOnly||null!=s.companion||null!=s.crowd||null!=s.weather||null!=s.location||null!=s.distance||/더\s*싸|더\s*조용|더\s*가까|더\s*근처|가까운|디저트\s*만|다시\s*찾/iu.test(t))}function et(e){switch(e){case"lodging_only":return{keep:["eatery"],replace:["lodging"]};case"eatery_only":return{keep:["lodging"],replace:["eatery"]};default:return{keep:[],replace:["lodging","eatery"]}}}function en(e){let t=function(e){var t;let n=function(e){let t=e.trim();if(!t)return null;let n=/숙소.*(그대로|유지|안\s*바꿔|그냥|빼고)|숙소는.*두/u.test(t),a=/맛집.*(그대로|유지|안\s*바꿔)|식당.*(그대로|유지)/u.test(t),i=/맛집.*(바꿔|교체|다시)|식당.*(바꿔|교체|다시)|저녁.*(바꿔|다시)/u.test(t),o=/숙소.*(바꿔|교체|다시)/u.test(t),r=/맛집만|식당만|저녁만|음식만|식사만/u.test(t)||n&&i,l=/숙소만|호텔만|잠만/u.test(t)||a&&o;return r&&!l?"eatery_only":l&&!r?"lodging_only":n&&i?"eatery_only":a&&o?"lodging_only":null}(e.message);if(n)return n;let a={lodging:(t=e.previousRecommendations??[]).some(e=>"lodging"===e.kind),eatery:t.some(e=>"eatery"===e.kind)},i=k(e.message);return i.lodgingSimilar&&!i.eateryNearby&&a.eatery&&!a.lodging?"lodging_only":i.eateryNearby&&!i.lodgingSimilar&&a.lodging&&!a.eatery?"eatery_only":a.lodging&&a.eatery?"all":a.lodging?"lodging_only":a.eatery?"eatery_only":"all"}(e),{keep:n,replace:a}=et(t),i=X(e.currentSpec,e.message);return{scope:t,keepKinds:n,replaceKinds:a,reasonKo:function(e){switch(e){case"lodging_only":return s.copy.globe.contextAgentPatchReasonLodging;case"eatery_only":return s.copy.globe.contextAgentPatchReasonEatery;default:return s.copy.globe.contextAgentPatchReasonAll}}(t),nextSpec:i}}function ea(e){return{plan:e.plan,kept:function(e){let{keep:t}=et(e.scope);if(0===t.length)return[];let n=e.pinnedPlaceIds;return e.previousRecommendations.filter(e=>{let a="lodging"===e.kind?"lodging":"eatery";return!!t.includes(a)&&("lodging"===e.kind&&n?.lodging?e.placeId===n.lodging:!("eatery"===e.kind&&n?.eatery)||e.placeId===n.eatery)})}({scope:e.plan.scope,previousRecommendations:e.previousRecommendations,pinnedPlaceIds:e.pinnedPlaceIds}),replacingKinds:[...e.plan.replaceKinds]}}function ei(e){let t=e.trim();return t?/가까|근처|도보/u.test(t)?"distance":/싸|가성|저렴|가격/u.test(t)&&null==(0,l.parseMaxNightlyPriceKrw)(t)?"price":/평점|리뷰/u.test(t)?"rating":/조용|분위기|로컬|인기|핫/u.test(t)?"vibe":null:null}function eo(e){let t=en({message:e.message,currentSpec:e.currentSpec,previousRecommendations:e.previousRecommendations,pinnedPlaceIds:e.pinnedPlaceIds}),n=ea({plan:t,previousRecommendations:e.previousRecommendations,pinnedPlaceIds:e.pinnedPlaceIds});return{kind:"spatial_patch",patchPlan:t,nextSpec:t.nextSpec,keptRecommendations:n.kept}}e.s(["applyQuestionChoice",0,function(e){let t=e.choice.cluster?.filter(e=>e.trim().length>0);return{...e.answers,[e.choice.slot]:e.choice.value,...t&&t.length>0?{activityCluster:t.join("·")}:{}}},"isLocalDiscoveryRefinement",0,ee,"refineLocalDiscoverySpec",0,X,"resolveLocalDiscoveryAction",0,function(e){var t;let n,a=e.message.trim(),i={...e.answers??{}},o=(0,g.resolveEntities)(a),r=function(e){let t=(0,K.resolveInstantPoiFocus)(e.text);if(t&&!(0,v.hasConcurrentMultiDomainSearchCues)(e.text))return Y({resourceTypes:["amenity"],transport:e.answers.transport??z(e.text)??e.previousSpec?.transport??"w
10alk",budget:e.answers.budget??G(e.text)??e.previousSpec?.budget??"medium",vibe:J(e.text)??e.previousSpec?.vibe??"popular",lodgingKind:"any",activityFocus:t,activitySubtype:null,activityCluster:null});if((0,v.hasConcurrentMultiDomainSearchCues)(e.text)){let t=(0,v.concurrentDiscoveryResourceTypes)(e.text),n=(0,x.parseLodgingStayTypeFromText)(e.text)??e.previousSpec?.lodgingStayType??null,a=e.answers.lodgingKind??V(e.text)??e.previousSpec?.lodgingKind??"any",i=(0,l.parseMaxNightlyPriceKrw)(e.text)??e.previousSpec?.maxNightlyPriceKrw??null,o=e.answers.transport??z(e.text)??e.previousSpec?.transport??"walk",r=e.answers.budget??G(e.text)??("hostel"===a||null!=i?"low":null)??e.previousSpec?.budget??"medium",s=t.includes("restaurant")?(0,$.resolveInstantEateryFocus)(e.text):null,c=t.includes("activity")?(0,M.parseActivityFocusDetail)(e.text):null,u=t.includes("amenity")?(0,M.parseAmenityFocus)(e.text):null,d=c?.focus??u??(t.includes("activity")?"놀거리":null);return Y({resourceTypes:t,transport:o,budget:r,vibe:J(e.text)??e.previousSpec?.vibe??"popular",lodgingKind:a,lodgingStayType:n,maxNightlyPriceKrw:i,...s?{eateryFocus:s}:{},...d?{activityFocus:d}:{},...c?.subtype?{activitySubtype:c.subtype}:{}})}if((0,I.isInstantLodgingSearch)(e.text)){let t=(0,x.parseLodgingStayTypeFromText)(e.text)??e.previousSpec?.lodgingStayType??null,n=e.answers.lodgingKind??V(e.text)??e.previousSpec?.lodgingKind??"any",a=(0,l.parseMaxNightlyPriceKrw)(e.text)??e.previousSpec?.maxNightlyPriceKrw??null;return Y({resourceTypes:["hotel"],transport:e.answers.transport??z(e.text)??e.previousSpec?.transport??"walk",budget:e.answers.budget??G(e.text)??("hostel"===n||null!=a?"low":null)??e.previousSpec?.budget??"medium",vibe:J(e.text)??e.previousSpec?.vibe??"popular",lodgingKind:n,lodgingStayType:t,maxNightlyPriceKrw:a})}if((0,$.isInstantEaterySearch)(e.text)){if((0,m.parseCuisineCandidates)(e.text).length>1&&!e.answers.menuFocus)return null;let t=e.answers.transport??z(e.text)??e.previousSpec?.transport??"walk",n=e.answers.budget??G(e.text)??e.previousSpec?.budget??"medium",a=(0,$.resolveInstantEateryFocus)(e.text);return Y({resourceTypes:["restaurant"],transport:t,budget:n,vibe:J(e.text)??e.previousSpec?.vibe??"popular",lodgingKind:"any",...a?{eateryFocus:a}:{}})}let n=e.answers.activityFocus?.trim(),a=n?"activity":(0,M.resolveLocalDiscoveryDomain)(e.text);if(!a)return null;let i=e.answers.activityCluster?.split("·").map(e=>e.trim()).filter(e=>e.length>0),o="activity"===a?(0,M.parseActivityFocusDetail)(n||e.text):null,r=n||("amenity"===a?(0,K.resolveInstantPoiFocus)(e.text)??(0,M.parseAmenityFocus)(e.text):o?.focus??(0,M.parseActivitySpecificFocus)(e.text))||null,s="activity"===a?o?.subtype??(0,M.parseActivitySubtype)(n)??(0,M.parseActivitySubtype)(e.text)??"general":null;return Y({resourceTypes:[a],transport:e.answers.transport??z(e.text)??e.previousSpec?.transport??"walk",budget:e.answers.budget??G(e.text)??e.previousSpec?.budget??"medium",vibe:J(e.text)??e.previousSpec?.vibe??"popular",lodgingKind:"any",activityFocus:r,activitySubtype:s,activityCluster:"activity"===a?i:null})}({text:a,answers:i,previousSpec:e.previousSpec??null});if(r)return{status:"ready",spec:Z(r,a,e.previousSpec??null),answers:i};let c=k(a),u=(0,m.parseCuisineCandidates)(a),d=i.resourceFocus,h="restaurant"===d?{wantsLodging:!1,wantsEatery:!0}:"hotel"===d?{wantsLodging:!0,wantsEatery:!1}:"both"===d?{wantsLodging:!0,wantsEatery:!0}:null,y=(0,l.parseMaxNightlyPriceKrw)(a),f=h?.wantsLodging??e.wantsLodging??c.lodgingSimilar??(null!=y&&!c.eateryNearby&&0===u.length),b=h?.wantsEatery??e.wantsEatery??c.eateryNearby??u.length>0,_=!0===e.followUpTurn,w=e.previousSpec??null,C=(0,D.parseContextFields)(a),S=(0,R.applyFieldsToDiscoverySpec)({pack:C,previous:w}),T=i.transport??z(a)??S.transport??e.inferredTransport??null,L=i.budget??G(a)??S.budget??e.inferredBudget??null,j=i.vibe??J(a)??S.vibe??e.inferredVibe??null,W=i.lodgingKind??V(a)??e.inferredLodgingKind??"any",N=(0,x.parseLodgingStayTypeFromText)(a),F="string"==typeof e.previousTriggerMessage?e.previousTriggerMessage:null,B=E({previousText:F,previousSlice:null!=w?{domain:w.resourceTypes.includes("hotel")?"lodging":w.resourceTypes.includes("restaurant")?"eatery":"unknown",kind:w.lodgingStayType??("hostel"===w.lodgingKind?"guesthouse":"airbnb"===w.lodgingKind?"airbnb":"hotel"===w.lodgingKind?"hotel":null)??(w.resourceTypes.includes("restaurant")?(0,m.parseCuisineCandidates)(w.eateryFocus??F??"")[0]?.id??null:null),destinationLabel:null}:null,nextText:a});if(B.clearPriorDomainKinds){let e=P(B.next);e&&(W=e),N=A(B.next)??(0,x.parseLodgingStayTypeFromText)(a)}else B.mergeKinds&&A(B.next)&&(N=A(B.next));let H=B.clearPriorDomainKinds?(0,l.parseMaxNightlyPriceKrw)(a):(0,l.parseMaxNightlyPriceKrw)(a)??w?.maxNightlyPriceKrw??null;_&&w&&!B.clearPriorDomainKinds?(T=T??w.transport,L=L??w.budget,j=j??w.vibe,V(a)||i.lodgingKind||(W=w.lodgingKind),!(0,x.parseLodgingStayTypeFromText)(a)&&w.lodgingStayType&&(N=w.lodgingStayType)):_&&w&&B.clearPriorDomainKinds&&(T=T??w.transport),null==L&&("hostel"===W||null!=H)&&(L="low");let X=(n=[],((t={wantsLodging:f,wantsEatery:b}).wantsEatery&&n.push("restaurant"),t.wantsLodging&&n.push("hotel"),0===n.length)?["restaurant","hotel"]:n),ee=(0,p.parseUtteranceIntentSlots)(a,o),et=ee.cuisineId?.trim()||(1===u.length?u[0]?.id??null:null),en=i.menuFocus?.trim()||null,ea=U(a),ei=et??(u.length>1?en:null)??(ea?en??e.priorConstraints?.menuFocusId??null:null),eo=(0,m.resolve
10CuisineFocusQuery)(ei),er=q({message:a,prior:ea?e.priorConstraints??null:null,previousSpec:ea&&_?w:null,menuFocusQuery:eo})??ee.dishFocus??(0,m.parseSingleCuisineFocus)(a),el=!!er?.trim(),es={resourceTypes:X,lodgingKind:W,...N?{lodgingStayType:N}:{},...null!=H?{maxNightlyPriceKrw:H}:{},...er?{eateryFocus:er}:{},...null!=T?{transport:T}:{},...null!=L?{budget:L}:{},...null!=j?{vibe:j}:{}},ec=[];O(a)&&!d&&ec.push({slot:"resourceFocus",promptKo:s.copy.globe.localDiscoveryAskResourceFocus,choices:[{id:"resource-restaurant",label:s.copy.globe.localDiscoveryResourceRestaurant,slot:"resourceFocus",value:"restaurant"},{id:"resource-hotel",label:s.copy.globe.localDiscoveryResourceHotel,slot:"resourceFocus",value:"hotel"},{id:"resource-both",label:s.copy.globe.localDiscoveryResourceBoth,slot:"resourceFocus",value:"both"}]}),b&&u.length>1&&!ei&&ec.push({slot:"menuFocus",promptKo:s.copy.globe.localDiscoveryAskMenuFocus,choices:u.map(e=>({id:`menu-${e.id}`,label:e.labelKo,slot:"menuFocus",value:e.id}))});let eu=_&&!z(a)&&!G(a)||el||null!=H;return(eu||T||!((e.mobilityConfidence??0)<.58)||ec.push({slot:"transport",promptKo:s.copy.globe.localDiscoveryAskTransport,choices:[{id:"transport-walk",label:s.copy.globe.localDiscoveryTransportWalk,slot:"transport",value:"walk"},{id:"transport-car",label:s.copy.globe.localDiscoveryTransportCar,slot:"transport",value:"car"},{id:"transport-transit",label:s.copy.globe.localDiscoveryTransportTransit,slot:"transport",value:"transit"}]}),eu||L||!((e.budgetConfidence??0)<.58)||ec.push({slot:"budget",promptKo:s.copy.globe.localDiscoveryAskBudget,choices:[{id:"budget-low",label:s.copy.globe.localDiscoveryBudgetLow,slot:"budget",value:"low"},{id:"budget-medium",label:s.copy.globe.localDiscoveryBudgetMedium,slot:"budget",value:"medium"},{id:"budget-high",label:s.copy.globe.localDiscoveryBudgetHigh,slot:"budget",value:"high"}]}),!j&&b&&!el&&(e.foodConfidence??0)<.58&&ec.push({slot:"vibe",promptKo:s.copy.globe.localDiscoveryAskVibe,choices:[{id:"vibe-quiet",label:s.copy.globe.localDiscoveryVibeQuiet,slot:"vibe",value:"quiet"},{id:"vibe-popular",label:s.copy.globe.localDiscoveryVibePopular,slot:"vibe",value:"popular"},{id:"vibe-local",label:s.copy.globe.localDiscoveryVibeLocal,slot:"vibe",value:"local"},{id:"vibe-hot",label:s.copy.globe.localDiscoveryVibeHot,slot:"vibe",value:"hot"}]}),f&&!i.lodgingKind&&!V(a)&&null==H&&(e.lodgingConfidence??0)<.58&&"any"===W&&ec.push({slot:"lodgingKind",promptKo:s.copy.globe.localDiscoveryAskLodgingKind,choices:[{id:"lodging-hotel",label:s.copy.globe.localDiscoveryLodgingHotel,slot:"lodgingKind",value:"hotel"},{id:"lodging-hostel",label:"게스트하우스",slot:"lodgingKind",value:"hostel"},{id:"lodging-airbnb",label:s.copy.globe.localDiscoveryLodgingAirbnb,slot:"lodgingKind",value:"airbnb"},{id:"lodging-any",label:s.copy.globe.localDiscoveryLodgingAny,slot:"lodgingKind",value:"any"}]}),ec.length>0)?{status:"questions",questions:function(e){for(let t of Q){let n=e.find(e=>e.slot===t);if(n)return[n]}return e.slice(0,1)}(ec),answers:i,partial:es}:{status:"ready",spec:Z(Y({resourceTypes:X,transport:T??"walk",budget:L??"medium",vibe:j??"popular",lodgingKind:W??"any",lodgingStayType:N,maxNightlyPriceKrw:H,eateryFocus:er}),a,w),answers:i}}],300123),e.s(["buildSpatialPatchPreview",0,ea,"planSpatialPatch",0,en],993281),e.s(["parsePalantirFacetFromMessage",0,ei,"resolvePalantirExcludePlaceIds",0,function(e){let t=new Set;for(let n of e.recommendations)t.add(n.placeId);for(let n of e.projectedPlaceIds??[]){let e=n.trim();e&&t.add(e)}return[...t]},"resolvePalantirRefineIntent",0,function(e){let t=e.message.trim();if(!t||0===e.previousRecommendations.length||!ee(t))return null;if(null!=(0,l.parseMaxNightlyPriceKrw)(t)||(0,D.contextFieldsRequireSpatialPatch)((0,D.parseContextFields)(t)))return eo(e);if(r(t))return{kind:"alternate_scout"};if(/다시\s*찾/iu.test(t)&&/싸|저렴|가격|budget|cheap|만\s*원/iu.test(t))return eo(e);let n=ei(t);return n?{kind:"facet_rerank",facetId:n}:eo(e)}],914394);var er=e.i(316120),el=e.i(971715),es=e.i(565354);e.s(["tryRunMoveContextCommand",0,function(e){var t;let n=(0,es.ensureSessionGraph)({contextEventId:e.contextEventId,anchorLat:e.anchorLat,anchorLng:e.anchorLng}),a=(0,el.parseGraphCommands)(e.utterance,n);if(!a.length||a.some(e=>"move_context"!==e.op))return null;let i=null;for(let t of a)"move_context"===t.op&&(i=function(e){(0,es.ensureSessionGraph)({contextEventId:e.toContextEventId,anchorLat:e.anchorLat,anchorLng:e.anchorLng});let t=(0,er.applyGraphCommands)({contextEventId:e.fromContextEventId,commands:[{op:"move_context",targetRef
10:{labelKo:e.labelKo},toContextEventId:e.toContextEventId,folderLabelKo:e.folderLabelKo??"여행"}],anchorLat:e.anchorLat,anchorLng:e.anchorLng});return t.ok?t.graph:null}({fromContextEventId:e.contextEventId,toContextEventId:t.toContextEventId,labelKo:t.targetRef.labelKo,folderLabelKo:t.folderLabelKo,anchorLat:e.anchorLat,anchorLng:e.anchorLng}));if(!i)return null;let o=a[0]&&"folderLabelKo"in a[0]&&a[0].folderLabelKo?.trim()||"여행",r=(t=e.contextEventId,(0,es.readSessionGraph)(t)?.projectFolders??[]);return{ok:!0,contextEventId:e.contextEventId.trim(),commands:a,graph:i,assistantReplyKo:r.length>0?`${o} 맥락으로 옮겼어요 \xb7 ${r.join(" · ")}`:`${o} 맥락으로 옮겼어요`,reservedOpIds:[]}}],264226);var ec=e.i(900396),eu=e.i(801222);let ed=new Map;function ep(e,t){let n=e.trim();n&&ed.set(n,t)}e.s(["clearLodgingStayRevisePending",0,function(e){ed.delete(e.trim())},"readLodgingStayRevisePending",0,function(e){return ed.get(e.trim())??null},"writeLodgingStayRevisePending",0,ep],842064),e.i(743137);var em=e.i(525223),eg=e.i(389281),eh=e.i(534636);function ey(e){let t=e.trim();return!!t&&/비교|compare|vs/iu.test(t)&&/예약|reserve|booking/iu.test(t)}function ef(e){let n=e.utterance.trim(),a=e.graph??null,i=(0,t.classifyIntentFamily)(n),o=(0,eh.routeToolFamily)(i),r=(0,el.isGraphCommandUtterance)(n,a)||ey(n)||"Revise"===i,l=eg.COMMIT_REQUIRED_INTENTS.has(i)||ey(n),s=!l&&eg.SOFT_CONFIRM_INTENTS.has(i),c=eg.GRAPH_MUTATING_INTENTS.has(i)||ey(n),u=["R1_ActionFirst","R2_EntityFirst","R3_ContextFirst"],d=null;if("Reserve"===i||"Delete"===i||"Share"===i){u.push("R4_ClarifyLess");let e=function(e){if(!e)return[];let t=e.selectionIds.map(t=>e.nodes.find(e=>e.id===t)).filter(Boolean).map(e=>({id:e.id,labelKo:e.labelKo}));return t.length>0?t:e.nodes.filter(e=>e.visible&&("lodging"===e.kind||"eatery"===e.kind||"poi"===e.kind)).map(e=>({id:e.id,labelKo:e.labelKo}))}(a),t=/첫\s*(?:번\s*)?째|첫번째|first/iu.test(n)&&e[0]?e[0]??null:a?.selectionIds[0]?e.find(e=>e.id===a.selectionIds[0])??null:null;d=function(e){if(e.alreadyResolved)return{kind:"execute",picked:e.alreadyResolved,reasonKo:"이미 고른 대상으로 진행해요"};let t=e.candidates.filter(e=>e.id&&e.labelKo.trim());if(0===t.length)return{kind:"blocked",reasonKo:`${e.intentLabelKo}할 대상이 없어요`};if(1===t.length)return{kind:"execute",picked:t[0],reasonKo:"대상이 하나라 바로 진행해요"};let n=t.slice(0,3).map(e=>e.labelKo).join(" · "),a=t.slice(0,5);return{kind:"clarify",questionKo:`어느 ${e.intentLabelKo} 말씀하시나요? (${n})`,candidates:a,chips:a.slice(0,5).map(e=>({id:`clarify_${e.id}`,labelKo:e.labelKo,gapId:"pick",value:e.id}))}}({intentLabelKo:"Reserve"===i?"예약":"Delete"===i?"삭제":"공유",candidates:e,alreadyResolved:t})}"none"!==o&&u.push("R5_ToolsFirst"),c&&u.push("R6_GraphMutates"),l&&u.push("R7_CommitGate");let p=!r&&("Analyze"===i||"Predict"===i||"Unknown"===i),m="맥락과 그래프를 먼저 봤어요";return r?m=s?"확인 후 반영할게요":"바로 실행할 수 있어요":d?.kind==="clarify"?m=d.questionKo:d?.kind==="execute"?m=d.reasonKo:p&&(m="필요할 때만 추론해요"),{version:1,utterance:n,intent:i,toolFamily:o,actionMatched:r,preferActionOverText:r||c||"none"!==o,requiresCommit:l,requiresSoftConfirm:s,mutatesGraph:c,allowLlmReasoning:p,clarify:d,firedRules:u,priority:eg.ORCHESTRATION_PRIORITY,constitution:eg.PROMPT_CONSTITUTION,assistantHintKo:m}}e.s(["evaluateUtteranceRules",0,ef],111),e.s(["tryRunReviseCommand",0,function(e){let n=e.utterance.trim(),a=e.contextEventId.trim();if(!n||!a)return null;let r=(0,t.classifyIntentFamily)(n),l=void 0!==e.event?e.event:(0,em.findLifeEventCandidate)(a),c=(0,es.readSessionGraph)(a),u=(0,ec.readLastContextPack)(a)?.lodgingDiff??(0,o.resolveLodgingDiffForPack)({contextEventId:a,graph:c,previous:null}),d=(0,eu.tryParseLodgingStayRevise)({text:n,event:l,lodgingDiff:u});if(d)return ep(a,d),{ok:!0,via:"revise_confirm",contextEventId:a,assistantReplyKo:d.confirmHintKo,reservedOpIds:[],waitingCommit:!1,reviseChips:[{id:"lodging_stay_apply",labelKo:s.copy.globe.lodgingStayReviseApplyChip,gapId:"apply",value:"apply"},{id:"lodging_stay_cancel",labelKo:s.copy.globe.lodgingStayReviseCancelChip,gapId:"cancel",value:"cancel"},{id:"lodging_stay_edit",labelKo:s.copy.globe.lodgingStayReviseEditChip,gapId:"edit",value:"edit"}]};if("Revise"!==r)return null;let p=ef({utterance:n,graph:c}),m=i({utterance:n,graph:c,discoveryPlaceIds:[],lodgingDiff:u});return{ok:!0,via:"clarify",contextEventId:a,assistantReplyKo:s.copy.globe.lodgingStayReviseAskHint,reservedOpIds:[],waitingCommit:!1,ruleDecision:p,contextPack:m}}],381251);let eb=new Map;function ek(e,t){let n=e.trim();n&&eb.set(n,t)}e.s(["clearSoftConfirmPending",0,function(e){eb.delete(e.trim())},"readSoftConfirmPending",0,function(e){return eb.get(e.trim())??null},"writeSoftConfirmPending",0,ek],265340),e.s(["tryRunSoftConfirmCommand",0,function(e){let n=e.utterance.trim(),a=e.contextEventId.trim();if(!n||!a)return null;let i=(0,t.classifyIntentFamily)(n);if(!eg.SOFT_CONFIRM_INTENTS.has(i)||"Revise"===i)return null;let o=(0,es.ensureSessionGraph)({contextEventId:a,anchorLat:e.anchorLat,anchorLng:e.anchorLng}),r=(0,el.parseGraphCommands)(n,o);if(!r.length)return null;let l=r[0],c="filter"===l.op?"filter":"pin_node"===l.op?"pin":"delete_node"===l.op?"delete":"share_context"===l.op?"share":null;if(!c)return null;let u="filter"===c?s.copy.globe.softConfirmFilterSummary:"pin"===c&&"targetRef"in l?s.copy.globe.softConfirmPinSummary(l.targetRef.labelKo):"delete"===c&&"targetRef"in l?s.copy.globe.softConfirmDeleteSummary(l.targetRef.labelKo):"share"===c&&"targetRef"in l?s.copy.globe.softConfirmShareSummary(l.targetRef.labelKo):s.copy.globe.softConfirmGenericSummary,d=s.copy.globe.softConfirmHint(u);return ek(a,{kind:c,summaryKo:u,confirmHintKo:d,commands:r,utterance:n,atIso:new Date().toISOString()}),{ok:!0,via:"soft_confirm",contextEventId:a,assistantReplyKo:d,reservedOpIds:[],waitingCommit:!1,softConfirmKind:c,softConfirmChips:[{id:"soft_confirm_apply",labelKo:s.copy.globe.softConfirmApplyChip,gapId:"apply",value:"apply"},{id:"soft_confirm_cancel",labelKo:s.copy.globe.softConfirmCancelChip,gapId:"cancel",value:"cancel"}]}}],689295)},671284,23105,751159,875323,800966,284075,335212,966801,945073,215237,828491,299795,8310,657610,241742,822149,666704,204394,825424,899548,174914,563792,187495,425947,708351,91773,487627,858094,933955,474018,449117,97347,729497,135450,896319,235101,508898,294423,278554,893266,452361,928942,725506,272120,303456,e=>{"use strict";var t=e.i(974235),n=e.i(316120),a=e.i(265340);function i(e){let t=e.trim();return!!t&&!(t.length>40)&&/^(?:네|예|응|ㅇㅇ|좋아|좋아요|그래|그래요|맞아|맞아요|ok|okay|yes|y|반영|반영해|그렇게|그걸로)(?:\s*(?:그렇게|그걸로))?(?:\s*(?:해(?:줘|요|주세요)?|주세요|반영(?:해(?:줘|요|주세요)?)?))?[!?.~ㅋㅎ…\s]*$/iu.test(t)}function o(e){return/^(?:아니|아니요|아니야|ㄴㄴ|취소|그만|됐어|ok\s*아냐|no|n)[!?.~ㅋㅎ…\s]*$/iu.test(e.trim())}e.s(["applySoftConfirmPending",0,function(e){let i=e.contextEventId.trim(),o=(0,a.readSoftConfirmPending)(i);if(!o)return{ok:!1,reason:"no_pending",messageKo:t.copy.globe.softConfirmNoPending};let r=(0,n.applyGraphCommands)({contextEventId:i,commands:o.commands,anchorLat:e.anchorLat,anchorLng:e.anchorLng,contextLabelKo:e.contextLabelKo});return((0,a.clearSoftConfirmPending)(i),r.ok)?{ok:!0,summaryKo:o.summaryKo}:{ok:!1,reason:"apply_failed",messageKo:t.copy.globe.softConfirmApplyFailed}},"cancelSoftConfirmPending",0,function(e){return(0,a.clearSoftConfirmPending)(e),t.copy.globe.softConfirmCancelled}],671284),e.s(["isSoftConfirmAffirmUtterance",0,i,"isSoftConfirmRejectUtterance",0,o],23105),e.s(["buildScoutHandoffResult",()=>h,"recoverUnmatchedNlTurn",()=>g],875323);let r=new Map;function l(e,t){let n=e.trim();n&&r.set(n,t)}e.s(["buildClarifyResumeUtterance",0,function(e){let t=e.originalUtterance.trim(),n=e.pickedLabelKo.trim();return n?t?`${n} ${t}`:n:t},"clearClarifyLessPending",0,function(e){r.delete(e.trim())},"readClarifyLessPending",0,function(e){return r.get(e.trim())??null},"writeClarifyLessPending",0,l],751159);var s=e.i(440840),c=e.i(680333);e.i(743137);var u=e.i(525223),d=e.i(700792),p=e.i(175786);function m(e){return e.map(e=>({id:e.id,labelKo:e.labelKo,gapId:"next",value:e.value}))}function g(e){var t;let n=e.ruleDecision.intent,a=e.utterance.trim(),i=(t=e.graph)?t.n
10odes.filter(e=>e.visible&&("lodging"===e.kind||"eatery"===e.kind||"poi"===e.kind)&&e.labelKo.trim()).slice(0,3).map(e=>e.labelKo.trim()):[],o=!!e.pack.lodgingDiff?.lastBatchId,r=e.ruleDecision.allowLlmReasoning,g=(0,p.tryOpenWorkspaceFromUtterance)({contextEventId:e.contextEventId,utterance:a});if(g?.ok)return{via:"reason",assistantReplyKo:g.replyKo,clarifyChips:[]};if("Move"===n){if(0===i.length){let t=m([{id:"recover_search_lodging",labelKo:"숙소 찾기",value:"숙소 찾아줘"},{id:"recover_search_eatery",labelKo:"맛집 찾기",value:"맛집 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a||"옮겨줘",intentLabelKo:"Move",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"옮길 핀이 없어요. 먼저 찾을까요?",clarifyChips:t}}let t=m(i.map((e,t)=>({id:`recover_move_${t}`,labelKo:`${e} 옮기기`,value:`${e}을 여행 맥락으로 옮겨`})));return l(e.contextEventId,{originalUtterance:a||"옮겨줘",intentLabelKo:"Move",candidateIds:i,atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"어느 걸 옮길까요?",clarifyChips:t.slice(0,3)}}if("Reserve"===n||"Purchase"===n){let t=m(i.length>0?i.map((e,t)=>({id:`recover_reserve_${t}`,labelKo:"Purchase"===n?`${e} 결제`:`${e} 예약`,value:"Purchase"===n?`${e} 결제해`:`${e} 예약 준비해`})):[{id:"recover_find_then_reserve",labelKo:"숙소 찾아 예약",value:"숙소 찾아서 예약 준비해"}]);return l(e.contextEventId,{originalUtterance:a,intentLabelKo:n,candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:i.length?"Purchase"===n?"어느 걸로 결제 준비할까요?":"어느 걸로 예약 준비할까요?":"Purchase"===n?"결제할 대상이 없어요. 먼저 찾아볼까요?":"예약할 대상이 없어요. 먼저 찾아볼까요?",clarifyChips:t.slice(0,3)}}if("Share"===n){let t=m(i.length>0?i.map((e,t)=>({id:`recover_share_${t}`,labelKo:`${e} 공유`,value:`${e} 공유해`})):[{id:"recover_search_then_share",labelKo:"숙소 찾기",value:"숙소 찾아줘"},{id:"recover_eatery_then_share",labelKo:"맛집 찾기",value:"맛집 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a||"공유해",intentLabelKo:"Share",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:i.length?"어느 걸 공유할까요?":"공유할 핀이 없어요. 먼저 찾을까요?",clarifyChips:t.slice(0,3)}}if("Create"===n){let t=m([{id:"recover_create_context",labelKo:"여행 맥락 만들기",value:"여행 맥락 만들어"},{id:"recover_search_lodging",labelKo:"숙소 찾기",value:"숙소 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a,intentLabelKo:"Create",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"어떤 맥락을 만들까요?",clarifyChips:t}}if("Simulate"===n){let t=m([{id:"recover_sim_rain",labelKo:"비 오면",value:"비 오면 어때"},{id:"recover_sim_hotel",labelKo:"이 호텔이면",value:i[0]?`${i[0]}이면 어때`:"숙소 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a,intentLabelKo:"Simulate",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"어떤 상황을 시뮬할까요?",clarifyChips:t}}if("Group"===n){if(i.length<2){let t=m([{id:"recover_search_then_group",labelKo:"숙소 찾기",value:"숙소 찾아줘"},{id:"recover_eatery_then_group",labelKo:"맛집 찾기",value:"맛집 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a||"묶어줘",intentLabelKo:"Group",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"묶을 핀이 부족해요. 먼저 찾을까요?",clarifyChips:t}}let t=m([{id:"recover_group_first_two",labelKo:`${i[0]}\xb7${i[1]} 묶기`,value:`${i[0]}이랑 ${i[1]} 묶어줘`}]);return l(e.contextEventId,{originalUtterance:a||"묶어줘",intentLabelKo:"Group",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"어느 걸 묶을까요?",clarifyChips:t}}if("Note"===n){if(0===i.length){let t=m([{id:"recover_search_then_note",labelKo:"숙소 찾기",value:"숙소 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a||"메모해",intentLabelKo:"Note",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"메모할 핀이 없어요. 먼저 찾을까요?",clarifyChips:t}}let t=m(i.map((e,t)=>({id:`recover_note_${t}`,labelKo:`${e} 메모`,value:`${e}에 메모해`})));return l(e.contextEventId,{originalUtterance:a||"메모해",intentLabelKo:"Note",candidateIds:i,atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"어디에 메모할까요?",clarifyChips:t.slice(0,3)}}if((0,c.isExplicitContextContinue)(a)){let t=m([{id:"recover_continue_lodging",labelKo:"숙소 찾기",value:"숙소 찾아줘"},{id:"recover_continue_eatery",labelKo:"맛집 찾기",value:"맛집 찾아줘"},{id:"recover_continue_amenity",labelKo:"약국·편의",value:"주변 약국 찾아줘"}]);return l(e.contextEventId,{originalUtterance:a,intentLabelKo:"Continue",candidateIds:t.map(e=>e.value),atIso:new Date().toISOString()}),{via:"clarify",assistantReplyKo:"이 맥락에서 이어서 할게요. 다음에 뭐 할까요?",clarifyChips:t}}let h=m([o?{id:"recover_research",labelKo:"같은 조건 다시",value:"다시 찾아줘"}:{id:"recover_lodging",labelKo:"숙소 찾기",value:"숙소 찾아줘"},{id:"recover_eatery",labelKo:"맛집 찾기",value:"맛집 찾아줘"},{id:"recover_amenity",labelKo:"약국·편의",value:"주변 약국 찾아줘"}]);l(e.contextEventId,{originalUtterance:a,intentLabelKo:n,candidateIds:h.map(e=>e.value),atIso:new Date().toISOString()});let y=(0,u.findLifeEventCandidate)(e.contextEventId),f=(0,d.resolveConfirmedRealityAskGate)({event:y,contextEventId:e.contextEventId}),b=(0,s.classifyIntentFamily)(a),k=f.actionProposalsKo[0]??null,K=k&&(f.knownFacts.lodgingCommitted||f.askForbiddenSlots.includes("dates"))?k:r?"Analyze"===b||"Unknown"===b?"아직 바로 실행할 명령은 못 잡았어요. 다음에 뭐 할까요?":`${n}으로 이해했어요. 실행할 다음을 골라 주세요.`:"다음에 뭐 할까요?";return{via:r?"reason":"clarify",assistantReplyKo:K,clarifyChips:h}}function h(e){return{ok:!0,via:"scout_handoff",contextEventId:e.contextEventId,assistantReplyKo:"조건에 맞춰 찾아볼게요",reservedOpIds:[],waitingCommit:!1,ruleDecision:e.ruleDecision,contextPack:e.pack,handoffKind:"discovery_scout",...e.actionPlan?{actionPlan:e.actionPlan}:{}}}var y=e.i(842064),f=e.i(566290),b=e.i(393948);function k(e,n){let a=[],i=(0,b.buildLodgingStayWindow)({event:n??null}),o=(0,b.formatLodgingStayBadgeLabel)(i);return o?a.push(o):e.checkInIso&&e.checkOutIso&&a.push(`${e.checkInIso.slice(5,10)}–${e.checkOutIso.slice(5,10)}`),e.guestCount&&e.guestCount>0&&a.push(t.copy.globe.lodgingSlotGuestChip(e.guestCount)),e.roomCount&&e.roomCount>1&&a.push(t.copy.globe.lodgingSlotRoomChip(e.roomCount)),a}e.s(["buildLodgingBookingSlotChipLabels",0,k],800966);var K=e.i(442271);e.i(951206);var I=e.i(104342);e.s(["applyLodgingStayRevisePending",0,function(e){let n=(0,y.readLodgingStayRevisePending)(e.contextEventId);if(!n)return{ok:!1,reason:"no_pending",messageKo:t.copy.globe.lodgingStayReviseCancelled};try{let a=(0,f.writeLodgingBookingSlots)({contextEventId:e.contextEventId,checkInIso:n.checkInIso,checkOutIso:n.checkOutIso,guestCount:n.guestCount,roomCount:n.roomCount});(0,y.clearLodgingStayRevisePending)(e.contextEventId);let i=k((0,f.readLodgingBookingSlots)(a),a).join(" · ")||t.copy.globe.lodgingStayReviseApplied(n.summaryKo);return(0,I.recordScheduleUpdated)({contextEventId:e.contextEventId,labelKo:i,scheduleLabel:n.summaryKo,placeLabel:"string"==typeof a.place&&a.place.trim()||null}),window.dispatchEvent(new Event(K.EVENT_CANDIDATES_UPDATED)),{ok:!0,summaryKo:i,event:a}}catch{return{ok:!1,reason:"write_failed",messageKo:t.copy.globe.lodgingSlotMissingToast}}},"cancelLodgingStayRevisePending",0,function(e){return(0,y.clearLodgingStayRevisePending)(e),t.copy.globe.lodgingStayReviseCancelled}],284075),e.s(["isLodgingStayReviseAffirmUtterance",0,function(e){return i(e)},"isLodgingStayReviseRejectUtterance",0,function(e){return o(e)}],335212),e.i(389281);var v=e.i(210534);e.i(111);var x=e.i(257673);e.s(["gateRuleDecisionForExecution",0,function(e){let{decision:t,utterance:n}
10=e,a=(0,x.isCompoundActionUtterance)(n);return t.clarify?.kind==="clarify"?a?{allow:!0}:{allow:!1,kind:"clarify",assistantReplyKo:t.clarify.questionKo}:(t.clarify?.kind,{allow:!0})},"ruleRequiresFieldCommit",0,function(e,t){return t.length>0||e.requiresCommit}],966801),e.i(426394),e.i(155120),e.s([],945073);var _=e.i(47554),w=e.i(209201),C=e.i(779153);function S(e){let t=e.utterance.trim(),n=e.referenceDate??new Date().toISOString().slice(0,10),a=(0,C.parseTravelSlotsFromMessage)(t,n),i=a.destination?.trim()||(0,_.extractRunDestination)(t)||null,o=(0,w.resolveTripContextAnchor)(i),r=e.profile??(0,C.travelProfileForMessage)(t)??"leisure_travel",l=o?.placeLabel??i?.trim()??"여행지",s=!i&&/(?:새\s*)?프로젝트|project/iu.test(t)?"새 프로젝트":/여행$/u.test(l.trim())?l.trim():`${l} 여행`,c=a.durationDays&&a.anchorTimeIso?(0,C.computeWindowEndIso)(a.anchorTimeIso,a.durationDays):null;return{graphId:e.graphId.trim(),utterance:t,compiled:e.compiled,travelSlots:{...a,destination:i},profile:r,titleKo:s,durationLabelKo:function(e){if(null==e||e<=0)return null;if(1===e)return"1일";let t=e-1;return t>0?`${t}박${e}일`:`${e}일`}(a.durationDays??null),dateLabelKo:function(e,t){if(!e?.trim())return null;let n=new Date(e);if(Number.isNaN(n.getTime()))return null;let a=e=>`${e.getMonth()+1}/${e.getDate()}`;if(!t?.trim())return a(n);let i=new Date(t);return Number.isNaN(i.getTime())?a(n):`${a(n)} ~ ${a(i)}`}(a.anchorTimeIso??null,c),anchorLabelKo:o?`${o.placeLabel} 도심(임시)`:`${l}(임시)`,anchorLat:o?.lat??null,anchorLng:o?.lng??null,reality:"draft",createdAtIso:new Date().toISOString()}}function T(e){let n=t.copy.globe.contextAnchor;return[n.previewHeadline,"",`${n.fieldName}
11${e.titleKo}`,"",`${n.fieldDuration}
12${e.durationLabelKo??n.valueUnset}`,"",`${n.fieldDate}
13${e.dateLabelKo??n.valueUnset}`,"",`${n.fieldAnchor}
14${e.anchorLabelKo}`,"",`${n.fieldAssistant}
15${n.assistantOn}`,"",`${n.fieldReality}
16${n.realityDraft}`,"",n.askApprove].join("\n")}function L(e){let n=t.copy.globe.contextAnchor;return[n.progressIntent,n.progressPlace(e.travelSlots.destination?.trim()||e.titleKo),n.progressDates,n.progressGlobe,n.progressAnchor(e.anchorLabelKo),n.progressDone]}e.s(["buildPendingContextCreateDraft",0,S],215237),e.s(["buildContextCreateProgressLines",0,L,"buildPendingContextCreatePreviewText",0,T],828491);var E=e.i(350534);let P=new Map;function A(e){let t=e.graphId.trim();t&&P.set(t,e)}function $(e){let t=e?.trim();return t?P.get(t)??null:null}function j(e){let t=e?.trim();t&&P.delete(t)}e.s(["clearPendingContextCreate",0,j,"readPendingContextCreate",0,$,"writePendingContextCreate",0,A],299795),e.s(["tryRunNlContextCreateOffer",0,function(e){let t,n=e.utterance.trim(),a=e.contextEventId.trim();if(!n||!a||!((t=n.trim())&&("Create"===(0,s.classifyIntentFamily)(t)||/만들|생성|create/iu.test(t))&&/(?:맥락|컨텍스트|여행|context|프로젝트|project)\s*(?:을\s*)?(?:만들|생성)|(?:만들|생성).*(?:맥락|여행|컨텍스트|프로젝트)|맥락\s*만들어|(?:새\s*)?프로젝트\s*(?:만들|생성)|[가-힣A-Za-z]{2,16}\s*여행\s*(?:만들|생성)/iu.test(t)))return null;let i=(0,E.compileGlobeIngress)({text:n,existingContextId:a}),o=S({graphId:a,utterance:n,compiled:i});A(o);let r=T(o),c=[{id:"context_create_yes",labelKo:"만들어",gapId:"create",value:"만들어"},{id:"context_create_no",labelKo:"나중에",gapId:"cancel",value:"취소"}];return l(a,{originalUtterance:n,intentLabelKo:"Create",candidateIds:c.map(e=>e.value),atIso:new Date().toISOString()}),{ok:!0,via:"clarify",contextEventId:a,assistantReplyKo:`${r}
17만들까요?`,reservedOpIds:[],waitingCommit:!1,ruleDecision:e.ruleDecision,contextPack:e.pack,clarifyChips:c}}],8310);var R=e.i(333702),D=e.i(683266),M=e.i(534870),W=e.i(542368),O=e.i(358526);let N=new Map;function F(e){let t=e.contextEventId.trim();t&&N.set(t,e)}function B(e){N.delete(e.trim())}function U(e){let t=e.utterance.trim();if((0,D.isTripPrepUtterance)(t)||/준비해|여행\s*준비|일정\s*(?:짜|만들)/iu.test(t))return t;let n=e.destinationKo?.trim()||"여행",a=e.stayLabelKo?.trim()||"";return`${n} ${a} 여행 준비해줘`.replace(/\s+/gu," ").trim()}function q(e){let t=(0,D.parseTripPrepSlots)(e.utterance);return{version:M.ACTION_PLAN_VERSION,planId:`intent-create:${Date.now()}`,contextEventId:e.contextEventId,utterance:e.utterance,steps:[],createdAtIso:new Date().toISOString(),diffBundleId:`intent-diff:${Date.now()}`,planKind:"trip_prep",requiresFieldCommit:!1,tripPrep:t}}function H(e){return[{id:"intent_create_project_yes",labelKo:e?t.copy.globe.intentRouterReviewReadyChip:t.copy.globe.intentRouterCreateYesChip,gapId:"create_project",value:e?"확인했어요":"만들어"},{id:"intent_create_project_explore",labelKo:t.copy.globe.intentRouterExploreChip,gapId:"explore",value:"그냥 볼래"},{id:"intent_create_project_later",labelKo:t.copy.globe.intentRouterLaterChip,gapId:"cancel",value:"나중에"}]}e.s(["tryResolvePendingCreateProject",0,function(e){let n,a,i=e.contextEventId.trim(),o=N.get(i.trim())??null;if(!o)return null;if(n=e.utterance.trim(),/나중에|아냐|아니|취소|됐어|그냥\s*볼|알아볼|탐색|no|cancel|later|explore/iu.test(n))return B(i),{ok:!0,via:"soft_command",contextEventId:i,assistantReplyKo:t.copy.globe.intentRouterCreateRejected,reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:e.ruleDecision,contextPack:e.pack};if(!(!(!(a=e.utterance.trim())||/^(?:나중에|아냐|아니|취소|됐어|no|cancel|later)/iu.test(a))&&/만들어|만들자|프로젝트|Worksp
17ace|워크스페이스|열어|시작|확인|응|좋아|해줘|yes|ok|create/iu.test(a)))return null;if("draft"===o.stage){B(i);let n=o.plan?.titleKo||[o.destinationKo,o.stayLabelKo].filter(Boolean).join(" · ")||"여행";return{ok:!0,via:"soft_command",contextEventId:i,assistantReplyKo:t.copy.globe.intentRouterDraftReviewed(n),reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:e.ruleDecision,contextPack:e.pack}}B(i);let r=U({utterance:o.originalUtterance,destinationKo:o.destinationKo,stayLabelKo:o.stayLabelKo}),l=(0,W.openWorkspaceForTripPrep)({utterance:r,contextEventId:i,plan:q({contextEventId:i,utterance:r}),skipUserChat:!1}),s=o.plan?.titleKo||[o.destinationKo,o.stayLabelKo].filter(Boolean).join(" · ")||"여행";return{ok:!0,via:"soft_command",contextEventId:i,assistantReplyKo:l?t.copy.globe.intentRouterCreateOpened(s):t.copy.globe.intentRouterCreateOpenFailed,reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:e.ruleDecision,contextPack:e.pack}},"tryRunIntentRouterHardCreateOpen",0,function(e){let n=e.utterance.trim(),a=e.contextEventId.trim();if(!n||!a)return null;let i=(0,R.resolveIntentRoute)({utterance:n,contextEventId:a});if("create"!==i.mode||"hard"!==i.confidence||"travel"!==i.domain||"workspace"!==i.surface||(0,D.isTripPrepUtterance)(n))return null;let o=U({utterance:n,destinationKo:i.destinationKo,stayLabelKo:i.stayLabelKo});if(!(0,W.openWorkspaceForTripPrep)({utterance:o,contextEventId:a,plan:q({contextEventId:a,utterance:o})}))return null;let r=[i.destinationKo,i.stayLabelKo].filter(Boolean).join(" · ")||"여행";return{ok:!0,via:"soft_command",contextEventId:a,assistantReplyKo:t.copy.globe.intentRouterCreateOpened(r),reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:e.ruleDecision,contextPack:e.pack}},"tryRunIntentRouterSoftCreateOffer",0,function(e){let n=e.utterance.trim(),a=e.contextEventId.trim();if(!n||!a)return null;let i=(0,R.resolveIntentRoute)({utterance:n,contextEventId:a}),o="draft_preview"===i.surface&&"create"===i.mode,r="soft_propose"===i.surface&&"create"===i.mode;if(!o&&!r)return null;let s=(0,O.buildIntentPlan)({route:i,utterance:n});if(o){let o=U({utterance:n,destinationKo:i.destinationKo,stayLabelKo:i.stayLabelKo}),r=(0,W.openWorkspaceForTripPrep)({utterance:o,contextEventId:a,plan:q({contextEventId:a,utterance:o}),skipUserChat:!0});if(!r)return null;F({contextEventId:a,originalUtterance:n,destinationKo:i.destinationKo,stayLabelKo:i.stayLabelKo,atIso:new Date().toISOString(),stage:"draft",plan:s});let c=r.nodes.filter(e=>"ready"===e.actionReadyState).length,u=H(!0);return l(a,{originalUtterance:n,intentLabelKo:"Draft",candidateIds:u.map(e=>e.value),atIso:new Date().toISOString()}),{ok:!0,via:"clarify",contextEventId:a,assistantReplyKo:t.copy.globe.intentRouterRealityDraftReady(s.titleKo,c||r.nodes.length),reservedOpIds:[],waitingCommit:!1,ruleDecision:e.ruleDecision,contextPack:e.pack,clarifyChips:u}}F({contextEventId:a,originalUtterance:n,destinationKo:i.destinationKo,stayLabelKo:i.stayLabelKo,atIso:new Date().toISOString(),stage:"soft",plan:s});let c=s.titleKo,u=H(!1);return l(a,{originalUtterance:n,intentLabelKo:"Create",candidateIds:u.map(e=>e.value),atIso:new Date().toISOString()}),{ok:!0,via:"clarify",contextEventId:a,assistantReplyKo:t.copy.globe.intentRouterCreatePropose(c),reservedOpIds:[],waitingCommit:!1,ruleDecision:e.ruleDecision,contextPack:e.pack,clarifyChips:u}}],657610),e.s([],241742),e.s(["normalizeNlNegation",0,function(e){let t=e.trim().replace(/\s+/gu," ");if(!t)return t;let n=t.match(/^(?:아니(?:요|야|오)?\s*)?(?:그거|이거|저거|그것|이것|저것)?\s*말고\s+(.+)$/iu);return(n?.[1]?.trim()&&(t=n[1].trim()),/예약(?:은|을|이)?\s*말고/iu.test(t)&&/길|내비|지도|택시|지하철|도보/iu.test(t)&&(t=t.replace(/예약(?:은|을|이)?\s*말고\s*/iu,"").replace(/\s*만\s*$/u,"").trim(),/(?:길|내비|지도|찾아)/iu.test(t)||(t=`${t} 길 찾아`.trim())),/공유(?:는|을|이)?\s*말고/iu.test(t)&&/예약|잡아|결제/iu.test(t)&&(t=t.replace(/공유(?:는|을|이)?\s*말고\s*/iu,"").trim()),/^길만$/iu.test(t)||/^길$/iu.test(t))?"길 찾아":t}],822149);var z=e.i(627349),G=e.i(274758),J=e.i(923311),V=e.i(767896),Q=e.i(419317);function Y(e){var t;let n,a,i,o,{message:r,referenceDate:l,slots:s,destination:c,destinationAnchor:u}=e,d=u?.placeLabel??c??null,p=e.profile,m="business_trip"===p&&/(?:출장|business|미팅|회의|업무)/iu.test(r),g=d??(m?"출장":"여행");n="lodging_search"===p?d?`${d} 숙소`:"숙소 맥락":"eatery_search"===p?d?`${d} 맛집`:"맛집 맥락":"leisure_travel"===p?`${g} 여행`:m?`${g} 출장`:`${g} 여행`;let h=s?.anchorTimeIso?.trim()||(0,z.parseRelativeDateTimeFromText)(r,l)||(t=new Date,a=e=>String(e).padStart(2,"0"),o=Math.abs(i=-t.getTimezoneOffset()),`${t.getFullYear()}-${a(t.getMonth()+1)}-${a(t.getDate())}T${a(t.getHours())}:${a(t.getMinutes())}:00${i>=0?"+":"-"}${a(Math.floor(o/60))}:${a(o%60)}`),y=s?.durationDays&&s.anchorTimeIso?(0,C.computeWindowEndIso)(s.anchorTimeIso,s.durationDays):s?.durationDays?(0,C.computeWindowEndIso)(h,s.durationDays):null,f=e.existingEventId?.trim()||`ctx-plan:${Date.now()}`,b={feedPlanEnabled:!0,globeManualContext:!0,targetingSource:"experience_run",workspaceKind:"travel",travelDestination:d,sourceMessage:r,executionProfileId:"lodging_search"===p?"lodging_search":"eatery_search"===p?"eatery_search":"leisure_travel"===p?"leisure_travel":m?"business_trip":"leisure_travel",...s?.originLat!=null&&null!=s.originLng?{travelOriginLat:s.originLat,travelOriginLng:s.originLng,travelOriginLabel:s.originLabel??"출발"}:{},...u?{globePlaceConfirmed:!0,globePlaceLat:u.lat,globePlaceLng:u.lng,globePlaceLabel:u.placeLabel,globePlaceCardLat:u.lat,globePlaceCardLng:u.lng,globePlaceCardLabel:u.placeLabel}:{}},k=u?(0,G.stampCanonicalPlaceProfile)(b,u.profile):b,K=/(?:연인|커플|남친|여친|신혼|허니문|친구|가족|부모님|엄마|아빠)/u.test(r),I=(0,V.stampPlanContextMetadata)(k,{planId:f,title:n,windowStartIso:h,windowEndIso:y,windowConfidence:y?"confirmed":"open",nights:s?.durationDays??void 0,place:d,peerDisplayName:null,peerThreadId:null,attachMode:"new",planMode:K?"group":"solo"}),v=(0,Q.commitEventUpsert)({id:f,title:n,category:"travel",source:"manual",lifecycle:"scheduled",datetime:h,place:d??void 0,confidence:.92,metadata:I});return(0,J.createPersonalGlobePinFromEvent)({event:v,experienceTitle:n}),v}function Z(e){let t=e.message.trim(),n=e.referenceDate??new Date().toISOString().slice(0,10),a=e.travelSlots??null,i=a?.destination?.trim()||(0,_.extractRunDestination)(t);return Y({message:t,referenceDate:n,existingEventId:e.existingEventId,profile:e.profile??"business_trip",slots:a,destination:i,destinationAnchor:(0,w.resolveTripContextAnchor)(i)})}async function X(e){let t=e.message.trim(),n=e.referenceDate??new Date().toISOString().slice(0,10),a=e.travelSlots??null,i=a?.destination?.trim()||(0,_.extractRunDestination)(t);return Y({message:t,referenceDate:n,existingEventId:e.existingEventId,profile:e.profile??"business_trip",slots:a,destination:i,destinationAnchor:await (0,w.resolveTripContextAnchorAsync)(i)})}e.s(["ensureTripContextEvent",0,Z,"ensureTripContextEventAsync",0,X],666704);var ee=e.i(104533),et=e.i(352018);let en="globe_ingress",ea=[{id:"intent",labelKey:"progressIntent"},{id:"place",labelKey:"progressPlaceFeed"},{id:"dates",labelKey:"progressDates"},{id:"globe",labelKey:"progressGlobe"},{id:"anchor",labelKey:"progressAnchorFeed"}];function ei(e,n){let a=(0,et.resolveActiveComposerGraphId)(n),i=t.copy.globe.contextAnchor;for(let t of ea){let n="progressPlaceFeed"===t.labelKey?i.progressPlaceFeed:"progressAnchorFeed"===t.labelKey?i.progressAnchorFeed:i[t.labelKey];(0,ee.dispatchExecutionFeedStep)({graphId:a,stepId:`${en}:create:${t.id}`,labelKo:n,status:"running"}),(0,ee.dispatchExecutionFeedStep)({graphId:a,stepId:`${en}:create:${t.id}`,labelKo:n,status:"done",resultKo:e.context.goal.slice(0,28)})}}function eo(e,t){let n=(0,et.resolveActiveComposerGraphId)(t),a=[{id:"context",labelKo:"맥락",detailKo:e.context.goal},{id:"bridge",labelKo:"연결",detailKo:e.bridge.pathLabels.join(" → ")},{id:"runtime",labelKo:"실행",detailKo:e.runtime.runtimeKind},{id:"blueprint",labelKo:"설계",detailKo:e.blueprint.resourcePlan.nextQuestion?.promptKo??e.blueprint.goal}];for(let e of a)(0,ee.dispatchExecutionFeedStep)({graphId:n,stepId:`${en}:${e.id}`,labelKo:e.labelKo,status:"done",resultKo:e.detailKo.slice(0,40)});(0,ee.dispatchExecutionFeedStep)({graphId:n,stepId:en,labelKo:"실행 구조 설계",status:"done",resultKo:e.context.goal.slice(0,28)}),(0,ee.dispatchExecutionFeedArtifact)({graphId:n,stepId:en,artifact:{kind:"result",titleKo:e.context.goal,summaryLineKo:e.bridge.pathLabels.join(" → "),bodyKo:e.blueprint.resourcePlan.nextQuestion?.promptKo??"",checklist:a.map(e=>({id:e.id,titleKo:e.labelKo,done:!0,priorityKo:e.detailKo.slice(0,24),priorityTone:"low"})),tabs:[{id:"structure",labelKo:"구조"},{id:"flow",labelKo:"흐름"}],activeTabId:"structure"}})}e.s(["syncGlobeIngressCompileToFeed",0,eo,"syncGlobeIngressCreatingProgressToFeed",0,ei],204394);var er=e.i(497436),el=e.i(408868);let es={busan:{lat:35.1796,lng:129.0756,label:"부산",radiusKm:45},seoul:{lat:37.5665,lng:126.978,label:"서울",radiusKm:55},chungcheong:{lat:36.635,lng:127.489,label:"대전",radiusKm:55}};function ec(e,t){let n=null;for(let[a,i]of Object.entries(es)){let o=function(e,t,n,a){let i=e=>e*Math.PI/180,o=i(n-e),r=i(a-t),l=Math.sin(o/2)**2+Math.cos(i(e))*Math.cos(i(n))*Math.sin(r/2)**2;return 12742*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))}(e,t,i.lat,i.lng);o>i.radiusKm||(!n||o<n.distanceKm)&&(n={label:i.label,kind:a,distanceKm:o})}return n?{label:n.label,kind:n.kind}:null}function eu(e){let t=(0,er.classifyOverseasManualPlace)(e.destinationLabel.trim());return"busan"===e.homeKind?t?.isOverseas?["pus","icn","gmp","cjj"]:["pus","gmp","icn","cjj"]:"chungcheong"===e.homeKind?t?.isOverseas?["icn","cjj","gmp","pus"]:["cjj","gmp","icn","pus"]:"seoul"===e.homeKind?t?.isOverseas?["icn","gmp","cjj","pus"]:["gmp","icn","cjj","pus"]:t?.isOverseas?["icn","gmp","pus","cjj"]:["gmp","icn","pus","cjj"]}function ed(e){let t=e.destinationLabel.trim()||"여행",n=e.viewerLat,a=e.viewerLng,i=null!=n&&null!=a?ec(n,a):null,[o]=eu({destinationLabel:t,homeKind:i?.kind??null});return{hub:(0,el.getDepartureHubAirport)(o??"icn"),homeLabel:i?.label??"집",confidence:i?"high":"low"}}e.s(["inferDepartureHubHypothesis",0,ed,"listDepartureHubChoices",0,function(e){let t=e.viewerLat,n=e.viewerLng,a=null!=t&&null!=n?ec(t,n):null;
17return eu({destinationLabel:e.destinationLabel.trim()||"여행",homeKind:a?.kind??null}).map(e=>el.DEPARTURE_HUB_AIRPORTS.find(t=>t.id===e))}],825424);var ep=e.i(58624),em=e.i(377052);e.i(60756),e.i(984629),e.i(583830),e.i(584602),e.s([],899548);var eg=e.i(749401);let eh=["running","ready","prepared","waiting_approval","pending"];function ey(e){let t=e.blueprint.executionGraph;if(!t?.nodes.length)return null;let n=(e.build.now??new Date).toISOString(),a=(function(e){if(0===e.edges.length)return[...e.nodes];let t=new Map(e.nodes.map(e=>[e.id,e])),n=new Map;for(let t of e.nodes)n.set(t.id,0);for(let t of e.edges)n.set(t.toNodeId,(n.get(t.toNodeId)??0)+1);let a=e.nodes.filter(e=>(n.get(e.id)??0)===0).map(e=>e.id),i=[],o=new Map;for(let t of e.edges){let e=o.get(t.fromNodeId)??[];e.push(t.toNodeId),o.set(t.fromNodeId,e)}for(;a.length>0;){let e=a.shift();if(!i.includes(e))for(let t of(i.push(e),o.get(e)??[]))n.set(t,(n.get(t)??0)-1),(n.get(t)??0)<=0&&a.push(t)}for(let t of e.nodes)i.includes(t.id)||i.push(t.id);return i.map(e=>t.get(e)).filter(e=>null!=e)})(t).map((e,t)=>{var a;let i;return i=(0,eg.resolveEngineForExecutionNode)(e.id,e.assignedExecutor),{stepId:(a=e.id,`${a}:${t}`),nodeId:e.id,order:t,labelKo:e.label,engineId:i,status:"pending",lastError:null,updatedAtIso:n}}),i=e.build.osPhase??"execution_planned",o=e.build.approval??"auto";return{version:1,contextId:e.build.contextId.trim(),goalKo:e.build.goalKo.trim()||e.blueprint.goal.trim(),osPhase:i,approval:o,steps:a,currentStepId:function(e){for(let t of eh){let n=e.find(e=>e.status===t);if(n)return n.stepId}return e[0]?.stepId??null}(a),createdAtIso:n,updatedAtIso:n}}e.s(["buildContextExecutionPlanFromBlueprint",0,ey],174914);var ef=e.i(845923);function eb(e){return!!e&&"plan_waiting_approval"===e.osPhase}let ek=new Set(["prepared","waiting_approval","ready"]);function eK(e){return!!e&&("executing"===e.osPhase||"execution_prepared"===e.osPhase||"waiting_approval"===e.osPhase)&&e.steps.some(e=>ek.has(e.status))}function eI(e){var t,n;let a;return e.plan?(t=e.blueprint,!t?.executionGraph?.nodes.length||"manual"!==t.approvalPolicy&&"multi_step"!==t.approvalPolicy||"approved"===e.plan.approval||"executing"===e.plan.osPhase||eb(e.plan))?e.plan:(a=((n={plan:e.plan}).now??new Date).toISOString(),{...n.plan,osPhase:"plan_waiting_approval",approval:"pending",updatedAtIso:a}):null}e.s(["needsContextExecutionAnyApproval",0,function(e){return eb(e)||eK(e)},"needsContextExecutionPlanApproval",0,eb,"needsContextExecutionStepApproval",0,eK,"resolveContextExecutionPlanApprovalGate",0,eI],563792);var ev=e.i(456635);let ex={surfaceKind:"reality_surface",included:["capture","context","bridge","runtime_state","flow_projection"],excluded:["blueprint","operator_internals","commit_logic","storage_schema"]};function e_(e){return{scope:ex,context:e.context??null,bridge:e.bridge??null,runtime:e.runtime??null,flow:e.flow??null}}function ew(e){let t=e.blueprint.executionGraph,n=(0,ev.readActiveExecutionGraphNode)({graph:t,plan:e.executionPlan??null}),a=t?.nodes.map(e=>e.id)??[],i=n?.label??null,o=!e.blueprint.resourcePlan.emptySlots.includes("destination"),r=e_({context:{contextId:e.eventId,goalKo:e.goalKo},bridge:{pathLabels:e.bridgePathLabels,activeLegIndex:function(e){if(e.destinationConfirmed){let t=e.pathLabels.findIndex(e=>"집"!==e&&"공항"!==e&&"호텔"!==e&&"Stay region"!==e);if(t>=0)return t}if(!e.activeNodeLabel)return 0;let t=e.pathLabels.findIndex(t=>t.includes(e.activeNodeLabel)||e.activeNodeLabel.includes(t));return t>=0?t:0}({pathLabels:e.bridgePathLabels,activeNodeLabel:i,destinationConfirmed:o})},runtime:{runtimeId:e.runtimeId,activePhaseLabel:i,activeFlowNodeId:n?.id??null,progressHintKo:e.blueprint.resourcePlan.nextQuestion?.promptKo??null},flow:{flowNodeIds:a,nextStepHintKo:e.blueprint.resourcePlan.nextQuestion?.promptKo??null,strokeStyle:o||n?.resolution==="confirmed"?"solid":"dashed"}});return{eventId:e.eventId,projection:r,operatorBlueprint:e.blueprint,executionPlan:e.executionPlan??null}}e.s(["composeRealitySurfaceProjectionBundle",0,e_],187495),e.s(["composeRealitySurfaceFromBlueprint",0,ew,"composeRealitySurfaceFromGlobeIngress",0,function(e){let{c
17ompiled:t,eventId:n}=e,a=eI({plan:ey({blueprint:t.blueprint,build:{contextId:n,goalKo:t.context.goal,osPhase:"execution_planned",approval:"auto"}}),blueprint:t.blueprint});return ew({eventId:n,goalKo:t.context.goal,bridgePathLabels:t.bridge.pathLabels,blueprint:t.blueprint,runtimeId:t.runtime.runtimeId,executionPlan:a})}],425947);var eC=e.i(919991);let eS={osaka:"오사카",tokyo:"도쿄",fukuoka:"후쿠오카",大阪:"오사카",東京:"도쿄",福岡:"후쿠오카",manila:"마닐라",cebu:"세부",boracay:"보라카이",palawan:"팔라완",bohol:"보홀",bali:"발리",phuket:"푸켓",bangkok:"방콕"};function eT(e){let t=e.resourcePlan.knownTruth.find(e=>"region"===e.slotId)?.value;return"string"==typeof t&&t.trim()?t.trim():null}function eL(e){let t=e?eT(e):null,n=(0,eC.listHubLabelsForCountry)(t);return n.length>0?n:t?.trim()?[]:eC.FALLBACK_DESTINATION_HUBS.map(e=>e.label)}function eE(e){let t=e.trim();return eS[t.toLowerCase()]??t}function eP(e){return e.resourcePlan.emptySlots.includes("destination")}function eA(e){return e.resourcePlan.emptySlots.includes("departure_hub")}function e$(e){let n=function(e){let n,a=t.copy.globe.tripSituationRouter,i=e.blueprint??null;if(!i||eP(i))return a.nextStepPickDestination;let o=e.destinationLabel?.trim()||("string"==typeof(n=i.resourcePlan.knownTruth.find(e=>"destination"===e.slotId)?.value)&&n.trim()?n.trim():i.constraints.destination?.label?.trim()??null)||"여행";if(eA(i)){let t=ed({destinationLabel:o,viewerLat:e.viewerLat,viewerLng:e.viewerLng});return"high"===t.confidence?a.nextStepConfirmDeparture(t.hub.shortLabelKo):a.nextStepPickDeparture}return a.nextStepPickDomain(o)}(e),a=e.headline.trim();return a?`${a}
18${n}`:n}function ej(e){var n;return e$({headline:(n=e.eventTitle,t.copy.globe.tripSituationRouter.contextCreated(n.trim()||"여행")),blueprint:e.blueprint})}e.s(["advanceRealitySurfaceDepartureHub",0,function(e){var t,n,a,i;let o,r,l,s,c,u,d=(t=e.session.operatorBlueprint,o=(n={hub:e.hub,homeLabel:e.homeLabel,homeLat:e.homeLat,homeLng:e.homeLng}).hub,r=n.homeLabel.trim()||"집",l=t.spatialTargets?{...t.spatialTargets,byNodeId:{...t.spatialTargets.byNodeId,prepare:(0,em.composePhysicalSpatialTarget)({label:r,resolution:"confirmed",lat:n.homeLat??null,lng:n.homeLng??null}),departure:(0,em.composePhysicalSpatialTarget)({label:o.labelKo,resolution:"confirmed",lat:o.lat,lng:o.lng,zoneId:`${o.id}-airport`}),return:(0,em.composePhysicalSpatialTarget)({label:o.labelKo,resolution:"hypothesis",lat:o.lat,lng:o.lng,zoneId:`${o.id}-airport`})}}:t.spatialTargets,s=[...t.resourcePlan.knownTruth.filter(e=>"departure_hub"!==e.slotId&&"origin_location"!==e.slotId),{slotId:"departure_hub",value:o.shortLabelKo,source:"user_stated",confidence:.95},{slotId:"origin_location",value:r,source:"user_stated",confidence:.9}],c=t.resourcePlan.emptySlots.filter(e=>"departure_hub"!==e),u=t.resourcePlan.knownTruth.find(e=>"destination"===e.slotId)?.value??t.constraints.destination?.label??"여행",{...t,spatialTargets:l,resourcePlan:{...t.resourcePlan,knownTruth:s,emptySlots:c,nextQuestion:{slotId:"lodging_place",promptKo:`${u}에서 묵을 곳을 찾을까요?`}}}),p=(a=e.session.projection.bridge?.pathLabels??[],i=e.hub.shortLabelKo,0===a.length?["집",i,"목적지","호텔"]:a.map((e,t)=>1===t||"공항"===e||e.includes("공항")?i:e));return ew({eventId:e.session.eventId,goalKo:e.session.projection.context?.goalKo??d.goal,bridgePathLabels:p,blueprint:d,runtimeId:e.session.projection.runtime?.runtimeId??d.runtimeId,executionPlan:e.session.executionPlan??null})},"advanceRealitySurfaceDestination",0,function(e){var t,n,a;let i,o,r,l,s,c,u,d,p,m,g=eE(e.destinationLabel),h=(a=e.session.operatorBlueprint,o=eE(g),r=(0,w.resolveTripContextAnchor)(o),l=(i=o.toLowerCase()).includes("도쿄")||i.includes("tokyo")?"하네다공항":i.includes("후쿠오카")||i.includes("fukuoka")?"후쿠오카공항":"간사이공항",s=a.executionGraph,c=s?.nodes.map(e=>"stay"===e.id?{...e,resolution:"hypothesis",label:"Stay"}:e)??[],u=a.spatialTargets?{...a.spatialTargets,byNodeId:{...a.spatialTargets.byNodeId,arrival:(0,em.composePhysicalSpatialTarget)({label:l,resolution:"hypothesis"}),stay:(0,em.composePhysicalSpatialTarget)({label:o,resolution:"hypothesis",lat:r?.lat??null,lng:r?.lng??null,linkedSlotId:"destination"})}}:a.spatialTargets,d=[...a.resourcePlan.knownTruth.filter(e=>"destination"!==e.slotId),{slotId:"destination",value:o,source:"user_stated",confidence:.95}],p=[...a.resourcePlan.emptySlots.filter(e=>"destination"!==e),"departure_hub"],{...a,executionGraph:s?(0,ep.composeExecutionGraph)({nodes:c,edges:s.edges}):s,spatialTargets:u,resourcePlan:{...a.resourcePlan,knownTruth:d,emptySlots:p,nextQuestion:{slotId:"departure_hub",promptKo:`${o} \xb7 출발 공항을 확인할게요`}},constraints:{...a.constraints,destination:r?{label:r.placeLabel,lat:r.lat,lng:r.lng}:{label:o}}}),y=(m=(t={blueprint:h,plan:e.session.executionPlan??null,contextId:e.session.eventId}).plan?t.plan:ey({blueprint:t.blueprint,build:{contextId:t.contextId,goalKo:t.blueprint.goal,osPhase:"execution_planned"}}))?(0,ef.patchContextExecutionPlanSteps)({plan:m,patches:[{nodeId:"trip",status:"done"},{nodeId:"prepare",status:"done"},{nodeId:"departure",status:"done"},{nodeId:"arrival",status:"done"},{nodeId:"stay",status:"running"}]}):null,f=(n=e.session.projection.bridge?.pathLabels??[],0===n.length?["집","공항",g,"호텔"]:n.map((e,t)=>2===t||"Stay region"===e||"unresolved"===e?g:e));return ew({eventId:e.session.eventId,goalKo:e.session.projection.context?.goalKo??h.goal,bridgePathLabels:f,blueprint:h,runtimeId:e.session.projection.runtime?.runtimeId??h.runtimeId,executionPlan:y})}
18,"blueprintNeedsDepartureConfirm",0,eA,"blueprintNeedsDestination",0,eP,"destinationChoiceLabelsForBlueprint",0,eL,"resolveDestinationFromMessage",0,function(e,t){let n=e.trim();if(!n)return null;let a=n.toLowerCase(),i=t?eT(t):null,o=(0,eC.matchCountryTravelFrame)(i);if(o){let e=(0,eC.matchHubInAnyFrame)(n);if(e&&e.frame.countryId===o.countryId)return e.hub.labelKo;for(let e of o.hubs.map(e=>e.labelKo))if(n.includes(e)||a.includes(e.toLowerCase()))return e}let r=(0,eC.matchHubInAnyFrame)(n);if(r)return r.hub.labelKo;for(let e of eL(t))if(n.includes(e)||a.includes(e.toLowerCase()))return e;for(let[e,t]of Object.entries(eS))if(a.includes(e))return t;let l=(0,w.resolveTripContextAnchor)(n);return l&&n.length<=24?l.placeLabel:null}],708351),e.s(["buildTripIngressCreatedChatAssistantLine",0,ej,"composeTripFlowChatAssistantLine",0,e$],91773);var eR=e.i(262247);function eD(e){let n=t.copy.globe.tripSituationRouter,a=e?.trim()||null,i=[{id:"trip-lodging",label:n.lodgingSearch,action:"lodging",submitText:n.lodgingSubmit}];return a&&i.push({id:"trip-eatery",label:n.eaterySearch,action:"eatery",submitText:n.eaterySubmit(a)},{id:"trip-route",label:n.routeSearch,action:"route",submitText:n.routeSubmit(a)},{id:"trip-itinerary",label:n.itinerarySearch,action:"itinerary",submitText:n.itinerarySubmit(a)},{id:"trip-prep-all",label:n.prepAllSearch,action:"prep_all",submitText:n.prepAllSubmit(a)}),i}function eM(e){let n,a=e.destinationLabel?.trim()||null;if(!a)return!1;let i=eD(a).map(e=>({id:e.submitText?.trim()||e.label,labelKo:e.label}));return(0,eR.syncPortalComposeClarifyToChat)({graphId:e.graphId,userText:e.skipUserEcho?"":e.userText?.trim()||"",questionKo:(n=a.trim()||"여행",t.copy.globe.tripSituationRouter.prepareOffer(n)),clarifyKind:"slot",slotId:"trip_prepare",choices:i})}e.s(["buildTripPrepareChips",0,eD,"offerTripPrepareChips",0,eM],487627);var eW=e.i(170241);let eO=eC.DESTINATION_OTHER_CHIP_ID,eN="ABCDEFGHIJKLMNOPQRSTUVWXYZ";function eF(e){return(0,eW.isCountryOrRegionDestinationLabel)(e)}function eB(e){let n,a,i,o,r,l=e.countryLabel.trim();return!!l&&!!eF(l)&&(0,eR.syncPortalComposeClarifyToChat)({graphId:e.graphId,userText:e.skipUserEcho?"":e.userText?.trim()||"",questionKo:(n=l.trim()||"여행",a=(0,eC.pickPromptForCountry)(n)??t.copy.globe.tripSituationRouter.countryCityPick(n),`${a}
19${t.copy.globe.tripSituationRouter.destinationOtherAsk}`),clarifyKind:"slot",slotId:"country_city_pick",choices:(o=(i=(0,eC.hubChoiceRowsForCountry)(l).slice(0,8)).map((e,t)=>({id:e.label,labelKo:`${eN[t]??String(t+1)} \xb7 ${e.label}`})),r=eN[i.length]??String(i.length+1),o.push({id:eO,labelKo:`${r} \xb7 ${t.copy.globe.tripSituationRouter.destinationOther}`}),o)})}e.s(["offerCountryCityPickChips",0,eB,"shouldOfferCountryCityPick",0,eF],858094);var eU=e.i(560231),eq=e.i(944217),eH=e.i(180755);let ez=/(?:주식|증권|코인|비트코인|삼성전자|ETF|포트폴리오|재무|자산\s*배분|차트|시세|매수|매도).*(?:분석|추천|사|팔|보여|준비)|(?:분석|추천|시세).*(?:주식|증권|코인|삼성)/iu,eG=/(?:계약서|기획서|제안서|명세서|서류|레쥬메|이력서|문서|NDA|합의서).*(?:만들|작성|써|초안|고쳐)|(?:만들|작성|써|초안).*(?:계약서|기획서|제안서|문서)/iu,eJ=/(?:React|Next\.?js|TypeScript|TSX?|로그인\s*페이지|컴포넌트|API\s*라우트|코드|버그|리팩터).*(?:만들|짜|구현|고쳐|고쳐줘)|(?:만들|짜|구현|고쳐).*(?:로그인|페이지|컴포넌트|코드|API)/iu;e.s(["classifyWorkspaceRoute",0,function(e){let t=e.trim();if(!t)return{ship:"none"};let n=(0,eH.classifyWorkspaceKind)(t);return n?{ship:"live",kind:n}:ez.test(t)?{ship:"catalog",route:"finance",statusKo:"금융 작업장을 준비하는 중이에요 · 곧 열려요"}:eG.test(t)?{ship:"catalog",route:"document",statusKo:"문서 작업장을 준비하는 중이에요 · 곧 열려요"}:eJ.test(t)?{ship:"catalog",route:"coding",statusKo:"코딩 작업장을 준비하는 중이에요 · 곧 열려요"}:{ship:"none"}}],933955);let eV=["conditions","price","sellers"],eQ=["photos","product","price","location","match"],eY={travel:{kind:"travel",titleKo:"여행 작업장",eyebrowKo:"자원 준비됨",slots:[{id:"flight",labelKo:"항공",filler:"tool",required:!1},{id:"hotel",labelKo:"숙소",filler:"tool",required:!0},{id:"itinerary",labelKo:"일정",filler:"tool",required:!0},{id:"map",labelKo:"지도",filler:"tool",required:!0},{id:"budget",labelKo:"예산",filler:"user",required:!1},{id:"eatery",labelKo:"맛집",filler:"tool",required:!1},{id:"transit",labelKo:"교통",filler:"tool",required:!1},{id:"booking",labelKo:"예약",filler:"tool",required:!1},{id:"fx",labelKo:"환율",filler:"stub",required:!1},{id:"weather",labelKo:"날씨",filler:"stub",required:!1},{id:"checklist",labelKo:"체크리스트",filler:"user",required:!1}],focusSequence:["flight","hotel","itinerary"],toolPack:["hotel.lookup","restaurant.lookup","maps.search","maps.navigate","ranking.pick","booking.prepare","calendar.add"]},driver:{kind:"driver",titleKo:"대리 작업장",eyebrowKo:"자원 준비됨",slots:[{id:"here",labelKo:"현재 위치",filler:"sensor",required:!0}
19,{id:"demand_hot",labelKo:"수요 높은 지역",filler:"stub",required:!0},{id:"earn_hour",labelKo:"예상 시간당 수익",filler:"stub",required:!1},{id:"call_density",labelKo:"실시간 호출 밀도",filler:"stub",required:!0},{id:"weather",labelKo:"날씨",filler:"stub",required:!1},{id:"home_route",labelKo:"귀가 동선",filler:"tool",required:!1},{id:"rest",labelKo:"쉬기 좋은 장소",filler:"tool",required:!1},{id:"cafe_24h",labelKo:"24시간 카페",filler:"tool",required:!1},{id:"parking",labelKo:"주차장",filler:"tool",required:!1},{id:"goal_earn",labelKo:"오늘 목표 수익",filler:"user",required:!1}],focusSequence:["here","demand_hot","home_route"],toolPack:["maps.search","maps.navigate","pharmacy.lookup","calendar.add"]},used_goods:{kind:"used_goods",titleKo:"거래 작업장",eyebrowKo:"자원 준비됨",slots:[{id:"photos",labelKo:"사진",filler:"user",required:!0},{id:"product",labelKo:"상품 정보",filler:"stub",required:!0},{id:"price",labelKo:"가격",filler:"stub",required:!0},{id:"location",labelKo:"거래 위치",filler:"sensor",required:!0},{id:"match",labelKo:"구매자 매칭",filler:"stub",required:!1},{id:"conditions",labelKo:"구매 조건",filler:"user",required:!0},{id:"sellers",labelKo:"판매자",filler:"stub",required:!0},{id:"chat",labelKo:"채팅",filler:"user",required:!1},{id:"status",labelKo:"거래 상태",filler:"stub",required:!1}],focusSequence:["photos","product","price","location","match"],toolPack:["maps.search","maps.navigate"]}};function eZ(e){return eY[e]}function eX(e){return"buy"===e?eV:eQ}e.s(["usedGoodsFocusSequence",0,eX,"workspaceKindTemplate",0,eZ],474018);var e0=e.i(167604),e1=e.i(742361),e2=e.i(441956),e3=e.i(91946),e5=e.i(607298),e4=e.i(433013),e7=e.i(301008);function e6(e){let t=e.trim();if(!t)return;let n=(0,e7.readContextWorkspace)(t);if(!n||"closed"===n.status)return;let a=n.nodes.filter(e=>e.visible).slice(0,12);(0,e4.appendContextAgentComposeTurn)(t,{role:"assistant",kind:"workspace_preview",text:n.summaryKo||`${a.length}곳 작업장 미리보기`,payload:{workspaceId:n.workspaceId,summaryKo:n.summaryKo,query:n.query,domain:n.domain,nodes:a.map(e=>({id:e.id,placeId:e.placeId,title:e.title,lat:e.lat,lng:e.lng,rating:e.rating,amountLabel:e.amountLabel,priceBand:e.priceBand,summaryKo:e.summaryKo,kind:e.kind}))}})}
19e.s(["appendWorkspacePreviewComposeTurn",0,e6],449117);var e8=e.i(444343),e9=e.i(686202),te=e.i(3964);e.i(666840);var tt=e.i(723627),tn=e.i(85724);function ta(e,t){let n=eZ(e).slots.find(e=>e.id===t);return n?.labelKo??t}function ti(e,n){return"done"===e?t.copy.globe.workspaceFocusGhostDone(n):"background"===e?t.copy.globe.workspaceFocusGhostBackground(n):t.copy.globe.workspaceFocusGhostWaiting(n)}function to(e){let n=eZ(e.kind),a=e.focusSequenceOverride&&e.focusSequenceOverride.length>0?[...e.focusSequenceOverride]:[...n.focusSequence],i=new Set((e.completedSlotIds??[]).map(e=>e.trim()).filter(Boolean)),o=new Set((e.backgroundSlotIds??[]).map(e=>e.trim()).filter(Boolean)),r=e.focusSlotId?.trim()||"";r&&a.includes(r)||(r=a.find(e=>!i.has(e))??a[0]??"hotel");let l=Math.max(0,a.indexOf(r)),s=ta(e.kind,r),c=[];for(let t of a){if(t===r)continue;let n=ta(e.kind,t),a=i.has(t)?"done":"waiting";c.push({slotId:t,labelKo:n,status:a,lineKo:ti(a,n)})}for(let t of o){if(t===r||a.includes(t))continue;let n=ta(e.kind,t);c.push({slotId:t,labelKo:n,status:"background",lineKo:ti("background",n)})}return{version:1,kind:e.kind,focusSlotId:r,focusIndex:l,focusTotal:a.length,focusLabelKo:s,headlineKo:t.copy.globe.workspaceFocusHeadline(s),askKo:t.copy.globe.workspaceFocusAsk(s),ghostRows:c}}e.s(["advanceWorkspaceFocus",0,function(e){let t=e.focusSequenceOverride&&e.focusSequenceOverride.length>0?e.focusSequenceOverride:eZ(e.kind).focusSequence,n=new Set(e.completedSlotIds.map(e=>e.trim())),a=t.find(e=>!n.has(e));return a?to({kind:e.kind,focusSlotId:a,completedSlotIds:e.completedSlotIds,focusSequenceOverride:e.focusSequenceOverride}):null},"buildWorkspaceFocusSurface",0,to],97347);var tr=e.i(951970),tl=e.i(372625);function ts(e){let t=e.contextEventId.trim();t&&((0,tl.writeWorkspaceSdkSession)(e.frame),(0,e4.appendContextAgentComposeTurn)(t,{role:"assistant",kind:"workspace_sdk",text:e.frame.primaryFocus.askKo,payload:{frame:e.frame}}),!1!==e.openHost&&(0,tl.dispatchWorkspaceSdkOpen)(t))}var tc=e.i(245978);e.i(917718);var tu=e.i(477357);function td(e){let t=e.title.trim();return"travel"===e.category||/여행|출장|맛집|숙소|trip/iu.test(t)}function tp(e){if("used_goods"===(e.metadata??{}).workspaceKind)return!0;let t=e.title.trim();return/판매|구매|중고|거래/u.test(t)}function tm(e){let n=e.excludeEventId.trim(),a=e.limit??3,i=e.forTargetKind??"any",o=(0,u.listLifeEventCandidates)().filter(e=>e.id!==n&&("used_goods"===i?td(e):"travel"===i?td(e)||tp(e):"driver"===i?td(e):td(e)||tp(e))).slice(0,16),r=[];for(let e of o){let n,o=e.title.trim()||"이전 맥락",l=e.place?.trim()||null,s=tp(e),c=/맛집|카페|식당/u.test(o),u="style";if("used_goods"===i&&td(e)||s?(u="generic",n=t.copy.globe.contextReferenceChipTogether(o.slice(0,14))):c?(u="preference",n=t.copy.globe.contextReferenceChipFood(o.slice(0,12))):(u="style",n=t.copy.globe.contextReferenceChipStyle(o.slice(0,12))),r.push({eventId:e.id,titleKo:o,placeKo:l,kind:u,chipLabelKo:n}),r.length>=a)break}return r}function tg(e){let n=e.targetEventId.trim();if(!n)return!1;let a=function(e,t){if(t)return t;let n=(0,u.findLifeEventCandidate)(e);return n?n.metadata?.workspaceKind==="used_goods"?"used_goods":"travel"===n.category||/여행|출장/u.test(n.title)?"travel":"any":"any"}(n,e.forTargetKind),i=tm({excludeEventId:n,limit:3,forTargetKind:a});return 0!==i.length&&((0,e4.appendContextAgentComposeTurn)(n,{role:"assistant",kind:"text",text:"used_goods"===a?t.copy.globe.contextReferenceOfferBodyMarket:t.copy.globe.contextReferenceOfferBody}),(0,e4.appendOperatorAskChipsComposeTurn)(n,{chipDomain:"context_reference",hint:t.copy.globe.contextReferenceOfferHint,pendingTrigger:e.utterance?.trim()||"",chips:i.map(e=>({id:`cref_${e.eventId}_${e.kind}`,labelKo:e.chipLabelKo,gapId:"context_reference",value:`${e.kind}|${e.eventId}`}))}),!0)}function th(e){var n,a;let i,o,r,l,s=e.utterance.trim(),c=e.forceKind??(0,eH.classifyWorkspaceKind)(s);if(!c)return null;let u=e.contextEventId?.trim()||"";if(!u){if(!e.createIfMissing)return null;if("travel"===c)u=Z({message:s}).id;else if("used_goods"===c){let e,t,a,i,o,r,l;u=(e=(n={utterance:s}).utterance.trim(),t=n.role??(0,eH.classifyMarketWorkspaceRole)(e),a=(0,e9.parseMarketProductFromText)(e).productName,o=(i=(0,te.isValidMarketProductName)(a)?a.trim():"")?"sell"===t?`${i} 판매`:`${i} 구매`:"sell"===t?"중고 판매":"중고 구매",r=n.existingEventId?.trim()||`ctx-market:${Date.now()}`,l=(0,Q.commitEventUpsert)({id:r,title:o,category:"custom",source:"manual",lifecycle:"scheduled",confidence:.85,metadata:{globeManualContext:!0,workspaceKind:"used_goods",marketRole:"sell"===t?"listing":"seeking",marketProductName:i||null,sourceMessage:e,targetingSource:"workspace_intent_continuum"}}),(0,J.createPersonalGlobePinFromEvent)({event:l}),l).id}else u=function(e){let t=e.existingEventId?.trim();if(t)return{id:t,title:"대리 작업"};let n=Z({message:e.utterance.trim()||"대리 뛸게",profile:"leisure_travel"});return{id:n.id,title:n.title}}({utterance:s}).id}let d=function(e){let n,a=(0,eH.classifyWorkspaceKind)(e.utterance);if(!a)return null;let i=null,o=e.contextEventId?.trim()||null,r=e.utterance.trim();if("travel"===a&&o){let t=(0,e0.extractTravelDestination)(r)?.trim()||e.titleOverrideKo?.trim()||"여행지",n=(0,e1.concurrentDiscoveryResourceTypes)(r).length>=2||(0,e2.hasEateryDomainCue)(r)||/놀거리|관광|유니버설|USJ/iu.test(r);((0,e3.shouldPrepareTripWorkspaceDraft)(r)||n)&&(i=(0,e3.prepareTripWorkspaceDraft)({utterance:r,contextEventId:o,expand:!0,skipUserChat:!0}),n&&(0,e3.prepareTripWorkspaceDraftAsync)({utterance:r,contextEventId:o,expand:!0,skipUserChat:!0}
19)),i&&0!==i.nodes.length||(i=(0,e5.openLodgingContextWorkspace)({contextEventId:o,query:`${t} 숙소`,summaryKo:`${t} 여행 자원 준비`,hits:[],source:"trip_prep"}))}if("travel"===a){let e=["hotel","map","itinerary"];(0,e2.hasEateryDomainCue)(r)&&e.push("eatery"),/\d+\s*만|예산|budget/iu.test(r)&&e.push("budget"),n=e}else n="used_goods"===a?"buy"===(0,eH.classifyMarketWorkspaceRole)(r)?["conditions","price","sellers"]:["photos","product","price","location"]:["here","demand_hot","call_density"];let l=function(e){var n,a,i;let o,r,l,s,c,u=e.kind??(0,eH.classifyWorkspaceKind)(e.utterance);if(!u)return null;let d=eZ(u),p=new Set((e.preparedSlotIds??[]).map(e=>e.trim()).filter(Boolean)),m=p.size>0?d.slots.filter(e=>p.has(e.id)).length:d.slots.filter(e=>e.required||"sensor"===e.filler).length,{focusSlotId:g,focusLabel:h}=(n=e.utterance,r=[...(o=eZ(u)).focusSequence],"used_goods"===u&&(r=[...eX((0,eH.classifyMarketWorkspaceRole)(n))]),l=r[0]??o.slots[0]?.id??"",s=o.slots.find(e=>e.id===l)?.labelKo??l,{focusSlotId:l,focusLabel:s});return{version:1,kind:u,titleKo:(a=e.utterance,i=e.titleOverrideKo,(c=i?.trim())||("travel"===u?t.copy.globe.workspacePrepTravelTitle:"used_goods"===u?"buy"===(0,eH.classifyMarketWorkspaceRole)(a)?t.copy.globe.workspacePrepMarketBuyTitle:t.copy.globe.workspacePrepMarketSellTitle:t.copy.globe.workspacePrepDriverTitle)),eyebrowKo:t.copy.globe.workspacePrepEyebrow,bodyKo:t.copy.globe.workspacePrepBody(m,d.slots.length),ctaKo:t.copy.globe.workspacePrepOpenCta,slotLabelsKo:d.slots.map(e=>e.labelKo),preparedSlotCount:m,totalSlotCount:d.slots.length,contextEventId:e.contextEventId?.trim()||null,utterance:e.utterance.trim(),openHint:"travel"===u?"travel_workspace":"used_goods"===u?"used_goods_workspace_shell":"driver_workspace_shell",focusSlotId:g,focusHintKo:t.copy.globe.workspacePrepFocusHint(h)}}({utterance:r,contextEventId:i?.contextEventId??o,titleOverrideKo:e.titleOverrideKo,kind:a,preparedSlotIds:n});return l?{card:l,workspace:i}:null}({utterance:s,contextEventId:u,titleOverrideKo:"travel"===c?(0,e0.extractTravelDestination)(s)??void 0:"used_goods"===c?(o=(0,eH.classifyMarketWorkspaceRole)(s),r=(0,e9.parseMarketProductFromText)(s).productName,(l=(0,te.isValidMarketProductName)(r)?r.trim():"")?"sell"===o?`${l} 판매`:`${l} 구매`:"sell"===o?t.copy.globe.workspacePrepMarketSellTitle:t.copy.globe.workspacePrepMarketBuyTitle):t.copy.globe.workspacePrepDriverTitle});if(!d)return null;let p="used_goods"===c?(0,eH.classifyMarketWorkspaceRole)(s):null,m=null!=p?eX(p):null,g=to({kind:c,focusSlotId:d.card.focusSlotId,backgroundSlotIds:"travel"===c?["budget"]:[],focusSequenceOverride:m}),h=!1;if("travel"===c){let e=(0,e0.extractTravelDestination)(s)?.trim()||d.card.titleKo||"여행지";(0,eq.runRealityIngressPipeline)({contextEventId:u,utterance:s,contextLabelKo:d.card.titleKo,destinationLabelKo:e,seedExecutionInbox:!0}),h=!0}e.skipChatEcho||(0,eU.appendGlobeChatTextMessage)({graphId:e.graphId,role:"assistant",text:[t.copy.globe.workspaceAgentAutoSetting,d.card.titleKo,g.headlineKo,"travel"===c?t.copy.globe.workspaceOpenTogether:"driver"===c?t.copy.globe.workspaceOpenTogetherDriver:"used_goods"===c?"buy"===(0,eH.classifyMarketWorkspaceRole)(s)?t.copy.globe.workspaceOpenTogetherMarketBuy:t.copy.globe.workspaceOpenTogetherMarket:t.copy.globe.workspaceOpenTogetherGeneric].join("\n")}),d.workspace&&(e6(u),(0,e7.writeContextWorkspaceExpanded)(u,!1)),(0,tu.seedContextRealityBundle)({contextEventId:u,sdkKind:c,focusSlotId:d.card.focusSlotId});let y=(i=(a={card:d.card,focus:g}).focus,(0,tr.buildWorkspaceSdkFrame)({kind:a.card.kind,headerTitleKo:a.card.titleKo,contextEventId:a.card.contextEventId,focusSlotId:i?.focusSlotId??a.card.focusSlotId,focusLabelKo:i?.focusLabelKo??void 0,aiStripHintKo:function(e,n){if("travel"===e)return t.copy.globe.workspaceOpenTogether;if("driver"===e)return t.copy.globe.workspaceOpenTogetherDriver;if("used_goods"===e){let e=n?.trim()??"";return e&&/(?:삽니다|구합니다|구해|구매|구입|살만|사줄|찾아)/u.test(e)?t.copy.globe.workspaceOpenTogetherMarketBuy:t.copy.globe.workspaceOpenTogetherMar
19ket}return t.copy.globe.workspaceOpenTogetherGeneric}(a.card.kind,a.card.utterance),lifecycle:"prepared"}));if(ts({contextEventId:u,frame:y,openHost:!1}),tg({targetEventId:u,utterance:s,forTargetKind:"used_goods"===c?"used_goods":"travel"===c?"travel":"driver"===c?"driver":null}),"travel"===c){let e=(0,D.parseTripPrepSlots)(s),t=e.destinationKo?.trim()||(0,e0.extractTravelDestination)(s)?.trim()||d.card.titleKo.trim()||null,n=null!=e.nights&&null!=e.days?`${e.nights}박${e.days}일`:null!=e.nights?`${e.nights}박`:null;(0,tn.rememberConstraintsOnWorkspace)({contextEventId:u,utterance:t?`${t} ${s}`:s}),t&&"여행지"!==t&&(0,e8.stampTripDraftOntoContext)({contextEventId:u,destinationKo:t,stayLabelKo:n,nights:e.nights,days:e.days,tripPrep:e})}return{kind:c,contextEventId:u,card:{...d.card,ctaKo:t.copy.globe.workspaceOneTouchOpenedToast},focus:g,workspace:d.workspace,bookingPathSeeded:h,sdkFrame:y}}async function ty(e){let n=e.contextEventId.trim(),a=e.utterance.trim();if(!n||!a)return null;let i=(0,e0.extractTravelDestination)(a)?.trim()||(0,e7.readContextWorkspace)(n)?.constraintMemory?.destinationKo?.trim()||"여행지",o=(0,e7.readContextWorkspace)(n),r=(await (0,tt.invokeRimvioToolAsync)("hotel.lookup",{query:`${i} 숙소`,utterance:a,contextEventId:n,lat:e.lat,lng:e.lng,domain:"lodging"})).candidates??[],l=r.filter(e=>!(e.id??"").startsWith("search:")&&"seed"!==e.source),s=l.length>0?l:r.filter(e=>{let t=e.id??"";return!t.startsWith("search:")&&("seed"===e.source||t.startsWith("lodging:"))});if(0===s.length&&o&&o.nodes.some(e=>e.visible))return(0,tc.syncTravelSdkFrameAfterLodgingSeed)({contextEventId:n,candidateCount:o.nodes.filter(e=>"lodging"===e.kind).length,headerTitleKo:i}),o;let c=(0,e5.openLodgingContextWorkspace)({contextEventId:n,query:`${i} 숙소`,summaryKo:t.copy.globe.workspacePreviewReady(Math.max(s.length,o?.nodes.filter(e=>e.visible).length??0)),candidates:s,source:"trip_prep"});return e6(n),(0,tc.syncTravelSdkFrameAfterLodgingSeed)({contextEventId:n,candidateCount:c.nodes.filter(e=>"lodging"===e.kind).length,headerTitleKo:i}),c}e.i(651426),e.s(["listLinkableContextCandidates",0,tm],729497),e.s(["offerContextReferenceChips",0,tg],135450),e.s(["runWorkspaceIntentContinuum",0,th,"seedTravelLodgingForContinuum",0,ty],896319);var tf=e.i(902161);function tb(e){return"number"==typeof e&&Number.isFinite(e)?e:null}function tk(e,t){let n=tb(t?.pinLat),a=tb(t?.pinLng);if(null!=n&&null!=a)return{lat:n,lng:a};let i=(0,tf.resolveStableContextPlaceAnchor)(e),o=(0,tf.buildContextInstance)({event:e,lat:t?.viewerLat,lng:t?.viewerLng,preferUserLocation:!0,surface:"composer",layerMode:"discovery"});return o.travel.overseas&&"remote_from_anchor"===o.movement.relationToAnchor?{lat:i.lat,lng:i.lng}:o.location.searchOrigin??{lat:i.lat,lng:i.lng}}e.s(["resolveContextDiscoverySearchCoords",0,tk],235101);var tK=e.i(428898);async function tI(e){let n=(await (0,tt.invokeRimvioToolAsync)("restaurant.lookup",{query:`${e.dest} 맛집`,utterance:e.utterance,contextEventId:e.contextEventId,lat:e.lat,lng:e.lng,domain:"eatery"})).candidates??[],a=n.filter(e=>!(e.id??"").startsWith("search:")&&"seed"!==e.source),i=a.length>0?a:n.filter(e=>{let t=e.id??"";return!t.startsWith("search:")&&("seed"===e.source||t.startsWith("eatery:"))});if(0===i.length)return(0,e7.readContextWorkspace)(e.contextEventId);let o=(0,e5.openMapContextWorkspace)({contextEventId:e.contextEventId,domain:"eatery",query:`${e.dest} 맛집`,summaryKo:t.copy.globe.workspacePreviewReady(i.length),candidates:i,source:"trip_prep",inventoryMode:"add"});return e6(e.contextEventId),o}async function tv(e){let n=((await (0,tt.invokeRimvioToolAsync)("maps.search",{query:`${e.dest} 관광`,utterance:e.utterance,contextEventId:e.contextEventId,lat:e.lat,lng:e.lng,domain:"poi"})).candidates??[]).filter(e=>!(e.id??"").startsWith("search:"));if(0===n.length)return(0,e7.readContextWorkspace)(e.contextEventId);let a=(0,e5.openMapContextWorkspace)({contextEventId:e.contextEventId,domain:"poi",query:`${e.dest} 관광`,summaryKo:t.copy.globe.workspacePreviewReady(n.length),candidates:n,source:"trip_prep",inventoryMode:"add"});return e6(e.contextEventId),a}async function tx(e){var t;let n=e.contextEventId.trim(),a=e.utterance.trim();if(!n||!a)return null;let i=(t={utterance:a,contextEventId:n},(0,e0.extractTravelDestination)(t.utterance)?.trim()||(0,e7.readContextWorksp
19ace)(t.contextEventId)?.constraintMemory?.destinationKo?.trim()||"여행지"),o=(0,e1.concurrentDiscoveryResourceTypes)(a),r=function(e){let t=(0,K.findEventCandidate)(e.contextEventId);if(t)return tk(t,{viewerLat:e.viewerLat,viewerLng:e.viewerLng});let n=(0,w.resolveTripContextAnchor)(e.dest);return n?{lat:n.lat,lng:n.lng}:{lat:e.viewerLat??36.3621,lng:e.viewerLng??127.3446}}({contextEventId:n,dest:i,viewerLat:e.lat,viewerLng:e.lng});(0,tK.hasLodgingDomainCue)(a)&&!o.includes("hotel")&&(o=[...o,"hotel"]),(0,e2.hasEateryDomainCue)(a)&&!o.includes("restaurant")&&(o=[...o,"restaurant"]),0===o.length&&(o=["hotel"]);let l=null;for(let e of o)"hotel"===e?l=await ty({contextEventId:n,utterance:a,lat:r.lat,lng:r.lng}):"restaurant"===e?l=await tI({contextEventId:n,utterance:a,dest:i,lat:r.lat,lng:r.lng}):"activity"===e&&(l=await tv({contextEventId:n,utterance:a,dest:i,lat:r.lat,lng:r.lng}));let s=l??(0,e7.readContextWorkspace)(n);return s&&(0,tc.syncTravelSdkFrameAfterLodgingSeed)({contextEventId:n,candidateCount:s.nodes.filter(e=>e.visible).length,headerTitleKo:i}),s}e.s(["seedTravelDiscoveryForContinuum",0,tx],508898);var t_=e.i(540422);let tw={finance:{titleKo:"금융 작업장",statusKo:"금융 작업장을 열었어요 · 레저 패널 준비됨",query:"finance stub",morphologyId:"ledger",slots:[{id:"symbol",title:"종목 · 포커스"},{id:"thesis",title:"가설 · 메모"},{id:"risk",title:"리스크 · 한도"}]},document:{titleKo:"문서 작업장",statusKo:"문서 작업장을 열었어요 · 초안 칸 준비됨",query:"document stub",morphologyId:"document",slots:[{id:"outline",title:"목차 · 골격"},{id:"draft",title:"본문 초안"},{id:"review",title:"검토 · 체크"}]},coding:{titleKo:"코딩 작업장",statusKo:"코딩 작업장을 열었어요 · 코드 칸 준비됨",query:"coding stub",morphologyId:"code_workspace",slots:[{id:"spec",title:"스펙 · Intent"},{id:"files",title:"파일 · 탭"},{id:"verify",title:"검증 · 테스트"}]}};e.s(["prepareCatalogWorkspaceStub",0,function(e){var t,n;let a,i,o=tw[e.route],r=e.utterance.trim(),l=e.explicitContextEventId?.trim(),s=l?{id:l,title:o.titleKo}:Z({message:`${o.titleKo} \xb7 ${r}`,profile:"leisure_travel"});(0,e5.openMapContextWorkspace)({contextEventId:s.id,domain:"amenity",query:o.query,summaryKo:`${o.titleKo} \xb7 준비됨`,hits:[],candidates:[],source:"trip_prep"});let c=(0,e7.readContextWorkspace)(s.id);if(c){let n,a=(t=e.route,n=tw[t],Date.now(),n.slots.map((e,a)=>({id:`catalog:${t}:${e.id}`,kind:"amenity",placeId:`catalog:${t}:${e.id}`,title:e.title,summaryKo:r.slice(0,72)||n.titleKo,lat:0,lng:0,rating:null,priceBand:null,amountLabel:null,thumbnailUrl:null,tags:["ready_slot","skeleton","catalog",t,n.morphologyId],visible:!0,selected:0===a,bookmarked:!1,source:"trip_prep",actionReadyState:void 0})));(0,e7.writeContextWorkspace)({...c,nodes:a,selectedIds:a[0]?[a[0].id]:[],summaryKo:`${o.titleKo} \xb7 ${o.morphologyId}`,lastChangeKo:o.statusKo,updatedAtIso:new Date().toISOString()})}(0,e7.writeContextWorkspaceExpanded)(s.id,!1),ts({contextEventId:s.id,frame:(i=(a=tw[(n={contextEventId:s.id,route:e.route}).route]).slots[0],{version:1,kind:"travel",morphologyId:a.morphologyId,lifecycle:"prepared",contextEventId:n.contextEventId,header:{titleKo:a.titleKo,subtitleKo:null,eyebrowKo:"자원 준비됨"},ai:{roleLabelKo:"작업 파트너",promptPlaceholderKo:"이어서 맞춰 볼까요?",stripHintKo:a.statusKo},primaryFocus:{slotId:i.id,labelKo:i.title,headlineKo:`현재 작업 \xb7 ${i.title}`,askKo:`${i.title} 맞추는 중`},node:{surface:"list",labelKo:"오브젝트"},action:{id:"prepare",labelKo:"준비 계속",toolId:null},commit:{labelKo:"승인 · 반영",requiresHuman:!0,leadsToPayment:!1},progressiveHintKo:"지금은 골격 · 다음에 데이터 · 실행",activePrimitiveIds:[]}),openHost:!1});let u=(0,t_.readGlobeProjectionLayerPolicy)();return(0,t_.publishGlobeProjectionLayerPolicy)({...u,mode:"focus",activeContextEventId:s.id}),{route:e.route,contextEventId:s.id,statusKo:o.statusKo,morphologyId:o.morphologyId}}],294423),e.i(48482),e.s([],278554),e.s(["cancelPendingContextCreate",0,function(e){let n=$(e.graphId);return!!n&&(j(n.graphId),(0,eU.appendGlobeChatTextMessage)({graphId:n.graphId,role:"assistant",text:t.copy.globe.contextAnchor.cancelled}),!0)},"commitPendingContextCreate",0,function(e){let n=$(e.graphId);if(!n)return null;for(let e of L(n))(0,eU.appendGlobeChatTextMessage)({graphId:n.graphId,role:"assistant",text:e});ei(n.compiled,n.utterance);let a=Z({message:n.utterance,travelSlots:n.travelSlots,profile:n.profile}),i=n.travelSlots?.destination?.trim()||a.place?.trim()||a.title.replace(/\s*여행$/u,"").trim()||"여행지";(0,eq.runRealityIngressPipeline)({contextEventId:a.id,utterance:n.utterance,contextLabelKo:a.title,de
19stinationLabelKo:i,seedExecutionInbox:!0}),eo(n.compiled,n.utterance);let o=ej({eventTitle:a.title,blueprint:n.compiled.blueprint});return(0,eU.appendGlobeChatTextMessage)({graphId:n.graphId,role:"assistant",text:`${t.copy.globe.contextAnchor.committedHeadline}
20${o}`}),eF(i)?eB({graphId:n.graphId,countryLabel:i,skipUserEcho:!0}):eM({graphId:n.graphId,destinationLabel:i,skipUserEcho:!0}),th({utterance:n.utterance,graphId:n.graphId,contextEventId:a.id,createIfMissing:!1,skipChatEcho:!1}),tx({contextEventId:a.id,utterance:n.utterance}),e.handlers.onGlobeIngressCompiled?.({compiled:n.compiled,eventId:a.id}),e.handlers.onAttached?.(a.id),tg({targetEventId:a.id,utterance:n.utterance}),j(n.graphId),{event:a,compiled:n.compiled,draft:n}}],893266);let tC=/^(?:create|생성|만들어(?:\s*줘)?|승인|좋아|응|네|예|ok|okay|yes)$/iu,tS=/^(?:cancel|취소|안\s*해|그만|나중에|no)$/iu;e.s(["isPendingContextCreateApprove",0,function(e){let t=e.trim();return tC.test(t)||i(t)},"isPendingContextCreateCancel",0,function(e){return tS.test(e.trim())}],452361),e.s(["tryPatchPendingContextCreate",0,function(e){let n=e.utterance.trim(),a=e.contextEventId.trim();if(!n||!a)return null;let i=$(a);if(!i||!function(e){let t=e.trim();if(!t||t.length>80)return!1;let n=new Date().toISOString().slice(0,10);return!!((0,C.parseTravelDateRangeFromText)(t,n)||/^\d{1,2}\s*[\/\.]\s*\d{1,2}\s*(?:~|-|—|–|~)\s*\d{1,2}\s*[\/\.]\s*\d{1,2}$/u.test(t)||/\d{1,2}\s*월\s*\d{1,2}\s*일.+\d{1,2}\s*월\s*\d{1,2}\s*일/u.test(t)||(0,_.extractRunDestination)(t)&&t.length<=24)}(n))return null;let o=function(e){let t=new Date().toISOString().slice(0,10),n=(0,C.parseTravelSlotsFromMessage)(e.utterance,t),a=(0,C.mergeTravelSlots)(e.pending.travelSlots,n),i=a.destination?.trim()||e.pending.travelSlots.destination?.trim()||null,o=a.durationDays??null,r=a.anchorTimeIso??null,l=[];if(i&&l.push(`${i}으로 놀러감`),r&&o){let e=new Date(r),t=new Date(e);t.setDate(t.getDate()+Math.max(0,o-1)),l.push(`${e.getMonth()+1}월${e.getDate()}일부터 ${t.getMonth()+1}월${t.getDate()}일까지`)}else e.utterance.trim()?l.push(e.utterance.trim()):l.push(e.pending.utterance);return l.push("여행 계획세워"),S({graphId:e.pending.graphId,utterance:l.join(" "),compiled:e.pending.compiled,referenceDate:t,profile:e.pending.profile})}({pending:i,utterance:n});A(o);let r=T(o),s=[{id:"context_create_yes",labelKo:t.copy.globe.contextAnchor.createCta,gapId:"create",value:"만들어"},{id:"context_create_no",labelKo:t.copy.globe.contextAnchor.cancelCta,gapId:"cancel",value:"취소"}];return l(a,{originalUtterance:o.utterance,intentLabelKo:"Create",candidateIds:s.map(e=>e.value),atIso:new Date().toISOString()}),{ok:!0,via:"clarify",contextEventId:a,assistantReplyKo:`${r}
21${t.copy.globe.contextAnchor.chipPrompt}`,reservedOpIds:[],waitingCommit:!1,ruleDecision:e.ruleDecision,contextPack:e.pack,clarifyChips:s}}],928942);var tT=e.i(263121);function tL(e){let t=e.contextEventId.trim(),n=e.utterance.trim();if(!t||!n)return null;let a=e.intent??(0,s.classifyIntentFamily)(n)??"Search",i=(0,v.resolvePlannerLookupDomain)(n),o=(0,v.resolveToolIdForIntent)({intent:"Search",domain:i,query:n})??(0,v.resolveLookupToolId)("amenity"===i?"poi":i,n),r=[],l=e=>{!e||r.includes(e)||r.length>=4||r.push(e)};if("Search"===a||"Revise"===a?(l(o),"browse.extract"!==o&&(0,tT.isBrowseExtractQuery)(n)&&l("browse.extract"),l((0,v.resolveToolIdForIntent)({intent:"Analyze",query:n})),/예약|reserve|book|예매|구매/iu.test(n)&&l((0,v.resolveToolIdForIntent)({intent:"Reserve",query:n}))):"Analyze"===a||"Predict"===a?(l(o),l((0,v.resolveToolIdForIntent)({intent:"Analyze",query:n}))):"Reserve"===a||"Purchase"===a?(l(o),l((0,v.resolveToolIdForIntent)({intent:"Analyze",query:n})),l((0,v.resolveToolIdForIntent)({intent:"Reserve",query:n}))):"Compare"===a?(l(o),l((0,v.resolveToolIdForIntent)({intent:"Analyze",query:n}))):l(o),0===r.length)return null;let c=r.map((e,t)=>(function(e,t,n="working_set"){return{id:e,kind:"tool",labelKo:(0,tt.getRimvioTool)(t)?.labelKo??t,status:"pending",toolId:t,diffPhase:n}})(`short-${t+1}`,e,"booking.prepare"===e?"field_gate":"working_set")),u=r.includes("booking.prepare");u&&c.length<5&&c.push({id:`short-${c.length+1}`,kind:"wait_commit",labelKo:"승인 대기",status:"pending",diffPhase:"field_gate"});let d=new Date().toISOString();return{version:M.ACTION_PLAN_VERSION,planId:`short-${t.slice(0,8)}-${Date.now().toString(36)}`,contextEventId:t,utterance:n,steps:c.slice(0,5),createdAtIso:d,diffBundleId:`short-bundle-${t.slice(0,8)}`,planKind:"short_tool",requiresFieldCommit:u}}
21e.s(["draftShortToolPlan",0,tL],725506);var tE=e.i(305125),tP=e.i(293978);let tA=/찾아|검색|추천|보여\s*줘|알려\s*줘|어디|주변|근처|search|find|recommend/iu,t$=new Set(["Pin","Filter","Delete","Revise","Navigate"]);function tj(e){let t=e.trim();if(!t||t.length<2||(0,x.isCompoundActionUtterance)(t))return!1;let n=(0,s.classifyIntentFamily)(t);if(t$.has(n))return!1;let a=(0,tK.hasLodgingDomainCue)(t)||(0,e2.hasEateryDomainCue)(t)||(0,tP.isAmenityLookupQuery)(t)||(0,tT.isBrowseExtractQuery)(t)||!!(0,tE.parseLodgingStayTypeFromText)(t)||/숙소|호텔|맛집|식당|카페|약국|편의점|액티비티|티켓|입장권/iu.test(t),i=tA.test(t);return("Search"===n||"Analyze"===n||"Compare"===n||"Reserve"===n)&&(!!a||!!i)||!!a&&!!i}e.s(["shouldDraftShortToolPlan",0,tj],272120);var tR=e.i(443738);e.s(["publishShortToolPlanPreview",0,function(e){let t=e.utterance.trim(),n=e.contextEventId.trim();if(!t||!n||!tj(t))return null;let a=e.intent??(0,s.classifyIntentFamily)(t),i=tL({utterance:t,contextEventId:n,intent:a});return i&&0!==i.steps.length?((0,tR.writeActionPlanUi)(i,{waitingCommit:i.requiresFieldCommit,requestFieldOpen:!1}),i):null}],303456)},359237,e=>{"use strict";var t=e.i(809214);function n(e,t,a={}){return{action:e,target:t,parameters:a}}e.s(["looksLikeForbiddenGlobeCommit",0,function(e){let t=e.trim();return!/캡슐|저렴|비교|준비|영향|가까운|조건\s*빼|말고\s*다른|최적화|분석|만\s*보/u.test(t)&&/commit|확정|지구에\s*남|커밋|reality\s*commit/iu.test(t)},"resolveWorkspaceIntent",0,function(e,a){let i=e.rawText.trim();if(!i)return null;let o=a?.targetObjectId?.trim()||e.workspaceId||"workspace";if(/예약\s*준비|prepare|준비\s*해|액션\s*준비|create\s*draft/iu.test(i))return/draft|초안|드래프트/iu.test(i)&&!/예약/u.test(i)?n("create_draft",o,{labelKo:"Draft 생성"}):n("prepare",o,{labelKo:"예약 준비"});if(/분석|analyze|영향\s*분석|어때\s*보일/iu.test(i)&&!/바꾸면/u.test(i))return n("analyze_context",o,{utterance:i});if(/최적화|optimize|동선\s*최적화|가성비\s*최적/iu.test(i))return n("optimize_context",o,{optimizeRoute:!0,utterance:i});if(/가격\s*조건\s*빼|조건\s*빼|제약\s*해제|필터\s*해제|constraint\s*off|clear\s*filter/iu.test(i))return n("remove_constraint",o,{clear:!0,key:/가격/u.test(i)?"price":null});if(/캡슐\s*호텔|capsule\s*hotel|캡슐만|capsule\s*only/iu.test(i))return n("modify_context","hotel",{hotelType:"capsule",category:"capsule"});if(/저렴한?\s*호텔|싼\s*호텔|가성비\s*호텔|cheap\s*hotel|가격\s*\d+/iu.test(i)){let e=i.match(/(\d+)\s*만/);return n("modify_context","hotel",{maxPriceBand:2,maxPriceWon:e?.[1]?1e4*Number(e[1]):null,filter:{maxPriceBand:2}})}if(/가까운\s*곳|근처|역세권|near|가까이/iu.test(i)||/난바|namba|역\s*가깝/iu.test(i))return n("add_constraint","hotel",{near:i.match(/(난바|도톤보리|신사이바시|우메다|오사카|namba)[역\s]*/iu)?.[1]??"근처",stationNear:!0,utterance:i});if(/두\s*호텔\s*비교|호텔\s*비교|비교해|compare/iu.test(i))return n("compare","hotel",{});if(/바꾸면\s*영향|영향\s*알려|시뮬레이션|what\s*-?\s*if|만약/iu.test(i))return n("simulate",o,{simulateScenarioKo:i});if(/마지막\s*날|첫째\s*날|둘째\s*날|일정\s*넣|USJ|유니버설/iu.test(i)||/옮겨|이동|순서|동선|move|reorder/iu.test(i)&&!/바꿔|교체/iu.test(i))return n("move",o,{dayHint:i,utterance:i});if(/이\s*호텔\s*말고|다른\s*곳|다른\s*호텔|바꿔|교체|대체|replace|말고\s*다른/iu.test(i))return n("replace","hotel",{findSimilar:!0,utterance:i});if(/조건\s*추가|제약\s*넣|constraint|이\s*조건|필터\s*추가/iu.test(i))return n("add_constraint",o,{utterance:i});if(/만\s*보|만\s*보여|만\s*표시|only\s*show/iu.test(i))return n("modify_context","hotel",{utterance:i});let r=(0,t.parseWorkspaceUtteranceTransition)(i);if(!r||"commit"===r.op)return null;switch(r.op){case"filter":case"sort":return n("modify_context","hotel",{filter:r.filter??null,sortBy:r.sortBy??null,maxPriceBand:r.filter?.maxPriceBand??null,hotelType:r.filter?.tagIncludes?.includes("stay:capsule")?"capsule":null});case"compare":return n("compare","hotel",{});case"simulate":return n("simulate",o,{simulateScenarioKo:r.simulateScenarioKo??i});case"optimize_route":return n("optimize_context",o,{optimizeRoute:!0});case"find_similar":return n("replace","hotel",{findSimilar:!0});case"remove":return n("replace",o,{remove:!0});case"bookmark":return n("add_constraint",o,{pin:r.pin??!0});case"undo":case"redo":return n("filter",o,{historyOp:r.op});default:return null}}])},780910,e=>{"use strict";function t(e){let t=e.workspaceId.trim(),n=e.rawText.trim(),a=e.n
21owIso??new Date().toISOString();return{id:`wcmd_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,workspaceId:t,rawText:n,createdAt:a}}e.s(["createWorkspaceCommand",0,t,"parseWorkspaceCommand",0,function(e){return e.workspaceId.trim()&&e.rawText.trim()?t(e):null}])},493940,973032,e=>{"use strict";e.i(355146);var t=e.i(359237),n=e.i(780910);function a(e){return/지구에\s*남|reality\s*commit|커밋|확정\s*결제|commit\s*globe|stamp\s*globe/iu.test(e.trim())}function i(e){return/호텔\s*바꿔|숙소\s*바꿔|다른\s*호텔|대체\s*호텔|바꿔\s*줘|change\s*hotel|replace/iu.test(e)}e.s(["AGENT_RUNTIME_PHASES",0,["observe","reason","plan","draft","validate"],"isAgentCommitForbidden",0,a,"planAgentOperator",0,function(e){if(a(e.utterance))return null;let o=(0,n.createWorkspaceCommand)({workspaceId:e.workspaceId,rawText:e.utterance}),r=(0,t.resolveWorkspaceIntent)(o,{targetObjectId:void 0})??null;return r||(r="대체 호텔 발견"===e.reasoning.recommendationKo||i(e.utterance)?{action:"replace",target:"hotel",parameters:{findSimilar:!0,reasonKo:e.reasoning.reasonKo,problemKo:e.reasoning.problemKo,utterance:e.utterance,currentHotelTitle:e.observation.currentHotelTitle}}:{action:"modify_context",target:"hotel",parameters:{reasonKo:e.reasoning.reasonKo,utterance:e.utterance}}),{id:`agent_plan_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,summaryKo:`AI Operator \xb7 ${e.reasoning.recommendationKo}`,steps:[{id:"s1",order:1,phase:"observe",labelKo:"Context Observe"},{id:"s2",order:2,phase:"reason",labelKo:"문제 진단"},{id:"s3",order:3,phase:"plan",labelKo:"Action Plan"},{id:"s4",order:4,phase:"draft",labelKo:"Draft 생성"},{id:"s5",order:5,phase:"validate",labelKo:"Impact 검증"}],intent:r,commitForbidden:!0}},"reasonAgentOperator",0,function(e){var t;let n=(t=e.utterance,/가격\s*상승|비싸|올랐|가격\s*올|price\s*up|가격\s*문제/iu.test(t)||!!e.observation.problemHintKo?.includes("가격")),a=n?"가격 상승":e.observation.hotelCandidateCount>20?"후보 과다":"조건 재조정 필요",o=n||i(e.utterance)?"대체 호텔 발견":e.observation.hotelCandidateCount>12?"필터 Draft 제안":"Workspace 최적화 제안";return{problemKo:a,recommendationKo:o,reasonKo:`${a} → ${o}`,confidence:n?.9:.7}}],973032),e.s([],493940)},750174,e=>{"use strict";function t(e){return[e.title,e.kind,e.priceLabelKo??"",...e.tags,String(e.attrs.category??""),String(e.attrs.hotelType??""),String(e.attrs.stayType??"")].join(" ").toLowerCase()}e.s(["applyFilterVisibility",0,function(e,n,a){let i="string"==typeof a.category?a.category:"string"==typeof a.hotelType?a.hotelType:null,o="number"==typeof a.maxPriceBand?a.maxPriceBand:null,r="string"==typeof a.near?a.near:"string"==typeof a.stationNear?a.stationNear:null,l=new Date().toISOString();return e.map(e=>{let a;if((a=n.trim().toLowerCase())&&"workspace"!==a&&"*"!==a&&("hotel"===a||"lodging"===a?"hotel"!==e.kind:"restaurant"===a||"eatery"===a?"restaurant"!==e.kind:e.kind!==a&&e.id!==n))return e;let s=!0;if(i&&(s=function(e,n){let a=n.trim().toLowerCase();if(!a)return!0;let i=t(e);return"capsule"===a?e.tags.some(e=>/capsule|stay:capsule|캡슐/i.test(e))||/capsule|캡슐/.test(i)||"capsule"===e.attrs.category||"capsule"===e.attrs.hotelType:"cheap"===a||"budget"===a?null!=e.attrs.priceBand&&2>=Number(e.attrs.priceBand)||/저렴|가성비|cheap|budget|hostel|호스텔/.test(i):i.includes(a)||e.attrs.category===a||e.attrs.hotelType===a}(e,i)),s&&null!=o){let n=e.attrs.priceBand;s=null!=n&&Number.isFinite(Number(n))?Number(n)<=o:/저렴|cheap|budget|가성비/i.test(t(e))}return(s&&r&&(s=t(e).includes(r.toLowerCase())||e.tags.some(e=>e.toLowerCase().includes(r.toLowerCase()))||!!e.attrs.stationNear),e.visible===s)?e:{...e,visible:s,updatedAtIso:l}})}])},602927,762014,e=>{"use strict";var t=e.i(750174),n=e.i(576022);function a(e){let t=[];for(let a of e){let e=("number"==typeof a.attrs.priceWon?a.attrs.priceWon:null)??(0,n.parseWonAmount)(a.priceLabelKo);null!=e&&t.push(e)}return 0===t.length?null:Math.round(t.reduce((e,t)=>e+t,0)/t.length)}function i(e){let t=e.filter(e=>e.visible&&null!=e.lat&&null!=e.lng);return 0===t.length?null:{lat:t.reduce((e,t)=>
21e+t.lat,0)/t.length,lng:t.reduce((e,t)=>e+t.lng,0)/t.length}}function o(e){let n=e.workspace,o=n?n.objects.filter(e=>"hotel"===e.kind):[],l=o.filter(e=>e.visible),s=l.length,c=function(e){if(!e)return"all";let t=e.filters.find(e=>"category"===e.key||"hotelType"===e.key);return"string"==typeof t?.value?t.value:"all"}(n),u=a(l),d=i(l),p="string"==typeof e.intent.parameters.hotelType?e.intent.parameters.hotelType:"string"==typeof e.intent.parameters.category?e.intent.parameters.category:null,m="number"==typeof e.intent.parameters.maxPriceBand?e.intent.parameters.maxPriceBand:null,g="string"==typeof e.intent.parameters.near?e.intent.parameters.near:null,h=[...l],y=c,f={hotelType:c};("filter"===e.intent.action||"modify_context"===e.intent.action)&&(p&&n?(h=(0,t.applyFilterVisibility)(n.objects,"hotel",{category:p}).filter(e=>"hotel"===e.kind&&e.visible),y=p,f.hotelType=p):null!=m&&n&&(h=(0,t.applyFilterVisibility)(n.objects,"hotel",{maxPriceBand:m}).filter(e=>"hotel"===e.kind&&e.visible),f.maxPriceBand=m)),"add_constraint"===e.intent.action&&g&&n&&(h=(0,t.applyFilterVisibility)(n.objects,"hotel",{near:g}).filter(e=>"hotel"===e.kind&&e.visible),f.near=g),"remove_constraint"===e.intent.action&&(h=[...o],y="all",f.hotelType="all");let b=h.length,k=a(h),K=i(h),I=null!=d&&null!=K&&(Math.abs(d.lat-K.lat)>.001||Math.abs(d.lng-K.lng)>.001),v=r(s,b,{universeTotal:o.length,avgPriceDeltaWon:null!=u&&null!=k?k-u:null,locationChanged:I,beforeAvgPriceWon:u,afterAvgPriceWon:k});return{before:{hotelType:c,labelKo:"all"===c?"Hotel Universe":c,visibleHotels:s,universeTotal:o.length,avgPriceWon:u},after:{...f,hotelType:y,labelKo:"capsule"===y?"Capsule Hotel":"all"===y?"Hotel Universe":y,visibleHotels:b,universeTotal:o.length,avgPriceWon:k},impact:v}}function r(e,t,n){let a=null;e>0?a=Math.round((t-e)/e*100):0===t&&(a=0);let i=t-e,o=null!=a&&a<0?`후보 ${Math.abs(a)}% 감소 \xb7 ${e}→${t}`:null!=a&&a>0?`후보 ${a}% 증가 \xb7 ${e}→${t}`:`표시 ${e}→${t}`,r=n?.avgPriceDeltaWon??null;return{visibleHotelsDeltaPct:a,beforeVisibleCount:e,afterVisibleCount:t,summaryKo:o,details:{delta:i,candidatesRemoved:i<0?Math.abs(i):0,universeTotal:n?.universeTotal??null,avgPriceDeltaWon:r,locationChanged:n?.locationChanged??!1,beforeAvgPriceWon:n?.beforeAvgPriceWon??null,afterAvgPriceWon:n?.afterAvgPriceWon??null,priceAvgDecreased:null!=r&&r<0}}}e.s(["analyzeVisibleImpact",0,r,"buildRealityDiffFromIntent",0,o,"formatRealityDiffPreviewKo",0,function(e){let t=String(e.before.hotelType??"all"),n=String(e.after.hotelType??t),a=Number(e.after.visibleHotels??e.impact.afterVisibleCount);return`현재: ${"all"===t?"호텔 전체":t} \xb7 변경 예정: ${"capsule"===n?"캡슐호텔":n} ${a}개 \xb7 ${e.impact.summaryKo}`}],762014),e.s(["analyzeDraftImpact",0,function(e){return o(e).impact},"impactLinesKo",0,function(e){let t=[e.summaryKo];return null!=e.visibleHotelsDeltaPct&&e.visibleHotelsDeltaPct<0&&t.push(`후보 감소 ${e.beforeVisibleCount-e.afterVisibleCount}개`),t}],602927)},21408,e=>{"use strict";var t=e.i(602927);e.s(["assertNoRealityCommitFromAgent",0,function(e){if("commit"===e||"reality_commit"===e||"globe_commit"===e||"stamp_globe"===e)throw Error("Workspace Reality Agent: Reality Commit forbidden — Draft / Request Apply only")},"validateWorkspaceAgentImpact",0,function(e){return/commit|지구에|커밋|확정\s*결제/iu.test(e.utterance)||"commit"===e.proposal.draft.intent.action?{ok:!1,reasonKo:"Reality Commit은 Agent가 할 수 없어요 · Field에서만 가능",impactSummaryKo:null,realityCommitBlocked:!0}:"proposed"!==e.proposal.draft.status?{ok:!1,reasonKo:"Draft가 proposed 상태가 아니에요",impactSummaryKo:null,realityCommitBlocked:!0}:{ok:!0,reasonKo:"Draft Impact 검증 통과 · 적용은 사용자 승인 후",impactSummaryKo:(0,t.impactLinesKo)(e.proposal.draft.impact).join(" · "),realityCommitBlocked:!0}}])},453518,e=>{"use strict";e.s(["tryRunContextNlActionAsync",()=>X],453518),e.i(784565);var t=e.i(868268),n=e.i(900396),a=e.i(58584),i=e.i(383999),o=e.i(257673),r=e.i(607427),l=e.i(914394),s=e.i(902308),c=e.i(316120),u=e.i(971715),d=e.i(565354),p=e.i(264226),m=e.i(381251),g=e.i(689295),h=e.i(155271),y=e.i(671284),f=e.i(23105),b=e.i(265340),k=e.i(974235),K=e.i(875323),I=e.i(471580),v=e.i(284075),x=e.i(842064),_=e.i(335212),w=e.i(586797),C=e.i(440840),S=e.i(540422),T=e.i(944217);e.i(945073);
21var L=e.i(111),E=e.i(966801),P=e.i(155120),A=e.i(751159),$=e.i(8310);e.i(241742);var j=e.i(657610),R=e.i(822149),D=e.i(584766),M=e.i(893266),W=e.i(452361),O=e.i(299795),N=e.i(928942),F=e.i(443738),B=e.i(509946),U=e.i(303456),q=e.i(183656);e.i(621914),e.i(493940),e.i(427861);var H=e.i(677541);e.i(542368),e.i(21408),e.i(783503),e.i(973032);var z=e.i(349581);function G(e){let t=new Set,n=(0,w.readContextConditionLastBatch)(e);for(let e of n?.recommendations??[]){let n=e.placeId?.trim();n&&t.add(n)}let a=(0,S.readGlobeProjectionLayerPolicy)();if(a.activeContextEventId===e.trim())for(let e of a.visiblePlaceIds){let n=e.trim();n&&t.add(n)}return[...t]}function J(e){let i=e.contextEventId.trim(),o=e.graph??(0,d.ensureSessionGraph)({contextEventId:i}),r=(0,n.readLastContextPack)(i)?.lodgingDiff??null,l=(0,a.resolveLodgingDiffForPack)({contextEventId:i,graph:o,previous:r}),s=(0,t.buildContextPack)({utterance:e.utterance,graph:o,discoveryPlaceIds:G(i),lodgingDiff:l});return(0,n.writeLastContextPack)(s),s}function V(e){let t=(0,U.publishShortToolPlanPreview)({utterance:e.utterance,contextEventId:e.contextEventId});return t&&Q(e.visited,"action_planner"),t}function Q(e,t){e.includes(t)||e.push(t)}function Y(e){Q(e,"intent_parser"),Q(e,"intent_compiler")}async function Z(e){var S,U,Z;let X,ee,et,en,ea,ei,eo=(0,D.parseNlIntentChain)(e.utterance),er=(0,D.shouldRunMultiIntentPlanner)(eo),el={...e,utterance:er?e.utterance.trim().replace(/\s+/gu," "):(0,R.normalizeNlNegation)(e.utterance)},es=[],ec=el.contextEventId.trim();(0,i.spineIngressFromLegacy)({source:"context-run",contextEventId:ec,utterance:el.utterance,stage:"goal_state"}),Q(es,"context_builder");let eu=(X=el.contextEventId.trim(),ee=(0,d.readSessionGraph)(X),et=(0,n.readLastContextPack)(X)?.lodgingDiff??null,en=(0,a.resolveLodgingDiffForPack)({contextEventId:X,graph:ee,previous:et}),ea=(0,t.buildContextPack)({utterance:el.utterance,graph:ee,discoveryPlaceIds:G(X),lodgingDiff:en}),(0,n.writeLastContextPack)(ea),ea);Q(es,"rule_constitution");let ed=(0,L.evaluateUtteranceRules)({utterance:el.utterance,graph:(0,d.readSessionGraph)(ec)}),ep=(0,E.gateRuleDecisionForExecution)({decision:ed,utterance:el.utterance});if(!ep.allow){let e,t,n;return Y((S={contextEventId:ec,pack:eu,ruleDecision:ed,visited:es,gate:ep,utterance:el.utterance}).visited),t="blocked"===S.gate.kind?"rule_blocked":"clarify",n=S.ruleDecision.clarify,"clarify"===t&&n?.kind==="clarify"&&n.chips.length>0&&(e=n.chips,(0,A.writeClarifyLessPending)(S.contextEventId,{originalUtterance:S.utterance,intentLabelKo:S.ruleDecision.intent,candidateIds:n.candidates.map(e=>e.id),atIso:new Date().toISOString()})),{result:{ok:!0,via:t,contextEventId:S.contextEventId,assistantReplyKo:S.gate.assistantReplyKo,reservedOpIds:[],waitingCommit:!1,ruleDecision:S.ruleDecision,contextPack:S.pack,..."clarify"===t?{clarifyChips:e}:{}},trace:{stagesVisited:S.visited,ruleDecision:S.ruleDecision,contextPack:S.pack}}}let em=(U=el.utterance,{intentFrame:(ei=(0,B.runNlIntentCompilerStage)(U)).intentFrame,intentWorkLogKo:ei.workLogKo});if(!er){let e=(0,P.tryRunSoftSurfaceCommand)({utterance:el.utterance,graph:(0,d.readSessionGraph)(ec),contextEventId:ec,contextLabelKo:el.contextLabelKo});if(e)return Y(es),Q(es,"tool_router"),e.waitingCommit&&Q(es,"agent_runtime"),{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:e.assistantReplyKo,reservedOpIds:e.reservedOpIds??[],waitingCommit:e.waitingCommit??!1,mapsUrl:e.mapsUrl,softKind:e.kind,ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}if((0,O.readPendingContextCreate)(ec)){if((0,W.isPendingContextCreateCancel)(el.utterance))return(0,O.clearPendingContextCreate)(ec),Y(es),{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:"나중에 만들게요",reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}};if((0,W.isPendingContextCreateApprove)(el.utterance)){let e=(0,M.commitPendingContextCreate)({graphId:ec,handlers:{openPortal:()=>{},openFieldDiscovery:()=>{},tryQuickListMarket:async()=>!1,navigateUrl:()=>{}}});
21return Y(es),Q(es,"graph_engine"),{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:e?"맥락을 만들었어요":"맥락을 만들지 못했어요",reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}let e=(0,N.tryPatchPendingContextCreate)({utterance:el.utterance,contextEventId:ec,ruleDecision:ed,pack:eu});if(e)return Y(es),{result:e,trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}{let e=(0,j.tryResolvePendingCreateProject)({utterance:el.utterance,contextEventId:ec,ruleDecision:ed,pack:eu});if(e)return Y(es),{result:e,trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}{let e=(0,j.tryRunIntentRouterSoftCreateOffer)({utterance:el.utterance,contextEventId:ec,ruleDecision:ed,pack:eu});if(e)return Y(es),{result:e,trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}{let e=(0,j.tryRunIntentRouterHardCreateOpen)({utterance:el.utterance,contextEventId:ec,ruleDecision:ed,pack:eu});if(e)return Y(es),Q(es,"agent_runtime"),{result:e,trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}{let e=(0,$.tryRunNlContextCreateOffer)({utterance:el.utterance,contextEventId:ec,ruleDecision:ed,pack:eu});if(e)return Y(es),{result:e,trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}let eg=(0,o.isCompoundActionUtterance)(el.utterance);if((0,x.readLodgingStayRevisePending)(ec)){if((0,_.isLodgingStayReviseRejectUtterance)(el.utterance)){let e=(0,v.cancelLodgingStayRevisePending)(ec);return Y(es),{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:e,reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}if((0,_.isLodgingStayReviseAffirmUtterance)(el.utterance)){let e=(0,v.applyLodgingStayRevisePending)({contextEventId:ec});return(Y(es),Q(es,"graph_command_ir"),Q(es,"graph_engine"),Q(es,"reality_graph"),e.ok)?((0,I.bumpSessionGraphProjection)(ec),{result:{ok:!0,via:"revise_applied",contextEventId:ec,assistantReplyKo:k.copy.globe.lodgingStayReviseApplied(e.summaryKo),reservedOpIds:[],waitingCommit:!1,requestDiffRescout:!0,skipFeedGate:!0,ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}):{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:e.messageKo,reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}}{let e=(0,m.tryRunReviseCommand)({utterance:el.utterance,contextEventId:ec});if(e)return Y(es),Q(es,"graph_command_ir"),"revise_confirm"===e.via&&Q(es,"graph_engine"),{result:{...e,ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}if((0,b.readSoftConfirmPending)(ec)){if((0,f.isSoftConfirmRejectUtterance)(el.utterance)){let e=(0,y.cancelSoftConfirmPending)(ec);return Y(es),{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:e,reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}if((0,f.isSoftConfirmAffirmUtterance)(el.utterance)){let e=(0,y.applySoftConfirmPending)({contextEventId:ec,anchorLat:el.anchorLat,anchorLng:el.anchorLng,contextLabelKo:el.contextLabelKo});return Y(es),Q(es,"graph_command_ir"),Q(es,"graph_engine"),Q(es,"reality_graph"),{result:{ok:!0,via:"soft_command",contextEventId:ec,assistantReplyKo:e.ok?k.copy.globe.softConfirmApplied(e.summaryKo):e.messageKo,reservedOpIds:[],waitingCommit:!1,mapsUrl:null,softKind:"navigate",ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}}if(!eg&&"Revise"!==(0,C.classifyIntentFamily)(el.utterance)&&((0,r.shouldDeferSearchProjectToDiscoveryScout)(el.utterance,ec)||function(e,t,n){if("price"!==(0,l.parsePalantirFacetFromMessage)(e)||null!=(0,s.parseMaxNightlyPriceKrw)(e))return!1;let a=(0,w.readContextConditionLastBatch)(t);return!!(n.lodgingDiff?.lastBatchId||a?.recommendations?.some(e=>"lodging"===e.kind))}(el.utterance,ec,eu))){Y(es);let e=V({utterance:el.utterance,contextEventId:ec,visited:es});return{result:(0,K.buildScoutHandoffResult)({contextEventId:ec,ruleDecision:ed,pack:eu,utterance:el.utterance,...e?{actionPlan:e}:{}}),trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,deferredToScout:!0,...em}}}if(eg){let e;Q(es,"entity_resolver"),Y(es),Q(es,"action_planner");let t=await (0,H.runAgentController)({utterance:el.utterance,contextEventId:ec,anchorLat:el.anchorLat,anchorLng:el.anchorLng,contextLabelKo:el.contextLabelKo,history:function(e){if(null!=e.history)return e.history;let t=(0,z.readWorkspaceChat)(e.contextEventId);return 0===t.length?null:t.slice(-12).map(e=>({role:e.role,content:e.text}))}(el),currentPlan:(e=(0,F.readActionPlanUi)())&&e.contextEventId===ec.trim()?e:null,useLlm:!0,maxIterations:3}),n=t.ok?t.run:await (0,q.tryRunActionPlannerAsync)(el);if(n){Q(es,"tool_router"),Q(es,"graph_command_ir"),Q(es,"graph_engine"),Q(es,"agent_runtime");let e=!1!==n.plan.requiresFieldCommit&&(!!n.waitingCommit||n.reservedOpIds.length>0||n.plan.steps.some(e=>"wait_commit"===e.kind||"booking.prepare"===e.toolId||e.graphCommand?.op==="reserve_prep"))||(0,E.ruleRequiresFieldCommit)(ed,n.reservedOpIds);e&&Q(es,"reality_commit"),Q(es,"reality_graph"),Z={utterance:el.utterance,contextEventId:ec,contextLabelKo:el.contextLabelKo,planned:n,waitingCommit:e},(0,F.writeActionPlanUi)(Z.planned.plan,{waitingCommit:Z.waitingCommit,requestFieldOpen:Z.waitingCommit}),(0,I.bumpSessionGraphProjection)(Z.contextEventId),(0,T.syncRealityPipelineAfterOperationChange)({contextEventId:Z.contextEventId,utterance:Z.utterance,contextLabelKo:Z.contextLabelKo??null,destinationLabelKo:Z.contextLabelKo??null});let a=J({utterance:el.utterance,contextEventId:ec,graph:(0,d.readSessionGraph)(ec)});return{result:{ok:!0,via:"action_plan",contextEventId:ec,assistantReplyKo:t.ok&&"ask_user"===t.decision.type?t.assistantReplyKo:n.assistantReplyKo,reservedOpIds:n.reservedOpIds,actionPlan:n.plan,waitingCommit:e,ruleDecision:ed,contextPack:a},trace:{stagesVisited:es,ruleDecision:ed,contextPack:a,...em}}}}Q(es,"entity_resolver"),Y(es);let eh=null;{let e=(0,u.parseGraphCommands)(el.utterance,(0,d.readSessionGraph)(ec));e[0]?.op==="search_project"&&(eh=eg?null:V({utterance:el.utterance,contextEventId:ec,visited:es}),Q(es,"tool_router"))}Q(es,"graph_command_ir");let ey=(0,p.tryRunMoveContextCommand)({utterance:el.utterance,contextEventId:ec,anchorLat:el.anchorLat,anchorLng:el.anchorLng});if(ey){Q(es,"graph_engine"),Q(es,"reality_graph");let e=J({utterance:el.utterance,contextEventId:ec,graph:ey.graph});return{result:{...ey,via:"graph_command",waitingCommit:!1,ruleDecision:ed,contextPack:e},trace:{stagesVisited:es,ruleDecision:ed,contextPack:e,...em}}}{let e=await (0,h.tryApplyWorkspaceLodgingTurn)({utterance:el.utterance,contextEventId:ec});if(e.handled)return Q(es,"graph_engine"),{result:{ok:!0,via:"workspace",contextEventId:ec,assistantReplyKo:e.replyKo??"워크스페이스를 바꿨어요",reservedOpIds:[],waitingCommit:!1,workspaceCommitted:e.committed,openedForReview:!0===e.openedForReview,ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}{let e=(0,g.tryRunSoftConfirmCommand)({utterance:el.utterance,contextEventId:ec,anchorLat:el.anchorLat,anchorLng:el.anchorLng});if(e)return{result:{...e,ruleDecision:ed,contextPack:eu},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}let ef=await (0,c.tryRunGraphCommandOsAsync)(el);if(!ef){Y(es);let e=(0,K.recoverUnmatchedNlTurn)({utterance:el.utterance,contextEventId:ec,ruleDecision:ed,pack:eu,graph:(0,d.readSessionGraph)(ec)});return{result:{ok:!0,via:e.via,contextEventId:ec,assistantReplyKo:e.assistantReplyKo,reservedOpIds:[],waitingCommit:!1,ruleDecision:ed,contextPack:eu,clarifyChips:e.clarifyChips},trace:{stagesVisited:es,ruleDecision:ed,contextPack:eu,...em}}}Q(es,"graph_engine");let eb=(0,E.ruleRequiresFieldCommit)(ed,ef.reservedOpIds);ef.reservedOpIds.length>0&&Q(es,"agent_runtime"),eb&&(Q(es,"reality_commit"),ef.reservedOpIds.length>0&&(0,T.syncRealityPipelineAfterOperationChange)({contextEventId:ec,utterance:el.utterance,contextLabelKo:el.contextLabelKo??null,destinationLabelKo:el.contextLabelKo??null})),Q(es,"reality_graph");let ek=J({utterance:el.utterance,contextEventId:ec,graph:ef.graph});return(0,I.bumpSessionGraphProjection)(ec),{result:{...ef,via:"graph_command",waitingCommit:eb,ruleDecision:ed,contextPack:ek,...eh?{actionPlan:eh}:{}},trace:{stagesVisited:es,ruleDecision:ed,contextPack:ek,...em}}}async function X(e){return(await Z(e)).result}},941441,e=>{"use strict";e.s([]),e.i(257673),e.i(683266),e.i(183656),e.i(453518),e.i(454180),e.i(925210),e.i(584766),e.i(635564),e.i(725506),e.i(272120),e.i(303456),e.i(341722)},212261,450888,299279,998155,866311,822384,547487,e=>{"use strict";e.s(["isWorkspaceAgentWorkUtterance",()=>j],212261),e.i(20957);var t=e.i(804250),n=e.i(931544),a=e.i(305125),i=e.i(36824);e.i(941441);var o=e.i(257673),r=e.i(683266),l=e.i(350534),s=e.i(676751),c=e.i(219466),u=e.i(167604);function d(e){let t=e.trim();return!(!t||(0,s.isInstantLodgingSearch)(t)||(0,c.isInstantEaterySearch)(t))&&!!((0,r.isTripPrepUtterance)(t)||(0,u.extractTravelDestination)(t)&&((0,u.isLightTripGoUtterance)(t)||(0,u.isTravelTripAnnouncement)(t)))&&(0,l.isGlobeIngressEligible)(t)}e.s(["isNewTripGlobeIngressUtterance",0,d],450888);var p=e.i(421610),m=e.i(352018),g=e.i(141208);let h="rimvio.portal-compose-run.v1",y=null;function f(e){try{let t=sessionStorage.getItem(h);if(!t)return null;let n=JSON.parse(t);if(e?.trim()&&n.graphId!==e.trim())return null;return y=n,n}catch{return null}}e.s(["clearPortalComposeRunState",0,function(e){if(!e?.trim()||y?.graphId===e.trim()){y=null;try{sessionStorage.removeItem(h)}catch{}}},"readPortalComposeRunState",0,f,"writePortalComposeRunState",0,function(e){y=e;try{sessionStorage.setItem(h,JSON.stringify(e))}catch{}}],299279);let b="rimvio.globe-chat.graph-id.v1";function k(){let e=f()?.graphId?.trim();if(e)return e;let t=(0,g.readActiveRunState)()?.graphId?.trim();if(t)return t;try{return sessionStorage.getItem(b)?.trim()||null}catch{return null}}e.s(["ensureGlobeChatGraphId",0,function(){let e=k();if(e)return(0,g.ensureRunState)({graphId:e,goal:(0,g.readActiveRunState)()?.goal?.trim()||f()?.composeSeed?.trim()||""}),e;let t=`composer:ambient:${Date.now().toString(36)}`;try{sessionStorage.setItem(b,t)}catch{}return(0,g.ensureRunState)({graphId:t,goal:""}),t},"readGlobeChatGraphId",0,k],998155);var K=e.i(560231);function I(e){let t=(0,K.readGlobeChatMessages)(e);for(let e=t.length-1;e>=0;e-=1){let n=t[e];if(!n||"text"!==n.kind||"user"!==n.role)continue;let a=(0,u.extractTravelDestination)(n.text);if(a?.trim())return a.trim()}return null}function v(e,t){let n=(0,u.extractTravelDestination)(e);if(n?.trim())return n.trim();let a=[],i=e=>{let t=e?.trim();t&&!a.includes(t)&&a.push(t)};for(let n of(i(t),i(k()),i((0,m.resolveActiveComposerGraphId)(e)),a)){let e=I(n);if(e)return e}for(let e of(0,K.listGlobeChatSessionGraphIds)()){let t=I(e);if(t)return t}return null}e.s(["resolveRecentTravelDestinationHint",0,v],866311);
21let x=/(?:너가|니가|네가|알아서|대신)\s*(?:계획|일정|동선|플랜)?\s*(?:을\s*)?(?:세워|짜|만들|준비|구성하|실행하|돌려|진행해)|(?:계획|일정|동선|플랜).{0,24}(?:세워|짜|만들|준비|구성)|(?:세워|짜|만들|준비|계획하|구성하|실행하|돌려|진행해)\s*(?:줘|주세요|봐|달라)|(?:해\s*줘|해줘)|plan\s*(?:it|this|for\s*me)|set\s*(?:it\s*)?up|build\s*(?:a\s*)?(?:plan|itinerary)/iu;function _(e){let t=e.trim();return!!t&&!!x.test(t)&&(!!((0,p.hasActiveWorkspaceForGlobePrompt)()||(0,u.extractTravelDestination)(t)||/(?:여행|출장|트립|trip|일정|계획|동선|플랜)/iu.test(t)||v(t))||/(?:계획|일정|동선|여행).{0,24}(?:세워|짜|만들)|(?:세워|짜|만들).{0,16}(?:계획|일정|동선|여행)/iu.test(t))}e.s(["isAgentExecuteVerbUtterance",0,_],822384);let w=/(?:쿠팡|coupang).{0,40}(?:사|주문|장바구니|열어|검색)|(?:사|주문|시켜|열어|검색).{0,24}(?:쿠팡|coupang)|(?:생수|휴지).{0,16}(?:사|주문|시켜)|물\s*(?:좀\s*)?(?:사|주문|시켜)|다시\s*사(?:줘|주세요)?|(?:사줘|사\s*주세요|주문해(?:줘|주세요)?|장바구니에?\s*담)/iu;function C(e){let t=e.trim();return!!t&&w.test(t)}function S(e){let t=e.trim();return/생수/u.test(t)||/(?:^|[\s,])물(?:\s+좀)?\s*(?:사|주문|시켜)/u.test(t)?"생수 구매":/휴지/u.test(t)?"휴지 구매":"구매"}function T(e){let t=S(e);return"생수 구매"===t?"생수":"휴지 구매"===t?"휴지":e.replace(/쿠팡|coupang|에서|좀|사줘|사주세요|주문해줘|주문해|주문|시켜줘|시켜|열어줘|열어|검색해|찾아줘|찾아/giu," ").replace(/[을를이가은는]\s*$/u,"").replace(/\s+/g," ").trim().slice(0,48)||"생수"}e.s(["extractPcPurchaseQuery",0,T,"extractPcPurchaseTitle",0,S,"isPcAgentCheckoutUrl",0,function(e){try{let t=new URL(e),n=`${t.hostname}${t.pathname}${t.search}`;return/checkout|payment|pay\.coupang|order\/pay|billing|3d.?secure/i.test(n)}catch{return!0}},"isPcPurchaseContinuityUtterance",0,C,"resolvePcPurchaseOpenUrl",0,function(e){let t=T(e);return`https://www.coupang.com/np/search?q=${encodeURIComponent(t)}`}],547487);var L=e.i(180755);let E=/(?:호텔|숙소|캡슐|료칸|게스트|모텔).*(?:찾아|보여|검색|바꿔|다시|추천)|(?:찾아|보여|검색|추천).*(?:호텔|숙소)|더\s*싸|가성비|저렴|역\s*근처|온천/iu,P=/(?:맛집|식당|카페|먹을\s*곳).*(?:찾아|보여|검색|추천)|(?:찾아|보여|검색|추천).*(?:맛집|식당|카페)/iu,A=/(?:놀거리|관광|명소|가봐야|꼭\s*가\s*봐|가볼만).*(?:찾아|보여|검색|추천)|(?:찾아|보여|검색|추천).*(?:놀거리|관광|명소)|꼭\s*가\s*봐야\s*할\s*곳|가봐야\s*할\s*곳|must.?visit/iu,$=/^(?:맛집|호텔|숙소|카페|놀거리|관광|명소|티켓)(?:도|만|은|은요)?[!?.]*$|USJ\s*근처|유니버설\s*근처|(?:후쿠오카|도쿄|오사카|제주|교토|상하이|상해).{0,8}(?:로|으로)\s*(?:바꿔|변경|가)|(?:3|2|4|5)\s*개만|가성비|더\s*싸|꼭\s*가\s*봐야|가봐야/iu;function j(e){let r=e.trim();return!(!r||C(r)||/(?:가|은|는)?\s*뭐야|[??]\s*$|(?:을|를)?\s*설명해(?:\s*줘)?|tell\s+me\s+about|what\s+is\b|what'?s\b/iu.test(r)&&!/(?:찾|예약|준비|더\s*싸|필터|골라|넣어|빼)/iu.test(r))&&!!(d(r)||_(r)||/(?:노선도|노선망|지하철|메트로|전철|신칸센|JR|地铁|港鐵|mtr|mrt).{0,12}(?:보여|깔|켜|표시|띄워|올려|찾아)|(?:보여|깔|켜|표시|띄워|올려|찾아).{0,12}(?:노선도|노선|지하철|메트로|地铁)/iu.test(r)||(0,t.parseWorkspacePatch)(r)||(0,n.parseWorkspaceRealityPatch)(r)||(0,a.parseLodgingStayTypeFromText)(r)||(0,i.isSpatialDiscoveryUtterance)(r)||(0,o.isCompoundActionUtterance)(r)||E.test(r)||P.test(r)||A.test(r)||/동선\s*(?:짜|만들|최적화|보여)|일정\s*(?:짜|세워|만들)|여행\s*준비|prep\s*(?:the\s*)?trip|plan\s*(?:a\s*)?(?:route|days|itinerary)|find\s+(?:hotels?|food)/iu.test(r)||"travel"===(0,L.classifyWorkspaceKind)(r)||"driver"===(0,L.classifyWorkspaceKind)(r)||"used_goods"===(0,L.classifyWorkspaceKind)(r)||(0,p.hasActiveWorkspaceForGlobePrompt)()&&$.test(r))}},773222,50937,469661,78187,e=>{"use strict";e.s(["runWorkspaceAgentLoop",()=>es],773222),e.i(20957);var t=e.i(80933),n=e.i(804250),a=e.i(205592),i=e.i(301008),o=e.i(421610),r=e.i(36824),l=e.i(155271);e.i(187403);var s=e.i(376875),c=e.i(305125),u=e.i(152719),d=e.i(429105),p=e.i(511783),m=e.i(186634),g=e.i(229563),h=e.i(212261);e.s(["looksLikeAgentFreeTalk",()=>Z],78187);let y=[{term:"ㄱㅇㅇ",meaningKo:"귀여워",topic:"mood_up"},{term:"어쩔티비",meaningKo:"어쩌라고(가벼운 무시·반박)",topic:"filler"},{term:"알잘딱깔센",meaningKo:"알아서 잘 딱 깔끔하고 센스 있게",topic:"mood_up"},{term:"오히려 좋아",meaningKo:"전화위복, 오히려 잘된 상황",topic:"mood_up"},{term:"오히려좋아",meaningKo:"전화위복, 오히려 잘된 상황",topic:"mood_up"},{term:"ㅇㅈ",meaningKo:"인정(강한 동의)",topic:"ack"},{term:"잼민이",meaningKo:"철없는·귀여운 대상을 가볍게 지칭",topic:"catch_up"},{term:"내또출",meaningKo:"내일 또 출근(퇴근 무렵 애환)",topic:"time_state"},{term:"반모",meaningKo:"반말 모드(친구처럼 반말하기)",topic:"greeting"},{term:"갓생",meaningKo:"God+생, 생산적이고 모범적인 삶",topic:"mood_up"},{term:"스불재",meaningKo:"스스로 불러온 재앙(자조)",topic:"mood_down"},{term:"킹받네",meaningKo:"열받네의 강조",topic:"mood_down"},{term:"킹받",meaningKo:"열받네의 강조",topic:"mood_down"},{term:"꿀잼",meaningKo:"매우 재미있음",topic:"mood_up"},{term:"노잼",meaningKo:"재미없음",topic:"mood_down"},{term:"현타",meaningKo:"현실 자각 타임(허탈)",topic:"mood_down"},{term:"일코",meaningKo:"일반인 코스프레(취향 숨기기)",topic:"catch_up"}];function f(e){let t=e.trim();if(!t)return null;let n=null;for(let e of y)t.includes(e.term)&&(!n||e.term.length>n.term.length)&&(n=e);return n}let b=/[ㄱ-ㅎ]{2,}/u,k=/^[ㅋㅎ]+$/u;function K(e){let t=e.trim();if(!t||t.length>12||f(t))return!1;let n=t.match(b);return!!n&&!!n[0]&&!k.test(n[0])}e.s(["detectSlangTopic",0,f,"extractUnknownSlangTerm",0,function(e){let t=e.trim(),n=t.match(b);return n&&n[0]?n[0]:t.length<=16?t:t.slice(0,16)},"looksLikeUnknownSlang",0,K],50937);let I=/찾|검색|추천|어디|근처|주변|가까운|가볼|가고\s*싶|데려|예약|알려줘|알려줄|보여줘|호텔|숙소|약국|편의점|병원|명소|스팟|nearby|search|find|hotel/iu,v=/^(안녕|안뇽|하이|한녕|헬로|hello|hi+|hey|ㅎㅇ|여보세요|반가|방가|굿모닝|good\s*morning|좋은\s*아침)/iu,x=/(고마|감사|ㄳ|ㄱㅅ|thank|thx|thanks)/iu,_=/(잘\s*가|잘\s*있|바이|bye|굿바이|잘자|잘\s*자|good\s*night)/iu,w=/(뭐\s*해|뭐\s*할\s*수|뭐할수|누구|정체|어떤\s*걸|무엇을|무슨\s*일\s*해|할\s*수\s*있|기능|도움\s*줄|도와줄|help|who\s*are\s*you|what\s*can\s*you)/iu,C=/(덥|더워|더운|폭염|무더|찜통)/iu,S=/(춥|추워|추운|한파|쌀쌀|영하)/iu,T=/(비\s*와|비\s*온|비\s*오|비가|장마|소나기|우산)/iu,L=/(눈\s*와|눈\s*온|눈\s*오|폭설|함박눈)/iu,E=/(미세먼지|초미세|공기|매연|황사)/iu,P=/(날씨|맑네|맑다|흐리|습하|건조|바람\s*많|태풍)/iu,A=/(기온|온도|체감\s
21*온도|몇\s*도|temperature|temp\b|날씨\s*어때|날씨\s*알려|지금\s*날씨|현재\s*날씨)/iu,$=/(배\s*고|배고|출출|허기|야식)/iu,j=/(당기네|당긴|당겨|당김|땡기|입맛)/iu,R=/(뭐\s*먹지|뭐먹지|뭐\s*먹을|뭐먹을|뭐\s*먹나|점심\s*뭐|저녁\s*뭐|아침\s*뭐|메뉴\s*고민|뭐\s*먹|뭐먹)/iu,D=/(대박|신난|신나|짱|최고|행복|뿌듯|잘\s*됐|잘됐|잘\s*풀|합격|붙었|성공|일찍\s*끝|칼퇴|개꿀|기분\s*좋|기분\s*최고|룰루)/iu,M=/(속상|우울|짜증|빡쳐|빡침|화나|화남|망했|망함|최악|눈물|서럽|서러|현타|현자타임|힘들었|지쳤|지친|번아웃|멘붕|슬프|슬퍼|외로|실수|실패|아쉽)/iu,W=/(피곤|졸리|졸려|나른|기운\s*없|힘드네|힘들다|축\s*처|귀찮)/iu,O=/(벌써\s*시간|시간\s*빨|시간이\s*왜|벌써\s*이렇게|하루\s*가)/iu,N=/(주말|불금|불토|토요일|일요일)/iu,F=/(월요일|월요병|한\s*주\s*시작|출근하기\s*싫)/iu,B=/(금요일)/iu,U=/(별일\s*없|잘\s*지내|요즘\s*어때|요즘\s*뭐|심심|드라마|영화\s*봤|영화\s*보|재밌더|재밌어|재밌었|본\s*거\s*있|뭐하고\s*지내)/iu,q=/^(ㅇㅋ|오케이|오키|ok|okay|굿|good|좋아|좋아요|나이스|nice|ㄱㄱ|고고|ㅇㅇ|응|넵|넹|알겠|알았|👍)/iu,H=/^(ㅋ+|ㅎ+|😂|🤣|😊|🙂|헐|와+|우와|대박|음+|흠+)$/u,z=/😤|😡|🤬|😭|😢|😞|😩|😥|ㅠㅠ|ㅜㅜ/u,G=/😂|🤣|😄|😆|😊|🥳|😍|🤩/u,J={greeting:"반가워요 🙂",thanks:"천만에요!",farewell:"네, 또 봐요!",capability:"제가 도울 수 있어요 🙂",weather:"날씨가 그렇죠.",time_state:"오늘 하루도 고생 많았어요.",food:"뭔가 당기는 시간이죠 😋",mood_up:"오, 좋은데요! 😄 무슨 좋은 일이에요?",mood_down:"저런.. 무슨 일 있었어요? 🥺",catch_up:"오 그래요? 🙂",ack:"👍 인정이요!",filler:"ㅎㅎ 그쵸.",slang_unknown:"그거 요즘 쓰는 말이에요? 무슨 뜻인지 알려주면 잘 기억해둘게요 🙂 어떤 상황에서 쓰는 거예요?"};function V(e){var t,n;let a,i,o=e.text.trim();if(!o||o.length>48||I.test(o))return null;let r=(t=e.region,t?.trim()||""),l=(a=(n=e.now??new Date).getDay(),{isMorning:(i=n.getHours())>=5&&i<10,isLunch:i>=11&&i<14,isEvening:i>=17&&i<21,isLateNight:i>=23||i<5,isWeekend:0===a||6===a,isMonday:1===a,isFriday:5===a});if(v.test(o)){let e=l.isLateNight?"늦은 시간이네요":l.isMorning?"좋은 아침이에요":"안녕하세요";return{topic:"greeting",replyKo:r?`${e}! 지금 ${r} 보고 있어요. 가고 싶은 곳이나 하고 싶은 게 있으면 편하게 말해줘요 🙂`:`${e}! 가고 싶은 곳이나 하고 싶은 게 있으면 편하게 말해줘요 🙂`}}if(x.test(o))return{topic:"thanks",replyKo:"천만에요! 더 찾아드릴 거 있으면 말해줘요 🙂"};if(_.test(o))return{topic:"farewell",replyKo:"네, 좋은 시간 보내세요! 필요하면 언제든 불러줘요 👋"};if(w.test(o))return{topic:"capability",replyKo:r?`저는 ${r} 지도에서 맥락에 맞는 곳을 찾아 바로 꽂아드려요. 예: "놀거리", "조용한 카페", "근처 약국"`:'저는 지도에서 맥락에 맞는 곳을 찾아 바로 꽂아드려요. 예: "놀거리", "조용한 카페", "근처 약국"'};if(A.test(o))return null;if(C.test(o))return{topic:"weather",suggestsSearch:!0,replyKo:"오늘 진짜 덥죠 🥵 시원한 데서 쉬어가요. '근처 카페'라고 하면 바로 찾아드릴게요."};if(S.test(o))return{topic:"weather",suggestsSearch:!0,replyKo:"많이 춥네요 🥶 따뜻한 데 있고 싶어지죠. '근처 카페'라고 하면 찾아드릴게요."};if(T.test(o))return{topic:"weather",suggestsSearch:!0,replyKo:"비 오는 날은 괜히 차분해지죠 ☔ 실내에서 쉬기 좋은 곳 찾아드릴까요? '근처 카페'라고 해줘요."};if(L.test(o))return{topic:"weather",replyKo:"눈 오네요 ❄️ 길 미끄러우니 조심히 다녀요."};if(E.test(o))return{topic:"weather",suggestsSearch:!0,replyKo:"공기가 영 별로네요 😷 오늘은 실내가 나을 것 같아요. '근처 카페' 찾아드릴까요?"};if(P.test(o))return{topic:"weather",replyKo:"날씨 얘기 나오면 괜히 반갑네요 🙂 오늘 하루 어때요?"};if($.test(o)||j.test(o)||R.test(o)){let e=$.test(o)?"많이 출출하시군요 😋":j.test(o)?"오늘따라 뭔가 당기시나 봐요 😋":"맛있는 거 고민 중이시군요 😋",t=l.isLunch?" 딱 점심때네요.":"";return{topic:"food",suggestsSearch:!0,replyKo:`${e}${t} '근처 맛집'이나 '카페'라고 하면 바로 찾아드릴게요.`}}if(D.test(o))return{topic:"mood_up",replyKo:"우와, 잘됐네요! 🎉 좋은 일은 나눌수록 커지죠 😄"};if(M.test(o))return{topic:"mood_down",replyKo:"저런.. 무슨 일 있었어요? 🥺 얘기하고 싶으면 편하게 말해줘요."};if(F.test(o)||W.test(o)&&l.isMonday)return{topic:"time_state",replyKo:"월요일이네요, 이번 주도 파이팅! 💪"};if(B.test(o)||o.includes("불금")&&l.isFriday)return{topic:"time_state",replyKo:"불금이네요! 🎉 오늘 저녁은 뭔가 특별하게 보내요."};if(N.test(o)||o.includes("좋다")&&l.isWeekend)return{topic:"time_state",replyKo:"주말엔 역시 여유가 최고죠 🙂 푹 쉬면서 충전해요."};if(W.test(o))return{topic:"time_state",replyKo:l.isLateNight?"늦게까지 고생 많네요 🥺 무리하지 말고 얼른 쉬어요.":"오늘 많이 피곤하셨나 봐요 🥺 잠깐 쉬어가도 괜찮아요."};if(O.test(o))return{topic:"time_state",replyKo:"그러게요, 시간 진짜 빠르네요 ⏰ 오늘 하루 잘 마무리해요."};if(U.test(o))return{topic:"catch_up",replyKo:"오랜만에 이런 얘기 좋네요 🙂 요즘 어떻게 지내요?"};let s=f(o);return s?{topic:s.topic,replyKo:J[s.topic]}:q.test(o)?{topic:"ack",replyKo:"👍 준비됐어요. 어떤 곳 찾아볼까요?"}:H.test(o)?{topic:"filler",replyKo:"ㅎㅎ 필요한 거 있으면 편하게 말해줘요 🙂"}:z.test(o)?{topic:"mood_down",replyKo:J.mood_down}:G.test(o)?{topic:"mood_up",replyKo:J.mood_up}:K(o)?{topic:"slang_unknown",replyKo:J.slang_unknown}:null}e.s(["resolveSmallTalk",0,V],469661);let Q=/(?:호텔|숙소|맛집|카페|식당|약국|편의점|명소|관광|찾아|검색|보여|예약|준비|비교|빼\s*줘|넣어|커밋|저장|필터|정렬|근처|주변|역\s*앞|여행|일정|오사카|도쿄|교토|후쿠오카|서울|부산|제주|난바|우메다|osaka|tokyo|hotel|find|search|book)/iu,Y=/(농담|웃긴|개그|ㅎㅎ|ㅋㅋ|진짜\s*웃|심심|그냥\s*말한|뭐해|뭐하냐|날씨\s*어때|오늘\s*어때|요즘\s*어때|피곤해|배고파|괜찮아|별로야|왜\s*그래|헐\s*대박)/iu;function Z(e){let t=e.trim();return!(!t||(0,h.isWorkspaceAgentWorkUtterance)(t))&&(!!V({text:t})||!(t.length>120||Q.test(t))&&(!!(t.length<=48&&Y.test(t))||t.length<=80&&Y.test(t)))}let X="지금은 작업장에서 듣고 있어요. 「더 싸게」, 「맛집도」, 「이 호텔 예약 준비」처럼 말해주면 바로 움직예요 🙂";var ee=e.i(858229),et=e.i(536054),en=e.i(274915);async function ea(e){let t,n,a=(n={capabilityId:t=e.capabilityId,input
21:{workspaceId:e.contextEventId,utterance:e.utterance},userRequest:e.utterance,contextEventId:e.contextEventId,syncGoal:!0},"hotel.search"===t?{...n,input:{location:e.utterance.includes("오사카")?"오사카, 일본":"난바, 오사카",checkIn:"2024-06-01",checkOut:"2024-06-03",guests:"2"}}:"product.search"===t?{...n,input:{query:"MacBook",limit:5}}:"hotel.detail"===t?{...n,input:{hotelId:"grand-osaka"}}:t.startsWith("eatery.")?{...n,input:{workspaceId:e.contextEventId,utterance:e.utterance,domain:"eatery"}}:n);try{let t=await fetch("/api/agent-platform/invoke",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({capabilityId:a.capabilityId,input:a.input,userRequest:a.userRequest,contextEventId:a.contextEventId})}),n=await t.json();return{invoked:!0,ok:n.ok??!1,capabilityId:e.capabilityId,result:n,workLogKo:n.workLogKo??`${e.capabilityId} invoke`}}catch{return{invoked:!0,ok:!1,capabilityId:e.capabilityId,result:null,workLogKo:"Capability invoke API unavailable"}}}var ei=e.i(105774);async function eo(e){try{let t=await fetch("/api/agent-platform/composite/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return await t.json()}catch{return{ok:!1,loopId:e.loopId,goalKo:e.loopId,stepsCompleted:0,totalSteps:0,goalPercent:0,logs:[],lastInvoke:null,workLogKo:"Composite loop API unavailable"}}}async function er(e){try{let t=await fetch("/api/agent-platform/composite/run",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({...e,resume:!0})});if(!t.ok)return null;return await t.json()}catch{return null}}function el(e,t=72){let n=e?.trim()??"";if(!n)return null;let a=n.split(/\n+/u)[0].trim();return a.length<=t?a:`${a.slice(0,t-1).trimEnd()}…`}async function es(h){var y;let f,b,k,K=h.utterance.trim(),I=[],v=e=>({ok:!1,phases:I,toolId:"noop",patchKind:null,contextEventId:null,workspaceMutated:!1,statusKo:null,projection:null,verified:!1,waiting:!0,essayForbidden:!0,commitPending:!1,...e});if(!K)return v({statusKo:null});I.push("observe");let x=(0,o.resolveActiveWorkspaceContextId)({explicitContextEventId:h.explicitContextEventId});if(!x||!(0,i.hasProvisionalContextWorkspace)(x))return v({statusKo:"활성 Workspace 없음",contextEventId:x});let _=(0,i.readContextWorkspace)(x);I.push("understand");let w=(f=(0,n.parseWorkspacePatch)(K),b=/예약\s*준비|prepare|준비해/iu.test(K),k=(0,r.isSpatialDiscoveryUtterance)(K),{action:f?.kind??(b?"prepare":k?"spatial_discovery":"prompt"),patch:f,spatial:k,prepare:b});I.push("retrieve_context");let C=(0,i.readContextWorkspace)(x);if(!C)return v({statusKo:"Context 없음",contextEventId:x});I.push("select_tool");let S=(0,ee.resolveCapabilityIntent)({utterance:K,contextEventId:x});if("create"===S.reuse.decision&&!/(?:호텔|숙소|맛집|식당|lodging|eatery)/iu.test(K))return v({statusKo:el(S.reuse.reasonKo),contextEventId:x,toolId:"noop"});let T=function(e){if(e.understood.prepare)return"reality_prepare";if(e.understood.patch?.kind==="filter_entity"||e.understood.patch?.kind==="spatial_constraint")return"workspace_patch";let t=(0,c.parseLodgingStayTypeFromText)(e.utterance);return t&&"hotel"!==t&&!/근처|주변|near|around|기준으로/iu.test(e.utterance)||/(?:호텔|숙소)\s*(?:찾아|보여|검색)|(?:찾아|보여|검색).*(?:호텔|숙소)/iu.test(e.utterance)&&!/근처|주변|near|around|기준/iu.test(e.utterance)?"workspace_prompt":e.understood.spatial&&/맛집|식당|카페|cafe|restaurant|숙소|호텔|놀거리|관광|찾아|discover/iu.test(e.utterance)?"
21spatial_discovery":e.understood.patch?"workspace_patch":e.understood.spatial?"spatial_discovery":"workspace_prompt"}({utterance:K,understood:w});{let e=(0,u.readLastAgentProductTurn)();e?.contextEventId===x&&(0,u.advanceAgentProductStage)(e,"planner")}if((0,ei.wantsCompositeResume)(K)){I.push("execute_patch");let e=await er({contextEventId:x,userRequest:K});if(e){let t=(0,u.readLastAgentProductTurn)();return t?.contextEventId===x&&((0,u.advanceAgentProductStage)(t,"workspace_patch",e.workLogKo),(0,u.advanceAgentProductStage)(t,"agent_status",e.workLogKo)),(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x}),{ok:e.ok,phases:I,toolId:"composite_loop",patchKind:"composite_resume",contextEventId:x,workspaceMutated:e.ok,statusKo:el(e.workLogKo),projection:null,verified:e.ok,waiting:!e.ok,essayForbidden:!0,commitPending:!1}}}let L=(0,u.readLastAgentProductTurn)(),E=L?.compositeLoopId??(0,ei.resolveCompositeLoopFromUtterance)(K);if(E){I.push("execute_patch");let e=await eo({loopId:E,contextEventId:x,userRequest:K});return L?.contextEventId===x&&((0,u.advanceAgentProductStage)(L,"workspace_patch",e.workLogKo),(0,u.advanceAgentProductStage)(L,"object_discovery"),(0,u.advanceAgentProductStage)(L,"agent_status",e.workLogKo)),(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x}),{ok:e.ok,phases:I,toolId:"composite_loop",patchKind:E,contextEventId:x,workspaceMutated:e.stepsCompleted>0,statusKo:el(e.workLogKo),projection:null,verified:e.ok,waiting:e.lastInvoke?.prepareOnly===!0,essayForbidden:!0,commitPending:!1}}let P=function(e){if(!e||"reuse"!==e.reuse.decision)return null;let t=e.discoveryPlanCapabilityId?.trim();if(!t)return null;let n=(0,en.getCatalogCapability)(t);return n?.runnable?t:null}(S);if(P){let e=await ea({capabilityId:P,utterance:K,contextEventId:x});if(I.push("execute_patch"),e.invoked){let t=(0,u.readLastAgentProductTurn)();return t?.contextEventId===x&&((0,u.advanceAgentProductStage)(t,"workspace_patch",e.workLogKo),e.ok&&(0,u.advanceAgentProductStage)(t,"object_discovery"),(0,u.advanceAgentProductStage)(t,"agent_status",e.workLogKo)),(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x}),{ok:e.ok,phases:I,toolId:"workspace_patch",patchKind:"invoke_capability",contextEventId:x,workspaceMutated:!!e.result?.output,statusKo:el(e.workLogKo),projection:null,verified:e.ok,waiting:!0,essayForbidden:!0,commitPending:!1}}}I.push("execute_patch");let A=null,$=null,j=null,R=!1,D=!1,M=null;if("workspace_patch"===T&&w.patch){let e=(0,t.applyWorkspacePatch)({contextEventId:x,patch:w.patch,utterance:K,skipAutoProjection:!0});if(!e.ok)return v({statusKo:el(e.statusKo),contextEventId:x,toolId:T});A=e.statusKo,$=w.patch.kind,j=e.record,R=!0;let n="replace_entity"===w.patch.kind&&!!("stayType"in w.patch&&w.patch.stayType)&&/찾아|검색|보여|다시|바꿔/iu.test(K);if((e.needsRescout||n)&&e.scoutQuery?.trim()){let t=await (0,l.tryApplyWorkspacePromptTurn)({utterance:e.scoutQuery,contextEventId:x});t.handled&&t.replyKo?.trim()&&(A=t.replyKo)}if(M=[...(0,i.readContextWorkspace)(x)?.selectedIds??[]],"filter_entity"===w.patch.kind){let e="filter"in w.patch?w.patch.filter.keepTopN??null:null,t=(0,p.tryEnterCompareDecisionAfterRefine)({contextEventId:x,utterance:K,keepTopN:e});t.entered&&t.replyKo&&(A=`${A} \xb7 ${t.replyKo}`,M=[...t.result?.candidateEntityIds??M??[]])}}else if("spatial_discovery"===T){let e=(0,r.applySpatialDiscoveryToWorkspace)({utterance:K,contextEventId:x,skipAutoProjection:!0});if(!e.handled)return v({statusKo:"Spatial Discovery 실패",contextEventId:x,toolId:T});A=e.statusKo,$="create_entity",R=e.entityCount>0||!!e.statusKo;let t=(0,i.readContextWorkspace)(x);M=t?.nodes.filter(e=>"eatery"===e.kind&&e.visible).slice(0,3).map(e=>e.id)??null}else if("reality_prepare"===T){let e=C.nodes.find(e=>e.selected&&"lodging"===e.kind)??C.nodes.find(e=>"lodging"===e.kind&&e.visible)??null,t=e?.placeId??e?.id??"";if(!t)return v({statusKo:"Prepare할 숙소 없음",contextEventId:x,toolId:T});let n=(0,s.prepareHotelReservation)({entityId:t,hotelTitle:e?.title??"숙소",utterance:K,workspaceId:x,priceLabelKo:e?.amountLabel??null,guests:2,checkInIso:"2026-08-10",checkOutIso:"2026-08-12"}),a=n.ok?null:(0,s.runRealityPrepare)({entityId:t,utterance:K,workspaceId:x,action:"reservation_prepare",titleHint:e?.title??null,priceLabelKo:e?.amountLabel??null,guests:2}),i=n.ok||!!a?.ok;if(A=i?"예약 준비 · Commit Pending":!1===n.ok?n.reasonKo??"Prepare 실패":a&&!a.ok?a.reasonKo??"Prepare 실패":"Prepare 실패",R=i,D=i,$="create_draft",M=e?[e.id]:null,i){let e=(0,u.readLastAgentProductTurn)();e?.contextEventId===x&&(0,u.advanceAgentProductStage)(e,"prepare"),(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x,preparePending:!0,commitPending:!0})}}else{let e=await (0,l.tryApplyWorkspacePromptTurn)({utterance:K,contextEventId:x});if(!e.handled){let e,t,n=(y={utterance:K,contextEventId:x}
21,e=(0,i.readContextWorkspace)(y.contextEventId),t=e?.nodes.filter(e=>e.visible)??[],function(e,t){let n=e?.trim()??"",a=t?.destinationKo?.trim()||null,i=t?.visibleLodging??0,o=t?.visibleEatery??0,r=t?.visibleTotal??i+o;if(a||r>0){let e=[];a&&e.push(`${a} 작업장`),i>0&&e.push(`숙소 ${i}`),o>0?e.push(`맛집 ${o}`):r>0&&0===i&&0===o&&e.push(`후보 ${r}`);let t=e.join(" · ");return/어때|어떤|추천|괜찮은|고를까|고르|판단/iu.test(n)?`${t} 열려 있어요. 고르려면 「1번」, 「더 싸게」, 「3개만」처럼 말해 주세요.`:n.length>0&&n.length<=24?`「${n}」로는 아직 손을 못 댔어요. ${t}에서 「더 싸게」나 「맛집도」로 이어서 말해 주세요.`:`${t} 열려 있어요. 「더 싸게」, 「맛집도」, 「예약 준비」처럼 말해 주세요.`}return Z(n)?X:n.length>0&&n.length<=24?`「${n}」만으로는 Workspace를 바꾸기 어려워요. ${X}`:X}(y.utterance,{destinationKo:e?.constraintMemory?.destinationKo??null,visibleLodging:t.filter(e=>"lodging"===e.kind).length,visibleEatery:t.filter(e=>"eatery"===e.kind).length,visibleTotal:t.length})),a=(0,u.readLastAgentProductTurn)();return a?.contextEventId===x&&((0,u.failAgentProductStage)(a,"workspace_patch",n),(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x})),v({statusKo:el(n,96),contextEventId:x,toolId:"workspace_prompt"})}A=e.replyKo,R=!0,$="update_entity",M=[...(0,i.readContextWorkspace)(x)?.selectedIds??[]]}I.push("projection");let W=(0,a.runAutoProjectionAfterPatch)({contextEventId:x,patchRecord:j,entityIds:M});I.push("verify");let O=(0,i.readContextWorkspace)(x),N=O?.nodes.filter(e=>e.visible&&"lodging"===e.kind).length??0,F=!!(w.patch&&"stayType"in w.patch&&w.patch.stayType)||!!(0,c.parseLodgingStayTypeFromText)(K)||/(?:호텔|숙소|캡슐).*(?:찾아|검색|보여)|(?:찾아|검색|보여).*(?:호텔|숙소|캡슐)/iu.test(K),B=F&&0===N,U=!!O&&W.ok&&!1===W.manualRefreshRequired&&!B&&(R||O?.updatedAtIso!==_?.updatedAtIso||(O?.patches?.length??0)>(_?.patches?.length??0));if(B){let e="eatery"===C.domain?"eatery":"lodging";if((0,et.selectNextCapabilityFromState)({agentId:e,utterance:K,contextEventId:x,observations:[],lastToolId:"eatery"===e?"restaurant.lookup":"hotel.lookup",lastVerified:!1}).toolId){let e=await (0,l.tryApplyWorkspacePromptTurn)({utterance:K,contextEventId:x});if(e.handled){let t=(0,a.runAutoProjectionAfterPatch)({contextEventId:x});return I.push("wait"),{ok:!0,phases:I,toolId:"workspace_prompt",patchKind:"update_entity",contextEventId:x,workspaceMutated:!0,statusKo:el(e.replyKo??"조건 반영 · 다시 검색"),projection:t,verified:t.ok,waiting:!0,essayForbidden:!0,commitPending:!1}}}A="숙소 후보를 아직 못 채웠어요 · 「난바역 근처 캡슐호텔」처럼 다시 말해 주세요";let t=(0,u.readLastAgentProductTurn)();return t?.contextEventId===x&&((0,u.failAgentProductStage)(t,"object_discovery",A),(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x})),I.push("wait"),v({statusKo:el(A,96),contextEventId:x,toolId:T,patchKind:$,workspaceMutated:R,verified:!1,projection:W})}let q=(O?.nodes??[]).filter(e=>e.visible),H=q.filter(e=>"lodging"===e.kind||"eatery"===e.kind).slice(0,3).map(e=>e.title),z=O?.nodes.filter(e=>e.visible&&"lodging"===e.kind).slice(0,3).map(e=>e.title)??[],G=z.length>0?z:H,J=!!_?.nodes.some(e=>e.visible),V=(0,g.resolveWorkspaceMutationMode)({utterance:K,hasVisibleCandidates:J||N>0}),Q="none"===V.mode?"workspace_patch"===T&&w.patch?.kind==="filter_entity"?"refine":"replace":V.mode,Y=(0,m.projectAgentTurnSurfaces)({mutationMode:Q,reasonKo:V.replyHintKo??A,factsKo:[O?.lastChangeKo??null,A].filter(e=>!!e?.trim()),candidateCount:F?N:q.length,entityTitlesKo:G});A=Y.llmReplyKo||A;{let t=(0,u.readLastAgentProductTurn)();if(t?.contextEventId===x){let{yieldBetweenAgentStages:n}=await e.A(896666);("spatial_discovery"===T||"workspace_prompt"===T||"workspace_patch"===T&&(w.patch?.kind==="spatial_constraint"||w.patch?.kind==="replace_entity"))&&(await n(),t=(0,u.advanceAgentProductStage)(t,"object_discovery",`후보 ${q.length}곳`),await n(),t=(0,u.advanceAgentProductStage)(t,"object_enrichment"),await n(),t=(0,u.advanceAgentProductStage)(t,"candidate_evaluation",Y.calloutLinesKo[0]??null)),(R||"workspace_patch"===T)&&(await n(),t=(0,u.advanceAgentProductStage)(t,"workspace_patch",Y.calloutLinesKo[0]??A)),await n(),t=(0,u.advanceAgentProductStage)(t,"projection"),await n(),(0,u.advanceAgentProductStage)(t,"agent_status",Y.llmReplyKo)}(0,d.writeAgentRuntimeProjectionFromWorkspace)({contextEventId:x,preparePending:D,commitPending:D})}return I.push("wait"),{ok:U||R,phases:I,toolId:T,patchKind:$,contextEventId:x,workspaceMutated:R,statusKo:el(A),projection:W,verified:U,waiting:!0,essayForbidden:!0,commitPending:D}}},984751,e=>{"use strict";var t=e.i(301008),n=e.i(472181);e.s(["assertAgentPostcondition",0,function(e){let a=(0,t.readContextWorksp
21ace)(e.contextEventId);if(!a)return{ok:!1,reason:"no_mutation",statusKo:"Workspace에 반영되지 않았어요"};if(!0===e.expect.workspaceMutated){let t=a.nodes.filter(e=>e.visible),i=e.expect.target,o=t.filter(e=>{var t;return t=e.kind,!i||"mixed"===i||"map"===i||("lodging"===i?"lodging"===t:"eatery"===i?"eatery"===t:"poi"===i?"poi"===t:"amenity"!==i||"amenity"===t||"poi"===t)});if(!1!==e.expect.requireVisibleDomain&&i&&"map"!==i&&0===o.length)return{ok:!1,reason:"no_entities",statusKo:"추가했다고 했지만 작업장에 후보가 없어요"};let r=e.expect.anchorLat,l=e.expect.anchorLng,s=e.expect.maxDistanceMeters??800;if("number"==typeof r&&"number"==typeof l&&Number.isFinite(r)&&Number.isFinite(l)&&o.length>0&&0===o.filter(e=>"number"==typeof e.lat&&"number"==typeof e.lng&&(0,n.metersBetween)(r,l,e.lat,e.lng)<=s).length)return{ok:!1,reason:"anchor_distance",statusKo:`기준점 ${s}m 안에 맞는 결과가 없어요`};let c=e.expect.minVisible;if(null!=c&&c>0&&(i&&"map"!==i?o.length:t.length)<c)return{ok:!1,reason:"no_entities",statusKo:`후보가 ${c}곳보다 적어요`};let u=e.expect.requireDay;if(null!=u&&u>=1){let e=RegExp(`^day[_-]?${u}$`,"iu");if(0===a.nodes.filter(t=>t.tags.some(t=>e.test(t))).length)return{ok:!1,reason:"no_mutation",statusKo:`Day ${u} 일정에 반영되지 않았어요`}}}return{ok:!0,statusKo:null}}])},701312,415173,e=>{"use strict";e.s(["listCapsuleProjections",()=>I,"resumeCapsuleWorkspace",()=>v],701312);var t=e.i(461727),n=e.i(462653),a=e.i(556307),i=e.i(301008),o=e.i(137032);e.s(["runWorkspaceAgentPlan",()=>k],415173);var r=e.i(609577),l=e.i(773222),s=e.i(984751),c=e.i(577996),u=e.i(75010);let d=/^day[_-]?(\d+)$/iu;var p=e.i(99638);function m(e,t,n,a){return{id:`ws_replan_${e+1}`,kind:"workspace_patch",labelKo:t,utterance:n,status:"pending",noteKo:a,expect:{workspaceMutated:!0},observation:null}}function g(e){let t=e.conflict?.dayIndex!=null?e.conflict.dayIndex+1:Number(e.plan.sourceUtterance.match(/(?:day\s*|데이\s*)?(\d+)\s*(?:일차|일)?/iu)?.[1]??"1");if(e.conflict?.kind==="duplicate_lodging_day"){let n=e.plan.contextEventId?(0,i.readContextWorkspace)(e.plan.contextEventId):null,a=e.conflict.nodeIds[1],o=n?.nodes.find(e=>e.id===a)?.title?.trim()||"호텔";return[m(0,`Day ${t} \xb7 중복 숙소 정리`,`Day ${t}에서 ${o} 빼줘`,"replan · duplicate lodging"),m(1,`Day ${t} 동선 다시`,`Day ${t} 이동 동선 다시 짜줘`,"replan · rebuild_route")]}if(e.conflict?.kind==="day_overcrowded")return[m(0,`Day ${t} 동선 간소화`,`Day ${t} 이동 동선 다시 짜줘`,"replan · overcrowded rebuild")];let n=e.failedStep;if(n){if(/호텔|숙소|scout|검색/iu.test(`${n.labelKo} ${n.utterance}`)&&/찾|검색|scout/iu.test(n.utterance)){let t=e.plan.steps.filter(e=>"pending"===e.status||e.id!==n.id).filter(e=>"pending"===e.status||"skipped"===e.status).slice(0,3).map((e,t)=>({...e,id:`ws_replan_${t+2}`,status:"pending",noteKo:"replan · after empty scout",observation:null}));return[m(0,"호텔 재검색","오사카 호텔 찾아줘","replan · broaden lodging scout"),...t]}if(/빼|제거|remove/u.test(n.labelKo+n.utterance))return e.plan.steps.filter(e=>"pending"===e.status||"skipped"===e.status).slice(0,2).map((e,t)=>({...e,id:`ws_replan_${t+1}`,status:"pending",noteKo:`replan \xb7 skip-fail ${n.id}`,observation:null}));if(/맛집|eatery|저녁/u.test(n.labelKo+n.utterance))return[m(0,`Day ${t} 동선 다시`,`Day ${t} 이동 동선 다시 짜줘`,"replan · skip eatery")];if(/day|데이|동선|일정/iu.test(e.plan.sourceUtterance))return[m(0,`Day ${t} 동선 다시`,`Day ${t} 이동 동선 다시 짜줘`,"replan · soft finish")]}return null}function h(e){return{version:p.WORKSPACE_AGENT_PLAN_VERSION,planId:`${e.plan.planId}_replan`,contextEventId:e.plan.contextEventId,sourceUtterance:e.plan.sourceUtterance,planKind:e.plan.planKind,steps:[...e.remainingDone,...e.replanSteps],createdAtIso:new Date().toISOString(),cursor:e.remainingDone.length}}function y(e){let t=(0,i.readContextWorkspace)(e.contextEventId);if(!t)return;let n=(0,c.createAgentTraceEntry)({kind:"plan",summaryKo:e.statusKo??`Plan ${e.plan.planKind} \xb7 ${e.plan.steps.length}스텝`,ownership:(0,u.buildAgentActionOwnership)({actor:"ai",approval:"none",actionKo:`Workspace Plan \xb7 ${e.plan.planKind}`,afterKo:e.plan.steps.map(e=>e.labelKo).join(" → ")}),evidenceLinesKo:e.plan.steps.map(e=>e.labelKo).slice(0,4)}),a=(0,c.appendAgentTrace)(t.agentTrace,n);
21(0,i.writeContextWorkspace)({...t,agentTrace:a,updatedAtIso:new Date().toISOString()})}function f(e){let t=(0,i.readContextWorkspace)(e.contextEventId);t&&(0,i.writeContextWorkspace)({...t,agentPlan:{...e.plan,contextEventId:e.contextEventId},updatedAtIso:new Date().toISOString()})}async function b(e){let t=await (0,l.runWorkspaceAgentLoop)({utterance:e.step.utterance,explicitContextEventId:e.contextEventId}),n=t.ok,a=t.statusKo;if(n&&e.step.expect){let t=(0,s.assertAgentPostcondition)({contextEventId:e.contextEventId,expect:e.step.expect});t.ok||(n=!1,a=t.statusKo)}let o={ok:n,statusKo:a,visibleCount:function(e){if(!e)return 0;let t=(0,i.readContextWorkspace)(e);return t?.nodes.filter(e=>e.visible).length??0}(e.contextEventId),workspaceMutated:t.workspaceMutated,toolId:t.toolId,patchKind:t.patchKind};{let t=(0,i.readContextWorkspace)(e.contextEventId);t&&(0,i.writeContextWorkspace)({...t,lastChangeKo:o.statusKo??t.lastChangeKo??e.step.labelKo,updatedAtIso:new Date().toISOString()})}return{step:{...e.step,status:n?"done":"failed",observation:o},loop:t,observation:o}}async function k(t){let n=t.utterance.trim(),a=t.explicitContextEventId?.trim()||t.plan?.contextEventId?.trim()||null,o=t.plan??(0,r.compileWorkspaceAgentPlan)({utterance:n,contextEventId:a});if(!a)return{ok:!1,plan:o,contextEventId:null,workspaceMutated:!1,statusKo:"활성 Workspace 없음",verified:!1,waiting:!0,essayForbidden:!0,commitPending:!1,lastLoop:null,stepsDone:0,stepsFailed:0,replanned:!1};o={...o,contextEventId:a},y({contextEventId:a,plan:o,statusKo:`계획 ${o.steps.length}스텝 \xb7 ${o.planKind}`}),f({contextEventId:a,plan:o});let{tryExecuteViaRealityPipeline:l}=await e.A(126364),s=await l({utterance:n,contextEventId:a,plan:o});if(s)return s;let c=[],u=!1,p=null,m=0,k=0,K=!1,I=!1,v=[];for(let e=0;e<o.steps.length;e++){let t=o.steps[e];if(K){c.push({...t,status:"skipped"});continue}let{step:n,loop:r,observation:l}=await b({step:t,contextEventId:a});if(c.push(n),p=r,u=u||l.workspaceMutated,l.ok){if(m+=1,l.statusKo&&v.push(l.statusKo),!I){let t=function(e){let t=(0,i.readContextWorkspace)(e.contextEventId);if(!t)return null;for(let[e,n]of function(e){let t=new Map;for(let n of e)if(n.visible)for(let e of n.tags){let a=e.match(d);if(!a?.[1])continue;let i=Number(a[1]);if(!Number.isFinite(i)||i<1)continue;let o=t.get(i)??[];o.push(n),t.set(i,o)}return t}(t.nodes)){let t=n.filter(e=>"lodging"===e.kind);if(t.length>=2)return{kind:"duplicate_lodging_day",dayIndex:e-1,reasonKo:`Day ${e}에 숙소가 ${t.length}곳이에요`,nodeIds:t.map(e=>e.id)};let a=n.filter(e=>"poi"===e.kind||"eatery"===e.kind||"amenity"===e.kind);if(a.length>4)return{kind:"day_overcrowded",dayIndex:e-1,reasonKo:`Day ${e} 일정이 ${a.length}곳으로 빡빡해요`,nodeIds:a.map(e=>e.id)}}return null}({contextEventId:a});if(t){let n=g({plan:{...o,contextEventId:a,steps:c},conflict:t,failedStep:null});if(n&&n.length>0){I=!0,v.push(`재계획 \xb7 ${t.reasonKo}`),y({contextEventId:a,plan:o,statusKo:`재계획 \xb7 ${t.reasonKo}`});for(let t=e+1;t<o.steps.length;t++)c.push({...o.steps[t],status:"skipped"});o=h({plan:{...o,steps:c},remainingDone:c,replanSteps:n}),e=c.length-1;continue}}}}else{if(k+=1,v.push(l.statusKo??`${n.labelKo} 실패`),!I){let t=g({plan:{...o,contextEventId:a,steps:[...c,...o.steps.slice(e+1).map(e=>({...e,status:"pending"}))]},conflict:{kind:"step_failed",dayIndex:null,reasonKo:l.statusKo??"스텝 실패",nodeIds:[]},failedStep:n});if(t&&t.length>0){I=!0,v.push("재계획 · 1회");for(let t=e+1;t<o.steps.length;t++)c.push({...o.steps[t],status:"skipped"});o=h({plan:{...o,steps:c},remainingDone:c,replanSteps:t}),e=c.length-1;continue}}K=!0}}o={...o,steps:c.length>=o.steps.length?c:o.steps,cursor:c.filter(e=>"done"===e.status||"failed"===e.status).length},c.length>0&&(o={...o,steps:c});let x=0===k&&m>0,_=o.steps.length>1?[`${o.planKind} ${m}/${o.steps.filter(e=>"skipped"!==e.status).length}`,I?"재계획":null,...v.slice(-2)].filter(Boolean).join(" · "):v[0]??p?.statusKo??null;return y({contextEventId:a,plan:o,statusKo:x?`완료 \xb7 ${o.planKind}${I?" · 재계획":""}`:`중단 \xb7 ${o.planKind} (${k}실패)`}),f({contextEventId:a,plan:o}),{ok:x||u,plan:o,contextEventId:a,workspaceMutated:u,statusKo:_,verified:p?.verified??x,waiting:!0,essayForbidden:!0,commitPending:p?.commitPending??!1,lastLoop:p,stepsDone:m,stepsFailed:k,replanned:I}}function K(e){let a=e.compilerIr,i=(e.agentPlan?.steps??[]).some(e=>"pending"===e.status||"running"===e.status);return{contextEventId:e.contextEventId,workspaceId:e.workspaceId,labelKo:a?.contextLabelKo?.trim()||e.summaryKo.trim()||e.query.trim()||(0,n.domainLabelKo)(e.domain),domainKo:(0,n.domainLabelKo)(e.domain),progressPercent:(0,t.estimateWorksp
21aceProgressPercent)(e),status:e.status,compilerIr:a,preference:a?.preference??null,reality:a?.reality??null,nodeCount:e.nodes.filter(e=>e.visible).length,updatedAtIso:e.updatedAtIso,hasPendingAgentPlan:i}}function I(){return(0,i.listDraftContextWorkspaceEventIds)().map(e=>(0,i.readContextWorkspace)(e)).filter(e=>null!=e&&"editing"===e.status).map(K)}function v(e){let t,n=e.contextEventId.trim(),r=(0,i.readContextWorkspace)(n);if(!r||"closed"===r.status||!r.nodes.some(e=>e.visible)&&!r.compilerIr)return null;let l=(0,o.withWorkspaceRelationships)(r,e.utterance);(0,i.writeContextWorkspace)(l),!1!==e.expand&&((0,i.writeContextWorkspaceExpanded)(n,!0),(0,a.dispatchContextWorkspaceExpand)({contextEventId:n,source:"capsule_resume"}));let s=(t=(0,i.readContextWorkspace)(n)?.agentPlan??null)&&t.steps.some(e=>"pending"===e.status||"running"===e.status)?t:null,c=s?.steps.filter(e=>"pending"===e.status||"running"===e.status).length??0,u=c>0?`지난 작업 이어갈까요? \xb7 ${c}스텝 남음`:"지난 작업 이어갈까요?";return{state:l,compilerIr:l.compilerIr??null,pendingAgentPlan:s,statusKo:u}}},175786,923531,e=>{"use strict";e.s(["tryOpenWorkspaceFromUtterance",()=>u],175786);var t=e.i(607298),n=e.i(839160),a=e.i(701312),i=e.i(556307),o=e.i(301008);e.i(743137);var r=e.i(525223),l=e.i(205317);function s(e){(0,o.writeContextWorkspaceExpanded)(e,!0),(0,i.dispatchContextWorkspaceExpand)({contextEventId:e,source:"nl_open"})}function c(e,t,n){let a=(0,l.offerSoftNextWorkAfterAct)({contextEventId:e,lastAct:"open_workspace",lastUtterance:t,autoRun:!0});return a.continued&&a.replyKo?`${n}
22${a.replyKo}`:a.action?.labelKo?`${n} \xb7 다음은 「${a.action.labelKo}」`:n}function u(e){let i=e.contextEventId.trim(),l=e.utterance.trim();if(!i||!(0,n.isOpenWorkspaceUtterance)(l))return null;if((0,o.hasProvisionalContextWorkspace)(i)){if((0,a.resumeCapsuleWorkspace)({contextEventId:i,utterance:l,expand:!0}))return{ok:!0,replyKo:c(i,l,"작업장을 열었어요")};let e=(0,o.readContextWorkspace)(i);if(e&&"closed"!==e.status)return s(i),{ok:!0,replyKo:c(i,l,"작업장을 열었어요")}}let u=(0,r.findLifeEventCandidate)(i),d=u?.metadata,p=("string"==typeof d?.travelDestination?d.travelDestination.trim():"")||u?.place?.trim()||u?.title?.trim()||"여행지",m=(/여행$/u.test(p)?p.replace(/\s*여행$/u,""):p)||"여행지";return(0,t.openLodgingContextWorkspace)({contextEventId:i,query:`${m} 숙소`,summaryKo:`${m} 여행 작업장`,hits:[],source:"nl_open"}),s(i),{ok:!0,replyKo:c(i,l,"작업장을 열었어요")}}var d=e.i(441956),p=e.i(428898),m=e.i(799301),g=e.i(181164),h=e.i(293978),y=e.i(263121);let f=/호텔|숙소|모텔|게스트하우스|캡슐|hotel|stay|lodging|ryokan|료칸/iu,b=/맛집|식당|카페|음식|밥집|먹을|먹거리|restaurant|cafe|food|eatery/iu;e.s(["resolveWorkspaceSearchDomain",0,function(e,t){let n=e.trim();if(!n||(0,g.isSameProjectReSearchUtterance)(n))return t;let a=(0,m.resolveLocalDiscoveryDomain)(n);return"activity"===a?"poi":"amenity"===a||(0,h.isAmenityLookupQuery)(n)?"amenity":(0,p.hasLodgingDomainCue)(n)||f.test(n)?"lodging":(0,d.hasEateryDomainCue)(n)||b.test(n)?"eatery":(0,y.isBrowseExtractQuery)(n)||/관광|명소|테마\s*파크|액티비티|입장권|티켓|스튜디오|유니버설|놀거리|할거리|볼거리/iu.test(n)?"poi":t},"workspaceDomainToToolDomain",0,function(e){return"lodging"===e||"eatery"===e||"amenity"===e?e:"poi"}],923531)},162,882878,347497,96990,38773,e=>{"use strict";e.i(809214),e.s([],162);let t=new Map;e.s(["appendCommandHistory",0,function(e){let n={id:`wch_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,workspaceId:e.workspaceId.trim(),userInput:e.userInput,intent:e.intent,draftMutationId:e.draftMutationId??null,appliedAtIso:null,createdAtIso:new Date().toISOString()},a=t.get(n.workspaceId)??[];return t.set(n.workspaceId,[...a,n].slice(-50)),n},"markCommandHistoryApplied",0,function(e){let n=t.get(e.workspaceId.trim())??[];t.set(e.workspaceId.trim(),n.map(t=>t.draftMutationId===e.draftMutationId?{...t,appliedAtIso:new Date().toISOString()}:t))}],882878);let n=new Map,a=new Map;function i(e){return n.get(e.trim())??null}e.s(["readDraftMutation",0,i,"saveDraftMutation",0,function(e){n.set(e.id,e);let t=a.get(e.workspaceId)??[];return t.includes(e.id)||a.set(e.workspaceId,[...t,e.id]),e},"updateDraftMutationStatus",0,function(e,t){let a=i(e);if(!a)return null;let o={...a,status:t,updatedAtIso:new Date().toISOString()};return n.set(o.id,o),o}],347497),e.s(["WORKSPACE_DRAFT_APPLIED",0,"rimvio:workspace-draft-applied","WORKSPACE_DRAFT_CREATED",0,"rimvio:workspace-draft-created","dispatchWorkspaceDraftEvent",0,function(e,t){window.dispatchEvent(new CustomEvent(e,{detail:t}))},"dispatchWorkspaceProjectionUpdate",0,function(e){window.dispatchEvent(new CustomEvent("rimvio:workspace-projection-updated",{detail:e}))}],96990);let o=new Map;e.s(["getRealityObject",0,function(e){return o.get(e)??null}],38773)},586522,162208,e=>{"use strict";var t=e.i(882878),n=e.i(347497),a=e.i(96990),i=e.i(38773),o=e.i(750174),r=e.i(277462);let l=new Map,s=new Map;function c(e){return{objects:e.objects.map(e=>({...e,tags:[...e.tags],attrs:{...e.attrs}})),constraints:e.constraints.map(e=>({...e})),filters:e.filters.map(e=>({...e})),drafts:e.drafts.map(e=>({...e,payload:{...e.payload}})),simulationResults:e.simulationResults.map(e=>({...e,result:{...e.result}})),revision:e.revision,updatedAtIso:e.updatedAtIso}}let u=new Map;function d(e){window.dispatchEvent(new CustomEvent("rimvio:workspace-state-updated",{detail:{workspaceId:e,draftOnly:!0}}))}function p(e){return`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function m(e){if(["mutate_reality","write_reality","reality_object_patch","transition_reality","commit_reality","global_object"].includes(e))throw Error("Workspace State Model: Reality Object mutation forbidden — edit Worksp
22ace Instance only")}function g(e){let t,n=e.entityId?.trim()||e.realityObjectId,a=e.kind??"other";(0,r.upsertRealityEntity)({id:n,type:"hotel"===(t=a.toLowerCase())||"lodging"===t?"Hotel":"restaurant"===t||"eatery"===t?"Restaurant":"flight"===t?"Flight":"event"===t?"Event":"route"===t?"Route":"person"===t||"peer"===t?"Person":"payment"===t?"Payment":"memory"===t?"Memory":"Place",properties:{name:e.title,title:e.title,...null!=e.lat?{lat:e.lat}:{},...null!=e.lng?{lng:e.lng}:{},...null!=e.priceLabelKo?{priceLabelKo:e.priceLabelKo}:{},...null!=e.rating?{rating:e.rating}:{},...null!=e.tags?{tags:e.tags}:{},...e.attrs??{}},state:{lifecycle:"candidate",active:!0}});let i=new Date().toISOString();return{id:p("wobj"),entityId:n,realityObjectId:e.realityObjectId,kind:a,title:e.title,selected:!1,bookmarked:!1,visible:!0,lat:e.lat??null,lng:e.lng??null,priceLabelKo:e.priceLabelKo??null,rating:e.rating??null,tags:[...e.tags??[]],attrs:{...e.attrs??{},entityRefOnly:!0},updatedAtIso:i}}function h(e){let t,n=new Date().toISOString(),a=e.id?.trim()||p("ws"),i={id:a,contextId:e.contextId.trim(),objects:(e.seeds??[]).map(g),constraints:[],filters:[],drafts:[],simulationResults:[],createdAtIso:n,updatedAtIso:n,revision:0};return u.set(a,i),t=a.trim(),l.delete(t),s.delete(t),d(a),i}function y(e){return u.get(e.trim())??null}function f(e){let t=e.trim();for(let e of u.values())if(e.contextId===t)return e;return null}function b(e){var t,n;let a,o,r,g,h,f=y(e.workspaceId);if(!f)return null;let b=f.objects.map(e=>({id:e.realityObjectId,updatedAt:(0,i.getRealityObject)(e.realityObjectId)?.updatedAt??null})),k=(m((t={workspaceId:f.id,before:f,next:{...f,objects:e.objects??f.objects,constraints:e.constraints??f.constraints,filters:e.filters??f.filters,drafts:e.drafts??f.drafts,simulationResults:e.simulationResults??f.simulationResults},mutationType:e.mutationType??"engine",targetObjectId:e.targetObjectId,changes:e.changes,labelKo:e.labelKo}).mutationType),a=new Date().toISOString(),o={...t.before,...t.next,id:t.before.id,contextId:t.before.contextId,createdAtIso:t.before.createdAtIso,revision:t.before.revision+1,updatedAtIso:a},r={id:p("wmut"),workspaceId:t.workspaceId,mutationType:t.mutationType,targetObjectId:t.targetObjectId,changes:t.changes,labelKo:t.labelKo,atIso:a},n={workspaceId:t.workspaceId,before:c(t.before),mutation:r,after:c(o)},g={id:`wh_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,workspaceId:n.workspaceId,before:n.before,mutation:n.mutation,after:n.after,atIso:n.mutation.atIso},h=l.get(n.workspaceId)??[],l.set(n.workspaceId,[...h,g].slice(-40)),s.set(n.workspaceId,[]),u.set(t.workspaceId,o),d(t.workspaceId),o);for(let e of b)!function(e){let t=(0,i.getRealityObject)(e.realityObjectId);if(t&&null!=e.expectedUpdatedAt&&t.updatedAt!==e.expectedUpdatedAt)throw Error("Workspace State Model: Reality Object was mutated — rollback required")}({realityObjectId:e.id,expectedUpdatedAt:e.updatedAt});return k}function k(e){return`${e}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`}function K(e){return e.objects.filter(e=>e.visible).length}function I(e){return"string"==typeof e&&e.trim()?e.trim():null}e.s(["assertDoesNotMutateRealityObject",0,m,"commitWorkspaceEngineChange",0,b,"createWorkspace",0,h,"readWorkspace",0,y,"readWorkspaceByContext",0,f],162208);var v=e.i(69225),x=e.i(352904),_=e.i(301008);function w(e,t,n){return{id:`proj_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,type:e,workspaceId:t,payload:n,atIso:new Date().toISOString(),draftOnly:!0}}e.s(["applyDraftMutation",0,function(e){var r;let l,s,c,u,d=(0,n.readDraftMutation)(e);if(!d)return{ok:!1,reasonKo:"Draft를 찾을 수 없어요"};if("proposed"!==d.status)return{ok:!1,reasonKo:`이미 ${d.status} 상태예요`};let p=y(d.workspaceId),g=p?.objects.map(e=>({...e,tags:[...e.tags],attrs:{...e.attrs}}))??[],C=g.map(e=>({id:e.realityObjectId,at:(0,i.getRealityObject)(e.realityObjectId)?.updatedAt??null})),S=(l=(r={contextId:d.workspaceId,workspaceId:d.workspaceId,intent:d.intent,objectId:"hotel"!==d.targetObjectId&&"workspace"!==d.targetObjectId?d.targetObjectId:null}).contextId.trim(),c=y(s=r.workspaceId?.trim()||l)??f(l)??h({id:s,contextId:l}),(u=function(e,t){let n=e.target||"workspace",a=e.parameters,i=t?.objectId?.trim()||void 0;switch("modify_context"===e.action?"filter":"optimize_context"===e.action?"move":"analyze_context"===e.action?"simulate":"create_draft"===e.action?"prepare":e.action){case"filter":{if(a.historyOp)return null;
22let e=I(a.hotelType)??I(a.category),t=a.filter??null,i={};return e&&(i.category=e),t?.maxPriceBand!=null?i.maxPriceBand=t.maxPriceBand:"number"==typeof a.maxPriceBand&&(i.maxPriceBand=a.maxPriceBand),t?.tagIncludes&&Array.isArray(t.tagIncludes)&&t.tagIncludes.some(e=>/capsule|stay:capsule/i.test(e))&&(i.category="capsule"),0===Object.keys(i).length&&t&&Object.assign(i,t),0===Object.keys(i).length&&(i.raw=!0),{type:"FILTER_OBJECT",target:"workspace"===n?"hotel":n,changes:i}}case"add_constraint":return{type:"ADD_CONSTRAINT",target:n,objectId:i,changes:{near:I(a.near)??I(a.station)??I(a.utterance),pin:a.pin,...a}};case"remove_constraint":return{type:"REMOVE_CONSTRAINT",target:n,changes:{clear:a.clear??!0,key:a.key??null}};case"replace":return{type:"REPLACE_OBJECT",target:n,objectId:i,changes:{findSimilar:!!a.findSimilar,remove:!!a.remove,utterance:a.utterance??null}};case"move":return{type:"MOVE_OBJECT",target:n,objectId:i,changes:{dayHint:I(a.dayHint)??I(a.utterance),optimizeRoute:!!a.optimizeRoute}};case"compare":return{type:"COMPARE_OBJECT",target:n,objectId:i,changes:{}};case"simulate":return{type:"SIMULATE",target:n,objectId:i,changes:{scenarioKo:I(a.simulateScenarioKo)??I(a.utterance)??"what-if"}};case"prepare":return{type:"PREPARE",target:n,objectId:i,changes:{labelKo:I(a.labelKo)??"예약 준비"}};default:return null}}(r.intent,{objectId:r.objectId}))?function(e){let t=e.mutation;if(m(t.type),"MUTATE_REALITY"===t.type||!0===t.changes.mutateReality)return{ok:!1,reasonKo:"Global Reality Store 수정은 금지입니다",forbiddenRealityMutation:!0};let n=y(e.workspaceId);if(!n)return{ok:!1,reasonKo:"Workspace State가 없어요",forbiddenRealityMutation:!1};let a=K(n),r=n.objects.map(e=>({id:e.realityObjectId,at:(0,i.getRealityObject)(e.realityObjectId)?.updatedAt??null})),l=n.objects,s=[...n.filters],c=[...n.constraints],u=[...n.drafts],d=[...n.simulationResults],p=t.type,g="engine";
22switch(t.type){case"FILTER_OBJECT":{g="filter_object";let e="string"==typeof t.changes.category?t.changes.category:null,a=e?"category":"filter",i=e??t.changes;s=[...s.filter(e=>e.key!==a&&"category"!==e.key),{id:k("wf"),key:a,labelKo:"capsule"===e?"캡슐호텔":"필터",value:i,active:!0}],l=(0,o.applyFilterVisibility)(n.objects,t.target,t.changes),p="capsule"===e?"캡슐호텔 후보만 표시":`필터 \xb7 ${t.target}`;break}case"ADD_CONSTRAINT":{g="add_constraint";let e="string"==typeof t.changes.near?t.changes.near:null,a={id:k("wc"),key:e?"near":"constraint",labelKo:e?`${e} 근처`:"조건",value:e??t.changes,source:"nl"};c=[...c,a],e&&(l=(0,o.applyFilterVisibility)(n.objects,t.target,{near:e}),s=[...s.filter(e=>"near"!==e.key),{id:k("wf"),key:"near",labelKo:a.labelKo,value:e,active:!0}]),"boolean"==typeof t.changes.pin&&t.objectId&&(l=l.map(e=>e.id===t.objectId?{...e,bookmarked:t.changes.pin,updatedAtIso:new Date().toISOString()}:e)),p=a.labelKo;break}case"REMOVE_CONSTRAINT":g="remove_constraint",c=c.slice(0,-1),s=[],l=n.objects.map(e=>e.visible?e:{...e,visible:!0,updatedAtIso:new Date().toISOString()}),p="조건 해제 · 전체 표시";break;case"REPLACE_OBJECT":g="patch_object",t.changes.remove&&t.objectId?(l=n.objects.filter(e=>e.id!==t.objectId),p="후보 제거"):t.objectId?(l=n.objects.map(e=>e.id===t.objectId?{...e,attrs:{...e.attrs,replaceRequested:!0},updatedAtIso:new Date().toISOString()}:e),p="다른 후보로 교체 요청"):p="교체";break;case"MOVE_OBJECT":{g="engine";let e="string"==typeof t.changes.dayHint?t.changes.dayHint:null;c=[...c,{id:k("wc"),key:"schedule_slot",labelKo:e??"일정 이동",value:e??t.changes,source:"nl"}],t.objectId&&(l=n.objects.map(n=>n.id===t.objectId?{...n,attrs:{...n.attrs,scheduleHint:e,moved:!0},updatedAtIso:new Date().toISOString()}:n)),p=e??"일정 이동";break}case"COMPARE_OBJECT":if(g="patch_object",t.objectId)l=n.objects.map(e=>e.id===t.objectId?{...e,selected:!0,attrs:{...e.attrs,inCompare:!0},updatedAtIso:new Date().toISOString()}:e);else{let e=new Set(n.objects.filter(e=>"hotel"===e.kind).slice(0,2).map(e=>e.id));l=n.objects.map(t=>e.has(t.id)?{...t,selected:!0,attrs:{...t.attrs,inCompare:!0},updatedAtIso:new Date().toISOString()}:t)}p="비교";break;case"SIMULATE":g="add_simulation",d=[...d,{id:k("wsim"),objectId:t.objectId??null,scenarioKo:String(t.changes.scenarioKo??"what-if"),result:{draftOnly:!0,impactPending:!0},createdAtIso:new Date().toISOString()}],p="영향 시뮬레이션 · Draft";break;case"PREPARE":{g="add_draft";let e={id:k("wd"),kind:"prepare",objectId:t.objectId??null,labelKo:String(t.changes.labelKo??"예약 준비"),payload:{status:"draft"},status:"draft",createdAtIso:new Date().toISOString(),updatedAtIso:new Date().toISOString()};u=[...u,e],p=e.labelKo;break}default:return{ok:!1,reasonKo:"지원하지 않는 Mutation",forbiddenRealityMutation:!1}}let h=b({workspaceId:n.id,objects:l,filters:s,constraints:c,drafts:u,simulationResults:d,mutationType:g,targetObjectId:t.objectId,changes:{engineType:t.type,target:t.target,...t.changes},labelKo:p});if(!h)return{ok:!1,reasonKo:"Workspace State 반영 실패",forbiddenRealityMutation:!1};for(let e of r){let t=(0,i.getRealityObject)(e.id);if(t&&null!=e.at&&t.updatedAt!==e.at)return{ok:!1,reasonKo:"Global Reality Store가 변경됨 — 금지",forbiddenRealityMutation:!0}}return{ok:!0,mutation:t,workspaceId:h.id,beforeVisibleCount:a,afterVisibleCount:K(h),summaryKo:p}}({workspaceId:c.id,mutation:u}):{ok:!1,reasonKo:"Intent를 Mutation으로 바꿀 수 없어요",forbiddenRealityMutation:!1});if(!S.ok)return{ok:!1,reasonKo:S.reasonKo,forbiddenRealityMutation:S.forbiddenRealityMutation};for(let e of C){let t=(0,i.getRealityObject)(e.id);if(t&&null!=e.at&&t.updatedAt!==e.at)return{ok:!1,reasonKo:"Global Reality Store 변경 감지 — 적용 중단",forbiddenRealityMutation:!0}}let T=(0,n.updateDraftMutationStatus)(d.id,"applied");if(!T)return{ok:!1,reasonKo:"Draft 상태 갱신 실패"};(0,t.markCommandHistoryApplied)({workspaceId:d.workspaceId,draftMutationId:d.id});let L=function(e){let t=y(e.draft.workspaceId);if(!t)return null;let n="string"==typeof e.draft.afterState.hotelType?e.draft.afterState.hotelType:"string"==typeof e.draft.intent.parameters.hotelType?e.draft.intent.parameters.hotelType:null,a=t.simulationResults[t.simulationResults.length-1];return function(e){let t=e.beforeObjects.map(e=>({id:e.realityObjectId,updatedAt:(0,i.getRealityObject)(e.realityObjectId)?.updatedAt??null})),n=function(e){let t=new Map(e.beforeObjects.map(e=>[e.id,e])),n=new Map(e.afterObjects.map(e=>[e.id,e])),a=[],i=[];for(let n of e.afterObjects){let o=t.get(n.id);if(!o){a.push(w("OBJECT_ADDED",e.workspaceId,{objectId:n.id,realityObjectId:n.realityObjectId,title:n.title}));continue}o.visible!==n.visible&&i.push({objectId:n.id,realityObjectId:n.realityObjectId,visible:n.visible,title:n.title}),(o.selected!==n.selected||o.bookmarked!==n.bookmarked||o.title!==n.title)&&a.push(w("OBJECT_STATE_CHANGED",e.workspaceId,{objectId:n.id,realityObjectId:n.realityObjectId,before:{selected:o.selected,bookmarked:o.bookmarked,title:o.title},after:{selected:n.selected,bookmarked:n.bookmarked,title:n.title}}))}for(let t of e.beforeObjects)n.has(t.id)||a.push(w("OBJECT_REMOVED",e.workspaceId,{objectId:t.id,realityObjectId:t.realityObjectId,title:t.title}));return i.length>0&&a.push(w("OBJECT_VISIBLE_CHANGED",e.workspaceId,{changes:i,hotelType:e.hotelType??null,hiddenCount:i.filter(e=>!e.visible).length,shownCount:i.filter(e=>e.visible).length,summaryKo:e.summaryKo??`표시 ${i.filter(e=>e.visible).length} \xb7 숨김 ${i.filter(e=>!e.visible).length}`})),a}({workspaceId:e.workspaceId,beforeObjects:e.beforeObjects,afterObjects:e.afterWorkspace.objects,hotelType:e.hotelType,summaryKo:e.summaryKo});for(let t of(e.simulationCreated&&n.push(w("SIMULATION_CREATED",e.workspaceId,{...e.simulationCreated})),n))(0,x.appendProjectionEvent)(t),(0,v.dispatchProjectionEvent)(t);let a=e.afterWorkspace.objects.filter(e=>e.visible).map(e=>e.id),o=e.afterWorkspace.objects.filter(e=>!e.visible).map(e=>e.id),r={workspaceId:e.workspaceId,visibleObjectIds:a,hiddenObjectIds:o,hotelType:e.hotelType??null,revision:e.afterWorkspace.revision,updatedAtIso:new Date().toISOString()};
22(0,x.writeProjectionSnapshot)(r),!1!==e.syncContextWorkspace&&function(e){let t=(0,_.readContextWorkspace)(e.workspaceId);if(!t)return;let n=new Map(e.workspace.objects.map(e=>[e.realityObjectId,e])),a=new Map(e.workspace.objects.map(e=>[e.title.trim().toLowerCase(),e])),i=t.nodes.map(e=>{let t=n.get(e.placeId)||n.get(e.id)||a.get(e.title.trim().toLowerCase());return t&&e.visible!==t.visible?{...e,visible:t.visible}:e}),o={...t,nodes:i,updatedAtIso:new Date().toISOString(),lastChangeKo:"Projection · 표시 갱신"};(0,_.writeContextWorkspace)(o)}({workspaceId:e.workspaceId,workspace:e.afterWorkspace});for(let e of t){let t=(0,i.getRealityObject)(e.id);if(t&&null!=e.updatedAt&&t.updatedAt!==e.updatedAt)throw Error("Reality Projection Engine: Reality Object mutated — forbidden")}return(0,v.dispatchProjectionRefresh)({workspaceId:e.workspaceId,eventIds:n.map(e=>e.id),atIso:r.updatedAtIso,draftOnly:!0}),{events:n,snapshot:r}}({workspaceId:e.draft.workspaceId,beforeObjects:e.beforeObjects,afterWorkspace:t,hotelType:n,summaryKo:e.summaryKo??e.draft.impact.summaryKo,simulationCreated:"simulate"===e.draft.intent.action&&a?{simulationId:a.id,scenarioKo:a.scenarioKo}:null,syncContextWorkspace:!0})}({draft:T,beforeObjects:g,summaryKo:S.summaryKo}),E=new Date().toISOString();return(0,a.dispatchWorkspaceDraftEvent)(a.WORKSPACE_DRAFT_APPLIED,{workspaceId:d.workspaceId,draftId:d.id,status:"applied",atIso:E,draftOnly:!0}),(0,a.dispatchWorkspaceProjectionUpdate)({workspaceId:d.workspaceId,commandId:d.commandId,intentAction:d.intent.action,mutationType:"draft_applied",atIso:E,draftOnly:!0,draftId:d.id}),{ok:!0,draft:T,summaryKo:S.summaryKo,projectionEventCount:L?.events.length??0}}],586522)},421808,328110,859924,624659,270945,e=>{"use strict";var t=e.i(359237);e.i(162);var n=e.i(586522),a=e.i(780910),i=e.i(882878),o=e.i(347497),r=e.i(602927),l=e.i(96990),s=e.i(762014),c=e.i(162208);function u(e){let t=e.command.workspaceId.trim(),n=(0,c.readWorkspace)(t)??(0,c.readWorkspaceByContext)(t)??(0,c.createWorkspace)({id:t,contextId:t}),a=(0,s.buildRealityDiffFromIntent)({workspace:n,intent:e.intent}),u=(0,r.analyzeDraftImpact)({workspace:n,intent:e.intent}),d=new Date().toISOString(),p={id:`draft_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,workspaceId:t,targetObjectId:e.targetObjectId?.trim()||("workspace"!==e.intent.target?e.intent.target:"hotel"),beforeState:{...a.before},afterState:{...a.after},impact:u,status:"proposed",intent:e.intent,commandId:e.command.id,rawText:e.command.rawText,realityDiff:a,createdAtIso:d,updatedAtIso:d};return(0,o.saveDraftMutation)(p),(0,i.appendCommandHistory)({workspaceId:t,userInput:e.command.rawText,intent:e.intent,draftMutationId:p.id}),(0,l.dispatchWorkspaceDraftEvent)(l.WORKSPACE_DRAFT_CREATED,{workspaceId:t,draftId:p.id,status:"proposed",atIso:d,draftOnly:!0}),{draft:p,previewKo:(0,s.formatRealityDiffPreviewKo)(a),applyLabelKo:"적용",cancelLabelKo:"취소"}}var d=e.i(301008);function p(e){let t=e.trim();if(!t)return{ok:!1,reasonKo:"Active Workspace가 없어요 · Globe에서는 명령을 실행하지 않아요"};if(!(0,d.hasProvisionalContextWorkspace)(t))return{ok:!1,reasonKo:"Active Workspace 안에서만 명령할 수 있어요 · Globe Reality는 읽기 전용"};let n=(0,d.readContextWorkspace)(t);return n&&"closed"!==n.status&&"committed"!==n.status?{ok:!0,state:n}:{ok:!1,reasonKo:"닫혔거나 커밋된 Workspace에서는 Draft 명령을 받지 않아요"}}function m(e){return/호텔\s*바꿔|숙소\s*바꿔|다른\s*호텔|호텔\s*변경|바꿔\s*줘|change\s*hotel|replace\s*hotel/iu.test(e)}function g(e){return/첫\s*날|day\s*1|day1/iu.test(e)&&/피곤|빡세|힘들|과하|busy|fatigue|너무\s*많/iu.test(e)||/일정\s*너무|스케줄\s*빡|피곤할\s*것/iu.test(e)}function h(e){return/지구에\s*남|reality\s*commit|커밋|확정\s*결제|commit\s*globe/iu.test(e.trim())}e.s(["runWorkspaceCommandRuntime",0,function(e){let i=(0,a.parseWorkspaceCommand)({workspaceId:e.workspaceId,rawText:e.rawText});if(!i)return{ok:!1,command:null,reasonKo:"명령을 읽을 수 없어요",inactiveWorkspace:!1,forbiddenGlobeMutation:!1};let o=p(i.workspaceId);if(!o.ok)return{ok:!1,command:i,reasonKo:o.reasonKo,inactiveWorkspace:!0,forbiddenGlobeMutation:!1};
22let r=(0,t.resolveWorkspaceIntent)(i,{targetObjectId:e.targetObjectId});if(!r&&(0,t.looksLikeForbiddenGlobeCommit)(i.rawText))return{ok:!1,command:i,reasonKo:"Globe Reality Commit은 Workspace Command로 할 수 없어요 · Field에서 확정하세요",inactiveWorkspace:!1,forbiddenGlobeMutation:!0};if(!r)return{ok:!1,command:i,reasonKo:"Workspace에서 다룰 수 있는 명령이 아니에요",inactiveWorkspace:!1,forbiddenGlobeMutation:!1};let l=u({command:i,intent:r,targetObjectId:e.targetObjectId});if(e.applyImmediately){let e=(0,n.applyDraftMutation)(l.draft.id);if(!e.ok)return{ok:!1,command:i,reasonKo:e.reasonKo,inactiveWorkspace:!1,forbiddenGlobeMutation:!!e.forbiddenRealityMutation};let t=(0,c.readWorkspace)(i.workspaceId);return{ok:!0,command:i,intent:r,mutation:{workspaceId:i.workspaceId,targetObjectId:l.draft.targetObjectId,mutationType:"draft_applied",changes:l.draft.afterState},summaryKo:e.summaryKo,draftVersion:t?.revision??0,proposal:null,mode:"applied"}}let s=(0,c.readWorkspace)(i.workspaceId);return{ok:!0,command:i,intent:r,mutation:null,summaryKo:l.previewKo,draftVersion:s?.revision??0,proposal:l,mode:"proposed"}}],328110),e.s([],421808),e.s(["buildWorkspaceAgentPlan",0,function(e){let t=g(e.utterance)||"optimize_context"===e.intent.action&&"day1_fatigue"===e.intent.parameters.problem,n=!t&&("replace"===e.intent.action||m(e.utterance)),a=e.context.currentHotel?.title??"현재 숙소",i=t?"Day1 피로도 높음 · 맛집 제거 · Day2 이동 · Draft 준비":n?`Hotel Change \xb7 ${a} 대체안 준비`:`Workspace Plan \xb7 ${e.intent.action}`;return{id:`wap_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,8)}`,summaryKo:i,steps:t?[{id:"s1",order:1,labelKo:"Day1 일정 Observe",kind:"observe_schedule"},{id:"s2",order:2,labelKo:"피로도 분석",kind:"analyze_fatigue"},{id:"s3",order:3,labelKo:"대체 Plan",kind:"alternative_plan"},{id:"s4",order:4,labelKo:"영향 Simulation",kind:"analyze_impact"},{id:"s5",order:5,labelKo:"Draft 생성",kind:"create_draft"},{id:"s6",order:6,labelKo:"적용 요청",kind:"request_apply"}]:n?[{id:"s1",order:1,labelKo:"대체 호텔 탐색",kind:"explore_alternatives"},{id:"s2",order:2,labelKo:"영향 분석",kind:"analyze_impact"},{id:"s3",order:3,labelKo:"Draft 생성",kind:"create_draft"},{id:"s4",order:4,labelKo:"적용 요청",kind:"request_apply"}]:[{id:"s1",order:1,labelKo:"Context 영향 분석",kind:"analyze_impact"},{id:"s2",order:2,labelKo:"Draft 생성",kind:"create_draft"},{id:"s3",order:3,labelKo:"적용 요청",kind:"request_apply"}],intent:e.intent}},"isWorkspaceAgentCommitForbidden",0,function(e){return h(e)},"understandWorkspaceAgentIntent",0,function(e){if(h(e.utterance))return null;if(g(e.utterance))return{action:"optimize_context",target:"schedule",parameters:{problem:"day1_fatigue",observe:["airport","hotel","eatery","sightseeing"],plan:["remove_eatery_day1","move_sightseeing_day2"],utterance:e.utterance,reasonKo:"첫날 피로도 높음 · 일정 완화"}};let n=(0,a.createWorkspaceCommand)({workspaceId:e.workspaceId,rawText:e.utterance}),i=(0,t.resolveWorkspaceIntent)(n,{targetObjectId:e.context.currentHotel?.objectId});return i||(m(e.utterance)?{action:"replace",target:"hotel",parameters:{findSimilar:!0,utterance:e.utterance,currentHotelId:e.context.currentHotel?.objectId??null,currentHotelTitle:e.context.currentHotel?.title??null,reasonKo:"호텔 변경 요청"}}:null)}],859924),e.i(783503);var y=e.i(277462),f=e.i(576022);function b(e){return null!=e.priceWon&&Number.isFinite(e.priceWon)?e.priceWon:(0,f.parseWonAmount)(e.priceLabelKo)}function k(e){if(0===e)return"변동 없음";let t=Math.abs(e).toLocaleString("ko-KR");return e<0?`-${t}원`:`+${t}원`}function K(e){return 0===e?"변동 없음":e>0?`+${e}분`:`${e}분`}function I(e,t){let n=e=>e*Math.PI/180,a=n(t.lat-e.lat),i=n(t.lng-e.lng);return 12742e3*Math.asin(Math.min(1,Math.sqrt(Math.sin(a/2)**2+Math.cos(n(e.lat))*Math.cos(n(t.lat))*Math.sin(i/2)**2)))}function v(e,t){let n=e.attrs?.[t];return"number"==typeof n&&Number.isFinite(n)?n:null}function x(e,t,n){let a=v(e,n),i=v(t,n);return null==a||null==i?null:i-a}function _(e){let t=e.attrs?.relatedPlaceIds;
22return Array.isArray(t)?t.map(String).filter(Boolean):[]}let w="SIMULATION_ONLY",C=new Map,S=new Map;function T(e){if(new Set(["commit","reality_commit","globe_commit","stamp_globe","mutate_reality","apply_reality","write_reality"]).has(e))throw Error("Simulation Layer is SIMULATION_ONLY — Reality 변경 불가 (predict only)")}function L(e){var t,n;let a,i,o,r;return t={current:e.current,change:{kind:"replace_hotel",target:{...e.candidate,kind:e.candidate.kind||"hotel"},labelKo:`${e.current.title} → ${e.candidate.title}`},workspaceId:e.workspaceId,draftId:e.draftId,persist:e.persist},T("simulate"),a=t.current,o=function(e,t){var n,a;let i,o=b(e),r=b(t),l=null!=o&&null!=r?r-o:null,s=null;s=null!=e.travelMinutes&&null!=t.travelMinutes?t.travelMinutes-e.travelMinutes:function(e,t){if(null==e.lat||null==e.lng||null==t.lat||null==t.lng)return null;let n=I({lat:e.lat,lng:e.lng},{lat:t.lat,lng:t.lng});return!Number.isFinite(n)||n<40?0:Math.max(1,Math.round(n/80))}(e,t);let c=function(e,t){if(null==e.lat||null==e.lng||null==t.lat||null==t.lng)return null;let n=I({lat:e.lat,lng:e.lng},{lat:t.lat,lng:t.lng});return Number.isFinite(n)?Math.round(n):null}(e,t),u=null!=e.rating&&null!=t.rating&&Number.isFinite(e.rating)&&Number.isFinite(t.rating)?Math.round((t.rating-e.rating)*10)/10:null,d=x(e,t,"foodAccessMinutes"),p=x(e,t,"usjMinutes"),m=x(e,t,"airportMinutes"),g=(n=s,null!=(i=x(e,t,"scheduleLoadMinutes"))&&0!==i?{scheduleMinutesDelta:i,scheduleImpactKo:i>0?`일정 영향 \xb7 +${i}분`:`일정 영향 \xb7 ${i}분`}:null!=n&&0!==n||"hotel"===e.kind&&"hotel"===t.kind&&e.objectId!==t.objectId?{scheduleMinutesDelta:n,scheduleImpactKo:"일정 영향"}:{scheduleMinutesDelta:null,scheduleImpactKo:null}),h=function(e,t){let n=new Set(_(e)),a=new Set(_(t)),i=[];for(let e of a)n.has(e)||i.push(`+${e}`);for(let e of n)a.has(e)||i.push(`-${e}`);if(0===i.length&&(n.size>0||a.size>0)){let e=[...n].filter(e=>a.has(e));if(e.length>0)return{affected:e.map(e=>`~${e}`),summaryKo:`관계 ${e.length}개 재계산`}}return 0===i.length?{affected:[],summaryKo:null}:{affected:i,summaryKo:`관계 영향 ${i.length}개`}}(e,t),y=[];null!=l&&0!==l&&y.push(`가격 ${k(l)}`),null!=s&&0!==s&&y.push(`이동시간 ${K(s)}`),null!=c&&c>40&&y.push(`거리 +${c}m`),g.scheduleImpactKo&&y.push(g.scheduleImpactKo),h.summaryKo&&y.push(h.summaryKo),null!=d&&0!==d&&y.push(`맛집 접근성 ${K(d)}`),null!=p&&0!==p&&y.push(`USJ 거리 ${K(p)}`),null!=m&&0!==m&&y.push(`공항 접근성 ${K(m)}`);let f=[];null!=r?f.push(`가격: ${Math.round(r).toLocaleString("ko-KR")}원`):t.priceLabelKo&&f.push(`가격: ${t.priceLabelKo}`),null!=l&&f.push(`가격 변동: ${k(l)}`),null!=s&&f.push(`이동: ${K(s)}`),null!=c&&f.push(`거리: ${c}m`),g.scheduleImpactKo&&f.push(g.scheduleImpactKo),h.summaryKo&&f.push(h.summaryKo),null!=u&&f.push(`평점: ${function(e){if(0===e)return"변동 없음";let t=Math.round(10*e)/10;return t>0?`+${t}`:`${t}`}(u)}`),null!=d&&f.push(`맛집 접근성: ${K(d)}`),null!=p&&f.push(`USJ 거리: ${K(p)}`),null!=m&&f.push(`공항 접근성: ${K(m)}`),0===f.length&&f.push("측정 가능한 영향이 없어요");let v=[];null!=l&&v.push(function(e){if(0===e)return"가격 변동 없음";let t=e/1e4,n=Math.round(t);return .05>Math.abs(t-n)?n<0?`가격 ${n}만원`:`가격 +${n}만원`:`가격 ${k(e)}`}(l)),null!=s&&v.push(0===(a=s)?"이동 변동 없음":a>0?`이동 +${a}분`:`이동 ${a}분`),g.scheduleImpactKo&&v.push(g.scheduleImpactKo.startsWith("일정")?"일정 영향":g.scheduleImpactKo),h.summaryKo&&v.push(h.summaryKo);let w=[`${e.title} → ${t.title}`,...y.slice(0,3)].filter(Boolean).join(" · ");return{priceWonDelta:l,travelMinutesDelta:s,ratingDelta:u,distanceMetersDelta:c,scheduleImpactKo:g.scheduleImpactKo,scheduleMinutesDelta:g.scheduleMinutesDelta,relationsAffected:h.affected,relationsSummaryKo:h.summaryKo,foodAccessMinutesDelta:d,usjMinutesDelta:p,airportMinutesDelta:m,rippleEffects:y,summaryKo:w,linesKo:f,uxLinesKo:v,details:{beforePriceWon:o,afterPriceWon:r,beforeTravelMinutes:e.travelMinutes,afterTravelMinutes:t.travelMinutes,beforeRating:e.rating,afterRating:t.rating,rippleCount:y.length,axes:["price","distance","schedule","relations"]}}}(a,i=t.change.target),r={before:a,after:i,impact:o,status:w,simulationId:(n=i.objectId||"x",`sim_${Date.now().toString(36)}_${n.slice(0,12)}
22`),change:t.change,workspaceId:t.workspaceId?.trim()||null,draftId:t.draftId?.trim()||null,createdAtIso:new Date().toISOString()},!1!==t.persist&&function(e){if(T("save_simulation"),e.status!==w)throw Error("SimulationResult.status must be SIMULATION_ONLY");C.set(e.simulationId,e);let t=e.workspaceId?.trim();if(t){let n=S.get(t)??[];n.includes(e.simulationId)||S.set(t,[...n,e.simulationId]),t&&window.dispatchEvent(new CustomEvent("rimvio:reality-simulation-updated",{detail:{workspaceId:t,status:w}}))}}(r),r}function E(e){return{objectId:e.objectId,title:e.title,kind:e.kind??"hotel",priceWon:e.priceWon??null,priceLabelKo:e.priceLabelKo??null,rating:e.rating??null,travelMinutes:e.travelMinutes??null,lat:e.lat??null,lng:e.lng??null,attrs:e.attrs}}function P(e,t){let n=e[t];if("number"==typeof n&&Number.isFinite(n))return n;if("string"==typeof n){let e=Number(n);if(Number.isFinite(e))return e}return null}e.s(["generateWorkspaceAgentAction",0,function(e){let t=u({command:(0,a.createWorkspaceCommand)({workspaceId:e.workspaceId,rawText:e.utterance}),intent:e.plan.intent,targetObjectId:e.context.currentHotel?.objectId}),n=[],i=null,r=e.context.currentHotel?.entityId,l=e.context.currentHotel;if(r&&l&&"replace"===e.plan.intent.action){let t=function(e,t){let n=t?.limit??8,a=(0,y.getRealityEntity)(e);if(!a)return[];let i=(function(e,t){let n=e.trim(),a=(0,y.listRealityRelations)(n).filter(e=>!t?.kind||e.kind===t.kind),i=[];for(let e of a){let a=e.fromId===n?e.toId:e.fromId,o=(0,y.getRealityEntity)(a);o&&(!t?.types||t.types.includes(o.type))&&i.push({entity:o,relation:e,direction:e.fromId===n?"out":"in"})}return i})(e,{kind:"SimilarTo"}).map(e=>e.entity);if(i.length>0)return i.slice(0,n);let o=new Set(String(a.properties.tags??"").split(/[,\s]+/).filter(Boolean).map(e=>e.toLowerCase())),r=String(a.properties.name??a.properties.title??"").toLowerCase();return(0,y.listRealityEntities)(a.type).filter(e=>e.id!==a.id).map(e=>{let t=String(e.properties.tags??"").split(/[,\s]+/).filter(Boolean).map(e=>e.toLowerCase()),n=0;for(let e of t)o.has(e)&&(n+=2);let i=String(e.properties.name??e.properties.title??"").toLowerCase();return r&&i&&(i.includes(r)||r.includes(i))&&(n+=1),e.properties.category&&e.properties.category===a.properties.category&&(n+=2),{e,score:n}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score).slice(0,n).map(e=>e.e)}(r,{limit:3});for(let e of t){let t=String(e.properties.name??e.properties.title??e.id);n.push(t)}let a=t[0];if(a){let t=(0,y.getRealityEntity)(r),n=t?.properties??{},o=P(a.properties,"priceWon")??(0,f.parseWonAmount)(String(a.properties.priceLabelKo??a.properties.amountLabel??"")||null),s=P(a.properties,"travelMinutes"),c=P(a.properties,"rating"),u=P(n,"priceWon")??(0,f.parseWonAmount)(l.priceLabelKo),d=P(n,"travelMinutes")??0,p=P(n,"rating");i=L({workspaceId:e.workspaceId,current:E({objectId:l.objectId,title:l.title,kind:"hotel",priceWon:u,priceLabelKo:l.priceLabelKo,rating:p,travelMinutes:d,lat:P(n,"lat"),lng:P(n,"lng")}),candidate:E({objectId:a.id,title:String(a.properties.name??a.properties.title??a.id),kind:"hotel",priceWon:o,priceLabelKo:null!=o?`${o.toLocaleString("ko-KR")}원`:String(a.properties.priceLabelKo??"")||null,rating:c,travelMinutes:s??0,lat:P(a.properties,"lat"),lng:P(a.properties,"lng")})})}}0===n.length&&"replace"===e.plan.intent.action&&n.push("비슷한 후보를 Workspace에서 다시 모읍니다");let s="optimize_context"===e.plan.intent.action&&"day1_fatigue"===e.plan.intent.parameters.problem;s&&(n.push("Day1 맛집 제거","관광 Day2 이동"),i=L({workspaceId:e.workspaceId,persist:!0,current:E({objectId:"day1_schedule",title:"Day1 · 공항→호텔→맛집→관광",kind:"schedule",priceWon:null,travelMinutes:180,attrs:{fatigueScore:85,foodAccessMinutes:40,usjMinutes:90,airportMinutes:50}}),candidate:E({objectId:"day1_schedule_soft",title:"Day1 · 공항→호텔 · 관광은 Day2",kind:"schedule",priceWon:null,travelMinutes:90,attrs:{fatigueScore:45,foodAccessMinutes:20,usjMinutes:90,airportMinutes:50}})}));let c={...t,draft:{...t.draft,afterState:{...t.draft.afterState,proposalKind:s?"schedule_soften":"replace"===e.plan.intent.action?"hotel_change":"context",alternativesKo:n,currentHotel:l?.title??null,simulationId:i?.simulationId??null,simulationStatus:i?.status??null,simulationImpact:i?.impact??null,...s?{observe:["airport","hotel","eatery","sightseeing"],problem:"피로도 높음",plan:["맛집 제거","Day2 이동"]}:{}},beforeState:{...t.draft.beforeState,currentHotel:l?.title??null,priceLabelKo:l?.priceLabelKo??null,...s?{day1:["공항","호텔","맛집","관광"],fatigueScore:85}:{}}},previewKo:s?`Schedule Soften \xb7 Day1 피로도 ↓ \xb7 ${t.previewKo}`:"replace"===e.plan.intent.action?`Hotel Change Proposal \xb7 ${l?.title??"현재 호텔"} → 대체안 \xb7 ${t.previewKo}`:t.previewKo};return(0,o.saveDraftMutation)(c.draft),{proposal:c,alternativesKo:n,proposalKind:"replace"===e.plan.intent.action?"hotel_change":"modify_context"===e.plan.intent.action||"filter"===e.plan.intent.action?"context_modify":"generic",simulation:i}}
22],624659),e.s(["readWorkspaceAgentContext",0,function(e){let t=p(e);if(!t.ok)return{ok:!1,reasonKo:t.reasonKo};let n=t.state,a=(0,c.readWorkspace)(e)??(0,c.readWorkspaceByContext)(e)??(0,c.createWorkspace)({id:e,contextId:e}),i=n.nodes.find(e=>e.selected&&"lodging"===e.kind)??n.nodes.find(e=>"lodging"===e.kind&&e.visible)??null,o=a.objects.find(e=>e.selected&&"hotel"===e.kind)??a.objects.find(e=>"hotel"===e.kind&&e.visible)??null,r=o?.title??i?.title??null,l=o?.priceLabelKo??i?.amountLabel??null,s=o?.id??i?.id??"",u=o?.entityId??i?.placeId??i?.id??"",d=[];if(n.query.trim()&&d.push(`Query \xb7 ${n.query.trim()}`),n.lastChangeKo&&d.push(n.lastChangeKo),/가격|비싸|상승|올랐/u.test(n.lastChangeKo??"")&&d.push("상태 · 가격 상승 신호"),o){let e=(0,y.getRealityEntity)(o.entityId);e?.properties.priceRising===!0&&d.push("상태 · 가격 상승")}let m=a.objects.filter(e=>"hotel"===e.kind&&e.visible).length||n.nodes.filter(e=>"lodging"===e.kind&&e.visible).length;return{ok:!0,context:{workspaceId:a.id,contextId:n.contextEventId,contextTitleKo:n.summaryKo.trim()||n.query.trim()||"Active Workspace",domain:n.domain,currentHotel:r&&s?{objectId:s,entityId:u,title:r,priceLabelKo:l,selected:!!(o?.selected||i?.selected)}:null,visibleHotelCount:m,notesKo:d,draftOnly:!0}}}],270945)},236995,555488,151797,e=>{"use strict";var t=e.i(859924),n=e.i(624659),a=e.i(270945),i=e.i(21408);e.s(["runWorkspaceRealityAgent",0,function(e){let o=e.workspaceId.trim(),r=e.utterance.trim();if(!o||!r)return{ok:!1,reasonKo:"Workspace / 발화가 없어요",inactiveWorkspace:!o,realityCommitAttempted:!1};if((0,i.assertNoRealityCommitFromAgent)("draft"),(0,t.isWorkspaceAgentCommitForbidden)(r))return{ok:!1,reasonKo:"Reality Commit은 Agent 범위 밖이에요 · Field에서 확정하세요",inactiveWorkspace:!1,realityCommitAttempted:!0};let l=(0,a.readWorkspaceAgentContext)(o);if(!l.ok)return{ok:!1,reasonKo:l.reasonKo,inactiveWorkspace:!0,realityCommitAttempted:!1};let{context:s}=l,c=(0,t.understandWorkspaceAgentIntent)({workspaceId:o,utterance:r,context:s});if(!c)return{ok:!1,reasonKo:"Workspace에서 다룰 Intent를 못 찾았어요",inactiveWorkspace:!1,realityCommitAttempted:!1};let u=(0,t.buildWorkspaceAgentPlan)({intent:c,context:s,utterance:r}),d=(0,n.generateWorkspaceAgentAction)({workspaceId:o,utterance:r,context:s,plan:u}),p=(0,i.validateWorkspaceAgentImpact)({proposal:d.proposal,utterance:r});if(!p.ok)return{ok:!1,reasonKo:p.reasonKo,inactiveWorkspace:!1,realityCommitAttempted:!0};let m=s.currentHotel?`Current \xb7 ${s.currentHotel.title}${s.currentHotel.priceLabelKo?` \xb7 ${s.currentHotel.priceLabelKo}`:""}`:"Current · 숙소 미선택",g=d.alternativesKo.length>0?`대체 후보 \xb7 ${d.alternativesKo.join(", ")}`:"대체 후보 · Workspace에서 탐색",h=d.simulation?["Simulation · SIMULATION_ONLY",...d.simulation.impact.linesKo]:null,y=[`Context \xb7 ${s.contextTitleKo}`,m,s.notesKo.find(e=>/가격/u.test(e))??null,u.summaryKo,g,...h??[],"Draft 준비됨 · [적용] 대기 · Reality Commit 없음"].filter(Boolean).join("\n");return{ok:!0,phase:"request_apply",context:s,intent:c,plan:u,proposal:d.proposal,validation:p,summaryKo:y,proposalKind:d.proposalKind,simulation:d.simulation}}],555488),e.s([],236995);let o=["context_over_chat","clear_intent_replace","soft_intent_refine","diff_first","scoped_turn","tool_loop","soft_vs_dangerous","keep_context_change_edit","no_invent_outside_tools","explain_on_demand","reality_first_text_second","never_mutate_without_transition","plan_before_execute","evidence_required","never_lose_user_constraint","separate_observation_and_decision","user_owns_commit","preserve_context_identity","every_action_has_ownership","progressive_disclosure","no_dead_objects","capability_before_action","learn_from_decisions","reality_diff_is_interface","agent_leaves_breadcrumbs"];o.slice(0,10),o.slice(10),e.s([],151797)},286726,961274,700814,664975,674344,199686,396835,330334,332464,e=>{"use strict";var t=e.i(229563);let n={allowSoftNextTargets:[],allowPatchKinds:["filter_entity","spatial_constraint","replace_entity","select_entity","delete_entity"]},a={allowSoftNextTargets:[],allowPatchKinds:["filter_entity","spatial_constraint","replace_entity","select_entity","delete_entity"]},i={allowSoftNextTargets:[],allowPatchKinds:["filter_entity","select_entity","delete_entity"]};function o(e){let t=e.trim();return/맛집|식당|카페|restaurant|eatery|이자카야/iu.test(t)?"eatery":/놀거리|관광|명소|poi|usj|유니버설|유니버셜/iu.test(t)?"poi":/편의|약국|atm|amenity/iu.test(t)?"amenity":/노선|메트로|지하
22철|jr|지도에\s*보여/iu.test(t)?"map":/호텔|숙소|캡슐|료칸|lodging|hotel/iu.test(t)?"lodging":"mixed"}function r(e,t){return{...e,scoutFingerprint:t}}e.i(20957);var l=e.i(804250);let s=/^(?:계속해|이어서|다음(?:으로)?|continue)$/iu,c=/^(?:아니(?:야|오)?|그만|중단|스톱|stop|cancel)|그거\s*말고|그건\s*말고|다른\s*(?:일|거|작업)|대신\s|새\s*작업|그만해|하지\s*마/iu,u=/([가-힣A-Za-z0-9·]+역)\s*(?:근처|주변|앞)|(?:근처|주변)\s*(?:호텔|숙소|맛집)|쪽으로|중심으로|근처로|주변으로/iu,d=/(?:맛집|호텔|숙소|카페|놀거리|관광|약국)도|(?:그리고|또)\s*(?:맛집|호텔|숙소|카페|놀거리)/iu;function p(e){let n=e.utterance.trim(),a=o(n);if(!n)return{switchJob:!1,abortSoftContinue:!1,mutation:{mode:"none",reason:"none",replyHintKo:null},statusHintKo:null,isContinueCue:!1,nextTarget:a};if(s.test(n))return{switchJob:!1,abortSoftContinue:!1,mutation:{mode:"none",reason:"none",replyHintKo:null},statusHintKo:null,isContinueCue:!0,nextTarget:e.previousJob?.target??a};let i=(0,t.resolveWorkspaceMutationMode)({utterance:n,hasVisibleCandidates:e.hasVisibleCandidates}),r=null!=e.patchKind?null:(0,l.parseWorkspacePatch)(n),p=e.patchKind??r?.kind??null,m="spatial_constraint"===p||u.test(n),g=c.test(n),h=e.previousJob,y=!!(h&&"active"===h.status)&&"mixed"!==a&&"mixed"!==h.target&&a!==h.target&&(d.test(n)||/맛집|식당|카페|호텔|숙소|놀거리|관광|약국/iu.test(n));if(m&&"replace"!==i.mode&&(i={mode:"replace",reason:"clear_location",replyHintKo:"위치를 반영해 후보를 다시 찾았어요"}),(g||y)&&"none"===i.mode&&(i={mode:"replace",reason:"clear_research",replyHintKo:y?"찾는 대상을 바꿔서 새로 진행할게요":"이전 요청은 멈추고 새로 진행할게요"}),"refine"===i.mode&&!g&&!m&&!y)return{switchJob:!1,abortSoftContinue:!1,mutation:i,statusHintKo:null,isContinueCue:!1,nextTarget:a};let f=g||m||y||"replace"===i.mode||"replace_entity"===p;return{switchJob:f,abortSoftContinue:f,mutation:i,statusHintKo:f?g?"이전 이어서 하던 일은 멈췄어요":y?"대상을 바꿔 새 작업으로 바꿨어요":"새 요청으로 바꿨어요 · 이전 자동 이어하기는 취소했어요":null,isContinueCue:!1,nextTarget:a}}e.s(["resolveWorkspaceJobBoundary",0,p],286726);var m=e.i(902308),g=e.i(305125),h=e.i(890503);function y(e){let t=(0,h.extractNearPlaceLabelFromUtterance)(e.utterance)||"",n=(0,g.parseLodgingStayTypeFromText)(e.utterance)??"",a=(0,m.parseMaxNightlyPriceKrw)(e.utterance),i="number"==typeof e.lat&&Number.isFinite(e.lat)?e.lat.toFixed(4):"",r="number"==typeof e.lng&&Number.isFinite(e.lng)?e.lng.toFixed(4):"";return{target:o(e.utterance),nearLabel:t.trim().toLowerCase(),lat:i,lng:r,stayType:String(n),maxPrice:null!=a?String(a):"",mode:e.mode}}function f(e){return[e.target,e.nearLabel,e.lat,e.lng,e.stayType,e.maxPrice,"refine"===e.mode?"refine":"scout"].join("|")}function b(e){let t=e.previous?.trim()??"";return!!t&&t!==e.next.trim()}function k(e){let t=p({utterance:e.utterance,hasVisibleCandidates:e.hasVisibleCandidates,patchKind:e.patchKind??null,previousJob:e.previousJob??null}),n=e.previousJob??null;if(t.isContinueCue)return{kind:"continue_cue",previousJob:n,boundary:t};if(!t.switchJob&&"refine"===t.mutation.mode&&n?.status==="active"||!t.switchJob&&n?.status==="active")return{kind:"continue_job",previousJob:n,boundary:t};let a="fresh";return("clear_location"===t.mutation.reason||/역\s*근처|근처|주변/u.test(e.utterance))&&(a="spatial"),(t.statusHintKo?.includes("대상")||n&&"mixed"!==t.nextTarget&&n.target!==t.nextTarget)&&(a="target_pivot"),/^(?:아니|그만|중단)/u.test(e.utterance.trim())&&(a="interrupt"),"replace"===t.mutation.mode&&(a="fresh"===a?"replace":a),n||(a="fresh"),{kind:"new_job",previousJob:n,boundary:t,reason:a}}e.s(["buildScoutFingerprintParts",0,y,"fingerprintScoutQuery",0,f,"isScoutFingerprintStale",0,b],961274),e.s(["classifyAgentJobTurn",0,k],700814);var K=e.i(301008),I=e.i(85724),v=e.i(205317);function x(e){let t=e.contextEventId.trim();e.abortSoftContinue&&(0,v.bumpSoftNextWorkGeneration)(t);
22let n=(0,K.readContextWorkspace)(t);n&&(0,K.writeContextWorkspace)({...n,agentJob:e.job,lastScoutFingerprint:e.scoutFingerprint,...e.constraintMemory?{constraintMemory:e.constraintMemory}:{},updatedAtIso:new Date().toISOString()}),e.stampConstitution&&"none"!==e.mutationMode&&(0,I.stampAgentConstitutionOnWorkspace)({contextEventId:t,utterance:e.utterance,mutationMode:e.mutationMode,beforeSummaryKo:e.beforeSummaryKo??n?.summaryKo})}e.s(["commitAgentGuardContinue",0,x],664975),e.s([],674344);let _=/찾아|검색|보여|골라|추천|후보|discover|find|search|show/iu,w=/예약\s*준비|준비해|prepare|결제\s*준비|북마크\s*준비/iu,C=/커밋|commit|확정\s*해|예약\s*해\s*줘|결제해|당장\s*예약/iu,S=/더\s*싸|저렴|그중|이\s*중|필터|정렬|빼|삭제|만\s*보/iu,T=/여기\s*근처|이쪽(?:으로)?|이\s*주변|around\s*here|near\s*me|내\s*위치\s*근처/iu,L=/^(?:근처|주변)\s*(?:호텔|숙소|맛집|카페)?|(?:호텔|숙소|맛집)\s*(?:근처|주변)(?:에|로)?\s*(?:찾아|보여|검색)?/iu;function E(e){let t=(0,K.readContextWorkspace)(e);return!!t&&t.nodes.some(e=>"reality_anchor"===e.source||e.tags.includes("place_locate")||e.tags.includes("reality_anchor")||"string"==typeof e.placeId&&e.placeId.startsWith("geo:"))}function P(e){let t=e.utterance.trim();if(!t)return{ok:!0};if(T.test(t)&&!E(e.contextEventId))return{ok:!1,reason:"here_without_anchor",statusKo:"「여기」기준점이 없어요 · 역·장소 이름을 먼저 말해 주세요"};let n=(0,h.extractNearPlaceLabelFromUtterance)(t);return/근처|주변|near|around/iu.test(t)&&L.test(t)&&(!n||n===t)&&!E(e.contextEventId)?{ok:!1,reason:"near_without_place",statusKo:"어디 근처인지 모호해요 · 「○○역 근처」처럼 말해 주세요"}:/(?:일정|데이|day)\s*(?:전체|다시|재구성|리빌드)/iu.test(t)&&/호텔|숙소|맛집/iu.test(t)?{ok:!1,reason:"multi_read",statusKo:"요청이 두 가지예요 · 일정 수정과 검색을 나눠서 말해 주세요"}:{ok:!0}}e.s(["resolveAmbiguityGate",0,P],199686);var A=e.i(519384),$=e.i(549419);function j(e){return"drop"===e.op?null:"from_utterance"===e.op?e.fromUtterance??e.previous:e.previous}function R(e){let t=e.previousBag??(0,A.emptyConstraintMemory)(),n=(0,A.mergeConstraintMemoryFromUtterance)({prev:(0,A.emptyConstraintMemory)(),utterance:e.utterance}),a=(0,A.mergeConstraintMemoryFromUtterance)({prev:t,utterance:e.utterance}),i=(0,$.planConstraintInheritance)({utterance:e.utterance,switchJob:e.switchJob,previousTarget:e.previousTarget,nextTarget:e.nextTarget,hasPreviousNear:!!t.nearLabelKo}),o=new Map(i.map(e=>[e.field,e])),r=o.get("near")?.op??"keep",l=o.get("stayType")?.op??"from_utterance",s=o.get("budget")?.op??"keep",c=o.get("minRating")?.op??"keep",u=o.get("keepTopN")?.op??"keep",d=o.get("sortBy")?.op??"keep",p=o.get("destination")?.op??"keep",m=j({op:r,previous:t.nearLabelKo,fromUtterance:n.nearLabelKo??a.nearLabelKo}),g=j({op:p,previous:t.destinationKo,fromUtterance:n.destinationKo??a.destinationKo}),h=j({op:l,previous:t.stayType,fromUtterance:n.stayType??a.stayType}),y=j({op:s,previous:t.maxNightlyPriceKrw,fromUtterance:n.maxNightlyPriceKrw}),f=j({op:s,previous:t.maxPriceBand,fromUtterance:n.maxPriceBand}),b=j({op:c,previous:t.minRating,fromUtterance:n.minRating}),k=j({op:u,previous:t.keepTopN,fromUtterance:n.keepTopN}),K=j({op:d,previous:t.sortBy,fromUtterance:n.sortBy}),I="drop"===r&&!!t.nearLabelKo,v="drop"===l&&!!t.stayType,x=o.get("near")?.reason==="target_stack_keeps_spatial",_={maxNightlyPriceKrw:y,maxPriceBand:f,destinationKo:g,nearLabelKo:m,stayType:h,minRating:b,keepTopN:k,sortBy:K,updatedAtIso:new Date().toISOString()},w=null;return x&&m?w=`${m} 기준은 유지하고 대상만 바꿨어요`:I&&t.nearLabelKo&&(w=`이전 위치(${t.nearLabelKo})는 안 끌고 갔어요`),{bagForScout:_,carriedNear:!!m&&!I,droppedNear:I,droppedStayType:v,inheritedSpatialFromStack:x,decisions:i,statusKo:w}}e.s(["resolveConstraintCarryOver",0,R],396835);let D=/(?:이|그)\s*(?:호텔|숙소|곳|후보).{0,8}(?:빼|삭제|제거|빼\s*줘)|(?:빼|삭제|제거)\s*줘/iu,M=/(?:day\s*|데이\s*|Day\s*)(\d+)|(\d+)\s*일차?.{0,12}(?:넣|추가|옮겨)/iu,W=/일정\s*(?:전체|다)\s*(?:다시|재|바꿔)|트립\s*전체\s*재|rebuild\s*trip|여행\s*다시\s*짜/iu;function O(e,t){return{ok:!1,decision:{action:"STOP",code:e,statusKo:t}}}function N(e){var t,l,s,c;let u,d,p,m=e.contextEventId.trim(),g=e.utterance.trim(),h=(0,K.readContextWorksp
22ace)(m),I=k({utterance:g,hasVisibleCandidates:!!h?.nodes.some(e=>e.visible),patchKind:e.patchKind??null,previousJob:h?.agentJob??null}),v=P({utterance:g,contextEventId:m});if(!v.ok)return O("ambiguity",v.statusKo);let x=(d=g.trim())?C.test(d)?{level:"commit",discoverOnly:!1,allowPrepare:!0,allowCommit:!1,statusKo:null}:w.test(d)&&!_.test(d)?{level:"prepare",discoverOnly:!1,allowPrepare:!0,allowCommit:!1,statusKo:null}:_.test(d)&&w.test(d)?{level:"discover",discoverOnly:!0,allowPrepare:!1,allowCommit:!1,statusKo:"검색만 진행할게요 · 예약 준비는 후보 고른 뒤에"}:_.test(d)?{level:"discover",discoverOnly:!0,allowPrepare:!1,allowCommit:!1,statusKo:null}:S.test(d)?{level:"refine",discoverOnly:!1,allowPrepare:!1,allowCommit:!1,statusKo:null}:w.test(d)?{level:"prepare",discoverOnly:!1,allowPrepare:!0,allowCommit:!1,statusKo:null}:{level:"observe",discoverOnly:!1,allowPrepare:!1,allowCommit:!1,statusKo:null}:{level:"observe",discoverOnly:!1,allowPrepare:!1,allowCommit:!1,statusKo:null};if("reality_prepare"===e.toolId&&(!x.allowPrepare||x.discoverOnly))return O("action_level",x.statusKo??"지금은 검색 단계예요 · 예약 준비는 후보를 고른 뒤에");let T=(u=(c={utterance:g,patchKind:e.patchKind??null}).utterance.trim())?W.test(u)?{ok:!1,reason:"rebuild_trip",statusKo:"일정 전체 재구성은 한 번에 안 해요 · Day에 넣을 장소만 말해 주세요"}:D.test(u)?c.patchKind&&"delete_entity"!==c.patchKind&&"filter_entity"!==c.patchKind?{ok:!1,reason:"scope_overflow",statusKo:"빼달라는 요청이라 검색·일정 전체는 건드리지 않아요"}:{ok:!0,allowedPatchKinds:["delete_entity","filter_entity","update_entity"]}
22:M.test(u)&&!/호텔|숙소|맛집\s*찾아/iu.test(u)?{ok:!0,allowedPatchKinds:["move_schedule","create_entity","update_entity"]}:{ok:!0,allowedPatchKinds:null}:{ok:!0,allowedPatchKinds:null};if(!T.ok)return O("mutation_scope",T.statusKo);if(e.patchKind&&(t=e.patchKind,!(!(l=T.allowedPatchKinds)||0===l.length||l.includes(t))))return O("mutation_scope","이 말로는 그 변경까지는 하지 않아요");let L=function(e){let t,l=e.contextEventId.trim(),s=e.utterance.trim(),c=(0,K.readContextWorkspace)(l),u=!!c?.nodes.some(e=>e.visible),d=e.classification??k({utterance:s,hasVisibleCandidates:u,patchKind:e.patchKind??null,previousJob:c?.agentJob??null}),p=d.boundary,m=f(y({utterance:s,mode:e.scoutMode??("refine"===p.mutation.mode?"refine":(p.mutation.mode,"replace")),lat:e.lat,lng:e.lng})),g=b({previous:c?.agentJob?.scoutFingerprint??c?.lastScoutFingerprint,next:m}),h=g||"replace"===p.mutation.mode||p.switchJob||"spatial_constraint"===e.patchKind||"replace_entity"===e.patchKind,I=c?.agentJob??null;if("continue_cue"===d.kind&&I?.status==="active")t=I;else if("continue_job"===d.kind&&"refine"===p.mutation.mode&&I?.status==="active")t=r({...I,intent:"refine",lastUtterance:s},m);else if("continue_job"===d.kind&&I?.status==="active")t=r({...I,lastUtterance:s},m);else{var v,x;let r,l,c,u="refine"===p.mutation.mode?"refine":"create_draft"===e.patchKind||/예약\s*준비|prepare/iu.test(s)?"prepare":"discover";r=(v={utterance:s,intent:u,target:"mixed"===p.nextTarget?void 0:p.nextTarget,scoutFingerprint:m}).target??o(v.utterance),l="refine"===v.intent?i:"eatery"===r?a:"lodging"===r?n:{allowSoftNextTargets:[],allowPatchKinds:n.allowPatchKinds},t={id:`job_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,goalKo:(x=v.utterance,(c=x.trim().replace(/\s+/gu," ")).length<=40?c||r:`${c.slice(0,39).trimEnd()}…`),intent:v.intent,target:r,scope:l,status:"active",scoutFingerprint:v.scoutFingerprint??null,startedAtIso:new Date().toISOString(),lastUtterance:v.utterance.trim()||null}}let _=p.statusHintKo??(g&&h?"조건이 바뀌어서 이전 후보는 버리고 다시 찾았어요":null);return{ok:!0,classification:d,boundary:p,job:t,switchJob:p.switchJob,abortSoftContinue:p.abortSoftContinue,forceReplaceScout:h,scoutFingerprint:m,statusHintKo:_,allowSoftNextAuto:!p.switchJob&&!p.abortSoftContinue&&t.scope.allowSoftNextTargets.length>0,stampConstitution:p.switchJob&&"none"!==p.mutation.mode}}({contextEventId:m,utterance:g,patchKind:e.patchKind??null,lat:e.lat,lng:e.lng,scoutMode:e.scoutMode,classification:I}),E=(p=(s={utterance:g,scoutFingerprint:L.scoutFingerprint,jobId:h?.agentJob?.id??null,workspaceRevision:function(e){if(!e)return"0";let t=e.patches?.length??0,n=e.nodes.filter(e=>e.visible).length,a=e.selectedIds.join(","),i=e.agentJob?.id??"",o=e.lastScoutFingerprint??"";return[e.updatedAtIso,String(t),String(n),a,i,o].join("|")}(h),patchKind:e.patchKind??null,toolId:e.toolId??null}).utterance.trim().toLowerCase().replace(/\s+/gu," "),[s.scoutFingerprint,s.jobId??"",s.workspaceRevision,s.toolId??"",s.patchKind??"",p].join("::")),$=function(e){let t=e.contextEventId.trim(),n=(0,K.readContextWorkspace)(t),a=e.nowMs??Date.now(),i=n?.lastIdempotencyKey?.trim()??"",o=n?.lastIdempotencyAtIso?Date.parse(n.lastIdempotencyAtIso):NaN;if(i&&i===e.key)return{ok:!1,key:e.key,statusKo:"같은 상태의 같은 요청은 이미 반영됐어요"};if(i&&Number.isFinite(o)&&a-o<3e4){let t=i.split("::"),n=e.key.split("::");if(t[0]&&n[0]&&t[0]===n[0]&&t[5]&&n[5]&&t[5]===n[5])return{ok:!1,key:e.key,statusKo:"방금 같은 요청은 이미 반영됐어요"}}return{ok:!0,key:e.key}}({contextEventId:m,key:E});if(!$.ok)return O("idempotent",$.statusKo);let j=R({utterance:g,previousBag:h?.constraintMemory,switchJob:L.switchJob,previousTarget:h?.agentJob?.target,nextTarget:L.job.target}),N=(0,A.applyConstraintMemoryToScoutQuery)(g,j.bagForScout),F=[L.statusHintKo,x.statusKo,j.statusKo].filter(Boolean).join(" · ")||null,B={action:"CONTINUE",statusKo:F};return{ok:!0,decision:B,payload:{decision:B,classification:I,actionLevel:x.level,allowPrepare:x.allowPrepare,discoverOnly:x.discoverOnly,job:L.job,switchJob:L.switchJob,abortSoftContinue:L.abortSoftContinue,forceReplaceScout:L.forceReplaceScout,scoutFingerprint:L.scoutFingerprint,allowSoftNextAuto:L.allowSoftNextAuto,stampConstitution:L.stampConstitution,mutationMode:L.boundary.mutation.mode,carry:j,scoutUtterance:N,idempotencyKey:E,statusHintKo:F}}}e.s(["evaluateAgentGuardPipeline",0,N],330334),e.s(["runAgentP1Guards",0,function(e){let t=N(e);
22if(!t.ok)return{ok:!1,code:t.decision.code,statusKo:t.decision.statusKo};let n=t.payload,a=(0,K.readContextWorkspace)(e.contextEventId.trim());return x({contextEventId:e.contextEventId,utterance:e.utterance,job:n.job,scoutFingerprint:n.scoutFingerprint,abortSoftContinue:n.abortSoftContinue,stampConstitution:n.stampConstitution,mutationMode:n.mutationMode,beforeSummaryKo:a?.summaryKo,constraintMemory:n.carry.bagForScout}),{ok:!0,job:n.job,switchJob:n.switchJob,abortSoftContinue:n.abortSoftContinue,forceReplaceScout:n.forceReplaceScout,scoutFingerprint:n.scoutFingerprint,statusHintKo:n.statusHintKo,allowSoftNextAuto:n.allowSoftNextAuto,actionLevel:n.actionLevel,allowPrepare:n.allowPrepare,discoverOnly:n.discoverOnly,carry:n.carry,scoutUtterance:n.scoutUtterance,idempotencyKey:n.idempotencyKey,decision:n.decision}}],332464)},468932,e=>{"use strict";var t=e.i(462653),n=e.i(923531);e.i(151797),e.i(229563),e.i(286726),e.i(961274),e.i(674344),e.i(700814),e.i(330334),e.i(664975),e.i(332464),e.i(199686),e.i(396835),e.i(984751),e.i(519384);var a=e.i(85724),i=e.i(210534),o=e.i(723627),r=e.i(301008);e.i(954696);var l=e.i(472181),s=e.i(751382),c=e.i(890503),u=e.i(678767),d=e.i(281242),p=e.i(509946);function m(e){let t=(0,c.resolveRealityAnchorFromUtterance)(e);if(!t||"poi"!==t.kind||!/usj|유니버설|유니버셜|universal|도톤|osaka\s*castle|오사카성/iu.test(`${t.geoId} ${t.labelKo} ${e}`))return null;let n=t.geoId.replace(/^geo:(?:jp:)?/u,"").replace(/:/g,"-");return{id:`poi:osaka:${n}`,labelKo:t.labelKo,lat:t.lat,lng:t.lng,rating:4.6,walkMinutes:null,priceBand:null,reservable:!0,localFavorite:!1,source:"maps",amountLabel:null}}function g(e){return/usj|유니버설|유니버셜|universal/iu.test(`${e.id} ${e.labelKo}`)}async function h(e){if(e.hubCapability){let t=e.hubCapability;(0,d.mountPlatformHostApis)();let n=(0,d.readPlatformHostApis)(),a=await n.capabilities.invoke({platformId:t.platformId,capabilityId:t.capabilityId,input:{utterance:e.utterance},approvalPolicy:t.approvalRequired?"user_required":"none"});return{ok:a.ok,plan:e,candidates:[],summaryKo:a.ok?`${t.platformName} \xb7 ${t.capabilityId} 준비`:`${t.platformName} \xb7 준비 실패`,reasonKo:t.matchReason}}if(e.nearScoutBlockedKo)return{ok:!1,plan:e,candidates:[],summaryKo:e.nearScoutBlockedKo,reasonKo:e.nearScoutBlockedKo};try{var t,n;let a="amenity"===e.toolDomain?"poi":e.toolDomain,i=await (0,o.invokeRimvioToolAsync)(e.toolId,{query:e.query,domain:a,lat:e.lat??void 0,lng:e.lng??void 0,utterance:e.utterance,contextEventId:e.contextEventId,placeName:e.placeName??void 0}),r=(t=i.candidates??[],n={allowLodgingStaySeed:"lodging"===e.toolDomain&&(/캡슐|capsule|호스텔|hostel|게스트|ë£
22Œì¹¸|ryokan/iu.test(e.utterance)||/캡슐|capsule|호스텔|hostel|게스트|료칸|ryokan/iu.test(e.query))},[...t??[]].filter(e=>{let t=e.id??"";return!t.startsWith("search:")&&(!!(/^(?:eatery|lodging|poi|amenity):/i.test(t)||t.startsWith("geo:"))||"seed"!==e.source||!!(n?.allowLodgingStaySeed&&(t.startsWith("maps:")||t.startsWith("jp:")||/캡슐|capsule|호스텔|hostel|게스트/iu.test(e.labelKo??""))))})),c=m(e.utterance);c&&(r=r.some(g)?[...r.filter(g),...r.filter(e=>!g(e))]:[c,...r]);let u=(0,s.gateNearScoutAnchor)({utterance:e.utterance}),d=null;if(u.gated&&u.ok){let t=(0,l.distanceGateNearScout)({anchor:{lat:u.anchor.lat,lng:u.anchor.lng,labelKo:u.anchor.labelKo},candidates:r,radiusMeters:l.DEFAULT_NEAR_RADIUS_METERS});if(r=[...t.kept],d=t.statusKo,0===r.length)return{ok:!1,plan:e,candidates:[],summaryKo:d,reasonKo:d}}return{ok:!0,plan:e,candidates:r,summaryKo:d||i.summaryKo?.trim()||(r[0]?`${r[0].labelKo}을 찾았어요`:null),reasonKo:null}}catch{let t=m(e.utterance);if(t)return{ok:!0,plan:e,candidates:[t],summaryKo:`${t.labelKo}을 찾았어요`,reasonKo:null};return{ok:!1,plan:e,candidates:[],summaryKo:null,reasonKo:"지금은 다시 못 찾았어요 · 조건을 짧게 말해 보세요"}}}e.s(["planObjectDiscovery",0,function(e){let o=e.contextEventId.trim(),l=e.utterance.trim();if(!o||!l)return null;let c=(0,r.readContextWorkspace)(o);if(!c)return null;let d=e.intentFrame??(0,p.compileNlIntentFrame)(l),m=d&&(0,p.isCommerceCapabilityIntent)(d,l)?(0,u.planCapabilityDiscovery)({utterance:l,userMarket:e.userMarket,intentFrame:d}):null;if(m){let t=(0,n.resolveWorkspaceSearchDomain)(l,c.domain),a=(0,n.workspaceDomainToToolDomain)(t),r=(0,i.resolveLookupToolId)(a,l);return{contextEventId:o,utterance:l,domain:t,toolDomain:a,toolId:r,query:l,lat:null,lng:null,placeName:null,mode:e.mode,planLabelKo:m.planLabelKo,nearScoutBlockedKo:null,hubCapability:m}}let g=(0,n.resolveWorkspaceSearchDomain)(l,c.domain),h=(0,n.workspaceDomainToToolDomain)(g),y=(0,i.resolveLookupToolId)(h,l),f=(0,s.gateNearScoutAnchor)({utterance:l});if(f.gated&&!f.ok)return{contextEventId:o,utterance:l,domain:g,toolDomain:h,toolId:y,query:l,lat:null,lng:null,placeName:null,mode:e.mode,planLabelKo:`${(0,t.domainLabelKo)(g)} \xb7 Anchor 미확정`,nearScoutBlockedKo:f.statusKo};let b=f.gated&&f.ok?{lat:f.anchor.lat,lng:f.anchor.lng}:c.nodes.find(e=>e.selected)??c.nodes.find(e=>e.bookmarked&&e.visible)??c.nodes.find(e=>e.visible)??null,k=(0,a.scoutQueryWithConstraintMemory)({contextEventId:o,utterance:l||c.query||""})||c.query||`${(0,t.domainLabelKo)(g)} 찾기`,K=(f.gated&&f.ok?f.anchor.labelKo:null)||c.summaryKo?.replace(/\s*여행.*$/u,"").trim()||c.query||null;return{contextEventId:o,utterance:l,domain:g,toolDomain:h,toolId:y,query:k,lat:b?.lat??null,lng:b?.lng??null,placeName:K,mode:e.mode,planLabelKo:`${(0,t.domainLabelKo)(g)} \xb7 ${y}`,nearScoutBlockedKo:null}},"runObjectDiscovery",0,h],468932)},741226,329645,e=>{"use strict";var t,n,a,i,o,r,l,s,c,u;let d={"midosuji:esaka":{id:"midosuji:esaka",nameKo:"에사카",code:"M11",lineIds:["midosuji"],lng:135.64528,lat:34.75778},"midosuji:higashimikuni":{id:"midosuji:higashimikuni",nameKo:"히가시미쿠니",code:"M12",lineIds:["midosuji"],lng:135.52861,lat:34.74194},"midosuji:shin-osaka":{id:"midosuji:shin-osaka",nameKo:"신오사카",code:"M13",lineIds:["midosuji"],lng:135.5001,lat:34.7334,hub:!0},"midosuji:nishinakajima":{id:"midosuji:nishinakajima",nameKo:"니시나카지마",code:"M14",lineIds:["midosuji"],lng:135.49806,lat:34.72639},"midosuji:nakatsu":{id:"midosuji:nakatsu",nameKo:"나카쓰",code:"M15",lineIds:["midosuji"],lng:135.49722,lat:34.71028},"midosuji:umeda":{id:"midosuji:umeda",nameKo:"우메다",code:"M16",lineIds:["midosuji"],lng:135.49806,lat:34.7025,hub:!0},"midosuji:yodoyabashi":{id:"midosuji:yodoyabashi",nameKo:"요도야바시",code:"M17",lineIds:["midosuji"],lng:135.50139,lat:34.6925,hub:!0},"midosuji:hommachi":{id:"midosuji:hommachi",nameKo:"혼마치",code:"M18",lineIds:["midosuji","chuo","yotsubashi"],lng:135.49972,lat:34.68167,hub:!0},"midosuji:shinsaibashi":{id:"midosuji:shinsaibashi",nameKo:"신사이바시",code:"M19",lineIds:["midosuji","nagahori"],lng:135.50028,lat:34.67472,hub:!0},"midosuji:namba":{id:"midosuji:namba",nameKo:"난바",code:"M20",lineIds:["midosuji","yotsubashi","sennichimae"],lng:135.50056,lat:34.66611,hub:!0},"midosuji:daikokucho":{id:"midosuji:daikokucho",nameKo:"다이코쿠초",code:"M21",lineIds:["midosuji","yotsubashi"],lng:135.50611,lat:34.65556},"midosuji:dobutsuen":{id:"midosuji:dobutsuen",nameKo:"도부쓰엔마에",code:"M22",lineIds:["midosuji","sakaisuji"],lng:135.50806,lat:34.64861},"midosuji:tennoji":{id:"midosuji:tennoji",nameKo:"덴노지",code:"M23",lineIds:["midosuji","tanimachi"],lng:135.51361,lat:34.64611,hub:!0},"midosuji:showacho":{id:"midosuji:showacho",nameKo:"쇼와초",code:"M24",lineIds:["midosuji"],lng:135.52,lat:34.63806},"midosuji:nishitanabe":{id:"midosuji:nishitanabe",nameKo:"니시타나베",code:"M25",lineIds:["midosuji"],lng:135.52806,lat:34.6275},"midosuji:nagai":{id:"midosuji:nagai",nameKo:"나가이",code:"M26",lineIds:["midosuji"],lng:135.5325,lat:34.61194},"midosuji:abiko":{id:"midosuji:abiko",nameKo:"아비코",code:"M27",lineIds:["midosuji"],lng:135.51278,lat:34.59972},"midosuji:kitahanada":{id:"midosuji:kitahanada",nameKo:"기타하나다",code:"M28",lineIds:["midosuji"],lng:135.50833,lat:34.57722},"midosuji:shinkanaoka":{id:"midosuji:shinkanaoka",nameKo:"신카나오카",code:"M29",lineIds:["midosuji"],lng:135.50694,lat:34.56417},"midosuji:nakamozu":{id:"midosuji:nakamozu",nameKo:"나카모즈",code:"M30",lineIds:["midosuji"],lng:135.50583,lat:34.55611},"tanimachi:dainichi":{id:"tanimachi:dainichi",nameKo:"다이니치",code:"T11",lineIds:["tanimachi"],lng:135.57806,lat:34.74222},"tanimachi:moriguchi":{id:"tanimachi:moriguchi",nameKo:"모리구치",code:"T12",lineIds:["tanimachi"],lng:135.56444,lat:34.73528},"tanimachi:taishibashi":{id:"tanimachi:taishibashi",nameKo:"다이시바시",code:"T14",lineIds:["tanimachi"],lng:135.545,lat:34.72111},"tanimachi:miyakojima":{id:"tanimachi:miyakojima",nameKo:"미야코지마",code:"T18",lineIds:["tanimachi"],lng:135.52222,lat:34.70194},"tanimachi:higashi-umeda":{id:"tanimachi:higashi-umeda",nameKo:"히가시우메다",code:"T20",lineIds:["tanimachi"],lng:135.50194,lat:34.70028,hub:!0},"tanimachi:minami-morimachi":{id:"tanimachi:minami-morimachi",nameKo:"미나미모리마치",code:"T21",lineIds:["tanimachi","sakaisuji"],lng:135.51111,lat:34.69528},"tanimachi:temmabashi":{id:"tanimachi:temmabashi",nameKo:"텐마바시",code:"T22",lineIds:["tanimachi"],lng:135.51694,lat:34.68972},"tanimachi:tanimachi4":{id:"tanimachi:tanimachi4",nameKo:"다니마치4",code:"T23",lineIds:["tanimachi","chuo"],lng:135.51889,lat:34.68222,hub:!0},"tanimachi:tanimachi6":{id:"tanimachi:tanimachi6",nameKo:"다니마치6",code:"T24",lineIds:["tanimachi","nagahori"],lng:135.51889,lat:34.67556},"tanimachi:tanimachi9":{id:"tanimachi:tanimachi9",nameKo:"다니마치9",code:"T25",lineIds:["tanimachi","sennichimae"],lng:135.51806,lat:34.66611,hub:!0},"tanimachi:shitennouji":{id:"tanimachi:shitennouji",nameKo:"시텐노지마에",code:"T26",lineIds:["tanimachi"],lng:135.51972,lat:34.655},"tanimachi:tennoji":{id:"tanimachi:tennoji",nameKo:"덴노지",code:"T27",lineIds:["tanimachi","midosuji"],lng:135.51361,lat:34.64611,hub:!0},"tanimachi:abeno":{id:"tanimachi:abeno",nameKo:"아베노",code:"T28",lineIds:["tanimachi"],lng:135.51222,lat:34.64306},"tanimachi:yaominami":{id:"tanimachi:yaominami",nameKo:"야오미나미",code:"T36",lineIds:["tanimachi"],lng:135.575,lat:34.54028},"yotsubashi:nishi-umeda":{id:"yotsubashi:nishi-umeda",nameKo:"니시우메다",code:"Y11",lineIds:["yotsubashi"],lng:135.49611,lat:34.69972,hub:!0},"yotsubashi:higobashi":{id:"yotsubashi:higobashi",nameKo:"히고바시",code:"Y12",lineIds:["yotsubashi"],lng:135.49639,lat:34.69111},"yotsubashi:hommachi":{id:"yotsubashi:hommachi",nameKo:"혼마치",code:"Y13",lineIds:["yotsubashi","midosuji","chuo"],lng:135.49972,lat:34.68167,hub:!0},"yotsubashi:yotsubashi":{id:"yotsubashi:yotsubashi",nameKo:"요쓰바시",code:"Y14",lineIds:["yotsubashi","nagahori"],lng:135.49722,lat:34.67028},"yotsubashi:namba":{id:"yotsubashi:namba",nameKo:"난바",code:"Y15",lineIds:["yotsubashi","midosuji","sennichimae"],lng:135.50056,lat:34.66611,hub:!0},"yotsubashi:daikokucho":{id:"yotsubashi:daikokucho",nameKo:"다이코쿠초",code:"Y16",lineIds:["yotsubashi","midosuji"],lng:135.50611,lat:34.65556},"yotsubashi:hanazonocho":{id:"yotsubashi:hanazonocho",nameKo:"하나조노초",code:"Y17",lineIds:["yotsubashi"],lng:135.49528,lat:34.64722},"yotsubashi:kishinosato":{id:"yotsubashi:kishinosato",nameKo:"기시노사토",code:"Y18",lineIds:["yotsubashi"],lng:135.49167,lat:34.64028},"yotsubashi:tamade":{id:"yotsubashi:tamade",nameKo:"타마데",code:"Y19",lineIds:["yotsubashi"],lng:135.48889,lat:34.629
2217},"yotsubashi:suminoekoen":{id:"yotsubashi:suminoekoen",nameKo:"스미노에코엔",code:"Y21",lineIds:["yotsubashi","nanko"],lng:135.48028,lat:34.61056},"chuo:cosmosquare":{id:"chuo:cosmosquare",nameKo:"코스모스퀘어",code:"C10",lineIds:["chuo","nanko"],lng:135.39139,lat:34.64583,hub:!0},"chuo:osakako":{id:"chuo:osakako",nameKo:"오사카코",code:"C11",lineIds:["chuo"],lng:135.43056,lat:34.65583},"chuo:asashiobashi":{id:"chuo:asashiobashi",nameKo:"아사시오바시",code:"C12",lineIds:["chuo"],lng:135.45028,lat:34.66167},"chuo:bentencho":{id:"chuo:bentencho",nameKo:"벤텐초",code:"C13",lineIds:["chuo"],lng:135.46194,lat:34.66806},"chuo:kujo":{id:"chuo:kujo",nameKo:"쿠조",code:"C14",lineIds:["chuo"],lng:135.47361,lat:34.6725},"chuo:awaza":{id:"chuo:awaza",nameKo:"아와자",code:"C15",lineIds:["chuo","sennichimae"],lng:135.48639,lat:34.67639,hub:!0},"chuo:hommachi":{id:"chuo:hommachi",nameKo:"혼마치",code:"C16",lineIds:["chuo","midosuji","yotsubashi"],lng:135.49972,lat:34.68167,hub:!0},"chuo:sakaisuji-hommachi":{id:"chuo:sakaisuji-hommachi",nameKo:"사카이스지혼마치",code:"C17",lineIds:["chuo","sakaisuji"],lng:135.50639,lat:34.68194,hub:!0},"chuo:tanimachi4":{id:"chuo:tanimachi4",nameKo:"다니마치4",code:"C18",lineIds:["chuo","tanimachi"],lng:135.51889,lat:34.68222,hub:!0},"chuo:morinomiya":{id:"chuo:morinomiya",nameKo:"모리노미야",code:"C19",lineIds:["chuo","nagahori"],lng:135.53417,lat:34.68139,hub:!0},"chuo:midoribashi":{id:"chuo:midoribashi",nameKo:"미도리바시",code:"C20",lineIds:["chuo","imazatosuji"],lng:135.54472,lat:34.68111},"chuo:fukaebashi":{id:"chuo:fukaebashi",nameKo:"후카에바시",code:"C21",lineIds:["chuo"],lng:135.55556,lat:34.68028},"chuo:takaida":{id:"chuo:takaida",nameKo:"다카이다",code:"C23",lineIds:["chuo"],lng:135.57361,lat:34.67917},"chuo:nagata":{id:"chuo:nagata",nameKo:"나가타",code:"C23",lineIds:["chuo"],lng:135.59167,lat:34.67806},"sennichimae:nodahanshin":{id:"sennichimae:nodahanshin",nameKo:"노다한신",code:"S11",lineIds:["sennichimae"],lng:135.47528,lat:34.69028},"sennichimae:tamagawa":{id:"sennichimae:tamagawa",nameKo:"다마가와",code:"S12",lineIds:["sennichimae"],lng:135.48056,lat:34.68694},"sennichimae:awaza":{id:"sennichimae:awaza",nameKo:"아와자",code:"S13",lineIds:["sennichimae","chuo"],lng:135.48639,lat:34.67639,hub:!0},"sennichimae:nishinagahori":{id:"sennichimae:nishinagahori",nameKo:"니시나가호리",code:"S14",lineIds:["sennichimae","nagahori"],lng:135.49028,lat:34.67167},"sennichimae:sakuragawa":{id:"sennichimae:sakuragawa",nameKo:"사쿠라가와",code:"S15",lineIds:["sennichimae"],lng:135.49444,lat:34.66806},"sennichimae:namba":{id:"sennichimae:namba",nameKo:"난바",code:"S16",lineIds:["sennichimae","midosuji","yotsubashi"],lng:135.50056,lat:34.66611,hub:!0},"sennichimae:nipponbashi":{id:"sennichimae:nipponbashi",nameKo:"닛폰바시",code:"S17",lineIds:["sennichimae","sakaisuji"],lng:135.50611,lat:34.66167,hub:!0},"sennichimae:tanimachi9":{id:"sennichimae:tanimachi9",nameKo:"다니마치9",code:"S18",lineIds:["sennichimae","tanimachi"],lng:135.51806,lat:34.66611,hub:!0},"sennichimae:tsuruhashi":{id:"sennichimae:tsuruhashi",nameKo:"쓰루하시",code:"S19",lineIds:["sennichimae"],lng:135.52972,lat:34.66528,hub:!0},"sennichimae:imazato":{id:"sennichimae:imazato",nameKo:"이마자토",code:"S20",lineIds:["sennichimae","imazatosuji"],lng:135.54444,lat:34.6625,hub:!0},"sennichimae:shin-fukae":{id:"sennichimae:shin-fukae",nameKo:"신후카에",code:"S21",lineIds:["sennichimae"],lng:135.555,lat:34.66111},"sennichimae:minami-tatsumi":{id:"sennichimae:minami-tatsumi",nameKo:"미나미타쓰미",code:"S22",lineIds:["sennichimae"],lng:135.56528,lat:34.65833},"sakaisuji:tenjinbashisuji6":{id:"sakaisuji:tenjinbashisuji6",nameKo:"텐진바시스지6",code:"K11",lineIds:["sakaisuji"],lng:135.51111,lat:34.71028},"sakaisuji:ogimachi":{id:"sakaisuji:ogimachi",nameKo:"오기마치",code:"K12",lineIds:["sakaisuji"],lng:135.51056,lat:34.70417},"sakaisuji:minami-morimachi":{id:"sakaisuji:minami-morimachi",nameKo:"미나미모리마치",code:"K13",lineIds:["sakaisuji","tanimachi"],lng:135.51111,lat:34.69528},"sakaisuji:kitahama":{id:"sakaisuji:kitahama",nameKo:"기타하마",code:"K14",lineIds:["sakaisuji"],lng:135.5075,lat:34.69111},"sakaisuji:sakaisuji-hommachi":{id:"sakaisuji:sakaisuji-hommachi",nameKo:"사카이스지혼마치",code:"K15",lineIds:["sakaisuji","chuo"],lng:135.50639,lat:34.68194,hub:!0},"sakaisuji:nagahoribashi":{id:"sakaisuji:nagahoribashi",nameKo:"나가호리바시",code:"K16",lineIds:["sakaisuji","nagahori"],lng:135.50556,lat:34.6725,hub:!0},"sakaisuji:nipponbashi":{id:"sakaisuji:nipponbashi",nameKo:"닛폰바시",code:"K17",lineIds:["sakaisuji","sennichimae"],lng:135.50611,lat:34.66167,hub:!0},"sakaisuji:ebisucho":{id:"sakaisuji:ebisucho",nameKo:"에비스초",code:"K18",lineIds:["sakaisuji"],lng:135.5075,lat:34.65444},"sakaisuji:dobutsuen":{id:"sakaisuji:dobutsuen",nameKo:"도부쓰엔마에",code:"K19",lineIds:["sakaisuji","midosuji"],lng:135.50806,lat:34.64861}
22,"sakaisuji:tengachaya":{id:"sakaisuji:tengachaya",nameKo:"텐가차야",code:"K20",lineIds:["sakaisuji"],lng:135.49917,lat:34.63611},"nagahori:taisho":{id:"nagahori:taisho",nameKo:"다이쇼",code:"N11",lineIds:["nagahori"],lng:135.47222,lat:34.65944},"nagahori:dome-mae":{id:"nagahori:dome-mae",nameKo:"도메마에",code:"N12",lineIds:["nagahori"],lng:135.47861,lat:34.66972},"nagahori:nishinagahori":{id:"nagahori:nishinagahori",nameKo:"니시나가호리",code:"N13",lineIds:["nagahori","sennichimae"],lng:135.49028,lat:34.67167},"nagahori:nishiohashi":{id:"nagahori:nishiohashi",nameKo:"니시오하시",code:"N14",lineIds:["nagahori"],lng:135.495,lat:34.67222},"nagahori:shinsaibashi":{id:"nagahori:shinsaibashi",nameKo:"신사이바시",code:"N15",lineIds:["nagahori","midosuji"],lng:135.50028,lat:34.67472,hub:!0},"nagahori:nagahoribashi":{id:"nagahori:nagahoribashi",nameKo:"나가호리바시",code:"N16",lineIds:["nagahori","sakaisuji"],lng:135.50556,lat:34.6725,hub:!0},"nagahori:matsuyamachi":{id:"nagahori:matsuyamachi",nameKo:"마쓰야마치",code:"N17",lineIds:["nagahori"],lng:135.51194,lat:34.675},"nagahori:tanimachi6":{id:"nagahori:tanimachi6",nameKo:"다니마치6",code:"N18",lineIds:["nagahori","tanimachi"],lng:135.51889,lat:34.67556},"nagahori:tamatsukuri":{id:"nagahori:tamatsukuri",nameKo:"다마쓰쿠리",code:"N19",lineIds:["nagahori"],lng:135.52528,lat:34.67778},"nagahori:morinomiya":{id:"nagahori:morinomiya",nameKo:"모리노미야",code:"N20",lineIds:["nagahori","chuo"],lng:135.53417,lat:34.68139,hub:!0},"nagahori:gamo4":{id:"nagahori:gamo4",nameKo:"가모4",code:"N21",lineIds:["nagahori","imazatosuji"],lng:135.54528,lat:34.68861},"nagahori:imaike":{id:"nagahori:imaike",nameKo:"이마이케",code:"N22",lineIds:["nagahori"],lng:135.54278,lat:34.69611},"nagahori:kyobashi":{id:"nagahori:kyobashi",nameKo:"교바시",code:"N23",lineIds:["nagahori"],lng:135.52861,lat:34.69639,hub:!0},"nagahori:tsurumi-ryokuchi":{id:"nagahori:tsurumi-ryokuchi",nameKo:"쓰루미료쿠치",code:"N27",lineIds:["nagahori"],lng:135.57778,lat:34.71111},"imazatosuji:itakano":{id:"imazatosuji:itakano",nameKo:"이타카노",code:"I11",lineIds:["imazatosuji"],lng:135.54861,lat:34.7125},"imazatosuji:zuiko4":{id:"imazatosuji:zuiko4",nameKo:"즈이코4",code:"I14",lineIds:["imazatosuji"],lng:135.54694,lat:34.70028},"imazatosuji:gamo4":{id:"imazatosuji:gamo4",nameKo:"가모4",code:"I18",lineIds:["imazatosuji","nagahori"],lng:135.54528,lat:34.68861},"imazatosuji:midoribashi":{id:"imazatosuji:midoribashi",nameKo:"미도리바시",code:"I19",lineIds:["imazatosuji","chuo"],lng:135.54472,lat:34.68111},"imazatosuji:imazato":{id:"imazatosuji:imazato",nameKo:"이마자토",code:"I21",lineIds:["imazatosuji","sennichimae"],lng:135.54444,lat:34.6625,hub:!0},"imazatosuji:shimizu":{id:"imazatosuji:shimizu",nameKo:"시미즈",code:"I22",lineIds:["imazatosuji"],lng:135.54167,lat:34.64861},"imazatosuji:imaike":{id:"imazatosuji:imaike",nameKo:"이마이케",code:"I24",lineIds:["imazatosuji"],lng:135.52861,lat:34.62806},"imazatosuji:yata":{id:"imazatosuji:yata",nameKo:"야타",code:"I27",lineIds:["imazatosuji"],lng:135.52806,lat:34.59944},"nanko:cosmosquare":{id:"nanko:cosmosquare",nameKo:"코스모스퀘어",code:"P09",lineIds:["nanko","chuo"],lng:135.39139,lat:34.64583,hub:!0},"nanko:trade-center":{id:"nanko:trade-center",nameKo:"트레이드센터",code:"P10",lineIds:["nanko"],lng:135.40833,lat:34.63833},"nanko:nakafuto":{id:"nanko:nakafuto",nameKo:"나카후토",code:"P11",lineIds:["nanko"],lng:135.42222,lat:34.63806},"nanko:port-town-nishi":{id:"nanko:port-town-nishi",nameKo:"포트타운니시",code:"P14",lineIds:["nanko"],lng:135.43056,lat:34.63194},"nanko:port-town-higashi":{id:"nanko:port-town-higashi",nameKo:"포트타운히가시",code:"P15",lineIds:["nanko"],lng:135.43889,lat:34.629
2217},"nanko:ferry-terminal":{id:"nanko:ferry-terminal",nameKo:"페리터미널",code:"P16",lineIds:["nanko"],lng:135.45,lat:34.62111},"nanko:suminoekoen":{id:"nanko:suminoekoen",nameKo:"스미노에코엔",code:"P18",lineIds:["nanko","yotsubashi"],lng:135.48028,lat:34.61056},"jr_yumesaki:nishikujo":{id:"jr_yumesaki:nishikujo",nameKo:"니시쿠조",lineIds:["jr_yumesaki"],lng:135.46694,lat:34.68167,hub:!0},"jr_yumesaki:ajikawaguchi":{id:"jr_yumesaki:ajikawaguchi",nameKo:"아지카와구치",lineIds:["jr_yumesaki"],lng:135.455,lat:34.675},"jr_yumesaki:universal-city":{id:"jr_yumesaki:universal-city",nameKo:"유니버설시티",lineIds:["jr_yumesaki"],lng:135.4389,lat:34.6678,hub:!0},"jr_yumesaki:sakurajima":{id:"jr_yumesaki:sakurajima",nameKo:"사쿠라지마",lineIds:["jr_yumesaki"],lng:135.43056,lat:34.6625}},p={midosuji:["midosuji:esaka","midosuji:higashimikuni","midosuji:shin-osaka","midosuji:nishinakajima","midosuji:nakatsu","midosuji:umeda","midosuji:yodoyabashi","midosuji:hommachi","midosuji:shinsaibashi","midosuji:namba","midosuji:daikokucho","midosuji:dobutsuen","midosuji:tennoji","midosuji:showacho","midosuji:nishitanabe","midosuji:nagai","midosuji:abiko","midosuji:kitahanada","midosuji:shinkanaoka","midosuji:nakamozu"],tanimachi:["tanimachi:dainichi","tanimachi:moriguchi","tanimachi:taishibashi","tanimachi:miyakojima","tanimachi:higashi-umeda","tanimachi:minami-morimachi","tanimachi:temmabashi","tanimachi:tanimachi4","tanimachi:tanimachi6","tanimachi:tanimachi9","tanimachi:shitennouji","tanimachi:tennoji","tanimachi:abeno","tanimachi:yaominami"],yotsubashi:["yotsubashi:nishi-umeda","yotsubashi:higobashi","yotsubashi:hommachi","yotsubashi:yotsubashi","yotsubashi:namba","yotsubashi:daikokucho","yotsubashi:hanazonocho","yotsubashi:kishinosato","yotsubashi:tamade","yotsubashi:suminoekoen"],chuo:["chuo:cosmosquare","chuo:osakako","chuo:asashiobashi","chuo:bentencho","chuo:kujo","chuo:awaza","chuo:hommachi","chuo:sakaisuji-hommachi","chuo:tanimachi4","chuo:morinomiya","chuo:midoribashi","chuo:fukaebashi","chuo:takaida","chuo:nagata"],sennichimae:["sennichimae:nodahanshin","sennichimae:tamagawa","sennichimae:awaza","sennichimae:nishinagahori","sennichimae:sakuragawa","sennichimae:namba","sennichimae:nipponbashi","sennichimae:tanimachi9","sennichimae:tsuruhashi","sennichimae:imazato","sennichimae:shin-fukae","sennichimae:minami-tatsumi"],sakaisuji:["sakaisuji:tenjinbashisuji6","sakaisuji:ogimachi","sakaisuji:minami-morimachi","sakaisuji:kitahama","sakaisuji:sakaisuji-hommachi","sakaisuji:nagahoribashi","sakaisuji:nipponbashi","sakaisuji:ebisucho","sakaisuji:dobutsuen","sakaisuji:tengach
22aya"],nagahori:["nagahori:taisho","nagahori:dome-mae","nagahori:nishinagahori","nagahori:nishiohashi","nagahori:shinsaibashi","nagahori:nagahoribashi","nagahori:matsuyamachi","nagahori:tanimachi6","nagahori:tamatsukuri","nagahori:morinomiya","nagahori:gamo4","nagahori:imaike","nagahori:kyobashi","nagahori:tsurumi-ryokuchi"],imazatosuji:["imazatosuji:itakano","imazatosuji:zuiko4","imazatosuji:gamo4","imazatosuji:midoribashi","imazatosuji:imazato","imazatosuji:shimizu","imazatosuji:imaike","imazatosuji:yata"],nanko:["nanko:cosmosquare","nanko:trade-center","nanko:nakafuto","nanko:port-town-nishi","nanko:port-town-higashi","nanko:ferry-terminal","nanko:suminoekoen"],jr_yumesaki:["jr_yumesaki:nishikujo","jr_yumesaki:ajikawaguchi","jr_yumesaki:universal-city","jr_yumesaki:sakurajima"]},m=Object.values(d),g={모리노미아:"모리노미야",모리노미야:"모리노미야",morinomiya:"모리노미야",텐노지:"덴노지",신사이바시:"신사이바시",혼마치:"혼마치",혼쪼:"혼마치"};function h(e){return e.trim().replace(/\s+/gu,"").replace(/(?:역|駅|station)$/iu,"").toLowerCase()}function y(e){let t=p[e];if(!t?.length)return null;let n=d[t[Math.floor(t.length/2)]];return n?[n.lng,n.lat]:null}e.s(["OSAKA_METRO_STATIONS",0,m,"linePathMidpoint",0,y,"resolveOsakaMetroStationFromText",0,function(e){let t=e.trim();if(!t)return null;let n=t.match(/([가-힣A-Za-z0-9·]+)역/u)?.[1]??t,a=h(n);if(!a)return null;let i=g[a]??g[n.trim()]??null,o=new Set([a,i,i?h(i):null].filter(e=>!!e)),r=null;for(let e of m){let t=h(e.nameKo);if(o.has(t)){r&&(!e.hub||r.hub)||(r=e);continue}!r&&(t.includes(a)||a.includes(t))&&a.length>=2&&t.length>=2&&(r=e)}return r},"stationsForVisibleLines",0,function(e,t){if(0===e.length)return[];let n=new Set(e),a=new Set,i=[];for(let e of m){if(t?.hubsOnly&&!e.hub||!e.lineIds.some(e=>n.has(e)))continue;let o=`${e.nameKo}:${e.lng.toFixed(4)}:${e.lat.toFixed(4)}`;a.has(o)||(a.add(o),i.push(e))}return i}],741226);let f=[{id:"midosuji",labelKo:"미도스지선",shortLabelKo:"미도스지",labelEn:"Midosuji Line",color:"#E60012",labelAnchor:(t=[135.5052,34.6548],y("midosuji")??t),aliases:["미도스지","미도스지선","御堂筋","御堂筋線","midosuji","midōsuji","m선","m line"]},{id:"tanimachi",labelKo:"다니마치선",shortLabelKo:"다니마치",labelEn:"Tanimachi Line",color:"#522886",labelAnchor:(n=[135.5152,34.6652],y("tanimachi")??n),aliases:["다니마치","다니마치선","谷町","谷町線","tanimachi","t선"]},{id:"yotsubashi",labelKo:"요쓰바시선",shortLabelKo:"요쓰바시",labelEn:"Yotsubashi Line",color:"#0078BA",labelAnchor:(a=[135.4938,34.6742],y("yotsubashi")??a),aliases:["요쓰바시","요츠바시","요쓰바시선","四つ橋","yotsubashi","y선"]},{id:"chuo",labelKo:"주오선",shortLabelKo:"주오",labelEn:"Chuo Line",color:"#019A66",labelAnchor:(i=[135.5102,34.6812],y("chuo")??i),aliases:["주오","주오선","中央","中央線","chuo","chūō","c선"]},{id:"sennichimae",labelKo:"센니치마에선",shortLabelKo:"센니치",labelEn:"Sennichimae Line",color:"#E44D93",labelAnchor:(o=[135.5125,34.6628],y("sennichimae")??o),aliases:["센니치마에","센니치마에선","千日前","千日前線","sennichimae","s선"]},{id:"sakaisuji",labelKo:"사카이스지선",shortLabelKo:"사카이스지",labelEn:"Sakaisuji Line",color:"#B5A36A",labelAnchor:(r=[135.5095,34.6748],y("sakaisuji")??r),aliases:["사카이스지","사카이스지선","堺筋","堺筋線","sakaisuji","k선"]},{id:"nagahori",labelKo:"나가호리쓰루미료쿠치선",shortLabelKo:"나가호리",labelEn:"Nagahori Tsurumi-ryokuchi Line",color:"#A8BF00",labelAnchor:(l=[135.5205,34.6805],y("nagahori")??l),aliases:["나가호리","나가호리선","나가호리쓰루미","長堀","長堀鶴見緑地線","nagahori","n선"]},{id:"imazatosuji",labelKo:"이마자토스지선",shortLabelKo:"이마자토",labelEn:"Imazatosuji Line",color:"#EE7B1A",labelAnchor:(s=[135.5385,34.6682],y("imazatosuji")??s),aliases:["이마자토스지","이마자토","이마자토스지선","今里筋","今里筋線","imazatosuji","i선"]},{id:"nanko",labelKo:"난코포트타운선",shortLabelKo:"난코",labelEn:"Nanko Port Town Line",color:"#00A0DE",labelAnchor:(c=[135.4225,34.6385],y("nanko")??c),aliases:["난코","난코포트","난코포트타운","난코포트타운선","南港","ニュートラム","nanko","new tram","p선"]},{id:"jr_yumesaki",labelKo:"JR유메사키선",shortLabelKo:"JR유메사키",labelEn:"JR Yumesaki (Sakurajima) Line",color:"#1A6BB5",labelAnchor:(u=[135.452,34.672],y("jr_yumesaki")??u),aliases:["유메사키","유메사키선","jr유메사키","jr 유메사키","사쿠라지마","사쿠라지마선","桜島","桜島線","夢咲","夢咲線","yumesaki","sakurajima","universal city","유니버설시티","유니버셜시티","유니버설 시티","usj선","유니버설선","유니버셜선"]}];e.s(["OSAKA_METRO_GEOJSON_URL",0,"/geo/osaka_metro.geojson","OSAKA_METRO_LINE_CATALOG",0,f,"OSAKA_METRO_LINE_IDS",0,["midosuji","tanimachi","yotsubashi","chuo","sennichimae","sakaisuji","nagahori","imazatosuji","nanko","jr_yumesaki"],"getOsakaMetroLineEntry",0,function(e){return f.find(t=>
22t.id===e)??null},"resolveOsakaMetroLineIdFromText",0,function(e){let t=e.trim().toLowerCase();if(!t)return null;let n=null,a=0;for(let e of f)for(let i of e.aliases){let o=i.toLowerCase();o.length>=2&&t.includes(o)&&o.length>a&&(n=e.id,a=o.length)}return n}],329645)},273403,997011,284444,524398,278637,890438,28157,928629,764144,770970,e=>{"use strict";let t=["jr_osaka_loop","jr_kyoto","jr_kobe","jr_hanwa","jr_yamatoji","jr_yumesaki"],n=[{id:"jr_osaka_loop",labelKo:"JR오사카순환선",shortLabelKo:"순환선",labelEn:"JR Osaka Loop Line",color:"#E85298",labelAnchor:[135.505,34.68],aliases:["순환선","오사카순환선","루프선","大阪環状","osaka loop","loop line"]},{id:"jr_kyoto",labelKo:"JR교토선",shortLabelKo:"교토선",labelEn:"JR Kyoto Line",color:"#0072BC",labelAnchor:[135.55,34.78],aliases:["교토선","JR교토","京都線","kyoto line"]},{id:"jr_kobe",labelKo:"JR고베선",shortLabelKo:"고베선",labelEn:"JR Kobe Line",color:"#0072BC",labelAnchor:[135.4,34.72],aliases:["고베선","JR고베","神戸線","kobe line"]},{id:"jr_hanwa",labelKo:"JR한와선",shortLabelKo:"한와선",labelEn:"JR Hanwa Line",color:"#F15A22",labelAnchor:[135.48,34.55],aliases:["한와선","JR한와","阪和線","hanwa"]},{id:"jr_yamatoji",labelKo:"JR야마토지선",shortLabelKo:"야마토지",labelEn:"JR Yamatoji Line",color:"#00A651",labelAnchor:[135.58,34.62],aliases:["야마토지","야마토지선","大和路線","yamatoji"]},{id:"jr_yumesaki",labelKo:"JR유메사키선",shortLabelKo:"유메사키",labelEn:"JR Yumesaki Line",color:"#1A6BB5",labelAnchor:[135.452,34.672],aliases:["유메사키","사쿠라지마","桜島","yumesaki","universal city"]}];e.s(["OSAKA_JR_GEOJSON_URL",0,"/geo/osaka_jr.geojson","OSAKA_JR_LINE_CATALOG",0,n,"OSAKA_JR_LINE_IDS",0,t,"getOsakaJrLineEntry",0,function(e){return n.find(t=>t.id===e)??null}],997011);let a=[{id:"jr:osaka",nameKo:"오사카",lineIds:["jr_osaka_loop","jr_kyoto","jr_kobe"],lng:135.4985,lat:34.7025,hub:!0},{id:"jr:kyobashi",nameKo:"교바시",lineIds:["jr_osaka_loop"],lng:135.5285,lat:34.6965,hub:!0},{id:"jr:tsuruhashi",nameKo:"쓰루하시",lineIds:["jr_osaka_loop"],lng:135.5305,lat:34.6655,hub:!0},{id:"jr:tennoji",nameKo:"덴노지",lineIds:["jr_osaka_loop","jr_hanwa","jr_yamatoji"],lng:135.5132,lat:34.6471,hub:!0},{id:"jr:nishikujo",nameKo:"니시쿠조",lineIds:["jr_osaka_loop","jr_yumesaki"],lng:135.4669,lat:34.6817,hub:!0},{id:"jr:universal-city",nameKo:"유니버설시티",lineIds:["jr_yumesaki"],lng:135.4389,lat:34.6678,hub:!0},{id:"jr:shin-osaka",nameKo:"신오사카",lineIds:["jr_kyoto"],lng:135.5,lat:34.733,hub:!0},{id:"jr:sannomiya",nameKo:"산노미야",lineIds:["jr_kobe"],lng:135.195,lat:34.68,hub:!0}];e.s(["OSAKA_JR_STATIONS",0,a],284444);var i=e.i(329645),o=e.i(741226);let r=["tokyo_ginza","tokyo_marunouchi","tokyo_hibiya","tokyo_tozai","tokyo_chiyoda","tokyo_yurakucho","tokyo_hanzomon","tokyo_namboku","tokyo_fukutoshin","toei_asakusa","toei_mita","toei_shinjuku","toei_oedo","yokohama_blue","y
22okohama_green","nagoya_higashiyama","nagoya_meijo","nagoya_tsurumai","nagoya_sakuradori","kyoto_karasuma","kyoto_tozai","osaka_midosuji","osaka_tanimachi","osaka_yotsubashi","osaka_chuo","osaka_sennichimae","osaka_sakaisuji","osaka_nagahori","kobe_seishin","kobe_kaigan","fukuoka_kuko","fukuoka_hakozaki","fukuoka_nanakuma","sendai_namboku","sendai_tozai","sapporo_namboku","sapporo_tozai","sapporo_toho"],l=[{id:"tokyo_ginza",labelKo:"긴자선",labelEn:"Ginza Line",cityKo:"도쿄",color:"#FF9500",aliases:["긴자선","긴자","銀座線","ginza","tokyo ginza"]},{id:"tokyo_marunouchi",labelKo:"마루노우치선",labelEn:"Marunouchi Line",cityKo:"도쿄",color:"#F62E36",aliases:["마루노우치선","마루노우치","丸ノ内線","marunouchi"]},{id:"tokyo_hibiya",labelKo:"히비야선",labelEn:"Hibiya Line",cityKo:"도쿄",color:"#B5B5AC",aliases:["히비야선","히비야","日比谷線","hibiya"]},{id:"tokyo_tozai",labelKo:"도자이선",labelEn:"Tozai Line",cityKo:"도쿄",color:"#009BBF",aliases:["도자이선","도쿄 도자이","東西線","tozai line tokyo"]},{id:"tokyo_chiyoda",labelKo:"치요다선",labelEn:"Chiyoda Line",cityKo:"도쿄",color:"#00BB66",aliases:["치요다선","치요다","千代田線","chiyoda"]},{id:"tokyo_yurakucho",labelKo:"유라쿠초선",labelEn:"Yurakucho Line",cityKo:"도쿄",color:"#C1A470",aliases:["유라쿠초선","유라쿠초","有楽町線","yurakucho","yurakuchō"]},{id:"tokyo_hanzomon",labelKo:"한조몬선",labelEn:"Hanzomon Line",cityKo:"도쿄",color:"#8F76D6",aliases:["한조몬선","한조몬","半蔵門線","hanzomon","hanzōmon"]},{id:"tokyo_namboku",labelKo:"난보쿠선",labelEn:"Namboku Line",cityKo:"도쿄",color:"#00AC9B",aliases:["난보쿠선","난보쿠","南北線","namboku","nanboku"]},{id:"tokyo_fukutoshin",labelKo:"후쿠토신선",labelEn:"Fukutoshin Line",cityKo:"도쿄",color:"#9C5E31",aliases:["후쿠토신선","후쿠토신","副都心線","fukutoshin"]},{id:"toei_asakusa",labelKo:"아사쿠사선",labelEn:"Asakusa Line",cityKo:"도쿄",color:"#E85298",aliases:["아사쿠사선","도에이 아사쿠사","浅草線","asakusa line","toei asakusa"]},{id:"toei_mita",labelKo:"미타선",labelEn:"Mita Line",cityKo:"도쿄",color:"#0079C2",aliases:["미타선","도에이 미타","三田線","mita line","toei mita"]},{id:"toei_shinjuku",labelKo:"신주쿠선",labelEn:"Shinjuku Line",cityKo:"도쿄",color:"#6CBB5A",aliases:["신주쿠선","도에이 신주쿠","新宿線","toei shinjuku"]},{id:"toei_oedo",labelKo:"오에도선",labelEn:"Oedo Line",cityKo:"도쿄",color:"#B6007A",aliases:["오에도선","오에도","大江戸線","oedo","ōedo","toei oedo"]},{id:"yokohama_blue",labelKo:"요코하마 블루라인",labelEn:"Yokohama Blue Line",cityKo:"요코하마",color:"#0068B7",aliases:["요코하마 블루","블루라인","横浜ブルー","yokohama blue"]},{id:"yokohama_green",labelKo:"요코하마 그린라인",labelEn:"Yokohama Green Line",cityKo:"요코하마",color:"#00A651",aliases:["요코하마 그린","그린라인","横浜グリーン","yokohama green"]},{id:"nagoya_higashiyama",labelKo:"히가시야마선",labelEn:"Higashiyama Line",cityKo:"나고야",color:"#FFCC00",aliases:["히가시야마선","히가시야마","東山線","higashiyama"]},{id:"nagoya_meijo",labelKo:"메이죠선",labelEn:"Meijo Line",cityKo:"나고야",color:"#C71585",aliases:["메이죠선","메이죠","名城線","meijo","meijō"]},{id:"nagoya_tsurumai",labelKo:"쓰루마이선",labelEn:"Tsurumai Line",cityKo:"나고야",color:"#0095D9",aliases:["쓰루마이선","츠루마이","鶴舞線","tsurumai"]},{id:"nagoya_sakuradori",labelKo:"사쿠라도리선",labelEn:"Sakura-dori Line",cityKo:"나고야",color:"#E85298",aliases:["사쿠라도리선","사쿠라도리","桜通線","sakura-dori","sakuradori"]},{id:"kyoto_karasuma",labelKo:"가라스마선",labelEn:"Karasuma Line",cityKo:"교토",color:"#1A9E4E",aliases:["가라스마선","가라스마","烏丸線","karasuma"]},{id:"kyoto_tozai",labelKo:"교토 도자이선",labelEn:"Kyoto Tozai Line",cityKo:"교토",color:"#00A7E3",aliases:["교토 도자이","교토도자이선","京都市東西線","kyoto tozai"]},{id:"osaka_midosuji",labelKo:"미도스지선",labelEn:"Midosuji Line",cityKo:"오사카",color:"#E60012",aliases:["미도스지선","미도스지","御堂筋線","midosuji"]},{id:"osaka_tanimachi",labelKo:"다니마치선",labelEn:"Tanimachi Line",cityKo:"오사카",color:"#522886",aliases:["다니마치선","다니마치","谷町線","tanimachi"]},{id:"osaka_yotsubashi",labelKo:"요쓰바시선",labelEn:"Yotsubashi Line",cityKo:"오사카",color:"#0078BA",aliases:["요쓰바시선","요츠바시","四つ橋線","yotsubashi"]},{id:"osaka_chuo",labelKo:"주오선",labelEn:"Chuo Line",cityKo:"오사카",color:"#019A66",aliases:["오사카 주오","주오선 오사카","大阪中央線","osaka chuo"]},{id:"osaka_sennichimae",labelKo:"센니치마에선",labelEn:"Sennichimae Line",cityKo:"오사카",color:"#E44D93",aliases:["센니치마에선","센니치마에","千日前線","sennichimae"]},{id:"osaka_sakaisuji",labelKo:"사카이스지선",labelEn:"Sakaisuji Line",cityKo:"오사카",color:"#B5A36A",aliases:["사카이스지선","사카이스지","堺筋線","sakaisuji"]},{id:"osaka_nagahori",labelKo:"나가호리선",labelEn:"Nagahori Line",cityKo:"오사카",color:"#A8BF00",aliases:["나가호리선","나가호리","長堀線","nagahori"]},{id:"kobe_seishin",labelKo:"세이신·야마테선",labelEn:"Seishin-Yamate Line",cityKo:"고베",color:"#0078C1",aliases:["세이신선","야마테선","西神山手","seishin","kobe subway"]}
22,{id:"kobe_kaigan",labelKo:"카이간선",labelEn:"Kaigan Line",cityKo:"고베",color:"#00A0E9",aliases:["카이간선","해안선 고베","海岸線","kaigan"]},{id:"fukuoka_kuko",labelKo:"공항선",labelEn:"Kuko Line",cityKo:"후쿠오카",color:"#FF9E1B",aliases:["후쿠오카 공항선","공항선 후쿠오카","空港線","kuko line","fukuoka airport line"]},{id:"fukuoka_hakozaki",labelKo:"하코자키선",labelEn:"Hakozaki Line",cityKo:"후쿠오카",color:"#0077C8",aliases:["하코자키선","하코자키","箱崎線","hakozaki"]},{id:"fukuoka_nanakuma",labelKo:"나나쿠마선",labelEn:"Nanakuma Line",cityKo:"후쿠오카",color:"#9BCC3C",aliases:["나나쿠마선","나나쿠마","七隈線","nanakuma"]},{id:"sendai_namboku",labelKo:"센다이 난보쿠선",labelEn:"Sendai Namboku Line",cityKo:"센다이",color:"#0077C8",aliases:["센다이 난보쿠","센다이 남북","仙台南北","sendai namboku"]},{id:"sendai_tozai",labelKo:"센다이 도자이선",labelEn:"Sendai Tozai Line",cityKo:"센다이",color:"#FF9E1B",aliases:["센다이 도자이","仙台東西","sendai tozai"]},{id:"sapporo_namboku",labelKo:"삿포로 난보쿠선",labelEn:"Sapporo Namboku Line",cityKo:"삿포로",color:"#007A33",aliases:["삿포로 난보쿠","札幌南北","sapporo namboku"]},{id:"sapporo_tozai",labelKo:"삿포로 도자이선",labelEn:"Sapporo Tozai Line",cityKo:"삿포로",color:"#0073BC",aliases:["삿포로 도자이","札幌東西","sapporo tozai"]},{id:"sapporo_toho",labelKo:"삿포로 도호선",labelEn:"Sapporo Toho Line",cityKo:"삿포로",color:"#F15A22",aliases:["삿포로 도호","도호선","東豊線","sapporo toho","toho"]}];function s(e){let t=e.trim().toLowerCase().replace(/\s+/gu," ");if(!t)return null;let n=null,a=0;for(let e of l)for(let i of e.aliases){let o=i.toLowerCase();o.length>=2&&t.includes(o)&&o.length>a&&(n=e.id,a=o.length)}return n}r.filter(e=>e.startsWith("tokyo_")||e.startsWith("toei_")),r.filter(e=>e.startsWith("osaka_")),r.filter(e=>e.startsWith("nagoya_")),r.filter(e=>e.startsWith("kyoto_")),r.filter(e=>e.startsWith("kobe_")),r.filter(e=>e.startsWith("fukuoka_")),r.filter(e=>e.startsWith("sendai_")),r.filter(e=>e.startsWith("sapporo_")),r.filter(e=>e.startsWith("yokohama_")),e.s(["JAPAN_METRO_GEOJSON_URL",0,"/geo/japan_metro.geojson","JAPAN_METRO_LINE_CATALOG",0,l,"JAPAN_METRO_LINE_IDS",0,r,"resolveJapanMetroLineIdFromText",0,s],524398);let c=["tokaido","sanyo","tohoku","joetsu","hokuriku","kyushu","hokkaido","yamagata","akita","nishi_kyushu"],u=[{id:"tokaido",labelKo:"도카이도신칸센",shortLabelKo:"도카이도",labelEn:"Tokaido Shinkansen",color:"#0067C0",labelAnchor:[137.6,35],aliases:["도카이도","도카이도신칸센","東海道","東海道新幹線","tokaido","tokaido shinkansen"]},{id:"sanyo",labelKo:"산요신칸센",shortLabelKo:"산요",labelEn:"Sanyo Shinkansen",color:"#0072BC",labelAnchor:[133.2,34.55],aliases:["산요","산요신칸센","山陽","山陽新幹線","sanyo","sanyo shinkansen"]},{id:"tohoku",labelKo:"도호쿠신칸센",shortLabelKo:"도호쿠",labelEn:"Tohoku Shinkansen",color:"#00A040",labelAnchor:[140.5,38.5],aliases:["도호쿠","도호쿠신칸센","東北","東北新幹線","tohoku","tohoku shinkansen"]},{id:"joetsu",labelKo:"조에쓰신칸센",shortLabelKo:"조에쓰",labelEn:"Joetsu Shinkansen",color:"#E60012",labelAnchor:[139,36.8],aliases:["조에쓰","조에츠","조에쓰신칸센","上越","上越新幹線","joetsu","joetsu shinkansen"]},{id:"hokuriku",labelKo:"호쿠리쿠신칸센",shortLabelKo:"호쿠리쿠",labelEn:"Hokuriku Shinkansen",color:"#C8102E",labelAnchor:[137.5,36.5],aliases:["호쿠리쿠","호쿠리쿠신칸센","北陸","北陸新幹線","hokuriku","hokuriku shinkansen","나가노신칸센"]},{id:"kyushu",labelKo:"큐슈신칸센",shortLabelKo:"큐슈",labelEn:"Kyushu Shinkansen",color:"#F15A22",labelAnchor:[130.65,32.7],aliases:["큐슈","규슈","큐슈신칸센","규슈신칸센","九州","九州新幹線","kyushu","kyushu shinkansen"]},{id:"hokkaido",labelKo:"홋카이도신칸센",shortLabelKo:"홋카이도",labelEn:"Hokkaido Shinkansen",color:"#00A0E9",labelAnchor:[140.78,41.35],aliases:["홋카이도","홋카이도신칸센","北海道","北海道新幹線","hokkaido","hokkaido shinkansen"]},{id:"yamagata",labelKo:"야마가타신칸센",shortLabelKo:"야마가타",labelEn:"Yamagata Shinkansen",color:"#F7931E",labelAnchor:[140.3,38.3],aliases:["야마가타","야마가타신칸센","山形","山形新幹線","yamagata","yamagata shinkansen"]},{id:"akita",labelKo:"아키타신칸센",shortLabelKo:"아키타",labelEn:"Akita Shinkansen",color:"#E4002B",labelAnchor:[140.7,39.7],aliases:["아키타","아키타신칸센","秋田","秋田新幹線","akita","akita shinkansen"]},{id:"nishi_kyushu",labelKo:"니시큐슈신칸센",shortLabelKo:"니시큐슈",labelEn:"Nishi-Kyushu Shinkansen",color:"#7B2D8E",labelAnchor:[129.95,33],aliases:["니시큐슈","니시규슈","니시큐슈신칸센","西九州","西九州新幹線","nishi kyushu","nishi-kyushu","나가사키신칸센"]}];function d(e){let t=e.trim().toLowerCase().replace(/\s+/gu," ");
22if(!t)return null;let n=null,a=0;for(let e of u)for(let i of e.aliases){let o=i.toLowerCase();o.length>=2&&t.includes(o)&&o.length>a&&(n=e.id,a=o.length)}return n}e.s(["JAPAN_SHINKANSEN_GEOJSON_URL",0,"/geo/japan_shinkansen.geojson","JAPAN_SHINKANSEN_LINE_CATALOG",0,u,"JAPAN_SHINKANSEN_LINE_IDS",0,c,"getJapanShinkansenLineEntry",0,function(e){return u.find(t=>t.id===e)??null},"resolveJapanShinkansenLineIdFromText",0,d],278637);let p=["ktx_gyeongbu","ktx_honam","ktx_gangneung","ktx_jeolla","ktx_gyeongjeon","srt","gyeongbu","honam","jeolla","jungang","yeongdong","donghae","janghang"],m=[{id:"ktx_gyeongbu",labelKo:"KTX 경부선",labelEn:"KTX Gyeongbu",color:"#0054A6",aliases:["ktx 경부","ktx경부","경부고속","경부 ktx","ktx gyeongbu","gyeongbu ktx"]},{id:"ktx_honam",labelKo:"KTX 호남선",labelEn:"KTX Honam",color:"#00A651",aliases:["ktx 호남","ktx호남","호남고속","호남 ktx","ktx honam"]},{id:"ktx_gangneung",labelKo:"KTX 강릉선",labelEn:"KTX Gangneung",color:"#00B5E2",aliases:["ktx 강릉","ktx강릉","강릉선","강릉 ktx","원주강릉","ktx gangneung"]},{id:"ktx_jeolla",labelKo:"KTX 전라선",labelEn:"KTX Jeolla",color:"#8DC63F",aliases:["ktx 전라","ktx전라","전라고속","전라 ktx","ktx jeolla"]},{id:"ktx_gyeongjeon",labelKo:"KTX 경전선",labelEn:"KTX Gyeongjeon",color:"#F15A29",aliases:["ktx 경전","ktx경전","경전고속","경전 ktx","ktx gyeongjeon"]},{id:"srt",labelKo:"SRT",labelEn:"SRT",color:"#6B2D7B",aliases:["srt","에스알티","수서고속","수서 srt"]},{id:"gyeongbu",labelKo:"경부선",labelEn:"Gyeongbu Line",color:"#1B75BB",aliases:["경부선","경부","gyeongbu line","gyeongbu"]},{id:"honam",labelKo:"호남선",labelEn:"Honam Line",color:"#39B54A",aliases:["호남선","호남","honam line","honam"]},{id:"jeolla",labelKo:"전라선",labelEn:"Jeolla Line",color:"#A8CF45",aliases:["전라선","전라","jeolla line","jeolla"]},{id:"jungang",labelKo:"중앙선",labelEn:"Jungang Line",color:"#F7941D",aliases:["중앙선","중앙","jungang line","jungang","중부내륙"]},{id:"yeongdong",labelKo:"영동선",labelEn:"Yeongdong Line",color:"#9B59B6",aliases:["영동선","영동","yeongdong line","yeongdong"]},{id:"donghae",labelKo:"동해선",labelEn:"Donghae Line",color:"#E91E63",aliases:["동해선","동해","donghae line","donghae"]},{id:"janghang",labelKo:"장항선",labelEn:"Janghang Line",color:"#795548",aliases:["장항선","장항","janghang line","janghang"]}];function g(e){let t=e.trim().toLowerCase().replace(/\s+/gu," ");if(!t)return null;let n=null,a=0;for(let e of m)for(let i of e.aliases){let o=i.toLowerCase();o.length>=2&&t.includes(o)&&o.length>a&&(n=e.id,a=o.length)}return n}e.s(["KOREA_RAIL_GEOJSON_URL",0,"/geo/korea_rail.geojson","KOREA_RAIL_LINE_CATALOG",0,m,"KOREA_RAIL_LINE_IDS",0,p,"resolveKoreaRailLineIdFromText",0,g],890438);let h={"line-1":"1호선","line-2":"2호선","line-3":"3호선","line-4":"4호선","line-5":"5호선","line-6":"6호선","line-7":"7호선","line-8":"8호선","line-9":"9호선"},y=[{id:"sadang",nameKo:"사당",nameEn:"Sadang",lat:37.4765,lng:126.9816,lines:["line-2","line-3","line-4"]},{id:"express-bus-terminal",nameKo:"고속터미널",nameEn:"Express Bus Terminal",lat:37.5045,lng:127.0049,lines:["line-3","line-7","line-9"]},{id:"jongno-3ga",nameKo:"종로3가",nameEn:"Jongno 3-ga",lat:37.5714,lng:126.9918,lines:["line-1","line-3","line-5"]},{id:"euljiro-3ga",nameKo:"을지로3가",nameEn:"Euljiro 3-ga",lat:37.5664,lng:126.9919,lines:["line-2","line-3","line-5"]},{id:"gangnam",nameKo:"강남",nameEn:"Gangnam",lat:37.4979,lng:127.0276,lines:["line-2"]},{id:"hongdae",nameKo:"홍대입구",nameEn:"Hongik Univ.",lat:37.5572,lng:126.9244,lines:["line-2"]},{id:"myeongdong",nameKo:"명동",nameEn:"Myeongdong",lat:37.5609,lng:126.9863,lines:["line-4"]},{id:"seoul-station",nameKo:"서울역",nameEn:"Seoul Station",lat:37.5547,lng:126.9707,lines:["line-1","line-4"]},{id:"city-hall",nameKo:"시청",nameEn:"City Hall",lat:37.5647,lng:126.977,lines:["line-1","line-2"]},{id:"gwanghwamun",nameKo:"광화문",nameEn:"Gwanghwamun",lat:37.571,lng:126.9768,lines:["line-5"]},{id:"sinchon",nameKo:"신촌",nameEn:"Sinchon",lat:37.5558,lng:126.9369,lines:["line-2"]}];function f(e){let t=(0,i.resolveOsakaMetroLineIdFromText)(e),n=t?i.OSAKA_METRO_LINE_CATALOG.filter(e=>e.id===t):i.OSAKA_METRO_LINE_CATALOG,a=new Set(n.map(e=>e.id));return{providerId:"cached_overlay",regionKo:"오사카",family:"osaka_metro",labelKo:t?i.OSAKA_METRO_LINE_CATALOG.find(e=>e.id===t)?.labelKo??"오사카 메트로":"오사카 메트로",lines:n.map(e=>
22({id:e.id,kind:"line",titleKo:e.labelKo,shortLabelKo:e.shortLabelKo,color:e.color,operatorHint:"metro"})),stations:o.OSAKA_METRO_STATIONS.filter(e=>e.hub&&e.lineIds.some(e=>a.has(e))).map(e=>({id:e.id,kind:"station",titleKo:e.nameKo,lat:e.lat,lng:e.lng,lineIds:[...e.lineIds],hub:!0}))}}function b(e,t){let n=s(t),a="도쿄"===e?"도쿄":"일본"===e?null:e,i=a?l.filter(e=>e.cityKo===a):l;return n&&(i=l.filter(e=>e.id===n)),{providerId:"cached_overlay",regionKo:e??"일본",family:"japan_metro",labelKo:n?l.find(e=>e.id===n)?.labelKo??"일본 지하철":a?`${a} 지하철`:"일본 지하철",lines:i.map(e=>({id:e.id,kind:"line",titleKo:e.labelKo,shortLabelKo:e.labelKo.replace(/선$/u,""),color:e.color,operatorHint:"metro"})),stations:[]}}function k(){return{providerId:"cached_overlay",regionKo:"서울",family:"seoul_metro",labelKo:"서울 지하철",lines:Object.keys(h).map(e=>({id:e,kind:"line",titleKo:h[e],shortLabelKo:h[e],color:"#0054A6",operatorHint:"metro"})),stations:y.map(e=>({id:e.id,kind:"station",titleKo:e.nameKo,lat:e.lat,lng:e.lng,lineIds:[...e.lines],hub:e.lines.length>=3}))}}e.s(["SEOUL_TRANSIT_LINE_LABEL_KO",0,h,"SEOUL_TRANSIT_STATIONS",0,y],28157);var K=e.i(84549),I=e.i(301008),v=e.i(357220);let x=new Set(["rail_network","metro_network","shinkansen_network"]);function _(e){let o=function(e){let t=e.trim().replace(/\s+/gu," ");if(!t||/호텔|숙소|맛집|레스토랑|찾아\s*줘|예약/iu.test(t)&&!/노선|지하철|메트로|신칸센|JR|철도|KTX/iu.test(t))return null;let n=null,a=null,i=function(e){if(/오사카|osaka/iu.test(e))return"오사카";if(/도쿄|tokyo/iu.test(e))return"도쿄";if(/교토|kyoto/iu.test(e))return"교토";if(/고베|kobe/iu.test(e))return"고베";if(/나고야|nagoya/iu.test(e))return"나고야";if(/후쿠오카|fukuoka/iu.test(e))return"후쿠오카";if(/센다이|sendai/iu.test(e))return"센다이";if(/삿포로|sapporo/iu.test(e))return"삿포로";if(/요코하마|yokohama/iu.test(e))return"요코하마";if(/일본|japan/iu.test(e))return"일본";if(/대전|daejeon|서울|seoul|부산|busan|인천|incheon|대구|daegu|광주|gwangju|울산|ulsan|세종|세종시/iu.test(e)){if(/대전|daejeon/iu.test(e))return"대전";if(/서울|seoul/iu.test(e))return"서울";if(/부산|busan/iu.test(e))return"부산";if(/인천|incheon/iu.test(e))return"인천";if(/대구|daegu/iu.test(e))return"대구";if(/광주|gwangju/iu.test(e))return"광주";if(/울산|ulsan/iu.test(e))return"울산";if(/세종/iu.test(e))return"세종"}return/한국|korea|전국\s*노선|한반도/iu.test(e)?"한국":/홍콩|hong\s*kong|\bhk\b|港鐵|\bmtr\b/iu.test(e)?"홍콩":/상하이|shanghai|上海/iu.test(e)?"상하이":/베이징|beijing|北京/iu.test(e)?"베이징":/선전|shenzhen|深圳/iu.test(e)?"선전":/타이베이|taipei|台北|臺北/iu.test(e)?"타이베이":/싱가포르|singapore|sg\s*mrt|\bmrt\b/iu.test(e)&&/싱가포르|singapore/iu.test(e)?"싱가포르":/방콕|bangkok|BTS|MRT/iu.test(e)&&/방콕|bangkok/iu.test(e)?"방콕":/뉴욕|new\s*york|\bnyc\b/iu.test(e)?"뉴욕":/런던|london/iu.test(e)?"런던":/파리|paris/iu.test(e)?"파리":/베를린|berlin/iu.test(e)?"베를린":null}(t),o=/숨겨|꺼|지워|끄|숨김|없애|가려/iu.test(t)?"hide":"show";if(/신칸센|新幹線|shinkansen/iu.test(t)?n="shinkansen_network":/전국\s*노선|한국\s*철도|한국\s*노선|코레일|KTX|SRT|경부고속|호남고속/iu.test(t)?(n="rail_network",a="korail"):/일본\s*지하철|전국\s*지하철|도쿄\s*메트로|도쿄\s*지하철|japan\s*subway|japan\s*metro/iu.test(t)||/지하철|메트로|전철|미도스지|다니마치|요쓰바시|주오선|센니치|사카이스지|나가호리|이마자토|난코|metro|subway|노선도|노선망|地铁|メトロ|港鐵|\bmtr\b|\bmrt\b/iu.test(t)?n="metro_network":/\bJR\b|JR|재래선|순환선|한큐|한신|긴테쓰|난카이|게이한|철도\s*노선|기차\s*노선/iu.test(t)||/(?:오사카|osaka).{0,8}JR|JR.{0,8}(?:오사카|osaka|노선)/iu.test(t)?(n="rail_network",/\bJR\b|JR/iu.test(t)?a="jr":/한큐/iu.test(t)?a="hankyu":/한신/iu.test(t)?a="hanshin":/긴테쓰|近鉄/iu.test(t)?a="kintetsu":/난카이/iu.test(t)&&(a="nankai")):/불꽃|축제|페스티벌|행사|concert|festival/iu.test(t)?n="event_set":/ATM|현금인출|편의점/iu.test(t)&&/위치|보여|찾아/iu.test(t)?n="amenity_set":/벚꽃|명소|poi\s*set|관광\s*스팟/iu.test(t)&&/보여|찾아|깔/iu.test(t)&&(n="poi_set"),
22!n)return null;if("rail_network"===n||"metro_network"===n||"shinkansen_network"===n){let e=/^(?:지하철|메트로|subway|metro|노선|노선도|JR|JR|신칸센|철도|地铁|港鐵|mtr|mrt)$/iu.test(t),n=/표시|보여|켜|그려|띄워|올려|숨겨|꺼|지워|끄|숨김|없애|가려|깔|노선|선|線|找|찾아|搜|线|\bline\b|map|전부|전체|해줘|해바|해봐|해죠|깔아줘|깔아놔|보여줘|켜줘|띄워줘|올려줘|찾아줘/iu.test(t);if(!e&&!n)return null}return{needId:n,regionKo:"rail_network"===n&&"korail"===a?i??"한국":i,operatorHint:a,utterance:t,visibility:o}}(e.utterance);if(!o||!x.has(o.needId))return null;let l=(0,v.resolveRealityProvider)(o);if(0===l.candidates.length)return{handled:!0,statusKo:"Reality Provider 없음",needId:o.needId,providerId:null,workspacePatched:!1,mapProjected:!1};let s="Acquire 실패";for(let y of l.candidates){let l=function(e){let{need:t,providerId:i}=e;return"gtfs"===i?"metro_network"===t.needId&&("서울"===t.regionKo||"도쿄"===t.regionKo||"오사카"===t.regionKo||"일본"===t.regionKo)?{ok:!0,providerId:"gtfs",bundle:"서울"===t.regionKo?k():"오사카"===t.regionKo?f(t.utterance):b(t.regionKo??"일본",t.utterance)}:{ok:!1,providerId:i,reasonKo:"GTFS feed 미연결 · Fact Query stub 또는 cached_overlay 사용"}:"osm"===i?{ok:!1,providerId:i,reasonKo:`${i} 미연결 \xb7 캐시 오버레이로 전환`}:"cached_overlay"===i?function(e){if("shinkansen_network"===e.needId){let t,n;return{ok:!0,providerId:"cached_overlay",bundle:(n=(t=d(e.utterance))?u.filter(e=>e.id===t):u,{providerId:"cached_overlay",regionKo:"일본",family:"shinkansen",labelKo:t?u.find(e=>e.id===t)?.labelKo??"신칸센":"신칸센",lines:n.map(e=>({id:e.id,kind:"line",titleKo:e.labelKo,shortLabelKo:e.shortLabelKo,color:e.color,operatorHint:"shinkansen"})),stations:[]})}}if("metro_network"===e.needId){if("일본"===e.regionKo||"도쿄"===e.regionKo||/일본\s*지하철|도쿄\s*메트로|japan\s*metro/iu.test(e.utterance))return{ok:!0,providerId:"cached_overlay",bundle:b(e.regionKo??"일본",e.utterance)};if("한국"===e.regionKo||"대전"===e.regionKo||"서울"===e.regionKo||"부산"===e.regionKo||"인천"===e.regionKo||"대구"===e.regionKo||"광주"===e.regionKo||"울산"===e.regionKo||"세종"===e.regionKo||"홍콩"===e.regionKo||"상하이"===e.regionKo||"베이징"===e.regionKo||"선전"===e.regionKo||"타이베이"===e.regionKo||"싱가포르"===e.regionKo||"방콕"===e.regionKo||"뉴욕"===e.regionKo||"런던"===e.regionKo||"파리"===e.regionKo||"베를린"===e.regionKo||/대전|서울|부산|인천|대구|광주|울산|세종|한국|홍콩|hong\s*kong|\bmtr\b|상하이|shanghai|上海|베이징|beijing|선전|타이베이|싱가포르|방콕|뉴욕|런던|파리|베를린|地铁/iu.test(e.utterance)){if("서울"===e.regionKo||/서울\s*지하철|seoul\s*metro|서울\s*메트로/iu.test(e.utterance))return{ok:!0,providerId:"cached_overlay",bundle:k()};let t=e.regionKo?.trim()||"이 도시";return{ok:!1,providerId:"cached_overlay",reasonKo:`${t} 도시철 캐시는 아직 없어요 \xb7 지금은 오사카\xb7일본 메트로만 지도에 깔아요`}}return{ok:!0,providerId:"cached_overlay",bundle:f(e.utterance)}}if("rail_network"===e.needId){if("한국"===e.regionKo||"korail"===e.operatorHint||/전국\s*노선|한국|KTX|SRT/iu.test(e.utterance)){let t,n;return{ok:!0,providerId:"cached_overlay",bundle:(n=(t=g(e.utterance))?m.filter(e=>e.id===t):m,{providerId:"cached_overlay",regionKo:"한국",family:"korea_rail",labelKo:t?m.find(e=>e.id===t)?.labelKo??"한국 철도":"한국 철도",lines:n.map(e=>({id:e.id,kind:"line",titleKo:e.labelKo,shortLabelKo:e.labelKo.replace(/^KTX\s*/u,"").replace(/\s*선$/u,""),color:e.color,operatorHint:"korail"})),stations:[]})}}return{ok:!0,providerId:"cached_overlay",bundle:{providerId:"cached_overlay",regionKo:"오사카",family:"osaka_jr",labelKo:"오사카 JR",lines:n.map(e=>({id:e.id,kind:"line",titleKo:e.labelKo,shortLabelKo:e.shortLabelKo,color:e.color,operatorHint:"jr"})),stations:a.map(e=>({id:e.id,kind:"station",titleKo:e.nameKo,lat:e.lat,lng:e.lng,lineIds:[...e.lineIds],hub:!!e.hub}))}}}return{ok:!1,providerId:"cached_overlay",reasonKo:`Need ${e.needId} 캐시 어댑터 없음`}}(t):{ok:!1,providerId:i,reasonKo:`Provider ${i} 미지원 (network)`}}({need:o,providerId:y.providerId});if(!l.ok){if(s=l.reasonKo,/도시철 캐시는 아직/u.test(s))return{handled:!0,statusKo:s,needId:o.needId,providerId:y.providerId,workspacePatched:!1,mapProjected:!1};continue}let v=function(e){let{need:n,bundle:a,contextEventId:o}=e,l="hide"===n.visibility,s=a.family,u=a.lines.map(e=>e.id),d=function(e){let{hide:n,family:a,lineIds:o}=e,l=function(e){switch(e){case"osaka_jr":return t.length;case"osaka_metro":return i.OSAKA_METRO_LINE_IDS.length;case"japan_metro":return r.length;case"shinkansen":return c.length;
22case"korea_rail":return p.length;case"seoul_metro":return Object.keys(h).length}}(a);return n?0===o.length||o.length>=l?"clear":"remove":0===o.length||o.length>=l?"replace":1===o.length?"add":"replace"}({hide:l,family:s,lineIds:u}),m=l?"hide":"show",g=l?`${a.labelKo} 숨김`:`${a.labelKo} ${a.lines.length}개 노선`+(a.stations.length>0?` \xb7 역 ${a.stations.length}`:""),y=new Date().toISOString(),f=(0,K.applyNetworkAbsorbVisibilityPatch)({family:s,op:d,lineIds:u,labelKo:a.labelKo,providerId:a.providerId,needId:n.needId,atIso:y}),b=!1,k=o?.trim()??"";if(k){let e=(0,I.readContextWorkspace)(k);if(e&&("editing"===e.status||"committing"===e.status)){var v;let t=(v={need:n,providerId:a.providerId,family:s,visibility:m,visibilityOp:d,lineIds:u,labelKo:a.labelKo,lineCount:"clear"===d?0:f.families[s]?.lineIds.length??0,stationCount:l?0:a.stations.length,statusKo:g},{id:`patch_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,7)}`,kind:"absorb_network",patch:{kind:"absorb_network",needId:v.need.needId,providerId:v.providerId,lineCount:v.lineCount,stationCount:v.stationCount,family:v.family,visibility:v.visibility,visibilityOp:v.visibilityOp,lineIds:v.lineIds,labelKo:v.labelKo},utterance:v.need.utterance,statusKo:v.statusKo,atIso:new Date().toISOString(),answerForbidden:!0}),i=Array.isArray(e.patches)?e.patches:[];(0,I.writeContextWorkspace)({...e,lastChangeKo:g,networkAbsorb:f,patches:[...i,t].slice(-40),updatedAtIso:t.atIso}),b=!0}}return{statusKo:g,lineCount:f.families[s]?.lineIds.length??0,stationCount:l?0:a.stations.length,providerId:a.providerId,workspacePatched:b}}({need:o,bundle:l.bundle,contextEventId:e.contextEventId});return{handled:!0,statusKo:v.statusKo,needId:o.needId,providerId:v.providerId,workspacePatched:v.workspacePatched,mapProjected:!0}}return{handled:!0,statusKo:s,needId:o.needId,providerId:l.selected?.providerId??null,workspacePatched:!1,mapProjected:!1}}e.s(["tryApplyRealityAbsorbFromUtterance",0,_],928629),e.s(["tryApplyNetworkAbsorbWorkspaceTurn",0,function(e){var t,n;let a=_({utterance:e.utterance,contextEventId:e.contextEventId});return a?.handled?{handled:!0,replyKo:a.statusKo,needId:a.needId,mapProjected:a.mapProjected,workspacePatched:a.workspacePatched,softChips:(t=a.needId,n=a.statusKo,a.mapProjected?"metro_network"===t?/숨김/u.test(n)?[{labelKo:"지하철 다시",utterance:"지하철 노선"},{labelKo:"숙소 찾기",utterance:"숙소 찾아줘"}]:[{labelKo:"미도스지선",utterance:"미도스지선"},{labelKo:"노선 숨기기",utterance:"지하철 숨겨"},{labelKo:"동선",utterance:"동선 최적화"}]:"rail_network"===t||"shinkansen_network"===t?[{labelKo:"노선 숨기기",utterance:"노선 숨겨"},{labelKo:"동선",utterance:"동선 최적화"}]:[{labelKo:"동선",utterance:"동선 최적화"}]:[{labelKo:"오사카 메트로",utterance:"오사카 지하철 노선"},{labelKo:"한국 철도",utterance:"한국 철도 노선 보여줘"}])}:null}],273403);var w=e.i(472181);e.s(["assertWorkspacePostcondition",0,function(e){let t=e.state;if(!t)return{ok:!1,code:"STATE_UNREADABLE",detailKo:"Workspace를 읽지 못했어요"};let n=e.expect;if("near_scout"!==n.kind)return{ok:!1,code:"STATE_UNREADABLE",detailKo:"알 수 없는 postcondition"};if(!t.nodes.some(e=>!!e.visible&&!!("reality_anchor"===e.source||e.tags.includes("reality_anchor")||e.tags.includes("place_locate")||null!=n.anchorId&&(e.id===n.anchorId||e.placeId===n.anchorId))&&!!Number.isFinite(e.lat)&&!!Number.isFinite(e.lng)&&50>=(0,w.metersBetween)(n.anchorLat,n.anchorLng,e.lat,e.lng)))return{ok:!1,code:"ANCHOR_MISSING",detailKo:"기준점 Anchor가 Workspace에 없어요"};let a=n.minCandidates??1,i=t.nodes.filter(e=>!(!e.visible||e.kind!==n.candidateKind||"reality_anchor"===e.source||e.tags.includes("reality_anchor")||e.tags.includes("place_locate"))&&!!Number.isFinite(e.lat)&&!!Number.isFinite(e.lng)&&(0,w.metersBetween)(n.anchorLat,n.anchorLng,e.lat,e.lng)<=n.radiusMeters).length;if(i<a){let e=t.nodes.some(e=>e.visible&&e.kind===n.candidateKind&&"reality_anchor"!==e.source&&!e.tags.includes("reality_anchor"));
22return{ok:!1,code:e?"CANDIDATES_OUT_OF_RADIUS":"CANDIDATES_MISSING",detailKo:e?`반경 ${n.radiusMeters}m 안 ${n.candidateKind} 후보가 없어요`:`${n.candidateKind} 후보가 Workspace에 없어요`}}return{ok:!0,code:"PASS",detailKo:`기준점 \xb7 ${n.candidateKind} ${i}곳 \xb7 ${n.radiusMeters}m 안`}}],764144);let C=/^(?:난바|나가호리|osaka|오사카|도톤보리|namba)(?:\s|$)/iu;e.s(["MAX_SCOUT_ATTEMPTS",0,2,"assertScoutRetryProposal",0,function(e){let{lock:t,proposed:n}=e;if(n.jobId!==t.jobId)return{ok:!1,code:"SCOUT_LOCK_DRIFT",statusKo:"검색 재시도는 같은 Job에서만 해요"};if(n.anchorId!==t.anchorId)return{ok:!1,code:"SCOUT_LOCK_DRIFT",statusKo:"검색 재시도는 같은 기준점을 유지해요"};if(n.scoutUtterance.trim()!==t.scoutUtterance)return{ok:!1,code:"SCOUT_LOCK_DRIFT",statusKo:"검색 재시도는 같은 조건을 유지해요"};let a=(n.areaHint??"").trim();return a!==t.areaHint?{ok:!1,code:"SCOUT_FALLBACK_REJECTED",statusKo:"다른 동네로 바꿔 찾지 않아요 · 같은 기준으로 다시 볼게요"}:C.test(a)&&!C.test(t.nearLabelKo)&&a!==t.nearLabelKo?{ok:!1,code:"SCOUT_FALLBACK_REJECTED",statusKo:"검색 실패 후 다른 역으로 넘어가지 않아요"}:"number"==typeof n.lat&&"number"==typeof n.lng&&(Math.abs(n.lat-t.anchorLat)>1e-5||Math.abs(n.lng-t.anchorLng)>1e-5)?{ok:!1,code:"SCOUT_LOCK_DRIFT",statusKo:"검색 재시도는 같은 좌표를 유지해요"}:{ok:!0}},"createScoutRetryLock",0,function(e){return{jobId:e.jobId,anchorId:e.anchorId,anchorLat:e.anchorLat,anchorLng:e.anchorLng,nearLabelKo:e.nearLabelKo,scoutUtterance:e.scoutUtterance.trim(),areaHint:e.areaHint.trim()}},"resolveAfterScoutEmpty",0,function(e){let t=e.maxAttempts??2;if(e.attempt<t)return{retry:!0,nextAttempt:e.attempt+1};let n=e.nearLabelKo?.trim()||"그곳";return{retry:!1,code:"SCOUT_FAILED",statusKo:`${n} 근처 검색이 실패했어요 \xb7 조건을 바꿔 말해 주세요`}}],770970)},155271,e=>{"use strict";e.s(["tryApplyWorkspaceLodgingTurn",()=>O,"tryApplyWorkspacePromptTurn",()=>N]);var t=e.i(809214),n=e.i(363626),a=e.i(301008),i=e.i(462653),o=e.i(607298),r=e.i(878884),l=e.i(175786),s=e.i(556307),c=e.i(622500),u=e.i(923531);e.i(421808);var d=e.i(328110);e.i(236995);var p=e.i(555488);e.i(187403);var m=e.i(376875),g=e.i(210534),h=e.i(468932),y=e.i(305125),f=e.i(355479),b=e.i(205317),k=e.i(332464),K=e.i(257673),I=e.i(453518);e.i(82578);var v=e.i(627033),x=e.i(204667),_=e.i(931544),w=e.i(273403);e.i(954696);var C=e.i(374581),S=e.i(472181),T=e.i(751382),L=e.i(779267),E=e.i(890503),P=e.i(764144),A=e.i(770970),$=e.i(205592);e.i(20957);var j=e.i(80933),R=e.i(511783),D=e.i(572473);function M(e){(0,a.writeContextWorkspaceExpanded)(e,!0),(0,s.dispatchContextWorkspaceExpand)({contextEventId:e,source:"scout_patch"})}async function W(e){var n;let l=(0,a.readContextWorkspace)(e.contextEventId);if(!l)return{handled:!1,replyKo:null,committed:!1};let s=await (0,T.gateNearScoutAnchorAsync)({utterance:e.utterance});if(s.gated&&!s.ok)return{handled:!0,replyKo:s.statusKo,committed:!1,softChips:(0,L.buildAnchorFailSoftChips)({utterance:e.utterance,code:s.code,nearLabelKo:(0,E.extractNearPlaceLabelFromUtterance)(e.utterance),candidates:s.candidates})};s.gated&&s.ok&&(0,C.ensureWorkspaceAnchorNode)({contextEventId:e.contextEventId,anchor:{entityId:s.anchor.id,titleKo:s.anchor.labelKo,labelKo:s.anchor.labelKo,kind:"station"===s.anchor.kind?"station":"attraction",lat:s.anchor.lat,lng:s.anchor.lng},geoId:s.anchor.id,summaryKo:`${s.anchor.labelKo} \xb7 검색 기준점`});let d=(0,k.runAgentP1Guards)({contextEventId:e.contextEventId,utterance:e.utterance,lat:s.gated&&s.ok?s.anchor.lat:null,lng:s.gated&&s.ok?s.anchor.lng:null,scoutMode:"add"===e.mode?"add":"replace"});if(!d.ok)return{handled:!0,replyKo:d.statusKo,committed:!1};let p=s;if((!s.gated||!s.ok)&&d.carry.inheritedSpatialFromStack&&d.carry.bagForScout.nearLabelKo){if((p=await (0,T.gateNearScoutAnchorAsync)({utterance:d.scoutUtterance})).gated&&p.ok)(0,C.ensureWorkspaceAnchorNode)({contextEventId:e.contextEventId,anchor:{entityId:p.anchor.id,titleKo:p.anchor.labelKo,labelKo:p.anchor.labelKo,kind:"station"===p.anchor.kind?"station":"attraction",lat:p.anchor.lat,lng:p.anchor.lng},geoId:p.anchor.id,summaryKo:`${p.anchor.labelKo} \xb7 검색 기준점`});else if(p.gated&&!p.ok)return{handled:!0,replyKo:p.statusKo,committed:!1,softChips:(0,L.buildAnchorFailSoftChips)({utterance:e.utterance,code:p.code,nearLabelKo:d.carry.bagForScout.nearLabelKo??(0,E.extractNearPlaceLabelFromUtterance)(e.utterance),candidates:p.candidates})}}let m=(0,D.isAdditiveScoutUtterance)(e.utterance)?"add":d.forceReplaceScout&&"add"===e.mode?"replace":e.mode,f=(0,u.resolveWorksp
22aceSearchDomain)(d.scoutUtterance,l.domain),K=p.gated&&p.ok?{lat:p.anchor.lat,lng:p.anchor.lng,title:p.anchor.labelKo}:l.nodes.find(e=>"reality_anchor"===e.source||e.tags.includes("place_locate")||e.tags.includes("reality_anchor")||"string"==typeof e.placeId&&e.placeId.startsWith("geo:jp:osaka:metro:"))??l.nodes.find(e=>e.selected&&("poi"===e.kind||"amenity"===e.kind))??l.nodes.find(e=>e.selected)??l.nodes.find(e=>e.bookmarked&&e.visible)??l.nodes.find(e=>e.visible)??null,I=(0,u.workspaceDomainToToolDomain)(f),v=(0,g.resolveLookupToolId)(I,d.scoutUtterance),x=p.gated&&p.ok?p.anchor.labelKo:l.summaryKo?.replace(/\s*여행.*$/u,"").trim()||l.realityDraft?.destinationKo?.trim()||l.query?.replace(/\s*(숙소|호텔|여행).*$/u,"").trim()||null,_=("lodging"===I?(0,y.resolveLodgingStaySearchKeyword)({message:d.scoutUtterance,areaHint:x}):null)||d.scoutUtterance.trim()||l.query||`${(0,i.domainLabelKo)(f)} 찾기`,w=p.gated&&p.ok?(0,A.createScoutRetryLock)({jobId:d.job.id,anchorId:p.anchor.id,anchorLat:p.anchor.lat,anchorLng:p.anchor.lng,nearLabelKo:p.anchor.labelKo,scoutUtterance:d.scoutUtterance,areaHint:p.anchor.labelKo}):null,W=w?A.MAX_SCOUT_ATTEMPTS:1;try{let s=(()=>{let e=l.patches??[];for(let t=e.length-1;t>=0;t-=1){let n=e[t]?.patch;if(n&&"spatial_constraint"===n.kind&&"number"==typeof n.meters&&n.meters>0)return n.meters}return null})(),u=[],g=null,y=null;for(let t=1;t<=W;t+=1){if(w){let e=(0,A.assertScoutRetryProposal)({lock:w,proposed:{jobId:d.job.id,anchorId:w.anchorId,scoutUtterance:d.scoutUtterance,areaHint:w.areaHint,lat:K?.lat??w.anchorLat,lng:K?.lng??w.anchorLng}});if(!e.ok)return{handled:!0,replyKo:e.statusKo,committed:!1,openedForReview:!1}}let n=(0,h.planObjectDiscovery)({contextEventId:e.contextEventId,utterance:d.scoutUtterance,mode:"add"===m?"add":"replace"});if(!n)return{handled:!0,replyKo:"검색 계획을 세우지 못했어요",committed:!1};let a=await (0,h.runObjectDiscovery)({...n,query:_,toolId:v,toolDomain:I,lat:w?w.anchorLat:K?.lat??n.lat,lng:w?w.anchorLng:K?.lng??n.lng,placeName:(w?.areaHint??x)||n.placeName,nearScoutBlockedKo:null});if(y=a.summaryKo?.trim()||null,u=[...a.candidates??[]],g=a.ok?null:a.reasonKo??null,p.gated&&p.ok&&Number.isFinite(p.anchor.lat)&&Number.isFinite(p.anchor.lng)){let e=(0,S.distanceGateNearScout)({anchor:{lat:p.anchor.lat,lng:p.anchor.lng,labelKo:p.anchor.labelKo},candidates:u,patchMeters:s});u=[...e.kept],g=e.statusKo}if(u.length>0||!w)break;let i=(0,A.resolveAfterScoutEmpty)({attempt:t,maxAttempts:W,nearLabelKo:w.nearLabelKo});if(!i.retry)return{handled:!0,replyKo:g??i.statusKo,committed:!1,openedForReview:!1}}let k=(n=e.utterance,"poi"===f&&/놀거리|볼거리|할거리|관광|명소|액티비티/iu.test(n)?"놀거리":(0,i.domainLabelKo)(f));if(0===u.length)return{handled:!0,replyKo:g??("eatery"===f?"근처 맛집을 아직 못 찾았어요 · 동네나 메뉴를 더 말해 주세요":"poi"===f?"근처 놀거리를 아직 못 찾았어요 · 명소·테마파크처럼 더 말해 주세요":`${k}을 아직 못 찾았어요 \xb7 조건을 짧게 말해 보세요`),committed:!1,openedForReview:!1};if("add"===m){let n=(0,t.applyWorkspaceTransition)({contextEventId:e.contextEventId,op:"find_similar",addCandidates:u,domain:f,query:_,changeKo:u.length>0?`${k} ${u.length}곳 더 넣었어요 \xb7 작업장에서 확인`:null});M(e.contextEventId),(0,$.runAutoProjectionAfterPatch)({contextEventId:e.contextEventId,entityIds:null});let i=(0,a.readContextWorkspace)(e.contextEventId),o=n?.lastChangeKo??`${k} ${u.length}곳 더 넣었어요 \xb7 작업장에서 확인`,r=g?`${o} \xb7 ${g}`:o;i&&(0,c.appendWorkspaceSyncedAssistantTurn)({contextEventId:e.contextEventId,state:i,textKo:r});let l=(0,b.offerSoftNextWorkAfterAct)({contextEventId:e.contextEventId,lastAct:"search",lastUtterance:e.utterance,autoRun:d.allowSoftNextAuto,delayMs:720});return{handled:!0,replyKo:l.continued&&l.replyKo?`${r}
23${l.replyKo}`:r,committed:!1,openedForReview:!0}}let C=(0,o.openMapContextWorkspace)({contextEventId:e.contextEventId,domain:f,query:_,summaryKo:g||y||`${k} 후보 ${u.length}곳 \xb7 작업장에서 확인`,candidates:u,source:"scout_patch",inventoryMode:"replace"}),T=C.nodes.find(e=>e.visible&&e.kind===f&&!(0,r.isWorkspaceReadySlotNode)(e)&&"trip_prep_draft"!==e.source&&!e.source.startsWith("trip_prep_")&&!e.bookmarked)??C.nodes.find(e=>e.visible&&e.kind===f&&!(0,r.isWorkspaceReadySlotNode)(e)&&"trip_prep_draft"!==e.source&&!e.source.startsWith("trip_prep_"))??C.nodes.find(e=>!e.bookmarked&&e.visible&&e.kind===f)??C.nodes.find(e=>!e.bookmarked&&e.visible)??null;T&&(0,t.applyWorkspaceTransition)({contextEventId:e.contextEventId,op:"select",nodeIds:[T.id]}),M(e.contextEventId),(0,$.runAutoProjectionAfterPatch)({contextEventId:e.contextEventId,entityIds:T?[T.id]:null});
23{let t=(0,a.readContextWorkspace)(e.contextEventId)?.constraintMemory;t&&(null!=t.keepTopN||null!=t.minRating||null!=t.maxNightlyPriceKrw||null!=t.sortBy)&&((0,j.applyWorkspacePatch)({contextEventId:e.contextEventId,patch:{kind:"filter_entity",filter:{...null!=t.minRating?{minRating:t.minRating}:{},...null!=t.keepTopN?{keepTopN:t.keepTopN}:{},...null!=t.maxNightlyPriceKrw?{maxNightlyPriceKrw:t.maxNightlyPriceKrw}:{},...t.sortBy?{sortBy:t.sortBy}:{}}},utterance:e.utterance,skipAutoProjection:!1}),(0,R.tryEnterCompareDecisionAfterRefine)({contextEventId:e.contextEventId,utterance:e.utterance,keepTopN:t.keepTopN}))}let L=(0,a.readContextWorkspace)(e.contextEventId)??C,E=L.nodes.filter(e=>e.bookmarked).length,D=L.nodes.filter(e=>!e.bookmarked&&e.visible).length,O=D>0?E>0?`${k} ${D}곳 \xb7 고정 ${E}곳 유지 \xb7 작업장에서 확인`:`${k} 후보 ${D}곳 준비했어요 \xb7 작업장에서 확인`:`${k}을 아직 못 찾았어요 \xb7 조건을 짧게 말해 보세요`;if(p.gated&&p.ok){let e="eatery"===f?"eatery":"poi"===f||"amenity"===f?"poi":"lodging",t=(0,P.assertWorkspacePostcondition)({state:L,expect:{kind:"near_scout",anchorId:p.anchor.id,anchorLat:p.anchor.lat,anchorLng:p.anchor.lng,radiusMeters:S.DEFAULT_NEAR_RADIUS_METERS,candidateKind:e,minCandidates:1}});t.ok||(O=`${O} \xb7 ${t.detailKo}`)}if(D>0){(0,c.appendWorkspaceSyncedAssistantTurn)({contextEventId:e.contextEventId,state:L,textKo:O});let t=(0,b.offerSoftNextWorkAfterAct)({contextEventId:e.contextEventId,lastAct:"search",lastUtterance:e.utterance,autoRun:d.allowSoftNextAuto,delayMs:720});t.continued&&t.replyKo&&(O=`${O}
24${t.replyKo}`)}return{handled:!0,replyKo:O,committed:!1,openedForReview:D>0}}catch{return{handled:!0,replyKo:"지금은 다시 못 찾았어요 · 조건을 짧게 말해 보세요",committed:!1,openedForReview:!1}}}async function O(i){let r=i.contextEventId.trim(),s=i.utterance.trim();if(!r||!s)return{handled:!1,replyKo:null,committed:!1};let u=(0,w.tryApplyNetworkAbsorbWorkspaceTurn)({utterance:s,contextEventId:r});if(u?.handled)return{handled:!0,replyKo:u.replyKo,committed:!1,softChips:u.softChips};if((0,v.tryApplyCapabilityUtterance)({contextEventId:r,utterance:s}))return{handled:!0,replyKo:"작업 도구를 바꿨어요",committed:!1};let g=(0,l.tryOpenWorkspaceFromUtterance)({contextEventId:r,utterance:s});if(g?.ok)return{handled:!0,replyKo:g.replyKo,committed:!1};if((0,f.isContinueWorkUtterance)(s)){let e=(0,f.resolveNextWorkAction)({contextEventId:r,utterance:s});if(!e.enqueueUtterance||!(0,a.hasProvisionalContextWorkspace)(r))return{handled:!0,replyKo:e.replyKo,committed:!1};let t=e.enqueueUtterance.trim();if((0,f.isContinueWorkUtterance)(t)||"목적지로 이어서"===t||"4박5일로"===t||/^목적지로/u.test(t)){let e=(0,f.resolveNextWorkAction)({contextEventId:r}),n=e.enqueueUtterance?.trim()??"";if(!n||(0,f.isContinueWorkUtterance)(n)||n===t)return{handled:!0,replyKo:e.replyKo||"목적·날짜는 반영했어요. 숙소·맛집·동선 중 말해 주세요.",committed:!1};let a=await O({utterance:n,contextEventId:r}),i=a.replyKo?.trim();return{handled:!0,replyKo:i?`${e.replyKo} ${i}`.trim():e.replyKo,committed:a.committed}}let n=await O({utterance:t,contextEventId:r}),i=n.replyKo?.trim();return{handled:!0,replyKo:i?`${e.replyKo} ${i}`.trim():e.replyKo,committed:n.committed}}if(!(0,a.hasProvisionalContextWorkspace)(r))return{handled:!1,replyKo:null,committed:!1};if((0,K.isCompoundActionUtterance)(s)){let e=await (0,I.tryRunContextNlActionAsync)({utterance:s,contextEventId:r});if(e?.ok){let t="assistantReplyKo"in e&&"string"==typeof e.assistantReplyKo?e.assistantReplyKo:"summaryKo"in e&&"string"==typeof e.summaryKo?e.summaryKo:"이렇게 진행할게요";return M(r),{handled:!0,replyKo:t,committed:!1,openedForReview:!0}}}{let t=(0,_.parseWorkspaceRealityPatch)(s);if(t){let n=(0,x.applyWorkspaceRealityPatch)({contextEventId:r,utterance:s,patch:t});if(n.handled){if(M(r),n.needsRescout&&n.scoutQuery){let i=await W({contextEventId:r,utterance:n.scoutQuery,mode:"replace"}),l=(0,a.readContextWorkspace)(r),c=l?.nodes.filter(e=>e.visible&&"lodging"===e.kind).length??0,u="capsule"===t.stayType||"hostel"===t.stayType||"guesthouse"===t.stayType||"ryokan"===t.stayType||/캡슐|capsule|호스텔|게스트|ë£
24Œì¹¸/iu.test(s);if(0===c&&u){let{runPlaceSearch:t}=await e.A(661e3),i=l?.nodes.find(e=>"reality_anchor"===e.source||e.tags.includes("reality_anchor")||"string"==typeof e.placeId&&e.placeId.includes("metro"))??l?.nodes.find(e=>"poi"===e.kind||"amenity"===e.kind),u=t({query:n.scoutQuery||s,domain:"lodging",allowSeedFallback:!1,anchorLat:i?.lat??34.6654,anchorLng:i?.lng??135.5019,limit:6});u.length>0&&((0,o.openMapContextWorkspace)({contextEventId:r,domain:"lodging",query:n.scoutQuery||s,summaryKo:`숙소 후보 ${u.length}ê³³ \xb7 작업장에서 확인`,hits:u,source:"scout_patch",inventoryMode:"replace"}),l=(0,a.readContextWorkspace)(r),c=l?.nodes.filter(e=>e.visible&&"lodging"===e.kind).length??0)}if(l&&c>0){let e=l.nodes.map(e=>"poi"!==e.kind&&"amenity"!==e.kind?e:"reality_anchor"===e.source||e.tags.includes("reality_anchor")||/부$|현$|도$|시$|pref|大阪|오사카부/u.test(e.title)?{...e,visible:!1,selected:!1}:e);(0,a.writeContextWorkspace)({...l,nodes:e,realityPlan:n.plan??l.realityPlan,lastChangeKo:c>0?`숙소 후보 ${c}ê³³ \xb7 작업장에서 확인`:n.replyKo,updatedAtIso:new Date().toISOString()}),l=(0,a.readContextWorkspace)(r)}else l&&n.plan&&(0,a.writeContextWorkspace)({...l,realityPlan:n.plan,lastChangeKo:n.replyKo});return{handled:!0,replyKo:c>0?`숙소 후보 ${c}ê³³ \xb7 작업장에서 확인`:n.replyKo,committed:i.committed,openedForReview:c>0}}let i=(0,a.readContextWorkspace)(r);return i&&(0,c.appendWorkspaceSyncedAssistantTurn)({contextEventId:r,state:i,textKo:n.replyKo??"작업을 수정했어요"}),{handled:!0,replyKo:n.replyKo,committed:!1,openedForReview:!0}}}}let h=(0,t.parseWorkspaceUtteranceTransition)(s);if(h?.op==="find_similar")return W({contextEventId:r,utterance:s,mode:"add"});let y=function(e){let i=e.contextEventId.trim(),o=e.utterance.trim();if(!i||!o)return{handled:!1,replyKo:null,committed:!1};let r=(0,w.tryApplyNetworkAbsorbWorkspaceTurn)({utterance:o,contextEventId:i});if(r?.handled)return{handled:!0,replyKo:r.replyKo,committed:!1,softChips:r.softChips};if(!(0,a.hasProvisionalContextWorkspace)(i))return{handled:!1,replyKo:null,committed:!1};if((0,v.tryApplyCapabilityUtterance)({contextEventId:i,utterance:o}))return{handled:!0,replyKo:"작업 도구를 바꿨어요",committed:!1};let l=function(e){let t=e.trim();for(let[e,n]of Object.entries({첫:1,일:1,한:1,두:2,둘:2,세:3,셋:3,네:4,넷:4,다섯:5}))if(RegExp(`${e}\\s*(번|번째|째)`,"i").test(t))return n;let n=t.match(/(?:^|\s)(\d+)\s*(?:번|번째|째)?(?:\s|$|로|만|ê³ |을|를)/);if(n?.[1]&&/선택|골라|고르|보여|자세히|이거|저거|열어|픽|pick|select/i.test(t))return Number(n[1]);if(/^(?:그냥\s*)?(\d+)\s*번(?:만|으로)?$/i.test(t)){let e=t.match(/(\d+)/);return e?.[1]?Number(e[1]):null}return null}(o);if(null!=l&&l>=1){let e=(0,a.readContextWorkspace)(i),n=(e?.nodes.filter(e=>e.visible)??[])[l-1];if(n){let e=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"select",nodeIds:[n.id]});return{handled:!0,replyKo:e?.lastChangeKo??`${l}번을 골랐어요`,committed:!1}}}let s=function(e){let t=e.match(/(?:상위|앞에서|탑|top)\s*(\d+)/i);if(t?.[1])return Number(t[1]);let n=e.match(/(\d+)\s*곳만|(\d+)\s*개만/);return n?Number(n[1]??n[2]):null}(o);if(null!=s&&s>=1){let e=(0,a.readContextWorkspace)(i),n=e?.nodes.filter(e=>e.visible)??[],o=new Set(n.slice(0,s).map(e=>e.id)),r=n.filter(e=>!o.has(e.id)&&!e.bookmarked).map(e=>e.id);return r.length>0&&(0,t.applyWorkspaceTransition)({contextEventId:i,op:"remove",nodeIds:r}),{handled:!0,replyKo:`상위 ${s}곳만 남겼어요`,committed:!1}}let c=o.match(/(.+?)(?:\s*)(ë¹¼|삭제|지워|제외|없애)/);if(c?.[1]&&c[1].trim().length>=2){let e=function(e,t){let n=(0,a.readContextWorkspace)(e);if(!n)return[];let i=t.trim().toLowerCase();return i?n.nodes.filter(e=>e.visible&&e.title.toLowerCase().includes(i)).map(e=>e.id):[]}(i,c[1]);if(e.length>0){let n=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"remove",nodeIds:e});return{handled:!0,replyKo:n?.lastChangeKo??"ë¹¼ 두었어요",committed:!1}}}if(/예약\s*준비|호텔.{0,16}준비해|숙소.{0,16}준비해|reservation\s*prepare/iu.test(o)){let e=(0,a.readContextWorksp
24ace)(i),t=e?.nodes.find(e=>e.selected&&"lodging"===e.kind)??e?.nodes.find(e=>"lodging"===e.kind&&e.visible)??null,n=t?.placeId??t?.id??"";if(n){let e=(0,m.runRealityPrepare)({entityId:n,utterance:o,workspaceId:i,action:"reservation_prepare",titleHint:t?.title??null,priceLabelKo:t?.amountLabel??null});if(e.ok)return{handled:!0,replyKo:e.summaryKo,committed:!1};if(e.forbidden)return{handled:!0,replyKo:e.reasonKo,committed:!1}}}if(/호텔\s*바꿔|숙소\s*바꿔|다른\s*호텔|호텔\s*변경/iu.test(o)){let e=(0,p.runWorkspaceRealityAgent)({workspaceId:i,utterance:o});if(e.ok)return{handled:!0,replyKo:e.summaryKo,committed:!1};if(e.realityCommitAttempted)return{handled:!0,replyKo:e.reasonKo,committed:!1}}let u=(0,d.runWorkspaceCommandRuntime)({workspaceId:i,rawText:o});if(u.ok)return"proposed"===u.mode&&u.proposal?{handled:!0,replyKo:`미리보기 \xb7 ${u.proposal.previewKo}
25[적용]하면 Workspace에만 반영돼요 \xb7 Reality 원본 유지`,committed:!1}:{handled:!0,replyKo:u.summaryKo,committed:!1};if(u.forbiddenGlobeMutation)return{handled:!0,replyKo:u.reasonKo,committed:!1};let g=(0,t.parseWorkspaceUtteranceTransition)(o);return g?function(e){let{contextEventId:i,parsed:o}=e;if("commit"===o.op){let e=(0,n.commitContextWorkspaceToGlobe)({contextEventId:i});return{handled:!0,replyKo:e.state?.lastChangeKo??"지구에 남겼어요",committed:e.ok}}if("find_similar"===o.op){let n=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"find_similar",addCandidates:e.addCandidates??[]});return{handled:!0,replyKo:n?.lastChangeKo??"비슷한 곳을 더 넣었어요",committed:!1}}if("replace_candidates"===o.op){let n=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"replace_candidates",replaceCandidates:e.replaceCandidates??[]});return{handled:!0,replyKo:n?.lastChangeKo??"후보를 바꿨어요",committed:!1}}if("remove"===o.op){let e=(0,a.readContextWorkspace)(i),n=e?.nodes.filter(e=>e.selected).map(e=>e.id)??[];if(0===n.length){let t=e?.nodes.filter(e=>e.visible)??[];t.length>0&&(n=[t[t.length-1].id])}let o=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"remove",nodeIds:n});return{handled:!0,replyKo:o?.lastChangeKo??"빼 두었어요",committed:!1}}if("bookmark"===o.op){let e=(0,a.readContextWorkspace)(i),n=o.pin??!0,r=e?.nodes.filter(e=>e.selected).map(e=>e.id)??[];if(0===r.length){let t=e?.selectedIds[0];if(t)r=[t];else{let t=e?.nodes.filter(e=>e.visible)??[];t[0]&&(r=[t[0].id])}}if(0===r.length)return{handled:!0,replyKo:"고정할 곳을 먼저 골라 주세요",committed:!1};let l=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"bookmark",nodeIds:r,pin:n});return{handled:!0,replyKo:l?.lastChangeKo??(n?"고정했어요":"고정 해제했어요"),committed:!1}}if("compare"===o.op){let e=(0,a.readContextWorkspace)(i),n=(e?.selectedIds.length??0)>=2?e.selectedIds:e?.nodes.filter(e=>e.visible).slice(0,2).map(e=>e.id)??[],o=(0,t.applyWorkspaceTransition)({contextEventId:i,op:"compare",nodeIds:n});return{handled:!0,replyKo:o?.lastChangeKo??"비교해 봤어요",committed:!1}}let r=(0,t.applyWorkspaceTransition)({contextEventId:i,op:o.op,filter:o.filter,sortBy:o.sortBy,simulateScenarioKo:o.simulateScenarioKo});return"filter"===o.op&&o.sortBy&&(0,t.applyWorkspaceTransition)({contextEventId:i,op:"sort",sortBy:o.sortBy}),{handled:!0,replyKo:r?.lastChangeKo??"작업장을 바꿨어요",committed:!1}}({contextEventId:i,parsed:g}):{handled:!1,replyKo:null,committed:!1}}(i);return y.handled?y:/찾|추천|보여|다시|다른|더\s*(싸|좋|맛|가성)|근처|주변|바꿔|교체|refresh|search|find/i.test(s)?W({contextEventId:r,utterance:s,mode:(0,D.isAdditiveScoutUtterance)(s)?"add":"replace"}):{handled:!1,replyKo:null,committed:!1}}let N=O}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.