diffact 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ @import"https://fonts.googleapis.com/css2?family=Fraunces:wght@500;600&family=Space+Mono:wght@400;500&family=Space+Grotesk:wght@400;500;600;700&display=swap";@layer components;@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-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-border-style:solid;--tw-leading:initial;--tw-font-weight: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-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-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-gray-400:oklch(70.7% .022 261.325);--color-black:#000;--spacing:.25rem;--container-xs:20rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--leading-tight:1.25;--radius-xs:.125rem;--radius-md:.375rem;--radius-lg:.5rem;--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-background:var(--color-base-100);--color-foreground:var(--color-base-content);--color-popover:var(--color-base-100);--color-popover-foreground:var(--color-base-content)}}@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;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}:root{--font-sans:"Space Grotesk",system-ui,-apple-system,"Segoe UI",sans-serif;--font-mono:"Space Mono",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--font-mono-size:14px;--diffs-font-family:var(--font-mono);--diffs-font-size:var(--font-mono-size);--diffs-header-font-family:var(--font-sans)}[data-theme=diffact]{color-scheme:light;--color-base-100:#fff;--color-base-200:#f8f8f8;--color-base-300:#eeeeef;--color-base-content:#070707;--color-primary:#009fff;--color-primary-content:#fff;--color-secondary:#c635e4;--color-secondary-content:#fff;--color-accent:#08c0ef;--color-accent-content:#06262b;--color-neutral:#1f1f21;--color-neutral-content:#f8f8f8;--color-info:#009fff;--color-info-content:#fff;--color-success:#00cab1;--color-success-content:#04332b;--color-warning:#ffca00;--color-warning-content:#3a2d00;--color-error:#ff2e3f;--color-error-content:#3a0008;--border-color:#dbdbdd;--input-bg:#f2f2f3;--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0;--diffs-selection-base:var(--color-primary)}[data-theme=diffact-dark]{color-scheme:dark;--color-base-100:#070707;--color-base-200:#141415;--color-base-300:#2e2e30;--color-base-content:#fbfbfb;--color-primary:#009fff;--color-primary-content:#070707;--color-secondary:#c635e4;--color-secondary-content:#070707;--color-accent:#08c0ef;--color-accent-content:#070707;--color-neutral:#1f1f21;--color-neutral-content:#c6c6c8;--color-info:#009fff;--color-info-content:#070707;--color-success:#00cab1;--color-success-content:#070707;--color-warning:#ffca00;--color-warning-content:#070707;--color-error:#ff2e3f;--color-error-content:#070707;--border-color:#424245;--input-bg:#1f1f21;--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0;--diffs-selection-base:var(--color-primary)}body{font-family:var(--font-sans)}:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}}:root:has(input.theme-controller[value=light]:checked),[data-theme=light]{color-scheme:light;--color-base-100:oklch(100% 0 0);--color-base-200:oklch(98% 0 0);--color-base-300:oklch(95% 0 0);--color-base-content:oklch(21% .006 285.885);--color-primary:oklch(45% .24 277.023);--color-primary-content:oklch(93% .034 272.788);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root:has(input.theme-controller[value=dark]:checked),[data-theme=dark]{color-scheme:dark;--color-base-100:oklch(25.33% .016 252.42);--color-base-200:oklch(23.26% .014 253.1);--color-base-300:oklch(21.15% .012 254.09);--color-base-content:oklch(97.807% .029 256.847);--color-primary:oklch(58% .233 277.117);--color-primary-content:oklch(96% .018 272.314);--color-secondary:oklch(65% .241 354.308);--color-secondary-content:oklch(94% .028 342.258);--color-accent:oklch(77% .152 181.912);--color-accent-content:oklch(38% .063 188.416);--color-neutral:oklch(14% .005 285.823);--color-neutral-content:oklch(92% .004 286.32);--color-info:oklch(74% .16 232.661);--color-info-content:oklch(29% .066 243.157);--color-success:oklch(76% .177 163.223);--color-success-content:oklch(37% .077 168.94);--color-warning:oklch(82% .189 84.429);--color-warning-content:oklch(41% .112 45.904);--color-error:oklch(71% .194 13.428);--color-error-content:oklch(27% .105 12.094);--radius-selector:.5rem;--radius-field:.25rem;--radius-box:.5rem;--size-selector:.25rem;--size-field:.25rem;--border:1px;--depth:1;--noise:0}:root{--fx-noise:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.34' numOctaves='4' stitchTiles='stitch'%3E%3C/feTurbulence%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23a)' opacity='0.2'%3E%3C/rect%3E%3C/svg%3E");scrollbar-color:currentColor #0000}@supports (color:color-mix(in lab,red,red)){:root{scrollbar-color:color-mix(in oklch,currentColor 35%,#0000)#0000}}@property --radialprogress{syntax: "<percentage>"; inherits: true; initial-value: 0%;}:root:not(span){overflow:var(--page-overflow)}:root{background:var(--page-scroll-bg,var(--root-bg));--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000),var(--root-bg,#0000))var(--root-bg,#0000)}@supports (color:color-mix(in lab,red,red)){:root{--page-scroll-bg-on:linear-gradient(var(--root-bg,#0000),var(--root-bg,#0000))color-mix(in srgb,var(--root-bg,#0000),oklch(0% 0 0) calc(var(--page-has-backdrop,0)*40%))}}:root{--page-scroll-transition-on:background-color .3s ease-out;transition:var(--page-scroll-transition);scrollbar-gutter:var(--page-scroll-gutter,unset);scrollbar-gutter:if(style(--page-has-scroll: 1): var(--page-scroll-gutter,unset); else: unset)}@keyframes set-page-has-scroll{0%,to{--page-has-scroll:1}}:root,[data-theme]{background:var(--page-scroll-bg,var(--root-bg));color:var(--color-base-content)}:where(:root,[data-theme]){--root-bg:var(--color-base-100)}}@layer utilities{@layer daisyui.l1.l2.l3{.diff{webkit-user-select:none;-webkit-user-select:none;user-select:none;direction:ltr;grid-template-rows:1fr 1.8rem 1fr;grid-template-columns:auto 1fr;width:100%;display:grid;position:relative;overflow:hidden;container-type:inline-size}.diff:focus-visible,.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px;outline-color:var(--color-base-content)}.diff:focus-visible .diff-resizer{min-width:95cqi;max-width:95cqi}.diff:has(.diff-item-1:focus-visible){outline-style:var(--tw-outline-style);outline-offset:1px;outline-width:2px}.diff:has(.diff-item-1:focus-visible) .diff-resizer{min-width:5cqi;max-width:5cqi}@supports (-webkit-overflow-scrolling:touch) and (overflow:-webkit-paged-x){.diff:focus .diff-resizer{min-width:5cqi;max-width:5cqi}.diff:has(.diff-item-1:focus) .diff-resizer{min-width:95cqi;max-width:95cqi}}.modal{pointer-events:none;visibility:hidden;width:100%;max-width:none;height:100%;max-height:none;color:inherit;transition:visibility .3s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;overscroll-behavior:contain;z-index:999;scrollbar-gutter:auto;background-color:#0000;place-items:center;margin:0;padding:0;display:grid;position:fixed;inset:0;overflow:clip}.modal::backdrop{display:none}.tooltip{--tt-bg:var(--color-neutral);--tt-off: calc(100% + .5rem) ;--tt-tail: calc(100% + 1px + .25rem) ;display:inline-block;position:relative}.tooltip>.tooltip-content,.tooltip[data-tip]:before{border-radius:var(--radius-field);text-align:center;white-space:normal;max-width:20rem;color:var(--color-neutral-content);opacity:0;background-color:var(--tt-bg);pointer-events:none;z-index:2;--tw-content:attr(data-tip);content:var(--tw-content);width:max-content;padding-block:.25rem;padding-inline:.5rem;font-size:.875rem;line-height:1.25;position:absolute}.tooltip:after{opacity:0;background-color:var(--tt-bg);content:"";pointer-events:none;--mask-tooltip:url("data:image/svg+xml,%3Csvg width='10' height='4' viewBox='0 0 8 4' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0.500009 1C3.5 1 3.00001 4 5.00001 4C7 4 6.5 1 9.5 1C10 1 10 0.499897 10 0H0C-1.99338e-08 0.5 0 1 0.500009 1Z' fill='black'/%3E%3C/svg%3E%0A");width:.625rem;height:.25rem;-webkit-mask-position:-1px 0;mask-position:-1px 0;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-image:var(--mask-tooltip);mask-image:var(--mask-tooltip);display:block;position:absolute}@media(prefers-reduced-motion:no-preference){.tooltip>.tooltip-content,.tooltip[data-tip]:before,.tooltip:after{transition:opacity .2s cubic-bezier(.4,0,.2,1) 75ms,transform .2s cubic-bezier(.4,0,.2,1) 75ms}}:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{opacity:1;--tt-pos:0rem}@media(prefers-reduced-motion:no-preference){:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))>.tooltip-content,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible))[data-tip]:before,:is(.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))).tooltip-open,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):hover,.tooltip:is([data-tip]:not([data-tip=""]),:has(.tooltip-content:not(:empty))):has(:focus-visible)):after{transition:opacity .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1)}}.tab{cursor:pointer;appearance:none;text-align:center;webkit-user-select:none;-webkit-user-select:none;user-select:none;flex-wrap:wrap;justify-content:center;align-items:center;display:inline-flex;position:relative}@media(hover:hover){.tab:hover{color:var(--color-base-content)}}.tab{--tab-p:.75rem;--tab-bg:var(--color-base-100);--tab-border-color:var(--color-base-300);--tab-radius-ss:0;--tab-radius-se:0;--tab-radius-es:0;--tab-radius-ee:0;--tab-order:0;--tab-radius-min:calc(.75rem - var(--border));--tab-radius-limit:min(var(--radius-field),var(--tab-radius-min));--tab-radius-grad:#0000 calc(69% - var(--border)),var(--tab-border-color)calc(69% - var(--border) + .25px),var(--tab-border-color)69%,var(--tab-bg) calc(69% + .25px) ;order:var(--tab-order);height:var(--tab-height);padding-inline:var(--tab-p);border-color:#0000;font-size:.875rem}.tab:is(input[type=radio]){min-width:fit-content}.tab:is(input[type=radio]):after{--tw-content:attr(aria-label);content:var(--tw-content)}.tab:is(label){position:relative}.tab:is(label) input{cursor:pointer;appearance:none;opacity:0;position:absolute;inset:0}:is(.tab:checked,.tab:is(label:has(:checked)),.tab:is(.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]))+.tab-content{display:block}.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.tab:not(:checked,label:has(:checked),:hover,.tab-active,[aria-selected=true],[aria-current=true],[aria-current=page]){color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.tab:not(input):empty{cursor:default;flex-grow:1}.tab:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.tab:focus{outline-offset:2px;outline:2px solid #0000}}.tab:focus-visible,.tab:is(label:has(:checked:focus-visible)){outline-offset:-5px;outline:2px solid}.tab[disabled]{pointer-events:none;opacity:.4}.menu{--menu-active-fg:var(--color-neutral-content);--menu-active-bg:var(--color-neutral);flex-flow:column wrap;width:fit-content;padding:.5rem;font-size:.875rem;display:flex}.menu :where(li ul){white-space:nowrap;margin-inline-start:1rem;padding-inline-start:.5rem;position:relative}.menu :where(li ul):before{background-color:var(--color-base-content);opacity:.1;width:var(--border);content:"";inset-inline-start:0;position:absolute;top:.75rem;bottom:.75rem}.menu :where(li>.menu-dropdown:not(.menu-dropdown-show)){display:none}.menu :where(li:not(.menu-title)>:not(ul,details,.menu-title,.btn)),.menu :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);text-align:start;text-wrap:balance;-webkit-user-select:none;user-select:none;grid-auto-columns:minmax(auto,max-content) auto max-content;grid-auto-flow:column;align-content:flex-start;align-items:center;gap:.5rem;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:grid}.menu :where(li>details>summary){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li>details>summary){outline-offset:2px;outline:2px solid #0000}}.menu :where(li>details>summary)::-webkit-details-marker{display:none}:is(.menu :where(li>details>summary),.menu :where(li>.menu-dropdown-toggle)):after{content:"";transform-origin:50%;pointer-events:none;justify-self:flex-end;width:.375rem;height:.375rem;transition-property:rotate,translate;transition-duration:.2s;display:block;translate:0 -1px;rotate:-135deg;box-shadow:inset 2px 2px}.menu details{interpolate-size:allow-keywords;overflow:hidden}.menu details::details-content{block-size:0}@media(prefers-reduced-motion:no-preference){.menu details::details-content{transition-behavior:allow-discrete;transition-property:block-size,content-visibility;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}}.menu details[open]::details-content{block-size:auto}.menu :where(li>details[open]>summary):after,.menu :where(li>.menu-dropdown-toggle.menu-dropdown-show):after{translate:0 1px;rotate:45deg}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{color:var(--color-base-content);--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn).menu-focus,.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title),li:not(.menu-title,.disabled)>details>summary:not(.menu-title)):not(.menu-active,:active,.btn):focus-visible{outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){outline-offset:2px;outline:2px solid #0000}}.menu :where(li:not(.menu-title,.disabled)>:not(ul,details,.menu-title):not(.menu-active,:active,.btn):hover,li:not(.menu-title,.disabled)>details>summary:not(.menu-title):not(.menu-active,:active,.btn):hover){box-shadow:inset 0 1px #00000003,inset 0 -1px #ffffff03}.menu :where(li:empty){background-color:var(--color-base-content);opacity:.1;height:1px;margin:.5rem 1rem}.menu :where(li){flex-flow:column wrap;flex-shrink:0;align-items:stretch;display:flex;position:relative}.menu :where(li) .badge{justify-self:flex-end}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{outline-offset:2px;outline:2px solid #0000}}.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active{color:var(--menu-active-fg);background-color:var(--menu-active-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):not(:is(.menu :where(li)>:not(ul,.menu-title,details,.btn):active,.menu :where(li)>:not(ul,.menu-title,details,.btn).menu-active,.menu :where(li)>details>summary:active):active){box-shadow:0 2px calc(var(--depth)*3px) -2px var(--menu-active-bg)}.menu :where(li).menu-disabled{pointer-events:none;color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.menu :where(li).menu-disabled{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.menu .dropdown:focus-within .menu-dropdown-toggle:after{translate:0 1px;rotate:45deg}.menu .dropdown-content{margin-top:.5rem;padding:.5rem}.menu .dropdown-content:before{display:none}:where(.btn){width:unset}.btn{cursor:pointer;text-align:center;vertical-align:middle;outline-offset:2px;webkit-user-select:none;-webkit-user-select:none;user-select:none;padding-inline:var(--btn-p);color:var(--btn-fg);--tw-prose-links:var(--btn-fg);height:var(--size);font-size:var(--fontsize,.875rem);outline-color:var(--btn-color,var(--color-base-content));background-color:var(--btn-bg);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--btn-noise);border-width:var(--border);border-style:solid;border-color:var(--btn-border);text-shadow:0 .5px oklch(100% 0 0/calc(var(--depth)*.15));touch-action:manipulation;box-shadow:0 .5px 0 .5px oklch(100% 0 0/calc(var(--depth)*6%)) inset,var(--btn-shadow);--size:calc(var(--size-field,.25rem)*10);--btn-bg:var(--btn-color,var(--color-base-200));--btn-fg:var(--color-base-content);--btn-p:1rem;--btn-border:var(--btn-bg);border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-wrap:nowrap;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;font-weight:600;transition-property:color,background-color,border-color,box-shadow;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1);display:inline-flex}@supports (color:color-mix(in lab,red,red)){.btn{--btn-border:color-mix(in oklab,var(--btn-bg),#000 calc(var(--depth)*5%))}}.btn{--btn-shadow:0 3px 2px -2px var(--btn-bg),0 4px 3px -2px var(--btn-bg)}@supports (color:color-mix(in lab,red,red)){.btn{--btn-shadow:0 3px 2px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000),0 4px 3px -2px color-mix(in oklab,var(--btn-bg)calc(var(--depth)*30%),#0000)}}.btn{--btn-noise:var(--fx-noise)}@media(hover:hover){.btn:hover{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:hover{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}}.btn:focus-visible,.btn:has(:focus-visible){isolation:isolate;outline-width:2px;outline-style:solid}.btn:active:not(.btn-active){--btn-bg:var(--btn-color,var(--color-base-200));translate:0 .5px}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 5%)}}.btn:active:not(.btn-active){--btn-border:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn:active:not(.btn-active){--btn-border:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn:active:not(.btn-active){--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0)}.btn:is(input[type=checkbox],input[type=radio]){appearance:none}.btn:is(input[type=checkbox],input[type=radio])[aria-label]:after{--tw-content:attr(aria-label);content:var(--tw-content)}.btn:where(input:checked:not(.filter .btn)){--btn-color:var(--color-primary);--btn-fg:var(--color-primary-content);isolation:isolate}.loading{pointer-events:none;aspect-ratio:1;vertical-align:middle;width:calc(var(--size-selector,.25rem)*6);background-color:currentColor;display:inline-block;-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:100%;mask-size:100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.collapse{border-radius:var(--radius-box,1rem);isolation:isolate;grid-template-rows:max-content 0fr;grid-template-columns:minmax(0,1fr);width:100%;display:grid;position:relative;overflow:hidden}@media(prefers-reduced-motion:no-preference){.collapse{transition:grid-template-rows .2s}}.collapse>input:is([type=checkbox],[type=radio]){appearance:none;opacity:0;z-index:1;grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close)),.collapse:not(.collapse-close):has(>input:is([type=checkbox],[type=radio]):checked){grid-template-rows:max-content 1fr}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){content-visibility:visible;min-height:fit-content}@supports not (content-visibility:visible){.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>.collapse-content,.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){visibility:visible}}.collapse:focus-visible,.collapse:has(>input:is([type=checkbox],[type=radio]):focus-visible),.collapse:has(summary:focus-visible){outline-color:var(--color-base-content);outline-offset:2px;outline-width:2px;outline-style:solid}.collapse:not(.collapse-close)>input[type=checkbox],.collapse:not(.collapse-close)>input[type=radio]:not(:checked),.collapse:not(.collapse-close)>.collapse-title{cursor:pointer}:is(.collapse[tabindex]:focus:not(.collapse-close,.collapse[open]),.collapse[tabindex]:focus-within:not(.collapse-close,.collapse[open]))>.collapse-title{cursor:unset}.collapse:is([open],[tabindex]:focus:not(.collapse-close),[tabindex]:focus-within:not(.collapse-close))>:where(.collapse-content),.collapse:not(.collapse-close)>:where(input:is([type=checkbox],[type=radio]):checked~.collapse-content){padding-bottom:1rem}.collapse:is(details){width:100%}@media(prefers-reduced-motion:no-preference){.collapse:is(details)::details-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,min-height .2s ease-out allow-discrete,padding .1s ease-out 20ms,background-color .2s ease-out,height .2s;interpolate-size:allow-keywords;height:0}.collapse:is(details):where([open])::details-content{height:auto}}.collapse:is(details) summary{display:block;position:relative}.collapse:is(details) summary::-webkit-details-marker{display:none}.collapse:is(details)>.collapse-content{content-visibility:visible}.collapse:is(details) summary{outline:none}.collapse-content{content-visibility:hidden;min-height:0;cursor:unset;grid-row-start:2;grid-column-start:1;padding-left:1rem;padding-right:1rem}@supports not (content-visibility:hidden){.collapse-content{visibility:hidden}}@media(prefers-reduced-motion:no-preference){.collapse-content{transition:content-visibility .2s allow-discrete,visibility .2s allow-discrete,min-height .2s ease-out allow-discrete,padding .1s ease-out 20ms,background-color .2s ease-out}}.toggle{border:var(--border)solid currentColor;color:var(--input-color);cursor:pointer;appearance:none;vertical-align:middle;webkit-user-select:none;-webkit-user-select:none;user-select:none;--radius-selector-max:calc(var(--radius-selector) + var(--radius-selector) + var(--radius-selector));border-radius:calc(var(--radius-selector) + min(var(--toggle-p),var(--radius-selector-max)) + min(var(--border),var(--radius-selector-max)));padding:var(--toggle-p);flex-shrink:0;grid-template-columns:0fr 1fr 1fr;place-content:center;display:inline-grid;position:relative;box-shadow:inset 0 1px}@supports (color:color-mix(in lab,red,red)){.toggle{box-shadow:0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000) inset}}.toggle{--input-color:var(--color-base-content);transition:color .3s,grid-template-columns .2s}@supports (color:color-mix(in lab,red,red)){.toggle{--input-color:color-mix(in oklab,var(--color-base-content)50%,#0000)}}.toggle{--toggle-p:calc(var(--size)*.125);--size:calc(var(--size-selector,.25rem)*6);width:calc((var(--size)*2) - (var(--border) + var(--toggle-p))*2);height:var(--size)}.toggle>*{z-index:1;cursor:pointer;appearance:none;background-color:#0000;border:none;grid-column:2/span 1;grid-row-start:1;height:100%;padding:.125rem;transition:opacity .2s,rotate .4s}.toggle>:focus{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.toggle>:focus{outline-offset:2px;outline:2px solid #0000}}.toggle>:nth-child(2){color:var(--color-base-100);rotate:none}.toggle>:nth-child(3){color:var(--color-base-100);opacity:0;rotate:-15deg}.toggle:has(:checked)>:nth-child(2){opacity:0;rotate:15deg}.toggle:has(:checked)>:nth-child(3){opacity:1;rotate:none}.toggle:before{aspect-ratio:1;border-radius:var(--radius-selector);--tw-content:"";content:var(--tw-content);height:100%;box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px currentColor;background-color:currentColor;grid-row-start:1;grid-column-start:2;transition:background-color .1s,translate .2s,inset-inline-start .2s;position:relative;inset-inline-start:0;translate:0}@supports (color:color-mix(in lab,red,red)){.toggle:before{box-shadow:0 -1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px color-mix(in oklab,currentColor calc(var(--depth)*10%),#0000)}}.toggle:before{background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise)}@media(forced-colors:active){.toggle:before{outline-style:var(--tw-outline-style);outline-offset:-1px;outline-width:1px}}@media print{.toggle:before{outline-offset:-1rem;outline:.25rem solid}}.toggle:focus-visible,.toggle:has(:focus-visible){outline-offset:2px;outline:2px solid}.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked){background-color:var(--color-base-100);--input-color:var(--color-base-content);grid-template-columns:1fr 1fr 0fr}:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{background-color:currentColor}@starting-style{:is(.toggle:checked,.toggle[aria-checked=true],.toggle:has(>input:checked)):before{opacity:0}}.toggle:indeterminate{grid-template-columns:.5fr 1fr .5fr}.toggle:disabled{cursor:not-allowed;opacity:.3}.toggle:disabled:before{border:var(--border)solid currentColor;background-color:#0000}.input{cursor:text;border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;white-space:nowrap;width:clamp(3rem,20rem,100%);height:var(--size);font-size:max(var(--font-size,.875rem),.875rem);touch-action:manipulation;border-color:var(--input-color);box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.5rem;padding-inline:.75rem;display:inline-flex;position:relative}@supports (color:color-mix(in lab,red,red)){.input{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.input{--size:calc(var(--size-field,.25rem)*10);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.input:where(input){display:inline-flex}.input :where(input){appearance:none;background-color:#0000;border:none;width:100%;height:100%;display:inline-flex}.input :where(input):focus,.input :where(input):focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.input :where(input):focus,.input :where(input):focus-within{outline-offset:2px;outline:2px solid #0000}}.input :where(input[type=url]),.input :where(input[type=email]){direction:ltr}.input :where(input[type=date]){display:inline-flex}.input:focus,.input:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.input:focus,.input:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.input:focus,.input:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}@media(pointer:coarse){@supports (-webkit-touch-callout:none){.input:focus,.input:focus-within{--font-size:1rem}}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.input:has(>input[disabled]),.input:is(:disabled,[disabled]),fieldset:disabled .input{box-shadow:none}.input:has(>input[disabled])>input[disabled]{cursor:not-allowed}.input::-webkit-date-and-time-value{text-align:inherit}.input[type=number]::-webkit-inner-spin-button{margin-block:-.75rem;margin-inline-end:-.75rem}.input::-webkit-calendar-picker-indicator{position:absolute;inset-inline-end:.75em}.input:has(>input[type=date]) :where(input[type=date]){webkit-appearance:none;appearance:none;display:inline-flex}.input:has(>input[type=date]) input[type=date]::-webkit-calendar-picker-indicator{cursor:pointer;width:1em;height:1em;position:absolute;inset-inline-end:.75em}.select{border:var(--border)solid #0000;appearance:none;background-color:var(--color-base-100);vertical-align:middle;width:clamp(3rem,20rem,100%);height:var(--size);touch-action:manipulation;white-space:nowrap;text-overflow:ellipsis;box-shadow:0 1px var(--input-color) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-image:linear-gradient(45deg,#0000 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,#0000 50%);background-position:calc(100% - 20px) calc(1px + 50%),calc(100% - 16.1px) calc(1px + 50%);background-repeat:no-repeat;background-size:4px 4px,4px 4px;border-start-start-radius:var(--join-ss,var(--radius-field));border-start-end-radius:var(--join-se,var(--radius-field));border-end-end-radius:var(--join-ee,var(--radius-field));border-end-start-radius:var(--join-es,var(--radius-field));flex-shrink:1;align-items:center;gap:.375rem;padding-inline:.75rem 1.75rem;font-size:.875rem;display:inline-flex;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.select{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000) inset,0 -1px oklch(100% 0 0/calc(var(--depth)*.1)) inset}}.select{border-color:var(--input-color);--input-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.select{--input-color:color-mix(in oklab,var(--color-base-content)20%,#0000)}}.select{--size:calc(var(--size-field,.25rem)*10)}[dir=rtl] .select{background-position:12px calc(1px + 50%),16px calc(1px + 50%)}[dir=rtl] .select::picker(select){translate:.5rem}[dir=rtl] .select select::picker(select){translate:.5rem}.select[multiple]{background-image:none;height:auto;padding-block:.75rem;padding-inline-end:.75rem;overflow:auto}.select select{appearance:none;width:calc(100% + 2.75rem);height:calc(100% - calc(var(--border)*2));background:inherit;border-radius:inherit;border-style:none;align-items:center;margin-inline:-.75rem -1.75rem;padding-inline:.75rem 1.75rem}.select select:focus,.select select:focus-within{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.select select:focus,.select select:focus-within{outline-offset:2px;outline:2px solid #0000}}.select select:not(:last-child){background-image:none;margin-inline-end:-1.375rem}.select:focus,.select:focus-within{--input-color:var(--color-base-content);box-shadow:0 1px var(--input-color)}@supports (color:color-mix(in lab,red,red)){.select:focus,.select:focus-within{box-shadow:0 1px color-mix(in oklab,var(--input-color)calc(var(--depth)*10%),#0000)}}.select:focus,.select:focus-within{outline:2px solid var(--input-color);outline-offset:2px;isolation:isolate}.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{cursor:not-allowed;border-color:var(--color-base-200);background-color:var(--color-base-200);color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.select:has(>select[disabled]),.select:is(:disabled,[disabled]),fieldset:disabled .select)::placeholder{color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.select:has(>select[disabled])>select[disabled]{cursor:not-allowed}@supports (appearance:base-select){.select,.select select{appearance:base-select}:is(.select,.select select)::picker(select){appearance:base-select}}:is(.select,.select select)::picker(select){color:inherit;border:var(--border)solid var(--color-base-200);border-radius:var(--radius-box);background-color:inherit;max-height:min(24rem,70dvh);box-shadow:0 2px calc(var(--depth)*3px) -2px #0003;box-shadow:0 20px 25px -5px rgb(0 0 0/calc(var(--depth)*.1)),0 8px 10px -6px rgb(0 0 0/calc(var(--depth)*.1));margin-block:.5rem;margin-inline:.5rem;padding:.5rem;translate:-.5rem}:is(.select,.select select)::picker-icon{display:none}:is(.select,.select select) optgroup{padding-top:.5em}:is(.select,.select select) optgroup option:first-child{margin-top:.5em}:is(.select,.select select) option{border-radius:var(--radius-field);white-space:normal;padding-block:.375rem;padding-inline:.75rem;transition-property:color,background-color;transition-duration:.2s;transition-timing-function:cubic-bezier(0,0,.2,1)}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{cursor:pointer;background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){:is(.select,.select select) option:not(:disabled):hover,:is(.select,.select select) option:not(:disabled):focus-visible{outline-offset:2px;outline:2px solid #0000}}:is(.select,.select select) option:not(:disabled):active{background-color:var(--color-neutral);color:var(--color-neutral-content);box-shadow:0 2px calc(var(--depth)*3px) -2px var(--color-neutral)}.collapse-title{grid-row-start:1;grid-column-start:1;width:100%;min-height:1lh;padding:1rem;padding-inline-end:3rem;transition:background-color .2s ease-out;position:relative}.checkbox{border:var(--border)solid var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox{border:var(--border)solid var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox{cursor:pointer;appearance:none;border-radius:var(--radius-selector);vertical-align:middle;color:var(--color-base-content);box-shadow:0 1px oklch(0% 0 0/calc(var(--depth)*.1)) inset,0 0 #0000 inset,0 0 #0000;--size:calc(var(--size-selector,.25rem)*6);width:var(--size);height:var(--size);background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);flex-shrink:0;padding:.25rem;transition:background-color .2s,box-shadow .2s;display:inline-block;position:relative}.checkbox:before{--tw-content:"";content:var(--tw-content);opacity:0;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,70% 80%,70% 100%);width:100%;height:100%;box-shadow:0 3px oklch(100% 0 0/calc(var(--depth)*.1)) inset;background-color:currentColor;font-size:1rem;line-height:.75;transition:clip-path .3s .1s,opacity .1s .1s,rotate .3s .1s,translate .3s .1s;display:block;rotate:45deg}.checkbox:focus-visible{outline:2px solid var(--input-color,currentColor);outline-offset:2px}.checkbox:checked,.checkbox[aria-checked=true]{background-color:var(--input-color,#0000);box-shadow:0 0 #0000 inset,0 8px 0 -4px oklch(100% 0 0/calc(var(--depth)*.1)) inset,0 1px oklch(0% 0 0/calc(var(--depth)*.1))}:is(.checkbox:checked,.checkbox[aria-checked=true]):before{clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 0%,70% 0%,70% 100%);opacity:1}@media(forced-colors:active){:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}@media print{:is(.checkbox:checked,.checkbox[aria-checked=true]):before{--tw-content:"✔︎";clip-path:none;background-color:#0000;rotate:none}}.checkbox:indeterminate{background-color:var(--input-color,var(--color-base-content))}@supports (color:color-mix(in lab,red,red)){.checkbox:indeterminate{background-color:var(--input-color,color-mix(in oklab,var(--color-base-content)20%,#0000))}}.checkbox:indeterminate:before{opacity:1;clip-path:polygon(20% 100%,20% 80%,50% 80%,50% 80%,80% 80%,80% 100%);translate:0 -35%;rotate:none}.stats{border-radius:var(--radius-box);grid-auto-flow:column;display:inline-grid;position:relative;overflow-x:auto}.modal-backdrop{color:#0000;z-index:-1;grid-row-start:1;grid-column-start:1;place-self:stretch stretch;display:grid}.modal-backdrop button{cursor:pointer}.modal-box{background-color:var(--color-base-100);border-top-left-radius:var(--modal-tl,var(--radius-box));border-top-right-radius:var(--modal-tr,var(--radius-box));border-bottom-left-radius:var(--modal-bl,var(--radius-box));border-bottom-right-radius:var(--modal-br,var(--radius-box));opacity:0;overscroll-behavior:contain;grid-row-start:1;grid-column-start:1;width:91.6667%;max-width:32rem;max-height:100vh;padding:1.5rem;transition:translate .3s ease-out,scale .3s ease-out,opacity .2s ease-out 50ms,box-shadow .3s ease-out;overflow-y:auto;scale:95%;box-shadow:0 25px 50px -12px #00000040}.filter{flex-wrap:wrap;display:flex}.filter input[type=radio]{width:auto}.filter input{opacity:1;transition:margin .1s,opacity .3s,padding .3s,border-width .1s;overflow:hidden;scale:1}.filter input:not(:last-child){margin-inline-end:.25rem}.filter input.filter-reset{aspect-ratio:1}.filter input.filter-reset:after{--tw-content:"×";content:var(--tw-content)}.filter:not(:has(input:checked:not(.filter-reset))) .filter-reset,.filter:not(:has(input:checked:not(.filter-reset))) input[type=reset],.filter:has(input:checked:not(.filter-reset)) input:not(:checked,.filter-reset,input[type=reset]){opacity:0;border-width:0;width:0;margin-inline:0;padding-inline:0;scale:0}.label{white-space:nowrap;color:currentColor;align-items:center;gap:.375rem;display:inline-flex}@supports (color:color-mix(in lab,red,red)){.label{color:color-mix(in oklab,currentcolor 60%,transparent)}}.label:has(input){cursor:pointer}.label:is(.input>*,.select>*){white-space:nowrap;height:calc(100% - .5rem);font-size:inherit;align-items:center;padding-inline:.75rem;display:flex}.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid currentColor;margin-inline:-.75rem .75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):first-child{border-inline-end:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid currentColor;margin-inline:.75rem -.75rem}@supports (color:color-mix(in lab,red,red)){.label:is(.input>*,.select>*):last-child{border-inline-start:var(--border)solid color-mix(in oklab,currentColor 10%,#0000)}}.fieldset-legend{color:var(--color-base-content);justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:-.25rem;padding-block:.5rem;font-weight:600;display:flex}.status{aspect-ratio:1;border-radius:var(--radius-selector);background-color:var(--color-base-content);width:.5rem;height:.5rem;display:inline-block}@supports (color:color-mix(in lab,red,red)){.status{background-color:color-mix(in oklab,var(--color-base-content)20%,transparent)}}.status{vertical-align:middle;color:#0000004d;background-position:50%;background-repeat:no-repeat}@supports (color:color-mix(in lab,red,red)){.status{color:color-mix(in oklab,var(--color-black)30%,transparent)}}.status{background-image:radial-gradient(circle at 35% 30%,oklch(1 0 0/calc(var(--depth)*.5)),#0000);box-shadow:0 2px 3px -1px}@supports (color:color-mix(in lab,red,red)){.status{box-shadow:0 2px 3px -1px color-mix(in oklab,currentColor calc(var(--depth)*100%),#0000)}}.badge{border-radius:var(--radius-selector);vertical-align:middle;color:var(--badge-fg);border:var(--border)solid var(--badge-color,var(--color-base-200));background-size:auto,calc(var(--noise)*100%);background-image:none,var(--fx-noise);background-color:var(--badge-bg);--badge-bg:var(--badge-color,var(--color-base-100));--badge-fg:var(--color-base-content);--size:calc(var(--size-selector,.25rem)*6);width:fit-content;height:var(--size);padding-inline:calc(var(--size)/2 - var(--border));justify-content:center;align-items:center;gap:.5rem;font-size:.875rem;display:inline-flex}.tabs{--tabs-height:auto;--tabs-direction:row;--tab-height:calc(var(--size-field,.25rem)*10);height:var(--tabs-height);flex-wrap:wrap;flex-direction:var(--tabs-direction);display:flex}.fieldset{grid-template-columns:1fr;grid-auto-rows:max-content;gap:.375rem;padding-block:.25rem;font-size:.75rem;display:grid}.menu-title{color:var(--color-base-content);padding-block:.5rem;padding-inline:.75rem}@supports (color:color-mix(in lab,red,red)){.menu-title{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.menu-title{font-size:.875rem;font-weight:600}}@layer daisyui.l1.l2{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{pointer-events:auto;visibility:visible;opacity:1;transition:visibility 0s allow-discrete,background-color .3s ease-out,opacity .1s ease-out;background-color:#0006}:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal) .modal-box{opacity:1;translate:0;scale:1}:root:has(:is(.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal)){--page-has-backdrop:1;--page-overflow:hidden;--page-scroll-bg:var(--page-scroll-bg-on);--page-scroll-gutter:stable;--page-scroll-transition:var(--page-scroll-transition-on);animation:forwards set-page-has-scroll;animation-timeline:scroll()}@starting-style{.modal.modal-open,.modal[open],.modal:target,.modal-toggle:checked+.modal{opacity:0}}.tooltip>.tooltip-content,.tooltip[data-tip]:before{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-off)50%}.tooltip:after{transform:translate(-50%)translateY(var(--tt-pos,.25rem));inset:auto auto var(--tt-tail)50%}.collapse-arrow>.collapse-title:after{width:.5rem;height:.5rem;display:block;position:absolute;transform:translateY(-100%)rotate(45deg)}@media(prefers-reduced-motion:no-preference){.collapse-arrow>.collapse-title:after{transition-property:all;transition-duration:.2s;transition-timing-function:cubic-bezier(.4,0,.2,1)}}.collapse-arrow>.collapse-title:after{content:"";transform-origin:75% 75%;pointer-events:none;top:50%;inset-inline-end:1.4rem;box-shadow:2px 2px}.btn:disabled:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn:disabled:not(.btn-link,.btn-ghost){box-shadow:none}.btn:disabled{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn:disabled{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}.btn[disabled]:not(.btn-link,.btn-ghost){background-color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]:not(.btn-link,.btn-ghost){background-color:color-mix(in oklab,var(--color-base-content)10%,transparent)}}.btn[disabled]:not(.btn-link,.btn-ghost){box-shadow:none}.btn[disabled]{pointer-events:none;--btn-border:#0000;--btn-noise:none;--btn-fg:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.btn[disabled]{--btn-fg:color-mix(in oklch,var(--color-base-content)20%,#0000)}}@media(prefers-reduced-motion:no-preference){.collapse[open].collapse-arrow>.collapse-title:after,.collapse.collapse-open.collapse-arrow>.collapse-title:after{transform:translateY(-50%)rotate(225deg)}}.collapse.collapse-open.collapse-plus>.collapse-title:after{--tw-content:"−";content:var(--tw-content)}:is(.collapse[tabindex].collapse-arrow:focus:not(.collapse-close),.collapse.collapse-arrow[tabindex]:focus-within:not(.collapse-close))>.collapse-title:after,.collapse.collapse-arrow:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{transform:translateY(-50%)rotate(225deg)}.collapse[open].collapse-plus>.collapse-title:after,.collapse[tabindex].collapse-plus:focus:not(.collapse-close)>.collapse-title:after,.collapse.collapse-plus:not(.collapse-close)>input:is([type=checkbox],[type=radio]):checked~.collapse-title:after{--tw-content:"−";content:var(--tw-content)}.checkbox:disabled{cursor:not-allowed;opacity:.2}.btn-active{--btn-bg:var(--btn-color,var(--color-base-200))}@supports (color:color-mix(in lab,red,red)){.btn-active{--btn-bg:color-mix(in oklab,var(--btn-color,var(--color-base-200)),#000 7%)}}.btn-active{--btn-shadow:0 0 0 0 oklch(0% 0 0/0),0 0 0 0 oklch(0% 0 0/0);isolation:isolate}.input-sm{--size:calc(var(--size-field,.25rem)*8);font-size:max(var(--font-size,.75rem),.75rem)}.input-sm[type=number]::-webkit-inner-spin-button{margin-block:-.5rem;margin-inline-end:-.75rem}.input-xs{--size:calc(var(--size-field,.25rem)*6);font-size:max(var(--font-size,.6875rem),.6875rem)}.input-xs[type=number]::-webkit-inner-spin-button{margin-block:-.25rem;margin-inline-end:-.75rem}.loading-xs{width:calc(var(--size-selector,.25rem)*4)}.menu-sm :where(li:not(.menu-title)>:not(ul,details,.menu-title)),.menu-sm :where(li:not(.menu-title)>details>summary:not(.menu-title)){border-radius:var(--radius-field);padding-block:.25rem;padding-inline:.625rem;font-size:.75rem}.menu-sm .menu-title{padding-block:.5rem;padding-inline:.75rem}.input-ghost{box-shadow:none;background-color:#0000;border-color:#0000}.input-ghost:focus,.input-ghost:focus-within{background-color:var(--color-base-100);color:var(--color-base-content);box-shadow:none;border-color:#0000}.badge-outline{color:var(--badge-color);--badge-bg:#0000;background-image:none;border-color:currentColor}.loading-spinner{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg width='24' height='24' stroke='black' viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cg transform-origin='center'%3E%3Ccircle cx='12' cy='12' r='9.5' fill='none' stroke-width='3' stroke-linecap='round'%3E%3CanimateTransform attributeName='transform' type='rotate' from='0 12 12' to='360 12 12' dur='2s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dasharray' values='0,150;42,150;42,150' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3Canimate attributeName='stroke-dashoffset' values='0;-16;-59' keyTimes='0;0.475;1' dur='1.5s' repeatCount='indefinite'/%3E%3C/circle%3E%3C/g%3E%3C/svg%3E")}.checkbox-xs{--size:calc(var(--size-selector,.25rem)*4);padding:.125rem}.select-sm{--size:calc(var(--size-field,.25rem)*8);font-size:.75rem}.select-sm option{padding-block:.25rem;padding-inline:.625rem}.tabs-sm{--tab-height:calc(var(--size-field,.25rem)*8)}.tabs-sm>.tab{--tab-p:.5rem;--tab-radius-min:calc(.5rem - var(--border));font-size:.875rem}.badge-sm{--size:calc(var(--size-selector,.25rem)*5);font-size:.75rem}.badge-xs{--size:calc(var(--size-selector,.25rem)*4);font-size:.625rem}.btn-sm{--fontsize:.75rem;--btn-p:.75rem;--size:calc(var(--size-field,.25rem)*8)}.btn-xs{--fontsize:.6875rem;--btn-p:.5rem;--size:calc(var(--size-field,.25rem)*6)}.badge-error{--badge-color:var(--color-error);--badge-fg:var(--color-error-content)}.badge-info{--badge-color:var(--color-info);--badge-fg:var(--color-info-content)}.badge-neutral{--badge-color:var(--color-neutral);--badge-fg:var(--color-neutral-content)}.badge-success{--badge-color:var(--color-success);--badge-fg:var(--color-success-content)}.badge-warning{--badge-color:var(--color-warning);--badge-fg:var(--color-warning-content)}.toggle-sm[type=checkbox],.toggle-sm:has([type=checkbox]){--size:calc(var(--size-selector,.25rem)*5)}}.collapse:not(td,tr,colgroup){visibility:revert-layer}.collapse{visibility:collapse}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.left-full{left:100%}.join{--join-ss:0;--join-se:0;--join-es:0;--join-ee:0;align-items:stretch;display:inline-flex}.join :where(.join-item){border-start-start-radius:var(--join-ss,0);border-start-end-radius:var(--join-se,0);border-end-end-radius:var(--join-ee,0);border-end-start-radius:var(--join-es,0)}.join :where(.join-item) *{--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>.join-item:where(:first-child),.join :first-child:not(:last-child) :where(.join-item){--join-ss:var(--radius-field);--join-se:0;--join-es:var(--radius-field);--join-ee:0}.join>.join-item:where(:last-child),.join :last-child:not(:first-child) :where(.join-item){--join-ss:0;--join-se:var(--radius-field);--join-es:0;--join-ee:var(--radius-field)}.join>.join-item:where(:only-child),.join :only-child :where(.join-item){--join-ss:var(--radius-field);--join-se:var(--radius-field);--join-es:var(--radius-field);--join-ee:var(--radius-field)}.join>:where(:focus,:has(:focus)){z-index:1}@media(hover:hover){.join>:where(.btn:hover,:has(.btn:hover)){isolation:isolate}}.z-50{z-index:50}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.join-item:where(:not(:first-child,:disabled,[disabled],.btn-disabled)){margin-block-start:0;margin-inline-start:calc(var(--border,1px)*-1)}.join-item:where(:is(:disabled,[disabled],.btn-disabled)){border-width:var(--border,1px)0 var(--border,1px)var(--border,1px)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-8{margin-top:calc(var(--spacing)*8)}.mr-2{margin-right:calc(var(--spacing)*2)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}:root .prose{--tw-prose-body:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-body:color-mix(in oklab,var(--color-base-content)80%,#0000)}}:root .prose{--tw-prose-headings:var(--color-base-content);--tw-prose-lead:var(--color-base-content);--tw-prose-links:var(--color-base-content);--tw-prose-bold:var(--color-base-content);--tw-prose-counters:var(--color-base-content);--tw-prose-bullets:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-bullets:color-mix(in oklab,var(--color-base-content)50%,#0000)}}:root .prose{--tw-prose-hr:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-hr:color-mix(in oklab,var(--color-base-content)20%,#0000)}}:root .prose{--tw-prose-quotes:var(--color-base-content);--tw-prose-quote-borders:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-quote-borders:color-mix(in oklab,var(--color-base-content)20%,#0000)}}:root .prose{--tw-prose-captions:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-captions:color-mix(in oklab,var(--color-base-content)50%,#0000)}}:root .prose{--tw-prose-code:var(--color-base-content);--tw-prose-pre-code:var(--color-neutral-content);--tw-prose-pre-bg:var(--color-neutral);--tw-prose-th-borders:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-th-borders:color-mix(in oklab,var(--color-base-content)50%,#0000)}}:root .prose{--tw-prose-td-borders:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-td-borders:color-mix(in oklab,var(--color-base-content)20%,#0000)}}:root .prose{--tw-prose-kbd:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){:root .prose{--tw-prose-kbd:color-mix(in oklab,var(--color-base-content)80%,#0000)}}:root .prose :where(code):not(pre>code){background-color:var(--color-base-200);border-radius:var(--radius-selector);border:var(--border)solid var(--color-base-300);font-weight:inherit;padding-block:.2em;padding-inline:.5em}:root .prose :where(code):not(pre>code):before,:root .prose :where(code):not(pre>code):after{display:none}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.size-3{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.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)}.h-1{height:calc(var(--spacing)*1)}.h-2{height:calc(var(--spacing)*2)}.h-4{height:calc(var(--spacing)*4)}.h-8{height:calc(var(--spacing)*8)}.h-120{height:calc(var(--spacing)*120)}.h-full{height:100%}.h-screen{height:100vh}.max-h-96{max-height:calc(var(--spacing)*96)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[80vh\]{max-height:80vh}.max-h-full{max-height:100%}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-8{min-height:calc(var(--spacing)*8)}.min-h-60{min-height:calc(var(--spacing)*60)}.min-h-80{min-height:calc(var(--spacing)*80)}.w-2{width:calc(var(--spacing)*2)}.w-4{width:calc(var(--spacing)*4)}.w-32{width:calc(var(--spacing)*32)}.w-72{width:calc(var(--spacing)*72)}.w-96{width:calc(var(--spacing)*96)}.w-120{width:calc(var(--spacing)*120)}.w-150{width:calc(var(--spacing)*150)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.max-w-\[90vw\]{max-width:90vw}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.translate-y-\[calc\(-50\%-2px\)\]{--tw-translate-y: calc(-50% - 2px) ;translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-45{rotate:45deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.cursor-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-\[var\(--sidebar-width\)_1fr\]{grid-template-columns:var(--sidebar-width)1fr}.grid-rows-1{grid-template-rows:repeat(1,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-start{justify-content:flex-start}.gap-0{gap:calc(var(--spacing)*0)}.gap-1{gap:calc(var(--spacing)*1)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*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-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded-box{border-radius:var(--radius-box)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-none{border-radius:0}.rounded-xs{border-radius:var(--radius-xs)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.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-base-300{border-color:var(--color-base-300)}.bg-base-100{background-color:var(--color-base-100)}.bg-base-200,.bg-base-200\/40{background-color:var(--color-base-200)}@supports (color:color-mix(in lab,red,red)){.bg-base-200\/40{background-color:color-mix(in oklab,var(--color-base-200)40%,transparent)}}.bg-base-200\/50{background-color:var(--color-base-200)}@supports (color:color-mix(in lab,red,red)){.bg-base-200\/50{background-color:color-mix(in oklab,var(--color-base-200)50%,transparent)}}.bg-base-300{background-color:var(--color-base-300)}.bg-foreground{background-color:var(--color-foreground)}.bg-popover{background-color:var(--color-popover)}.bg-transparent{background-color:#0000}.fill-foreground{fill:var(--color-foreground)}.object-contain{object-fit:contain}.p-0{padding:calc(var(--spacing)*0)}.p-0\!{padding:calc(var(--spacing)*0)!important}.p-1{padding:calc(var(--spacing)*1)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0{padding-block:calc(var(--spacing)*0)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.pt-2{padding-top:calc(var(--spacing)*2)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.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-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-background{color:var(--color-background)}.text-base-content,.text-base-content\/40{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/40{color:color-mix(in oklab,var(--color-base-content)40%,transparent)}}.text-base-content\/50{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/50{color:color-mix(in oklab,var(--color-base-content)50%,transparent)}}.text-base-content\/60{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/60{color:color-mix(in oklab,var(--color-base-content)60%,transparent)}}.text-base-content\/70{color:var(--color-base-content)}@supports (color:color-mix(in lab,red,red)){.text-base-content\/70{color:color-mix(in oklab,var(--color-base-content)70%,transparent)}}.text-error,.text-error\/80{color:var(--color-error)}@supports (color:color-mix(in lab,red,red)){.text-error\/80{color:color-mix(in oklab,var(--color-error)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-success{color:var(--color-success)}.uppercase{text-transform:uppercase}.prose :where(.btn-link):not(:where([class~=not-prose],[class~=not-prose] *)){text-decoration-line:none}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow{--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)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px 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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media(forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}@layer daisyui.l1{.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)){--btn-shadow:"";--btn-bg:#0000;--btn-border:#0000;--btn-noise:none}.btn-ghost:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn)):not(:disabled,[disabled],.btn-disabled){--btn-fg:var(--btn-color,currentColor);outline-color:currentColor}@media(hover:none){.btn-ghost:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color,currentColor);--btn-border:#0000;--btn-noise:none;outline-color:currentColor}}.btn-outline:not(.btn-active,:hover,:active:focus,:focus-visible,input:checked:not(.filter .btn),:disabled,[disabled],.btn-disabled){--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}@media(hover:none){.btn-outline:not(.btn-active,:active,:focus-visible,input:checked:not(.filter .btn)):hover{--btn-shadow:"";--btn-bg:#0000;--btn-fg:var(--btn-color);--btn-border:var(--btn-color);--btn-noise:none}}}.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,)}.after\:start-0:after{content:var(--tw-content);inset-inline-start:calc(var(--spacing)*0)}.after\:end-auto:after{content:var(--tw-content);inset-inline-end:auto}@media(hover:hover){.hover\:bg-base-200:hover{background-color:var(--color-base-200)}.hover\:bg-base-300\/40:hover{background-color:var(--color-base-300)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-base-300\/40:hover{background-color:color-mix(in oklab,var(--color-base-300)40%,transparent)}}.hover\:text-error:hover{color:var(--color-error)}}@media(min-width:40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:grid-cols-\[var\(--history-aside-width\)_1fr\]{grid-template-columns:var(--history-aside-width)1fr}.lg\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.lg\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}}}@keyframes rating{0%,40%{filter:brightness(1.05)contrast(1.05);scale:1.1}}@keyframes dropdown{0%{opacity:0}}@keyframes radio{0%{padding:5px}50%{padding:3px}}@keyframes toast{0%{opacity:0;scale:.9}to{opacity:1;scale:1}}@keyframes rotator{89.9999%,to{--first-item-position:0 0%}90%,99.9999%{--first-item-position:0 calc(var(--items)*100%)}to{translate:0 -100%}}@keyframes skeleton{0%{background-position:150%}to{background-position:-50%}}@keyframes menu{0%{opacity:0}}@keyframes progress{50%{background-position-x:-115%}}@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-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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{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-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-content{syntax:"*";inherits:false;initial-value:""}
@@ -8,8 +8,8 @@
8
8
  name="description"
9
9
  content="Diffact - diff review UI for local projects"
10
10
  />
11
- <script type="module" crossorigin src="/assets/index-BlaXWu6U.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-DMEToi1s.css">
11
+ <script type="module" crossorigin src="/assets/index-DIRXMKEj.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-lMgdATtC.css">
13
13
  </head>
14
14
  <body
15
15
  class="h-screen overflow-hidden bg-base-200 text-base-content antialiased"
@@ -1,11 +0,0 @@
1
- import{createRequire as e}from"node:module";import t,{access as n,constants as r}from"node:fs/promises";import i from"node:os";import a from"node:path";import{Hono as o}from"hono";import{logger as s}from"hono/logger";import{execFile as c,execSync as l,spawn as u}from"node:child_process";import d from"pino";import f,{randomUUID as p}from"node:crypto";import m from"node:fs";import{promisify as h}from"node:util";import{fileURLToPath as ee}from"node:url";var g=e(import.meta.url);const _=d({level:process.env.LOG_LEVEL||`info`}),v=`[app-server]`,y=(e,t)=>{if(t){_.info({detail:t},`${v} ${e}`);return}_.info(`${v} ${e}`)};var b=class{#e;#t;#n=null;#r=new Map;#i=1;#a=null;#o=null;#s;#c;#l;#u=!1;#d=``;constructor(e){this.#e=e.command??`codex`,this.#t=e.args??[`app-server`],this.#s=e.onNotification,this.#c=e.onRequest,this.#l=e.onClose}async connect(){return this.#a||=new Promise((e,t)=>{y(`connect:start`,{command:this.#e});let n=u(this.#e,this.#t,{stdio:[`pipe`,`pipe`,`pipe`]});this.#n=n;let r=!1,i=()=>{n.removeListener(`spawn`,a),n.removeListener(`error`,o)},a=()=>{r||(r=!0,i(),y(`connect:ready`),e())},o=()=>{if(r)return;r=!0,i();let e=Error(`app_server_spawn_failed`);this.#a=null,this.#n=null,y(`connect:error`,{error:e.message}),t(e),this.#l&&this.#l(e)};n.on(`spawn`,a),n.on(`error`,o),n.stdout.on(`data`,e=>{this.#m(e)}),n.stderr.on(`data`,()=>{}),n.on(`exit`,(e,t)=>{let n=Error(`app_server_closed`);for(let e of this.#r.values())e.reject(n);this.#r.clear(),this.#a=null,this.#o=null,this.#u=!1,this.#d=``,this.#n=null,y(`connect:closed`,{code:e,signal:t}),this.#l&&this.#l(n)})}),this.#a}async initialize(e){if(!this.#u){if(this.#o)return this.#o;this.#o=(async()=>{await this.connect(),y(`initialize:start`),await this.request(`initialize`,{clientInfo:{name:e.name,title:e.title??null,version:e.version}}),this.notify(`initialized`),this.#u=!0,y(`initialize:done`)})();try{await this.#o}finally{this.#o=null}}}async request(e,t){await this.connect();let n=this.#i++,r={id:n,method:e,params:t},i=this.#n?.stdin;if(!i||!i.writable)throw Error(`app_server_not_connected`);return new Promise((t,a)=>{this.#r.set(n,{method:e,resolve:t,reject:a}),y(`request:out`,{id:n,method:e}),i.write(`${JSON.stringify(r)}\n`)})}notify(e,t){let n=this.#n?.stdin;if(!n||!n.writable)return;let r={method:e,params:t};y(`notify:out`,{method:e}),n.write(`${JSON.stringify(r)}\n`)}close(){this.#n&&this.#n.kill()}async#f(e){if(e.method){if(e.id!==void 0){y(`request:in`,{id:e.id,method:e.method});let t={id:e.id,method:e.method,params:e.params},n=null;this.#c&&(n=await this.#c(t)),y(`response:out`,{id:t.id,method:t.method}),this.#p(t.id,n);return}this.#s&&(y(`notification:in`,{message:e}),this.#s({method:e.method,params:e.params}));return}if(e.id===void 0)return;let t=this.#r.get(e.id);if(t){if(this.#r.delete(e.id),e.error){y(`response:error`,{id:e.id,method:t.method});let n=e.error&&typeof e.error==`object`&&`message`in e.error?e.error.message:null;t.reject(Error(typeof n==`string`?n:`app_server_error`));return}if(e.result!==void 0){y(`response:in`,{id:e.id,method:t.method}),t.resolve(e.result);return}y(`response:in`,{id:e.id,method:t.method}),t.resolve(e)}}#p(e,t){let n=this.#n?.stdin;!n||!n.writable||n.write(`${JSON.stringify({id:e,result:t})}\n`)}#m(e){this.#d+=e.toString(`utf8`);let t=this.#d.indexOf(`
2
- `);for(;t!==-1;){let e=this.#d.slice(0,t).trim();if(this.#d=this.#d.slice(t+1),!e){t=this.#d.indexOf(`
3
- `);continue}let n=null;try{n=JSON.parse(e)}catch{t=this.#d.indexOf(`
4
- `);continue}if(!n||typeof n!=`object`){t=this.#d.indexOf(`
5
- `);continue}this.#f(n),t=this.#d.indexOf(`
6
- `)}}};async function x(e){let n=a.resolve(e),r;try{r=await t.stat(n)}catch(e){throw e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`?Error(`invalid_path`):e}if(!r.isDirectory())throw Error(`not_a_directory`);let i=a.join(n,`.git`);return{rootPath:n,isGit:await t.stat(i).then(()=>!0).catch(e=>{if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return!1;throw e})}}function S(){return typeof f.randomUUID==`function`?f.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).slice(2,10)}`}const C=()=>process.env.CODEX_APPROVAL_POLICY?.trim()||`on-request`,w=()=>process.env.CODEX_SANDBOX_MODE?.trim()||`workspace-write`,T=e=>{if(!e||typeof e!=`object`)return null;let t=e,n=t.turn;if(n&&typeof n==`object`&&`id`in n){let e=n.id;return typeof e==`string`?e:null}if(`turnId`in t){let e=t.turnId;return typeof e==`string`?e:null}return null},E=e=>{if(!e||typeof e!=`object`)return null;let t=e;if(`threadId`in t){let e=t.threadId;return typeof e==`string`?e:null}let n=t.thread;if(n&&typeof n==`object`&&`id`in n){let e=n.id;return typeof e==`string`?e:null}return null},te=e=>{if(!e||typeof e!=`object`)return null;let t=e.error;if(t&&typeof t==`object`&&`message`in t){let e=t.message;return typeof e==`string`?e:null}return null},ne=`project:`,re=e=>{if(!e||typeof e!=`object`)return{data:[],nextCursor:null};let t=e;return{data:Array.isArray(t.data)?t.data.filter(e=>!!e&&typeof e==`object`):[],nextCursor:typeof t.nextCursor==`string`?t.nextCursor:null}},ie=e=>{if(!e||!e.startsWith(ne))return null;let t=e.slice(8);try{let e=Buffer.from(t,`base64`).toString(`utf8`),n=JSON.parse(e);if(!n||typeof n!=`object`)return null;let r=n;return{upstreamCursor:typeof r.upstreamCursor==`string`?r.upstreamCursor:null,buffered:Array.isArray(r.buffered)?r.buffered.filter(e=>!!e&&typeof e==`object`):[]}}catch{return null}},ae=e=>`${ne}${Buffer.from(JSON.stringify(e)).toString(`base64`)}`;var oe=class{#e;#t=new Map;#n=new Map;#r;constructor(e){this.#e=e.hub,this.#r=new b({onNotification:e=>{this.#i(e)},onRequest:async e=>this.#s(e),onClose:e=>{this.#o(e)}})}listAgents(){return Array.from(this.#t.values()).map(e=>this.#c(e))}async listThreads(e){if(await this.#r.initialize({name:`diffact`,title:`diffact`,version:`0.1.0`}),!e.projectPath)return this.#r.request(`thread/list`,{cursor:e.cursor??null,limit:e.limit??null,modelProviders:null});let t=e.limit??null,n=ie(e.cursor??null),r=n?.upstreamCursor??e.cursor??null,i=(n?.buffered??[]).filter(t=>t.cwd===e.projectPath);if(t!==null&&t<=0)return{data:[],nextCursor:null};if(t===null){let t=re(await this.#r.request(`thread/list`,{cursor:r,limit:null,modelProviders:null}));return{data:t.data.filter(t=>t.cwd===e.projectPath),nextCursor:t.nextCursor}}if(i.length>=t){let e=i.slice(t);return{data:i.slice(0,t),nextCursor:e.length?ae({upstreamCursor:r,buffered:e}):r}}let a=i.slice(),o=new Set;for(;;){let n=re(await this.#r.request(`thread/list`,{cursor:r,limit:t,modelProviders:null}));if(a.push(...n.data.filter(t=>t.cwd===e.projectPath)),a.length>=t){let e=a.slice(t);return{data:a.slice(0,t),nextCursor:e.length?ae({upstreamCursor:n.nextCursor??null,buffered:e}):n.nextCursor??null}}if(!n.nextCursor)return{data:a,nextCursor:null};if(o.has(n.nextCursor))return{data:a,nextCursor:n.nextCursor};o.add(n.nextCursor),r=n.nextCursor}}getAgent(e){let t=this.#t.get(e);return t?this.#c(t):null}async resumeThread(e){let t=this.#n.get(e.threadId);if(t)return this.#c(t);let n=S(),r=new Date().toISOString(),i={id:n,label:e.label||`thread-${e.threadId.slice(0,6)}`,status:`completed`,createdAt:r,projectPath:e.projectPath,threadId:e.threadId,lastError:void 0,exitCode:null,signal:null,stoppedByUser:!1,activeTurnId:null};this.#t.set(n,i),this.#n.set(e.threadId,i),this.#e.send(`agent_status`,this.#c(i));try{await this.#r.initialize({name:`diffact`,title:`diffact`,version:`0.1.0`});let t=E(await this.#r.request(`thread/resume`,{threadId:e.threadId}));t&&t!==e.threadId&&(i.threadId=t,this.#n.set(t,i))}catch(e){i.status=`error`,i.lastError=e instanceof Error?e.message:`app_server_error`,this.#e.send(`agent_status`,this.#c(i))}return this.#c(i)}async startAgent(e){let t=await x(e.projectPath),n=S(),r=new Date().toISOString(),i={id:n,label:e.label||`agent-${n.slice(0,6)}`,status:`starting`,createdAt:r,projectPath:t.rootPath,threadId:null,lastError:void 0,exitCode:null,signal:null,stoppedByUser:!1,activeTurnId:null};this.#t.set(n,i),this.#e.send(`agent_status`,this.#c(i));try{await this.#r.initialize({name:`diffact`,title:`diffact`,version:`0.1.0`});let n=E(await this.#r.request(`thread/start`,{model:null,modelProvider:null,cwd:t.rootPath,approvalPolicy:C(),sandbox:w(),config:null,baseInstructions:null,developerInstructions:null,experimentalRawEvents:!1}));if(!n)throw Error(`app_server_thread_start_failed`);i.threadId=n,this.#n.set(n,i),this.#e.send(`agent_status`,this.#c(i)),await this.#r.request(`turn/start`,{threadId:i.threadId,input:[{type:`text`,text:e.prompt}],cwd:null,approvalPolicy:null,sandboxPolicy:null,model:null,effort:null,summary:null,outputSchema:null})}catch(e){i.status=`error`,i.lastError=e instanceof Error?e.message:`app_server_error`,this.#e.send(`agent_status`,this.#c(i))}return this.#c(i)}async startThread(e){let t=await x(e.projectPath),n=S(),r=new Date().toISOString(),i={id:n,label:e.label||`thread-${n.slice(0,6)}`,status:`starting`,createdAt:r,projectPath:t.rootPath,threadId:null,lastError:void 0,exitCode:null,signal:null,stoppedByUser:!1,activeTurnId:null};this.#t.set(n,i),this.#e.send(`agent_status`,this.#c(i));try{await this.#r.initialize({name:`diffact`,title:`diffact`,version:`0.1.0`});let e=E(await this.#r.request(`thread/start`,{model:null,modelProvider:null,cwd:t.rootPath,approvalPolicy:C(),sandbox:w(),config:null,baseInstructions:null,developerInstructions:null,experimentalRawEvents:!1}));if(!e)throw Error(`app_server_thread_start_failed`);i.threadId=e,i.status=`completed`,this.#n.set(e,i),this.#e.send(`agent_status`,this.#c(i))}catch(e){i.status=`error`,i.lastError=e instanceof Error?e.message:`app_server_error`,this.#e.send(`agent_status`,this.#c(i))}return this.#c(i)}stopAgent(e){let t=this.#t.get(e);return t?(t.stoppedByUser=!0,t.status=`stopped`,t.threadId&&t.activeTurnId&&this.#r.request(`turn/interrupt`,{threadId:t.threadId,turnId:t.activeTurnId}).catch(()=>{}),t.threadId&&this.#n.delete(t.threadId),this.#e.send(`agent_status`,this.#c(t)),!0):!1}stopThread(e){let t=this.#n.get(e);return t?this.stopAgent(t.id):!1}async sendMessage(e,t){let n=this.#t.get(e);if(!n||!n.threadId)return!1;n.status=`running`,n.lastError=void 0,this.#e.send(`agent_status`,this.#c(n));try{await this.#r.initialize({name:`diffact`,title:`diffact`,version:`0.1.0`}),await this.#r.request(`turn/start`,{threadId:n.threadId,input:[{type:`text`,text:t}],cwd:null,approvalPolicy:null,sandboxPolicy:null,model:null,effort:null,summary:null,outputSchema:null})}catch(e){n.status=`error`,n.lastError=e instanceof Error?e.message:`app_server_error`,this.#e.send(`agent_status`,this.#c(n))}return!0}#i(e){let t=E(e.params);if(t){let n=this.#n.get(t);n&&!n.stoppedByUser&&this.#a(n,e);return}for(let t of this.#t.values())t.stoppedByUser||this.#a(t,e)}#a(e,t){let n=!1;if(t.method===`thread/started`){let r=E(t.params);r&&(e.threadId=r,this.#n.set(r,e),n=!0)}t.method===`turn/started`&&(e.status=`running`,e.activeTurnId=T(t.params),n=!0),t.method===`turn/completed`&&(e.status=`completed`,e.activeTurnId=null,n=!0),t.method===`error`&&(e.status=`error`,e.lastError=te(t.params)||`turn_error`,n=!0),n&&this.#e.send(`agent_status`,this.#c(e)),this.#e.send(`agent_event`,{projectPath:e.projectPath,threadId:e.threadId,event:t})}#o(e){this.#n.clear();for(let t of this.#t.values())t.stoppedByUser||(t.status=`error`,t.lastError=e?.message||`app_server_closed`,t.activeTurnId=null,this.#e.send(`agent_status`,this.#c(t)))}async#s(e){return e.method===`item/commandExecution/requestApproval`||e.method===`item/fileChange/requestApproval`?{decision:`accept`}:e.method===`applyPatchApproval`||e.method===`execCommandApproval`?{decision:`approved`}:null}#c(e){return{id:e.id,label:e.label,status:e.status,createdAt:e.createdAt,projectPath:e.projectPath,threadId:e.threadId??null,lastError:e.lastError,exitCode:e.exitCode??null,signal:e.signal??null}}};const D=globalThis.Bun!==void 0,se=!D;let ce=null;function le(){if(!ce)try{ce=g(`node-pty`)}catch{throw Error(`node-pty is required for terminal support in Node.js. Install it with: npm install node-pty`)}return ce}var ue=class{pty=null;cols;rows;dataCallback;encoder=new TextEncoder;constructor(e){this.cols=e.cols,this.rows=e.rows,this.dataCallback=e.data}ensurePty(){if(this.pty)return this.pty;let e=le(),t=process.env.SHELL||`/bin/sh`;return this.pty=e.spawn(t,[],{name:`xterm-256color`,cols:this.cols,rows:this.rows,cwd:process.cwd(),env:process.env}),this.pty.onData(e=>{this.dataCallback(this,this.encoder.encode(e))}),this.pty}resize(e,t){this.cols=e,this.rows=t,this.pty?.resize(e,t)}write(e){let t=this.ensurePty();typeof e==`string`?t.write(e):t.write(new TextDecoder().decode(e))}};const O={name:D?`bun`:`node`,version:D?Bun.version:process.version,isBun:D,isNode:se,which(e){if(D)return Bun.which(e);try{return l(`which ${e}`,{encoding:`utf8`,stdio:[`pipe`,`pipe`,`ignore`]}).trim()||null}catch{return null}},file(e){if(D)return Bun.file(e);let t=m.statSync(e),n=a.extname(e).toLowerCase();return{stream(){let t=m.createReadStream(e);return new ReadableStream({start(e){t.on(`data`,t=>{e.enqueue(new Uint8Array(t))}),t.on(`end`,()=>{e.close()}),t.on(`error`,t=>{e.error(t)})},cancel(){t.destroy()}})},size:t.size,type:{".html":`text/html`,".css":`text/css`,".js":`application/javascript`,".json":`application/json`,".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".svg":`image/svg+xml`,".txt":`text/plain`}[n]||`application/octet-stream`}},createTerminal(e){return D?new Bun.Terminal({cols:e.cols,rows:e.rows,data:e.data}):new ue(e)},spawn(e,t={}){if(D){let n=t.onExit?(e,n,r,i)=>{t.onExit?.(e,n,r===null?null:String(r),i)}:void 0,r={cwd:t.cwd,env:t.env,onExit:n};return t.terminal&&(r.terminal=t.terminal),Bun.spawn(e,r)}let n=e[0];if(!n)throw Error(`Command array must not be empty`);let r=u(n,e.slice(1),{cwd:t.cwd,env:t.env,stdio:[`pipe`,`pipe`,`pipe`]}),i=null,a=null,o=new Promise(e=>{r.on(`exit`,(n,o)=>{i=n,a=o,t.onExit?.(r,n,o,void 0),e(n??1)}),r.on(`error`,n=>{t.onExit?.(r,null,null,n),e(1)})}),s=e=>e?new ReadableStream({start(t){e.on(`data`,e=>{t.enqueue(new Uint8Array(e))}),e.on(`end`,()=>t.close()),e.on(`error`,e=>t.error(e))}}):null;return{exited:o,get exitCode(){return i},get signalCode(){return a},stdout:s(r.stdout),stderr:s(r.stderr),kill:e=>r.kill(e)}}};async function de(){let e=O.which(`gh`);if(!e)return!1;try{return await O.spawn([e,`auth`,`status`,`--hostname`,`github.com`],{}).exited===0}catch{return!1}}async function fe(e){let t=e?await x(e).catch(()=>null):null,n=await de();return{diffReview:!0,git:t?t.isGit:!1,github:n}}const k=new Map,A=a.join(i.tmpdir(),`diffact-command-output`),j=new Map;let pe=null;const me=(e,t)=>t?`stopped`:e===0?`completed`:`failed`,he=e=>{let t=e.trim();return t?t.includes(`/`)?t:O.which(t)??t:``},ge=()=>{if(process.env.SHELL)return he(process.env.SHELL);try{let e=i.userInfo();if(e.shell)return he(e.shell)}catch{return``}return``},_e=e=>{let t=a.basename(e);return t===`bash`||t===`zsh`},M=(e,t)=>{let n=a.basename(e);return n===`bash`||n===`zsh`||n===`fish`||n===`sh`?[`-ilc`,t]:[`-ic`,t]},ve=e=>{let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t},ye=async()=>{pe||=t.mkdir(A,{recursive:!0}).then(()=>void 0),await pe},N=e=>`'${e.replace(/'/g,`'\\''`)}'`,be=e=>e.commandLine??[e.command,...e.args].map(N).join(` `),xe=(e,t,n,r)=>{let i=j.get(e)??[],a=i.find(e=>!e.busy);if(a)return a.busy=!0,a.onData=r,(a.cols!==t||a.rows!==n)&&(a.cols=t,a.rows=n,a.terminal.resize(t,n)),a;let o={id:p(),terminal:null,busy:!0,cols:t,rows:n,onData:r};return o.terminal=O.createTerminal({cols:t,rows:n,data:(e,t)=>{o.onData?.(t)}}),i.push(o),j.set(e,i),o},P=(e,t)=>{j.get(e)&&(t.busy=!1,t.onData=void 0)},Se=async e=>{if(!e)return null;try{return await t.readFile(e,`utf8`)}catch{return null}},Ce=()=>{let e=!1,t=null,n=new Promise(e=>{t=e}),r=n=>{e||(e=!0,t?.(n))};return{exitPromise:n,onExit:(e,t,n,i)=>{i&&_.error({err:i},`command run exit error`),r({exitCode:t??null,signal:n??null})},resolveOnce:r}},we=e=>{setTimeout(()=>{let n=k.get(e);n?.stdoutPath&&t.unlink(n.stdoutPath).catch(()=>void 0),n?.stderrPath&&t.unlink(n.stderrPath).catch(()=>void 0),k.delete(e)},3e5)},F=async e=>{let n=p(),r,i=``,o=``,s=null,c=``;try{let l=Date.now(),u={stdout:``,stderr:``,combined:``},d=new TextDecoder,f=(t,r)=>{r&&(t===`stdout`?u.stdout+=r:u.stderr+=r,u.combined+=r,e.listener?.onOutput?.({runId:n,stream:t,data:r}))},p=ge(),m=p||`/bin/sh`,h=be(e.plan),ee=ve({...process.env,...e.plan.env||{},SHELL:m,TERM:`xterm-256color`,FORCE_COLOR:`1`,CLICOLOR_FORCE:`1`}),g=e.plan.cwd||e.projectRoot;o=g;try{if(!(await t.stat(g)).isDirectory())throw Error(`invalid_cwd:${g}`)}catch(e){let t=e instanceof Error?e.message:`invalid_cwd:${g}`;throw Error(t)}let v=m,y=M(m,h),b,x,S=_e(m)?m:``;if(S){await ye(),b=a.join(A,`${n}.out`),x=a.join(A,`${n}.err`);let e=`set -o pipefail; ${h} > >(tee -a ${N(b)}) 2> >(tee -a ${N(x)} >&2)`;v=S,y=M(S,e)}let C=async()=>{let{exitPromise:r,onExit:a,resolveOnce:o}=Ce();i=v,_.info({runId:n,commandId:e.command.id,commandName:e.command.name,commandSource:e.command.source,projectRoot:e.projectRoot,cwd:g,file:v,args:y,defaultShell:p,shellPath:m,wrapperShell:S},`command run spawn`),v.includes(`/`)&&await t.access(v);let l=[v,...y],u=Math.max(2,Math.floor(e.terminal?.cols??120)),h=Math.max(1,Math.floor(e.terminal?.rows??30));s=xe(e.projectRoot,u,h,e=>{let t=d.decode(e,{stream:!0});t&&f(`stdout`,t)}),c=s.id;let b=O.spawn(l,{cwd:g,env:ee,terminal:s.terminal,onExit:a});return b.exited.then(e=>{o({exitCode:e??null,signal:b.signalCode?String(b.signalCode):null})}).catch(e=>{_.error({err:e,runId:n,file:i},`command run exit failed`),o({exitCode:null,signal:null})}),{process:b,exitPromise:r}},w;try{let e=await C();r=e.process,w=e.exitPromise}catch(t){if(s&&(P(e.projectRoot,s),s=null,c=``),!S)throw t;_.warn({err:t,runId:n,wrapperShell:S},`command run wrapper failed, retrying without wrapper`),S=``,v=m,y=M(m,h),b=void 0,x=void 0;let i=await C();r=i.process,w=i.exitPromise}let T={id:n,command:e.command,projectRoot:e.projectRoot,terminalId:c,status:`running`,exitCode:null,signal:null,startedAt:new Date(l).toISOString(),output:u,process:r,stdoutPath:b,stderrPath:x};k.set(n,T),e.listener?.onStatus?.(T);let E=async(t,r)=>{let i=d.decode();i&&f(`stdout`,i),T.exitCode=t,T.signal=r?String(r):null,T.status=me(t,T.signal),T.completedAt=new Date().toISOString();let[a,o]=await Promise.all([Se(b),Se(x)]);a!==null&&(T.output.stdout=a),o!==null&&(T.output.stderr=o),!b&&!x?!T.output.stdout&&!T.output.stderr&&(T.output.stdout=T.output.combined,T.output.stderr=``):!b&&!T.output.stdout&&(T.output.stdout=T.output.combined),we(n),e.listener?.onStatus?.(T),s&&=(P(e.projectRoot,s),null),_.info({runId:n,status:T.status,exitCode:T.exitCode,signal:T.signal},`command run exit`)};return w.then(({exitCode:e,signal:t})=>{E(e,t)}),{status:`running`,runId:n,exitCode:null,signal:null}}catch(t){s&&=(P(e.projectRoot,s),null);let r=t instanceof Error?t.message:`spawn_failed`,a=t,c=typeof a?.code==`string`||typeof a?.errno==`number`?`:code=${String(a.code??``)}:errno=${String(a.errno??``)}`:``;return _.error({err:t,runId:n,file:i,cwd:o},`command run failed`),{status:`failed`,runId:null,exitCode:null,signal:null,error:`command_spawn_failed:${r}${c}:file=${i}:cwd=${o}`}}},I=e=>k.get(e)??null,Te=e=>[...k.values()].filter(t=>t.projectRoot===e),Ee=e=>{let t=k.get(e);return t?{stdout:t.output.stdout,stderr:t.output.stderr,combined:t.output.combined}:null},De=e=>{let t=k.get(e);return t?t.status===`running`?(t.process.kill(`SIGTERM`),setTimeout(()=>{t.status===`running`&&t.process.kill(`SIGKILL`)},2e3),t):t:null},Oe=[{id:`vscode`,name:`VS Code`,commands:{darwin:[`/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code`,`/usr/local/bin/code`,`/opt/homebrew/bin/code`],linux:[`/usr/bin/code`,`/usr/local/bin/code`,`/snap/bin/code`],win32:[`C:\\Program Files\\Microsoft VS Code\\bin\\code.cmd`,`C:\\Users\\%USERNAME%\\AppData\\Local\\Programs\\Microsoft VS Code\\bin\\code.cmd`]}},{id:`cursor`,name:`Cursor`,commands:{darwin:[`/Applications/Cursor.app/Contents/Resources/app/bin/cursor`,`/usr/local/bin/cursor`],linux:[`/usr/bin/cursor`,`/usr/local/bin/cursor`,`/opt/cursor/cursor`],win32:[`C:\\Program Files\\Cursor\\cursor.exe`,`C:\\Users\\%USERNAME%\\AppData\\Local\\Programs\\Cursor\\cursor.exe`]}},{id:`zed`,name:`Zed`,commands:{darwin:[`/Applications/Zed.app/Contents/MacOS/cli`,`/usr/local/bin/zed`],linux:[`/usr/bin/zed`,`/usr/local/bin/zed`,`~/.local/bin/zed`],win32:[]}}],ke=e=>e.startsWith(`~`)?a.join(i.homedir(),e.slice(1)):process.platform===`win32`&&e.includes(`%USERNAME%`)?e.replace(`%USERNAME%`,i.userInfo().username):e,Ae=async e=>{try{return await n(e,r.X_OK),!0}catch{return!1}},je=async e=>{for(let t of e){let e=ke(t);if(await Ae(e))return e}return null},Me=async()=>{let e=i.platform(),t=[];for(let n of Oe){let r=await je(n.commands[e]??[]);t.push({id:n.id,name:n.name,command:r??``,available:!!r})}return t},Ne=async e=>(await Me()).find(t=>t.id===e)??null,Pe=(e,t,n)=>{if(n.type===`project`)return[t];if(n.type===`file`){let r=a.join(t,n.filePath);return n.line&&n.line>0?e===`vscode`||e===`cursor`?[t,`--goto`,`${r}:${n.line}`]:[t,`${r}:${n.line}`]:[t,r]}return n.type===`diff`?[t,a.join(t,n.filePath)]:(n.type,[t])},Fe=async(e,t,n={type:`project`})=>{let r=await Ne(e);if(!r)return{success:!1,error:`editor_not_found`};if(!r.available)return{success:!1,error:`editor_not_installed`};let i=Pe(e,t,n);try{return O.spawn([r.command,...i]),{success:!0}}catch(e){return{success:!1,error:e instanceof Error?e.message:`spawn_failed`}}},L=h(c),R=1024*1024*20;async function Ie(e,t={}){let n=O.which(`gh`);if(!n)return _.warn({cwd:e},`gh CLI not found`),{available:!1,items:[],hasMore:!1,nextCursor:null,error:`GitHub CLI (gh) not found. Please install it.`};let r=t.limit??30,i=r+1;try{let a=[`pr`,`list`,`--state`,`open`,`--limit`,String(i),`--json`,`number,title,headRefName,updatedAt,author,url`];t.search&&a.push(`--search`,t.search);let{stdout:o}=await L(n,a,{cwd:e,maxBuffer:R}),s=JSON.parse(o),c=Array.isArray(s)?s.map(e=>({number:Number(e.number),title:String(e.title||``),headRefName:String(e.headRefName||``),updatedAt:String(e.updatedAt||``),author:e.author&&typeof e.author==`object`&&`login`in e.author?String(e.author.login||``):void 0,url:e.url?String(e.url):void 0})):[],l=c.length>r,u=l?c.slice(0,r):c;return{available:!0,items:u,hasMore:l,nextCursor:l?String(u[u.length-1]?.number):null}}catch(t){return _.error({err:t,cwd:e},`ghListPullRequests failed`),{available:!1,items:[],hasMore:!1,nextCursor:null,error:(t&&typeof t==`object`&&`stderr`in t?String(t.stderr).trim():``)||`Failed to list pull requests`}}}async function Le(e,t={}){let n=O.which(`gh`);if(!n)return{available:!1,items:[],hasMore:!1,nextCursor:null,error:`GitHub CLI (gh) not found. Please install it.`};let r=t.limit??30,i=r+1,a=t.state??`open`;try{let o=[`issue`,`list`,`--state`,a,`--limit`,String(i),`--json`,`number,title,state,updatedAt,author,url,labels`];t.search&&o.push(`--search`,t.search);let{stdout:s}=await L(n,o,{cwd:e,maxBuffer:R}),c=JSON.parse(s),l=Array.isArray(c)?c.map(e=>({number:Number(e.number),title:String(e.title||``),state:e.state===`CLOSED`?`closed`:`open`,updatedAt:String(e.updatedAt||``),author:e.author&&typeof e.author==`object`&&`login`in e.author?String(e.author.login||``):void 0,url:e.url?String(e.url):void 0,labels:Array.isArray(e.labels)?e.labels.map(e=>({name:String(e.name||``),color:String(e.color||``)})):[]})):[],u=l.length>r,d=u?l.slice(0,r):l;return{available:!0,items:d,hasMore:u,nextCursor:u?String(d[d.length-1]?.number):null}}catch(t){return _.error({err:t,cwd:e},`ghListIssues failed`),{available:!1,items:[],hasMore:!1,nextCursor:null,error:(t&&typeof t==`object`&&`stderr`in t?String(t.stderr).trim():``)||`Failed to list issues`}}}async function Re(e,t){let n=O.which(`gh`);if(!n)return null;try{let{stdout:r}=await L(n,[`issue`,`view`,String(t),`--json`,`number,title,body,state,author,url,labels,createdAt,updatedAt,comments`],{cwd:e,maxBuffer:R}),i=JSON.parse(r);return{number:Number(i.number),title:String(i.title||``),body:String(i.body||``),state:i.state===`CLOSED`?`closed`:`open`,author:i.author&&typeof i.author==`object`&&`login`in i.author?String(i.author.login||``):void 0,url:i.url?String(i.url):void 0,labels:Array.isArray(i.labels)?i.labels.map(e=>({name:String(e.name||``),color:String(e.color||``)})):[],createdAt:String(i.createdAt||``),updatedAt:String(i.updatedAt||``),commentsCount:Array.isArray(i.comments)?i.comments.length:0}}catch(n){return _.error({err:n,cwd:e,issueNumber:t},`ghGetIssueDetail failed`),null}}const ze=h(c),z=(e,t)=>ze(`git`,t,{cwd:e,maxBuffer:20971520}),Be=async(e,t)=>{try{return await z(e,t)}catch(e){if(e&&typeof e==`object`&&`stdout`in e){let t=e,n=e=>typeof e==`string`?e:e instanceof Buffer?e.toString(`utf8`):``;return{stdout:n(t.stdout),stderr:n(t.stderr)}}throw e}};async function Ve(e,t=[],n=[]){let r=[`diff`,`--no-color`,...t];n.length&&r.push(`--`,...n);let{stdout:i}=await z(e,r);if(t.some(e=>[`--cached`,`--staged`,`--index`].includes(e)))return i;let{stdout:a}=await z(e,[`ls-files`,`--others`,`--exclude-standard`,`-z`]),o=a.split(`\0`).map(e=>e.trim()).filter(Boolean),s=n.length?o.filter(e=>n.some(t=>e===t||e.startsWith(`${t}/`))):o;if(!s.length)return i;let c=[];for(let t of s){let{stdout:n}=await Be(e,[`diff`,`--no-color`,`--no-index`,`--`,`/dev/null`,t]);n&&c.push(n.trimEnd())}if(!c.length)return i;let l=[i.trimEnd(),...c].filter(Boolean).join(`
7
-
8
- `);return l&&`${l}\n`}async function He(e){let{stdout:t}=await z(e,[`diff`,`--name-only`,`--cached`,`-z`]);return t.split(`\0`).map(e=>e.trim()).filter(Boolean)}async function Ue(e,t){t.length&&await z(e,[`add`,`-A`,`--`,...t])}const We=e=>{if(!e||typeof e!=`object`||!(`stderr`in e))return!1;let t=e,n=typeof t.stderr==`string`?t.stderr:t.stderr instanceof Buffer?t.stderr.toString(`utf8`):``;return n.includes(`ambiguous argument 'HEAD'`)||n.includes(`bad revision 'HEAD'`)||n.includes(`unknown revision or path`)};async function Ge(e,t){if(t.length)try{await z(e,[`reset`,`-q`,`HEAD`,`--`,...t])}catch(n){if(!We(n))throw n;await z(e,[`rm`,`-r`,`--cached`,`--`,...t])}}async function Ke(e,t,n){if(!t)throw Error(`invalid_ref`);if(!n)throw Error(`invalid_path`);let{stdout:r}=await z(e,[`show`,`${t}:${n}`]);return r}async function qe(e,t=0,n=50){let r=Number.isFinite(t)&&t>0?Math.floor(t):0,i=Number.isFinite(n)&&n>0?Math.floor(n):50,{stdout:a}=await z(e,[`log`,`--skip=${r}`,`-n`,`${i+1}`,`--format=%H%x1f%h%x1f%an%x1f%aI%x1f%s%x1f%b%x1e`]),o=a.split(``).map(e=>e.trim()).filter(Boolean).map(e=>{let[t,n,r,i,a,o]=e.split(``);return t?{sha:t,shortSha:n||t.slice(0,7),authorName:r||``,authoredAt:i||``,subject:a||``,description:o||``}:null}).filter(e=>!!e),s=o.length>i,c=o.slice(0,i);return{items:c,hasMore:s,nextSkip:r+c.length}}async function Je(e,t){if(!t)throw Error(`invalid_commit`);let{stdout:n}=await z(e,[`show`,`--no-color`,`--no-ext-diff`,`--format=`,t]);return n}function Ye(e,t){if(!t)throw Error(`invalid_commit`);let n=u(`git`,[`show`,`--no-color`,`--no-ext-diff`,`--format=`,t],{cwd:e});return new ReadableStream({start(e){let t=t=>{e.enqueue(t)},r=t=>{e.error(t)};n.stdout.on(`data`,t),n.stdout.on(`error`,r),n.on(`error`,r),n.on(`close`,t=>{if(t&&t!==0){e.error(Error(`git_failed`));return}e.close()})},cancel(){n.kill()}})}async function Xe(e,t){if(!t)throw Error(`invalid_commit`);let{stdout:n}=await z(e,[`show`,`--name-status`,`--no-ext-diff`,`--format=`,t]);return n.split(`
9
- `).map(e=>e.trim()).filter(Boolean).map(e=>{let[t=``,...n]=e.split(` `),r=t[0]||``,i=r===`R`||r===`C`?n[1]||n[0]||``:n[0]||``,a=r===`R`&&n[0]||``,o={path:i,status:r===`A`?`added`:r===`D`?`deleted`:r===`R`?`renamed`:r===`C`?`added`:`modified`};return a&&a!==i&&(o.previousPath=a),o}).filter(e=>e.path)}async function Ze(e,t){if(!t)throw Error(`invalid_commit`);let{stdout:n}=await z(e,[`show`,`--numstat`,`--no-ext-diff`,`--format=`,t]),r=0;for(let e of n.split(`
10
- `)){let t=e.trim();if(!t)continue;let[n,i]=t.split(` `);if(n===`-`||i===`-`)return null;let a=Number.parseInt(n||`0`,10),o=Number.parseInt(i||`0`,10);r+=(Number.isFinite(a)?a:0)+(Number.isFinite(o)?o:0)}return r}const Qe=e=>e.split(`\0`).filter(e=>e),$e=e=>{let t={name:``,path:``,type:`folder`,children:new Map};for(let n of e){let e=n.replace(/\\/g,`/`).replace(/^\/+/,``);if(!e)continue;let r=e.split(`/`).filter(e=>e),i=t,a=``;for(let[e,t]of r.entries()){let n=a?`${a}/${t}`:t,o=e===r.length-1?`file`:`folder`,s=i.children.get(t);s||(s={name:t,path:n,type:o,children:new Map},i.children.set(t,s)),i=s,a=n}}let n=e=>{if(e.type===`file`)return{name:e.name,path:e.path,type:e.type};let t=Array.from(e.children.values()).map(n);return t.sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`folder`?-1:1),{name:e.name,path:e.path,type:e.type,children:t}};return Array.from(t.children.values()).map(n).sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`folder`?-1:1)};async function et(e){let[t,n]=await Promise.all([z(e,[`ls-files`,`-z`]),z(e,[`ls-files`,`-z`,`--others`,`--exclude-standard`])]),r=new Set([...Qe(t.stdout),...Qe(n.stdout)]);return $e(Array.from(r))}async function tt(e,t={}){let{stdout:n}=await z(e,[`for-each-ref`,`--sort=-committerdate`,`--format=%(refname:short) %(committerdate:iso8601)`,`refs/heads`]),r=n.split(`
11
- `).map(e=>e.trim()).filter(Boolean).map(e=>{let[t=``,n]=e.split(` `);return{name:t,updatedAt:n||null}});if(t.filter){let e=t.filter.toLowerCase();r=r.filter(t=>t.name.toLowerCase().includes(e))}if(t.cursor){let e=r.findIndex(e=>e.name===t.cursor);e>=0&&(r=r.slice(e+1))}let i=t.limit??30;return r.slice(0,i+1)}async function nt(e,t={}){let n=t.limit??30,r=await tt(e,t),i=r.length>n,a=i?r.slice(0,n):r,o=i?a[a.length-1]?.name??null:null,s=await rt(e);return{current:s,defaultBranch:await it(e,await tt(e,{}),s),branches:a,hasMore:i,nextCursor:o}}async function rt(e){let{stdout:t}=await z(e,[`rev-parse`,`--abbrev-ref`,`HEAD`]);return t.trim()}async function it(e,t,n){try{let{stdout:t}=await z(e,[`symbolic-ref`,`--short`,`refs/remotes/origin/HEAD`]),n=t.trim().split(`/`).pop();if(n)return n}catch{}let r=new Set(t.map(e=>e.name));return r.has(`main`)?`main`:r.has(`master`)?`master`:n&&n!==`HEAD`?n:t[0]?.name||``}const at=async(e,t)=>{if(!t)throw Error(`invalid_branch`);try{await z(e,[`check-ref-format`,`--branch`,t])}catch{throw Error(`invalid_branch`)}},ot=async(e,t)=>{try{return await z(e,[`show-ref`,`--verify`,`--quiet`,`refs/heads/${t}`]),!0}catch{return!1}};async function st(e,t){if(await at(e,t),!await ot(e,t))throw Error(`branch_not_found`);await z(e,[`checkout`,t])}async function ct(e,t){if(await at(e,t),await ot(e,t))throw Error(`branch_exists`);await z(e,[`checkout`,`-b`,t])}const lt={"Access-Control-Allow-Origin":`*`,"Access-Control-Allow-Methods":`GET,POST,PATCH,OPTIONS`,"Access-Control-Allow-Headers":`Content-Type`};function B(e){let t=new Headers(e.headers);for(let[e,n]of Object.entries(lt))t.set(e,n);return new Response(e.body,{status:e.status,statusText:e.statusText,headers:t})}function V(e,t){return B(new Response(JSON.stringify(t),{status:e,headers:{"Content-Type":`application/json; charset=utf-8`}}))}function H(e,t){return B(new Response(t,{status:e,headers:{"Content-Type":`text/plain; charset=utf-8`}}))}function ut(e,t){return B(new Response(t,{status:e,headers:{"Content-Type":`text/plain; charset=utf-8`}}))}function dt(){return B(new Response(null,{status:204}))}async function U(e){let t=await e.text();if(!t)return null;try{return JSON.parse(t)}catch{throw Error(`invalid_json`)}}function ft(e){return e instanceof Error&&e.message===`invalid_json`?V(400,{error:`invalid_json`}):e instanceof Error&&e.message===`not_a_directory`?V(400,{error:`not_a_directory`}):e instanceof Error&&e.message===`project_not_found`?V(404,{error:`project_not_found`}):e instanceof Error&&e.message===`project_required`?V(400,{error:`project_required`}):e instanceof Error&&e.message===`project_not_git`?V(400,{error:`project_not_git`}):e instanceof Error&&e.message===`invalid_branch`?V(400,{error:`invalid_branch`}):e instanceof Error&&e.message===`branch_exists`?V(409,{error:`branch_exists`}):e instanceof Error&&e.message===`branch_not_found`?V(404,{error:`branch_not_found`}):e instanceof Error&&e.message===`invalid_path`?V(400,{error:`invalid_path`}):e instanceof Error&&e.message===`app_server_spawn_failed`?V(500,{error:`app_server_spawn_failed`}):e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`?V(400,{error:`invalid_path`}):(_.error(e,`Unhandled server error`),V(500,{error:`server_error`}))}async function pt(e){let n=e?a.resolve(e):i.homedir(),r;try{r=await t.stat(n)}catch(e){throw e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`?Error(`invalid_path`):e}if(!r.isDirectory())throw Error(`invalid_path`);let o=(await t.readdir(n,{withFileTypes:!0})).filter(e=>e.isDirectory()).map(e=>({name:e.name,path:a.join(n,e.name)})).sort((e,t)=>e.name.localeCompare(t.name));return{path:n,parent:n===a.parse(n).root?null:a.dirname(n),entries:o}}function mt(e){let t=process.platform,n;switch(t){case`darwin`:n=[`open`,e];break;case`win32`:n=[`cmd`,`/c`,`start`,``,e];break;default:n=[`xdg-open`,e];break}O.spawn(n)}const ht=(e,t)=>`${e}:${t}`,gt=async e=>{try{return await t.readFile(e,`utf8`)}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return null;throw e}},_t=e=>{let t=[],n=new Set,r=e.split(/\r?\n/);for(let e of r){if(!e||e.startsWith(` `))continue;let r=e.trim();if(!r||r.startsWith(`#`))continue;let i=/^([^:=]+)\s*:(?!\s*=)/.exec(r);if(!i)continue;let a=i[1]?.trim().split(/\s+/)??[];for(let e of a)!e||e.startsWith(`.`)||e.includes(`%`)||n.has(e)||(n.add(e),t.push(e))}return t},vt=[{type:`package.json`,listCommands:async e=>{let t=await gt(a.join(e,`package.json`));if(!t)return[];let n;try{n=JSON.parse(t)}catch{return[]}if(!n||typeof n!=`object`)return[];let r=n.scripts;if(!r||typeof r!=`object`)return[];let i=[];for(let[e,t]of Object.entries(r)){let n=e.trim();!n||typeof t!=`string`||i.push({id:ht(`package.json`,n),name:n,label:n,source:`package.json`,detail:t.trim()})}return i},buildExecution:(e,t)=>{let n=O.which(`bun`);return n?{command:n,args:[`run`,t],cwd:e}:null}},{type:`makefile`,listCommands:async e=>{let t=[`Makefile`,`makefile`,`GNUmakefile`],n=[],r=new Set;for(let i of t){let t=await gt(a.join(e,i));if(!t)continue;let o=_t(t);for(let e of o)r.has(e)||(r.add(e),n.push({id:ht(`makefile`,e),name:e,label:e,source:`makefile`}))}return n},buildExecution:(e,t)=>{let n=O.which(`make`);return n?{command:n,args:[t],cwd:e}:null}}],W=async e=>(await Promise.all(vt.map(t=>t.listCommands(e)))).flat(),yt=(e,t,n)=>{let r=vt.find(e=>e.type===t);return r?r.buildExecution(e,n):null};function bt(){if(process.env.DIFFACT_STATIC_DIR){let e=a.resolve(process.env.DIFFACT_STATIC_DIR);if(m.existsSync(e))return e}let e=ee(import.meta.url),t=a.dirname(e),n=a.resolve(t,`../../web/dist`);if(m.existsSync(n))return n;let r=a.resolve(t,`../web/dist`);if(m.existsSync(r))return r;let i=a.resolve(process.cwd(),`web/dist`);return m.existsSync(i)?i:null}const G=bt(),xt={".html":`text/html; charset=utf-8`,".css":`text/css; charset=utf-8`,".js":`application/javascript; charset=utf-8`,".mjs":`application/javascript; charset=utf-8`,".json":`application/json; charset=utf-8`,".png":`image/png`,".jpg":`image/jpeg`,".jpeg":`image/jpeg`,".gif":`image/gif`,".svg":`image/svg+xml`,".ico":`image/x-icon`,".woff":`font/woff`,".woff2":`font/woff2`,".ttf":`font/ttf`,".eot":`application/vnd.ms-fontobject`,".webp":`image/webp`,".avif":`image/avif`,".mp4":`video/mp4`,".webm":`video/webm`,".txt":`text/plain; charset=utf-8`,".map":`application/json`};function St(e){return xt[a.extname(e).toLowerCase()]||`application/octet-stream`}function Ct(){return G!==null}function wt(){return G}async function Tt(e){if(!G)return null;let t=e.replace(/^\/+/,``)||`index.html`,n=a.resolve(G,t);if(!n.startsWith(G))return null;try{if(!m.statSync(n).isFile()){if(!a.extname(t)){let e=a.join(G,`index.html`);if(m.existsSync(e))return Et(e)}return null}return Et(n)}catch{if(!a.extname(t)||t===`index.html`){let e=a.join(G,`index.html`);if(m.existsSync(e))return Et(e)}return null}}function Et(e){let t=O.file(e);return new Response(t.stream(),{status:200,headers:{"Content-Type":St(e),"Content-Length":String(t.size),"Cache-Control":e.includes(`/assets/`)?`public, max-age=31536000, immutable`:`no-cache`}})}var Dt=class{#e=new Map;#t=null;#n;constructor(){this.#n=setInterval(()=>{this.#i()},3e4)}setCommandHandler(e){this.#t=e}open(){let e=S();return{onOpen:(t,n)=>{this.#e.set(e,{id:e,socket:n,lastSeen:Date.now()})},onMessage:t=>{this.#r(e,t.data)},onClose:()=>{this.#e.delete(e)},onError:()=>{this.#e.delete(e)}}}send(e,t){let n=JSON.stringify({event:e,payload:t}),r=0;for(let e of this.#e.values())try{e.socket.send(n),r+=1}catch{this.#e.delete(e.id)}_.info({event:e,clients:this.#e.size,delivered:r},`ws send`)}sendToClient(e,t,n){let r=this.#e.get(e);if(r)try{r.socket.send(JSON.stringify({event:t,payload:n}))}catch{this.#e.delete(e)}}#r(e,t){let n=this.#e.get(e);if(!n||(n.lastSeen=Date.now(),typeof t!=`string`))return;let r;try{r=JSON.parse(t)}catch{return}r?.type!==`pong`&&(!r||typeof r.type!=`string`||this.#t&&Promise.resolve(this.#t({clientId:e,message:r})).catch(t=>{_.error({err:t,clientId:e,type:r.type},`ws command handler error`)}))}#i(){let e=Date.now();for(let t of this.#e.values()){if(e-t.lastSeen>45e3){try{t.socket.close()}catch{}this.#e.delete(t.id);continue}try{t.socket.send(JSON.stringify({event:`ping`}))}catch{this.#e.delete(t.id)}}}closeAll(){clearInterval(this.#n);for(let e of this.#e.values())try{e.socket.close()}catch{}this.#e.clear()}};const Ot=process.env.DIFFACT_PROJECT_ROOT?a.resolve(process.env.DIFFACT_PROJECT_ROOT):a.join(i.homedir(),`workspace`),kt=Number.parseInt(process.env.PORT||``,10)||4312,At=Number.parseInt(process.env.DIFFACT_INLINE_DIFF_LINES||``,10)||4e3,jt=e=>e.replace(/\u001b\[[0-9;]*m/g,``),Mt=e=>e.replace(/(?:%[0-9A-Fa-f]{2})+/g,e=>{try{return decodeURIComponent(e)}catch{return e}}),K=(e,t)=>{let n=e[t];return typeof n==`string`?n.trim():``},q=(e,t)=>{let n=e[t];return typeof n!=`number`||!Number.isFinite(n)?null:n},J=(e,t)=>{let n=e[t];return typeof n==`string`&&n.trim()||void 0},Nt=(e,t)=>{let n=e[t];return Array.isArray(n)?n.filter(e=>typeof e==`string`).map(e=>e.trim()).filter(Boolean):[]},Pt=(e,t)=>{let n=new Set;for(let r of t){let t=r.trim();if(!t)continue;let i=a.resolve(e,t),o=a.relative(e,i);if(!o||o.startsWith(`..`)||a.isAbsolute(o))return null;n.add(o.replace(/\\/g,`/`))}return Array.from(n.values())},Ft=e=>e===`package.json`||e===`makefile`||e===`custom`,It=e=>({id:e.id,name:e.name,label:e.label,source:e.source}),Y=(e,t)=>({runId:e.id,projectPath:e.projectRoot,terminalId:e.terminalId,commandId:e.command.id,commandName:e.command.name,commandLabel:e.command.label,commandSource:e.command.source,status:e.status,exitCode:e.exitCode,signal:e.signal,startedAt:e.startedAt,completedAt:e.completedAt??null,stdout:t?e.output.stdout:void 0,stderr:t?e.output.stderr:void 0}),X=e=>e.status!==`running`,Lt=(e,t)=>({command:t,args:[],cwd:e,commandLine:t}),Rt={avif:`image/avif`,bmp:`image/bmp`,gif:`image/gif`,ico:`image/x-icon`,jpeg:`image/jpeg`,jpg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`,mp4:`video/mp4`,mov:`video/quicktime`,ogv:`video/ogg`,webm:`video/webm`,mp3:`audio/mpeg`,m4a:`audio/mp4`,ogg:`audio/ogg`,wav:`audio/wav`,flac:`audio/flac`,pdf:`application/pdf`},zt=e=>Rt[a.extname(e).slice(1).toLowerCase()]||`application/octet-stream`,Z=new Dt,Q=new oe({hub:Z});Z.setCommandHandler(async({clientId:e,message:t})=>{let{type:n,payload:r,requestId:i}=t;if(!n)return;let a=t=>{i&&Z.sendToClient(e,`command_ack`,{requestId:i,result:t})},o=t=>{i&&Z.sendToClient(e,`command_error`,{requestId:i,error:t})};try{if(n===`agent_start`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=K(e,`projectPath`),n=K(e,`prompt`),i=J(e,`label`);if(!t||!n)throw Error(`invalid_payload`);a({agent:await Q.startAgent({projectPath:t,prompt:n,label:i})});return}if(n===`thread_message`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=K(e,`threadId`),n=K(e,`projectPath`),i=K(e,`text`),o=J(e,`label`);if(!t||!n||!i)throw Error(`invalid_payload`);let s=await Q.resumeThread({threadId:t,projectPath:n,label:o});if(!await Q.sendMessage(s.id,i))throw Error(`agent_not_found`);a({agentId:s.id,threadId:s.threadId??t});return}if(n===`agent_stop`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=J(e,`agentId`),n=J(e,`threadId`),i=!1;if(t?i=Q.stopAgent(t):n&&(i=Q.stopThread(n)),!i)throw Error(`agent_not_found`);a({agentId:t??null,threadId:n??null});return}if(n===`terminal_start`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=K(e,`projectPath`),n=K(e,`source`),i=K(e,`name`),o=q(e,`cols`),s=q(e,`rows`);if(!t||!n||!i||!Ft(n))throw Error(`invalid_payload`);let c=await x(t),l=(await W(c.rootPath)).find(e=>e.source===n&&e.name===i);if(!l)throw Error(`command_not_found`);let u=yt(c.rootPath,n,i);if(!u)throw Error(`command_unsupported`);let d=await F({command:It(l),projectRoot:c.rootPath,plan:u,terminal:o&&s?{cols:o,rows:s}:void 0,listener:{onOutput:e=>{let t=I(e.runId);Z.send(`terminal_output`,{projectPath:c.rootPath,runId:e.runId,terminalId:t?.terminalId,stream:e.stream,data:e.data})},onStatus:e=>{Z.send(`terminal_status`,{projectPath:c.rootPath,run:Y(e,X(e))})}}});if(!d.runId)throw Error(d.error||`command_failed`);let f=I(d.runId);if(!f)throw Error(`command_not_found`);a({run:Y(f,X(f))});return}if(n===`terminal_exec`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=K(e,`projectPath`),n=K(e,`command`),i=J(e,`label`),o=J(e,`name`),s=q(e,`cols`),c=q(e,`rows`);if(!t||!n)throw Error(`invalid_payload`);let l=await x(t),u=Lt(l.rootPath,n),d=i||o||`Custom Command`,f=o||i||`custom`,p=await F({command:{id:`custom:${f}`,name:f,label:d,source:`custom`},projectRoot:l.rootPath,plan:u,terminal:s&&c?{cols:s,rows:c}:void 0,listener:{onOutput:e=>{let t=I(e.runId);Z.send(`terminal_output`,{projectPath:l.rootPath,runId:e.runId,terminalId:t?.terminalId,stream:e.stream,data:e.data})},onStatus:e=>{Z.send(`terminal_status`,{projectPath:l.rootPath,run:Y(e,X(e))})}}});if(!p.runId)throw Error(p.error||`command_failed`);let m=I(p.runId);if(!m)throw Error(`command_not_found`);a({run:Y(m,X(m))});return}if(n===`terminal_stop`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=K(e,`projectPath`),n=K(e,`runId`);if(!t||!n)throw Error(`invalid_payload`);let i=await x(t),o=I(n);if(!o||o.projectRoot!==i.rootPath)throw Error(`command_not_found`);let s=De(n);if(!s)throw Error(`command_not_found`);a({run:Y(s,X(s))});return}if(n===`terminal_list`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=K(r,`projectPath`);if(!e)throw Error(`invalid_payload`);a({runs:Te((await x(e)).rootPath).sort((e,t)=>t.startedAt.localeCompare(e.startedAt)).map(e=>Y(e,!0))});return}if(n===`terminal_output`){if(!r||typeof r!=`object`)throw Error(`invalid_payload`);let e=r,t=K(e,`projectPath`),n=K(e,`runId`);if(!t||!n)throw Error(`invalid_payload`);let i=await x(t),o=I(n);if(!o||o.projectRoot!==i.rootPath)throw Error(`command_not_found`);let s=Ee(n);if(!s)throw Error(`command_not_found`);a({stdout:s.stdout,stderr:s.stderr});return}_.warn({type:n},`ws unknown command`),o(`unknown_command`)}catch(e){o(e instanceof Error?e.message:`command_failed`)}});const $=new o;$.use(`*`,s((e,...t)=>{_.info({rest:t},Mt(jt(e)))})),$.onError((e,t)=>(_.error({err:e,path:t.req.path,method:t.req.method},`error`),ft(e))),$.options(`*`,()=>dt()),$.get(`/health`,()=>V(200,{status:`ok`,time:new Date().toISOString()})),$.get(`/api/capabilities`,async e=>V(200,await fe(new URL(e.req.url).searchParams.get(`project`)))),$.get(`/api/editors`,async()=>V(200,{editors:await Me()})),$.post(`/api/editors/open`,async e=>{let t=await U(e.req.raw);if(!t||!t.editor||!t.project)return V(400,{error:`invalid_payload`});let n=t.editor;if(![`vscode`,`cursor`,`zed`].includes(n))return V(400,{error:`invalid_editor`});let r=t.target??{type:`project`},i=await Fe(n,t.project,r);return i.success?V(200,{success:!0}):V(400,{error:i.error??`open_failed`})}),$.get(`/api/projects/browse`,async e=>{let t=new URL(e.req.url).searchParams.get(`path`)?.trim();return V(200,await pt(t||Ot))}),$.post(`/api/projects/open`,async e=>{let t=await U(e.req.raw);return!t||typeof t.path!=`string`?V(400,{error:`invalid_path`}):V(200,await x(t.path))}),$.get(`/api/projects/commands`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim();return t?V(200,{commands:await W((await x(t)).rootPath)}):V(400,{error:`invalid_path`})}),$.post(`/api/projects/commands/run`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim();if(!t)return V(400,{error:`invalid_path`});let n=await U(e.req.raw);if(!n)return V(400,{error:`invalid_command`});let r=K(n,`source`),i=K(n,`name`);if(!r||!i||!Ft(r))return V(400,{error:`invalid_command`});let a=await x(t),o=(await W(a.rootPath)).find(e=>e.source===r&&e.name===i);if(!o)return V(404,{error:`command_not_found`});let s=yt(a.rootPath,r,i);return s?V(200,await F({command:It(o),projectRoot:a.rootPath,plan:s})):V(400,{error:`command_unsupported`})}),$.get(`/api/projects/commands/runs/:id`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=e.req.param(`id`)?.trim();if(!t||!n)return V(400,{error:`invalid_command`});let r=await x(t),i=I(n);return!i||i.projectRoot!==r.rootPath?V(404,{error:`command_not_found`}):V(200,{status:i.status,exitCode:i.exitCode,signal:i.signal})}),$.post(`/api/projects/commands/runs/:id/stop`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=e.req.param(`id`)?.trim();if(!t||!n)return V(400,{error:`invalid_command`});let r=await x(t),i=I(n);if(!i||i.projectRoot!==r.rootPath)return V(404,{error:`command_not_found`});let a=De(n);return a?V(200,{status:a.status,exitCode:a.exitCode,signal:a.signal}):V(404,{error:`command_not_found`})}),$.get(`/api/projects/diff`,async e=>{let t=new URL(e.req.url),n=t.searchParams.get(`project`)?.trim();if(!n)return V(400,{error:`invalid_path`});let r=await x(n);if(!r.isGit)return H(200,``);let i=t.searchParams.getAll(`arg`).filter(Boolean),a=t.searchParams.getAll(`path`).filter(Boolean);return H(200,await Ve(r.rootPath,i,a))}),$.get(`/api/projects/staged`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim();if(!t)return V(400,{error:`invalid_path`});let n=await x(t);return n.isGit?V(200,{paths:await He(n.rootPath)}):V(200,{paths:[]})}),$.post(`/api/projects/stage`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim();if(!t)return V(400,{error:`invalid_path`});let n=await U(e.req.raw);if(!n)return V(400,{error:`invalid_payload`});let r=await x(t);if(!r.isGit)return V(400,{error:`project_not_git`});let i=n.staged;if(typeof i!=`boolean`)return V(400,{error:`invalid_payload`});let a=K(n,`path`),o=Nt(n,`paths`),s=o.length?o:a?[a]:[];if(!s.length)return V(400,{error:`invalid_path`});let c=Pt(r.rootPath,s);return!c||!c.length?V(400,{error:`invalid_path`}):(i?await Ue(r.rootPath,c):await Ge(r.rootPath,c),V(200,{paths:c,staged:i}))}),$.get(`/api/projects/tree`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim();if(!t)return V(400,{error:`invalid_path`});let n=await x(t);if(!n.isGit)return V(200,{available:!1,rootPath:n.rootPath,entries:[]});let r=await et(n.rootPath);return V(200,{available:!0,rootPath:n.rootPath,entries:r})}),$.get(`/api/projects/file`,async e=>{let n=new URL(e.req.url),r=n.searchParams.get(`project`)?.trim(),i=n.searchParams.get(`path`)?.trim(),o=n.searchParams.get(`ref`)?.trim();if(!r||!i)return V(400,{error:`invalid_path`});let s=await x(r);if(!s.isGit)return V(400,{error:`project_not_git`});let c=a.resolve(s.rootPath,i),l=a.relative(s.rootPath,c);if(!l||l.startsWith(`..`)||a.isAbsolute(l))return V(400,{error:`invalid_path`});let u=l.replace(/\\/g,`/`);if(o)try{return V(200,{path:i,contents:await Ke(s.rootPath,o,u)})}catch(e){if(e&&typeof e==`object`&&`code`in e){let{code:t}=e;if(t===128)return V(404,{error:`invalid_path`})}throw e}let d;try{d=await t.stat(c)}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return V(404,{error:`invalid_path`});throw e}return d.isFile()?V(200,{path:i,contents:await t.readFile(c,`utf8`)}):V(400,{error:`invalid_path`})}),$.get(`/api/projects/file/raw`,async e=>{let n=new URL(e.req.url),r=n.searchParams.get(`project`)?.trim(),i=n.searchParams.get(`path`)?.trim();if(!r||!i)return V(400,{error:`invalid_path`});let o=await x(r);if(!o.isGit)return V(400,{error:`project_not_git`});let s=a.resolve(o.rootPath,i),c=a.relative(o.rootPath,s);if(!c||c.startsWith(`..`)||a.isAbsolute(c))return V(400,{error:`invalid_path`});let l;try{l=await t.stat(s)}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return V(404,{error:`invalid_path`});throw e}if(!l.isFile())return V(400,{error:`invalid_path`});let u=O.file(s);return B(new Response(u.stream(),{status:200,headers:{"Content-Type":zt(s),"Content-Disposition":`inline`}}))}),$.get(`/api/projects/history`,async e=>{let t=new URL(e.req.url),n=t.searchParams.get(`project`)?.trim();if(!n)return V(400,{error:`invalid_path`});let r=await x(n);if(!r.isGit)return V(400,{error:`project_not_git`});let i=t.searchParams.get(`limit`),a=t.searchParams.get(`skip`),o=i?Number.parseInt(i,10):30,s=a?Number.parseInt(a,10):0,c=Number.isFinite(o)&&o>0?Math.min(200,o):30,l=Number.isFinite(s)&&s>0?s:0;return V(200,await qe(r.rootPath,l,c))}),$.get(`/api/projects/commits/:sha/diff`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=e.req.param(`sha`)?.trim();if(!t)return V(400,{error:`invalid_path`});if(!n)return V(400,{error:`invalid_commit`});let r=await x(t);if(!r.isGit)return V(400,{error:`project_not_git`});let i=null;try{i=await Ze(r.rootPath,n)}catch(e){if(e&&typeof e==`object`&&`code`in e){let{code:t}=e;if(t===`ERR_CHILD_PROCESS_STDIO_MAXBUFFER`)i=null;else throw e}else throw e}return i===null||i>At?ut(200,Ye(r.rootPath,n)):H(200,await Je(r.rootPath,n))}),$.get(`/api/projects/commits/:sha/files`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=e.req.param(`sha`)?.trim();if(!t)return V(400,{error:`invalid_path`});if(!n)return V(400,{error:`invalid_commit`});let r=await x(t);return r.isGit?V(200,await Xe(r.rootPath,n)):V(400,{error:`project_not_git`})}),$.get(`/api/projects/branches`,async e=>{let t=new URL(e.req.url),n=t.searchParams.get(`project`)?.trim(),r=t.searchParams.get(`cursor`)?.trim()||null,i=t.searchParams.get(`filter`)?.trim()||null,a=t.searchParams.get(`limit`),o=a?Number.parseInt(a,10):void 0;if(!n)return V(400,{error:`invalid_path`});let s=await x(n);return s.isGit?V(200,await nt(s.rootPath,{limit:o,cursor:r,filter:i})):V(400,{error:`project_not_git`})}),$.post(`/api/projects/branches`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=(await U(e.req.raw))?.name?.trim()??``;if(!n)return V(400,{error:`invalid_branch`});if(!t)return V(400,{error:`invalid_path`});let r=await x(t);return r.isGit?(await ct(r.rootPath,n),V(201,{name:n})):V(400,{error:`project_not_git`})}),$.post(`/api/projects/branches/checkout`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=(await U(e.req.raw))?.name?.trim()??``;if(!n)return V(400,{error:`invalid_branch`});if(!t)return V(400,{error:`invalid_path`});let r=await x(t);return r.isGit?(await st(r.rootPath,n),V(200,{name:n})):V(400,{error:`project_not_git`})}),$.get(`/api/projects/pull-requests`,async e=>{let t=new URL(e.req.url),n=t.searchParams.get(`project`)?.trim(),r=t.searchParams.get(`cursor`)?.trim()||null,i=t.searchParams.get(`search`)?.trim()||null,a=t.searchParams.get(`limit`),o=a?Number.parseInt(a,10):void 0;if(!n)return V(400,{error:`invalid_path`});let s=await x(n);return s.isGit?V(200,await Ie(s.rootPath,{limit:o,cursor:r,search:i})):V(400,{error:`project_not_git`})}),$.get(`/api/projects/issues`,async e=>{let t=new URL(e.req.url),n=t.searchParams.get(`project`)?.trim(),r=t.searchParams.get(`cursor`)?.trim()||null,i=t.searchParams.get(`search`)?.trim()||null,a=t.searchParams.get(`state`)?.trim(),o=t.searchParams.get(`limit`),s=o?Number.parseInt(o,10):void 0;if(!n)return V(400,{error:`invalid_path`});let c=await x(n);return c.isGit?V(200,await Le(c.rootPath,{limit:s,cursor:r,search:i,state:a||`open`})):V(400,{error:`project_not_git`})}),$.get(`/api/projects/issues/:number`,async e=>{let t=new URL(e.req.url).searchParams.get(`project`)?.trim(),n=Number.parseInt(e.req.param(`number`)||``,10);if(!t)return V(400,{error:`invalid_path`});if(Number.isNaN(n))return V(400,{error:`invalid_issue_number`});let r=await x(t);if(!r.isGit)return V(400,{error:`project_not_git`});let i=await Re(r.rootPath,n);return i?V(200,i):V(404,{error:`issue_not_found`})}),$.get(`/api/agents`,()=>V(200,Q.listAgents())),$.get(`/api/agents/:id`,e=>{let t=e.req.param(`id`),n=Q.getAgent(t);return n?V(200,n):V(404,{error:`agent_not_found`})}),$.get(`/api/threads`,async e=>{let t=new URL(e.req.url),n=t.searchParams.get(`cursor`),r=t.searchParams.get(`limit`),i=t.searchParams.get(`project`)?.trim(),a=r?Number.parseInt(r,10):null,o=i?(await x(i)).rootPath:null;return V(200,await Q.listThreads({cursor:n||null,limit:Number.isNaN(a)?null:a,projectPath:o}))}),$.get(`/api/threads/history`,async e=>{let n=new URL(e.req.url).searchParams.get(`path`)?.trim();if(!n)return V(400,{error:`invalid_path`});let r=a.resolve(n);if(a.extname(r).toLowerCase()!==`.jsonl`)return V(400,{error:`invalid_path`});let i;try{i=await t.stat(r)}catch(e){if(e&&typeof e==`object`&&`code`in e&&e.code===`ENOENT`)return V(404,{error:`invalid_path`});throw e}return i.isFile()?H(200,await t.readFile(r,`utf8`)):V(400,{error:`invalid_path`})}),$.get(`*`,async e=>{let t=new URL(e.req.url).pathname;return await Tt(t)||H(404,`Not found`)});const Bt=process.argv.includes(`--no-open`);if(O.isBun){let{upgradeWebSocket:e,websocket:t}=await import(`hono/bun`);$.get(`/api/events`,e(()=>(_.info(`ws open`),Z.open()))),Bun.serve({port:kt,fetch:$.fetch,websocket:t});let n=`http://localhost:${kt}`;_.info(`diffact server listening on ${n}`),Ct()&&_.info(`serving static files from ${wt()}`),!Bt&&Ct()&&mt(n)}export{Ct as a,wt as i,$ as n,mt as o,Z as r,_ as s,kt as t};
@@ -1 +0,0 @@
1
- import{n as e,r as t,t as n}from"./src-CPKE75x0.mjs";export{};