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.
- package/package.json +1 -1
- package/vercel-server/public/remote/assets/index-CxvAJSiE.js +139 -0
- package/vercel-server/public/remote/assets/index-CyKTDZyv.css +1 -0
- package/vercel-server/public/remote/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2 +0 -0
- package/vercel-server/public/remote/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2 +0 -0
- package/vercel-server/public/remote/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2 +0 -0
- package/vercel-server/public/remote/assets/inter-greek-wght-normal-CkhJZR-_.woff2 +0 -0
- package/vercel-server/public/remote/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2 +0 -0
- package/vercel-server/public/remote/assets/inter-latin-wght-normal-Dx4kXJAl.woff2 +0 -0
- package/vercel-server/public/remote/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2 +0 -0
- package/vercel-server/public/remote/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2 +0 -0
- package/vercel-server/public/remote/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2 +0 -0
- package/vercel-server/public/remote/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
- package/vercel-server/public/remote/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
- package/vercel-server/public/remote/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2 +0 -0
- package/vercel-server/public/remote/index.html +2 -2
- package/vercel-server/ui/src/components/ContentCard.jsx +243 -73
|
@@ -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,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA) 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}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/vercel-server/public/remote/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2
ADDED
|
Binary file
|
|
Binary file
|
package/vercel-server/public/remote/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2
ADDED
|
Binary file
|
|
@@ -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-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="/remote/assets/index-
|
|
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
|
-
|
|
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="
|
|
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
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
35
|
-
}
|
|
36
|
-
if (typeof value === "object") {
|
|
77
|
+
|
|
37
78
|
return (
|
|
38
|
-
<
|
|
39
|
-
{
|
|
40
|
-
</
|
|
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
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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-
|
|
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
|
|
199
|
+
<div className="text-xs font-mono">{time}</div>
|
|
68
200
|
</div>
|
|
69
|
-
<div className="markdown-body
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
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-
|
|
92
|
-
<div className="
|
|
93
|
-
|
|
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
|
|
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-
|
|
118
|
-
<div className="
|
|
119
|
-
|
|
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
|
-
|
|
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(
|
|
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-
|
|
138
|
-
<div className="
|
|
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
|
|
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}
|