@makinbakin/sdk 0.0.1-rc.37 → 0.0.1-rc.39
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/_internal/app/components/conversation/attention.d.ts +3 -3
- package/_internal/app/components/conversation/use-conversation-attention.d.ts +2 -5
- package/content/index.js +6 -5
- package/conversation/index.js +1 -1
- package/hooks/index.js +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/routing/index.js +1 -1
- package/styles.css +1 -1
- package/testing/index.js +1 -1
- package/types/services.d.ts +2 -0
package/hooks/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
var createStoreImpl=(createState)=>{let state,listeners=new Set,setState=(partial,replace)=>{let nextState=typeof partial==="function"?partial(state):partial;if(!Object.is(nextState,state)){let previousState=state;state=(replace!=null?replace:typeof nextState!=="object"||nextState===null)?nextState:Object.assign({},state,nextState),listeners.forEach((listener)=>listener(state,previousState))}},getState=()=>state,api={setState,getState,getInitialState:()=>initialState,subscribe:(listener)=>{return listeners.add(listener),()=>listeners.delete(listener)}},initialState=state=createState(setState,getState,api);return api},createStore=(createState)=>createState?createStoreImpl(createState):createStoreImpl;import React from"react";var identity=(arg)=>arg;function useStore(api,selector=identity){let slice=React.useSyncExternalStore(api.subscribe,React.useCallback(()=>selector(api.getState()),[api,selector]),React.useCallback(()=>selector(api.getInitialState()),[api,selector]));return React.useDebugValue(slice),slice}var createImpl=(createState)=>{let api=createStore(createState),useBoundStore=(selector)=>useStore(api,selector);return Object.assign(useBoundStore,api),useBoundStore},create=(createState)=>createState?createImpl(createState):createImpl;function mapAuditMessage(event,data){switch(event){case"task.dispatched":return`Dispatched: ${data.title}`;case"task.triaged":return`Triaged: ${data.title}`;case"task.created":return`Created task: ${data.title}`;case"task.deleted":return`Deleted task: ${data.title}`;case"task.moved":return`Moved "${data.title}" \u2192 ${data.to}`;case"task.assigned":return`Assigned "${data.title}" to ${data.assignee}`;case"task.blocked":return`Blocked: ${data.title} \u2014 ${data.reason||"no reason"}`;case"task.dispatch_failed":{if(data.category==="model_provider_unavailable")return"Dispatch failed: model provider unavailable";if(typeof data.summary==="string")return data.summary;if(typeof data.error==="string"&&data.error.startsWith("Dispatch failed:"))return data.error;return`Dispatch failed: ${data.error||"unknown error"}`}case"task.updated":return`Updated: ${data.title}`;case"task.routed":{let parts=[data.model,data.thinking?`thinking ${data.thinking}`:null].filter(Boolean),via=typeof data.source==="string"&&data.source!=="inherit"?` via ${data.source==="class"?"class route":String(data.source).replace(/^tag:/,'tag "')+'"'}`:"";return`Routed to ${parts.join(", ")||"override"}${via}`}case"task.completion_suppressed":return`Ignored a duplicate completion${data.title?` of "${data.title}"`:""} \u2014 ${data.firstAgent||"another run"} had already completed this task${data.firstChannel?` via ${data.firstChannel}`:""}.`;case"task.dispatch_failure_ignored":return`A session error arrived after "${data.title||data.id}" had already moved to ${data.column||"done"} \u2014 no action needed.`;case"team.message_blocked":return`Blocked a message to ${data.agentId} \u2014 they are already running task ${data.taskId}.`;case"brand.injected":return`Brand '${data.brandId}' injected into dispatch${data.cardBytes?` (${data.cardBytes} B card)`:""}`;case"brand.dispatch_blocked":return typeof data.message==="string"?data.message:`Task waiting on missing brand '${data.brandId}'`;case"brand.asset_missing":return`Brand '${data.brandId}' has missing asset references`;case"brand.created":return`Created brand '${data.brandId}'`;case"brand.updated":return`Updated brand '${data.brandId}'`;case"brand.deleted":return`Deleted brand '${data.brandId}'`;case"task.worktree_materialized":return`Working in an isolated worktree of ${typeof data.repoPath==="string"?data.repoPath.split("/").pop():"the bound repo"} on branch ${data.branch} \u2014 the branch survives after the task settles`;case"task.turn_aborted":return data.reason==="superseded"?`Stopped a stale attempt on "${data.title||data.id}" \u2014 a fresh attempt takes over`:`Stopped the in-flight attempt on "${data.title||data.id}"${data.reason?` (${data.reason})`:""}`;case"task.turn_force_released":return`Released a hung attempt on task ${data.id} \u2014 its dispatch slot is free again`;case"task.run_superseded":return`Superseded a stalled attempt on "${data.title||data.id}" \u2014 it will be re-dispatched`;case"task.repo_binding_blocked":return typeof data.error==="string"?`Task blocked: ${data.error}`:"Task blocked: repo binding failed";case"dispatch.concurrency_clamped":return`Per-agent parallelism clamped to 1: the active runtime cannot isolate same-agent turns (requested ${data.requested})`;case"asset.stale_run_write_suppressed":return`Recorded a late save from a superseded run as version ${data.version} of ${data.assetId} WITHOUT promoting it \u2014 the current deliverable is unchanged`;case"system.init":return"Bakin started";case"system.dispatch_error":return`Dispatch failed: ${data.error||"unknown error"}`;case"workflow.step_dispatched":return`Step "${data.label||"unknown"}" dispatched to ${data.agent||"agent"}`;case"workflow.step_complete":return`Step "${data.label||"unknown"}" completed`;case"workflow.gate_reached":return`Awaiting approval: ${data.label||"gate"}`;case"workflow.gate_approved":return`Approved: ${data.label||"gate"}`;case"workflow.gate_rejected":return`Rejected: ${data.label||"gate"}${data.reason?` \u2014 ${data.reason}`:""}`;case"workflow.complete":return`Workflow complete${data.workflowId?` (${data.workflowId})`:""}`;default:{if(typeof data.message==="string"&&data.message.trim())return data.message;if(event.startsWith("exec.")){let suffix=event.endsWith(".fail")?" (failed)":event.endsWith(".error")?" (error)":"";if(data.label)return`${data.label}${suffix}`;let toolName=event.replace(/^exec\./,"").replace(/\.(ok|fail|error)$/,"");return humanizeExecName(toolName)+suffix}return event}}}function humanizeExecName(name){let words=name.replace(/^bakin_exec_/,"").split("_");if(words.length===0)return name;return words[0]=words[0].charAt(0).toUpperCase()+words[0].slice(1),words.join(" ")}function isNoisyEvent(evt){if(evt.agent==="system"&&evt.message.startsWith("Dispatch failed"))return!0;if(evt.eventName&&isReadOnlyExecOk(evt.eventName))return!0;if(evt.eventName==="dispatch.registry_clobber")return!0;return!1}function isReadOnlyExecOk(eventName){if(!eventName.startsWith("exec.")||!eventName.endsWith(".ok"))return!1;let toolName=eventName.replace(/^exec\./,"").replace(/\.ok$/,"");if(toolName==="bakin_exec_get_paths"||toolName==="bakin_exec_heartbeat")return!0;return/_(list|get|query|search)$/.test(toolName)}var useContentStore=create((set,get)=>({files:{},heartbeats:{},connected:!1,loading:!0,auditEntries:[],activityEvents:[],sseConnected:!1,debug:!1,setFiles:(files)=>set({files}),updateFile:(key,content)=>set((state)=>({files:{...state.files,[key]:content}})),setHeartbeats:(heartbeats)=>set({heartbeats}),setConnected:(connected)=>set({connected}),appendAuditEntry:(entry)=>set((state)=>({auditEntries:[...state.auditEntries,entry]})),appendActivityEvent:(event)=>set((state)=>{if(isNoisyEvent(event))return state;if(state.activityEvents.some((e)=>e.id===event.id))return state;return{activityEvents:[event,...state.activityEvents].slice(0,100)}}),setActivityEvents:(events)=>set({activityEvents:events.filter((e)=>!isNoisyEvent(e)).slice(0,100)}),setSseConnected:(connected)=>set({sseConnected:connected}),setDebug:(debug)=>{set({debug});try{localStorage.setItem("bakin-debug",String(debug))}catch{}},toggleDebug:()=>{let next=!get().debug;set({debug:next});try{localStorage.setItem("bakin-debug",String(next))}catch{}},initialize:async()=>{try{if(localStorage.getItem("bakin-debug")==="true")set({debug:!0})}catch{}try{let[stateRes,healthRes,activityRes]=await Promise.all([fetch("/api/state"),fetch("/api/agents/health"),fetch("/api/activity")]);if(stateRes.ok){let files=await stateRes.json();set({files})}if(healthRes.ok){let heartbeats=await healthRes.json();set({heartbeats})}if(activityRes.ok){let data=await activityRes.json();if(data?.events)get().setActivityEvents(data.events)}}catch{}finally{set({loading:!1})}}}));import{useEffect}from"react";function buildNavItemsSnapshot(registry){let items=[];for(let[pluginId,navItems]of registry.manifestNavByPlugin.entries()){if(registry.navByPlugin.has(pluginId))continue;items.push(...navItems)}for(let navItems of registry.navByPlugin.values())items.push(...navItems);return items.sort((a,b)=>(a.order??100)-(b.order??100))}function getRegistry(){let g=globalThis;if(!g.__bakinClientRegistry)g.__bakinClientRegistry={navByPlugin:new Map,manifestNavByPlugin:new Map,routesByPlugin:new Map,cleanupByPlugin:new Map,navItemsSnapshot:[],version:0,listeners:new Set,badgesByPlugin:new Map,badgesSnapshot:new Map,badgeListeners:new Set,hitRenderersByPlugin:new Map,hitRenderersSnapshot:new Map,hitRendererListeners:new Set};let registry=g.__bakinClientRegistry;if(!registry.manifestNavByPlugin)registry.manifestNavByPlugin=new Map;if(!Array.isArray(registry.navItemsSnapshot))registry.navItemsSnapshot=buildNavItemsSnapshot(registry);if(!registry.badgesByPlugin)registry.badgesByPlugin=new Map;if(!registry.badgesSnapshot)registry.badgesSnapshot=buildBadgesSnapshot(registry);if(!registry.badgeListeners)registry.badgeListeners=new Set;if(!registry.hitRenderersByPlugin)registry.hitRenderersByPlugin=new Map;if(!registry.hitRenderersSnapshot)registry.hitRenderersSnapshot=buildHitRenderersSnapshot(registry);if(!registry.hitRendererListeners)registry.hitRendererListeners=new Set;return registry}function buildHitRenderersSnapshot(registry){let snapshot=new Map;for(let byType of registry.hitRenderersByPlugin.values())for(let[type,renderer]of byType)if(!snapshot.has(type))snapshot.set(type,renderer);return snapshot}function buildBadgesSnapshot(registry){let snapshot=new Map;for(let byNavItemId of registry.badgesByPlugin.values())for(let[navItemId,badge]of byNavItemId)if(!snapshot.has(navItemId))snapshot.set(navItemId,badge);return snapshot}function bumpBadges(){let registry=getRegistry();registry.badgesSnapshot=buildBadgesSnapshot(registry);for(let l of registry.badgeListeners)try{l()}catch(err){console.error("[bakin] badge listener threw:",err)}}function setNavBadge(pluginId,navItemId,badge){let registry=getRegistry(),plugin=registry.badgesByPlugin.get(pluginId);if(badge===null){if(!plugin?.has(navItemId))return;if(plugin.delete(navItemId),plugin.size===0)registry.badgesByPlugin.delete(pluginId);bumpBadges();return}let prev=plugin?.get(navItemId);if(prev&&prev.count===badge.count&&prev.tone===badge.tone)return;if(!plugin)plugin=new Map,registry.badgesByPlugin.set(pluginId,plugin);plugin.set(navItemId,{count:badge.count,tone:badge.tone}),bumpBadges()}function useNavBadge(pluginId,navItemId,badge){let key=badge?`${badge.count??""}:${badge.tone??""}`:"null";useEffect(()=>{setNavBadge(pluginId,navItemId,badge)},[pluginId,navItemId,key])}function useDebug(){let debug=useContentStore((s)=>s.debug),toggleDebug=useContentStore((s)=>s.toggleDebug);return[debug,toggleDebug]}import{useCallback,useEffect as useEffect2,useRef,useState}from"react";function useJsonFetch(url,opts){let[data,setData]=useState(null),[loading,setLoading]=useState(url!==null),[error,setError]=useState(null),[nonce,setNonce]=useState(0),refresh=useCallback(()=>setNonce((n)=>n+1),[]),optsRef=useRef(opts);return optsRef.current=opts,useEffect2(()=>{if(url===null){setData(null),setLoading(!1),setError(null);return}let controller=new AbortController,{timeoutMs,...init}=optsRef.current??{},timedOut=!1,rejectDeadline=null,deadline=timeoutMs!==void 0&&timeoutMs>0?setTimeout(()=>{timedOut=!0,controller.abort(),rejectDeadline?.(Error("Request timed out"))},timeoutMs):null,clearDeadline=()=>{if(deadline!==null)clearTimeout(deadline);rejectDeadline=null},cancelled=!1;setLoading(!0),setError(null);let request=fetch(url,{...init,signal:controller.signal}).then(async(res)=>{if(!res.ok)throw Error(`Request failed (${res.status})`);return await res.json()});return(deadline===null?request:Promise.race([request,new Promise((_resolve,reject)=>{rejectDeadline=reject})])).then((json)=>{if(clearDeadline(),cancelled)return;if(timedOut){setError("Request timed out"),setLoading(!1);return}setData(json),setLoading(!1)}).catch((err)=>{if(clearDeadline(),cancelled)return;if(timedOut){setError("Request timed out"),setLoading(!1);return}if(err?.name==="AbortError")return;setError(err instanceof Error?err.message:"Request failed"),setLoading(!1)}),()=>{cancelled=!0,clearDeadline(),controller.abort()}},[url,nonce]),{data,loading,error,refresh}}function usePluginJsonFetch(pluginId,path,opts){let clean=path===null?null:path.startsWith("/")?path.slice(1):path;return useJsonFetch(clean===null?null:`/api/plugins/${pluginId}/${clean}`,opts)}import{useState as useState2,useEffect as useEffect3,useCallback as useCallback2}from"react";var NONE={needed:!1};function useRuntimeStatus(){let[pending,setPending]=useState2(!1),[advice,setAdvice]=useState2(NONE),[lastError,setLastError]=useState2(null),[restarting,setRestarting]=useState2(!1),refresh=useCallback2(async()=>{try{let r=await fetch("/api/plugins/models/runtime/status");if(!r.ok)throw Error(`Runtime status: ${r.status}`);let data=await r.json();setPending(data.pending===!0),setAdvice(data.advice??NONE),setLastError(data.lastAttempt&&!data.lastAttempt.ok?data.lastAttempt.error??"restart failed":null)}catch(e){console.error("Failed to fetch runtime status:",e)}},[]);useEffect3(()=>{refresh()},[refresh]);let restart=useCallback2(async()=>{setRestarting(!0);try{await fetch("/api/plugins/models/runtime/restart",{method:"POST"})}finally{setRestarting(!1),await refresh()}},[refresh]);return{pending,advice,restarting,lastError,restart,refresh}}import{useLocation,useNavigate,useParams as useTanstackParams}from"@tanstack/react-router";import{useMemo}from"react";function toNavigationOptions(url){let hashIndex=url.indexOf("#"),beforeHash=hashIndex>=0?url.slice(0,hashIndex):url,hash=hashIndex>=0?url.slice(hashIndex+1):"",queryIndex=beforeHash.indexOf("?"),to=queryIndex>=0?beforeHash.slice(0,queryIndex):beforeHash,query=queryIndex>=0?beforeHash.slice(queryIndex+1):"",search=Object.create(null);for(let[key,raw]of new URLSearchParams(query))search[key]=raw;return{to,search,hash}}function useRouter(){let navigate=useNavigate();return useMemo(()=>({push:(url,options)=>{navigate({...toNavigationOptions(url),...options?.scroll===!1?{resetScroll:!1}:{}})},replace:(url)=>{navigate({...toNavigationOptions(url),replace:!0,resetScroll:!1})},back:()=>{if(typeof window<"u")window.history.back()},forward:()=>{if(typeof window<"u")window.history.forward()},refresh:()=>{if(typeof window<"u")window.location.reload()},prefetch:()=>{}}),[navigate])}function usePathname(){return useLocation().pathname}function useSearchParams(){let location=useLocation();return useMemo(()=>{let search=location.searchStr;if(typeof search==="string")return new URLSearchParams(search.startsWith("?")?search.slice(1):search);let parsed=location.search;if(parsed&&typeof parsed==="object"){let params=new URLSearchParams;for(let[key,value]of Object.entries(parsed)){if(value===void 0||value===null)continue;params.set(key,String(value))}return params}return new URLSearchParams},[location])}function useParams(){return useTanstackParams({strict:!1})}import{useCallback as useCallback3,useMemo as useMemo2,useRef as useRef2}from"react";var pendingPatch=new Map,pendingPush=!1,pendingNav=null,flushScheduled=!1;function enqueueParamUpdate(key,value,push,router,pathname){if(pendingPatch.set(key,value),pendingPush=pendingPush||push,pendingNav={router,pathname},flushScheduled)return;flushScheduled=!0,queueMicrotask(()=>{let navigation=pendingNav,usePush=pendingPush,patch=new Map(pendingPatch);pendingPatch.clear(),pendingPush=!1,pendingNav=null,flushScheduled=!1;let params=new URLSearchParams(window.location.search);for(let[patchKey,patchValue]of patch)if(patchValue===null)params.delete(patchKey);else params.set(patchKey,patchValue);let query=params.toString(),url=query?`${navigation.pathname}?${query}`:navigation.pathname;if(usePush)navigation.router.push(url,{scroll:!1});else navigation.router.replace(url,{scroll:!1})})}function useQueryState(key,defaultValue=""){let searchParams=useSearchParams(),router=useRouter(),pathname=usePathname(),pathnameRef=useRef2(pathname);pathnameRef.current=pathname;let value=searchParams.get(key)??defaultValue,setValue=useCallback3((next)=>{enqueueParamUpdate(key,next===defaultValue?null:next,!1,router,pathnameRef.current)},[key,defaultValue,router]),pushValue=useCallback3((next)=>{enqueueParamUpdate(key,next===defaultValue?null:next,!0,router,pathnameRef.current)},[key,defaultValue,router]);return[value,setValue,pushValue]}function useQueryArrayState(key){let searchParams=useSearchParams(),router=useRouter(),pathname=usePathname(),pathnameRef=useRef2(pathname);pathnameRef.current=pathname;let value=useMemo2(()=>{let raw=searchParams.get(key);return raw?raw.split(",").filter(Boolean):[]},[searchParams,key]),setValue=useCallback3((next)=>{enqueueParamUpdate(key,next.length===0?null:next.join(","),!1,router,pathnameRef.current)},[key,router]);return[value,setValue]}import{useNavigate as useNavigate2,useRouter as useTanStackRouter}from"@tanstack/react-router";import{useCallback as useCallback4}from"react";function useHistoryBack(fallbackTo){let router=useTanStackRouter(),navigate=useNavigate2();return useCallback4(()=>{if(router.history.canGoBack())router.history.back();else navigate({to:fallbackTo})},[router,navigate,fallbackTo])}import{useState as useState3,useEffect as useEffect4,useCallback as useCallback5,useRef as useRef3}from"react";function useScheduleJobs(options={}){let[jobs,setJobs]=useState3([]),[loading,setLoading]=useState3(!0),[fetchFailed,setFetchFailed]=useState3(!1),optionsRef=useRef3(options);optionsRef.current=options;let fetchJobs=useCallback5(async()=>{try{let res=await fetch("/api/plugins/schedule/");if(res.ok){let data=await res.json();setJobs(data.jobs||[]),setFetchFailed(!1)}else setFetchFailed(!0)}catch{setFetchFailed(!0)}finally{setLoading(!1)}},[]);useEffect4(()=>{fetchJobs()},[fetchJobs]),useEffect4(()=>{let es=new EventSource("/api/events"),handler=(event)=>{try{let data=JSON.parse(event.data);if(data.type==="activity"&&data.message?.includes("Schedule")||data.event?.startsWith("schedule."))fetchJobs()}catch{}};return es.addEventListener("message",handler),()=>{es.removeEventListener("message",handler),es.close()}},[fetchJobs]);let opts=options,filtered=jobs.filter((j)=>{if(opts.agent&&j.agentId!==opts.agent)return!1;return!0}),pauseJob=useCallback5(async(jobId,pauseUntil)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pause",pauseUntil})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),resumeJob=useCallback5(async(jobId)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"resume"})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),deleteJob=useCallback5(async(jobId)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}`,{method:"DELETE",headers:{"Content-Type":"application/json"}});if(res.ok)setJobs((prev)=>prev.filter((j)=>j.id!==jobId));return res.ok}catch{return!1}},[]),runNow=useCallback5(async(jobId)=>{try{return(await fetch(`/api/plugins/schedule/${jobId}/run`,{method:"POST",headers:{"Content-Type":"application/json"}})).ok}catch{return!1}},[]),updateJob=useCallback5(async(jobId,data)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),adoptJob=useCallback5(async(jobId,data)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/adopt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),restoreNative=useCallback5(async(jobId)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/restore-native`,{method:"POST",headers:{"Content-Type":"application/json"}});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),skipNext=useCallback5(async(jobId,n=1)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"skip",skipN:n})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),duplicateJob=useCallback5(async(jobId,overrides={})=>{let source=jobs.find((j)=>j.id===jobId);if(!source)return!1;try{let res=await fetch("/api/plugins/schedule/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:overrides.name??`${source.displayName} (copy)`,schedule:overrides.schedule??source.humanSchedule,agentId:overrides.agentId??source.agentId,teamId:overrides.teamId??source.teamId,taskPrompt:overrides.taskPrompt??source.taskPrompt,taskTitle:overrides.taskTitle??source.taskTitle,workflowId:overrides.workflowId??source.workflowId,owner:overrides.owner??source.owner,requireTriage:overrides.requireTriage??source.requireTriage,allowOverlap:overrides.allowOverlap??source.allowOverlap,maxFailures:overrides.maxFailures??source.maxFailures,...overrides})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[jobs,fetchJobs]);return{jobs:filtered,allJobs:jobs,loading,fetchFailed,refresh:fetchJobs,pauseJob,resumeJob,deleteJob,runNow,updateJob,adoptJob,restoreNative,skipNext,duplicateJob}}function useOccurrences(fromIso,toIso){let[occurrences,setOccurrences]=useState3([]),[events,setEvents]=useState3([]),[unevaluated,setUnevaluated]=useState3([]),[droppedProviders,setDroppedProviders]=useState3([]),[loading,setLoading]=useState3(!0),fetchOccurrences=useCallback5(async()=>{try{let res=await fetch(`/api/plugins/schedule/occurrences?from=${encodeURIComponent(fromIso)}&to=${encodeURIComponent(toIso)}`);if(res.ok){let data=await res.json();setOccurrences(data.occurrences||[]),setEvents(data.events||[]),setUnevaluated(data.unevaluated||[]),setDroppedProviders(data.droppedProviders||[])}}catch{}finally{setLoading(!1)}},[fromIso,toIso]);return useEffect4(()=>{fetchOccurrences()},[fetchOccurrences]),useEffect4(()=>{let es=new EventSource("/api/events"),handler=(event)=>{try{let data=JSON.parse(event.data);if(data.type==="activity"&&data.message?.includes("Schedule")||data.event?.startsWith("schedule.")||data.type==="taskboard"||data.event?.endsWith(".scheduled_events_changed"))fetchOccurrences()}catch{}};return es.addEventListener("message",handler),()=>{es.removeEventListener("message",handler),es.close()}},[fetchOccurrences]),{occurrences,events,unevaluated,droppedProviders,loading,refresh:fetchOccurrences}}function useRunHistory(jobId,limit=20){let[runs,setRuns]=useState3([]),[loading,setLoading]=useState3(!1);return useEffect4(()=>{if(!jobId){setRuns([]);return}setLoading(!0),fetch(`/api/plugins/schedule/${jobId}/runs?limit=${limit}`).then((res)=>res.ok?res.json():null).then((data)=>{if(data)setRuns(data.runs||[])}).catch(()=>{}).finally(()=>setLoading(!1))},[jobId,limit]),{runs,loading}}import{useState as useState4,useEffect as useEffect5}from"react";function useTaskRunHistory(taskId,limit=50){let[runs,setRuns]=useState4([]),[outcome,setOutcome]=useState4(void 0),[loading,setLoading]=useState4(!1);return useEffect5(()=>{if(setRuns([]),setOutcome(void 0),!taskId)return;let controller=new AbortController;return setLoading(!0),fetch(`/api/plugins/tasks/${taskId}/runs?limit=${limit}`,{signal:controller.signal}).then((res)=>res.ok?res.json():null).then((data)=>{if(data)setRuns(data.runs||[]),setOutcome(data.outcome)}).catch(()=>{}).finally(()=>{if(!controller.signal.aborted)setLoading(!1)}),()=>controller.abort()},[taskId,limit]),{runs,outcome,loading}}import{useState as useState5,useEffect as useEffect6,useCallback as useCallback6,useRef as useRef4}from"react";function reorderBySearchResults(items,searchResults){if(!searchResults.length)return items;let scoreMap=new Map;for(let r of searchResults)scoreMap.set(r.id,r.score);let matched=[],unmatched=[];for(let item of items)if(scoreMap.has(item.id))matched.push(item);else unmatched.push(item);return matched.sort((a,b)=>(scoreMap.get(b.id)??0)-(scoreMap.get(a.id)??0)),[...matched,...unmatched]}function useSearch(options={}){let{plugin,limit=20,facets,types,debounce:debounceMs=250}=options,[results,setResults]=useState5([]),[aggregations,setAggregations]=useState5({}),[status,setStatus]=useState5("idle"),[error,setError]=useState5(null),[meta,setMeta]=useState5(null),abortRef=useRef4(null),timerRef=useRef4(null),mountedRef=useRef4(!0),lastQueryRef=useRef4(""),typesKey=types?.join(",");useEffect6(()=>{return mountedRef.current=!0,()=>{if(mountedRef.current=!1,abortRef.current?.abort(),timerRef.current)clearTimeout(timerRef.current)}},[]);let executeSearch=useCallback6(async(q)=>{if(!q.trim()){setResults([]),setAggregations({}),setMeta(null),setError(null),setStatus("idle");return}abortRef.current?.abort();let controller=new AbortController;abortRef.current=controller,setStatus("loading"),setError(null);try{let params=new URLSearchParams({q});if(limit)params.set("limit",String(limit));if(facets?.length)params.set("facets",facets.join(","));if(typesKey)params.set("types",typesKey);let url=plugin?`/api/plugins/${plugin}/search?${params}`:`/api/search?${params}`,res=await fetch(url,{signal:AbortSignal.any([controller.signal,AbortSignal.timeout(15000)])});if(!mountedRef.current)return;if(res.status===503){setResults([]),setAggregations({}),setMeta(null),setStatus("unavailable");return}if(!res.ok)throw Error(`Search failed: ${res.status}`);let data=await res.json();if(!mountedRef.current)return;setResults(Array.isArray(data.results)?data.results:[]),setAggregations(data.aggregations||{}),setMeta(data.meta||null),setStatus("ok")}catch(err){if(!mountedRef.current)return;if(err instanceof DOMException&&err.name==="AbortError")return;let msg=err instanceof Error?err.message:String(err);setError(msg),setResults([]),setAggregations({}),setStatus("error")}},[plugin,limit,facets,typesKey]),search=useCallback6((q)=>{if(lastQueryRef.current=q,timerRef.current)clearTimeout(timerRef.current);if(!q.trim()){setResults([]),setAggregations({}),setMeta(null),setError(null),setStatus("idle");return}setStatus("loading"),timerRef.current=setTimeout(()=>executeSearch(q),debounceMs)},[executeSearch,debounceMs]),retry=useCallback6(()=>{if(lastQueryRef.current.trim())executeSearch(lastQueryRef.current)},[executeSearch]),clear=useCallback6(()=>{if(lastQueryRef.current="",setResults([]),setAggregations({}),setMeta(null),setError(null),setStatus("idle"),abortRef.current?.abort(),timerRef.current)clearTimeout(timerRef.current)},[]);return{results,aggregations,status,loading:status==="loading",error,meta,search,clear,retry}}import{useState as useState6,useEffect as useEffect7}from"react";function useSidebar(){let[collapsed,setCollapsed]=useState6(!1);return useEffect7(()=>{if(localStorage.getItem("sidebar-collapsed")==="true")setCollapsed(!0)},[]),{collapsed,toggle:()=>setCollapsed((c)=>{return localStorage.setItem("sidebar-collapsed",String(!c)),!c})}}import{useEffect as useEffect9,useRef as useRef6}from"react";import{useEffect as useEffect8,useRef as useRef5}from"react";var subscribers=globalThis.__bakinPluginEventSubs??(globalThis.__bakinPluginEventSubs=new Map);function emitPluginEvent(payload){let event=payload?.event;if(typeof event!=="string")return;let set=subscribers.get(event);if(!set)return;for(let handler of[...set])try{handler(payload)}catch{}}function usePluginEvent(event,handler){let handlerRef=useRef5(handler);handlerRef.current=handler,useEffect8(()=>{let wrapped=(payload)=>handlerRef.current(payload),set=subscribers.get(event);if(!set)set=new Set,subscribers.set(event,set);return set.add(wrapped),()=>{if(set.delete(wrapped),set.size===0)subscribers.delete(event)}},[event])}function navigateToUrl(url){let bridge=globalThis.__bakinNavigate;if(bridge){bridge(url);return}window.location.assign(url)}function isNotificationsSupported(){return typeof window<"u"&&"Notification"in window&&window.isSecureContext}function isNotificationsEnabled(){if(!isNotificationsSupported())return!1;return localStorage.getItem("bakin-notifications-enabled")==="true"&&Notification.permission==="granted"}function sendBrowserNotification(title,body,url){if(!isNotificationsEnabled())return;if(document.hasFocus())return;let notification=new Notification(title,{body,icon:"/favicon.ico"});if(url)notification.onclick=()=>{window.focus(),navigateToUrl(url),notification.close()}}var MAX_RETRIES=20,BASE_DELAY=1000,MAX_DELAY=30000,seenCapEventIds=new Set;function isDevPluginHotReloadActive(){return typeof document<"u"&&!!document.querySelector('script[src="/__bakin-dev/client.js"]')}function useSSE(){let updateFile=useContentStore((s)=>s.updateFile),setConnected=useContentStore((s)=>s.setConnected),setHeartbeats=useContentStore((s)=>s.setHeartbeats),initialize=useContentStore((s)=>s.initialize),appendAuditEntry=useContentStore((s)=>s.appendAuditEntry),appendActivityEvent=useContentStore((s)=>s.appendActivityEvent),setSseConnected=useContentStore((s)=>s.setSseConnected),esRef=useRef6(null),retryRef=useRef6(0),timeoutRef=useRef6(null),hbTimerRef=useRef6(null);useEffect9(()=>{initialize();function connect(){if(esRef.current)esRef.current.close(),esRef.current=null;let es=new EventSource("/api/events");esRef.current=es,es.onopen=()=>{setConnected(!0),setSseConnected(!0),retryRef.current=0},es.onmessage=(e)=>{try{let data=JSON.parse(e.data);if(data.type==="plugin-event")emitPluginEvent(data);if(data.type==="taskboard"){emitPluginEvent({event:"taskboard"});return}if(data.type==="turn-activity"){emitPluginEvent({...data,event:"turn-activity"});return}if(data.type==="plugin:manifest-changed"){if(!isDevPluginHotReloadActive())window.location.reload();return}if(data.type==="activity"){appendActivityEvent({id:`${data.ts}-activity-${data.agent}`,ts:data.ts,type:"log",agent:data.agent||"system",message:data.message,taskId:data.taskId});return}if(data.type==="audit"&&data.entry){let entry=data.entry,entryData=entry.data||{};if(appendAuditEntry(entry),entry.event==="doctor.run")emitPluginEvent({event:"doctor.run"});appendActivityEvent({id:`${entry.ts}-${entry.event}-${entry.agent}`,ts:entry.ts,type:"audit",agent:entry.agent||"system",message:mapAuditMessage(entry.event,entryData),taskId:entryData.taskId,taskTitle:entryData.title,eventName:entry.event,...entryData.duplicate?{duplicate:!0}:{},data:entryData})}if(data.type==="plugin-event"&&typeof data.event==="string"&&data.event.startsWith("workflow.")){if(data.event.startsWith("workflow.gate")||data.event==="workflow.complete")initialize();if(data.event==="workflow.gate_reached")sendBrowserNotification("Approval needed",data.label||"A workflow gate needs your review");appendAuditEntry({ts:data.timestamp||new Date().toISOString(),event:data.event,agent:"workflow",data:{taskId:data.taskId,label:data.label,agent:data.agent,reason:data.reason,workflowId:data.workflowId}}),appendActivityEvent({id:`${data.timestamp||new Date().toISOString()}-${data.event}-workflow`,ts:data.timestamp||new Date().toISOString(),type:"audit",agent:"workflow",message:mapAuditMessage(data.event,data),taskId:data.taskId,eventName:data.event})}if(data.type==="plugin-event"&&data.event==="budget.incident_opened"){let capEventId=typeof data.eventId==="string"?data.eventId:null;if(capEventId&&seenCapEventIds.has(capEventId))return;if(capEventId)seenCapEventIds.add(capEventId);sendBrowserNotification("Budget alert",data.message||"A budget cap was reached \u2014 dispatch may be deferred","/spend"),appendActivityEvent({id:`budget-incident-${data.incidentId}-${capEventId??data.timestamp??new Date().toISOString()}`,ts:data.timestamp||new Date().toISOString(),type:"alert",agent:"system",message:data.message||"Budget incident opened",eventName:"budget.incident_opened",data:{incidentId:data.incidentId,scope:data.scope,scopeId:data.scopeId,lane:data.lane,window:data.window}})}if(data.type==="plugin-event"&&data.event==="brand.dispatch_blocked")sendBrowserNotification("Brand unavailable",data.message||`A task is waiting on brand '${data.brandId}'`,`/tasks?brand=${encodeURIComponent(data.brandId||"")}`),appendActivityEvent({id:`${data.timestamp||new Date().toISOString()}-brand-blocked-${data.taskId}`,ts:data.timestamp||new Date().toISOString(),type:"alert",agent:"system",message:data.message||"Task blocked on a missing brand",eventName:"brand.dispatch_blocked",data:{taskId:data.taskId,brandId:data.brandId}});if(data.type==="alert")appendActivityEvent({id:`${data.timestamp||new Date().toISOString()}-alert-system`,ts:data.timestamp||new Date().toISOString(),type:"alert",agent:"system",message:data.message||"Watchdog alert"});if(data.type==="search.rebuild.start")emitPluginEvent({event:"search.rebuild.start",table:data.table});if(data.type==="search.rebuild.progress")emitPluginEvent({event:"search.rebuild.progress",table:data.table,indexed:data.indexed??0});if(data.type==="search.rebuild.complete")emitPluginEvent({event:"search.rebuild.complete",table:data.table,indexed:data.indexed??0});if(data.type==="reindex.batch_start")appendActivityEvent({id:`${Date.now()}-reindex-batch-start`,ts:new Date().toISOString(),type:"log",agent:"system",message:`Starting full re-index (${data.tables} table${data.tables===1?"":"s"})`});if(data.type==="reindex.batch_pulse"){let pct=data.tables_total?Math.floor(data.tables_done/data.tables_total*100):0;appendActivityEvent({id:`${Date.now()}-reindex-batch-pulse`,ts:new Date().toISOString(),type:"log",agent:"system",message:`Re-indexing\u2026 ${data.tables_done}/${data.tables_total} tables (${pct}%), ${data.indexed} documents so far`})}if(data.type==="reindex.batch_complete"){let seconds=Math.max(1,Math.round((data.elapsed_ms??0)/1000));appendActivityEvent({id:`${Date.now()}-reindex-batch-complete`,ts:new Date().toISOString(),type:"log",agent:"system",message:`Completed full re-index \u2014 ${data.indexed} documents across ${data.tables} table${data.tables===1?"":"s"} in ${seconds}s`})}if(data.file&&data.content!==void 0){if(updateFile(data.file,data.content),data.file.startsWith("heartbeats/")&&data.file.endsWith(".json")){if(hbTimerRef.current)clearTimeout(hbTimerRef.current);hbTimerRef.current=setTimeout(()=>{fetch("/api/agents/health").then((r)=>r.ok?r.json():null).then((hb)=>{if(hb)setHeartbeats(hb)}).catch(()=>{})},500)}}}catch{}},es.onerror=()=>{if(setConnected(!1),setSseConnected(!1),es.close(),esRef.current=null,retryRef.current<MAX_RETRIES){let delay=Math.min(BASE_DELAY*Math.pow(2,retryRef.current),MAX_DELAY);retryRef.current++,timeoutRef.current=setTimeout(connect,delay)}}}return connect(),()=>{if(timeoutRef.current)clearTimeout(timeoutRef.current);if(hbTimerRef.current)clearTimeout(hbTimerRef.current);esRef.current?.close(),esRef.current=null}},[updateFile,setConnected,setHeartbeats,initialize,appendAuditEntry,appendActivityEvent,setSseConnected])}var DEFAULT_DURATION={success:4000,info:4000,error:1e4},counter=0,useToastStore=create((set)=>({toasts:[],add:(toast)=>{let id=String(++counter);if(set((s)=>({toasts:[...s.toasts,{...toast,id}]})),!toast.persistent)setTimeout(()=>{set((s)=>({toasts:s.toasts.filter((t)=>t.id!==id)}))},toast.duration??DEFAULT_DURATION[toast.type]);return id},dismiss:(id)=>set((s)=>({toasts:s.toasts.filter((t)=>t.id!==id)}))}));function toast(message,type="info",duration){return useToastStore.getState().add({message,type,...duration?{duration}:{}})}import{useCallback as useCallback7,useEffect as useEffect10,useRef as useRef7,useState as useState7}from"react";var KEY_STEP=16,KEY_STEP_LARGE=64;function clamp(n,min,max){return Math.min(max,Math.max(min,n))}function readStored(def,min,max,prefix,storageKey){if(!storageKey||typeof window>"u")return clamp(def,min,max);try{let raw=window.localStorage.getItem(prefix+storageKey);if(!raw)return clamp(def,min,max);let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)?clamp(parsed,min,max):clamp(def,min,max)}catch(err){return console.error("useResizablePane: failed to read stored size",err),clamp(def,min,max)}}function useResizablePane({axis,defaultSize,minSize,maxSize,storageKey,storagePrefix}){let[size,setSizeState]=useState7(()=>readStored(defaultSize,minSize,maxSize,storagePrefix,storageKey)),sizeRef=useRef7(size),dragging=useRef7(!1),dragStart=useRef7(0),dragStartSize=useRef7(0),persist=useCallback7((n)=>{if(!storageKey||typeof window>"u")return;try{window.localStorage.setItem(storagePrefix+storageKey,String(clamp(n,minSize,maxSize)))}catch(err){console.error("useResizablePane: failed to persist size",err)}},[storageKey,storagePrefix,minSize,maxSize]),setSize=useCallback7((n)=>{let next=clamp(n,minSize,maxSize);sizeRef.current=next,setSizeState(next),persist(next)},[minSize,maxSize,persist]);useEffect10(()=>{let clamped=clamp(sizeRef.current,minSize,maxSize);if(clamped!==sizeRef.current)setSize(clamped)},[minSize,maxSize,setSize]);let beginDrag=useCallback7((client)=>{dragging.current=!0,dragStart.current=client,dragStartSize.current=sizeRef.current},[]),onMove=useCallback7((client)=>{if(!dragging.current)return;let delta=dragStart.current-client,next=clamp(dragStartSize.current+delta,minSize,maxSize);sizeRef.current=next,setSizeState(next)},[minSize,maxSize]),endDrag=useCallback7(()=>{if(!dragging.current)return;dragging.current=!1,persist(sizeRef.current),document.body.style.cursor="",document.body.style.userSelect=""},[persist]),onMouseDown=useCallback7((e)=>{e.preventDefault(),beginDrag(axis==="x"?e.clientX:e.clientY);let move=(ev)=>onMove(axis==="x"?ev.clientX:ev.clientY),up=()=>{document.removeEventListener("mousemove",move),document.removeEventListener("mouseup",up),endDrag()};document.addEventListener("mousemove",move),document.addEventListener("mouseup",up),document.body.style.cursor=axis==="x"?"col-resize":"row-resize",document.body.style.userSelect="none"},[axis,beginDrag,onMove,endDrag]),onTouchStart=useCallback7((e)=>{let touch=e.touches[0];if(!touch)return;beginDrag(axis==="x"?touch.clientX:touch.clientY);let move=(ev)=>{let t=ev.touches[0];if(!t)return;ev.preventDefault(),onMove(axis==="x"?t.clientX:t.clientY)},up=()=>{document.removeEventListener("touchmove",move),document.removeEventListener("touchend",up),document.removeEventListener("touchcancel",up),endDrag()};document.addEventListener("touchmove",move,{passive:!1}),document.addEventListener("touchend",up),document.addEventListener("touchcancel",up)},[axis,beginDrag,onMove,endDrag]),onKeyDown=useCallback7((e)=>{let growKey=axis==="x"?"ArrowLeft":"ArrowUp",shrinkKey=axis==="x"?"ArrowRight":"ArrowDown",dir=0;if(e.key===growKey)dir=1;else if(e.key===shrinkKey)dir=-1;else return;e.preventDefault();let step=e.shiftKey?KEY_STEP_LARGE:KEY_STEP;setSize(sizeRef.current+dir*step)},[axis,setSize]);return{size,setSize,handleProps:{role:"separator",tabIndex:0,"aria-orientation":axis==="x"?"vertical":"horizontal","aria-valuenow":size,"aria-valuemin":minSize,"aria-valuemax":maxSize,onMouseDown,onTouchStart,onKeyDown}}}function useHorizontalResize({defaultWidth,minWidth,maxWidth,storageKey}){let{size,setSize,handleProps}=useResizablePane({axis:"x",defaultSize:defaultWidth,minSize:minWidth,maxSize:maxWidth,storageKey,storagePrefix:"bakin-hresize:"});return{width:size,setWidth:setSize,handleProps}}async function parsePackageStatesResponse(res){if(!res||!res.ok)return{};try{let body=await res.json();if(!body.ok||!Array.isArray(body.agents))return{};let map={};for(let row of body.agents)map[row.agentId]=row;return map}catch{return{}}}var ROSTER_CACHE_KEY="bakin-agent-roster-v1";function readRosterCache(){try{if(typeof window>"u")return null;let raw=window.localStorage.getItem(ROSTER_CACHE_KEY);if(!raw)return null;let parsed=JSON.parse(raw);if(!Array.isArray(parsed.agents))return null;return{agents:parsed.agents.filter((a)=>!!a&&typeof a==="object"&&typeof a.id==="string"&&typeof a.name==="string"),displaySettings:parsed.displaySettings&&typeof parsed.displaySettings==="object"?parsed.displaySettings:{},mainAgentId:typeof parsed.mainAgentId==="string"?parsed.mainAgentId:null}}catch{return null}}function writeRosterCache(cache){try{window.localStorage.setItem(ROSTER_CACHE_KEY,JSON.stringify(cache))}catch{}}var hydrated=readRosterCache(),hydratedMap={};for(let a of hydrated?.agents??[])hydratedMap[a.id]=a;var useAgentStore=create((set,get)=>({agents:hydrated?.agents??[],agentIds:(hydrated?.agents??[]).map((a)=>a.id),agentMap:hydratedMap,agentsWithStatus:[],displaySettings:hydrated?.displaySettings??{},teams:[],packageStates:{},mainAgentId:hydrated?.mainAgentId??null,loaded:!1,load:async()=>{try{let[rosterRes,pkgRes]=await Promise.all([fetch("/api/plugins/team/"),fetch("/api/agent-packages?check=1").catch(()=>null)]);if(!rosterRes.ok){set({loaded:!0});return}let data=await rosterRes.json(),agents=data.agents.map(({status:_status,heartbeat:_heartbeat,heartbeatAge:_heartbeatAge,model:_model,...meta})=>meta),agentMap={};for(let a of agents)agentMap[a.id]=a;let packageStates=await parsePackageStatesResponse(pkgRes);set({agents,agentIds:agents.map((a)=>a.id),agentMap,agentsWithStatus:data.agents,displaySettings:data.displaySettings,teams:data.teams??[],packageStates,mainAgentId:data.mainAgentId??null,loaded:!0}),writeRosterCache({agents,displaySettings:data.displaySettings,mainAgentId:data.mainAgentId??null})}catch{set({loaded:!0})}},refreshPackageStates:async()=>{let res=await fetch("/api/agent-packages?check=1").catch(()=>null),packageStates=await parsePackageStatesResponse(res);set({packageStates})},updateDisplay:async(agentId,patch)=>{let current=get().displaySettings,updated={...current,[agentId]:{...current[agentId],...patch}};set({displaySettings:updated}),await fetch("/api/plugins/team/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(updated)})}}));function useAgent(agentId){return useAgentStore((s)=>s.agentMap[agentId])}function useAgentList(){return useAgentStore((s)=>s.agents)}function useAgentColor(agentId){return useAgentStore((s)=>s.displaySettings[agentId]?.accentColor??"#a1a1aa")}function usePackageState(agentId){return useAgentStore((s)=>s.packageStates?.[agentId])}function useAgentDisplayName(agentId){return useAgentStore((s)=>s.displaySettings[agentId]?.displayName)}function useAgentIds(){return useAgentStore((s)=>s.agentIds)}function useMainAgentId(){return useAgentStore((s)=>s.mainAgentId)}function hexToMuted(hex,opacity=0.2){let r=parseInt(hex.slice(1,3),16),g=parseInt(hex.slice(3,5),16),b=parseInt(hex.slice(5,7),16);return`rgba(${r}, ${g}, ${b}, ${opacity})`}import{useEffect as useEffect11,useState as useState8}from"react";var cached=null,inFlight=null;function fetchChannels(){if(cached)return Promise.resolve(cached);if(inFlight)return inFlight;return inFlight=fetch("/api/plugins/workflows/notification-channels").then((r)=>r.ok?r.json():null).then((data)=>{let list=data&&Array.isArray(data.channels)?data.channels:[];return cached=list,list}).catch(()=>{return cached=[],[]}).finally(()=>{inFlight=null}),inFlight}function useNotificationChannels(){let[channels,setChannels]=useState8(()=>cached??[]);return useEffect11(()=>{if(cached)return;let cancelled=!1;return fetchChannels().then((list)=>{if(!cancelled)setChannels(list)}),()=>{cancelled=!0}},[]),channels}function getChannelLabel(id,channels){return channels.find((c)=>c.id===id)?.label??id}function getChannelInitials(id,channels){let match=channels.find((c)=>c.id===id);if(match?.initials)return match.initials;return id.slice(0,2).toUpperCase()}import{useCallback as useCallback8,useEffect as useEffect12,useState as useState9}from"react";var inFlight2=new Map;function catalogUrl(agentId){return agentId?`/api/plugins/models/available?agentId=${encodeURIComponent(agentId)}`:"/api/plugins/models/available"}function readCatalog(agentId){return fetch(catalogUrl(agentId)).then((r)=>r.ok?r.json():null).then((data)=>data&&Array.isArray(data.models)?data.models:[]).catch(()=>[])}function fetchAvailableModels(agentId,fresh=!1){let key=agentId??"",pending=inFlight2.get(key);if(pending&&!fresh)return pending;let read=()=>readCatalog(agentId),request=(pending??Promise.resolve()).then(read,read);return inFlight2.set(key,request),request.finally(()=>{if(inFlight2.get(key)===request)inFlight2.delete(key)}),request}function useAvailableModels(agentId){let[models,setModels]=useState9([]),load=useCallback8((fresh)=>{let cancelled=!1;return fetchAvailableModels(agentId,fresh).then((list)=>{if(!cancelled)setModels(list)}),()=>{cancelled=!0}},[agentId]);return useEffect12(()=>load(!1),[load]),usePluginEvent("models.catalog_changed",()=>{load(!0)}),models}function toModelSelectOptions(models){return models.map((m)=>{let e=m.eligibility,dead=e?.status==="ineligible";return{id:m.id,name:m.name,provider:m.provider,disabled:dead,...dead?{description:e.detail,tone:"danger"}:{}}})}export{useToastStore,useTaskRunHistory,useSidebar,useSearchParams,useSearch,useScheduleJobs,useSSE,useRuntimeStatus,useRunHistory,useRouter,useQueryState,useQueryArrayState,usePluginJsonFetch,usePluginEvent,usePathname,useParams,usePackageState,useOccurrences,useNotificationChannels,useNavBadge,useMainAgentId,useJsonFetch,useHorizontalResize,useHistoryBack,useDebug,useContentStore,useAvailableModels,useAgentStore,useAgentList,useAgentIds,useAgentDisplayName,useAgentColor,useAgent,toast,toNavigationOptions,toModelSelectOptions,reorderBySearchResults,hexToMuted,getChannelLabel,getChannelInitials,emitPluginEvent};
|
|
2
|
+
var createStoreImpl=(createState)=>{let state,listeners=new Set,setState=(partial,replace)=>{let nextState=typeof partial==="function"?partial(state):partial;if(!Object.is(nextState,state)){let previousState=state;state=(replace!=null?replace:typeof nextState!=="object"||nextState===null)?nextState:Object.assign({},state,nextState),listeners.forEach((listener)=>listener(state,previousState))}},getState=()=>state,api={setState,getState,getInitialState:()=>initialState,subscribe:(listener)=>{return listeners.add(listener),()=>listeners.delete(listener)}},initialState=state=createState(setState,getState,api);return api},createStore=(createState)=>createState?createStoreImpl(createState):createStoreImpl;import React from"react";var identity=(arg)=>arg;function useStore(api,selector=identity){let slice=React.useSyncExternalStore(api.subscribe,React.useCallback(()=>selector(api.getState()),[api,selector]),React.useCallback(()=>selector(api.getInitialState()),[api,selector]));return React.useDebugValue(slice),slice}var createImpl=(createState)=>{let api=createStore(createState),useBoundStore=(selector)=>useStore(api,selector);return Object.assign(useBoundStore,api),useBoundStore},create=(createState)=>createState?createImpl(createState):createImpl;function mapAuditMessage(event,data){switch(event){case"task.dispatched":return`Dispatched: ${data.title}`;case"task.triaged":return`Triaged: ${data.title}`;case"task.created":return`Created task: ${data.title}`;case"task.deleted":return`Deleted task: ${data.title}`;case"task.moved":return`Moved "${data.title}" \u2192 ${data.to}`;case"task.assigned":return`Assigned "${data.title}" to ${data.assignee}`;case"task.blocked":return`Blocked: ${data.title} \u2014 ${data.reason||"no reason"}`;case"task.dispatch_failed":{if(data.category==="model_provider_unavailable")return"Dispatch failed: model provider unavailable";if(typeof data.summary==="string")return data.summary;if(typeof data.error==="string"&&data.error.startsWith("Dispatch failed:"))return data.error;return`Dispatch failed: ${data.error||"unknown error"}`}case"task.updated":return`Updated: ${data.title}`;case"task.routed":{let parts=[data.model,data.thinking?`thinking ${data.thinking}`:null].filter(Boolean),via=typeof data.source==="string"&&data.source!=="inherit"?` via ${data.source==="class"?"class route":String(data.source).replace(/^tag:/,'tag "')+'"'}`:"";return`Routed to ${parts.join(", ")||"override"}${via}`}case"task.completion_suppressed":return`Ignored a duplicate completion${data.title?` of "${data.title}"`:""} \u2014 ${data.firstAgent||"another run"} had already completed this task${data.firstChannel?` via ${data.firstChannel}`:""}.`;case"task.dispatch_failure_ignored":return`A session error arrived after "${data.title||data.id}" had already moved to ${data.column||"done"} \u2014 no action needed.`;case"team.message_blocked":return`Blocked a message to ${data.agentId} \u2014 they are already running task ${data.taskId}.`;case"brand.injected":return`Brand '${data.brandId}' injected into dispatch${data.cardBytes?` (${data.cardBytes} B card)`:""}`;case"brand.dispatch_blocked":return typeof data.message==="string"?data.message:`Task waiting on missing brand '${data.brandId}'`;case"brand.asset_missing":return`Brand '${data.brandId}' has missing asset references`;case"brand.created":return`Created brand '${data.brandId}'`;case"brand.updated":return`Updated brand '${data.brandId}'`;case"brand.deleted":return`Deleted brand '${data.brandId}'`;case"task.worktree_materialized":return`Working in an isolated worktree of ${typeof data.repoPath==="string"?data.repoPath.split("/").pop():"the bound repo"} on branch ${data.branch} \u2014 the branch survives after the task settles`;case"task.turn_aborted":return data.reason==="superseded"?`Stopped a stale attempt on "${data.title||data.id}" \u2014 a fresh attempt takes over`:`Stopped the in-flight attempt on "${data.title||data.id}"${data.reason?` (${data.reason})`:""}`;case"task.turn_force_released":return`Released a hung attempt on task ${data.id} \u2014 its dispatch slot is free again`;case"task.run_superseded":return`Superseded a stalled attempt on "${data.title||data.id}" \u2014 it will be re-dispatched`;case"task.repo_binding_blocked":return typeof data.error==="string"?`Task blocked: ${data.error}`:"Task blocked: repo binding failed";case"dispatch.concurrency_clamped":return`Per-agent parallelism clamped to 1: the active runtime cannot isolate same-agent turns (requested ${data.requested})`;case"asset.stale_run_write_suppressed":return`Recorded a late save from a superseded run as version ${data.version} of ${data.assetId} WITHOUT promoting it \u2014 the current deliverable is unchanged`;case"system.init":return"Bakin started";case"system.dispatch_error":return`Dispatch failed: ${data.error||"unknown error"}`;case"workflow.step_dispatched":return`Step "${data.label||"unknown"}" dispatched to ${data.agent||"agent"}`;case"workflow.step_complete":return`Step "${data.label||"unknown"}" completed`;case"workflow.gate_reached":return`Awaiting approval: ${data.label||"gate"}`;case"workflow.gate_approved":return`Approved: ${data.label||"gate"}`;case"workflow.gate_rejected":return`Rejected: ${data.label||"gate"}${data.reason?` \u2014 ${data.reason}`:""}`;case"workflow.complete":return`Workflow complete${data.workflowId?` (${data.workflowId})`:""}`;default:{if(typeof data.message==="string"&&data.message.trim())return data.message;if(event.startsWith("exec.")){let suffix=event.endsWith(".fail")?" (failed)":event.endsWith(".error")?" (error)":"";if(data.label)return`${data.label}${suffix}`;let toolName=event.replace(/^exec\./,"").replace(/\.(ok|fail|error)$/,"");return humanizeExecName(toolName)+suffix}return event}}}function humanizeExecName(name){let words=name.replace(/^bakin_exec_/,"").split("_");if(words.length===0)return name;return words[0]=words[0].charAt(0).toUpperCase()+words[0].slice(1),words.join(" ")}function isNoisyEvent(evt){if(evt.agent==="system"&&evt.message.startsWith("Dispatch failed"))return!0;if(evt.eventName&&isReadOnlyExecOk(evt.eventName))return!0;if(evt.eventName==="dispatch.registry_clobber")return!0;return!1}function isReadOnlyExecOk(eventName){if(!eventName.startsWith("exec.")||!eventName.endsWith(".ok"))return!1;let toolName=eventName.replace(/^exec\./,"").replace(/\.ok$/,"");if(toolName==="bakin_exec_get_paths"||toolName==="bakin_exec_heartbeat")return!0;return/_(list|get|query|search)$/.test(toolName)}var useContentStore=create((set,get)=>({files:{},heartbeats:{},connected:!1,loading:!0,auditEntries:[],activityEvents:[],sseConnected:!1,debug:!1,setFiles:(files)=>set({files}),updateFile:(key,content)=>set((state)=>({files:{...state.files,[key]:content}})),setHeartbeats:(heartbeats)=>set({heartbeats}),setConnected:(connected)=>set({connected}),appendAuditEntry:(entry)=>set((state)=>({auditEntries:[...state.auditEntries,entry]})),appendActivityEvent:(event)=>set((state)=>{if(isNoisyEvent(event))return state;if(state.activityEvents.some((e)=>e.id===event.id))return state;return{activityEvents:[event,...state.activityEvents].slice(0,100)}}),setActivityEvents:(events)=>set({activityEvents:events.filter((e)=>!isNoisyEvent(e)).slice(0,100)}),setSseConnected:(connected)=>set({sseConnected:connected}),setDebug:(debug)=>{set({debug});try{localStorage.setItem("bakin-debug",String(debug))}catch{}},toggleDebug:()=>{let next=!get().debug;set({debug:next});try{localStorage.setItem("bakin-debug",String(next))}catch{}},initialize:async()=>{try{if(localStorage.getItem("bakin-debug")==="true")set({debug:!0})}catch{}try{let[stateRes,healthRes,activityRes]=await Promise.all([fetch("/api/state"),fetch("/api/agents/health"),fetch("/api/activity")]);if(stateRes.ok){let files=await stateRes.json();set({files})}if(healthRes.ok){let heartbeats=await healthRes.json();set({heartbeats})}if(activityRes.ok){let data=await activityRes.json();if(data?.events)get().setActivityEvents(data.events)}}catch{}finally{set({loading:!1})}}}));import{useEffect}from"react";function buildNavItemsSnapshot(registry){let items=[];for(let[pluginId,navItems]of registry.manifestNavByPlugin.entries()){if(registry.navByPlugin.has(pluginId))continue;items.push(...navItems)}for(let navItems of registry.navByPlugin.values())items.push(...navItems);return items.sort((a,b)=>(a.order??100)-(b.order??100))}function getRegistry(){let g=globalThis;if(!g.__bakinClientRegistry)g.__bakinClientRegistry={navByPlugin:new Map,manifestNavByPlugin:new Map,routesByPlugin:new Map,cleanupByPlugin:new Map,navItemsSnapshot:[],version:0,listeners:new Set,badgesByPlugin:new Map,badgesSnapshot:new Map,badgeListeners:new Set,hitRenderersByPlugin:new Map,hitRenderersSnapshot:new Map,hitRendererListeners:new Set};let registry=g.__bakinClientRegistry;if(!registry.manifestNavByPlugin)registry.manifestNavByPlugin=new Map;if(!Array.isArray(registry.navItemsSnapshot))registry.navItemsSnapshot=buildNavItemsSnapshot(registry);if(!registry.badgesByPlugin)registry.badgesByPlugin=new Map;if(!registry.badgesSnapshot)registry.badgesSnapshot=buildBadgesSnapshot(registry);if(!registry.badgeListeners)registry.badgeListeners=new Set;if(!registry.hitRenderersByPlugin)registry.hitRenderersByPlugin=new Map;if(!registry.hitRenderersSnapshot)registry.hitRenderersSnapshot=buildHitRenderersSnapshot(registry);if(!registry.hitRendererListeners)registry.hitRendererListeners=new Set;return registry}function buildHitRenderersSnapshot(registry){let snapshot=new Map;for(let byType of registry.hitRenderersByPlugin.values())for(let[type,renderer]of byType)if(!snapshot.has(type))snapshot.set(type,renderer);return snapshot}function buildBadgesSnapshot(registry){let snapshot=new Map;for(let byNavItemId of registry.badgesByPlugin.values())for(let[navItemId,badge]of byNavItemId)if(!snapshot.has(navItemId))snapshot.set(navItemId,badge);return snapshot}function bumpBadges(){let registry=getRegistry();registry.badgesSnapshot=buildBadgesSnapshot(registry);for(let l of registry.badgeListeners)try{l()}catch(err){console.error("[bakin] badge listener threw:",err)}}function setNavBadge(pluginId,navItemId,badge){let registry=getRegistry(),plugin=registry.badgesByPlugin.get(pluginId);if(badge===null){if(!plugin?.has(navItemId))return;if(plugin.delete(navItemId),plugin.size===0)registry.badgesByPlugin.delete(pluginId);bumpBadges();return}let prev=plugin?.get(navItemId);if(prev&&prev.count===badge.count&&prev.tone===badge.tone)return;if(!plugin)plugin=new Map,registry.badgesByPlugin.set(pluginId,plugin);plugin.set(navItemId,{count:badge.count,tone:badge.tone}),bumpBadges()}function useNavBadge(pluginId,navItemId,badge){let key=badge?`${badge.count??""}:${badge.tone??""}`:"null";useEffect(()=>{setNavBadge(pluginId,navItemId,badge)},[pluginId,navItemId,key])}function useDebug(){let debug=useContentStore((s)=>s.debug),toggleDebug=useContentStore((s)=>s.toggleDebug);return[debug,toggleDebug]}import{useCallback,useEffect as useEffect2,useRef,useState}from"react";function useJsonFetch(url,opts){let[data,setData]=useState(null),[loading,setLoading]=useState(url!==null),[error,setError]=useState(null),[nonce,setNonce]=useState(0),refresh=useCallback(()=>setNonce((n)=>n+1),[]),optsRef=useRef(opts);return optsRef.current=opts,useEffect2(()=>{if(url===null){setData(null),setLoading(!1),setError(null);return}let controller=new AbortController,{timeoutMs,...init}=optsRef.current??{},timedOut=!1,rejectDeadline=null,deadline=timeoutMs!==void 0&&timeoutMs>0?setTimeout(()=>{timedOut=!0,controller.abort(),rejectDeadline?.(Error("Request timed out"))},timeoutMs):null,clearDeadline=()=>{if(deadline!==null)clearTimeout(deadline);rejectDeadline=null},cancelled=!1;setLoading(!0),setError(null);let request=fetch(url,{...init,signal:controller.signal}).then(async(res)=>{if(!res.ok)throw Error(`Request failed (${res.status})`);return await res.json()});return(deadline===null?request:Promise.race([request,new Promise((_resolve,reject)=>{rejectDeadline=reject})])).then((json)=>{if(clearDeadline(),cancelled)return;if(timedOut){setError("Request timed out"),setLoading(!1);return}setData(json),setLoading(!1)}).catch((err)=>{if(clearDeadline(),cancelled)return;if(timedOut){setError("Request timed out"),setLoading(!1);return}if(err?.name==="AbortError")return;setError(err instanceof Error?err.message:"Request failed"),setLoading(!1)}),()=>{cancelled=!0,clearDeadline(),controller.abort()}},[url,nonce]),{data,loading,error,refresh}}function usePluginJsonFetch(pluginId,path,opts){let clean=path===null?null:path.startsWith("/")?path.slice(1):path;return useJsonFetch(clean===null?null:`/api/plugins/${pluginId}/${clean}`,opts)}import{useState as useState2,useEffect as useEffect3,useCallback as useCallback2}from"react";var NONE={needed:!1};function useRuntimeStatus(){let[pending,setPending]=useState2(!1),[advice,setAdvice]=useState2(NONE),[lastError,setLastError]=useState2(null),[restarting,setRestarting]=useState2(!1),refresh=useCallback2(async()=>{try{let r=await fetch("/api/plugins/models/runtime/status");if(!r.ok)throw Error(`Runtime status: ${r.status}`);let data=await r.json();setPending(data.pending===!0),setAdvice(data.advice??NONE),setLastError(data.lastAttempt&&!data.lastAttempt.ok?data.lastAttempt.error??"restart failed":null)}catch(e){console.error("Failed to fetch runtime status:",e)}},[]);useEffect3(()=>{refresh()},[refresh]);let restart=useCallback2(async()=>{setRestarting(!0);try{await fetch("/api/plugins/models/runtime/restart",{method:"POST"})}finally{setRestarting(!1),await refresh()}},[refresh]);return{pending,advice,restarting,lastError,restart,refresh}}import{useLocation,useNavigate,useParams as useTanstackParams}from"@tanstack/react-router";import{useMemo}from"react";function toNavigationOptions(url){let hashIndex=url.indexOf("#"),beforeHash=hashIndex>=0?url.slice(0,hashIndex):url,hash=hashIndex>=0?url.slice(hashIndex+1):"",queryIndex=beforeHash.indexOf("?"),to=queryIndex>=0?beforeHash.slice(0,queryIndex):beforeHash,query=queryIndex>=0?beforeHash.slice(queryIndex+1):"",search=Object.create(null);for(let[key,raw]of new URLSearchParams(query))search[key]=raw;return{to,search,hash}}function useRouter(){let navigate=useNavigate();return useMemo(()=>({push:(url,options)=>{navigate({...toNavigationOptions(url),...options?.scroll===!1?{resetScroll:!1}:{}})},replace:(url)=>{navigate({...toNavigationOptions(url),replace:!0,resetScroll:!1})},back:()=>{if(typeof window<"u")window.history.back()},forward:()=>{if(typeof window<"u")window.history.forward()},refresh:()=>{if(typeof window<"u")window.location.reload()},prefetch:()=>{}}),[navigate])}function usePathname(){return useLocation().pathname}function useSearchParams(){let location=useLocation();return useMemo(()=>{let search=location.searchStr;if(typeof search==="string")return new URLSearchParams(search.startsWith("?")?search.slice(1):search);let parsed=location.search;if(parsed&&typeof parsed==="object"){let params=new URLSearchParams;for(let[key,value]of Object.entries(parsed)){if(value===void 0||value===null)continue;params.set(key,String(value))}return params}return new URLSearchParams},[location])}function useParams(){return useTanstackParams({strict:!1})}import{useCallback as useCallback3,useMemo as useMemo2,useRef as useRef2}from"react";var pendingPatch=new Map,pendingPush=!1,pendingNav=null,flushScheduled=!1;function enqueueParamUpdate(key,value,push,router,pathname){if(pendingPatch.set(key,value),pendingPush=pendingPush||push,pendingNav={router,pathname},flushScheduled)return;flushScheduled=!0,queueMicrotask(()=>{let navigation=pendingNav,usePush=pendingPush,patch=new Map(pendingPatch);pendingPatch.clear(),pendingPush=!1,pendingNav=null,flushScheduled=!1;let params=new URLSearchParams(window.location.search);for(let[patchKey,patchValue]of patch)if(patchValue===null)params.delete(patchKey);else params.set(patchKey,patchValue);let query=params.toString(),url=query?`${navigation.pathname}?${query}`:navigation.pathname;if(usePush)navigation.router.push(url,{scroll:!1});else navigation.router.replace(url,{scroll:!1})})}function useQueryState(key,defaultValue=""){let searchParams=useSearchParams(),router=useRouter(),pathname=usePathname(),pathnameRef=useRef2(pathname);pathnameRef.current=pathname;let value=searchParams.get(key)??defaultValue,setValue=useCallback3((next)=>{enqueueParamUpdate(key,next===defaultValue?null:next,!1,router,pathnameRef.current)},[key,defaultValue,router]),pushValue=useCallback3((next)=>{enqueueParamUpdate(key,next===defaultValue?null:next,!0,router,pathnameRef.current)},[key,defaultValue,router]);return[value,setValue,pushValue]}function useQueryArrayState(key){let searchParams=useSearchParams(),router=useRouter(),pathname=usePathname(),pathnameRef=useRef2(pathname);pathnameRef.current=pathname;let value=useMemo2(()=>{let raw=searchParams.get(key);return raw?raw.split(",").filter(Boolean):[]},[searchParams,key]),setValue=useCallback3((next)=>{enqueueParamUpdate(key,next.length===0?null:next.join(","),!1,router,pathnameRef.current)},[key,router]);return[value,setValue]}import{useNavigate as useNavigate2,useRouter as useTanStackRouter}from"@tanstack/react-router";import{useCallback as useCallback4}from"react";function useHistoryBack(fallbackTo){let router=useTanStackRouter(),navigate=useNavigate2();return useCallback4(()=>{if(router.history.canGoBack())router.history.back();else navigate({to:fallbackTo})},[router,navigate,fallbackTo])}import{useState as useState3,useEffect as useEffect4,useCallback as useCallback5,useRef as useRef3}from"react";function useScheduleJobs(options={}){let[jobs,setJobs]=useState3([]),[loading,setLoading]=useState3(!0),[fetchFailed,setFetchFailed]=useState3(!1),optionsRef=useRef3(options);optionsRef.current=options;let fetchJobs=useCallback5(async()=>{try{let res=await fetch("/api/plugins/schedule/");if(res.ok){let data=await res.json();setJobs(data.jobs||[]),setFetchFailed(!1)}else setFetchFailed(!0)}catch{setFetchFailed(!0)}finally{setLoading(!1)}},[]);useEffect4(()=>{fetchJobs()},[fetchJobs]),useEffect4(()=>{let es=new EventSource("/api/events"),handler=(event)=>{try{let data=JSON.parse(event.data);if(data.type==="activity"&&data.message?.includes("Schedule")||data.event?.startsWith("schedule."))fetchJobs()}catch{}};return es.addEventListener("message",handler),()=>{es.removeEventListener("message",handler),es.close()}},[fetchJobs]);let opts=options,filtered=jobs.filter((j)=>{if(opts.agent&&j.agentId!==opts.agent)return!1;return!0}),pauseJob=useCallback5(async(jobId,pauseUntil)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"pause",pauseUntil})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),resumeJob=useCallback5(async(jobId)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"resume"})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),deleteJob=useCallback5(async(jobId)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}`,{method:"DELETE",headers:{"Content-Type":"application/json"}});if(res.ok)setJobs((prev)=>prev.filter((j)=>j.id!==jobId));return res.ok}catch{return!1}},[]),runNow=useCallback5(async(jobId)=>{try{return(await fetch(`/api/plugins/schedule/${jobId}/run`,{method:"POST",headers:{"Content-Type":"application/json"}})).ok}catch{return!1}},[]),updateJob=useCallback5(async(jobId,data)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),adoptJob=useCallback5(async(jobId,data)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/adopt`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(data)});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),restoreNative=useCallback5(async(jobId)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/restore-native`,{method:"POST",headers:{"Content-Type":"application/json"}});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),skipNext=useCallback5(async(jobId,n=1)=>{try{let res=await fetch(`/api/plugins/schedule/${jobId}/pause`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"skip",skipN:n})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[fetchJobs]),duplicateJob=useCallback5(async(jobId,overrides={})=>{let source=jobs.find((j)=>j.id===jobId);if(!source)return!1;try{let res=await fetch("/api/plugins/schedule/",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({name:overrides.name??`${source.displayName} (copy)`,schedule:overrides.schedule??source.humanSchedule,agentId:overrides.agentId??source.agentId,teamId:overrides.teamId??source.teamId,taskPrompt:overrides.taskPrompt??source.taskPrompt,taskTitle:overrides.taskTitle??source.taskTitle,workflowId:overrides.workflowId??source.workflowId,owner:overrides.owner??source.owner,requireTriage:overrides.requireTriage??source.requireTriage,allowOverlap:overrides.allowOverlap??source.allowOverlap,maxFailures:overrides.maxFailures??source.maxFailures,...overrides})});if(res.ok)fetchJobs();return res.ok}catch{return!1}},[jobs,fetchJobs]);return{jobs:filtered,allJobs:jobs,loading,fetchFailed,refresh:fetchJobs,pauseJob,resumeJob,deleteJob,runNow,updateJob,adoptJob,restoreNative,skipNext,duplicateJob}}function useOccurrences(fromIso,toIso){let[occurrences,setOccurrences]=useState3([]),[events,setEvents]=useState3([]),[unevaluated,setUnevaluated]=useState3([]),[droppedProviders,setDroppedProviders]=useState3([]),[loading,setLoading]=useState3(!0),fetchOccurrences=useCallback5(async()=>{try{let res=await fetch(`/api/plugins/schedule/occurrences?from=${encodeURIComponent(fromIso)}&to=${encodeURIComponent(toIso)}`);if(res.ok){let data=await res.json();setOccurrences(data.occurrences||[]),setEvents(data.events||[]),setUnevaluated(data.unevaluated||[]),setDroppedProviders(data.droppedProviders||[])}}catch{}finally{setLoading(!1)}},[fromIso,toIso]);return useEffect4(()=>{fetchOccurrences()},[fetchOccurrences]),useEffect4(()=>{let es=new EventSource("/api/events"),handler=(event)=>{try{let data=JSON.parse(event.data);if(data.type==="activity"&&data.message?.includes("Schedule")||data.event?.startsWith("schedule.")||data.type==="taskboard"||data.event?.endsWith(".scheduled_events_changed"))fetchOccurrences()}catch{}};return es.addEventListener("message",handler),()=>{es.removeEventListener("message",handler),es.close()}},[fetchOccurrences]),{occurrences,events,unevaluated,droppedProviders,loading,refresh:fetchOccurrences}}function useRunHistory(jobId,limit=20){let[runs,setRuns]=useState3([]),[loading,setLoading]=useState3(!1);return useEffect4(()=>{if(!jobId){setRuns([]);return}setLoading(!0),fetch(`/api/plugins/schedule/${jobId}/runs?limit=${limit}`).then((res)=>res.ok?res.json():null).then((data)=>{if(data)setRuns(data.runs||[])}).catch(()=>{}).finally(()=>setLoading(!1))},[jobId,limit]),{runs,loading}}import{useState as useState4,useEffect as useEffect5}from"react";function useTaskRunHistory(taskId,limit=50){let[runs,setRuns]=useState4([]),[outcome,setOutcome]=useState4(void 0),[loading,setLoading]=useState4(!1);return useEffect5(()=>{if(setRuns([]),setOutcome(void 0),!taskId)return;let controller=new AbortController;return setLoading(!0),fetch(`/api/plugins/tasks/${taskId}/runs?limit=${limit}`,{signal:controller.signal}).then((res)=>res.ok?res.json():null).then((data)=>{if(data)setRuns(data.runs||[]),setOutcome(data.outcome)}).catch(()=>{}).finally(()=>{if(!controller.signal.aborted)setLoading(!1)}),()=>controller.abort()},[taskId,limit]),{runs,outcome,loading}}import{useState as useState5,useEffect as useEffect6,useCallback as useCallback6,useRef as useRef4}from"react";function reorderBySearchResults(items,searchResults){if(!searchResults.length)return items;let scoreMap=new Map;for(let r of searchResults)scoreMap.set(r.id,r.score);let matched=[],unmatched=[];for(let item of items)if(scoreMap.has(item.id))matched.push(item);else unmatched.push(item);return matched.sort((a,b)=>(scoreMap.get(b.id)??0)-(scoreMap.get(a.id)??0)),[...matched,...unmatched]}function useSearch(options={}){let{plugin,limit=20,facets,types,debounce:debounceMs=250}=options,[results,setResults]=useState5([]),[aggregations,setAggregations]=useState5({}),[status,setStatus]=useState5("idle"),[error,setError]=useState5(null),[meta,setMeta]=useState5(null),abortRef=useRef4(null),timerRef=useRef4(null),mountedRef=useRef4(!0),lastQueryRef=useRef4(""),typesKey=types?.join(",");useEffect6(()=>{return mountedRef.current=!0,()=>{if(mountedRef.current=!1,abortRef.current?.abort(),timerRef.current)clearTimeout(timerRef.current)}},[]);let executeSearch=useCallback6(async(q)=>{if(!q.trim()){setResults([]),setAggregations({}),setMeta(null),setError(null),setStatus("idle");return}abortRef.current?.abort();let controller=new AbortController;abortRef.current=controller,setStatus("loading"),setError(null);try{let params=new URLSearchParams({q});if(limit)params.set("limit",String(limit));if(facets?.length)params.set("facets",facets.join(","));if(typesKey)params.set("types",typesKey);let url=plugin?`/api/plugins/${plugin}/search?${params}`:`/api/search?${params}`,res=await fetch(url,{signal:AbortSignal.any([controller.signal,AbortSignal.timeout(15000)])});if(!mountedRef.current)return;if(res.status===503){setResults([]),setAggregations({}),setMeta(null),setStatus("unavailable");return}if(!res.ok)throw Error(`Search failed: ${res.status}`);let data=await res.json();if(!mountedRef.current)return;setResults(Array.isArray(data.results)?data.results:[]),setAggregations(data.aggregations||{}),setMeta(data.meta||null),setStatus("ok")}catch(err){if(!mountedRef.current)return;if(err instanceof DOMException&&err.name==="AbortError")return;let msg=err instanceof Error?err.message:String(err);setError(msg),setResults([]),setAggregations({}),setStatus("error")}},[plugin,limit,facets,typesKey]),search=useCallback6((q)=>{if(lastQueryRef.current=q,timerRef.current)clearTimeout(timerRef.current);if(!q.trim()){setResults([]),setAggregations({}),setMeta(null),setError(null),setStatus("idle");return}setStatus("loading"),timerRef.current=setTimeout(()=>executeSearch(q),debounceMs)},[executeSearch,debounceMs]),retry=useCallback6(()=>{if(lastQueryRef.current.trim())executeSearch(lastQueryRef.current)},[executeSearch]),clear=useCallback6(()=>{if(lastQueryRef.current="",setResults([]),setAggregations({}),setMeta(null),setError(null),setStatus("idle"),abortRef.current?.abort(),timerRef.current)clearTimeout(timerRef.current)},[]);return{results,aggregations,status,loading:status==="loading",error,meta,search,clear,retry}}import{useState as useState6,useEffect as useEffect7}from"react";function useSidebar(){let[collapsed,setCollapsed]=useState6(!1);return useEffect7(()=>{if(localStorage.getItem("sidebar-collapsed")==="true")setCollapsed(!0)},[]),{collapsed,toggle:()=>setCollapsed((c)=>{return localStorage.setItem("sidebar-collapsed",String(!c)),!c})}}import{useEffect as useEffect9,useRef as useRef6}from"react";import{useEffect as useEffect8,useRef as useRef5}from"react";var subscribers=globalThis.__bakinPluginEventSubs??(globalThis.__bakinPluginEventSubs=new Map);function emitPluginEvent(payload){let event=payload?.event;if(typeof event!=="string")return;let set=subscribers.get(event);if(!set)return;for(let handler of[...set])try{handler(payload)}catch{}}function usePluginEvent(event,handler){let handlerRef=useRef5(handler);handlerRef.current=handler,useEffect8(()=>{let wrapped=(payload)=>handlerRef.current(payload),set=subscribers.get(event);if(!set)set=new Set,subscribers.set(event,set);return set.add(wrapped),()=>{if(set.delete(wrapped),set.size===0)subscribers.delete(event)}},[event])}function navigateToUrl(url){let bridge=globalThis.__bakinNavigate;if(bridge){bridge(url);return}window.location.assign(url)}function isNotificationsSupported(){return typeof window<"u"&&"Notification"in window&&window.isSecureContext}function isNotificationsEnabled(){if(!isNotificationsSupported())return!1;return localStorage.getItem("bakin-notifications-enabled")==="true"&&Notification.permission==="granted"}function sendBrowserNotification(title,body,url){if(!isNotificationsEnabled())return;if(document.hasFocus())return;let notification=new Notification(title,{body,icon:"/favicon.ico"});if(url)notification.onclick=()=>{window.focus(),navigateToUrl(url),notification.close()}}var BASE_DELAY=1000,MAX_DELAY=30000,seenCapEventIds=new Set;function isDevPluginHotReloadActive(){return typeof document<"u"&&!!document.querySelector('script[src="/__bakin-dev/client.js"]')}function useSSE(){let updateFile=useContentStore((s)=>s.updateFile),setConnected=useContentStore((s)=>s.setConnected),setHeartbeats=useContentStore((s)=>s.setHeartbeats),initialize=useContentStore((s)=>s.initialize),appendAuditEntry=useContentStore((s)=>s.appendAuditEntry),appendActivityEvent=useContentStore((s)=>s.appendActivityEvent),setSseConnected=useContentStore((s)=>s.setSseConnected),esRef=useRef6(null),retryRef=useRef6(0),timeoutRef=useRef6(null),hbTimerRef=useRef6(null);useEffect9(()=>{initialize();let disposed=!1,reconcileQueued=!1;function reconcile(){if(reconcileQueued||disposed)return;reconcileQueued=!0,queueMicrotask(()=>{if(reconcileQueued=!1,!disposed)emitPluginEvent({event:"bakin.reconcile"})})}function resume(){if(document.visibilityState==="hidden")return;if(!esRef.current||esRef.current.readyState===EventSource.CLOSED){if(timeoutRef.current)clearTimeout(timeoutRef.current);retryRef.current=0,connect()}reconcile()}document.addEventListener("visibilitychange",resume),window.addEventListener("pageshow",resume),window.addEventListener("online",resume);function connect(){if(disposed)return;if(esRef.current)esRef.current.close(),esRef.current=null;let es=new EventSource("/api/events");esRef.current=es,es.onopen=()=>{setConnected(!0),setSseConnected(!0),retryRef.current=0,reconcile()},es.onmessage=(e)=>{try{let data=JSON.parse(e.data);if(data.type==="plugin-event")emitPluginEvent(data);if(data.type==="taskboard"){emitPluginEvent({event:"taskboard"});return}if(data.type==="turn-activity"){emitPluginEvent({...data,event:"turn-activity"});return}if(data.type==="plugin:manifest-changed"){if(!isDevPluginHotReloadActive())window.location.reload();return}if(data.type==="activity"){appendActivityEvent({id:`${data.ts}-activity-${data.agent}`,ts:data.ts,type:"log",agent:data.agent||"system",message:data.message,taskId:data.taskId});return}if(data.type==="audit"&&data.entry){let entry=data.entry,entryData=entry.data||{};if(appendAuditEntry(entry),entry.event==="doctor.run")emitPluginEvent({event:"doctor.run"});appendActivityEvent({id:`${entry.ts}-${entry.event}-${entry.agent}`,ts:entry.ts,type:"audit",agent:entry.agent||"system",message:mapAuditMessage(entry.event,entryData),taskId:entryData.taskId,taskTitle:entryData.title,eventName:entry.event,...entryData.duplicate?{duplicate:!0}:{},data:entryData})}if(data.type==="plugin-event"&&typeof data.event==="string"&&data.event.startsWith("workflow.")){if(data.event.startsWith("workflow.gate")||data.event==="workflow.complete")initialize();if(data.event==="workflow.gate_reached")sendBrowserNotification("Approval needed",data.label||"A workflow gate needs your review");appendAuditEntry({ts:data.timestamp||new Date().toISOString(),event:data.event,agent:"workflow",data:{taskId:data.taskId,label:data.label,agent:data.agent,reason:data.reason,workflowId:data.workflowId}}),appendActivityEvent({id:`${data.timestamp||new Date().toISOString()}-${data.event}-workflow`,ts:data.timestamp||new Date().toISOString(),type:"audit",agent:"workflow",message:mapAuditMessage(data.event,data),taskId:data.taskId,eventName:data.event})}if(data.type==="plugin-event"&&data.event==="budget.incident_opened"){let capEventId=typeof data.eventId==="string"?data.eventId:null;if(capEventId&&seenCapEventIds.has(capEventId))return;if(capEventId)seenCapEventIds.add(capEventId);sendBrowserNotification("Budget alert",data.message||"A budget cap was reached \u2014 dispatch may be deferred","/spend"),appendActivityEvent({id:`budget-incident-${data.incidentId}-${capEventId??data.timestamp??new Date().toISOString()}`,ts:data.timestamp||new Date().toISOString(),type:"alert",agent:"system",message:data.message||"Budget incident opened",eventName:"budget.incident_opened",data:{incidentId:data.incidentId,scope:data.scope,scopeId:data.scopeId,lane:data.lane,window:data.window}})}if(data.type==="plugin-event"&&data.event==="brand.dispatch_blocked")sendBrowserNotification("Brand unavailable",data.message||`A task is waiting on brand '${data.brandId}'`,`/tasks?brand=${encodeURIComponent(data.brandId||"")}`),appendActivityEvent({id:`${data.timestamp||new Date().toISOString()}-brand-blocked-${data.taskId}`,ts:data.timestamp||new Date().toISOString(),type:"alert",agent:"system",message:data.message||"Task blocked on a missing brand",eventName:"brand.dispatch_blocked",data:{taskId:data.taskId,brandId:data.brandId}});if(data.type==="alert")appendActivityEvent({id:`${data.timestamp||new Date().toISOString()}-alert-system`,ts:data.timestamp||new Date().toISOString(),type:"alert",agent:"system",message:data.message||"Watchdog alert"});if(data.type==="search.rebuild.start")emitPluginEvent({event:"search.rebuild.start",table:data.table});if(data.type==="search.rebuild.progress")emitPluginEvent({event:"search.rebuild.progress",table:data.table,indexed:data.indexed??0});if(data.type==="search.rebuild.complete")emitPluginEvent({event:"search.rebuild.complete",table:data.table,indexed:data.indexed??0});if(data.type==="reindex.batch_start")appendActivityEvent({id:`${Date.now()}-reindex-batch-start`,ts:new Date().toISOString(),type:"log",agent:"system",message:`Starting full re-index (${data.tables} table${data.tables===1?"":"s"})`});if(data.type==="reindex.batch_pulse"){let pct=data.tables_total?Math.floor(data.tables_done/data.tables_total*100):0;appendActivityEvent({id:`${Date.now()}-reindex-batch-pulse`,ts:new Date().toISOString(),type:"log",agent:"system",message:`Re-indexing\u2026 ${data.tables_done}/${data.tables_total} tables (${pct}%), ${data.indexed} documents so far`})}if(data.type==="reindex.batch_complete"){let seconds=Math.max(1,Math.round((data.elapsed_ms??0)/1000));appendActivityEvent({id:`${Date.now()}-reindex-batch-complete`,ts:new Date().toISOString(),type:"log",agent:"system",message:`Completed full re-index \u2014 ${data.indexed} documents across ${data.tables} table${data.tables===1?"":"s"} in ${seconds}s`})}if(typeof data.file==="string")emitPluginEvent({...data,event:"bakin.file.changed",change:data.event});if(data.file&&data.content!==void 0){if(updateFile(data.file,data.content),data.file.startsWith("heartbeats/")&&data.file.endsWith(".json")){if(hbTimerRef.current)clearTimeout(hbTimerRef.current);hbTimerRef.current=setTimeout(()=>{fetch("/api/agents/health").then((r)=>r.ok?r.json():null).then((hb)=>{if(hb)setHeartbeats(hb)}).catch(()=>{})},500)}}}catch{}},es.onerror=()=>{if(disposed||esRef.current!==es)return;setConnected(!1),setSseConnected(!1),es.close(),esRef.current=null;let delay=Math.min(BASE_DELAY*Math.pow(2,retryRef.current),MAX_DELAY);retryRef.current=Math.min(retryRef.current+1,5),timeoutRef.current=setTimeout(connect,delay)}}return connect(),()=>{if(disposed=!0,document.removeEventListener("visibilitychange",resume),window.removeEventListener("pageshow",resume),window.removeEventListener("online",resume),timeoutRef.current)clearTimeout(timeoutRef.current);if(hbTimerRef.current)clearTimeout(hbTimerRef.current);esRef.current?.close(),esRef.current=null}},[updateFile,setConnected,setHeartbeats,initialize,appendAuditEntry,appendActivityEvent,setSseConnected])}var DEFAULT_DURATION={success:4000,info:4000,error:1e4},counter=0,useToastStore=create((set)=>({toasts:[],add:(toast)=>{let id=String(++counter);if(set((s)=>({toasts:[...s.toasts,{...toast,id}]})),!toast.persistent)setTimeout(()=>{set((s)=>({toasts:s.toasts.filter((t)=>t.id!==id)}))},toast.duration??DEFAULT_DURATION[toast.type]);return id},dismiss:(id)=>set((s)=>({toasts:s.toasts.filter((t)=>t.id!==id)}))}));function toast(message,type="info",duration){return useToastStore.getState().add({message,type,...duration?{duration}:{}})}import{useCallback as useCallback7,useEffect as useEffect10,useRef as useRef7,useState as useState7}from"react";var KEY_STEP=16,KEY_STEP_LARGE=64;function clamp(n,min,max){return Math.min(max,Math.max(min,n))}function readStored(def,min,max,prefix,storageKey){if(!storageKey||typeof window>"u")return clamp(def,min,max);try{let raw=window.localStorage.getItem(prefix+storageKey);if(!raw)return clamp(def,min,max);let parsed=Number.parseInt(raw,10);return Number.isFinite(parsed)?clamp(parsed,min,max):clamp(def,min,max)}catch(err){return console.error("useResizablePane: failed to read stored size",err),clamp(def,min,max)}}function useResizablePane({axis,defaultSize,minSize,maxSize,storageKey,storagePrefix}){let[size,setSizeState]=useState7(()=>readStored(defaultSize,minSize,maxSize,storagePrefix,storageKey)),sizeRef=useRef7(size),dragging=useRef7(!1),dragStart=useRef7(0),dragStartSize=useRef7(0),persist=useCallback7((n)=>{if(!storageKey||typeof window>"u")return;try{window.localStorage.setItem(storagePrefix+storageKey,String(clamp(n,minSize,maxSize)))}catch(err){console.error("useResizablePane: failed to persist size",err)}},[storageKey,storagePrefix,minSize,maxSize]),setSize=useCallback7((n)=>{let next=clamp(n,minSize,maxSize);sizeRef.current=next,setSizeState(next),persist(next)},[minSize,maxSize,persist]);useEffect10(()=>{let clamped=clamp(sizeRef.current,minSize,maxSize);if(clamped!==sizeRef.current)setSize(clamped)},[minSize,maxSize,setSize]);let beginDrag=useCallback7((client)=>{dragging.current=!0,dragStart.current=client,dragStartSize.current=sizeRef.current},[]),onMove=useCallback7((client)=>{if(!dragging.current)return;let delta=dragStart.current-client,next=clamp(dragStartSize.current+delta,minSize,maxSize);sizeRef.current=next,setSizeState(next)},[minSize,maxSize]),endDrag=useCallback7(()=>{if(!dragging.current)return;dragging.current=!1,persist(sizeRef.current),document.body.style.cursor="",document.body.style.userSelect=""},[persist]),onMouseDown=useCallback7((e)=>{e.preventDefault(),beginDrag(axis==="x"?e.clientX:e.clientY);let move=(ev)=>onMove(axis==="x"?ev.clientX:ev.clientY),up=()=>{document.removeEventListener("mousemove",move),document.removeEventListener("mouseup",up),endDrag()};document.addEventListener("mousemove",move),document.addEventListener("mouseup",up),document.body.style.cursor=axis==="x"?"col-resize":"row-resize",document.body.style.userSelect="none"},[axis,beginDrag,onMove,endDrag]),onTouchStart=useCallback7((e)=>{let touch=e.touches[0];if(!touch)return;beginDrag(axis==="x"?touch.clientX:touch.clientY);let move=(ev)=>{let t=ev.touches[0];if(!t)return;ev.preventDefault(),onMove(axis==="x"?t.clientX:t.clientY)},up=()=>{document.removeEventListener("touchmove",move),document.removeEventListener("touchend",up),document.removeEventListener("touchcancel",up),endDrag()};document.addEventListener("touchmove",move,{passive:!1}),document.addEventListener("touchend",up),document.addEventListener("touchcancel",up)},[axis,beginDrag,onMove,endDrag]),onKeyDown=useCallback7((e)=>{let growKey=axis==="x"?"ArrowLeft":"ArrowUp",shrinkKey=axis==="x"?"ArrowRight":"ArrowDown",dir=0;if(e.key===growKey)dir=1;else if(e.key===shrinkKey)dir=-1;else return;e.preventDefault();let step=e.shiftKey?KEY_STEP_LARGE:KEY_STEP;setSize(sizeRef.current+dir*step)},[axis,setSize]);return{size,setSize,handleProps:{role:"separator",tabIndex:0,"aria-orientation":axis==="x"?"vertical":"horizontal","aria-valuenow":size,"aria-valuemin":minSize,"aria-valuemax":maxSize,onMouseDown,onTouchStart,onKeyDown}}}function useHorizontalResize({defaultWidth,minWidth,maxWidth,storageKey}){let{size,setSize,handleProps}=useResizablePane({axis:"x",defaultSize:defaultWidth,minSize:minWidth,maxSize:maxWidth,storageKey,storagePrefix:"bakin-hresize:"});return{width:size,setWidth:setSize,handleProps}}async function parsePackageStatesResponse(res){if(!res||!res.ok)return{};try{let body=await res.json();if(!body.ok||!Array.isArray(body.agents))return{};let map={};for(let row of body.agents)map[row.agentId]=row;return map}catch{return{}}}var ROSTER_CACHE_KEY="bakin-agent-roster-v1";function readRosterCache(){try{if(typeof window>"u")return null;let raw=window.localStorage.getItem(ROSTER_CACHE_KEY);if(!raw)return null;let parsed=JSON.parse(raw);if(!Array.isArray(parsed.agents))return null;return{agents:parsed.agents.filter((a)=>!!a&&typeof a==="object"&&typeof a.id==="string"&&typeof a.name==="string"),displaySettings:parsed.displaySettings&&typeof parsed.displaySettings==="object"?parsed.displaySettings:{},mainAgentId:typeof parsed.mainAgentId==="string"?parsed.mainAgentId:null}}catch{return null}}function writeRosterCache(cache){try{window.localStorage.setItem(ROSTER_CACHE_KEY,JSON.stringify(cache))}catch{}}var hydrated=readRosterCache(),hydratedMap={};for(let a of hydrated?.agents??[])hydratedMap[a.id]=a;var useAgentStore=create((set,get)=>({agents:hydrated?.agents??[],agentIds:(hydrated?.agents??[]).map((a)=>a.id),agentMap:hydratedMap,agentsWithStatus:[],displaySettings:hydrated?.displaySettings??{},teams:[],packageStates:{},mainAgentId:hydrated?.mainAgentId??null,loaded:!1,load:async()=>{try{let[rosterRes,pkgRes]=await Promise.all([fetch("/api/plugins/team/"),fetch("/api/agent-packages?check=1").catch(()=>null)]);if(!rosterRes.ok){set({loaded:!0});return}let data=await rosterRes.json(),agents=data.agents.map(({status:_status,heartbeat:_heartbeat,heartbeatAge:_heartbeatAge,model:_model,...meta})=>meta),agentMap={};for(let a of agents)agentMap[a.id]=a;let packageStates=await parsePackageStatesResponse(pkgRes);set({agents,agentIds:agents.map((a)=>a.id),agentMap,agentsWithStatus:data.agents,displaySettings:data.displaySettings,teams:data.teams??[],packageStates,mainAgentId:data.mainAgentId??null,loaded:!0}),writeRosterCache({agents,displaySettings:data.displaySettings,mainAgentId:data.mainAgentId??null})}catch{set({loaded:!0})}},refreshPackageStates:async()=>{let res=await fetch("/api/agent-packages?check=1").catch(()=>null),packageStates=await parsePackageStatesResponse(res);set({packageStates})},updateDisplay:async(agentId,patch)=>{let current=get().displaySettings,updated={...current,[agentId]:{...current[agentId],...patch}};set({displaySettings:updated}),await fetch("/api/plugins/team/settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(updated)})}}));function useAgent(agentId){return useAgentStore((s)=>s.agentMap[agentId])}function useAgentList(){return useAgentStore((s)=>s.agents)}function useAgentColor(agentId){return useAgentStore((s)=>s.displaySettings[agentId]?.accentColor??"#a1a1aa")}function usePackageState(agentId){return useAgentStore((s)=>s.packageStates?.[agentId])}function useAgentDisplayName(agentId){return useAgentStore((s)=>s.displaySettings[agentId]?.displayName)}function useAgentIds(){return useAgentStore((s)=>s.agentIds)}function useMainAgentId(){return useAgentStore((s)=>s.mainAgentId)}function hexToMuted(hex,opacity=0.2){let r=parseInt(hex.slice(1,3),16),g=parseInt(hex.slice(3,5),16),b=parseInt(hex.slice(5,7),16);return`rgba(${r}, ${g}, ${b}, ${opacity})`}import{useEffect as useEffect11,useState as useState8}from"react";var cached=null,inFlight=null;function fetchChannels(){if(cached)return Promise.resolve(cached);if(inFlight)return inFlight;return inFlight=fetch("/api/plugins/workflows/notification-channels").then((r)=>r.ok?r.json():null).then((data)=>{let list=data&&Array.isArray(data.channels)?data.channels:[];return cached=list,list}).catch(()=>{return cached=[],[]}).finally(()=>{inFlight=null}),inFlight}function useNotificationChannels(){let[channels,setChannels]=useState8(()=>cached??[]);return useEffect11(()=>{if(cached)return;let cancelled=!1;return fetchChannels().then((list)=>{if(!cancelled)setChannels(list)}),()=>{cancelled=!0}},[]),channels}function getChannelLabel(id,channels){return channels.find((c)=>c.id===id)?.label??id}function getChannelInitials(id,channels){let match=channels.find((c)=>c.id===id);if(match?.initials)return match.initials;return id.slice(0,2).toUpperCase()}import{useCallback as useCallback8,useEffect as useEffect12,useState as useState9}from"react";var inFlight2=new Map;function catalogUrl(agentId){return agentId?`/api/plugins/models/available?agentId=${encodeURIComponent(agentId)}`:"/api/plugins/models/available"}function readCatalog(agentId){return fetch(catalogUrl(agentId)).then((r)=>r.ok?r.json():null).then((data)=>data&&Array.isArray(data.models)?data.models:[]).catch(()=>[])}function fetchAvailableModels(agentId,fresh=!1){let key=agentId??"",pending=inFlight2.get(key);if(pending&&!fresh)return pending;let read=()=>readCatalog(agentId),request=(pending??Promise.resolve()).then(read,read);return inFlight2.set(key,request),request.finally(()=>{if(inFlight2.get(key)===request)inFlight2.delete(key)}),request}function useAvailableModels(agentId){let[models,setModels]=useState9([]),load=useCallback8((fresh)=>{let cancelled=!1;return fetchAvailableModels(agentId,fresh).then((list)=>{if(!cancelled)setModels(list)}),()=>{cancelled=!0}},[agentId]);return useEffect12(()=>load(!1),[load]),usePluginEvent("models.catalog_changed",()=>{load(!0)}),models}function toModelSelectOptions(models){return models.map((m)=>{let e=m.eligibility,dead=e?.status==="ineligible";return{id:m.id,name:m.name,provider:m.provider,disabled:dead,...dead?{description:e.detail,tone:"danger"}:{}}})}export{useToastStore,useTaskRunHistory,useSidebar,useSearchParams,useSearch,useScheduleJobs,useSSE,useRuntimeStatus,useRunHistory,useRouter,useQueryState,useQueryArrayState,usePluginJsonFetch,usePluginEvent,usePathname,useParams,usePackageState,useOccurrences,useNotificationChannels,useNavBadge,useMainAgentId,useJsonFetch,useHorizontalResize,useHistoryBack,useDebug,useContentStore,useAvailableModels,useAgentStore,useAgentList,useAgentIds,useAgentDisplayName,useAgentColor,useAgent,toast,toNavigationOptions,toModelSelectOptions,reorderBySearchResults,hexToMuted,getChannelLabel,getChannelInitials,emitPluginEvent};
|
package/index.js
CHANGED
|
@@ -41,4 +41,4 @@ var __defProp=Object.defineProperty;var __returnValue=(v)=>v;function __exportSe
|
|
|
41
41
|
Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let entry of ctx.seen.entries()){let seen=entry[1];if(schema===entry[0]){extractToDef(entry);continue}if(ctx.external){let ext=ctx.external.registry.get(entry[0])?.id;if(schema!==entry[0]&&ext){extractToDef(entry);continue}}if(ctx.metadataRegistry.get(entry[0])?.id){extractToDef(entry);continue}if(seen.cycle){extractToDef(entry);continue}if(seen.count>1){if(ctx.reused==="ref"){extractToDef(entry);continue}}}}function finalize(ctx,schema){let root=ctx.seen.get(schema);if(!root)throw Error("Unprocessed schema. This is a bug in Zod.");let flattenRef=(zodSchema)=>{let seen=ctx.seen.get(zodSchema);if(seen.ref===null)return;let schema2=seen.def??seen.schema,_cached={...schema2},ref=seen.ref;if(seen.ref=null,ref){flattenRef(ref);let refSeen=ctx.seen.get(ref),refSchema=refSeen.schema;if(refSchema.$ref&&(ctx.target==="draft-07"||ctx.target==="draft-04"||ctx.target==="openapi-3.0"))schema2.allOf=schema2.allOf??[],schema2.allOf.push(refSchema);else Object.assign(schema2,refSchema);if(Object.assign(schema2,_cached),zodSchema._zod.parent===ref)for(let key in schema2){if(key==="$ref"||key==="allOf")continue;if(!(key in _cached))delete schema2[key]}if(refSchema.$ref&&refSeen.def)for(let key in schema2){if(key==="$ref"||key==="allOf")continue;if(key in refSeen.def&&JSON.stringify(schema2[key])===JSON.stringify(refSeen.def[key]))delete schema2[key]}}let parent=zodSchema._zod.parent;if(parent&&parent!==ref){flattenRef(parent);let parentSeen=ctx.seen.get(parent);if(parentSeen?.schema.$ref){if(schema2.$ref=parentSeen.schema.$ref,parentSeen.def)for(let key in schema2){if(key==="$ref"||key==="allOf")continue;if(key in parentSeen.def&&JSON.stringify(schema2[key])===JSON.stringify(parentSeen.def[key]))delete schema2[key]}}}ctx.override({zodSchema,jsonSchema:schema2,path:seen.path??[]})};for(let entry of[...ctx.seen.entries()].reverse())flattenRef(entry[0]);let result={};if(ctx.target==="draft-2020-12")result.$schema="https://json-schema.org/draft/2020-12/schema";else if(ctx.target==="draft-07")result.$schema="http://json-schema.org/draft-07/schema#";else if(ctx.target==="draft-04")result.$schema="http://json-schema.org/draft-04/schema#";else if(ctx.target==="openapi-3.0");if(ctx.external?.uri){let id=ctx.external.registry.get(schema)?.id;if(!id)throw Error("Schema is missing an `id` property");result.$id=ctx.external.uri(id)}Object.assign(result,root.def??root.schema);let defs=ctx.external?.defs??{};for(let entry of ctx.seen.entries()){let seen=entry[1];if(seen.def&&seen.defId)defs[seen.defId]=seen.def}if(ctx.external);else if(Object.keys(defs).length>0)if(ctx.target==="draft-2020-12")result.$defs=defs;else result.definitions=defs;try{let finalized=JSON.parse(JSON.stringify(result));return Object.defineProperty(finalized,"~standard",{value:{...schema["~standard"],jsonSchema:{input:createStandardJSONSchemaMethod(schema,"input",ctx.processors),output:createStandardJSONSchemaMethod(schema,"output",ctx.processors)}},enumerable:!1,writable:!1}),finalized}catch(_err){throw Error("Error converting schema to JSON.")}}function isTransforming(_schema,_ctx){let ctx=_ctx??{seen:new Set};if(ctx.seen.has(_schema))return!1;ctx.seen.add(_schema);let def=_schema._zod.def;if(def.type==="transform")return!0;if(def.type==="array")return isTransforming(def.element,ctx);if(def.type==="set")return isTransforming(def.valueType,ctx);if(def.type==="lazy")return isTransforming(def.getter(),ctx);if(def.type==="promise"||def.type==="optional"||def.type==="nonoptional"||def.type==="nullable"||def.type==="readonly"||def.type==="default"||def.type==="prefault")return isTransforming(def.innerType,ctx);if(def.type==="intersection")return isTransforming(def.left,ctx)||isTransforming(def.right,ctx);if(def.type==="record"||def.type==="map")return isTransforming(def.keyType,ctx)||isTransforming(def.valueType,ctx);if(def.type==="pipe")return isTransforming(def.in,ctx)||isTransforming(def.out,ctx);if(def.type==="object"){for(let key in def.shape)if(isTransforming(def.shape[key],ctx))return!0;return!1}if(def.type==="union"){for(let option of def.options)if(isTransforming(option,ctx))return!0;return!1}if(def.type==="tuple"){for(let item of def.items)if(isTransforming(item,ctx))return!0;if(def.rest&&isTransforming(def.rest,ctx))return!0;return!1}return!1}var createToJSONSchemaMethod=(schema,processors={})=>(params)=>{let ctx=initializeContext({...params,processors});return process2(schema,ctx),extractDefs(ctx,schema),finalize(ctx,schema)},createStandardJSONSchemaMethod=(schema,io,processors={})=>(params)=>{let{libraryOptions,target}=params??{},ctx=initializeContext({...libraryOptions??{},target,io,processors});return process2(schema,ctx),extractDefs(ctx,schema),finalize(ctx,schema)};var formatMap={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},stringProcessor=(schema,ctx,_json,_params)=>{let json=_json;json.type="string";let{minimum,maximum,format,patterns,contentEncoding}=schema._zod.bag;if(typeof minimum==="number")json.minLength=minimum;if(typeof maximum==="number")json.maxLength=maximum;if(format){if(json.format=formatMap[format]??format,json.format==="")delete json.format;if(format==="time")delete json.format}if(contentEncoding)json.contentEncoding=contentEncoding;if(patterns&&patterns.size>0){let regexes=[...patterns];if(regexes.length===1)json.pattern=regexes[0].source;else if(regexes.length>1)json.allOf=[...regexes.map((regex)=>({...ctx.target==="draft-07"||ctx.target==="draft-04"||ctx.target==="openapi-3.0"?{type:"string"}:{},pattern:regex.source}))]}},numberProcessor=(schema,ctx,_json,_params)=>{let json=_json,{minimum,maximum,format,multipleOf,exclusiveMaximum,exclusiveMinimum}=schema._zod.bag;if(typeof format==="string"&&format.includes("int"))json.type="integer";else json.type="number";if(typeof exclusiveMinimum==="number")if(ctx.target==="draft-04"||ctx.target==="openapi-3.0")json.minimum=exclusiveMinimum,json.exclusiveMinimum=!0;else json.exclusiveMinimum=exclusiveMinimum;if(typeof minimum==="number"){if(json.minimum=minimum,typeof exclusiveMinimum==="number"&&ctx.target!=="draft-04")if(exclusiveMinimum>=minimum)delete json.minimum;else delete json.exclusiveMinimum}if(typeof exclusiveMaximum==="number")if(ctx.target==="draft-04"||ctx.target==="openapi-3.0")json.maximum=exclusiveMaximum,json.exclusiveMaximum=!0;else json.exclusiveMaximum=exclusiveMaximum;if(typeof maximum==="number"){if(json.maximum=maximum,typeof exclusiveMaximum==="number"&&ctx.target!=="draft-04")if(exclusiveMaximum<=maximum)delete json.maximum;else delete json.exclusiveMaximum}if(typeof multipleOf==="number")json.multipleOf=multipleOf},booleanProcessor=(_schema,_ctx,json,_params)=>{json.type="boolean"},bigintProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("BigInt cannot be represented in JSON Schema")},symbolProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Symbols cannot be represented in JSON Schema")},nullProcessor=(_schema,ctx,json,_params)=>{if(ctx.target==="openapi-3.0")json.type="string",json.nullable=!0,json.enum=[null];else json.type="null"},undefinedProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Undefined cannot be represented in JSON Schema")},voidProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Void cannot be represented in JSON Schema")},neverProcessor=(_schema,_ctx,json,_params)=>{json.not={}},anyProcessor=(_schema,_ctx,_json,_params)=>{},unknownProcessor=(_schema,_ctx,_json,_params)=>{},dateProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Date cannot be represented in JSON Schema")},enumProcessor=(schema,_ctx,json,_params)=>{let def=schema._zod.def,values=getEnumValues(def.entries);if(values.every((v)=>typeof v==="number"))json.type="number";if(values.every((v)=>typeof v==="string"))json.type="string";json.enum=values},literalProcessor=(schema,ctx,json,_params)=>{let def=schema._zod.def,vals=[];for(let val of def.values)if(val===void 0){if(ctx.unrepresentable==="throw")throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof val==="bigint")if(ctx.unrepresentable==="throw")throw Error("BigInt literals cannot be represented in JSON Schema");else vals.push(Number(val));else vals.push(val);if(vals.length===0);else if(vals.length===1){let val=vals[0];if(json.type=val===null?"null":typeof val,ctx.target==="draft-04"||ctx.target==="openapi-3.0")json.enum=[val];else json.const=val}else{if(vals.every((v)=>typeof v==="number"))json.type="number";if(vals.every((v)=>typeof v==="string"))json.type="string";if(vals.every((v)=>typeof v==="boolean"))json.type="boolean";if(vals.every((v)=>v===null))json.type="null";json.enum=vals}},nanProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("NaN cannot be represented in JSON Schema")},templateLiteralProcessor=(schema,_ctx,json,_params)=>{let _json=json,pattern=schema._zod.pattern;if(!pattern)throw Error("Pattern not found in template literal");_json.type="string",_json.pattern=pattern.source},fileProcessor=(schema,_ctx,json,_params)=>{let _json=json,file={type:"string",format:"binary",contentEncoding:"binary"},{minimum,maximum,mime}=schema._zod.bag;if(minimum!==void 0)file.minLength=minimum;if(maximum!==void 0)file.maxLength=maximum;if(mime)if(mime.length===1)file.contentMediaType=mime[0],Object.assign(_json,file);else Object.assign(_json,file),_json.anyOf=mime.map((m)=>({contentMediaType:m}));else Object.assign(_json,file)},successProcessor=(_schema,_ctx,json,_params)=>{json.type="boolean"},customProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Custom types cannot be represented in JSON Schema")},functionProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Function types cannot be represented in JSON Schema")},transformProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Transforms cannot be represented in JSON Schema")},mapProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Map cannot be represented in JSON Schema")},setProcessor=(_schema,ctx,_json,_params)=>{if(ctx.unrepresentable==="throw")throw Error("Set cannot be represented in JSON Schema")},arrayProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def,{minimum,maximum}=schema._zod.bag;if(typeof minimum==="number")json.minItems=minimum;if(typeof maximum==="number")json.maxItems=maximum;json.type="array",json.items=process2(def.element,ctx,{...params,path:[...params.path,"items"]})},objectProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def;json.type="object",json.properties={};let shape=def.shape;for(let key in shape)json.properties[key]=process2(shape[key],ctx,{...params,path:[...params.path,"properties",key]});let allKeys=new Set(Object.keys(shape)),requiredKeys=new Set([...allKeys].filter((key)=>{let v=def.shape[key]._zod;if(ctx.io==="input")return v.optin===void 0;else return v.optout===void 0}));if(requiredKeys.size>0)json.required=Array.from(requiredKeys);if(def.catchall?._zod.def.type==="never")json.additionalProperties=!1;else if(!def.catchall){if(ctx.io==="output")json.additionalProperties=!1}else if(def.catchall)json.additionalProperties=process2(def.catchall,ctx,{...params,path:[...params.path,"additionalProperties"]})},unionProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,isExclusive=def.inclusive===!1,options=def.options.map((x,i)=>process2(x,ctx,{...params,path:[...params.path,isExclusive?"oneOf":"anyOf",i]}));if(isExclusive)json.oneOf=options;else json.anyOf=options},intersectionProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,a=process2(def.left,ctx,{...params,path:[...params.path,"allOf",0]}),b=process2(def.right,ctx,{...params,path:[...params.path,"allOf",1]}),isSimpleIntersection=(val)=>("allOf"in val)&&Object.keys(val).length===1,allOf=[...isSimpleIntersection(a)?a.allOf:[a],...isSimpleIntersection(b)?b.allOf:[b]];json.allOf=allOf},tupleProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def;json.type="array";let prefixPath=ctx.target==="draft-2020-12"?"prefixItems":"items",restPath=ctx.target==="draft-2020-12"?"items":ctx.target==="openapi-3.0"?"items":"additionalItems",prefixItems=def.items.map((x,i)=>process2(x,ctx,{...params,path:[...params.path,prefixPath,i]})),rest=def.rest?process2(def.rest,ctx,{...params,path:[...params.path,restPath,...ctx.target==="openapi-3.0"?[def.items.length]:[]]}):null;if(ctx.target==="draft-2020-12"){if(json.prefixItems=prefixItems,rest)json.items=rest}else if(ctx.target==="openapi-3.0"){if(json.items={anyOf:prefixItems},rest)json.items.anyOf.push(rest);if(json.minItems=prefixItems.length,!rest)json.maxItems=prefixItems.length}else if(json.items=prefixItems,rest)json.additionalItems=rest;let{minimum,maximum}=schema._zod.bag;if(typeof minimum==="number")json.minItems=minimum;if(typeof maximum==="number")json.maxItems=maximum},recordProcessor=(schema,ctx,_json,params)=>{let json=_json,def=schema._zod.def;json.type="object";let keyType=def.keyType,patterns=keyType._zod.bag?.patterns;if(def.mode==="loose"&&patterns&&patterns.size>0){let valueSchema=process2(def.valueType,ctx,{...params,path:[...params.path,"patternProperties","*"]});json.patternProperties={};for(let pattern of patterns)json.patternProperties[pattern.source]=valueSchema}else{if(ctx.target==="draft-07"||ctx.target==="draft-2020-12")json.propertyNames=process2(def.keyType,ctx,{...params,path:[...params.path,"propertyNames"]});json.additionalProperties=process2(def.valueType,ctx,{...params,path:[...params.path,"additionalProperties"]})}let keyValues=keyType._zod.values;if(keyValues){let validKeyValues=[...keyValues].filter((v)=>typeof v==="string"||typeof v==="number");if(validKeyValues.length>0)json.required=validKeyValues}},nullableProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def,inner=process2(def.innerType,ctx,params),seen=ctx.seen.get(schema);if(ctx.target==="openapi-3.0")seen.ref=def.innerType,json.nullable=!0;else json.anyOf=[inner,{type:"null"}]},nonoptionalProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType},defaultProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType,json.default=JSON.parse(JSON.stringify(def.defaultValue))},prefaultProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);if(seen.ref=def.innerType,ctx.io==="input")json._prefault=JSON.parse(JSON.stringify(def.defaultValue))},catchProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType;let catchValue;try{catchValue=def.catchValue(void 0)}catch{throw Error("Dynamic catch values are not supported in JSON Schema")}json.default=catchValue},pipeProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def,innerType=ctx.io==="input"?def.in._zod.def.type==="transform"?def.out:def.in:def.out;process2(innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=innerType},readonlyProcessor=(schema,ctx,json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType,json.readOnly=!0},promiseProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType},optionalProcessor=(schema,ctx,_json,params)=>{let def=schema._zod.def;process2(def.innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=def.innerType},lazyProcessor=(schema,ctx,_json,params)=>{let innerType=schema._zod.innerType;process2(innerType,ctx,params);let seen=ctx.seen.get(schema);seen.ref=innerType},allProcessors={string:stringProcessor,number:numberProcessor,boolean:booleanProcessor,bigint:bigintProcessor,symbol:symbolProcessor,null:nullProcessor,undefined:undefinedProcessor,void:voidProcessor,never:neverProcessor,any:anyProcessor,unknown:unknownProcessor,date:dateProcessor,enum:enumProcessor,literal:literalProcessor,nan:nanProcessor,template_literal:templateLiteralProcessor,file:fileProcessor,success:successProcessor,custom:customProcessor,function:functionProcessor,transform:transformProcessor,map:mapProcessor,set:setProcessor,array:arrayProcessor,object:objectProcessor,union:unionProcessor,intersection:intersectionProcessor,tuple:tupleProcessor,record:recordProcessor,nullable:nullableProcessor,nonoptional:nonoptionalProcessor,default:defaultProcessor,prefault:prefaultProcessor,catch:catchProcessor,pipe:pipeProcessor,readonly:readonlyProcessor,promise:promiseProcessor,optional:optionalProcessor,lazy:lazyProcessor};function toJSONSchema(input,params){if("_idmap"in input){let registry2=input,ctx2=initializeContext({...params,processors:allProcessors}),defs={};for(let entry of registry2._idmap.entries()){let[_,schema]=entry;process2(schema,ctx2)}let schemas={},external={registry:registry2,uri:params?.uri,defs};ctx2.external=external;for(let entry of registry2._idmap.entries()){let[key,schema]=entry;extractDefs(ctx2,schema),schemas[key]=finalize(ctx2,schema)}if(Object.keys(defs).length>0){let defsSegment=ctx2.target==="draft-2020-12"?"$defs":"definitions";schemas.__shared={[defsSegment]:defs}}return{schemas}}let ctx=initializeContext({...params,processors:allProcessors});return process2(input,ctx),extractDefs(ctx,input),finalize(ctx,input)}class JSONSchemaGenerator{get metadataRegistry(){return this.ctx.metadataRegistry}get target(){return this.ctx.target}get unrepresentable(){return this.ctx.unrepresentable}get override(){return this.ctx.override}get io(){return this.ctx.io}get counter(){return this.ctx.counter}set counter(value){this.ctx.counter=value}get seen(){return this.ctx.seen}constructor(params){let normalizedTarget=params?.target??"draft-2020-12";if(normalizedTarget==="draft-4")normalizedTarget="draft-04";if(normalizedTarget==="draft-7")normalizedTarget="draft-07";this.ctx=initializeContext({processors:allProcessors,target:normalizedTarget,...params?.metadata&&{metadata:params.metadata},...params?.unrepresentable&&{unrepresentable:params.unrepresentable},...params?.override&&{override:params.override},...params?.io&&{io:params.io}})}process(schema,_params={path:[],schemaPath:[]}){return process2(schema,this.ctx,_params)}emit(schema,_params){if(_params){if(_params.cycles)this.ctx.cycles=_params.cycles;if(_params.reused)this.ctx.reused=_params.reused;if(_params.external)this.ctx.external=_params.external}extractDefs(this.ctx,schema);let result=finalize(this.ctx,schema),{"~standard":_,...plainResult}=result;return plainResult}}var exports_json_schema={};var exports_schemas2={};__export(exports_schemas2,{xor:()=>xor,xid:()=>xid2,void:()=>_void2,uuidv7:()=>uuidv7,uuidv6:()=>uuidv6,uuidv4:()=>uuidv4,uuid:()=>uuid2,url:()=>url,unknown:()=>unknown,union:()=>union,undefined:()=>_undefined3,ulid:()=>ulid2,uint64:()=>uint64,uint32:()=>uint32,tuple:()=>tuple,transform:()=>transform,templateLiteral:()=>templateLiteral,symbol:()=>symbol,superRefine:()=>superRefine,success:()=>success,stringbool:()=>stringbool,stringFormat:()=>stringFormat,string:()=>string2,strictObject:()=>strictObject,set:()=>set,refine:()=>refine,record:()=>record,readonly:()=>readonly,promise:()=>promise,preprocess:()=>preprocess,prefault:()=>prefault,pipe:()=>pipe,partialRecord:()=>partialRecord,optional:()=>optional,object:()=>object,number:()=>number2,nullish:()=>nullish2,nullable:()=>nullable,null:()=>_null3,nonoptional:()=>nonoptional,never:()=>never,nativeEnum:()=>nativeEnum,nanoid:()=>nanoid2,nan:()=>nan,meta:()=>meta2,map:()=>map,mac:()=>mac2,looseRecord:()=>looseRecord,looseObject:()=>looseObject,literal:()=>literal,lazy:()=>lazy,ksuid:()=>ksuid2,keyof:()=>keyof,jwt:()=>jwt,json:()=>json,ipv6:()=>ipv62,ipv4:()=>ipv42,intersection:()=>intersection,int64:()=>int64,int32:()=>int32,int:()=>int,instanceof:()=>_instanceof,httpUrl:()=>httpUrl,hostname:()=>hostname2,hex:()=>hex2,hash:()=>hash,guid:()=>guid2,function:()=>_function,float64:()=>float64,float32:()=>float32,file:()=>file,exactOptional:()=>exactOptional,enum:()=>_enum2,emoji:()=>emoji2,email:()=>email2,e164:()=>e1642,discriminatedUnion:()=>discriminatedUnion,describe:()=>describe2,date:()=>date3,custom:()=>custom,cuid2:()=>cuid22,cuid:()=>cuid3,codec:()=>codec,cidrv6:()=>cidrv62,cidrv4:()=>cidrv42,check:()=>check,catch:()=>_catch2,boolean:()=>boolean2,bigint:()=>bigint2,base64url:()=>base64url2,base64:()=>base642,array:()=>array,any:()=>any,_function:()=>_function,_default:()=>_default2,_ZodString:()=>_ZodString,ZodXor:()=>ZodXor,ZodXID:()=>ZodXID,ZodVoid:()=>ZodVoid,ZodUnknown:()=>ZodUnknown,ZodUnion:()=>ZodUnion,ZodUndefined:()=>ZodUndefined,ZodUUID:()=>ZodUUID,ZodURL:()=>ZodURL,ZodULID:()=>ZodULID,ZodType:()=>ZodType,ZodTuple:()=>ZodTuple,ZodTransform:()=>ZodTransform,ZodTemplateLiteral:()=>ZodTemplateLiteral,ZodSymbol:()=>ZodSymbol,ZodSuccess:()=>ZodSuccess,ZodStringFormat:()=>ZodStringFormat,ZodString:()=>ZodString,ZodSet:()=>ZodSet,ZodRecord:()=>ZodRecord,ZodReadonly:()=>ZodReadonly,ZodPromise:()=>ZodPromise,ZodPrefault:()=>ZodPrefault,ZodPipe:()=>ZodPipe,ZodOptional:()=>ZodOptional,ZodObject:()=>ZodObject,ZodNumberFormat:()=>ZodNumberFormat,ZodNumber:()=>ZodNumber,ZodNullable:()=>ZodNullable,ZodNull:()=>ZodNull,ZodNonOptional:()=>ZodNonOptional,ZodNever:()=>ZodNever,ZodNanoID:()=>ZodNanoID,ZodNaN:()=>ZodNaN,ZodMap:()=>ZodMap,ZodMAC:()=>ZodMAC,ZodLiteral:()=>ZodLiteral,ZodLazy:()=>ZodLazy,ZodKSUID:()=>ZodKSUID,ZodJWT:()=>ZodJWT,ZodIntersection:()=>ZodIntersection,ZodIPv6:()=>ZodIPv6,ZodIPv4:()=>ZodIPv4,ZodGUID:()=>ZodGUID,ZodFunction:()=>ZodFunction,ZodFile:()=>ZodFile,ZodExactOptional:()=>ZodExactOptional,ZodEnum:()=>ZodEnum,ZodEmoji:()=>ZodEmoji,ZodEmail:()=>ZodEmail,ZodE164:()=>ZodE164,ZodDiscriminatedUnion:()=>ZodDiscriminatedUnion,ZodDefault:()=>ZodDefault,ZodDate:()=>ZodDate,ZodCustomStringFormat:()=>ZodCustomStringFormat,ZodCustom:()=>ZodCustom,ZodCodec:()=>ZodCodec,ZodCatch:()=>ZodCatch,ZodCUID2:()=>ZodCUID2,ZodCUID:()=>ZodCUID,ZodCIDRv6:()=>ZodCIDRv6,ZodCIDRv4:()=>ZodCIDRv4,ZodBoolean:()=>ZodBoolean,ZodBigIntFormat:()=>ZodBigIntFormat,ZodBigInt:()=>ZodBigInt,ZodBase64URL:()=>ZodBase64URL,ZodBase64:()=>ZodBase64,ZodArray:()=>ZodArray,ZodAny:()=>ZodAny});var exports_checks2={};__export(exports_checks2,{uppercase:()=>_uppercase,trim:()=>_trim,toUpperCase:()=>_toUpperCase,toLowerCase:()=>_toLowerCase,startsWith:()=>_startsWith,slugify:()=>_slugify,size:()=>_size,regex:()=>_regex,property:()=>_property,positive:()=>_positive,overwrite:()=>_overwrite,normalize:()=>_normalize,nonpositive:()=>_nonpositive,nonnegative:()=>_nonnegative,negative:()=>_negative,multipleOf:()=>_multipleOf,minSize:()=>_minSize,minLength:()=>_minLength,mime:()=>_mime,maxSize:()=>_maxSize,maxLength:()=>_maxLength,lte:()=>_lte,lt:()=>_lt,lowercase:()=>_lowercase,length:()=>_length,includes:()=>_includes,gte:()=>_gte,gt:()=>_gt,endsWith:()=>_endsWith});var exports_iso={};__export(exports_iso,{time:()=>time2,duration:()=>duration2,datetime:()=>datetime2,date:()=>date2,ZodISOTime:()=>ZodISOTime,ZodISODuration:()=>ZodISODuration,ZodISODateTime:()=>ZodISODateTime,ZodISODate:()=>ZodISODate});var ZodISODateTime=$constructor("ZodISODateTime",(inst,def)=>{$ZodISODateTime.init(inst,def),ZodStringFormat.init(inst,def)});function datetime2(params){return _isoDateTime(ZodISODateTime,params)}var ZodISODate=$constructor("ZodISODate",(inst,def)=>{$ZodISODate.init(inst,def),ZodStringFormat.init(inst,def)});function date2(params){return _isoDate(ZodISODate,params)}var ZodISOTime=$constructor("ZodISOTime",(inst,def)=>{$ZodISOTime.init(inst,def),ZodStringFormat.init(inst,def)});function time2(params){return _isoTime(ZodISOTime,params)}var ZodISODuration=$constructor("ZodISODuration",(inst,def)=>{$ZodISODuration.init(inst,def),ZodStringFormat.init(inst,def)});function duration2(params){return _isoDuration(ZodISODuration,params)}var initializer2=(inst,issues)=>{$ZodError.init(inst,issues),inst.name="ZodError",Object.defineProperties(inst,{format:{value:(mapper)=>formatError(inst,mapper)},flatten:{value:(mapper)=>flattenError(inst,mapper)},addIssue:{value:(issue2)=>{inst.issues.push(issue2),inst.message=JSON.stringify(inst.issues,jsonStringifyReplacer,2)}},addIssues:{value:(issues2)=>{inst.issues.push(...issues2),inst.message=JSON.stringify(inst.issues,jsonStringifyReplacer,2)}},isEmpty:{get(){return inst.issues.length===0}}})},ZodError=$constructor("ZodError",initializer2),ZodRealError=$constructor("ZodError",initializer2,{Parent:Error});var parse3=_parse(ZodRealError),parseAsync2=_parseAsync(ZodRealError),safeParse2=_safeParse(ZodRealError),safeParseAsync2=_safeParseAsync(ZodRealError),encode2=_encode(ZodRealError),decode2=_decode(ZodRealError),encodeAsync2=_encodeAsync(ZodRealError),decodeAsync2=_decodeAsync(ZodRealError),safeEncode2=_safeEncode(ZodRealError),safeDecode2=_safeDecode(ZodRealError),safeEncodeAsync2=_safeEncodeAsync(ZodRealError),safeDecodeAsync2=_safeDecodeAsync(ZodRealError);var ZodType=$constructor("ZodType",(inst,def)=>{return $ZodType.init(inst,def),Object.assign(inst["~standard"],{jsonSchema:{input:createStandardJSONSchemaMethod(inst,"input"),output:createStandardJSONSchemaMethod(inst,"output")}}),inst.toJSONSchema=createToJSONSchemaMethod(inst,{}),inst.def=def,inst.type=def.type,Object.defineProperty(inst,"_def",{value:def}),inst.check=(...checks2)=>{return inst.clone(exports_util.mergeDefs(def,{checks:[...def.checks??[],...checks2.map((ch)=>typeof ch==="function"?{_zod:{check:ch,def:{check:"custom"},onattach:[]}}:ch)]}),{parent:!0})},inst.with=inst.check,inst.clone=(def2,params)=>clone(inst,def2,params),inst.brand=()=>inst,inst.register=(reg,meta2)=>{return reg.add(inst,meta2),inst},inst.parse=(data,params)=>parse3(inst,data,params,{callee:inst.parse}),inst.safeParse=(data,params)=>safeParse2(inst,data,params),inst.parseAsync=async(data,params)=>parseAsync2(inst,data,params,{callee:inst.parseAsync}),inst.safeParseAsync=async(data,params)=>safeParseAsync2(inst,data,params),inst.spa=inst.safeParseAsync,inst.encode=(data,params)=>encode2(inst,data,params),inst.decode=(data,params)=>decode2(inst,data,params),inst.encodeAsync=async(data,params)=>encodeAsync2(inst,data,params),inst.decodeAsync=async(data,params)=>decodeAsync2(inst,data,params),inst.safeEncode=(data,params)=>safeEncode2(inst,data,params),inst.safeDecode=(data,params)=>safeDecode2(inst,data,params),inst.safeEncodeAsync=async(data,params)=>safeEncodeAsync2(inst,data,params),inst.safeDecodeAsync=async(data,params)=>safeDecodeAsync2(inst,data,params),inst.refine=(check,params)=>inst.check(refine(check,params)),inst.superRefine=(refinement)=>inst.check(superRefine(refinement)),inst.overwrite=(fn)=>inst.check(_overwrite(fn)),inst.optional=()=>optional(inst),inst.exactOptional=()=>exactOptional(inst),inst.nullable=()=>nullable(inst),inst.nullish=()=>optional(nullable(inst)),inst.nonoptional=(params)=>nonoptional(inst,params),inst.array=()=>array(inst),inst.or=(arg)=>union([inst,arg]),inst.and=(arg)=>intersection(inst,arg),inst.transform=(tx)=>pipe(inst,transform(tx)),inst.default=(def2)=>_default2(inst,def2),inst.prefault=(def2)=>prefault(inst,def2),inst.catch=(params)=>_catch2(inst,params),inst.pipe=(target)=>pipe(inst,target),inst.readonly=()=>readonly(inst),inst.describe=(description)=>{let cl=inst.clone();return globalRegistry.add(cl,{description}),cl},Object.defineProperty(inst,"description",{get(){return globalRegistry.get(inst)?.description},configurable:!0}),inst.meta=(...args)=>{if(args.length===0)return globalRegistry.get(inst);let cl=inst.clone();return globalRegistry.add(cl,args[0]),cl},inst.isOptional=()=>inst.safeParse(void 0).success,inst.isNullable=()=>inst.safeParse(null).success,inst.apply=(fn)=>fn(inst),inst}),_ZodString=$constructor("_ZodString",(inst,def)=>{$ZodString.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>stringProcessor(inst,ctx,json,params);let bag=inst._zod.bag;inst.format=bag.format??null,inst.minLength=bag.minimum??null,inst.maxLength=bag.maximum??null,inst.regex=(...args)=>inst.check(_regex(...args)),inst.includes=(...args)=>inst.check(_includes(...args)),inst.startsWith=(...args)=>inst.check(_startsWith(...args)),inst.endsWith=(...args)=>inst.check(_endsWith(...args)),inst.min=(...args)=>inst.check(_minLength(...args)),inst.max=(...args)=>inst.check(_maxLength(...args)),inst.length=(...args)=>inst.check(_length(...args)),inst.nonempty=(...args)=>inst.check(_minLength(1,...args)),inst.lowercase=(params)=>inst.check(_lowercase(params)),inst.uppercase=(params)=>inst.check(_uppercase(params)),inst.trim=()=>inst.check(_trim()),inst.normalize=(...args)=>inst.check(_normalize(...args)),inst.toLowerCase=()=>inst.check(_toLowerCase()),inst.toUpperCase=()=>inst.check(_toUpperCase()),inst.slugify=()=>inst.check(_slugify())}),ZodString=$constructor("ZodString",(inst,def)=>{$ZodString.init(inst,def),_ZodString.init(inst,def),inst.email=(params)=>inst.check(_email(ZodEmail,params)),inst.url=(params)=>inst.check(_url(ZodURL,params)),inst.jwt=(params)=>inst.check(_jwt(ZodJWT,params)),inst.emoji=(params)=>inst.check(_emoji2(ZodEmoji,params)),inst.guid=(params)=>inst.check(_guid(ZodGUID,params)),inst.uuid=(params)=>inst.check(_uuid(ZodUUID,params)),inst.uuidv4=(params)=>inst.check(_uuidv4(ZodUUID,params)),inst.uuidv6=(params)=>inst.check(_uuidv6(ZodUUID,params)),inst.uuidv7=(params)=>inst.check(_uuidv7(ZodUUID,params)),inst.nanoid=(params)=>inst.check(_nanoid(ZodNanoID,params)),inst.guid=(params)=>inst.check(_guid(ZodGUID,params)),inst.cuid=(params)=>inst.check(_cuid(ZodCUID,params)),inst.cuid2=(params)=>inst.check(_cuid2(ZodCUID2,params)),inst.ulid=(params)=>inst.check(_ulid(ZodULID,params)),inst.base64=(params)=>inst.check(_base64(ZodBase64,params)),inst.base64url=(params)=>inst.check(_base64url(ZodBase64URL,params)),inst.xid=(params)=>inst.check(_xid(ZodXID,params)),inst.ksuid=(params)=>inst.check(_ksuid(ZodKSUID,params)),inst.ipv4=(params)=>inst.check(_ipv4(ZodIPv4,params)),inst.ipv6=(params)=>inst.check(_ipv6(ZodIPv6,params)),inst.cidrv4=(params)=>inst.check(_cidrv4(ZodCIDRv4,params)),inst.cidrv6=(params)=>inst.check(_cidrv6(ZodCIDRv6,params)),inst.e164=(params)=>inst.check(_e164(ZodE164,params)),inst.datetime=(params)=>inst.check(datetime2(params)),inst.date=(params)=>inst.check(date2(params)),inst.time=(params)=>inst.check(time2(params)),inst.duration=(params)=>inst.check(duration2(params))});function string2(params){return _string(ZodString,params)}var ZodStringFormat=$constructor("ZodStringFormat",(inst,def)=>{$ZodStringFormat.init(inst,def),_ZodString.init(inst,def)}),ZodEmail=$constructor("ZodEmail",(inst,def)=>{$ZodEmail.init(inst,def),ZodStringFormat.init(inst,def)});function email2(params){return _email(ZodEmail,params)}var ZodGUID=$constructor("ZodGUID",(inst,def)=>{$ZodGUID.init(inst,def),ZodStringFormat.init(inst,def)});function guid2(params){return _guid(ZodGUID,params)}var ZodUUID=$constructor("ZodUUID",(inst,def)=>{$ZodUUID.init(inst,def),ZodStringFormat.init(inst,def)});function uuid2(params){return _uuid(ZodUUID,params)}function uuidv4(params){return _uuidv4(ZodUUID,params)}function uuidv6(params){return _uuidv6(ZodUUID,params)}function uuidv7(params){return _uuidv7(ZodUUID,params)}var ZodURL=$constructor("ZodURL",(inst,def)=>{$ZodURL.init(inst,def),ZodStringFormat.init(inst,def)});function url(params){return _url(ZodURL,params)}function httpUrl(params){return _url(ZodURL,{protocol:/^https?$/,hostname:exports_regexes.domain,...exports_util.normalizeParams(params)})}var ZodEmoji=$constructor("ZodEmoji",(inst,def)=>{$ZodEmoji.init(inst,def),ZodStringFormat.init(inst,def)});function emoji2(params){return _emoji2(ZodEmoji,params)}var ZodNanoID=$constructor("ZodNanoID",(inst,def)=>{$ZodNanoID.init(inst,def),ZodStringFormat.init(inst,def)});function nanoid2(params){return _nanoid(ZodNanoID,params)}var ZodCUID=$constructor("ZodCUID",(inst,def)=>{$ZodCUID.init(inst,def),ZodStringFormat.init(inst,def)});function cuid3(params){return _cuid(ZodCUID,params)}var ZodCUID2=$constructor("ZodCUID2",(inst,def)=>{$ZodCUID2.init(inst,def),ZodStringFormat.init(inst,def)});function cuid22(params){return _cuid2(ZodCUID2,params)}var ZodULID=$constructor("ZodULID",(inst,def)=>{$ZodULID.init(inst,def),ZodStringFormat.init(inst,def)});function ulid2(params){return _ulid(ZodULID,params)}var ZodXID=$constructor("ZodXID",(inst,def)=>{$ZodXID.init(inst,def),ZodStringFormat.init(inst,def)});function xid2(params){return _xid(ZodXID,params)}var ZodKSUID=$constructor("ZodKSUID",(inst,def)=>{$ZodKSUID.init(inst,def),ZodStringFormat.init(inst,def)});function ksuid2(params){return _ksuid(ZodKSUID,params)}var ZodIPv4=$constructor("ZodIPv4",(inst,def)=>{$ZodIPv4.init(inst,def),ZodStringFormat.init(inst,def)});function ipv42(params){return _ipv4(ZodIPv4,params)}var ZodMAC=$constructor("ZodMAC",(inst,def)=>{$ZodMAC.init(inst,def),ZodStringFormat.init(inst,def)});function mac2(params){return _mac(ZodMAC,params)}var ZodIPv6=$constructor("ZodIPv6",(inst,def)=>{$ZodIPv6.init(inst,def),ZodStringFormat.init(inst,def)});function ipv62(params){return _ipv6(ZodIPv6,params)}var ZodCIDRv4=$constructor("ZodCIDRv4",(inst,def)=>{$ZodCIDRv4.init(inst,def),ZodStringFormat.init(inst,def)});function cidrv42(params){return _cidrv4(ZodCIDRv4,params)}var ZodCIDRv6=$constructor("ZodCIDRv6",(inst,def)=>{$ZodCIDRv6.init(inst,def),ZodStringFormat.init(inst,def)});function cidrv62(params){return _cidrv6(ZodCIDRv6,params)}var ZodBase64=$constructor("ZodBase64",(inst,def)=>{$ZodBase64.init(inst,def),ZodStringFormat.init(inst,def)});function base642(params){return _base64(ZodBase64,params)}var ZodBase64URL=$constructor("ZodBase64URL",(inst,def)=>{$ZodBase64URL.init(inst,def),ZodStringFormat.init(inst,def)});function base64url2(params){return _base64url(ZodBase64URL,params)}var ZodE164=$constructor("ZodE164",(inst,def)=>{$ZodE164.init(inst,def),ZodStringFormat.init(inst,def)});function e1642(params){return _e164(ZodE164,params)}var ZodJWT=$constructor("ZodJWT",(inst,def)=>{$ZodJWT.init(inst,def),ZodStringFormat.init(inst,def)});function jwt(params){return _jwt(ZodJWT,params)}var ZodCustomStringFormat=$constructor("ZodCustomStringFormat",(inst,def)=>{$ZodCustomStringFormat.init(inst,def),ZodStringFormat.init(inst,def)});function stringFormat(format,fnOrRegex,_params={}){return _stringFormat(ZodCustomStringFormat,format,fnOrRegex,_params)}function hostname2(_params){return _stringFormat(ZodCustomStringFormat,"hostname",exports_regexes.hostname,_params)}function hex2(_params){return _stringFormat(ZodCustomStringFormat,"hex",exports_regexes.hex,_params)}function hash(alg,params){let enc=params?.enc??"hex",format=`${alg}_${enc}`,regex=exports_regexes[format];if(!regex)throw Error(`Unrecognized hash format: ${format}`);return _stringFormat(ZodCustomStringFormat,format,regex,params)}var ZodNumber=$constructor("ZodNumber",(inst,def)=>{$ZodNumber.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>numberProcessor(inst,ctx,json,params),inst.gt=(value,params)=>inst.check(_gt(value,params)),inst.gte=(value,params)=>inst.check(_gte(value,params)),inst.min=(value,params)=>inst.check(_gte(value,params)),inst.lt=(value,params)=>inst.check(_lt(value,params)),inst.lte=(value,params)=>inst.check(_lte(value,params)),inst.max=(value,params)=>inst.check(_lte(value,params)),inst.int=(params)=>inst.check(int(params)),inst.safe=(params)=>inst.check(int(params)),inst.positive=(params)=>inst.check(_gt(0,params)),inst.nonnegative=(params)=>inst.check(_gte(0,params)),inst.negative=(params)=>inst.check(_lt(0,params)),inst.nonpositive=(params)=>inst.check(_lte(0,params)),inst.multipleOf=(value,params)=>inst.check(_multipleOf(value,params)),inst.step=(value,params)=>inst.check(_multipleOf(value,params)),inst.finite=()=>inst;let bag=inst._zod.bag;inst.minValue=Math.max(bag.minimum??Number.NEGATIVE_INFINITY,bag.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,inst.maxValue=Math.min(bag.maximum??Number.POSITIVE_INFINITY,bag.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,inst.isInt=(bag.format??"").includes("int")||Number.isSafeInteger(bag.multipleOf??0.5),inst.isFinite=!0,inst.format=bag.format??null});function number2(params){return _number(ZodNumber,params)}var ZodNumberFormat=$constructor("ZodNumberFormat",(inst,def)=>{$ZodNumberFormat.init(inst,def),ZodNumber.init(inst,def)});function int(params){return _int(ZodNumberFormat,params)}function float32(params){return _float32(ZodNumberFormat,params)}function float64(params){return _float64(ZodNumberFormat,params)}function int32(params){return _int32(ZodNumberFormat,params)}function uint32(params){return _uint32(ZodNumberFormat,params)}var ZodBoolean=$constructor("ZodBoolean",(inst,def)=>{$ZodBoolean.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>booleanProcessor(inst,ctx,json,params)});function boolean2(params){return _boolean(ZodBoolean,params)}var ZodBigInt=$constructor("ZodBigInt",(inst,def)=>{$ZodBigInt.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>bigintProcessor(inst,ctx,json,params),inst.gte=(value,params)=>inst.check(_gte(value,params)),inst.min=(value,params)=>inst.check(_gte(value,params)),inst.gt=(value,params)=>inst.check(_gt(value,params)),inst.gte=(value,params)=>inst.check(_gte(value,params)),inst.min=(value,params)=>inst.check(_gte(value,params)),inst.lt=(value,params)=>inst.check(_lt(value,params)),inst.lte=(value,params)=>inst.check(_lte(value,params)),inst.max=(value,params)=>inst.check(_lte(value,params)),inst.positive=(params)=>inst.check(_gt(BigInt(0),params)),inst.negative=(params)=>inst.check(_lt(BigInt(0),params)),inst.nonpositive=(params)=>inst.check(_lte(BigInt(0),params)),inst.nonnegative=(params)=>inst.check(_gte(BigInt(0),params)),inst.multipleOf=(value,params)=>inst.check(_multipleOf(value,params));let bag=inst._zod.bag;inst.minValue=bag.minimum??null,inst.maxValue=bag.maximum??null,inst.format=bag.format??null});function bigint2(params){return _bigint(ZodBigInt,params)}var ZodBigIntFormat=$constructor("ZodBigIntFormat",(inst,def)=>{$ZodBigIntFormat.init(inst,def),ZodBigInt.init(inst,def)});function int64(params){return _int64(ZodBigIntFormat,params)}function uint64(params){return _uint64(ZodBigIntFormat,params)}var ZodSymbol=$constructor("ZodSymbol",(inst,def)=>{$ZodSymbol.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>symbolProcessor(inst,ctx,json,params)});function symbol(params){return _symbol(ZodSymbol,params)}var ZodUndefined=$constructor("ZodUndefined",(inst,def)=>{$ZodUndefined.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>undefinedProcessor(inst,ctx,json,params)});function _undefined3(params){return _undefined2(ZodUndefined,params)}var ZodNull=$constructor("ZodNull",(inst,def)=>{$ZodNull.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nullProcessor(inst,ctx,json,params)});function _null3(params){return _null2(ZodNull,params)}var ZodAny=$constructor("ZodAny",(inst,def)=>{$ZodAny.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>anyProcessor(inst,ctx,json,params)});function any(){return _any(ZodAny)}var ZodUnknown=$constructor("ZodUnknown",(inst,def)=>{$ZodUnknown.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unknownProcessor(inst,ctx,json,params)});function unknown(){return _unknown(ZodUnknown)}var ZodNever=$constructor("ZodNever",(inst,def)=>{$ZodNever.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>neverProcessor(inst,ctx,json,params)});function never(params){return _never(ZodNever,params)}var ZodVoid=$constructor("ZodVoid",(inst,def)=>{$ZodVoid.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>voidProcessor(inst,ctx,json,params)});function _void2(params){return _void(ZodVoid,params)}var ZodDate=$constructor("ZodDate",(inst,def)=>{$ZodDate.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>dateProcessor(inst,ctx,json,params),inst.min=(value,params)=>inst.check(_gte(value,params)),inst.max=(value,params)=>inst.check(_lte(value,params));let c=inst._zod.bag;inst.minDate=c.minimum?new Date(c.minimum):null,inst.maxDate=c.maximum?new Date(c.maximum):null});function date3(params){return _date(ZodDate,params)}var ZodArray=$constructor("ZodArray",(inst,def)=>{$ZodArray.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>arrayProcessor(inst,ctx,json,params),inst.element=def.element,inst.min=(minLength,params)=>inst.check(_minLength(minLength,params)),inst.nonempty=(params)=>inst.check(_minLength(1,params)),inst.max=(maxLength,params)=>inst.check(_maxLength(maxLength,params)),inst.length=(len,params)=>inst.check(_length(len,params)),inst.unwrap=()=>inst.element});function array(element,params){return _array(ZodArray,element,params)}function keyof(schema){let shape=schema._zod.def.shape;return _enum2(Object.keys(shape))}var ZodObject=$constructor("ZodObject",(inst,def)=>{$ZodObjectJIT.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>objectProcessor(inst,ctx,json,params),exports_util.defineLazy(inst,"shape",()=>{return def.shape}),inst.keyof=()=>_enum2(Object.keys(inst._zod.def.shape)),inst.catchall=(catchall)=>inst.clone({...inst._zod.def,catchall}),inst.passthrough=()=>inst.clone({...inst._zod.def,catchall:unknown()}),inst.loose=()=>inst.clone({...inst._zod.def,catchall:unknown()}),inst.strict=()=>inst.clone({...inst._zod.def,catchall:never()}),inst.strip=()=>inst.clone({...inst._zod.def,catchall:void 0}),inst.extend=(incoming)=>{return exports_util.extend(inst,incoming)},inst.safeExtend=(incoming)=>{return exports_util.safeExtend(inst,incoming)},inst.merge=(other)=>exports_util.merge(inst,other),inst.pick=(mask)=>exports_util.pick(inst,mask),inst.omit=(mask)=>exports_util.omit(inst,mask),inst.partial=(...args)=>exports_util.partial(ZodOptional,inst,args[0]),inst.required=(...args)=>exports_util.required(ZodNonOptional,inst,args[0])});function object(shape,params){let def={type:"object",shape:shape??{},...exports_util.normalizeParams(params)};return new ZodObject(def)}function strictObject(shape,params){return new ZodObject({type:"object",shape,catchall:never(),...exports_util.normalizeParams(params)})}function looseObject(shape,params){return new ZodObject({type:"object",shape,catchall:unknown(),...exports_util.normalizeParams(params)})}var ZodUnion=$constructor("ZodUnion",(inst,def)=>{$ZodUnion.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unionProcessor(inst,ctx,json,params),inst.options=def.options});function union(options,params){return new ZodUnion({type:"union",options,...exports_util.normalizeParams(params)})}var ZodXor=$constructor("ZodXor",(inst,def)=>{ZodUnion.init(inst,def),$ZodXor.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>unionProcessor(inst,ctx,json,params),inst.options=def.options});function xor(options,params){return new ZodXor({type:"union",options,inclusive:!1,...exports_util.normalizeParams(params)})}var ZodDiscriminatedUnion=$constructor("ZodDiscriminatedUnion",(inst,def)=>{ZodUnion.init(inst,def),$ZodDiscriminatedUnion.init(inst,def)});function discriminatedUnion(discriminator,options,params){return new ZodDiscriminatedUnion({type:"union",options,discriminator,...exports_util.normalizeParams(params)})}var ZodIntersection=$constructor("ZodIntersection",(inst,def)=>{$ZodIntersection.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>intersectionProcessor(inst,ctx,json,params)});function intersection(left,right){return new ZodIntersection({type:"intersection",left,right})}var ZodTuple=$constructor("ZodTuple",(inst,def)=>{$ZodTuple.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>tupleProcessor(inst,ctx,json,params),inst.rest=(rest)=>inst.clone({...inst._zod.def,rest})});function tuple(items,_paramsOrRest,_params){let hasRest=_paramsOrRest instanceof $ZodType,params=hasRest?_params:_paramsOrRest;return new ZodTuple({type:"tuple",items,rest:hasRest?_paramsOrRest:null,...exports_util.normalizeParams(params)})}var ZodRecord=$constructor("ZodRecord",(inst,def)=>{$ZodRecord.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>recordProcessor(inst,ctx,json,params),inst.keyType=def.keyType,inst.valueType=def.valueType});function record(keyType,valueType,params){return new ZodRecord({type:"record",keyType,valueType,...exports_util.normalizeParams(params)})}function partialRecord(keyType,valueType,params){let k=clone(keyType);return k._zod.values=void 0,new ZodRecord({type:"record",keyType:k,valueType,...exports_util.normalizeParams(params)})}function looseRecord(keyType,valueType,params){return new ZodRecord({type:"record",keyType,valueType,mode:"loose",...exports_util.normalizeParams(params)})}var ZodMap=$constructor("ZodMap",(inst,def)=>{$ZodMap.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>mapProcessor(inst,ctx,json,params),inst.keyType=def.keyType,inst.valueType=def.valueType,inst.min=(...args)=>inst.check(_minSize(...args)),inst.nonempty=(params)=>inst.check(_minSize(1,params)),inst.max=(...args)=>inst.check(_maxSize(...args)),inst.size=(...args)=>inst.check(_size(...args))});function map(keyType,valueType,params){return new ZodMap({type:"map",keyType,valueType,...exports_util.normalizeParams(params)})}var ZodSet=$constructor("ZodSet",(inst,def)=>{$ZodSet.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>setProcessor(inst,ctx,json,params),inst.min=(...args)=>inst.check(_minSize(...args)),inst.nonempty=(params)=>inst.check(_minSize(1,params)),inst.max=(...args)=>inst.check(_maxSize(...args)),inst.size=(...args)=>inst.check(_size(...args))});function set(valueType,params){return new ZodSet({type:"set",valueType,...exports_util.normalizeParams(params)})}var ZodEnum=$constructor("ZodEnum",(inst,def)=>{$ZodEnum.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>enumProcessor(inst,ctx,json,params),inst.enum=def.entries,inst.options=Object.values(def.entries);let keys=new Set(Object.keys(def.entries));inst.extract=(values,params)=>{let newEntries={};for(let value of values)if(keys.has(value))newEntries[value]=def.entries[value];else throw Error(`Key ${value} not found in enum`);return new ZodEnum({...def,checks:[],...exports_util.normalizeParams(params),entries:newEntries})},inst.exclude=(values,params)=>{let newEntries={...def.entries};for(let value of values)if(keys.has(value))delete newEntries[value];else throw Error(`Key ${value} not found in enum`);return new ZodEnum({...def,checks:[],...exports_util.normalizeParams(params),entries:newEntries})}});function _enum2(values,params){let entries=Array.isArray(values)?Object.fromEntries(values.map((v)=>[v,v])):values;return new ZodEnum({type:"enum",entries,...exports_util.normalizeParams(params)})}function nativeEnum(entries,params){return new ZodEnum({type:"enum",entries,...exports_util.normalizeParams(params)})}var ZodLiteral=$constructor("ZodLiteral",(inst,def)=>{$ZodLiteral.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>literalProcessor(inst,ctx,json,params),inst.values=new Set(def.values),Object.defineProperty(inst,"value",{get(){if(def.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return def.values[0]}})});function literal(value,params){return new ZodLiteral({type:"literal",values:Array.isArray(value)?value:[value],...exports_util.normalizeParams(params)})}var ZodFile=$constructor("ZodFile",(inst,def)=>{$ZodFile.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>fileProcessor(inst,ctx,json,params),inst.min=(size,params)=>inst.check(_minSize(size,params)),inst.max=(size,params)=>inst.check(_maxSize(size,params)),inst.mime=(types,params)=>inst.check(_mime(Array.isArray(types)?types:[types],params))});function file(params){return _file(ZodFile,params)}var ZodTransform=$constructor("ZodTransform",(inst,def)=>{$ZodTransform.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>transformProcessor(inst,ctx,json,params),inst._zod.parse=(payload,_ctx)=>{if(_ctx.direction==="backward")throw new $ZodEncodeError(inst.constructor.name);payload.addIssue=(issue2)=>{if(typeof issue2==="string")payload.issues.push(exports_util.issue(issue2,payload.value,def));else{let _issue=issue2;if(_issue.fatal)_issue.continue=!1;_issue.code??(_issue.code="custom"),_issue.input??(_issue.input=payload.value),_issue.inst??(_issue.inst=inst),payload.issues.push(exports_util.issue(_issue))}};let output=def.transform(payload.value,payload);if(output instanceof Promise)return output.then((output2)=>{return payload.value=output2,payload});return payload.value=output,payload}});function transform(fn){return new ZodTransform({type:"transform",transform:fn})}var ZodOptional=$constructor("ZodOptional",(inst,def)=>{$ZodOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>optionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function optional(innerType){return new ZodOptional({type:"optional",innerType})}var ZodExactOptional=$constructor("ZodExactOptional",(inst,def)=>{$ZodExactOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>optionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function exactOptional(innerType){return new ZodExactOptional({type:"optional",innerType})}var ZodNullable=$constructor("ZodNullable",(inst,def)=>{$ZodNullable.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nullableProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function nullable(innerType){return new ZodNullable({type:"nullable",innerType})}function nullish2(innerType){return optional(nullable(innerType))}var ZodDefault=$constructor("ZodDefault",(inst,def)=>{$ZodDefault.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>defaultProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType,inst.removeDefault=inst.unwrap});function _default2(innerType,defaultValue){return new ZodDefault({type:"default",innerType,get defaultValue(){return typeof defaultValue==="function"?defaultValue():exports_util.shallowClone(defaultValue)}})}var ZodPrefault=$constructor("ZodPrefault",(inst,def)=>{$ZodPrefault.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>prefaultProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function prefault(innerType,defaultValue){return new ZodPrefault({type:"prefault",innerType,get defaultValue(){return typeof defaultValue==="function"?defaultValue():exports_util.shallowClone(defaultValue)}})}var ZodNonOptional=$constructor("ZodNonOptional",(inst,def)=>{$ZodNonOptional.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nonoptionalProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function nonoptional(innerType,params){return new ZodNonOptional({type:"nonoptional",innerType,...exports_util.normalizeParams(params)})}var ZodSuccess=$constructor("ZodSuccess",(inst,def)=>{$ZodSuccess.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>successProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function success(innerType){return new ZodSuccess({type:"success",innerType})}var ZodCatch=$constructor("ZodCatch",(inst,def)=>{$ZodCatch.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>catchProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType,inst.removeCatch=inst.unwrap});function _catch2(innerType,catchValue){return new ZodCatch({type:"catch",innerType,catchValue:typeof catchValue==="function"?catchValue:()=>catchValue})}var ZodNaN=$constructor("ZodNaN",(inst,def)=>{$ZodNaN.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>nanProcessor(inst,ctx,json,params)});function nan(params){return _nan(ZodNaN,params)}var ZodPipe=$constructor("ZodPipe",(inst,def)=>{$ZodPipe.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>pipeProcessor(inst,ctx,json,params),inst.in=def.in,inst.out=def.out});function pipe(in_,out){return new ZodPipe({type:"pipe",in:in_,out})}var ZodCodec=$constructor("ZodCodec",(inst,def)=>{ZodPipe.init(inst,def),$ZodCodec.init(inst,def)});function codec(in_,out,params){return new ZodCodec({type:"pipe",in:in_,out,transform:params.decode,reverseTransform:params.encode})}var ZodReadonly=$constructor("ZodReadonly",(inst,def)=>{$ZodReadonly.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>readonlyProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function readonly(innerType){return new ZodReadonly({type:"readonly",innerType})}var ZodTemplateLiteral=$constructor("ZodTemplateLiteral",(inst,def)=>{$ZodTemplateLiteral.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>templateLiteralProcessor(inst,ctx,json,params)});function templateLiteral(parts,params){return new ZodTemplateLiteral({type:"template_literal",parts,...exports_util.normalizeParams(params)})}var ZodLazy=$constructor("ZodLazy",(inst,def)=>{$ZodLazy.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>lazyProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.getter()});function lazy(getter){return new ZodLazy({type:"lazy",getter})}var ZodPromise=$constructor("ZodPromise",(inst,def)=>{$ZodPromise.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>promiseProcessor(inst,ctx,json,params),inst.unwrap=()=>inst._zod.def.innerType});function promise(innerType){return new ZodPromise({type:"promise",innerType})}var ZodFunction=$constructor("ZodFunction",(inst,def)=>{$ZodFunction.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>functionProcessor(inst,ctx,json,params)});function _function(params){return new ZodFunction({type:"function",input:Array.isArray(params?.input)?tuple(params?.input):params?.input??array(unknown()),output:params?.output??unknown()})}var ZodCustom=$constructor("ZodCustom",(inst,def)=>{$ZodCustom.init(inst,def),ZodType.init(inst,def),inst._zod.processJSONSchema=(ctx,json,params)=>customProcessor(inst,ctx,json,params)});function check(fn){let ch=new $ZodCheck({check:"custom"});return ch._zod.check=fn,ch}function custom(fn,_params){return _custom(ZodCustom,fn??(()=>!0),_params)}function refine(fn,_params={}){return _refine(ZodCustom,fn,_params)}function superRefine(fn){return _superRefine(fn)}var describe2=describe,meta2=meta;function _instanceof(cls,params={}){let inst=new ZodCustom({type:"custom",check:"custom",fn:(data)=>data instanceof cls,abort:!0,...exports_util.normalizeParams(params)});return inst._zod.bag.Class=cls,inst._zod.check=(payload)=>{if(!(payload.value instanceof cls))payload.issues.push({code:"invalid_type",expected:cls.name,input:payload.value,inst,path:[...inst._zod.def.path??[]]})},inst}var stringbool=(...args)=>_stringbool({Codec:ZodCodec,Boolean:ZodBoolean,String:ZodString},...args);function json(params){let jsonSchema=lazy(()=>{return union([string2(params),number2(),boolean2(),_null3(),array(jsonSchema),record(string2(),jsonSchema)])});return jsonSchema}function preprocess(fn,schema){return pipe(transform(fn),schema)}var ZodIssueCode={invalid_type:"invalid_type",too_big:"too_big",too_small:"too_small",invalid_format:"invalid_format",not_multiple_of:"not_multiple_of",unrecognized_keys:"unrecognized_keys",invalid_union:"invalid_union",invalid_key:"invalid_key",invalid_element:"invalid_element",invalid_value:"invalid_value",custom:"custom"};function setErrorMap(map2){config({customError:map2})}function getErrorMap(){return config().customError}var ZodFirstPartyTypeKind;(function(ZodFirstPartyTypeKind2){})(ZodFirstPartyTypeKind||(ZodFirstPartyTypeKind={}));var z={...exports_schemas2,...exports_checks2,iso:exports_iso},RECOGNIZED_KEYS=new Set(["$schema","$ref","$defs","definitions","$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor","type","enum","const","anyOf","oneOf","allOf","not","properties","required","additionalProperties","patternProperties","propertyNames","minProperties","maxProperties","items","prefixItems","additionalItems","minItems","maxItems","uniqueItems","contains","minContains","maxContains","minLength","maxLength","pattern","format","minimum","maximum","exclusiveMinimum","exclusiveMaximum","multipleOf","description","default","contentEncoding","contentMediaType","contentSchema","unevaluatedItems","unevaluatedProperties","if","then","else","dependentSchemas","dependentRequired","nullable","readOnly"]);function detectVersion(schema,defaultTarget){let $schema=schema.$schema;if($schema==="https://json-schema.org/draft/2020-12/schema")return"draft-2020-12";if($schema==="http://json-schema.org/draft-07/schema#")return"draft-7";if($schema==="http://json-schema.org/draft-04/schema#")return"draft-4";return defaultTarget??"draft-2020-12"}function resolveRef(ref,ctx){if(!ref.startsWith("#"))throw Error("External $ref is not supported, only local refs (#/...) are allowed");let path=ref.slice(1).split("/").filter(Boolean);if(path.length===0)return ctx.rootSchema;let defsKey=ctx.version==="draft-2020-12"?"$defs":"definitions";if(path[0]===defsKey){let key=path[1];if(!key||!ctx.defs[key])throw Error(`Reference not found: ${ref}`);return ctx.defs[key]}throw Error(`Reference not found: ${ref}`)}function convertBaseSchema(schema,ctx){if(schema.not!==void 0){if(typeof schema.not==="object"&&Object.keys(schema.not).length===0)return z.never();throw Error("not is not supported in Zod (except { not: {} } for never)")}if(schema.unevaluatedItems!==void 0)throw Error("unevaluatedItems is not supported");if(schema.unevaluatedProperties!==void 0)throw Error("unevaluatedProperties is not supported");if(schema.if!==void 0||schema.then!==void 0||schema.else!==void 0)throw Error("Conditional schemas (if/then/else) are not supported");if(schema.dependentSchemas!==void 0||schema.dependentRequired!==void 0)throw Error("dependentSchemas and dependentRequired are not supported");if(schema.$ref){let refPath=schema.$ref;if(ctx.refs.has(refPath))return ctx.refs.get(refPath);if(ctx.processing.has(refPath))return z.lazy(()=>{if(!ctx.refs.has(refPath))throw Error(`Circular reference not resolved: ${refPath}`);return ctx.refs.get(refPath)});ctx.processing.add(refPath);let resolved=resolveRef(refPath,ctx),zodSchema2=convertSchema(resolved,ctx);return ctx.refs.set(refPath,zodSchema2),ctx.processing.delete(refPath),zodSchema2}if(schema.enum!==void 0){let enumValues=schema.enum;if(ctx.version==="openapi-3.0"&&schema.nullable===!0&&enumValues.length===1&&enumValues[0]===null)return z.null();if(enumValues.length===0)return z.never();if(enumValues.length===1)return z.literal(enumValues[0]);if(enumValues.every((v)=>typeof v==="string"))return z.enum(enumValues);let literalSchemas=enumValues.map((v)=>z.literal(v));if(literalSchemas.length<2)return literalSchemas[0];return z.union([literalSchemas[0],literalSchemas[1],...literalSchemas.slice(2)])}if(schema.const!==void 0)return z.literal(schema.const);let type=schema.type;if(Array.isArray(type)){let typeSchemas=type.map((t)=>{let typeSchema={...schema,type:t};return convertBaseSchema(typeSchema,ctx)});if(typeSchemas.length===0)return z.never();if(typeSchemas.length===1)return typeSchemas[0];return z.union(typeSchemas)}if(!type)return z.any();let zodSchema;switch(type){case"string":{let stringSchema=z.string();if(schema.format){let format=schema.format;if(format==="email")stringSchema=stringSchema.check(z.email());else if(format==="uri"||format==="uri-reference")stringSchema=stringSchema.check(z.url());else if(format==="uuid"||format==="guid")stringSchema=stringSchema.check(z.uuid());else if(format==="date-time")stringSchema=stringSchema.check(z.iso.datetime());else if(format==="date")stringSchema=stringSchema.check(z.iso.date());else if(format==="time")stringSchema=stringSchema.check(z.iso.time());else if(format==="duration")stringSchema=stringSchema.check(z.iso.duration());else if(format==="ipv4")stringSchema=stringSchema.check(z.ipv4());else if(format==="ipv6")stringSchema=stringSchema.check(z.ipv6());else if(format==="mac")stringSchema=stringSchema.check(z.mac());else if(format==="cidr")stringSchema=stringSchema.check(z.cidrv4());else if(format==="cidr-v6")stringSchema=stringSchema.check(z.cidrv6());else if(format==="base64")stringSchema=stringSchema.check(z.base64());else if(format==="base64url")stringSchema=stringSchema.check(z.base64url());else if(format==="e164")stringSchema=stringSchema.check(z.e164());else if(format==="jwt")stringSchema=stringSchema.check(z.jwt());else if(format==="emoji")stringSchema=stringSchema.check(z.emoji());else if(format==="nanoid")stringSchema=stringSchema.check(z.nanoid());else if(format==="cuid")stringSchema=stringSchema.check(z.cuid());else if(format==="cuid2")stringSchema=stringSchema.check(z.cuid2());else if(format==="ulid")stringSchema=stringSchema.check(z.ulid());else if(format==="xid")stringSchema=stringSchema.check(z.xid());else if(format==="ksuid")stringSchema=stringSchema.check(z.ksuid())}if(typeof schema.minLength==="number")stringSchema=stringSchema.min(schema.minLength);if(typeof schema.maxLength==="number")stringSchema=stringSchema.max(schema.maxLength);if(schema.pattern)stringSchema=stringSchema.regex(new RegExp(schema.pattern));zodSchema=stringSchema;break}case"number":case"integer":{let numberSchema=type==="integer"?z.number().int():z.number();if(typeof schema.minimum==="number")numberSchema=numberSchema.min(schema.minimum);if(typeof schema.maximum==="number")numberSchema=numberSchema.max(schema.maximum);if(typeof schema.exclusiveMinimum==="number")numberSchema=numberSchema.gt(schema.exclusiveMinimum);else if(schema.exclusiveMinimum===!0&&typeof schema.minimum==="number")numberSchema=numberSchema.gt(schema.minimum);if(typeof schema.exclusiveMaximum==="number")numberSchema=numberSchema.lt(schema.exclusiveMaximum);else if(schema.exclusiveMaximum===!0&&typeof schema.maximum==="number")numberSchema=numberSchema.lt(schema.maximum);if(typeof schema.multipleOf==="number")numberSchema=numberSchema.multipleOf(schema.multipleOf);zodSchema=numberSchema;break}case"boolean":{zodSchema=z.boolean();break}case"null":{zodSchema=z.null();break}case"object":{let shape={},properties=schema.properties||{},requiredSet=new Set(schema.required||[]);for(let[key,propSchema]of Object.entries(properties)){let propZodSchema=convertSchema(propSchema,ctx);shape[key]=requiredSet.has(key)?propZodSchema:propZodSchema.optional()}if(schema.propertyNames){let keySchema=convertSchema(schema.propertyNames,ctx),valueSchema=schema.additionalProperties&&typeof schema.additionalProperties==="object"?convertSchema(schema.additionalProperties,ctx):z.any();if(Object.keys(shape).length===0){zodSchema=z.record(keySchema,valueSchema);break}let objectSchema2=z.object(shape).passthrough(),recordSchema=z.looseRecord(keySchema,valueSchema);zodSchema=z.intersection(objectSchema2,recordSchema);break}if(schema.patternProperties){let patternProps=schema.patternProperties,patternKeys=Object.keys(patternProps),looseRecords=[];for(let pattern of patternKeys){let patternValue=convertSchema(patternProps[pattern],ctx),keySchema=z.string().regex(new RegExp(pattern));looseRecords.push(z.looseRecord(keySchema,patternValue))}let schemasToIntersect=[];if(Object.keys(shape).length>0)schemasToIntersect.push(z.object(shape).passthrough());if(schemasToIntersect.push(...looseRecords),schemasToIntersect.length===0)zodSchema=z.object({}).passthrough();else if(schemasToIntersect.length===1)zodSchema=schemasToIntersect[0];else{let result=z.intersection(schemasToIntersect[0],schemasToIntersect[1]);for(let i=2;i<schemasToIntersect.length;i++)result=z.intersection(result,schemasToIntersect[i]);zodSchema=result}break}let objectSchema=z.object(shape);if(schema.additionalProperties===!1)zodSchema=objectSchema.strict();else if(typeof schema.additionalProperties==="object")zodSchema=objectSchema.catchall(convertSchema(schema.additionalProperties,ctx));else zodSchema=objectSchema.passthrough();break}case"array":{let{prefixItems,items}=schema;if(prefixItems&&Array.isArray(prefixItems)){let tupleItems=prefixItems.map((item)=>convertSchema(item,ctx)),rest=items&&typeof items==="object"&&!Array.isArray(items)?convertSchema(items,ctx):void 0;if(rest)zodSchema=z.tuple(tupleItems).rest(rest);else zodSchema=z.tuple(tupleItems);if(typeof schema.minItems==="number")zodSchema=zodSchema.check(z.minLength(schema.minItems));if(typeof schema.maxItems==="number")zodSchema=zodSchema.check(z.maxLength(schema.maxItems))}else if(Array.isArray(items)){let tupleItems=items.map((item)=>convertSchema(item,ctx)),rest=schema.additionalItems&&typeof schema.additionalItems==="object"?convertSchema(schema.additionalItems,ctx):void 0;if(rest)zodSchema=z.tuple(tupleItems).rest(rest);else zodSchema=z.tuple(tupleItems);if(typeof schema.minItems==="number")zodSchema=zodSchema.check(z.minLength(schema.minItems));if(typeof schema.maxItems==="number")zodSchema=zodSchema.check(z.maxLength(schema.maxItems))}else if(items!==void 0){let element=convertSchema(items,ctx),arraySchema=z.array(element);if(typeof schema.minItems==="number")arraySchema=arraySchema.min(schema.minItems);if(typeof schema.maxItems==="number")arraySchema=arraySchema.max(schema.maxItems);zodSchema=arraySchema}else zodSchema=z.array(z.any());break}default:throw Error(`Unsupported type: ${type}`)}if(schema.description)zodSchema=zodSchema.describe(schema.description);if(schema.default!==void 0)zodSchema=zodSchema.default(schema.default);return zodSchema}function convertSchema(schema,ctx){if(typeof schema==="boolean")return schema?z.any():z.never();let baseSchema=convertBaseSchema(schema,ctx),hasExplicitType=schema.type||schema.enum!==void 0||schema.const!==void 0;if(schema.anyOf&&Array.isArray(schema.anyOf)){let options=schema.anyOf.map((s)=>convertSchema(s,ctx)),anyOfUnion=z.union(options);baseSchema=hasExplicitType?z.intersection(baseSchema,anyOfUnion):anyOfUnion}if(schema.oneOf&&Array.isArray(schema.oneOf)){let options=schema.oneOf.map((s)=>convertSchema(s,ctx)),oneOfUnion=z.xor(options);baseSchema=hasExplicitType?z.intersection(baseSchema,oneOfUnion):oneOfUnion}if(schema.allOf&&Array.isArray(schema.allOf))if(schema.allOf.length===0)baseSchema=hasExplicitType?baseSchema:z.any();else{let result=hasExplicitType?baseSchema:convertSchema(schema.allOf[0],ctx),startIdx=hasExplicitType?0:1;for(let i=startIdx;i<schema.allOf.length;i++)result=z.intersection(result,convertSchema(schema.allOf[i],ctx));baseSchema=result}if(schema.nullable===!0&&ctx.version==="openapi-3.0")baseSchema=z.nullable(baseSchema);if(schema.readOnly===!0)baseSchema=z.readonly(baseSchema);let extraMeta={},coreMetadataKeys=["$id","id","$comment","$anchor","$vocabulary","$dynamicRef","$dynamicAnchor"];for(let key of coreMetadataKeys)if(key in schema)extraMeta[key]=schema[key];let contentMetadataKeys=["contentEncoding","contentMediaType","contentSchema"];for(let key of contentMetadataKeys)if(key in schema)extraMeta[key]=schema[key];for(let key of Object.keys(schema))if(!RECOGNIZED_KEYS.has(key))extraMeta[key]=schema[key];if(Object.keys(extraMeta).length>0)ctx.registry.add(baseSchema,extraMeta);return baseSchema}function fromJSONSchema(schema,params){if(typeof schema==="boolean")return schema?z.any():z.never();let version2=detectVersion(schema,params?.defaultTarget),defs=schema.$defs||schema.definitions||{},ctx={version:version2,defs,refs:new Map,processing:new Set,rootSchema:schema,registry:params?.registry??globalRegistry};return convertSchema(schema,ctx)}var exports_coerce={};__export(exports_coerce,{string:()=>string3,number:()=>number3,date:()=>date4,boolean:()=>boolean3,bigint:()=>bigint3});function string3(params){return _coercedString(ZodString,params)}function number3(params){return _coercedNumber(ZodNumber,params)}function boolean3(params){return _coercedBoolean(ZodBoolean,params)}function bigint3(params){return _coercedBigint(ZodBigInt,params)}function date4(params){return _coercedDate(ZodDate,params)}config(en_default());var errorEnvelope=exports_external.object({error:exports_external.string(),issues:exports_external.array(exports_external.unknown()).optional()});import{createWriteStream,existsSync,mkdirSync,renameSync,statSync}from"fs";import{join as join2}from"path";import{join}from"path";import{homedir}from"os";var APP_SLUG="bakin";function bakinHomeDefault(){return join(homedir(),`.${APP_SLUG}`)}var resolvedContentDir=null;function isTestEnv(){return process.env.VITEST==="true"||!!process.env.VITEST}function realBakinHome(){let realHome=process.env.HOME||process.env.USERPROFILE||"";if(!realHome)return"";return join(realHome,`.${APP_SLUG}`)}function assertSafeForTest(path){if(!isTestEnv())return;let real=realBakinHome();if(real&&path===real)throw Error(`[bakin] getContentDir() resolved to the real Bakin home (${real}) during a test run. This would write test data to your production instance. Fix: mock src/core/content-dir in this test, or set BAKIN_HOME to a temp `+"directory before importing any Bakin module. See CLAUDE.md \xA7 Testing Rules.")}function getContentDir(){if(resolvedContentDir)return resolvedContentDir;let resolved=resolveContentDirInner();return assertSafeForTest(resolved),resolvedContentDir=resolved,resolvedContentDir}function resolveContentDirInner(){if(process.env.BAKIN_HOME)return process.env.BAKIN_HOME;return bakinHomeDefault()}function getBakinPaths(){let home=getContentDir(),assets=join(home,"assets");return{home,memoryLog:join(home,"MEMORY-LOG.md"),audit:join(home,"audit.jsonl"),assets,"assets.store":join(assets,"store"),"assets.inbox":join(assets,"inbox"),"assets.trash":join(assets,".trash"),agents:join(home,"agents"),personas:join(home,"team","personas"),team:join(home,"team"),heartbeats:join(home,"heartbeats"),inbox:join(home,"inbox"),tasks:join(home,"tasks"),workflows:join(home,"workflows"),brands:join(home,"brands"),chat:join(home,"chat"),settings:join(home,"settings.json"),logs:join(home,"logs"),antfly:join(home,"antfly"),db:join(home,"bakin.db"),bin:join(home,"bin"),media:join(home,"media")}}var MAX_LOG_BYTES=10485760,LEVEL_RANK={debug:10,info:20,warn:30,error:40},COLOR_RESET="\x1B[0m",COLORS={dim:"\x1B[2m",blue:"\x1B[34m",cyan:"\x1B[36m",green:"\x1B[32m",magenta:"\x1B[35m",red:"\x1B[31m",yellow:"\x1B[33m"},fileStream=null,fileTransportInitialized=!1,fileTransportDisabled=!1;function fileTransportEnabled(){if(fileTransportDisabled)return!1;if(process.env.VITEST)return!1;if(process.env.BAKIN_DISABLE_FILE_LOG==="1")return!1;return!0}function ensureFileStream(){if(fileTransportInitialized)return fileStream;if(fileTransportInitialized=!0,!fileTransportEnabled())return null;try{let logsDir=getBakinPaths().logs;if(!existsSync(logsDir))mkdirSync(logsDir,{recursive:!0});let logPath=join2(logsDir,"server.log");if(existsSync(logPath))try{if(statSync(logPath).size>MAX_LOG_BYTES){let rotated=join2(logsDir,"server.log.1");renameSync(logPath,rotated)}}catch{}fileStream=createWriteStream(logPath,{flags:"a"}),fileStream.on("error",()=>{fileTransportDisabled=!0,fileStream=null})}catch{fileTransportDisabled=!0,fileStream=null}return fileStream}function formatEntry(entry){let parts=[`[${entry.ts}] [${entry.level.toUpperCase()}] [${entry.module}] ${entry.message}`];if(entry.error)parts.push(` error: ${entry.error}`);if(entry.data)parts.push(` data: ${JSON.stringify(entry.data)}`);return parts.join(`
|
|
42
42
|
`)}function consoleFormat(){let configured=process.env.BAKIN_CONSOLE_FORMAT;if(configured==="pretty"||configured==="verbose"||configured==="plain"||configured==="silent")return configured;return process.stdout.isTTY===!0?"pretty":"plain"}function consoleMinLevel(format){let configured=process.env.BAKIN_LOG_LEVEL;if(configured==="debug"||configured==="info"||configured==="warn"||configured==="error")return configured;if(format==="verbose")return"debug";if(format==="silent")return"error";if(format==="pretty")return"info";return"debug"}function colorEnabled(format){if(format==="plain")return!1;if(process.env.NO_COLOR||process.env.BAKIN_NO_COLOR==="1")return!1;return process.stdout.isTTY===!0}function colorize(text,color,enabled){return enabled?`${COLORS[color]}${text}${COLOR_RESET}`:text}function sourceLabel(entry){let data=entry.data,explicitSource=typeof data?.source==="string"?data.source:void 0,pluginId=typeof data?.pluginId==="string"?data.pluginId:void 0;if(explicitSource==="antfly")return"antfly";if(explicitSource==="dev")return"dev";if(explicitSource==="plugin"&&pluginId)return`plugin:${pluginId}`;if(entry.module==="plugin-registry"&&pluginId)return`plugin:${pluginId}`;if(entry.module.startsWith("api:"))return"api";return entry.module}function sourceColor(source){if(source==="dev")return"cyan";if(source==="server")return"blue";if(source==="antfly")return"magenta";if(source.startsWith("plugin:"))return"green";if(source.includes("search"))return"cyan";if(source.includes("runtime"))return"magenta";return"dim"}function levelColor(level){if(level==="debug")return"dim";if(level==="warn")return"yellow";if(level==="error")return"red";return"blue"}function isImportantAntflyInfo(entry){return["Metadata API server is ready","Store HTTP server is ready","Swarm mode: all servers are ready","Termite's api server starting"].some((message)=>entry.message.includes(message))}function suppressPrettyInfo(entry){if(entry.level!=="info")return!1;if(entry.data?.source==="antfly")return!isImportantAntflyInfo(entry);if(entry.module==="plugin-registry")return entry.message==="plugin activated"||entry.message.startsWith("Auto-registered ")||entry.message.startsWith("Plugin activation order:");return["search-registry","search-registry-core","search-plugin-api","search-reindex","search-query","search-reconcile","search-cleanup","search-startup","hot-reload-coordinator","dispatch","dispatch-state","dispatch-turns","dispatch-session-death","dispatch-workflow","dispatch-cycle","dispatch-single","watchdog","doctor","lifecycle"].includes(entry.module)}function shouldWriteConsole(entry,format){if(format==="silent")return!1;let minLevel=consoleMinLevel(format);if(LEVEL_RANK[entry.level]<LEVEL_RANK[minLevel])return!1;if(format==="pretty"&&suppressPrettyInfo(entry))return!1;return!0}function formatPrettyEntry(entry,format){let colors=colorEnabled(format),time3=new Date(entry.ts).toTimeString().slice(0,8),level=entry.level.padEnd(5),source=sourceLabel(entry),label=source.padEnd(18),levelPart=colorize(level,levelColor(entry.level),colors),sourcePart=colorize(label,sourceColor(source),colors),messagePart=entry.level==="error"?colorize(entry.message,"red",colors):entry.message,parts=[`${colorize(time3,"dim",colors)} ${levelPart} ${sourcePart} ${messagePart}`];if(entry.error)parts[0]+=` - ${entry.error}`;if(format==="verbose"&&entry.data)parts.push(` data: ${JSON.stringify(entry.data)}`);return parts.join(`
|
|
43
43
|
`)}function formatConsoleEntry(entry){let format=consoleFormat();if(format==="plain")return formatEntry(entry);if(format==="silent")return"";return formatPrettyEntry(entry,format)}function writeToFile(entry){let stream=ensureFileStream();if(!stream)return;try{stream.write(JSON.stringify(entry)+`
|
|
44
|
-
`)}catch{fileTransportDisabled=!0,fileStream=null}}function createLogger(module){function log(level,message,errorOrData,data){let entry={ts:new Date().toISOString(),level,module,message};if(errorOrData instanceof Error)entry.error=errorOrData.message,entry.data=data?{...data,stack:errorOrData.stack}:{stack:errorOrData.stack};else if(typeof errorOrData==="string")entry.error=errorOrData,entry.data=data;else if(errorOrData&&typeof errorOrData==="object")entry.data=errorOrData;let format=consoleFormat();if(shouldWriteConsole(entry,format)){let formatted=formatConsoleEntry(entry);if(level==="error")console.error(formatted);else if(level==="warn")console.warn(formatted);else console.log(formatted)}writeToFile(entry)}return{debug:(message,data)=>log("debug",message,data),info:(message,data)=>log("info",message,data),warn:(message,errorOrData,data)=>log("warn",message,errorOrData,data),error:(message,errorOrData,data)=>log("error",message,errorOrData,data)}}var log=createLogger("dispatcher");var VALID_BODY_CONTENT_TYPES=["application/json","multipart/form-data","*/*","none"];function assertValidBodySpec(body,label){if(body===void 0||body===null)return;if(isZodType(body))return;if(typeof body!=="object"||!("contentType"in body))throw Error(`route ${label}: body spec must be a zod schema or declare a contentType (got ${JSON.stringify(body)})`);let ct=body.contentType;if(!VALID_BODY_CONTENT_TYPES.includes(ct))throw Error(`route ${label}: unknown body contentType '${String(ct)}' \u2014 valid values: ${VALID_BODY_CONTENT_TYPES.join(", ")}`);if(ct==="application/json"&&!isZodType(body.schema))throw Error(`route ${label}: contentType 'application/json' requires a zod schema`)}function isZodType(value){if(!value||typeof value!=="object")return!1;return value instanceof exports_external.ZodType||typeof value._zod==="object"&&value._zod!==null}function defineRoute(route){return assertValidBodySpec(route.body,`${route.method} ${route.path}`),route}function defineCoreRoute(route){return assertValidBodySpec(route.body,`${route.method} ${route.path}`),route}function definePlugin(plugin){return plugin}var searchQuery=exports_external.object({q:exports_external.string().min(1),limit:exports_external.coerce.number().int().positive().max(500).optional(),offset:exports_external.coerce.number().int().nonnegative().optional(),facets:exports_external.string().optional()}),searchResponse=exports_external.object({results:exports_external.array(exports_external.unknown()),aggregations:exports_external.unknown().optional(),meta:exports_external.object({query:exports_external.string(),total:exports_external.number(),took_ms:exports_external.number(),source:exports_external.string()}).optional()}),errorResponse=exports_external.object({error:exports_external.string()});export{setNavBadge,registerPluginCleanup,registerPlugin,getNavBadge,defineRoute,definePlugin,defineCoreRoute};
|
|
44
|
+
`)}catch{fileTransportDisabled=!0,fileStream=null}}function createLogger(module){function log(level,message,errorOrData,data){let entry={ts:new Date().toISOString(),level,module,message};if(errorOrData instanceof Error)entry.error=errorOrData.message,entry.data=data?{...data,stack:errorOrData.stack}:{stack:errorOrData.stack};else if(typeof errorOrData==="string")entry.error=errorOrData,entry.data=data;else if(errorOrData&&typeof errorOrData==="object")entry.data=errorOrData;let format=consoleFormat();if(shouldWriteConsole(entry,format)){let formatted=formatConsoleEntry(entry);if(level==="error")console.error(formatted);else if(level==="warn")console.warn(formatted);else console.log(formatted)}writeToFile(entry)}return{debug:(message,data)=>log("debug",message,data),info:(message,data)=>log("info",message,data),warn:(message,errorOrData,data)=>log("warn",message,errorOrData,data),error:(message,errorOrData,data)=>log("error",message,errorOrData,data)}}var log=createLogger("dispatcher");var VALID_BODY_CONTENT_TYPES=["application/json","multipart/form-data","*/*","none"];function assertValidBodySpec(body,label){if(body===void 0||body===null)return;if(isZodType(body))return;if(typeof body!=="object"||!("contentType"in body))throw Error(`route ${label}: body spec must be a zod schema or declare a contentType (got ${JSON.stringify(body)})`);let ct=body.contentType;if(!VALID_BODY_CONTENT_TYPES.includes(ct))throw Error(`route ${label}: unknown body contentType '${String(ct)}' \u2014 valid values: ${VALID_BODY_CONTENT_TYPES.join(", ")}`);if(ct==="application/json"&&!isZodType(body.schema))throw Error(`route ${label}: contentType 'application/json' requires a zod schema`)}function isZodType(value){if(!value||typeof value!=="object")return!1;return value instanceof exports_external.ZodType||typeof value._zod==="object"&&value._zod!==null}function defineRoute(route){return assertValidBodySpec(route.body,`${route.method} ${route.path}`),route}function defineCoreRoute(route){return assertValidBodySpec(route.body,`${route.method} ${route.path}`),route}function definePlugin(plugin){return plugin}var searchQuery=exports_external.object({q:exports_external.string().min(1),limit:exports_external.coerce.number().int().positive().max(500).optional(),offset:exports_external.coerce.number().int().nonnegative().optional(),facets:exports_external.string().optional()}),searchResponse=exports_external.object({results:exports_external.array(exports_external.unknown()),aggregations:exports_external.unknown().optional(),meta:exports_external.object({query:exports_external.string(),total:exports_external.number(),took_ms:exports_external.number(),source:exports_external.string(),partial:exports_external.boolean().optional(),tables:exports_external.array(exports_external.object({table:exports_external.string(),hits:exports_external.number(),took_ms:exports_external.number(),budget:exports_external.enum(["degraded","omitted"]).optional(),facets:exports_external.enum(["omitted"]).optional()})).optional()}).optional()}),errorResponse=exports_external.object({error:exports_external.string()});export{setNavBadge,registerPluginCleanup,registerPlugin,getNavBadge,defineRoute,definePlugin,defineCoreRoute};
|
package/package.json
CHANGED