@waniwani/sdk 0.11.8 → 0.11.9
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/dist/chat/embed.js +102 -117
- package/dist/chat/embed.js.map +1 -1
- package/dist/chat/express-js/index.js +2 -2
- package/dist/chat/express-js/index.js.map +1 -1
- package/dist/chat/index.d.ts +16 -16
- package/dist/chat/index.js +7 -7
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/next-js/index.js +2 -2
- package/dist/chat/next-js/index.js.map +1 -1
- package/dist/chat/styles.css +1 -1
- package/dist/mcp/index.js +5 -5
- package/dist/mcp/index.js.map +1 -1
- package/package.json +1 -1
package/dist/chat/styles.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */
|
|
2
|
-
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--ww-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ww-color-red-300:oklch(80.8% .114 19.571);--ww-color-red-400:oklch(70.4% .191 22.216);--ww-color-red-500:oklch(63.7% .237 25.331);--ww-color-blue-400:oklch(70.7% .165 254.624);--ww-spacing:.25rem;--ww-container-sm:24rem;--ww-container-md:28rem;--ww-container-3xl:48rem;--ww-text-xs:.75rem;--ww-text-xs--line-height:calc(1/.75);--ww-text-sm:.875rem;--ww-text-sm--line-height:calc(1.25/.875);--ww-text-base:1rem;--ww-text-base--line-height:calc(1.5/1);--ww-text-lg:1.125rem;--ww-text-lg--line-height:calc(1.75/1.125);--ww-font-weight-medium:500;--ww-font-weight-semibold:600;--ww-tracking-wide:.025em;--ww-tracking-wider:.05em;--ww-tracking-widest:.1em;--ww-leading-normal:1.5;--ww-radius-md:.375rem;--ww-radius-lg:.5rem;--ww-radius-xl:.75rem;--ww-radius-2xl:1rem;--ww-ease-out:cubic-bezier(0,0,.2,1);--ww-animate-spin:spin 1s linear infinite;--ww-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--ww-default-transition-duration:.15s;--ww-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--ww-default-font-family:var(--ww-font-sans,system-ui,-apple-system,"Segoe UI",sans-serif);--ww-default-mono-font-family:var(--ww-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(--ww-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(--ww-default-font-feature-settings,normal);font-variation-settings:var(--ww-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--ww-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--ww-default-mono-font-feature-settings,normal);font-variation-settings:var(--ww-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.ww\:\!relative{position:relative!important}.ww\:absolute{position:absolute}.ww\:relative{position:relative}.ww\:top-full{top:100%}.ww\:right-0{right:calc(var(--ww-spacing)*0)}.ww\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:left-\[50\%\]{left:50%}.ww\:z-50{z-index:50}.ww\:mx-3{margin-inline:calc(var(--ww-spacing)*3)}.ww\:mx-auto{margin-inline:auto}.ww\:my-2{margin-block:calc(var(--ww-spacing)*2)}.ww\:mt-0\.5{margin-top:calc(var(--ww-spacing)*.5)}.ww\:mt-1{margin-top:calc(var(--ww-spacing)*1)}.ww\:mt-2{margin-top:calc(var(--ww-spacing)*2)}.ww\:mt-6{margin-top:calc(var(--ww-spacing)*6)}.ww\:mb-2{margin-bottom:calc(var(--ww-spacing)*2)}.ww\:mb-4{margin-bottom:calc(var(--ww-spacing)*4)}.ww\:ml-auto{margin-left:auto}.ww\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ww\:block{display:block}.ww\:contents{display:contents}.ww\:flex{display:flex}.ww\:grid{display:grid}.ww\:hidden{display:none}.ww\:inline-block{display:inline-block}.ww\:inline-flex{display:inline-flex}.ww\:field-sizing-content{field-sizing:content}.ww\:size-2{width:calc(var(--ww-spacing)*2);height:calc(var(--ww-spacing)*2)}.ww\:size-3{width:calc(var(--ww-spacing)*3);height:calc(var(--ww-spacing)*3)}.ww\:size-3\.5{width:calc(var(--ww-spacing)*3.5);height:calc(var(--ww-spacing)*3.5)}.ww\:size-4{width:calc(var(--ww-spacing)*4);height:calc(var(--ww-spacing)*4)}.ww\:size-5{width:calc(var(--ww-spacing)*5);height:calc(var(--ww-spacing)*5)}.ww\:size-7{width:calc(var(--ww-spacing)*7);height:calc(var(--ww-spacing)*7)}.ww\:size-8{width:calc(var(--ww-spacing)*8);height:calc(var(--ww-spacing)*8)}.ww\:size-9{width:calc(var(--ww-spacing)*9);height:calc(var(--ww-spacing)*9)}.ww\:size-12{width:calc(var(--ww-spacing)*12);height:calc(var(--ww-spacing)*12)}.ww\:size-auto{width:auto;height:auto}.ww\:size-full{width:100%;height:100%}.ww\:h-1\.5{height:calc(var(--ww-spacing)*1.5)}.ww\:h-3\.5{height:calc(var(--ww-spacing)*3.5)}.ww\:h-7{height:calc(var(--ww-spacing)*7)}.ww\:h-8{height:calc(var(--ww-spacing)*8)}.ww\:h-9{height:calc(var(--ww-spacing)*9)}.ww\:h-16{height:calc(var(--ww-spacing)*16)}.ww\:h-auto{height:auto}.ww\:h-full{height:100%}.ww\:max-h-48{max-height:calc(var(--ww-spacing)*48)}.ww\:max-h-80{max-height:calc(var(--ww-spacing)*80)}.ww\:min-h-0{min-height:calc(var(--ww-spacing)*0)}.ww\:min-h-full{min-height:100%}.ww\:w-1\.5{width:calc(var(--ww-spacing)*1.5)}.ww\:w-72{width:calc(var(--ww-spacing)*72)}.ww\:w-fit{width:fit-content}.ww\:w-full{width:100%}.ww\:max-w-3xl{max-width:var(--ww-container-3xl)}.ww\:max-w-24{max-width:calc(var(--ww-spacing)*24)}.ww\:max-w-32{max-width:calc(var(--ww-spacing)*32)}.ww\:max-w-\[80\%\]{max-width:80%}.ww\:max-w-full{max-width:100%}.ww\:max-w-md{max-width:var(--ww-container-md)}.ww\:max-w-sm{max-width:var(--ww-container-sm)}.ww\:min-w-0{min-width:calc(var(--ww-spacing)*0)}.ww\:flex-1{flex:1}.ww\:shrink-0{flex-shrink:0}.ww\:grow{flex-grow:1}.ww\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.ww\:rotate-90{rotate:90deg}.ww\:rotate-180{rotate:180deg}.ww\:animate-\[ww-fade-in_0\.2s_ease-out_both\]{animation:.2s ease-out both ww-fade-in}.ww\:animate-pulse{animation:var(--ww-animate-pulse)}.ww\:animate-spin{animation:var(--ww-animate-spin)}.ww\:cursor-pointer{cursor:pointer}.ww\:resize-none{resize:none}.ww\:grid-rows-\[0fr\]{grid-template-rows:0fr}.ww\:grid-rows-\[1fr\]{grid-template-rows:1fr}.ww\:flex-col{flex-direction:column}.ww\:flex-wrap{flex-wrap:wrap}.ww\:items-center{align-items:center}.ww\:items-end{align-items:flex-end}.ww\:items-start{align-items:flex-start}.ww\:justify-between{justify-content:space-between}.ww\:justify-center{justify-content:center}.ww\:gap-1{gap:calc(var(--ww-spacing)*1)}.ww\:gap-1\.5{gap:calc(var(--ww-spacing)*1.5)}.ww\:gap-2{gap:calc(var(--ww-spacing)*2)}.ww\:gap-3{gap:calc(var(--ww-spacing)*3)}.ww\:gap-6{gap:calc(var(--ww-spacing)*6)}:where(.ww\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.ww\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.ww\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ww\:\!overflow-hidden{overflow:hidden!important}.ww\:overflow-hidden{overflow:hidden}.ww\:overflow-x-auto{overflow-x:auto}.ww\:overflow-y-auto{overflow-y:auto}.ww\:overflow-y-hidden{overflow-y:hidden}.ww\:\!rounded-full{border-radius:3.40282e38px!important}.ww\:rounded{border-radius:var(--ww-radius,16px)}.ww\:rounded-2xl{border-radius:var(--ww-radius-2xl)}.ww\:rounded-\[var\(--ww-radius\)\]{border-radius:var(--ww-radius)}.ww\:rounded-full{border-radius:3.40282e38px}.ww\:rounded-lg{border-radius:var(--ww-radius-lg)}.ww\:rounded-md{border-radius:var(--ww-radius-md)}.ww\:rounded-xl{border-radius:var(--ww-radius-xl)}.ww\:border{border-style:var(--tw-border-style);border-width:1px}.ww\:border-0{border-style:var(--tw-border-style);border-width:0}.ww\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ww\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ww\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ww\:border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.ww\:border-\[\#03d916\]{border-color:#03d916}.ww\:border-border,.ww\:border-border\/50{border-color:var(--ww-color-border,#e5e7eb)}@supports (color:color-mix(in lab, red, red)){.ww\:border-border\/50{border-color:color-mix(in oklab,var(--ww-color-border,#e5e7eb)50%,transparent)}}.ww\:border-foreground\/30{border-color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:border-foreground\/30{border-color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)30%,transparent)}}.ww\:border-muted-foreground\/50{border-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:border-muted-foreground\/50{border-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)50%,transparent)}}.ww\:border-transparent{border-color:#0000}.ww\:bg-\[\#03d916\]\/10{background-color:oklab(76.761% -.205195 .155304/.1)}.ww\:bg-accent{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:bg-background,.ww\:bg-background\/20{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/20{background-color:color-mix(in oklab,var(--ww-color-background,#fff)20%,transparent)}}.ww\:bg-foreground,.ww\:bg-foreground\/5{background-color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-foreground\/5{background-color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)5%,transparent)}}.ww\:bg-input{background-color:var(--ww-color-input,#f9fafb)}.ww\:bg-muted{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:bg-muted-foreground\/10{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)10%,transparent)}}.ww\:bg-muted-foreground\/20{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/20{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)20%,transparent)}}.ww\:bg-muted-foreground\/60{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/60{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)60%,transparent)}}.ww\:bg-muted\/50{background-color:var(--ww-color-muted,#f1f5f9)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted\/50{background-color:color-mix(in oklab,var(--ww-color-muted,#f1f5f9)50%,transparent)}}.ww\:bg-primary{background-color:var(--ww-color-primary,#6366f1)}.ww\:bg-red-500\/10{background-color:var(--ww-color-red-500)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-red-500\/10{background-color:color-mix(in oklab,var(--ww-color-red-500)10%,transparent)}}.ww\:bg-tool-card{background-color:var(--ww-color-tool-card,#f4f4f5)}.ww\:bg-transparent{background-color:#0000}.ww\:object-cover{object-fit:cover}.ww\:p-0{padding:calc(var(--ww-spacing)*0)}.ww\:p-1{padding:calc(var(--ww-spacing)*1)}.ww\:p-1\.5{padding:calc(var(--ww-spacing)*1.5)}.ww\:p-3{padding:calc(var(--ww-spacing)*3)}.ww\:px-0{padding-inline:calc(var(--ww-spacing)*0)}.ww\:px-1\.5{padding-inline:calc(var(--ww-spacing)*1.5)}.ww\:px-2{padding-inline:calc(var(--ww-spacing)*2)}.ww\:px-3{padding-inline:calc(var(--ww-spacing)*3)}.ww\:px-4{padding-inline:calc(var(--ww-spacing)*4)}.ww\:px-6{padding-inline:calc(var(--ww-spacing)*6)}.ww\:py-0\.5{padding-block:calc(var(--ww-spacing)*.5)}.ww\:py-1{padding-block:calc(var(--ww-spacing)*1)}.ww\:py-1\.5{padding-block:calc(var(--ww-spacing)*1.5)}.ww\:py-2{padding-block:calc(var(--ww-spacing)*2)}.ww\:py-2\.5{padding-block:calc(var(--ww-spacing)*2.5)}.ww\:py-3{padding-block:calc(var(--ww-spacing)*3)}.ww\:py-6{padding-block:calc(var(--ww-spacing)*6)}.ww\:py-8{padding-block:calc(var(--ww-spacing)*8)}.ww\:py-12{padding-block:calc(var(--ww-spacing)*12)}.ww\:pt-2{padding-top:calc(var(--ww-spacing)*2)}.ww\:pt-2\.5{padding-top:calc(var(--ww-spacing)*2.5)}.ww\:pt-3{padding-top:calc(var(--ww-spacing)*3)}.ww\:pr-3{padding-right:calc(var(--ww-spacing)*3)}.ww\:pb-1\.5{padding-bottom:calc(var(--ww-spacing)*1.5)}.ww\:pb-3{padding-bottom:calc(var(--ww-spacing)*3)}.ww\:pb-8{padding-bottom:calc(var(--ww-spacing)*8)}.ww\:pl-4{padding-left:calc(var(--ww-spacing)*4)}.ww\:text-center{text-align:center}.ww\:text-left{text-align:left}.ww\:font-\[family-name\:var\(--ww-font\)\]{font-family:var(--ww-font)}.ww\:font-mono{font-family:var(--ww-font-mono)}.ww\:text-base{font-size:var(--ww-text-base);line-height:var(--tw-leading,var(--ww-text-base--line-height))}.ww\:text-lg{font-size:var(--ww-text-lg);line-height:var(--tw-leading,var(--ww-text-lg--line-height))}.ww\:text-sm{font-size:var(--ww-text-sm);line-height:var(--tw-leading,var(--ww-text-sm--line-height))}.ww\:text-xs{font-size:var(--ww-text-xs);line-height:var(--tw-leading,var(--ww-text-xs--line-height))}.ww\:text-\[10px\]{font-size:10px}.ww\:text-\[11px\]{font-size:11px}.ww\:leading-normal{--tw-leading:var(--ww-leading-normal);line-height:var(--ww-leading-normal)}.ww\:font-medium{--tw-font-weight:var(--ww-font-weight-medium);font-weight:var(--ww-font-weight-medium)}.ww\:font-semibold{--tw-font-weight:var(--ww-font-weight-semibold);font-weight:var(--ww-font-weight-semibold)}.ww\:tracking-wide{--tw-tracking:var(--ww-tracking-wide);letter-spacing:var(--ww-tracking-wide)}.ww\:tracking-wider{--tw-tracking:var(--ww-tracking-wider);letter-spacing:var(--ww-tracking-wider)}.ww\:tracking-widest{--tw-tracking:var(--ww-tracking-widest);letter-spacing:var(--ww-tracking-widest)}.ww\:break-words{overflow-wrap:break-word}.ww\:break-all{word-break:break-all}.ww\:whitespace-pre-wrap{white-space:pre-wrap}.ww\:text-background{color:var(--ww-color-background,#fff)}.ww\:text-foreground,.ww\:text-foreground\/50{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/50{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)50%,transparent)}}.ww\:text-foreground\/60{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/60{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)60%,transparent)}}.ww\:text-foreground\/80{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/80{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)80%,transparent)}}.ww\:text-muted-foreground{color:var(--ww-color-muted-foreground,#6b7280)}.ww\:text-primary{color:var(--ww-color-primary,#6366f1)}.ww\:text-primary-foreground{color:var(--ww-color-primary-foreground,#1f2937)}.ww\:text-red-400{color:var(--ww-color-red-400)}.ww\:uppercase{text-transform:uppercase}.ww\:opacity-0{opacity:0}.ww\:opacity-100{opacity:1}.ww\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:shadow-sm{--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)}.ww\: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)}.ww\:ring-blue-400\/70{--tw-ring-color:var(--ww-color-blue-400)}@supports (color:color-mix(in lab, red, red)){.ww\:ring-blue-400\/70{--tw-ring-color:color-mix(in oklab,var(--ww-color-blue-400)70%,transparent)}}.ww\:ring-offset-2{--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)}.ww\:ring-offset-background{--tw-ring-offset-color:var(--ww-color-background,#fff)}.ww\:transition-\[grid-template-rows\,opacity\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\: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(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:duration-150{--tw-duration:.15s;transition-duration:.15s}.ww\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ww\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ww\:ease-out{--tw-ease:var(--ww-ease-out);transition-timing-function:var(--ww-ease-out)}.ww\:outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.ww\:group-hover\:opacity-0:is(:where(.ww\:group):hover *){opacity:0}.ww\:group-hover\:opacity-100:is(:where(.ww\:group):hover *){opacity:1}}.ww\:group-\[\.is-assistant\]\:text-foreground:is(:where(.ww\:group).is-assistant *){color:var(--ww-color-foreground,#1f2937)}.ww\:group-\[\.is-user\]\:ml-auto:is(:where(.ww\:group).is-user *){margin-left:auto}.ww\:group-\[\.is-user\]\:rounded-lg:is(:where(.ww\:group).is-user *){border-radius:var(--ww-radius-lg)}.ww\:group-\[\.is-user\]\:bg-user-bubble:is(:where(.ww\:group).is-user *){background-color:var(--ww-color-user-bubble,#f4f4f4)}.ww\:group-\[\.is-user\]\:px-4:is(:where(.ww\:group).is-user *){padding-inline:calc(var(--ww-spacing)*4)}.ww\:group-\[\.is-user\]\:py-3:is(:where(.ww\:group).is-user *){padding-block:calc(var(--ww-spacing)*3)}.ww\:group-\[\.is-user\]\:text-primary-foreground:is(:where(.ww\:group).is-user *){color:var(--ww-color-primary-foreground,#1f2937)}.ww\:placeholder\:text-muted-foreground::placeholder{color:var(--ww-color-muted-foreground,#6b7280)}@media (hover:hover){.ww\:hover\:border-primary\/30:hover{border-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:border-primary\/30:hover{border-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)30%,transparent)}}.ww\:hover\:bg-accent:hover{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:hover\:bg-foreground:hover{background-color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:bg-muted:hover{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:hover\:bg-muted-foreground\/10:hover{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-muted-foreground\/10:hover{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)10%,transparent)}}.ww\:hover\:bg-muted\/50:hover{background-color:var(--ww-color-muted,#f1f5f9)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--ww-color-muted,#f1f5f9)50%,transparent)}}.ww\:hover\:bg-primary\/90:hover{background-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)90%,transparent)}}.ww\:hover\:text-accent-foreground:hover{color:var(--ww-color-accent-foreground,#1f2937)}.ww\:hover\:text-foreground:hover{color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:text-red-300:hover{color:var(--ww-color-red-300)}.ww\:hover\:underline:hover{text-decoration-line:underline}}.ww\:disabled\:pointer-events-none:disabled{pointer-events:none}.ww\:disabled\:opacity-30:disabled{opacity:.3}.ww\:disabled\:opacity-40:disabled{opacity:.4}.ww\:disabled\:opacity-50:disabled{opacity:.5}.ww\:\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--ww-spacing)*0)}.ww\:\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--ww-spacing)*0)}}@keyframes ww-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes ww-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes ww-pulse{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}[data-waniwani-chat] ::-webkit-scrollbar{width:8px}[data-waniwani-chat] ::-webkit-scrollbar-track{background:0 0}[data-waniwani-chat] ::-webkit-scrollbar-thumb{background:var(--ww-color-border);border-radius:9999px}[data-waniwani-chat] ::-webkit-scrollbar-thumb:hover{background:var(--ww-color-muted-foreground)}[data-waniwani-chat] *{scrollbar-width:thin;scrollbar-color:var(--ww-color-border)transparent}[data-waniwani-chat]{--ww-color-background:var(--ww-bg,#fff);--ww-color-foreground:var(--ww-text,#1f2937);--ww-color-primary:var(--ww-primary,#6366f1);--ww-color-primary-foreground:var(--ww-primary-fg,#1f2937);--ww-color-muted-foreground:var(--ww-muted,#6b7280);--ww-color-border:var(--ww-border,#e5e7eb);--ww-color-input:var(--ww-input-bg,#f9fafb);--ww-color-accent:var(--ww-assistant-bubble,#f3f4f6);--ww-color-accent-foreground:var(--ww-text,#1f2937);--ww-color-user-bubble:var(--ww-user-bubble,#f4f4f4);--ww-color-card:var(--ww-bg,#fff);--ww-color-card-foreground:var(--ww-text,#1f2937);--ww-color-card-header:var(--ww-header-bg,#fff);--ww-color-card-header-foreground:var(--ww-header-text,#1f2937);--ww-color-status:var(--ww-status,#22c55e);--ww-color-tool-card:var(--ww-tool-card,#f4f4f5);--ww-radius:var(--ww-radius,16px);--ww-font-sans:var(--ww-font,system-ui,-apple-system,"Segoe UI",sans-serif)}.dark [data-waniwani-chat],[data-waniwani-chat].dark{--ww-color-background:var(--ww-bg,#212121);--ww-color-foreground:var(--ww-text,#ececec);--ww-color-primary:var(--ww-primary,#6366f1);--ww-color-primary-foreground:var(--ww-primary-fg,#fff);--ww-color-muted-foreground:var(--ww-muted,#8e8ea0);--ww-color-border:var(--ww-border,#444);--ww-color-input:var(--ww-input-bg,#2f2f2f);--ww-color-accent:var(--ww-assistant-bubble,#2f2f2f);--ww-color-accent-foreground:var(--ww-text,#ececec);--ww-color-user-bubble:var(--ww-user-bubble,#303030);--ww-color-card:var(--ww-bg,#212121);--ww-color-card-foreground:var(--ww-text,#ececec);--ww-color-card-header:var(--ww-header-bg,#1e1e1e);--ww-color-card-header-foreground:var(--ww-header-text,#ececec);--ww-color-status:var(--ww-status,#22c55e);--ww-color-tool-card:var(--ww-tool-card,#262626)}[data-waniwani-chat] [data-streamdown=table-wrapper]{flex-direction:column;gap:.5rem;margin-top:1rem;margin-bottom:1rem;display:flex}[data-waniwani-chat] [data-streamdown=table-wrapper]>div:first-child:has(button){justify-content:flex-end;align-items:center;gap:.25rem;display:flex}[data-waniwani-chat] [data-streamdown=table-wrapper]>div:last-child{overflow-x:auto}[data-waniwani-chat] [data-streamdown=table]{border-collapse:collapse;border:1px solid var(--ww-color-border);border-radius:.75rem;width:100%;overflow:hidden}[data-waniwani-chat] [data-streamdown=table-header]{background-color:var(--ww-color-accent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=table-header]{background-color:color-mix(in srgb,var(--ww-color-accent)80%,transparent)}}[data-waniwani-chat] [data-streamdown=table-body]{background-color:var(--ww-color-accent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=table-body]{background-color:color-mix(in srgb,var(--ww-color-accent)40%,transparent)}}[data-waniwani-chat] [data-streamdown=table-body]>tr+tr{border-top:1px solid var(--ww-color-border)}[data-waniwani-chat] [data-streamdown=table-row]{border-bottom:1px solid var(--ww-color-border)}[data-waniwani-chat] [data-streamdown=table-header-cell]{white-space:nowrap;text-align:left;padding:.5rem 1rem;font-size:.875rem;font-weight:600}[data-waniwani-chat] [data-streamdown=table-cell]{padding:.5rem 1rem;font-size:.875rem}[data-waniwani-chat] [data-streamdown=link]{color:var(--ww-color-primary);overflow-wrap:anywhere;cursor:pointer;font-weight:500;text-decoration:underline}[data-waniwani-chat] [data-streamdown=link-safety-modal]{z-index:50;background-color:var(--ww-color-background);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=link-safety-modal]{background-color:color-mix(in srgb,var(--ww-color-background)50%,transparent)}}[data-waniwani-chat] [data-streamdown=link-safety-modal]{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div{border:1px solid var(--ww-color-border);background-color:var(--ww-color-background);width:100%;max-width:28rem;color:var(--ww-color-foreground);border-radius:.75rem;flex-direction:column;gap:1rem;margin:0 1rem;padding:1.5rem;display:flex;position:relative;box-shadow:0 10px 25px #0000001a}[data-waniwani-chat] [data-streamdown=link-safety-modal] button{cursor:pointer}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>button:first-child{color:var(--ww-color-muted-foreground);background:0 0;border:none;border-radius:.375rem;padding:.25rem;transition:background-color .15s,color .15s;position:absolute;top:1rem;right:1rem}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>button:first-child:hover{background-color:var(--ww-color-accent);color:var(--ww-color-foreground)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:first-of-type{flex-direction:column;gap:.5rem;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:first-of-type>div{align-items:center;gap:.5rem;font-size:1.125rem;font-weight:600;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:first-of-type>p{color:var(--ww-color-muted-foreground);font-size:.875rem}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:nth-child(3){word-break:break-all;background-color:var(--ww-color-accent);border-radius:.375rem;max-height:8rem;padding:.75rem;font-family:ui-monospace,monospace;font-size:.875rem;overflow-y:auto}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child{gap:.5rem;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button{border:none;border-radius:.375rem;flex:1;justify-content:center;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:background-color .15s;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:first-child{border:1px solid var(--ww-color-border);background-color:var(--ww-color-background);color:var(--ww-color-foreground)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:first-child:hover{background-color:var(--ww-color-accent)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:last-child{background-color:var(--ww-color-primary);color:#fff}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:last-child:hover{opacity:.9}[data-waniwani-chat] [data-streamdown=ordered-list]{white-space:normal;list-style-type:decimal;list-style-position:inside}[data-waniwani-chat] li [data-streamdown=ordered-list]{padding-left:1.5rem}[data-waniwani-chat] [data-streamdown=unordered-list]{white-space:normal;list-style-type:disc;list-style-position:inside}[data-waniwani-chat] li [data-streamdown=unordered-list]{padding-left:1.5rem}[data-waniwani-chat] [data-streamdown=list-item]{padding-top:.25rem;padding-bottom:.25rem}[data-waniwani-chat] [data-streamdown=list-item]>p{display:inline}[data-waniwani-chat] [data-streamdown=inline-code]{background-color:var(--ww-color-accent);border-radius:.25rem;padding:.125rem .375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:.875rem}[data-waniwani-chat] [data-streamdown=heading-1]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.875rem;font-weight:600;line-height:2.25rem}[data-waniwani-chat] [data-streamdown=heading-2]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.5rem;font-weight:600;line-height:2rem}[data-waniwani-chat] [data-streamdown=heading-3]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.25rem;font-weight:600;line-height:1.75rem}[data-waniwani-chat] [data-streamdown=heading-4]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.125rem;font-weight:600;line-height:1.75rem}[data-waniwani-chat] [data-streamdown=heading-5]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1rem;font-weight:600;line-height:1.5rem}[data-waniwani-chat] [data-streamdown=heading-6]{margin-top:1.5rem;margin-bottom:.5rem;font-size:.875rem;font-weight:600;line-height:1.25rem}[data-waniwani-chat] [data-streamdown=blockquote]{border-left:4px solid var(--ww-color-muted-foreground);margin-top:1rem;margin-bottom:1rem}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=blockquote]{border-left:4px solid color-mix(in srgb,var(--ww-color-muted-foreground)30%,transparent)}}[data-waniwani-chat] [data-streamdown=blockquote]{color:var(--ww-color-muted-foreground);padding-left:1rem;font-style:italic}[data-waniwani-chat] [data-streamdown=horizontal-rule]{border-color:var(--ww-color-border);margin-top:1.5rem;margin-bottom:1.5rem}[data-waniwani-chat] [data-streamdown=strong]{font-weight:600}[data-waniwani-chat] [data-streamdown=image-wrapper]{margin-top:1rem;margin-bottom:1rem;display:inline-block;position:relative}[data-waniwani-chat] [data-streamdown=image]{border-radius:.5rem;max-width:100%}[data-waniwani-chat] [data-streamdown=code-block]{border:1px solid var(--ww-color-border);border-radius:.75rem;width:100%;margin-top:1rem;margin-bottom:1rem;overflow:hidden}[data-waniwani-chat] [data-streamdown=code-block-header]{background-color:var(--ww-color-accent);justify-content:space-between;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=code-block-header]{background-color:color-mix(in srgb,var(--ww-color-accent)80%,transparent)}}[data-waniwani-chat] [data-streamdown=code-block-header]{color:var(--ww-color-muted-foreground);padding:.75rem;font-size:.75rem}[data-waniwani-chat] [data-streamdown=code-block-body]{padding:1rem;font-size:.875rem;overflow-x:auto}[data-waniwani-chat] [data-streamdown=code-block-copy-button],[data-waniwani-chat] [data-streamdown=code-block-download-button]{cursor:pointer;color:var(--ww-color-muted-foreground);background:0 0;border:none;padding:.25rem;transition:color .15s}[data-waniwani-chat] [data-streamdown=code-block-copy-button]:hover,[data-waniwani-chat] [data-streamdown=code-block-download-button]:hover{color:var(--ww-color-foreground)}[data-waniwani-chat] [data-streamdown=mermaid-block]{border:1px solid var(--ww-color-border);border-radius:.75rem;height:auto;margin-top:1rem;margin-bottom:1rem;padding:1rem;position:relative}[data-waniwani-chat] [data-streamdown=mermaid]{width:100%;height:100%}@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-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-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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
|
2
|
+
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--ww-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ww-color-red-300:oklch(80.8% .114 19.571);--ww-color-red-400:oklch(70.4% .191 22.216);--ww-color-red-500:oklch(63.7% .237 25.331);--ww-color-blue-400:oklch(70.7% .165 254.624);--ww-spacing:.25rem;--ww-container-sm:24rem;--ww-container-md:28rem;--ww-container-3xl:48rem;--ww-text-xs:.75rem;--ww-text-xs--line-height:calc(1/.75);--ww-text-sm:.875rem;--ww-text-sm--line-height:calc(1.25/.875);--ww-text-base:1rem;--ww-text-base--line-height:calc(1.5/1);--ww-text-lg:1.125rem;--ww-text-lg--line-height:calc(1.75/1.125);--ww-font-weight-medium:500;--ww-font-weight-semibold:600;--ww-tracking-wide:.025em;--ww-tracking-wider:.05em;--ww-tracking-widest:.1em;--ww-leading-normal:1.5;--ww-radius-md:.375rem;--ww-radius-lg:.5rem;--ww-radius-xl:.75rem;--ww-radius-2xl:1rem;--ww-ease-out:cubic-bezier(0,0,.2,1);--ww-animate-spin:spin 1s linear infinite;--ww-animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--ww-default-transition-duration:.15s;--ww-default-transition-timing-function:cubic-bezier(.4,0,.2,1);--ww-default-font-family:var(--ww-font-sans,system-ui,-apple-system,"Segoe UI",sans-serif);--ww-default-mono-font-family:var(--ww-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(--ww-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(--ww-default-font-feature-settings,normal);font-variation-settings:var(--ww-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--ww-default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--ww-default-mono-font-feature-settings,normal);font-variation-settings:var(--ww-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.ww\:pointer-events-auto{pointer-events:auto}.ww\:pointer-events-none{pointer-events:none}.ww\:\!relative{position:relative!important}.ww\:absolute{position:absolute}.ww\:relative{position:relative}.ww\:sticky{position:sticky}.ww\:top-full{top:100%}.ww\:right-0{right:calc(var(--ww-spacing)*0)}.ww\:bottom-2{bottom:calc(var(--ww-spacing)*2)}.ww\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:left-\[50\%\]{left:50%}.ww\:z-50{z-index:50}.ww\:mx-3{margin-inline:calc(var(--ww-spacing)*3)}.ww\:mx-auto{margin-inline:auto}.ww\:my-2{margin-block:calc(var(--ww-spacing)*2)}.ww\:mt-0\.5{margin-top:calc(var(--ww-spacing)*.5)}.ww\:mt-1{margin-top:calc(var(--ww-spacing)*1)}.ww\:mt-2{margin-top:calc(var(--ww-spacing)*2)}.ww\:mt-6{margin-top:calc(var(--ww-spacing)*6)}.ww\:mb-2{margin-bottom:calc(var(--ww-spacing)*2)}.ww\:mb-4{margin-bottom:calc(var(--ww-spacing)*4)}.ww\:ml-auto{margin-left:auto}.ww\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ww\:block{display:block}.ww\:contents{display:contents}.ww\:flex{display:flex}.ww\:grid{display:grid}.ww\:hidden{display:none}.ww\:inline-block{display:inline-block}.ww\:inline-flex{display:inline-flex}.ww\:field-sizing-content{field-sizing:content}.ww\:size-2{width:calc(var(--ww-spacing)*2);height:calc(var(--ww-spacing)*2)}.ww\:size-3{width:calc(var(--ww-spacing)*3);height:calc(var(--ww-spacing)*3)}.ww\:size-3\.5{width:calc(var(--ww-spacing)*3.5);height:calc(var(--ww-spacing)*3.5)}.ww\:size-4{width:calc(var(--ww-spacing)*4);height:calc(var(--ww-spacing)*4)}.ww\:size-5{width:calc(var(--ww-spacing)*5);height:calc(var(--ww-spacing)*5)}.ww\:size-7{width:calc(var(--ww-spacing)*7);height:calc(var(--ww-spacing)*7)}.ww\:size-8{width:calc(var(--ww-spacing)*8);height:calc(var(--ww-spacing)*8)}.ww\:size-9{width:calc(var(--ww-spacing)*9);height:calc(var(--ww-spacing)*9)}.ww\:size-12{width:calc(var(--ww-spacing)*12);height:calc(var(--ww-spacing)*12)}.ww\:size-auto{width:auto;height:auto}.ww\:size-full{width:100%;height:100%}.ww\:h-1\.5{height:calc(var(--ww-spacing)*1.5)}.ww\:h-3\.5{height:calc(var(--ww-spacing)*3.5)}.ww\:h-7{height:calc(var(--ww-spacing)*7)}.ww\:h-8{height:calc(var(--ww-spacing)*8)}.ww\:h-9{height:calc(var(--ww-spacing)*9)}.ww\:h-16{height:calc(var(--ww-spacing)*16)}.ww\:h-auto{height:auto}.ww\:h-full{height:100%}.ww\:max-h-48{max-height:calc(var(--ww-spacing)*48)}.ww\:max-h-80{max-height:calc(var(--ww-spacing)*80)}.ww\:min-h-0{min-height:calc(var(--ww-spacing)*0)}.ww\:min-h-full{min-height:100%}.ww\:w-1\.5{width:calc(var(--ww-spacing)*1.5)}.ww\:w-72{width:calc(var(--ww-spacing)*72)}.ww\:w-fit{width:fit-content}.ww\:w-full{width:100%}.ww\:max-w-3xl{max-width:var(--ww-container-3xl)}.ww\:max-w-24{max-width:calc(var(--ww-spacing)*24)}.ww\:max-w-32{max-width:calc(var(--ww-spacing)*32)}.ww\:max-w-\[80\%\]{max-width:80%}.ww\:max-w-full{max-width:100%}.ww\:max-w-md{max-width:var(--ww-container-md)}.ww\:max-w-sm{max-width:var(--ww-container-sm)}.ww\:min-w-0{min-width:calc(var(--ww-spacing)*0)}.ww\:flex-1{flex:1}.ww\:shrink-0{flex-shrink:0}.ww\:grow{flex-grow:1}.ww\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.ww\:rotate-90{rotate:90deg}.ww\:rotate-180{rotate:180deg}.ww\:animate-\[ww-fade-in_0\.2s_ease-out_both\]{animation:.2s ease-out both ww-fade-in}.ww\:animate-pulse{animation:var(--ww-animate-pulse)}.ww\:animate-spin{animation:var(--ww-animate-spin)}.ww\:cursor-pointer{cursor:pointer}.ww\:resize-none{resize:none}.ww\:grid-rows-\[0fr\]{grid-template-rows:0fr}.ww\:grid-rows-\[1fr\]{grid-template-rows:1fr}.ww\:flex-col{flex-direction:column}.ww\:flex-wrap{flex-wrap:wrap}.ww\:items-center{align-items:center}.ww\:items-end{align-items:flex-end}.ww\:items-start{align-items:flex-start}.ww\:justify-between{justify-content:space-between}.ww\:justify-center{justify-content:center}.ww\:gap-1{gap:calc(var(--ww-spacing)*1)}.ww\:gap-1\.5{gap:calc(var(--ww-spacing)*1.5)}.ww\:gap-2{gap:calc(var(--ww-spacing)*2)}.ww\:gap-3{gap:calc(var(--ww-spacing)*3)}.ww\:gap-6{gap:calc(var(--ww-spacing)*6)}:where(.ww\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.ww\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ww-spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ww-spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}.ww\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ww\:\!overflow-hidden{overflow:hidden!important}.ww\:overflow-hidden{overflow:hidden}.ww\:overflow-x-auto{overflow-x:auto}.ww\:overflow-y-auto{overflow-y:auto}.ww\:overflow-y-hidden{overflow-y:hidden}.ww\:\!rounded-full{border-radius:3.40282e38px!important}.ww\:rounded{border-radius:var(--ww-radius,16px)}.ww\:rounded-2xl{border-radius:var(--ww-radius-2xl)}.ww\:rounded-\[var\(--ww-radius\)\]{border-radius:var(--ww-radius)}.ww\:rounded-full{border-radius:3.40282e38px}.ww\:rounded-lg{border-radius:var(--ww-radius-lg)}.ww\:rounded-md{border-radius:var(--ww-radius-md)}.ww\:rounded-xl{border-radius:var(--ww-radius-xl)}.ww\:border{border-style:var(--tw-border-style);border-width:1px}.ww\:border-0{border-style:var(--tw-border-style);border-width:0}.ww\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ww\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ww\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ww\:border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.ww\:border-\[\#03d916\]{border-color:#03d916}.ww\:border-border,.ww\:border-border\/50{border-color:var(--ww-color-border,#e5e7eb)}@supports (color:color-mix(in lab, red, red)){.ww\:border-border\/50{border-color:color-mix(in oklab,var(--ww-color-border,#e5e7eb)50%,transparent)}}.ww\:border-foreground\/30{border-color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:border-foreground\/30{border-color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)30%,transparent)}}.ww\:border-muted-foreground\/50{border-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:border-muted-foreground\/50{border-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)50%,transparent)}}.ww\:border-transparent{border-color:#0000}.ww\:bg-\[\#03d916\]\/10{background-color:oklab(76.761% -.205195 .155304/.1)}.ww\:bg-accent{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:bg-background,.ww\:bg-background\/20{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/20{background-color:color-mix(in oklab,var(--ww-color-background,#fff)20%,transparent)}}.ww\:bg-foreground,.ww\:bg-foreground\/5{background-color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-foreground\/5{background-color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)5%,transparent)}}.ww\:bg-input{background-color:var(--ww-color-input,#f9fafb)}.ww\:bg-muted{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:bg-muted-foreground\/10{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/10{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)10%,transparent)}}.ww\:bg-muted-foreground\/20{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/20{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)20%,transparent)}}.ww\:bg-muted-foreground\/60{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted-foreground\/60{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)60%,transparent)}}.ww\:bg-muted\/50{background-color:var(--ww-color-muted,#f1f5f9)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-muted\/50{background-color:color-mix(in oklab,var(--ww-color-muted,#f1f5f9)50%,transparent)}}.ww\:bg-primary{background-color:var(--ww-color-primary,#6366f1)}.ww\:bg-red-500\/10{background-color:var(--ww-color-red-500)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-red-500\/10{background-color:color-mix(in oklab,var(--ww-color-red-500)10%,transparent)}}.ww\:bg-tool-card{background-color:var(--ww-color-tool-card,#f4f4f5)}.ww\:bg-transparent{background-color:#0000}.ww\:object-cover{object-fit:cover}.ww\:p-0{padding:calc(var(--ww-spacing)*0)}.ww\:p-1{padding:calc(var(--ww-spacing)*1)}.ww\:p-1\.5{padding:calc(var(--ww-spacing)*1.5)}.ww\:p-3{padding:calc(var(--ww-spacing)*3)}.ww\:px-0{padding-inline:calc(var(--ww-spacing)*0)}.ww\:px-1\.5{padding-inline:calc(var(--ww-spacing)*1.5)}.ww\:px-2{padding-inline:calc(var(--ww-spacing)*2)}.ww\:px-3{padding-inline:calc(var(--ww-spacing)*3)}.ww\:px-4{padding-inline:calc(var(--ww-spacing)*4)}.ww\:px-6{padding-inline:calc(var(--ww-spacing)*6)}.ww\:\!py-0{padding-block:calc(var(--ww-spacing)*0)!important}.ww\:py-0\.5{padding-block:calc(var(--ww-spacing)*.5)}.ww\:py-1{padding-block:calc(var(--ww-spacing)*1)}.ww\:py-1\.5{padding-block:calc(var(--ww-spacing)*1.5)}.ww\:py-2{padding-block:calc(var(--ww-spacing)*2)}.ww\:py-2\.5{padding-block:calc(var(--ww-spacing)*2.5)}.ww\:py-3{padding-block:calc(var(--ww-spacing)*3)}.ww\:py-6{padding-block:calc(var(--ww-spacing)*6)}.ww\:py-8{padding-block:calc(var(--ww-spacing)*8)}.ww\:py-12{padding-block:calc(var(--ww-spacing)*12)}.ww\:pt-2{padding-top:calc(var(--ww-spacing)*2)}.ww\:pt-2\.5{padding-top:calc(var(--ww-spacing)*2.5)}.ww\:pt-3{padding-top:calc(var(--ww-spacing)*3)}.ww\:pr-3{padding-right:calc(var(--ww-spacing)*3)}.ww\:pb-1\.5{padding-bottom:calc(var(--ww-spacing)*1.5)}.ww\:pb-3{padding-bottom:calc(var(--ww-spacing)*3)}.ww\:pb-4{padding-bottom:calc(var(--ww-spacing)*4)}.ww\:pb-8{padding-bottom:calc(var(--ww-spacing)*8)}.ww\:pl-4{padding-left:calc(var(--ww-spacing)*4)}.ww\:text-center{text-align:center}.ww\:text-left{text-align:left}.ww\:font-\[family-name\:var\(--ww-font\)\]{font-family:var(--ww-font)}.ww\:font-mono{font-family:var(--ww-font-mono)}.ww\:text-base{font-size:var(--ww-text-base);line-height:var(--tw-leading,var(--ww-text-base--line-height))}.ww\:text-lg{font-size:var(--ww-text-lg);line-height:var(--tw-leading,var(--ww-text-lg--line-height))}.ww\:text-sm{font-size:var(--ww-text-sm);line-height:var(--tw-leading,var(--ww-text-sm--line-height))}.ww\:text-xs{font-size:var(--ww-text-xs);line-height:var(--tw-leading,var(--ww-text-xs--line-height))}.ww\:text-\[10px\]{font-size:10px}.ww\:text-\[11px\]{font-size:11px}.ww\:leading-normal{--tw-leading:var(--ww-leading-normal);line-height:var(--ww-leading-normal)}.ww\:font-medium{--tw-font-weight:var(--ww-font-weight-medium);font-weight:var(--ww-font-weight-medium)}.ww\:font-semibold{--tw-font-weight:var(--ww-font-weight-semibold);font-weight:var(--ww-font-weight-semibold)}.ww\:tracking-wide{--tw-tracking:var(--ww-tracking-wide);letter-spacing:var(--ww-tracking-wide)}.ww\:tracking-wider{--tw-tracking:var(--ww-tracking-wider);letter-spacing:var(--ww-tracking-wider)}.ww\:tracking-widest{--tw-tracking:var(--ww-tracking-widest);letter-spacing:var(--ww-tracking-widest)}.ww\:break-words{overflow-wrap:break-word}.ww\:break-all{word-break:break-all}.ww\:whitespace-pre-wrap{white-space:pre-wrap}.ww\:text-background{color:var(--ww-color-background,#fff)}.ww\:text-foreground,.ww\:text-foreground\/50{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/50{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)50%,transparent)}}.ww\:text-foreground\/60{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/60{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)60%,transparent)}}.ww\:text-foreground\/80{color:var(--ww-color-foreground,#1f2937)}@supports (color:color-mix(in lab, red, red)){.ww\:text-foreground\/80{color:color-mix(in oklab,var(--ww-color-foreground,#1f2937)80%,transparent)}}.ww\:text-muted-foreground{color:var(--ww-color-muted-foreground,#6b7280)}.ww\:text-primary{color:var(--ww-color-primary,#6366f1)}.ww\:text-primary-foreground{color:var(--ww-color-primary-foreground,#1f2937)}.ww\:text-red-400{color:var(--ww-color-red-400)}.ww\:uppercase{text-transform:uppercase}.ww\:opacity-0{opacity:0}.ww\:opacity-100{opacity:1}.ww\: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)}.ww\:shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ww\:shadow-sm{--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)}.ww\: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)}.ww\:ring-blue-400\/70{--tw-ring-color:var(--ww-color-blue-400)}@supports (color:color-mix(in lab, red, red)){.ww\:ring-blue-400\/70{--tw-ring-color:color-mix(in oklab,var(--ww-color-blue-400)70%,transparent)}}.ww\:ring-offset-2{--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)}.ww\:ring-offset-background{--tw-ring-offset-color:var(--ww-color-background,#fff)}.ww\:transition-\[grid-template-rows\,opacity\]{transition-property:grid-template-rows,opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\: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(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:duration-150{--tw-duration:.15s;transition-duration:.15s}.ww\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ww\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ww\:ease-out{--tw-ease:var(--ww-ease-out);transition-timing-function:var(--ww-ease-out)}.ww\:outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.ww\:group-hover\:opacity-0:is(:where(.ww\:group):hover *){opacity:0}.ww\:group-hover\:opacity-100:is(:where(.ww\:group):hover *){opacity:1}}.ww\:group-\[\.is-assistant\]\:text-foreground:is(:where(.ww\:group).is-assistant *){color:var(--ww-color-foreground,#1f2937)}.ww\:group-\[\.is-user\]\:ml-auto:is(:where(.ww\:group).is-user *){margin-left:auto}.ww\:group-\[\.is-user\]\:rounded-lg:is(:where(.ww\:group).is-user *){border-radius:var(--ww-radius-lg)}.ww\:group-\[\.is-user\]\:bg-user-bubble:is(:where(.ww\:group).is-user *){background-color:var(--ww-color-user-bubble,#f4f4f4)}.ww\:group-\[\.is-user\]\:px-4:is(:where(.ww\:group).is-user *){padding-inline:calc(var(--ww-spacing)*4)}.ww\:group-\[\.is-user\]\:py-3:is(:where(.ww\:group).is-user *){padding-block:calc(var(--ww-spacing)*3)}.ww\:group-\[\.is-user\]\:text-primary-foreground:is(:where(.ww\:group).is-user *){color:var(--ww-color-primary-foreground,#1f2937)}.ww\:placeholder\:text-muted-foreground::placeholder{color:var(--ww-color-muted-foreground,#6b7280)}@media (hover:hover){.ww\:hover\:border-primary\/30:hover{border-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:border-primary\/30:hover{border-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)30%,transparent)}}.ww\:hover\:bg-accent:hover{background-color:var(--ww-color-accent,#f3f4f6)}.ww\:hover\:bg-foreground:hover{background-color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:bg-muted:hover{background-color:var(--ww-color-muted,#f1f5f9)}.ww\:hover\:bg-muted-foreground\/10:hover{background-color:var(--ww-color-muted-foreground,#6b7280)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-muted-foreground\/10:hover{background-color:color-mix(in oklab,var(--ww-color-muted-foreground,#6b7280)10%,transparent)}}.ww\:hover\:bg-muted\/50:hover{background-color:var(--ww-color-muted,#f1f5f9)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--ww-color-muted,#f1f5f9)50%,transparent)}}.ww\:hover\:bg-primary\/90:hover{background-color:var(--ww-color-primary,#6366f1)}@supports (color:color-mix(in lab, red, red)){.ww\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--ww-color-primary,#6366f1)90%,transparent)}}.ww\:hover\:text-accent-foreground:hover{color:var(--ww-color-accent-foreground,#1f2937)}.ww\:hover\:text-foreground:hover{color:var(--ww-color-foreground,#1f2937)}.ww\:hover\:text-red-300:hover{color:var(--ww-color-red-300)}.ww\:hover\:underline:hover{text-decoration-line:underline}}.ww\:disabled\:pointer-events-none:disabled{pointer-events:none}.ww\:disabled\:opacity-30:disabled{opacity:.3}.ww\:disabled\:opacity-40:disabled{opacity:.4}.ww\:disabled\:opacity-50:disabled{opacity:.5}.ww\:\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:calc(var(--ww-spacing)*0)}.ww\:\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:calc(var(--ww-spacing)*0)}}@keyframes ww-fade-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes ww-fade-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-4px)}}@keyframes ww-pulse{0%,80%,to{opacity:.3;transform:scale(.8)}40%{opacity:1;transform:scale(1)}}[data-waniwani-chat] ::-webkit-scrollbar{width:8px}[data-waniwani-chat] ::-webkit-scrollbar-track{background:0 0}[data-waniwani-chat] ::-webkit-scrollbar-thumb{background:var(--ww-color-border);border-radius:9999px}[data-waniwani-chat] ::-webkit-scrollbar-thumb:hover{background:var(--ww-color-muted-foreground)}[data-waniwani-chat] *{scrollbar-width:thin;scrollbar-color:var(--ww-color-border)transparent}[data-waniwani-chat]{--ww-color-background:var(--ww-bg,#fff);--ww-color-foreground:var(--ww-text,#1f2937);--ww-color-primary:var(--ww-primary,#6366f1);--ww-color-primary-foreground:var(--ww-primary-fg,#1f2937);--ww-color-muted-foreground:var(--ww-muted,#6b7280);--ww-color-border:var(--ww-border,#e5e7eb);--ww-color-input:var(--ww-input-bg,#f9fafb);--ww-color-accent:var(--ww-assistant-bubble,#f3f4f6);--ww-color-accent-foreground:var(--ww-text,#1f2937);--ww-color-user-bubble:var(--ww-user-bubble,#f4f4f4);--ww-color-card:var(--ww-bg,#fff);--ww-color-card-foreground:var(--ww-text,#1f2937);--ww-color-card-header:var(--ww-header-bg,#fff);--ww-color-card-header-foreground:var(--ww-header-text,#1f2937);--ww-color-status:var(--ww-status,#22c55e);--ww-color-tool-card:var(--ww-tool-card,#f4f4f5);--ww-radius:var(--ww-radius,16px);--ww-font-sans:var(--ww-font,system-ui,-apple-system,"Segoe UI",sans-serif)}.dark [data-waniwani-chat],[data-waniwani-chat].dark{--ww-color-background:var(--ww-bg,#212121);--ww-color-foreground:var(--ww-text,#ececec);--ww-color-primary:var(--ww-primary,#6366f1);--ww-color-primary-foreground:var(--ww-primary-fg,#fff);--ww-color-muted-foreground:var(--ww-muted,#8e8ea0);--ww-color-border:var(--ww-border,#444);--ww-color-input:var(--ww-input-bg,#2f2f2f);--ww-color-accent:var(--ww-assistant-bubble,#2f2f2f);--ww-color-accent-foreground:var(--ww-text,#ececec);--ww-color-user-bubble:var(--ww-user-bubble,#303030);--ww-color-card:var(--ww-bg,#212121);--ww-color-card-foreground:var(--ww-text,#ececec);--ww-color-card-header:var(--ww-header-bg,#1e1e1e);--ww-color-card-header-foreground:var(--ww-header-text,#ececec);--ww-color-status:var(--ww-status,#22c55e);--ww-color-tool-card:var(--ww-tool-card,#262626)}[data-waniwani-chat] [data-streamdown=table-wrapper]{flex-direction:column;gap:.5rem;margin-top:1rem;margin-bottom:1rem;display:flex}[data-waniwani-chat] [data-streamdown=table-wrapper]>div:first-child:has(button){justify-content:flex-end;align-items:center;gap:.25rem;display:flex}[data-waniwani-chat] [data-streamdown=table-wrapper]>div:last-child{overflow-x:auto}[data-waniwani-chat] [data-streamdown=table]{border-collapse:collapse;border:1px solid var(--ww-color-border);border-radius:.75rem;width:100%;overflow:hidden}[data-waniwani-chat] [data-streamdown=table-header]{background-color:var(--ww-color-accent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=table-header]{background-color:color-mix(in srgb,var(--ww-color-accent)80%,transparent)}}[data-waniwani-chat] [data-streamdown=table-body]{background-color:var(--ww-color-accent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=table-body]{background-color:color-mix(in srgb,var(--ww-color-accent)40%,transparent)}}[data-waniwani-chat] [data-streamdown=table-body]>tr+tr{border-top:1px solid var(--ww-color-border)}[data-waniwani-chat] [data-streamdown=table-row]{border-bottom:1px solid var(--ww-color-border)}[data-waniwani-chat] [data-streamdown=table-header-cell]{white-space:nowrap;text-align:left;padding:.5rem 1rem;font-size:.875rem;font-weight:600}[data-waniwani-chat] [data-streamdown=table-cell]{padding:.5rem 1rem;font-size:.875rem}[data-waniwani-chat] [data-streamdown=link]{color:var(--ww-color-primary);overflow-wrap:anywhere;cursor:pointer;font-weight:500;text-decoration:underline}[data-waniwani-chat] [data-streamdown=link-safety-modal]{z-index:50;background-color:var(--ww-color-background);justify-content:center;align-items:center;display:flex;position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=link-safety-modal]{background-color:color-mix(in srgb,var(--ww-color-background)50%,transparent)}}[data-waniwani-chat] [data-streamdown=link-safety-modal]{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div{border:1px solid var(--ww-color-border);background-color:var(--ww-color-background);width:100%;max-width:28rem;color:var(--ww-color-foreground);border-radius:.75rem;flex-direction:column;gap:1rem;margin:0 1rem;padding:1.5rem;display:flex;position:relative;box-shadow:0 10px 25px #0000001a}[data-waniwani-chat] [data-streamdown=link-safety-modal] button{cursor:pointer}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>button:first-child{color:var(--ww-color-muted-foreground);background:0 0;border:none;border-radius:.375rem;padding:.25rem;transition:background-color .15s,color .15s;position:absolute;top:1rem;right:1rem}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>button:first-child:hover{background-color:var(--ww-color-accent);color:var(--ww-color-foreground)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:first-of-type{flex-direction:column;gap:.5rem;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:first-of-type>div{align-items:center;gap:.5rem;font-size:1.125rem;font-weight:600;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:first-of-type>p{color:var(--ww-color-muted-foreground);font-size:.875rem}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:nth-child(3){word-break:break-all;background-color:var(--ww-color-accent);border-radius:.375rem;max-height:8rem;padding:.75rem;font-family:ui-monospace,monospace;font-size:.875rem;overflow-y:auto}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child{gap:.5rem;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button{border:none;border-radius:.375rem;flex:1;justify-content:center;align-items:center;gap:.5rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:background-color .15s;display:flex}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:first-child{border:1px solid var(--ww-color-border);background-color:var(--ww-color-background);color:var(--ww-color-foreground)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:first-child:hover{background-color:var(--ww-color-accent)}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:last-child{background-color:var(--ww-color-primary);color:#fff}[data-waniwani-chat] [data-streamdown=link-safety-modal]>div>div:last-child>button:last-child:hover{opacity:.9}[data-waniwani-chat] [data-streamdown=ordered-list]{white-space:normal;list-style-type:decimal;list-style-position:inside}[data-waniwani-chat] li [data-streamdown=ordered-list]{padding-left:1.5rem}[data-waniwani-chat] [data-streamdown=unordered-list]{white-space:normal;list-style-type:disc;list-style-position:inside}[data-waniwani-chat] li [data-streamdown=unordered-list]{padding-left:1.5rem}[data-waniwani-chat] [data-streamdown=list-item]{padding-top:.25rem;padding-bottom:.25rem}[data-waniwani-chat] [data-streamdown=list-item]>p{display:inline}[data-waniwani-chat] [data-streamdown=inline-code]{background-color:var(--ww-color-accent);border-radius:.25rem;padding:.125rem .375rem;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:.875rem}[data-waniwani-chat] [data-streamdown=heading-1]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.875rem;font-weight:600;line-height:2.25rem}[data-waniwani-chat] [data-streamdown=heading-2]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.5rem;font-weight:600;line-height:2rem}[data-waniwani-chat] [data-streamdown=heading-3]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.25rem;font-weight:600;line-height:1.75rem}[data-waniwani-chat] [data-streamdown=heading-4]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1.125rem;font-weight:600;line-height:1.75rem}[data-waniwani-chat] [data-streamdown=heading-5]{margin-top:1.5rem;margin-bottom:.5rem;font-size:1rem;font-weight:600;line-height:1.5rem}[data-waniwani-chat] [data-streamdown=heading-6]{margin-top:1.5rem;margin-bottom:.5rem;font-size:.875rem;font-weight:600;line-height:1.25rem}[data-waniwani-chat] [data-streamdown=blockquote]{border-left:4px solid var(--ww-color-muted-foreground);margin-top:1rem;margin-bottom:1rem}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=blockquote]{border-left:4px solid color-mix(in srgb,var(--ww-color-muted-foreground)30%,transparent)}}[data-waniwani-chat] [data-streamdown=blockquote]{color:var(--ww-color-muted-foreground);padding-left:1rem;font-style:italic}[data-waniwani-chat] [data-streamdown=horizontal-rule]{border-color:var(--ww-color-border);margin-top:1.5rem;margin-bottom:1.5rem}[data-waniwani-chat] [data-streamdown=strong]{font-weight:600}[data-waniwani-chat] [data-streamdown=image-wrapper]{margin-top:1rem;margin-bottom:1rem;display:inline-block;position:relative}[data-waniwani-chat] [data-streamdown=image]{border-radius:.5rem;max-width:100%}[data-waniwani-chat] [data-streamdown=code-block]{border:1px solid var(--ww-color-border);border-radius:.75rem;width:100%;margin-top:1rem;margin-bottom:1rem;overflow:hidden}[data-waniwani-chat] [data-streamdown=code-block-header]{background-color:var(--ww-color-accent);justify-content:space-between;align-items:center;display:flex}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat] [data-streamdown=code-block-header]{background-color:color-mix(in srgb,var(--ww-color-accent)80%,transparent)}}[data-waniwani-chat] [data-streamdown=code-block-header]{color:var(--ww-color-muted-foreground);padding:.75rem;font-size:.75rem}[data-waniwani-chat] [data-streamdown=code-block-body]{padding:1rem;font-size:.875rem;overflow-x:auto}[data-waniwani-chat] [data-streamdown=code-block-copy-button],[data-waniwani-chat] [data-streamdown=code-block-download-button]{cursor:pointer;color:var(--ww-color-muted-foreground);background:0 0;border:none;padding:.25rem;transition:color .15s}[data-waniwani-chat] [data-streamdown=code-block-copy-button]:hover,[data-waniwani-chat] [data-streamdown=code-block-download-button]:hover{color:var(--ww-color-foreground)}[data-waniwani-chat] [data-streamdown=mermaid-block]{border:1px solid var(--ww-color-border);border-radius:.75rem;height:auto;margin-top:1rem;margin-bottom:1rem;padding:1rem;position:relative}[data-waniwani-chat] [data-streamdown=mermaid]{width:100%;height:100%}@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-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-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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
function oe(){return typeof window<"u"&&"openai"in window?"openai":"mcp-apps"}function yt(){return oe()==="openai"}function Tt(){return oe()==="mcp-apps"}var _="__start__",C="__end__",Se=Symbol.for("waniwani.flow.interrupt"),ve=Symbol.for("waniwani.flow.widget");function Re(e,t){let n=t?.context,r=[];for(let[o,i]of Object.entries(e))if(typeof i=="object"&&i!==null&&"question"in i){let s=i;r.push({question:s.question,field:o,suggestions:s.suggestions,context:s.context,validate:s.validate})}return{__type:Se,questions:r,context:n}}function xe(e,t){return{__type:ve,tool:typeof e=="string"?e:e.id,...t}}function Ee(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===Se}function Ie(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===ve}import{z as
|
|
1
|
+
function oe(){return typeof window<"u"&&"openai"in window?"openai":"mcp-apps"}function yt(){return oe()==="openai"}function Tt(){return oe()==="mcp-apps"}var _="__start__",C="__end__",Se=Symbol.for("waniwani.flow.interrupt"),ve=Symbol.for("waniwani.flow.widget");function Re(e,t){let n=t?.context,r=[];for(let[o,i]of Object.entries(e))if(typeof i=="object"&&i!==null&&"question"in i){let s=i;r.push({question:s.question,field:o,suggestions:s.suggestions,context:s.context,validate:s.validate})}return{__type:Se,questions:r,context:n}}function xe(e,t){return{__type:ve,tool:typeof e=="string"?e:e.id,...t}}function Ee(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===Se}function Ie(e){return typeof e=="object"&&e!==null&&"__type"in e&&e.__type===ve}import{z as A}from"zod";var ie="waniwani/client";function H(e){if(typeof e=="object"&&e!==null)return e[ie]}function be(e,t,n){return{track(r){return e.track({...r,meta:{...t,...r.meta}})},identify(r,o){return e.identify(r,o,t)},kb:e.kb,_config:n}}function K(e,t){for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0)return r}}var kt=["waniwani/sessionId","openai/sessionId","openai/session","sessionId","conversationId","mcp-session-id"],St=["waniwani/requestId","openai/requestId","requestId","mcp/requestId"],vt=["waniwani/traceId","openai/traceId","traceId","mcp/traceId","openai/requestId","requestId"],Rt=["waniwani/userId","openai/userId","externalUserId","userId","actorId"],xt=["correlationId","openai/requestId"],_e="waniwani/flow";function F(e){return e?K(e,kt):void 0}function Ce(e){return e?K(e,St):void 0}function Fe(e){return e?K(e,vt):void 0}function Pe(e){return e?K(e,Rt):void 0}function We(e){return e?K(e,xt):void 0}var Et=[{key:"waniwani/sessionId",source:"chatbar"},{key:"openai/sessionId",source:"chatgpt"},{key:"openai/session",source:"chatgpt"}];function j(e){if(!e)return;let t=e["waniwani/source"];if(typeof t=="string"&&t.length>0)return t;for(let{key:n,source:r}of Et){let o=e[n];if(typeof o=="string"&&o.length>0)return r}}function Ae(e){let t=e._zod?.def;return t?.type==="object"&&t.shape?t.shape:null}function $(e,t){let n=t.split("."),r=e;for(let o of n){if(r==null||typeof r!="object")return;r=r[o]}return r}function It(e,t,n){let r=t.split("."),o=r.pop();if(!o)return;let i=e;for(let s of r)(i[s]==null||typeof i[s]!="object"||Array.isArray(i[s]))&&(i[s]={}),i=i[s];i[o]=n}function Me(e,t){let n=t.split("."),r=n.pop();if(!r)return;let o=e;for(let i of n){if(o==null||typeof o!="object")return;o=o[i]}o!=null&&typeof o=="object"&&delete o[r]}function V(e){let t={};for(let[n,r]of Object.entries(e))n.includes(".")?It(t,n,r):r!==null&&typeof r=="object"&&!Array.isArray(r)?t=W(t,{[n]:r}):t[n]=r;return t}function W(e,t){let n={...e};for(let[r,o]of Object.entries(t))o!==null&&typeof o=="object"&&!Array.isArray(o)&&n[r]!==null&&typeof n[r]=="object"&&!Array.isArray(n[r])?n[r]=W(n[r],o):n[r]=o;return n}function se(e){return e!=null&&e!==""}async function N(e,t){return e.type==="direct"?e.to:e.condition(t)}function Ne(e,t,n,r){if(e.every(c=>se($(r,c.field))))return null;let o=e.filter(c=>!se($(r,c.field))),i=o.length===1,s=o[0];return{content:i&&s?{status:"interrupt",question:s.question,field:s.field,...s.suggestions?{suggestions:s.suggestions}:{},...s.context||t?{context:s.context??t}:{}}:{status:"interrupt",questions:o,...t?{context:t}:{}},flowTokenContent:{step:n,state:r,...i&&s?{field:s.field}:{}}}}async function L(e,t,n,r,o,i,s,a){let c=e,d={...t},p=[],u=50,g=0;for(;g++<u;){if(c===C)return{content:{status:"complete"},flowTokenContent:{state:d},nodesVisited:p};let y=n.get(c);if(!y)return{content:{status:"error",error:`Unknown node: "${c}"`},nodesVisited:p};a?.get(c)?.hideFromFunnel||p.push(c);try{let w=await y({state:d,meta:i,interrupt:Re,showWidget:xe,waniwani:s});if(Ee(w)){for(let f of w.questions)f.validate&&o.set(`${c}:${f.field}`,f.validate);let R=Ne(w.questions,w.context,c,d);if(R)return{...R,nodesVisited:p};for(let f of w.questions){let E=o.get(`${c}:${f.field}`);if(E)try{let S=$(d,f.field),x=await E(S);x&&typeof x=="object"&&(d=W(d,x))}catch(S){let x=S instanceof Error?S.message:String(S);Me(d,f.field);let b=w.questions.map(M=>M.field===f.field?{...M,context:M.context?`ERROR: ${x}
|
|
2
2
|
|
|
3
|
-
${
|
|
4
|
-
`)}function ce(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function qe(e){let t=Be(e),n=ce(t.waniwani)?t.waniwani:{};return e.meta({...t,waniwani:{...n,redacted:!0}})}function Mt(e){let n=Be(e).waniwani;return ce(n)&&n.redacted===!0}function Be(e){let t=e.meta;if(typeof t!="function")return{};let n=t.call(e);return ce(n)?n:{}}function He(e){if(!e)return[];let t=[];for(let[n,r]of Object.entries(e))Mt(r)&&t.push(n);return t}var z="waniwani/redactedStateUpdateFields";function Nt(e){let t=e.omitIntentPII?" Do not include PII (names, emails, phones, addresses, IDs, ages, birthdates) \u2014 summarize abstractly.":"";return{action:
|
|
5
|
-
${s}`,c=e.store??new q,d=new Map;async function
|
|
6
|
-
`)}var O=class{nodes=new Map;edges=new Map;nodeOptions=new Map;config;constructor(t){this.config=t}addNode(t,n,r){if(t===_||t===C)throw new Error(`"${t}" is a reserved name and cannot be used as a node name`);if(this.nodes.has(t))throw new Error(`Node "${t}" already exists`);return this.nodes.set(t,n),r&&this.nodeOptions.set(t,r),this}addEdge(t,n){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge. Use addConditionalEdge for branching.`);return this.edges.set(t,{type:"direct",to:n}),this}addConditionalEdge(t,n){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge.`);return this.edges.set(t,{type:"conditional",condition:n}),this}graph(){return ze(this.nodes,this.edges)}compile(t){this.validate();let n=new Map(this.nodes),r=new Map(this.edges);return Ve({config:this.config,nodes:n,edges:r,store:t?.store,graph:()=>ze(n,r),nodeOptions:new Map(this.nodeOptions)})}validate(){if(!this.edges.has(_))throw new Error('Flow must have an entry point. Add an edge from START: .addEdge(START, "first_node")');let t=this.edges.get(_);if(t?.type==="direct"&&t.to!==C&&!this.nodes.has(t.to))throw new Error(`START edge references non-existent node: "${t.to}"`);for(let[n,r]of this.edges){if(n!==_&&!this.nodes.has(n))throw new Error(`Edge from non-existent node: "${n}"`);if(r.type==="direct"&&r.to!==C&&!this.nodes.has(r.to))throw new Error(`Edge from "${n}" references non-existent node: "${r.to}"`)}for(let[n]of this.nodes)if(!this.edges.has(n))throw new Error(`Node "${n}" has no outgoing edge. Add one with .addEdge("${n}", ...) or .addConditionalEdge("${n}", ...)`)}};function Ye(e){return new O(e)}function de(e){let t=e.content;return JSON.parse(t[0]?.text??"")}async function Ge(e,t){let n=t?.stateStore,r=[],o=`test-session-${Math.random().toString(36).slice(2,10)}`,i={registerTool:(...d)=>{r.push(d)}};await e.register(i);let s=r[0]?.[2];if(!s)throw new Error(`Flow "${e.name}" did not register a handler`);let a={_meta:{sessionId:o}};async function c(d){return{...d,decodedState:n?await n.get(o):null}}return{async start(d,u,p){let g=await s({action:"start",intent:d,...p?{context:p}:{},...u?{stateUpdates:u}:{}},a);return c(de(g))},async continueWith(d){let u=await s({action:"continue",...d?{stateUpdates:d}:{}},a);return c(de(u))},async resetWith(d){let u=await s({action:"reset",stateUpdates:d},a);return c(de(u))},async lastState(){return n?n.get(o):null}}}var Y="text/html+skybridge",G="text/html;profile=mcp-app",Je=async(e,t)=>{let n=e.endsWith("/")?e.slice(0,-1):e;return await(await fetch(`${n}${t}`)).text()};function Ze(e){return{"openai/widgetDescription":e.description,"openai/widgetPrefersBorder":e.prefersBorder,"openai/widgetDomain":e.widgetDomain,...e.widgetCSP&&{"openai/widgetCSP":e.widgetCSP}}}function Xe(e){let t=e.widgetCSP?{connectDomains:e.widgetCSP.connect_domains,resourceDomains:e.widgetCSP.resource_domains,frameDomains:e.widgetCSP.frame_domains,redirectDomains:e.widgetCSP.redirect_domains}:void 0;return{ui:{...t&&{csp:t},...e.widgetDomain&&{domain:e.widgetDomain},...e.prefersBorder!==void 0&&{prefersBorder:e.prefersBorder}}}}function ue(e){return{...e.openaiTemplateUri&&{"openai/outputTemplate":e.openaiTemplateUri},"openai/toolInvocation/invoking":e.invoking,"openai/toolInvocation/invoked":e.invoked,"openai/widgetAccessible":!0,"openai/resultCanProduceWidget":!0,...e.mcpTemplateUri&&{ui:{resourceUri:e.mcpTemplateUri,...e.autoHeight&&{autoHeight:!0}}},...e.mcpTemplateUri&&{"ui/resourceUri":e.mcpTemplateUri}}}function Qe(e){let{id:t,title:n,description:r,baseUrl:o,htmlPath:i,widgetDomain:s,prefersBorder:a=!0,autoHeight:c=!0}=e,d=e.widgetCSP??{connect_domains:[o],resource_domains:[o]};if(process.env.NODE_ENV==="development")try{let{hostname:T}=new URL(o);(T==="localhost"||T==="127.0.0.1")&&(d={...d,connect_domains:[...d.connect_domains||[],`ws://${T}:*`,`wss://${T}:*`],resource_domains:[...d.resource_domains||[],`http://${T}:*`]})}catch{}let u=`ui://widgets/apps-sdk/${t}.html`,p=`ui://widgets/ext-apps/${t}.html`,g=null,y=()=>(g||(g=Je(o,i)),g),l=r;async function w(T){let R=await y();T.registerResource(`${t}-openai-widget`,u,{title:n,description:l,mimeType:Y,_meta:{"openai/widgetDescription":l,"openai/widgetPrefersBorder":a}},async k=>({contents:[{uri:k.href,mimeType:Y,text:R,_meta:Ze({description:l,prefersBorder:a,widgetDomain:s,widgetCSP:d})}]})),T.registerResource(`${t}-mcp-widget`,p,{title:n,description:l,mimeType:G,_meta:{ui:{prefersBorder:a}}},async k=>({contents:[{uri:k.href,mimeType:G,text:R,_meta:Xe({description:l,prefersBorder:a,widgetDomain:s,widgetCSP:d})}]}))}return{id:t,title:n,description:r,openaiUri:u,mcpUri:p,autoHeight:c,register:w}}function Ut(e,t){let{resource:n,description:r,inputSchema:o,annotations:i,autoInjectResultText:s=!0}=e,a=e.id??n?.id,c=e.title??n?.title;if(!a)throw new Error("createTool: `id` is required when no resource is provided");if(!c)throw new Error("createTool: `title` is required when no resource is provided");let d=n?ue({openaiTemplateUri:n.openaiUri,mcpTemplateUri:n.mcpUri,invoking:e.invoking??"Loading...",invoked:e.invoked??"Loaded",autoHeight:n.autoHeight}):void 0;return{id:a,title:c,description:r,async register(u){u.registerTool(a,{title:c,description:r,inputSchema:o,annotations:i,...d&&{_meta:d}},(async(p,g)=>{let y=g,l=y._meta??{},w=H(y),T=await t(p,{extra:{_meta:l},waniwani:w});return n&&T.data?{content:[{type:"text",text:T.text}],structuredContent:T.data,_meta:{...d,...l,...s===!1?{"waniwani/autoInjectResultText":!1}:{}}}:{content:[{type:"text",text:T.text}],...T.data?{structuredContent:T.data}:{},...s===!1?{_meta:{"waniwani/autoInjectResultText":!1}}:{}}}))}}}async function Dt(e,t){await Promise.all(t.map(n=>n.register(e)))}var J=class extends Error{constructor(n,r){super(n);this.status=r;this.name="WaniWaniError"}};var Ot="@waniwani/sdk";function et(e){let{apiUrl:t,apiKey:n}=e;function r(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}async function o(i,s,a){let c=r(),d=`${t.replace(/\/$/,"")}${s}`,u={Authorization:`Bearer ${c}`,"X-WaniWani-SDK":Ot},p={method:i,headers:u};a!==void 0&&(u["Content-Type"]="application/json",p.body=JSON.stringify(a));let g=await fetch(d,p);if(!g.ok){let l=await g.text().catch(()=>"");throw new J(l||`KB API error: HTTP ${g.status}`,g.status)}return(await g.json()).data}return{async ingest(i){return o("POST","/api/mcp/kb/ingest",{files:i})},async search(i,s){return o("POST","/api/mcp/kb/search",{query:i,...s})},async sources(){return o("GET","/api/mcp/kb/sources")}}}var Kt="@waniwani/sdk";function X(e,t={}){let n=t.now??(()=>new Date),r=t.generateId??tt,o=Lt(e),i=Z(e.meta),s=Z(e.metadata),a=qt(e,i),c=I(e.eventId)??r(),d=Bt(e.timestamp,n),u=I(e.source)??j(i)??t.source??Kt,p=pe(e)?{...e}:void 0,g={...s};return Object.keys(i).length>0&&(g.meta=i),p&&(g.rawLegacy=p),{id:c,type:"mcp.event",name:o,source:u,timestamp:d,correlation:a,properties:jt(e,o),metadata:g,rawLegacy:p}}function tt(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`evt_${crypto.randomUUID()}`:`evt_${Math.random().toString(36).slice(2,10)}_${Date.now().toString(36)}`}function jt(e,t){if(!pe(e))return Z(e.properties);let n=$t(e,t),r=Z(e.properties);return{...n,...r}}function $t(e,t){switch(t){case"tool.called":{let n={};return I(e.toolName)&&(n.name=e.toolName),I(e.toolType)&&(n.type=e.toolType),n}case"quote.succeeded":{let n={};return typeof e.quoteAmount=="number"&&(n.amount=e.quoteAmount),I(e.quoteCurrency)&&(n.currency=e.quoteCurrency),n}case"link.clicked":{let n={};return I(e.linkUrl)&&(n.url=e.linkUrl),n}case"purchase.completed":{let n={};return typeof e.purchaseAmount=="number"&&(n.amount=e.purchaseAmount),I(e.purchaseCurrency)&&(n.currency=e.purchaseCurrency),n}default:return{}}}function Lt(e){return pe(e)?e.eventType:e.event}function qt(e,t){let n=I(e.requestId)??Ce(t),r=I(e.sessionId)??F(t),o=I(e.traceId)??Fe(t),i=I(e.externalUserId)??Pe(t),s=I(e.correlationId)??We(t)??n,a={};return r&&(a.sessionId=r),o&&(a.traceId=o),n&&(a.requestId=n),s&&(a.correlationId=s),i&&(a.externalUserId=i),a}function Bt(e,t){if(e instanceof Date)return e.toISOString();if(typeof e=="string"){let n=new Date(e);if(!Number.isNaN(n.getTime()))return n.toISOString()}return t().toISOString()}function Z(e){return!e||typeof e!="object"||Array.isArray(e)?{}:e}function I(e){if(typeof e=="string"&&e.trim().length!==0)return e}function pe(e){return"eventType"in e}var Ht="/api/mcp/events/v2/batch";var nt="@waniwani/sdk",Vt=new Set([401,403]),zt=new Set([408,425,429,500,502,503,504]);function rt(e){return new le(e)}var le=class{endpointUrl;flushIntervalMs;maxBatchSize;maxBufferSize;maxRetries;retryBaseDelayMs;retryMaxDelayMs;shutdownTimeoutMs;sdkVersion;fetchFn;logger;now;sleep;apiKey;buffer=[];flushTimer;flushScheduled=!1;flushScheduledTimer;flushInFlight;inFlightCount=0;isStopped=!1;isShuttingDown=!1;constructor(t){this.endpointUrl=Jt(t.apiUrl,t.endpointPath??Ht),this.flushIntervalMs=t.flushIntervalMs??1e3,this.maxBatchSize=t.maxBatchSize??20,this.maxBufferSize=t.maxBufferSize??1e3,this.maxRetries=t.maxRetries??3,this.retryBaseDelayMs=t.retryBaseDelayMs??200,this.retryMaxDelayMs=t.retryMaxDelayMs??2e3,this.shutdownTimeoutMs=t.shutdownTimeoutMs??2e3,this.fetchFn=t.fetchFn??fetch,this.logger=t.logger??console,this.now=t.now??(()=>new Date),this.sleep=t.sleep??(n=>new Promise(r=>setTimeout(r,n))),this.apiKey=t.apiKey,this.sdkVersion=t.sdkVersion,this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flush()},this.flushIntervalMs))}enqueue(t){if(this.isStopped||this.isShuttingDown){this.logger.warn("[WaniWani] Tracking transport is stopped, dropping event %s",t.id);return}if(this.buffer.length>=this.maxBufferSize){let n=this.buffer.length-this.maxBufferSize+1;this.buffer.splice(0,n),this.logger.warn("[WaniWani] Tracking buffer overflow, dropped %d oldest event(s)",n)}if(this.buffer.push(t),this.buffer.length>=this.maxBatchSize){this.flush();return}this.scheduleMicroFlush()}pendingEvents(){return this.buffer.length+this.inFlightCount}async flush(){return this.flushInFlight?this.flushInFlight:(this.flushInFlight=this.flushLoop().finally(()=>{this.flushInFlight=void 0}),this.flushInFlight)}async shutdown(t){this.isShuttingDown=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=void 0),this.flushScheduledTimer&&(clearTimeout(this.flushScheduledTimer),this.flushScheduledTimer=void 0,this.flushScheduled=!1);let n=t?.timeoutMs??this.shutdownTimeoutMs,r=this.flush();if(!Number.isFinite(n)||n<=0)return await r,this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()};let o=Symbol("shutdown-timeout");return await Promise.race([r.then(()=>"flushed"),this.sleep(n).then(()=>o)])===o?(this.isStopped=!0,{timedOut:!0,pendingEvents:this.pendingEvents()}):(this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()})}scheduleMicroFlush(){this.flushScheduled||(this.flushScheduled=!0,this.flushScheduledTimer=setTimeout(()=>{this.flushScheduledTimer=void 0,this.flushScheduled=!1,this.flush()},0))}async flushLoop(){for(;this.buffer.length>0&&!this.isStopped;){let t=this.buffer.splice(0,this.maxBatchSize);await this.sendBatchWithRetry(t)}}async sendBatchWithRetry(t){let n=0,r=t;for(;r.length>0&&!this.isStopped;){this.inFlightCount=r.length;let o=await this.sendBatchOnce(r);switch(this.inFlightCount=0,o.kind){case"success":return;case"auth":this.stopTransportForAuthFailure(o.status,r.length);return;case"permanent":this.logger.error("[WaniWani] Dropping %d event(s) after permanent failure: %s",r.length,o.reason);return;case"retryable":if(n>=this.maxRetries){this.logger.error("[WaniWani] Dropping %d event(s) after retry exhaustion: %s",r.length,o.reason);return}await this.sleep(this.backoffDelayMs(n)),n+=1;continue;case"partial":if(o.permanent.length>0&&this.logger.error("[WaniWani] Dropping %d event(s) rejected as permanent",o.permanent.length),o.retryable.length===0)return;if(n>=this.maxRetries){this.logger.error("[WaniWani] Dropping %d retryable event(s) after retry exhaustion",o.retryable.length);return}r=o.retryable,await this.sleep(this.backoffDelayMs(n)),n+=1;continue}}}async sendBatchOnce(t){let n;try{n=await this.fetchFn(this.endpointUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-WaniWani-SDK":nt},body:JSON.stringify(this.makeBatchRequest(t))})}catch(i){return{kind:"retryable",reason:Zt(i)}}if(Vt.has(n.status))return{kind:"auth",status:n.status};if(zt.has(n.status))return{kind:"retryable",reason:`HTTP ${n.status}`};if(!n.ok)return{kind:"permanent",reason:`HTTP ${n.status}`};let r=await Gt(n);if(!r?.rejected||r.rejected.length===0)return{kind:"success"};let o=this.classifyRejectedEvents(t,r.rejected);return o.retryable.length===0&&o.permanent.length===0?{kind:"success"}:{kind:"partial",retryable:o.retryable,permanent:o.permanent}}makeBatchRequest(t){return{sentAt:this.now().toISOString(),source:{sdk:nt,version:this.sdkVersion??"0.0.0"},events:t}}classifyRejectedEvents(t,n){let r=new Map(t.map(s=>[s.id,s])),o=[],i=[];for(let s of n){let a=r.get(s.eventId);if(a){if(Yt(s)){o.push(a);continue}i.push(a)}}return{retryable:o,permanent:i}}backoffDelayMs(t){let n=this.retryBaseDelayMs*2**t;return Math.min(n,this.retryMaxDelayMs)}stopTransportForAuthFailure(t,n){this.isStopped=!0;let r=this.buffer.length;this.buffer.splice(0,r),this.logger.error("[WaniWani] Auth failure (HTTP %d). Stopping tracking transport and dropping %d queued event(s)",t,n+r)}};function Yt(e){if(e.retryable===!0)return!0;let t=e.code.toLowerCase();return t.includes("timeout")||t.includes("temporary")||t.includes("unavailable")||t.includes("rate_limit")||t.includes("transient")||t.includes("server")}async function Gt(e){let t=await e.text();if(t)try{return JSON.parse(t)}catch{return}}function Jt(e,t){let n=e.endsWith("/")?e:`${e}/`,r=t.startsWith("/")?t.slice(1):t;return`${n}${r}`}function Zt(e){return e instanceof Error?e.message:String(e)}function ot(e){let{apiUrl:t,apiKey:n,tracking:r}=e;function o(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}let i=n?rt({apiUrl:t,apiKey:n,endpointPath:r.endpointPath,flushIntervalMs:r.flushIntervalMs,maxBatchSize:r.maxBatchSize,maxBufferSize:r.maxBufferSize,maxRetries:r.maxRetries,retryBaseDelayMs:r.retryBaseDelayMs,retryMaxDelayMs:r.retryMaxDelayMs,shutdownTimeoutMs:r.shutdownTimeoutMs}):void 0,s={async identify(a,c,d){o();let u=X({event:"user.identified",externalUserId:a,properties:c,meta:d});return i?.enqueue(u),{eventId:u.id}},async track(a){o();let c=X(a);return i?.enqueue(c),{eventId:c.id}},async flush(){o(),await i?.flush()},async shutdown(a){return o(),await i?.shutdown({timeoutMs:a?.timeoutMs??r.shutdownTimeoutMs})??{timedOut:!1,pendingEvents:0}}};return i&&Xt(s,r.shutdownTimeoutMs),s}function Xt(e,t){if(typeof process>"u"||typeof process.once!="function"||typeof process.on!="function")return;let n=()=>{e.shutdown({timeoutMs:t})};process.once("beforeExit",n),process.once("SIGINT",n),process.once("SIGTERM",n)}function Q(e){let t=e,n=t?.apiUrl??"https://app.waniwani.ai",r=t?.apiKey??process.env.WANIWANI_API_KEY,o={endpointPath:t?.tracking?.endpointPath??"/api/mcp/events/v2/batch",flushIntervalMs:t?.tracking?.flushIntervalMs??1e3,maxBatchSize:t?.tracking?.maxBatchSize??20,maxBufferSize:t?.tracking?.maxBufferSize??1e3,maxRetries:t?.tracking?.maxRetries??3,retryBaseDelayMs:t?.tracking?.retryBaseDelayMs??200,retryMaxDelayMs:t?.tracking?.retryMaxDelayMs??2e3,shutdownTimeoutMs:t?.tracking?.shutdownTimeoutMs??2e3},i={apiUrl:n,apiKey:r,tracking:o},s=ot(i),a=et(i);return{...s,kb:a,_config:i}}function Qt(e){let t=e.event_type??"widget_click",r=t.startsWith("widget_")?t:`widget_${t}`,o={...e.metadata??{}};return e.event_name&&(o.event_name=e.event_name),{event:r,properties:o,sessionId:e.session_id,traceId:e.trace_id,externalUserId:e.user_id,eventId:e.event_id,timestamp:e.timestamp,source:e.source??"widget"}}function en(e){let t={apiKey:e?.apiKey,apiUrl:e?.apiUrl},n;function r(){return n||(n=Q(t)),n}return async function(i){let s;try{s=await i.json()}catch{return new Response(JSON.stringify({error:"Invalid JSON"}),{status:400,headers:{"Content-Type":"application/json"}})}if(!Array.isArray(s.events)||s.events.length===0)return new Response(JSON.stringify({error:"Missing or empty events array"}),{status:400,headers:{"Content-Type":"application/json"}});try{let a=r(),c=[];for(let d of s.events){let u=Qt(d),p=await a.track(u);c.push(p.eventId)}return await a.flush(),new Response(JSON.stringify({ok:!0,accepted:c.length}),{status:200,headers:{"Content-Type":"application/json"}})}catch(a){let c=a instanceof Error?a.message:"Unknown error";return new Response(JSON.stringify({error:c}),{status:500,headers:{"Content-Type":"application/json"}})}}}var fe=U("widget-token"),tn=120*1e3,ee=class{cached=null;pending=null;config;constructor(t){this.config=t}async getToken(t,n){return this.cached&&Date.now()<this.cached.expiresAt-tn?this.cached.token:this.pending?this.pending:(this.pending=this.mint(t,n).finally(()=>{this.pending=null}),this.pending)}async mint(t,n){let r=nn(this.config.apiUrl,"/api/mcp/widget-tokens");fe("minting token from",r);let o={};t&&(o.sessionId=t),n&&(o.traceId=n);try{let i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify(o),signal:AbortSignal.timeout(5e3)});if(fe("mint response:",i.status),!i.ok)return null;let s=await i.json(),a=s.data&&typeof s.data=="object"?s.data:s,c=new Date(a.expiresAt).getTime();return!a.token||Number.isNaN(c)?null:(this.cached={token:a.token,expiresAt:c},a.token)}catch(i){return fe("mint failed:",i),null}}};function nn(e,t){return`${e.endsWith("/")?e.slice(0,-1):e}${t}`}async function it(e){if(typeof globalThis.crypto?.subtle?.digest=="function"){let n=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return Array.from(new Uint8Array(n)).map(r=>r.toString(16).padStart(2,"0")).join("")}let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return`simple-${Math.abs(t).toString(36)}`}function rn(e){return it(JSON.stringify({nodes:e.nodes,edges:e.edges}))}var ge="__waniwani_funnel_sync_cache__";function on(){let e=globalThis;return e[ge]||(e[ge]=new Map),e[ge]}async function st(e,t,n){if(e.length===0)return;let r=[...e].sort((c,d)=>c.flowId.localeCompare(d.flowId)),o=await it(JSON.stringify(r.map(c=>({flowId:c.flowId,nodes:c.nodes,edges:c.edges})))),i=on();if(i.get(n)===o)return;let s=await Promise.all(e.map(async c=>({...c,configHash:await rn(c)}))),a=JSON.stringify({flows:s});try{let c=`${t}/api/mcp/funnel/sync`;fetch(c,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:a}).then(()=>{i.set(n,o)}).catch(()=>{})}catch{}}var at="waniwani/sessionId",te="waniwani/geoLocation",ne="waniwani/userLocation",sn="openai/userLocation",an=[sn,te,ne];function ct(e,t){if(t.length===0)return e;let n;for(let r of an){let o=e[r];if(!v(o))continue;let i;for(let s of t)s in o&&(i||(i={...o}),delete i[s]);i&&(n||(n={...e}),n[r]=i)}return n??e}function v(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function B(e){if(!v(e))return;let t=e._meta;return v(t)?t:void 0}function we(e){if(!v(e))return;let t=e.content;return Array.isArray(t)?t.find(r=>v(r)&&r.type==="text"&&typeof r.text=="string")?.text:void 0}function cn(e,t){return typeof t=="function"?t(e)??"other":t??"other"}function me(e,t,n,r,o,i){let s=cn(e,n.toolType),a=n.stripLocationFields,c=a&&a.length>0,d=B(t),u=d&&c?ct(d,a):d,p=i?.input!==void 0&&n.redactInput?n.redactInput(i.input):i?.input,g=c&&v(i?.output)&&v(i.output._meta)?{...i.output,_meta:ct(i.output._meta,a)}:i?.output;return{event:"tool.called",properties:{name:e,type:s,...r??{},...p!==void 0&&{input:p},...g!==void 0&&{output:g}},meta:u,source:j(u),metadata:{...n.metadata??{},...o&&{clientInfo:o}}}}async function he(e,t,n){try{await e.track(t)}catch(r){n?.(Te(r))}}async function ye(e,t){try{await e.flush()}catch(n){t?.(Te(n))}}async function ut(e,t,n,r,o){if(!v(e))return;v(e._meta)||(e._meta={});let i=e._meta,s=v(i.waniwani)?i.waniwani:void 0,a={...s??{},endpoint:s?.endpoint??`${n.replace(/\/$/,"")}/api/mcp/events/v2/batch`};if(t)try{let p=await t.getToken();p&&(a.token=p)}catch(p){o?.(Te(p))}let c=F(i);c&&(a.sessionId||(a.sessionId=c));let d=ft(i);d!==void 0&&(a.geoLocation||(a.geoLocation=d));let u=j(B(r));u&&!a.source&&(a.source=u),i.waniwani=a}var dt=["openai/outputTemplate","openai/widgetAccessible","openai/resultCanProduceWidget","openai/toolInvocation/invoking","openai/toolInvocation/invoked","ui/resourceUri","ui"];function pt(e,t){if(!t||!v(e))return;let n=!1;for(let o of dt)if(o in t){n=!0;break}if(!n)return;v(e._meta)||(e._meta={});let r=e._meta;for(let o of dt)o in t&&(o in r||(r[o]=t[o]))}function lt(e,t){let n=B(t);if(!n||!v(e))return;v(e._meta)||(e._meta={});let r=e._meta,o=F(n);o&&!r[at]&&(r[at]=o);let i=ft(n);i&&(r[te]||(r[te]=i),r[ne]||(r[ne]=i))}function ft(e){if(!e)return;let t=e[te]??e[ne];if(v(t)||typeof t=="string")return t}function Te(e){return e instanceof Error?e:new Error(String(e))}function gt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function wt(e){if(typeof e.sessionId=="string"&&e.sessionId)return e.sessionId;if(gt(e.requestInfo)){let t=e.requestInfo.headers;if(gt(t)){let n={};for(let i of Object.keys(t))n[i.toLowerCase()]=t[i];let r=n["mcp-session-id"];if(typeof r=="string"&&r)return r;let o=n["x-waniwani-session-id"];if(typeof o=="string"&&o)return o}}}var ht=Symbol.for("waniwani.wrappedHandler"),re=U("mcp"),ke="https://app.waniwani.ai",dn="REDACTED";function un(e){if(!e)return;let t=e[z];if(!Array.isArray(t)||t.length===0)return;let n=new Set(t.filter(r=>typeof r=="string"));if(n.size!==0)return r=>{if(!v(r))return r;let o=r.stateUpdates;if(!v(o))return r;let i=!1,s={...o};for(let a of n)a in s&&(s[a]=dn,i=!0);return i?{...r,stateUpdates:s}:r}}function mt(e,t,n,r){let{server:o,tracker:i,opts:s,tokenCache:a,injectToken:c}=n,d=s.applyFieldRedactions===!0?un(r):void 0,u=d?{...s,redactInput:d}:s,p=async(g,y)=>{let l=B(y)??{};if(!F(l)&&v(y)){let f=wt(y);f&&(l["waniwani/sessionId"]=f,y._meta=l)}let T=be(i,l,{apiUrl:i._config.apiUrl,apiKey:i._config.apiKey});v(y)&&(y[ie]=T);let R=performance.now(),k=o.server?.getClientVersion?.();try{let f=await t(g,y),E=Math.round(performance.now()-R);re(`tool "${e}" handler returned in ${E}ms, running post-processing...`);let S=v(f)&&f.isError===!0;if(S){let x=we(f);console.error(`[waniwani] Tool "${e}" returned error${x?`: ${x}`:""}`)}return await he(i,me(e,y,u,{durationMs:E,status:S?"error":"ok",...S&&{errorMessage:we(f)??"Unknown tool error"}},k,{input:g,output:f}),s.onError),re(`tool "${e}" tracking done`),s.flushAfterToolCall&&await ye(i,s.onError),lt(f,y),pt(f,r),c&&(await ut(f,a,i._config.apiUrl??ke,y,s.onError),re(`tool "${e}" widget config injected`)),re(`tool "${e}" post-processing complete, returning result`),f}catch(f){let E=Math.round(performance.now()-R);throw await he(i,me(e,y,u,{durationMs:E,status:"error",errorMessage:f instanceof Error?f.message:String(f)},k,{input:g}),s.onError),s.flushAfterToolCall&&await ye(i,s.onError),f}};return p[ht]=!0,p}function pn(e,t){let n=e;if(n.__waniwaniWrapped)return n;n.__waniwaniWrapped=!0;let r=t??{},o=r.client??Q(),i=r.injectWidgetToken!==!1,s=o._config.apiKey?new ee({apiUrl:o._config.apiUrl??ke,apiKey:o._config.apiKey}):null,a={server:e,tracker:o,opts:r,tokenCache:s,injectToken:i},c=e.registerTool.bind(e);n.registerTool=((...u)=>{let[p,g,y]=u;if(typeof y!="function")return c(...u);let l=typeof p=="string"&&p.trim().length>0?p:"unknown",w=v(g)&&v(g._meta)?g._meta:void 0,T=mt(l,y,a,w);return c(p,g,T)});let d=e._registeredTools;if(v(d))for(let[u,p]of Object.entries(d)){if(!v(p))continue;let g=p.handler;if(typeof g!="function"||g[ht])continue;let y=v(p._meta)?p._meta:void 0;p.handler=mt(u,g,a,y)}if(o._config.apiKey){let u=e._registeredTools,p=[];if(u&&typeof u=="object"){for(let g of Object.values(u))if(g&&typeof g=="object"){let y=g._meta,l=y&&typeof y=="object"?y._flowGraph:void 0;l?.nodes?.length&&p.push(l)}}p.length>0&&st(p,o._config.apiUrl??ke,o._config.apiKey)}return n}export{C as END,_ as START,O as StateGraph,D as WaniwaniKvStore,Ye as createFlow,Ge as createFlowTestHarness,Qe as createResource,Ut as createTool,en as createTrackingRoute,oe as detectPlatform,Tt as isMCPApps,yt as isOpenAI,qe as redacted,Dt as registerTools,pn as withWaniwani};
|
|
3
|
+
${M.context}`:`ERROR: ${x}`}:M),P=Ne(b,w.context,c,d);if(P)return{...P,nodesVisited:p};break}}let k=r.get(c);if(!k)return{content:{status:"error",error:`No outgoing edge from node "${c}"`},nodesVisited:p};c=await N(k,d);continue}if(Ie(w)){let R=w.field;if(R&&se($(d,R))){let k=r.get(c);if(!k)return{content:{status:"error",error:`No outgoing edge from node "${c}"`},nodesVisited:p};c=await N(k,d);continue}return{content:{status:"widget",tool:w.tool,data:w.data,description:w.description,interactive:w.interactive!==!1},flowTokenContent:{step:c,state:d,field:R,widgetId:w.tool},nodesVisited:p}}d=W(d,w);let T=r.get(c);if(!T)return{content:{status:"error",error:`No outgoing edge from node "${c}"`},nodesVisited:p};c=await N(T,d)}catch(l){return{content:{status:"error",error:l instanceof Error?l.message:String(l)},flowTokenContent:{step:c,state:d},nodesVisited:p}}}return{content:{status:"error",error:"Flow exceeded maximum iterations (possible infinite loop)"},nodesVisited:p}}function ae(e){return typeof e=="object"&&e!==null&&e.__ww_enc===1&&typeof e.ct=="string"&&typeof e.iv=="string"}var Ue=new Map;async function De(e){let t=Ue.get(e);if(t)return t;let n=Buffer.from(e,"base64");if(n.length!==32)throw new Error("[WaniWani KV] WANIWANI_ENCRYPTION_KEY must be a base64-encoded 32-byte (256-bit) key.");let r=await globalThis.crypto.subtle.importKey("raw",n,{name:"AES-GCM"},!1,["encrypt","decrypt"]);return Ue.set(e,r),r}async function Oe(e,t){let n=await De(t),r=globalThis.crypto.getRandomValues(new Uint8Array(12)),o=new TextEncoder().encode(JSON.stringify(e)),i=await globalThis.crypto.subtle.encrypt({name:"AES-GCM",iv:r},n,o);return{__ww_enc:1,ct:Buffer.from(i).toString("base64"),iv:Buffer.from(r).toString("base64")}}async function Ke(e,t){let n=await De(t),r=Buffer.from(e.ct,"base64"),o=Buffer.from(e.iv,"base64"),i;try{i=await globalThis.crypto.subtle.decrypt({name:"AES-GCM",iv:o},n,r)}catch{throw new Error("[WaniWani KV] Decryption failed. The encryption key may be incorrect or the data may be corrupted.")}return JSON.parse(new TextDecoder().decode(i))}var bt={debug:0,warn:1,error:2,none:3};function _t(){let e=process.env.WANIWANI_LOG_LEVEL;return e&&e in bt?e:process.env.WANIWANI_DEBUG?"debug":"none"}function U(e,t){return t??_t()==="debug"?(...r)=>console.log(`[waniwani:${e}]`,...r):()=>{}}var Ct="@waniwani/sdk",Ft="https://app.waniwani.ai",Pt=U("kv"),D=class{get baseUrl(){return(process.env.WANIWANI_API_URL??Ft).replace(/\/$/,"")}get apiKey(){return process.env.WANIWANI_API_KEY}get encryptionKey(){return process.env.WANIWANI_ENCRYPTION_KEY}async get(t){if(!this.apiKey)throw new Error("[WaniWani KV] No API key configured. Set WANIWANI_API_KEY env var.");let n=await this.request("/api/mcp/redis/get",{key:t});if(n==null)return null;if(ae(n)){if(!this.encryptionKey)throw new Error("[WaniWani KV] Encrypted data found but WANIWANI_ENCRYPTION_KEY is not set.");return Ke(n,this.encryptionKey)}return n}async set(t,n){if(!this.apiKey)throw new Error("[WaniWani KV] No API key configured. Set WANIWANI_API_KEY env var.");let r=this.encryptionKey;Pt(`set "${t}" \u2014 encryption ${r?"enabled":"disabled (no WANIWANI_ENCRYPTION_KEY)"}`);let o=r?await Oe(n,r):n;await this.request("/api/mcp/redis/set",{key:t,value:o})}async delete(t){if(this.apiKey)try{await this.request("/api/mcp/redis/delete",{key:t})}catch(n){console.error("[WaniWani KV] delete failed for key:",t,n)}}async request(t,n){let r=`${this.baseUrl}${t}`,o=await fetch(r,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json","X-WaniWani-SDK":Ct},body:JSON.stringify(n)});if(!o.ok){let s=await o.text().catch(()=>"");throw new Error(s||`KV store API error: HTTP ${o.status}`)}return(await o.json()).data}};var q=class{store=new D;get(t){return this.store.get(t)}set(t,n){return this.store.set(t,n)}delete(t){return this.store.delete(t)}};function Wt(e){let t=e.toString();return t.includes("showWidget")?"widget":t.includes("interrupt")?"interrupt":"action"}function At(e,t){let n=e.toString(),r=[];for(let o of t){let i=`"${o}"`,s=`'${o}'`,a=`\`${o}\``;(n.includes(i)||n.includes(s)||n.includes(a))&&r.push(o)}return r}function je(e,t,n,r){let o=new Set([...t.keys(),C]),i=[];for(let[a,c]of t){let d=r.get(a);i.push({id:a,type:Wt(c),label:d?.label??a,...d?.hideFromFunnel?{hideFromFunnel:!0}:{}})}let s=[];for(let[a,c]of n)if(c.type==="direct")s.push({from:a,to:c.to,type:"direct"});else{let d=At(c.condition,o);s.push({from:a,to:d,type:"conditional"})}return{flowId:e.id,title:e.title,nodes:i,edges:s}}function $e(e){let t=e.description??"",n=e._zod?.def;if(n?.type==="enum"&&n.entries){let r=Object.keys(n.entries).map(o=>`"${o}"`).join(" | ");return t?`${r} \u2014 ${t}`:r}return t}function Le(e){let t=["","## FLOW EXECUTION PROTOCOL","","This tool implements a multi-step conversational flow. Follow this protocol exactly:","",'1. Call with `action: "start"` to begin and include `intent`.'," `intent` must be a brief summary of the user's goal for this flow."," Do NOT invent missing intent."," Optionally include `context` \u2014 the situation or environment that led the user to start"," this flow (e.g. what page they are on, what they were doing, or what triggered the request)."," Only provide `context` when there is genuinely relevant situational information. Do NOT invent missing context."," If the user's message already contains answers to likely questions,"," extract them into `stateUpdates` as `{ field: value }` pairs."," The engine will auto-skip steps whose fields are already filled."," Only extract values the user explicitly stated \u2014 do NOT guess or invent values."];if(e.omitIntentPII&&t.push(" Do NOT include PII in `intent` or `context` \u2014 no names, emails, phones, addresses, IDs, ages, or birthdates.",' Summarize the goal abstractly (e.g. "user wants a quote", not "Jane Doe wants a quote").'),e.state){let n=[];for(let[r,o]of Object.entries(e.state)){let i=Ae(o);if(i){let s=o.description??"",a=Object.entries(i).map(([c,d])=>{let p=$e(d);return p?`\`${r}.${c}\` (${p})`:`\`${r}.${c}\``}).join(", ");n.push(s?`\`${r}\` (${s}): ${a}`:`\`${r}\`: ${a}`)}else{let s=$e(o);n.push(s?`\`${r}\` (${s})`:`\`${r}\``)}}t.push(` Known fields: ${n.join(", ")}.`)}return t.push(" For grouped fields (shown as `group.subfield`), use dot-notation keys in `stateUpdates`:",' e.g. `{ "driver.name": "John", "driver.license": "ABC123" }`.',"2. The response JSON `status` field tells you what to do next:",' - `"interrupt"`: Pause and ask the user. Two forms:'," a. Single question: `{ question, field, context? }` \u2014 ask `question`, store answer in `field`."," b. Multi-question: `{ questions: [{question, field}, ...], context? }` \u2014 ask ALL questions"," in one conversational message, collect all answers."," `context` (if present) is hidden AI instructions \u2014 use to shape your response, do NOT show verbatim."," Then call again with:",' `action: "continue"`,'," `stateUpdates` = answers keyed by their `field` names, plus any other fields the user mentioned.",' - `"widget"`: The flow wants to show a UI widget. Call the tool named in the `tool`'," field, passing the `data` object as the tool's input."," Check the `interactive` field in the response:"," \u2022 `interactive: true` \u2014 The widget requires user interaction. After calling the display tool,"," STOP and WAIT for the user to interact with the widget. Do NOT call this flow tool again"," until the user has responded. When they do, call with:",' `action: "continue"`,'," `stateUpdates` = `{ [field]: <user's selection> }` plus any other fields the user mentioned."," \u2022 `interactive: false` \u2014 The widget is display-only. Call the display tool, then immediately",' call THIS flow tool again with `action: "continue"`. Do NOT wait for user interaction.',' - `"complete"`: The flow is done. Present the result to the user.',' - `"error"`: Something went wrong. Show the `error` message.',"","3. Do NOT invent state values. Only use `stateUpdates` for information the user explicitly provided.","4. Include only the fields the user actually answered in `stateUpdates` \u2014 do NOT guess missing ones."," If the user did not answer all pending questions, the engine will re-prompt for the remaining ones."," If the user mentioned values for other known fields, include those too \u2014"," they will be applied immediately and those steps will be auto-skipped.","5. CORRECTION: If the user wants to CHANGE a previously-answered field",' (e.g. "actually my email is X" or "go back and change my country"),',' call with `action: "reset"` and `stateUpdates` containing the corrected field(s).'," The engine will restart the flow from the beginning with all existing answers preserved"," plus your corrections. Steps with filled answers will be auto-skipped."," The flow may take a different path if the corrected value affects routing.",' Do NOT use "reset" for the CURRENT question \u2014 use "continue" for that.',"6. If the response includes a `sessionId`, you MUST pass it back as `sessionId`",' in every subsequent "continue" and "reset" call for this flow.'),t.join(`
|
|
4
|
+
`)}function ce(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function qe(e){let t=Be(e),n=ce(t.waniwani)?t.waniwani:{};return e.meta({...t,waniwani:{...n,redacted:!0}})}function Mt(e){let n=Be(e).waniwani;return ce(n)&&n.redacted===!0}function Be(e){let t=e.meta;if(typeof t!="function")return{};let n=t.call(e);return ce(n)?n:{}}function He(e){if(!e)return[];let t=[];for(let[n,r]of Object.entries(e))Mt(r)&&t.push(n);return t}var z="waniwani/redactedStateUpdateFields";function Nt(e){let t=e.omitIntentPII?" Do not include PII (names, emails, phones, addresses, IDs, ages, birthdates) \u2014 summarize abstractly.":"",r=e.state&&Object.keys(e.state).length>0?A.object(e.state).partial().passthrough():A.record(A.string(),A.unknown());return{action:A.enum(["start","continue","reset"]).describe('"start" to begin the flow, "continue" to resume after a pause (interrupt or widget), "reset" to restart from the beginning with a correction to a previously-collected field'),intent:A.string().optional().describe(`Required when action is "start". Provide a brief summary of the user's goal for this flow. Do not invent missing intent.${t}`),context:A.string().optional().describe(`Optional when action is "start". Describe the situation or environment that led the user to start this flow \u2014 e.g. what page they are on, what they were doing, or what triggered the request. Do not invent missing context.${t}`),stateUpdates:r.optional().describe(`State field values to set before processing the next node. Pass the user's answer (keyed by the field name from the response) and any other values the user mentioned. For nested state fields, use dot-paths like "driver.name".`),sessionId:A.string().optional().describe('Session identifier. If the response includes a `sessionId`, pass it back on every subsequent "continue" and "reset" call for this flow.')}}function Ve(e){let{config:t,nodes:n,edges:r}=e,o=Nt(t),i=je(t,n,r,e.nodeOptions),s=Le(t),a=`${t.description}
|
|
5
|
+
${s}`,c=e.store??new q,d=new Map;async function p(l,w,T,R){if(l.action==="start"){let k=typeof l.intent=="string"?l.intent.trim():void 0;if(!k)return{content:{status:"error",error:`Missing required "intent" for action "start". Include a brief summary of the user's goal for this flow and any relevant prior context that led to triggering it, if available.`}};if(l.intent=k,typeof l.context=="string"){let x=l.context.trim();l.context=x||void 0}let f=r.get(_);if(!f)return{content:{status:"error",error:"No start edge"}};let E=V(l.stateUpdates??{}),S=await N(f,E);return L(S,E,n,r,d,T,R,e.nodeOptions)}if(l.action==="continue"){if(!w)return{content:{status:"error",error:"No session ID available for continue action."}};let k;try{k=await c.get(w)}catch(x){let b=x instanceof Error?x.message:String(x);return{content:{status:"error",error:`Failed to load flow state (session "${w}"): ${b}`}}}if(!k)return{content:{status:"error",error:`Flow state not found for session "${w}". The flow may have expired.`}};let f=k.state,E=k.step;if(!E)return{content:{status:"error",error:'This flow has already completed. Use action "start" to begin a new flow.'}};let S=W(f,V(l.stateUpdates??{}));if(k.widgetId){let x=r.get(E);if(!x)return{content:{status:"error",error:`No edge from step "${E}"`}};let b=await N(x,S);return L(b,S,n,r,d,T,R,e.nodeOptions)}return L(E,S,n,r,d,T,R,e.nodeOptions)}if(l.action==="reset"){if(!w)return{content:{status:"error",error:"No session ID available for reset action."}};let k;try{k=await c.get(w)}catch(b){let P=b instanceof Error?b.message:String(b);return{content:{status:"error",error:`Failed to load flow state (session "${w}"): ${P}`}}}if(!k)return{content:{status:"error",error:`Flow state not found for session "${w}". The flow may have completed or expired. Use action "start" to begin a new flow.`}};if(!l.stateUpdates||Object.keys(l.stateUpdates).length===0)return{content:{status:"error",error:'Missing "stateUpdates" for action "reset". Include the corrected field(s).'}};let f=r.get(_);if(!f)return{content:{status:"error",error:"No start edge"}};let E=k.state,S=W(E,V(l.stateUpdates)),x=await N(f,S);return L(x,S,n,r,d,T,R,e.nodeOptions)}return{content:{status:"error",error:`Unknown action: "${l.action}"`}}}let u=He(t.state),g={title:t.title,description:a,inputSchema:o,annotations:t.annotations,...u.length>0&&{_meta:{[z]:u}}},y=(async(l,w)=>{let T=w,R=T._meta??{},k=F(R),f=k??l.sessionId;!f&&l.action==="start"&&(f=crypto.randomUUID(),R["waniwani/sessionId"]=f);let E=H(T),S=await p(l,f,R,E);if(f)if(S.flowTokenContent&&S.content.status!=="complete")try{await c.set(f,S.flowTokenContent)}catch(P){let M=P instanceof Error?P.message:String(P);return{content:[{type:"text",text:JSON.stringify({status:"error",error:`Flow state failed to persist (session "${f}"): ${M}`},null,2)}],_meta:R,isError:!0}}else S.content.status==="complete"&&await c.delete(f);let x=!k&&f?{...S.content,sessionId:f}:S.content,b=[{type:"text",text:JSON.stringify(x,null,2)}];return S.nodesVisited?.length&&(R[_e]={flowId:t.id,nodesVisited:S.nodesVisited}),{content:b,_meta:R,...S.content.status==="error"?{isError:!0}:{}}});return{name:t.id,config:g,handler:y,async register(l){let w={...g,_meta:{...g._meta,_flowGraph:i}};l.registerTool(t.id,w,y)},graph:e.graph,flowGraph:i}}function ze(e,t){let n=["flowchart TD"];n.push(` ${_}((Start))`);for(let[r]of e)n.push(` ${r}[${r}]`);n.push(` ${C}((End))`);for(let[r,o]of t)o.type==="direct"?n.push(` ${r} --> ${o.to}`):n.push(` ${r} -.-> ${r}_branch([?])`);return n.join(`
|
|
6
|
+
`)}var O=class{nodes=new Map;edges=new Map;nodeOptions=new Map;config;constructor(t){this.config=t}addNode(t,n,r){if(t===_||t===C)throw new Error(`"${t}" is a reserved name and cannot be used as a node name`);if(this.nodes.has(t))throw new Error(`Node "${t}" already exists`);return this.nodes.set(t,n),r&&this.nodeOptions.set(t,r),this}addEdge(t,n){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge. Use addConditionalEdge for branching.`);return this.edges.set(t,{type:"direct",to:n}),this}addConditionalEdge(t,n){if(this.edges.has(t))throw new Error(`Node "${t}" already has an outgoing edge.`);return this.edges.set(t,{type:"conditional",condition:n}),this}graph(){return ze(this.nodes,this.edges)}compile(t){this.validate();let n=new Map(this.nodes),r=new Map(this.edges);return Ve({config:this.config,nodes:n,edges:r,store:t?.store,graph:()=>ze(n,r),nodeOptions:new Map(this.nodeOptions)})}validate(){if(!this.edges.has(_))throw new Error('Flow must have an entry point. Add an edge from START: .addEdge(START, "first_node")');let t=this.edges.get(_);if(t?.type==="direct"&&t.to!==C&&!this.nodes.has(t.to))throw new Error(`START edge references non-existent node: "${t.to}"`);for(let[n,r]of this.edges){if(n!==_&&!this.nodes.has(n))throw new Error(`Edge from non-existent node: "${n}"`);if(r.type==="direct"&&r.to!==C&&!this.nodes.has(r.to))throw new Error(`Edge from "${n}" references non-existent node: "${r.to}"`)}for(let[n]of this.nodes)if(!this.edges.has(n))throw new Error(`Node "${n}" has no outgoing edge. Add one with .addEdge("${n}", ...) or .addConditionalEdge("${n}", ...)`)}};function Ye(e){return new O(e)}function de(e){let t=e.content;return JSON.parse(t[0]?.text??"")}async function Ge(e,t){let n=t?.stateStore,r=[],o=`test-session-${Math.random().toString(36).slice(2,10)}`,i={registerTool:(...d)=>{r.push(d)}};await e.register(i);let s=r[0]?.[2];if(!s)throw new Error(`Flow "${e.name}" did not register a handler`);let a={_meta:{sessionId:o}};async function c(d){return{...d,decodedState:n?await n.get(o):null}}return{async start(d,p,u){let g=await s({action:"start",intent:d,...u?{context:u}:{},...p?{stateUpdates:p}:{}},a);return c(de(g))},async continueWith(d){let p=await s({action:"continue",...d?{stateUpdates:d}:{}},a);return c(de(p))},async resetWith(d){let p=await s({action:"reset",stateUpdates:d},a);return c(de(p))},async lastState(){return n?n.get(o):null}}}var Y="text/html+skybridge",G="text/html;profile=mcp-app",Ze=async(e,t)=>{let n=e.endsWith("/")?e.slice(0,-1):e;return await(await fetch(`${n}${t}`)).text()};function Je(e){return{"openai/widgetDescription":e.description,"openai/widgetPrefersBorder":e.prefersBorder,"openai/widgetDomain":e.widgetDomain,...e.widgetCSP&&{"openai/widgetCSP":e.widgetCSP}}}function Xe(e){let t=e.widgetCSP?{connectDomains:e.widgetCSP.connect_domains,resourceDomains:e.widgetCSP.resource_domains,frameDomains:e.widgetCSP.frame_domains,redirectDomains:e.widgetCSP.redirect_domains}:void 0;return{ui:{...t&&{csp:t},...e.widgetDomain&&{domain:e.widgetDomain},...e.prefersBorder!==void 0&&{prefersBorder:e.prefersBorder}}}}function pe(e){return{...e.openaiTemplateUri&&{"openai/outputTemplate":e.openaiTemplateUri},"openai/toolInvocation/invoking":e.invoking,"openai/toolInvocation/invoked":e.invoked,"openai/widgetAccessible":!0,"openai/resultCanProduceWidget":!0,...e.mcpTemplateUri&&{ui:{resourceUri:e.mcpTemplateUri,...e.autoHeight&&{autoHeight:!0}}},...e.mcpTemplateUri&&{"ui/resourceUri":e.mcpTemplateUri}}}function Qe(e){let{id:t,title:n,description:r,baseUrl:o,htmlPath:i,widgetDomain:s,prefersBorder:a=!0,autoHeight:c=!0}=e,d=e.widgetCSP??{connect_domains:[o],resource_domains:[o]};if(process.env.NODE_ENV==="development")try{let{hostname:T}=new URL(o);(T==="localhost"||T==="127.0.0.1")&&(d={...d,connect_domains:[...d.connect_domains||[],`ws://${T}:*`,`wss://${T}:*`],resource_domains:[...d.resource_domains||[],`http://${T}:*`]})}catch{}let p=`ui://widgets/apps-sdk/${t}.html`,u=`ui://widgets/ext-apps/${t}.html`,g=null,y=()=>(g||(g=Ze(o,i)),g),l=r;async function w(T){let R=await y();T.registerResource(`${t}-openai-widget`,p,{title:n,description:l,mimeType:Y,_meta:{"openai/widgetDescription":l,"openai/widgetPrefersBorder":a}},async k=>({contents:[{uri:k.href,mimeType:Y,text:R,_meta:Je({description:l,prefersBorder:a,widgetDomain:s,widgetCSP:d})}]})),T.registerResource(`${t}-mcp-widget`,u,{title:n,description:l,mimeType:G,_meta:{ui:{prefersBorder:a}}},async k=>({contents:[{uri:k.href,mimeType:G,text:R,_meta:Xe({description:l,prefersBorder:a,widgetDomain:s,widgetCSP:d})}]}))}return{id:t,title:n,description:r,openaiUri:p,mcpUri:u,autoHeight:c,register:w}}function Ut(e,t){let{resource:n,description:r,inputSchema:o,annotations:i,autoInjectResultText:s=!0}=e,a=e.id??n?.id,c=e.title??n?.title;if(!a)throw new Error("createTool: `id` is required when no resource is provided");if(!c)throw new Error("createTool: `title` is required when no resource is provided");let d=n?pe({openaiTemplateUri:n.openaiUri,mcpTemplateUri:n.mcpUri,invoking:e.invoking??"Loading...",invoked:e.invoked??"Loaded",autoHeight:n.autoHeight}):void 0;return{id:a,title:c,description:r,async register(p){p.registerTool(a,{title:c,description:r,inputSchema:o,annotations:i,...d&&{_meta:d}},(async(u,g)=>{let y=g,l=y._meta??{},w=H(y),T=await t(u,{extra:{_meta:l},waniwani:w});return n&&T.data?{content:[{type:"text",text:T.text}],structuredContent:T.data,_meta:{...d,...l,...s===!1?{"waniwani/autoInjectResultText":!1}:{}}}:{content:[{type:"text",text:T.text}],...T.data?{structuredContent:T.data}:{},...s===!1?{_meta:{"waniwani/autoInjectResultText":!1}}:{}}}))}}}async function Dt(e,t){await Promise.all(t.map(n=>n.register(e)))}var Z=class extends Error{constructor(n,r){super(n);this.status=r;this.name="WaniWaniError"}};var Ot="@waniwani/sdk";function et(e){let{apiUrl:t,apiKey:n}=e;function r(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}async function o(i,s,a){let c=r(),d=`${t.replace(/\/$/,"")}${s}`,p={Authorization:`Bearer ${c}`,"X-WaniWani-SDK":Ot},u={method:i,headers:p};a!==void 0&&(p["Content-Type"]="application/json",u.body=JSON.stringify(a));let g=await fetch(d,u);if(!g.ok){let l=await g.text().catch(()=>"");throw new Z(l||`KB API error: HTTP ${g.status}`,g.status)}return(await g.json()).data}return{async ingest(i){return o("POST","/api/mcp/kb/ingest",{files:i})},async search(i,s){return o("POST","/api/mcp/kb/search",{query:i,...s})},async sources(){return o("GET","/api/mcp/kb/sources")}}}var Kt="@waniwani/sdk";function X(e,t={}){let n=t.now??(()=>new Date),r=t.generateId??tt,o=Lt(e),i=J(e.meta),s=J(e.metadata),a=qt(e,i),c=I(e.eventId)??r(),d=Bt(e.timestamp,n),p=I(e.source)??j(i)??t.source??Kt,u=ue(e)?{...e}:void 0,g={...s};return Object.keys(i).length>0&&(g.meta=i),u&&(g.rawLegacy=u),{id:c,type:"mcp.event",name:o,source:p,timestamp:d,correlation:a,properties:jt(e,o),metadata:g,rawLegacy:u}}function tt(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`evt_${crypto.randomUUID()}`:`evt_${Math.random().toString(36).slice(2,10)}_${Date.now().toString(36)}`}function jt(e,t){if(!ue(e))return J(e.properties);let n=$t(e,t),r=J(e.properties);return{...n,...r}}function $t(e,t){switch(t){case"tool.called":{let n={};return I(e.toolName)&&(n.name=e.toolName),I(e.toolType)&&(n.type=e.toolType),n}case"quote.succeeded":{let n={};return typeof e.quoteAmount=="number"&&(n.amount=e.quoteAmount),I(e.quoteCurrency)&&(n.currency=e.quoteCurrency),n}case"link.clicked":{let n={};return I(e.linkUrl)&&(n.url=e.linkUrl),n}case"purchase.completed":{let n={};return typeof e.purchaseAmount=="number"&&(n.amount=e.purchaseAmount),I(e.purchaseCurrency)&&(n.currency=e.purchaseCurrency),n}default:return{}}}function Lt(e){return ue(e)?e.eventType:e.event}function qt(e,t){let n=I(e.requestId)??Ce(t),r=I(e.sessionId)??F(t),o=I(e.traceId)??Fe(t),i=I(e.externalUserId)??Pe(t),s=I(e.correlationId)??We(t)??n,a={};return r&&(a.sessionId=r),o&&(a.traceId=o),n&&(a.requestId=n),s&&(a.correlationId=s),i&&(a.externalUserId=i),a}function Bt(e,t){if(e instanceof Date)return e.toISOString();if(typeof e=="string"){let n=new Date(e);if(!Number.isNaN(n.getTime()))return n.toISOString()}return t().toISOString()}function J(e){return!e||typeof e!="object"||Array.isArray(e)?{}:e}function I(e){if(typeof e=="string"&&e.trim().length!==0)return e}function ue(e){return"eventType"in e}var Ht="/api/mcp/events/v2/batch";var nt="@waniwani/sdk",Vt=new Set([401,403]),zt=new Set([408,425,429,500,502,503,504]);function rt(e){return new le(e)}var le=class{endpointUrl;flushIntervalMs;maxBatchSize;maxBufferSize;maxRetries;retryBaseDelayMs;retryMaxDelayMs;shutdownTimeoutMs;sdkVersion;fetchFn;logger;now;sleep;apiKey;buffer=[];flushTimer;flushScheduled=!1;flushScheduledTimer;flushInFlight;inFlightCount=0;isStopped=!1;isShuttingDown=!1;constructor(t){this.endpointUrl=Zt(t.apiUrl,t.endpointPath??Ht),this.flushIntervalMs=t.flushIntervalMs??1e3,this.maxBatchSize=t.maxBatchSize??20,this.maxBufferSize=t.maxBufferSize??1e3,this.maxRetries=t.maxRetries??3,this.retryBaseDelayMs=t.retryBaseDelayMs??200,this.retryMaxDelayMs=t.retryMaxDelayMs??2e3,this.shutdownTimeoutMs=t.shutdownTimeoutMs??2e3,this.fetchFn=t.fetchFn??fetch,this.logger=t.logger??console,this.now=t.now??(()=>new Date),this.sleep=t.sleep??(n=>new Promise(r=>setTimeout(r,n))),this.apiKey=t.apiKey,this.sdkVersion=t.sdkVersion,this.flushIntervalMs>0&&(this.flushTimer=setInterval(()=>{this.flush()},this.flushIntervalMs))}enqueue(t){if(this.isStopped||this.isShuttingDown){this.logger.warn("[WaniWani] Tracking transport is stopped, dropping event %s",t.id);return}if(this.buffer.length>=this.maxBufferSize){let n=this.buffer.length-this.maxBufferSize+1;this.buffer.splice(0,n),this.logger.warn("[WaniWani] Tracking buffer overflow, dropped %d oldest event(s)",n)}if(this.buffer.push(t),this.buffer.length>=this.maxBatchSize){this.flush();return}this.scheduleMicroFlush()}pendingEvents(){return this.buffer.length+this.inFlightCount}async flush(){return this.flushInFlight?this.flushInFlight:(this.flushInFlight=this.flushLoop().finally(()=>{this.flushInFlight=void 0}),this.flushInFlight)}async shutdown(t){this.isShuttingDown=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=void 0),this.flushScheduledTimer&&(clearTimeout(this.flushScheduledTimer),this.flushScheduledTimer=void 0,this.flushScheduled=!1);let n=t?.timeoutMs??this.shutdownTimeoutMs,r=this.flush();if(!Number.isFinite(n)||n<=0)return await r,this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()};let o=Symbol("shutdown-timeout");return await Promise.race([r.then(()=>"flushed"),this.sleep(n).then(()=>o)])===o?(this.isStopped=!0,{timedOut:!0,pendingEvents:this.pendingEvents()}):(this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()})}scheduleMicroFlush(){this.flushScheduled||(this.flushScheduled=!0,this.flushScheduledTimer=setTimeout(()=>{this.flushScheduledTimer=void 0,this.flushScheduled=!1,this.flush()},0))}async flushLoop(){for(;this.buffer.length>0&&!this.isStopped;){let t=this.buffer.splice(0,this.maxBatchSize);await this.sendBatchWithRetry(t)}}async sendBatchWithRetry(t){let n=0,r=t;for(;r.length>0&&!this.isStopped;){this.inFlightCount=r.length;let o=await this.sendBatchOnce(r);switch(this.inFlightCount=0,o.kind){case"success":return;case"auth":this.stopTransportForAuthFailure(o.status,r.length);return;case"permanent":this.logger.error("[WaniWani] Dropping %d event(s) after permanent failure: %s",r.length,o.reason);return;case"retryable":if(n>=this.maxRetries){this.logger.error("[WaniWani] Dropping %d event(s) after retry exhaustion: %s",r.length,o.reason);return}await this.sleep(this.backoffDelayMs(n)),n+=1;continue;case"partial":if(o.permanent.length>0&&this.logger.error("[WaniWani] Dropping %d event(s) rejected as permanent",o.permanent.length),o.retryable.length===0)return;if(n>=this.maxRetries){this.logger.error("[WaniWani] Dropping %d retryable event(s) after retry exhaustion",o.retryable.length);return}r=o.retryable,await this.sleep(this.backoffDelayMs(n)),n+=1;continue}}}async sendBatchOnce(t){let n;try{n=await this.fetchFn(this.endpointUrl,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`,"X-WaniWani-SDK":nt},body:JSON.stringify(this.makeBatchRequest(t))})}catch(i){return{kind:"retryable",reason:Jt(i)}}if(Vt.has(n.status))return{kind:"auth",status:n.status};if(zt.has(n.status))return{kind:"retryable",reason:`HTTP ${n.status}`};if(!n.ok)return{kind:"permanent",reason:`HTTP ${n.status}`};let r=await Gt(n);if(!r?.rejected||r.rejected.length===0)return{kind:"success"};let o=this.classifyRejectedEvents(t,r.rejected);return o.retryable.length===0&&o.permanent.length===0?{kind:"success"}:{kind:"partial",retryable:o.retryable,permanent:o.permanent}}makeBatchRequest(t){return{sentAt:this.now().toISOString(),source:{sdk:nt,version:this.sdkVersion??"0.0.0"},events:t}}classifyRejectedEvents(t,n){let r=new Map(t.map(s=>[s.id,s])),o=[],i=[];for(let s of n){let a=r.get(s.eventId);if(a){if(Yt(s)){o.push(a);continue}i.push(a)}}return{retryable:o,permanent:i}}backoffDelayMs(t){let n=this.retryBaseDelayMs*2**t;return Math.min(n,this.retryMaxDelayMs)}stopTransportForAuthFailure(t,n){this.isStopped=!0;let r=this.buffer.length;this.buffer.splice(0,r),this.logger.error("[WaniWani] Auth failure (HTTP %d). Stopping tracking transport and dropping %d queued event(s)",t,n+r)}};function Yt(e){if(e.retryable===!0)return!0;let t=e.code.toLowerCase();return t.includes("timeout")||t.includes("temporary")||t.includes("unavailable")||t.includes("rate_limit")||t.includes("transient")||t.includes("server")}async function Gt(e){let t=await e.text();if(t)try{return JSON.parse(t)}catch{return}}function Zt(e,t){let n=e.endsWith("/")?e:`${e}/`,r=t.startsWith("/")?t.slice(1):t;return`${n}${r}`}function Jt(e){return e instanceof Error?e.message:String(e)}function ot(e){let{apiUrl:t,apiKey:n,tracking:r}=e;function o(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}let i=n?rt({apiUrl:t,apiKey:n,endpointPath:r.endpointPath,flushIntervalMs:r.flushIntervalMs,maxBatchSize:r.maxBatchSize,maxBufferSize:r.maxBufferSize,maxRetries:r.maxRetries,retryBaseDelayMs:r.retryBaseDelayMs,retryMaxDelayMs:r.retryMaxDelayMs,shutdownTimeoutMs:r.shutdownTimeoutMs}):void 0,s={async identify(a,c,d){o();let p=X({event:"user.identified",externalUserId:a,properties:c,meta:d});return i?.enqueue(p),{eventId:p.id}},async track(a){o();let c=X(a);return i?.enqueue(c),{eventId:c.id}},async flush(){o(),await i?.flush()},async shutdown(a){return o(),await i?.shutdown({timeoutMs:a?.timeoutMs??r.shutdownTimeoutMs})??{timedOut:!1,pendingEvents:0}}};return i&&Xt(s,r.shutdownTimeoutMs),s}function Xt(e,t){if(typeof process>"u"||typeof process.once!="function"||typeof process.on!="function")return;let n=()=>{e.shutdown({timeoutMs:t})};process.once("beforeExit",n),process.once("SIGINT",n),process.once("SIGTERM",n)}function Q(e){let t=e,n=t?.apiUrl??"https://app.waniwani.ai",r=t?.apiKey??process.env.WANIWANI_API_KEY,o={endpointPath:t?.tracking?.endpointPath??"/api/mcp/events/v2/batch",flushIntervalMs:t?.tracking?.flushIntervalMs??1e3,maxBatchSize:t?.tracking?.maxBatchSize??20,maxBufferSize:t?.tracking?.maxBufferSize??1e3,maxRetries:t?.tracking?.maxRetries??3,retryBaseDelayMs:t?.tracking?.retryBaseDelayMs??200,retryMaxDelayMs:t?.tracking?.retryMaxDelayMs??2e3,shutdownTimeoutMs:t?.tracking?.shutdownTimeoutMs??2e3},i={apiUrl:n,apiKey:r,tracking:o},s=ot(i),a=et(i);return{...s,kb:a,_config:i}}function Qt(e){let t=e.event_type??"widget_click",r=t.startsWith("widget_")?t:`widget_${t}`,o={...e.metadata??{}};return e.event_name&&(o.event_name=e.event_name),{event:r,properties:o,sessionId:e.session_id,traceId:e.trace_id,externalUserId:e.user_id,eventId:e.event_id,timestamp:e.timestamp,source:e.source??"widget"}}function en(e){let t={apiKey:e?.apiKey,apiUrl:e?.apiUrl},n;function r(){return n||(n=Q(t)),n}return async function(i){let s;try{s=await i.json()}catch{return new Response(JSON.stringify({error:"Invalid JSON"}),{status:400,headers:{"Content-Type":"application/json"}})}if(!Array.isArray(s.events)||s.events.length===0)return new Response(JSON.stringify({error:"Missing or empty events array"}),{status:400,headers:{"Content-Type":"application/json"}});try{let a=r(),c=[];for(let d of s.events){let p=Qt(d),u=await a.track(p);c.push(u.eventId)}return await a.flush(),new Response(JSON.stringify({ok:!0,accepted:c.length}),{status:200,headers:{"Content-Type":"application/json"}})}catch(a){let c=a instanceof Error?a.message:"Unknown error";return new Response(JSON.stringify({error:c}),{status:500,headers:{"Content-Type":"application/json"}})}}}var fe=U("widget-token"),tn=120*1e3,ee=class{cached=null;pending=null;config;constructor(t){this.config=t}async getToken(t,n){return this.cached&&Date.now()<this.cached.expiresAt-tn?this.cached.token:this.pending?this.pending:(this.pending=this.mint(t,n).finally(()=>{this.pending=null}),this.pending)}async mint(t,n){let r=nn(this.config.apiUrl,"/api/mcp/widget-tokens");fe("minting token from",r);let o={};t&&(o.sessionId=t),n&&(o.traceId=n);try{let i=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify(o),signal:AbortSignal.timeout(5e3)});if(fe("mint response:",i.status),!i.ok)return null;let s=await i.json(),a=s.data&&typeof s.data=="object"?s.data:s,c=new Date(a.expiresAt).getTime();return!a.token||Number.isNaN(c)?null:(this.cached={token:a.token,expiresAt:c},a.token)}catch(i){return fe("mint failed:",i),null}}};function nn(e,t){return`${e.endsWith("/")?e.slice(0,-1):e}${t}`}async function it(e){if(typeof globalThis.crypto?.subtle?.digest=="function"){let n=await crypto.subtle.digest("SHA-256",new TextEncoder().encode(e));return Array.from(new Uint8Array(n)).map(r=>r.toString(16).padStart(2,"0")).join("")}let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return`simple-${Math.abs(t).toString(36)}`}function rn(e){return it(JSON.stringify({nodes:e.nodes,edges:e.edges}))}var ge="__waniwani_funnel_sync_cache__";function on(){let e=globalThis;return e[ge]||(e[ge]=new Map),e[ge]}async function st(e,t,n){if(e.length===0)return;let r=[...e].sort((c,d)=>c.flowId.localeCompare(d.flowId)),o=await it(JSON.stringify(r.map(c=>({flowId:c.flowId,nodes:c.nodes,edges:c.edges})))),i=on();if(i.get(n)===o)return;let s=await Promise.all(e.map(async c=>({...c,configHash:await rn(c)}))),a=JSON.stringify({flows:s});try{let c=`${t}/api/mcp/funnel/sync`;fetch(c,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${n}`},body:a}).then(()=>{i.set(n,o)}).catch(()=>{})}catch{}}var at="waniwani/sessionId",te="waniwani/geoLocation",ne="waniwani/userLocation",sn="openai/userLocation",an=[sn,te,ne];function ct(e,t){if(t.length===0)return e;let n;for(let r of an){let o=e[r];if(!v(o))continue;let i;for(let s of t)s in o&&(i||(i={...o}),delete i[s]);i&&(n||(n={...e}),n[r]=i)}return n??e}function v(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function B(e){if(!v(e))return;let t=e._meta;return v(t)?t:void 0}function we(e){if(!v(e))return;let t=e.content;return Array.isArray(t)?t.find(r=>v(r)&&r.type==="text"&&typeof r.text=="string")?.text:void 0}function cn(e,t){return typeof t=="function"?t(e)??"other":t??"other"}function me(e,t,n,r,o,i){let s=cn(e,n.toolType),a=n.stripLocationFields,c=a&&a.length>0,d=B(t),p=d&&c?ct(d,a):d,u=i?.input!==void 0&&n.redactInput?n.redactInput(i.input):i?.input,g=c&&v(i?.output)&&v(i.output._meta)?{...i.output,_meta:ct(i.output._meta,a)}:i?.output;return{event:"tool.called",properties:{name:e,type:s,...r??{},...u!==void 0&&{input:u},...g!==void 0&&{output:g}},meta:p,source:j(p),metadata:{...n.metadata??{},...o&&{clientInfo:o}}}}async function he(e,t,n){try{await e.track(t)}catch(r){n?.(Te(r))}}async function ye(e,t){try{await e.flush()}catch(n){t?.(Te(n))}}async function pt(e,t,n,r,o){if(!v(e))return;v(e._meta)||(e._meta={});let i=e._meta,s=v(i.waniwani)?i.waniwani:void 0,a={...s??{},endpoint:s?.endpoint??`${n.replace(/\/$/,"")}/api/mcp/events/v2/batch`};if(t)try{let u=await t.getToken();u&&(a.token=u)}catch(u){o?.(Te(u))}let c=F(i);c&&(a.sessionId||(a.sessionId=c));let d=ft(i);d!==void 0&&(a.geoLocation||(a.geoLocation=d));let p=j(B(r));p&&!a.source&&(a.source=p),i.waniwani=a}var dt=["openai/outputTemplate","openai/widgetAccessible","openai/resultCanProduceWidget","openai/toolInvocation/invoking","openai/toolInvocation/invoked","ui/resourceUri","ui"];function ut(e,t){if(!t||!v(e))return;let n=!1;for(let o of dt)if(o in t){n=!0;break}if(!n)return;v(e._meta)||(e._meta={});let r=e._meta;for(let o of dt)o in t&&(o in r||(r[o]=t[o]))}function lt(e,t){let n=B(t);if(!n||!v(e))return;v(e._meta)||(e._meta={});let r=e._meta,o=F(n);o&&!r[at]&&(r[at]=o);let i=ft(n);i&&(r[te]||(r[te]=i),r[ne]||(r[ne]=i))}function ft(e){if(!e)return;let t=e[te]??e[ne];if(v(t)||typeof t=="string")return t}function Te(e){return e instanceof Error?e:new Error(String(e))}function gt(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function wt(e){if(typeof e.sessionId=="string"&&e.sessionId)return e.sessionId;if(gt(e.requestInfo)){let t=e.requestInfo.headers;if(gt(t)){let n={};for(let i of Object.keys(t))n[i.toLowerCase()]=t[i];let r=n["mcp-session-id"];if(typeof r=="string"&&r)return r;let o=n["x-waniwani-session-id"];if(typeof o=="string"&&o)return o}}}var ht=Symbol.for("waniwani.wrappedHandler"),re=U("mcp"),ke="https://app.waniwani.ai",dn="REDACTED";function pn(e){if(!e)return;let t=e[z];if(!Array.isArray(t)||t.length===0)return;let n=new Set(t.filter(r=>typeof r=="string"));if(n.size!==0)return r=>{if(!v(r))return r;let o=r.stateUpdates;if(!v(o))return r;let i=!1,s={...o};for(let a of n)a in s&&(s[a]=dn,i=!0);return i?{...r,stateUpdates:s}:r}}function mt(e,t,n,r){let{server:o,tracker:i,opts:s,tokenCache:a,injectToken:c}=n,d=s.applyFieldRedactions===!0?pn(r):void 0,p=d?{...s,redactInput:d}:s,u=async(g,y)=>{let l=B(y)??{};if(!F(l)&&v(y)){let f=wt(y);f&&(l["waniwani/sessionId"]=f,y._meta=l)}let T=be(i,l,{apiUrl:i._config.apiUrl,apiKey:i._config.apiKey});v(y)&&(y[ie]=T);let R=performance.now(),k=o.server?.getClientVersion?.();try{let f=await t(g,y),E=Math.round(performance.now()-R);re(`tool "${e}" handler returned in ${E}ms, running post-processing...`);let S=v(f)&&f.isError===!0;if(S){let x=we(f);console.error(`[waniwani] Tool "${e}" returned error${x?`: ${x}`:""}`)}return await he(i,me(e,y,p,{durationMs:E,status:S?"error":"ok",...S&&{errorMessage:we(f)??"Unknown tool error"}},k,{input:g,output:f}),s.onError),re(`tool "${e}" tracking done`),s.flushAfterToolCall&&await ye(i,s.onError),lt(f,y),ut(f,r),c&&(await pt(f,a,i._config.apiUrl??ke,y,s.onError),re(`tool "${e}" widget config injected`)),re(`tool "${e}" post-processing complete, returning result`),f}catch(f){let E=Math.round(performance.now()-R);throw await he(i,me(e,y,p,{durationMs:E,status:"error",errorMessage:f instanceof Error?f.message:String(f)},k,{input:g}),s.onError),s.flushAfterToolCall&&await ye(i,s.onError),f}};return u[ht]=!0,u}function un(e,t){let n=e;if(n.__waniwaniWrapped)return n;n.__waniwaniWrapped=!0;let r=t??{},o=r.client??Q(),i=r.injectWidgetToken!==!1,s=o._config.apiKey?new ee({apiUrl:o._config.apiUrl??ke,apiKey:o._config.apiKey}):null,a={server:e,tracker:o,opts:r,tokenCache:s,injectToken:i},c=e.registerTool.bind(e);n.registerTool=((...p)=>{let[u,g,y]=p;if(typeof y!="function")return c(...p);let l=typeof u=="string"&&u.trim().length>0?u:"unknown",w=v(g)&&v(g._meta)?g._meta:void 0,T=mt(l,y,a,w);return c(u,g,T)});let d=e._registeredTools;if(v(d))for(let[p,u]of Object.entries(d)){if(!v(u))continue;let g=u.handler;if(typeof g!="function"||g[ht])continue;let y=v(u._meta)?u._meta:void 0;u.handler=mt(p,g,a,y)}if(o._config.apiKey){let p=e._registeredTools,u=[];if(p&&typeof p=="object"){for(let g of Object.values(p))if(g&&typeof g=="object"){let y=g._meta,l=y&&typeof y=="object"?y._flowGraph:void 0;l?.nodes?.length&&u.push(l)}}u.length>0&&st(u,o._config.apiUrl??ke,o._config.apiKey)}return n}export{C as END,_ as START,O as StateGraph,D as WaniwaniKvStore,Ye as createFlow,Ge as createFlowTestHarness,Qe as createResource,Ut as createTool,en as createTrackingRoute,oe as detectPlatform,Tt as isMCPApps,yt as isOpenAI,qe as redacted,Dt as registerTools,un as withWaniwani};
|
|
7
7
|
//# sourceMappingURL=index.js.map
|