@exaudeus/workrail 3.18.0 → 3.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ .react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}@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-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@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-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-lg:32rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@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}}@layer components{.branch-tree-line{margin-left:4px;padding-left:14px;position:relative}.branch-tree-line:before{content:"";pointer-events:none;clip-path:polygon(0 0,100% 0,100% calc(100% - 14px),0 100%);background:linear-gradient(#f4c4302e,#f4c4302e) 0 0/1px 100% no-repeat,linear-gradient(#f4c43073,#f4c43073) 5px 0/3px 100% no-repeat;width:10px;position:absolute;top:0;bottom:0;left:0}.tab-btn{position:relative;overflow:visible}.tab-corner{opacity:0;pointer-events:none;width:8px;height:8px;transition:opacity .15s,transform .15s;position:absolute;transform:scale(.5)}.tab-corner--tl{border-top:1px solid var(--accent);border-left:1px solid var(--accent);top:2px;left:2px}.tab-corner--tr{border-top:1px solid var(--accent);border-right:1px solid var(--accent);top:2px;right:2px}.tab-corner--bl{border-bottom:1px solid var(--accent);border-left:1px solid var(--accent);bottom:2px;left:2px}.tab-corner--br{border-bottom:1px solid var(--accent);border-right:1px solid var(--accent);bottom:2px;right:2px}.tab-btn--active .tab-corner{opacity:1;transform:scale(1)}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.bottom-3{bottom:calc(var(--spacing) * 3)}.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}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-\[3px\]{margin-top:3px}.mt-auto{margin-top:auto}.mt-px{margin-top:1px}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-14{height:calc(var(--spacing) * 14)}.h-\[3px\]{height:3px}.h-\[100px\]{height:100px}.h-\[506px\]{height:506px}.h-full{height:100%}.h-px{height:1px}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[44px\]{min-height:44px}.min-h-\[160px\]{min-height:160px}.min-h-screen{min-height:100vh}.w-0\.5{width:calc(var(--spacing) * .5)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-3{width:calc(var(--spacing) * 3)}.w-3\/4{width:75%}.w-4\/6{width:66.6667%}.w-5\/6{width:83.3333%}.w-6{width:calc(var(--spacing) * 6)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-64{width:calc(var(--spacing) * 64)}.w-\[560px\]{width:560px}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[80px\]{max-width:80px}.max-w-\[200px\]{max-width:200px}.max-w-\[360px\]{max-width:360px}.max-w-\[calc\(92vw-12px\)\]{max-width:calc(92vw - 12px)}.max-w-lg{max-width:var(--container-lg)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[44px\]{min-width:44px}.min-w-\[120px\]{min-width:120px}.min-w-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.list-inside{list-style-position:inside}.list-disc{list-style-type:disc}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0{gap:calc(var(--spacing) * 0)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-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)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-center{align-self:center}.self-stretch{align-self:stretch}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded{border-radius:.25rem}.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}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-\[rgba\(255\,255\,255\,0\.06\)\]{border-color:#ffffff0f}.border-\[var\(--accent\)\]{border-color:var(--accent)}.border-\[var\(--border\)\]{border-color:var(--border)}.border-blue-500\/20{border-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/20{border-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.border-green-500\/20{border-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.border-green-500\/20{border-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.border-orange-500\/20{border-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.border-orange-500\/20{border-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.border-transparent{border-color:#0000}.bg-\[rgba\(0\,0\,0\,0\.18\)\]{background-color:#0000002e}.bg-\[rgba\(10\,10\,10\,0\.38\)\]{background-color:#0a0a0a61}.bg-\[rgba\(255\,255\,255\,0\.02\)\]{background-color:#ffffff05}.bg-\[var\(--accent\)\]{background-color:var(--accent)}.bg-\[var\(--bg-card\)\]{background-color:var(--bg-card)}.bg-\[var\(--bg-primary\)\]{background-color:var(--bg-primary)}.bg-\[var\(--bg-secondary\)\]{background-color:var(--bg-secondary)}.bg-\[var\(--bg-tertiary\)\]{background-color:var(--bg-tertiary)}.bg-\[var\(--border\)\]{background-color:var(--border)}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-transparent{background-color:#0000}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-20{padding-block:calc(var(--spacing) * 20)}.py-32{padding-block:calc(var(--spacing) * 32)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-\[0\.20em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.25em\]{--tw-tracking:.25em;letter-spacing:.25em}.tracking-\[0\.30em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-\[0\.35em\]{--tw-tracking:.35em;letter-spacing:.35em}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.text-ellipsis{text-overflow:ellipsis}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--accent\)\]{color:var(--accent)}.text-\[var\(--error\)\]{color:var(--error)}.text-\[var\(--text-muted\)\]{color:var(--text-muted)}.text-\[var\(--text-primary\)\]{color:var(--text-primary)}.text-\[var\(--text-secondary\)\]{color:var(--text-secondary)}.text-\[var\(--warning\)\]{color:var(--warning)}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.placeholder-\[var\(--text-muted\)\]::placeholder{color:var(--text-muted)}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.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)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-\[var\(--accent\)\]{--tw-ring-color:var(--accent)}.ring-blue-500\/40{--tw-ring-color:#3080ff66}@supports (color:color-mix(in lab,red,red)){.ring-blue-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 40%, transparent)}}.ring-orange-500\/40{--tw-ring-color:#fe6e0066}@supports (color:color-mix(in lab,red,red)){.ring-orange-500\/40{--tw-ring-color:color-mix(in oklab, var(--color-orange-500) 40%, transparent)}}.ring-offset-1{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.drop-shadow{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#0000001a)) drop-shadow(0 1px 1px var(--tw-drop-shadow-color,#0000000f));--tw-drop-shadow:drop-shadow(0 1px 2px #0000001a) drop-shadow(0 1px 1px #0000000f);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,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-600{--tw-duration:.6s;transition-duration:.6s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}@media(hover:hover){.group-hover\:text-\[var\(--accent\)\]:is(:where(.group):hover *){color:var(--accent)}.group-hover\:text-\[var\(--text-primary\)\]:is(:where(.group):hover *){color:var(--text-primary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.hover\:border-\[var\(--accent\)\]:hover{border-color:var(--accent)}.hover\:border-\[var\(--accent-strong\)\]:hover{border-color:var(--accent-strong)}.hover\:bg-\[var\(--bg-card\)\]:hover{background-color:var(--bg-card)}.hover\:bg-\[var\(--bg-tertiary\)\]:hover{background-color:var(--bg-tertiary)}.hover\:bg-blue-500\/20:hover{background-color:#3080ff33}@supports (color:color-mix(in lab,red,red)){.hover\:bg-blue-500\/20:hover{background-color:color-mix(in oklab,var(--color-blue-500) 20%,transparent)}}.hover\:bg-orange-500\/20:hover{background-color:#fe6e0033}@supports (color:color-mix(in lab,red,red)){.hover\:bg-orange-500\/20:hover{background-color:color-mix(in oklab,var(--color-orange-500) 20%,transparent)}}.hover\:text-\[var\(--accent\)\]:hover{color:var(--accent)}.hover\:text-\[var\(--accent-hover\)\]:hover{color:var(--accent-hover)}.hover\:text-\[var\(--text-primary\)\]:hover{color:var(--text-primary)}.hover\:text-\[var\(--text-secondary\)\]:hover{color:var(--text-secondary)}}.focus\:border-\[var\(--accent\)\]:focus{border-color:var(--accent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[var\(--accent\)\]:focus-visible{--tw-ring-color:var(--accent)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media(prefers-reduced-motion:no-preference){.motion-safe\:animate-pulse{animation:var(--animate-pulse)}}@media(min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:80rem){.xl\:grid-cols-\[minmax\(0\,1\.15fr\)_minmax\(0\,0\.85fr\)\]{grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr)}}}:root{--bg-primary:#0f131f;--bg-secondary:#171b28b3;--bg-card:#1b1f2c99;--bg-tertiary:#262937bf;--border:#3a3a2e;--text-primary:#e8dfc8;--text-secondary:#a89f8c;--text-muted:#5e5a4e;--accent:#f4c430;--accent-hover:#d4a80e;--accent-strong:#00afc0;--success:#00e1a9;--warning:#f97316;--error:#ff6b6b;--blocked:#f44}body{background-color:var(--bg-primary);color:var(--text-primary);background-image:radial-gradient(80% 50% at 50% -5%,#f4c4302e,#0000 70%),radial-gradient(60% 50% at 100% 110%,#00dbe91f,#0000 60%);background-attachment:fixed;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.glass-panel{-webkit-backdrop-filter:blur(16px);background:#1b1f2ca6!important}body:after{content:"";pointer-events:none;z-index:9999;background:repeating-linear-gradient(0deg,#00000005 0 1px,#0000 1px 4px);position:fixed;inset:0}.workrail-minimap-node{opacity:1}*{box-sizing:border-box}.console-blueprint-grid{background-image:linear-gradient(#84949514 1px,#0000 1px),linear-gradient(90deg,#84949514 1px,#0000 1px);background-size:20px 20px}.lineage-scroll-surface{background:var(--bg-primary)}.lineage-scroll-surface .react-flow,.lineage-scroll-surface .react-flow__renderer,.lineage-scroll-surface .react-flow__viewport,.lineage-scroll-surface .react-flow__pane{background:0 0!important}.workrail-current-lineage-node{isolation:isolate;animation:3.2s ease-in-out infinite workrail-current-node-pulse;position:relative;box-shadow:inset 0 0 0 1px #f4c43059,inset 0 0 28px #f4c4301a,0 0 16px #f4c43026}.workrail-current-lineage-node:after{content:"";pointer-events:none;border:1px solid #f4c43059;animation:3.2s ease-in-out infinite workrail-current-node-outline;position:absolute;inset:-1px}.workrail-current-lineage-edge .react-flow__edge-path{stroke-dasharray:7 9;animation:1.35s linear infinite workrail-current-edge-flow}.workrail-selected-lineage-node{isolation:isolate;position:relative;box-shadow:inset 0 0 0 1px #f4b34161,0 0 0 1px #f4b34147,0 0 18px #f4b3411a}@keyframes workrail-current-node-pulse{0%,to{filter:brightness();transform:translateZ(0)}50%{filter:brightness(1.1);transform:translateZ(0)}}@keyframes workrail-current-node-outline{0%,to{opacity:.34;box-shadow:0 0 #f4c43000,inset 0 0 #f4c43000}50%{opacity:1;box-shadow:0 0 32px #f4c4304d,inset 0 0 24px #f4c4301f}}@keyframes workrail-current-edge-flow{to{stroke-dashoffset:-32px}}.energy-glow{box-shadow:0 0 20px #f4c4304d,0 0 8px #f4c43033}.energy-live{animation:2.4s ease-in-out infinite energy-live-pulse;box-shadow:0 0 16px #00dbe94d,0 0 4px #00dbe933}@keyframes energy-live-pulse{0%,to{box-shadow:0 0 10px #00dbe933,0 0 3px #00dbe926}50%{box-shadow:0 0 22px #00dbe973,0 0 8px #00dbe94d}}.energy-card{transition:border-color .15s,box-shadow .15s}.energy-card:hover{border-color:#f4c43080;box-shadow:0 0 0 1px #f4c4301f,0 4px 24px #0006}.text-glow-amber{text-shadow:0 0 12px #f4c43080,0 0 4px #f4c4304d}.text-glow-cyan{text-shadow:0 0 12px #00dbe980,0 0 4px #00dbe94d}.badge-live{color:var(--accent-strong);animation:2.4s ease-in-out infinite badge-live-text-pulse}@keyframes badge-live-text-pulse{0%,to{text-shadow:0 0 6px #00dbe980}50%{text-shadow:0 0 16px #00dbe9e6,0 0 4px #00dbe999}}.markdown-view{color:var(--text-secondary);word-break:break-word;font-size:.8125rem;line-height:1.6}.markdown-view h1,.markdown-view h2,.markdown-view h3,.markdown-view h4,.markdown-view h5,.markdown-view h6{color:var(--text-primary);margin:1em 0 .4em;font-weight:600;line-height:1.3}.markdown-view h1{font-size:1.1em}.markdown-view h2{font-size:1em}.markdown-view h3{font-size:.95em}.markdown-view h4,.markdown-view h5,.markdown-view h6{font-size:.9em}.markdown-view>:first-child{margin-top:0}.markdown-view p{margin:.5em 0}.markdown-view em{font-style:italic}.markdown-view a{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.markdown-view ul{margin:.4em 0;padding-left:1.4em;list-style-type:disc}.markdown-view ol{margin:.4em 0;padding-left:1.4em;list-style-type:decimal}.markdown-view li{color:var(--text-secondary);margin:.15em 0}.markdown-view li::marker{color:var(--text-muted)}.markdown-view li>ul,.markdown-view li>ol{margin:.1em 0}.markdown-view li>ul{list-style-type:circle}.markdown-view code{background:var(--bg-primary);color:var(--text-primary);border-radius:3px;padding:.15em .35em;font-family:SF Mono,Fira Code,Cascadia Code,monospace;font-size:.88em}.markdown-view pre{background:var(--bg-primary);border-radius:6px;margin:.5em 0;padding:.75em;overflow-x:auto}.markdown-view pre code{background:0 0;padding:0;font-size:.85em;line-height:1.5}.markdown-view blockquote{border-left:3px solid var(--border);color:var(--text-muted);margin:.5em 0;padding:.25em .75em}.markdown-view hr{border:none;border-top:1px solid var(--border);margin:.75em 0}.markdown-view table{border-collapse:collapse;width:100%;margin:.5em 0;font-size:.9em}.markdown-view th,.markdown-view td{border:1px solid var(--border);text-align:left;padding:.35em .6em}.markdown-view th{background:var(--bg-primary);color:var(--text-primary);font-weight:600}.markdown-view img{border-radius:4px;max-width:100%}.markdown-view h1,.markdown-view h2,.markdown-view h3,.markdown-view h4{color:var(--accent);letter-spacing:.08em}.markdown-view strong{color:var(--accent);font-weight:700}.markdown-view code{color:var(--accent-strong);background:#00dbe914;border:1px solid #00dbe933;border-radius:0}.markdown-view pre{border:1px solid #00dbe933;border-left:2px solid var(--accent-strong);background:#0006;border-radius:0}.markdown-view pre code{color:var(--accent-strong);background:0 0;border:none}.markdown-view blockquote{border-left:2px solid var(--accent);color:var(--text-secondary);background:#f4c4300a;padding:.5em .75em}.markdown-view ul li:before{content:"// ";color:var(--accent);font-family:monospace;font-weight:700}.markdown-view ul{padding-left:1.2em;list-style:none}.markdown-view a{color:var(--accent-strong)}.corner-brackets{background-image:linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent)),linear-gradient(var(--accent),var(--accent));background-position:0 0,0 0,right 0 top 0,right 0 top 0,left 0 bottom 0,left 0 bottom 0,right 0 bottom 0,right 0 bottom 0;background-repeat:no-repeat;background-size:1px 12px,12px 1px,1px 12px,12px 1px,1px 12px,12px 1px,1px 12px,12px 1px;position:relative}@keyframes tab-activate-flicker{0%{opacity:1;filter:brightness()}10%{opacity:.2;filter:brightness(.5)}20%{opacity:1;filter:brightness(3)hue-rotate(180deg)}35%{opacity:.5;filter:brightness(1.5)}50%{opacity:1;filter:brightness(2.5)}70%{opacity:.8;filter:brightness(1.8)}85%{opacity:1;filter:brightness(1.3)}to{opacity:1;filter:brightness()}}.tab-activating{animation:.28s ease-out forwards tab-activate-flicker}@media(prefers-reduced-motion:reduce){.badge-live,.energy-live,.workrail-current-lineage-node,.workrail-current-lineage-node:after,.workrail-current-lineage-edge .react-flow__edge-path,.tab-activating{animation:none!important}.tab-corner{transition:none}}@keyframes modal-exit-to-top{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-14px)}}@keyframes modal-exit-to-bottom{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(14px)}}@keyframes modal-enter-from-below{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes modal-enter-from-above{0%{opacity:0;transform:translateY(-14px)}to{opacity:1;transform:translateY(0)}}@keyframes modal-exit-to-left{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(-20px)}}@keyframes modal-exit-to-right{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(20px)}}@keyframes modal-enter-from-right{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}@keyframes modal-enter-from-left{0%{opacity:0;transform:translate(-20px)}to{opacity:1;transform:translate(0)}}@keyframes modal-border-flash{0%{filter:brightness()}15%{filter:brightness(1.8)}50%{filter:brightness(1.3)}to{filter:brightness()}}@keyframes modal-crt-fade{0%{opacity:0}20%{opacity:.65}70%{opacity:.65}to{opacity:0}}.modal-content--exit-v-next{animation:80ms ease-in forwards modal-exit-to-top}.modal-content--exit-v-prev{animation:80ms ease-in forwards modal-exit-to-bottom}.modal-content--enter-v-next{animation:.16s ease-out forwards modal-enter-from-below}.modal-content--enter-v-prev{animation:.16s ease-out forwards modal-enter-from-above}.modal-content--exit-h-next{animation:80ms ease-in forwards modal-exit-to-left}.modal-content--exit-h-prev{animation:80ms ease-in forwards modal-exit-to-right}.modal-content--enter-h-next{animation:.16s ease-out forwards modal-enter-from-right}.modal-content--enter-h-prev{animation:.16s ease-out forwards modal-enter-from-left}.modal-border-flashing{animation:.2s ease-out forwards modal-border-flash}.modal-scanline{pointer-events:none;z-index:10;background:linear-gradient(to bottom,transparent calc(var(--glitch-y,38%) - 1px),#b4d2ff59 calc(var(--glitch-y,38%) - 1px),#b4d2ff59 calc(var(--glitch-y,38%) + var(--glitch-w,3px)),transparent calc(var(--glitch-y,38%) + var(--glitch-w,3px))),linear-gradient(to bottom,transparent calc(var(--glitch-y2,62%) - 1px),#f4c4304d calc(var(--glitch-y2,62%) - 1px),#f4c4304d calc(var(--glitch-y2,62%) + var(--glitch-w2,2px)),transparent calc(var(--glitch-y2,62%) + var(--glitch-w2,2px))),repeating-linear-gradient(to bottom,transparent 0px,transparent 2px,#0000008c 2px,#0000008c 3px),repeating-linear-gradient(to bottom,transparent 0px,transparent 5px,#00000038 5px,#00000042 7px),repeating-linear-gradient(to bottom,transparent 0px,transparent 3px,#0000001f 3px,#0000001f 5px);background-position-y:0,0,var(--crt-offset,0px),calc(var(--crt-offset,0px) + 2px),calc(var(--crt-offset,0px) + 4px);opacity:0;animation:.22s linear forwards modal-crt-fade;position:absolute;inset:0}.modal-scanline--hidden{display:none}@media(prefers-reduced-motion:reduce){.modal-content--exit-v-next,.modal-content--exit-v-prev,.modal-content--enter-v-next,.modal-content--enter-v-prev,.modal-content--exit-h-next,.modal-content--exit-h-prev,.modal-content--enter-h-next,.modal-content--enter-h-prev{opacity:1!important;animation:none!important;transform:none!important}.modal-scanline{display:none}.modal-border-flashing{filter:none!important;animation:none!important}}@keyframes hero-card-glow-breathe{0%,to{filter:drop-shadow(0 0 12px #00afc033)}50%{filter:drop-shadow(0 0 28px #00afc08c)}}.hero-card-breathing{animation:3s ease-in-out infinite hero-card-glow-breathe}@media(prefers-reduced-motion:reduce){.hero-card-breathing{animation:none}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-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-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>WorkRail Console</title>
7
- <script type="module" crossorigin src="/console/assets/index-BwJelCXK.js"></script>
8
- <link rel="stylesheet" crossorigin href="/console/assets/index-BZNM03t1.css">
7
+ <script type="module" crossorigin src="/console/assets/index-DMaX2-CW.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/console/assets/index-ibLhWBmX.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -27,11 +27,14 @@ function resolveWorkflowCandidates(candidates, variantResolutions) {
27
27
  });
28
28
  }
29
29
  else {
30
- const bundledSource = sources.find(s => isBundledWorkflow(s.workflow));
31
- if (bundledSource && sources.some(s => s !== bundledSource && !isBundledWorkflow(s.workflow))) {
30
+ const bundledSource = sources.find(s => s.workflow.source.kind === 'bundled');
31
+ const projectShadowers = bundledSource
32
+ ? sources.filter(s => s !== bundledSource && s.workflow.source.kind === 'project')
33
+ : [];
34
+ if (bundledSource && projectShadowers.length > 0) {
32
35
  const { sourceRef: bundledRef, workflow } = bundledSource;
33
36
  const attemptedShadowRefs = sources
34
- .filter(s => s !== bundledSource && !isBundledWorkflow(s.workflow))
37
+ .filter(s => s !== bundledSource)
35
38
  .map(s => s.sourceRef);
36
39
  const variantResolution = variantResolutions.get(id)?.get(bundledRef);
37
40
  resolved.push({
@@ -63,9 +66,6 @@ function resolveWorkflowCandidates(candidates, variantResolutions) {
63
66
  }
64
67
  return resolved;
65
68
  }
66
- function isBundledWorkflow(workflow) {
67
- return workflow.definition.id.startsWith('wr.') && workflow.source.kind === 'bundled';
68
- }
69
69
  function selectVariant(candidates, flags) {
70
70
  if (candidates.length === 0) {
71
71
  throw new Error('selectVariant called with empty candidates');
@@ -369,16 +369,16 @@
369
369
  "sha256": "5fe866e54f796975dec5d8ba9983aefd86074db212d3fccd64eed04bc9f0b3da",
370
370
  "bytes": 8011
371
371
  },
372
- "console/assets/index-BZNM03t1.css": {
373
- "sha256": "114bf48e2dd1ecf84a17eee74f352fe5bc631ec6e294fa1ccd428190498bd9b1",
374
- "bytes": 47523
372
+ "console/assets/index-DMaX2-CW.js": {
373
+ "sha256": "9f9fe84d6eac1497afc2564f1b975a3494514c9b7b36b4a32c5473b831e56fbf",
374
+ "bytes": 712124
375
375
  },
376
- "console/assets/index-BwJelCXK.js": {
377
- "sha256": "b0b011c9c50f6336c029488c9667e51e158279d11b7217742d9345de07605e6b",
378
- "bytes": 695062
376
+ "console/assets/index-ibLhWBmX.css": {
377
+ "sha256": "346e55635d4d3dc2836dae83edb8563872721bf4b0e7e1ecf47fb9603424c206",
378
+ "bytes": 58826
379
379
  },
380
380
  "console/index.html": {
381
- "sha256": "f00d6472b99e24bb808bbb516a207c3934b4c0860fd7070bb913a41f67002b59",
381
+ "sha256": "c708c996c5682570d44110dbef54b7b2a367bfa3bd99e36b358e94dda74302a4",
382
382
  "bytes": 417
383
383
  },
384
384
  "core/error-handler.d.ts": {
@@ -666,8 +666,8 @@
666
666
  "bytes": 2389
667
667
  },
668
668
  "infrastructure/storage/workflow-resolution.js": {
669
- "sha256": "202c244209088acb15f1b0556c569607086e1cb71cf7faa77fbae902d682dfd2",
670
- "bytes": 6034
669
+ "sha256": "ef0c0af68dd93e9e0ca05c81920e7e85e4725e3bd67f4a97667c4989ba1f0e03",
670
+ "bytes": 6002
671
671
  },
672
672
  "mcp-server.d.ts": {
673
673
  "sha256": "7ead2e703f41c763d04b37a1cf433380bec3551fbde206af6694fe9286ad4714",
@@ -1410,7 +1410,7 @@
1410
1410
  "bytes": 2746
1411
1411
  },
1412
1412
  "types/workflow-source.js": {
1413
- "sha256": "7cc74aad297254c05cfcee21208ba6678cfa6ab78b087a9c31df60d5c55c1638",
1413
+ "sha256": "cb6c45e74af2b790aa24dd3ce1360f9199c834952239c10b30518d3bddb47706",
1414
1414
  "bytes": 4025
1415
1415
  },
1416
1416
  "types/workflow.d.ts": {
@@ -1662,12 +1662,12 @@
1662
1662
  "bytes": 1709
1663
1663
  },
1664
1664
  "v2/durable-core/domain/observation-builder.d.ts": {
1665
- "sha256": "7053a137d41ee443cf878b95eb19d08c632f17fb304c9e0ea25efaad42689f64",
1666
- "bytes": 692
1665
+ "sha256": "22841567fb4cc5a4b6582951d07a33eaab8546ad55e53d4459f61f5e56e442a4",
1666
+ "bytes": 619
1667
1667
  },
1668
1668
  "v2/durable-core/domain/observation-builder.js": {
1669
- "sha256": "6ed532d8d3087c87fcb462c4ad5d792a1fea742c5f78b26c75c18adb23b78458",
1670
- "bytes": 1935
1669
+ "sha256": "204aae8e096ae1b947812fa5edd3b1c91706460a302f401a9a95956d124fe893",
1670
+ "bytes": 1830
1671
1671
  },
1672
1672
  "v2/durable-core/domain/outputs.d.ts": {
1673
1673
  "sha256": "adc32e4b86c8036eac61096fe83371140c7de140db414227041a8854435f8f54",
@@ -1682,8 +1682,8 @@
1682
1682
  "bytes": 1295
1683
1683
  },
1684
1684
  "v2/durable-core/domain/prompt-renderer.js": {
1685
- "sha256": "b4e6b9683d05eb63b86b346996ead259157882bcb1e6a70834a919c90c6007f9",
1686
- "bytes": 18937
1685
+ "sha256": "9bb35163d6b40c739a3cf4773dfc97ba76f51b638a4524b88eb4e2e548f70f03",
1686
+ "bytes": 19065
1687
1687
  },
1688
1688
  "v2/durable-core/domain/reason-model.d.ts": {
1689
1689
  "sha256": "a944e7e0d9b3c73468488263cb0aa1e446c023f8084fd2af53cbda3f3bfcd37a",
@@ -2290,8 +2290,8 @@
2290
2290
  "bytes": 1136
2291
2291
  },
2292
2292
  "v2/infra/local/session-summary-provider/index.js": {
2293
- "sha256": "a4105b9ef78c1a1c311237a7c0d80bb1f495d72b15f969e391f9b7e765dc4fb2",
2294
- "bytes": 10822
2293
+ "sha256": "9f157787d57da8c1c0c7cb6dbe051ff7b03e6528f89a7a87802283c28b7f8f5e",
2294
+ "bytes": 10765
2295
2295
  },
2296
2296
  "v2/infra/local/sha256/index.d.ts": {
2297
2297
  "sha256": "8a727b7e54a38275ca6f9f1b8730f97cfc0a212df035df1bdc58e716e6824230",
@@ -2590,8 +2590,8 @@
2590
2590
  "bytes": 732
2591
2591
  },
2592
2592
  "v2/projections/resume-ranking.d.ts": {
2593
- "sha256": "57035cac4de66e20d09fd8b781502e867073b6b40dc305d5471580434e0491bf",
2594
- "bytes": 4071
2593
+ "sha256": "3ac0db8e9d154eff9fba21c40eedaf981ea844d3f536f2b69b3840af8653b8f1",
2594
+ "bytes": 4033
2595
2595
  },
2596
2596
  "v2/projections/resume-ranking.js": {
2597
2597
  "sha256": "5f1ee9888446caa23653543fc8cae69ac4398e73232d71bac3d16722c9cd2158",
@@ -2650,20 +2650,20 @@
2650
2650
  "bytes": 456
2651
2651
  },
2652
2652
  "v2/usecases/console-routes.js": {
2653
- "sha256": "a1a6cfe4dc655cd320d51e9ec65dbe9f7fc7869c4414bfd48230d9d50a15f2da",
2654
- "bytes": 10903
2653
+ "sha256": "c9f3047a070722fc6142dedcb7b74b12581d969eba63af6b788ddb9e4ad59806",
2654
+ "bytes": 12838
2655
2655
  },
2656
2656
  "v2/usecases/console-service.d.ts": {
2657
2657
  "sha256": "489a44091dc1b15ff938a60f9cf3ac28363614b9f0446286f0914157528c7eb3",
2658
2658
  "bytes": 1572
2659
2659
  },
2660
2660
  "v2/usecases/console-service.js": {
2661
- "sha256": "42c3964102d252d3f48ff8db06f51e69734c7f330c0cb103b3eaf2abd726282f",
2662
- "bytes": 27415
2661
+ "sha256": "bbc9fc2e64605cd3025c02a20d73c68a454b3e40a59c251b62ea698fd9252f27",
2662
+ "bytes": 27215
2663
2663
  },
2664
2664
  "v2/usecases/console-types.d.ts": {
2665
- "sha256": "11df12b744455416ca41f78c101dc8272ba8bd8ab921807c09d2923796266274",
2666
- "bytes": 6767
2665
+ "sha256": "36209a82bcd037b50b71ce6559e1e1835af3c3df50392ca4ac0f20990d9fcbae",
2666
+ "bytes": 7224
2667
2667
  },
2668
2668
  "v2/usecases/console-types.js": {
2669
2669
  "sha256": "d43aa81f5bc89faa359e0f97c814ba25155591ff078fbb9bfd40f8c7c9683230",
@@ -2710,12 +2710,12 @@
2710
2710
  "bytes": 462
2711
2711
  },
2712
2712
  "v2/usecases/worktree-service.d.ts": {
2713
- "sha256": "81c0c1b0c0853779c0ae61ecda6ae8b35e574072a81675bfdb1f2bce3961b653",
2714
- "bytes": 583
2713
+ "sha256": "06c4e8b5a794665f94b9fb3da9ec93b32a428e48ddaaa2a8260ee28fb3ab1430",
2714
+ "bytes": 660
2715
2715
  },
2716
2716
  "v2/usecases/worktree-service.js": {
2717
- "sha256": "bd5670336064a988503e94da9a9067a19e4fea0f94ff1d63503af6d7b9e5aea3",
2718
- "bytes": 8216
2717
+ "sha256": "b768f2ae9bcb2cf0c8e64b3b823de0df159757bf7c4c728f95107ee005eddce3",
2718
+ "bytes": 12436
2719
2719
  }
2720
2720
  }
2721
2721
  }
File without changes
@@ -75,7 +75,7 @@ function assertNever(x) {
75
75
  function getSourceDisplayName(source) {
76
76
  switch (source.kind) {
77
77
  case 'bundled':
78
- return 'Built-in';
78
+ return 'WorkRail';
79
79
  case 'user':
80
80
  return 'User Library';
81
81
  case 'project':
@@ -10,9 +10,6 @@ export interface ObservationEventData {
10
10
  } | {
11
11
  readonly type: 'sha256';
12
12
  readonly value: string;
13
- } | {
14
- readonly type: 'path';
15
- readonly value: string;
16
13
  };
17
14
  readonly confidence: 'low' | 'med' | 'high';
18
15
  }
@@ -34,11 +34,9 @@ function anchorsToObservations(anchors) {
34
34
  });
35
35
  break;
36
36
  case 'repo_root':
37
- if (anchor.value.length > constants_js_1.MAX_OBSERVATION_PATH_LENGTH)
38
- break;
39
37
  observations.push({
40
38
  key: 'repo_root',
41
- value: { type: 'path', value: anchor.value },
39
+ value: { type: 'short_string', value: anchor.value },
42
40
  confidence: 'high',
43
41
  });
44
42
  break;
@@ -185,7 +185,11 @@ function formatAssessmentRequirements(assessments) {
185
185
  requirements.push(`Set assessmentId: "${assessment.id}" on the artifact so the engine can match it to the correct assessment.`);
186
186
  }
187
187
  requirements.push(`Assessment target: "${assessment.id}"`);
188
- requirements.push(`Dimensions: ${assessment.dimensions.map((dimension) => `${dimension.id} (${dimension.levels.join(' | ')})`).join(', ')}`);
188
+ requirements.push(`Purpose: ${assessment.purpose}`);
189
+ requirements.push('Dimensions:');
190
+ for (const dimension of assessment.dimensions) {
191
+ requirements.push(` ${dimension.id} (${dimension.levels.join(' | ')}): ${dimension.purpose}`);
192
+ }
189
193
  requirements.push('Use only canonical dimension levels. If the engine rejects the artifact, correct the submitted levels instead of inventing new ones.');
190
194
  }
191
195
  return requirements;
@@ -18,7 +18,6 @@ const EMPTY_OBSERVATIONS = {
18
18
  gitHeadSha: null,
19
19
  gitBranch: null,
20
20
  repoRootHash: null,
21
- repoRoot: null,
22
21
  };
23
22
  const TITLE_CONTEXT_KEYS = ['goal', 'taskDescription', 'mrTitle', 'prTitle', 'ticketTitle', 'problem'];
24
23
  class LocalSessionSummaryProviderV2 {
@@ -137,7 +136,7 @@ function extractObservations(events) {
137
136
  case 'git_head_sha': return { ...acc, gitHeadSha: e.data.value.value };
138
137
  case 'git_branch': return { ...acc, gitBranch: e.data.value.value };
139
138
  case 'repo_root_hash': return { ...acc, repoRootHash: e.data.value.value };
140
- case 'repo_root': return { ...acc, repoRoot: e.data.value.value };
139
+ case 'repo_root': return acc;
141
140
  }
142
141
  }, EMPTY_OBSERVATIONS);
143
142
  }
@@ -8,7 +8,6 @@ export interface SessionObservations {
8
8
  readonly gitHeadSha: string | null;
9
9
  readonly gitBranch: string | null;
10
10
  readonly repoRootHash: string | null;
11
- readonly repoRoot: string | null;
12
11
  }
13
12
  export type WorkflowIdentity = {
14
13
  readonly kind: 'unknown';
@@ -8,6 +8,7 @@ const express_1 = __importDefault(require("express"));
8
8
  const path_1 = __importDefault(require("path"));
9
9
  const fs_1 = __importDefault(require("fs"));
10
10
  const worktree_service_js_1 = require("./worktree-service.js");
11
+ const workflow_js_1 = require("../../types/workflow.js");
11
12
  const dev_mode_js_1 = require("../../mcp/dev-mode.js");
12
13
  function watchSessionsDir(sessionsDir, onChanged) {
13
14
  try {
@@ -71,6 +72,22 @@ function mountConsoleRoutes(app, consoleService, workflowService, timingRingBuff
71
72
  }, 200);
72
73
  }
73
74
  const stopWatcher = watchSessionsDir(consoleService.getSessionsDir(), broadcastChange);
75
+ let enrichmentBroadcastTimer = null;
76
+ (0, worktree_service_js_1.setEnrichmentCompleteCallback)(() => {
77
+ if (enrichmentBroadcastTimer !== null)
78
+ clearTimeout(enrichmentBroadcastTimer);
79
+ enrichmentBroadcastTimer = setTimeout(() => {
80
+ enrichmentBroadcastTimer = null;
81
+ for (const client of sseClients) {
82
+ try {
83
+ client.write('data: {"type":"worktrees-updated"}\n\n');
84
+ }
85
+ catch {
86
+ sseClients.delete(client);
87
+ }
88
+ }
89
+ }, 2000);
90
+ });
74
91
  app.get('/api/v2/workspace/events', (req, res) => {
75
92
  res.setHeader('Content-Type', 'text/event-stream');
76
93
  res.setHeader('Cache-Control', 'no-cache');
@@ -97,35 +114,66 @@ function mountConsoleRoutes(app, consoleService, workflowService, timingRingBuff
97
114
  result.match((data) => res.json({ success: true, data }), (error) => res.status(500).json({ success: false, error: error.message }));
98
115
  });
99
116
  let cwdRepoRootPromise = null;
100
- const REPO_ROOTS_TTL_MS = 60000;
101
- const REPO_ROOT_SESSION_STALENESS_MS = 30 * 24 * 60 * 60 * 1000;
102
117
  let cachedRepoRoots = [];
103
118
  let repoRootsExpiresAt = 0;
119
+ const REPO_ROOTS_TTL_MS = 60000;
120
+ async function discoverMainRepoRoots() {
121
+ const dataDir = process.env['WORKRAIL_DATA_DIR']
122
+ ?? path_1.default.join(process.env.HOME ?? '/tmp', '.workrail', 'data');
123
+ const rootsFile = path_1.default.join(dataDir, 'workflow-sources', 'remembered-roots.json');
124
+ let workspacePaths = [];
125
+ try {
126
+ const raw = await fs_1.default.promises.readFile(rootsFile, 'utf8');
127
+ const parsed = JSON.parse(raw);
128
+ workspacePaths = (parsed.roots ?? []).map((r) => r.path).filter(Boolean);
129
+ }
130
+ catch {
131
+ return [];
132
+ }
133
+ const resolved = await Promise.all(workspacePaths.map((p) => (0, worktree_service_js_1.resolveRepoRoot)(p)));
134
+ const roots = new Set(resolved.filter((r) => r !== null));
135
+ return [...roots];
136
+ }
137
+ const WORKTREES_REQUEST_TIMEOUT_MS = 12000;
104
138
  app.get('/api/v2/worktrees', async (_req, res) => {
139
+ let timeoutId = null;
140
+ const timeoutPromise = new Promise((_, reject) => {
141
+ timeoutId = setTimeout(() => reject(new Error('worktrees scan timeout')), WORKTREES_REQUEST_TIMEOUT_MS);
142
+ });
105
143
  try {
106
144
  const sessionResult = await consoleService.getSessionList();
107
145
  const sessions = sessionResult.isOk() ? sessionResult.value.sessions : [];
108
146
  const activeSessions = (0, worktree_service_js_1.buildActiveSessionCounts)(sessions);
147
+ cwdRepoRootPromise ?? (cwdRepoRootPromise = (0, worktree_service_js_1.resolveRepoRoot)(process.cwd()));
109
148
  if (Date.now() > repoRootsExpiresAt) {
110
- cwdRepoRootPromise ?? (cwdRepoRootPromise = (0, worktree_service_js_1.resolveRepoRoot)(process.cwd()));
111
- const cwdRoot = await cwdRepoRootPromise;
112
- const cutoffMs = Date.now() - REPO_ROOT_SESSION_STALENESS_MS;
113
- const rawRoots = sessions
114
- .filter(s => s.lastModifiedMs >= cutoffMs)
115
- .map(s => s.repoRoot)
116
- .filter((r) => r !== null);
117
- const resolvedRoots = await Promise.all(rawRoots.map(r => (0, worktree_service_js_1.resolveRepoRoot)(r)));
118
- const repoRootSet = new Set(resolvedRoots.filter((r) => r !== null));
149
+ const [cwdRoot, discovered] = await Promise.all([
150
+ cwdRepoRootPromise,
151
+ discoverMainRepoRoots(),
152
+ ]);
153
+ const repoRootsSet = new Set(discovered);
119
154
  if (cwdRoot !== null)
120
- repoRootSet.add(cwdRoot);
121
- cachedRepoRoots = [...repoRootSet];
155
+ repoRootsSet.add(cwdRoot);
156
+ cachedRepoRoots = [...repoRootsSet];
122
157
  repoRootsExpiresAt = Date.now() + REPO_ROOTS_TTL_MS;
123
158
  }
124
- const data = await (0, worktree_service_js_1.getWorktreeList)(cachedRepoRoots, activeSessions);
159
+ const repoRoots = cachedRepoRoots;
160
+ const data = await Promise.race([
161
+ (0, worktree_service_js_1.getWorktreeList)(repoRoots, activeSessions),
162
+ timeoutPromise,
163
+ ]);
164
+ if (timeoutId !== null)
165
+ clearTimeout(timeoutId);
125
166
  res.json({ success: true, data });
126
167
  }
127
168
  catch (e) {
128
- res.status(500).json({ success: false, error: e instanceof Error ? e.message : String(e) });
169
+ if (timeoutId !== null)
170
+ clearTimeout(timeoutId);
171
+ if (e instanceof Error && e.message === 'worktrees scan timeout') {
172
+ res.json({ success: true, data: { repos: [] } });
173
+ }
174
+ else {
175
+ res.status(500).json({ success: false, error: e instanceof Error ? e.message : String(e) });
176
+ }
129
177
  }
130
178
  });
131
179
  app.get('/api/v2/sessions/:sessionId', async (req, res) => {
@@ -162,7 +210,7 @@ function mountConsoleRoutes(app, consoleService, workflowService, timingRingBuff
162
210
  description: definition.description,
163
211
  version: definition.version,
164
212
  tags: tagEntry?.tags ?? [],
165
- source,
213
+ source: (0, workflow_js_1.toWorkflowSourceInfo)(source),
166
214
  ...(definition.about !== undefined ? { about: definition.about } : {}),
167
215
  ...(definition.examples?.length ? { examples: [...definition.examples] } : {}),
168
216
  };
@@ -194,7 +242,7 @@ function mountConsoleRoutes(app, consoleService, workflowService, timingRingBuff
194
242
  description: definition.description,
195
243
  version: definition.version,
196
244
  tags: tagEntry?.tags ?? [],
197
- source,
245
+ source: (0, workflow_js_1.toWorkflowSourceInfo)(source),
198
246
  stepCount: definition.steps.length,
199
247
  ...(definition.about !== undefined ? { about: definition.about } : {}),
200
248
  ...(definition.examples?.length ? { examples: [...definition.examples] } : {}),
@@ -16,7 +16,10 @@ const run_execution_trace_js_1 = require("../projections/run-execution-trace.js"
16
16
  const constants_js_1 = require("../durable-core/constants.js");
17
17
  const index_js_1 = require("../durable-core/ids/index.js");
18
18
  const MAX_SESSIONS_TO_LOAD = 500;
19
- const DORMANCY_THRESHOLD_MS = 3 * 24 * 60 * 60 * 1000;
19
+ const DORMANCY_THRESHOLD_MS = (() => {
20
+ const override = parseInt(process.env['WORKRAIL_DORMANCY_THRESHOLD_MS'] ?? '', 10);
21
+ return Number.isFinite(override) && override > 0 ? override : 60 * 60 * 1000;
22
+ })();
20
23
  class ConsoleService {
21
24
  constructor(ports) {
22
25
  this.ports = ports;
@@ -337,16 +340,6 @@ function extractGitBranch(events) {
337
340
  }
338
341
  return null;
339
342
  }
340
- function extractRepoRoot(events) {
341
- for (const e of events) {
342
- if (e.kind !== constants_js_1.EVENT_KIND.OBSERVATION_RECORDED)
343
- continue;
344
- if (e.data.key === 'repo_root') {
345
- return e.data.value.value;
346
- }
347
- }
348
- return null;
349
- }
350
343
  function truncateTitle(text, maxLen = 120) {
351
344
  if (text.length <= maxLen)
352
345
  return text;
@@ -373,7 +366,6 @@ function projectSessionSummary(sessionId, truth, completionByRunId, workflowName
373
366
  const gapsRes = sortedEventsRes.isOk() ? (0, gaps_js_1.projectGapsV2)(sortedEventsRes.value) : (0, neverthrow_2.err)(sortedEventsRes.error);
374
367
  const sessionTitle = sortedEventsRes.isOk() ? deriveSessionTitle(sortedEventsRes.value) : null;
375
368
  const gitBranch = extractGitBranch(events);
376
- const repoRoot = extractRepoRoot(events);
377
369
  const runs = Object.values(dag.runsById);
378
370
  const run = runs[0];
379
371
  if (!run) {
@@ -393,7 +385,6 @@ function projectSessionSummary(sessionId, truth, completionByRunId, workflowName
393
385
  hasUnresolvedGaps: false,
394
386
  recapSnippet: null,
395
387
  gitBranch,
396
- repoRoot,
397
388
  lastModifiedMs,
398
389
  };
399
390
  }
@@ -436,7 +427,6 @@ function projectSessionSummary(sessionId, truth, completionByRunId, workflowName
436
427
  hasUnresolvedGaps,
437
428
  recapSnippet,
438
429
  gitBranch,
439
- repoRoot,
440
430
  lastModifiedMs,
441
431
  };
442
432
  }
@@ -16,7 +16,6 @@ export interface ConsoleSessionSummary {
16
16
  readonly hasUnresolvedGaps: boolean;
17
17
  readonly recapSnippet: string | null;
18
18
  readonly gitBranch: string | null;
19
- readonly repoRoot: string | null;
20
19
  readonly lastModifiedMs: number;
21
20
  }
22
21
  export interface ConsoleSessionListResponse {
@@ -112,6 +111,20 @@ export interface ChangedFile {
112
111
  readonly status: FileChangeStatus;
113
112
  readonly path: string;
114
113
  }
114
+ export interface WorktreeEnrichment {
115
+ readonly headHash: string;
116
+ readonly headMessage: string;
117
+ readonly headTimestampMs: number;
118
+ readonly changedCount: number;
119
+ readonly changedFiles: readonly ChangedFile[];
120
+ readonly aheadCount: number;
121
+ readonly unpushedCommits: readonly {
122
+ readonly hash: string;
123
+ readonly message: string;
124
+ }[];
125
+ readonly isMerged: boolean;
126
+ readonly description: string;
127
+ }
115
128
  export interface ConsoleWorktreeSummary {
116
129
  readonly path: string;
117
130
  readonly name: string;
@@ -129,6 +142,7 @@ export interface ConsoleWorktreeSummary {
129
142
  readonly isMerged: boolean;
130
143
  readonly activeSessionCount: number;
131
144
  readonly description?: string;
145
+ readonly enrichment: WorktreeEnrichment | null;
132
146
  }
133
147
  export interface ConsoleRepoWorktrees {
134
148
  readonly repoName: string;
@@ -7,4 +7,5 @@ export declare function buildActiveSessionCounts(sessions: ReadonlyArray<{
7
7
  gitBranch: string | null;
8
8
  status: ConsoleSessionStatus;
9
9
  }>): ActiveSessionsByBranch;
10
+ export declare function setEnrichmentCompleteCallback(cb: () => void): void;
10
11
  export declare function getWorktreeList(repoRoots: readonly string[], activeSessions: ActiveSessionsByBranch): Promise<ConsoleWorktreeListResponse>;