@waniwani/sdk 0.21.2 → 0.21.4
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 +58 -59
- package/dist/chat/embed.js.map +1 -1
- package/dist/chat/index.js +7 -7
- package/dist/chat/index.js.map +1 -1
- package/dist/chat/styles.css +1 -1
- package/dist/documents/index.js +1 -1
- package/dist/documents/index.js.map +1 -1
- package/dist/index.d.ts +40 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +41 -0
- 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-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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--ww-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ww-color-black:#000;--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-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-blur-md:12px;--ww-blur-xl:24px;--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\:absolute{position:absolute}.ww\:fixed{position:fixed}.ww\:relative{position:relative}.ww\:sticky{position:sticky}.ww\:inset-0{inset:calc(var(--ww-spacing)*0)}.ww\:top-2{top:calc(var(--ww-spacing)*2)}.ww\:top-full{top:100%}.ww\:right-0{right:calc(var(--ww-spacing)*0)}.ww\:right-2{right:calc(var(--ww-spacing)*2)}.ww\:bottom-0{bottom:calc(var(--ww-spacing)*0)}.ww\:bottom-2{bottom:calc(var(--ww-spacing)*2)}.ww\:bottom-3{bottom:calc(var(--ww-spacing)*3)}.ww\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:left-0{left:calc(var(--ww-spacing)*0)}.ww\:left-\[50\%\]{left:50%}.ww\:isolate{isolation:isolate}.ww\:-z-\[1\]{z-index:calc(1*-1)}.ww\:z-10{z-index:10}.ww\:z-50{z-index:50}.ww\:z-\[1\]{z-index:1}.ww\:z-\[2147483000\]{z-index:2147483000}.ww\:z-\[2147483002\]{z-index:2147483002}.ww\:mx-auto{margin-inline:auto}.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-0{margin-bottom:calc(var(--ww-spacing)*0)}.ww\:mb-4{margin-bottom:calc(var(--ww-spacing)*4)}.ww\:mb-6{margin-bottom:calc(var(--ww-spacing)*6)}.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-10{width:calc(var(--ww-spacing)*10);height:calc(var(--ww-spacing)*10)}.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-0\.5{height:calc(var(--ww-spacing)*.5)}.ww\:h-2\.5{height:calc(var(--ww-spacing)*2.5)}.ww\:h-5{height:calc(var(--ww-spacing)*5)}.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-36{max-height:calc(var(--ww-spacing)*36)}.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-5{min-height:calc(var(--ww-spacing)*5)}.ww\:min-h-full{min-height:100%}.ww\:w-60{width:calc(var(--ww-spacing)*60)}.ww\:w-72{width:calc(var(--ww-spacing)*72)}.ww\:w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.ww\:w-auto{width:auto}.ww\:w-fit{width:fit-content}.ww\:w-full{width:100%}.ww\:w-px{width:1px}.ww\:\[max-width\:var\(--ww-msg-max-width\,80\%\)\]{max-width:var(--ww-msg-max-width,80%)}.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-72{max-width:calc(var(--ww-spacing)*72)}.ww\:max-w-\[440px\]{max-width:440px}.ww\:max-w-\[720px\]{max-width:720px}.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-default{cursor:default}.ww\:cursor-pointer{cursor:pointer}.ww\:resize-none{resize:none}.ww\:list-none{list-style-type: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-nowrap{flex-wrap:nowrap}.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\:justify-end{justify-content:flex-end}.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-2\.5{gap:calc(var(--ww-spacing)*2.5)}.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\:self-stretch{align-self:stretch}.ww\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ww\:overflow-auto{overflow:auto}.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-\[20px\]{border-radius:20px}.ww\:rounded-\[inherit\]{border-radius:inherit}.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-none{border-radius:0}.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-2{border-style:var(--tw-border-style);border-width:2px}.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-dashed{--tw-border-style:dashed;border-style:dashed}.ww\:border-none{--tw-border-style:none;border-style:none}.ww\:border-border{border-color:var(--ww-color-border,#e5e7eb)}.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-primary{border-color:var(--ww-color-primary,#6366f1)}.ww\:border-transparent{border-color:#0000}.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-background\/85{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/85{background-color:color-mix(in oklab,var(--ww-color-background,#fff)85%,transparent)}}.ww\:bg-black\/45{background-color:var(--ww-color-black)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-black\/45{background-color:color-mix(in oklab,var(--ww-color-black)45%,transparent)}}.ww\:bg-border{background-color:var(--ww-color-border,#e5e7eb)}.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\/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-tool-card{background-color:var(--ww-color-tool-card,#f4f4f5)}.ww\:bg-transparent{background-color:#0000}.ww\:object-contain{object-fit:contain}.ww\:object-cover{object-fit:cover}.ww\:object-center{object-position:center}.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-2{padding:calc(var(--ww-spacing)*2)}.ww\:p-2\.5{padding:calc(var(--ww-spacing)*2.5)}.ww\:p-3{padding:calc(var(--ww-spacing)*3)}.ww\:px-0{padding-inline:calc(var(--ww-spacing)*0)}.ww\:px-0\.5{padding-inline:calc(var(--ww-spacing)*.5)}.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-3\.5{padding-inline:calc(var(--ww-spacing)*3.5)}.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-12{padding-block:calc(var(--ww-spacing)*12)}.ww\:pt-1{padding-top:calc(var(--ww-spacing)*1)}.ww\:pt-1\.5{padding-top:calc(var(--ww-spacing)*1.5)}.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-1\.5{padding-right:calc(var(--ww-spacing)*1.5)}.ww\:pr-3{padding-right:calc(var(--ww-spacing)*3)}.ww\:pr-9{padding-right:calc(var(--ww-spacing)*9)}.ww\:pb-0{padding-bottom:calc(var(--ww-spacing)*0)}.ww\:pb-1{padding-bottom:calc(var(--ww-spacing)*1)}.ww\:pb-1\.5{padding-bottom:calc(var(--ww-spacing)*1.5)}.ww\:pb-2{padding-bottom:calc(var(--ww-spacing)*2)}.ww\:pb-2\.5{padding-bottom:calc(var(--ww-spacing)*2.5)}.ww\:pb-3{padding-bottom:calc(var(--ww-spacing)*3)}.ww\:pl-1{padding-left:calc(var(--ww-spacing)*1)}.ww\:pl-3\.5{padding-left:calc(var(--ww-spacing)*3.5)}.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-\[family-name\:var\(--ww-font-sans\)\]{font-family:var(--ww-font-sans)}.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\:\[font-size\:var\(--ww-font-size\,1rem\)\]{font-size:var(--ww-font-size,1rem)}.ww\:text-\[10px\]{font-size:10px}.ww\:text-\[11px\]{font-size:11px}.ww\:\[line-height\:var\(--ww-line-height\,1\.5\)\]{line-height:var(--ww-line-height,1.5)}.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\:break-words{overflow-wrap:break-word}.ww\:break-all{word-break:break-all}.ww\:whitespace-nowrap{white-space:nowrap}.ww\:whitespace-pre-wrap{white-space:pre-wrap}.ww\:text-background{color:var(--ww-color-background,#fff)}.ww\:text-foreground,.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\:uppercase{text-transform:uppercase}.ww\:italic{font-style:italic}.ww\:underline{text-decoration-line:underline}.ww\:underline-offset-2{text-underline-offset:2px}.ww\:opacity-0{opacity:0}.ww\:opacity-60{opacity:.6}.ww\:opacity-70{opacity:.7}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);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\: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-\[\#0a6c74\]{--tw-ring-color:#0a6c74}.ww\:backdrop-blur-md{--tw-backdrop-blur:blur(var(--ww-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.ww\:backdrop-blur-xl{--tw-backdrop-blur:blur(var(--ww-blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.ww\:backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.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-\[max-width\]{transition-property:max-width;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-\[width\]{transition-property:width;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\]\:\[border-radius\:var\(--ww-msg-radius\,8px\)\]:is(:where(.ww\:group).is-user *){border-radius:var(--ww-msg-radius,8px)}.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\]\:\[padding\:var\(--ww-msg-pad-y\,12px\)_var\(--ww-msg-pad-x\,16px\)\]:is(:where(.ww\:group).is-user *){padding:var(--ww-msg-pad-y,12px)var(--ww-msg-pad-x,16px)}.ww\:group-\[\.is-user\]\:\[color\:var\(--ww-color-user-bubble-text\)\]:is(:where(.ww\:group).is-user *){color:var(--ww-color-user-bubble-text)}.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-border:hover{background-color:var(--ww-color-border,#e5e7eb)}.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-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\:underline:hover{text-decoration-line:underline}}.ww\:disabled\:pointer-events-none:disabled{pointer-events:none}.ww\:disabled\:opacity-40:disabled{opacity:.4}.ww\:disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.ww\:sm\:inset-auto{inset:auto}.ww\:sm\:right-0{right:calc(var(--ww-spacing)*0)}.ww\:sm\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:sm\:left-0{left:calc(var(--ww-spacing)*0)}.ww\:sm\:mx-auto{margin-inline:auto}.ww\:sm\:h-\[720px\]{height:720px}.ww\:sm\:max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.ww\:sm\:w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.ww\:sm\:max-w-\[1000px\]{max-width:1000px}.ww\:sm\:rounded-2xl{border-radius:var(--ww-radius-2xl)}.ww\:sm\:border{border-style:var(--tw-border-style);border-width:1px}.ww\:sm\:border-border{border-color:var(--ww-color-border,#e5e7eb)}.ww\:sm\:py-2{padding-block:calc(var(--ww-spacing)*2)}.ww\:sm\:pr-2{padding-right:calc(var(--ww-spacing)*2)}.ww\:sm\:pl-4{padding-left:calc(var(--ww-spacing)*4)}.ww\:sm\:text-sm{font-size:var(--ww-text-sm);line-height:var(--tw-leading,var(--ww-text-sm--line-height))}.ww\:sm\:text-\[11px\]{font-size:11px}}.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)}}@keyframes ww-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){[data-waniwani-chat] [data-waniwani-shimmer]{color:var(--ww-color-muted-foreground)!important;animation:none!important}}[data-waniwani-floating=dock]{transition:opacity .32s,transform .42s cubic-bezier(.22,1,.36,1),max-width .3s,visibility 0s linear .42s}[data-waniwani-floating=dock][data-appeared=true][data-state=shown]{visibility:visible;opacity:1;pointer-events:auto;transition:opacity .32s,transform .42s cubic-bezier(.22,1,.36,1),max-width .3s,visibility;transform:translateY(0)}[data-waniwani-floating=dock][data-appeared=false],[data-waniwani-floating=dock][data-state=hidden]{opacity:0;visibility:hidden;pointer-events:none;transform:translateY(1rem)}[data-waniwani-floating=panel]{transition:clip-path .44s cubic-bezier(.22,1,.36,1),opacity .26s,visibility 0s linear .44s}[data-waniwani-floating=panel][data-state=shown]{visibility:visible;opacity:1;pointer-events:auto;clip-path:inset(-40px round 18px);transition:clip-path .44s cubic-bezier(.22,1,.36,1),opacity .26s,visibility}[data-waniwani-floating=panel][data-state=hidden]{opacity:0;visibility:hidden;pointer-events:none;clip-path:inset(calc(100% - 60px) 12% 0 round 24px)}@media (max-width:639px){[data-waniwani-floating=panel][data-state=shown]{clip-path:inset(0)}[data-waniwani-floating=panel][data-state=hidden]{clip-path:inset(calc(100% - 72px) 6% 0 round 22px)}}@media (prefers-reduced-motion:reduce){[data-waniwani-floating=dock],[data-waniwani-floating=panel]{clip-path:none;transition:visibility 0s linear 10ms}[data-waniwani-floating=dock][data-appeared=true][data-state=shown],[data-waniwani-floating=panel][data-state=shown]{transition:visibility}}[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);--ww-color-user-bubble-text:var(--ww-user-bubble-text,var(--ww-color-primary-foreground));--ww-color-assistant-bubble-text:var(--ww-assistant-bubble-text,var(--ww-color-foreground));--ww-glass:var(--ww-glass-tint,transparent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat]{--ww-glass:color-mix(in srgb,var(--ww-glass-tint,transparent)calc(var(--ww-glass-tint-opacity,0)*100%),#eceef499)}}[data-waniwani-chat]{--ww-glass-border:#0000000f;border-style:solid;border-width:var(--ww-border-width,0);border-color:var(--ww-color-border);box-shadow:var(--ww-shadow,none)}[data-waniwani-chat][data-assistant-bubble=true] .ww-message-assistant .ww-bubble{background:var(--ww-color-accent);color:var(--ww-color-assistant-bubble-text);border-radius:var(--ww-msg-radius,8px);padding:var(--ww-msg-pad-y,12px)var(--ww-msg-pad-x,16px);width:fit-content;max-width:var(--ww-msg-max-width,80%)}.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);--ww-color-user-bubble-text:var(--ww-user-bubble-text,#fff);--ww-color-assistant-bubble-text:var(--ww-assistant-bubble-text,var(--ww-color-foreground));--ww-glass:var(--ww-glass-tint,transparent)}@supports (color:color-mix(in lab, red, red)){.dark [data-waniwani-chat],[data-waniwani-chat].dark{--ww-glass:color-mix(in srgb,var(--ww-glass-tint,transparent)calc(var(--ww-glass-tint-opacity,0)*100%),#282a3480)}}.dark [data-waniwani-chat],[data-waniwani-chat].dark{--ww-glass-border:#ffffff1f}@media (prefers-color-scheme:dark){[data-waniwani-chat][data-color-scheme=auto]{--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);--ww-color-user-bubble-text:var(--ww-user-bubble-text,#fff);--ww-color-assistant-bubble-text:var(--ww-assistant-bubble-text,var(--ww-color-foreground));--ww-glass:var(--ww-glass-tint,transparent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat][data-color-scheme=auto]{--ww-glass:color-mix(in srgb,var(--ww-glass-tint,transparent)calc(var(--ww-glass-tint-opacity,0)*100%),#282a3480)}}[data-waniwani-chat][data-color-scheme=auto]{--ww-glass-border:#ffffff1f}}[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].dark [data-streamdown=link],.dark [data-waniwani-chat] [data-streamdown=link]{color:var(--ww-color-primary)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat].dark [data-streamdown=link],.dark [data-waniwani-chat] [data-streamdown=link]{color:color-mix(in oklab,var(--ww-color-primary)55%,white)}}@media (prefers-color-scheme:dark){[data-waniwani-chat][data-color-scheme=auto] [data-streamdown=link]{color:var(--ww-color-primary)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat][data-color-scheme=auto] [data-streamdown=link]{color:color-mix(in oklab,var(--ww-color-primary)55%,white)}}}[data-waniwani-chat].dark [data-waniwani-logo],.dark [data-waniwani-chat] [data-waniwani-logo]{filter:invert()}@media (prefers-color-scheme:dark){[data-waniwani-chat][data-color-scheme=auto] [data-waniwani-logo]{filter:invert()}}[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-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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes 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-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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--ww-font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ww-color-black:#000;--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-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-blur-md:12px;--ww-blur-xl:24px;--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\:absolute{position:absolute}.ww\:fixed{position:fixed}.ww\:relative{position:relative}.ww\:sticky{position:sticky}.ww\:inset-0{inset:calc(var(--ww-spacing)*0)}.ww\:top-2{top:calc(var(--ww-spacing)*2)}.ww\:top-full{top:100%}.ww\:right-0{right:calc(var(--ww-spacing)*0)}.ww\:right-2{right:calc(var(--ww-spacing)*2)}.ww\:bottom-0{bottom:calc(var(--ww-spacing)*0)}.ww\:bottom-2{bottom:calc(var(--ww-spacing)*2)}.ww\:bottom-3{bottom:calc(var(--ww-spacing)*3)}.ww\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:left-0{left:calc(var(--ww-spacing)*0)}.ww\:left-\[50\%\]{left:50%}.ww\:isolate{isolation:isolate}.ww\:-z-\[1\]{z-index:calc(1*-1)}.ww\:z-10{z-index:10}.ww\:z-50{z-index:50}.ww\:z-\[1\]{z-index:1}.ww\:z-\[2147483000\]{z-index:2147483000}.ww\:z-\[2147483002\]{z-index:2147483002}.ww\:mx-auto{margin-inline:auto}.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-0{margin-bottom:calc(var(--ww-spacing)*0)}.ww\:mb-4{margin-bottom:calc(var(--ww-spacing)*4)}.ww\:mb-6{margin-bottom:calc(var(--ww-spacing)*6)}.ww\:ml-3{margin-left:calc(var(--ww-spacing)*3)}.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-10{width:calc(var(--ww-spacing)*10);height:calc(var(--ww-spacing)*10)}.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-0\.5{height:calc(var(--ww-spacing)*.5)}.ww\:h-2\.5{height:calc(var(--ww-spacing)*2.5)}.ww\:h-5{height:calc(var(--ww-spacing)*5)}.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-36{max-height:calc(var(--ww-spacing)*36)}.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-5{min-height:calc(var(--ww-spacing)*5)}.ww\:min-h-full{min-height:100%}.ww\:w-60{width:calc(var(--ww-spacing)*60)}.ww\:w-72{width:calc(var(--ww-spacing)*72)}.ww\:w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.ww\:w-auto{width:auto}.ww\:w-fit{width:fit-content}.ww\:w-full{width:100%}.ww\:w-px{width:1px}.ww\:\[max-width\:var\(--ww-msg-max-width\,80\%\)\]{max-width:var(--ww-msg-max-width,80%)}.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-72{max-width:calc(var(--ww-spacing)*72)}.ww\:max-w-\[440px\]{max-width:440px}.ww\:max-w-\[720px\]{max-width:720px}.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\:flex-none{flex:none}.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-default{cursor:default}.ww\:cursor-pointer{cursor:pointer}.ww\:resize-none{resize:none}.ww\:list-none{list-style-type: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-nowrap{flex-wrap:nowrap}.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\:justify-end{justify-content:flex-end}.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-2\.5{gap:calc(var(--ww-spacing)*2.5)}.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\:self-stretch{align-self:stretch}.ww\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ww\:overflow-auto{overflow:auto}.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-\[20px\]{border-radius:20px}.ww\:rounded-\[inherit\]{border-radius:inherit}.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-none{border-radius:0}.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-2{border-style:var(--tw-border-style);border-width:2px}.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-dashed{--tw-border-style:dashed;border-style:dashed}.ww\:border-none{--tw-border-style:none;border-style:none}.ww\:border-border{border-color:var(--ww-color-border,#e5e7eb)}.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-primary{border-color:var(--ww-color-primary,#6366f1)}.ww\:border-transparent{border-color:#0000}.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-background\/85{background-color:var(--ww-color-background,#fff)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-background\/85{background-color:color-mix(in oklab,var(--ww-color-background,#fff)85%,transparent)}}.ww\:bg-black\/45{background-color:var(--ww-color-black)}@supports (color:color-mix(in lab, red, red)){.ww\:bg-black\/45{background-color:color-mix(in oklab,var(--ww-color-black)45%,transparent)}}.ww\:bg-border{background-color:var(--ww-color-border,#e5e7eb)}.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\/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-tool-card{background-color:var(--ww-color-tool-card,#f4f4f5)}.ww\:bg-transparent{background-color:#0000}.ww\:object-contain{object-fit:contain}.ww\:object-cover{object-fit:cover}.ww\:object-center{object-position:center}.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-2{padding:calc(var(--ww-spacing)*2)}.ww\:p-2\.5{padding:calc(var(--ww-spacing)*2.5)}.ww\:p-3{padding:calc(var(--ww-spacing)*3)}.ww\:px-0{padding-inline:calc(var(--ww-spacing)*0)}.ww\:px-0\.5{padding-inline:calc(var(--ww-spacing)*.5)}.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-3\.5{padding-inline:calc(var(--ww-spacing)*3.5)}.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-12{padding-block:calc(var(--ww-spacing)*12)}.ww\:pt-1{padding-top:calc(var(--ww-spacing)*1)}.ww\:pt-1\.5{padding-top:calc(var(--ww-spacing)*1.5)}.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-1{padding-right:calc(var(--ww-spacing)*1)}.ww\:pr-1\.5{padding-right:calc(var(--ww-spacing)*1.5)}.ww\:pr-2{padding-right:calc(var(--ww-spacing)*2)}.ww\:pr-3{padding-right:calc(var(--ww-spacing)*3)}.ww\:pr-9{padding-right:calc(var(--ww-spacing)*9)}.ww\:pb-0{padding-bottom:calc(var(--ww-spacing)*0)}.ww\:pb-1{padding-bottom:calc(var(--ww-spacing)*1)}.ww\:pb-1\.5{padding-bottom:calc(var(--ww-spacing)*1.5)}.ww\:pb-2{padding-bottom:calc(var(--ww-spacing)*2)}.ww\:pb-2\.5{padding-bottom:calc(var(--ww-spacing)*2.5)}.ww\:pb-3{padding-bottom:calc(var(--ww-spacing)*3)}.ww\:pl-1{padding-left:calc(var(--ww-spacing)*1)}.ww\:pl-3{padding-left:calc(var(--ww-spacing)*3)}.ww\:pl-3\.5{padding-left:calc(var(--ww-spacing)*3.5)}.ww\:pl-4{padding-left:calc(var(--ww-spacing)*4)}.ww\:pl-5{padding-left:calc(var(--ww-spacing)*5)}.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-\[family-name\:var\(--ww-font-sans\)\]{font-family:var(--ww-font-sans)}.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\:\[font-size\:var\(--ww-font-size\,1rem\)\]{font-size:var(--ww-font-size,1rem)}.ww\:text-\[10px\]{font-size:10px}.ww\:text-\[11px\]{font-size:11px}.ww\:\[line-height\:var\(--ww-line-height\,1\.5\)\]{line-height:var(--ww-line-height,1.5)}.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\:break-words{overflow-wrap:break-word}.ww\:break-all{word-break:break-all}.ww\:text-ellipsis{text-overflow:ellipsis}.ww\:whitespace-nowrap{white-space:nowrap}.ww\:whitespace-pre-wrap{white-space:pre-wrap}.ww\:text-background{color:var(--ww-color-background,#fff)}.ww\:text-foreground,.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\:uppercase{text-transform:uppercase}.ww\:italic{font-style:italic}.ww\:underline{text-decoration-line:underline}.ww\:underline-offset-2{text-underline-offset:2px}.ww\:opacity-0{opacity:0}.ww\:opacity-60{opacity:.6}.ww\:opacity-70{opacity:.7}.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-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);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\: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-\[\#0a6c74\]{--tw-ring-color:#0a6c74}.ww\:backdrop-blur-md{--tw-backdrop-blur:blur(var(--ww-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.ww\:backdrop-blur-xl{--tw-backdrop-blur:blur(var(--ww-blur-xl));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.ww\:backdrop-saturate-150{--tw-backdrop-saturate:saturate(150%);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.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-\[max-width\]{transition-property:max-width;transition-timing-function:var(--tw-ease,var(--ww-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ww-default-transition-duration))}.ww\:transition-\[width\]{transition-property:width;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\]\:\[border-radius\:var\(--ww-msg-radius\,8px\)\]:is(:where(.ww\:group).is-user *){border-radius:var(--ww-msg-radius,8px)}.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\]\:\[padding\:var\(--ww-msg-pad-y\,12px\)_var\(--ww-msg-pad-x\,16px\)\]:is(:where(.ww\:group).is-user *){padding:var(--ww-msg-pad-y,12px)var(--ww-msg-pad-x,16px)}.ww\:group-\[\.is-user\]\:\[color\:var\(--ww-color-user-bubble-text\)\]:is(:where(.ww\:group).is-user *){color:var(--ww-color-user-bubble-text)}.ww\:placeholder\:overflow-hidden::placeholder{overflow:hidden}.ww\:placeholder\:text-ellipsis::placeholder{text-overflow:ellipsis}.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-border:hover{background-color:var(--ww-color-border,#e5e7eb)}.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-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\:underline:hover{text-decoration-line:underline}}.ww\:disabled\:pointer-events-none:disabled{pointer-events:none}.ww\:disabled\:opacity-40:disabled{opacity:.4}.ww\:disabled\:opacity-50:disabled{opacity:.5}@media (min-width:40rem){.ww\:sm\:inset-auto{inset:auto}.ww\:sm\:right-0{right:calc(var(--ww-spacing)*0)}.ww\:sm\:bottom-4{bottom:calc(var(--ww-spacing)*4)}.ww\:sm\:left-0{left:calc(var(--ww-spacing)*0)}.ww\:sm\:mx-auto{margin-inline:auto}.ww\:sm\:h-\[720px\]{height:720px}.ww\:sm\:max-h-\[calc\(100dvh-2rem\)\]{max-height:calc(100dvh - 2rem)}.ww\:sm\:w-\[calc\(100vw-2rem\)\]{width:calc(100vw - 2rem)}.ww\:sm\:max-w-\[1000px\]{max-width:1000px}.ww\:sm\:rounded-2xl{border-radius:var(--ww-radius-2xl)}.ww\:sm\:border{border-style:var(--tw-border-style);border-width:1px}.ww\:sm\:border-border{border-color:var(--ww-color-border,#e5e7eb)}.ww\:sm\:py-2{padding-block:calc(var(--ww-spacing)*2)}.ww\:sm\:py-3{padding-block:calc(var(--ww-spacing)*3)}.ww\:sm\:pr-2{padding-right:calc(var(--ww-spacing)*2)}.ww\:sm\:pr-2\.5{padding-right:calc(var(--ww-spacing)*2.5)}.ww\:sm\:pl-4{padding-left:calc(var(--ww-spacing)*4)}.ww\:sm\:pl-6{padding-left:calc(var(--ww-spacing)*6)}.ww\:sm\:text-sm{font-size:var(--ww-text-sm);line-height:var(--tw-leading,var(--ww-text-sm--line-height))}.ww\:sm\:text-\[11px\]{font-size:11px}}.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)}}@keyframes ww-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}@media (prefers-reduced-motion:reduce){[data-waniwani-chat] [data-waniwani-shimmer]{color:var(--ww-color-muted-foreground)!important;animation:none!important}}[data-waniwani-floating=dock]{transition:opacity .32s,transform .42s cubic-bezier(.22,1,.36,1),max-width .3s,visibility 0s linear .42s}[data-waniwani-floating=dock][data-appeared=true][data-state=shown]{visibility:visible;opacity:1;pointer-events:auto;transition:opacity .32s,transform .42s cubic-bezier(.22,1,.36,1),max-width .3s,visibility;transform:translateY(0)}[data-waniwani-floating=dock][data-appeared=false],[data-waniwani-floating=dock][data-state=hidden]{opacity:0;visibility:hidden;pointer-events:none;transform:translateY(1rem)}[data-waniwani-floating=panel]{transition:clip-path .44s cubic-bezier(.22,1,.36,1),opacity .26s,visibility 0s linear .44s}[data-waniwani-floating=panel][data-state=shown]{visibility:visible;opacity:1;pointer-events:auto;clip-path:inset(-40px round 18px);transition:clip-path .44s cubic-bezier(.22,1,.36,1),opacity .26s,visibility}[data-waniwani-floating=panel][data-state=hidden]{opacity:0;visibility:hidden;pointer-events:none;clip-path:inset(calc(100% - 60px) 12% 0 round 24px)}@media (max-width:639px){[data-waniwani-floating=panel][data-state=shown]{clip-path:inset(0)}[data-waniwani-floating=panel][data-state=hidden]{clip-path:inset(calc(100% - 72px) 6% 0 round 22px)}}@media (prefers-reduced-motion:reduce){[data-waniwani-floating=dock],[data-waniwani-floating=panel]{clip-path:none;transition:visibility 0s linear 10ms}[data-waniwani-floating=dock][data-appeared=true][data-state=shown],[data-waniwani-floating=panel][data-state=shown]{transition:visibility}}[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);--ww-color-user-bubble-text:var(--ww-user-bubble-text,var(--ww-color-primary-foreground));--ww-color-assistant-bubble-text:var(--ww-assistant-bubble-text,var(--ww-color-foreground));--ww-glass:var(--ww-glass-tint,transparent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat]{--ww-glass:color-mix(in srgb,var(--ww-glass-tint,transparent)calc(var(--ww-glass-tint-opacity,0)*100%),#eceef499)}}[data-waniwani-chat]{--ww-glass-border:#0000000f;border-style:solid;border-width:var(--ww-border-width,0);border-color:var(--ww-color-border);box-shadow:var(--ww-shadow,none)}[data-waniwani-chat][data-assistant-bubble=true] .ww-message-assistant .ww-bubble{background:var(--ww-color-accent);color:var(--ww-color-assistant-bubble-text);border-radius:var(--ww-msg-radius,8px);padding:var(--ww-msg-pad-y,12px)var(--ww-msg-pad-x,16px);width:fit-content;max-width:var(--ww-msg-max-width,80%)}.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);--ww-color-user-bubble-text:var(--ww-user-bubble-text,#fff);--ww-color-assistant-bubble-text:var(--ww-assistant-bubble-text,var(--ww-color-foreground));--ww-glass:var(--ww-glass-tint,transparent)}@supports (color:color-mix(in lab, red, red)){.dark [data-waniwani-chat],[data-waniwani-chat].dark{--ww-glass:color-mix(in srgb,var(--ww-glass-tint,transparent)calc(var(--ww-glass-tint-opacity,0)*100%),#282a3480)}}.dark [data-waniwani-chat],[data-waniwani-chat].dark{--ww-glass-border:#ffffff1f}@media (prefers-color-scheme:dark){[data-waniwani-chat][data-color-scheme=auto]{--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);--ww-color-user-bubble-text:var(--ww-user-bubble-text,#fff);--ww-color-assistant-bubble-text:var(--ww-assistant-bubble-text,var(--ww-color-foreground));--ww-glass:var(--ww-glass-tint,transparent)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat][data-color-scheme=auto]{--ww-glass:color-mix(in srgb,var(--ww-glass-tint,transparent)calc(var(--ww-glass-tint-opacity,0)*100%),#282a3480)}}[data-waniwani-chat][data-color-scheme=auto]{--ww-glass-border:#ffffff1f}}[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].dark [data-streamdown=link],.dark [data-waniwani-chat] [data-streamdown=link]{color:var(--ww-color-primary)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat].dark [data-streamdown=link],.dark [data-waniwani-chat] [data-streamdown=link]{color:color-mix(in oklab,var(--ww-color-primary)55%,white)}}@media (prefers-color-scheme:dark){[data-waniwani-chat][data-color-scheme=auto] [data-streamdown=link]{color:var(--ww-color-primary)}@supports (color:color-mix(in lab, red, red)){[data-waniwani-chat][data-color-scheme=auto] [data-streamdown=link]{color:color-mix(in oklab,var(--ww-color-primary)55%,white)}}}[data-waniwani-chat].dark [data-waniwani-logo],.dark [data-waniwani-chat] [data-waniwani-logo]{filter:invert()}@media (prefers-color-scheme:dark){[data-waniwani-chat][data-color-scheme=auto] [data-waniwani-logo]{filter:invert()}}[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-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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|
package/dist/documents/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var a=class extends Error{constructor(e,
|
|
1
|
+
var a=class extends Error{constructor(e,n){super(e);this.status=n;this.name="WaniWaniError"}};function d(t,o,e){try{let n=JSON.parse(t);if(n!==null&&typeof n=="object"){let r="message"in n&&typeof n.message=="string"?n.message:"",c="detail"in n&&typeof n.detail=="string"?n.detail:"";if(r&&c)return`${r}: ${c}`;if(r)return r;if(c)return c}}catch{}return t||`${e} error: HTTP ${o}`}var E="@waniwani/sdk",h="/api/mcp/modules/documents/extract";function A(t){return"documentId"in t&&typeof t.documentId=="string"}function x(t){return A(t)?{documentId:t.documentId}:{url:t.url,filename:t.filename}}function w(t){let{apiUrl:o,apiKey:e}=t;return{async extract(n){if(!e)throw new Error("WANIWANI_API_KEY is not set");let{toJSONSchema:r}=await import("zod"),c=await fetch(`${o.replace(/\/$/,"")}${h}`,{method:"POST",headers:{Authorization:`Bearer ${e}`,"Content-Type":"application/json","X-WaniWani-SDK":E},body:JSON.stringify({...x(n),schema:r(n.schema),pages:n.pages,sessionId:n.sessionId,correlationId:n.correlationId})});if(!c.ok){let g=await c.text().catch(()=>"");throw new a(d(g,c.status,"Documents API"),c.status)}let p=await c.json(),{fields:l,pageCount:D,pageConfidence:y,documentId:I}=p.data;return{fields:n.schema.parse(l),pageCount:D,pageConfidence:y??null,documentId:I}}}}var T=["documentId","document_id"],S=["filename","file_name","fileName","name"],k=["mediaType","media_type","mimeType","mime_type","contentType","content_type"],_="document",N="application/octet-stream";function s(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function m(t,o){for(let e of o){let n=t[e];if(typeof n=="string"&&n.length>0)return n}}function C(t){if(!s(t))return;let o=m(t,T);if(o)return{documentId:o,filename:m(t,S)??_,mediaType:m(t,k)??N}}function f(t){let o=[],e=new Set;for(let n of Array.isArray(t)?t:[t]){let r=C(n);r&&!e.has(r.documentId)&&(e.add(r.documentId),o.push(r))}return o}function M(t){if(!Array.isArray(t))return[];let o=[...t].reverse().find(e=>s(e)&&e.role==="user");return!s(o)||!Array.isArray(o.parts)?[]:f(o.parts.flatMap(e=>s(e)&&s(e.data)?[e,e.data]:[e]))}function R(t){let o=s(t)?t:void 0,e=f(o?o.documents:t);return e.length>0?e:M(o?o.messages:t)}export{w as createDocumentsClient,R as readAttachedDocuments};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error.ts","../../src/documents/client.ts","../../src/documents/messages.ts"],"sourcesContent":["// Waniwani SDK - Errors\n\nexport class WaniWaniError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"WaniWaniError\";\n\t}\n}\n","import { WaniWaniError } from \"../error.js\";\nimport type { InternalConfig } from \"../types.js\";\nimport type {\n\tDocumentExtractInput,\n\tDocumentExtractResult,\n\tDocumentExtractStoredInput,\n\tDocumentSchema,\n\tDocumentsClient,\n} from \"./types.js\";\n\nconst SDK_NAME = \"@waniwani/sdk\";\nconst EXTRACT_PATH = \"/api/mcp/modules/documents/extract\";\n\n/** Method syntax makes the parameter bivariant, so a structural schema is accepted without an assertion. */\ninterface ZodModule {\n\ttoJSONSchema(schema: DocumentSchema<unknown>): Record<string, unknown>;\n}\n\ninterface ExtractWireResponse {\n\tfields: unknown;\n\tpageCount: number;\n\tpageConfidence: number | null;\n\tdocumentId: string;\n}\n\n/**\n * The platform puts the machine-readable code on `message` and the human reason\n * on `detail`, so a refusal reads as \"UNSUPPORTED_DOCUMENT_TYPE: photo.heic is\n * not one of ...\". The raw body is the fallback.\n */\nfunction refusalMessage(body: string, status: number): string {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(body);\n\t\tif (parsed !== null && typeof parsed === \"object\") {\n\t\t\tconst code =\n\t\t\t\t\"message\" in parsed && typeof parsed.message === \"string\"\n\t\t\t\t\t? parsed.message\n\t\t\t\t\t: \"\";\n\t\t\tconst detail =\n\t\t\t\t\"detail\" in parsed && typeof parsed.detail === \"string\"\n\t\t\t\t\t? parsed.detail\n\t\t\t\t\t: \"\";\n\t\t\tif (code && detail) {\n\t\t\t\treturn `${code}: ${detail}`;\n\t\t\t}\n\t\t\tif (code) {\n\t\t\t\treturn code;\n\t\t\t}\n\t\t\tif (detail) {\n\t\t\t\treturn detail;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// A non-JSON body is surfaced as-is below.\n\t}\n\treturn body || `Documents API error: HTTP ${status}`;\n}\n\nfunction isStoredInput<T>(\n\tinput: DocumentExtractInput<T>,\n): input is DocumentExtractStoredInput<T> {\n\treturn \"documentId\" in input && typeof input.documentId === \"string\";\n}\n\n/** The platform's body is a union, so each branch's fields must travel alone. */\nfunction sourceFields<T>(\n\tinput: DocumentExtractInput<T>,\n): Record<string, string> {\n\tif (isStoredInput(input)) {\n\t\treturn { documentId: input.documentId };\n\t}\n\treturn { url: input.url, filename: input.filename };\n}\n\nexport function createDocumentsClient(\n\tconfig: Pick<InternalConfig, \"apiUrl\" | \"apiKey\">,\n): DocumentsClient {\n\tconst { apiUrl, apiKey } = config;\n\n\treturn {\n\t\tasync extract<T>(\n\t\t\tinput: DocumentExtractInput<T>,\n\t\t): Promise<DocumentExtractResult<T>> {\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new Error(\"WANIWANI_API_KEY is not set\");\n\t\t\t}\n\n\t\t\t// zod is an optional peer dependency and this module is reachable from the\n\t\t\t// package root, so a top-level import would break every consumer that only\n\t\t\t// uses tracking.\n\t\t\tconst { toJSONSchema }: ZodModule = await import(\"zod\");\n\n\t\t\tconst response = await fetch(\n\t\t\t\t`${apiUrl.replace(/\\/$/, \"\")}${EXTRACT_PATH}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"X-WaniWani-SDK\": SDK_NAME,\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t...sourceFields(input),\n\t\t\t\t\t\tschema: toJSONSchema(input.schema),\n\t\t\t\t\t\tpages: input.pages,\n\t\t\t\t\t\tsessionId: input.sessionId,\n\t\t\t\t\t\tcorrelationId: input.correlationId,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst text = await response.text().catch(() => \"\");\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\trefusalMessage(text, response.status),\n\t\t\t\t\tresponse.status,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst json = (await response.json()) as { data: ExtractWireResponse };\n\t\t\tconst { fields, pageCount, pageConfidence, documentId } = json.data;\n\n\t\t\treturn {\n\t\t\t\tfields: input.schema.parse(fields),\n\t\t\t\tpageCount,\n\t\t\t\tpageConfidence: pageConfidence ?? null,\n\t\t\t\tdocumentId,\n\t\t\t};\n\t\t},\n\t};\n}\n","import type { AttachedDocument } from \"./types.js\";\n\nconst DOCUMENT_ID_KEYS = [\"documentId\", \"document_id\"] as const;\nconst FILENAME_KEYS = [\"filename\", \"file_name\", \"fileName\", \"name\"] as const;\nconst MEDIA_TYPE_KEYS = [\n\t\"mediaType\",\n\t\"media_type\",\n\t\"mimeType\",\n\t\"mime_type\",\n\t\"contentType\",\n\t\"content_type\",\n] as const;\n\nconst UNNAMED_FILENAME = \"document\";\nconst UNKNOWN_MEDIA_TYPE = \"application/octet-stream\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction pickFirst(\n\tsource: Record<string, unknown>,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = source[key];\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/** Only the id is load-bearing: it is what `extract()` needs, so an entry missing the descriptive two is still usable. */\nfunction toAttachedDocument(entry: unknown): AttachedDocument | undefined {\n\tif (!isRecord(entry)) {\n\t\treturn undefined;\n\t}\n\n\tconst documentId = pickFirst(entry, DOCUMENT_ID_KEYS);\n\tif (!documentId) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tdocumentId,\n\t\tfilename: pickFirst(entry, FILENAME_KEYS) ?? UNNAMED_FILENAME,\n\t\tmediaType: pickFirst(entry, MEDIA_TYPE_KEYS) ?? UNKNOWN_MEDIA_TYPE,\n\t};\n}\n\nfunction collect(candidate: unknown): AttachedDocument[] {\n\tconst documents: AttachedDocument[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const entry of Array.isArray(candidate) ? candidate : [candidate]) {\n\t\tconst document = toAttachedDocument(entry);\n\t\tif (document && !seen.has(document.documentId)) {\n\t\t\tseen.add(document.documentId);\n\t\t\tdocuments.push(document);\n\t\t}\n\t}\n\n\treturn documents;\n}\n\nfunction fromLatestUserTurn(messages: unknown): AttachedDocument[] {\n\tif (!Array.isArray(messages)) {\n\t\treturn [];\n\t}\n\n\tconst latest = [...messages]\n\t\t.reverse()\n\t\t.find((message) => isRecord(message) && message.role === \"user\");\n\tif (!isRecord(latest) || !Array.isArray(latest.parts)) {\n\t\treturn [];\n\t}\n\n\treturn collect(\n\t\tlatest.parts.flatMap((part: unknown) =>\n\t\t\tisRecord(part) && isRecord(part.data) ? [part, part.data] : [part],\n\t\t),\n\t);\n}\n\n/**\n * The documents a visitor attached on the latest user turn, for a chat route you\n * run yourself. Pass the parsed request body: the widget sends them in a\n * top-level `documents` field, outside `messages`, so the bytes stay out of the\n * transcript that is reposted on every later turn.\n *\n * ```ts\n * const body = await request.json();\n * for (const { documentId } of readAttachedDocuments(body)) {\n * const { fields } = await wani.documents.extract({ documentId, schema });\n * }\n * ```\n *\n * Also accepts the `documents` array alone, or a `messages` array whose latest\n * user message carries the ids in its parts. Unparseable input yields an empty\n * array; repeated ids collapse to one.\n */\nexport function readAttachedDocuments(input: unknown): AttachedDocument[] {\n\tconst body = isRecord(input) ? input : undefined;\n\n\tconst declared = collect(body ? body.documents : input);\n\tif (declared.length > 0) {\n\t\treturn declared;\n\t}\n\n\treturn fromLatestUserTurn(body ? body.messages : input);\n}\n"],"mappings":"AAEO,IAAMA,EAAN,cAA4B,KAAM,CACxC,YACCC,EACOC,EACN,CACD,MAAMD,CAAO,EAFN,YAAAC,EAGP,KAAK,KAAO,eACb,CACD,ECAA,IAAMC,EAAW,gBACXC,EAAe,qCAmBrB,SAASC,EAAeC,EAAcC,EAAwB,CAC7D,GAAI,CACH,IAAMC,EAAkB,KAAK,MAAMF,CAAI,EACvC,GAAIE,IAAW,MAAQ,OAAOA,GAAW,SAAU,CAClD,IAAMC,EACL,YAAaD,GAAU,OAAOA,EAAO,SAAY,SAC9CA,EAAO,QACP,GACEE,EACL,WAAYF,GAAU,OAAOA,EAAO,QAAW,SAC5CA,EAAO,OACP,GACJ,GAAIC,GAAQC,EACX,MAAO,GAAGD,CAAI,KAAKC,CAAM,GAE1B,GAAID,EACH,OAAOA,EAER,GAAIC,EACH,OAAOA,CAET,CACD,MAAQ,CAER,CACA,OAAOJ,GAAQ,6BAA6BC,CAAM,EACnD,CAEA,SAASI,EACRC,EACyC,CACzC,MAAO,eAAgBA,GAAS,OAAOA,EAAM,YAAe,QAC7D,CAGA,SAASC,EACRD,EACyB,CACzB,OAAID,EAAcC,CAAK,EACf,CAAE,WAAYA,EAAM,UAAW,EAEhC,CAAE,IAAKA,EAAM,IAAK,SAAUA,EAAM,QAAS,CACnD,CAEO,SAASE,EACfC,EACkB,CAClB,GAAM,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EAAIF,EAE3B,MAAO,CACN,MAAM,QACLH,EACoC,CACpC,GAAI,CAACK,EACJ,MAAM,IAAI,MAAM,6BAA6B,EAM9C,GAAM,CAAE,aAAAC,CAAa,EAAe,KAAM,QAAO,KAAK,EAEhDC,EAAW,MAAM,MACtB,GAAGH,EAAO,QAAQ,MAAO,EAAE,CAAC,GAAGZ,CAAY,GAC3C,CACC,OAAQ,OACR,QAAS,CACR,cAAe,UAAUa,CAAM,GAC/B,eAAgB,mBAChB,iBAAkBd,CACnB,EACA,KAAM,KAAK,UAAU,CACpB,GAAGU,EAAaD,CAAK,EACrB,OAAQM,EAAaN,EAAM,MAAM,EACjC,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,cAAeA,EAAM,aACtB,CAAC,CACF,CACD,EAEA,GAAI,CAACO,EAAS,GAAI,CACjB,IAAMC,EAAO,MAAMD,EAAS,KAAK,EAAE,MAAM,IAAM,EAAE,EACjD,MAAM,IAAIE,EACThB,EAAee,EAAMD,EAAS,MAAM,EACpCA,EAAS,MACV,CACD,CAEA,IAAMG,EAAQ,MAAMH,EAAS,KAAK,EAC5B,CAAE,OAAAI,EAAQ,UAAAC,EAAW,eAAAC,EAAgB,WAAAC,CAAW,EAAIJ,EAAK,KAE/D,MAAO,CACN,OAAQV,EAAM,OAAO,MAAMW,CAAM,EACjC,UAAAC,EACA,eAAgBC,GAAkB,KAClC,WAAAC,CACD,CACD,CACD,CACD,CChIA,IAAMC,EAAmB,CAAC,aAAc,aAAa,EAC/CC,EAAgB,CAAC,WAAY,YAAa,WAAY,MAAM,EAC5DC,EAAkB,CACvB,YACA,aACA,WACA,YACA,cACA,cACD,EAEMC,EAAmB,WACnBC,EAAqB,2BAE3B,SAASC,EAASC,EAAkD,CACnE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,CAC3E,CAEA,SAASC,EACRC,EACAC,EACqB,CACrB,QAAWC,KAAOD,EAAM,CACvB,IAAMH,EAAQE,EAAOE,CAAG,EACxB,GAAI,OAAOJ,GAAU,UAAYA,EAAM,OAAS,EAC/C,OAAOA,CAET,CAED,CAGA,SAASK,EAAmBC,EAA8C,CACzE,GAAI,CAACP,EAASO,CAAK,EAClB,OAGD,IAAMC,EAAaN,EAAUK,EAAOZ,CAAgB,EACpD,GAAKa,EAIL,MAAO,CACN,WAAAA,EACA,SAAUN,EAAUK,EAAOX,CAAa,GAAKE,EAC7C,UAAWI,EAAUK,EAAOV,CAAe,GAAKE,CACjD,CACD,CAEA,SAASU,EAAQC,EAAwC,CACxD,IAAMC,EAAgC,CAAC,EACjCC,EAAO,IAAI,IAEjB,QAAWL,KAAS,MAAM,QAAQG,CAAS,EAAIA,EAAY,CAACA,CAAS,EAAG,CACvE,IAAMG,EAAWP,EAAmBC,CAAK,EACrCM,GAAY,CAACD,EAAK,IAAIC,EAAS,UAAU,IAC5CD,EAAK,IAAIC,EAAS,UAAU,EAC5BF,EAAU,KAAKE,CAAQ,EAEzB,CAEA,OAAOF,CACR,CAEA,SAASG,EAAmBC,EAAuC,CAClE,GAAI,CAAC,MAAM,QAAQA,CAAQ,EAC1B,MAAO,CAAC,EAGT,IAAMC,EAAS,CAAC,GAAGD,CAAQ,EACzB,QAAQ,EACR,KAAME,GAAYjB,EAASiB,CAAO,GAAKA,EAAQ,OAAS,MAAM,EAChE,MAAI,CAACjB,EAASgB,CAAM,GAAK,CAAC,MAAM,QAAQA,EAAO,KAAK,EAC5C,CAAC,EAGFP,EACNO,EAAO,MAAM,QAASE,GACrBlB,EAASkB,CAAI,GAAKlB,EAASkB,EAAK,IAAI,EAAI,CAACA,EAAMA,EAAK,IAAI,EAAI,CAACA,CAAI,CAClE,CACD,CACD,CAmBO,SAASC,EAAsBC,EAAoC,CACzE,IAAMC,EAAOrB,EAASoB,CAAK,EAAIA,EAAQ,OAEjCE,EAAWb,EAAQY,EAAOA,EAAK,UAAYD,CAAK,EACtD,OAAIE,EAAS,OAAS,EACdA,EAGDR,EAAmBO,EAAOA,EAAK,SAAWD,CAAK,CACvD","names":["WaniWaniError","message","status","SDK_NAME","EXTRACT_PATH","refusalMessage","body","status","parsed","code","detail","isStoredInput","input","sourceFields","createDocumentsClient","config","apiUrl","apiKey","toJSONSchema","response","text","WaniWaniError","json","fields","pageCount","pageConfidence","documentId","DOCUMENT_ID_KEYS","FILENAME_KEYS","MEDIA_TYPE_KEYS","UNNAMED_FILENAME","UNKNOWN_MEDIA_TYPE","isRecord","value","pickFirst","source","keys","key","toAttachedDocument","entry","documentId","collect","candidate","documents","seen","document","fromLatestUserTurn","messages","latest","message","part","readAttachedDocuments","input","body","declared"]}
|
|
1
|
+
{"version":3,"sources":["../../src/error.ts","../../src/shared/refusal.ts","../../src/documents/client.ts","../../src/documents/messages.ts"],"sourcesContent":["// Waniwani SDK - Errors\n\nexport class WaniWaniError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic status: number,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"WaniWaniError\";\n\t}\n}\n","/**\n * The platform puts the machine-readable code on `message` and the human reason\n * on `detail`, so a refusal reads as \"UNSUPPORTED_DOCUMENT_TYPE: photo.heic is\n * not one of ...\". The raw body is the fallback.\n */\nexport function refusalMessage(\n\tbody: string,\n\tstatus: number,\n\tlabel: string,\n): string {\n\ttry {\n\t\tconst parsed: unknown = JSON.parse(body);\n\t\tif (parsed !== null && typeof parsed === \"object\") {\n\t\t\tconst code =\n\t\t\t\t\"message\" in parsed && typeof parsed.message === \"string\"\n\t\t\t\t\t? parsed.message\n\t\t\t\t\t: \"\";\n\t\t\tconst detail =\n\t\t\t\t\"detail\" in parsed && typeof parsed.detail === \"string\"\n\t\t\t\t\t? parsed.detail\n\t\t\t\t\t: \"\";\n\t\t\tif (code && detail) {\n\t\t\t\treturn `${code}: ${detail}`;\n\t\t\t}\n\t\t\tif (code) {\n\t\t\t\treturn code;\n\t\t\t}\n\t\t\tif (detail) {\n\t\t\t\treturn detail;\n\t\t\t}\n\t\t}\n\t} catch {\n\t\t// A non-JSON body is surfaced as-is below.\n\t}\n\treturn body || `${label} error: HTTP ${status}`;\n}\n","import { WaniWaniError } from \"../error.js\";\nimport { refusalMessage } from \"../shared/refusal.js\";\nimport type { InternalConfig } from \"../types.js\";\nimport type {\n\tDocumentExtractInput,\n\tDocumentExtractResult,\n\tDocumentExtractStoredInput,\n\tDocumentSchema,\n\tDocumentsClient,\n} from \"./types.js\";\n\nconst SDK_NAME = \"@waniwani/sdk\";\nconst EXTRACT_PATH = \"/api/mcp/modules/documents/extract\";\n\n/** Method syntax makes the parameter bivariant, so a structural schema is accepted without an assertion. */\ninterface ZodModule {\n\ttoJSONSchema(schema: DocumentSchema<unknown>): Record<string, unknown>;\n}\n\ninterface ExtractWireResponse {\n\tfields: unknown;\n\tpageCount: number;\n\tpageConfidence: number | null;\n\tdocumentId: string;\n}\n\nfunction isStoredInput<T>(\n\tinput: DocumentExtractInput<T>,\n): input is DocumentExtractStoredInput<T> {\n\treturn \"documentId\" in input && typeof input.documentId === \"string\";\n}\n\n/** The platform's body is a union, so each branch's fields must travel alone. */\nfunction sourceFields<T>(\n\tinput: DocumentExtractInput<T>,\n): Record<string, string> {\n\tif (isStoredInput(input)) {\n\t\treturn { documentId: input.documentId };\n\t}\n\treturn { url: input.url, filename: input.filename };\n}\n\nexport function createDocumentsClient(\n\tconfig: Pick<InternalConfig, \"apiUrl\" | \"apiKey\">,\n): DocumentsClient {\n\tconst { apiUrl, apiKey } = config;\n\n\treturn {\n\t\tasync extract<T>(\n\t\t\tinput: DocumentExtractInput<T>,\n\t\t): Promise<DocumentExtractResult<T>> {\n\t\t\tif (!apiKey) {\n\t\t\t\tthrow new Error(\"WANIWANI_API_KEY is not set\");\n\t\t\t}\n\n\t\t\t// zod is an optional peer dependency and this module is reachable from the\n\t\t\t// package root, so a top-level import would break every consumer that only\n\t\t\t// uses tracking.\n\t\t\tconst { toJSONSchema }: ZodModule = await import(\"zod\");\n\n\t\t\tconst response = await fetch(\n\t\t\t\t`${apiUrl.replace(/\\/$/, \"\")}${EXTRACT_PATH}`,\n\t\t\t\t{\n\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\theaders: {\n\t\t\t\t\t\tAuthorization: `Bearer ${apiKey}`,\n\t\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t\t\"X-WaniWani-SDK\": SDK_NAME,\n\t\t\t\t\t},\n\t\t\t\t\tbody: JSON.stringify({\n\t\t\t\t\t\t...sourceFields(input),\n\t\t\t\t\t\tschema: toJSONSchema(input.schema),\n\t\t\t\t\t\tpages: input.pages,\n\t\t\t\t\t\tsessionId: input.sessionId,\n\t\t\t\t\t\tcorrelationId: input.correlationId,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t);\n\n\t\t\tif (!response.ok) {\n\t\t\t\tconst text = await response.text().catch(() => \"\");\n\t\t\t\tthrow new WaniWaniError(\n\t\t\t\t\trefusalMessage(text, response.status, \"Documents API\"),\n\t\t\t\t\tresponse.status,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst json = (await response.json()) as { data: ExtractWireResponse };\n\t\t\tconst { fields, pageCount, pageConfidence, documentId } = json.data;\n\n\t\t\treturn {\n\t\t\t\tfields: input.schema.parse(fields),\n\t\t\t\tpageCount,\n\t\t\t\tpageConfidence: pageConfidence ?? null,\n\t\t\t\tdocumentId,\n\t\t\t};\n\t\t},\n\t};\n}\n","import type { AttachedDocument } from \"./types.js\";\n\nconst DOCUMENT_ID_KEYS = [\"documentId\", \"document_id\"] as const;\nconst FILENAME_KEYS = [\"filename\", \"file_name\", \"fileName\", \"name\"] as const;\nconst MEDIA_TYPE_KEYS = [\n\t\"mediaType\",\n\t\"media_type\",\n\t\"mimeType\",\n\t\"mime_type\",\n\t\"contentType\",\n\t\"content_type\",\n] as const;\n\nconst UNNAMED_FILENAME = \"document\";\nconst UNKNOWN_MEDIA_TYPE = \"application/octet-stream\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction pickFirst(\n\tsource: Record<string, unknown>,\n\tkeys: readonly string[],\n): string | undefined {\n\tfor (const key of keys) {\n\t\tconst value = source[key];\n\t\tif (typeof value === \"string\" && value.length > 0) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\n/** Only the id is load-bearing: it is what `extract()` needs, so an entry missing the descriptive two is still usable. */\nfunction toAttachedDocument(entry: unknown): AttachedDocument | undefined {\n\tif (!isRecord(entry)) {\n\t\treturn undefined;\n\t}\n\n\tconst documentId = pickFirst(entry, DOCUMENT_ID_KEYS);\n\tif (!documentId) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\tdocumentId,\n\t\tfilename: pickFirst(entry, FILENAME_KEYS) ?? UNNAMED_FILENAME,\n\t\tmediaType: pickFirst(entry, MEDIA_TYPE_KEYS) ?? UNKNOWN_MEDIA_TYPE,\n\t};\n}\n\nfunction collect(candidate: unknown): AttachedDocument[] {\n\tconst documents: AttachedDocument[] = [];\n\tconst seen = new Set<string>();\n\n\tfor (const entry of Array.isArray(candidate) ? candidate : [candidate]) {\n\t\tconst document = toAttachedDocument(entry);\n\t\tif (document && !seen.has(document.documentId)) {\n\t\t\tseen.add(document.documentId);\n\t\t\tdocuments.push(document);\n\t\t}\n\t}\n\n\treturn documents;\n}\n\nfunction fromLatestUserTurn(messages: unknown): AttachedDocument[] {\n\tif (!Array.isArray(messages)) {\n\t\treturn [];\n\t}\n\n\tconst latest = [...messages]\n\t\t.reverse()\n\t\t.find((message) => isRecord(message) && message.role === \"user\");\n\tif (!isRecord(latest) || !Array.isArray(latest.parts)) {\n\t\treturn [];\n\t}\n\n\treturn collect(\n\t\tlatest.parts.flatMap((part: unknown) =>\n\t\t\tisRecord(part) && isRecord(part.data) ? [part, part.data] : [part],\n\t\t),\n\t);\n}\n\n/**\n * The documents a visitor attached on the latest user turn, for a chat route you\n * run yourself. Pass the parsed request body: the widget sends them in a\n * top-level `documents` field, outside `messages`, so the bytes stay out of the\n * transcript that is reposted on every later turn.\n *\n * ```ts\n * const body = await request.json();\n * for (const { documentId } of readAttachedDocuments(body)) {\n * const { fields } = await wani.documents.extract({ documentId, schema });\n * }\n * ```\n *\n * Also accepts the `documents` array alone, or a `messages` array whose latest\n * user message carries the ids in its parts. Unparseable input yields an empty\n * array; repeated ids collapse to one.\n */\nexport function readAttachedDocuments(input: unknown): AttachedDocument[] {\n\tconst body = isRecord(input) ? input : undefined;\n\n\tconst declared = collect(body ? body.documents : input);\n\tif (declared.length > 0) {\n\t\treturn declared;\n\t}\n\n\treturn fromLatestUserTurn(body ? body.messages : input);\n}\n"],"mappings":"AAEO,IAAMA,EAAN,cAA4B,KAAM,CACxC,YACCC,EACOC,EACN,CACD,MAAMD,CAAO,EAFN,YAAAC,EAGP,KAAK,KAAO,eACb,CACD,ECLO,SAASC,EACfC,EACAC,EACAC,EACS,CACT,GAAI,CACH,IAAMC,EAAkB,KAAK,MAAMH,CAAI,EACvC,GAAIG,IAAW,MAAQ,OAAOA,GAAW,SAAU,CAClD,IAAMC,EACL,YAAaD,GAAU,OAAOA,EAAO,SAAY,SAC9CA,EAAO,QACP,GACEE,EACL,WAAYF,GAAU,OAAOA,EAAO,QAAW,SAC5CA,EAAO,OACP,GACJ,GAAIC,GAAQC,EACX,MAAO,GAAGD,CAAI,KAAKC,CAAM,GAE1B,GAAID,EACH,OAAOA,EAER,GAAIC,EACH,OAAOA,CAET,CACD,MAAQ,CAER,CACA,OAAOL,GAAQ,GAAGE,CAAK,gBAAgBD,CAAM,EAC9C,CCxBA,IAAMK,EAAW,gBACXC,EAAe,qCAcrB,SAASC,EACRC,EACyC,CACzC,MAAO,eAAgBA,GAAS,OAAOA,EAAM,YAAe,QAC7D,CAGA,SAASC,EACRD,EACyB,CACzB,OAAID,EAAcC,CAAK,EACf,CAAE,WAAYA,EAAM,UAAW,EAEhC,CAAE,IAAKA,EAAM,IAAK,SAAUA,EAAM,QAAS,CACnD,CAEO,SAASE,EACfC,EACkB,CAClB,GAAM,CAAE,OAAAC,EAAQ,OAAAC,CAAO,EAAIF,EAE3B,MAAO,CACN,MAAM,QACLH,EACoC,CACpC,GAAI,CAACK,EACJ,MAAM,IAAI,MAAM,6BAA6B,EAM9C,GAAM,CAAE,aAAAC,CAAa,EAAe,KAAM,QAAO,KAAK,EAEhDC,EAAW,MAAM,MACtB,GAAGH,EAAO,QAAQ,MAAO,EAAE,CAAC,GAAGN,CAAY,GAC3C,CACC,OAAQ,OACR,QAAS,CACR,cAAe,UAAUO,CAAM,GAC/B,eAAgB,mBAChB,iBAAkBR,CACnB,EACA,KAAM,KAAK,UAAU,CACpB,GAAGI,EAAaD,CAAK,EACrB,OAAQM,EAAaN,EAAM,MAAM,EACjC,MAAOA,EAAM,MACb,UAAWA,EAAM,UACjB,cAAeA,EAAM,aACtB,CAAC,CACF,CACD,EAEA,GAAI,CAACO,EAAS,GAAI,CACjB,IAAMC,EAAO,MAAMD,EAAS,KAAK,EAAE,MAAM,IAAM,EAAE,EACjD,MAAM,IAAIE,EACTC,EAAeF,EAAMD,EAAS,OAAQ,eAAe,EACrDA,EAAS,MACV,CACD,CAEA,IAAMI,EAAQ,MAAMJ,EAAS,KAAK,EAC5B,CAAE,OAAAK,EAAQ,UAAAC,EAAW,eAAAC,EAAgB,WAAAC,CAAW,EAAIJ,EAAK,KAE/D,MAAO,CACN,OAAQX,EAAM,OAAO,MAAMY,CAAM,EACjC,UAAAC,EACA,eAAgBC,GAAkB,KAClC,WAAAC,CACD,CACD,CACD,CACD,CChGA,IAAMC,EAAmB,CAAC,aAAc,aAAa,EAC/CC,EAAgB,CAAC,WAAY,YAAa,WAAY,MAAM,EAC5DC,EAAkB,CACvB,YACA,aACA,WACA,YACA,cACA,cACD,EAEMC,EAAmB,WACnBC,EAAqB,2BAE3B,SAASC,EAASC,EAAkD,CACnE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,CAC3E,CAEA,SAASC,EACRC,EACAC,EACqB,CACrB,QAAWC,KAAOD,EAAM,CACvB,IAAMH,EAAQE,EAAOE,CAAG,EACxB,GAAI,OAAOJ,GAAU,UAAYA,EAAM,OAAS,EAC/C,OAAOA,CAET,CAED,CAGA,SAASK,EAAmBC,EAA8C,CACzE,GAAI,CAACP,EAASO,CAAK,EAClB,OAGD,IAAMC,EAAaN,EAAUK,EAAOZ,CAAgB,EACpD,GAAKa,EAIL,MAAO,CACN,WAAAA,EACA,SAAUN,EAAUK,EAAOX,CAAa,GAAKE,EAC7C,UAAWI,EAAUK,EAAOV,CAAe,GAAKE,CACjD,CACD,CAEA,SAASU,EAAQC,EAAwC,CACxD,IAAMC,EAAgC,CAAC,EACjCC,EAAO,IAAI,IAEjB,QAAWL,KAAS,MAAM,QAAQG,CAAS,EAAIA,EAAY,CAACA,CAAS,EAAG,CACvE,IAAMG,EAAWP,EAAmBC,CAAK,EACrCM,GAAY,CAACD,EAAK,IAAIC,EAAS,UAAU,IAC5CD,EAAK,IAAIC,EAAS,UAAU,EAC5BF,EAAU,KAAKE,CAAQ,EAEzB,CAEA,OAAOF,CACR,CAEA,SAASG,EAAmBC,EAAuC,CAClE,GAAI,CAAC,MAAM,QAAQA,CAAQ,EAC1B,MAAO,CAAC,EAGT,IAAMC,EAAS,CAAC,GAAGD,CAAQ,EACzB,QAAQ,EACR,KAAME,GAAYjB,EAASiB,CAAO,GAAKA,EAAQ,OAAS,MAAM,EAChE,MAAI,CAACjB,EAASgB,CAAM,GAAK,CAAC,MAAM,QAAQA,EAAO,KAAK,EAC5C,CAAC,EAGFP,EACNO,EAAO,MAAM,QAASE,GACrBlB,EAASkB,CAAI,GAAKlB,EAASkB,EAAK,IAAI,EAAI,CAACA,EAAMA,EAAK,IAAI,EAAI,CAACA,CAAI,CAClE,CACD,CACD,CAmBO,SAASC,EAAsBC,EAAoC,CACzE,IAAMC,EAAOrB,EAASoB,CAAK,EAAIA,EAAQ,OAEjCE,EAAWb,EAAQY,EAAOA,EAAK,UAAYD,CAAK,EACtD,OAAIE,EAAS,OAAS,EACdA,EAGDR,EAAmBO,EAAOA,EAAK,SAAWD,CAAK,CACvD","names":["WaniWaniError","message","status","refusalMessage","body","status","label","parsed","code","detail","SDK_NAME","EXTRACT_PATH","isStoredInput","input","sourceFields","createDocumentsClient","config","apiUrl","apiKey","toJSONSchema","response","text","WaniWaniError","refusalMessage","json","fields","pageCount","pageConfidence","documentId","DOCUMENT_ID_KEYS","FILENAME_KEYS","MEDIA_TYPE_KEYS","UNNAMED_FILENAME","UNKNOWN_MEDIA_TYPE","isRecord","value","pickFirst","source","keys","key","toAttachedDocument","entry","documentId","collect","candidate","documents","seen","document","fromLatestUserTurn","messages","latest","message","part","readAttachedDocuments","input","body","declared"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -74,6 +74,43 @@ interface DocumentsClient {
|
|
|
74
74
|
*/
|
|
75
75
|
declare function readAttachedDocuments(input: unknown): AttachedDocument[];
|
|
76
76
|
|
|
77
|
+
interface EmailSendFields {
|
|
78
|
+
/** One recipient address */
|
|
79
|
+
to: string;
|
|
80
|
+
/** Copy recipients: one address or a list of up to 50 */
|
|
81
|
+
cc?: string | string[];
|
|
82
|
+
/** Blind copy recipients: one address or a list of up to 50 */
|
|
83
|
+
bcc?: string | string[];
|
|
84
|
+
/** Up to 998 characters */
|
|
85
|
+
subject: string;
|
|
86
|
+
/** Address replies go to instead of the sender */
|
|
87
|
+
replyTo?: string;
|
|
88
|
+
/** Conversation this email belongs to, recorded on its log row */
|
|
89
|
+
sessionId?: string;
|
|
90
|
+
}
|
|
91
|
+
interface EmailHtmlContent {
|
|
92
|
+
/** The finished email, for example `await render(<Recap />)` from React Email. Sent as is, up to 512 KB. */
|
|
93
|
+
html: string;
|
|
94
|
+
/** Plain-text part, up to 512 KB. Leave it out and one is built from `html`. */
|
|
95
|
+
text?: string;
|
|
96
|
+
}
|
|
97
|
+
interface EmailTextContent {
|
|
98
|
+
/** The finished email, for example `await render(<Recap />)` from React Email. Sent as is, up to 512 KB. */
|
|
99
|
+
html?: string;
|
|
100
|
+
/** Plain-text email, up to 512 KB, sent alone when `html` is left out. */
|
|
101
|
+
text: string;
|
|
102
|
+
}
|
|
103
|
+
/** Pass `html`, `text` or both. */
|
|
104
|
+
type EmailSendInput = EmailSendFields & (EmailHtmlContent | EmailTextContent);
|
|
105
|
+
interface EmailSendResult {
|
|
106
|
+
/** The log row for this send, listed under Modules > Email > Logs in the dashboard */
|
|
107
|
+
id: string;
|
|
108
|
+
}
|
|
109
|
+
interface EmailClient {
|
|
110
|
+
/** Send one email from the agent behind your API key, as `"Agent name" <agent-name@notifications.waniwani.run>`. */
|
|
111
|
+
send(input: EmailSendInput): Promise<EmailSendResult>;
|
|
112
|
+
}
|
|
113
|
+
|
|
77
114
|
declare class WaniWaniError extends Error {
|
|
78
115
|
status: number;
|
|
79
116
|
constructor(message: string, status: number);
|
|
@@ -571,6 +608,8 @@ interface WaniWaniClient extends TrackingClient {
|
|
|
571
608
|
readonly kb: KbClient;
|
|
572
609
|
/** Documents client for reading a file into typed fields */
|
|
573
610
|
readonly documents: DocumentsClient;
|
|
611
|
+
/** Email client for sending from the agent behind your API key */
|
|
612
|
+
readonly email: EmailClient;
|
|
574
613
|
}
|
|
575
614
|
interface InternalConfig {
|
|
576
615
|
apiUrl: string;
|
|
@@ -641,4 +680,4 @@ interface V2BatchResponse {
|
|
|
641
680
|
*/
|
|
642
681
|
declare function waniwani(config?: WaniWaniConfig | WaniWaniProjectConfig): WaniWaniClient;
|
|
643
682
|
|
|
644
|
-
export { type AttachedDocument, type ComparedPriceOption, type ConvertedProperties, type DocumentExtractInput, type DocumentExtractResult, type DocumentExtractStoredInput, type DocumentExtractUrlInput, type DocumentSchema, type DocumentsClient, ERROR_CAUSES, EVENT_TYPES, type ErrorCauseType, type EventType, type FrontendClientOptions, type FrontendIdentity, type FrontendTrackingClient, type KbClient, type KbIngestFile, type KbIngestResult, type KbSearchOptions, type KbSource, type LeadQualifiedProperties, type LegacyTrackEvent, type LinkClickedProperties, type OptionSelectedProperties, type PriceShownProperties, type PricesComparedProperties, type RevenueConvertedInput, type RevenueLeadQualifiedInput, type RevenueOptionSelectedInput, type RevenuePriceShownInput, type RevenuePricesComparedInput, type RevenueTrackingApi, SESSION_ERROR_CODES, type SessionErrorCodeType, type SessionErrorProperties, type ToolCalledProperties, type TrackEvent, type TrackFn, type TrackInput, type TrackingConfig, type TrackingShutdownOptions, type TrackingShutdownResult, type V2BatchRejectedEvent, type V2BatchRequest, type V2BatchResponse, type V2CorrelationIds, type V2EnvelopeType, type V2EventEnvelope, type WaniWaniClient, type WaniWaniConfig, WaniWaniError, type WaniWaniProjectConfig, createFrontendClient, defineConfig, readAttachedDocuments, waniwani };
|
|
683
|
+
export { type AttachedDocument, type ComparedPriceOption, type ConvertedProperties, type DocumentExtractInput, type DocumentExtractResult, type DocumentExtractStoredInput, type DocumentExtractUrlInput, type DocumentSchema, type DocumentsClient, ERROR_CAUSES, EVENT_TYPES, type EmailClient, type EmailSendInput, type EmailSendResult, type ErrorCauseType, type EventType, type FrontendClientOptions, type FrontendIdentity, type FrontendTrackingClient, type KbClient, type KbIngestFile, type KbIngestResult, type KbSearchOptions, type KbSource, type LeadQualifiedProperties, type LegacyTrackEvent, type LinkClickedProperties, type OptionSelectedProperties, type PriceShownProperties, type PricesComparedProperties, type RevenueConvertedInput, type RevenueLeadQualifiedInput, type RevenueOptionSelectedInput, type RevenuePriceShownInput, type RevenuePricesComparedInput, type RevenueTrackingApi, SESSION_ERROR_CODES, type SessionErrorCodeType, type SessionErrorProperties, type ToolCalledProperties, type TrackEvent, type TrackFn, type TrackInput, type TrackingConfig, type TrackingShutdownOptions, type TrackingShutdownResult, type V2BatchRejectedEvent, type V2BatchRequest, type V2BatchResponse, type V2CorrelationIds, type V2EnvelopeType, type V2EventEnvelope, type WaniWaniClient, type WaniWaniConfig, WaniWaniError, type WaniWaniProjectConfig, createFrontendClient, defineConfig, readAttachedDocuments, waniwani };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Z=["documentId","document_id"],ee=["filename","file_name","fileName","name"],te=["mediaType","media_type","mimeType","mime_type","contentType","content_type"],ne="document",re="application/octet-stream";function y(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function R(e,t){for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0)return r}}function ie(e){if(!y(e))return;let t=R(e,Z);if(t)return{documentId:t,filename:R(e,ee)??ne,mediaType:R(e,te)??re}}function b(e){let t=[],n=new Set;for(let r of Array.isArray(e)?e:[e]){let i=ie(r);i&&!n.has(i.documentId)&&(n.add(i.documentId),t.push(i))}return t}function oe(e){if(!Array.isArray(e))return[];let t=[...e].reverse().find(n=>y(n)&&n.role==="user");return!y(t)||!Array.isArray(t.parts)?[]:b(t.parts.flatMap(n=>y(n)&&y(n.data)?[n,n.data]:[n]))}function P(e){let t=y(e)?e:void 0,n=b(t?t.documents:e);return n.length>0?n:oe(t?t.messages:e)}var m=class extends Error{constructor(n,r){super(n);this.status=r;this.name="WaniWaniError"}};import{existsSync as se,readFileSync as ae}from"fs";import{resolve as ce}from"path";var ue="waniwani.json",T;function A(){if(T!==void 0)return T;try{let e=ce(process.cwd(),ue);if(!se(e))return T=null,null;let t=ae(e,"utf-8");return T=JSON.parse(t),T}catch{return T=null,null}}var D="__waniwani_config__";function de(e){return globalThis[D]=e,e}function M(){return globalThis[D]}var O=["session.started","page.viewed","tool.called","link.clicked","widget_render","user.identified","price_shown","prices_compared","option_selected","lead_qualified","converted","session.error"],F=["agent_failed","tool_failed","upstream_failed"],U=["timeout","rate_limited","upstream_4xx","upstream_5xx","network","invalid_output","flow_dead_end","flow_unknown_node","flow_loop","unknown"];function v(e,t){for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0)return r}}var pe=["waniwani/sessionId","openai/sessionId","openai/session","sessionId","conversationId","mcp-session-id"],le=["waniwani/requestId","openai/requestId","requestId","mcp/requestId"],fe=["waniwani/traceId","openai/traceId","traceId","mcp/traceId","openai/requestId","requestId"],ge=["waniwani/userId","openai/userId","externalUserId","userId","actorId"],he=["waniwani/visitorId","visitorId"],me=["correlationId","openai/requestId"];function B(e){return e?v(e,pe):void 0}function K(e){return e?v(e,le):void 0}function L(e){return e?v(e,fe):void 0}function W(e){return e?v(e,ge):void 0}function j(e){return e?v(e,he):void 0}function N(e){return e?v(e,me):void 0}var ye=[{key:"openai/sessionId",source:"chatgpt"},{key:"openai/session",source:"chatgpt"}],Te=[{needle:"claude",source:"claude"},{needle:"chatgpt",source:"chatgpt"},{needle:"openai",source:"chatgpt"},{needle:"gemini",source:"gemini"}];function V(e,t){if(e){let r=e["waniwani/source"];if(typeof r=="string"&&r.length>0)return r;for(let{key:i,source:o}of ye){let a=e[i];if(typeof a=="string"&&a.length>0)return o}}let n=t?.name;if(typeof n=="string"&&n.length>0){let r=n.toLowerCase();for(let{needle:i,source:o}of Te)if(r.includes(i))return o}}var ve="@waniwani/sdk";function I(e,t={}){let n=t.now??(()=>new Date),r=t.generateId??Y,i=ke(e),o=E(e.meta),a=E(e.metadata),s=Se(e,o),c=h(e.eventId)??r(),f=we(e.timestamp,n),d=h(e.source)??V(o)??t.source??ve,u=_(e)?{...e}:void 0,g={...a};return Object.keys(o).length>0&&(g.meta=o),u&&(g.rawLegacy=u),{id:c,type:"mcp.event",name:i,source:d,timestamp:f,correlation:s,properties:Ie(e,i),metadata:g,rawLegacy:u}}function Y(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`evt_${crypto.randomUUID()}`:`evt_${Math.random().toString(36).slice(2,10)}_${Date.now().toString(36)}`}function Ie(e,t){if(!_(e))return E(e.properties);let n=Ee(e,t),r=E(e.properties);return{...n,...r}}function Ee(e,t){switch(t){case"tool.called":{let n={};return h(e.toolName)&&(n.name=e.toolName),h(e.toolType)&&(n.type=e.toolType),n}case"link.clicked":{let n={};return h(e.linkUrl)&&(n.url=e.linkUrl),n}default:return{}}}function ke(e){return _(e)?e.eventType:e.event}function Se(e,t){let n=h(e.requestId)??K(t),r=h(e.sessionId)??B(t),i=h(e.traceId)??L(t),o=h(e.externalUserId)??W(t),a=h(e.visitorId)??j(t),s=h(e.correlationId)??N(t)??n,c={};return r&&(c.sessionId=r),i&&(c.traceId=i),n&&(c.requestId=n),s&&(c.correlationId=s),o&&(c.externalUserId=o),a&&(c.visitorId=a),c}function we(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 E(e){return!e||typeof e!="object"||Array.isArray(e)?{}:e}function h(e){if(typeof e=="string"&&e.trim().length!==0)return e}function _(e){return"eventType"in e}function k(e){return{priceShown:({amount:t,currency:n,itemId:r,label:i,...o})=>e({event:"price_shown",properties:{amount:t,currency:n,itemId:r,label:i},...o}),pricesCompared:({options:t,...n})=>e({event:"prices_compared",properties:{options:t},...n}),optionSelected:({id:t,amount:n,currency:r,...i})=>e({event:"option_selected",properties:{id:t,amount:n,currency:r},...i}),leadQualified:t=>{let{externalId:n,email:r,name:i,...o}=t??{};return e({event:"lead_qualified",properties:{externalId:n,email:r,name:i},...o})},converted:({amount:t,currency:n,occurredAt:r,...i})=>e({event:"converted",properties:{amount:t,currency:n,occurredAt:r},...i})}}var xe="/api/mcp/events/v2/batch";var q="@waniwani/sdk";var Re=new Set([401,403]),_e=new Set([408,425,429,500,502,503,504]),Ce=(e,t)=>globalThis.fetch(e,t);function S(e){return new C(e)}var C=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=Ae(t.apiUrl,t.endpointPath??xe),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??Ce,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)),this.registerBrowserTeardown()}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 i=Symbol("shutdown-timeout");return await Promise.race([r.then(()=>"flushed"),this.sleep(n).then(()=>i)])===i?(this.isStopped=!0,{timedOut:!0,pendingEvents:this.pendingEvents()}):(this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()})}registerBrowserTeardown(){if(typeof document>"u"||typeof window>"u")return;let t=()=>{document.visibilityState==="hidden"&&this.keepaliveFlush()};document.addEventListener("visibilitychange",t),window.addEventListener("pagehide",()=>this.keepaliveFlush())}keepaliveFlush(){if(this.isStopped||this.buffer.length===0)return;let t=this.buffer.splice(0,this.buffer.length);this.sendKeepaliveChunk(t)}sendKeepaliveChunk(t){let n=JSON.stringify(this.makeBatchRequest(t));if(n.length>6e4&&t.length>1){let r=Math.ceil(t.length/2);this.sendKeepaliveChunk(t.slice(0,r)),this.sendKeepaliveChunk(t.slice(r));return}try{this.fetchFn(this.endpointUrl,{method:"POST",headers:this.requestHeaders(),body:n,keepalive:!0}).catch(()=>{})}catch{}}requestHeaders(){let t={"Content-Type":"application/json","X-WaniWani-SDK":q};return this.apiKey&&(t.Authorization=`Bearer ${this.apiKey}`),t}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 i=await this.sendBatchOnce(r);switch(this.inFlightCount=0,i.kind){case"success":return;case"auth":this.stopTransportForAuthFailure(i.status,r.length);return;case"permanent":this.logger.error("[Waniwani] Dropping %d event(s) after permanent failure: %s",r.length,i.reason);return;case"retryable":if(n>=this.maxRetries){this.logger.error("[Waniwani] Dropping %d event(s) after retry exhaustion: %s",r.length,i.reason);return}await this.sleep(this.backoffDelayMs(n)),n+=1;continue;case"partial":if(i.permanent.length>0&&this.logger.error("[Waniwani] Dropping %d event(s) rejected as permanent",i.permanent.length),i.retryable.length===0)return;if(n>=this.maxRetries){this.logger.error("[Waniwani] Dropping %d retryable event(s) after retry exhaustion",i.retryable.length);return}r=i.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:this.requestHeaders(),body:JSON.stringify(this.makeBatchRequest(t))})}catch(o){return{kind:"retryable",reason:De(o)}}if(Re.has(n.status))return{kind:"auth",status:n.status};if(_e.has(n.status))return{kind:"retryable",reason:`HTTP ${n.status}`};if(!n.ok)return{kind:"permanent",reason:`HTTP ${n.status}`};let r=await Pe(n);if(!r?.rejected||r.rejected.length===0)return{kind:"success"};let i=this.classifyRejectedEvents(t,r.rejected);return i.retryable.length===0&&i.permanent.length===0?{kind:"success"}:{kind:"partial",retryable:i.retryable,permanent:i.permanent}}makeBatchRequest(t){return{sentAt:this.now().toISOString(),source:{sdk:q,version:this.sdkVersion??"0.0.0"},events:t}}classifyRejectedEvents(t,n){let r=new Map(t.map(a=>[a.id,a])),i=[],o=[];for(let a of n){let s=r.get(a.eventId);if(s){if(be(a)){i.push(s);continue}o.push(s)}}return{retryable:i,permanent:o}}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 be(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 Pe(e){let t=await e.text();if(t)try{return JSON.parse(t)}catch{return}}function Ae(e,t){let n=e.endsWith("/")?e:`${e}/`,r=t.startsWith("/")?t.slice(1):t;return`${n}${r}`}function De(e){return e instanceof Error?e.message:String(e)}function Me(e){let{apiUrl:t,endpointPath:n}=Oe(e.endpoint),r=S({apiUrl:t,apiKey:e.token,endpointPath:n,flushIntervalMs:e.flushIntervalMs}),i,o=s=>typeof s=="function"?s():s,a=async s=>{let c=e.identity?.()??{},f=o(e.channelId),d=f===void 0?s.properties:{channelId:f,...s.properties},u=I({sessionId:c.sessionId,visitorId:c.visitorId,externalUserId:c.externalUserId??i,traceId:c.traceId,...s,properties:d,metadata:{...e.metadata,...s.metadata}},{source:o(e.source)});return r.enqueue(u),{eventId:u.id}};return{track:Object.assign(a,k(a)),identify(s,c){return i=s,a({event:"user.identified",externalUserId:s,properties:c})},flush:()=>r.flush(),shutdown:s=>r.shutdown(s)}}function Oe(e){let t=new URL(e);return{apiUrl:t.origin,endpointPath:`${t.pathname}${t.search}`}}var Fe="@waniwani/sdk",Ue="/api/mcp/modules/documents/extract";function Be(e,t){try{let n=JSON.parse(e);if(n!==null&&typeof n=="object"){let r="message"in n&&typeof n.message=="string"?n.message:"",i="detail"in n&&typeof n.detail=="string"?n.detail:"";if(r&&i)return`${r}: ${i}`;if(r)return r;if(i)return i}}catch{}return e||`Documents API error: HTTP ${t}`}function Ke(e){return"documentId"in e&&typeof e.documentId=="string"}function Le(e){return Ke(e)?{documentId:e.documentId}:{url:e.url,filename:e.filename}}function z(e){let{apiUrl:t,apiKey:n}=e;return{async extract(r){if(!n)throw new Error("WANIWANI_API_KEY is not set");let{toJSONSchema:i}=await import("zod"),o=await fetch(`${t.replace(/\/$/,"")}${Ue}`,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","X-WaniWani-SDK":Fe},body:JSON.stringify({...Le(r),schema:i(r.schema),pages:r.pages,sessionId:r.sessionId,correlationId:r.correlationId})});if(!o.ok){let u=await o.text().catch(()=>"");throw new m(Be(u,o.status),o.status)}let a=await o.json(),{fields:s,pageCount:c,pageConfidence:f,documentId:d}=a.data;return{fields:r.schema.parse(s),pageCount:c,pageConfidence:f??null,documentId:d}}}}import{AsyncLocalStorage as We}from"async_hooks";var $=globalThis,w=$.__waniwaniKbRetrievalStore;w||(w=new We,$.__waniwaniKbRetrievalStore=w);var je=w;function H(e){try{je.getStore()?.searches.push(e)}catch{}}var Ne="@waniwani/sdk";function X(e){let{apiUrl:t,apiKey:n}=e;function r(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}async function i(o,a,s){let c=r(),f=`${t.replace(/\/$/,"")}${a}`,d={Authorization:`Bearer ${c}`,"X-WaniWani-SDK":Ne},u={method:o,headers:d};s!==void 0&&(d["Content-Type"]="application/json",u.body=JSON.stringify(s));let g=await fetch(f,u);if(!g.ok){let J=await g.text().catch(()=>"");throw new m(J||`KB API error: HTTP ${g.status}`,g.status)}return(await g.json()).data}return{async ingest(o){return i("POST","/api/mcp/kb/ingest",{files:o})},async search(o,a){let s=await i("POST","/api/mcp/kb/search",{query:o,...a});return H({query:o,resultCount:s.length,results:s.map(c=>({source:c.source,heading:c.heading,score:c.score}))}),s},async sources(){return i("GET","/api/mcp/kb/sources")}}}function G(e){let{apiUrl:t,apiKey:n,tracking:r}=e;function i(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}let o=n?S({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;function a(d){i();let u=I(d);return!u.correlation.sessionId&&!u.correlation.externalUserId&&!u.correlation.visitorId&&console.warn(`[waniwani] event "${u.name}" has no sessionId, externalUserId, or visitorId; the ingest API requires one and will reject it.`),o?.enqueue(u),{eventId:u.id}}let s=async d=>a(d),c=Object.assign(s,k(s)),f={async identify(d,u,g){i();let x=I({event:"user.identified",externalUserId:d,properties:u,meta:g});return o?.enqueue(x),{eventId:x.id}},track:c,async flush(){i(),await o?.flush()},async shutdown(d){return i(),await o?.shutdown({timeoutMs:d?.timeoutMs??r.shutdownTimeoutMs})??{timedOut:!1,pendingEvents:0}}};return o&&Ve(f,r.shutdownTimeoutMs),f}function Ve(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)}var Q="https://app.waniwani.ai";function Ye(e){let n=e??A()??M(),r=n?.apiUrl??process.env.WANIWANI_API_URL??Q,i=n?.apiKey??process.env.WANIWANI_API_KEY,o={endpointPath:n?.tracking?.endpointPath??"/api/mcp/events/v2/batch",flushIntervalMs:n?.tracking?.flushIntervalMs??1e3,maxBatchSize:n?.tracking?.maxBatchSize??20,maxBufferSize:n?.tracking?.maxBufferSize??1e3,maxRetries:n?.tracking?.maxRetries??3,retryBaseDelayMs:n?.tracking?.retryBaseDelayMs??200,retryMaxDelayMs:n?.tracking?.retryMaxDelayMs??2e3,shutdownTimeoutMs:n?.tracking?.shutdownTimeoutMs??2e3},a={apiUrl:r,apiKey:i,tracking:o},s=G(a),c=X(a),f=z(a);return{...s,kb:c,documents:f,_config:a}}export{U as ERROR_CAUSES,O as EVENT_TYPES,F as SESSION_ERROR_CODES,m as WaniWaniError,Me as createFrontendClient,de as defineConfig,P as readAttachedDocuments,Ye as waniwani};
|
|
1
|
+
var te=["documentId","document_id"],ne=["filename","file_name","fileName","name"],re=["mediaType","media_type","mimeType","mime_type","contentType","content_type"],ie="document",oe="application/octet-stream";function y(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function C(e,t){for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0)return r}}function se(e){if(!y(e))return;let t=C(e,te);if(t)return{documentId:t,filename:C(e,ne)??ie,mediaType:C(e,re)??oe}}function P(e){let t=[],n=new Set;for(let r of Array.isArray(e)?e:[e]){let i=se(r);i&&!n.has(i.documentId)&&(n.add(i.documentId),t.push(i))}return t}function ae(e){if(!Array.isArray(e))return[];let t=[...e].reverse().find(n=>y(n)&&n.role==="user");return!y(t)||!Array.isArray(t.parts)?[]:P(t.parts.flatMap(n=>y(n)&&y(n.data)?[n,n.data]:[n]))}function A(e){let t=y(e)?e:void 0,n=P(t?t.documents:e);return n.length>0?n:ae(t?t.messages:e)}var h=class extends Error{constructor(n,r){super(n);this.status=r;this.name="WaniWaniError"}};import{existsSync as ce,readFileSync as ue}from"fs";import{resolve as de}from"path";var pe="waniwani.json",T;function D(){if(T!==void 0)return T;try{let e=de(process.cwd(),pe);if(!ce(e))return T=null,null;let t=ue(e,"utf-8");return T=JSON.parse(t),T}catch{return T=null,null}}var M="__waniwani_config__";function le(e){return globalThis[M]=e,e}function O(){return globalThis[M]}var F=["session.started","page.viewed","tool.called","link.clicked","widget_render","user.identified","price_shown","prices_compared","option_selected","lead_qualified","converted","session.error"],U=["agent_failed","tool_failed","upstream_failed"],B=["timeout","rate_limited","upstream_4xx","upstream_5xx","network","invalid_output","flow_dead_end","flow_unknown_node","flow_loop","unknown"];function v(e,t){for(let n of t){let r=e[n];if(typeof r=="string"&&r.length>0)return r}}var fe=["waniwani/sessionId","openai/sessionId","openai/session","sessionId","conversationId","mcp-session-id"],me=["waniwani/requestId","openai/requestId","requestId","mcp/requestId"],ge=["waniwani/traceId","openai/traceId","traceId","mcp/traceId","openai/requestId","requestId"],he=["waniwani/userId","openai/userId","externalUserId","userId","actorId"],ye=["waniwani/visitorId","visitorId"],Te=["correlationId","openai/requestId"];function K(e){return e?v(e,fe):void 0}function W(e){return e?v(e,me):void 0}function j(e){return e?v(e,ge):void 0}function L(e){return e?v(e,he):void 0}function N(e){return e?v(e,ye):void 0}function V(e){return e?v(e,Te):void 0}var ve=[{key:"openai/sessionId",source:"chatgpt"},{key:"openai/session",source:"chatgpt"}],Ee=[{needle:"claude",source:"claude"},{needle:"chatgpt",source:"chatgpt"},{needle:"openai",source:"chatgpt"},{needle:"gemini",source:"gemini"}];function Y(e,t){if(e){let r=e["waniwani/source"];if(typeof r=="string"&&r.length>0)return r;for(let{key:i,source:o}of ve){let a=e[i];if(typeof a=="string"&&a.length>0)return o}}let n=t?.name;if(typeof n=="string"&&n.length>0){let r=n.toLowerCase();for(let{needle:i,source:o}of Ee)if(r.includes(i))return o}}var Ie="@waniwani/sdk";function E(e,t={}){let n=t.now??(()=>new Date),r=t.generateId??q,i=we(e),o=I(e.meta),a=I(e.metadata),s=xe(e,o),c=g(e.eventId)??r(),f=Re(e.timestamp,n),d=g(e.source)??Y(o)??t.source??Ie,u=_(e)?{...e}:void 0,m={...a};return Object.keys(o).length>0&&(m.meta=o),u&&(m.rawLegacy=u),{id:c,type:"mcp.event",name:i,source:d,timestamp:f,correlation:s,properties:Se(e,i),metadata:m,rawLegacy:u}}function q(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?`evt_${crypto.randomUUID()}`:`evt_${Math.random().toString(36).slice(2,10)}_${Date.now().toString(36)}`}function Se(e,t){if(!_(e))return I(e.properties);let n=ke(e,t),r=I(e.properties);return{...n,...r}}function ke(e,t){switch(t){case"tool.called":{let n={};return g(e.toolName)&&(n.name=e.toolName),g(e.toolType)&&(n.type=e.toolType),n}case"link.clicked":{let n={};return g(e.linkUrl)&&(n.url=e.linkUrl),n}default:return{}}}function we(e){return _(e)?e.eventType:e.event}function xe(e,t){let n=g(e.requestId)??W(t),r=g(e.sessionId)??K(t),i=g(e.traceId)??j(t),o=g(e.externalUserId)??L(t),a=g(e.visitorId)??N(t),s=g(e.correlationId)??V(t)??n,c={};return r&&(c.sessionId=r),i&&(c.traceId=i),n&&(c.requestId=n),s&&(c.correlationId=s),o&&(c.externalUserId=o),a&&(c.visitorId=a),c}function Re(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 I(e){return!e||typeof e!="object"||Array.isArray(e)?{}:e}function g(e){if(typeof e=="string"&&e.trim().length!==0)return e}function _(e){return"eventType"in e}function S(e){return{priceShown:({amount:t,currency:n,itemId:r,label:i,...o})=>e({event:"price_shown",properties:{amount:t,currency:n,itemId:r,label:i},...o}),pricesCompared:({options:t,...n})=>e({event:"prices_compared",properties:{options:t},...n}),optionSelected:({id:t,amount:n,currency:r,...i})=>e({event:"option_selected",properties:{id:t,amount:n,currency:r},...i}),leadQualified:t=>{let{externalId:n,email:r,name:i,...o}=t??{};return e({event:"lead_qualified",properties:{externalId:n,email:r,name:i},...o})},converted:({amount:t,currency:n,occurredAt:r,...i})=>e({event:"converted",properties:{amount:t,currency:n,occurredAt:r},...i})}}var Ce="/api/mcp/events/v2/batch";var z="@waniwani/sdk";var _e=new Set([401,403]),be=new Set([408,425,429,500,502,503,504]),Pe=(e,t)=>globalThis.fetch(e,t);function k(e){return new b(e)}var b=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=Me(t.apiUrl,t.endpointPath??Ce),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??Pe,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)),this.registerBrowserTeardown()}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 i=Symbol("shutdown-timeout");return await Promise.race([r.then(()=>"flushed"),this.sleep(n).then(()=>i)])===i?(this.isStopped=!0,{timedOut:!0,pendingEvents:this.pendingEvents()}):(this.isStopped=!0,{timedOut:!1,pendingEvents:this.pendingEvents()})}registerBrowserTeardown(){if(typeof document>"u"||typeof window>"u")return;let t=()=>{document.visibilityState==="hidden"&&this.keepaliveFlush()};document.addEventListener("visibilitychange",t),window.addEventListener("pagehide",()=>this.keepaliveFlush())}keepaliveFlush(){if(this.isStopped||this.buffer.length===0)return;let t=this.buffer.splice(0,this.buffer.length);this.sendKeepaliveChunk(t)}sendKeepaliveChunk(t){let n=JSON.stringify(this.makeBatchRequest(t));if(n.length>6e4&&t.length>1){let r=Math.ceil(t.length/2);this.sendKeepaliveChunk(t.slice(0,r)),this.sendKeepaliveChunk(t.slice(r));return}try{this.fetchFn(this.endpointUrl,{method:"POST",headers:this.requestHeaders(),body:n,keepalive:!0}).catch(()=>{})}catch{}}requestHeaders(){let t={"Content-Type":"application/json","X-WaniWani-SDK":z};return this.apiKey&&(t.Authorization=`Bearer ${this.apiKey}`),t}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 i=await this.sendBatchOnce(r);switch(this.inFlightCount=0,i.kind){case"success":return;case"auth":this.stopTransportForAuthFailure(i.status,r.length);return;case"permanent":this.logger.error("[Waniwani] Dropping %d event(s) after permanent failure: %s",r.length,i.reason);return;case"retryable":if(n>=this.maxRetries){this.logger.error("[Waniwani] Dropping %d event(s) after retry exhaustion: %s",r.length,i.reason);return}await this.sleep(this.backoffDelayMs(n)),n+=1;continue;case"partial":if(i.permanent.length>0&&this.logger.error("[Waniwani] Dropping %d event(s) rejected as permanent",i.permanent.length),i.retryable.length===0)return;if(n>=this.maxRetries){this.logger.error("[Waniwani] Dropping %d retryable event(s) after retry exhaustion",i.retryable.length);return}r=i.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:this.requestHeaders(),body:JSON.stringify(this.makeBatchRequest(t))})}catch(o){return{kind:"retryable",reason:Oe(o)}}if(_e.has(n.status))return{kind:"auth",status:n.status};if(be.has(n.status))return{kind:"retryable",reason:`HTTP ${n.status}`};if(!n.ok)return{kind:"permanent",reason:`HTTP ${n.status}`};let r=await De(n);if(!r?.rejected||r.rejected.length===0)return{kind:"success"};let i=this.classifyRejectedEvents(t,r.rejected);return i.retryable.length===0&&i.permanent.length===0?{kind:"success"}:{kind:"partial",retryable:i.retryable,permanent:i.permanent}}makeBatchRequest(t){return{sentAt:this.now().toISOString(),source:{sdk:z,version:this.sdkVersion??"0.0.0"},events:t}}classifyRejectedEvents(t,n){let r=new Map(t.map(a=>[a.id,a])),i=[],o=[];for(let a of n){let s=r.get(a.eventId);if(s){if(Ae(a)){i.push(s);continue}o.push(s)}}return{retryable:i,permanent:o}}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 Ae(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 De(e){let t=await e.text();if(t)try{return JSON.parse(t)}catch{return}}function Me(e,t){let n=e.endsWith("/")?e:`${e}/`,r=t.startsWith("/")?t.slice(1):t;return`${n}${r}`}function Oe(e){return e instanceof Error?e.message:String(e)}function Fe(e){let{apiUrl:t,endpointPath:n}=Ue(e.endpoint),r=k({apiUrl:t,apiKey:e.token,endpointPath:n,flushIntervalMs:e.flushIntervalMs}),i,o=s=>typeof s=="function"?s():s,a=async s=>{let c=e.identity?.()??{},f=o(e.channelId),d=f===void 0?s.properties:{channelId:f,...s.properties},u=E({sessionId:c.sessionId,visitorId:c.visitorId,externalUserId:c.externalUserId??i,traceId:c.traceId,...s,properties:d,metadata:{...e.metadata,...s.metadata}},{source:o(e.source)});return r.enqueue(u),{eventId:u.id}};return{track:Object.assign(a,S(a)),identify(s,c){return i=s,a({event:"user.identified",externalUserId:s,properties:c})},flush:()=>r.flush(),shutdown:s=>r.shutdown(s)}}function Ue(e){let t=new URL(e);return{apiUrl:t.origin,endpointPath:`${t.pathname}${t.search}`}}function w(e,t,n){try{let r=JSON.parse(e);if(r!==null&&typeof r=="object"){let i="message"in r&&typeof r.message=="string"?r.message:"",o="detail"in r&&typeof r.detail=="string"?r.detail:"";if(i&&o)return`${i}: ${o}`;if(i)return i;if(o)return o}}catch{}return e||`${n} error: HTTP ${t}`}var Be="@waniwani/sdk",Ke="/api/mcp/modules/documents/extract";function We(e){return"documentId"in e&&typeof e.documentId=="string"}function je(e){return We(e)?{documentId:e.documentId}:{url:e.url,filename:e.filename}}function $(e){let{apiUrl:t,apiKey:n}=e;return{async extract(r){if(!n)throw new Error("WANIWANI_API_KEY is not set");let{toJSONSchema:i}=await import("zod"),o=await fetch(`${t.replace(/\/$/,"")}${Ke}`,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","X-WaniWani-SDK":Be},body:JSON.stringify({...je(r),schema:i(r.schema),pages:r.pages,sessionId:r.sessionId,correlationId:r.correlationId})});if(!o.ok){let u=await o.text().catch(()=>"");throw new h(w(u,o.status,"Documents API"),o.status)}let a=await o.json(),{fields:s,pageCount:c,pageConfidence:f,documentId:d}=a.data;return{fields:r.schema.parse(s),pageCount:c,pageConfidence:f??null,documentId:d}}}}var Le="@waniwani/sdk",Ne="/api/mcp/modules/email/send";function H(e){let{apiUrl:t,apiKey:n}=e;return{async send(r){if(!n)throw new Error("WANIWANI_API_KEY is not set");let i=await fetch(`${t.replace(/\/$/,"")}${Ne}`,{method:"POST",headers:{Authorization:`Bearer ${n}`,"Content-Type":"application/json","X-WaniWani-SDK":Le},body:JSON.stringify({to:r.to,cc:r.cc,bcc:r.bcc,subject:r.subject,html:r.html,text:r.text,replyTo:r.replyTo,sessionId:r.sessionId})});if(!i.ok){let a=await i.text().catch(()=>"");throw new h(w(a,i.status,"Email API"),i.status)}return{id:(await i.json()).data.id}}}}import{AsyncLocalStorage as Ve}from"async_hooks";var X=globalThis,x=X.__waniwaniKbRetrievalStore;x||(x=new Ve,X.__waniwaniKbRetrievalStore=x);var Ye=x;function G(e){try{Ye.getStore()?.searches.push(e)}catch{}}var qe="@waniwani/sdk";function Q(e){let{apiUrl:t,apiKey:n}=e;function r(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}async function i(o,a,s){let c=r(),f=`${t.replace(/\/$/,"")}${a}`,d={Authorization:`Bearer ${c}`,"X-WaniWani-SDK":qe},u={method:o,headers:d};s!==void 0&&(d["Content-Type"]="application/json",u.body=JSON.stringify(s));let m=await fetch(f,u);if(!m.ok){let ee=await m.text().catch(()=>"");throw new h(ee||`KB API error: HTTP ${m.status}`,m.status)}return(await m.json()).data}return{async ingest(o){return i("POST","/api/mcp/kb/ingest",{files:o})},async search(o,a){let s=await i("POST","/api/mcp/kb/search",{query:o,...a});return G({query:o,resultCount:s.length,results:s.map(c=>({source:c.source,heading:c.heading,score:c.score}))}),s},async sources(){return i("GET","/api/mcp/kb/sources")}}}function J(e){let{apiUrl:t,apiKey:n,tracking:r}=e;function i(){if(!n)throw new Error("WANIWANI_API_KEY is not set");return n}let o=n?k({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;function a(d){i();let u=E(d);return!u.correlation.sessionId&&!u.correlation.externalUserId&&!u.correlation.visitorId&&console.warn(`[waniwani] event "${u.name}" has no sessionId, externalUserId, or visitorId; the ingest API requires one and will reject it.`),o?.enqueue(u),{eventId:u.id}}let s=async d=>a(d),c=Object.assign(s,S(s)),f={async identify(d,u,m){i();let R=E({event:"user.identified",externalUserId:d,properties:u,meta:m});return o?.enqueue(R),{eventId:R.id}},track:c,async flush(){i(),await o?.flush()},async shutdown(d){return i(),await o?.shutdown({timeoutMs:d?.timeoutMs??r.shutdownTimeoutMs})??{timedOut:!1,pendingEvents:0}}};return o&&ze(f,r.shutdownTimeoutMs),f}function ze(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)}var Z="https://app.waniwani.ai";function $e(e){let n=e??D()??O(),r=n?.apiUrl??process.env.WANIWANI_API_URL??Z,i=n?.apiKey??process.env.WANIWANI_API_KEY,o={endpointPath:n?.tracking?.endpointPath??"/api/mcp/events/v2/batch",flushIntervalMs:n?.tracking?.flushIntervalMs??1e3,maxBatchSize:n?.tracking?.maxBatchSize??20,maxBufferSize:n?.tracking?.maxBufferSize??1e3,maxRetries:n?.tracking?.maxRetries??3,retryBaseDelayMs:n?.tracking?.retryBaseDelayMs??200,retryMaxDelayMs:n?.tracking?.retryMaxDelayMs??2e3,shutdownTimeoutMs:n?.tracking?.shutdownTimeoutMs??2e3},a={apiUrl:r,apiKey:i,tracking:o},s=J(a),c=Q(a),f=$(a),d=H(a);return{...s,kb:c,documents:f,email:d,_config:a}}export{B as ERROR_CAUSES,F as EVENT_TYPES,U as SESSION_ERROR_CODES,h as WaniWaniError,Fe as createFrontendClient,le as defineConfig,A as readAttachedDocuments,$e as waniwani};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|