agent-state-machine 2.1.5 → 2.1.7

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
+ *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.relative{position:relative}.inset-x-0{left:0;right:0}.top-0{top:0}.z-50{z-index:50}.mx-auto{margin-left:auto;margin-right:auto}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.flex{display:flex}.inline-flex{display:inline-flex}.h-10{height:2.5rem}.h-12{height:3rem}.h-16{height:4rem}.h-2{height:.5rem}.h-20{height:5rem}.h-3\.5{height:.875rem}.h-32{height:8rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-64{height:16rem}.h-8{height:2rem}.h-\[100dvh\]{height:100dvh}.h-\[40vh\]{height:40vh}.h-full{height:100%}.min-h-\[50vh\]{min-height:50vh}.w-10{width:2.5rem}.w-12{width:3rem}.w-16{width:4rem}.w-2{width:.5rem}.w-20{width:5rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-full{width:100%}.min-w-0{min-width:0px}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-5xl{max-width:64rem}.max-w-\[300px\]{max-width:300px}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.flex-shrink-0,.shrink-0{flex-shrink:0}.cursor-not-allowed{cursor:not-allowed}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-0\.5{gap:.125rem}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}.space-y-10>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2.5rem * var(--tw-space-y-reverse))}.space-y-12>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(3rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(3rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.75rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.75rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(2rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:1rem}.rounded-3xl{border-radius:1.5rem}.rounded-\[20px\]{border-radius:20px}.rounded-\[24px\]{border-radius:24px}.rounded-\[28px\]{border-radius:28px}.rounded-\[32px\]{border-radius:32px}.rounded-full{border-radius:9999px}.border{border-width:1px}.border-2{border-width:2px}.border-t{border-top-width:1px}.border-accent{border-color:var(--accent)}.border-black{--tw-border-opacity: 1;border-color:rgb(0 0 0 / var(--tw-border-opacity, 1))}.border-red-500{--tw-border-opacity: 1;border-color:rgb(239 68 68 / var(--tw-border-opacity, 1))}.border-transparent{border-color:transparent}.border-white\/10{border-color:#ffffff1a}.border-white\/20{border-color:#fff3}.border-white\/5{border-color:#ffffff0d}.bg-accent{background-color:var(--accent)}.bg-bg{background-color:var(--bg)}.bg-black{--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.bg-black\/\[0\.03\]{background-color:#00000008}.bg-fg{background-color:var(--fg)}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity, 1))}.bg-red-500{--tw-bg-opacity: 1;background-color:rgb(239 68 68 / var(--tw-bg-opacity, 1))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.bg-white\/10{background-color:#ffffff1a}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.from-bg{--tw-gradient-from: var(--bg) var(--tw-gradient-from-position);--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.via-bg{--tw-gradient-to: rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops: var(--tw-gradient-from), var(--bg) var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-transparent{--tw-gradient-to: transparent var(--tw-gradient-to-position)}.p-1{padding:.25rem}.p-10{padding:2.5rem}.p-2{padding:.5rem}.p-4{padding:1rem}.p-5{padding:1.25rem}.p-6{padding:1.5rem}.p-8{padding:2rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.py-20{padding-top:5rem;padding-bottom:5rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pt-0\.5{padding-top:.125rem}.pt-1{padding-top:.25rem}.pt-10{padding-top:2.5rem}.pt-4{padding-top:1rem}.text-left{text-align:left}.text-center{text-align:center}.font-mono{font-family:JetBrains Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-6xl{font-size:3.75rem;line-height:1}.text-\[10px\]{font-size:10px}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-black{font-weight:900}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold{font-weight:600}.uppercase{text-transform:uppercase}.italic{font-style:italic}.leading-none{line-height:1}.leading-relaxed{line-height:1.625}.leading-tight{line-height:1.25}.tracking-\[0\.2em\]{letter-spacing:.2em}.tracking-\[0\.35em\]{letter-spacing:.35em}.tracking-\[0\.4em\]{letter-spacing:.4em}.tracking-\[0\.5em\]{letter-spacing:.5em}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.tracking-wider{letter-spacing:.05em}.tracking-widest{letter-spacing:.1em}.text-accent{color:var(--accent)}.text-bg{color:var(--bg)}.text-black{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.text-blue-500{--tw-text-opacity: 1;color:rgb(59 130 246 / var(--tw-text-opacity, 1))}.text-fg{color:var(--fg)}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity, 1))}.text-red-500{--tw-text-opacity: 1;color:rgb(239 68 68 / var(--tw-text-opacity, 1))}.text-subtle{color:var(--subtle)}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.opacity-0{opacity:0}.opacity-100{opacity:1}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-80{opacity:.8}.shadow-2xl{--tw-shadow: 0 25px 50px -12px rgb(0 0 0 / .25);--tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_0_15px_rgba\(34\,197\,94\,0\.6\)\]{--tw-shadow: 0 0 15px rgba(34,197,94,.6);--tw-shadow-colored: 0 0 15px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-\[0_10px_30px_rgba\(0\,122\,255\,0\.25\)\]{--tw-shadow: 0 10px 30px rgba(0,122,255,.25);--tw-shadow-colored: 0 10px 30px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.blur{--tw-blur: blur(8px);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-blur-3xl{--tw-backdrop-blur: blur(64px);-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,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-opacity{transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}:root{--bg: #ffffff;--fg: #1d1d1f;--subtle: #86868b;--border: rgba(0, 0, 0, .06);--accent: #007aff}.dark{--bg: #000000;--fg: #f5f5f7;--subtle: #86868b;--border: rgba(255, 255, 255, .1);--accent: #0a84ff}body{background-color:var(--bg);color:var(--fg);font-family:Inter,sans-serif;transition:background-color .4s ease,color .4s ease;overflow:hidden;margin:0;height:100vh;height:100dvh;width:100vw}.custom-scroll::-webkit-scrollbar{width:4px}.custom-scroll::-webkit-scrollbar-track{background:transparent}.custom-scroll::-webkit-scrollbar-thumb{background:var(--subtle);border-radius:4px;opacity:.2}.markdown-body pre{background:#7f7f7f0d;padding:1.5rem;border-radius:12px;overflow-x:auto;font-size:.85rem;line-height:1.6}.content-width{width:100%;max-width:900px;margin:0 auto}.main-container{height:100vh;width:100vw;display:flex;flex-direction:column}.main-stage{flex:1;position:relative;z-index:10;padding-top:calc(80px + env(safe-area-inset-top))}.jumper-input{background:transparent;border:none;color:inherit;font-family:inherit;font-weight:700;text-align:center;width:2.2rem;outline:none;padding:0;margin:0;font-size:inherit}.jumper-input::-webkit-inner-spin-button,.jumper-input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.nav-footer{height:80px;display:flex;align-items:center;justify-content:center;z-index:50}.footer-control{display:flex;align-items:center;gap:1.5rem;padding:.5rem 1.2rem;background:#7f7f7f0d;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);border-radius:99px;border:1px solid var(--border)}.tooltip{position:relative}.tooltip:after{content:attr(data-tooltip);position:absolute;bottom:-2.2rem;left:50%;transform:translate(-50%) translateY(4px);background:var(--fg);color:var(--bg);padding:.35rem .55rem;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap;opacity:0;pointer-events:none;transition:opacity .12s ease,transform .12s ease;box-shadow:0 12px 30px #00000026;z-index:40}.tooltip:hover:after,.tooltip:focus-visible:after{opacity:1;transform:translate(-50%) translateY(0)}.placeholder\:opacity-20::-moz-placeholder{opacity:.2}.placeholder\:opacity-20::placeholder{opacity:.2}.hover\:scale-105:hover{--tw-scale-x: 1.05;--tw-scale-y: 1.05;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:scale-\[1\.02\]:hover{--tw-scale-x: 1.02;--tw-scale-y: 1.02;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.hover\:border-border:hover{border-color:var(--border)}.hover\:border-white\/20:hover{border-color:#fff3}.hover\:bg-black\/5:hover{background-color:#0000000d}.hover\:bg-black\/\[0\.03\]:hover{background-color:#00000008}.hover\:bg-white\/20:hover{background-color:#fff3}.hover\:text-accent:hover{color:var(--accent)}.hover\:opacity-100:hover{opacity:1}.focus\:border-accent:focus{border-color:var(--accent)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-4:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.active\:scale-95:active{--tw-scale-x: .95;--tw-scale-y: .95;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.disabled\:opacity-0:disabled{opacity:0}.disabled\:opacity-30:disabled{opacity:.3}.group:hover .group-hover\:text-accent{color:var(--accent)}.group:hover .group-hover\:opacity-40{opacity:.4}.group:hover .group-hover\:opacity-50{opacity:.5}.dark\:border-white:is(.dark *){--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity, 1))}.dark\:bg-black:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(0 0 0 / var(--tw-bg-opacity, 1))}.dark\:bg-white:is(.dark *){--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity, 1))}.dark\:bg-white\/\[0\.03\]:is(.dark *){background-color:#ffffff08}.dark\:text-black:is(.dark *){--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}.dark\:text-white:is(.dark *){--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}.dark\:hover\:bg-white\/10:hover:is(.dark *){background-color:#ffffff1a}.dark\:hover\:bg-white\/\[0\.03\]:hover:is(.dark *){background-color:#ffffff08}@media (min-width: 640px){.sm\:text-7xl{font-size:4.5rem;line-height:1}}@media (min-width: 768px){.md\:text-8xl{font-size:6rem;line-height:1}}.\[\&_\*\]\:text-inherit *{color:inherit}.\[\&_a\]\:underline a{text-decoration-line:underline}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-greek-wght-normal-CkhJZR-_.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/remote/assets/inter-latin-wght-normal-Dx4kXJAl.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,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) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/remote/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/remote/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/remote/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/remote/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/remote/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@@ -4,8 +4,8 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
6
6
  <title>{{WORKFLOW_NAME}}</title>
7
- <script type="module" crossorigin src="/remote/assets/index-DiKoT5IY.js"></script>
8
- <link rel="stylesheet" crossorigin href="/remote/assets/index-dzq5qHNh.css">
7
+ <script type="module" crossorigin src="/remote/assets/index-CxvAJSiE.js"></script>
8
+ <link rel="stylesheet" crossorigin href="/remote/assets/index-CyKTDZyv.css">
9
9
  </head>
10
10
  <body>
11
11
  <div id="root"></div>
@@ -2,71 +2,203 @@ import CopyButton from "./CopyButton.jsx";
2
2
 
3
3
  export default function ContentCard({ item }) {
4
4
  if (!item) return null;
5
- const time = new Date(item.timestamp).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", second: "2-digit" });
5
+
6
+ const time = new Date(item.timestamp).toLocaleTimeString([], {
7
+ hour: "2-digit",
8
+ minute: "2-digit",
9
+ second: "2-digit",
10
+ });
11
+
6
12
  const eventLabel = item.event ? item.event.replace(/_/g, " ") : "EVENT";
7
13
 
14
+ const formatKey = (key) =>
15
+ key.replace(/_/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2");
16
+
17
+ const tryParseJson = (raw) => {
18
+ try {
19
+ return JSON.parse(raw);
20
+ } catch {
21
+ return null;
22
+ }
23
+ };
24
+
25
+ const extractJsonFromString = (value) => {
26
+ const trimmed = value.trim();
27
+ const direct = tryParseJson(trimmed);
28
+ if (direct !== null) return direct;
29
+
30
+ const fenceRegex = /```(?:json)?\s*([\s\S]*?)\s*```/gi;
31
+ let match = fenceRegex.exec(trimmed);
32
+
33
+ while (match) {
34
+ const candidate = match[1].trim();
35
+ const parsed = tryParseJson(candidate);
36
+ if (parsed !== null) return parsed;
37
+ match = fenceRegex.exec(trimmed);
38
+ }
39
+
40
+ return null;
41
+ };
42
+
43
+ const MonoBlock = ({ children }) => (
44
+ <pre className="text-sm font-mono leading-relaxed overflow-auto p-6 rounded-[24px] border border-black bg-black text-white dark:border-white dark:bg-white dark:text-black">
45
+ {children}
46
+ </pre>
47
+ );
48
+
8
49
  const renderValue = (value) => {
9
50
  if (value === null || value === undefined) {
10
- return <span className="opacity-40">—</span>;
51
+ return <span className="italic">—</span>;
52
+ }
53
+
54
+ if (typeof value === "boolean") {
55
+ const base =
56
+ "inline-flex items-center rounded-full px-3 py-1 text-xs font-semibold tracking-[0.2em] uppercase border";
57
+ return value ? (
58
+ <span className={`${base} bg-black text-white border-black dark:bg-white dark:text-black dark:border-white`}>
59
+ Yes
60
+ </span>
61
+ ) : (
62
+ <span className={`${base} bg-white text-black border-black dark:bg-black dark:text-white dark:border-white`}>
63
+ No
64
+ </span>
65
+ );
11
66
  }
67
+
12
68
  if (typeof value === "string") {
13
- const trimmed = value.trim();
14
- const looksLikeJson = trimmed.startsWith("{") || trimmed.startsWith("[");
15
- if (looksLikeJson) {
16
- try {
17
- const parsed = JSON.parse(trimmed);
18
- return (
19
- <pre className="text-sm font-mono opacity-80 leading-relaxed custom-scroll overflow-auto bg-black/[0.015] dark:bg-white/[0.015] p-6 rounded-[24px] border border-border">
20
- {JSON.stringify(parsed, null, 2)}
21
- </pre>
22
- );
23
- } catch (error) {
24
- return <span className="text-2xl font-semibold whitespace-pre-wrap break-words">{value}</span>;
25
- }
69
+ const parsedJson = extractJsonFromString(value);
70
+ if (parsedJson !== null) {
71
+ return <MonoBlock>{JSON.stringify(parsedJson, null, 2)}</MonoBlock>;
26
72
  }
73
+
27
74
  if (value.length > 140 || value.includes("\n")) {
28
- return (
29
- <pre className="text-sm font-mono opacity-80 leading-relaxed custom-scroll overflow-auto bg-black/[0.015] dark:bg-white/[0.015] p-6 rounded-[24px] border border-border">
30
- {value}
31
- </pre>
32
- );
75
+ return <MonoBlock>{value}</MonoBlock>;
33
76
  }
34
- return <span className="text-2xl font-semibold whitespace-pre-wrap break-words">{value}</span>;
35
- }
36
- if (typeof value === "object") {
77
+
37
78
  return (
38
- <pre className="text-sm font-mono opacity-80 leading-relaxed custom-scroll overflow-auto bg-black/[0.015] dark:bg-white/[0.015] p-6 rounded-[24px] border border-border">
39
- {JSON.stringify(value, null, 2)}
40
- </pre>
79
+ <span className="text-2xl font-semibold whitespace-pre-wrap break-words">
80
+ {value}
81
+ </span>
41
82
  );
42
83
  }
84
+
85
+ if (typeof value === "object") {
86
+ return <MonoBlock>{JSON.stringify(value, null, 2)}</MonoBlock>;
87
+ }
88
+
43
89
  return <span className="text-2xl font-semibold">{String(value)}</span>;
44
90
  };
45
91
 
46
- const renderKeyValueGrid = (entries) => (
47
- <div className="space-y-8">
48
- {entries.map(([key, value]) => (
49
- <div key={key} className="space-y-2">
50
- <div className="text-[10px] font-bold tracking-[0.35em] uppercase opacity-40">
51
- {key.replace(/_/g, " ")}
52
- </div>
53
- <div className="text-base">{renderValue(value)}</div>
92
+ const MAX_STRUCT_DEPTH = 6;
93
+
94
+ function renderArray(items, depth) {
95
+ if (!items.length) return <span className="italic">—</span>;
96
+
97
+ const isSimple = items.every(
98
+ (entry) => entry === null || ["string", "number", "boolean"].includes(typeof entry)
99
+ );
100
+
101
+ const isObjectList = items.every(
102
+ (entry) => entry && typeof entry === "object" && !Array.isArray(entry)
103
+ );
104
+
105
+ const isSimpleObjectList =
106
+ isObjectList &&
107
+ items.every((entry) =>
108
+ Object.values(entry).every(
109
+ (val) => val === null || ["string", "number", "boolean"].includes(typeof val)
110
+ )
111
+ );
112
+
113
+ if (isSimple) {
114
+ return (
115
+ <div className="space-y-2">
116
+ {items.map((entry, index) => (
117
+ <div key={`item-${index}`} className="text-base">
118
+ {renderValue(entry)}
119
+ </div>
120
+ ))}
54
121
  </div>
55
- ))}
56
- </div>
57
- );
122
+ );
123
+ }
124
+
125
+ if (isSimpleObjectList) {
126
+ return (
127
+ <div className="space-y-4">
128
+ {items.map((entry, index) => (
129
+ <div
130
+ key={`item-${index}`}
131
+ className="rounded-[20px] border border-black p-4 dark:border-white"
132
+ >
133
+ {renderKeyValueGrid(Object.entries(entry), depth)}
134
+ </div>
135
+ ))}
136
+ </div>
137
+ );
138
+ }
139
+
140
+ return (
141
+ <div className="space-y-6">
142
+ {items.map((entry, index) => (
143
+ <div
144
+ key={`item-${index}`}
145
+ className="space-y-4 rounded-[24px] border border-black p-5 dark:border-white"
146
+ >
147
+ <div className="text-[10px] font-bold tracking-[0.35em] uppercase">
148
+ Item {index + 1}
149
+ </div>
150
+ {renderStructured(entry, depth + 1)}
151
+ </div>
152
+ ))}
153
+ </div>
154
+ );
155
+ }
156
+
157
+ function renderObject(obj, depth) {
158
+ const entries = Object.entries(obj);
159
+ if (!entries.length) return <span className="italic">—</span>;
160
+ if (depth >= MAX_STRUCT_DEPTH) return renderValue(obj);
161
+ return renderKeyValueGrid(entries, depth);
162
+ }
163
+
164
+ function renderStructured(value, depth = 0) {
165
+ if (value === null || value === undefined) return renderValue(value);
166
+
167
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
168
+ return renderValue(value);
169
+ }
170
+
171
+ if (Array.isArray(value)) return renderArray(value, depth);
172
+ if (typeof value === "object") return renderObject(value, depth);
173
+
174
+ return renderValue(value);
175
+ }
176
+
177
+ function renderKeyValueGrid(entries, depth = 0) {
178
+ return (
179
+ <div className="space-y-8">
180
+ {entries.map(([key, value]) => (
181
+ <div key={key} className="space-y-2">
182
+ <div className="text-[10px] font-bold tracking-[0.35em] uppercase">
183
+ {formatKey(key)}
184
+ </div>
185
+ <div className="text-base">{renderStructured(value, depth + 1)}</div>
186
+ </div>
187
+ ))}
188
+ </div>
189
+ );
190
+ }
58
191
 
59
192
  let content = null;
60
193
 
61
194
  if (item.event === "AGENT_STARTED") {
62
195
  content = (
63
- <div className="space-y-12 py-24">
196
+ <div className="space-y-12 py-4">
64
197
  <div className="space-y-3 text-center">
65
- <div className="text-xs font-bold tracking-[0.4em] uppercase opacity-40">Agent invocation</div>
66
198
  <h2 className="text-4xl font-black tracking-tight">{item.agent}</h2>
67
- <div className="text-xs font-mono opacity-20">{time}</div>
199
+ <div className="text-xs font-mono">{time}</div>
68
200
  </div>
69
- <div className="markdown-body opacity-80 leading-relaxed text-xl font-light whitespace-pre-wrap">
201
+ <div className="markdown-body leading-relaxed text-xl font-light whitespace-pre-wrap [&_*]:text-inherit [&_a]:underline">
70
202
  {item.prompt}
71
203
  </div>
72
204
  </div>
@@ -75,83 +207,121 @@ export default function ContentCard({ item }) {
75
207
  const step = item.event.replace("WORKFLOW_", "");
76
208
  content = (
77
209
  <div className="min-h-[50vh] flex flex-col items-center justify-center text-center space-y-8 py-20">
78
- <div className="text-[10px] font-bold tracking-[0.5em] uppercase opacity-20">Lifecycle status</div>
79
- <h2 className="text-8xl font-black tracking-tighter opacity-10 leading-none uppercase">{step}</h2>
80
- {item.error && <pre className="text-red-500 font-mono text-xs max-w-xl whitespace-pre-wrap bg-red-50 dark:bg-red-900/5 p-6 rounded-[24px] mt-4">{item.error}</pre>}
210
+ <div className="text-[10px] font-bold tracking-[0.5em] uppercase">
211
+ Lifecycle status
212
+ </div>
213
+
214
+ <div className="w-full max-w-5xl rounded-[28px] border border-black p-10 dark:border-white">
215
+ <h2 className="text-6xl sm:text-7xl md:text-8xl font-black tracking-tighter leading-none uppercase">
216
+ {step}
217
+ </h2>
218
+
219
+ {item.error && (
220
+ <pre className="mt-8 text-xs font-mono whitespace-pre-wrap rounded-[24px] border border-black p-6 bg-black text-white dark:border-white dark:bg-white dark:text-black">
221
+ {item.error}
222
+ </pre>
223
+ )}
224
+ </div>
81
225
  </div>
82
226
  );
83
227
  } else if (item.event === "PROMPT_REQUESTED" || item.event === "INTERACTION_REQUESTED") {
84
228
  const details = [
85
229
  ["slug", item.slug],
86
230
  ["targetKey", item.targetKey],
87
- ["type", item.type]
231
+ ["type", item.type],
88
232
  ].filter((entry) => entry[1] !== undefined);
89
233
 
90
234
  content = (
91
- <div className="space-y-10 py-24">
92
- <div className="space-y-3">
93
- <div className="text-xs font-bold tracking-[0.4em] uppercase text-accent">Awaiting response</div>
94
- <div className="text-xs font-mono opacity-20">{time}</div>
95
- </div>
235
+ <div className="space-y-10 py-4">
236
+ <div className="text-xs font-mono">{time}</div>
237
+
96
238
  <div className="text-4xl font-bold tracking-tight text-balance leading-tight">
97
239
  {item.question || item.prompt || "Prompt"}
98
240
  </div>
241
+
99
242
  {item.prompt && item.question && item.prompt !== item.question && (
100
- <div className="text-lg font-medium opacity-70 whitespace-pre-wrap">{item.prompt}</div>
243
+ <div className="text-lg font-medium whitespace-pre-wrap">{item.prompt}</div>
101
244
  )}
245
+
102
246
  {details.length > 0 && (
103
- <div className="pt-4">
104
- {renderKeyValueGrid(details)}
105
- </div>
247
+ <div className="pt-4">{renderKeyValueGrid(details)}</div>
106
248
  )}
107
249
  </div>
108
250
  );
109
251
  } else if (item.event === "PROMPT_ANSWERED" || item.event === "INTERACTION_SUBMITTED") {
110
252
  const responseValue = item.answer !== undefined ? item.answer : item.response;
253
+
111
254
  const details = [
112
255
  ["slug", item.slug],
113
- ["targetKey", item.targetKey]
256
+ ["targetKey", item.targetKey],
114
257
  ].filter((entry) => entry[1] !== undefined);
115
258
 
116
259
  content = (
117
- <div className="space-y-10 py-24">
118
- <div className="space-y-3">
119
- <div className="text-xs font-bold tracking-[0.4em] uppercase text-accent">Response recorded</div>
120
- <div className="text-xs font-mono opacity-20">{time}</div>
121
- </div>
260
+ <div className="space-y-10 py-4">
261
+ <div className="text-xs font-mono">{time}</div>
262
+
122
263
  <div className="text-4xl font-bold tracking-tight text-balance leading-tight">
123
264
  {renderValue(responseValue)}
124
265
  </div>
266
+
125
267
  {details.length > 0 && (
126
- <div className="pt-4">
127
- {renderKeyValueGrid(details)}
268
+ <div className="pt-4">{renderKeyValueGrid(details)}</div>
269
+ )}
270
+ </div>
271
+ );
272
+ } else if (item.event === "AGENT_COMPLETED") {
273
+ const details = [
274
+ ["agent", item.agent],
275
+ ["attempts", item.attempts],
276
+ ].filter((entry) => entry[1] !== undefined);
277
+
278
+ content = (
279
+ <div className="space-y-12 py-4">
280
+ {item.output !== undefined && (
281
+ <div className="space-y-8">
282
+ <div className="rounded-[28px] border border-black px-6 py-5 dark:border-white">
283
+ <div className="flex flex-wrap items-center justify-between gap-3">
284
+ <div className="text-3xl font-black tracking-tight">
285
+ {item.agent ? `Output from ${item.agent}` : "Agent output"}
286
+ </div>
287
+ <div className="text-xs font-mono">{time}</div>
288
+ </div>
289
+ <div className="mt-2 text-sm">
290
+ This is what the previous agent run produced.
291
+ </div>
292
+ </div>
293
+
294
+ {renderStructured(item.output)}
128
295
  </div>
129
296
  )}
297
+
298
+ {details.length > 0 && (
299
+ <div className="pt-4">{renderKeyValueGrid(details)}</div>
300
+ )}
130
301
  </div>
131
302
  );
132
303
  } else {
133
- const entries = Object.entries(item).filter(([key]) => key !== "event" && key !== "timestamp");
304
+ const entries = Object.entries(item).filter(
305
+ ([key]) => key !== "event" && key !== "timestamp"
306
+ );
307
+
134
308
  const fallbackEntries = entries.length > 0 ? entries : [["event", item.event || "Event"]];
135
309
 
136
310
  content = (
137
- <div className="space-y-12 py-24">
138
- <div className="flex items-center justify-between">
139
- <div className="text-xs font-bold tracking-[0.4em] uppercase opacity-40">{eventLabel}</div>
140
- <div className="flex items-center gap-6">
141
- <span className="text-xs font-mono opacity-20">{time}</span>
142
- <CopyButton text={item} />
143
- </div>
144
- </div>
311
+ <div className="space-y-12 py-4">
312
+ <div className="text-xs font-mono">{time}</div>
145
313
  {renderKeyValueGrid(fallbackEntries)}
146
314
  </div>
147
315
  );
148
316
  }
149
317
 
150
318
  return (
151
- <div className="w-full h-full flex flex-col overflow-y-auto custom-scroll px-12">
319
+ <div className="w-full h-full flex flex-col overflow-y-auto custom-scroll px-12 bg-white text-black dark:bg-black dark:text-white">
152
320
  <div className="content-width flex-1">
153
321
  <div className="flex items-center justify-between pt-10">
154
- <div className="text-[10px] font-bold tracking-[0.4em] uppercase opacity-30">{eventLabel}</div>
322
+ <div className="text-[10px] font-bold tracking-[0.4em] uppercase">
323
+ {eventLabel}
324
+ </div>
155
325
  <CopyButton text={item} />
156
326
  </div>
157
327
  {content}