@kky42/pievo-server 2.0.3 → 2.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/{LoopView-CCYqXrKq.js → LoopView-Pbp2YtUu.js} +1 -1
- package/.output/public/assets/{Modal-BhRzAXQg.js → Modal-B3xpEtcf.js} +1 -1
- package/.output/public/assets/{SignIn-CV3jqX_8.js → SignIn-9vsaKv_p.js} +1 -1
- package/.output/public/assets/{actionUi-BRtdWVvO.js → actionUi-DDDfD0WX.js} +1 -1
- package/.output/public/assets/app-CStTBRt2.css +2 -0
- package/.output/public/assets/{artifactView-DekEs5ME.js → artifactView-BV-yQVrj.js} +1 -1
- package/.output/public/assets/{index-BATGA0jG.js → index-49hAH0gP.js} +4 -4
- package/.output/public/assets/{invite._token-CQgv8lTC.js → invite._token-C3t4JfAY.js} +1 -1
- package/.output/public/assets/{invite._token-Dp2HL9X5.js → invite._token-C891oGkK.js} +1 -1
- package/.output/public/assets/{loopApi-5s2-kCnu.js → loopApi-C_Dtw-nL.js} +1 -1
- package/.output/public/assets/loops._loopId-DD4fKGMu.js +4 -0
- package/.output/public/assets/{loops._loopId_.runs._runId-BNN-dLrW.js → loops._loopId_.runs._runId-DoPcCQy7.js} +1 -1
- package/.output/public/assets/{notifyFns-DuBElaqG.js → notifyFns-BaukhLAg.js} +1 -1
- package/.output/public/assets/{preload-helper-3xcHsDtt.js → preload-helper--VCqDT5m.js} +2 -2
- package/.output/public/assets/{routes-YnrsFY5X.js → routes-BS4N7Lnf.js} +1 -1
- package/.output/public/assets/{routes-CmuCVIIS.js → routes-DsdcURfk.js} +1 -1
- package/.output/public/assets/{t._teamId-Bi-C9s5j.js → t._teamId-C9uEyAh_.js} +1 -1
- package/.output/public/assets/{t._teamId-BlE4mCSj.js → t._teamId-DSYlMX_v.js} +1 -1
- package/.output/public/assets/ui-Gb1413-F.js +1 -0
- package/.output/server/_ssr/{DashboardView-2eNPqWcy.mjs → DashboardView-CQdjYy03.mjs} +7 -7
- package/.output/server/_ssr/{LoopPlaybook-CnQ8Qgyf.mjs → LoopPlaybook-C86vJIjZ.mjs} +3 -3
- package/.output/server/_ssr/{LoopView-DM30OPCN.mjs → LoopView-cDyjmf1B.mjs} +7 -7
- package/.output/server/_ssr/{Modal-B7gBr5Pm.mjs → Modal-Bc_5TYGr.mjs} +2 -2
- package/.output/server/_ssr/{SignIn-CaAi4_mk.mjs → SignIn-BQQiD3Ss.mjs} +3 -3
- package/.output/server/_ssr/{actionUi-Be7dmMxb.mjs → actionUi-BKF6xI3d.mjs} +2 -2
- package/.output/server/_ssr/{adapters-CHURWoZx.mjs → adapters-N4-yQ1vK.mjs} +2 -2
- package/.output/server/_ssr/{artifactFiles-D6b_RP78.mjs → artifactFiles-Dl1EaUtJ.mjs} +3 -3
- package/.output/server/_ssr/{artifactView-CYV1r48i.mjs → artifactView-DX4P3Krh.mjs} +2 -2
- package/.output/server/_ssr/artifacts-DzWJrBxK.mjs +2 -0
- package/.output/server/_ssr/{auth-B_OxPpFr.mjs → auth-CbAfO4Ne.mjs} +9 -9
- package/.output/server/_ssr/{boot-BNoivm21.mjs → boot-BZ-YyUiD.mjs} +1165 -155
- package/.output/server/_ssr/boot-BigKgB8p.mjs +2 -0
- package/.output/server/_ssr/{bun-sqlite-dialect-BW9W1_Ps-B3RHdVjo.mjs → bun-sqlite-dialect-BW9W1_Ps-B67XLJZt.mjs} +2 -2
- package/.output/server/_ssr/{d1-sqlite-dialect-BLC8LXE6-DpVe1foU.mjs → d1-sqlite-dialect-BLC8LXE6-nff_yHzH.mjs} +2 -2
- package/.output/server/_ssr/db-BF8vSovA.mjs +2 -0
- package/.output/server/_ssr/{dist-BTx1ljg7.mjs → dist-BGjVt6NE.mjs} +2 -2
- package/.output/server/_ssr/{factory-TSnFcS96.mjs → factory-DNeo3vVt.mjs} +2 -2
- package/.output/server/_ssr/{invite._token-CDpO3cfB.mjs → invite._token-Bipap1cl.mjs} +6 -6
- package/.output/server/_ssr/{invite._token-CvqaKH2R.mjs → invite._token-BlbVjz-o.mjs} +2 -2
- package/.output/server/_ssr/{invite._token-DWOPXXLS.mjs → invite._token-z3PzCMzb.mjs} +5 -5
- package/.output/server/_ssr/{kysely-adapter-BWjzeCGK.mjs → kysely-adapter-C1ww7PKr.mjs} +1 -1
- package/.output/server/_ssr/logger-C7aewtve.mjs +2 -0
- package/.output/server/_ssr/{loopApi-BfMnXaKT.mjs → loopApi-7MTSs6hy.mjs} +5 -5
- package/.output/server/_ssr/{loopApi-Cpm8YV3U.mjs → loopApi-JzGGZZp2.mjs} +20 -20
- package/.output/server/_ssr/{loops._loopId-C-y4Pux_.mjs → loops._loopId-CJxQ0EG4.mjs} +4 -4
- package/.output/server/_ssr/{loops._loopId-DfrHw2mZ.mjs → loops._loopId-DFkyTJR3.mjs} +84 -84
- package/.output/server/_ssr/{loops._loopId_.runs._runId-C9d0EC2Q.mjs → loops._loopId_.runs._runId-DkG-ZCD1.mjs} +7 -7
- package/.output/server/_ssr/{loops._loopId_.runs._runId-BXyyqXwX.mjs → loops._loopId_.runs._runId-lTigSOmT.mjs} +4 -4
- package/.output/server/_ssr/{machineFns-CRbwYxD3.mjs → machineFns-Dda8-rBY.mjs} +3 -3
- package/.output/server/_ssr/{node-sqlite-dialect-B10G6C4W.mjs → node-sqlite-dialect-BS2OAFJh.mjs} +2 -2
- package/.output/server/_ssr/{notifyFns-CtmSVNmE.mjs → notifyFns-C6eyIFZE.mjs} +5 -5
- package/.output/server/_ssr/{notifyFns-DvH4C-GH.mjs → notifyFns-C9N0QLe3.mjs} +3 -3
- package/.output/server/_ssr/{router-B4ipreZ4.mjs → router-DIfoLu1r.mjs} +30 -30
- package/.output/server/_ssr/{routes-DKox93l0.mjs → routes-Bx0bRxt9.mjs} +2 -2
- package/.output/server/_ssr/{routes-iHT61OkI.mjs → routes-DYJB0rKC.mjs} +5 -5
- package/.output/server/_ssr/{routes-l7tUe3lr.mjs → routes-bWgX0tRE.mjs} +6 -6
- package/.output/server/_ssr/runDiff-B9t7ouYj.mjs +2 -0
- package/.output/server/_ssr/ssr.mjs +51 -51
- package/.output/server/_ssr/store-Dw4LiFjE.mjs +2 -0
- package/.output/server/_ssr/{t._teamId-BPK2mrN3.mjs → t._teamId-B_ieXBNF.mjs} +6 -6
- package/.output/server/_ssr/{t._teamId-jO8dUmSQ.mjs → t._teamId-C_KZZ4Xh.mjs} +5 -5
- package/.output/server/_ssr/{t._teamId-B3g0Cs8B.mjs → t._teamId-D9nCEa2h.mjs} +2 -2
- package/.output/server/_ssr/{teamFns-D4I-0dEB.mjs → teamFns-BBIbatdZ.mjs} +2 -2
- package/.output/server/_ssr/{teamFns-6zjFV7lM.mjs → teamFns-O3ZmtZL2.mjs} +3 -3
- package/.output/server/_ssr/tokens-DI_pklQB.mjs +2 -0
- package/.output/server/_ssr/{ui-CI-OeTr7.mjs → ui-B6mE5-5v.mjs} +6 -6
- package/.output/server/{_tanstack-start-manifest_v-CxHUYCv8.mjs → _tanstack-start-manifest_v-DKnfwHZr.mjs} +27 -27
- package/.output/server/drizzle/0015_run_history_foundation.sql +43 -0
- package/.output/server/drizzle/meta/_journal.json +7 -0
- package/.output/server/index.mjs +107 -107
- package/drizzle/0015_run_history_foundation.sql +43 -0
- package/drizzle/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/.output/public/assets/app-B03JVnFn.css +0 -2
- package/.output/public/assets/loops._loopId-C9vRjZ8W.js +0 -4
- package/.output/public/assets/ui-By58RJgB.js +0 -1
- package/.output/server/_ssr/artifacts-CXMpBzMY.mjs +0 -2
- package/.output/server/_ssr/boot-C9VAWt9Z.mjs +0 -2
- package/.output/server/_ssr/db-C11vQNxP.mjs +0 -2
- package/.output/server/_ssr/logger-DE_PU5bE.mjs +0 -2
- package/.output/server/_ssr/runDiff-Bohd5W5R.mjs +0 -113
- package/.output/server/_ssr/store-Ck7kCAGf.mjs +0 -2
- package/.output/server/_ssr/tokens-oJm6yFyt.mjs +0 -2
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", "Segoe UI", sans-serif;--font-mono:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace;--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-pixel:"Geist Pixel", ui-monospace, "SF Mono", Menlo, monospace;--radius-control:10px;--radius-card:16px;--radius-sheet:20px;--text-micro:10px;--text-caption:11px;--text-label:12px;--text-meta:12.5px;--text-body:13px;--shadow-card:0 2px 2px #0000000a;--color-paper:#f3f4f7;--color-surface:#fff;--color-raised:#eceef2;--color-hairline:#e3e5ea;--color-wire:#cfd3db;--color-disabled:#9aa0ab;--color-secondary:#666c78;--color-primary:#1c1e24;--color-display:#0d0f14;--color-rubik-green:#009b48;--color-rubik-red:#b71234;--color-rubik-orange:#ff5800;--color-rubik-yellow:#ffd500;--color-rubik-blue:#0046ad;--color-accent:#b71234;--color-accent-soft:#b7123414;--color-success:#00813c;--color-success-soft:#009b481a;--color-interactive:var(--color-rubik-blue);--color-interactive-soft:#0046ad14;--color-warn:#c44700;--color-warn-soft:#ff58001a;--color-running:#8a6d00;--color-running-soft:#ffd50029;--color-run-kept:var(--color-success);--color-run-no-change:var(--color-secondary);--color-run-blocked:var(--color-accent);--color-run-error:#af222b}@supports (color:color-mix(in lab, red, red)){:root,:host{--color-run-error:color-mix(in srgb, var(--color-accent) 82%, var(--color-running))}}:root,:host{--color-run-warning:var(--color-running);--color-run-canceled:var(--color-disabled);--color-run-queued:var(--color-secondary);--color-run-active-exec:var(--color-display);--color-run-active-edit:#65296a}@supports (color:color-mix(in lab, red, red)){:root,:host{--color-run-active-edit:color-mix(in srgb, var(--color-accent) 55%, var(--color-interactive))}}:root,:host{--color-run-active-evolve:var(--color-interactive);--color-diff-add-bg:#009b481a;--color-diff-del-bg:#b7123414;--color-diff-hunk-bg:var(--color-raised);--color-chart-1:var(--color-display);--color-chart-2:var(--color-interactive);--color-chart-3:var(--color-success);--color-chart-4:var(--color-accent);--color-chart-5:var(--color-secondary)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-1\.5{inset:calc(var(--spacing) * 1.5)}.inset-x-0{inset-inline:0}.inset-x-1{inset-inline:var(--spacing)}.inset-y-2{inset-block:calc(var(--spacing) * 2)}.start-42{inset-inline-start:calc(var(--spacing) * 42)}.-top-1{top:calc(var(--spacing) * -1)}.-top-2{top:calc(var(--spacing) * -2)}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-\[-9px\]{top:-9px}.top-\[-15px\]{top:-15px}.top-\[-22px\]{top:-22px}.top-\[46\%\]{top:46%}.top-\[calc\(50\%\+12px\)\]{top:calc(50% + 12px)}.right-0{right:0}.right-1{right:var(--spacing)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-\[90px\]{right:90px}.bottom-0{bottom:0}.bottom-1{bottom:var(--spacing)}.bottom-1\/2{bottom:50%}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.left-\[102px\]{left:102px}.left-\[107px\]{left:107px}.z-10{z-index:10}.z-50{z-index:50}.z-\[900\]{z-index:900}.z-\[901\]{z-index:901}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.col-start-3{grid-column-start:3}.col-start-4{grid-column-start:4}.col-start-5{grid-column-start:5}.col-start-6{grid-column-start:6}.col-start-7{grid-column-start:7}.row-span-3{grid-row:span 3/span 3}.row-start-1{grid-row-start:1}.row-start-2{grid-row-start:2}.row-start-3{grid-row-start:3}.row-start-4{grid-row-start:4}.row-start-5{grid-row-start:5}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-m-2{margin:calc(var(--spacing) * -2)}.m-0{margin:0}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-2\.5{margin-inline:calc(var(--spacing) * 2.5)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.-mt-3{margin-top:calc(var(--spacing) * -3)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-3\.5{margin-top:calc(var(--spacing) * 3.5)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-7{margin-top:calc(var(--spacing) * 7)}.mt-9{margin-top:calc(var(--spacing) * 9)}.mt-12{margin-top:calc(var(--spacing) * 12)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mt-24{margin-top:calc(var(--spacing) * 24)}.mt-32{margin-top:calc(var(--spacing) * 32)}.mt-\[5px\]{margin-top:5px}.mt-\[18px\]{margin-top:18px}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-1{margin-right:var(--spacing)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-3\.5{margin-bottom:calc(var(--spacing) * 3.5)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-\[18px\]{margin-bottom:18px}.ml-1{margin-left:var(--spacing)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-\[11px\]{width:11px;height:11px}.size-\[15px\]{width:15px;height:15px}.size-\[17px\]{width:17px;height:17px}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-\[2px\]{height:2px}.h-\[15px\]{height:15px}.h-\[22px\]{height:22px}.h-\[64px\]{height:64px}.h-\[76px\]{height:76px}.h-\[min\(70vh\,620px\)\]{height:min(70vh,620px)}.h-\[min\(600px\,68vh\)\]{height:min(600px,68vh)}.h-full{height:100%}.max-h-44{max-height:calc(var(--spacing) * 44)}.max-h-\[150px\]{max-height:150px}.max-h-\[300px\]{max-height:300px}.max-h-\[360px\]{max-height:360px}.max-h-\[420px\]{max-height:420px}.max-h-\[calc\(100dvh-4rem\)\]{max-height:calc(100dvh - 4rem)}.max-h-\[clamp\(280px\,46vh\,520px\)\]{max-height:clamp(280px,46vh,520px)}.min-h-0{min-height:0}.min-h-\[34px\]{min-height:34px}.min-h-\[45px\]{min-height:45px}.min-h-\[48px\]{min-height:48px}.min-h-\[76px\]{min-height:76px}.min-h-\[150px\]{min-height:150px}.w-1{width:var(--spacing)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-4\/6{width:66.6667%}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-\[11px\]{width:11px}.w-\[18px\]{width:18px}.w-\[190px\]{width:190px}.w-\[196px\]{width:196px}.w-\[248px\]{width:248px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-160{max-width:calc(var(--spacing) * 160)}.max-w-\[62rem\]{max-width:62rem}.max-w-\[210px\]{max-width:210px}.max-w-\[340px\]{max-width:340px}.max-w-\[520px\]{max-width:520px}.max-w-\[560px\]{max-width:560px}.max-w-\[580px\]{max-width:580px}.max-w-\[590px\]{max-width:590px}.max-w-\[620px\]{max-width:620px}.max-w-\[640px\]{max-width:640px}.max-w-\[760px\]{max-width:760px}.max-w-\[880px\]{max-width:880px}.max-w-\[1180px\]{max-width:1180px}.max-w-\[1360px\]{max-width:1360px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-\[12rem\]{min-width:12rem}.min-w-\[15px\]{min-width:15px}.min-w-\[900px\]{min-width:900px}.min-w-max{min-width:max-content}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\.5{--tw-translate-y:calc(var(--spacing) * -1.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-0{--tw-translate-y:0;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-50{--tw-scale-x:50%;--tw-scale-y:50%;--tw-scale-z:50%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.resize-y{resize:vertical}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.grid-cols-\[216px_72px_minmax\(150px\,1fr\)_56px_minmax\(170px\,1fr\)_56px_180px\]{grid-template-columns:216px 72px minmax(150px,1fr) 56px minmax(170px,1fr) 56px 180px}.grid-cols-\[max-content_minmax\(0\,1fr\)\]{grid-template-columns:max-content minmax(0,1fr)}.grid-rows-\[auto_repeat\(3\,84px\)_auto\]{grid-template-rows:auto repeat(3,84px) auto}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}.gap-\[3px\]{gap:3px}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3.5) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-2\.5{column-gap:calc(var(--spacing) * 2.5)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-x-10{column-gap:calc(var(--spacing) * 10)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-2\.5{row-gap:calc(var(--spacing) * 2.5)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-hairline>:not(:last-child)){border-color:var(--color-hairline)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[3px\]{border-radius:3px}.rounded-\[4px\]{border-radius:4px}.rounded-\[5px\]{border-radius:5px}.rounded-\[6px\]{border-radius:6px}.rounded-\[7px\]{border-radius:7px}.rounded-\[14px\]{border-radius:14px}.rounded-card{border-radius:var(--radius-card)}.rounded-control{border-radius:var(--radius-control)}.rounded-full{border-radius:3.40282e38px}.rounded-md{border-radius:var(--radius-md)}.rounded-sheet{border-radius:var(--radius-sheet)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-l-full{border-top-left-radius:3.40282e38px;border-bottom-left-radius:3.40282e38px}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-accent{border-color:var(--color-accent)}.border-display{border-color:var(--color-display)}.border-hairline{border-color:var(--color-hairline)}.border-interactive\/40{border-color:#0046ad66}@supports (color:color-mix(in lab, red, red)){.border-interactive\/40{border-color:color-mix(in oklab, var(--color-interactive) 40%, transparent)}}.border-success\/40{border-color:#00813c66}@supports (color:color-mix(in lab, red, red)){.border-success\/40{border-color:color-mix(in oklab, var(--color-success) 40%, transparent)}}.border-success\/70{border-color:#00813cb3}@supports (color:color-mix(in lab, red, red)){.border-success\/70{border-color:color-mix(in oklab, var(--color-success) 70%, transparent)}}.border-transparent{border-color:#0000}.border-warn\/40{border-color:#c4470066}@supports (color:color-mix(in lab, red, red)){.border-warn\/40{border-color:color-mix(in oklab, var(--color-warn) 40%, transparent)}}.border-warn\/50{border-color:#c4470080}@supports (color:color-mix(in lab, red, red)){.border-warn\/50{border-color:color-mix(in oklab, var(--color-warn) 50%, transparent)}}.border-wire{border-color:var(--color-wire)}.bg-\[color\:var\(--color-diff-add-bg\)\]{background-color:var(--color-diff-add-bg)}.bg-\[color\:var\(--color-diff-del-bg\)\]{background-color:var(--color-diff-del-bg)}.bg-\[color\:var\(--color-diff-hunk-bg\)\]{background-color:var(--color-diff-hunk-bg)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-black\/25{background-color:#00000040}@supports (color:color-mix(in lab, red, red)){.bg-black\/25{background-color:color-mix(in oklab, var(--color-black) 25%, transparent)}}.bg-disabled{background-color:var(--color-disabled)}.bg-display{background-color:var(--color-display)}.bg-hairline{background-color:var(--color-hairline)}.bg-interactive{background-color:var(--color-interactive)}.bg-interactive-soft{background-color:var(--color-interactive-soft)}.bg-interactive-soft\/40{background-color:#0046ad08}@supports (color:color-mix(in lab, red, red)){.bg-interactive-soft\/40{background-color:color-mix(in oklab, var(--color-interactive-soft) 40%, transparent)}}.bg-paper{background-color:var(--color-paper)}.bg-raised{background-color:var(--color-raised)}.bg-raised\/20{background-color:#eceef233}@supports (color:color-mix(in lab, red, red)){.bg-raised\/20{background-color:color-mix(in oklab, var(--color-raised) 20%, transparent)}}.bg-raised\/50{background-color:#eceef280}@supports (color:color-mix(in lab, red, red)){.bg-raised\/50{background-color:color-mix(in oklab, var(--color-raised) 50%, transparent)}}.bg-rubik-green{background-color:var(--color-rubik-green)}.bg-rubik-orange{background-color:var(--color-rubik-orange)}.bg-rubik-red{background-color:var(--color-rubik-red)}.bg-rubik-yellow{background-color:var(--color-rubik-yellow)}.bg-running-soft{background-color:var(--color-running-soft)}.bg-secondary{background-color:var(--color-secondary)}.bg-success-soft{background-color:var(--color-success-soft)}.bg-surface{background-color:var(--color-surface)}.bg-transparent{background-color:#0000}.bg-warn{background-color:var(--color-warn)}.bg-warn-soft{background-color:var(--color-warn-soft)}.bg-warn\/10{background-color:#c447001a}@supports (color:color-mix(in lab, red, red)){.bg-warn\/10{background-color:color-mix(in oklab, var(--color-warn) 10%, transparent)}}.bg-white{background-color:var(--color-white)}.bg-wire\/60{background-color:#cfd3db99}@supports (color:color-mix(in lab, red, red)){.bg-wire\/60{background-color:color-mix(in oklab, var(--color-wire) 60%, transparent)}}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-surface{--tw-gradient-from:var(--color-surface);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.object-contain{object-fit:contain}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-3\.5{padding:calc(var(--spacing) * 3.5)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-\[26px\]{padding-inline:26px}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-1{padding-top:var(--spacing)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-10{padding-top:calc(var(--spacing) * 10)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-14{padding-top:calc(var(--spacing) * 14)}.pt-16{padding-top:calc(var(--spacing) * 16)}.pt-\[22px\]{padding-top:22px}.pr-0\.5{padding-right:calc(var(--spacing) * .5)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-7{padding-bottom:calc(var(--spacing) * 7)}.pb-24{padding-bottom:calc(var(--spacing) * 24)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-pixel{font-family:var(--font-pixel)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-\[9\.5px\]{font-size:9.5px}.text-\[9px\]{font-size:9px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[24px\]{font-size:24px}.text-\[26px\]{font-size:26px}.text-\[28px\]{font-size:28px}.text-\[clamp\(15px\,2vw\,19px\)\]{font-size:clamp(15px,2vw,19px)}.text-\[clamp\(17px\,2\.4vw\,21px\)\]{font-size:clamp(17px,2.4vw,21px)}.text-\[clamp\(21px\,3vw\,28px\)\]{font-size:clamp(21px,3vw,28px)}.text-\[clamp\(24px\,4vw\,34px\)\]{font-size:clamp(24px,4vw,34px)}.text-\[clamp\(28px\,4\.5vw\,38px\)\]{font-size:clamp(28px,4.5vw,38px)}.text-body{font-size:var(--text-body)}.text-caption{font-size:var(--text-caption)}.text-label{font-size:var(--text-label)}.text-meta{font-size:var(--text-meta)}.text-micro{font-size:var(--text-micro)}.leading-\[1\.2\]{--tw-leading:1.2;line-height:1.2}.leading-\[1\.15\]{--tw-leading:1.15;line-height:1.15}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.01em\]{--tw-tracking:-.01em;letter-spacing:-.01em}.tracking-\[-0\.015em\]{--tw-tracking:-.015em;letter-spacing:-.015em}.tracking-\[0\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--color-display\)\]{color:var(--color-display)}.text-\[var\(--color-secondary\)\]{color:var(--color-secondary)}.text-accent{color:var(--color-accent)}.text-disabled{color:var(--color-disabled)}.text-display{color:var(--color-display)}.text-interactive{color:var(--color-interactive)}.text-paper{color:var(--color-paper)}.text-paper\/55{color:#f3f4f78c}@supports (color:color-mix(in lab, red, red)){.text-paper\/55{color:color-mix(in oklab, var(--color-paper) 55%, transparent)}}.text-paper\/60{color:#f3f4f799}@supports (color:color-mix(in lab, red, red)){.text-paper\/60{color:color-mix(in oklab, var(--color-paper) 60%, transparent)}}.text-paper\/85{color:#f3f4f7d9}@supports (color:color-mix(in lab, red, red)){.text-paper\/85{color:color-mix(in oklab, var(--color-paper) 85%, transparent)}}.text-primary{color:var(--color-primary)}.text-rubik-green{color:var(--color-rubik-green)}.text-running{color:var(--color-running)}.text-secondary{color:var(--color-secondary)}.text-success{color:var(--color-success)}.text-success\/80{color:#00813ccc}@supports (color:color-mix(in lab, red, red)){.text-success\/80{color:color-mix(in oklab, var(--color-success) 80%, transparent)}}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.text-wire{color:var(--color-wire)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.underline-offset-2{text-underline-offset:2px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.accent-\[color\:var\(--color-display\)\]{accent-color:var(--color-display)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-100{opacity:1}.shadow-\[0_0_0_2px_var\(--color-surface\)\,0_0_0_4px_var\(--color-interactive\)\]{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_12px_28px_-16px_rgba\(0\,0\,0\,0\.25\)\]{--tw-shadow:0 12px 28px -16px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-card{--tw-shadow:0 2px 2px var(--tw-shadow-color,#0000000a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow\/graduation{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[8px\]{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-open\:rotate-90:is(:where(.group):is([open],:popover-open,:open) *){rotate:90deg}.marker\:content-\[\'\'\] ::marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\]::marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\] ::-webkit-details-marker{--tw-content:"";content:var(--tw-content)}.marker\:content-\[\'\'\]::-webkit-details-marker{--tw-content:"";content:var(--tw-content)}.placeholder\:text-disabled::placeholder{color:var(--color-disabled)}.focus-within\:border-transparent:focus-within{border-color:#0000}.focus-within\:shadow-focus:focus-within{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (hover:hover){.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-display:hover{border-color:var(--color-display)}.hover\:border-wire:hover{border-color:var(--color-wire)}.hover\:bg-\[color\:var\(--color-display\)\]\/8:hover{background-color:#0d0f1414}@supports (color:color-mix(in lab, red, red)){.hover\:bg-\[color\:var\(--color-display\)\]\/8:hover{background-color:color-mix(in oklab, var(--color-display) 8%, transparent)}}.hover\:bg-raised:hover{background-color:var(--color-raised)}.hover\:bg-raised\/60:hover{background-color:#eceef299}@supports (color:color-mix(in lab, red, red)){.hover\:bg-raised\/60:hover{background-color:color-mix(in oklab, var(--color-raised) 60%, transparent)}}.hover\:bg-surface:hover{background-color:var(--color-surface)}.hover\:text-display:hover{color:var(--color-display)}.hover\:text-paper:hover{color:var(--color-paper)}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-85:hover{opacity:.85}}.focus\:border-transparent:focus{border-color:#0000}.focus\:shadow-focus:focus{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:text-display:focus-visible{color:var(--color-display)}.focus-visible\:shadow-focus:focus-visible{--tw-shadow:0 0 0 2px var(--tw-shadow-color,var(--color-surface)), 0 0 0 4px var(--tw-shadow-color,var(--color-interactive));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-interactive:focus-visible{--tw-ring-color:var(--color-interactive)}.focus-visible\:ring-offset-4:focus-visible{--tw-ring-offset-width:4px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-surface:focus-visible{--tw-ring-offset-color:var(--color-surface)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}@media (hover:hover){.disabled\:hover\:border-hairline:disabled:hover{border-color:var(--color-hairline)}.disabled\:hover\:bg-surface:disabled:hover{background-color:var(--color-surface)}}.data-\[ending-style\]\:opacity-0[data-ending-style],.data-\[starting-style\]\:opacity-0[data-starting-style]{opacity:0}@media (width>=40rem){.sm\:inline{display:inline}.sm\:max-h-none{max-height:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[210px_1fr\]{grid-template-columns:210px 1fr}.sm\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.sm\:p-7{padding:calc(var(--spacing) * 7)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-10{padding-inline:calc(var(--spacing) * 10)}}@media (width>=48rem){.md\:grid-cols-\[minmax\(0\,1fr\)_400px\]{grid-template-columns:minmax(0,1fr) 400px}.md\:grid-cols-\[minmax\(0\,18rem\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(0,18rem) minmax(0,1fr)}.md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.md\:border-hairline{border-color:var(--color-hairline)}.md\:pl-8{padding-left:calc(var(--spacing) * 8)}}@media (width>=64rem){.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[minmax\(0\,1fr\)_minmax\(300px\,360px\)\]{grid-template-columns:minmax(0,1fr) minmax(300px,360px)}.lg\:grid-cols-\[minmax\(300px\,380px\)_minmax\(0\,1fr\)\]{grid-template-columns:minmax(300px,380px) minmax(0,1fr)}}@media (prefers-color-scheme:dark){.dark\:bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab, red, red)){.dark\:bg-black\/45{background-color:color-mix(in oklab, var(--color-black) 45%, transparent)}}}.\[\&_svg\]\:block svg{display:block}.\[\&_svg\]\:h-auto svg{height:auto}.\[\&_svg\]\:w-full svg{width:100%}}@font-face{font-family:Geist Pixel;src:url(/fonts/GeistPixel-Square.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}:root{--glass-bg:#ffffff8c}@supports (color:color-mix(in lab, red, red)){:root{--glass-bg:color-mix(in srgb, var(--color-surface) 55%, transparent)}}:root{--glass-bg-strong:#ffffffc7}@supports (color:color-mix(in lab, red, red)){:root{--glass-bg-strong:color-mix(in srgb, var(--color-surface) 78%, transparent)}}:root{--glass-border:#0d0f141a}@supports (color:color-mix(in lab, red, red)){:root{--glass-border:color-mix(in srgb, var(--color-display) 10%, transparent)}}:root{--glass-highlight:#ffffffbf;--glass-shadow:0 1px 1px #00000005, 0 8px 24px -8px #0000001a, 0 24px 48px -16px #00000014}@media (prefers-color-scheme:dark){:root{--color-paper:#0a0a0c;--color-surface:#141416;--color-raised:#1c1c1f;--color-hairline:#26262a;--color-wire:#3a3a40;--color-disabled:#6e6e76;--color-secondary:#98989f;--color-primary:#e8e8ed;--color-display:#fff;--color-accent:#ff5d75;--color-accent-soft:#ff5d751f;--color-success:#33c56f;--color-success-soft:#009b482e;--color-interactive:#5c9dff;--color-interactive-soft:#5c9dff21;--color-warn:#ff7a3d;--color-warn-soft:#ff7a3d24;--color-running:#ffd500;--color-running-soft:#ffd5001f;--color-diff-add-bg:#009b482e;--color-diff-del-bg:#ff5d7524;--glass-highlight:#ffffff17;--glass-shadow:0 1px 1px #0003, 0 12px 32px -8px #00000080;--shadow-card:0 0 0 0 transparent}}.glass,.glass-strong{-webkit-backdrop-filter:blur(22px)saturate(1.7);backdrop-filter:blur(22px)saturate(1.7);border:1px solid var(--glass-border);box-shadow:inset 0 1px 0 var(--glass-highlight), var(--glass-shadow)}.glass{background:var(--glass-bg)}.glass-strong{background:var(--glass-bg-strong)}.glass-bar{box-shadow:inset 0 1px 0 var(--glass-highlight);border-width:0 0 1px;border-radius:0}.fan-card{transform:rotate(var(--tilt,0deg)) translateY(var(--lift,0px));transition:transform .18s,box-shadow .18s,border-color .18s}.fan-card:hover,.fan-card:focus-visible{z-index:3;transform:rotate(0)translateY(-6px)scale(1.04)}.loopview{--loopview-gap:1.25rem;grid-template-columns:repeat(auto-fit, minmax(min(100%, max(28rem, (100% - var(--loopview-gap)) / 2)), 1fr));gap:var(--loopview-gap);align-items:start;display:grid}.loopview>h1,.loopview>h2,.loopview>h3,.loopview>h4,.loopview>h5,.loopview>h6,.loopview>p,.loopview>hr,.loopview>header,.loopview>footer,.loopview>section,.loopview>ul,.loopview>ol,.loopview>table,.loopview>pre,.loopview>blockquote,.loopview>figure,.loopview>img{grid-column:1/-1}.taskmd{font-family:var(--font-sans);color:var(--color-secondary);font-size:13px;line-height:1.6}.taskmd>:first-child{margin-top:0}.taskmd h1,.taskmd h2,.taskmd h3,.taskmd h4{color:var(--color-display);margin:1.1em 0 .4em;font-weight:600;line-height:1.3}.taskmd h1{font-size:15px}.taskmd h2{font-size:13.5px}.taskmd h3,.taskmd h4{font-size:12.5px}.taskmd p{margin:.5em 0}.taskmd ul,.taskmd ol{margin:.5em 0;padding-left:1.3em}.taskmd ul{list-style:outside}.taskmd ol{list-style:decimal}.taskmd li{margin:.2em 0}.taskmd a{color:var(--color-interactive);text-underline-offset:2px;text-decoration:underline}.taskmd strong{color:var(--color-primary);font-weight:600}.taskmd code{font-family:var(--font-mono);background:var(--color-surface);overflow-wrap:anywhere;border-radius:4px;padding:.1em .35em;font-size:.9em}.taskmd pre{font-family:var(--font-mono);background:var(--color-surface);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:8px;margin:.6em 0;padding:12px 14px;font-size:12px;line-height:1.5}.taskmd pre code{background:0 0;padding:0}.taskmd blockquote{border-left:2px solid var(--color-wire);color:var(--color-disabled);margin:.6em 0;padding-left:12px}.taskmd hr{border:0;border-top:1px solid var(--color-hairline);margin:1em 0}.taskmd table{border-collapse:collapse;width:max-content;max-width:100%;margin:.6em 0;display:block;overflow-x:auto}.taskmd th,.taskmd td{border:1px solid var(--color-hairline);text-align:left;white-space:nowrap;padding:4px 8px}.taskmd img{max-width:100%}*{scrollbar-width:thin;scrollbar-color:var(--color-wire) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-wire);background-clip:padding-box;border:2px solid #0000;border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:var(--color-disabled);background-clip:padding-box}::-webkit-scrollbar-corner{background:0 0}.lp-select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none' stroke='%23999999' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2.75 4.5 6 7.75 9.25 4.5'/%3E%3C/svg%3E");background-position:right .7rem center;background-repeat:no-repeat;padding-right:2rem}.dot-grid-subtle{background-image:radial-gradient(circle, var(--color-hairline) .5px, transparent .5px);background-size:12px 12px}@keyframes fadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:translateY(0)}}@keyframes runPulse{0%,to{opacity:.9}50%{opacity:.26}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.ring-logo{--ring-base:currentColor;vertical-align:middle;display:inline-block}.ring-logo-plate{--ring-base:#ededed}.ring-logo .ring-cell{fill:var(--ring-base)}.ring-logo .ring-runner{fill:var(--color-interactive)}.ring-logo .ring-trail-1{fill:#0046ad}@supports (color:color-mix(in lab, red, red)){.ring-logo .ring-trail-1{fill:color-mix(in srgb, var(--color-interactive) 55%, var(--ring-base))}}.ring-logo .ring-trail-2{fill:#0046ad}@supports (color:color-mix(in lab, red, red)){.ring-logo .ring-trail-2{fill:color-mix(in srgb, var(--color-interactive) 25%, var(--ring-base))}}.ring-logo-animated .ring-cell{animation:4s linear infinite ringChase}.ring-logo-animated .rc0{animation-delay:-4s}.ring-logo-animated .rc1{animation-delay:-3.5s}.ring-logo-animated .rc2{animation-delay:-3s}.ring-logo-animated .rc3{animation-delay:-2.5s}.ring-logo-animated .rc4{animation-delay:-2s}.ring-logo-animated .rc5{animation-delay:-1.5s}.ring-logo-animated .rc6{animation-delay:-1s}.ring-logo-animated .rc7{animation-delay:-.5s}@keyframes ringChase{0%,9%{fill:var(--color-interactive)}16%,to{fill:var(--ring-base)}}@media (prefers-reduced-motion:reduce){.ring-logo-animated .ring-cell{animation:none}}.lpf-node{z-index:2;border:1px solid var(--color-wire);background:var(--color-surface);border-radius:11px;flex-direction:column;justify-content:center;gap:2px;padding:0 11px;transition:border-color .3s,box-shadow .3s,transform .3s;display:flex;position:absolute}.lpf-node.tick{border-color:#7294c6}@supports (color:color-mix(in lab, red, red)){.lpf-node.tick{border-color:color-mix(in srgb, var(--color-interactive) 45%, var(--color-wire))}}.lpf-node.tick{background:#edf2f9}@supports (color:color-mix(in lab, red, red)){.lpf-node.tick{background:color-mix(in srgb, var(--color-interactive) 7%, var(--color-surface))}}.lpf-node.setup{border-style:dashed}.lpf-node.setup .lpf-k{color:var(--color-warn)}.lpf-node.visited{border-color:#7c9bc9}@supports (color:color-mix(in lab, red, red)){.lpf-node.visited{border-color:color-mix(in srgb, var(--color-interactive) 40%, var(--color-wire))}}.lpf-node.active{border-color:var(--color-interactive);box-shadow:0 0 0 3px var(--color-interactive-soft), 0 10px 24px -12px var(--color-interactive);transform:translateY(-2px)}.lpf-k{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--color-disabled);align-items:center;gap:5px;font-size:8.5px;font-weight:600;display:flex}.lpf-node.tick .lpf-k,.lpf-node.active .lpf-k{color:var(--color-interactive)}.lpf-k .g{font-size:11px}.lpf-t{letter-spacing:-.01em;color:var(--color-display);font-size:12.5px;font-weight:650;line-height:1.15}.lpf-node.tick .lpf-t{color:var(--color-interactive)}.lpf-d{color:var(--color-secondary);font-size:10.5px;line-height:1.28}.lpf-d code{font-family:var(--font-mono);font-size:10px}.lpf-wire{stroke:#0046ad8c}@supports (color:color-mix(in lab, red, red)){.lpf-wire{stroke:color-mix(in srgb, var(--color-interactive) 55%, transparent)}}.lpf-comet{stroke:var(--color-interactive)}.lpf-pulse{fill:var(--color-interactive)}@media (prefers-reduced-motion:reduce){.lpf-pulse,.lpf-comet{display:none}}@keyframes lpb-stage-hl{0%,20%,to{box-shadow:var(--shadow-card)}5%,15%{box-shadow:var(--shadow-card), 0 0 0 3px color-mix(in srgb, var(--lpb-c,var(--color-interactive)) 22%, transparent), 0 10px 24px -10px color-mix(in srgb, var(--lpb-c,var(--color-interactive)) 50%, transparent)}}@keyframes lpb-flow-hl{0%,20%,to{opacity:.45}5%,15%{opacity:1}}.lpb-stage{animation:9s ease-in-out infinite lpb-stage-hl;animation-delay:calc(var(--lpb-i,0) * 1.8s - 9s)}.lpb-flow{opacity:.45;animation:9s ease-in-out infinite lpb-flow-hl;animation-delay:calc(var(--lpb-i,0) * 1.8s - 9s)}@media (prefers-reduced-motion:reduce){.lpb-stage,.lpb-flow{opacity:1;animation:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/CodeField-dOzyFQNH.js","assets/jsx-runtime-BseJUIpC.js","assets/LoopView-CCYqXrKq.js","assets/Modal-BhRzAXQg.js","assets/loopApi-5s2-kCnu.js","assets/ui-By58RJgB.js","assets/artifactView-DekEs5ME.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{n as e,s as t,t as n}from"./jsx-runtime-BseJUIpC.js";import{S as r,_ as i,b as a,h as o,i as s,o as c,r as ee,u as l,v as u,x as d,y as te}from"./loopApi-5s2-kCnu.js";import{c as f,f as p,p as ne,t as re}from"./preload-helper-3xcHsDtt.js";import{a as ie,o as ae,r as oe,s as se}from"./notifyFns-DuBElaqG.js";import{A as ce,D as le,M as ue,S as m,T as de,_ as h,b as fe,c as pe,d as g,g as me,i as he,j as _,l as ge,m as v,n as _e,o as y,p as b,r as x,s as ve,t as ye,v as S,w as C,x as be}from"./ui-By58RJgB.js";import{i as xe,n as Se,r as Ce,t as we}from"./lifecycleUi-C3k2MlX8.js";import{c as Te,r as w}from"./index-BATGA0jG.js";import{a as T,i as Ee,n as E,o as D,t as O}from"./artifactView-DekEs5ME.js";import{t as De}from"./SignIn-CV3jqX_8.js";import{i as Oe,n as ke,r as Ae,t as je}from"./actionUi-BRtdWVvO.js";var k=t(e(),1);function Me(e){if(!e)return null;let t=e.replace(/\\/g,`/`).replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n>0?t.slice(0,n):null}function Ne({loopId:e,loopName:t,instruction:n}){let r=n?.trim()||`Describe the change you want to make to this loop.`;return[`I want to adjust my Pievo loop "${t}" (loop id: ${e}).`,``,`The change I want:`,r,``,`Use the installed pievo CLI/skill to apply it: run \`pievo loops\` to find the loop, then \`pievo edit ${e} ...\` to make the change, and confirm the loop now reflects it. Ask me first if anything is unclear.`].join(`
|
|
3
|
-
`)}var A=n(),j=e=>e.split(`/`).pop()||e;function M(e){let t=e.match(/\.([a-z0-9]+)$/i);return t?t[1].toLowerCase():`file`}function Pe({loopId:e,taskFile:t,taskFileContent:n,taskFileSyncedAt:r,running:i}){let[a,o]=(0,k.useState)(null),[s,ee]=(0,k.useState)(null),l=(0,k.useRef)(0),u=(0,k.useCallback)(async()=>{let t=++l.current;try{let n=await c({data:{loopId:e}});t===l.current&&o(n)}catch{t===l.current&&o(e=>e??[])}},[e]);(0,k.useEffect)(()=>{o(null),ee(null),u()},[e,u]),(0,k.useEffect)(()=>{let e=setInterval(()=>void u(),i?4e3:12e3);return()=>clearInterval(e)},[i,u]);let d=(0,k.useMemo)(()=>T(t,a??[]),[t,a]),te=s&&d.some(e=>e.path===s)?s:d[0]?.path??null,f=d.find(e=>e.path===te)??null,p=D(f);return(0,A.jsxs)(`section`,{id:`files`,className:`min-w-0`,children:[(0,A.jsxs)(`div`,{className:`mb-2.5 flex items-end justify-between gap-3 border-b border-hairline pb-1.5`,children:[(0,A.jsxs)(`h2`,{className:`text-label font-semibold text-secondary`,children:[`Files`,a?` (${d.length})`:``]}),(0,A.jsx)(`span`,{className:`text-caption font-medium text-disabled`,children:`Spec + synced artifacts`})]}),d.length===0?(0,A.jsx)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 py-10 text-center text-body text-disabled shadow-card`,children:a==null?`Loading…`:`No files yet - the task file and synced artifacts appear here.`}):(0,A.jsxs)(`div`,{className:`grid h-[min(600px,68vh)] grid-cols-1 overflow-hidden rounded-card border border-hairline bg-surface shadow-card sm:grid-cols-[210px_1fr]`,children:[(0,A.jsx)(`nav`,{className:`max-h-44 overflow-y-auto border-b border-hairline sm:max-h-none sm:border-b-0 sm:border-r`,children:(0,A.jsx)(`ul`,{className:`py-1.5`,children:d.map(e=>{let t=e.path===te,n=D(e),r=!n&&e.kind===`artifact`?e.file.meta:null,i=r?.title?.trim()||``,a=i&&i!==j(e.path)?i:j(e.path),o=e.path.includes(`/`)||a!==j(e.path);return(0,A.jsx)(`li`,{children:(0,A.jsxs)(`button`,{type:`button`,onClick:()=>ee(e.path),className:`flex w-full items-center gap-2 border-l-2 px-3 py-2 text-left transition-colors ${t?`border-display bg-raised`:`border-transparent hover:bg-raised/60`}`,children:[(0,A.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,A.jsx)(`span`,{className:`block truncate font-mono text-label ${t?`text-display`:`text-primary`}`,title:e.path,children:a}),o&&(0,A.jsx)(`span`,{className:`block truncate font-mono text-micro text-disabled`,title:e.path,children:e.path})]}),n?(0,A.jsx)(`span`,{className:`shrink-0 rounded-full bg-interactive-soft px-2 text-caption font-medium text-interactive`,children:`Task`}):r?.type?(0,A.jsx)(`span`,{className:`shrink-0 truncate rounded-full bg-raised px-2 text-caption font-medium text-secondary`,title:`type: ${r.type}`,children:r.type}):(0,A.jsx)(`span`,{className:`shrink-0 font-mono text-micro text-disabled`,children:M(e.path)})]})},e.path)})})}),(0,A.jsx)(`div`,{className:`min-w-0 overflow-y-auto`,children:p&&f?(0,A.jsx)(N,{path:f.path,content:n,syncedAt:r}):f?.kind===`artifact`?(0,A.jsx)(P,{loopId:e,file:f.file}):null})]})]})}function N({path:e,content:t,syncedAt:n}){return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(E,{path:e,meta:n?`Task file · synced ${de(n)}`:`Task file`}),t==null?(0,A.jsx)(`div`,{className:`px-5 py-6 text-body text-disabled`,children:`(syncs from the machine on the next run)`}):(0,A.jsx)(Ee,{content:t})]})}function P({loopId:e,file:t}){let n=[t.size==null?``:le(t.size),`synced ${de(t.updatedAt)}`].filter(Boolean).join(` · `);return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(E,{path:t.path,meta:n}),(0,A.jsx)(O,{loopId:e,file:t})]})}var Fe=[`claude-code`,`codex`];function F(e){return{executor:`claude`,workdir:e.workdir.trim(),model:e.model.trim(),reasoningEffort:e.reasoningEffort.trim(),allowControl:e.allowControl}}var I=(0,k.lazy)(()=>re(()=>import(`./CodeField-dOzyFQNH.js`),__vite__mapDeps([0,1])));function L(e){let t=e?.exec;return{name:e?.name??``,cron:e?.cron??`0 */3 * * *`,scheduleMode:e?.scheduleMode??`cron`,continuousDelayMinutes:String(e?.continuousDelayMinutes??1),taskFile:e?.taskFile??``,notify:e?.notify??`auto`,channelId:e?.channelId??``,metricSchema:e?.metricSchema?JSON.stringify(e.metricSchema):``,ui:e?.ui??``,agent:e?.agent??`claude-code`,workdir:t?.workdir??``,model:t?.model??``,reasoningEffort:t?.reasoningEffort??``,allowControl:!!t?.allowControl}}var R=`mt-1 text-caption leading-snug text-disabled`,z={"claude-code":`Claude Code`,codex:`Codex`};function B({label:e,value:t,onChange:n,mono:r,ph:i,hint:a}){let o=(0,k.useId)();return(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`label`,{htmlFor:o,className:v,children:e}),(0,A.jsx)(`input`,{id:o,type:`text`,className:r?`${b} font-mono`:b,value:t,placeholder:i,onChange:e=>n(e.target.value)}),a&&(0,A.jsx)(`div`,{className:R,children:a})]})}function V({title:e,hint:t}){return(0,A.jsxs)(`div`,{className:`mb-1 mt-7 border-b border-hairline pb-1.5`,children:[(0,A.jsx)(`h2`,{className:h,children:e}),t&&(0,A.jsx)(`div`,{className:`mt-0.5 text-caption text-disabled`,children:t})]})}function H({minHeight:e}){return(0,A.jsx)(`div`,{className:`rounded-control border border-wire bg-raised`,style:{minHeight:e}})}var Ie=(0,k.forwardRef)(function({initial:e,channels:t},n){let[r,i]=(0,k.useState)(()=>L(e)),a=(e,t)=>i(n=>({...n,[e]:t})),[o,s]=(0,k.useState)(null),[c,ee]=(0,k.useState)([]),l=t??c;return(0,k.useEffect)(()=>{t||oe().then(ee).catch(()=>{})},[t]),(0,k.useImperativeHandle)(n,()=>({read(){let e,t=r.metricSchema.trim();if(t)try{e=JSON.parse(t)}catch{return s(`Not valid JSON - expected an array like [{"key":"mrr","label":"MRR","unit":"$"}]`),null}return{name:r.name.trim(),cron:r.cron.trim(),scheduleMode:r.scheduleMode,continuousDelayMinutes:Math.max(1,Number.parseInt(r.continuousDelayMinutes,10)||1),taskFile:r.taskFile.trim(),notify:r.notify,channelId:r.channelId||null,ui:r.ui.trim()||void 0,agent:r.agent,exec:F(r),metricSchema:e}}})),(0,A.jsxs)(`div`,{className:`grid gap-x-10 lg:grid-cols-[minmax(300px,380px)_minmax(0,1fr)]`,children:[(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(V,{title:`Basics`}),(0,A.jsx)(B,{label:`Name`,value:r.name,onChange:e=>a(`name`,e)}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`label`,{className:v,children:`Schedule mode`}),(0,A.jsxs)(`select`,{"aria-label":`Schedule mode`,className:S,value:r.scheduleMode,onChange:e=>a(`scheduleMode`,e.target.value),children:[(0,A.jsx)(`option`,{value:`cron`,children:`Cron`}),(0,A.jsx)(`option`,{value:`continuous`,children:`Continuous`})]}),r.scheduleMode===`cron`?(0,A.jsxs)(`div`,{className:`${b} flex cursor-default select-none items-center justify-between gap-2 bg-raised`,title:r.cron,children:[(0,A.jsx)(`span`,{className:`truncate text-primary`,children:fe(r.cron)}),(0,A.jsx)(`span`,{className:`shrink-0 font-mono text-caption text-secondary`,children:r.cron})]}):(0,A.jsx)(B,{label:`Delay after each exec (minutes)`,value:r.continuousDelayMinutes,onChange:e=>a(`continuousDelayMinutes`,e),mono:!0,hint:`At least 1 minute. Done and error continue; canceled runs do not.`}),(0,A.jsx)(`div`,{className:R,children:`Cron is retained while continuous mode is active, so switching back restores it.`})]}),(0,A.jsx)(B,{label:`Task file`,value:r.taskFile,onChange:e=>a(`taskFile`,e),mono:!0,hint:`Path of the markdown file this loop tracks/maintains on the machine (optional).`}),(0,A.jsx)(V,{title:`Notifications`}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`label`,{className:v,children:`Notify`}),(0,A.jsx)(`select`,{"aria-label":`Notify`,className:S,value:r.notify,onChange:e=>a(`notify`,e.target.value),children:[`auto`,`always`,`never`].map(e=>(0,A.jsx)(`option`,{children:e},e))}),(0,A.jsx)(`div`,{className:R,children:`auto pushes only when a run found something; never silences everything.`})]}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`label`,{className:v,children:`Push channel`}),(0,A.jsxs)(`select`,{"aria-label":`Push channel`,className:S,value:r.channelId,onChange:e=>a(`channelId`,e.target.value),children:[(0,A.jsx)(`option`,{value:``,children:`none (dashboard only)`}),l.map(e=>(0,A.jsx)(`option`,{value:e.id,children:e.name},e.id))]})]}),(0,A.jsx)(V,{title:`Execution`,hint:`Which coding agent on the machine runs this loop.`}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(`label`,{className:v,children:`Coding agent`}),(0,A.jsx)(`select`,{"aria-label":`Coding agent`,className:S,value:r.agent,onChange:e=>a(`agent`,e.target.value),children:Fe.map(e=>(0,A.jsx)(`option`,{value:e,children:z[e]??e},e))}),(0,A.jsx)(`div`,{className:R,children:`Which coding agent executes this loop on the bound machine.`})]}),(0,A.jsx)(B,{label:`Working directory`,value:r.workdir,onChange:e=>a(`workdir`,e),mono:!0,ph:`/Users/you/Workspace/project`,hint:`Project root on the machine. Empty lets the daemon use a scratch directory.`}),(0,A.jsx)(B,{label:`Model`,value:r.model,onChange:e=>a(`model`,e),ph:`default`,hint:`Optional arbitrary model id. Empty uses the coding-agent CLI default.`}),(0,A.jsx)(B,{label:`Reasoning effort`,value:r.reasoningEffort,onChange:e=>a(`reasoningEffort`,e),ph:`default`,hint:`Optional arbitrary effort value. Empty uses the coding-agent CLI default.`}),(0,A.jsxs)(`label`,{className:`mt-4 flex cursor-pointer items-center gap-2 text-body text-primary`,children:[(0,A.jsx)(`input`,{type:`checkbox`,className:`accent-[color:var(--color-display)]`,checked:r.allowControl,onChange:e=>a(`allowControl`,e.target.checked)}),`Allow self-rescheduling`]})]}),(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsx)(V,{title:`Agent-authored content`,hint:`Metrics and dashboard - usually written by evolve passes; edit by hand here when you know exactly what you want.`}),(0,A.jsx)(`label`,{className:v,children:`Metrics schema · JSON array`}),(0,A.jsx)(k.Suspense,{fallback:(0,A.jsx)(H,{minHeight:`90px`}),children:(0,A.jsx)(I,{lang:`json`,value:r.metricSchema,onChange:e=>{a(`metricSchema`,e),s(null)},minHeight:`90px`,invalid:!!o,placeholder:`[{"key":"mrr","label":"MRR","unit":"$"},{"key":"paid"}]`})}),o?(0,A.jsx)(`div`,{className:`mt-1 text-caption leading-snug text-accent`,children:o}):(0,A.jsx)(`div`,{className:R,children:`Per-run metrics the agent reports; they feed the dashboard charts.`}),(0,A.jsx)(`label`,{className:v,children:`Dashboard template · HTML`}),(0,A.jsx)(k.Suspense,{fallback:(0,A.jsx)(H,{minHeight:`240px`}),children:(0,A.jsx)(I,{lang:`html`,value:r.ui,onChange:e=>a(`ui`,e),minHeight:`240px`,placeholder:`<h3>{{latest.mrr}}$</h3>
|
|
4
|
-
<loop-chart series="mrr:MRR:$"></loop-chart>`})}),(0,A.jsxs)(`div`,{className:R,children:[`Agent-authored HTML with `,`{{bindings}}`,` and loop-chart / loop-embed / loop-calendar / loop-kanban elements.`]})]})]})}),Le={"claude-code":`Claude Code`,codex:`Codex`},Re=[{label:`Change the schedule`,seed:`Change the schedule: `},{label:`Adjust what it does`,seed:`Change what this loop does: `},{label:`Improve the dashboard`,seed:`Improve the dashboard: `},{label:`Set an objective`,seed:`Give this loop a standing objective to optimize toward: `}],ze=(0,k.lazy)(()=>re(()=>import(`./LoopView-CCYqXrKq.js`).then(e=>({default:e.LoopView})),__vite__mapDeps([2,1,3,4,5,6])));function U({id:e}){let t=ne(),[n,c]=(0,k.useState)(null),[f,re]=(0,k.useState)([]),[ae,le]=(0,k.useState)(null),[m,h]=(0,k.useState)(null),[g,_]=(0,k.useState)(!1),[v,b]=(0,k.useState)(!1),[S,C]=(0,k.useState)(``),[w,T]=(0,k.useState)(!1),[Ee,E]=(0,k.useState)(!1),[D,O]=(0,k.useState)(null),De=(0,k.useRef)(null),[j,M]=(0,k.useState)(!1),[N,P]=(0,k.useState)(null),[Fe,F]=(0,k.useState)(!1),[I,L]=Oe(),R=(0,k.useRef)(null),z=(0,k.useRef)(!1),[B,V]=(0,k.useState)([]),H=(0,k.useCallback)(async(n=!1)=>{try{let t=await l({data:e});c(t),z.current=t.summary.deleteRequestedAt!=null,le(null)}catch(e){z.current?t({to:`/`}):n||le(String(e))}},[e]);(0,k.useEffect)(()=>{c(null),_(!1),b(!1),C(``),T(!1),E(!1),O(null),F(!1),V([]),H(),oe().then(re).catch(()=>{})},[e,H]);let U=!!n?.summary.running;(0,k.useEffect)(()=>{if(g)return;let e=setInterval(()=>void H(!0),U||z.current?3e3:8e3);return()=>clearInterval(e)},[g,U,H]);async function W(){await H()}async function Ue(){h(null),P(`run`);try{let t=await a({data:e});if(t?.error)return h(`Run failed: ${t.error}`);L({label:t.coalesced?`Already queued`:`Queued`,hold:4e3}),await W()}finally{P(null)}}async function We(){h(null),P(`evolve`);try{let t=await s({data:e});if(t?.error)return h(`Evolve failed: ${t.error}`);L({label:t.coalesced?`Evolve already queued`:`Evolve queued`,hold:4e3}),await W()}finally{P(null)}}async function Ge(n){h(null),P(`lifecycle`);try{let i=n===`pause`?await u({data:e}):n===`start`?await d({data:e}):n===`stop`?await r({data:e}):await ee({data:e});if(i.error)return h(`${n[0].toUpperCase()+n.slice(1)} failed: ${i.error}`);if(F(!1),i.deleted){z.current=!1,t({to:`/`});return}n===`delete`&&(z.current=!0),await W(),L({label:n===`start`?`Started`:n===`pause`?`Paused`:n===`stop`?`Stop requested`:`Deleting`})}finally{P(null)}}async function Ke(){let t=R.current?.read();if(t){h(null),P(`save`);try{let n=await i({data:{id:e,patch:t}});if(n.error)return h(`Save failed: ${n.error}`);_(!1),await W(),L({label:`Saved`})}finally{P(null)}}}async function qe(){let t=S.trim();if(t){h(null),P(`edit`);try{let n=await te({data:{id:e,instruction:t}});if(n.error)return h(`Couldn't queue the edit: ${n.error}`);O(n.runId??null),E(!0),b(!1),C(``),await W()}finally{P(null)}}}let Je=(0,A.jsxs)(p,{to:`/`,className:`inline-flex items-center gap-1.5 text-meta font-medium text-secondary transition-colors hover:text-display`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Loops`]});if(ae)return(0,A.jsx)(Ve,{back:Je,children:(0,A.jsx)(Ae,{title:`Couldn't load this loop.`,detail:ae,onRetry:()=>void H()})});if(!n)return(0,A.jsx)(Ve,{back:Je,children:(0,A.jsx)(_e,{})});let{job:G,summary:K,runs:Ye}=n,Xe=!!G.ui,Ze=!!N,Qe=n.machine.online,q=n.machine.presence===`asleep`,$e=Qe?void 0:q?`Machine asleep - requests will stay queued until it wakes`:`Machine offline - requests will stay queued until it reconnects`,et=Ce(K),tt=xe(n),nt=Se(n.machine.daemonProtocol),rt=n.machine.name?`“${n.machine.name}”`:`the bound machine`,J=Ee&&D?Ye.find(e=>e.id===D):void 0,it=!!J&&!J.queued&&!J.running,at=()=>{E(!1),O(null)},ot=Me(G.taskFile),st=async()=>{try{await navigator.clipboard.writeText(Ne({loopId:e,loopName:K.name,instruction:S})),T(!0),setTimeout(()=>T(!1),4e3)}catch{h(`Could not copy the prompt - try again or copy it manually.`)}},ct=I&&(0,A.jsx)(`div`,{className:`mb-2.5`,children:(0,A.jsx)(ke,{label:I.label,tone:I.tone,onUndo:I.undo})}),Y=et===`deleting`,lt=!K.enabled&&!Y,ut=K.enabled&&!Y,X=Ze||Y,Z=ut||lt,dt=Z&&!!K.running&&nt.supported,ft=K.running&&!nt.supported?we:K.running?void 0:`No run is currently running`,pt=(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,A.jsx)(`button`,{className:ge,disabled:X||!Z,onClick:()=>void Ue(),title:Z?$e??(G.exec?`Spends credits`:void 0):`Unavailable for a deleting loop`,"aria-label":G.exec?`Run once - spends credits`:`Run once`,children:N===`run`?`Queuing…`:`Run once`}),(0,A.jsx)(`button`,{className:y,disabled:X||!Z,title:`Dispatch or copy a prompt for an owner-requested edit`,onClick:()=>b(!0),children:`Agent edit`}),(0,A.jsx)(`button`,{className:y,disabled:X||!Z,title:Z?$e??`Spends credits`:`Unavailable for a deleting loop`,onClick:()=>void We(),children:N===`evolve`?`Evolving…`:`Evolve once`}),(0,A.jsx)(`button`,{className:y,disabled:X,onClick:()=>_(!0),children:`Settings`}),(0,A.jsx)(`button`,{className:y,disabled:X||!lt,onClick:()=>void Ge(`start`),children:`Start`}),(0,A.jsx)(`button`,{className:y,disabled:X||!ut,onClick:()=>void Ge(`pause`),children:`Pause`}),(0,A.jsx)(`button`,{className:pe,disabled:X||!dt,title:ft,onClick:()=>void Ge(`stop`),children:`Stop`}),(0,A.jsx)(`button`,{className:pe,disabled:X,onClick:()=>F(!0),children:Y?`Deleting…`:`Delete`})]}),Fe&&!Y&&(0,A.jsx)(`div`,{className:`mt-3`,children:(0,A.jsx)(je,{prompt:`Stop this loop and delete its server data?`,note:`This stops the loop and deletes server history and synced artifacts. Local files are not deleted. If the machine is unreachable, server data is still deleted and its local process may continue running.`,cta:`Delete`,danger:!0,busy:Ze,onConfirm:()=>void Ge(`delete`),onCancel:()=>F(!1)})}),Y&&(0,A.jsx)(`div`,{className:`mt-3 rounded-md border border-wire bg-raised px-4 py-3 text-meta text-secondary`,children:`Deleting… graceful stop is waiting for execution authority to end.`}),v&&!Y&&(0,A.jsxs)(`div`,{className:`mt-4 border-t border-hairline pt-4`,onKeyDown:e=>{e.key===`Escape`&&N!==`edit`&&(e.stopPropagation(),b(!1))},children:[(0,A.jsxs)(`div`,{className:`flex flex-wrap items-baseline justify-between gap-x-4 gap-y-1`,children:[(0,A.jsx)(`span`,{className:`text-body font-medium text-display`,children:`Edit with your coding agent`}),(0,A.jsxs)(`span`,{className:`text-meta text-secondary`,children:[`One agent pass on `,rt,` · spends credits`]})]}),(0,A.jsx)(`textarea`,{ref:De,autoFocus:!0,value:S,onChange:e=>C(e.target.value),onKeyDown:e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&S.trim()&&N!==`edit`&&qe()},rows:3,placeholder:`e.g. run at 9am on weekdays instead, and also check coffee stock`,className:`mt-3 w-full resize-y rounded-control border border-wire bg-raised p-3 font-mono text-label leading-relaxed text-primary outline-none transition-shadow placeholder:text-disabled focus:border-transparent focus:shadow-focus`}),!S.trim()&&(0,A.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-1.5`,children:Re.map(e=>(0,A.jsx)(`button`,{type:`button`,onClick:()=>{C(e.seed),De.current?.focus()},className:`cursor-pointer rounded-full border border-wire bg-surface px-3 py-1 text-label font-medium text-secondary transition-colors hover:bg-raised hover:text-display`,children:e.label},e.label))}),(0,A.jsxs)(`div`,{className:`mt-3.5 flex flex-wrap items-center gap-x-2.5 gap-y-2`,children:[(0,A.jsx)(`button`,{className:ve,disabled:N===`edit`||!S.trim(),title:$e,onClick:()=>void qe(),children:N===`edit`?`Dispatching…`:`Dispatch to your coding agent`}),(0,A.jsx)(`button`,{type:`button`,className:y,disabled:N===`edit`,onClick:()=>void st(),children:w?`✓ Prompt copied`:`Copy prompt`}),(0,A.jsx)(`button`,{className:y,disabled:N===`edit`,onClick:()=>b(!1),children:`Cancel`}),(0,A.jsx)(`span`,{className:`hidden text-caption text-disabled sm:inline`,children:`⌘↩ dispatch · esc cancel`})]}),(0,A.jsx)(`div`,{className:`mt-2 text-caption leading-snug text-disabled`,children:w?(0,A.jsxs)(`span`,{className:`text-secondary`,children:[`✓ Copied · run your coding agent`,` `,ot?(0,A.jsxs)(A.Fragment,{children:[`in `,(0,A.jsx)(`code`,{className:`break-all font-mono text-primary`,children:ot})]}):`in the loop’s local directory on this machine`,` `,`and paste the prompt to adjust the loop yourself.`]}):(0,A.jsx)(A.Fragment,{children:`Prefer to adjust it yourself? Copy prompt drops a ready-to-paste prompt for your own coding agent - no dispatch, no credits.`})})]})]}),mt=m&&(0,A.jsx)(ye,{message:m,onDismiss:()=>h(null),className:`mb-2.5`}),Q=n.team&&!n.team.isActive?n.team:null,ht=e=>{Te(e),t({to:`/t/$teamId`,params:{teamId:e}})},gt=Q&&(0,A.jsxs)(`div`,{className:`mb-2.5 flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-control border border-hairline bg-raised px-4 py-2.5`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-meta font-medium text-secondary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-2 rounded-full bg-interactive`}),`Viewing a loop in `,Q.name]}),(0,A.jsx)(`span`,{className:`text-meta text-secondary`,children:`- not your active team.`}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>ht(Q.id),className:`ml-auto cursor-pointer text-meta font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Switch to this team`})]}),_t=n.machine.needsUpdate&&(0,A.jsxs)(`div`,{className:`mb-2.5 flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-control border border-warn/40 bg-warn/10 px-4 py-2.5`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-meta font-medium text-primary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-2 rounded-full bg-warn`}),`Daemon update required`]}),(0,A.jsxs)(`span`,{className:`text-meta text-secondary`,children:[`This server requires v`,n.machine.requiredDaemonVersion,`; `,n.machine.name?`“${n.machine.name}”`:`the bound machine`,` reports `,n.machine.daemonVersion?`v${n.machine.daemonVersion}`:`an unknown version`,`. Queued work will wait.`]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>M(!0),className:`ml-auto cursor-pointer text-meta font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Update daemon`})]}),vt=!Qe&&(0,A.jsxs)(`div`,{className:`mb-2.5 flex flex-wrap items-center gap-x-3 gap-y-1.5 rounded-control border border-hairline bg-raised px-4 py-2.5`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-meta font-medium text-secondary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-2 rounded-full ${q?`bg-rubik-yellow`:`bg-disabled`}`}),`Machine `,n.machine.name?`“${n.machine.name}” `:``,q?`seems to be asleep or offline`:`offline`]}),(0,A.jsxs)(`span`,{className:`text-meta text-secondary`,children:[q?`- queued work starts automatically when it reconnects.`:`- manual run, evolve, and edit requests remain safely queued.`,n.machine.lastSeen?` Last seen ${ce(n.machine.lastSeen)}.`:``]}),(0,A.jsx)(`button`,{type:`button`,onClick:()=>M(!0),className:`ml-auto cursor-pointer text-meta font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`Reconnect`})]});if(g)return(0,A.jsxs)(Ve,{back:Je,children:[(0,A.jsx)(Be,{name:K.name,onBack:()=>_(!1)}),(0,A.jsxs)(`div`,{className:`mt-5 rounded-card border border-hairline bg-surface px-6 pb-6 pt-2 shadow-card`,children:[(0,A.jsx)(Ie,{ref:R,initial:G,channels:f}),(0,A.jsxs)(`div`,{className:`mt-7 border-t border-hairline pt-4`,children:[mt,(0,A.jsxs)(`div`,{className:`flex flex-wrap gap-2.5`,children:[(0,A.jsx)(`button`,{className:ge,disabled:N===`save`,onClick:Ke,children:N===`save`?`Saving…`:`Save`}),(0,A.jsx)(`button`,{className:y,disabled:N===`save`,onClick:()=>_(!1),children:`Cancel`})]})]})]})]});let yt=Le[G.agent??`claude-code`]??G.agent??`Claude Code`,bt=G.exec?.model?.trim()||`default`,xt=G.exec?.reasoningEffort?.trim()||`default`,St=Ye[0],Ct=St?.reportIncident?St:void 0,$=(0,A.jsx)(`span`,{className:`text-wire`,children:`·`});return(0,A.jsxs)(Ve,{back:Je,children:[(0,A.jsxs)(`header`,{className:`rounded-card border border-hairline bg-surface px-6 pb-5 pt-[22px] shadow-card`,children:[(0,A.jsx)(`div`,{className:`flex flex-wrap items-start justify-between gap-x-6 gap-y-4`,children:(0,A.jsxs)(`div`,{className:`min-w-0`,children:[(0,A.jsxs)(`div`,{className:`flex flex-wrap items-center gap-3`,children:[(0,A.jsx)(`h1`,{className:`text-[28px] font-semibold leading-tight tracking-[-0.015em] text-display`,children:K.name}),(0,A.jsx)(x,{tone:et===`stopping`?`running`:void 0,dot:et===`stopping`?`pulse`:void 0,children:tt}),K.queued&&et===`active`?(0,A.jsx)(x,{tone:`outline`,children:`Queued`}):null,K.goal&&(0,A.jsx)(x,{tone:`success`,title:K.goal??void 0,children:`Objective`}),(0,A.jsx)(x,{tone:`outline`,title:`Recorded coding agent`,children:yt}),(0,A.jsx)(x,{tone:`outline`,title:`Model: ${bt}`,children:(0,A.jsxs)(`span`,{className:`max-w-72 truncate`,children:[`Model: `,bt]})}),(0,A.jsx)(x,{tone:`outline`,title:`Reasoning: ${xt}`,children:(0,A.jsxs)(`span`,{className:`max-w-72 truncate`,children:[`Reasoning: `,xt]})}),Q&&(0,A.jsx)(x,{tone:`outline`,title:`This loop belongs to another of your teams`,children:Q.name})]}),(0,A.jsxs)(`div`,{className:`mt-2.5 flex flex-wrap items-center gap-x-2.5 gap-y-1 text-meta text-secondary`,children:[(0,A.jsx)(`span`,{className:`text-primary`,title:G.cron,children:G.scheduleMode===`continuous`?`continuous · ${G.continuousDelayMinutes}m delay`:fe(G.cron)}),$,(0,A.jsxs)(`span`,{children:[`next `,de(K.nextRun)]}),K.nextRun&&K.enabled&&(0,A.jsxs)(`span`,{className:`text-disabled`,children:[`(`,ue(K.nextRun),`)`]}),$,(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,title:Qe?`Machine online`:q?`Machine asleep`:`Machine offline`,children:[(0,A.jsx)(`span`,{className:`size-1.5 rounded-full ${Qe?`bg-rubik-green`:q?`bg-rubik-yellow`:`bg-disabled`}`}),n.machine.name||`machine`]}),$,(0,A.jsx)(`span`,{title:`Breaking daemon/server lifecycle protocol`,children:nt.label}),$,(0,A.jsx)(`code`,{className:`font-mono text-label text-disabled`,children:K.id})]}),K.goal&&(0,A.jsxs)(`div`,{className:`mt-2 text-body leading-snug text-secondary`,children:[`Working toward: `,(0,A.jsx)(`span`,{className:`text-primary`,children:K.goal})]}),Ct?.reportIncident&&(0,A.jsx)(`div`,{className:`mt-2 text-body leading-snug text-secondary`,children:Ct.phase===`error`?`Last run failed · Terminal report rejected`:`Last run telemetry warning · Terminal report rejected`})]})}),(0,A.jsxs)(`div`,{className:`mt-5 border-t border-hairline pt-4`,children:[gt,_t,vt,mt,ct,pt]})]}),Ee&&(0,A.jsxs)(`section`,{className:`mt-6 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card`,style:{animation:`fadeIn 0.2s ease-out`},"aria-live":`polite`,children:[(0,A.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-4 gap-y-2`,children:[!J||J.queued?(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-2.5 text-body text-secondary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 shrink-0 rounded-full bg-disabled`}),(0,A.jsx)(`span`,{className:`font-medium text-primary`,children:`Edit queued`}),(0,A.jsxs)(`span`,{children:[`waiting for `,rt,` and higher-priority work…`]})]}):J.running?(0,A.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2.5 text-body text-secondary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 shrink-0 rounded-full`,style:me}),(0,A.jsx)(`span`,{className:`shrink-0 font-medium text-primary`,children:`Applying your edit`})]}):(0,A.jsxs)(`span`,{className:`inline-flex min-w-0 items-center gap-2 text-body`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-2.5 shrink-0 rounded-[2px]`,style:{background:be(J)}}),(0,A.jsx)(`span`,{className:`font-medium`,style:{color:be(J)},children:J.canceled?`Edit canceled`:J.phase===`error`?`Edit failed`:`Edit applied`}),J.error&&(0,A.jsxs)(`span`,{className:`truncate text-secondary`,children:[`· `,J.error]})]}),(0,A.jsxs)(`div`,{className:`ml-auto flex items-center gap-3.5`,children:[J&&(0,A.jsx)(p,{to:`/loops/$loopId/runs/$runId`,params:{loopId:e,runId:J.id},className:`text-label font-medium text-interactive underline underline-offset-2 transition-colors hover:text-display`,children:`View run →`}),(0,A.jsx)(`button`,{type:`button`,onClick:at,className:`inline-flex cursor-pointer items-center gap-1.5 border-none bg-transparent p-0 text-meta font-medium text-secondary transition-colors hover:text-display`,children:it?`Done`:`Hide`})]})]}),it&&J.message&&(0,A.jsx)(`div`,{className:`mt-3.5`,children:(0,A.jsx)(he,{children:J.message})})]}),Xe&&(0,A.jsxs)(`section`,{className:`mt-6 min-w-0 rounded-card border border-hairline bg-surface px-6 py-5 shadow-card`,children:[(0,A.jsx)(`div`,{className:`mb-3.5 border-b border-hairline pb-1.5 text-label font-semibold text-secondary`,children:`Dashboard`}),(0,A.jsx)(`div`,{className:`min-w-0 overflow-x-auto`,children:(0,A.jsx)(k.Suspense,{fallback:(0,A.jsx)(_e,{className:`py-4`}),children:(0,A.jsx)(ze,{html:G.ui,runs:Ye,loopId:e,taskFile:G.taskFile})})})]}),(0,A.jsxs)(`div`,{className:`mt-6 grid grid-cols-1 gap-6 lg:grid-cols-[minmax(0,1fr)_minmax(300px,360px)]`,children:[(0,A.jsx)(Pe,{loopId:e,taskFile:G.taskFile,taskFileContent:n.taskFileContent,taskFileSyncedAt:n.taskFileSyncedAt,running:U}),(0,A.jsx)(He,{loopId:e,summary:K,runs:Ye,older:B,onMore:async()=>{let t=(B.length?se(K.runs??[],B):K.runs??[])[0];if(!t)return 0;let n=await o({data:{loopId:e,beforeTs:t.ts,limit:16}});return n.length&&V(e=>se(e,n)),n.length},onPickRun:n=>t({to:`/loops/$loopId/runs/$runId`,params:{loopId:e,runId:n.id}})})]}),(0,A.jsx)(ie,{open:j,onClose:()=>M(!1)})]})}function Be({name:e,onBack:t}){return(0,A.jsxs)(`div`,{children:[(0,A.jsxs)(`button`,{type:`button`,onClick:t,className:g,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,children:`←`}),` Back to loop`]}),(0,A.jsxs)(`h1`,{className:`mt-2.5 text-[24px] font-semibold leading-tight tracking-[-0.015em] text-display`,children:[`Settings · `,e]}),(0,A.jsx)(`p`,{className:`mt-1.5 max-w-[640px] text-meta leading-snug text-secondary`,children:`Loop configuration, notifications, and push channel, saved directly - no agent pass or credits. For changes in plain words, use Agent edit instead.`})]})}function Ve({back:e,children:t}){return(0,A.jsxs)(`main`,{className:`mx-auto max-w-[1360px] px-8 pb-24 pt-10`,children:[(0,A.jsx)(`div`,{className:`mb-5`,children:e}),t]})}function He({loopId:e,summary:t,runs:n,older:r,onMore:i,onPickRun:a}){let o=(0,k.useMemo)(()=>r.length?se(t.runs??[],r):t.runs??[],[t.runs,r]);return(0,A.jsxs)(`section`,{className:`min-w-0`,children:[(0,A.jsx)(`div`,{className:`mb-2.5 flex items-end justify-between gap-3 border-b border-hairline pb-1.5`,children:(0,A.jsxs)(`h2`,{className:h,children:[`Runs (`,t.runCount,`)`]})}),t.runCount===0?(0,A.jsx)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 py-10 text-center text-body text-disabled`,children:`Never run`}):(0,A.jsxs)(`div`,{className:`rounded-card border border-hairline bg-surface px-5 pb-4 pt-5 shadow-card`,children:[(0,A.jsx)(ae,{job:t,runs:o,total:t.runCount,onLoadMore:i,onPickRun:a}),(0,A.jsx)(`ul`,{className:`mt-5 max-h-[clamp(280px,46vh,520px)] divide-y divide-hairline overflow-y-auto border-t border-hairline`,children:n.map(t=>(0,A.jsx)(`li`,{children:(0,A.jsxs)(p,{to:`/loops/$loopId/runs/$runId`,params:{loopId:e,runId:t.id},className:`flex items-start gap-2.5 py-2.5 transition-colors hover:bg-raised`,children:[(0,A.jsx)(`span`,{className:`mt-1 inline-block size-2.5 shrink-0 rounded-[2px]`,style:{background:be(t)},title:m(t),"aria-label":m(t)}),(0,A.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,A.jsxs)(`span`,{className:`flex items-baseline justify-between gap-2`,children:[(0,A.jsx)(`span`,{className:`font-mono text-label text-secondary`,children:_(t.ts)}),(0,A.jsx)(`span`,{className:`shrink-0 font-mono text-caption text-disabled`,children:C(t.durationMs)})]}),(0,A.jsx)(`span`,{className:`mt-0.5 block`,children:t.queued?(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-meta text-secondary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 rounded-full bg-disabled`}),(0,A.jsx)(`span`,{children:`Queued`})]}):t.running?(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-2 text-meta text-secondary`,children:[(0,A.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 rounded-full`,style:me}),(0,A.jsx)(`span`,{children:`Running`})]}):t.error?(0,A.jsx)(`span`,{className:`line-clamp-2 text-meta text-secondary`,children:t.error}):(0,A.jsx)(`span`,{className:`line-clamp-2 text-meta text-primary`,children:t.message||m(t)})})]})]})},t.id))})]})]})}function W(){let{loopId:e}=w.useParams(),{auth:t}=w.useLoaderData()??{auth:{enabled:!1}},{data:n,isPending:r}=f();return t?.enabled&&!r&&!n?(0,A.jsx)(De,{callbackURL:`/loops/${e}`}):(0,A.jsx)(U,{id:e})}export{W as component};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,s as t,t as n}from"./jsx-runtime-BseJUIpC.js";var r=t(e(),1),i=e=>e?new Date(e).toLocaleString():`—`,a=e=>{if(!e)return``;let t=Math.round((Date.now()-Date.parse(e))/1e3);if(t<60)return`${t}s ago`;let n=Math.round(t/60);if(n<60)return`${n}m ago`;let r=Math.round(n/60);return r<24?`${r}h ago`:`${Math.round(r/24)}d ago`},o=[`Sun`,`Mon`,`Tue`,`Wed`,`Thu`,`Fri`,`Sat`];function s(e){let t=(e||``).trim().split(/\s+/);if(t.length!==5)return e;let[n,r,i,a,s]=t,c=i===`*`&&a===`*`,l=r.match(/^\*\/(\d+)$/);if(l&&c&&s===`*`)return`every ${l[1]}h`;let u=n.match(/^\*\/(\d+)$/);if(u&&r===`*`&&c&&s===`*`)return`every ${u[1]}m`;if(r===`*`&&/^\d+$/.test(n)&&c&&s===`*`)return`hourly :${n.padStart(2,`0`)}`;if(/^\d+$/.test(n)&&/^\d+$/.test(r)&&c){let e=`${r.padStart(2,`0`)}:${n.padStart(2,`0`)}`;if(s===`*`)return`daily ${e}`;if(/^[0-6]$/.test(s))return`${o[Number(s)]} ${e}`}return e}var c=e=>{if(!e)return``;let t=Math.round((Date.parse(e)-Date.now())/1e3);if(t<=0)return`due`;let n=Math.round(t/60);if(n<60)return`in ${n}m`;let r=Math.round(n/60);return r<24?`in ${r}h`:`in ${Math.round(r/24)}d`},l=e=>{let t=new Date(e);return`${t.getMonth()+1}/${t.getDate()}`},u=e=>{if(!e)return`—`;let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getMonth()+1)}/${n(t.getDate())} ${n(t.getHours())}:${n(t.getMinutes())}`},d=e=>Math.abs(e)>=1e3?`${Math.round(e/100)/10}k`:`${Math.round(e*100)/100}`,f=e=>e?`${Math.round(e/1e3)}s`:``;function p(e){let t=Math.abs(e);return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}var m={kept:{c:`var(--color-run-kept)`,label:`Kept`},"no-change":{c:`var(--color-run-no-change)`,label:`No change`},blocked:{c:`var(--color-run-blocked)`,label:`Blocked`},error:{c:`var(--color-run-error)`,label:`Error`},warning:{c:`var(--color-run-warning)`,label:`Missing status`},canceled:{c:`var(--color-run-canceled)`,label:`Canceled`},queued:{c:`var(--color-run-queued)`,label:`Queued`},"active-exec":{c:`var(--color-run-active-exec)`,label:`Running…`},"active-edit":{c:`var(--color-run-active-edit)`,label:`Editing…`},"active-evolve":{c:`var(--color-run-active-evolve)`,label:`Evolving…`}},h=e=>e===`kept`||e===`no-change`||e===`blocked`?m[e]:void 0,g=e=>e.role===`edit`?`edit`:e.role===`evolve`?`evolve`:`exec`,_=e=>g(e)===`edit`?`Edited`:g(e)===`evolve`?`Improved`:`Kept`;function v(e){return e.running?m[`active-${g(e)}`].c:e.status===`blocked`?m.blocked.c:e.queued?m.queued.c:e.phase===`error`?m.error.c:e.canceled||e.phase===`canceled`?m.canceled.c:e.phase===`done`&&!h(e.status)?m.warning.c:(h(e.status)??m[`no-change`]).c}function y(e){return e.running||e.status===`blocked`||e.phase===`error`?1:e.queued?.7:e.canceled||e.phase===`canceled`?.5:e.phase===`done`&&!h(e.status)?.9:e.status===`no-change`?.55:1}function b(e){return e.queued?m.queued.label:e.running?e.cancelRequested?`Stopping…`:m[`active-${g(e)}`].label:e.status===`blocked`?m.blocked.label:e.phase===`error`?e.cancelRequested?`Failed while stopping`:m.error.label:e.canceled||e.phase===`canceled`?(e.error,`Canceled`):e.cancelRequested&&e.phase===`done`?`Succeeded while stopping`:e.status===`kept`?_(e):e.status===`no-change`?m[`no-change`].label:e.phase===`done`?m.warning.label:m[`no-change`].label}var x=e=>{let t=e.runs??[];return t.length?t[t.length-1]:null},S=n(),C=()=>()=>{},w=()=>(0,r.useSyncExternalStore)(C,()=>!0,()=>!1),T=`focus-visible:outline-none focus-visible:shadow-focus`,E=`inline-flex cursor-pointer items-center gap-1.5 rounded-control px-4 py-2 text-body font-medium transition-colors duration-150 disabled:cursor-default disabled:opacity-40 ${T}`,D=`${E} border border-wire bg-surface text-primary hover:bg-raised`,O=`${E} border border-display bg-display text-paper hover:opacity-85`,k=`${E} border border-transparent bg-rubik-red text-white hover:opacity-85`,A=`${E} border border-display bg-transparent text-display hover:bg-[color:var(--color-display)]/8`,j=`inline-flex shrink-0 cursor-pointer items-center gap-1 rounded-full border border-wire bg-surface px-3 py-1 text-label font-medium text-primary transition-colors duration-150 hover:bg-raised disabled:cursor-default disabled:opacity-40 ${T}`,M=`inline-flex shrink-0 cursor-pointer items-center gap-1.5 rounded-full border border-display bg-display px-4 py-2 text-body font-medium text-paper transition-colors duration-150 hover:opacity-85 disabled:cursor-default disabled:opacity-40 ${T}`,N=`inline-flex cursor-pointer items-center gap-1.5 border-none bg-transparent p-0 text-meta font-medium text-secondary transition-colors hover:text-display`,P=`text-label font-semibold text-secondary`,F=`mb-1.5 mt-3 block text-label font-medium text-secondary`,I=`w-full rounded-control border border-wire bg-surface px-3 py-2.5 text-sm text-primary outline-none transition-shadow focus:border-transparent focus:shadow-focus`,L=`${I} lp-select cursor-pointer`,R={animation:`runPulse 1.1s ease-in-out infinite`},z={background:`var(--color-rubik-yellow)`,...R};function B({message:e,onDismiss:t,className:n=`mb-2`}){return(0,S.jsxs)(`div`,{className:`flex items-start gap-2 text-body text-accent ${n}`,children:[(0,S.jsx)(`span`,{className:`mt-[5px] size-2 shrink-0 rounded-full bg-rubik-red`,"aria-hidden":!0}),(0,S.jsx)(`span`,{children:e}),t&&(0,S.jsx)(`button`,{type:`button`,onClick:t,className:`ml-auto shrink-0 cursor-pointer border-none bg-transparent p-0 text-label text-secondary transition-colors hover:text-display`,children:`Dismiss`})]})}function V({children:e}){return(0,S.jsx)(`pre`,{className:`max-h-[300px] overflow-auto whitespace-pre-wrap rounded-control border border-hairline bg-raised px-4 py-3.5 font-mono text-meta leading-relaxed text-secondary`,children:e})}var H={neutral:`bg-raised text-secondary`,ink:`bg-raised text-primary`,outline:`border border-hairline text-secondary`,running:`bg-running-soft text-running`,success:`bg-success-soft text-success`,accent:`bg-accent-soft text-accent`,warn:`bg-warn-soft text-warn`};function U({tone:e=`neutral`,dot:t,title:n,children:r}){return(0,S.jsxs)(`span`,{title:n,className:`inline-flex h-[22px] items-center gap-1.5 rounded-full px-2.5 text-caption font-medium ${H[e]}`,children:[t&&(0,S.jsx)(`span`,{className:`size-1.5 rounded-full`,style:t===`pulse`?z:{background:`var(--color-rubik-green)`}}),r]})}function W({className:e=``}){return(0,S.jsx)(`div`,{className:`text-body text-disabled ${e}`,children:`Loading…`})}function G({run:e,colorText:t}){return(0,S.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 font-medium`,style:t?{color:v(e)}:void 0,children:[(0,S.jsx)(`span`,{className:`size-2 rounded-full`,style:{background:v(e),opacity:y(e)}}),b(e)]})}export{a as A,y as C,p as D,d as E,c as M,x as O,b as S,i as T,P as _,G as a,s as b,k as c,N as d,j as f,z as g,R as h,V as i,u as j,l as k,O as l,F as m,W as n,D as o,I as p,U as r,A as s,B as t,M as u,L as v,f as w,v as x,w as y};
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import { H as getArtifactSync, Rt as prevRunSnapshot, nt as getRunSnapshot, tt as getRun } from "./boot-BNoivm21.mjs";
|
|
2
|
-
import { t as createTwoFilesPatch } from "../_libs/diff.mjs";
|
|
3
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/runDiff-Bohd5W5R.js
|
|
4
|
-
/**
|
|
5
|
-
* Per-run artifact diff (Phase 3). Computed lazily on the SERVER at read time
|
|
6
|
-
* (no stored diffs): load run N's snapshot + the previous run's snapshot and diff
|
|
7
|
-
* the two path → metadata maps. For changed TEXT files we load both blobs and
|
|
8
|
-
* compute a unified line diff with `diff` (jsdiff) — a pure-string library, no
|
|
9
|
-
* process execution, so the server's zero-exec invariant holds. Binary/oversize
|
|
10
|
-
* files emit a size-delta marker only (no inline diff).
|
|
11
|
-
*/
|
|
12
|
-
/**
|
|
13
|
-
* Upper bound for computing an inline unified diff. jsdiff is synchronous and
|
|
14
|
-
* roughly O(N*D); on a multi-MB or minified text file it would block the
|
|
15
|
-
* single-process server (which also owns the scheduler) for seconds. Above this
|
|
16
|
-
* a changed text file degrades to the size-delta marker, like binary/oversize.
|
|
17
|
-
*/
|
|
18
|
-
var MAX_DIFF_BYTES = 512 * 1024;
|
|
19
|
-
/** A file is text-diffable only when it has stored bytes and isn't binary/oversize. */
|
|
20
|
-
function isText(e) {
|
|
21
|
-
return !!e && !e.binary && !e.oversize && !!e.hash;
|
|
22
|
-
}
|
|
23
|
-
/** Within the inline-diff size cap (unknown size ⇒ allowed). */
|
|
24
|
-
function withinDiffCap(e) {
|
|
25
|
-
return !!e && (e.size == null || e.size <= MAX_DIFF_BYTES);
|
|
26
|
-
}
|
|
27
|
-
/** Decode a snapshot entry's blob to text, or null when bytes are absent. */
|
|
28
|
-
async function textOf(e) {
|
|
29
|
-
if (!e || !e.hash) return null;
|
|
30
|
-
const bytes = await (await getArtifactSync()).readBlob(e.hash);
|
|
31
|
-
return bytes ? bytes.toString("utf8") : null;
|
|
32
|
-
}
|
|
33
|
-
/** Unified diff between two versions of a path (empty string ⇒ added/removed side). */
|
|
34
|
-
function unified(path, oldText, newText) {
|
|
35
|
-
return createTwoFilesPatch(path, path, oldText, newText, "previous run", "this run");
|
|
36
|
-
}
|
|
37
|
-
async function computeRunDiff(runId) {
|
|
38
|
-
const run = await getRun(runId);
|
|
39
|
-
if (!run) return {
|
|
40
|
-
hasSnapshot: false,
|
|
41
|
-
files: []
|
|
42
|
-
};
|
|
43
|
-
const snap = await getRunSnapshot(runId);
|
|
44
|
-
if (!snap) return {
|
|
45
|
-
hasSnapshot: false,
|
|
46
|
-
files: []
|
|
47
|
-
};
|
|
48
|
-
const curr = snap.manifest ?? {};
|
|
49
|
-
const prev = (await prevRunSnapshot(run.loopId, run.ts))?.manifest ?? {};
|
|
50
|
-
const paths = [...new Set([...Object.keys(curr), ...Object.keys(prev)])].sort();
|
|
51
|
-
const files = [];
|
|
52
|
-
for (const path of paths) {
|
|
53
|
-
const c = curr[path];
|
|
54
|
-
const p = prev[path];
|
|
55
|
-
if (c && !p) {
|
|
56
|
-
const text = isText(c);
|
|
57
|
-
const tooLarge = text && !withinDiffCap(c);
|
|
58
|
-
const file = {
|
|
59
|
-
path,
|
|
60
|
-
status: "added",
|
|
61
|
-
binary: !text,
|
|
62
|
-
tooLarge,
|
|
63
|
-
sizeDelta: c.size ?? null
|
|
64
|
-
};
|
|
65
|
-
if (text && !tooLarge) {
|
|
66
|
-
const body = await textOf(c);
|
|
67
|
-
if (body != null) file.diff = unified(path, "", body);
|
|
68
|
-
else file.binary = true;
|
|
69
|
-
}
|
|
70
|
-
files.push(file);
|
|
71
|
-
} else if (!c && p) {
|
|
72
|
-
const text = isText(p);
|
|
73
|
-
const tooLarge = text && !withinDiffCap(p);
|
|
74
|
-
const file = {
|
|
75
|
-
path,
|
|
76
|
-
status: "removed",
|
|
77
|
-
binary: !text,
|
|
78
|
-
tooLarge,
|
|
79
|
-
sizeDelta: p.size != null ? -p.size : null
|
|
80
|
-
};
|
|
81
|
-
if (text && !tooLarge) {
|
|
82
|
-
const body = await textOf(p);
|
|
83
|
-
if (body != null) file.diff = unified(path, body, "");
|
|
84
|
-
else file.binary = true;
|
|
85
|
-
}
|
|
86
|
-
files.push(file);
|
|
87
|
-
} else if (c && p) {
|
|
88
|
-
if (c.hash === p.hash && c.oversize === p.oversize && c.size === p.size) continue;
|
|
89
|
-
const sizeDelta = c.size != null && p.size != null ? c.size - p.size : null;
|
|
90
|
-
const bothText = isText(c) && isText(p);
|
|
91
|
-
const tooLarge = bothText && !(withinDiffCap(c) && withinDiffCap(p));
|
|
92
|
-
const file = {
|
|
93
|
-
path,
|
|
94
|
-
status: "modified",
|
|
95
|
-
binary: !bothText,
|
|
96
|
-
tooLarge,
|
|
97
|
-
sizeDelta
|
|
98
|
-
};
|
|
99
|
-
if (bothText && !tooLarge) {
|
|
100
|
-
const [oldText, newText] = await Promise.all([textOf(p), textOf(c)]);
|
|
101
|
-
if (oldText != null && newText != null) file.diff = unified(path, oldText, newText);
|
|
102
|
-
else file.binary = true;
|
|
103
|
-
}
|
|
104
|
-
files.push(file);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return {
|
|
108
|
-
hasSnapshot: true,
|
|
109
|
-
files
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//#endregion
|
|
113
|
-
export { computeRunDiff };
|