teapot-coding-agent 0.11.0 → 0.11.1

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.
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":["AUTHORS","prompt","name","icon","color","user","message","progress","HARNESS_AUTH","authorOf","e","type","String","data","src","source","startsWith","slice","FEED_TYPES","Set","fmtTs","iso","d","Date","getHours","padStart","getMinutes","api","path","opts","token","localStorage","getItem","headers","Headers","has","set","res","fetch","ok","detail","json","error","Error","status","hashTok","location","hash","match","setItem","decodeURIComponent","history","replaceState","pathname","search","wsTokenQuery","t","encodeURIComponent","App","agents","setAgents","createSignal","selected","setSelected","events","setEvents","eventsTotal","setEventsTotal","branches","setBranches","metrics","setMetrics","draft","setDraft","autoStart","setAutoStart","setAutoStartPersist","v","cfg","setCfg","providers","showNew","setShowNew","showCfg","setShowCfg","showRight","setShowRight","window","innerWidth","toggleRight","next","modelProvider","setModelProvider","modelDraft","setModelDraft","models","setModels","providerList","Object","keys","loadModels","prov","r","createEffect","a","sel","provider","defaultProvider","atBottom","setAtBottom","missed","setMissed","live","setLive","liveText","setLiveText","liveRenderTimer","l","clearTimeout","undefined","setTimeout","text","onCleanup","createMemo","find","id","editing","setEditing","pendingMsgs","setPendingMsgs","pairInfo","resFor","Map","consumed","awaiting","q","get","callId","push","call","shift","add","chatEvents","real","filter","content","trim","reasoning","final","echoes","p","some","ts","getTime","at","pend","map","seq","toISOString","session","branch","parent","pending","loadCfg","then","catch","todoDraft","setTodoDraft","todoDirty","setTodoDirty","todoSeededFor","serverTodo","todo","saveTodo","notify","document","getElementById","checked","method","body","JSON","stringify","flashHint","refreshAgents","ex","refreshMetrics","tasks","setTasks","loadTasks","agentTasks","agent","branchFilter","setBranchFilter","loadEvents","bf","ev","br","Promise","all","total","length","feedEl","querySelector","nearBottom","f","scrollHeight","scrollTop","clientHeight","scrollBottom","force","select","navigate","requestAnimationFrame","connected","setConnected","ws","timer","close","connectWs","proto","protocol","WebSocket","host","onopen","onclose","onerror","FEED_IRRELEVANT","lastDelta","onmessage","m","msg","parse","kind","agentId","now","event","beforeId","beforeTotal","fetchStartedAt","Math","max","list","pathId","split","url","pushState","addEventListener","title","target","tagName","isContentEditable","key","blur","s","preventDefault","focus","toggleTerm","idx","findIndex","min","termOpen","setTermOpen","termHost","xterm","termWs","ro","lastResize","cols","rows","resizeTimer","closeTerm","disconnect","dispose","openTerm","Terminal","FitAddon","cursorBlink","fontSize","fontFamily","theme","background","foreground","loadAddon","open","fit","w","write","code","onData","readyState","OPEN","send","pushResize","ResizeObserver","observe","onMount","want","initial","mi","setInterval","clearInterval","flash","setFlash","flashTimer","SLASH_COMMANDS","cmd","desc","filteredCmds","includes","c","toLowerCase","composerEl","autosizeComposer","style","height","sp","indexOf","arg","post","start","random","toString","console","act","setGoal","input","value","_el$","_tmpl$32","_el$2","firstChild","_el$3","_el$5","nextSibling","_el$7","_el$8","_el$9","_el$0","_el$10","_el$56","$$click","_$insert","_$createComponent","For","each","children","_el$114","_tmpl$35","_el$115","_el$116","Show","when","_el$117","_tmpl$33","_$effect","_$setAttribute","schedule","join","goal","_tmpl$34","_p$","_v$7","_v$8","_$className","_$memo","rssMb","heapUsedMb","_tmpl$","loadavg1","floor","uptimeSec","fallback","_tmpl$36","_el$11","_tmpl$5","_el$13","_el$14","_el$21","_el$22","_el$26","_el$27","_el$28","_el$29","_el$31","_el$32","pendingPrompts","_el$15","_tmpl$2","_el$18","_el$19","_tmpl$3","forked","model","stats","turns","toolCalls","statusReason","_el$30","_tmpl$4","_el$33","_tmpl$9","nb","_tmpl$37","i","MessageRow","prev","onEdit","eventId","_el$34","_tmpl$8","_el$36","_el$38","_tmpl$6","_el$40","_tmpl$38","_el$41","_tmpl$7","innerHTML","renderMarkdown","_el$42","_tmpl$0","_c$","_el$44","_tmpl$1","_el$45","_el$46","_el$48","_el$49","_el$50","workspace","_$use","el","_el$51","_tmpl$11","_el$53","_el$54","_el$55","_el$52","_tmpl$10","_el$122","_tmpl$39","_el$123","_el$124","$$keydown","shiftKey","$$input","currentTarget","_ref$","_tmpl$12","_el$58","_tmpl$13","_el$59","_el$61","_el$62","_el$63","_el$65","_el$68","_el$69","_v$","_v$2","_tmpl$14","_el$71","_tmpl$15","_el$72","_el$73","_el$74","_el$75","_el$76","_el$77","_el$125","_tmpl$40","_el$126","btn","disabled","textContent","alert","_tmpl$16","_el$80","_tmpl$18","_el$82","_el$83","_el$127","_tmpl$41","_$addEventListener","_el$81","_tmpl$17","confirm","rest","_el$84","_tmpl$19","_el$86","_el$87","_tmpl$20","_el$89","_el$90","_tmpl$21","_el$91","_tmpl$22","_el$92","_tmpl$23","_tmpl$24","_el$95","_tmpl$25","_el$96","_tmpl$26","_el$98","_tmpl$27","latestProgress","_tmpl$42","_el$129","_tmpl$47","_el$130","_el$132","_el$145","doing","recent","_el$133","_tmpl$43","_el$135","problems","_el$136","_tmpl$44","_el$138","_el$139","_tmpl$45","_el$141","goalStatus","_el$142","_tmpl$46","_el$144","relTime","_tmpl$28","_el$101","_tmpl$29","_el$108","_el$109","_el$110","_el$111","compactions","fmtK","inputTokens","outputTokens","cachedInputTokens","round","ctx","usedTokens","compactAt","_tmpl$30","b","_el$146","_tmpl$48","_el$147","_el$148","_el$149","_v$9","_v$0","_tmpl$31","_tmpl$49","_el$151","_tmpl$51","_el$152","_el$153","_el$154","_el$157","_el$158","_el$159","_tmpl$50","_c$2","_c$3","last","oneLine","_v$1","_v$10","_v$3","_v$4","_v$5","_v$6","o","NewAgentModal","onClose","onCreated","ConfigModal","onSaved","ed","afterCount","tail","setTail","Modal","_el$160","_tmpl$53","_el$161","_el$169","_el$170","ta","_el$162","_tmpl$52","_el$163","_el$164","_el$165","_el$166","_el$168","ToolRow","props","out","result","label","hint","_el$171","_tmpl$54","truncate","args","argStr","k","codeBlock","_el$172","_tmpl$55","resultBlock","_el$173","_tmpl$56","_el$174","durationMs","CopyBtn","_tmpl$57","Number","bits","offset","limit","_el$176","_tmpl$58","_tmpl$59","replace_all","_el$178","_tmpl$60","_el$179","_tmpl$61","_el$180","_tmpl$62","_el$181","_el$183","_tmpl$63","patchLines","test","files","Boolean","_el$185","_tmpl$64","cls","_el$186","_tmpl$65","_c$4","_el$187","_tmpl$66","u","URL","_el$189","_tmpl$67","_el$190","mdBody","replace","_el$191","_el$192","_el$193","_tmpl$68","Array","isArray","_el$195","_tmpl$69","_el$197","_el$198","_el$200","_tmpl$70","_el$202","_tmpl$71","_el$204","_el$207","grouped","_el$208","_tmpl$72","_el$211","fromBranch","newBranch","what","_el$212","_tmpl$73","_el$215","_el$216","_tmpl$74","_el$219","by","from","to","_el$220","_tmpl$75","_el$221","_c$5","reason","_el$222","_tmpl$79","_el$224","_tmpl$80","_el$223","_tmpl$76","_v$11","_v$12","_$setStyleProperty","_el$225","_tmpl$78","_el$226","_el$227","_el$228","_c$6","_el$229","_tmpl$77","stopPropagation","_$p","SwitchContent","_el$231","_el$232","_el$234","_el$235","interrupted","_tmpl$81","_el$237","_tmpl$82","_el$238","_el$239","_tmpl$83","_el$240","_el$241","_el$242","_el$243","_el$244","_el$245","_tmpl$86","_el$246","_el$248","_el$249","_tmpl$84","_el$251","_tmpl$85","_el$253","_tmpl$87","_el$254","_el$256","_tmpl$88","n","ms","abs","unit","toFixed","line","done","setDone","_el$257","_tmpl$89","navigator","clipboard","writeText","_el$258","_tmpl$90","_el$259","_el$261","_el$262","dir","setDir","entries","setEntries","setName","setProvider","setModel","err","setErr","browse","create","_el$263","_tmpl$92","_el$264","_el$267","_el$268","_el$269","_el$270","_el$271","_el$272","_el$274","_el$275","_el$277","_el$280","_el$282","_el$283","_tmpl$93","_el$285","_el$281","_tmpl$91","provText","setProvText","fromEntries","baseUrl","apiKey","setDefaultProvider","intervalMin","setIntervalMin","progressIntervalMs","tasksText","setTasksText","save","_el$286","_tmpl$94","_el$287","_el$291","_el$290","_el$292","_el$293","_el$295","_el$298","_el$299","_el$301","_el$303","configPath","_el$302","_$delegateEvents","render"],"ignoreList":[0,1],"sources":["../../node_modules/.pnpm/solid-js@1.9.15/node_modules/solid-js/dist/solid.js","../../node_modules/.pnpm/solid-js@1.9.15/node_modules/solid-js/web/dist/web.js","../../frontend/md.js","../../frontend/App.tsx","../../frontend/index.tsx"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port1 = channel.port1,\n port = channel.port2;\n if (typeof port1.unref === \"function\") port1.unref();\n if (typeof port.unref === \"function\") port.unref();\n scheduleCallback = () => port.postMessage(null);\n port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (Owner) onCleanup(() => {\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n if (Transition && pr) Transition.promises.delete(pr);\n pr = null;\n });\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n if (Transition && Transition.running) c.tState = STALE;else c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const observers = this.observers;\n if (!observers || observers[observers.length - 1] !== Listener) {\n const sSlot = observers ? observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n if (!Transition.sources.has(node)) node.value = nextValue;\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const sourceFn = c.fn;\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);\n onCleanup(() => ordinary.dispose());\n let inTransition;\n let trackedOrdinary = false;\n const triggerInTransition = () => startTransition(trigger).then(() => {\n if (inTransition) {\n inTransition.dispose();\n inTransition = undefined;\n if (!trackedOrdinary) trigger();\n }\n });\n c.fn = x => {\n track();\n if (Transition && Transition.running) {\n if (!inTransition) inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);\n return inTransition.track(x);\n }\n trackedOrdinary = true;\n return ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n if (Array.isArray(result)) {\n if (result.length < 32768) results.push.apply(results, result);else for (let j = 0; j < result.length; j++) results.push(result[j]);\n } else {\n results.push(result);\n }\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const claimed = new Set();\n const res = keys.map(k => {\n const owned = k.filter(property => !claimed.has(property) && (claimed.add(property), true));\n return new Proxy({\n get(property) {\n return owned.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return owned.includes(property) && property in props;\n },\n keys() {\n return owned.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const load = () => {\n if (!p) {\n const cur = p = fn();\n cur.then(mod => {\n comp = () => mod.default;\n }, () => {\n if (p === cur) p = undefined;\n });\n }\n return p;\n };\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n load().then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n }, err => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => () => {\n throw err;\n });\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => load().then(mod => mod.default));\n comp = s;\n onCleanup(() => comp = undefined);\n }\n let Comp;\n return createMemo(() => (Comp = comp?.()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => load();\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, sharedConfig, createRenderEffect, createRoot, untrack, splitProps, getOwner, createEffect, runWithOwner, createSignal, onCleanup, enableHydration } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n if ((name === \"value\" || name === \"defaultValue\") && (node.nodeName === \"INPUT\" || node.nodeName === \"TEXTAREA\")) node[name] = value ?? \"\";else node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else if ((prop === \"value\" || prop === \"defaultValue\") && (node.nodeName === \"INPUT\" || node.nodeName === \"TEXTAREA\"))\n node[propAlias || prop] = value ?? \"\";else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.contains(container) && el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","/**\n * Tiny dependency-free Markdown renderer (plain ES module, no build step).\n * Strategy: escape ALL HTML first, then apply a small set of block/inline\n * rules on the escaped text. Output is XSS-safe because raw <,>,& in input\n * can never survive as markup.\n *\n * Blocks: fenced code · headings #–###### · ul/ol incl. one-level nesting &\n * task items · GFM pipe tables (alignment, escaped pipes) · blockquotes ·\n * horizontal rules · paragraphs.\n * Inline: code spans (protected), images, links, bare autolinks, ***bold-\n * italic***, **bold**, __bold__, *em*, _em_, ~~strike~~.\n */\nconst LIST_ITEM = /^(\\s*)([-*+]|\\d+[.)])\\s+(.*)$/;\n\n/** Public entry: escape everything up front, then structure the lines. */\nexport function renderMarkdown(src) {\n return renderEscaped(escapeHtml(src.replace(/\\r\\n/g, \"\\n\")).split(\"\\n\"));\n}\n\n/**\n * Structure already-escaped lines into HTML. Blockquote recursion calls this\n * directly so inner content is never double-escaped.\n */\nfunction renderEscaped(lines) {\n const out = [];\n let i = 0;\n while (i < lines.length) {\n const line = lines[i];\n // fenced code block\n if (/^```\\w*\\s*$/.test(line)) {\n const buf = [];\n i++;\n while (i < lines.length && !/^```\\s*$/.test(lines[i])) buf.push(lines[i++]);\n i++; // closing fence\n out.push(`<pre><code>${buf.join(\"\\n\")}</code></pre>`);\n continue;\n }\n // horizontal rule (before list: *** / --- would otherwise look like items)\n if (/^ {0,3}(?:-{3,}|\\*{3,}|_{3,})\\s*$/.test(line)) {\n out.push(\"<hr>\");\n i++;\n continue;\n }\n // heading (# through ###### → h1–h6)\n const h = line.match(/^(#{1,6})\\s+(.*)$/);\n if (h) {\n out.push(`<h${h[1].length}>${inline(h[2])}</h${h[1].length}>`);\n i++;\n continue;\n }\n // blockquote (recursive → nested quotes/lists/tables all work);\n // escapeHtml turned \">\" into \"&gt;\", so match the escaped marker\n if (/^\\s*&gt;/.test(line)) {\n const buf = [];\n while (i < lines.length && /^\\s*&gt;/.test(lines[i])) buf.push(lines[i++].replace(/^\\s*&gt;\\s?/, \"\"));\n out.push(`<blockquote>${renderEscaped(buf)}</blockquote>`);\n continue;\n }\n // table (GFM): header row containing |, then a --- separator row\n if (line.includes(\"|\") && i + 1 < lines.length && isSeparatorRow(lines[i + 1])) {\n const align = splitRow(lines[i + 1]).map((c) =>\n c.startsWith(\":\") && c.endsWith(\":\") ? \"center\" : c.endsWith(\":\") ? \"right\" : \"left\",\n );\n const head = splitRow(line);\n i += 2;\n const rows = [];\n while (i < lines.length && /\\S/.test(lines[i]) && lines[i].includes(\"|\")) {\n rows.push(splitRow(lines[i]));\n i++;\n }\n const cell = (c, idx, tag) => {\n const a = align[idx];\n const style = a && a !== \"left\" ? ` style=\"text-align:${a}\"` : \"\";\n return `<${tag}${style}>${inline(c)}</${tag}>`;\n };\n out.push(\n `<div class=\"tbl\"><table><thead><tr>${head.map((c, k) => cell(c, k, \"th\")).join(\"\")}</tr></thead>` +\n `<tbody>${rows.map((r) => `<tr>${r.map((c, k) => cell(c, k, \"td\")).join(\"\")}</tr>`).join(\"\")}</tbody></table></div>`,\n );\n continue;\n }\n // list (ul/ol, task items, one level of nesting via indentation)\n if (LIST_ITEM.test(line)) {\n out.push(parseList(indentOf(line.match(LIST_ITEM)[1])));\n continue;\n }\n // blank line\n if (/^\\s*$/.test(line)) {\n i++;\n continue;\n }\n // paragraph\n const para = [];\n while (\n i < lines.length &&\n !/^\\s*$/.test(lines[i]) &&\n !/^#{1,6}\\s/.test(lines[i]) &&\n !/^```/.test(lines[i]) &&\n !/^ {0,3}(?:-{3,}|\\*{3,}|_{3,})\\s*$/.test(lines[i]) &&\n !/^\\s*&gt;/.test(lines[i]) &&\n !LIST_ITEM.test(lines[i]) &&\n !(lines[i].includes(\"|\") && i + 1 < lines.length && isSeparatorRow(lines[i + 1]))\n ) {\n para.push(lines[i++]);\n }\n out.push(`<p>${para.map(inline).join(\"<br>\")}</p>`);\n }\n return out.join(\"\\n\");\n\n function indentOf(ws) {\n return ws.replace(/\\t/g, \" \").length;\n }\n\n /** Consumes list lines from i onward; returns HTML. One nesting level. */\n function parseList(minIndent) {\n let ordered = null;\n const items = [];\n while (i < lines.length) {\n const m = lines[i].match(LIST_ITEM);\n if (!m) break;\n const ind = indentOf(m[1]);\n if (ind < minIndent) break;\n const ol = /^\\d/.test(m[2]);\n if (ordered === null) ordered = ol;\n else if (ol !== ordered) break; // marker type changed → close this list\n i++;\n let body = m[3];\n // folded continuation lines (wrapped text belonging to this item)\n while (\n i < lines.length &&\n /\\S/.test(lines[i]) &&\n !LIST_ITEM.test(lines[i]) &&\n !/^#{1,6}\\s/.test(lines[i]) &&\n !/^```/.test(lines[i]) &&\n !/^\\s*&gt;/.test(lines[i])\n ) {\n body += \" \" + lines[i].trim();\n i++;\n }\n // nested list deeper-indented than this item?\n let sub = \"\";\n const n = lines[i]?.match(LIST_ITEM);\n if (n && indentOf(n[1]) > ind) sub = parseList(indentOf(n[1]));\n // task-list checkbox\n const task = body.match(/^\\[( |x|X)\\]\\s+(.*)$/);\n const box = task\n ? `<input type=\"checkbox\" disabled${task[1].toLowerCase() === \"x\" ? \" checked\" : \"\"}> `\n : \"\";\n items.push(`<li>${box}${inline(task ? task[2] : body)}${sub}</li>`);\n }\n return ordered ? `<ol>${items.join(\"\")}</ol>` : `<ul>${items.join(\"\")}</ul>`;\n }\n\n function inline(s) {\n // protect code spans from further processing\n const codes = [];\n s = s.replace(/`([^`]+)`/g, (_, c) => {\n codes.push(`<code>${c}</code>`);\n return `\\u0000${codes.length - 1}\\u0000`;\n });\n // images before links\n s = s.replace(\n /!\\[([^\\]]*)\\]\\((https?:\\/\\/[^)\\s]+)(?:\\s+&quot;[^)]*&quot;)?\\)/g,\n '<img src=\"$2\" alt=\"$1\" loading=\"lazy\">',\n );\n s = s.replace(\n /\\[([^\\]]+)\\]\\((https?:\\/\\/[^)\\s]+)(?:\\s+&quot;[^)]*&quot;)?\\)/g,\n '<a href=\"$2\" rel=\"noopener noreferrer\" target=\"_blank\">$1</a>',\n );\n // bare autolinks (skip anything already inside an attribute/text)\n s = s.replace(\n /(?<![\"'=\\w])(https?:\\/\\/[^\\s<>\"')\\]]*[^\\s<>\"')\\].,;:!?\"')\\]])/g,\n '<a href=\"$1\">$1</a>',\n );\n // emphasis — triple first, then bold, then italic; permissive about inner\n // spaces so half-written streaming text and \"** spaced **\" both work\n s = s.replace(/\\*\\*\\*([\\s\\S]+?)\\*\\*\\*/g, \"<strong><em>$1</em></strong>\");\n s = s.replace(/\\*\\*([\\s\\S]+?)\\*\\*/g, \"<strong>$1</strong>\");\n s = s.replace(/(^|[^\\w])__(?=\\S)([\\s\\S]*?\\S)__(?!\\w)/g, \"$1<strong>$2</strong>\");\n s = s.replace(/(^|[^\\w*])\\*(?!\\s)([^*\\n]+?)\\*(?![\\w*])/g, \"$1<em>$2</em>\");\n s = s.replace(/(^|[^\\w])_(?!\\s)([^_\\n]+?)_(?!\\w)/g, \"$1<em>$2</em>\");\n s = s.replace(/~~([\\s\\S]+?)~~/g, \"<del>$1</del>\");\n return s.replace(/\\u0000(\\d+)\\u0000/g, (_, k) => codes[+k]);\n }\n}\n\n/** Split a table row on unescaped pipes; `\\|` becomes a literal pipe. */\nfunction splitRow(line) {\n let s = line.trim();\n if (s.startsWith(\"|\")) s = s.slice(1);\n const cells = [];\n let cur = \"\";\n for (let k = 0; k < s.length; k++) {\n if (s[k] === \"\\\\\" && s[k + 1] === \"|\") {\n cur += \"|\";\n k++;\n continue;\n }\n if (s[k] === \"|\" && k === s.length - 1) break; // trailing pipe\n if (s[k] === \"|\") {\n cells.push(cur.trim());\n cur = \"\";\n continue;\n }\n cur += s[k];\n }\n cells.push(cur.trim());\n return cells.filter((c, idx) => !(c === \"\" && idx === cells.length - 1 && s.endsWith(\"|\")));\n}\n\n/** `| --- | :--: |` — the second row of a GFM table. */\nfunction isSeparatorRow(line) {\n const s = line.trim();\n if (!s.includes(\"|\") || !s.includes(\"-\")) return false;\n const cells = splitRow(s);\n return cells.every((c) => /^:?-+:?$/.test(c)) && cells.some((c) => c !== \"\");\n}\n\nfunction escapeHtml(s) {\n return s\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n","import { createSignal, onMount, onCleanup, For, Show, createMemo, createEffect } from \"solid-js\";\nimport { renderMarkdown } from \"./md\";\nimport \"@xterm/xterm/css/xterm.css\";\n\n/* ---------- types ---------- */\ninterface Agent {\n id: string; status: string; statusReason: string; workspace: string;\n session: string; branch: string; goal: { status: string; text: string };\n latestProgress: any; stats: any; model: string; provider?: string;\n pendingPrompts?: number;\n todo?: string;\n ctx?: { usedTokens: number; compactAt: number; window: number };\n}\ninterface Ev {\n id: string; seq: number; ts: string; session: string; branch: string;\n type: string; parent: string | null; data: any;\n}\n\nconst AUTHORS: Record<string, { name: string; icon: string; color: string }> = {\n prompt: { name: \"you\", icon: \"🟧\", color: \"#faa81a\" },\n user: { name: \"you\", icon: \"🟧\", color: \"#faa81a\" },\n message: { name: \"agent\", icon: \"🫖\", color: \"#5865f2\" },\n progress: { name: \"progress\", icon: \"📈\", color: \"#3ba55d\" },\n};\nconst HARNESS_AUTH = { name: \"harness\", icon: \"📣\", color: \"#3ba55d\" };\n\n/** author for an event — tool rows are named after the tool itself */\nconst authorOf = (e: Ev) => {\n if (e.type === \"tool_call\" || e.type === \"tool_result\")\n return { name: String(e.data?.name ?? \"tool\"), icon: \"⚙\", color: \"#3ba0c9\" };\n if (e.type === \"prompt\") {\n const src = String(e.data?.source ?? \"user\");\n if (src === \"user\") return AUTHORS.prompt;\n return src.startsWith(\"scheduler:\") ? { name: src.slice(10), icon: \"📣\", color: \"#3ba55d\" } : HARNESS_AUTH;\n }\n return AUTHORS[e.type] ?? { name: e.type, icon: \"•\", color: \"#9298a5\" };\n};\n\n// state/error/fork/goal render as dividers or embeds inside the feed\nconst FEED_TYPES = new Set([\n \"user\", \"message\", \"prompt\", \"tool_call\", \"tool_result\", \"progress\",\n \"state\", \"error\", \"fork\", \"goal\", \"todo\",\n]);\nconst fmtTs = (iso: string) => {\n const d = new Date(iso);\n return `${String(d.getHours()).padStart(2, \"0\")}:${String(d.getMinutes()).padStart(2, \"0\")}`;\n};\n\nasync function api(path: string, opts?: RequestInit) {\n const token = localStorage.getItem(\"teapot.token\");\n const headers = new Headers(opts?.headers);\n if (token && !headers.has(\"authorization\")) headers.set(\"authorization\", `Bearer ${token}`);\n const res = await fetch(path, { ...opts, headers });\n if (!res.ok) {\n let detail = \"\";\n try { detail = (await res.json())?.error ?? \"\"; } catch { /* not json */ }\n throw new Error(detail || `${path}: HTTP ${res.status}`);\n }\n return res.json();\n}\n\n// TEAPOT_API_TOKEN flow: open the UI as http://host/#token=<secret> once —\n// it is stored and stripped from the URL, then attached to every request.\nconst hashTok = location.hash.match(/[#&]token=([^&]+)/);\nif (hashTok) {\n localStorage.setItem(\"teapot.token\", decodeURIComponent(hashTok[1]));\n history.replaceState(null, \"\", location.pathname + location.search);\n}\nconst wsTokenQuery = () => {\n const t = localStorage.getItem(\"teapot.token\");\n return t ? `?token=${encodeURIComponent(t)}` : \"\";\n};\n\n/* ---------- app ---------- */\nexport default function App() {\n const [agents, setAgents] = createSignal<Agent[]>([]);\n const [selected, setSelected] = createSignal<string | null>(null);\n const [events, setEvents] = createSignal<Ev[]>([]);\n const [eventsTotal, setEventsTotal] = createSignal(0); // server-side count (window is capped)\n const [branches, setBranches] = createSignal<any[]>([]);\n const [metrics, setMetrics] = createSignal<any>(null);\n const [draft, setDraft] = createSignal(\"\");\n // persisted: \"0\" means the user explicitly turned auto-start off\n const [autoStart, setAutoStart] = createSignal(localStorage.getItem(\"teapot.autostart\") !== \"0\");\n const setAutoStartPersist = (v: boolean) => {\n setAutoStart(v);\n localStorage.setItem(\"teapot.autostart\", v ? \"1\" : \"0\");\n };\n const [cfg, setCfg] = createSignal<any>({ providers: {} });\n const [showNew, setShowNew] = createSignal(false);\n const [showCfg, setShowCfg] = createSignal(false);\n const [showRight, setShowRight] = createSignal(\n localStorage.getItem(\"teapot.panel\") !== null\n ? localStorage.getItem(\"teapot.panel\") === \"1\"\n : window.innerWidth > 1100,\n );\n const toggleRight = () => {\n const next = !showRight();\n setShowRight(next);\n localStorage.setItem(\"teapot.panel\", next ? \"1\" : \"0\");\n };\n // model switcher state\n const [modelProvider, setModelProvider] = createSignal(\"\");\n const [modelDraft, setModelDraft] = createSignal(\"\");\n const [models, setModels] = createSignal<string[]>([]);\n const providerList = () => Object.keys(cfg().providers ?? {});\n async function loadModels(prov: string) {\n if (!prov) return;\n try {\n const r = await api(`/api/models?provider=${encodeURIComponent(prov)}`);\n setModels(r.models ?? []);\n } catch { setModels([]); }\n }\n // keep the switcher aligned with the selected session\n createEffect(() => {\n const a = sel();\n if (!a) return;\n setModelProvider(a.provider || cfg().defaultProvider || providerList()[0] || \"\");\n setModelDraft(\"\");\n loadModels(modelProvider());\n });\n // autoscroll: follow the tail only while the reader is already at the bottom\n const [atBottom, setAtBottom] = createSignal(true);\n const [missed, setMissed] = createSignal(0);\n const [live, setLive] = createSignal<{ text: string; reasoning: string } | null>(null);\n // markdown-rendered live body, throttled so per-chunk deltas don't re-parse\n // the whole (growing) text on every single WS message\n const [liveText, setLiveText] = createSignal(\"\");\n let liveRenderTimer: ReturnType<typeof setTimeout> | undefined;\n createEffect(() => {\n const l = live();\n if (!l) {\n clearTimeout(liveRenderTimer);\n liveRenderTimer = undefined;\n setLiveText(\"\");\n return;\n }\n if (liveRenderTimer) return; // a render is already scheduled\n liveRenderTimer = setTimeout(() => {\n liveRenderTimer = undefined;\n setLiveText(live()?.text ?? \"\");\n }, 60);\n });\n onCleanup(() => clearTimeout(liveRenderTimer));\n\n // NOTE: createMemo factories run IMMEDIATELY at declaration — anything they\n // read must be declared ABOVE them (createEffect is deferred, memos are not)\n const sel = createMemo(() => agents().find((a) => a.id === selected()));\n // prompt being edited → edit-prompt fork dialog\n const [editing, setEditing] = createSignal<{ eventId: string; text: string } | null>(null);\n // optimistic echoes of prompts we just sent but haven't seen in the log yet\n const [pendingMsgs, setPendingMsgs] = createSignal<{ id: string; text: string; at: number }[]>([]);\n\n // pair tool_call events with their (possibly still missing) results:\n // consumed results are hidden from the feed, calls render as one merged row\n // that shows \"running…\" until its result lands\n const pairInfo = createMemo(() => {\n const resFor = new Map<string, Ev>();\n const consumed = new Set<string>();\n const awaiting = new Map<string, Ev[]>();\n for (const e of events()) {\n if (!FEED_TYPES.has(e.type)) continue;\n if (e.type === \"tool_call\") {\n const q = awaiting.get(e.data.callId) ?? [];\n q.push(e);\n awaiting.set(e.data.callId, q);\n } else if (e.type === \"tool_result\") {\n const call = awaiting.get(e.data.callId)?.shift();\n if (call) {\n resFor.set(call.id, e);\n consumed.add(e.id);\n }\n }\n }\n return { resFor, consumed };\n });\n const chatEvents = createMemo(() => {\n const { consumed } = pairInfo();\n const real = events().filter((e) => {\n if (!FEED_TYPES.has(e.type)) return false;\n // paired tool results live inside their call's merged row\n if (e.type === \"tool_result\") return !consumed.has(e.id);\n // tool-call carrier turns have no visible payload — the ToolRow below\n // already tells that story; an empty agent bubble is just noise\n if (e.type === \"message\")\n return (\n String(e.data?.content ?? \"\").trim() !== \"\" ||\n String(e.data?.reasoning ?? \"\").trim() !== \"\" ||\n !!e.data?.final\n );\n return true;\n });\n // append optimistic echoes not yet present in the log\n const pend = pendingMsgs().filter(\n (p) =>\n !real.some(\n (e) =>\n e.type === \"prompt\" &&\n e.data?.source === \"user\" &&\n e.data?.text === p.text &&\n new Date(e.ts).getTime() >= p.at - 1000,\n ),\n );\n const echoes: Ev[] = pend.map((p) => ({\n id: p.id,\n seq: 0,\n ts: new Date(p.at).toISOString(),\n session: sel()?.session ?? \"\",\n branch: sel()?.branch ?? \"br0\",\n parent: null,\n type: \"prompt\",\n data: { source: \"user\", text: p.text, pending: true },\n }));\n return [...real, ...echoes];\n });\n const loadCfg = () => api(\"/api/config\").then(setCfg).catch(() => {});\n\n // operator task list draft — seeded per selected agent; while the user\n // hasn't touched it, it follows server updates (the agent edits it too)\n const [todoDraft, setTodoDraft] = createSignal(\"\");\n const [todoDirty, setTodoDirty] = createSignal(false);\n let todoSeededFor = \"\";\n createEffect(() => {\n const id = selected();\n const serverTodo = agents().find((a) => a.id === id)?.todo ?? \"\";\n if (id && id !== todoSeededFor) {\n todoSeededFor = id;\n setTodoDirty(false);\n setTodoDraft(serverTodo);\n } else if (id && !todoDirty()) {\n setTodoDraft(serverTodo); // stay current with agent-side set_todo edits\n }\n });\n const saveTodo = async () => {\n const notify = (document.getElementById(\"todo-notify\") as HTMLInputElement)?.checked ?? true;\n if (!selected()) return;\n try {\n await api(`/api/agents/${selected()}/todo`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text: todoDraft(), notify }),\n });\n setTodoDirty(false);\n flashHint(`tasks saved${notify && todoDraft().trim() ? \" & notification queued\" : \"\"}`);\n refreshAgents();\n } catch (ex) {\n flashHint(`save failed: ${(ex as Error).message}`);\n }\n };\n\n const refreshAgents = () => api(\"/api/agents\").then((d) => setAgents(d.agents)).catch(() => {});\n const refreshMetrics = () => api(\"/api/metrics\").then(setMetrics).catch(() => {});\n\n // scheduled (cron) tasks — shown in the right panel so \"what runs when\" is legible\n const [tasks, setTasks] = createSignal<any[]>([]);\n const loadTasks = () => api(\"/api/tasks\").then((d) => setTasks(d.tasks)).catch(() => {});\n const agentTasks = (id: string | null) => tasks().filter((t) => t.agent === id);\n\n // null = show everything; otherwise only the chosen branch's events\n const [branchFilter, setBranchFilter] = createSignal<string | null>(null);\n async function loadEvents(id: string) {\n try {\n const bf = branchFilter();\n const [ev, br] = await Promise.all([\n api(`/api/agents/${id}/events?limit=300${bf ? `&branch=${encodeURIComponent(bf)}` : \"\"}`),\n api(`/api/agents/${id}/branches`),\n ]);\n setEvents(ev.events);\n setEventsTotal(ev.total ?? ev.events.length);\n setBranches(br.branches);\n } catch { /* agent may be gone */ }\n }\n\n function feedEl() { return document.querySelector(\".feed\"); }\n function nearBottom() {\n const f = feedEl();\n return !f || f.scrollHeight - f.scrollTop - f.clientHeight < 80;\n }\n function scrollBottom(force = false) {\n const f = feedEl();\n if (f && (force || atBottom())) {\n f.scrollTop = f.scrollHeight;\n setMissed(0);\n }\n }\n\n async function select(id: string, push = true) {\n setSelected(id);\n setLive(null);\n setBranchFilter(null);\n setPendingMsgs([]);\n localStorage.setItem(\"teapot.session\", id);\n navigate(id, push);\n // lazy sessions sit in \"stopped\" until touched — clicking loads them\n api(`/api/agents/${id}/load`, { method: \"POST\" }).then(refreshAgents).catch(() => {});\n await loadEvents(id);\n requestAnimationFrame(() => scrollBottom(true));\n }\n\n /* ---------- realtime over WebSocket (auto-reconnect) ---------- */\n const [connected, setConnected] = createSignal(false);\n let ws: WebSocket | null = null;\n let timer: ReturnType<typeof setTimeout> | null = null;\n onCleanup(() => ws?.close());\n function connectWs() {\n const proto = location.protocol === \"https:\" ? \"wss://\" : \"ws://\";\n ws = new WebSocket(`${proto}${location.host}/api/ws${wsTokenQuery()}`);\n ws.onopen = () => setConnected(true);\n ws.onclose = () => {\n setConnected(false);\n setTimeout(connectWs, 1500); // reconnect with a fixed short backoff\n };\n ws.onerror = () => ws?.close();\n // event types that don't change the feed — refreshing on every one of\n // these would hammer /events several times per turn for nothing\n const FEED_IRRELEVANT = new Set([\"state\", \"usage\", \"session_start\"]);\n // last streaming delta per agent — decides whether the live bubble is\n // still generating or already fully persisted\n let lastDelta: { id: string; at: number } | null = null;\n ws.onmessage = (m) => {\n const msg = JSON.parse(m.data);\n if (msg.kind === \"ping\" || msg.kind === \"pong\") return;\n if (msg.kind === \"llm-delta\") {\n lastDelta = { id: msg.agentId, at: Date.now() };\n if (msg.agentId === selected()) setLive({ text: msg.text ?? \"\", reasoning: msg.reasoning ?? \"\" });\n return;\n }\n if (msg.kind === \"event\" && FEED_IRRELEVANT.has(msg.event?.type)) return;\n if (timer) return;\n timer = setTimeout(async () => {\n timer = null;\n await refreshAgents();\n await refreshMetrics();\n if (selected()) {\n // compare last event ID, not array length: the /events window is\n // capped at 300, so long sessions have a CONSTANT length and a\n // length check never noticed new events (leaving the live bubble\n // blinking forever after the agent went idle)\n const beforeId = events().at(-1)?.id;\n const beforeTotal = eventsTotal();\n const fetchStartedAt = Date.now();\n await loadEvents(selected()!);\n if (events().at(-1)?.id !== beforeId) {\n // keep the bubble only if THIS agent streamed a delta after the\n // fetch started (i.e. the bubble shows something newer than\n // everything persisted). Otherwise it must go — otherwise a\n // stale \"thinking…\"/duplicate bubble outlives an idle agent.\n const stillStreaming = lastDelta?.id === selected() && lastDelta.at >= fetchStartedAt;\n if (!stillStreaming) setLive(null);\n if (nearBottom()) scrollBottom(true);\n else setMissed(missed() + Math.max(0, eventsTotal() - beforeTotal));\n }\n // drop optimistic echoes that the log has now caught up with\n setPendingMsgs((list) =>\n list.filter(\n (p) =>\n !events().some(\n (e) =>\n e.type === \"prompt\" &&\n e.data?.text === p.text &&\n new Date(e.ts).getTime() >= p.at - 1000,\n ),\n ),\n );\n }\n }, 400);\n };\n }\n\n /* ---------- /session/<id> routing ---------- */\n const pathId = () => decodeURIComponent(location.pathname.split(\"/\")[2] ?? \"\");\n function navigate(id: string, push = true) {\n const url = `/session/${encodeURIComponent(id)}`;\n if (push) history.pushState(null, \"\", url);\n else history.replaceState(null, \"\", url);\n }\n window.addEventListener(\"popstate\", () => {\n const id = pathId();\n if (id && agents().some((a) => a.id === id) && id !== selected()) select(id, false);\n });\n\n /* ---------- small UX niceties ---------- */\n createEffect(() => {\n const a = sel();\n document.title = a ? `${a.status === \"running\" ? \"▶ \" : a.status === \"error\" ? \"⚠ \" : \"\"}${a.id} · teapot` : \"teapot\";\n });\n window.addEventListener(\"keydown\", (e) => {\n const t = e.target as HTMLElement | null;\n const typing = !!t && (t.tagName === \"INPUT\" || t.tagName === \"TEXTAREA\" || t.isContentEditable);\n if (typing) {\n if (e.key === \"Escape\") (t as HTMLElement).blur();\n return;\n }\n if (e.key === \"Escape\") {\n if (showNew()) { setShowNew(false); return; }\n if (showCfg()) { setShowCfg(false); return; }\n const s = sel();\n if (s?.status === \"running\") {\n // Claude-Code-style: Esc interrupts the running agent\n api(`/api/agents/${s.id}/stop`, { method: \"POST\" }).then(refreshAgents);\n return;\n }\n if (showRight() && window.innerWidth <= 1100) setShowRight(false);\n return;\n }\n if (showNew() || showCfg()) return;\n if (e.key === \"/\") {\n e.preventDefault();\n document.querySelector<HTMLTextAreaElement>(\".composer textarea\")?.focus();\n } else if (e.key === \"d\") {\n toggleRight();\n } else if (e.key === \"t\") {\n toggleTerm();\n } else if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n const list = agents();\n if (list.length === 0) return;\n e.preventDefault();\n const idx = list.findIndex((a) => a.id === selected());\n const next = e.key === \"ArrowDown\" ? Math.min(idx + 1, list.length - 1) : Math.max(idx - 1, 0);\n if (next !== idx) select(list[next].id);\n }\n });\n\n /* ---------- human terminal (bottom drawer, xterm.js over WS) ---------- */\n const [termOpen, setTermOpen] = createSignal(localStorage.getItem(\"teapot.term\") === \"1\");\n const toggleTerm = () => {\n const next = !termOpen();\n setTermOpen(next);\n localStorage.setItem(\"teapot.term\", next ? \"1\" : \"0\");\n };\n let termHost: HTMLDivElement | null = null;\n let xterm: any = null;\n let fitAddon: any = null;\n let termWs: WebSocket | null = null;\n let ro: ResizeObserver | null = null;\n let lastResize = { cols: 0, rows: 0 };\n let resizeTimer: ReturnType<typeof setTimeout> | null = null;\n\n function closeTerm() {\n ro?.disconnect();\n ro = null;\n termWs?.close();\n termWs = null;\n xterm?.dispose();\n xterm = null;\n fitAddon = null;\n }\n function openTerm(agentId: string) {\n closeTerm();\n if (!termHost) return;\n Promise.all([import(\"@xterm/xterm\"), import(\"@xterm/addon-fit\")]).then(\n ([{ Terminal }, { FitAddon }]) => {\n const t = new Terminal({\n cursorBlink: true,\n fontSize: 12.5,\n fontFamily: 'ui-monospace, Menlo, Consolas, monospace',\n theme: { background: \"#0d0e12\", foreground: \"#dcdee4\" },\n });\n const f = new FitAddon();\n t.loadAddon(f);\n t.open(termHost!);\n f.fit();\n xterm = t;\n fitAddon = f;\n const proto = location.protocol === \"https:\" ? \"wss://\" : \"ws://\";\n const w = new WebSocket(`${proto}${location.host}/api/agents/${agentId}/term${wsTokenQuery()}`);\n termWs = w;\n w.onmessage = (m) => {\n const msg = JSON.parse(m.data);\n if (msg.kind === \"data\") t.write(msg.data);\n else if (msg.kind === \"exit\") t.write(`\\r\\n\\x1b[2m[terminal exited ${msg.code ?? \"\"}]\\x1b[0m\\r\\n`);\n };\n t.onData((d) => {\n if (w.readyState === WebSocket.OPEN) w.send(JSON.stringify({ kind: \"input\", data: d }));\n });\n const pushResize = () => {\n try { f.fit(); } catch { /* host hidden */ }\n const { cols, rows } = t;\n if ((cols !== lastResize.cols || rows !== lastResize.rows) && w.readyState === WebSocket.OPEN) {\n lastResize = { cols, rows };\n w.send(JSON.stringify({ kind: \"resize\", cols, rows }));\n }\n };\n ro = new ResizeObserver(() => {\n if (resizeTimer) clearTimeout(resizeTimer);\n resizeTimer = setTimeout(pushResize, 300); // debounce: stty injection is visible\n });\n ro.observe(termHost!);\n setTimeout(pushResize, 50);\n },\n );\n }\n createEffect(() => {\n const id = selected();\n const open = termOpen();\n if (!open || !id) closeTerm();\n else requestAnimationFrame(() => id && openTerm(id));\n });\n onCleanup(closeTerm);\n\n onMount(() => {\n loadCfg();\n refreshAgents().then(() => {\n // deep link → last session → first agent\n const want = pathId() || localStorage.getItem(\"teapot.session\") || \"\";\n const initial = agents().find((a) => a.id === want) ?? agents()[0];\n if (initial) select(initial.id, false);\n });\n refreshMetrics();\n loadTasks();\n connectWs();\n const mi = setInterval(() => {\n refreshMetrics();\n loadTasks();\n }, 30_000);\n onCleanup(() => clearInterval(mi));\n });\n\n const [flash, setFlash] = createSignal(\"\");\n let flashTimer: ReturnType<typeof setTimeout> | undefined;\n const flashHint = (msg: string) => {\n setFlash(msg);\n clearTimeout(flashTimer);\n flashTimer = setTimeout(() => setFlash(\"\"), 3200);\n };\n\n const SLASH_COMMANDS = [\n { cmd: \"/start\", desc: \"start working toward the goal\" },\n { cmd: \"/stop\", desc: \"interrupt the running agent\" },\n { cmd: \"/fork\", desc: \"branch the conversation here\" },\n { cmd: \"/goal\", desc: \"/goal <text> — set goal & notify the agent\" },\n ];\n // popup shows while typing the first token of a command\n const filteredCmds = () => {\n const d = draft();\n if (!d.startsWith(\"/\") || d.includes(\" \") || d.includes(\"\\n\")) return [];\n return SLASH_COMMANDS.filter((c) => c.cmd.slice(1).startsWith(d.slice(1).toLowerCase()));\n };\n\n // auto-grow the composer with its content, capped by CSS max-height\n let composerEl: HTMLTextAreaElement | undefined;\n const autosizeComposer = () => {\n if (!composerEl) return;\n composerEl.style.height = \"auto\";\n composerEl.style.height = `${Math.min(composerEl.scrollHeight, 160)}px`;\n };\n createEffect(() => {\n draft(); // re-run on typing AND after send() clears the draft\n autosizeComposer();\n });\n\n const send = async (e: Event) => {\n e.preventDefault();\n const id = selected();\n const text = draft().trim();\n if (!id || !text) return;\n\n // slash commands are client-side operations\n if (text.startsWith(\"/\")) {\n const sp = text.indexOf(\" \");\n const name = (sp === -1 ? text.slice(1) : text.slice(1, sp)).toLowerCase();\n const arg = sp === -1 ? \"\" : text.slice(sp + 1).trim();\n const post = (p: string, body?: unknown) =>\n api(`/api/agents/${id}${p}`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n ...(body !== undefined ? { body: JSON.stringify(body) } : {}),\n }).then(refreshAgents);\n try {\n if (name === \"start\") await post(\"/start\");\n else if (name === \"stop\") await post(\"/stop\");\n else if (name === \"fork\") { await post(\"/fork\", {}); await select(id); }\n else if (name === \"goal\") {\n if (!arg) { flashHint(\"usage: /goal <text>\"); return; }\n await post(\"/goal\", { text: arg, notify: true });\n flashHint(\"goal saved & notification queued\");\n } else {\n flashHint(`unknown command \"${name}\" — /start /stop /fork /goal`);\n return;\n }\n setDraft(\"\");\n } catch (ex) {\n flashHint(`/${name} failed: ${(ex as Error).message}`);\n }\n return;\n }\n\n setDraft(\"\");\n try {\n await api(`/api/agents/${id}/prompt`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text, start: autoStart() }),\n });\n // optimistic echo — replaced by the logged event once the feed catches up\n setPendingMsgs((l) => [...l, { id: `@p${Date.now()}${Math.random().toString(36).slice(2, 6)}`, text, at: Date.now() }]);\n } catch (ex) {\n setDraft(text); // never eat the user's message on a failed send\n console.error(\"send failed:\", ex);\n }\n };\n\n const act = (path: string) =>\n () => selected() && api(`/api/agents/${selected()}${path}`, { method: \"POST\" }).then(refreshAgents);\n\n const setGoal = async (e: Event) => {\n e.preventDefault();\n const input = document.getElementById(\"goal-input\") as HTMLTextAreaElement;\n const notify = (document.getElementById(\"goal-notify\") as HTMLInputElement)?.checked ?? true;\n if (!selected() || !input.value.trim()) return;\n await api(`/api/agents/${selected()}/goal`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ text: input.value, notify }),\n });\n input.value = \"\";\n refreshAgents();\n };\n\n return (\n <>\n <div class={\"layout\" + (showRight() ? \"\" : \" right-hidden\")}>\n {/* ---------- sidebar ---------- */}\n <nav class=\"sidebar\">\n <h1>🫖 teapot\n <span class={\"conn\" + (connected() ? \" ok\" : \"\")} title={connected() ? \"live (websocket)\" : \"reconnecting…\"} />\n <span style=\"float:right;display:flex;gap:4px\">\n <button class=\"iconbtn\" title=\"new agent\" onclick={() => { loadCfg(); setShowNew(true); }}>+</button>\n <button class=\"iconbtn\" title=\"settings\" onclick={() => { loadCfg(); setShowCfg(true); }}>⚙</button>\n </span>\n </h1>\n <div class=\"agent-list\">\n <For each={agents()}>\n {(a) => (\n <div class={\"agent-item\" + (a.id === selected() ? \" sel\" : \"\")} onclick={() => select(a.id)}>\n <span class={`dot ${a.status}`} />\n <span>{a.id}</span>\n <Show when={agentTasks(a.id).length > 0}>\n <span class=\"mini-cron\" title={agentTasks(a.id).map((t) => `${t.id}: ${t.schedule}`).join(\"\\n\")}>⏰</span>\n </Show>\n <Show when={a.goal.status === \"done\"}><span title=\"goal done\">✓</span></Show>\n </div>\n )}\n </For>\n </div>\n <div class=\"metrics\">\n <Show when={metrics()}>\n master rss {metrics().rssMb}MB · heap {metrics().heapUsedMb}MB<br />\n load1 {metrics().loadavg1} · up {Math.floor(metrics().uptimeSec / 60)}m\n </Show>\n </div>\n </nav>\n\n {/* ---------- channel ---------- */}\n <section class=\"channel\">\n <Show when={sel()} fallback={<div style=\"display:grid;place-items:center;height:100%\" class=\"muted\">select an agent</div>}>\n <header class=\"chan-head\">\n <span class=\"hash\">#</span>\n <span class=\"title\">{sel()!.id}</span>\n <span class={`badge ${sel()!.status}`}>{sel()!.status}</span>\n <Show when={(sel()!.pendingPrompts ?? 0) > 0}>\n <span class=\"badge queued\" title={`${sel()!.pendingPrompts} prompt(s) waiting — the agent picks them up at the next turn boundary`}>\n ⏳ {sel()!.pendingPrompts} queued\n </span>\n </Show>\n <Show when={agentTasks(sel()!.id).length > 0}>\n <span class=\"badge cron\" title={`scheduled tasks:\\n${agentTasks(sel()!.id).map((t) => `${t.schedule} · ${t.id}${t.forked ? \" (forked)\" : \"\"}`).join(\"\\n\")}`}>\n ⏰ {agentTasks(sel()!.id).length}\n </span>\n </Show>\n <span class=\"sub\">\n {sel()!.model} · {sel()!.session}/{sel()!.branch} · turns {sel()!.stats.turns} · tools {sel()!.stats.toolCalls}\n </span>\n <span style=\"margin-left:auto;display:flex;gap:4px\">\n <Show when={sel()!.statusReason}>\n <span class=\"sub\" title={sel()!.statusReason}>ℹ</span>\n </Show>\n <button class=\"iconbtn\" title=\"terminal (t)\" onclick={toggleTerm}>⌨</button>\n <button class=\"iconbtn\" title=\"toggle details panel (d)\" onclick={toggleRight}>▤</button>\n </span>\n </header>\n\n <div class=\"feed\" onscroll={() => { const nb = nearBottom(); if (nb && missed()) setMissed(0); setAtBottom(nb); }}>\n <Show when={chatEvents().length > 0} fallback={\n <div style=\"display:grid;place-items:center;height:100%\" class=\"muted\">no events yet — say something or press ▶ start</div>\n }>\n <For each={chatEvents()}>\n {(e, i) => (\n <MessageRow\n e={e}\n prev={chatEvents()[i() - 1]}\n res={pairInfo().resFor.get(e.id)}\n onEdit={\n e.type === \"prompt\" && e.data?.source === \"user\"\n ? () => setEditing({ eventId: e.id, text: String(e.data?.text ?? \"\") })\n : undefined\n }\n />\n )}\n </For>\n <Show when={live()}>\n <div class=\"msg live\">\n <div class=\"avatar\" style=\"background:#5865f233;border:1px solid #5865f266\">🫖</div>\n <div class=\"msg-body\">\n <div class=\"msg-head\">\n <span class=\"author\" style=\"color:var(--acc)\">agent</span>\n <span class=\"ts\">streaming…</span>\n </div>\n <Show when={live()!.reasoning}>\n <details class=\"reasoning\">\n <summary>💭 reasoning</summary>\n <div class=\"mono\">{live()!.reasoning}</div>\n </details>\n </Show>\n <Show\n when={liveText()}\n fallback={<div class=\"content muted\">thinking…</div>}\n >\n <div class=\"content\" innerHTML={renderMarkdown(liveText() + \"▍\")} />\n </Show>\n </div>\n </div>\n </Show>\n </Show>\n </div>\n\n <Show when={!atBottom() || missed() > 0}>\n <button class=\"jump\" onclick={() => scrollBottom(true)}>\n ↓ {missed() > 0 ? `${missed()} new message${missed() > 1 ? \"s\" : \"\"}` : \"jump to present\"}\n </button>\n </Show>\n\n <Show when={termOpen() && sel()}>\n <div class=\"termdrawer\">\n <div class=\"termbar\">\n <span>⌨ terminal — <span class=\"mono\">{sel()!.workspace}</span></span>\n <button class=\"iconbtn\" title=\"close terminal (t)\" onclick={toggleTerm}>✕</button>\n </div>\n <div class=\"termhost\" ref={(el) => (termHost = el)} />\n </div>\n </Show>\n\n <div class=\"composer\">\n <Show when={filteredCmds().length > 0}>\n <div class=\"cmds\">\n <For each={filteredCmds()}>\n {(c) => (\n <div class=\"cmdrow\" title={c.desc} onclick={() => setDraft(c.cmd + \" \")}>\n <b>{c.cmd}</b>\n <span class=\"muted\">{c.desc}</span>\n </div>\n )}\n </For>\n </div>\n </Show>\n <form onsubmit={send}>\n <textarea\n ref={composerEl}\n rows={1}\n placeholder={`message #${sel()!.id} — / for commands`}\n value={draft()}\n oninput={(e) => {\n setDraft(e.currentTarget.value);\n autosizeComposer();\n }}\n onkeydown={(e) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n void send(e);\n }\n }}\n />\n <button type=\"submit\">send</button>\n </form>\n <div class=\"hint\">\n {flash() ||\n \"enter send · shift+enter newline · ↑↓ sessions · / commands & focus · t terminal · d panel · esc interrupt · messages sent while the agent works queue up and land at the next turn boundary\"}\n </div>\n </div>\n </Show>\n </section>\n\n {/* ---------- right bar ---------- */}\n <aside class={\"rightbar\" + (showRight() ? \" open\" : \"\")}>\n <Show when={sel()}>\n <h3>🎛 session</h3>\n <div class=\"card sesscard\">\n <div class=\"sessrow\"><span class=\"k\">agent</span><b>{sel()!.id}</b><span class={`badge ${sel()!.status}`}>{sel()!.status}</span></div>\n <div class=\"sessrow\"><span class=\"k\">workspace</span><span class=\"mono ellip\" title={sel()!.workspace}>{sel()!.workspace}</span></div>\n <div class=\"sessrow\"><span class=\"k\">session</span><span class=\"mono\">{sel()!.session}/{sel()!.branch}</span></div>\n </div>\n\n <h3>🧦 model</h3>\n <div class=\"modelbox\">\n <select\n value={modelProvider()}\n onchange={(e) => { setModelProvider(e.currentTarget.value); loadModels(e.currentTarget.value); }}\n title=\"provider (OpenAI-compatible endpoint)\"\n >\n <For each={providerList()}>{(p) => <option value={p}>{p}{p === cfg().defaultProvider ? \" ★\" : \"\"}</option>}</For>\n </select>\n <div style=\"display:flex;gap:4px\">\n <input\n type=\"text\"\n list=\"model-list\"\n placeholder={sel()!.model}\n value={modelDraft()}\n oninput={(e) => setModelDraft(e.currentTarget.value)}\n style=\"flex:1;min-width:0\"\n />\n <datalist id=\"model-list\">\n <For each={models()}>{(m) => <option value={m} />}</For>\n </datalist>\n <button\n title=\"apply to this session — takes effect from the agent's next turn\"\n onclick={async (e) => {\n if (!selected()) return;\n const btn = e.currentTarget as HTMLButtonElement;\n btn.disabled = true;\n try {\n await api(`/api/agents/${selected()}/model`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ provider: modelProvider(), model: modelDraft().trim() || undefined }),\n });\n btn.textContent = \"✓ applied\";\n refreshAgents();\n } catch (ex) {\n alert(`model switch failed: ${(ex as Error).message}`);\n } finally {\n setTimeout(() => { btn.textContent = \"apply\"; btn.disabled = false; }, 1200);\n }\n }}\n >apply</button>\n </div>\n <div class=\"meta\">current: {sel()!.model}<Show when={models().length}> · {models().length} models loaded</Show></div>\n </div>\n\n <h3>⏯ controls</h3>\n <div class=\"btnrow\">\n <Show\n when={sel()!.status === \"running\"}\n fallback={\n <button class=\"runbtn\" onclick={act(\"/start\")} title=\"run toward the goal (starts the loop)\">\n ▶ start\n </button>\n }\n >\n <button\n class=\"danger\"\n onclick={act(\"/stop\")}\n title=\"interrupt: aborts the current LLM call; the running tool finishes first\"\n >\n ■ stop\n </button>\n </Show>\n <button\n title=\"branch off the conversation here — try things without disturbing the main line\"\n onclick={() => api(`/api/agents/${sel()!.id}/fork`, { method: \"POST\", headers: { \"content-type\": \"application/json\" }, body: \"{}\" }).then(() => select(sel()!.id))}\n >⑂ fork</button>\n <button onclick={async () => {\n const id = selected();\n if (!id || !confirm(`remove agent ${id}? (log is kept)`)) return;\n await api(`/api/agents/${id}`, { method: \"DELETE\" }).catch(() => {});\n const rest = agents().filter((a) => a.id !== id);\n setAgents(rest);\n if (rest[0]) select(rest[0].id);\n else { setSelected(null); setEvents([]); }\n }} title=\"remove agent from teapot (session log stays on disk)\">🗑 remove</button>\n </div>\n <div class=\"ctrlrow\">\n <label\n title=\"after each round the agent keeps working toward its goal without waiting for input; sending a prompt also starts an idle agent\"\n >\n <input\n type=\"checkbox\"\n checked={autoStart()}\n onchange={(e) => setAutoStartPersist(e.currentTarget.checked)}\n />\n auto-continue\n </label>\n <span class=\"muted\">loops while the goal is active</span>\n </div>\n\n <h3>🎯 goal <span class={`badge ${sel()!.goal.status === \"done\" ? \"done\" : \"\"}`}>{sel()!.goal.status}</span></h3>\n <form onsubmit={setGoal} style=\"display:flex;flex-direction:column;gap:6px;margin-bottom:6px\">\n <textarea\n id=\"goal-input\"\n rows={3}\n placeholder=\"set new goal…\"\n style=\"background:var(--bg-darkest);border:none;border-radius:6px;padding:6px 8px;color:var(--fg);font:inherit;width:100%;resize:vertical\"\n />\n <div style=\"display:flex;justify-content:flex-end;align-items:center;gap:10px\">\n <label\n class=\"muted\"\n style=\"display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer\"\n title=\"queue a harness prompt telling the agent about the new goal at its next turn boundary\"\n >\n <input id=\"goal-notify\" type=\"checkbox\" checked /> notify agent\n </label>\n <button type=\"submit\" style=\"background:var(--acc);border:none;border-radius:6px;color:#fff;padding:4px 12px;cursor:pointer\">✓ save</button>\n </div>\n </form>\n <div class=\"card\">{sel()!.goal.text || \"no goal set — the agent has nothing to auto-continue toward\"}</div>\n <div class=\"muted\" style=\"font-size:11px;margin-top:4px\">\n stored with the session · the model reads it via get_goal() ·\n <Show when={sel()!.goal.text && sel()!.goal.status === \"active\"}> auto-continue keeps it working until this is done</Show>\n <Show when={!sel()!.goal.text}> set one and tick ▶ start to begin</Show>\n </div>\n\n <h3>✅ tasks <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· todo.md, editable by you and the agent</span></h3>\n <textarea\n id=\"todo-input\"\n class=\"mono\"\n rows={5}\n placeholder={\"- task one\\n- task two\"}\n value={todoDraft()}\n oninput={(e) => {\n setTodoDraft(e.currentTarget.value);\n setTodoDirty(true);\n }}\n title=\"shared with the agent — it may check items off via set_todo; your unsaved edits win until you save\"\n style=\"width:100%;background:var(--bg-darkest);border:none;border-radius:6px;padding:6px 8px;color:var(--fg);font-family:ui-monospace,Menlo,monospace;font-size:12.5px;resize:vertical\"\n />\n <div style=\"display:flex;justify-content:flex-end;align-items:center;gap:10px;margin-top:4px\">\n <label\n class=\"muted\"\n style=\"display:flex;align-items:center;gap:4px;font-size:11.5px;white-space:nowrap;cursor:pointer\"\n title=\"queue a harness prompt telling the agent the task list changed\"\n >\n <input id=\"todo-notify\" type=\"checkbox\" checked /> notify agent\n </label>\n <button\n onclick={saveTodo}\n style=\"background:var(--ok);border:none;border-radius:6px;color:#fff;padding:4px 12px;cursor:pointer\"\n >✓ save tasks</button>\n </div>\n\n <h3>📈 progress</h3>\n <Show\n when={sel()!.latestProgress}\n fallback={<div class=\"muted\">none yet — the harness asks for a report after real activity, and the agent can report_progress anytime</div>}\n >\n {(p) => (\n <div class=\"card prog\">\n <div class=\"progrow\"><b>doing</b><span>{p().doing}</span></div>\n <Show when={p().recent}><div class=\"progrow\"><b>recent</b><span>{p().recent}</span></div></Show>\n <Show when={p().problems}><div class=\"progrow warn\"><b>⚠ problems</b><span>{p().problems}</span></div></Show>\n <Show when={p().next}><div class=\"progrow\"><b>next</b><span>{p().next}</span></div></Show>\n <Show when={p().goalStatus}><div class=\"progrow\"><b>goal</b><span>{p().goalStatus}</span></div></Show>\n <div class=\"meta muted\">{relTime(p().ts)}</div>\n </div>\n )}\n </Show>\n\n <h3>📊 runtime</h3>\n <div class=\"card muted\">\n turns {sel()!.stats.turns} · tools {sel()!.stats.toolCalls} · compacted {sel()!.stats.compactions ?? 0}\n {\"\\n\"}tokens in/out {fmtK(sel()!.stats.inputTokens)}/{fmtK(sel()!.stats.outputTokens)}\n <Show when={sel()!.stats.cachedInputTokens > 0}>\n {\" · \"}cached {Math.round((sel()!.stats.cachedInputTokens / Math.max(1, sel()!.stats.inputTokens)) * 100)}% ({fmtK(sel()!.stats.cachedInputTokens)})\n </Show>\n <Show when={sel()!.ctx}>\n {(c) => (\n <>\n {\"\\n\"}context ~{fmtK(c().usedTokens)} tok\n <Show when={c().window}> · {Math.min(999, Math.round((c().usedTokens / c().window) * 100))}% of {fmtK(c().window)}</Show>\n {\"\\n\"}compaction at ~{fmtK(c().compactAt)} tok (older turns summarized)\n </>\n )}\n </Show>\n </div>\n\n <h3>🌿 branches <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· click to filter the feed</span></h3>\n <For each={branches()}>\n {(b) => (\n <div\n class={\"branch-row\" + (b.branch === sel()!.branch || b.branch === branchFilter() ? \" cur\" : \"\")}\n title={b.branch === branchFilter() ? \"click to show all branches again\" : `show only ${b.branch}`}\n onclick={() => {\n const next = branchFilter() === b.branch ? null : b.branch;\n setBranchFilter(next);\n if (selected()) loadEvents(selected()!);\n }}\n >\n <span>{b.branch}{b.branch === sel()!.branch ? \" (current)\" : \"\"}</span>\n <span>{b.events} events</span>\n </div>\n )}\n </For>\n\n <h3>⏰ schedule <span class=\"muted\" style=\"text-transform:none;letter-spacing:0\">· cron tasks, all agents · edit in settings</span></h3>\n <Show\n when={tasks().length > 0}\n fallback={<div class=\"muted\">no scheduled tasks — add them in ⚙ settings (\"scheduled tasks\")</div>}\n >\n <For each={tasks()}>\n {(t) => (\n <div\n class={\"sched-row\" + (t.agent === selected() ? \" cur\" : \"\")}\n title={`${oneLine(t.prompt, 200)}\\nclick to open #${t.agent}`}\n onclick={() => select(t.agent)}\n >\n <div class=\"sched-top\">\n <b>{t.id}</b>\n <span class=\"muted\">@{t.agent}</span>\n <Show when={t.forked}><span title=\"runs on a forked branch so chatter stays off the main line\">⑂</span></Show>\n </div>\n <div class=\"sched-meta mono\">\n {t.schedule} → next {t.next ? relTime(t.next) : \"—\"}{t.last ? ` · last ${relTime(t.last)}` : \" · never ran\"}\n </div>\n <div class=\"sched-prompt muted\">{oneLine(t.prompt, 90)}</div>\n </div>\n )}\n </For>\n </Show>\n </Show>\n </aside>\n </div>\n <Show when={showNew()}>\n <NewAgentModal\n providers={Object.keys(cfg().providers ?? {})}\n onClose={() => setShowNew(false)}\n onCreated={(id) => { setShowNew(false); refreshAgents(); select(id); }}\n />\n </Show>\n <Show when={showCfg()}>\n <ConfigModal cfg={cfg()} onClose={() => setShowCfg(false)} onSaved={() => { loadCfg(); loadTasks(); }} />\n </Show>\n <Show when={editing()} fallback={null}>\n {(ed) => {\n const idx = () => events().findIndex((e) => e.id === ed().eventId);\n const afterCount = () => Math.max(0, events().length - idx() - 1);\n const [tail, setTail] = createSignal<\"summarize\" | \"discard\">(afterCount() > 0 ? \"summarize\" : \"discard\");\n return (\n <Modal title=\"edit prompt — forks the conversation\" onClose={() => setEditing(null)}>\n <form\n onsubmit={async (ev) => {\n ev.preventDefault();\n const ta = document.getElementById(\"edit-text\") as HTMLTextAreaElement;\n try {\n await api(`/api/agents/${selected()}/edit-prompt`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ eventId: ed().eventId, text: ta.value, tail: tail() }),\n });\n setEditing(null);\n refreshAgents();\n if (selected()) await select(selected());\n } catch (ex) {\n alert(`edit failed: ${(ex as Error).message}`);\n }\n }}\n style=\"display:flex;flex-direction:column;gap:10px\"\n >\n <textarea id=\"edit-text\" class=\"mono w100\" rows={6} value={ed().text} />\n <Show when={afterCount() > 0}>\n <div>\n <div style=\"font-size:12.5px;margin-bottom:4px\">\n {afterCount()} event(s) came after this prompt — what should happen to them on the new branch?\n </div>\n <label style=\"display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)\">\n <input type=\"radio\" name=\"tail\" checked={tail() === \"summarize\"} onchange={() => setTail(\"summarize\")} />\n summarize them into a note the agent can still read\n </label>\n <label style=\"display:flex;gap:6px;align-items:center;font-size:13px;color:var(--fg)\">\n <input type=\"radio\" name=\"tail\" checked={tail() === \"discard\"} onchange={() => setTail(\"discard\")} />\n discard them entirely (clean timeline)\n </label>\n </div>\n </Show>\n <div style=\"display:flex;justify-content:flex-end;gap:8px\">\n <button type=\"button\" onclick={() => setEditing(null)}>cancel</button>\n <button type=\"submit\" style=\"background:var(--acc);border:none;border-radius:6px;color:#fff;padding:6px 12px;cursor:pointer\">\n ⑂ fork & resend\n </button>\n </div>\n </form>\n </Modal>\n );\n }}\n </Show>\n </>\n );\n}\n\n/* ---------- one chat message row ---------- */\n/* ---------- per-tool timeline rendering ---------- */\n\nfunction ToolRow(props: { e: Ev; res?: Ev }) {\n const e = props.e;\n const res = props.res;\n const d = e.data ?? {};\n const name = String(d.name ?? \"tool\");\n const out = () => (res ? String(res.data?.result ?? \"\") : \"\");\n\n // per-tool summary line: [icon, label, hint]\n let icon = \"⚙\";\n let label = name;\n let hint = \"\";\n let body: any = <div class=\"mono\">{truncate(JSON.stringify(d.args ?? {}, null, 1), 2000)}</div>;\n\n const argStr = (k: string) => String(d.args?.[k] ?? \"\");\n const codeBlock = (text: string, max = 1500) => (\n <pre class=\"mono toolbody\">{truncate(text, max)}</pre>\n );\n const resultBlock = (max = 4000) =>\n res ? (\n <>\n {codeBlock(out(), max)}\n <div class=\"meta\">\n {res.data?.durationMs}ms{res.data?.ok === false ? \" · FAILED\" : \"\"}\n <CopyBtn text={out()} />\n </div>\n </>\n ) : (\n <div class=\"meta\">waiting for output…</div>\n );\n\n try {\n switch (name) {\n case \"bash\": {\n const cmd = argStr(\"command\");\n label = \"$ \" + oneLine(cmd, 96);\n hint = argStr(\"timeout_ms\") ? `timeout ${Math.round(Number(argStr(\"timeout_ms\")) / 1000)}s` : \"\";\n body = (\n <>\n {cmd !== label.slice(2) ? codeBlock(cmd, 800) : null}\n {resultBlock(6000)}\n </>\n );\n break;\n }\n case \"read_file\": {\n label = argStr(\"path\") || \"(no path)\";\n const bits: string[] = [];\n if (argStr(\"pattern\")) bits.push(`grep /${oneLine(argStr(\"pattern\"), 40)}/`);\n if (Number(d.args?.offset) < 0) bits.push(`last ${-Number(d.args.offset)} lines`);\n else if (d.args?.offset) bits.push(`from L${d.args.offset}`);\n if (d.args?.limit) bits.push(`≤${d.args.limit} lines`);\n hint = bits.join(\" · \");\n body = resultBlock(6000);\n break;\n }\n case \"write_file\": {\n const content = String(d.args?.content ?? \"\");\n label = argStr(\"path\") || \"(no path)\";\n hint = `${content.length} bytes`;\n body = (\n <>\n {codeBlock(content)}\n {res ? <div class=\"meta\">{oneLine(out(), 160)}</div> : <div class=\"meta\">writing…</div>}\n </>\n );\n break;\n }\n case \"edit_file\": {\n label = argStr(\"path\") || \"(no path)\";\n hint = d.args?.replace_all === true ? \"replace all\" : \"unique spot\";\n body = (\n <>\n <pre class=\"mono toolbody del\">{truncate(\"- \" + argStr(\"old_text\"), 900)}</pre>\n <pre class=\"mono toolbody add\">{\"+ \" + truncate(argStr(\"new_text\"), 900)}</pre>\n {res ? (\n <div class=\"meta\">\n {oneLine(out(), 120)} · {res.data?.durationMs}ms\n </div>\n ) : (\n <div class=\"meta\">applying…</div>\n )}\n </>\n );\n break;\n }\n case \"apply_patch\": {\n const patchLines = argStr(\"patch\").split(\"\\n\").filter((l) => l && !/^---$/.test(l.trim()));\n const files = patchLines\n .map((l) => l.match(/^\\*\\*\\* (?:Add|Update|Delete) File: (.+)$/)?.[1])\n .filter(Boolean) as string[];\n label = files.length ? `${files.length} file${files.length > 1 ? \"s\" : \"\"}: ${oneLine(files.join(\", \"), 80)}` : \"patch\";\n body = (\n <>\n <pre class=\"mono toolbody patch\">\n {patchLines.map((l) => {\n const cls = l.startsWith(\"+\") ? \" add\" : l.startsWith(\"-\") ? \" del\" : /^\\*\\*\\*|^@@/.test(l) ? \" meta\" : \"\";\n return <div class={\"pline\" + cls}>{l.length > 240 ? l.slice(0, 240) + \"…\" : l}</div>;\n })}\n </pre>\n {res ? <div class=\"meta\">{oneLine(out().split(\"\\n\")[0] ?? \"\", 140)}{res.data?.ok === false ? \" · FAILED\" : \"\"}</div> : <div class=\"meta\">validating…</div>}\n </>\n );\n break;\n }\n case \"list_dir\": {\n label = argStr(\"path\") || \".\";\n body = resultBlock(4000);\n break;\n }\n case \"read_url\": {\n let host = argStr(\"url\");\n try { const u = new URL(host); host = u.host + u.pathname; } catch { /* keep raw */ }\n label = oneLine(host, 70);\n hint = \"web\";\n body = (\n <>\n <div class=\"meta\">\n <a href={argStr(\"url\")} target=\"_blank\" rel=\"noopener noreferrer\">open ↗</a>\n </div>\n {resultBlock(3000)}\n </>\n );\n break;\n }\n case \"load_skill\": {\n label = `skill: ${argStr(\"name\")}`;\n const mdBody = out().replace(/^---\\r?\\n[\\s\\S]*?\\r?\\n---\\r?\\n?/, \"\"); // strip frontmatter\n body = res ? (\n <>\n <div class=\"content\" innerHTML={renderMarkdown(mdBody)} />\n <div class=\"meta\">{res.data?.durationMs}ms</div>\n </>\n ) : (\n <div class=\"meta\">loading…</div>\n );\n break;\n }\n case \"save_skill\": {\n label = `skill: ${argStr(\"name\")}`;\n hint = oneLine(argStr(\"description\"), 60);\n const files = Array.isArray(d.args?.files) ? d.args.files.map((f: any) => f?.name).filter(Boolean) : [];\n body = (\n <>\n {files.length ? <div class=\"meta\">bundled: {files.join(\", \")}</div> : null}\n {res ? <div class=\"meta\">{oneLine(out(), 160)} · {res.data?.durationMs}ms</div> : <div class=\"meta\">saving…</div>}\n </>\n );\n break;\n }\n }\n } catch {\n /* fall back to the generic view on anything unexpected */\n }\n\n return (\n <details\n class={\"embed\" + (res ? (res.data?.ok === false ? \" fail\" : \" done\") : \" running\")}\n title={`${name}${hint ? \" — \" + hint : \"\"}`}\n >\n <summary>\n <b>{icon} {label}</b>\n <span class=\"meta\">{res ? hint || \"\" : \"running…\"}</span>\n </summary>\n {body}\n </details>\n );\n}\n\nfunction MessageRow(props: { e: Ev; prev?: Ev; res?: Ev; onEdit?: () => void }) {\n const e = props.e;\n const a = authorOf(e);\n const grouped =\n props.prev && props.prev.type === e.type &&\n authorOf(props.prev).name === a.name && // don't group you/harness/scheduler together\n e.session === props.prev.session && e.branch === props.prev.branch;\n\n // non-chat-looking events become divider lines\n if (e.type === \"fork\") {\n const d = e.data ?? {};\n return (\n <div class=\"divider-msg\">\n ⑂ forked from {String(d.fromBranch ?? \"?\")} → {String(d.newBranch ?? e.branch)}\n </div>\n );\n }\n if (e.type === \"goal\") {\n const d = e.data ?? {};\n const what = d.event === \"status\" ? `marked ${String(d.status ?? \"\")}` : oneLine(String(d.text ?? \"\"), 80);\n return <div class=\"divider-msg\">🎯 goal {String(d.event ?? \"\")}: {what}</div>;\n }\n if (e.type === \"todo\") {\n return <div class=\"divider-msg\">✅ tasks updated ({String(e.data?.by ?? \"human\")})</div>;\n }\n if (e.type === \"state\") {\n if (e.data.from === e.data.to) return null;\n return (\n <div class={\"divider-msg\" + (e.data.to === \"error\" ? \" err\" : \"\")}>\n {e.data.from} → {e.data.to}{e.data.reason ? ` — ${e.data.reason}` : \"\"}\n </div>\n );\n }\n\n return (\n <div class={\"msg\" + (grouped ? \" grouped\" : \"\") + (e.data?.pending ? \" pending\" : \"\")}>\n <Show when={!grouped} fallback={<span style=\"width:38px\" />}>\n <div class=\"avatar\" style={{ background: a.color + \"33\", border: `1px solid ${a.color}66` }}>{a.icon}</div>\n </Show>\n <div class=\"msg-body\">\n <Show when={!grouped}>\n <div class=\"msg-head\">\n <span class=\"author\" style={{ color: a.color }}>{a.name}</span>\n <span class=\"ts\">{e.data?.pending ? \"pending…\" : fmtTs(e.ts)}</span>\n <span class=\"ts\">{e.branch}</span>\n <Show when={props.onEdit}>\n <button\n class=\"editbtn\"\n title=\"edit this prompt — forks the conversation here (later events are dropped or summarized)\"\n onclick={(ev: MouseEvent) => { ev.stopPropagation(); props.onEdit!(); }}\n >✎ edit</button>\n </Show>\n </div>\n </Show>\n\n <SwitchContent e={e} res={props.res} />\n </div>\n </div>\n );\n}\n\nfunction SwitchContent(props: { e: Ev; res?: Ev }) {\n const e = props.e;\n switch (e.type) {\n case \"prompt\":\n return <div class=\"content\" innerHTML={renderMarkdown(String(e.data.text ?? \"\"))} />;\n case \"message\":\n return (\n <>\n <Show when={typeof e.data.reasoning === \"string\" && e.data.reasoning.trim()}>\n <details class=\"reasoning\">\n <summary>💭 reasoning</summary>\n <div class=\"mono\">{String(e.data.reasoning)}</div>\n </details>\n </Show>\n <div class=\"content\" innerHTML={renderMarkdown(String(e.data.content ?? \"\"))} />\n <Show when={e.data.interrupted}>\n <div class=\"interrupted\">⚠ interrupted — partial output kept</div>\n </Show>\n <Show when={e.data.final}>\n <div class=\"msgfoot\"><CopyBtn text={String(e.data.content ?? \"\")} /><span>copy summary</span></div>\n </Show>\n </>\n );\n case \"tool_call\":\n return <ToolRow e={e} res={props.res} />;\n case \"tool_result\": {\n // orphan result (its call scrolled past the 300-event window)\n const out = String(e.data.result);\n return (\n <details class={\"embed\" + (e.data.ok ? \"\" : \" fail\")}>\n <summary>\n <span class=\"meta\">{oneLine(out, 120)}</span>\n <CopyBtn text={out} />\n </summary>\n <div class=\"mono\">{truncate(out, 4000)}</div>\n <div class=\"meta\">{e.data.durationMs}ms{e.data.ok ? \"\" : \" · FAILED\"}</div>\n </details>\n );\n }\n case \"progress\":\n return (\n <div class=\"embed\" style=\"border-color: var(--ok)\">\n <div>📈 {String(e.data.doing ?? \"\")}</div>\n <Show when={e.data.recent}><div class=\"meta\">{String(e.data.recent)}</div></Show>\n <Show when={e.data.problems}><div class=\"meta\">⚠ {String(e.data.problems)}</div></Show>\n <Show when={e.data.next}><div class=\"meta\">→ {String(e.data.next)}</div></Show>\n </div>\n );\n case \"error\":\n return <div class=\"embed fail\"><div class=\"mono\">⚠ {String(e.data.message ?? \"\")}</div></div>;\n default:\n return <div class=\"content muted\">{truncate(JSON.stringify(e.data), 200)}</div>;\n }\n}\n\nfunction truncate(s: string, n: number): string {\n return s.length > n ? s.slice(0, n) + \" …\" : s;\n}\n\n/** \"in 5m\" / \"3m ago\" — for schedule next/last columns */\nfunction relTime(iso: string): string {\n const ms = new Date(iso).getTime() - Date.now();\n const abs = Math.abs(ms);\n const unit =\n abs < 90_000 ? `${Math.round(abs / 1000)}s`\n : abs < 5_400_000 ? `${Math.round(abs / 60_000)}m`\n : `${(abs / 3_600_000).toFixed(1)}h`;\n return ms >= 0 ? `in ${unit}` : `${unit} ago`;\n}\n\n/** compact token counts with k/m/b suffixes: 12345 → \"12k\", 2.2M → \"2.2m\" */\nfunction fmtK(n: number): string {\n if (n >= 1e9) return `${+(n / 1e9).toFixed(1)}b`;\n if (n >= 1e6) return `${+(n / 1e6).toFixed(1)}m`;\n if (n >= 10_000) return `${Math.round(n / 1000)}k`;\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n\n/** single-line preview with collapsed whitespace */\nfunction oneLine(s: string, n: number): string {\n const line = s.replace(/\\s+/g, \" \").trim();\n return truncate(line, n);\n}\n\n/* ---------- copy-to-clipboard button ---------- */\nfunction CopyBtn(props: { text: string }) {\n const [done, setDone] = createSignal(false);\n return (\n <button\n class=\"copybtn\"\n title=\"copy to clipboard\"\n onclick={(e: MouseEvent) => {\n e.stopPropagation(); // don't toggle the enclosing <details>\n navigator.clipboard.writeText(props.text).then(() => {\n setDone(true);\n setTimeout(() => setDone(false), 900);\n });\n }}\n >{done() ? \"✓\" : \"⧉\"}</button>\n );\n}\n\n/* ---------- modal shell ---------- */\nfunction Modal(props: { title: string; onClose: () => void; children: any }) {\n return (\n <div class=\"overlay\" onclick={(e: Event) => e.target === e.currentTarget && props.onClose()}>\n <div class=\"modal\">\n <div class=\"modal-head\">\n <b>{props.title}</b>\n <button class=\"iconbtn\" onclick={props.onClose}>✕</button>\n </div>\n {props.children}\n </div>\n </div>\n );\n}\n\n/* ---------- new agent ---------- */\nfunction NewAgentModal(props: { providers: string[]; onClose: () => void; onCreated: (id: string) => void }) {\n const [dir, setDir] = createSignal(\"~\");\n const [entries, setEntries] = createSignal<string[]>([]);\n const [name, setName] = createSignal(\"\");\n const [provider, setProvider] = createSignal(props.providers[0] ?? \"\");\n const [model, setModel] = createSignal(\"\");\n const [err, setErr] = createSignal(\"\");\n\n async function browse(p?: string) {\n const d = await api(`/api/fs${p ? `?path=${encodeURIComponent(p)}` : \"\"}`);\n setDir(d.path); setEntries(d.entries);\n }\n onMount(() => browse(dir()));\n\n const create = async (e: Event) => {\n e.preventDefault(); setErr(\"\");\n try {\n const r = await api(\"/api/agents\", {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ workspace: dir(), id: name(), provider: provider() || undefined, model: model() || undefined }),\n });\n props.onCreated(r.agent.id);\n } catch (ex) { setErr(String((ex as Error).message)); }\n };\n\n return (\n <Modal title=\"new agent\" onClose={props.onClose}>\n <form onsubmit={create} style=\"display:flex;flex-direction:column;gap:10px\">\n <label>workspace directory\n <div style=\"display:flex;gap:6px\">\n <input type=\"text\" class=\"w100 mono\" value={dir()} oninput={(e) => setDir(e.currentTarget.value)} />\n <button type=\"button\" onclick={() => browse(dir())}>go</button>\n <button type=\"button\" onclick={() => browse(\"..\")}>↑</button>\n </div>\n </label>\n <div class=\"dirlist\">\n <For each={entries()}>{(n) =>\n <div class=\"direntry\" onclick={() => browse(`${dir()}/${n}`.replace(/\\/+/g, \"/\"))}>📁 {n}</div>\n }</For>\n </div>\n <div style=\"display:flex;gap:10px\">\n <label style=\"flex:1\">agent name <input type=\"text\" placeholder=\"(directory name)\" value={name()} oninput={(e) => setName(e.currentTarget.value)} /></label>\n <label>provider\n <select value={provider()} onchange={(e) => setProvider(e.currentTarget.value)}>\n <For each={props.providers}>{(p) => <option>{p}</option>}</For>\n </select>\n </label>\n <label style=\"flex:1\">model <input type=\"text\" placeholder=\"(provider default)\" value={model()} oninput={(e) => setModel(e.currentTarget.value)} /></label>\n </div>\n <Show when={err()}><span style=\"color:var(--err);font-size:13px\">{err()}</span></Show>\n <button type=\"submit\" style=\"align-self:flex-end\">create & start</button>\n </form>\n </Modal>\n );\n}\n\n/* ---------- settings / config editor ---------- */\nfunction ConfigModal(props: { cfg: any; onClose: () => void; onSaved: () => void }) {\n const [provText, setProvText] = createSignal(\n JSON.stringify(Object.fromEntries(Object.entries(props.cfg.providers ?? {}).map(([k, v]: [string, any]) => [k, { baseUrl: v.baseUrl, apiKey: v.apiKey ?? \"\", model: v.model ?? \"\" }])), null, 2),\n );\n const [defaultProvider, setDefaultProvider] = createSignal(props.cfg.defaultProvider ?? Object.keys(props.cfg.providers ?? {})[0] ?? \"\");\n const [intervalMin, setIntervalMin] = createSignal(Math.round((props.cfg.progressIntervalMs ?? 600000) / 60000));\n const [tasksText, setTasksText] = createSignal(JSON.stringify(props.cfg.tasks ?? [], null, 2));\n const [err, setErr] = createSignal(\"\");\n\n const save = async (e: Event) => {\n e.preventDefault(); setErr(\"\");\n let providers, tasks;\n try { providers = JSON.parse(provText()); } catch { return setErr(\"providers: invalid JSON\"); }\n try { tasks = JSON.parse(tasksText()); } catch { return setErr(\"tasks: invalid JSON\"); }\n try {\n await api(\"/api/config\", {\n method: \"PUT\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n providers, defaultProvider: defaultProvider(),\n progressIntervalMs: Math.max(1, intervalMin()) * 60000,\n tasks,\n }),\n });\n props.onSaved(); props.onClose();\n } catch (ex) { setErr(String((ex as Error).message)); }\n };\n\n return (\n <Modal title=\"settings\" onClose={props.onClose}>\n <form onsubmit={save} style=\"display:flex;flex-direction:column;gap:10px\">\n <label>providers ({props.cfg.configPath})\n <textarea rows={8} class=\"mono w100\" value={provText()} oninput={(e) => setProvText(e.currentTarget.value)} />\n </label>\n <div style=\"display:flex;gap:10px\">\n <label style=\"flex:1\">default provider <input type=\"text\" value={defaultProvider()} oninput={(e) => setDefaultProvider(e.currentTarget.value)} /></label>\n <label>progress interval (min) <input type=\"number\" min=\"1\" style=\"width:90px\" value={intervalMin()} oninput={(e) => setIntervalMin(Number(e.currentTarget.value))} /></label>\n </div>\n <label>scheduled tasks (JSON array)\n <textarea rows={7} class=\"mono w100\" value={tasksText()} oninput={(e) => setTasksText(e.currentTarget.value)} />\n </label>\n <Show when={err()}><span style=\"color:var(--err);font-size:13px\">{err()}</span></Show>\n <button type=\"submit\" style=\"align-self:flex-end\">save</button>\n </form>\n </Modal>\n );\n}\n","/* global styles */\nimport \"./app.css\";\nimport { render } from \"solid-js/web\";\nimport App from \"./App\";\n\nrender(() => <App />, document.getElementById(\"root\")!);\n"],"file":"index-DJNTl8c0.js"}