@vcp-dev/contracts 0.4.1 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{z as e}from"zod";var De=["queued","preparing_source","building","artifact_ready","deploying","released","lock_failed","source_prepare_failed","build_failed","artifact_fetch_failed","artifact_validation_failed","deploy_failed","cleanup_failed"];function qa(t){let i=t.VCP_REDIS_URL??t.REDIS_URL;if(i){let r=new URL(i);return{url:i,host:r.hostname,port:r.port?Number(r.port):6379,password:r.password?decodeURIComponent(r.password):void 0}}return{host:t.VCP_REDIS_HOST??"127.0.0.1",port:Vt(t.VCP_REDIS_PORT,56379)}}function Vt(t,i){if(!t)return i;let r=Number(t);return Number.isInteger(r)&&r>0?r:i}import{z as o}from"zod";var ie=o.enum(["text","url","document","image"]),ae=o.enum(["pending","ready","failed"]),zt=o.enum(["pending","ready","failed"]),$t=o.enum(["product","price","contact","copy","audience","other"]),G=o.object({fact:o.string().min(1).max(300),kind:$t,source_id:o.string().min(1),quote:o.string().min(1).max(500),trust:o.enum(["verbatim","ocr"]).default("verbatim")}),Yt=o.object({page_type:o.string().min(1).max(40),sections:o.array(o.string().min(1).max(40)).max(12)}),B=o.object({source_id:o.string().min(1),nav_structure:o.array(o.string().min(1).max(30)).max(12),page_patterns:o.array(Yt).max(10),tone:o.array(o.string().min(1).max(20)).max(8),screenshot_ref:o.string().optional()}),Xt=o.object({source_id:o.string().min(1),type:ie,status:ae,title:o.string().max(120).optional(),original_ref:o.string().min(1),source_metadata:o.record(o.string(),o.unknown()),error_code:o.string().optional()}),K=o.object({topic:o.string().min(1).max(80),variants:o.array(o.object({value:o.string().min(1).max(300),source_id:o.string().min(1)})).min(2)}),Qt=o.object({type:o.literal("text"),content:o.string().min(20).max(1e4),title:o.string().min(1).max(120).optional()}).strict(),Zt=o.object({type:o.literal("url"),url:o.string().url().max(2048),rights_ack:o.boolean().optional(),title:o.string().min(1).max(120).optional()}).strict(),Ka=o.discriminatedUnion("type",[Qt,Zt]),Ha=[".docx",".html",".md",".txt"],Va=["application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/html","text/markdown","text/x-markdown","text/plain","application/octet-stream"],za=10*1024*1024,$a=2,Ya=o.object({consent_cross_border:o.union([o.literal(!0),o.literal("true")]),consent_text_version:o.string().min(1).max(120),title:o.string().min(1).max(120).optional()}).strict();function Xa(t){return t===!0||t==="true"}var Qa=[".png",".jpg",".jpeg",".webp"],Za=["image/png","image/jpeg","image/webp","application/octet-stream"],Ja=8*1024*1024,er=10,Jt=o.enum(["asset","reference"]),tr=o.object({image_role:Jt,title:o.string().min(1).max(120).optional()}).strict(),nr=o.object({version:o.literal(1),site_id:o.string().min(1),tenant_id:o.string().min(1),user_prompt:o.string(),status:zt,sources:o.array(Xt).max(16),facts:o.array(G).max(120),reference:B.optional(),conflicts:o.array(K).max(20)}).superRefine((t,i)=>{let r=new Map(t.sources.map(c=>[c.source_id,c]));for(let[c,m]of t.facts.entries()){let k=r.get(m.source_id);(!k||k.type==="url")&&i.addIssue({code:"custom",path:["facts",c,"source_id"],message:"facts must reference a text/document/image source (never url)"})}if(t.reference){let c=r.get(t.reference.source_id),m=c?.type==="image"&&c.source_metadata.image_role==="reference";(!c||c.type!=="url"&&!m)&&i.addIssue({code:"custom",path:["reference","source_id"],message:"reference must point at a url source or reference image source"})}});import{z as s}from"zod";var en=["design.md","DESIGN.md"],Le=["components/site","src/components/site","lib/generated","src/lib/generated","public"],tn=["app/globals.css","src/app/globals.css"],nn=[".cjs",".css",".cts",".html",".js",".json",".jsx",".md",".mdx",".mjs",".mts",".ts",".tsx",".txt",".yaml",".yml"],an=new Set(nn),re="source-delete",Me=s.literal(re),b=s.string().min(1).refine(Fe,"Invalid site edit source path"),rn=s.string().min(1).refine(gn,"Invalid site edit source directory path"),rr=s.enum(["text","binary"]),H=s.object({path:b,language:s.string().min(1).nullable(),sizeBytes:s.number().int().nonnegative(),contentHash:s.string().min(1).optional()}),on=s.discriminatedUnion("kind",[H.extend({kind:s.literal("text"),language:s.string().min(1),readonly:s.boolean().default(!1)}),H.extend({kind:s.literal("binary"),language:s.null(),mimeType:s.string().min(1).optional(),readonly:s.literal(!0)})]),Ue=s.lazy(()=>s.discriminatedUnion("kind",[s.object({kind:s.literal("directory"),name:s.string().min(1),path:rn,children:s.array(Ue)}),s.object({kind:s.literal("file"),name:s.string().min(1),path:b,file:on}).superRefine((t,i)=>{t.path!==t.file.path&&i.addIssue({code:"custom",path:["file","path"],message:"file.path must match node path"})})])),sn=s.enum(["max-files","max-depth","max-total-bytes"]),cn=s.object({reasons:s.array(sn).min(1),maxFiles:s.number().int().positive(),maxDepth:s.number().int().positive(),maxTotalBytes:s.number().int().positive()}),or=s.object({nodes:s.array(Ue),defaultPath:b.optional(),totalFiles:s.number().int().nonnegative(),truncated:cn.optional()}),mn=H.extend({kind:s.literal("text"),language:s.string().min(1),readonly:s.boolean().default(!1),content:s.string()}),ln=s.enum(["too-large","unsupported-mime","bytes-unavailable"]),pn=H.extend({kind:s.literal("binary"),language:s.null(),readonly:s.literal(!0),mimeType:s.string().min(1),contentBase64:s.string().min(1).optional(),previewUnavailableReason:ln.optional()}),sr=s.discriminatedUnion("kind",[mn,pn]),dn=s.object({key:s.string().min(1),routeId:s.string().min(1).optional()}),un=s.object({startLine:s.number().int().positive(),startColumn:s.number().int().nonnegative(),endLine:s.number().int().positive(),endColumn:s.number().int().nonnegative()}),cr=dn.extend({sourceFile:b,componentName:s.string().min(1),openingElementRange:un,structuralPath:s.string().min(1),textPreview:s.string().min(1).optional()});function Fe(t){return!Be(t)||Ge(t)?!1:ce(t)||qe(t)||We(t)||Le.some(i=>t===i||t.startsWith(`${i}/`))}function oe(t){return ce(t)||an.has(hn(t))}function gn(t){return!Be(t)||Ge(t)?!1:t==="app"||t.startsWith("app/")||t==="src"||t==="src/app"||t.startsWith("src/app/")||Le.some(i=>t===i||t.startsWith(`${i}/`)||i.startsWith(`${t}/`))}function se(t){return Fe(t)?ce(t)?"design-document":We(t)?"route-entry":qe(t)?"app-global-style":t.toLowerCase()==="lib/generated/media-assets.ts"||t.toLowerCase()==="src/lib/generated/media-assets.ts"?"generated-media-manifest":null:null}function mr(t){return se(t)!==null}function We(t){return/^(?:src\/)?app\/(?:.*\/)?page\.[cm]?[jt]sx?$/.test(t.toLowerCase())}function qe(t){return tn.some(i=>i.toLowerCase()===t.toLowerCase())}function hn(t){let i=t.split("/").at(-1)??t,r=i.lastIndexOf(".");return r>0?i.slice(r).toLowerCase():""}function ce(t){return!t.includes("/")&&en.some(i=>i.toLowerCase()===t.toLowerCase())}function Ge(t){let i=t.toLowerCase(),r=i.split("/"),m=(r.at(-1)??i).replace(/\.[^.]+$/,"");return/^(?:src\/)?app\/api(?:\/|$)/.test(i)||/^(?:src\/)?app\/(?:.*\/)?route\.[cm]?[jt]sx?$/.test(i)||/^(?:src\/)?app\/(?:.*\/)?(?:action|actions)\.[cm]?[jt]sx?$/.test(i)||/(^|\/)[^/]+\.server\.[cm]?[jt]sx?$/.test(i)||i==="lib/server"||i.startsWith("lib/server")||i==="src/lib/server"||i.startsWith("src/lib/server")||i==="lib/db"||i.startsWith("lib/db")||i==="src/lib/db"||i.startsWith("src/lib/db")||i==="lib/cms"||i.startsWith("lib/cms/")||i==="src/lib/cms"||i.startsWith("src/lib/cms/")?!0:m==="server"||m==="db"||m==="database"||m==="auth"||m==="secret"||m==="secrets"||m==="token"||m==="tokens"||m==="credential"||m==="credentials"||r.includes("server")||r.includes("secrets")}function Be(t){return!t||t.startsWith("/")||t.includes("\\")?!1:t.split("/").every(i=>!(i.length===0||i==="."||i===".."||i.startsWith(".")||i==="package.json"||i==="node_modules"||i==="recipes"||i.startsWith(".env")))}import{z as _n}from"zod";import{DEFAULT_SITE_LOCALE as hr,ISO_639_3_TO_SITE_LOCALE as _r,SITE_LOCALE_CODES as Sr,SUPPORTED_SITE_LOCALES as yr,resolveSiteLocaleFromIso6393 as br}from"@vcp-dev/i18n/site-locale";import{SITE_LOCALE_CODES as Sn}from"@vcp-dev/i18n/site-locale";var D=_n.enum(Sn);function yn(t){return t.replace(/[^\p{L}\p{N}-]+/gu,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function Ke(t){let r=(typeof t=="string"?t.trim():"").replace(/^\/+|\/+$/g,"");if(r==="")return"/";let c=r.toLowerCase();if(c==="index"||c==="home")return"/";let m=r.split("/").map(yn).filter(k=>k.length>0);return m.length===0?"/":`/${m.join("/")}`}function bn(t){let i=Ke(t);return i==="/"?"app/page.tsx":`app/${i.slice(1)}/page.tsx`}import{z as S}from"zod";var z=S.enum(["component-boundary","repeat-region","conditional-region","fragment-region","opaque-region"]),fn=S.enum(["direct","proxy","upstream","readonly","unsupported"]),xn=S.enum(["component-boundary","repeat-region","conditional-region","opaque-region","void-element","read-only","cross-file-required","import-required"]),V=S.object({mode:fn,reasonCode:S.string().min(1).optional()}),En=S.object({kind:xn,message:S.string().min(1)}),$=S.object({key:S.string().min(1),canUpdateText:S.boolean(),canInsertChild:S.boolean(),canMove:S.boolean(),canRemove:S.boolean(),editModes:S.object({updateText:V.optional(),insertChild:V.optional(),move:V.optional(),remove:V.optional()}).optional(),constraints:S.array(En)});import{z as l}from"zod";import{z as f}from"zod";var Rn=f.object({code:f.string().min(1),message:f.string().min(1)}),vr=f.object({code:f.string().min(1),message:f.string().min(1)});function me(t){return f.object({ok:f.literal(!0),data:t})}function vn(t){let i={ok:f.literal(!1),error:Rn.extend({code:t.codeSchema})};return t.currentSchema&&(i.current=t.currentSchema.optional()),t.diagnosticsSchema&&(i.diagnostics=f.array(t.diagnosticsSchema).optional()),t.dataSchema&&(i.data=t.dataSchema.optional()),f.object(i)}function He(t){return f.discriminatedUnion("ok",[me(t.dataSchema),vn({codeSchema:t.codeSchema,currentSchema:t.currentSchema,diagnosticsSchema:t.diagnosticsSchema,dataSchema:t.failureDataSchema})])}var v=l.object({start:l.number().int().nonnegative(),end:l.number().int().nonnegative(),startLine:l.number().int().positive().optional(),startColumn:l.number().int().nonnegative().optional(),endLine:l.number().int().positive().optional(),endColumn:l.number().int().nonnegative().optional()}).superRefine((t,i)=>{t.end<t.start&&i.addIssue({code:"custom",path:["end"],message:"end must be greater than or equal to start"})}),In=l.object({code:l.enum(["missing-class-name","unsupported-attribute-name","source-locator-warning","invalid-new-attr","version-conflict","write-failed"]),message:l.string().min(1)}),Ve=l.object({path:l.string().min(1),content:l.string(),hash:l.string().min(1).optional()}),Tn=l.object({revision:l.string().min(1),entryCss:Ve,stylesheets:l.array(Ve).default([]),computedStyle:l.record(l.string(),l.string()).optional()}),ze=l.object({key:l.string().min(1),routeId:l.string().min(1),filePath:l.string().min(1),componentName:l.string().min(1),sourceKind:l.enum(["missing","stringLiteral","expression"]),attrRaw:l.string().min(1).nullable(),valueRaw:l.string().min(1).nullable(),attrRange:v.nullable(),valueRange:v.nullable(),openingElementRange:v,version:l.object({documentVersion:l.number().int().nonnegative(),contentHash:l.string().min(1),parserVersion:l.string().min(1)}),diagnostics:l.array(In),styleContext:Tn.optional()}).superRefine((t,i)=>{if(t.sourceKind==="missing"){(t.attrRaw!==null||t.valueRaw!==null||t.attrRange!==null||t.valueRange!==null)&&i.addIssue({code:"custom",message:"missing className source must not include attr raw or range"});return}(t.attrRaw===null||t.valueRaw===null||t.attrRange===null||t.valueRange===null)&&i.addIssue({code:"custom",message:"present className source must include attr raw and ranges"})}),Ar=ze,jr=me(ze),le=l.object({source:l.enum(["style-panel","class-source-editor"]),operation:l.enum(["replace-static-classname","replace-expression","create-attribute","remove-attribute"])});import{z as kn}from"zod";var pe=kn.enum(["src","alt","poster","href","width","height"]);import{z as p}from"zod";import{z as a}from"zod";var L=a.enum(["update-text","update-array-item","remove-node","insert-child","move-node","set-class-name-source","set-props","apply-style-draft","source-edit"]),$e=a.lazy(()=>a.union([a.string(),a.number(),a.boolean(),a.null(),a.array($e),a.record(a.string(),$e)])),Xe=a.discriminatedUnion("kind",[a.object({kind:a.literal("node"),key:a.string().min(1)}),a.object({kind:a.literal("route"),routeId:a.string().min(1)}),a.object({kind:a.literal("source-file"),path:b}),a.object({kind:a.literal("source-batch"),paths:a.array(b).min(1)}).superRefine((t,i)=>{let r=new Set;for(let[c,m]of t.paths.entries())r.has(m)&&i.addIssue({code:"custom",path:["paths",c],message:`Duplicate source target path: ${m}`}),r.add(m)})]),Qe=a.enum(["display","position","top","right","bottom","left","zIndex","flexDirection","flexWrap","flexGrow","flexShrink","flexBasis","order","gridTemplateColumns","gridTemplateRows","columns","gridColumn","gridRow","gap","gapX","gapY","spaceX","spaceY","alignItems","justifyContent","marginTop","marginRight","marginBottom","marginLeft","paddingTop","paddingRight","paddingBottom","paddingLeft","width","height","minWidth","minHeight","maxWidth","maxHeight","overflow","fontFamily","fontSize","fontWeight","lineHeight","letterSpacing","textAlign","textTransform","textDecoration","textOverflow","textIndent","writingMode","whiteSpace","wordBreak","lineClamp","fontVariantNumeric","screenReaderOnly","color","backgroundColor","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","backgroundAttachment","backgroundClip","backgroundOrigin","borderStyle","borderWidth","borderRadius","borderColor","objectFit","objectPosition","aspectRatio","opacity","boxShadow","transform","transformOrigin","transitionProperty","transitionDuration","transitionTimingFunction","animation","pointerEvents","cursor","userSelect","fontStyle","textUnderlineOffset","scrollMarginTop","alignSelf","flex","outlineStyle","resize","ringWidth","ringColor","backdropFilter","overscrollBehavior","divideWidth","divideColor"]),Ze=a.enum(["hover","active","focus","disabled"]),Je=a.enum(["sm","md","lg","xl","2xl"]),Ye=a.union([a.object({relation:a.enum(["before","after"]),anchorKey:a.string().min(1)}),a.object({relation:a.enum(["prepend","append"]),parentKey:a.string().min(1)})]),An=a.discriminatedUnion("kind",[a.object({kind:a.literal("native-tag"),tag:a.string().min(1),text:a.string().optional()}),a.object({kind:a.literal("component-call"),component:a.object({source:a.string().min(1),exportName:a.string().min(1)}),props:a.record(a.string(),a.unknown()).optional()})]),jn=a.discriminatedUnion("kind",[a.object({kind:a.literal("update-text"),segmentIndex:a.number().int().min(0),value:a.string()}),a.object({kind:a.literal("update-array-item"),segmentIndex:a.number().int().min(0),index:a.number().int().min(0),value:a.string()}),a.object({kind:a.literal("remove-node")}),a.object({kind:a.literal("insert-child"),node:An,position:Ye}),a.object({kind:a.literal("move-node"),target:Ye,preserveBindings:a.boolean().optional()}),a.object({kind:a.literal("set-class-name-source"),routeId:a.string().min(1).optional(),filePath:a.string().min(1),expectedVersion:a.object({documentVersion:a.number().int().nonnegative(),contentHash:a.string().min(1)}),oldAttrRaw:a.string().min(1).nullable(),oldAttrRange:v.nullable(),openingElementRange:v,newAttrRaw:a.string().min(1).nullable(),intent:le}),a.object({kind:a.literal("set-props"),props:a.partialRecord(pe,a.string())}),a.object({kind:a.literal("apply-style-draft"),className:a.object({routeId:a.string().min(1).optional(),filePath:a.string().min(1),expectedVersion:a.object({documentVersion:a.number().int().nonnegative(),contentHash:a.string().min(1)}),oldAttrRaw:a.string().min(1).nullable(),oldAttrRange:v.nullable(),openingElementRange:v,newAttrRaw:a.string().min(1).nullable(),intent:le}).optional(),props:a.partialRecord(pe,a.string()).optional()}).superRefine((t,i)=>{!t.className&&!t.props&&i.addIssue({code:"custom",message:"apply-style-draft requires className or props"})}),a.object({kind:a.literal("source-edit"),conflictPolicy:a.enum(["compare-and-swap","overwrite"]),edits:a.array(a.discriminatedUnion("operation",[a.object({operation:a.literal("upsert"),path:b,content:a.string(),baseContentHash:a.string().min(1).nullable().optional()}).strict().superRefine((t,i)=>{oe(t.path)||i.addIssue({code:"custom",path:["path"],message:"source-edit upsert only accepts allowlisted text source files"}),t.content.includes("\0")&&i.addIssue({code:"custom",path:["content"],message:"source-edit content must be valid text"})}),a.object({operation:a.literal("delete"),path:b,capability:Me,confirmDelete:a.literal(!0),confirmPath:b,baseContentHash:a.string().min(1).nullable().optional()}).strict().superRefine((t,i)=>{t.capability!==re&&i.addIssue({code:"custom",path:["capability"],message:"delete requires source-delete capability"}),t.confirmPath!==t.path&&i.addIssue({code:"custom",path:["confirmPath"],message:"delete confirmation path must match edit path"}),oe(t.path)||i.addIssue({code:"custom",path:["path"],message:"source-edit delete only accepts allowlisted text source files"});let r=se(t.path);r&&i.addIssue({code:"custom",path:["path"],message:`Protected source file cannot be deleted: ${t.path} (${r})`})})])).min(1),reason:a.string().min(1).optional()}).strict().superRefine((t,i)=>{let r=new Set;for(let[c,m]of t.edits.entries())r.has(m.path)&&i.addIssue({code:"custom",path:["edits",c,"path"],message:`Duplicate source edit path: ${m.path}`}),r.add(m.path),t.conflictPolicy==="compare-and-swap"&&m.baseContentHash===void 0&&i.addIssue({code:"custom",path:["edits",c,"baseContentHash"],message:"source-edit compare-and-swap requires baseContentHash for every edit"})})]),et=a.enum(["NODE_NOT_FOUND","ROUTE_NOT_FOUND","CAPABILITY_REJECTED","CONSTRAINT_VIOLATED","INVALID_PARAMS","PLAN_FAILED","VERSION_STALE","AST_PARSE_ERROR","UNSUPPORTED_OPERATION","LOCATOR_FAILED","INVALID_TARGET","WRITE_IO_ERROR","CONCURRENT_MODIFIED","ROLLBACK_FAILED","INTERNAL_ERROR"]),tt=a.object({code:et,message:a.string().min(1),details:a.record(a.string(),a.unknown()).optional()}),nt=a.object({key:a.string().min(1),instanceIndex:a.number().int().nonnegative().optional(),instanceCount:a.number().int().positive().optional()}),Ur=a.object({id:a.string().min(1),siteId:a.string().min(1),baseSnapshotId:a.string().min(1),routeId:a.string().min(1).optional(),kind:L,target:Xe,documentVersion:a.number().int().nonnegative(),selectionRef:nt.optional(),params:jn}).superRefine((t,i)=>{if(t.kind!==t.params.kind&&i.addIssue({code:"custom",path:["params","kind"],message:"params.kind must match operation kind"}),t.kind==="source-edit"){if(t.target.kind!=="source-file"&&t.target.kind!=="source-batch")i.addIssue({code:"custom",path:["target","kind"],message:"source-edit requires a source-file or source-batch target"});else if(t.params.kind==="source-edit"){let r=t.params.edits.map(m=>m.path),c=t.target.kind==="source-file"?[t.target.path]:t.target.paths;Cn(r,c)||i.addIssue({code:"custom",path:["target"],message:"source-edit target paths must match edit paths"})}}else(t.target.kind==="source-file"||t.target.kind==="source-batch")&&i.addIssue({code:"custom",path:["target","kind"],message:"source targets are only valid for source-edit"})}),Y=a.object({requestId:a.string().min(1),kind:L,target:Xe,resultVersion:a.number().int().nonnegative(),affectedFiles:a.array(a.string().min(1)).optional(),selectionRef:nt.optional()}),Fr=He({dataSchema:Y,codeSchema:et,failureDataSchema:Y.partial()});function Cn(t,i){return t.length===i.length&&t.every((r,c)=>r===i[c])}var Kr=p.discriminatedUnion("type",[p.object({type:p.literal("site-edit.document.changed"),siteId:p.string().min(1),snapshotId:p.string().min(1),routeId:p.string().min(1),version:p.number().int().nonnegative(),at:p.string().min(1)}),p.object({type:p.literal("site-edit.operation.planned"),siteId:p.string().min(1),operationId:p.string().min(1),baseSnapshotId:p.string().min(1),changedFiles:p.array(p.string().min(1)),at:p.string().min(1)}),p.object({type:p.literal("site-edit.operation.completed"),siteId:p.string().min(1),result:Y,at:p.string().min(1)}),p.object({type:p.literal("site-edit.operation.failed"),siteId:p.string().min(1),requestId:p.string().min(1),error:tt,at:p.string().min(1)}),p.object({type:p.literal("site-edit.capability.changed"),siteId:p.string().min(1),routeId:p.string().min(1),keys:p.array(p.string().min(1)),at:p.string().min(1)})]);import{z as M}from"zod";var X="::",zr=M.object({file:M.string().min(1),component:M.string().min(1),structuralPath:M.string().min(1),key:M.string().min(1)}).superRefine((t,i)=>{let r=Pn(t.file,t.component,t.structuralPath);t.key!==r&&i.addIssue({code:"custom",path:["key"],message:"key must match file::component::structuralPath"})});function Pn(t,i,r){return`${t}${X}${i}${X}${r}`}function $r(t){let[i,r,...c]=t.split(X);return!i||!r||c.length===0?null:{file:i,component:r,structuralPath:c.join(X)}}import{z as _}from"zod";var wn=_.string().min(1).refine(t=>!t.startsWith("/")&&!t.includes(".."),{message:"Patch paths must be safe relative POSIX paths."}),On=_.string().regex(/^sha256:[a-f0-9]{64}$/),Nn=_.object({path:wn,operation:_.enum(["create","update","delete"]),expectedHash:On.optional(),fullContent:_.string().optional()}).superRefine((t,i)=>{t.operation==="delete"&&t.fullContent!==void 0&&i.addIssue({code:"custom",path:["fullContent"],message:"delete patches must not include fullContent"}),t.operation!=="delete"&&t.fullContent===void 0&&i.addIssue({code:"custom",path:["fullContent"],message:"create/update patches must include fullContent"})}),Qr=_.object({siteId:_.string().min(1),baseSnapshotId:_.string().min(1),operationId:_.string().min(1),reason:_.string().min(1),patches:_.array(Nn).min(1),changedRouteIds:_.array(_.string().min(1)),diagnostics:_.array(_.object({code:_.string().min(1),message:_.string().min(1),path:_.string().min(1).optional()})).default([])}).superRefine((t,i)=>{let r=new Set;for(let[c,m]of t.patches.entries())r.has(m.path)&&i.addIssue({code:"custom",path:["patches",c,"path"],message:`Duplicate patch path: ${m.path}`}),r.add(m.path)});var de="::repeat-item#";function Dn(t,i){return`${t}${de}${i}`}function Jr(t,i){return i.reduce((r,c)=>Dn(r,c),t)}function Ln(t){if(typeof t!="string"||t.length===0)return null;let i=[],r=t;for(;;){let c=r.lastIndexOf(de);if(c<0)break;let m=Number(r.slice(c+de.length));if(!Number.isInteger(m)||m<0)return null;i.unshift({repeatIndex:m}),r=r.slice(0,c)}return!r||i.length===0?null:{baseKey:r,parts:i}}function eo(t){return Ln(t)?.baseKey??t??null}import{z as n}from"zod";var Mn=n.object({canUpdateText:n.boolean(),canInsertChild:n.boolean(),canMove:n.boolean(),canRemove:n.boolean()}),Un=n.object({key:n.string().min(1),tag:n.string().min(1),label:n.string().min(1),parentKey:n.string().min(1).nullable(),childKeys:n.array(n.string().min(1)),operationSummary:Mn}),mo=n.object({siteId:n.string().min(1),snapshotId:n.string().min(1),routeId:n.string().min(1),version:n.number().int().nonnegative(),rootKeys:n.array(n.string().min(1)),entries:n.array(Un)}),ue=n.enum(["api-field","cms-field","i18n-message","config-entry"]),Fn=n.object({kind:n.enum(["literal","binding","imported-binding","repeat-template"]),file:n.string().min(1),expression:n.string().min(1),bindingName:n.string().min(1).optional(),path:n.array(n.union([n.string(),n.number()])).optional()}),it=n.object({index:n.number().int().min(0),value:n.string(),editable:n.boolean(),source:Fn.nullable()}),C=n.object({key:n.string().min(1),label:n.string().min(1),tag:n.string().min(1)}),lo=n.object({key:n.string().min(1),canUpdateText:n.boolean(),canInsertChild:n.boolean(),canMove:n.boolean(),canRemove:n.boolean(),boundaryKind:z.nullable(),isOpaque:n.boolean()}),at=n.object({kind:n.enum(["jsx-node","component-proxy","value-binding","route-export"]),file:n.string().min(1),componentName:n.string().min(1),isProxy:n.boolean()}),rt=n.object({kind:n.enum(["jsx-node","value-path","route-export","external-entry"]),file:n.string().min(1).optional(),isProxy:n.boolean(),displayPath:n.string().min(1).optional(),sourceType:ue.optional(),sourceId:n.string().min(1).optional()}),ot=n.object({kind:n.union([n.enum(["jsx-literal","component-prop","binding","imported-binding","object-field","array-item","repeat-template","conditional-branch"]),ue]),file:n.string().min(1),displayPath:n.string().min(1),externalSource:n.object({sourceType:ue,sourceId:n.string().min(1),adapterId:n.string().min(1).optional()}).optional()}),Wn=n.object({kind:ot.shape.kind,file:n.string().min(1),displayName:n.string().min(1),canEditHere:n.boolean()}),Q=n.object({finalSource:ot.nullable(),chain:n.array(Wn),confidence:n.enum(["exact","safe-derived","partial","unknown"]),editMode:n.enum(["direct","proxy","upstream","readonly","unsupported"]),diagnostics:n.array(n.object({code:n.string().min(1),message:n.string().min(1)}))}),qn=n.object({kind:n.literal("css-style-model"),properties:n.array(n.object({property:Qe,value:n.union([n.string(),n.number(),n.boolean(),n.null()]),resolvedValue:n.union([n.string(),n.number(),n.boolean(),n.null()]).optional(),breakpoint:Je.optional(),state:Ze.optional(),variants:n.array(n.string().min(1)).optional(),options:n.array(n.union([n.string(),n.number()])).optional(),editable:n.boolean(),diagnostics:n.array(n.object({code:n.string().min(1),message:n.string().min(1)})).optional(),operationBoundary:n.array(L).optional()}))}),po=n.union([n.record(n.string(),n.unknown()),qn]),st=n.object({kind:n.literal("class-name-source"),className:n.string(),sourceKind:n.enum(["missing","static-attribute","static-expression","dynamic-expression"]),editable:n.boolean(),operationBoundary:n.array(L),sourcePath:n.string().min(1).optional(),diagnostics:n.array(n.object({code:n.enum(["missing-class-name","dynamic-binding","non-string-binding"]),message:n.string().min(1)})).optional()}),Gn=n.object({startLine:n.number().int().positive(),startColumn:n.number().int().nonnegative(),endLine:n.number().int().positive(),endColumn:n.number().int().nonnegative()}),ct=n.object({sourceFile:n.string().min(1),componentName:n.string().min(1),openingElementRange:Gn,structuralPath:n.string().min(1),textPreview:n.string().min(1).optional()}),uo=n.object({key:n.string().min(1),tag:n.string().min(1),componentName:n.string().min(1),sourceFile:n.string().min(1),sourceLocator:ct.optional(),label:n.string().min(1),capabilities:$,writeTarget:at,effectiveWriteTarget:rt.optional(),provenanceChain:Q.optional(),componentSemantic:n.record(n.string(),n.unknown()).optional(),contentModel:n.record(n.string(),n.unknown()).optional(),mediaModel:n.record(n.string(),n.unknown()).optional(),styleSource:st.optional(),conditional:n.record(n.string(),n.unknown()).optional(),textSegments:n.array(it),boundaryKind:z.nullable(),isOpaque:n.boolean(),ancestors:n.array(C),children:n.array(C),siblings:n.array(C)}),go=n.object({key:n.string().min(1),tag:n.string().min(1),label:n.string().min(1),sourceLocator:ct.optional(),capabilities:n.object({constraints:$.shape.constraints}),isOpaque:n.boolean(),provenanceChain:n.object({editMode:Q.shape.editMode,diagnostics:Q.shape.diagnostics}).optional(),ancestors:n.array(C)}),ho=n.object({key:n.string().min(1),componentName:n.string().min(1),sourceFile:n.string().min(1),capabilities:$,writeTarget:at,effectiveWriteTarget:rt.optional(),provenanceChain:Q.optional(),componentSemantic:n.record(n.string(),n.unknown()).optional(),textSegments:n.array(it),boundaryKind:z.nullable(),children:n.array(C),siblings:n.array(C)}),_o=n.object({key:n.string().min(1),mediaModel:n.record(n.string(),n.unknown()).optional(),styleSource:st.optional()}),So=n.object({key:n.string().min(1),contentModel:n.record(n.string(),n.unknown()).optional()}),yo=n.object({key:n.string().min(1),mediaModel:n.record(n.string(),n.unknown()).optional()});var Bn=["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"],Kn=["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"],Hn=["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"],Vn=new Set(Bn),zn=new Set(Kn),$n=new Set(Hn),Yn={canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1};function fo(t){return Vn.has(ge(t))}function Xn(t){return zn.has(ge(t))}function Qn(t){return $n.has(ge(t))}function xo(t){let{operationSummary:i}=t;return i?{canUpdateText:i.canUpdateText,canInsertChild:i.canInsertChild,canMove:i.canMove,canRemove:i.canRemove}:t.fallbackMode!=="preview"?{...Yn}:{canUpdateText:Qn(t.tagName),canInsertChild:Xn(t.tagName),canMove:!1,canRemove:!1}}function ge(t){return t?.trim().toLowerCase()??""}var Ro={PATCH_VALIDATION_FAILED:"The code didn't pass validation. Try describing the change more specifically.",PATCH_BATCH_FAILED:"The site code couldn't be generated. Please regenerate the site.",PATCH_BATCH_INVALID:"The change couldn't be applied. Try simpler instructions.",VALIDATION_FAILED:"Your message couldn't be sent as written. Please edit it and try again.",WORKSPACE_MESSAGE_CONTAINS_SECRET:"Your message looks like it contains a secret or token, so it wasn't sent. Remove it and try again.",WORKSPACE_TOOL_RESULT_INVALID:"This change couldn't be completed and was rolled back. Please try again.",WORKSPACE_TOOL_FAILED:"A tool step failed. Please try again.",WORKSPACE_TOOL_RESULT_MISSING:"The tool didn't return a usable result. Please try again.",WORKSPACE_MODEL_STREAM_FAILED:"The model stream ended unexpectedly. Please try again.",WORKSPACE_MODEL_STREAM_ABORTED:"Generation was interrupted before finishing. Please try again.",MODEL_OUTPUT_TRUNCATED:"The response was too long and was cut off before any change was applied. Try again, or split the request into smaller changes.",WORKSPACE_EDIT_NOT_APPLIED:"No change was applied. Try describing the change differently.",WORKSPACE_INITIAL_EXECUTION_FAILED:"Initial generation failed. Please retry from the brief.",WORKSPACE_INITIAL_GENERATION_CHECK_FAILED:"Initial generation could not be verified. Please retry.",WORKSPACE_INITIAL_GENERATION_FINALIZE_FAILED:"Initial generation could not finalize. Please retry.",WORKSPACE_INITIAL_GENERATION_QUALITY_GATE_FAILED:"Initial generation failed quality checks. Please regenerate the site.",WORKSPACE_ITERATION_QUALITY_GATE_FAILED:"Quality check failed. The change was rolled back; try a smaller or more specific request.",WORKSPACE_SOCKET_DEAD:"The workspace connection was lost. Please retry.",WORKSPACE_RUN_CANCELLED:"The run was cancelled.",WORKSPACE_RUN_ABANDONED:"This run was interrupted and did not finish. Please try again.",WORKSPACE_RUN_REQUEST_FAILED:"Couldn't start the workspace. Please try again.",WORKSPACE_RUN_BAD_RESPONSE:"The server response was malformed. Please try again.",WORKSPACE_SOCKET_UNAVAILABLE:"Workspace connection unavailable. Please try again.",WORKSPACE_SOCKET_ERROR:"The workspace connection had an error. Please try again.",WORKSPACE_SOCKET_CLOSED:"The workspace connection closed. Please try again.",WORKSPACE_SOCKET_OPEN_TIMEOUT:"Couldn't reach the workspace in time. Please try again.",WORKSPACE_CLIENT_MESSAGE_ID_MISSING:"Something went wrong sending your message. Please try again.",SITE_SNAPSHOT_REQUIRED:"This site has no usable snapshot yet. Complete Step 3 first.",AGENT_TIMEOUT:"That took longer than expected. Try breaking the change into smaller pieces.",SANDBOX_NOT_AVAILABLE:"The preview environment isn't ready. Your edits have still been saved.",PREVIEW_BUILD_FAILED:"Preview is available, but the production build failed. Fix the reported build error before deploying.",PREVIEW_BUILD_NOT_CONFIGURED:"Preview is available, but the production build check is not configured.",PREVIEW_BUILD_SANDBOX_NOT_FOUND:"Preview is available, but the build check could not find the active preview sandbox.",WS_CONNECTION_ERROR:"Connection lost. Reconnecting\u2026",USER_MESSAGE_PERSIST_FAILED:"Your message wasn't saved. Please send it again.",CLARIFICATION_REPLY_STALE:"That question has expired. Please tell me what you'd like to do now.",CLARIFY_MODEL_FAILED:"Clarify couldn't finish generating questions. Please try again.",WORKSPACE_RUN_IN_FLIGHT:"Another session is already running. Please try again in a moment.",SITE_OPERATION_LOCKED:"Another change is already running for this site. Wait for it to finish, then try again.",EDIT_ENGINE_VERSION_INVALID:"Invalid editor version. Refresh the page and try again.",SANDBOX_DEPENDENCY_SYNC_FAILED:"The preview runtime could not be prepared. Please try again.",SANDBOX_DEPENDENCY_VERSION_MISMATCH:"The preview runtime could not be verified. Please try again.",SANDBOX_RUNTIME_NOT_READY:"The preview needs to be refreshed before this change can be applied. Refresh the preview and try again.",GENERIC:"Something went wrong. Please try again."},vo={UNDO_OR_ROLLBACK:"I can't roll back from chat. Use the version history at the top right to pick a restore point.",HISTORY_RECALL:"Tell me what you'd like to change now\u2014I'll work from the current page state.",OUT_OF_SCOPE:"That's outside what I can do from chat. Try the corresponding panel on the right."},Io={CARD_HEADER:"Needs your confirmation",FREE_TEXT_PLACEHOLDER:"Or describe what you'd like instead",SUBMIT_LABEL:"Submit"},To={SEND_FAILED_RETRY:"Send failed \u2014 tap to retry"};var mt="0.4.1",Ao="x-vcp-edit-engine-version",jo="x-vcp-edit-engine-version-source",he=class extends Error{constructor(i="Invalid edit-engine version."){super(i),this.code="EDIT_ENGINE_VERSION_INVALID",this.name="EditEngineVersionParseError"}},Zn=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*)?$/;function Jn(t){return Zn.test(t)}function ei(t){if(typeof t!="string"||!Jn(t))throw new he;return t}function Co(t){return t==null?{version:mt,source:"fallback_current"}:{version:ei(t),source:"explicit"}}function Po(){return{version:mt,source:"system_current"}}import{z as d}from"zod";var ti=["title","text","richtext","number","boolean","date","datetime","url","email","color","select","multiselect","tag"],lt=d.object({name:d.string().min(1).max(100),type:d.enum(ti),label:d.string().min(1).max(255),required:d.boolean().optional(),options:d.array(d.string()).optional()}),No=d.object({name:d.string(),cms_type:d.string(),label:d.string().optional(),required:d.boolean().optional(),value_shape:d.string().optional(),front_display:d.enum(["visible","internal","forbidden"]).optional(),choices:d.array(d.object({value:d.union([d.string(),d.number()]),label:d.string()})).optional()}),Do=d.object({route_file_path:d.string().min(1),target_component_path:d.string().min(1),content_type_hint:d.string().min(1),required_fields:d.array(lt).optional(),mode:d.enum(["bind_existing","provision"]),list_mode:d.enum(["page","embedded"]).optional(),fields:d.array(lt).optional(),seed_records:d.array(d.record(d.string(),d.unknown())).optional()});import{z as h}from"zod";var ni=["text","textarea","email","phone","select","radio","multiselect","boolean","date","number"],ii=h.object({name:h.string().min(1).max(100),type:h.enum(ni),label:h.string().min(1).max(255),required:h.boolean().optional(),options:h.array(h.string()).optional()}),Uo=h.object({form_hint:h.string().min(1),mode:h.enum(["bind_existing","provision"]),component_slug:h.string().regex(/^[a-z][a-z0-9-]{0,48}$/).optional(),name:h.string().min(1).max(255).optional(),description:h.string().min(1).max(1e3).optional(),fields:h.array(ii).optional()}),Fo=h.object({name:h.string(),label:h.string(),cms_type:h.string(),required:h.boolean()});import{z as x}from"zod";var ai=["provisioning","cms_app_created","seeded","ready","failed"],Go=x.object({tenant_id:x.string().min(1),site_id:x.string().min(1),collection_slug:x.string().min(1),cms_collection_id:x.string().min(1).nullable(),status:x.enum(ai),owned_by_vcp:x.boolean(),run_id:x.string().min(1).nullable(),last_error:x.string().nullable(),created_at:x.string().datetime(),updated_at:x.string().datetime()});var pt="/vibe/v1";function Ko(t){let i=t?.trim().replace(/\/+$/,"");if(!i)return null;try{let r=new URL(i),c=r.pathname.replace(/\/+$/,"");return r.search="",r.hash="",r.pathname=c.endsWith(pt)?c:pt,r.href.replace(/\/+$/,"")}catch{return i}}var U={Inter:{import:"Inter"},"Inter Tight":{import:"Inter_Tight"},"DM Sans":{import:"DM_Sans"},"Source Sans 3":{import:"Source_Sans_3"},"Libre Franklin":{import:"Libre_Franklin"},Montserrat:{import:"Montserrat"},Archivo:{import:"Archivo"},"Space Grotesk":{import:"Space_Grotesk"},Manrope:{import:"Manrope"},"IBM Plex Sans":{import:"IBM_Plex_Sans"},Oswald:{import:"Oswald"},"Roboto Condensed":{import:"Roboto_Condensed"},"Bebas Neue":{import:"Bebas_Neue",weights:["400"]},"Playfair Display":{import:"Playfair_Display"},Lora:{import:"Lora"},Fraunces:{import:"Fraunces"},"Cormorant Garamond":{import:"Cormorant_Garamond"},"JetBrains Mono":{import:"JetBrains_Mono"},"IBM Plex Mono":{import:"IBM_Plex_Mono"},"Noto Sans SC":{import:"Noto_Sans_SC",download:!1},"Noto Serif SC":{import:"Noto_Serif_SC",download:!1}},ri={heading:"Inter",body:"Inter"},dt=U.Inter;function Z(t){return t.trim().replace(/\s+/g,"_").toLowerCase()}var _t=(()=>{let t=new Map;for(let[i,r]of Object.entries(U))t.set(Z(i),r),t.set(Z(r.import),r);return t})();function oi(t){return typeof t!="string"||t.trim().length===0?dt:_t.get(Z(t))??dt}var si=(()=>{let t=new Map;for(let[i,r]of Object.entries(U))t.set(r.import,i);return t})();function ci(t){if(typeof t!="string"||t.trim().length===0)return"Inter";let i=_t.get(Z(t));return i?si.get(i.import)??"Inter":"Inter"}var mi=Object.keys(U),ut='ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',gt='Georgia, "Times New Roman", serif',ht='"SFMono-Regular", Consolas, monospace',li=new Set(["serif","sans-serif","sans serif","monospace","mono","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace"]),pi=new Set(["Playfair Display","Lora","Fraunces","Cormorant Garamond","Noto Serif SC"].map(t=>t.toLowerCase())),di=new Set(["JetBrains Mono","IBM Plex Mono"].map(t=>t.toLowerCase()));function ui(t){let i=t.toLowerCase();return di.has(i)||i.includes("mono")?"mono":pi.has(i)||i.includes("serif")?"serif":"sans"}function _e(t,i){let r=j=>(j??"").trim().replace(/^['"]|['"]$/g,"").replace(/[^A-Za-z0-9 _-]+/g,"").trim().slice(0,60),c=r(t),m=r(i),k=j=>li.has(j.toLowerCase());if(c&&k(c)){let j=c.toLowerCase();return j.includes("mono")?ht:j.includes("serif")?gt:ut}let R=c;R||(R=k(m)?"":m),R||(R="Inter");let Ne=ui(R);return Ne==="mono"?`"${R}", ${ht}`:Ne==="serif"?`"${R}", ${gt}`:`"${R}", ${ut}`}function gi(t){return{"--site-font-sans":_e(t?.body,"Inter"),"--site-font-heading":_e(t?.heading,t?.body??"Inter")}}var hi=[{id:"archivo-inter",heading:"Archivo",body:"Inter"},{id:"playfair-source-sans",heading:"Playfair Display",body:"Source Sans 3"},{id:"space-grotesk-manrope",heading:"Space Grotesk",body:"Manrope"},{id:"fraunces-libre-franklin",heading:"Fraunces",body:"Libre Franklin"},{id:"noto-serif-sc-noto-sans-sc",heading:"Noto Serif SC",body:"Noto Sans SC"},{id:"noto-sans-sc",heading:"Noto Sans SC",body:"Noto Sans SC"}];var _i=[{id:"ocean",colorSeeds:{primary:"#1e3a5f",accent:"#2563eb"}},{id:"forest",colorSeeds:{primary:"#14532d",accent:"#16a34a"}},{id:"clay",colorSeeds:{primary:"#7c2d12",accent:"#ea580c"}},{id:"violet",colorSeeds:{primary:"#3b0764",accent:"#7c3aed"}},{id:"graphite",colorSeeds:{primary:"#1f2937",accent:"#0d9488"}},{id:"crimson",colorSeeds:{primary:"#7f1d1d",accent:"#dc2626"}}];import{z as E}from"zod";var Si=E.object({colorSeeds:E.object({primary:E.string().min(1).max(40),accent:E.string().min(1).max(40)}).strict().optional(),fonts:E.object({heading:E.string().min(1).max(60),body:E.string().min(1).max(60)}).strict().optional()}).strict().refine(t=>t.colorSeeds!==void 0||t.fonts!==void 0,{message:"colorSeeds or fonts is required"}),yi=E.object({ok:E.literal(!0),design_plan_version:E.number().int().positive(),snapshot_id:E.string().min(1)});var be=e.object({heading:e.string().min(1).max(160).optional(),body:e.string().min(1).max(160).optional(),paletteIntent:e.string().min(1).max(400).optional(),surfaceMode:e.enum(["light","dark"]).optional(),radius:e.enum(["none","sm","md","lg","xl"]).optional(),density:e.enum(["compact","comfortable","editorial"]).optional(),colorSeeds:e.object({primary:e.string().min(1).max(40),accent:e.string().min(1).max(40),neutral:e.string().min(1).max(40).optional(),supporting:e.array(e.string().min(1).max(40)).max(4).optional()}).optional(),imagePalette:e.object({background:e.string().min(1).max(40).optional(),foreground:e.string().min(1).max(40).optional(),card:e.string().min(1).max(40).optional(),muted:e.string().min(1).max(40).optional(),border:e.string().min(1).max(40).optional()}).optional()}),fe=e.object({protocol:e.enum(["phone","form","download","route","external"]),ctaLabel:e.string().min(1).max(40),ctaTarget:e.string().min(1).max(200).optional(),requiresOwnerDetail:e.boolean().optional()}),Se=e.enum(["material","reference","brief","industry"]),bi=e.object({market:e.object({value:e.string().min(1).max(200),source:Se}),customer:e.object({value:e.string().min(1).max(200),source:Se}),purpose:e.object({options:e.array(e.string().min(1).max(60)).min(2).max(4),selected:e.string().min(1).max(60),source:Se})}),fi=e.enum(["text-options","motion-slider","positioning"]),xe=e.enum(["none","subtle","moderate","expressive"]),xi=e.enum(["compact","comfortable","editorial"]),Ei=xe,bt=e.object({skill_name:e.string().min(1),rationale:e.string().min(4).max(200),confidence:e.enum(["high","medium","low"]).optional(),displayName:e.object({zh:e.string().min(1),en:e.string().min(1)}).partial().optional()}),Ri=e.object({value:e.string(),label:e.string(),desc:e.string().optional(),impact:e.string().optional(),isRecommended:e.boolean().optional(),preselect:e.boolean().optional(),visualHints:be.optional(),conversionHints:fe.optional()}),vi=e.object({id:e.string(),type:fi,question:e.string(),tag:e.string(),aiThinking:e.string(),options:e.array(Ri),source:e.enum(["ai-detected","always-ask"]),sourceDetail:e.string(),positioning:bi.optional()}),Ee=e.object({questions:e.array(vi).min(1).max(5)}),ts=e.object({tenant_id:e.string().min(1),site_id:e.string().min(1),brief_id:e.string().min(1),brief:e.string().min(20).max(1e3),site_default_locale:D.optional(),input_context:e.object({facts:e.array(G).max(120),conflicts:e.array(K).max(20),reference:B.optional(),sources:e.array(e.object({type:ie,title:e.string().max(120).optional(),status:ae})).max(16).optional()}).optional()}),ft=e.enum(["model_schema_invalid","provider_rate_limited","provider_unavailable","aborted","unknown"]),ns=e.discriminatedUnion("type",[e.object({type:e.literal("run.started"),runId:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("skill.selecting"),category:e.literal("page-generation"),available:e.array(e.object({id:e.string().min(1),name:e.string().min(1)})).max(20),at:e.string().min(1)}),e.object({type:e.literal("skill.selected"),category:e.literal("page-generation"),selected:e.object({id:e.string().min(1),name:e.string().min(1),reason:e.string().min(1).max(200)}),at:e.string().min(1)}),e.object({type:e.literal("clarify.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("clarify.archetype_proposals"),proposals:e.array(bt).min(1).max(5),at:e.string().min(1)}),e.object({type:e.literal("clarify.finished"),questions_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("run.failed"),error_code:e.string().min(1),message:e.string().min(1),error_category:ft.optional(),retryable:e.boolean().optional(),attempts:e.number().int().positive().optional(),at:e.string().min(1)}),e.object({type:e.literal("run.finished"),at:e.string().min(1)})]),Ii=e.enum(["draft","brief_submitted","clarifying","sitemap_ready","workspace_ready","deployed","archived","error"]),Ti={draft:["brief_submitted","archived","error"],brief_submitted:["clarifying","archived","error"],clarifying:["sitemap_ready","archived","error"],sitemap_ready:["workspace_ready","archived","error"],workspace_ready:["deployed","archived","error"],deployed:["workspace_ready","archived","error"],archived:[],error:["draft","brief_submitted","clarifying","sitemap_ready"]};function is(t,i){if(!Ti[t].includes(i))throw new Error(`Invalid site status transition: ${t} -> ${i}`);return i}var ki=e.enum(["planning","initial_generation_running","generated"]),Ai={planning:["initial_generation_running"],initial_generation_running:["generated","planning"],generated:[]};function as(t,i){if(t===i)return i;if(!Ai[t].includes(i))throw new Error(`Invalid site generation state transition: ${t} -> ${i}`);return i}function rs(t){if(t.agent_type!=="workspace"||t.current_state==="generated")return null;switch(t.event_type){case"run.started":return t.current_state==="planning"?"initial_generation_running":null;case"run.finished":return t.current_state==="initial_generation_running"?"generated":null;case"run.failed":return t.current_state==="initial_generation_running"?"planning":null;default:return null}}var os="SITE_PLANNING_INPUT_FROZEN",ss="SITE_PLANNING_LOCKED",cs=e.object({tenant_id:e.string().min(1),owner_user_id:e.string().min(1),name:e.string().min(1).max(120),brief:e.string().min(20).max(1e3)}),ms=e.object({name:e.string().min(1).max(120),brief:e.string().min(20).max(1e3)}),ls=e.object({name:e.string().min(1).max(120)}),ps=e.object({name:e.string().min(1).max(120),default_locale:D.optional()}),ds=e.object({body:e.string().min(20).max(1e3)}),Re=e.string().url().refine(t=>{try{let i=new URL(t).protocol;return i==="http:"||i==="https:"}catch{return!1}},{message:"URL must use http or https protocol"}),us=e.object({tenant_id:e.string().min(1),site_url:Re}),ji=t=>e.object({code:e.number().int(),data:t,message:e.string()}),gs=ji(e.object({site_id:e.string().min(1),site_url:Re})),w=e.object({id:e.string().min(1),tenant_id:e.string().min(1),owner_user_id:e.string().min(1).nullable(),name:e.string().min(1),slug:e.string().min(1),status:Ii,generation_state:ki,planning_locked_at:e.string().min(1).nullable(),current_sitemap_id:e.string().min(1).nullable(),current_snapshot_id:e.string().min(1).nullable(),deployed_url:e.string().url().nullable(),default_locale:D,cms_site_id:e.string().nullable().optional(),cms_site_url:Re.nullable().optional(),schema_version:e.literal(1),created_at:e.string().min(1),updated_at:e.string().min(1)}),xt=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),body:e.string().min(1),source:e.enum(["user","import","system"]),created_at:e.string().min(1),updated_at:e.string().min(1)}),hs=e.object({site:w,brief:xt,next_step:e.literal("clarify")}),_s=e.object({site:w,brief:xt}),Ci=e.enum(["queued","running","succeeded","failed","cancelled"]),Et=e.enum(["clarify","sitemap","workspace"]),Rt=e.enum(["clarify","sitemap","initial_generation","iteration"]),vt=e.enum(["clarify","sitemap","workspace","summarize"]),T=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),agent_type:Et,run_kind:Rt,status:Ci,model_route:vt,started_at:e.string().min(1).nullable(),finished_at:e.string().min(1).nullable(),error_code:e.string().min(1).nullable(),created_at:e.string().min(1)}),Ss=e.object({run_id:e.string().min(1).optional(),site_id:e.string().min(1),agent_type:Et,run_kind:Rt.optional(),model_route:vt,input:e.record(e.string(),e.unknown()).optional()}).superRefine((t,i)=>{F(t.input)&&i.addIssue({code:"custom",path:["input"],message:"Agent run input must not contain secrets"})}),ys=e.object({agent_run:T,next_step:e.literal("stream_events")}),ve=e.enum(["draft","candidate","current","failed"]),W=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),version:e.number().int().positive(),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),object_key:e.string().min(1),reason:e.enum(["initial_generation","workspace_edit","pre_deploy","manual_save","rollback"]),status:ve,created_at:e.string().min(1)}),bs=e.object({snapshot_id:e.string().min(1).optional(),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),object_key:e.string().min(1),reason:W.shape.reason,status:ve.default("candidate")}),fs=e.object({site:w,snapshot:W,next_step:e.literal("workspace")}),xs=e.object({site:w,snapshot:W,next_step:e.literal("workspace")}),Es=e.object({status:e.literal("deleted"),snapshot_id:e.string().min(1)}),Ie=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),snapshot_id:e.string().min(1),version:e.number().int().positive(),accepted_commit:e.string().min(1),source_run_id:e.string().min(1).nullable(),created_at:e.string().min(1)}),Pi=Ie.extend({reason:W.shape.reason,status:ve}),Rs=e.object({accepted_commit:e.string().min(1),source_run_id:e.string().min(1).optional()}),vs=e.object({site_version:Ie,next_step:e.literal("workspace")}),Is=e.object({site_versions:e.array(Pi)}),Ts=e.object({site:w,snapshot:W,site_version:Ie,next_step:e.literal("workspace")}),ks=e.object({snapshot_id:e.string().min(1),force_rehydrate:e.boolean().optional()}),As=e.object({status:e.enum(["ready","failed"]),preview_url:e.string().min(1).optional(),code:e.string().min(1).optional(),message:e.string().min(1).optional(),retryable:e.boolean().optional()}),Te=e.enum(De),te=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),snapshot_id:e.string().min(1),version:e.number().int().positive(),status:Te,provider:e.enum(["cloudflare"]),url:e.string().url().nullable(),error_code:e.string().min(1).nullable(),provider_deployment_id:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),js=e.object({snapshot_id:e.string().min(1).optional()}).default({}),Cs=e.object({deployment:te}),Ps=e.object({deployment:te.nullable()}),ws=e.object({deployment:te}),St=e.object({id:e.string().min(1),status:Te,url:e.string().url().nullable(),error_code:e.string().min(1).nullable(),provider_deployment_id:e.string().min(1).nullable()}),Os=e.object({current:St.nullable(),latest_released:St.nullable()}),wi=e.enum(["deployment.snapshot","deployment.status.changed","deployment.finished","deployment.failed","deployment.realtime.recovered","server.error"]),P=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),deployment_id:e.string().min(1),seq:e.number().int().positive(),sent_at:e.string().min(1)}),J=e.object({deployment:te}),Ns=e.discriminatedUnion("type",[P.extend({type:e.literal("deployment.snapshot"),payload:J}),P.extend({type:e.literal("deployment.status.changed"),payload:J}),P.extend({type:e.literal("deployment.finished"),payload:J}),P.extend({type:e.literal("deployment.failed"),payload:J}),P.extend({type:e.literal("deployment.realtime.recovered"),payload:e.object({action:e.literal("refresh")})}),P.extend({type:e.literal("server.error"),payload:e.object({code:e.string().min(1),message:e.string().min(1),retryable:e.boolean()})})]),Ds=e.object({tenant_id:e.string().min(1),site_id:e.string().min(1),deployment_id:e.string().min(1),status:Te,updated_at:e.string().min(1)}),Oi="vcp:deployments",Ls={path:"/v1/sites/:site_id/deployments/:deployment_id/socket",redis_channel:Oi,outbound_message_schema:"DeploymentWsServerMessageSchema",message_types:[...wi.options]},Ni=e.object({error:e.object({code:e.string().min(1),message:e.string().min(1),details:e.unknown().optional(),request_id:e.string().min(1).optional(),retryable:e.boolean().default(!1)})}),Ms=e.object({error:Ni.shape.error.extend({code:e.literal("AGENT_RUN_IN_FLIGHT"),details:e.object({code:e.literal("AGENT_RUN_IN_FLIGHT"),message:e.string().min(1),agent_run:T})})}),Us=e.object({colors:e.record(e.string(),e.string()).default({}),typography:e.record(e.string(),e.string()).default({}),spacing:e.record(e.string(),e.string()).default({}),motion:e.record(e.string(),e.string()).default({})}),Di=e.object({theme_id:e.string().min(1),paletteIntent:e.string().min(1),tone:e.string().min(1),mediaMood:e.string().min(1),motionLevel:xe.optional(),userVisualHints:be.optional()}),Li=e.object({question:e.string().min(1),answer:e.string().min(1)}),Fs=e.object({query:e.string().min(1),keywords:e.array(e.string()).default([]),orientation:e.enum(["landscape","portrait","square"]).optional(),role:e.enum(["hero","section","card","gallery","testimonial","decorative"]),altHint:e.string().min(1)}),Ws=e.object({id:e.string().min(1),role:e.enum(["site_background","nav_background","footer_background"]),query:e.string().min(1),keywords:e.array(e.string()).default([]),treatment:e.enum(["cover","fixed-cover","subtle-texture"]),altHint:e.string().optional()}),Mi=e.object({provider:e.enum(["unsplash","pexels"]),providerLabel:e.enum(["Unsplash","Pexels"]),providerHref:e.string().url(),photoHref:e.string().url().optional(),photographerName:e.string().optional(),photographerHref:e.string().url().optional(),requiresAttribution:e.boolean()}),qs=e.object({src:e.string().min(1),alt:e.string().min(1),width:e.number().int().positive().optional(),height:e.number().int().positive().optional(),provider:e.enum(["unsplash","pexels","placeholder"]).optional(),providerId:e.string().optional(),photoUrl:e.string().url().optional(),photographer:e.string().optional(),photographerUrl:e.string().url().optional(),credit:e.string().optional(),dominantColor:e.string().optional(),attribution:Mi.optional()}),Ui=e.enum(["system_recommended","user_picked","user_picked_extended","deterministic_fallback"]),O=e.object({id:e.string().min(1),name:e.string().min(1),category:e.literal("page-generation"),version:e.string().min(1).optional(),reason:e.string().min(1).max(200),source:Ui.default("system_recommended")}),u=e.string().min(1).max(2e3),yt=e.string().min(1).max(120),It=e.object({visualDirection:u,brandFeeling:u,paletteIntent:u,typographyIntent:u,density:xi,motionLevel:Ei,mediaStrategy:u,compositionRules:e.array(u).max(20),avoidPatterns:e.array(u).max(20),fonts:e.object({heading:e.string().min(1),body:e.string().min(1)}).optional(),colorSeeds:e.object({primary:e.string().min(1).max(40),accent:e.string().min(1).max(40),neutral:e.string().min(1).max(40).optional(),supporting:e.array(e.string().min(1).max(40)).max(4).optional()}).optional(),surfaceMode:e.enum(["light","dark"]).optional(),radius:e.enum(["none","sm","md","lg","xl"]).optional(),imagePalette:e.object({background:e.string().min(1).max(40).optional(),foreground:e.string().min(1).max(40).optional(),card:e.string().min(1).max(40).optional(),muted:e.string().min(1).max(40).optional(),border:e.string().min(1).max(40).optional()}).optional()}),Tt=e.object({routeGoal:u,narrativeArc:u,firstViewportIntent:u,visualContinuity:u,sectionRhythm:u,avoidPatterns:e.array(u).max(20),displayTitle:e.string().min(1).max(24).optional(),displayDescription:e.string().min(1).max(60).optional(),metaTitle:e.string().min(1).max(120).optional(),metaDescription:e.string().min(1).max(320).optional()}),kt=e.enum(["model_call","validation","repair","preview","worker_group"]),I=e.enum(["generating","generating_design_plan","checking_quality","updating_design_memory"]),At=e.object({sectionRole:u,contentIntent:u,layoutIntent:u,visualIntent:u,mediaIntent:u,motionIntent:u,copyTone:u,displayTitle:e.string().min(1).max(24).optional(),displayDescription:e.string().min(1).max(60).optional(),ctaIntent:u.optional(),continuityWithPrevious:u.optional(),avoidRepeating:e.array(u).max(20).optional(),industryRecipeRefs:e.array(yt).max(12).optional(),templateRecipeRefs:e.array(yt).max(12).optional()}),jt=e.object({siteName:e.string().min(1).max(120),tagline:e.string().min(1).max(200).optional(),primaryCta:e.object({label:e.string().min(1).max(60),target:e.string().min(1).max(200)}).optional(),trustSignals:e.array(e.string().min(1).max(60)).max(6).optional(),industry:e.string().min(1).max(40).optional()}),Fi=e.enum(["solid","floating"]),Wi=e.enum(["background","card","primary","frosted"]),qi=e.enum(["sticky","hide-on-scroll","static"]),Gi=e.enum(["bar","island"]),Bi=e.object({variant:Fi,surface:Wi.optional(),behavior:qi.optional(),shape:Gi.optional()}),Ki=e.object({form:u,layoutIntent:u,scrollBehavior:u,shell:Bi.optional(),avoidPatterns:e.array(u).max(10).optional()}),Hi=e.enum(["background","card","primary","inverse"]),Vi=e.object({surface:Hi}),zi=e.object({form:u,composition:u,shell:Vi.optional(),avoidPatterns:e.array(u).max(10).optional()}),$i=e.object({pattern:u,intent:u}),Ct=e.object({header:Ki,footer:zi,mobileNav:$i}),Pt=e.object({schemaVersion:e.literal(1).default(1),siteDesignContext:It,routeCards:e.record(e.string().min(1),Tt),blockContexts:e.record(e.string().min(1),At),selectedSkillPacks:e.array(O).max(3).optional(),branding:jt.optional(),chromeDesign:Ct.optional()}),Gs=e.object({siteDesignContext:It.omit({imagePalette:!0}).optional(),routeCards:e.record(e.string().min(1),Tt).optional(),blockContexts:e.record(e.string().min(1),At).optional(),branding:jt.optional(),chromeDesign:Ct.optional()}),Yi=e.object({id:e.string(),type:e.string(),variant:e.string().optional(),order:e.number(),props:e.record(e.string(),e.unknown()),enabled:e.boolean(),meta:e.object({aiGenerated:e.boolean(),userEdited:e.boolean(),lastEditedAt:e.string(),lastEditedBy:e.enum(["ai","user"]),userInstruction:e.string().optional()}).optional()}).strict(),Xi=e.object({id:e.string(),slug:e.string(),title:e.string(),blocks:e.array(Yi).min(1),layout:e.enum(["default","centered","fullwidth"]).optional(),navigation:e.object({showInHeader:e.boolean(),showInFooter:e.boolean(),order:e.number()})}).strict(),q=e.object({site_name:e.string().min(1).max(80).optional(),version:e.number().int().positive(),pages:e.array(Xi).min(1),navigation:e.object({primaryLinks:e.array(e.object({label:e.string(),href:e.string()})),footerLinks:e.array(e.object({label:e.string(),href:e.string()}))}),integrations:e.object({cms:e.unknown().optional(),analytics:e.unknown().optional()}).optional(),meta:e.object({generatedAt:e.string(),generatedBy:e.literal("sitemap-agent"),source_brief_id:e.string().optional(),source_answer_ids:e.array(e.string()).optional()}),skillSelection:O,visualTheme:Di.optional(),userChoices:e.array(Li).optional(),confirmedChoices:e.object({conversion:fe.optional()}).optional()}).strict(),Bs=q.omit({skillSelection:!0,visualTheme:!0,userChoices:!0,confirmedChoices:!0}).extend({site_name:e.string().min(1).max(80)}),Qi=e.enum(["ai","user"]),N=e.object({site_id:e.string().min(1),page_id:e.string().min(1),edited_by:Qi.default("ai"),source_agent_run_id:e.string().min(1).optional()}),Ks=N.extend({block_id:e.string().min(1),target_index:e.number().int().min(0)}),Zi=N.extend({block_id:e.string().min(1)}),Ji=N.extend({block_id:e.string().min(1),instruction:e.string()}),Hs=N.extend({block_id:e.string().min(1),variant:e.string().min(1).nullable()}),Vs=N.extend({block_id:e.string().min(1),props:e.record(e.string(),e.unknown()),mode:e.enum(["replace","merge"]).default("replace")}),zs=N.extend({block:e.object({id:e.string().min(1),type:e.string().min(1),variant:e.string().min(1).optional(),props:e.record(e.string(),e.unknown()).default({}),insert_index:e.number().int().min(0).optional()})}),ea=e.enum(["move_block","delete_block","update_block_instruction","change_block_variant","update_block_props","add_block"]),$s=e.discriminatedUnion("operation",[e.object({operation:e.literal("delete_block"),input:Zi}).strict(),e.object({operation:e.literal("update_block_instruction"),input:Ji}).strict()]),ta=e.enum(["SITEMAP_EDIT_INVALID","SITEMAP_API_NOT_CONFIGURED","SITEMAP_NOT_FOUND","SITEMAP_PAGE_NOT_FOUND","SITEMAP_BLOCK_NOT_FOUND","SITEMAP_BLOCK_ALREADY_EXISTS","SITEMAP_EDIT_FAILED"]),na=e.object({status:e.literal("updated"),operation:ea,site_id:e.string().min(1),sitemap_id:e.string().min(1),version:e.number().int().positive(),changed_pages:e.array(e.string().min(1)).min(1),requires_code_patch:e.literal(!0)}),ia=e.object({status:e.literal("failed"),code:ta,message:e.string().min(1),retryable:e.boolean().default(!1),details:e.unknown().optional()}),Ys=e.discriminatedUnion("status",[na,ia]),ke=e.object({question_id:e.string().min(1),value:e.string().min(1),label:e.string().min(1).optional(),question:e.string().min(1).optional(),option_label:e.string().min(1).optional(),motion_level:xe.optional(),visual_tonality:be.optional(),conversion:fe.optional(),positioning:e.object({market:e.string().min(1).max(200),customer:e.string().min(1).max(200),purpose:e.string().min(1).max(60)}).optional()}),Xs=e.object({tenant_id:e.string().min(1),site_id:e.string().min(1),brief_id:e.string().min(1),brief:e.string().min(20).max(1e3),answers:e.array(ke).min(1).max(10),skillSelection:O,site_default_locale:D.optional(),reference:B.optional(),input_context:e.object({facts:e.array(G).max(120),conflicts:e.array(K).max(20)}).optional()}),wt=e.enum(["planning","generating","validating","ready"]),Qs=e.discriminatedUnion("type",[e.object({type:e.literal("run.started"),runId:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generating"),stage:wt,message:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generated"),sitemap_id:e.string().min(1),sitemap:q,at:e.string().min(1)}),e.object({type:e.literal("sitemap.clamped"),reason:e.enum(["page_early_stop","finalize_best_effort"]),original_page_count:e.number().int().nonnegative().optional(),final_page_count:e.number().int().nonnegative().optional(),original_enabled_block_count:e.number().int().nonnegative().optional(),final_enabled_block_count:e.number().int().nonnegative().optional(),at:e.string().min(1)}),e.object({type:e.literal("media_resolution.started"),slot_count:e.number().int().nonnegative(),at:e.string().min(1)}),e.object({type:e.literal("media_resolution.finished"),slot_count:e.number().int().nonnegative(),provider_counts:e.object({unsplash:e.number().int().nonnegative(),pexels:e.number().int().nonnegative(),placeholder:e.number().int().nonnegative()}),fallback_count:e.number().int().nonnegative(),error_codes:e.array(e.string()),at:e.string().min(1)}),e.object({type:e.literal("snapshot.created"),snapshot_id:e.string().min(1),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),at:e.string().min(1)}),e.object({type:e.literal("run.failed"),error_code:e.string().min(1),message:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("run.finished"),snapshot_id:e.string().min(1).optional(),at:e.string().min(1)})]),aa=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),version:e.number().int().positive(),sitemap:q,source_agent_run_id:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),Zs=e.object({sitemap_id:e.string().min(1).optional(),sitemap:q,source_agent_run_id:e.string().min(1).optional()}),Js=e.object({site:w,sitemap:aa,next_step:e.literal("workspace")}),ra=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),brief_id:e.string().min(1),questions:Ee,answers:e.array(ke),selected_archetype:O.optional(),completed_at:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),ec=e.object({answers:e.array(ke).min(1),questions:Ee,selected_archetype:O.optional()}),tc=e.object({clarify_session:ra}),nc=e.object({questions:Ee,selected_archetype:O}),oa=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),version:e.number().int().positive(),design_plan:Pt,source_agent_run_id:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),ic=e.object({design_plan_id:e.string().min(1).optional(),design_plan:Pt,source_agent_run_id:e.string().min(1).optional()}),ac=e.object({design_plan:oa}),ne=e.enum(["initial_generation","iteration"]),sa=e.object({label:e.string().min(1).max(48),prompt:e.string().min(1).max(160)}).strict(),ca=e.enum(["model","derived"]),Ot=e.object({suggestions:e.array(sa).min(1).max(5),source:ca}).strict(),Nt=e.enum(["run.started","message.delta","user.message","plan.updated","clarify.partial","clarify.archetype_proposals","clarify.finished","sitemap.generating","sitemap.partial","sitemap.generated","sitemap.clamped","sitemap.updated","sitemap.resync.failed","sitemap.resync.warning","block.changed","tool.started","tool.finished","workspace.plan.created","workspace.worker.updated","workspace.task.updated","workspace.degraded","workspace.suggestions","file.changed","snapshot.created","preview.preparing","preview.ready","preview.build.started","preview.build.succeeded","preview.build.failed","run.failed","run.finished","media_resolution.started","media_resolution.finished","skill.selecting","skill.selected","activity.started","activity.updated","activity.finished","activity.failed"]),ma=e.object({id:e.string().min(1),title:e.string().min(1),status:e.enum(["pending","running","completed","failed"])}),A=e.enum(["pending","running","completed","completed_with_skips","failed","skipped"]),Ae=e.enum(["style_media","chrome","sections","layout","pages","detect_typecheck","repair","finalize","sitemap_resync","preview"]),je=e.object({code:e.string().min(1),message:e.string().min(1),path:e.string().min(1).optional(),task_id:e.string().min(1).optional(),details:e.record(e.string(),e.unknown()).optional()}),y=e.string().min(1).refine(t=>Fa(t),{message:"Snapshot file paths must be safe relative POSIX paths without traversal."}),Ce=e.object({deduped_paths:e.array(y),skipped_tasks:e.array(e.string().min(1)),failed_tasks:e.array(e.string().min(1)),fallback_files:e.array(e.string().min(1)),applied_paths:e.array(y)}),Pe=e.object({group_id:e.string().min(1),phase:Ae,title:e.string().min(1),status:A,task_ids:e.array(e.string().min(1)),depends_on_groups:e.array(e.string().min(1)),target_paths:e.array(y)}),la=e.enum(["style","media","chrome","section","layout","page"]),we=e.object({task_id:e.string().min(1),group_id:e.string().min(1),kind:la,target_path:y,block_id:e.string().min(1).optional(),block_type:e.string().min(1).optional(),block_variant:e.string().min(1).optional(),block_order:e.number().int().nonnegative().optional(),user_instruction:e.string().min(1).optional(),page_id:e.string().min(1).optional(),page_slug:e.string().min(1).optional(),page_title:e.string().min(1).optional(),title:e.string().min(1).max(60).optional(),description:e.string().min(1).max(160).optional(),status:A,required_reads:e.array(y).optional()}),Oe=e.object({from_group_id:e.string().min(1),to_group_id:e.string().min(1),reason:e.enum(["style_media","chrome","sections","layout","page_composition","quality_gate"])}),rc=e.object({plan_id:e.string().min(1),run_kind:ne,model_route:e.object({planner:e.literal("workspace_planner"),worker:e.literal("workspace")}),groups:e.array(Pe),tasks:e.array(we),dependencies:e.array(Oe),expected_outputs:e.array(y),diagnostics:Ce}),oc=e.object({task_id:e.string().min(1),patch:e.unknown().optional(),snapshot_id:e.string().min(1).optional(),read_files:e.array(y),diagnostics:e.array(je),status:A}),Dt=e.object({worker_count:e.number().int().nonnegative(),task_count:e.number().int().nonnegative(),group_count:e.number().int().nonnegative()}),Lt=e.object({pending:e.number().int().nonnegative(),running:e.number().int().nonnegative(),completed:e.number().int().nonnegative(),completed_with_skips:e.number().int().nonnegative(),failed:e.number().int().nonnegative(),skipped:e.number().int().nonnegative()}),pa=e.object({type:e.literal("text"),text:e.string(),state:e.enum(["streaming","done"]).optional()}),da=e.object({type:e.literal("reasoning"),text:e.string(),state:e.enum(["streaming","done"]).optional(),providerMetadata:e.record(e.string(),e.unknown()).optional()}),ua=e.object({type:e.literal("file"),mediaType:e.string().min(1),filename:e.string().min(1).optional(),url:e.string().min(1)}),ga=e.object({type:e.literal("source-url"),sourceId:e.string().min(1),url:e.string().min(1),title:e.string().min(1).optional(),providerMetadata:e.record(e.string(),e.unknown()).optional()}),ha=e.object({type:e.literal("source-document"),sourceId:e.string().min(1),mediaType:e.string().min(1),title:e.string().min(1),filename:e.string().min(1).optional(),providerMetadata:e.record(e.string(),e.unknown()).optional()}),_a=e.object({type:e.string().regex(/^data-[a-zA-Z0-9_-]+$/),id:e.string().min(1).optional(),data:e.unknown()}),Sa=e.object({type:e.string().regex(/^tool-[a-zA-Z0-9_-]+$/),toolCallId:e.string().min(1),state:e.enum(["input-streaming","input-available","output-available","output-error"]),input:e.unknown().optional(),output:e.unknown().optional(),errorText:e.string().min(1).optional()}),ya=e.object({type:e.literal("error"),errorText:e.string().min(1)}),ba=e.object({type:e.literal("step-start")}),ee=e.union([pa,da,ua,ga,ha,_a,Sa,ya,ba]),Mt=e.discriminatedUnion("type",[e.object({type:e.literal("run.started"),runId:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("message.delta"),text:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("user.message"),client_message_id:e.string().min(1),message_id:e.string().min(1),parts:e.array(ee).min(1),in_reply_to_tool_call_id:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("plan.updated"),steps:e.array(ma),at:e.string().min(1)}),e.object({type:e.literal("clarify.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("clarify.archetype_proposals"),proposals:e.array(bt).min(1).max(5),at:e.string().min(1)}),e.object({type:e.literal("clarify.finished"),questions_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generating"),stage:wt,message:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generated"),sitemap_id:e.string().min(1),sitemap:q,at:e.string().min(1)}),e.object({type:e.literal("sitemap.clamped"),reason:e.enum(["page_early_stop","finalize_best_effort"]),original_page_count:e.number().int().nonnegative().optional(),final_page_count:e.number().int().nonnegative().optional(),original_enabled_block_count:e.number().int().nonnegative().optional(),final_enabled_block_count:e.number().int().nonnegative().optional(),at:e.string().min(1)}).strict(),e.object({type:e.literal("sitemap.updated"),sitemap_id:e.string().min(1),version:e.number().int().positive(),reason:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("sitemap.resync.failed"),error_code:e.string().min(1),message:e.string().min(1),retryable:e.boolean(),diagnostics:e.unknown().optional(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.resync.warning"),code:e.string().min(1),message:e.string().min(1),diagnostics:e.unknown().optional(),at:e.string().min(1)}),e.object({type:e.literal("block.changed"),block_id:e.string().min(1),change_type:e.enum(["add","update","delete","move"]),at:e.string().min(1)}),e.object({type:e.literal("tool.started"),tool_call_id:e.string().min(1),name:e.string().min(1),summary:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("tool.finished"),tool_call_id:e.string().min(1),name:e.string().min(1),result_summary:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("workspace.plan.created"),plan_id:e.string().min(1),run_kind:ne,groups:e.array(Pe),tasks:e.array(we),dependencies:e.array(Oe),expected_outputs:e.array(y),diagnostics:Ce,summary:Dt,at:e.string().min(1)}).strict(),e.object({type:e.literal("workspace.worker.updated"),group_id:e.string().min(1),phase:Ae,status:A,task_counts:Lt,target_paths:e.array(y),diagnostics:e.array(e.string().min(1)),at:e.string().min(1)}).strict(),e.object({type:e.literal("workspace.task.updated"),task_id:e.string().min(1),group_id:e.string().min(1),status:A,target_path:y,read_files_count:e.number().int().nonnegative(),diagnostics:e.array(e.string().min(1)),diagnostic_details:e.array(je).optional(),at:e.string().min(1)}).strict(),e.object({type:e.literal("workspace.degraded"),reason:e.enum(["block_placeholder","form_placeholder","patch_protected_dropped","preview_health_degraded","design_plan_fallback"]),degraded_block_ids:e.array(e.string().min(1)).min(1).optional(),dropped_files:e.array(e.string().min(1)).min(1).optional(),snapshot_id:e.string().min(1).optional(),code:e.string().min(1).optional(),message:e.string().min(1).optional(),diagnostics:e.string().min(1).optional(),retryable:e.boolean().optional(),at:e.string().min(1)}).strict(),Ot.extend({type:e.literal("workspace.suggestions"),at:e.string().min(1)}).strict(),e.object({type:e.literal("file.changed"),path:e.string().min(1),change_type:e.enum(["create","update","delete"]),diff:e.string().optional(),at:e.string().min(1)}),e.object({type:e.literal("snapshot.created"),snapshot_id:e.string().min(1),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),at:e.string().min(1)}),e.object({type:e.literal("preview.preparing"),at:e.string().min(1)}),e.object({type:e.literal("preview.ready"),url:e.string().url(),at:e.string().min(1)}),e.object({type:e.literal("preview.build.started"),snapshot_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("preview.build.succeeded"),snapshot_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("preview.build.failed"),snapshot_id:e.string().min(1),message:e.string().min(1),diagnostics:e.string().min(1),retryable:e.boolean(),at:e.string().min(1)}),e.object({type:e.literal("run.failed"),error_code:e.string().min(1),message:e.string().min(1),error_category:ft.optional(),retryable:e.boolean().optional(),attempts:e.number().int().positive().optional(),at:e.string().min(1)}),e.object({type:e.literal("run.finished"),snapshot_id:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("media_resolution.started"),slot_count:e.number().int().nonnegative(),at:e.string().datetime()}),e.object({type:e.literal("media_resolution.finished"),slot_count:e.number().int().nonnegative(),provider_counts:e.object({unsplash:e.number().int().nonnegative(),pexels:e.number().int().nonnegative(),placeholder:e.number().int().nonnegative()}),fallback_count:e.number().int().nonnegative(),error_codes:e.array(e.string()),at:e.string().datetime()}),e.object({type:e.literal("skill.selecting"),category:e.literal("page-generation"),available:e.array(e.object({id:e.string().min(1),name:e.string().min(1)})).max(20),at:e.string().min(1)}),e.object({type:e.literal("skill.selected"),category:e.literal("page-generation"),selected:e.object({id:e.string().min(1),name:e.string().min(1),reason:e.string().min(1).max(200)}),at:e.string().min(1)}),e.object({type:e.literal("activity.started"),activity_id:e.string().min(1),parent_activity_id:e.string().min(1).optional(),kind:kt,title:e.string().min(1).max(200),detail:e.string().max(360).optional(),title_code:I.optional(),detail_code:I.optional(),locks_input:e.boolean(),at:e.string().min(1)}),e.object({type:e.literal("activity.updated"),activity_id:e.string().min(1),title:e.string().min(1).max(200).optional(),detail:e.string().max(360).optional(),title_code:I.optional(),detail_code:I.optional(),at:e.string().min(1)}),e.object({type:e.literal("activity.finished"),activity_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("activity.failed"),activity_id:e.string().min(1),detail:e.string().max(360).optional(),at:e.string().min(1)})]),ye=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),agent_run_id:e.string().min(1),sequence:e.number().int().positive(),event_type:Nt,payload:Mt,created_at:e.string().min(1)}),sc=e.object({event_type:Nt,payload:Mt}).superRefine((t,i)=>{t.event_type!==t.payload.type&&i.addIssue({code:"custom",path:["payload","type"],message:"payload.type must match event_type"}),F(t.payload)&&i.addIssue({code:"custom",path:["payload"],message:"AgentEvent payload must not contain secrets"})}),cc=e.discriminatedUnion("status",[e.object({status:e.literal("appended"),agent_run:T,event:ye,next_cursor:e.number().int().nonnegative()}),e.object({status:e.literal("duplicate_ignored"),agent_run:T,event:ye,next_cursor:e.number().int().nonnegative()})]),mc=e.object({events:e.array(ye),next_cursor:e.number().int().nonnegative().optional()}),lc=e.object({after_sequence:e.coerce.number().int().nonnegative().default(0)}),pc=e.enum(["implemented","skeleton","planned"]),dc=e.enum(["GET","POST","PATCH","DELETE"]),uc=[{method:"GET",path:"/health",tag:"system",summary:"API health check.",status:"implemented",response_schema:"ApiHealth"},{method:"POST",path:"/sites",tag:"sites",summary:"Create a site and Step 1 brief in the current dev context.",status:"implemented",request_body_schema:"CreateSiteBriefRequestSchema",response_schema:"CreateSiteBriefResponseSchema"},{method:"POST",path:"/sites/drafts",tag:"sites",summary:"Create a draft site without a brief in the current tenant so /s/:site_id can collect Step 1 later.",status:"implemented",request_body_schema:"CreateSiteDraftRequestSchema",response_schema:"SiteRecordSchema"},{method:"GET",path:"/sites",tag:"sites",summary:"List current tenant sites.",status:"implemented",response_schema:"SiteRecordSchema[]"},{method:"GET",path:"/sites/by-cms/:cms_site_id",tag:"sites",summary:"Resolve an external CMS site id to one tenant-scoped VCP site.",status:"implemented",response_schema:"SiteRecordSchema",notes:["Used by the browser /d/:cms_site_id handoff route; lookup is scoped by current request tenant and returns 404 when the CMS site has not been synchronized."]},{method:"GET",path:"/sites/:site_id",tag:"sites",summary:"Get one tenant-scoped site.",status:"implemented",response_schema:"SiteRecordSchema"},{method:"PATCH",path:"/sites/:site_id",tag:"sites",summary:"Update site display name for the current tenant.",status:"implemented",request_body_schema:"UpdateSiteRequestSchema",response_schema:"SiteRecordSchema"},{method:"DELETE",path:"/sites/:site_id",tag:"sites",summary:"Archive a site so it no longer appears in the tenant site list.",status:"implemented",response_schema:"SiteRecordSchema"},{method:"GET",path:"/sites/:site_id/workspace/source-files",tag:"sites",summary:"List source files available in the ready preview sandbox.",status:"implemented",response_schema:"WorkspaceSourceFileListItemSchema[]"},{method:"GET",path:"/sites/:site_id/workspace/source-file",tag:"sites",summary:"Read a source file from the ready preview sandbox.",status:"implemented",query_schema:"WorkspaceSourceFilePathQuerySchema",response_schema:"WorkspaceSourceFileResponseSchema"},{method:"POST",path:"/sites/:site_id/sitemap",tag:"sitemaps",summary:"Persist generated sitemap and advance the site to sitemap_ready.",status:"implemented",request_body_schema:"PersistSiteSitemapRequestSchema",response_schema:"PersistSiteSitemapResponseSchema"},{method:"GET",path:"/sites/:site_id/sitemap",tag:"sitemaps",summary:"Read the current sitemap for a site.",status:"implemented",response_schema:"SitemapRecordSchema"},{method:"POST",path:"/sites/:site_id/clarify/answers",tag:"clarify",summary:"Persist the Step 2 clarify answers (and the answered questions) into the site's clarify session.",status:"implemented",request_body_schema:"PersistClarifyAnswersRequestSchema",response_schema:"PersistClarifyAnswersResponseSchema"},{method:"PATCH",path:"/sites/:site_id/clarify/archetype",tag:"clarify",summary:"Switch the Step 2 industry archetype (user_picked) into the site's clarify session via an idempotent upsert.",status:"implemented",request_body_schema:"UpdateClarifyArchetypeRequestSchema",response_schema:"PersistClarifyAnswersResponseSchema",notes:["Independent of generate: materializes a clarify_sessions row when none exists (using the supplied questions) or updates only selected_archetype; never writes answers/completed_at. Forces source=user_picked."]},{method:"POST",path:"/internal/sites/:site_id/design-plan",tag:"design-plans",summary:"Persist a generated design plan version for a site (internal agent-only write).",status:"implemented",request_body_schema:"PersistSiteDesignPlanRequestSchema",response_schema:"PersistSiteDesignPlanResponseSchema",notes:["Guarded by the internal agent token; only the Workspace/Sitemap agent writes design plans."]},{method:"GET",path:"/internal/sites/:site_id/design-plan",tag:"design-plans",summary:"Read the current (latest version) design plan for a site (internal agent-only read).",status:"implemented",response_schema:"DesignPlanRecordSchema",notes:["Guarded by the internal agent token; only the Workspace/Sitemap agent reads design plans."]},{method:"GET",path:"/sites/:site_id/design-plan",tag:"design-plans",summary:"Read the current (latest version) design plan for a site so Workspace UI can inspect the generated design contract.",status:"implemented",response_schema:"DesignPlanRecordSchema"},{method:"GET",path:"/sites/:site_id/brief",tag:"briefs",summary:"Read the persisted Step 1 brief for a site so the Workspace Agent can seed first full-site generation without a new write surface.",status:"implemented",response_schema:"BriefRecordSchema"},{method:"PATCH",path:"/sites/:site_id/brief",tag:"briefs",summary:"Create or update a draft site's Step 1 brief and advance it to Clarify without allowing later workflow states to roll back.",status:"implemented",request_body_schema:"UpdateBriefRequestSchema",response_schema:"UpdateBriefResponseSchema",notes:["Only draft sites with generation_state=planning are writable; missing brief rows are created on first save; identical retries after brief_submitted are idempotent."]},{method:"POST",path:"/internal/sites/:cms_site_id/external-sync",tag:"sites",summary:"Synchronize a trusted external CMS site URL into VCP by tenant_id + cms_site_id, creating a draft VCP site on first sync.",status:"implemented",request_body_schema:"ExternalSyncSiteRequestSchema",response_schema:"ExternalSyncSiteResponseSchema",notes:["This trusted external entry does not require browser login or internal bearer auth; tenant_id is written directly to tenants.id and the response uses the internal { code, data, message } success envelope."]},{method:"POST",path:"/sites/:site_id/snapshots",tag:"snapshots",summary:"Persist snapshot metadata without changing the current site snapshot.",status:"implemented",request_body_schema:"PersistSiteSnapshotRequestSchema",response_schema:"PersistSiteSnapshotResponseSchema"},{method:"POST",path:"/sites/:site_id/snapshots/:snapshot_id/promote",tag:"snapshots",summary:"Promote a site snapshot as the current workspace version.",status:"implemented",response_schema:"PromoteSiteSnapshotResponseSchema"},{method:"GET",path:"/sites/:site_id/snapshots/:snapshot_id",tag:"snapshots",summary:"Read one tenant-scoped snapshot metadata record for a site.",status:"implemented",response_schema:"SnapshotRecordSchema"},{method:"DELETE",path:"/sites/:site_id/snapshots/:snapshot_id",tag:"snapshots",summary:"Delete a candidate snapshot (cleanup of superseded intermediate snapshots; refuses non-candidate/current/referenced).",status:"implemented",response_schema:"DeleteSiteSnapshotResponseSchema"},{method:"POST",path:"/agent-runs",tag:"agent-runs",summary:"Create an agent run for event persistence and replay.",status:"implemented",request_body_schema:"CreateAgentRunRequestSchema",response_schema:"CreateAgentRunResponseSchema"},{method:"POST",path:"/agent-runs/:run_id/events",tag:"agent-runs",summary:"Append one normalized AgentEvent to a run.",status:"implemented",request_body_schema:"AppendAgentEventRequestSchema",response_schema:"AppendAgentEventResponseSchema",notes:["Internal-only write surface: only internal-service callers may append, except browser (oidc) contexts may append run.failed (the WS connect-stage unlock path, equivalent to POST /agent-runs/workspace/cancel). All other oidc appends \u2014 run.finished, run.started, tool/system/progress, file/snapshot \u2014 are rejected with 403 FORBIDDEN. The browser sends user messages over the Workspace WebSocket (recorded server-side as user.message) and otherwise only reads the GET replay."]},{method:"GET",path:"/agent-runs/:run_id/events",tag:"agent-runs",summary:"Replay AgentEvents after a run-local sequence cursor.",status:"implemented",response_schema:"ListAgentEventsResponseSchema"},{method:"POST",path:"/internal/agent-runs/fail-stale-in-flight",tag:"agent-runs",summary:"Fail stale in-flight workspace runs (internal maintenance, cross-tenant sweep).",status:"implemented",response_schema:"FailStaleInFlightWorkspaceRunsResponseSchema",notes:["Internal maintenance endpoint guarded by InternalAgentAuthGuard (Bearer VCP_AGENT_INTERNAL_TOKEN, production fail-closed); the /internal/** prefix is exempt from browser auth middleware so the guard is the sole trust boundary. Not exposed to the browser via agent-proxy; called by an external admin cron / controlled ops script."]},{method:"GET",path:"/briefs",tag:"briefs",summary:"Brief resource summary endpoint until concrete brief APIs land.",status:"skeleton"},{method:"GET",path:"/clarify",tag:"clarify",summary:"Clarify resource summary endpoint; persisted answers write through POST /sites/:site_id/clarify/answers.",status:"skeleton"},{method:"GET",path:"/sitemaps",tag:"sitemaps",summary:"Sitemap resource summary endpoint until collection APIs land.",status:"skeleton"},{method:"GET",path:"/snapshots",tag:"snapshots",summary:"Snapshot resource summary endpoint until collection APIs land.",status:"skeleton"},{method:"GET",path:"/sandbox-sessions",tag:"sandbox-sessions",summary:"Sandbox session resource summary endpoint until preview APIs land.",status:"skeleton"},{method:"GET",path:"/deployments",tag:"deployments",summary:"Deployment resource summary endpoint until publish APIs land.",status:"skeleton"},{method:"GET",path:"/usage",tag:"usage",summary:"Usage resource summary endpoint until cost summaries land.",status:"skeleton"},{method:"GET",path:"/audit",tag:"audit",summary:"Audit resource summary endpoint until audit queries land.",status:"skeleton"},{method:"POST",path:"/sites/:site_id/workspace/runs",tag:"workspace",summary:"Start an asynchronous Workspace Agent run from the current snapshot.",status:"implemented",request_body_schema:"StartWorkspaceRunRequestSchema",response_schema:"StartWorkspaceRunResponseSchema",notes:["Long-running work must be event-driven and must not block API transactions."]},{method:"GET",path:"/sites/:site_id/workspace/runs/latest",tag:"workspace",summary:"Look up the latest workspace Agent run for a site so Step 4 re-entry can replay persisted events without re-triggering the model.",status:"implemented",response_schema:"LatestWorkspaceRunResponseSchema"},{method:"POST",path:"/sites/:site_id/preview-sessions",tag:"sandbox-sessions",summary:"Persist or update an on-demand preview session for a site.",status:"implemented",request_body_schema:"PersistPreviewSessionRequestSchema",response_schema:"PersistPreviewSessionResponseSchema"},{method:"GET",path:"/sites/:site_id/preview-sessions/current",tag:"sandbox-sessions",summary:"Read the latest tenant-scoped preview session for a site.",status:"implemented",response_schema:"SandboxSessionSchema"},{method:"POST",path:"/sites/:site_id/deployments",tag:"deployments",summary:"Queue an explicit user-confirmed deployment from a snapshot.",status:"implemented",request_body_schema:"CreateDeploymentRequestSchema",response_schema:"CreateDeploymentResponseSchema",notes:["The API returns after creating the deployment record and queue job; worker-service claims deployment_jobs for build and Cloudflare publish."]},{method:"GET",path:"/sites/:site_id/deployments/current",tag:"deployments",summary:"Read the latest deployment for workspace refresh recovery.",status:"implemented",response_schema:"CurrentDeploymentResponseSchema"},{method:"GET",path:"/sites/:site_id/deployments/status",tag:"deployments",summary:"Read current in-flight deployment and latest released deployment.",status:"implemented",response_schema:"GetDeploymentsStatusResponseSchema"},{method:"GET",path:"/sites/:site_id/deployments/:deployment_id",tag:"deployments",summary:"Read one tenant-scoped deployment for status polling.",status:"implemented",response_schema:"GetDeploymentResponseSchema"},{method:"GET",path:"/sites/:site_id/cms/collections",tag:"cms",summary:"List CMS collections for a site.",status:"planned"},{method:"POST",path:"/sites/:site_id/cms/collections",tag:"cms",summary:"Create a CMS collection bound to generated content.",status:"planned"},{method:"GET",path:"/sites/:site_id/cms/collections/:collection_id/entries",tag:"cms",summary:"List CMS entries for a collection.",status:"planned"},{method:"POST",path:"/sites/:site_id/cms/collections/:collection_id/entries",tag:"cms",summary:"Create a CMS entry.",status:"planned"},{method:"PATCH",path:"/sites/:site_id/cms/collections/:collection_id/entries/:entry_id",tag:"cms",summary:"Update a CMS entry.",status:"planned"},{method:"POST",path:"/sites/:site_id/snapshots/:snapshot_id/version-record",tag:"versions",summary:"Record the sandbox accepted git commit for a promoted snapshot version.",status:"implemented",request_body_schema:"RecordSnapshotVersionRequestSchema",response_schema:"RecordSnapshotVersionResponseSchema"},{method:"GET",path:"/sites/:site_id/versions",tag:"versions",summary:"List snapshot-backed site versions.",status:"implemented",response_schema:"ListSiteVersionsResponseSchema"},{method:"POST",path:"/sites/:site_id/versions/:snapshot_id/restore",tag:"versions",summary:"Restore a site to an earlier snapshot version.",status:"implemented",response_schema:"RestoreSiteSnapshotResponseSchema"},{method:"GET",path:"/sites/:site_id/domains",tag:"domains",summary:"List custom domains for a site.",status:"planned"},{method:"POST",path:"/sites/:site_id/domains",tag:"domains",summary:"Attach a custom domain to a site.",status:"planned"},{method:"GET",path:"/admin/tenants",tag:"admin",summary:"Admin tenant listing.",status:"planned"},{method:"GET",path:"/usage/summary",tag:"usage",summary:"Summarize tenant usage and cost controls.",status:"planned"}],gc=[{method:"POST",path:"/v1/agent/clarify/:site_id",tag:"clarify",summary:"Stream Step 2 clarify questions as SSE; event_order includes optional skill.selecting, skill.selected, clarify.archetype_proposals, and run.failed on errors.",status:"implemented",request_body_schema:"ClarifyRunInputSchema without tenant_id/site_id",event_schema:"ClarifyStreamEventSchema",event_order:["run.started","skill.selecting","skill.selected","clarify.partial","clarify.archetype_proposals","clarify.finished","run.failed"]},{method:"POST",path:"/v1/agent/sitemap/:site_id",tag:"sitemap",summary:"Stream Step 3 sitemap generation as SSE; event_order includes sitemap.partial and run.failed on errors.",status:"implemented",request_body_schema:"SitemapRunInputSchema public body without server-injected fields",event_schema:"SitemapStreamEventSchema",event_order:["run.started","sitemap.generating","sitemap.partial","sitemap.generated","sitemap.clamped","run.failed"]}],fa=e.object({id:e.string().min(1),role:e.enum(["system","user","assistant"]),metadata:e.unknown().optional(),parts:e.array(ee).min(1)}),Ut=fa.extend({role:e.literal("user")}),hc=e.object({base_snapshot_id:e.string().min(1).optional(),message:Ut.optional(),client_run_key:e.string().min(1).max(200).optional()}).superRefine((t,i)=>{F(t.message)&&i.addIssue({code:"custom",path:["message"],message:"Workspace startup message must not contain secrets",params:{errorCode:"WORKSPACE_MESSAGE_CONTAINS_SECRET"}})}),xa=e.object({path:e.string().regex(/^\/v1\/workspace\/sites\/[^/]+\/socket$/),run_id:e.string().min(1),base_snapshot_id:e.string().min(1),run_kind:ne}),_c=e.object({agent_run:T,websocket:xa,next_step:e.literal("workspace_socket")}),Sc=e.object({agent_run:T}),yc=e.object({agent_type:e.enum(["clarify","sitemap","workspace"])}),bc=e.object({agent_run:T}),fc=e.enum(["client.message.create","client.run.cancel","client.tool.approve","server.run.started","server.user.message","server.assistant.delta","server.tool.started","server.tool.completed","server.workspace.suggestions","workspace.plan.created","workspace.worker.updated","workspace.task.updated","server.patch.applied","server.sitemap.updated","server.snapshot.created","server.preview.invalidated","preview.build.started","preview.build.succeeded","preview.build.failed","server.run.finished","server.run.failed","server.error","server.activity.started","server.activity.updated","server.activity.finished","server.activity.failed"]),g=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),run_id:e.string().min(1).optional(),correlation_id:e.string().min(1).optional(),seq:e.number().int().positive().optional(),sent_at:e.string().min(1)}),Ea=e.object({key:e.string().min(1),label:e.string().min(1),source_file:e.string().min(1).optional(),component_name:e.string().min(1).optional(),opening_element_range:e.object({start_line:e.number().int().positive(),start_column:e.number().int().nonnegative(),end_line:e.number().int().positive(),end_column:e.number().int().nonnegative()}).optional(),structural_path:e.string().min(1).optional(),text_preview:e.string().min(1).optional()}),Ra=e.discriminatedUnion("type",[g.extend({type:e.literal("client.message.create"),payload:e.object({client_message_id:e.string().min(1),in_reply_to_tool_call_id:e.string().min(1).optional(),selected_component:Ea.optional(),message:Ut,base_snapshot_id:e.string().min(1).optional()})}),g.extend({type:e.literal("client.run.cancel"),payload:e.object({run_id:e.string().min(1),reason:e.string().min(1).optional()})}),g.extend({type:e.literal("client.tool.approve"),payload:e.object({tool_call_id:e.string().min(1),decision:e.enum(["approve","reject"]),reason:e.string().min(1).optional()})})]),va=e.discriminatedUnion("type",[g.extend({type:e.literal("server.run.started"),payload:e.object({run_id:e.string().min(1),agent_type:e.literal("workspace")})}),g.extend({type:e.literal("server.user.message"),payload:e.object({client_message_id:e.string().min(1),message_id:e.string().min(1),parts:e.array(ee).min(1),in_reply_to_tool_call_id:e.string().min(1).optional()})}),g.extend({type:e.literal("server.assistant.delta"),payload:e.object({message_id:e.string().min(1),parts:e.array(ee).min(1),status:e.enum(["streaming","ready"])})}),g.extend({type:e.literal("server.tool.started"),payload:e.object({tool_call_id:e.string().min(1),name:e.string().min(1),summary:e.string().min(1)})}),g.extend({type:e.literal("server.tool.completed"),payload:e.object({tool_call_id:e.string().min(1),name:e.string().min(1),result_summary:e.string().min(1)})}),g.extend({type:e.literal("server.workspace.suggestions"),payload:Ot.extend({run_id:e.string().min(1)}).strict()}),g.extend({type:e.literal("workspace.plan.created"),payload:e.object({plan_id:e.string().min(1),run_kind:ne,groups:e.array(Pe),tasks:e.array(we),dependencies:e.array(Oe),expected_outputs:e.array(y),diagnostics:Ce,summary:Dt})}),g.extend({type:e.literal("workspace.worker.updated"),payload:e.object({group_id:e.string().min(1),phase:Ae,status:A,task_counts:Lt,target_paths:e.array(y),diagnostics:e.array(e.string().min(1))})}),g.extend({type:e.literal("workspace.task.updated"),payload:e.object({task_id:e.string().min(1),group_id:e.string().min(1),status:A,target_path:y,read_files_count:e.number().int().nonnegative(),diagnostics:e.array(e.string().min(1)),diagnostic_details:e.array(je).optional()})}),g.extend({type:e.literal("server.patch.applied"),payload:e.object({patch_batch_id:e.string().min(1),changed_files:e.array(e.string().min(1)),sitemap_resync_queued:e.boolean()})}),g.extend({type:e.literal("server.sitemap.updated"),payload:e.object({sitemap_id:e.string().min(1),version:e.number().int().positive(),reason:e.string().min(1)})}),g.extend({type:e.literal("server.snapshot.created"),payload:e.object({snapshot_id:e.string().min(1),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/)})}),g.extend({type:e.literal("server.preview.invalidated"),payload:e.object({reason:e.string().min(1),next_preview_url:e.string().url().optional()})}),g.extend({type:e.literal("preview.build.started"),payload:e.object({snapshot_id:e.string().min(1)})}),g.extend({type:e.literal("preview.build.succeeded"),payload:e.object({snapshot_id:e.string().min(1)})}),g.extend({type:e.literal("preview.build.failed"),payload:e.object({snapshot_id:e.string().min(1),message:e.string().min(1),diagnostics:e.string().min(1),retryable:e.boolean()})}),g.extend({type:e.literal("server.run.finished"),payload:e.object({run_id:e.string().min(1),snapshot_id:e.string().min(1)})}),g.extend({type:e.literal("server.run.failed"),payload:e.object({run_id:e.string().min(1),error_code:e.string().min(1),message:e.string().min(1),retryable:e.boolean()})}),g.extend({type:e.literal("server.error"),payload:e.object({code:e.string().min(1),message:e.string().min(1),retryable:e.boolean()})}),g.extend({type:e.literal("server.activity.started"),payload:e.object({activity_id:e.string().min(1),parent_activity_id:e.string().min(1).optional(),kind:kt,title:e.string().min(1).max(200),title_code:I.optional(),detail:e.string().max(360).optional(),detail_code:I.optional(),locks_input:e.boolean()})}),g.extend({type:e.literal("server.activity.updated"),payload:e.object({activity_id:e.string().min(1),title:e.string().min(1).max(200).optional(),title_code:I.optional(),detail:e.string().max(360).optional(),detail_code:I.optional()})}),g.extend({type:e.literal("server.activity.finished"),payload:e.object({activity_id:e.string().min(1)})}),g.extend({type:e.literal("server.activity.failed"),payload:e.object({activity_id:e.string().min(1),detail:e.string().max(360).optional()})})]),xc=e.union([Ra,va]),Ec={path:"/v1/workspace/sites/:site_id/socket",protocol:"ws",status:"implemented",inbound_message_schema:"WorkspaceClientMessageSchema",outbound_message_schema:"WorkspaceServerMessageSchema",query_parameters:[{name:"run_id",required:!1,schema:"string",summary:"Workspace run id returned by the API run-start response."},{name:"run_kind",required:!1,schema:"WorkspaceRunKindSchema",summary:"Workspace run mode; initial_generation can auto-start when base_snapshot_id is present."},{name:"base_snapshot_id",required:!1,schema:"string",summary:"Authoritative base snapshot id for this workspace run."}],ai_sdk_ui_compatible:!0,notes:["Assistant UI output is carried as AI SDK UIMessage parts, including text, data-*, and tool-* parts.","Operational AgentEvents remain persisted separately for replay and audit."]},Ft=e.string().regex(/^sha256:[a-f0-9]{64}$/),Ia=e.enum(["create","update","delete","str_replace"]),Wt=e.enum(["sitemap_resync","smoke_test","prepare_preview"]),Ta=e.object({old_string:e.string().min(1).describe("Exact text to find in the current file. Must match the file uniquely; include enough surrounding context (usually 2-4 adjacent lines)."),new_string:e.string().describe("Replacement text. May be empty to delete the matched text."),replace_all:e.boolean().optional()}).strict(),ka=e.object({path:y,operation:Ia,expected_hash:Ft.optional(),full_content:e.string().describe("Complete file content for create/update patches. It is passed as a JSON string, so every double quote in source code must be valid JSON; avoid ASCII double quotes inside JSX attribute values and use corner quotes like \u300C\u751F\u65E5\u5FEB\u4E50\u300D for visitor-facing quoted examples.").optional(),edits:e.array(Ta).min(1).max(20).optional()}).strict().superRefine((t,i)=>{let r=t.full_content!==void 0;if(t.operation==="delete"){r&&i.addIssue({code:"custom",path:["full_content"],message:"delete patches must not include full_content"}),t.edits!==void 0&&i.addIssue({code:"custom",path:["edits"],message:"edits is only allowed for str_replace patches"});return}if(t.operation==="str_replace"){t.full_content!==void 0&&i.addIssue({code:"custom",path:["full_content"],message:"str_replace patches must not include full_content"}),(!t.edits||t.edits.length===0)&&i.addIssue({code:"custom",path:["edits"],message:"str_replace patches must include a non-empty edits array"});return}r||i.addIssue({code:"custom",path:["full_content"],message:"create/update patches must include full_content"}),t.edits!==void 0&&i.addIssue({code:"custom",path:["edits"],message:"edits is only allowed for str_replace patches"})}),Aa=e.object({kind:e.enum(["block","page","site","chrome"]),id:e.string().min(1).max(120)}),ja=e.object({base_key:e.string().min(1).max(120).regex(/^[A-Za-z0-9._:-]+$/).refine(t=>!t.includes(".."),{message:"base_key must not contain '..'"}),owner:Aa,count:e.number().int().min(1).max(12),query:e.string().min(1).max(400),role:e.enum(["hero","section","card","gallery","testimonial","decorative","site_background","nav_background","footer_background"]),orientation:e.enum(["landscape","portrait","square"]).optional(),altHint:e.string().min(1).max(300)}),qt=e.object({site_id:e.string().min(1),base_snapshot_id:e.string().min(1),reason:e.string().min(1),patches:e.array(ka).min(1),media_requests:e.array(ja).max(24).optional(),post_actions:e.array(Wt).optional()});function Gt(t,i){let r=new Set;for(let[c,m]of t.patches.entries())r.has(m.path)&&i.addIssue({code:"custom",path:["patches",c,"path"],message:`Duplicate patch path: ${m.path}`}),r.add(m.path)}var Rc=qt.superRefine(Gt),vc=qt.omit({base_snapshot_id:!0}).extend({site_id:e.string().min(1).optional()}).superRefine(Gt),Ca=b,Pa=e.object({path:Ca,operation:e.enum(["upsert","delete"]).optional()}),Ic=e.object({files:e.array(Pa).min(1)}).strict(),wa=e.enum(["BASE_SNAPSHOT_NOT_FOUND","PATCH_TARGET_NOT_FOUND","PATCH_TARGET_ALREADY_EXISTS","PATCH_EXPECTED_HASH_MISMATCH","PATCH_DIFF_UNSUPPORTED","PATCH_PROTECTED_FILE","PATCH_VALIDATION_FAILED","PATCH_MEDIA_REFERENCE_NOT_DECLARED","PATCH_BATCH_INVALID","PATCH_BATCH_FAILED","PATCH_BATCH_TOO_LARGE","STR_REPLACE_NOT_FOUND","STR_REPLACE_NOT_UNIQUE","STR_REPLACE_BINARY_FILE","STR_REPLACE_REQUIRES_READ"]),Oa=e.object({status:e.literal("applied"),patch_batch_id:e.string().min(1),site_id:e.string().min(1),base_snapshot_id:e.string().min(1),snapshot_id:e.string().min(1),manifest_hash:Ft,object_key:e.string().min(1),changed_files:e.array(y).min(1),post_actions_queued:e.array(Wt),dropped_protected_files:e.array(e.string().min(1)).min(1).optional()}),Na=e.object({status:e.literal("failed"),code:wa,message:e.string().min(1),retryable:e.boolean().default(!1),details:e.unknown().optional()}),Tc=e.discriminatedUnion("status",[Oa,Na]),kc=e.object({ok:e.literal(!0)}),Bt=b,Da=e.enum(["text","binary"]),Kt=e.object({path:Bt,kind:Da,language:e.string().min(1).nullable(),size_bytes:e.number().int().nonnegative()}),Ac=e.object({path:Bt}),La=Kt.extend({kind:e.literal("text"),language:e.string().min(1),content:e.string()}),Ma=Kt.extend({kind:e.literal("binary"),language:e.null(),mime_type:e.string().min(1),content_base64:e.string().min(1)}),jc=e.union([La,Ma]);function F(t){return typeof t=="string"?/authorization\s*:|bearer\s+|token\s*=|secret\s*=|api[_-]?key\s*=|access[_\s-]?key\s*=|\bsk-[a-z0-9_-]{20,}|eyJ[a-z0-9_-]{10,}\.[a-z0-9_-]{10,}\.[a-z0-9_-]{10,}/i.test(t):!t||typeof t!="object"?!1:Array.isArray(t)?t.some(i=>F(i)):Object.entries(t).some(([i,r])=>Ua(i)||F(r))}function Ua(t){let i=t.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/\s+/g,"_").toLowerCase();return/(^|[_-])(authorization|token|secret|api[_-]?key|apikey|access[_-]?key|accesskey)([_-]|$)/.test(i)}function Fa(t){let i=t.split("/");return t.length>0&&!t.startsWith("/")&&!t.includes("\\")&&i.every(r=>r!==""&&r!=="."&&r!=="..")}var Ht=e.enum(["idle","creating","restoring_snapshot","installing_dependencies","starting_preview","ready","active","stopping","stopped","failed"]),Wa=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),sandbox_id:e.string().min(1).nullable(),status:Ht,source_snapshot_id:e.string().min(1).nullable(),last_snapshot_id:e.string().min(1).nullable(),preview_url:e.string().url().nullable(),last_activity_at:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),Cc=e.object({session_id:e.string().min(1).optional(),sandbox_id:e.string().min(1).optional(),source_snapshot_id:e.string().min(1).optional(),last_snapshot_id:e.string().min(1),status:Ht,preview_url:e.string().url().optional()}),Pc=e.object({preview_session:Wa,next_step:e.literal("preview")}),wc=e.object({failed_count:e.number().int().nonnegative()}),Oc=e.object({site_id:e.string().min(1)}),Nc=e.object({status:e.enum(["cancelled","no_active_run"]),agent_run:T.nullable()});export{kt as ActivityKindSchema,I as ActivityTitleCodeSchema,ft as AgentErrorCategorySchema,ye as AgentEventRecordSchema,Mt as AgentEventSchema,Nt as AgentEventTypeSchema,vt as AgentModelRouteSchema,ma as AgentPlanStepSchema,Rt as AgentRunKindSchema,T as AgentRunRecordSchema,Ci as AgentRunStatusSchema,Et as AgentRunTypeSchema,_a as AiSdkUiDataPartSchema,ya as AiSdkUiErrorPartSchema,ua as AiSdkUiFilePartSchema,ee as AiSdkUiMessagePartSchema,fa as AiSdkUiMessageSchema,da as AiSdkUiReasoningPartSchema,ha as AiSdkUiSourceDocumentPartSchema,ga as AiSdkUiSourceUrlPartSchema,ba as AiSdkUiStepStartPartSchema,pa as AiSdkUiTextPartSchema,Sa as AiSdkUiToolPartSchema,pc as ApiContractStatusSchema,Ni as ApiErrorEnvelopeSchema,ji as ApiResponseSchema,sc as AppendAgentEventRequestSchema,cc as AppendAgentEventResponseSchema,wa as ApplyPatchBatchErrorCodeSchema,Na as ApplyPatchBatchFailureSchema,Rc as ApplyPatchBatchInputSchema,ka as ApplyPatchBatchPatchSchema,Wt as ApplyPatchBatchPostActionSchema,Tc as ApplyPatchBatchResultSchema,Oa as ApplyPatchBatchSuccessSchema,vc as ApplyPatchBatchToolInputSchema,Ta as ApplyPatchEditSchema,Ia as ApplyPatchOperationSchema,bt as ArchetypeProposalSchema,ai as BINDING_STATUSES,At as BlockGenerationContextSchema,Fs as BlockMediaIntentSchema,Yi as BlockSchema,jt as BrandingSchema,xt as BriefRecordSchema,To as CHAT_COPY,Io as CLARIFICATION_COPY,mt as CURRENT_EDIT_ENGINE_VERSION,Oc as CancelActiveWorkspaceRunRequestSchema,Nc as CancelActiveWorkspaceRunResponseSchema,Ct as ChromeDesignSchema,zi as ChromeFooterDesignSchema,Vi as ChromeFooterShellSchema,Ki as ChromeHeaderDesignSchema,Bi as ChromeHeaderShellSchema,$i as ChromeMobileNavDesignSchema,Ri as ClarifyQuestionOptionSchema,vi as ClarifyQuestionSchema,fi as ClarifyQuestionTypeSchema,Ee as ClarifyQuestionsSchema,ts as ClarifyRunInputSchema,ra as ClarifySessionRecordSchema,ns as ClarifyStreamEventSchema,Go as CmsCollectionBindingSchema,Do as ConnectDynamicCollectionInputSchema,Uo as ConnectFormInputSchema,fe as ConversionHintsSchema,Ms as CreateAgentRunConflictResponseSchema,Ss as CreateAgentRunRequestSchema,ys as CreateAgentRunResponseSchema,js as CreateDeploymentRequestSchema,Cs as CreateDeploymentResponseSchema,Ya as CreateDocumentUploadRequestSchema,tr as CreateImageUploadRequestSchema,Ka as CreateInputSourceRequestSchema,ms as CreateSiteBriefRequestSchema,hs as CreateSiteBriefResponseSchema,ls as CreateSiteDraftRequestSchema,cs as CreateSiteInputSchema,Qt as CreateTextInputSourceRequestSchema,Zt as CreateUrlInputSourceRequestSchema,Ps as CurrentDeploymentResponseSchema,ri as DEFAULT_FONTS,hr as DEFAULT_SITE_LOCALE,Oi as DEPLOYMENT_REALTIME_CHANNEL,De as DEPLOYMENT_STATUSES,Ls as DEPLOYMENT_WEBSOCKET_CONTRACT,Ha as DOCUMENT_EXTENSION_WHITELIST,Va as DOCUMENT_MIME_WHITELIST,Es as DeleteSiteSnapshotResponseSchema,te as DeploymentRecordSchema,Ds as DeploymentRedisPubSubEventSchema,Te as DeploymentStatusSchema,St as DeploymentStatusSummarySchema,Ns as DeploymentWsServerMessageSchema,wi as DeploymentWsServerMessageTypeSchema,Gs as DesignPlanPatchSchema,oa as DesignPlanRecordSchema,Pt as DesignPlanSchema,Us as DesignTokensSchema,Ao as EDIT_ENGINE_VERSION_HEADER,jo as EDIT_ENGINE_VERSION_SOURCE_HEADER,Ro as ERROR_COPY,he as EditEngineVersionParseError,us as ExternalSyncSiteRequestSchema,gs as ExternalSyncSiteResponseSchema,$t as ExtractedFactKindSchema,G as ExtractedFactSchema,ti as FIELD_TYPES,hi as FONT_PAIRINGS,ni as FORM_FIELD_TYPES,wc as FailStaleInFlightWorkspaceRunsResponseSchema,lt as FieldDeclSchema,Hi as FooterShellSurfaceSchema,ii as FormFieldDeclSchema,ws as GetDeploymentResponseSchema,Os as GetDeploymentsStatusResponseSchema,qi as HeaderShellBehaviorSchema,Gi as HeaderShellShapeSchema,Wi as HeaderShellSurfaceSchema,Fi as HeaderShellVariantSchema,Qa as IMAGE_EXTENSION_WHITELIST,Za as IMAGE_MIME_WHITELIST,_r as ISO_639_3_TO_SITE_LOCALE,Jt as ImageRoleSchema,Ut as InboundUserMessageSchema,zt as InputBundleStatusSchema,K as InputConflictSchema,nr as InputContextBundleSchema,Xt as InputSourceSchema,ae as InputSourceStatusSchema,ie as InputSourceTypeSchema,yc as LatestAgentRunQuerySchema,bc as LatestAgentRunResponseSchema,Sc as LatestWorkspaceRunResponseSchema,lc as ListAgentEventsQuerySchema,mc as ListAgentEventsResponseSchema,Is as ListSiteVersionsResponseSchema,$a as MAX_DOCUMENT_SOURCES_PER_SITE,za as MAX_DOCUMENT_UPLOAD_BYTES,er as MAX_IMAGE_SOURCES_PER_SITE,Ja as MAX_IMAGE_UPLOAD_BYTES,qs as MediaAssetSchema,Mi as MediaAttributionSchema,Aa as MediaRequestOwnerSchema,xe as MotionLevelSchema,mi as NEXT_FONT_DISPLAY_NAMES,U as NEXT_FONT_REGISTRY,Xi as PageSchema,ec as PersistClarifyAnswersRequestSchema,tc as PersistClarifyAnswersResponseSchema,Cc as PersistPreviewSessionRequestSchema,Pc as PersistPreviewSessionResponseSchema,ic as PersistSiteDesignPlanRequestSchema,ac as PersistSiteDesignPlanResponseSchema,Zs as PersistSiteSitemapRequestSchema,Js as PersistSiteSitemapResponseSchema,bs as PersistSiteSnapshotRequestSchema,fs as PersistSiteSnapshotResponseSchema,bi as PositioningPrefillSchema,Se as PositioningSourceSchema,ks as PrepareVersionPreviewRequestSchema,As as PrepareVersionPreviewResponseSchema,xs as PromoteSiteSnapshotResponseSchema,vo as REFUSAL_COPY,uc as REST_API_ENDPOINTS,Rs as RecordSnapshotVersionRequestSchema,vs as RecordSnapshotVersionResponseSchema,Yt as ReferencePagePatternSchema,B as ReferenceSignalsSchema,No as ResolvedFieldSchema,Fo as ResolvedFormFieldSchema,dc as RestApiMethodSchema,Ts as RestoreSiteSnapshotResponseSchema,Tt as RouteGenerationCardSchema,Kn as SITE_EDIT_RUNTIME_CONTAINER_TAGS,Hn as SITE_EDIT_RUNTIME_TEXT_TAGS,Bn as SITE_EDIT_RUNTIME_VOID_ELEMENT_TAGS,tn as SITE_EDIT_SOURCE_ALLOWED_APP_FILES,Le as SITE_EDIT_SOURCE_ALLOWED_DIRS,en as SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES,re as SITE_EDIT_SOURCE_DELETE_CAPABILITY,nn as SITE_EDIT_TEXT_SOURCE_EXTENSIONS,Sr as SITE_LOCALE_CODES,os as SITE_PLANNING_FROZEN_ERROR_CODE,ss as SITE_PLANNING_LOCKED_ERROR_CODE,gc as SSE_STREAMS,yr as SUPPORTED_SITE_LOCALES,Wa as SandboxSessionSchema,Ht as SandboxSessionStatusSchema,It as SiteDesignContextSchema,xi as SiteDesignDensitySchema,Ei as SiteDesignMotionLevelSchema,z as SiteEditBoundaryKindSchema,En as SiteEditCapabilityConstraintSchema,fn as SiteEditCapabilityModeSchema,V as SiteEditCapabilityModeViewSchema,In as SiteEditClassNameSourceDiagnosticSchema,v as SiteEditClassNameSourceRangeSchema,ze as SiteEditClassNameSourceSchema,Tn as SiteEditClassNameSourceStyleContextSchema,Ve as SiteEditClassNameSourceStylesheetSchema,le as SiteEditClassNameSourceWriteIntentSchema,vr as SiteEditCommandDiagnosticSchema,Rn as SiteEditCommandErrorSchema,xn as SiteEditConstraintKindSchema,rt as SiteEditEffectiveWriteTargetSchema,pe as SiteEditElementPropertySchema,Kr as SiteEditEventSchema,ue as SiteEditExternalSourceKindSchema,jr as SiteEditGetClassNameSourceCommandResultSchema,Ar as SiteEditGetClassNameSourceResultSchema,An as SiteEditInsertNodeSpecSchema,Ye as SiteEditMoveTargetSchema,$ as SiteEditNodeCapabilitySnapshotSchema,lo as SiteEditObjectCapabilitiesSchema,So as SiteEditObjectContentDetailSchema,uo as SiteEditObjectDetailSchema,ho as SiteEditObjectEditContextSchema,yo as SiteEditObjectMediaDetailSchema,_o as SiteEditObjectStyleDetailSchema,go as SiteEditObjectSummarySchema,Fr as SiteEditOperationCommandResultSchema,et as SiteEditOperationErrorCodeSchema,tt as SiteEditOperationErrorSchema,jn as SiteEditOperationParamsSchema,Y as SiteEditOperationPayloadSchema,Ur as SiteEditOperationRequestSchema,nt as SiteEditOperationSelectionRefSchema,Mn as SiteEditOperationSummarySchema,Xe as SiteEditOperationTargetSchema,L as SiteEditOperationTypeSchema,$e as SiteEditOperationValueSchema,Nn as SiteEditPatchPlanPatchSchema,Qr as SiteEditPatchPlanSchema,Q as SiteEditProvenanceChainSchema,Wn as SiteEditProvenanceHopSchema,mo as SiteEditRenderDocumentSchema,C as SiteEditRenderEntryRefSchema,Un as SiteEditRenderEntrySchema,dn as SiteEditResolveSourceLocationInputSchema,ot as SiteEditSemanticSourceSchema,Me as SiteEditSourceDeleteCapabilitySchema,rn as SiteEditSourceDirectoryPathSchema,ln as SiteEditSourceFileBinaryPreviewUnavailableReasonSchema,pn as SiteEditSourceFileBinaryResponseSchema,rr as SiteEditSourceFileKindSchema,on as SiteEditSourceFileListItemSchema,sr as SiteEditSourceFileResponseSchema,mn as SiteEditSourceFileTextResponseSchema,zr as SiteEditSourceIdentitySchema,un as SiteEditSourceLocationRangeSchema,cr as SiteEditSourceLocationSchema,Gn as SiteEditSourceLocatorRangeSchema,ct as SiteEditSourceLocatorSchema,b as SiteEditSourcePathSchema,Ue as SiteEditSourceTreeNodeSchema,or as SiteEditSourceTreeResponseSchema,sn as SiteEditSourceTreeTruncationReasonSchema,cn as SiteEditSourceTreeTruncationSchema,Je as SiteEditStyleBreakpointSchema,po as SiteEditStyleModelSchema,Qe as SiteEditStylePropertySchema,st as SiteEditStyleSourceSchema,Ze as SiteEditStyleStateModeSchema,it as SiteEditTextSegmentSchema,Fn as SiteEditTextSourceSchema,at as SiteEditWriteTargetSchema,ki as SiteGenerationStateSchema,D as SiteLocaleSchema,Ws as SiteMediaIntentSchema,w as SiteRecordSchema,Ii as SiteStatusSchema,Pi as SiteVersionListItemSchema,Ie as SiteVersionRecordSchema,zs as SitemapAddBlockInputSchema,ke as SitemapAnswerSchema,Hs as SitemapChangeBlockVariantInputSchema,Zi as SitemapDeleteBlockInputSchema,Qi as SitemapEditActorSchema,ta as SitemapEditErrorCodeSchema,ia as SitemapEditFailureSchema,ea as SitemapEditOperationSchema,Ys as SitemapEditResultSchema,na as SitemapEditSuccessSchema,wt as SitemapGenerationStageSchema,Bs as SitemapModelOutputSchema,Ks as SitemapMoveBlockInputSchema,aa as SitemapRecordSchema,Xs as SitemapRunInputSchema,q as SitemapSchema,Qs as SitemapStreamEventSchema,Ji as SitemapUpdateBlockInstructionInputSchema,Vs as SitemapUpdateBlockPropsInputSchema,Li as SitemapUserChoiceSchema,O as SkillSelectionSchema,Ui as SkillSelectionSourceSchema,Ft as SnapshotContentHashSchema,y as SnapshotFilePathSchema,W as SnapshotRecordSchema,ve as SnapshotStatusSchema,hc as StartWorkspaceRunRequestSchema,_c as StartWorkspaceRunResponseSchema,_i as THEME_PRESETS,ds as UpdateBriefRequestSchema,_s as UpdateBriefResponseSchema,nc as UpdateClarifyArchetypeRequestSchema,ps as UpdateSiteRequestSchema,be as VisualHintsSchema,Di as VisualThemeSchema,Ec as WORKSPACE_WEBSOCKET_CONTRACT,Ra as WorkspaceClientMessageSchema,Si as WorkspaceDesignApplyRequestSchema,yi as WorkspaceDesignApplyResponseSchema,je as WorkspaceDiagnosticSchema,Pa as WorkspaceDirectEditFileSchema,Ca as WorkspaceDirectEditPathSchema,Ic as WorkspaceDirectEditRequestSchema,kc as WorkspaceDirectEditResponseSchema,Ce as WorkspaceExecutionDiagnosticsSchema,rc as WorkspaceExecutionPlanSchema,ja as WorkspaceMediaRequestSchema,Oe as WorkspacePlanDependencySchema,Dt as WorkspacePlanSummarySchema,la as WorkspacePlanTaskKindSchema,we as WorkspacePlanTaskSchema,ne as WorkspaceRunKindSchema,Ea as WorkspaceSelectedComponentSchema,va as WorkspaceServerMessageSchema,$s as WorkspaceSitemapEditRequestSchema,xa as WorkspaceSocketDescriptorSchema,Ma as WorkspaceSourceFileBinaryResponseSchema,Da as WorkspaceSourceFileKindSchema,Kt as WorkspaceSourceFileListItemSchema,Ac as WorkspaceSourceFilePathQuerySchema,jc as WorkspaceSourceFileResponseSchema,La as WorkspaceSourceFileTextResponseSchema,Bt as WorkspaceSourcePathSchema,sa as WorkspaceSuggestionSchema,Ot as WorkspaceSuggestionsSchema,ca as WorkspaceSuggestionsSourceSchema,Lt as WorkspaceTaskCountsSchema,xc as WorkspaceWebSocketMessageSchema,fc as WorkspaceWebSocketMessageTypeSchema,Pe as WorkspaceWorkerGroupSchema,Ae as WorkspaceWorkerPhaseSchema,oc as WorkspaceWorkerResultSchema,A as WorkspaceWorkerStatusSchema,as as assertSiteGenerationStateTransition,is as assertSiteStatusTransition,Ke as canonicalizePageSlug,Jr as composeSiteEditRepeatInstanceKey,Pn as computeSiteEditSourceIdentityKey,F as containsSensitiveData,vn as createSiteEditCommandFailureSchema,He as createSiteEditCommandResultSchema,me as createSiteEditCommandSuccessSchema,_e as fontStack,se as getSiteEditSourceDeleteProtectionReason,Xa as isConsentGranted,Jn as isExactEditEngineVersion,Xn as isSiteEditRuntimeContainerTag,Qn as isSiteEditRuntimeTextTag,fo as isSiteEditRuntimeVoidElementTag,mr as isSiteEditSourceDeleteProtectedPath,gn as isSiteEditSourceDirectoryPath,Fe as isSiteEditSourcePath,oe as isSiteEditTextSourcePath,Dn as makeSiteEditRepeatInstanceKey,Ko as normalizeCmsPublicApiBase,bn as pageSlugToRouteFilePath,ei as parseExactEditEngineVersion,Ln as parseSiteEditRepeatInstanceKey,$r as parseSiteEditSourceIdentityKey,oi as resolveFont,ci as resolveFontDisplayName,rs as resolveGenerationStateForRunLifecycle,qa as resolveRedisConnectionConfig,Co as resolveRequestedEditEngineVersion,xo as resolveSiteEditRuntimeOperationSummary,br as resolveSiteLocaleFromIso6393,Po as resolveSystemCurrentEditEngineVersion,gi as siteFontVariables,eo as stripSiteEditRepeatInstanceKeys};
1
+ import{z as e}from"zod";var De=["queued","preparing_source","building","artifact_ready","deploying","released","lock_failed","source_prepare_failed","build_failed","artifact_fetch_failed","artifact_validation_failed","deploy_failed","cleanup_failed"];function qa(t){let i=t.VCP_REDIS_URL??t.REDIS_URL;if(i){let r=new URL(i);return{url:i,host:r.hostname,port:r.port?Number(r.port):6379,password:r.password?decodeURIComponent(r.password):void 0}}return{host:t.VCP_REDIS_HOST??"127.0.0.1",port:Vt(t.VCP_REDIS_PORT,56379)}}function Vt(t,i){if(!t)return i;let r=Number(t);return Number.isInteger(r)&&r>0?r:i}import{z as o}from"zod";var ie=o.enum(["text","url","document","image"]),ae=o.enum(["pending","ready","failed"]),zt=o.enum(["pending","ready","failed"]),$t=o.enum(["product","price","contact","copy","audience","other"]),G=o.object({fact:o.string().min(1).max(300),kind:$t,source_id:o.string().min(1),quote:o.string().min(1).max(500),trust:o.enum(["verbatim","ocr"]).default("verbatim")}),Yt=o.object({page_type:o.string().min(1).max(40),sections:o.array(o.string().min(1).max(40)).max(12)}),B=o.object({source_id:o.string().min(1),nav_structure:o.array(o.string().min(1).max(30)).max(12),page_patterns:o.array(Yt).max(10),tone:o.array(o.string().min(1).max(20)).max(8),screenshot_ref:o.string().optional()}),Xt=o.object({source_id:o.string().min(1),type:ie,status:ae,title:o.string().max(120).optional(),original_ref:o.string().min(1),source_metadata:o.record(o.string(),o.unknown()),error_code:o.string().optional()}),K=o.object({topic:o.string().min(1).max(80),variants:o.array(o.object({value:o.string().min(1).max(300),source_id:o.string().min(1)})).min(2)}),Qt=o.object({type:o.literal("text"),content:o.string().min(20).max(1e4),title:o.string().min(1).max(120).optional()}).strict(),Zt=o.object({type:o.literal("url"),url:o.string().url().max(2048),rights_ack:o.boolean().optional(),title:o.string().min(1).max(120).optional()}).strict(),Ka=o.discriminatedUnion("type",[Qt,Zt]),Ha=[".docx",".html",".md",".txt"],Va=["application/vnd.openxmlformats-officedocument.wordprocessingml.document","text/html","text/markdown","text/x-markdown","text/plain","application/octet-stream"],za=10*1024*1024,$a=2,Ya=o.object({consent_cross_border:o.union([o.literal(!0),o.literal("true")]),consent_text_version:o.string().min(1).max(120),title:o.string().min(1).max(120).optional()}).strict();function Xa(t){return t===!0||t==="true"}var Qa=[".png",".jpg",".jpeg",".webp"],Za=["image/png","image/jpeg","image/webp","application/octet-stream"],Ja=8*1024*1024,er=10,Jt=o.enum(["asset","reference"]),tr=o.object({image_role:Jt,title:o.string().min(1).max(120).optional()}).strict(),nr=o.object({version:o.literal(1),site_id:o.string().min(1),tenant_id:o.string().min(1),user_prompt:o.string(),status:zt,sources:o.array(Xt).max(16),facts:o.array(G).max(120),reference:B.optional(),conflicts:o.array(K).max(20)}).superRefine((t,i)=>{let r=new Map(t.sources.map(c=>[c.source_id,c]));for(let[c,m]of t.facts.entries()){let k=r.get(m.source_id);(!k||k.type==="url")&&i.addIssue({code:"custom",path:["facts",c,"source_id"],message:"facts must reference a text/document/image source (never url)"})}if(t.reference){let c=r.get(t.reference.source_id),m=c?.type==="image"&&c.source_metadata.image_role==="reference";(!c||c.type!=="url"&&!m)&&i.addIssue({code:"custom",path:["reference","source_id"],message:"reference must point at a url source or reference image source"})}});import{z as s}from"zod";var en=["design.md","DESIGN.md"],Le=["components/site","src/components/site","lib/generated","src/lib/generated","public"],tn=["app/globals.css","src/app/globals.css"],nn=[".cjs",".css",".cts",".html",".js",".json",".jsx",".md",".mdx",".mjs",".mts",".ts",".tsx",".txt",".yaml",".yml"],an=new Set(nn),re="source-delete",Me=s.literal(re),b=s.string().min(1).refine(Fe,"Invalid site edit source path"),rn=s.string().min(1).refine(gn,"Invalid site edit source directory path"),rr=s.enum(["text","binary"]),H=s.object({path:b,language:s.string().min(1).nullable(),sizeBytes:s.number().int().nonnegative(),contentHash:s.string().min(1).optional()}),on=s.discriminatedUnion("kind",[H.extend({kind:s.literal("text"),language:s.string().min(1),readonly:s.boolean().default(!1)}),H.extend({kind:s.literal("binary"),language:s.null(),mimeType:s.string().min(1).optional(),readonly:s.literal(!0)})]),Ue=s.lazy(()=>s.discriminatedUnion("kind",[s.object({kind:s.literal("directory"),name:s.string().min(1),path:rn,children:s.array(Ue)}),s.object({kind:s.literal("file"),name:s.string().min(1),path:b,file:on}).superRefine((t,i)=>{t.path!==t.file.path&&i.addIssue({code:"custom",path:["file","path"],message:"file.path must match node path"})})])),sn=s.enum(["max-files","max-depth","max-total-bytes"]),cn=s.object({reasons:s.array(sn).min(1),maxFiles:s.number().int().positive(),maxDepth:s.number().int().positive(),maxTotalBytes:s.number().int().positive()}),or=s.object({nodes:s.array(Ue),defaultPath:b.optional(),totalFiles:s.number().int().nonnegative(),truncated:cn.optional()}),mn=H.extend({kind:s.literal("text"),language:s.string().min(1),readonly:s.boolean().default(!1),content:s.string()}),ln=s.enum(["too-large","unsupported-mime","bytes-unavailable"]),pn=H.extend({kind:s.literal("binary"),language:s.null(),readonly:s.literal(!0),mimeType:s.string().min(1),contentBase64:s.string().min(1).optional(),previewUnavailableReason:ln.optional()}),sr=s.discriminatedUnion("kind",[mn,pn]),dn=s.object({key:s.string().min(1),routeId:s.string().min(1).optional()}),un=s.object({startLine:s.number().int().positive(),startColumn:s.number().int().nonnegative(),endLine:s.number().int().positive(),endColumn:s.number().int().nonnegative()}),cr=dn.extend({sourceFile:b,componentName:s.string().min(1),openingElementRange:un,structuralPath:s.string().min(1),textPreview:s.string().min(1).optional()});function Fe(t){return!Be(t)||Ge(t)?!1:ce(t)||qe(t)||We(t)||Le.some(i=>t===i||t.startsWith(`${i}/`))}function oe(t){return ce(t)||an.has(hn(t))}function gn(t){return!Be(t)||Ge(t)?!1:t==="app"||t.startsWith("app/")||t==="src"||t==="src/app"||t.startsWith("src/app/")||Le.some(i=>t===i||t.startsWith(`${i}/`)||i.startsWith(`${t}/`))}function se(t){return Fe(t)?ce(t)?"design-document":We(t)?"route-entry":qe(t)?"app-global-style":t.toLowerCase()==="lib/generated/media-assets.ts"||t.toLowerCase()==="src/lib/generated/media-assets.ts"?"generated-media-manifest":null:null}function mr(t){return se(t)!==null}function We(t){return/^(?:src\/)?app\/(?:.*\/)?page\.[cm]?[jt]sx?$/.test(t.toLowerCase())}function qe(t){return tn.some(i=>i.toLowerCase()===t.toLowerCase())}function hn(t){let i=t.split("/").at(-1)??t,r=i.lastIndexOf(".");return r>0?i.slice(r).toLowerCase():""}function ce(t){return!t.includes("/")&&en.some(i=>i.toLowerCase()===t.toLowerCase())}function Ge(t){let i=t.toLowerCase(),r=i.split("/"),m=(r.at(-1)??i).replace(/\.[^.]+$/,"");return/^(?:src\/)?app\/api(?:\/|$)/.test(i)||/^(?:src\/)?app\/(?:.*\/)?route\.[cm]?[jt]sx?$/.test(i)||/^(?:src\/)?app\/(?:.*\/)?(?:action|actions)\.[cm]?[jt]sx?$/.test(i)||/(^|\/)[^/]+\.server\.[cm]?[jt]sx?$/.test(i)||i==="lib/server"||i.startsWith("lib/server")||i==="src/lib/server"||i.startsWith("src/lib/server")||i==="lib/db"||i.startsWith("lib/db")||i==="src/lib/db"||i.startsWith("src/lib/db")||i==="lib/cms"||i.startsWith("lib/cms/")||i==="src/lib/cms"||i.startsWith("src/lib/cms/")?!0:m==="server"||m==="db"||m==="database"||m==="auth"||m==="secret"||m==="secrets"||m==="token"||m==="tokens"||m==="credential"||m==="credentials"||r.includes("server")||r.includes("secrets")}function Be(t){return!t||t.startsWith("/")||t.includes("\\")?!1:t.split("/").every(i=>!(i.length===0||i==="."||i===".."||i.startsWith(".")||i==="package.json"||i==="node_modules"||i==="recipes"||i.startsWith(".env")))}import{z as _n}from"zod";import{DEFAULT_SITE_LOCALE as hr,ISO_639_3_TO_SITE_LOCALE as _r,SITE_LOCALE_CODES as Sr,SUPPORTED_SITE_LOCALES as yr,resolveSiteLocaleFromIso6393 as br}from"@vcp-dev/i18n/site-locale";import{SITE_LOCALE_CODES as Sn}from"@vcp-dev/i18n/site-locale";var D=_n.enum(Sn);function yn(t){return t.replace(/[^\p{L}\p{N}-]+/gu,"-").replace(/-+/g,"-").replace(/^-+|-+$/g,"").toLowerCase()}function Ke(t){let r=(typeof t=="string"?t.trim():"").replace(/^\/+|\/+$/g,"");if(r==="")return"/";let c=r.toLowerCase();if(c==="index"||c==="home")return"/";let m=r.split("/").map(yn).filter(k=>k.length>0);return m.length===0?"/":`/${m.join("/")}`}function bn(t){let i=Ke(t);return i==="/"?"app/page.tsx":`app/${i.slice(1)}/page.tsx`}import{z as S}from"zod";var z=S.enum(["component-boundary","repeat-region","conditional-region","fragment-region","opaque-region"]),fn=S.enum(["direct","proxy","upstream","readonly","unsupported"]),xn=S.enum(["component-boundary","repeat-region","conditional-region","opaque-region","void-element","read-only","cross-file-required","import-required"]),V=S.object({mode:fn,reasonCode:S.string().min(1).optional()}),En=S.object({kind:xn,message:S.string().min(1)}),$=S.object({key:S.string().min(1),canUpdateText:S.boolean(),canInsertChild:S.boolean(),canMove:S.boolean(),canRemove:S.boolean(),editModes:S.object({updateText:V.optional(),insertChild:V.optional(),move:V.optional(),remove:V.optional()}).optional(),constraints:S.array(En)});import{z as l}from"zod";import{z as f}from"zod";var Rn=f.object({code:f.string().min(1),message:f.string().min(1)}),vr=f.object({code:f.string().min(1),message:f.string().min(1)});function me(t){return f.object({ok:f.literal(!0),data:t})}function vn(t){let i={ok:f.literal(!1),error:Rn.extend({code:t.codeSchema})};return t.currentSchema&&(i.current=t.currentSchema.optional()),t.diagnosticsSchema&&(i.diagnostics=f.array(t.diagnosticsSchema).optional()),t.dataSchema&&(i.data=t.dataSchema.optional()),f.object(i)}function He(t){return f.discriminatedUnion("ok",[me(t.dataSchema),vn({codeSchema:t.codeSchema,currentSchema:t.currentSchema,diagnosticsSchema:t.diagnosticsSchema,dataSchema:t.failureDataSchema})])}var v=l.object({start:l.number().int().nonnegative(),end:l.number().int().nonnegative(),startLine:l.number().int().positive().optional(),startColumn:l.number().int().nonnegative().optional(),endLine:l.number().int().positive().optional(),endColumn:l.number().int().nonnegative().optional()}).superRefine((t,i)=>{t.end<t.start&&i.addIssue({code:"custom",path:["end"],message:"end must be greater than or equal to start"})}),In=l.object({code:l.enum(["missing-class-name","unsupported-attribute-name","source-locator-warning","invalid-new-attr","version-conflict","write-failed"]),message:l.string().min(1)}),Ve=l.object({path:l.string().min(1),content:l.string(),hash:l.string().min(1).optional()}),Tn=l.object({revision:l.string().min(1),entryCss:Ve,stylesheets:l.array(Ve).default([]),computedStyle:l.record(l.string(),l.string()).optional()}),ze=l.object({key:l.string().min(1),routeId:l.string().min(1),filePath:l.string().min(1),componentName:l.string().min(1),sourceKind:l.enum(["missing","stringLiteral","expression"]),attrRaw:l.string().min(1).nullable(),valueRaw:l.string().min(1).nullable(),attrRange:v.nullable(),valueRange:v.nullable(),openingElementRange:v,version:l.object({documentVersion:l.number().int().nonnegative(),contentHash:l.string().min(1),parserVersion:l.string().min(1)}),diagnostics:l.array(In),styleContext:Tn.optional()}).superRefine((t,i)=>{if(t.sourceKind==="missing"){(t.attrRaw!==null||t.valueRaw!==null||t.attrRange!==null||t.valueRange!==null)&&i.addIssue({code:"custom",message:"missing className source must not include attr raw or range"});return}(t.attrRaw===null||t.valueRaw===null||t.attrRange===null||t.valueRange===null)&&i.addIssue({code:"custom",message:"present className source must include attr raw and ranges"})}),Ar=ze,jr=me(ze),le=l.object({source:l.enum(["style-panel","class-source-editor"]),operation:l.enum(["replace-static-classname","replace-expression","create-attribute","remove-attribute"])});import{z as kn}from"zod";var pe=kn.enum(["src","alt","poster","href","width","height"]);import{z as p}from"zod";import{z as a}from"zod";var L=a.enum(["update-text","update-array-item","remove-node","insert-child","move-node","set-class-name-source","set-props","apply-style-draft","source-edit"]),$e=a.lazy(()=>a.union([a.string(),a.number(),a.boolean(),a.null(),a.array($e),a.record(a.string(),$e)])),Xe=a.discriminatedUnion("kind",[a.object({kind:a.literal("node"),key:a.string().min(1)}),a.object({kind:a.literal("route"),routeId:a.string().min(1)}),a.object({kind:a.literal("source-file"),path:b}),a.object({kind:a.literal("source-batch"),paths:a.array(b).min(1)}).superRefine((t,i)=>{let r=new Set;for(let[c,m]of t.paths.entries())r.has(m)&&i.addIssue({code:"custom",path:["paths",c],message:`Duplicate source target path: ${m}`}),r.add(m)})]),Qe=a.enum(["display","position","top","right","bottom","left","zIndex","flexDirection","flexWrap","flexGrow","flexShrink","flexBasis","order","gridTemplateColumns","gridTemplateRows","columns","gridColumn","gridRow","gap","gapX","gapY","spaceX","spaceY","alignItems","justifyContent","marginTop","marginRight","marginBottom","marginLeft","paddingTop","paddingRight","paddingBottom","paddingLeft","width","height","minWidth","minHeight","maxWidth","maxHeight","overflow","fontFamily","fontSize","fontWeight","lineHeight","letterSpacing","textAlign","textTransform","textDecoration","textOverflow","textIndent","writingMode","whiteSpace","wordBreak","lineClamp","fontVariantNumeric","screenReaderOnly","color","backgroundColor","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","backgroundAttachment","backgroundClip","backgroundOrigin","borderStyle","borderWidth","borderRadius","borderColor","objectFit","objectPosition","aspectRatio","opacity","boxShadow","transform","transformOrigin","transitionProperty","transitionDuration","transitionTimingFunction","animation","pointerEvents","cursor","userSelect","fontStyle","textUnderlineOffset","scrollMarginTop","alignSelf","flex","outlineStyle","resize","ringWidth","ringColor","backdropFilter","overscrollBehavior","divideWidth","divideColor"]),Ze=a.enum(["hover","active","focus","disabled"]),Je=a.enum(["sm","md","lg","xl","2xl"]),Ye=a.union([a.object({relation:a.enum(["before","after"]),anchorKey:a.string().min(1)}),a.object({relation:a.enum(["prepend","append"]),parentKey:a.string().min(1)})]),An=a.discriminatedUnion("kind",[a.object({kind:a.literal("native-tag"),tag:a.string().min(1),text:a.string().optional()}),a.object({kind:a.literal("component-call"),component:a.object({source:a.string().min(1),exportName:a.string().min(1)}),props:a.record(a.string(),a.unknown()).optional()})]),jn=a.discriminatedUnion("kind",[a.object({kind:a.literal("update-text"),segmentIndex:a.number().int().min(0),value:a.string()}),a.object({kind:a.literal("update-array-item"),segmentIndex:a.number().int().min(0),index:a.number().int().min(0),value:a.string()}),a.object({kind:a.literal("remove-node")}),a.object({kind:a.literal("insert-child"),node:An,position:Ye}),a.object({kind:a.literal("move-node"),target:Ye,preserveBindings:a.boolean().optional()}),a.object({kind:a.literal("set-class-name-source"),routeId:a.string().min(1).optional(),filePath:a.string().min(1),expectedVersion:a.object({documentVersion:a.number().int().nonnegative(),contentHash:a.string().min(1)}),oldAttrRaw:a.string().min(1).nullable(),oldAttrRange:v.nullable(),openingElementRange:v,newAttrRaw:a.string().min(1).nullable(),intent:le}),a.object({kind:a.literal("set-props"),props:a.partialRecord(pe,a.string())}),a.object({kind:a.literal("apply-style-draft"),className:a.object({routeId:a.string().min(1).optional(),filePath:a.string().min(1),expectedVersion:a.object({documentVersion:a.number().int().nonnegative(),contentHash:a.string().min(1)}),oldAttrRaw:a.string().min(1).nullable(),oldAttrRange:v.nullable(),openingElementRange:v,newAttrRaw:a.string().min(1).nullable(),intent:le}).optional(),props:a.partialRecord(pe,a.string()).optional()}).superRefine((t,i)=>{!t.className&&!t.props&&i.addIssue({code:"custom",message:"apply-style-draft requires className or props"})}),a.object({kind:a.literal("source-edit"),conflictPolicy:a.enum(["compare-and-swap","overwrite"]),edits:a.array(a.discriminatedUnion("operation",[a.object({operation:a.literal("upsert"),path:b,content:a.string(),baseContentHash:a.string().min(1).nullable().optional()}).strict().superRefine((t,i)=>{oe(t.path)||i.addIssue({code:"custom",path:["path"],message:"source-edit upsert only accepts allowlisted text source files"}),t.content.includes("\0")&&i.addIssue({code:"custom",path:["content"],message:"source-edit content must be valid text"})}),a.object({operation:a.literal("delete"),path:b,capability:Me,confirmDelete:a.literal(!0),confirmPath:b,baseContentHash:a.string().min(1).nullable().optional()}).strict().superRefine((t,i)=>{t.capability!==re&&i.addIssue({code:"custom",path:["capability"],message:"delete requires source-delete capability"}),t.confirmPath!==t.path&&i.addIssue({code:"custom",path:["confirmPath"],message:"delete confirmation path must match edit path"}),oe(t.path)||i.addIssue({code:"custom",path:["path"],message:"source-edit delete only accepts allowlisted text source files"});let r=se(t.path);r&&i.addIssue({code:"custom",path:["path"],message:`Protected source file cannot be deleted: ${t.path} (${r})`})})])).min(1),reason:a.string().min(1).optional()}).strict().superRefine((t,i)=>{let r=new Set;for(let[c,m]of t.edits.entries())r.has(m.path)&&i.addIssue({code:"custom",path:["edits",c,"path"],message:`Duplicate source edit path: ${m.path}`}),r.add(m.path),t.conflictPolicy==="compare-and-swap"&&m.baseContentHash===void 0&&i.addIssue({code:"custom",path:["edits",c,"baseContentHash"],message:"source-edit compare-and-swap requires baseContentHash for every edit"})})]),et=a.enum(["NODE_NOT_FOUND","ROUTE_NOT_FOUND","CAPABILITY_REJECTED","CONSTRAINT_VIOLATED","INVALID_PARAMS","PLAN_FAILED","VERSION_STALE","AST_PARSE_ERROR","UNSUPPORTED_OPERATION","LOCATOR_FAILED","INVALID_TARGET","WRITE_IO_ERROR","CONCURRENT_MODIFIED","ROLLBACK_FAILED","INTERNAL_ERROR"]),tt=a.object({code:et,message:a.string().min(1),details:a.record(a.string(),a.unknown()).optional()}),nt=a.object({key:a.string().min(1),instanceIndex:a.number().int().nonnegative().optional(),instanceCount:a.number().int().positive().optional()}),Ur=a.object({id:a.string().min(1),siteId:a.string().min(1),baseSnapshotId:a.string().min(1),routeId:a.string().min(1).optional(),kind:L,target:Xe,documentVersion:a.number().int().nonnegative(),selectionRef:nt.optional(),params:jn}).superRefine((t,i)=>{if(t.kind!==t.params.kind&&i.addIssue({code:"custom",path:["params","kind"],message:"params.kind must match operation kind"}),t.kind==="source-edit"){if(t.target.kind!=="source-file"&&t.target.kind!=="source-batch")i.addIssue({code:"custom",path:["target","kind"],message:"source-edit requires a source-file or source-batch target"});else if(t.params.kind==="source-edit"){let r=t.params.edits.map(m=>m.path),c=t.target.kind==="source-file"?[t.target.path]:t.target.paths;Cn(r,c)||i.addIssue({code:"custom",path:["target"],message:"source-edit target paths must match edit paths"})}}else(t.target.kind==="source-file"||t.target.kind==="source-batch")&&i.addIssue({code:"custom",path:["target","kind"],message:"source targets are only valid for source-edit"})}),Y=a.object({requestId:a.string().min(1),kind:L,target:Xe,resultVersion:a.number().int().nonnegative(),affectedFiles:a.array(a.string().min(1)).optional(),selectionRef:nt.optional()}),Fr=He({dataSchema:Y,codeSchema:et,failureDataSchema:Y.partial()});function Cn(t,i){return t.length===i.length&&t.every((r,c)=>r===i[c])}var Kr=p.discriminatedUnion("type",[p.object({type:p.literal("site-edit.document.changed"),siteId:p.string().min(1),snapshotId:p.string().min(1),routeId:p.string().min(1),version:p.number().int().nonnegative(),at:p.string().min(1)}),p.object({type:p.literal("site-edit.operation.planned"),siteId:p.string().min(1),operationId:p.string().min(1),baseSnapshotId:p.string().min(1),changedFiles:p.array(p.string().min(1)),at:p.string().min(1)}),p.object({type:p.literal("site-edit.operation.completed"),siteId:p.string().min(1),result:Y,at:p.string().min(1)}),p.object({type:p.literal("site-edit.operation.failed"),siteId:p.string().min(1),requestId:p.string().min(1),error:tt,at:p.string().min(1)}),p.object({type:p.literal("site-edit.capability.changed"),siteId:p.string().min(1),routeId:p.string().min(1),keys:p.array(p.string().min(1)),at:p.string().min(1)})]);import{z as M}from"zod";var X="::",zr=M.object({file:M.string().min(1),component:M.string().min(1),structuralPath:M.string().min(1),key:M.string().min(1)}).superRefine((t,i)=>{let r=Pn(t.file,t.component,t.structuralPath);t.key!==r&&i.addIssue({code:"custom",path:["key"],message:"key must match file::component::structuralPath"})});function Pn(t,i,r){return`${t}${X}${i}${X}${r}`}function $r(t){let[i,r,...c]=t.split(X);return!i||!r||c.length===0?null:{file:i,component:r,structuralPath:c.join(X)}}import{z as _}from"zod";var wn=_.string().min(1).refine(t=>!t.startsWith("/")&&!t.includes(".."),{message:"Patch paths must be safe relative POSIX paths."}),On=_.string().regex(/^sha256:[a-f0-9]{64}$/),Nn=_.object({path:wn,operation:_.enum(["create","update","delete"]),expectedHash:On.optional(),fullContent:_.string().optional()}).superRefine((t,i)=>{t.operation==="delete"&&t.fullContent!==void 0&&i.addIssue({code:"custom",path:["fullContent"],message:"delete patches must not include fullContent"}),t.operation!=="delete"&&t.fullContent===void 0&&i.addIssue({code:"custom",path:["fullContent"],message:"create/update patches must include fullContent"})}),Qr=_.object({siteId:_.string().min(1),baseSnapshotId:_.string().min(1),operationId:_.string().min(1),reason:_.string().min(1),patches:_.array(Nn).min(1),changedRouteIds:_.array(_.string().min(1)),diagnostics:_.array(_.object({code:_.string().min(1),message:_.string().min(1),path:_.string().min(1).optional()})).default([])}).superRefine((t,i)=>{let r=new Set;for(let[c,m]of t.patches.entries())r.has(m.path)&&i.addIssue({code:"custom",path:["patches",c,"path"],message:`Duplicate patch path: ${m.path}`}),r.add(m.path)});var de="::repeat-item#";function Dn(t,i){return`${t}${de}${i}`}function Jr(t,i){return i.reduce((r,c)=>Dn(r,c),t)}function Ln(t){if(typeof t!="string"||t.length===0)return null;let i=[],r=t;for(;;){let c=r.lastIndexOf(de);if(c<0)break;let m=Number(r.slice(c+de.length));if(!Number.isInteger(m)||m<0)return null;i.unshift({repeatIndex:m}),r=r.slice(0,c)}return!r||i.length===0?null:{baseKey:r,parts:i}}function eo(t){return Ln(t)?.baseKey??t??null}import{z as n}from"zod";var Mn=n.object({canUpdateText:n.boolean(),canInsertChild:n.boolean(),canMove:n.boolean(),canRemove:n.boolean()}),Un=n.object({key:n.string().min(1),tag:n.string().min(1),label:n.string().min(1),parentKey:n.string().min(1).nullable(),childKeys:n.array(n.string().min(1)),operationSummary:Mn}),mo=n.object({siteId:n.string().min(1),snapshotId:n.string().min(1),routeId:n.string().min(1),version:n.number().int().nonnegative(),rootKeys:n.array(n.string().min(1)),entries:n.array(Un)}),ue=n.enum(["api-field","cms-field","i18n-message","config-entry"]),Fn=n.object({kind:n.enum(["literal","binding","imported-binding","repeat-template"]),file:n.string().min(1),expression:n.string().min(1),bindingName:n.string().min(1).optional(),path:n.array(n.union([n.string(),n.number()])).optional()}),it=n.object({index:n.number().int().min(0),value:n.string(),editable:n.boolean(),source:Fn.nullable()}),C=n.object({key:n.string().min(1),label:n.string().min(1),tag:n.string().min(1)}),lo=n.object({key:n.string().min(1),canUpdateText:n.boolean(),canInsertChild:n.boolean(),canMove:n.boolean(),canRemove:n.boolean(),boundaryKind:z.nullable(),isOpaque:n.boolean()}),at=n.object({kind:n.enum(["jsx-node","component-proxy","value-binding","route-export"]),file:n.string().min(1),componentName:n.string().min(1),isProxy:n.boolean()}),rt=n.object({kind:n.enum(["jsx-node","value-path","route-export","external-entry"]),file:n.string().min(1).optional(),isProxy:n.boolean(),displayPath:n.string().min(1).optional(),sourceType:ue.optional(),sourceId:n.string().min(1).optional()}),ot=n.object({kind:n.union([n.enum(["jsx-literal","component-prop","binding","imported-binding","object-field","array-item","repeat-template","conditional-branch"]),ue]),file:n.string().min(1),displayPath:n.string().min(1),externalSource:n.object({sourceType:ue,sourceId:n.string().min(1),adapterId:n.string().min(1).optional()}).optional()}),Wn=n.object({kind:ot.shape.kind,file:n.string().min(1),displayName:n.string().min(1),canEditHere:n.boolean()}),Q=n.object({finalSource:ot.nullable(),chain:n.array(Wn),confidence:n.enum(["exact","safe-derived","partial","unknown"]),editMode:n.enum(["direct","proxy","upstream","readonly","unsupported"]),diagnostics:n.array(n.object({code:n.string().min(1),message:n.string().min(1)}))}),qn=n.object({kind:n.literal("css-style-model"),properties:n.array(n.object({property:Qe,value:n.union([n.string(),n.number(),n.boolean(),n.null()]),resolvedValue:n.union([n.string(),n.number(),n.boolean(),n.null()]).optional(),breakpoint:Je.optional(),state:Ze.optional(),variants:n.array(n.string().min(1)).optional(),options:n.array(n.union([n.string(),n.number()])).optional(),editable:n.boolean(),diagnostics:n.array(n.object({code:n.string().min(1),message:n.string().min(1)})).optional(),operationBoundary:n.array(L).optional()}))}),po=n.union([n.record(n.string(),n.unknown()),qn]),st=n.object({kind:n.literal("class-name-source"),className:n.string(),sourceKind:n.enum(["missing","static-attribute","static-expression","dynamic-expression"]),editable:n.boolean(),operationBoundary:n.array(L),sourcePath:n.string().min(1).optional(),diagnostics:n.array(n.object({code:n.enum(["missing-class-name","dynamic-binding","non-string-binding"]),message:n.string().min(1)})).optional()}),Gn=n.object({startLine:n.number().int().positive(),startColumn:n.number().int().nonnegative(),endLine:n.number().int().positive(),endColumn:n.number().int().nonnegative()}),ct=n.object({sourceFile:n.string().min(1),componentName:n.string().min(1),openingElementRange:Gn,structuralPath:n.string().min(1),textPreview:n.string().min(1).optional()}),uo=n.object({key:n.string().min(1),tag:n.string().min(1),componentName:n.string().min(1),sourceFile:n.string().min(1),sourceLocator:ct.optional(),label:n.string().min(1),capabilities:$,writeTarget:at,effectiveWriteTarget:rt.optional(),provenanceChain:Q.optional(),componentSemantic:n.record(n.string(),n.unknown()).optional(),contentModel:n.record(n.string(),n.unknown()).optional(),mediaModel:n.record(n.string(),n.unknown()).optional(),styleSource:st.optional(),conditional:n.record(n.string(),n.unknown()).optional(),textSegments:n.array(it),boundaryKind:z.nullable(),isOpaque:n.boolean(),ancestors:n.array(C),children:n.array(C),siblings:n.array(C)}),go=n.object({key:n.string().min(1),tag:n.string().min(1),label:n.string().min(1),sourceLocator:ct.optional(),capabilities:n.object({constraints:$.shape.constraints}),isOpaque:n.boolean(),provenanceChain:n.object({editMode:Q.shape.editMode,diagnostics:Q.shape.diagnostics}).optional(),ancestors:n.array(C)}),ho=n.object({key:n.string().min(1),componentName:n.string().min(1),sourceFile:n.string().min(1),capabilities:$,writeTarget:at,effectiveWriteTarget:rt.optional(),provenanceChain:Q.optional(),componentSemantic:n.record(n.string(),n.unknown()).optional(),textSegments:n.array(it),boundaryKind:z.nullable(),children:n.array(C),siblings:n.array(C)}),_o=n.object({key:n.string().min(1),mediaModel:n.record(n.string(),n.unknown()).optional(),styleSource:st.optional()}),So=n.object({key:n.string().min(1),contentModel:n.record(n.string(),n.unknown()).optional()}),yo=n.object({key:n.string().min(1),mediaModel:n.record(n.string(),n.unknown()).optional()});var Bn=["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"],Kn=["article","aside","div","footer","form","header","li","main","nav","ol","section","select","table","tbody","tfoot","thead","tr","ul"],Hn=["a","button","em","h1","h2","h3","h4","h5","h6","label","p","small","span","strong"],Vn=new Set(Bn),zn=new Set(Kn),$n=new Set(Hn),Yn={canUpdateText:!1,canInsertChild:!1,canMove:!1,canRemove:!1};function fo(t){return Vn.has(ge(t))}function Xn(t){return zn.has(ge(t))}function Qn(t){return $n.has(ge(t))}function xo(t){let{operationSummary:i}=t;return i?{canUpdateText:i.canUpdateText,canInsertChild:i.canInsertChild,canMove:i.canMove,canRemove:i.canRemove}:t.fallbackMode!=="preview"?{...Yn}:{canUpdateText:Qn(t.tagName),canInsertChild:Xn(t.tagName),canMove:!1,canRemove:!1}}function ge(t){return t?.trim().toLowerCase()??""}var Ro={PATCH_VALIDATION_FAILED:"The code didn't pass validation. Try describing the change more specifically.",PATCH_BATCH_FAILED:"The site code couldn't be generated. Please regenerate the site.",PATCH_BATCH_INVALID:"The change couldn't be applied. Try simpler instructions.",VALIDATION_FAILED:"Your message couldn't be sent as written. Please edit it and try again.",WORKSPACE_MESSAGE_CONTAINS_SECRET:"Your message looks like it contains a secret or token, so it wasn't sent. Remove it and try again.",WORKSPACE_TOOL_RESULT_INVALID:"This change couldn't be completed and was rolled back. Please try again.",WORKSPACE_TOOL_FAILED:"A tool step failed. Please try again.",WORKSPACE_TOOL_RESULT_MISSING:"The tool didn't return a usable result. Please try again.",WORKSPACE_MODEL_STREAM_FAILED:"The model stream ended unexpectedly. Please try again.",WORKSPACE_MODEL_STREAM_ABORTED:"Generation was interrupted before finishing. Please try again.",MODEL_OUTPUT_TRUNCATED:"The response was too long and was cut off before any change was applied. Try again, or split the request into smaller changes.",WORKSPACE_EDIT_NOT_APPLIED:"No change was applied. Try describing the change differently.",WORKSPACE_INITIAL_EXECUTION_FAILED:"Initial generation failed. Please retry from the brief.",WORKSPACE_INITIAL_GENERATION_CHECK_FAILED:"Initial generation could not be verified. Please retry.",WORKSPACE_INITIAL_GENERATION_FINALIZE_FAILED:"Initial generation could not finalize. Please retry.",WORKSPACE_INITIAL_GENERATION_QUALITY_GATE_FAILED:"Initial generation failed quality checks. Please regenerate the site.",WORKSPACE_ITERATION_QUALITY_GATE_FAILED:"Quality check failed. The change was rolled back; try a smaller or more specific request.",WORKSPACE_SOCKET_DEAD:"The workspace connection was lost. Please retry.",WORKSPACE_RUN_CANCELLED:"The run was cancelled.",WORKSPACE_RUN_ABANDONED:"This run was interrupted and did not finish. Please try again.",WORKSPACE_RUN_REQUEST_FAILED:"Couldn't start the workspace. Please try again.",WORKSPACE_RUN_BAD_RESPONSE:"The server response was malformed. Please try again.",WORKSPACE_SOCKET_UNAVAILABLE:"Workspace connection unavailable. Please try again.",WORKSPACE_SOCKET_ERROR:"The workspace connection had an error. Please try again.",WORKSPACE_SOCKET_CLOSED:"The workspace connection closed. Please try again.",WORKSPACE_SOCKET_OPEN_TIMEOUT:"Couldn't reach the workspace in time. Please try again.",WORKSPACE_CLIENT_MESSAGE_ID_MISSING:"Something went wrong sending your message. Please try again.",SITE_SNAPSHOT_REQUIRED:"This site has no usable snapshot yet. Complete Step 3 first.",AGENT_TIMEOUT:"That took longer than expected. Try breaking the change into smaller pieces.",SANDBOX_NOT_AVAILABLE:"The preview environment isn't ready. Your edits have still been saved.",PREVIEW_BUILD_FAILED:"Preview is available, but the production build failed. Fix the reported build error before deploying.",PREVIEW_BUILD_NOT_CONFIGURED:"Preview is available, but the production build check is not configured.",PREVIEW_BUILD_SANDBOX_NOT_FOUND:"Preview is available, but the build check could not find the active preview sandbox.",WS_CONNECTION_ERROR:"Connection lost. Reconnecting\u2026",USER_MESSAGE_PERSIST_FAILED:"Your message wasn't saved. Please send it again.",CLARIFICATION_REPLY_STALE:"That question has expired. Please tell me what you'd like to do now.",CLARIFY_MODEL_FAILED:"Clarify couldn't finish generating questions. Please try again.",WORKSPACE_RUN_IN_FLIGHT:"Another session is already running. Please try again in a moment.",SITE_OPERATION_LOCKED:"Another change is already running for this site. Wait for it to finish, then try again.",EDIT_ENGINE_VERSION_INVALID:"Invalid editor version. Refresh the page and try again.",SANDBOX_DEPENDENCY_SYNC_FAILED:"The preview runtime could not be prepared. Please try again.",SANDBOX_DEPENDENCY_VERSION_MISMATCH:"The preview runtime could not be verified. Please try again.",SANDBOX_RUNTIME_NOT_READY:"The preview needs to be refreshed before this change can be applied. Refresh the preview and try again.",GENERIC:"Something went wrong. Please try again."},vo={UNDO_OR_ROLLBACK:"I can't roll back from chat. Use the version history at the top right to pick a restore point.",HISTORY_RECALL:"Tell me what you'd like to change now\u2014I'll work from the current page state.",OUT_OF_SCOPE:"That's outside what I can do from chat. Try the corresponding panel on the right."},Io={CARD_HEADER:"Needs your confirmation",FREE_TEXT_PLACEHOLDER:"Or describe what you'd like instead",SUBMIT_LABEL:"Submit"},To={SEND_FAILED_RETRY:"Send failed \u2014 tap to retry"};var mt="0.4.3",Ao="x-vcp-edit-engine-version",jo="x-vcp-edit-engine-version-source",he=class extends Error{constructor(i="Invalid edit-engine version."){super(i),this.code="EDIT_ENGINE_VERSION_INVALID",this.name="EditEngineVersionParseError"}},Zn=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-[0-9A-Za-z]+(?:\.[0-9A-Za-z]+)*)?$/;function Jn(t){return Zn.test(t)}function ei(t){if(typeof t!="string"||!Jn(t))throw new he;return t}function Co(t){return t==null?{version:mt,source:"fallback_current"}:{version:ei(t),source:"explicit"}}function Po(){return{version:mt,source:"system_current"}}import{z as d}from"zod";var ti=["title","text","richtext","number","boolean","date","datetime","url","email","color","select","multiselect","tag"],lt=d.object({name:d.string().min(1).max(100),type:d.enum(ti),label:d.string().min(1).max(255),required:d.boolean().optional(),options:d.array(d.string()).optional()}),No=d.object({name:d.string(),cms_type:d.string(),label:d.string().optional(),required:d.boolean().optional(),value_shape:d.string().optional(),front_display:d.enum(["visible","internal","forbidden"]).optional(),choices:d.array(d.object({value:d.union([d.string(),d.number()]),label:d.string()})).optional()}),Do=d.object({route_file_path:d.string().min(1),target_component_path:d.string().min(1),content_type_hint:d.string().min(1),required_fields:d.array(lt).optional(),mode:d.enum(["bind_existing","provision"]),list_mode:d.enum(["page","embedded"]).optional(),fields:d.array(lt).optional(),seed_records:d.array(d.record(d.string(),d.unknown())).optional()});import{z as h}from"zod";var ni=["text","textarea","email","phone","select","radio","multiselect","boolean","date","number"],ii=h.object({name:h.string().min(1).max(100),type:h.enum(ni),label:h.string().min(1).max(255),required:h.boolean().optional(),options:h.array(h.string()).optional()}),Uo=h.object({form_hint:h.string().min(1),mode:h.enum(["bind_existing","provision"]),component_slug:h.string().regex(/^[a-z][a-z0-9-]{0,48}$/).optional(),name:h.string().min(1).max(255).optional(),description:h.string().min(1).max(1e3).optional(),fields:h.array(ii).optional()}),Fo=h.object({name:h.string(),label:h.string(),cms_type:h.string(),required:h.boolean()});import{z as x}from"zod";var ai=["provisioning","cms_app_created","seeded","ready","failed"],Go=x.object({tenant_id:x.string().min(1),site_id:x.string().min(1),collection_slug:x.string().min(1),cms_collection_id:x.string().min(1).nullable(),status:x.enum(ai),owned_by_vcp:x.boolean(),run_id:x.string().min(1).nullable(),last_error:x.string().nullable(),created_at:x.string().datetime(),updated_at:x.string().datetime()});var pt="/vibe/v1";function Ko(t){let i=t?.trim().replace(/\/+$/,"");if(!i)return null;try{let r=new URL(i),c=r.pathname.replace(/\/+$/,"");return r.search="",r.hash="",r.pathname=c.endsWith(pt)?c:pt,r.href.replace(/\/+$/,"")}catch{return i}}var U={Inter:{import:"Inter"},"Inter Tight":{import:"Inter_Tight"},"DM Sans":{import:"DM_Sans"},"Source Sans 3":{import:"Source_Sans_3"},"Libre Franklin":{import:"Libre_Franklin"},Montserrat:{import:"Montserrat"},Archivo:{import:"Archivo"},"Space Grotesk":{import:"Space_Grotesk"},Manrope:{import:"Manrope"},"IBM Plex Sans":{import:"IBM_Plex_Sans"},Oswald:{import:"Oswald"},"Roboto Condensed":{import:"Roboto_Condensed"},"Bebas Neue":{import:"Bebas_Neue",weights:["400"]},"Playfair Display":{import:"Playfair_Display"},Lora:{import:"Lora"},Fraunces:{import:"Fraunces"},"Cormorant Garamond":{import:"Cormorant_Garamond"},"JetBrains Mono":{import:"JetBrains_Mono"},"IBM Plex Mono":{import:"IBM_Plex_Mono"},"Noto Sans SC":{import:"Noto_Sans_SC",download:!1},"Noto Serif SC":{import:"Noto_Serif_SC",download:!1}},ri={heading:"Inter",body:"Inter"},dt=U.Inter;function Z(t){return t.trim().replace(/\s+/g,"_").toLowerCase()}var _t=(()=>{let t=new Map;for(let[i,r]of Object.entries(U))t.set(Z(i),r),t.set(Z(r.import),r);return t})();function oi(t){return typeof t!="string"||t.trim().length===0?dt:_t.get(Z(t))??dt}var si=(()=>{let t=new Map;for(let[i,r]of Object.entries(U))t.set(r.import,i);return t})();function ci(t){if(typeof t!="string"||t.trim().length===0)return"Inter";let i=_t.get(Z(t));return i?si.get(i.import)??"Inter":"Inter"}var mi=Object.keys(U),ut='ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif',gt='Georgia, "Times New Roman", serif',ht='"SFMono-Regular", Consolas, monospace',li=new Set(["serif","sans-serif","sans serif","monospace","mono","cursive","fantasy","system-ui","ui-serif","ui-sans-serif","ui-monospace"]),pi=new Set(["Playfair Display","Lora","Fraunces","Cormorant Garamond","Noto Serif SC"].map(t=>t.toLowerCase())),di=new Set(["JetBrains Mono","IBM Plex Mono"].map(t=>t.toLowerCase()));function ui(t){let i=t.toLowerCase();return di.has(i)||i.includes("mono")?"mono":pi.has(i)||i.includes("serif")?"serif":"sans"}function _e(t,i){let r=j=>(j??"").trim().replace(/^['"]|['"]$/g,"").replace(/[^A-Za-z0-9 _-]+/g,"").trim().slice(0,60),c=r(t),m=r(i),k=j=>li.has(j.toLowerCase());if(c&&k(c)){let j=c.toLowerCase();return j.includes("mono")?ht:j.includes("serif")?gt:ut}let R=c;R||(R=k(m)?"":m),R||(R="Inter");let Ne=ui(R);return Ne==="mono"?`"${R}", ${ht}`:Ne==="serif"?`"${R}", ${gt}`:`"${R}", ${ut}`}function gi(t){return{"--site-font-sans":_e(t?.body,"Inter"),"--site-font-heading":_e(t?.heading,t?.body??"Inter")}}var hi=[{id:"archivo-inter",heading:"Archivo",body:"Inter"},{id:"playfair-source-sans",heading:"Playfair Display",body:"Source Sans 3"},{id:"space-grotesk-manrope",heading:"Space Grotesk",body:"Manrope"},{id:"fraunces-libre-franklin",heading:"Fraunces",body:"Libre Franklin"},{id:"noto-serif-sc-noto-sans-sc",heading:"Noto Serif SC",body:"Noto Sans SC"},{id:"noto-sans-sc",heading:"Noto Sans SC",body:"Noto Sans SC"}];var _i=[{id:"ocean",colorSeeds:{primary:"#1e3a5f",accent:"#2563eb"}},{id:"forest",colorSeeds:{primary:"#14532d",accent:"#16a34a"}},{id:"clay",colorSeeds:{primary:"#7c2d12",accent:"#ea580c"}},{id:"violet",colorSeeds:{primary:"#3b0764",accent:"#7c3aed"}},{id:"graphite",colorSeeds:{primary:"#1f2937",accent:"#0d9488"}},{id:"crimson",colorSeeds:{primary:"#7f1d1d",accent:"#dc2626"}}];import{z as E}from"zod";var Si=E.object({colorSeeds:E.object({primary:E.string().min(1).max(40),accent:E.string().min(1).max(40)}).strict().optional(),fonts:E.object({heading:E.string().min(1).max(60),body:E.string().min(1).max(60)}).strict().optional()}).strict().refine(t=>t.colorSeeds!==void 0||t.fonts!==void 0,{message:"colorSeeds or fonts is required"}),yi=E.object({ok:E.literal(!0),design_plan_version:E.number().int().positive(),snapshot_id:E.string().min(1)});var be=e.object({heading:e.string().min(1).max(160).optional(),body:e.string().min(1).max(160).optional(),paletteIntent:e.string().min(1).max(400).optional(),surfaceMode:e.enum(["light","dark"]).optional(),radius:e.enum(["none","sm","md","lg","xl"]).optional(),density:e.enum(["compact","comfortable","editorial"]).optional(),colorSeeds:e.object({primary:e.string().min(1).max(40),accent:e.string().min(1).max(40),neutral:e.string().min(1).max(40).optional(),supporting:e.array(e.string().min(1).max(40)).max(4).optional()}).optional(),imagePalette:e.object({background:e.string().min(1).max(40).optional(),foreground:e.string().min(1).max(40).optional(),card:e.string().min(1).max(40).optional(),muted:e.string().min(1).max(40).optional(),border:e.string().min(1).max(40).optional()}).optional()}),fe=e.object({protocol:e.enum(["phone","form","download","route","external"]),ctaLabel:e.string().min(1).max(40),ctaTarget:e.string().min(1).max(200).optional(),requiresOwnerDetail:e.boolean().optional()}),Se=e.enum(["material","reference","brief","industry"]),bi=e.object({market:e.object({value:e.string().min(1).max(200),source:Se}),customer:e.object({value:e.string().min(1).max(200),source:Se}),purpose:e.object({options:e.array(e.string().min(1).max(60)).min(2).max(4),selected:e.string().min(1).max(60),source:Se})}),fi=e.enum(["text-options","motion-slider","positioning"]),xe=e.enum(["none","subtle","moderate","expressive"]),xi=e.enum(["compact","comfortable","editorial"]),Ei=xe,bt=e.object({skill_name:e.string().min(1),rationale:e.string().min(4).max(200),confidence:e.enum(["high","medium","low"]).optional(),displayName:e.object({zh:e.string().min(1),en:e.string().min(1)}).partial().optional()}),Ri=e.object({value:e.string(),label:e.string(),desc:e.string().optional(),impact:e.string().optional(),isRecommended:e.boolean().optional(),preselect:e.boolean().optional(),visualHints:be.optional(),conversionHints:fe.optional()}),vi=e.object({id:e.string(),type:fi,question:e.string(),tag:e.string(),aiThinking:e.string(),options:e.array(Ri),source:e.enum(["ai-detected","always-ask"]),sourceDetail:e.string(),positioning:bi.optional()}),Ee=e.object({questions:e.array(vi).min(1).max(5)}),ts=e.object({tenant_id:e.string().min(1),site_id:e.string().min(1),brief_id:e.string().min(1),brief:e.string().min(20).max(1e3),site_default_locale:D.optional(),input_context:e.object({facts:e.array(G).max(120),conflicts:e.array(K).max(20),reference:B.optional(),sources:e.array(e.object({type:ie,title:e.string().max(120).optional(),status:ae})).max(16).optional()}).optional()}),ft=e.enum(["model_schema_invalid","provider_rate_limited","provider_unavailable","aborted","unknown"]),ns=e.discriminatedUnion("type",[e.object({type:e.literal("run.started"),runId:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("skill.selecting"),category:e.literal("page-generation"),available:e.array(e.object({id:e.string().min(1),name:e.string().min(1)})).max(20),at:e.string().min(1)}),e.object({type:e.literal("skill.selected"),category:e.literal("page-generation"),selected:e.object({id:e.string().min(1),name:e.string().min(1),reason:e.string().min(1).max(200)}),at:e.string().min(1)}),e.object({type:e.literal("clarify.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("clarify.archetype_proposals"),proposals:e.array(bt).min(1).max(5),at:e.string().min(1)}),e.object({type:e.literal("clarify.finished"),questions_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("run.failed"),error_code:e.string().min(1),message:e.string().min(1),error_category:ft.optional(),retryable:e.boolean().optional(),attempts:e.number().int().positive().optional(),at:e.string().min(1)}),e.object({type:e.literal("run.finished"),at:e.string().min(1)})]),Ii=e.enum(["draft","brief_submitted","clarifying","sitemap_ready","workspace_ready","deployed","archived","error"]),Ti={draft:["brief_submitted","archived","error"],brief_submitted:["clarifying","archived","error"],clarifying:["sitemap_ready","archived","error"],sitemap_ready:["workspace_ready","archived","error"],workspace_ready:["deployed","archived","error"],deployed:["workspace_ready","archived","error"],archived:[],error:["draft","brief_submitted","clarifying","sitemap_ready"]};function is(t,i){if(!Ti[t].includes(i))throw new Error(`Invalid site status transition: ${t} -> ${i}`);return i}var ki=e.enum(["planning","initial_generation_running","generated"]),Ai={planning:["initial_generation_running"],initial_generation_running:["generated","planning"],generated:[]};function as(t,i){if(t===i)return i;if(!Ai[t].includes(i))throw new Error(`Invalid site generation state transition: ${t} -> ${i}`);return i}function rs(t){if(t.agent_type!=="workspace"||t.current_state==="generated")return null;switch(t.event_type){case"run.started":return t.current_state==="planning"?"initial_generation_running":null;case"run.finished":return t.current_state==="initial_generation_running"?"generated":null;case"run.failed":return t.current_state==="initial_generation_running"?"planning":null;default:return null}}var os="SITE_PLANNING_INPUT_FROZEN",ss="SITE_PLANNING_LOCKED",cs=e.object({tenant_id:e.string().min(1),owner_user_id:e.string().min(1),name:e.string().min(1).max(120),brief:e.string().min(20).max(1e3)}),ms=e.object({name:e.string().min(1).max(120),brief:e.string().min(20).max(1e3)}),ls=e.object({name:e.string().min(1).max(120)}),ps=e.object({name:e.string().min(1).max(120),default_locale:D.optional()}),ds=e.object({body:e.string().min(20).max(1e3)}),Re=e.string().url().refine(t=>{try{let i=new URL(t).protocol;return i==="http:"||i==="https:"}catch{return!1}},{message:"URL must use http or https protocol"}),us=e.object({tenant_id:e.string().min(1),site_url:Re}),ji=t=>e.object({code:e.number().int(),data:t,message:e.string()}),gs=ji(e.object({site_id:e.string().min(1),site_url:Re})),w=e.object({id:e.string().min(1),tenant_id:e.string().min(1),owner_user_id:e.string().min(1).nullable(),name:e.string().min(1),slug:e.string().min(1),status:Ii,generation_state:ki,planning_locked_at:e.string().min(1).nullable(),current_sitemap_id:e.string().min(1).nullable(),current_snapshot_id:e.string().min(1).nullable(),deployed_url:e.string().url().nullable(),default_locale:D,cms_site_id:e.string().nullable().optional(),cms_site_url:Re.nullable().optional(),schema_version:e.literal(1),created_at:e.string().min(1),updated_at:e.string().min(1)}),xt=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),body:e.string().min(1),source:e.enum(["user","import","system"]),created_at:e.string().min(1),updated_at:e.string().min(1)}),hs=e.object({site:w,brief:xt,next_step:e.literal("clarify")}),_s=e.object({site:w,brief:xt}),Ci=e.enum(["queued","running","succeeded","failed","cancelled"]),Et=e.enum(["clarify","sitemap","workspace"]),Rt=e.enum(["clarify","sitemap","initial_generation","iteration"]),vt=e.enum(["clarify","sitemap","workspace","summarize"]),T=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),agent_type:Et,run_kind:Rt,status:Ci,model_route:vt,started_at:e.string().min(1).nullable(),finished_at:e.string().min(1).nullable(),error_code:e.string().min(1).nullable(),created_at:e.string().min(1)}),Ss=e.object({run_id:e.string().min(1).optional(),site_id:e.string().min(1),agent_type:Et,run_kind:Rt.optional(),model_route:vt,input:e.record(e.string(),e.unknown()).optional()}).superRefine((t,i)=>{F(t.input)&&i.addIssue({code:"custom",path:["input"],message:"Agent run input must not contain secrets"})}),ys=e.object({agent_run:T,next_step:e.literal("stream_events")}),ve=e.enum(["draft","candidate","current","failed"]),W=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),version:e.number().int().positive(),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),object_key:e.string().min(1),reason:e.enum(["initial_generation","workspace_edit","pre_deploy","manual_save","rollback"]),status:ve,created_at:e.string().min(1)}),bs=e.object({snapshot_id:e.string().min(1).optional(),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),object_key:e.string().min(1),reason:W.shape.reason,status:ve.default("candidate")}),fs=e.object({site:w,snapshot:W,next_step:e.literal("workspace")}),xs=e.object({site:w,snapshot:W,next_step:e.literal("workspace")}),Es=e.object({status:e.literal("deleted"),snapshot_id:e.string().min(1)}),Ie=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),snapshot_id:e.string().min(1),version:e.number().int().positive(),accepted_commit:e.string().min(1),source_run_id:e.string().min(1).nullable(),created_at:e.string().min(1)}),Pi=Ie.extend({reason:W.shape.reason,status:ve}),Rs=e.object({accepted_commit:e.string().min(1),source_run_id:e.string().min(1).optional()}),vs=e.object({site_version:Ie,next_step:e.literal("workspace")}),Is=e.object({site_versions:e.array(Pi)}),Ts=e.object({site:w,snapshot:W,site_version:Ie,next_step:e.literal("workspace")}),ks=e.object({snapshot_id:e.string().min(1),force_rehydrate:e.boolean().optional()}),As=e.object({status:e.enum(["ready","failed"]),preview_url:e.string().min(1).optional(),code:e.string().min(1).optional(),message:e.string().min(1).optional(),retryable:e.boolean().optional()}),Te=e.enum(De),te=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),snapshot_id:e.string().min(1),version:e.number().int().positive(),status:Te,provider:e.enum(["cloudflare"]),url:e.string().url().nullable(),error_code:e.string().min(1).nullable(),provider_deployment_id:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),js=e.object({snapshot_id:e.string().min(1).optional()}).default({}),Cs=e.object({deployment:te}),Ps=e.object({deployment:te.nullable()}),ws=e.object({deployment:te}),St=e.object({id:e.string().min(1),status:Te,url:e.string().url().nullable(),error_code:e.string().min(1).nullable(),provider_deployment_id:e.string().min(1).nullable()}),Os=e.object({current:St.nullable(),latest_released:St.nullable()}),wi=e.enum(["deployment.snapshot","deployment.status.changed","deployment.finished","deployment.failed","deployment.realtime.recovered","server.error"]),P=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),deployment_id:e.string().min(1),seq:e.number().int().positive(),sent_at:e.string().min(1)}),J=e.object({deployment:te}),Ns=e.discriminatedUnion("type",[P.extend({type:e.literal("deployment.snapshot"),payload:J}),P.extend({type:e.literal("deployment.status.changed"),payload:J}),P.extend({type:e.literal("deployment.finished"),payload:J}),P.extend({type:e.literal("deployment.failed"),payload:J}),P.extend({type:e.literal("deployment.realtime.recovered"),payload:e.object({action:e.literal("refresh")})}),P.extend({type:e.literal("server.error"),payload:e.object({code:e.string().min(1),message:e.string().min(1),retryable:e.boolean()})})]),Ds=e.object({tenant_id:e.string().min(1),site_id:e.string().min(1),deployment_id:e.string().min(1),status:Te,updated_at:e.string().min(1)}),Oi="vcp:deployments",Ls={path:"/v1/sites/:site_id/deployments/:deployment_id/socket",redis_channel:Oi,outbound_message_schema:"DeploymentWsServerMessageSchema",message_types:[...wi.options]},Ni=e.object({error:e.object({code:e.string().min(1),message:e.string().min(1),details:e.unknown().optional(),request_id:e.string().min(1).optional(),retryable:e.boolean().default(!1)})}),Ms=e.object({error:Ni.shape.error.extend({code:e.literal("AGENT_RUN_IN_FLIGHT"),details:e.object({code:e.literal("AGENT_RUN_IN_FLIGHT"),message:e.string().min(1),agent_run:T})})}),Us=e.object({colors:e.record(e.string(),e.string()).default({}),typography:e.record(e.string(),e.string()).default({}),spacing:e.record(e.string(),e.string()).default({}),motion:e.record(e.string(),e.string()).default({})}),Di=e.object({theme_id:e.string().min(1),paletteIntent:e.string().min(1),tone:e.string().min(1),mediaMood:e.string().min(1),motionLevel:xe.optional(),userVisualHints:be.optional()}),Li=e.object({question:e.string().min(1),answer:e.string().min(1)}),Fs=e.object({query:e.string().min(1),keywords:e.array(e.string()).default([]),orientation:e.enum(["landscape","portrait","square"]).optional(),role:e.enum(["hero","section","card","gallery","testimonial","decorative"]),altHint:e.string().min(1)}),Ws=e.object({id:e.string().min(1),role:e.enum(["site_background","nav_background","footer_background"]),query:e.string().min(1),keywords:e.array(e.string()).default([]),treatment:e.enum(["cover","fixed-cover","subtle-texture"]),altHint:e.string().optional()}),Mi=e.object({provider:e.enum(["unsplash","pexels"]),providerLabel:e.enum(["Unsplash","Pexels"]),providerHref:e.string().url(),photoHref:e.string().url().optional(),photographerName:e.string().optional(),photographerHref:e.string().url().optional(),requiresAttribution:e.boolean()}),qs=e.object({src:e.string().min(1),alt:e.string().min(1),width:e.number().int().positive().optional(),height:e.number().int().positive().optional(),provider:e.enum(["unsplash","pexels","placeholder"]).optional(),providerId:e.string().optional(),photoUrl:e.string().url().optional(),photographer:e.string().optional(),photographerUrl:e.string().url().optional(),credit:e.string().optional(),dominantColor:e.string().optional(),attribution:Mi.optional()}),Ui=e.enum(["system_recommended","user_picked","user_picked_extended","deterministic_fallback"]),O=e.object({id:e.string().min(1),name:e.string().min(1),category:e.literal("page-generation"),version:e.string().min(1).optional(),reason:e.string().min(1).max(200),source:Ui.default("system_recommended")}),u=e.string().min(1).max(2e3),yt=e.string().min(1).max(120),It=e.object({visualDirection:u,brandFeeling:u,paletteIntent:u,typographyIntent:u,density:xi,motionLevel:Ei,mediaStrategy:u,compositionRules:e.array(u).max(20),avoidPatterns:e.array(u).max(20),fonts:e.object({heading:e.string().min(1),body:e.string().min(1)}).optional(),colorSeeds:e.object({primary:e.string().min(1).max(40),accent:e.string().min(1).max(40),neutral:e.string().min(1).max(40).optional(),supporting:e.array(e.string().min(1).max(40)).max(4).optional()}).optional(),surfaceMode:e.enum(["light","dark"]).optional(),radius:e.enum(["none","sm","md","lg","xl"]).optional(),imagePalette:e.object({background:e.string().min(1).max(40).optional(),foreground:e.string().min(1).max(40).optional(),card:e.string().min(1).max(40).optional(),muted:e.string().min(1).max(40).optional(),border:e.string().min(1).max(40).optional()}).optional()}),Tt=e.object({routeGoal:u,narrativeArc:u,firstViewportIntent:u,visualContinuity:u,sectionRhythm:u,avoidPatterns:e.array(u).max(20),displayTitle:e.string().min(1).max(24).optional(),displayDescription:e.string().min(1).max(60).optional(),metaTitle:e.string().min(1).max(120).optional(),metaDescription:e.string().min(1).max(320).optional()}),kt=e.enum(["model_call","validation","repair","preview","worker_group"]),I=e.enum(["generating","generating_design_plan","checking_quality","updating_design_memory"]),At=e.object({sectionRole:u,contentIntent:u,layoutIntent:u,visualIntent:u,mediaIntent:u,motionIntent:u,copyTone:u,displayTitle:e.string().min(1).max(24).optional(),displayDescription:e.string().min(1).max(60).optional(),ctaIntent:u.optional(),continuityWithPrevious:u.optional(),avoidRepeating:e.array(u).max(20).optional(),industryRecipeRefs:e.array(yt).max(12).optional(),templateRecipeRefs:e.array(yt).max(12).optional()}),jt=e.object({siteName:e.string().min(1).max(120),tagline:e.string().min(1).max(200).optional(),primaryCta:e.object({label:e.string().min(1).max(60),target:e.string().min(1).max(200)}).optional(),trustSignals:e.array(e.string().min(1).max(60)).max(6).optional(),industry:e.string().min(1).max(40).optional()}),Fi=e.enum(["solid","floating"]),Wi=e.enum(["background","card","primary","frosted"]),qi=e.enum(["sticky","hide-on-scroll","static"]),Gi=e.enum(["bar","island"]),Bi=e.object({variant:Fi,surface:Wi.optional(),behavior:qi.optional(),shape:Gi.optional()}),Ki=e.object({form:u,layoutIntent:u,scrollBehavior:u,shell:Bi.optional(),avoidPatterns:e.array(u).max(10).optional()}),Hi=e.enum(["background","card","primary","inverse"]),Vi=e.object({surface:Hi}),zi=e.object({form:u,composition:u,shell:Vi.optional(),avoidPatterns:e.array(u).max(10).optional()}),$i=e.object({pattern:u,intent:u}),Ct=e.object({header:Ki,footer:zi,mobileNav:$i}),Pt=e.object({schemaVersion:e.literal(1).default(1),siteDesignContext:It,routeCards:e.record(e.string().min(1),Tt),blockContexts:e.record(e.string().min(1),At),selectedSkillPacks:e.array(O).max(3).optional(),branding:jt.optional(),chromeDesign:Ct.optional()}),Gs=e.object({siteDesignContext:It.omit({imagePalette:!0}).optional(),routeCards:e.record(e.string().min(1),Tt).optional(),blockContexts:e.record(e.string().min(1),At).optional(),branding:jt.optional(),chromeDesign:Ct.optional()}),Yi=e.object({id:e.string(),type:e.string(),variant:e.string().optional(),order:e.number(),props:e.record(e.string(),e.unknown()),enabled:e.boolean(),meta:e.object({aiGenerated:e.boolean(),userEdited:e.boolean(),lastEditedAt:e.string(),lastEditedBy:e.enum(["ai","user"]),userInstruction:e.string().optional()}).optional()}).strict(),Xi=e.object({id:e.string(),slug:e.string(),title:e.string(),blocks:e.array(Yi).min(1),layout:e.enum(["default","centered","fullwidth"]).optional(),navigation:e.object({showInHeader:e.boolean(),showInFooter:e.boolean(),order:e.number()})}).strict(),q=e.object({site_name:e.string().min(1).max(80).optional(),version:e.number().int().positive(),pages:e.array(Xi).min(1),navigation:e.object({primaryLinks:e.array(e.object({label:e.string(),href:e.string()})),footerLinks:e.array(e.object({label:e.string(),href:e.string()}))}),integrations:e.object({cms:e.unknown().optional(),analytics:e.unknown().optional()}).optional(),meta:e.object({generatedAt:e.string(),generatedBy:e.literal("sitemap-agent"),source_brief_id:e.string().optional(),source_answer_ids:e.array(e.string()).optional()}),skillSelection:O,visualTheme:Di.optional(),userChoices:e.array(Li).optional(),confirmedChoices:e.object({conversion:fe.optional()}).optional()}).strict(),Bs=q.omit({skillSelection:!0,visualTheme:!0,userChoices:!0,confirmedChoices:!0}).extend({site_name:e.string().min(1).max(80)}),Qi=e.enum(["ai","user"]),N=e.object({site_id:e.string().min(1),page_id:e.string().min(1),edited_by:Qi.default("ai"),source_agent_run_id:e.string().min(1).optional()}),Ks=N.extend({block_id:e.string().min(1),target_index:e.number().int().min(0)}),Zi=N.extend({block_id:e.string().min(1)}),Ji=N.extend({block_id:e.string().min(1),instruction:e.string()}),Hs=N.extend({block_id:e.string().min(1),variant:e.string().min(1).nullable()}),Vs=N.extend({block_id:e.string().min(1),props:e.record(e.string(),e.unknown()),mode:e.enum(["replace","merge"]).default("replace")}),zs=N.extend({block:e.object({id:e.string().min(1),type:e.string().min(1),variant:e.string().min(1).optional(),props:e.record(e.string(),e.unknown()).default({}),insert_index:e.number().int().min(0).optional()})}),ea=e.enum(["move_block","delete_block","update_block_instruction","change_block_variant","update_block_props","add_block"]),$s=e.discriminatedUnion("operation",[e.object({operation:e.literal("delete_block"),input:Zi}).strict(),e.object({operation:e.literal("update_block_instruction"),input:Ji}).strict()]),ta=e.enum(["SITEMAP_EDIT_INVALID","SITEMAP_API_NOT_CONFIGURED","SITEMAP_NOT_FOUND","SITEMAP_PAGE_NOT_FOUND","SITEMAP_BLOCK_NOT_FOUND","SITEMAP_BLOCK_ALREADY_EXISTS","SITEMAP_EDIT_FAILED"]),na=e.object({status:e.literal("updated"),operation:ea,site_id:e.string().min(1),sitemap_id:e.string().min(1),version:e.number().int().positive(),changed_pages:e.array(e.string().min(1)).min(1),requires_code_patch:e.literal(!0)}),ia=e.object({status:e.literal("failed"),code:ta,message:e.string().min(1),retryable:e.boolean().default(!1),details:e.unknown().optional()}),Ys=e.discriminatedUnion("status",[na,ia]),ke=e.object({question_id:e.string().min(1),value:e.string().min(1),label:e.string().min(1).optional(),question:e.string().min(1).optional(),option_label:e.string().min(1).optional(),motion_level:xe.optional(),visual_tonality:be.optional(),conversion:fe.optional(),positioning:e.object({market:e.string().min(1).max(200),customer:e.string().min(1).max(200),purpose:e.string().min(1).max(60)}).optional()}),Xs=e.object({tenant_id:e.string().min(1),site_id:e.string().min(1),brief_id:e.string().min(1),brief:e.string().min(20).max(1e3),answers:e.array(ke).min(1).max(10),skillSelection:O,site_default_locale:D.optional(),reference:B.optional(),input_context:e.object({facts:e.array(G).max(120),conflicts:e.array(K).max(20)}).optional()}),wt=e.enum(["planning","generating","validating","ready"]),Qs=e.discriminatedUnion("type",[e.object({type:e.literal("run.started"),runId:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generating"),stage:wt,message:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generated"),sitemap_id:e.string().min(1),sitemap:q,at:e.string().min(1)}),e.object({type:e.literal("sitemap.clamped"),reason:e.enum(["page_early_stop","finalize_best_effort"]),original_page_count:e.number().int().nonnegative().optional(),final_page_count:e.number().int().nonnegative().optional(),original_enabled_block_count:e.number().int().nonnegative().optional(),final_enabled_block_count:e.number().int().nonnegative().optional(),at:e.string().min(1)}),e.object({type:e.literal("media_resolution.started"),slot_count:e.number().int().nonnegative(),at:e.string().min(1)}),e.object({type:e.literal("media_resolution.finished"),slot_count:e.number().int().nonnegative(),provider_counts:e.object({unsplash:e.number().int().nonnegative(),pexels:e.number().int().nonnegative(),placeholder:e.number().int().nonnegative()}),fallback_count:e.number().int().nonnegative(),error_codes:e.array(e.string()),at:e.string().min(1)}),e.object({type:e.literal("snapshot.created"),snapshot_id:e.string().min(1),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),at:e.string().min(1)}),e.object({type:e.literal("run.failed"),error_code:e.string().min(1),message:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("run.finished"),snapshot_id:e.string().min(1).optional(),at:e.string().min(1)})]),aa=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),version:e.number().int().positive(),sitemap:q,source_agent_run_id:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),Zs=e.object({sitemap_id:e.string().min(1).optional(),sitemap:q,source_agent_run_id:e.string().min(1).optional()}),Js=e.object({site:w,sitemap:aa,next_step:e.literal("workspace")}),ra=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),brief_id:e.string().min(1),questions:Ee,answers:e.array(ke),selected_archetype:O.optional(),completed_at:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),ec=e.object({answers:e.array(ke).min(1),questions:Ee,selected_archetype:O.optional()}),tc=e.object({clarify_session:ra}),nc=e.object({questions:Ee,selected_archetype:O}),oa=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),version:e.number().int().positive(),design_plan:Pt,source_agent_run_id:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),ic=e.object({design_plan_id:e.string().min(1).optional(),design_plan:Pt,source_agent_run_id:e.string().min(1).optional()}),ac=e.object({design_plan:oa}),ne=e.enum(["initial_generation","iteration"]),sa=e.object({label:e.string().min(1).max(48),prompt:e.string().min(1).max(160)}).strict(),ca=e.enum(["model","derived"]),Ot=e.object({suggestions:e.array(sa).min(1).max(5),source:ca}).strict(),Nt=e.enum(["run.started","message.delta","user.message","plan.updated","clarify.partial","clarify.archetype_proposals","clarify.finished","sitemap.generating","sitemap.partial","sitemap.generated","sitemap.clamped","sitemap.updated","sitemap.resync.failed","sitemap.resync.warning","block.changed","tool.started","tool.finished","workspace.plan.created","workspace.worker.updated","workspace.task.updated","workspace.degraded","workspace.suggestions","file.changed","snapshot.created","preview.preparing","preview.ready","preview.build.started","preview.build.succeeded","preview.build.failed","run.failed","run.finished","media_resolution.started","media_resolution.finished","skill.selecting","skill.selected","activity.started","activity.updated","activity.finished","activity.failed"]),ma=e.object({id:e.string().min(1),title:e.string().min(1),status:e.enum(["pending","running","completed","failed"])}),A=e.enum(["pending","running","completed","completed_with_skips","failed","skipped"]),Ae=e.enum(["style_media","chrome","sections","layout","pages","detect_typecheck","repair","finalize","sitemap_resync","preview"]),je=e.object({code:e.string().min(1),message:e.string().min(1),path:e.string().min(1).optional(),task_id:e.string().min(1).optional(),details:e.record(e.string(),e.unknown()).optional()}),y=e.string().min(1).refine(t=>Fa(t),{message:"Snapshot file paths must be safe relative POSIX paths without traversal."}),Ce=e.object({deduped_paths:e.array(y),skipped_tasks:e.array(e.string().min(1)),failed_tasks:e.array(e.string().min(1)),fallback_files:e.array(e.string().min(1)),applied_paths:e.array(y)}),Pe=e.object({group_id:e.string().min(1),phase:Ae,title:e.string().min(1),status:A,task_ids:e.array(e.string().min(1)),depends_on_groups:e.array(e.string().min(1)),target_paths:e.array(y)}),la=e.enum(["style","media","chrome","section","layout","page"]),we=e.object({task_id:e.string().min(1),group_id:e.string().min(1),kind:la,target_path:y,block_id:e.string().min(1).optional(),block_type:e.string().min(1).optional(),block_variant:e.string().min(1).optional(),block_order:e.number().int().nonnegative().optional(),user_instruction:e.string().min(1).optional(),page_id:e.string().min(1).optional(),page_slug:e.string().min(1).optional(),page_title:e.string().min(1).optional(),title:e.string().min(1).max(60).optional(),description:e.string().min(1).max(160).optional(),status:A,required_reads:e.array(y).optional()}),Oe=e.object({from_group_id:e.string().min(1),to_group_id:e.string().min(1),reason:e.enum(["style_media","chrome","sections","layout","page_composition","quality_gate"])}),rc=e.object({plan_id:e.string().min(1),run_kind:ne,model_route:e.object({planner:e.literal("workspace_planner"),worker:e.literal("workspace")}),groups:e.array(Pe),tasks:e.array(we),dependencies:e.array(Oe),expected_outputs:e.array(y),diagnostics:Ce}),oc=e.object({task_id:e.string().min(1),patch:e.unknown().optional(),snapshot_id:e.string().min(1).optional(),read_files:e.array(y),diagnostics:e.array(je),status:A}),Dt=e.object({worker_count:e.number().int().nonnegative(),task_count:e.number().int().nonnegative(),group_count:e.number().int().nonnegative()}),Lt=e.object({pending:e.number().int().nonnegative(),running:e.number().int().nonnegative(),completed:e.number().int().nonnegative(),completed_with_skips:e.number().int().nonnegative(),failed:e.number().int().nonnegative(),skipped:e.number().int().nonnegative()}),pa=e.object({type:e.literal("text"),text:e.string(),state:e.enum(["streaming","done"]).optional()}),da=e.object({type:e.literal("reasoning"),text:e.string(),state:e.enum(["streaming","done"]).optional(),providerMetadata:e.record(e.string(),e.unknown()).optional()}),ua=e.object({type:e.literal("file"),mediaType:e.string().min(1),filename:e.string().min(1).optional(),url:e.string().min(1)}),ga=e.object({type:e.literal("source-url"),sourceId:e.string().min(1),url:e.string().min(1),title:e.string().min(1).optional(),providerMetadata:e.record(e.string(),e.unknown()).optional()}),ha=e.object({type:e.literal("source-document"),sourceId:e.string().min(1),mediaType:e.string().min(1),title:e.string().min(1),filename:e.string().min(1).optional(),providerMetadata:e.record(e.string(),e.unknown()).optional()}),_a=e.object({type:e.string().regex(/^data-[a-zA-Z0-9_-]+$/),id:e.string().min(1).optional(),data:e.unknown()}),Sa=e.object({type:e.string().regex(/^tool-[a-zA-Z0-9_-]+$/),toolCallId:e.string().min(1),state:e.enum(["input-streaming","input-available","output-available","output-error"]),input:e.unknown().optional(),output:e.unknown().optional(),errorText:e.string().min(1).optional()}),ya=e.object({type:e.literal("error"),errorText:e.string().min(1)}),ba=e.object({type:e.literal("step-start")}),ee=e.union([pa,da,ua,ga,ha,_a,Sa,ya,ba]),Mt=e.discriminatedUnion("type",[e.object({type:e.literal("run.started"),runId:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("message.delta"),text:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("user.message"),client_message_id:e.string().min(1),message_id:e.string().min(1),parts:e.array(ee).min(1),in_reply_to_tool_call_id:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("plan.updated"),steps:e.array(ma),at:e.string().min(1)}),e.object({type:e.literal("clarify.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("clarify.archetype_proposals"),proposals:e.array(bt).min(1).max(5),at:e.string().min(1)}),e.object({type:e.literal("clarify.finished"),questions_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generating"),stage:wt,message:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.partial"),object:e.unknown(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.generated"),sitemap_id:e.string().min(1),sitemap:q,at:e.string().min(1)}),e.object({type:e.literal("sitemap.clamped"),reason:e.enum(["page_early_stop","finalize_best_effort"]),original_page_count:e.number().int().nonnegative().optional(),final_page_count:e.number().int().nonnegative().optional(),original_enabled_block_count:e.number().int().nonnegative().optional(),final_enabled_block_count:e.number().int().nonnegative().optional(),at:e.string().min(1)}).strict(),e.object({type:e.literal("sitemap.updated"),sitemap_id:e.string().min(1),version:e.number().int().positive(),reason:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("sitemap.resync.failed"),error_code:e.string().min(1),message:e.string().min(1),retryable:e.boolean(),diagnostics:e.unknown().optional(),at:e.string().min(1)}),e.object({type:e.literal("sitemap.resync.warning"),code:e.string().min(1),message:e.string().min(1),diagnostics:e.unknown().optional(),at:e.string().min(1)}),e.object({type:e.literal("block.changed"),block_id:e.string().min(1),change_type:e.enum(["add","update","delete","move"]),at:e.string().min(1)}),e.object({type:e.literal("tool.started"),tool_call_id:e.string().min(1),name:e.string().min(1),summary:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("tool.finished"),tool_call_id:e.string().min(1),name:e.string().min(1),result_summary:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("workspace.plan.created"),plan_id:e.string().min(1),run_kind:ne,groups:e.array(Pe),tasks:e.array(we),dependencies:e.array(Oe),expected_outputs:e.array(y),diagnostics:Ce,summary:Dt,at:e.string().min(1)}).strict(),e.object({type:e.literal("workspace.worker.updated"),group_id:e.string().min(1),phase:Ae,status:A,task_counts:Lt,target_paths:e.array(y),diagnostics:e.array(e.string().min(1)),at:e.string().min(1)}).strict(),e.object({type:e.literal("workspace.task.updated"),task_id:e.string().min(1),group_id:e.string().min(1),status:A,target_path:y,read_files_count:e.number().int().nonnegative(),diagnostics:e.array(e.string().min(1)),diagnostic_details:e.array(je).optional(),at:e.string().min(1)}).strict(),e.object({type:e.literal("workspace.degraded"),reason:e.enum(["block_placeholder","form_placeholder","patch_protected_dropped","preview_health_degraded","design_plan_fallback"]),degraded_block_ids:e.array(e.string().min(1)).min(1).optional(),dropped_files:e.array(e.string().min(1)).min(1).optional(),snapshot_id:e.string().min(1).optional(),code:e.string().min(1).optional(),message:e.string().min(1).optional(),diagnostics:e.string().min(1).optional(),retryable:e.boolean().optional(),at:e.string().min(1)}).strict(),Ot.extend({type:e.literal("workspace.suggestions"),at:e.string().min(1)}).strict(),e.object({type:e.literal("file.changed"),path:e.string().min(1),change_type:e.enum(["create","update","delete"]),diff:e.string().optional(),at:e.string().min(1)}),e.object({type:e.literal("snapshot.created"),snapshot_id:e.string().min(1),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/),at:e.string().min(1)}),e.object({type:e.literal("preview.preparing"),at:e.string().min(1)}),e.object({type:e.literal("preview.ready"),url:e.string().url(),at:e.string().min(1)}),e.object({type:e.literal("preview.build.started"),snapshot_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("preview.build.succeeded"),snapshot_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("preview.build.failed"),snapshot_id:e.string().min(1),message:e.string().min(1),diagnostics:e.string().min(1),retryable:e.boolean(),at:e.string().min(1)}),e.object({type:e.literal("run.failed"),error_code:e.string().min(1),message:e.string().min(1),error_category:ft.optional(),retryable:e.boolean().optional(),attempts:e.number().int().positive().optional(),at:e.string().min(1)}),e.object({type:e.literal("run.finished"),snapshot_id:e.string().min(1).optional(),at:e.string().min(1)}),e.object({type:e.literal("media_resolution.started"),slot_count:e.number().int().nonnegative(),at:e.string().datetime()}),e.object({type:e.literal("media_resolution.finished"),slot_count:e.number().int().nonnegative(),provider_counts:e.object({unsplash:e.number().int().nonnegative(),pexels:e.number().int().nonnegative(),placeholder:e.number().int().nonnegative()}),fallback_count:e.number().int().nonnegative(),error_codes:e.array(e.string()),at:e.string().datetime()}),e.object({type:e.literal("skill.selecting"),category:e.literal("page-generation"),available:e.array(e.object({id:e.string().min(1),name:e.string().min(1)})).max(20),at:e.string().min(1)}),e.object({type:e.literal("skill.selected"),category:e.literal("page-generation"),selected:e.object({id:e.string().min(1),name:e.string().min(1),reason:e.string().min(1).max(200)}),at:e.string().min(1)}),e.object({type:e.literal("activity.started"),activity_id:e.string().min(1),parent_activity_id:e.string().min(1).optional(),kind:kt,title:e.string().min(1).max(200),detail:e.string().max(360).optional(),title_code:I.optional(),detail_code:I.optional(),locks_input:e.boolean(),at:e.string().min(1)}),e.object({type:e.literal("activity.updated"),activity_id:e.string().min(1),title:e.string().min(1).max(200).optional(),detail:e.string().max(360).optional(),title_code:I.optional(),detail_code:I.optional(),at:e.string().min(1)}),e.object({type:e.literal("activity.finished"),activity_id:e.string().min(1),at:e.string().min(1)}),e.object({type:e.literal("activity.failed"),activity_id:e.string().min(1),detail:e.string().max(360).optional(),at:e.string().min(1)})]),ye=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),agent_run_id:e.string().min(1),sequence:e.number().int().positive(),event_type:Nt,payload:Mt,created_at:e.string().min(1)}),sc=e.object({event_type:Nt,payload:Mt}).superRefine((t,i)=>{t.event_type!==t.payload.type&&i.addIssue({code:"custom",path:["payload","type"],message:"payload.type must match event_type"}),F(t.payload)&&i.addIssue({code:"custom",path:["payload"],message:"AgentEvent payload must not contain secrets"})}),cc=e.discriminatedUnion("status",[e.object({status:e.literal("appended"),agent_run:T,event:ye,next_cursor:e.number().int().nonnegative()}),e.object({status:e.literal("duplicate_ignored"),agent_run:T,event:ye,next_cursor:e.number().int().nonnegative()})]),mc=e.object({events:e.array(ye),next_cursor:e.number().int().nonnegative().optional()}),lc=e.object({after_sequence:e.coerce.number().int().nonnegative().default(0)}),pc=e.enum(["implemented","skeleton","planned"]),dc=e.enum(["GET","POST","PATCH","DELETE"]),uc=[{method:"GET",path:"/health",tag:"system",summary:"API health check.",status:"implemented",response_schema:"ApiHealth"},{method:"POST",path:"/sites",tag:"sites",summary:"Create a site and Step 1 brief in the current dev context.",status:"implemented",request_body_schema:"CreateSiteBriefRequestSchema",response_schema:"CreateSiteBriefResponseSchema"},{method:"POST",path:"/sites/drafts",tag:"sites",summary:"Create a draft site without a brief in the current tenant so /s/:site_id can collect Step 1 later.",status:"implemented",request_body_schema:"CreateSiteDraftRequestSchema",response_schema:"SiteRecordSchema"},{method:"GET",path:"/sites",tag:"sites",summary:"List current tenant sites.",status:"implemented",response_schema:"SiteRecordSchema[]"},{method:"GET",path:"/sites/by-cms/:cms_site_id",tag:"sites",summary:"Resolve an external CMS site id to one tenant-scoped VCP site.",status:"implemented",response_schema:"SiteRecordSchema",notes:["Used by the browser /d/:cms_site_id handoff route; lookup is scoped by current request tenant and returns 404 when the CMS site has not been synchronized."]},{method:"GET",path:"/sites/:site_id",tag:"sites",summary:"Get one tenant-scoped site.",status:"implemented",response_schema:"SiteRecordSchema"},{method:"PATCH",path:"/sites/:site_id",tag:"sites",summary:"Update site display name for the current tenant.",status:"implemented",request_body_schema:"UpdateSiteRequestSchema",response_schema:"SiteRecordSchema"},{method:"DELETE",path:"/sites/:site_id",tag:"sites",summary:"Archive a site so it no longer appears in the tenant site list.",status:"implemented",response_schema:"SiteRecordSchema"},{method:"GET",path:"/sites/:site_id/workspace/source-files",tag:"sites",summary:"List source files available in the ready preview sandbox.",status:"implemented",response_schema:"WorkspaceSourceFileListItemSchema[]"},{method:"GET",path:"/sites/:site_id/workspace/source-file",tag:"sites",summary:"Read a source file from the ready preview sandbox.",status:"implemented",query_schema:"WorkspaceSourceFilePathQuerySchema",response_schema:"WorkspaceSourceFileResponseSchema"},{method:"POST",path:"/sites/:site_id/sitemap",tag:"sitemaps",summary:"Persist generated sitemap and advance the site to sitemap_ready.",status:"implemented",request_body_schema:"PersistSiteSitemapRequestSchema",response_schema:"PersistSiteSitemapResponseSchema"},{method:"GET",path:"/sites/:site_id/sitemap",tag:"sitemaps",summary:"Read the current sitemap for a site.",status:"implemented",response_schema:"SitemapRecordSchema"},{method:"POST",path:"/sites/:site_id/clarify/answers",tag:"clarify",summary:"Persist the Step 2 clarify answers (and the answered questions) into the site's clarify session.",status:"implemented",request_body_schema:"PersistClarifyAnswersRequestSchema",response_schema:"PersistClarifyAnswersResponseSchema"},{method:"PATCH",path:"/sites/:site_id/clarify/archetype",tag:"clarify",summary:"Switch the Step 2 industry archetype (user_picked) into the site's clarify session via an idempotent upsert.",status:"implemented",request_body_schema:"UpdateClarifyArchetypeRequestSchema",response_schema:"PersistClarifyAnswersResponseSchema",notes:["Independent of generate: materializes a clarify_sessions row when none exists (using the supplied questions) or updates only selected_archetype; never writes answers/completed_at. Forces source=user_picked."]},{method:"POST",path:"/internal/sites/:site_id/design-plan",tag:"design-plans",summary:"Persist a generated design plan version for a site (internal agent-only write).",status:"implemented",request_body_schema:"PersistSiteDesignPlanRequestSchema",response_schema:"PersistSiteDesignPlanResponseSchema",notes:["Guarded by the internal agent token; only the Workspace/Sitemap agent writes design plans."]},{method:"GET",path:"/internal/sites/:site_id/design-plan",tag:"design-plans",summary:"Read the current (latest version) design plan for a site (internal agent-only read).",status:"implemented",response_schema:"DesignPlanRecordSchema",notes:["Guarded by the internal agent token; only the Workspace/Sitemap agent reads design plans."]},{method:"GET",path:"/sites/:site_id/design-plan",tag:"design-plans",summary:"Read the current (latest version) design plan for a site so Workspace UI can inspect the generated design contract.",status:"implemented",response_schema:"DesignPlanRecordSchema"},{method:"GET",path:"/sites/:site_id/brief",tag:"briefs",summary:"Read the persisted Step 1 brief for a site so the Workspace Agent can seed first full-site generation without a new write surface.",status:"implemented",response_schema:"BriefRecordSchema"},{method:"PATCH",path:"/sites/:site_id/brief",tag:"briefs",summary:"Create or update a draft site's Step 1 brief and advance it to Clarify without allowing later workflow states to roll back.",status:"implemented",request_body_schema:"UpdateBriefRequestSchema",response_schema:"UpdateBriefResponseSchema",notes:["Only draft sites with generation_state=planning are writable; missing brief rows are created on first save; identical retries after brief_submitted are idempotent."]},{method:"POST",path:"/internal/sites/:cms_site_id/external-sync",tag:"sites",summary:"Synchronize a trusted external CMS site URL into VCP by tenant_id + cms_site_id, creating a draft VCP site on first sync.",status:"implemented",request_body_schema:"ExternalSyncSiteRequestSchema",response_schema:"ExternalSyncSiteResponseSchema",notes:["This trusted external entry does not require browser login or internal bearer auth; tenant_id is written directly to tenants.id and the response uses the internal { code, data, message } success envelope."]},{method:"POST",path:"/sites/:site_id/snapshots",tag:"snapshots",summary:"Persist snapshot metadata without changing the current site snapshot.",status:"implemented",request_body_schema:"PersistSiteSnapshotRequestSchema",response_schema:"PersistSiteSnapshotResponseSchema"},{method:"POST",path:"/sites/:site_id/snapshots/:snapshot_id/promote",tag:"snapshots",summary:"Promote a site snapshot as the current workspace version.",status:"implemented",response_schema:"PromoteSiteSnapshotResponseSchema"},{method:"GET",path:"/sites/:site_id/snapshots/:snapshot_id",tag:"snapshots",summary:"Read one tenant-scoped snapshot metadata record for a site.",status:"implemented",response_schema:"SnapshotRecordSchema"},{method:"DELETE",path:"/sites/:site_id/snapshots/:snapshot_id",tag:"snapshots",summary:"Delete a candidate snapshot (cleanup of superseded intermediate snapshots; refuses non-candidate/current/referenced).",status:"implemented",response_schema:"DeleteSiteSnapshotResponseSchema"},{method:"POST",path:"/agent-runs",tag:"agent-runs",summary:"Create an agent run for event persistence and replay.",status:"implemented",request_body_schema:"CreateAgentRunRequestSchema",response_schema:"CreateAgentRunResponseSchema"},{method:"POST",path:"/agent-runs/:run_id/events",tag:"agent-runs",summary:"Append one normalized AgentEvent to a run.",status:"implemented",request_body_schema:"AppendAgentEventRequestSchema",response_schema:"AppendAgentEventResponseSchema",notes:["Internal-only write surface: only internal-service callers may append, except browser (oidc) contexts may append run.failed (the WS connect-stage unlock path, equivalent to POST /agent-runs/workspace/cancel). All other oidc appends \u2014 run.finished, run.started, tool/system/progress, file/snapshot \u2014 are rejected with 403 FORBIDDEN. The browser sends user messages over the Workspace WebSocket (recorded server-side as user.message) and otherwise only reads the GET replay."]},{method:"GET",path:"/agent-runs/:run_id/events",tag:"agent-runs",summary:"Replay AgentEvents after a run-local sequence cursor.",status:"implemented",response_schema:"ListAgentEventsResponseSchema"},{method:"POST",path:"/internal/agent-runs/fail-stale-in-flight",tag:"agent-runs",summary:"Fail stale in-flight workspace runs (internal maintenance, cross-tenant sweep).",status:"implemented",response_schema:"FailStaleInFlightWorkspaceRunsResponseSchema",notes:["Internal maintenance endpoint guarded by InternalAgentAuthGuard (Bearer VCP_AGENT_INTERNAL_TOKEN, production fail-closed); the /internal/** prefix is exempt from browser auth middleware so the guard is the sole trust boundary. Not exposed to the browser via agent-proxy; called by an external admin cron / controlled ops script."]},{method:"GET",path:"/briefs",tag:"briefs",summary:"Brief resource summary endpoint until concrete brief APIs land.",status:"skeleton"},{method:"GET",path:"/clarify",tag:"clarify",summary:"Clarify resource summary endpoint; persisted answers write through POST /sites/:site_id/clarify/answers.",status:"skeleton"},{method:"GET",path:"/sitemaps",tag:"sitemaps",summary:"Sitemap resource summary endpoint until collection APIs land.",status:"skeleton"},{method:"GET",path:"/snapshots",tag:"snapshots",summary:"Snapshot resource summary endpoint until collection APIs land.",status:"skeleton"},{method:"GET",path:"/sandbox-sessions",tag:"sandbox-sessions",summary:"Sandbox session resource summary endpoint until preview APIs land.",status:"skeleton"},{method:"GET",path:"/deployments",tag:"deployments",summary:"Deployment resource summary endpoint until publish APIs land.",status:"skeleton"},{method:"GET",path:"/usage",tag:"usage",summary:"Usage resource summary endpoint until cost summaries land.",status:"skeleton"},{method:"GET",path:"/audit",tag:"audit",summary:"Audit resource summary endpoint until audit queries land.",status:"skeleton"},{method:"POST",path:"/sites/:site_id/workspace/runs",tag:"workspace",summary:"Start an asynchronous Workspace Agent run from the current snapshot.",status:"implemented",request_body_schema:"StartWorkspaceRunRequestSchema",response_schema:"StartWorkspaceRunResponseSchema",notes:["Long-running work must be event-driven and must not block API transactions."]},{method:"GET",path:"/sites/:site_id/workspace/runs/latest",tag:"workspace",summary:"Look up the latest workspace Agent run for a site so Step 4 re-entry can replay persisted events without re-triggering the model.",status:"implemented",response_schema:"LatestWorkspaceRunResponseSchema"},{method:"POST",path:"/sites/:site_id/preview-sessions",tag:"sandbox-sessions",summary:"Persist or update an on-demand preview session for a site.",status:"implemented",request_body_schema:"PersistPreviewSessionRequestSchema",response_schema:"PersistPreviewSessionResponseSchema"},{method:"GET",path:"/sites/:site_id/preview-sessions/current",tag:"sandbox-sessions",summary:"Read the latest tenant-scoped preview session for a site.",status:"implemented",response_schema:"SandboxSessionSchema"},{method:"POST",path:"/sites/:site_id/deployments",tag:"deployments",summary:"Queue an explicit user-confirmed deployment from a snapshot.",status:"implemented",request_body_schema:"CreateDeploymentRequestSchema",response_schema:"CreateDeploymentResponseSchema",notes:["The API returns after creating the deployment record and queue job; worker-service claims deployment_jobs for build and Cloudflare publish."]},{method:"GET",path:"/sites/:site_id/deployments/current",tag:"deployments",summary:"Read the latest deployment for workspace refresh recovery.",status:"implemented",response_schema:"CurrentDeploymentResponseSchema"},{method:"GET",path:"/sites/:site_id/deployments/status",tag:"deployments",summary:"Read current in-flight deployment and latest released deployment.",status:"implemented",response_schema:"GetDeploymentsStatusResponseSchema"},{method:"GET",path:"/sites/:site_id/deployments/:deployment_id",tag:"deployments",summary:"Read one tenant-scoped deployment for status polling.",status:"implemented",response_schema:"GetDeploymentResponseSchema"},{method:"GET",path:"/sites/:site_id/cms/collections",tag:"cms",summary:"List CMS collections for a site.",status:"planned"},{method:"POST",path:"/sites/:site_id/cms/collections",tag:"cms",summary:"Create a CMS collection bound to generated content.",status:"planned"},{method:"GET",path:"/sites/:site_id/cms/collections/:collection_id/entries",tag:"cms",summary:"List CMS entries for a collection.",status:"planned"},{method:"POST",path:"/sites/:site_id/cms/collections/:collection_id/entries",tag:"cms",summary:"Create a CMS entry.",status:"planned"},{method:"PATCH",path:"/sites/:site_id/cms/collections/:collection_id/entries/:entry_id",tag:"cms",summary:"Update a CMS entry.",status:"planned"},{method:"POST",path:"/sites/:site_id/snapshots/:snapshot_id/version-record",tag:"versions",summary:"Record the sandbox accepted git commit for a promoted snapshot version.",status:"implemented",request_body_schema:"RecordSnapshotVersionRequestSchema",response_schema:"RecordSnapshotVersionResponseSchema"},{method:"GET",path:"/sites/:site_id/versions",tag:"versions",summary:"List snapshot-backed site versions.",status:"implemented",response_schema:"ListSiteVersionsResponseSchema"},{method:"POST",path:"/sites/:site_id/versions/:snapshot_id/restore",tag:"versions",summary:"Restore a site to an earlier snapshot version.",status:"implemented",response_schema:"RestoreSiteSnapshotResponseSchema"},{method:"GET",path:"/sites/:site_id/domains",tag:"domains",summary:"List custom domains for a site.",status:"planned"},{method:"POST",path:"/sites/:site_id/domains",tag:"domains",summary:"Attach a custom domain to a site.",status:"planned"},{method:"GET",path:"/admin/tenants",tag:"admin",summary:"Admin tenant listing.",status:"planned"},{method:"GET",path:"/usage/summary",tag:"usage",summary:"Summarize tenant usage and cost controls.",status:"planned"}],gc=[{method:"POST",path:"/v1/agent/clarify/:site_id",tag:"clarify",summary:"Stream Step 2 clarify questions as SSE; event_order includes optional skill.selecting, skill.selected, clarify.archetype_proposals, and run.failed on errors.",status:"implemented",request_body_schema:"ClarifyRunInputSchema without tenant_id/site_id",event_schema:"ClarifyStreamEventSchema",event_order:["run.started","skill.selecting","skill.selected","clarify.partial","clarify.archetype_proposals","clarify.finished","run.failed"]},{method:"POST",path:"/v1/agent/sitemap/:site_id",tag:"sitemap",summary:"Stream Step 3 sitemap generation as SSE; event_order includes sitemap.partial and run.failed on errors.",status:"implemented",request_body_schema:"SitemapRunInputSchema public body without server-injected fields",event_schema:"SitemapStreamEventSchema",event_order:["run.started","sitemap.generating","sitemap.partial","sitemap.generated","sitemap.clamped","run.failed"]}],fa=e.object({id:e.string().min(1),role:e.enum(["system","user","assistant"]),metadata:e.unknown().optional(),parts:e.array(ee).min(1)}),Ut=fa.extend({role:e.literal("user")}),hc=e.object({base_snapshot_id:e.string().min(1).optional(),message:Ut.optional(),client_run_key:e.string().min(1).max(200).optional()}).superRefine((t,i)=>{F(t.message)&&i.addIssue({code:"custom",path:["message"],message:"Workspace startup message must not contain secrets",params:{errorCode:"WORKSPACE_MESSAGE_CONTAINS_SECRET"}})}),xa=e.object({path:e.string().regex(/^\/v1\/workspace\/sites\/[^/]+\/socket$/),run_id:e.string().min(1),base_snapshot_id:e.string().min(1),run_kind:ne}),_c=e.object({agent_run:T,websocket:xa,next_step:e.literal("workspace_socket")}),Sc=e.object({agent_run:T}),yc=e.object({agent_type:e.enum(["clarify","sitemap","workspace"])}),bc=e.object({agent_run:T}),fc=e.enum(["client.message.create","client.run.cancel","client.tool.approve","server.run.started","server.user.message","server.assistant.delta","server.tool.started","server.tool.completed","server.workspace.suggestions","workspace.plan.created","workspace.worker.updated","workspace.task.updated","server.patch.applied","server.sitemap.updated","server.snapshot.created","server.preview.invalidated","preview.build.started","preview.build.succeeded","preview.build.failed","server.run.finished","server.run.failed","server.error","server.activity.started","server.activity.updated","server.activity.finished","server.activity.failed"]),g=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),run_id:e.string().min(1).optional(),correlation_id:e.string().min(1).optional(),seq:e.number().int().positive().optional(),sent_at:e.string().min(1)}),Ea=e.object({key:e.string().min(1),label:e.string().min(1),source_file:e.string().min(1).optional(),component_name:e.string().min(1).optional(),opening_element_range:e.object({start_line:e.number().int().positive(),start_column:e.number().int().nonnegative(),end_line:e.number().int().positive(),end_column:e.number().int().nonnegative()}).optional(),structural_path:e.string().min(1).optional(),text_preview:e.string().min(1).optional()}),Ra=e.discriminatedUnion("type",[g.extend({type:e.literal("client.message.create"),payload:e.object({client_message_id:e.string().min(1),in_reply_to_tool_call_id:e.string().min(1).optional(),selected_component:Ea.optional(),message:Ut,base_snapshot_id:e.string().min(1).optional()})}),g.extend({type:e.literal("client.run.cancel"),payload:e.object({run_id:e.string().min(1),reason:e.string().min(1).optional()})}),g.extend({type:e.literal("client.tool.approve"),payload:e.object({tool_call_id:e.string().min(1),decision:e.enum(["approve","reject"]),reason:e.string().min(1).optional()})})]),va=e.discriminatedUnion("type",[g.extend({type:e.literal("server.run.started"),payload:e.object({run_id:e.string().min(1),agent_type:e.literal("workspace")})}),g.extend({type:e.literal("server.user.message"),payload:e.object({client_message_id:e.string().min(1),message_id:e.string().min(1),parts:e.array(ee).min(1),in_reply_to_tool_call_id:e.string().min(1).optional()})}),g.extend({type:e.literal("server.assistant.delta"),payload:e.object({message_id:e.string().min(1),parts:e.array(ee).min(1),status:e.enum(["streaming","ready"])})}),g.extend({type:e.literal("server.tool.started"),payload:e.object({tool_call_id:e.string().min(1),name:e.string().min(1),summary:e.string().min(1)})}),g.extend({type:e.literal("server.tool.completed"),payload:e.object({tool_call_id:e.string().min(1),name:e.string().min(1),result_summary:e.string().min(1)})}),g.extend({type:e.literal("server.workspace.suggestions"),payload:Ot.extend({run_id:e.string().min(1)}).strict()}),g.extend({type:e.literal("workspace.plan.created"),payload:e.object({plan_id:e.string().min(1),run_kind:ne,groups:e.array(Pe),tasks:e.array(we),dependencies:e.array(Oe),expected_outputs:e.array(y),diagnostics:Ce,summary:Dt})}),g.extend({type:e.literal("workspace.worker.updated"),payload:e.object({group_id:e.string().min(1),phase:Ae,status:A,task_counts:Lt,target_paths:e.array(y),diagnostics:e.array(e.string().min(1))})}),g.extend({type:e.literal("workspace.task.updated"),payload:e.object({task_id:e.string().min(1),group_id:e.string().min(1),status:A,target_path:y,read_files_count:e.number().int().nonnegative(),diagnostics:e.array(e.string().min(1)),diagnostic_details:e.array(je).optional()})}),g.extend({type:e.literal("server.patch.applied"),payload:e.object({patch_batch_id:e.string().min(1),changed_files:e.array(e.string().min(1)),sitemap_resync_queued:e.boolean()})}),g.extend({type:e.literal("server.sitemap.updated"),payload:e.object({sitemap_id:e.string().min(1),version:e.number().int().positive(),reason:e.string().min(1)})}),g.extend({type:e.literal("server.snapshot.created"),payload:e.object({snapshot_id:e.string().min(1),manifest_hash:e.string().regex(/^sha256:[a-f0-9]{64}$/)})}),g.extend({type:e.literal("server.preview.invalidated"),payload:e.object({reason:e.string().min(1),next_preview_url:e.string().url().optional()})}),g.extend({type:e.literal("preview.build.started"),payload:e.object({snapshot_id:e.string().min(1)})}),g.extend({type:e.literal("preview.build.succeeded"),payload:e.object({snapshot_id:e.string().min(1)})}),g.extend({type:e.literal("preview.build.failed"),payload:e.object({snapshot_id:e.string().min(1),message:e.string().min(1),diagnostics:e.string().min(1),retryable:e.boolean()})}),g.extend({type:e.literal("server.run.finished"),payload:e.object({run_id:e.string().min(1),snapshot_id:e.string().min(1)})}),g.extend({type:e.literal("server.run.failed"),payload:e.object({run_id:e.string().min(1),error_code:e.string().min(1),message:e.string().min(1),retryable:e.boolean()})}),g.extend({type:e.literal("server.error"),payload:e.object({code:e.string().min(1),message:e.string().min(1),retryable:e.boolean()})}),g.extend({type:e.literal("server.activity.started"),payload:e.object({activity_id:e.string().min(1),parent_activity_id:e.string().min(1).optional(),kind:kt,title:e.string().min(1).max(200),title_code:I.optional(),detail:e.string().max(360).optional(),detail_code:I.optional(),locks_input:e.boolean()})}),g.extend({type:e.literal("server.activity.updated"),payload:e.object({activity_id:e.string().min(1),title:e.string().min(1).max(200).optional(),title_code:I.optional(),detail:e.string().max(360).optional(),detail_code:I.optional()})}),g.extend({type:e.literal("server.activity.finished"),payload:e.object({activity_id:e.string().min(1)})}),g.extend({type:e.literal("server.activity.failed"),payload:e.object({activity_id:e.string().min(1),detail:e.string().max(360).optional()})})]),xc=e.union([Ra,va]),Ec={path:"/v1/workspace/sites/:site_id/socket",protocol:"ws",status:"implemented",inbound_message_schema:"WorkspaceClientMessageSchema",outbound_message_schema:"WorkspaceServerMessageSchema",query_parameters:[{name:"run_id",required:!1,schema:"string",summary:"Workspace run id returned by the API run-start response."},{name:"run_kind",required:!1,schema:"WorkspaceRunKindSchema",summary:"Workspace run mode; initial_generation can auto-start when base_snapshot_id is present."},{name:"base_snapshot_id",required:!1,schema:"string",summary:"Authoritative base snapshot id for this workspace run."}],ai_sdk_ui_compatible:!0,notes:["Assistant UI output is carried as AI SDK UIMessage parts, including text, data-*, and tool-* parts.","Operational AgentEvents remain persisted separately for replay and audit."]},Ft=e.string().regex(/^sha256:[a-f0-9]{64}$/),Ia=e.enum(["create","update","delete","str_replace"]),Wt=e.enum(["sitemap_resync","smoke_test","prepare_preview"]),Ta=e.object({old_string:e.string().min(1).describe("Exact text to find in the current file. Must match the file uniquely; include enough surrounding context (usually 2-4 adjacent lines)."),new_string:e.string().describe("Replacement text. May be empty to delete the matched text."),replace_all:e.boolean().optional()}).strict(),ka=e.object({path:y,operation:Ia,expected_hash:Ft.optional(),full_content:e.string().describe("Complete file content for create/update patches. It is passed as a JSON string, so every double quote in source code must be valid JSON; avoid ASCII double quotes inside JSX attribute values and use corner quotes like \u300C\u751F\u65E5\u5FEB\u4E50\u300D for visitor-facing quoted examples.").optional(),edits:e.array(Ta).min(1).max(20).optional()}).strict().superRefine((t,i)=>{let r=t.full_content!==void 0;if(t.operation==="delete"){r&&i.addIssue({code:"custom",path:["full_content"],message:"delete patches must not include full_content"}),t.edits!==void 0&&i.addIssue({code:"custom",path:["edits"],message:"edits is only allowed for str_replace patches"});return}if(t.operation==="str_replace"){t.full_content!==void 0&&i.addIssue({code:"custom",path:["full_content"],message:"str_replace patches must not include full_content"}),(!t.edits||t.edits.length===0)&&i.addIssue({code:"custom",path:["edits"],message:"str_replace patches must include a non-empty edits array"});return}r||i.addIssue({code:"custom",path:["full_content"],message:"create/update patches must include full_content"}),t.edits!==void 0&&i.addIssue({code:"custom",path:["edits"],message:"edits is only allowed for str_replace patches"})}),Aa=e.object({kind:e.enum(["block","page","site","chrome"]),id:e.string().min(1).max(120)}),ja=e.object({base_key:e.string().min(1).max(120).regex(/^[A-Za-z0-9._:-]+$/).refine(t=>!t.includes(".."),{message:"base_key must not contain '..'"}),owner:Aa,count:e.number().int().min(1).max(12),query:e.string().min(1).max(400),role:e.enum(["hero","section","card","gallery","testimonial","decorative","site_background","nav_background","footer_background"]),orientation:e.enum(["landscape","portrait","square"]).optional(),altHint:e.string().min(1).max(300)}),qt=e.object({site_id:e.string().min(1),base_snapshot_id:e.string().min(1),reason:e.string().min(1),patches:e.array(ka).min(1),media_requests:e.array(ja).max(24).optional(),post_actions:e.array(Wt).optional()});function Gt(t,i){let r=new Set;for(let[c,m]of t.patches.entries())r.has(m.path)&&i.addIssue({code:"custom",path:["patches",c,"path"],message:`Duplicate patch path: ${m.path}`}),r.add(m.path)}var Rc=qt.superRefine(Gt),vc=qt.omit({base_snapshot_id:!0}).extend({site_id:e.string().min(1).optional()}).superRefine(Gt),Ca=b,Pa=e.object({path:Ca,operation:e.enum(["upsert","delete"]).optional()}),Ic=e.object({files:e.array(Pa).min(1)}).strict(),wa=e.enum(["BASE_SNAPSHOT_NOT_FOUND","PATCH_TARGET_NOT_FOUND","PATCH_TARGET_ALREADY_EXISTS","PATCH_EXPECTED_HASH_MISMATCH","PATCH_DIFF_UNSUPPORTED","PATCH_PROTECTED_FILE","PATCH_VALIDATION_FAILED","PATCH_MEDIA_REFERENCE_NOT_DECLARED","PATCH_BATCH_INVALID","PATCH_BATCH_FAILED","PATCH_BATCH_TOO_LARGE","STR_REPLACE_NOT_FOUND","STR_REPLACE_NOT_UNIQUE","STR_REPLACE_BINARY_FILE","STR_REPLACE_REQUIRES_READ"]),Oa=e.object({status:e.literal("applied"),patch_batch_id:e.string().min(1),site_id:e.string().min(1),base_snapshot_id:e.string().min(1),snapshot_id:e.string().min(1),manifest_hash:Ft,object_key:e.string().min(1),changed_files:e.array(y).min(1),post_actions_queued:e.array(Wt),dropped_protected_files:e.array(e.string().min(1)).min(1).optional()}),Na=e.object({status:e.literal("failed"),code:wa,message:e.string().min(1),retryable:e.boolean().default(!1),details:e.unknown().optional()}),Tc=e.discriminatedUnion("status",[Oa,Na]),kc=e.object({ok:e.literal(!0)}),Bt=b,Da=e.enum(["text","binary"]),Kt=e.object({path:Bt,kind:Da,language:e.string().min(1).nullable(),size_bytes:e.number().int().nonnegative()}),Ac=e.object({path:Bt}),La=Kt.extend({kind:e.literal("text"),language:e.string().min(1),content:e.string()}),Ma=Kt.extend({kind:e.literal("binary"),language:e.null(),mime_type:e.string().min(1),content_base64:e.string().min(1)}),jc=e.union([La,Ma]);function F(t){return typeof t=="string"?/authorization\s*:|bearer\s+|token\s*=|secret\s*=|api[_-]?key\s*=|access[_\s-]?key\s*=|\bsk-[a-z0-9_-]{20,}|eyJ[a-z0-9_-]{10,}\.[a-z0-9_-]{10,}\.[a-z0-9_-]{10,}/i.test(t):!t||typeof t!="object"?!1:Array.isArray(t)?t.some(i=>F(i)):Object.entries(t).some(([i,r])=>Ua(i)||F(r))}function Ua(t){let i=t.replace(/([a-z0-9])([A-Z])/g,"$1_$2").replace(/\s+/g,"_").toLowerCase();return/(^|[_-])(authorization|token|secret|api[_-]?key|apikey|access[_-]?key|accesskey)([_-]|$)/.test(i)}function Fa(t){let i=t.split("/");return t.length>0&&!t.startsWith("/")&&!t.includes("\\")&&i.every(r=>r!==""&&r!=="."&&r!=="..")}var Ht=e.enum(["idle","creating","restoring_snapshot","installing_dependencies","starting_preview","ready","active","stopping","stopped","failed"]),Wa=e.object({id:e.string().min(1),tenant_id:e.string().min(1),site_id:e.string().min(1),sandbox_id:e.string().min(1).nullable(),status:Ht,source_snapshot_id:e.string().min(1).nullable(),last_snapshot_id:e.string().min(1).nullable(),preview_url:e.string().url().nullable(),last_activity_at:e.string().min(1).nullable(),created_at:e.string().min(1),updated_at:e.string().min(1)}),Cc=e.object({session_id:e.string().min(1).optional(),sandbox_id:e.string().min(1).optional(),source_snapshot_id:e.string().min(1).optional(),last_snapshot_id:e.string().min(1),status:Ht,preview_url:e.string().url().optional()}),Pc=e.object({preview_session:Wa,next_step:e.literal("preview")}),wc=e.object({failed_count:e.number().int().nonnegative()}),Oc=e.object({site_id:e.string().min(1)}),Nc=e.object({status:e.enum(["cancelled","no_active_run"]),agent_run:T.nullable()});export{kt as ActivityKindSchema,I as ActivityTitleCodeSchema,ft as AgentErrorCategorySchema,ye as AgentEventRecordSchema,Mt as AgentEventSchema,Nt as AgentEventTypeSchema,vt as AgentModelRouteSchema,ma as AgentPlanStepSchema,Rt as AgentRunKindSchema,T as AgentRunRecordSchema,Ci as AgentRunStatusSchema,Et as AgentRunTypeSchema,_a as AiSdkUiDataPartSchema,ya as AiSdkUiErrorPartSchema,ua as AiSdkUiFilePartSchema,ee as AiSdkUiMessagePartSchema,fa as AiSdkUiMessageSchema,da as AiSdkUiReasoningPartSchema,ha as AiSdkUiSourceDocumentPartSchema,ga as AiSdkUiSourceUrlPartSchema,ba as AiSdkUiStepStartPartSchema,pa as AiSdkUiTextPartSchema,Sa as AiSdkUiToolPartSchema,pc as ApiContractStatusSchema,Ni as ApiErrorEnvelopeSchema,ji as ApiResponseSchema,sc as AppendAgentEventRequestSchema,cc as AppendAgentEventResponseSchema,wa as ApplyPatchBatchErrorCodeSchema,Na as ApplyPatchBatchFailureSchema,Rc as ApplyPatchBatchInputSchema,ka as ApplyPatchBatchPatchSchema,Wt as ApplyPatchBatchPostActionSchema,Tc as ApplyPatchBatchResultSchema,Oa as ApplyPatchBatchSuccessSchema,vc as ApplyPatchBatchToolInputSchema,Ta as ApplyPatchEditSchema,Ia as ApplyPatchOperationSchema,bt as ArchetypeProposalSchema,ai as BINDING_STATUSES,At as BlockGenerationContextSchema,Fs as BlockMediaIntentSchema,Yi as BlockSchema,jt as BrandingSchema,xt as BriefRecordSchema,To as CHAT_COPY,Io as CLARIFICATION_COPY,mt as CURRENT_EDIT_ENGINE_VERSION,Oc as CancelActiveWorkspaceRunRequestSchema,Nc as CancelActiveWorkspaceRunResponseSchema,Ct as ChromeDesignSchema,zi as ChromeFooterDesignSchema,Vi as ChromeFooterShellSchema,Ki as ChromeHeaderDesignSchema,Bi as ChromeHeaderShellSchema,$i as ChromeMobileNavDesignSchema,Ri as ClarifyQuestionOptionSchema,vi as ClarifyQuestionSchema,fi as ClarifyQuestionTypeSchema,Ee as ClarifyQuestionsSchema,ts as ClarifyRunInputSchema,ra as ClarifySessionRecordSchema,ns as ClarifyStreamEventSchema,Go as CmsCollectionBindingSchema,Do as ConnectDynamicCollectionInputSchema,Uo as ConnectFormInputSchema,fe as ConversionHintsSchema,Ms as CreateAgentRunConflictResponseSchema,Ss as CreateAgentRunRequestSchema,ys as CreateAgentRunResponseSchema,js as CreateDeploymentRequestSchema,Cs as CreateDeploymentResponseSchema,Ya as CreateDocumentUploadRequestSchema,tr as CreateImageUploadRequestSchema,Ka as CreateInputSourceRequestSchema,ms as CreateSiteBriefRequestSchema,hs as CreateSiteBriefResponseSchema,ls as CreateSiteDraftRequestSchema,cs as CreateSiteInputSchema,Qt as CreateTextInputSourceRequestSchema,Zt as CreateUrlInputSourceRequestSchema,Ps as CurrentDeploymentResponseSchema,ri as DEFAULT_FONTS,hr as DEFAULT_SITE_LOCALE,Oi as DEPLOYMENT_REALTIME_CHANNEL,De as DEPLOYMENT_STATUSES,Ls as DEPLOYMENT_WEBSOCKET_CONTRACT,Ha as DOCUMENT_EXTENSION_WHITELIST,Va as DOCUMENT_MIME_WHITELIST,Es as DeleteSiteSnapshotResponseSchema,te as DeploymentRecordSchema,Ds as DeploymentRedisPubSubEventSchema,Te as DeploymentStatusSchema,St as DeploymentStatusSummarySchema,Ns as DeploymentWsServerMessageSchema,wi as DeploymentWsServerMessageTypeSchema,Gs as DesignPlanPatchSchema,oa as DesignPlanRecordSchema,Pt as DesignPlanSchema,Us as DesignTokensSchema,Ao as EDIT_ENGINE_VERSION_HEADER,jo as EDIT_ENGINE_VERSION_SOURCE_HEADER,Ro as ERROR_COPY,he as EditEngineVersionParseError,us as ExternalSyncSiteRequestSchema,gs as ExternalSyncSiteResponseSchema,$t as ExtractedFactKindSchema,G as ExtractedFactSchema,ti as FIELD_TYPES,hi as FONT_PAIRINGS,ni as FORM_FIELD_TYPES,wc as FailStaleInFlightWorkspaceRunsResponseSchema,lt as FieldDeclSchema,Hi as FooterShellSurfaceSchema,ii as FormFieldDeclSchema,ws as GetDeploymentResponseSchema,Os as GetDeploymentsStatusResponseSchema,qi as HeaderShellBehaviorSchema,Gi as HeaderShellShapeSchema,Wi as HeaderShellSurfaceSchema,Fi as HeaderShellVariantSchema,Qa as IMAGE_EXTENSION_WHITELIST,Za as IMAGE_MIME_WHITELIST,_r as ISO_639_3_TO_SITE_LOCALE,Jt as ImageRoleSchema,Ut as InboundUserMessageSchema,zt as InputBundleStatusSchema,K as InputConflictSchema,nr as InputContextBundleSchema,Xt as InputSourceSchema,ae as InputSourceStatusSchema,ie as InputSourceTypeSchema,yc as LatestAgentRunQuerySchema,bc as LatestAgentRunResponseSchema,Sc as LatestWorkspaceRunResponseSchema,lc as ListAgentEventsQuerySchema,mc as ListAgentEventsResponseSchema,Is as ListSiteVersionsResponseSchema,$a as MAX_DOCUMENT_SOURCES_PER_SITE,za as MAX_DOCUMENT_UPLOAD_BYTES,er as MAX_IMAGE_SOURCES_PER_SITE,Ja as MAX_IMAGE_UPLOAD_BYTES,qs as MediaAssetSchema,Mi as MediaAttributionSchema,Aa as MediaRequestOwnerSchema,xe as MotionLevelSchema,mi as NEXT_FONT_DISPLAY_NAMES,U as NEXT_FONT_REGISTRY,Xi as PageSchema,ec as PersistClarifyAnswersRequestSchema,tc as PersistClarifyAnswersResponseSchema,Cc as PersistPreviewSessionRequestSchema,Pc as PersistPreviewSessionResponseSchema,ic as PersistSiteDesignPlanRequestSchema,ac as PersistSiteDesignPlanResponseSchema,Zs as PersistSiteSitemapRequestSchema,Js as PersistSiteSitemapResponseSchema,bs as PersistSiteSnapshotRequestSchema,fs as PersistSiteSnapshotResponseSchema,bi as PositioningPrefillSchema,Se as PositioningSourceSchema,ks as PrepareVersionPreviewRequestSchema,As as PrepareVersionPreviewResponseSchema,xs as PromoteSiteSnapshotResponseSchema,vo as REFUSAL_COPY,uc as REST_API_ENDPOINTS,Rs as RecordSnapshotVersionRequestSchema,vs as RecordSnapshotVersionResponseSchema,Yt as ReferencePagePatternSchema,B as ReferenceSignalsSchema,No as ResolvedFieldSchema,Fo as ResolvedFormFieldSchema,dc as RestApiMethodSchema,Ts as RestoreSiteSnapshotResponseSchema,Tt as RouteGenerationCardSchema,Kn as SITE_EDIT_RUNTIME_CONTAINER_TAGS,Hn as SITE_EDIT_RUNTIME_TEXT_TAGS,Bn as SITE_EDIT_RUNTIME_VOID_ELEMENT_TAGS,tn as SITE_EDIT_SOURCE_ALLOWED_APP_FILES,Le as SITE_EDIT_SOURCE_ALLOWED_DIRS,en as SITE_EDIT_SOURCE_ALLOWED_ROOT_FILES,re as SITE_EDIT_SOURCE_DELETE_CAPABILITY,nn as SITE_EDIT_TEXT_SOURCE_EXTENSIONS,Sr as SITE_LOCALE_CODES,os as SITE_PLANNING_FROZEN_ERROR_CODE,ss as SITE_PLANNING_LOCKED_ERROR_CODE,gc as SSE_STREAMS,yr as SUPPORTED_SITE_LOCALES,Wa as SandboxSessionSchema,Ht as SandboxSessionStatusSchema,It as SiteDesignContextSchema,xi as SiteDesignDensitySchema,Ei as SiteDesignMotionLevelSchema,z as SiteEditBoundaryKindSchema,En as SiteEditCapabilityConstraintSchema,fn as SiteEditCapabilityModeSchema,V as SiteEditCapabilityModeViewSchema,In as SiteEditClassNameSourceDiagnosticSchema,v as SiteEditClassNameSourceRangeSchema,ze as SiteEditClassNameSourceSchema,Tn as SiteEditClassNameSourceStyleContextSchema,Ve as SiteEditClassNameSourceStylesheetSchema,le as SiteEditClassNameSourceWriteIntentSchema,vr as SiteEditCommandDiagnosticSchema,Rn as SiteEditCommandErrorSchema,xn as SiteEditConstraintKindSchema,rt as SiteEditEffectiveWriteTargetSchema,pe as SiteEditElementPropertySchema,Kr as SiteEditEventSchema,ue as SiteEditExternalSourceKindSchema,jr as SiteEditGetClassNameSourceCommandResultSchema,Ar as SiteEditGetClassNameSourceResultSchema,An as SiteEditInsertNodeSpecSchema,Ye as SiteEditMoveTargetSchema,$ as SiteEditNodeCapabilitySnapshotSchema,lo as SiteEditObjectCapabilitiesSchema,So as SiteEditObjectContentDetailSchema,uo as SiteEditObjectDetailSchema,ho as SiteEditObjectEditContextSchema,yo as SiteEditObjectMediaDetailSchema,_o as SiteEditObjectStyleDetailSchema,go as SiteEditObjectSummarySchema,Fr as SiteEditOperationCommandResultSchema,et as SiteEditOperationErrorCodeSchema,tt as SiteEditOperationErrorSchema,jn as SiteEditOperationParamsSchema,Y as SiteEditOperationPayloadSchema,Ur as SiteEditOperationRequestSchema,nt as SiteEditOperationSelectionRefSchema,Mn as SiteEditOperationSummarySchema,Xe as SiteEditOperationTargetSchema,L as SiteEditOperationTypeSchema,$e as SiteEditOperationValueSchema,Nn as SiteEditPatchPlanPatchSchema,Qr as SiteEditPatchPlanSchema,Q as SiteEditProvenanceChainSchema,Wn as SiteEditProvenanceHopSchema,mo as SiteEditRenderDocumentSchema,C as SiteEditRenderEntryRefSchema,Un as SiteEditRenderEntrySchema,dn as SiteEditResolveSourceLocationInputSchema,ot as SiteEditSemanticSourceSchema,Me as SiteEditSourceDeleteCapabilitySchema,rn as SiteEditSourceDirectoryPathSchema,ln as SiteEditSourceFileBinaryPreviewUnavailableReasonSchema,pn as SiteEditSourceFileBinaryResponseSchema,rr as SiteEditSourceFileKindSchema,on as SiteEditSourceFileListItemSchema,sr as SiteEditSourceFileResponseSchema,mn as SiteEditSourceFileTextResponseSchema,zr as SiteEditSourceIdentitySchema,un as SiteEditSourceLocationRangeSchema,cr as SiteEditSourceLocationSchema,Gn as SiteEditSourceLocatorRangeSchema,ct as SiteEditSourceLocatorSchema,b as SiteEditSourcePathSchema,Ue as SiteEditSourceTreeNodeSchema,or as SiteEditSourceTreeResponseSchema,sn as SiteEditSourceTreeTruncationReasonSchema,cn as SiteEditSourceTreeTruncationSchema,Je as SiteEditStyleBreakpointSchema,po as SiteEditStyleModelSchema,Qe as SiteEditStylePropertySchema,st as SiteEditStyleSourceSchema,Ze as SiteEditStyleStateModeSchema,it as SiteEditTextSegmentSchema,Fn as SiteEditTextSourceSchema,at as SiteEditWriteTargetSchema,ki as SiteGenerationStateSchema,D as SiteLocaleSchema,Ws as SiteMediaIntentSchema,w as SiteRecordSchema,Ii as SiteStatusSchema,Pi as SiteVersionListItemSchema,Ie as SiteVersionRecordSchema,zs as SitemapAddBlockInputSchema,ke as SitemapAnswerSchema,Hs as SitemapChangeBlockVariantInputSchema,Zi as SitemapDeleteBlockInputSchema,Qi as SitemapEditActorSchema,ta as SitemapEditErrorCodeSchema,ia as SitemapEditFailureSchema,ea as SitemapEditOperationSchema,Ys as SitemapEditResultSchema,na as SitemapEditSuccessSchema,wt as SitemapGenerationStageSchema,Bs as SitemapModelOutputSchema,Ks as SitemapMoveBlockInputSchema,aa as SitemapRecordSchema,Xs as SitemapRunInputSchema,q as SitemapSchema,Qs as SitemapStreamEventSchema,Ji as SitemapUpdateBlockInstructionInputSchema,Vs as SitemapUpdateBlockPropsInputSchema,Li as SitemapUserChoiceSchema,O as SkillSelectionSchema,Ui as SkillSelectionSourceSchema,Ft as SnapshotContentHashSchema,y as SnapshotFilePathSchema,W as SnapshotRecordSchema,ve as SnapshotStatusSchema,hc as StartWorkspaceRunRequestSchema,_c as StartWorkspaceRunResponseSchema,_i as THEME_PRESETS,ds as UpdateBriefRequestSchema,_s as UpdateBriefResponseSchema,nc as UpdateClarifyArchetypeRequestSchema,ps as UpdateSiteRequestSchema,be as VisualHintsSchema,Di as VisualThemeSchema,Ec as WORKSPACE_WEBSOCKET_CONTRACT,Ra as WorkspaceClientMessageSchema,Si as WorkspaceDesignApplyRequestSchema,yi as WorkspaceDesignApplyResponseSchema,je as WorkspaceDiagnosticSchema,Pa as WorkspaceDirectEditFileSchema,Ca as WorkspaceDirectEditPathSchema,Ic as WorkspaceDirectEditRequestSchema,kc as WorkspaceDirectEditResponseSchema,Ce as WorkspaceExecutionDiagnosticsSchema,rc as WorkspaceExecutionPlanSchema,ja as WorkspaceMediaRequestSchema,Oe as WorkspacePlanDependencySchema,Dt as WorkspacePlanSummarySchema,la as WorkspacePlanTaskKindSchema,we as WorkspacePlanTaskSchema,ne as WorkspaceRunKindSchema,Ea as WorkspaceSelectedComponentSchema,va as WorkspaceServerMessageSchema,$s as WorkspaceSitemapEditRequestSchema,xa as WorkspaceSocketDescriptorSchema,Ma as WorkspaceSourceFileBinaryResponseSchema,Da as WorkspaceSourceFileKindSchema,Kt as WorkspaceSourceFileListItemSchema,Ac as WorkspaceSourceFilePathQuerySchema,jc as WorkspaceSourceFileResponseSchema,La as WorkspaceSourceFileTextResponseSchema,Bt as WorkspaceSourcePathSchema,sa as WorkspaceSuggestionSchema,Ot as WorkspaceSuggestionsSchema,ca as WorkspaceSuggestionsSourceSchema,Lt as WorkspaceTaskCountsSchema,xc as WorkspaceWebSocketMessageSchema,fc as WorkspaceWebSocketMessageTypeSchema,Pe as WorkspaceWorkerGroupSchema,Ae as WorkspaceWorkerPhaseSchema,oc as WorkspaceWorkerResultSchema,A as WorkspaceWorkerStatusSchema,as as assertSiteGenerationStateTransition,is as assertSiteStatusTransition,Ke as canonicalizePageSlug,Jr as composeSiteEditRepeatInstanceKey,Pn as computeSiteEditSourceIdentityKey,F as containsSensitiveData,vn as createSiteEditCommandFailureSchema,He as createSiteEditCommandResultSchema,me as createSiteEditCommandSuccessSchema,_e as fontStack,se as getSiteEditSourceDeleteProtectionReason,Xa as isConsentGranted,Jn as isExactEditEngineVersion,Xn as isSiteEditRuntimeContainerTag,Qn as isSiteEditRuntimeTextTag,fo as isSiteEditRuntimeVoidElementTag,mr as isSiteEditSourceDeleteProtectedPath,gn as isSiteEditSourceDirectoryPath,Fe as isSiteEditSourcePath,oe as isSiteEditTextSourcePath,Dn as makeSiteEditRepeatInstanceKey,Ko as normalizeCmsPublicApiBase,bn as pageSlugToRouteFilePath,ei as parseExactEditEngineVersion,Ln as parseSiteEditRepeatInstanceKey,$r as parseSiteEditSourceIdentityKey,oi as resolveFont,ci as resolveFontDisplayName,rs as resolveGenerationStateForRunLifecycle,qa as resolveRedisConnectionConfig,Co as resolveRequestedEditEngineVersion,xo as resolveSiteEditRuntimeOperationSummary,br as resolveSiteLocaleFromIso6393,Po as resolveSystemCurrentEditEngineVersion,gi as siteFontVariables,eo as stripSiteEditRepeatInstanceKeys};
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * 由 release-edit-engine-packages.ts 在 bump 版本时自动更新。
7
7
  */
8
- export declare const CURRENT_EDIT_ENGINE_VERSION = "0.4.1";
8
+ export declare const CURRENT_EDIT_ENGINE_VERSION = "0.4.3";
9
9
  export declare const EDIT_ENGINE_VERSION_HEADER = "x-vcp-edit-engine-version";
10
10
  export declare const EDIT_ENGINE_VERSION_SOURCE_HEADER = "x-vcp-edit-engine-version-source";
11
11
  export type EditEngineVersionSource = "explicit" | "fallback_current" | "system_current";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vcp-dev/contracts",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
4
4
  "type": "module",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {
@@ -51,7 +51,7 @@
51
51
  "typecheck": "tsc -p tsconfig.json --noEmit"
52
52
  },
53
53
  "dependencies": {
54
- "@vcp-dev/i18n": "0.0.0",
54
+ "@vcp-dev/i18n": "0.4.3",
55
55
  "culori": "^4.0.2",
56
56
  "zod": "^4.0.0"
57
57
  },