@copilotkit/web-inspector 1.69.0 → 1.69.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +2418 -152
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +372 -6
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +372 -6
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2419 -156
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +3134 -236
- package/dist/index.umd.js.map +1 -1
- package/dist/lib/event-snippets.cjs +559 -0
- package/dist/lib/event-snippets.cjs.map +1 -0
- package/dist/lib/event-snippets.d.cts +61 -0
- package/dist/lib/event-snippets.d.cts.map +1 -0
- package/dist/lib/event-snippets.d.mts +61 -0
- package/dist/lib/event-snippets.d.mts.map +1 -0
- package/dist/lib/event-snippets.mjs +537 -0
- package/dist/lib/event-snippets.mjs.map +1 -0
- package/dist/lib/home-briefing.cjs +23 -3
- package/dist/lib/home-briefing.cjs.map +1 -1
- package/dist/lib/home-briefing.mjs +23 -4
- package/dist/lib/home-briefing.mjs.map +1 -1
- package/dist/lib/inspector-nav.cjs +1 -0
- package/dist/lib/inspector-nav.cjs.map +1 -1
- package/dist/lib/inspector-nav.d.cts +11 -0
- package/dist/lib/inspector-nav.d.cts.map +1 -0
- package/dist/lib/inspector-nav.d.mts +11 -0
- package/dist/lib/inspector-nav.d.mts.map +1 -0
- package/dist/lib/inspector-nav.mjs +1 -0
- package/dist/lib/inspector-nav.mjs.map +1 -1
- package/dist/lib/telemetry.cjs +46 -1
- package/dist/lib/telemetry.cjs.map +1 -1
- package/dist/lib/telemetry.d.cts.map +1 -1
- package/dist/lib/telemetry.d.mts.map +1 -1
- package/dist/lib/telemetry.mjs +44 -2
- package/dist/lib/telemetry.mjs.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.mjs +1 -1
- package/dist/styles/generated.cjs +1 -1
- package/dist/styles/generated.cjs.map +1 -1
- package/dist/styles/generated.mjs +1 -1
- package/dist/styles/generated.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.umd.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
7
7
|
|
|
8
8
|
//#region src/styles/generated.css
|
|
9
|
-
var generated_default = "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-100:oklch(96.2% .044 156.743);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-700:oklch(49.6% .265 301.924);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{font-family:var(--font-sans);color:var(--color-slate-900);background-color:#0000;display:block}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:calc(var(--spacing)*0)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-auto{margin-right:auto}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-\\[28rem\\]{height:28rem}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-7{min-height:calc(var(--spacing)*7)}.min-h-\\[20rem\\]{min-height:20rem}.min-h-\\[40px\\]{min-height:40px}.min-h-\\[420px\\]{min-height:420px}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-40{width:calc(var(--spacing)*40)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[200px\\]{max-width:200px}.max-w-\\[240px\\]{max-width:240px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.translate-x-0\\.5{--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-\\[2px\\]{--tw-translate-y:calc(2px*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-nesw-resize{cursor:nesw-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[16px\\]{border-radius:16px}.rounded-\\[28px\\]{border-radius:28px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-purple-200{border-color:var(--color-purple-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-\\[\\#00000014\\]{background-color:#00000014}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black{background-color:var(--color-black)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-100{background-color:var(--color-green-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950\\/95{background-color:#020618f2}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\\/95{background-color:color-mix(in oklab,var(--color-slate-950)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-white{background-color:var(--color-white)}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-\\[22px\\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[rgb\\(13\\,13\\,13\\)\\]{color:#0d0d0d}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-purple-700{color:var(--color-purple-700)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-sky-700{color:var(--color-sky-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-800{color:var(--color-slate-800)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-950{color:var(--color-violet-950)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.decoration-violet-300{-webkit-text-decoration-color:var(--color-violet-300);-webkit-text-decoration-color:var(--color-violet-300);text-decoration-color:var(--color-violet-300)}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.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)}.shadow-\\[0_4px_4px_0_\\#0000000a\\,0_0_1px_0_\\#0000009e\\]{--tw-shadow:0 4px 4px 0 var(--tw-shadow-color,#0000000a),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-transparent{--tw-ring-color:transparent}.ring-white\\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.ring-white\\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-gray-500::placeholder{color:var(--color-gray-500)}.focus-within\\:shadow-\\[0_6px_18px_0_\\#00000014\\,0_0_1px_0_\\#0000009e\\]:focus-within{--tw-shadow:0 6px 18px 0 var(--tw-shadow-color,#00000014),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-white\\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/30:hover{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-blue-50\\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-50\\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-rose-100:hover{background-color:var(--color-rose-100)}.hover\\:bg-slate-900\\/95:hover{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-slate-900\\/95:hover{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.hover\\:bg-violet-100:hover{background-color:var(--color-violet-100)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}.hover\\:text-violet-800:hover{color:var(--color-violet-800)}.hover\\:decoration-violet-700:hover{-webkit-text-decoration-color:var(--color-violet-700);-webkit-text-decoration-color:var(--color-violet-700);text-decoration-color:var(--color-violet-700)}.hover\\:opacity-70:hover{opacity:.7}}.focus\\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\\:border-violet-400:focus{border-color:var(--color-violet-400)}.focus\\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\\:ring-violet-100:focus{--tw-ring-color:var(--color-violet-100)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:rounded:focus-visible{border-radius:.25rem}.focus-visible\\:rounded-sm:focus-visible{border-radius:var(--radius-sm)}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-rose-300:focus-visible{--tw-ring-color:var(--color-rose-300)}.focus-visible\\:ring-violet-300:focus-visible{--tw-ring-color:var(--color-violet-300)}.focus-visible\\:ring-violet-400:focus-visible{--tw-ring-color:var(--color-violet-400)}.focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-\\[\\#BEC2FF\\]:focus-visible{outline-color:#bec2ff}.focus-visible\\:outline-gray-300:focus-visible{outline-color:var(--color-gray-300)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:opacity-60:active{opacity:.6}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-60:disabled{opacity:.6}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\\[\\&\\>svg\\]\\:\\!h-8>svg{height:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:h-3>svg{height:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:h-3\\.5>svg{height:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:h-\\[18px\\]>svg{height:18px}.\\[\\&\\>svg\\]\\:\\!w-8>svg{width:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:w-3>svg{width:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:w-3\\.5>svg{width:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:w-\\[18px\\]>svg{width:18px}.\\[\\&\\>svg\\]\\:animate-spin>svg{animation:var(--animate-spin)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}.cpk-json-block{white-space:pre-wrap;word-break:break-all;color:#57575b;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;line-height:1.8;overflow:auto}.inspector-account-strip{border-bottom:1px solid #d8d8e8;width:100%;min-width:0;color:#010507!important;background:linear-gradient(90deg,#fff 0%,#f3f1ff 58%,#eefbf7 100%)!important}.inspector-account-logo{filter:none}.inspector-account-brand{position:relative}.inspector-account-logo-accent{clip-path:inset(0 0 0 80%);pointer-events:none;display:none;position:absolute;inset:0}.inspector-account-cta{isolation:isolate;color:#3f176f;white-space:nowrap;cursor:pointer;background-color:#eee6fe;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:32px;padding:7px 10px;font-size:11px;font-weight:700;line-height:1;text-decoration:none;display:inline-flex;position:relative;overflow:hidden}.inspector-account-cta:after{z-index:0;content:\"\";opacity:0;pointer-events:none;background:linear-gradient(105deg,#0000 0%,#ffffff14 32%,#ffffffad 50%,#ffffff14 68%,#0000 100%);width:68%;animation:3.8s cubic-bezier(.16,1,.3,1) infinite inspector-account-cta-shimmer;position:absolute;inset:0;transform:translate(-180%)skew(-14deg)}.inspector-account-cta>*{z-index:1;position:relative}.inspector-account-cta[data-motion-paused=true]:after{animation-play-state:paused}@keyframes inspector-account-cta-shimmer{0%{opacity:0;transform:translate(-180%)skew(-14deg)}12%{opacity:1}82%{opacity:.8}to{opacity:0;transform:translate(280%)skew(-14deg)}}.inspector-account-cta:hover{color:#32105d;background-color:#e4d8fc}.inspector-account-cta svg{width:14px;height:14px}@media (prefers-reduced-motion:reduce){.inspector-account-cta:after{animation:none}}.inspector-window-layout{position:relative}.inspector-window-layout-menu{z-index:60;color:#010507;background-color:#fff;border:1px solid #d8d8e8;border-radius:5px;width:188px;padding:4px;display:grid;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 10px 24px #1f173924}.inspector-window-layout-menu button{min-height:34px;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;border-radius:4px;align-items:center;gap:9px;padding:7px 9px;font-size:12px;font-weight:600;display:flex}.inspector-window-layout-menu button:hover,.inspector-window-layout-menu button:focus-visible{color:#3f176f;background-color:#eee6fe;outline:none}.inspector-window-layout-menu button span:first-child{flex:none;display:inline-flex}.inspector-agent-placeholder{color:#68686e;border-color:#c8c8d8}.inspector-primary-navigation,.inspector-child-navigation{display:none}.inspector-shell{background-color:#f7f6fd;flex:auto;min-height:0;display:flex}.inspector-sidebar{z-index:20;background-color:#f7f6fd;border-right:1px solid #d8d8e8;flex-direction:column;flex:none;gap:8px;width:224px;min-width:224px;padding:12px 10px;transition:width .22s,min-width .22s,padding .22s;display:flex;position:relative;overflow:visible}.inspector-sidebar[data-icon-rail=true]{width:56px;min-width:56px;padding:10px 6px}.inspector-sidebar-agent-scope{border-bottom:1px solid #d8d8e8;flex:none;min-width:0;padding-bottom:10px}.inspector-sidebar .inspector-agent-selector{width:100%;min-width:0}.inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{background-color:#fff;border-radius:5px;max-width:none;min-height:34px;padding:6px 8px}.inspector-context-dropdown-icon{color:#68686e;display:inline-flex}.inspector-context-dropdown-icon svg,.inspector-context-dropdown-chevron svg{width:14px;height:14px}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope{padding-bottom:8px}.inspector-sidebar[data-icon-rail=true] .inspector-agent-selector>[data-context-dropdown-root=true]>button{justify-content:center;width:100%;min-height:34px;padding:6px 0}.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-label,.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-chevron,.inspector-sidebar[data-icon-rail=true] .inspector-agent-placeholder span:last-child{display:none}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope [data-context-dropdown-root=true]>div{margin-top:0;top:0;left:calc(100% + 8px)}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-section+.inspector-sidebar-section{border-top:1px solid #dbdbe5;margin-top:4px;padding-top:10px}.inspector-sidebar-nav{cursor:default;flex-direction:column;flex:auto;gap:14px;min-height:0;display:flex;overflow:hidden auto}.inspector-sidebar-section{flex-direction:column;gap:4px;display:flex}.inspector-sidebar-label{color:#838389;letter-spacing:.02em;text-align:left;text-transform:none;background:0 0;border:0;width:100%;margin:0 0 2px;padding:0 8px;font-size:11px;font-weight:600;display:block}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-label,.inspector-sidebar[data-icon-rail=true] .inspector-nav-label{display:none}.inspector-sidebar-rail-tooltip{z-index:60;color:#fff;pointer-events:none;white-space:nowrap;background-color:#242331;border-radius:6px;max-width:220px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.2;position:absolute;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 7px 18px #1a172a2e}.inspector-sidebar-control{justify-content:flex-start;width:100%;min-height:36px;display:flex;position:relative}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-control,.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-toggle,.inspector-sidebar[data-icon-rail=true] .inspector-nav-control{justify-content:center;align-items:center;gap:0;padding:6px 0;overflow:hidden}.inspector-home-badge{background-color:#fa5f67;border-radius:999px;width:7px;height:7px;position:absolute;top:8px;right:8px}.inspector-sidebar[data-icon-rail=true] .inspector-home-badge{top:6px;right:8px}.inspector-sidebar-toggle{color:#57575b;width:100%;min-height:32px;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;display:flex}.inspector-sidebar-toggle:hover{color:#010507;background-color:#f0f0f4}.inspector-sidebar-footer{flex-direction:column;flex:none;gap:6px;padding:2px 0 18px;display:flex}.inspector-sidebar-status-list{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.inspector-sidebar-status-card{color:#2b2b2b;background-color:#fff;border:1px solid #d8d8e8;border-radius:7px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;min-height:52px;padding:9px 10px;display:grid;position:relative}.inspector-sidebar-status-copy{flex-direction:column;gap:2px;min-width:0;line-height:1.25;display:flex}.inspector-sidebar-status-copy strong{color:#010507;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;overflow:hidden}.inspector-sidebar-status-copy>span{color:#57575b;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#68686e}.inspector-sidebar-status-action{color:#3f176f;white-space:nowrap;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;gap:0;width:28px;height:28px;padding:0;font-size:10px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-sidebar-status-action:hover{color:#6430ab;background-color:#eee7f8;text-decoration:none}.inspector-sidebar-status-action svg{width:12px;height:12px}.inspector-sidebar-status-action-label{display:none}.inspector-sidebar-intelligence-setup{color:#3f176f;cursor:pointer;background-color:#eee7f8;border-color:#bba5df;text-decoration:none;transition:border-color .12s,background-color .12s,box-shadow .3s;animation:3.2s ease-in-out infinite inspector-sidebar-intelligence-setup-glow}@keyframes inspector-sidebar-intelligence-setup-glow{0%,to{box-shadow:0 0 #6430ab00}50%{box-shadow:0 0 16px 2px #6430ab26}}.inspector-sidebar-intelligence-setup:hover{background-color:#e4d9f4;border-color:#8e6fc0}.inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#3f176f}.inspector-sidebar-setup-arrow{background-color:#6430ab1a;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.inspector-sidebar-setup-arrow svg{width:13px;height:13px}.inspector-main{background-color:#fff;flex-direction:column;flex:auto;min-width:0;display:flex;position:relative}.cpk-memory-locked{background-color:#fff;justify-content:center;align-items:center;height:100%;padding:32px;display:flex;position:relative;overflow:hidden}.cpk-locked-preview{opacity:.58;pointer-events:none;grid-template-columns:minmax(180px,28%) 1fr;display:grid;position:absolute;inset:0;overflow:hidden}.cpk-locked-preview-sidebar{background-color:#fafafa;border-right:1px solid #dbdbe5;flex-direction:column;gap:12px;padding:28px 24px;display:flex}.cpk-locked-preview-row{background-color:#fff;border-radius:10px;padding:12px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-row[data-accent=true]{background-color:#eee6fe}.cpk-locked-preview-bar{background-color:#d7d7df;border-radius:999px}.cpk-locked-preview-row-title{width:var(--preview-width);height:8px}.cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#a984f5}.cpk-locked-preview-row-line{background-color:#e3e3eb;width:88%;height:6px;margin-top:10px}.cpk-locked-preview-row-line:last-child{background-color:#e8e8ef;width:62%;margin-top:7px}.cpk-locked-preview-main{background-color:#fff;min-width:0;padding:42px 48px}.cpk-locked-preview-heading{width:180px;height:10px}.cpk-locked-preview-copy{background-color:#e3e3eb;width:min(520px,58%);height:8px;margin-top:28px}.cpk-locked-preview-copy+.cpk-locked-preview-copy{background-color:#e8e8ef;width:min(430px,48%);margin-top:12px}.cpk-locked-preview-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;max-width:620px;margin-top:30px;display:grid}.cpk-locked-preview-card{background-color:#f5f5f8;border-radius:10px;height:116px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-footer-line{background-color:#e3e3eb;width:min(680px,74%);height:10px;margin-top:34px}.cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#e8e8ef;width:min(560px,60%);margin-top:14px}.cpk-memory-locked-scrim{pointer-events:none;background:radial-gradient(circle,#ffffffe6 0,#ffffffc7 24%,#ffffff57 48%,#ffffff8f 100%);position:absolute;inset:0}.cpk-memory-locked-content{z-index:1;color:#57575b;text-align:center;max-width:440px;position:relative}.cpk-memory-locked-icon-wrap{justify-content:center;margin:0 auto 18px;display:flex}.cpk-memory-locked-icon{color:#57575b;background-color:#eee6fe;border:1px solid #dfd6fb;border-radius:10px;justify-content:center;align-items:center;width:44px;height:44px;display:flex;box-shadow:0 8px 18px #57575b24}.cpk-memory-locked-title{color:#010507;margin:0 0 8px;font-size:16px;font-weight:600;line-height:1.35}.cpk-memory-locked-copy{color:#57575b;max-width:380px;margin:0 auto 18px;font-size:13px;line-height:1.55}.cpk-memory-locked-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.cpk-memory-locked-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:5px;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;text-decoration:none;display:inline-flex}.cpk-memory-locked-action:hover{background-color:#4e238c;border-color:#4e238c}.cpk-memory-locked-action-secondary{color:#57575b;background-color:#fff;border-color:#dbdbe5}.cpk-memory-locked-action-secondary:hover{background-color:#f7f7f9;border-color:#afafb7}.inspector-home{background-color:#fff;min-height:100%;padding:30px 32px 40px;position:relative;overflow:auto}.inspector-home:before{display:none}.inspector-home>*{width:min(100%,960px);margin-left:auto;margin-right:auto}.inspector-settings{color:#010507;background-color:#fff;min-height:100%;padding:28px 28px 36px;overflow:auto}.inspector-settings-header{border-bottom:1px solid #d5d3e4;max-width:70ch;padding-bottom:22px}.inspector-settings-title{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-settings-subtitle{color:#57575b;max-width:60ch;margin:10px 0 0;font-size:14px;line-height:1.5}.inspector-settings-section{grid-template-columns:minmax(138px,168px) minmax(0,1fr);gap:30px;max-width:820px;margin-top:28px;display:grid}.inspector-settings-section-heading{align-items:flex-start;gap:10px;display:flex}.inspector-settings-section-icon{color:#3f176f;background-color:#eee6fe;border:1px solid #bec2ff;border-radius:5px;flex:none;justify-content:center;align-items:center;width:30px;height:30px;display:inline-flex}.inspector-settings-section-icon svg{width:16px;height:16px}.inspector-settings-section-heading h2,.inspector-settings-status-row h3{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-weight:600}.inspector-settings-section-heading h2{font-size:15px;line-height:1.3}.inspector-settings-section-heading p{color:#68686e;margin:5px 0 0;font-size:11px;line-height:1.45}.inspector-settings-privacy{border-top:1px solid #d5d3e4;border-bottom:1px solid #d5d3e4;padding:20px 0 22px}.inspector-settings-status-row{justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.inspector-settings-status-row h3{font-size:16px;line-height:1.3}.inspector-settings-status-row p{color:#57575b;max-width:56ch;margin:8px 0 0;font-size:13px;line-height:1.55}.inspector-settings-status{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;min-height:24px;padding:3px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#7d4d0a;background-color:#fff5df;border-color:#dfc08f}.inspector-settings-private-content{border-top:1px solid #e4e4ec;margin-top:20px;padding-top:18px}.inspector-settings-private-content strong{color:#010507;font-size:13px;font-weight:700}.inspector-settings-private-content>p{color:#68686e;margin:4px 0 0;font-size:11px;line-height:1.45}.inspector-settings-private-content ul{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;margin:12px 0 0;display:grid}.inspector-settings-private-content li{color:#3e3d48;align-items:center;gap:7px;min-width:0;font-size:12px;line-height:1.35;display:flex}.inspector-settings-private-content li span{color:#087653;flex:none;display:inline-flex}.inspector-settings-private-content li svg{width:14px;height:14px}.inspector-settings-policy-link{color:#3f176f;text-underline-offset:3px;outline-offset:2px;outline:2px solid #0000;align-items:center;gap:6px;min-height:32px;margin-top:20px;font-size:12px;font-weight:700;text-decoration:underline;text-decoration-thickness:1px;display:inline-flex}.inspector-settings-policy-link:hover{color:#6430ab}.inspector-settings-policy-link:focus-visible{outline-color:#6430ab}.inspector-settings-policy-link svg{width:14px;height:14px}@media (max-width:720px){.inspector-settings{padding:24px 20px 32px}.inspector-settings-section{grid-template-columns:1fr;gap:18px}.inspector-settings-section-heading p{max-width:42ch}}@media (max-width:480px){.inspector-settings-status-row{flex-direction:column;gap:12px}.inspector-settings-private-content ul{grid-template-columns:1fr}}.inspector-home-card,.inspector-home-story{background-color:#ffffffd1;border:1px solid #deddea;border-radius:5px;padding:18px 18px 16px;position:relative}.inspector-home-eyebrow,.inspector-home-card-label,.inspector-home-meta{color:#57575b;margin:0;font-size:12px;font-weight:600}.inspector-home-title,.inspector-home-section-title,.inspector-home-card-title{color:#010507;margin:8px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-home-section-title{letter-spacing:-.015em;margin:0 0 14px;font-size:17px}.inspector-home-card-title{font-size:16px}.inspector-home-body,.inspector-home-card-copy{color:#57575b;max-width:52ch;margin:10px 0 0;font-size:15px;line-height:1.5}.inspector-home-section{margin-top:24px;position:relative}.inspector-home>.inspector-home-section:first-child{margin-top:0}.inspector-whats-new-preview+.inspector-home-section{margin-top:20px}.inspector-home-section-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px;display:flex}.inspector-home-section-header .inspector-home-section-title{margin-bottom:0}.inspector-home-section-header>span{color:#68686e;font-size:11px;font-weight:600;line-height:1.35}.inspector-system-health-header>span[data-tone=success]{color:#087653}.inspector-system-health-header>span[data-tone=checking]{color:#8a5900}.inspector-system-health-header>span[data-tone=offline],.inspector-system-health-header>span[data-tone=error]{color:#b32d3b}.inspector-system-health-section{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-system-health-section .inspector-system-health-header{background-color:#f7f4fe;border-bottom:1px solid #d5d3e4;align-items:center;min-height:76px;margin:0;padding:18px}.inspector-system-health-heading{min-width:0}.inspector-system-health-heading .inspector-home-section-title{color:#010507;letter-spacing:-.025em;font-size:18px}.inspector-system-health-state,.inspector-intelligence-hud-state{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:24px;padding:4px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-system-health-state>span,.inspector-intelligence-hud-state>span{background-color:currentColor;border-radius:999px;width:6px;height:6px}.inspector-system-health-state[data-tone=checking],.inspector-intelligence-hud-state[data-tone=checking]{background-color:#fff5df;border-color:#dfc08f;color:#7d4d0a!important}.inspector-system-health-state[data-tone=offline],.inspector-system-health-state[data-tone=error],.inspector-intelligence-hud-state[data-tone=offline],.inspector-intelligence-hud-state[data-tone=error]{background-color:#fff0f1;border-color:#e7a7ac;color:#b32d3b!important}.inspector-system-health-state[data-tone=unavailable],.inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#f0f0f4;border-color:#c8c8d2;color:#57575b!important}.inspector-system-health{background-color:#d5d3e4;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.inspector-system-health-signal{background-color:#fff;grid-template-columns:minmax(0,1fr);align-items:start;min-width:0;min-height:84px;padding:15px 16px 14px;display:grid}.inspector-system-health-copy{flex-direction:column;min-width:0;display:flex}.inspector-system-health-signal dt{color:#68686e;letter-spacing:.035em;text-transform:uppercase;font-size:10px;font-weight:700;line-height:1.3}.inspector-system-health-signal dd{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:15px;font-weight:700;overflow:hidden}.inspector-system-health-signal small{color:#68686e;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-top:4px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;line-height:1.4;overflow:hidden}small.inspector-system-health-detail{letter-spacing:0;font-family:inherit;font-size:11px;font-weight:500;line-height:1.4}.inspector-system-health-url{cursor:help;outline:none;position:relative;overflow:visible!important}.inspector-system-health-url>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-url:after{z-index:30;color:#f3f4f8;content:attr(data-full-value);opacity:0;overflow-wrap:anywhere;pointer-events:none;white-space:normal;background-color:#15171e;border:1px solid #3a3d49;border-radius:4px;width:max-content;max-width:min(360px,70vw);padding:7px 9px;font-size:10px;font-weight:500;line-height:1.45;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 7px);left:0;transform:translateY(3px);box-shadow:0 8px 20px #0105072e}.inspector-system-health-url:hover:after,.inspector-system-health-url:focus-visible:after{opacity:1;transform:translateY(0)}.inspector-system-health-url:focus-visible>span{outline-offset:2px;border-radius:3px;outline:2px solid #6430ab}.inspector-system-health-signal[data-tone=success] dd{color:#087653}.inspector-system-health-signal[data-tone=active] dd{color:#8a5900}.inspector-system-health-event-link{width:100%;min-width:0;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;padding:0;display:block}.inspector-system-health-event-link>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-event-link>.inspector-system-health-event-type{color:#57575b;letter-spacing:.025em;background-color:#f1f1f3;border-radius:999px;align-items:center;width:fit-content;max-width:100%;padding:3px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;line-height:1.25;display:inline-flex}.inspector-system-health-event-link>small{color:#68686e;align-items:center;gap:6px;margin:5px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:10px;font-weight:500;line-height:1.25;display:flex}.inspector-system-health-event-meta strong{color:#6430ab;text-underline-offset:3px;font-weight:700;-webkit-text-decoration:underline #0000;text-decoration:underline #0000}.inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#b32d3b;background-color:#fff0f1}.inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#087653;background-color:#e3f5ee}.inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#8a5900;background-color:#fff5df}.inspector-system-health-event-link:hover .inspector-system-health-event-meta strong{text-decoration-color:currentColor}.inspector-system-health-event-link:focus-visible{outline-offset:3px;border-radius:3px;outline:2px solid #6430ab}.inspector-intelligence-hud{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-intelligence-hud-header{justify-content:space-between;align-items:center;gap:24px;padding:18px;display:flex}.inspector-intelligence-hud[data-state=disconnected]{border-color:#bba5df}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header{align-items:center;min-height:132px;padding:22px}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header-actions{flex-direction:column;align-items:flex-end;gap:10px}.inspector-intelligence-hud-heading{min-width:0}.inspector-intelligence-hud-header-actions{flex:none;align-items:center;gap:8px;display:flex}.inspector-intelligence-hud-heading .inspector-home-section-title{margin:0;font-size:18px}.inspector-intelligence-hud-description{color:#4f4f55;max-width:64ch;margin:10px 0 0;font-size:12px;line-height:1.55}.inspector-intelligence-hud-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:4px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:8px 11px;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:11px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-intelligence-hud-action:hover{background-color:#4e238c;border-color:#4e238c}.inspector-intelligence-hud-action svg{width:13px;height:13px}.inspector-intelligence-hud-connect-action{min-height:38px;padding:10px 14px;font-size:12px}.inspector-intelligence-hud-details{background-color:#d5d3e4;border-top:1px solid #d5d3e4;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:1px;display:grid}.inspector-intelligence-hud-details>section{background-color:#fff;min-width:0;padding:15px 18px 17px}.inspector-intelligence-hud-detail-label{color:#68686e;font-size:11px;font-weight:600;display:block}.inspector-intelligence-hud-detail-value{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:14px;font-weight:700;display:block;overflow:hidden}.inspector-intelligence-hud-detail-subvalue{color:#68686e;text-transform:capitalize;margin-top:3px;font-size:10px;font-weight:500;display:block}.inspector-intelligence-hud-plan{grid-template-columns:minmax(0,1fr) minmax(120px,1fr);align-items:start;gap:24px;display:grid}.inspector-intelligence-hud-usage{min-width:0}.inspector-intelligence-hud-plan-action{color:#6430ab;text-underline-offset:3px;background-color:#0000;border:0;border-radius:0;gap:4px;min-height:auto;margin-top:9px;padding:0;font-size:10px;font-weight:700;line-height:1.2;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:1px}.inspector-intelligence-hud-plan-action:hover{color:#4e238c;background-color:#0000;border-color:#0000;text-decoration-color:currentColor}.inspector-intelligence-hud-plan-action svg{width:11px;height:11px}.inspector-home-usage-bar{background-color:#dbdbe5;border-radius:999px;width:min(160px,100%);height:5px;margin-top:8px;display:block;overflow:hidden}.inspector-home-usage-bar>span{background-color:#bec2ff;height:100%;display:block}.inspector-home-feature-groups{grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));align-items:start;gap:12px;display:grid}.inspector-home-feature-group{background-color:#fff;border:1px solid #d5d3e4;border-radius:5px;overflow:hidden}.inspector-home-feature-group-header{color:#57575b;background-color:#f7f7f9;border-bottom:1px solid #e4e4ec;justify-content:space-between;align-items:center;gap:12px;min-height:40px;padding:9px 12px;display:flex}.inspector-home-feature-group-header strong{font-size:12px;font-weight:700}.inspector-home-feature-group-header>span{background-color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:22px;min-height:20px;padding:2px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#087653;background-color:#e5f7f1;border-color:#b9e3d6}.inspector-home-feature-list{background-color:#fff;flex-direction:column;margin:0;display:flex}.inspector-home-feature{color:#010507;background-color:#fff;grid-template-columns:minmax(0,1fr) auto 14px;align-items:center;gap:8px;min-width:0;min-height:43px;padding:10px 12px;font-size:12px;font-weight:600;text-decoration:none;display:grid}.inspector-home-feature+.inspector-home-feature{border-top:1px solid #ececf1}.inspector-home-feature-group-empty{color:#68686e;margin:0;padding:15px 12px;font-size:11px}.inspector-home-feature:hover{background-color:#f7f7f9}.inspector-home-feature-arrow svg{width:12px;height:12px}.inspector-home-feature small{color:#087653;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700}.inspector-home-feature[data-state=off],.inspector-home-feature[data-state=off] small,.inspector-home-feature-arrow{color:#68686e}.inspector-home-features-empty{color:#57575b;border-top:1px solid #deddea;border-bottom:1px solid #deddea;margin:14px 0 0;padding:16px 0;font-size:12px}.inspector-home-news{gap:12px;display:grid}.inspector-whats-new-preview{color:#010507;background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;align-items:stretch;width:100%;min-height:64px;display:flex;position:relative;overflow:hidden;container-type:inline-size}.inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background-color:#f1ebfc;border-color:#8f91d7}.inspector-whats-new-preview-body{min-width:0;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;flex:auto;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 14px;display:grid}.inspector-whats-new-preview-copy{flex-direction:column;gap:3px;min-width:0;display:flex}.inspector-whats-new-preview-title{align-items:center;gap:8px;min-width:0;display:flex}.inspector-whats-new-preview-copy strong{text-overflow:ellipsis;white-space:nowrap;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:13px;line-height:1.25;overflow:hidden}.inspector-whats-new-preview-copy>span:last-child{color:#4e4c63;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.4;overflow:hidden}.inspector-whats-new-preview-action{color:#3f176f;white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:11px;font-weight:700;display:inline-flex}.inspector-whats-new-preview-action svg{width:15px;height:15px}@container (max-width:640px){.inspector-whats-new-preview-body{grid-template-columns:minmax(0,1fr)}.inspector-whats-new-preview-action{display:none}}.inspector-whats-new-preview-dismiss{color:#68686e;cursor:pointer;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.inspector-whats-new-preview-dismiss:hover{color:#3f176f;background-color:#6430ab1a}.inspector-whats-new-preview-dismiss svg{width:14px;height:14px}@media (max-width:720px){.inspector-account-cta{width:32px;padding-inline:0}.inspector-account-cta-label{display:none}.inspector-home{padding:24px 22px 34px}.inspector-intelligence-hud-header{flex-wrap:wrap}.inspector-intelligence-hud-details{grid-template-columns:1fr}.inspector-intelligence-hud-plan{grid-template-columns:repeat(2,minmax(0,1fr))}.inspector-whats-new-preview-action{display:none}}@media (max-width:600px){.inspector-system-health{grid-template-columns:1fr}}@media (max-width:480px){.inspector-system-health-section .inspector-system-health-header{align-items:flex-start}.inspector-intelligence-hud-header{flex-direction:column;align-items:stretch}.inspector-intelligence-hud-header-actions{justify-content:space-between}.inspector-intelligence-hud-header-actions .inspector-intelligence-hud-action,.inspector-intelligence-hud-plan{width:100%}.inspector-intelligence-hud-plan{grid-template-columns:1fr;align-items:stretch}.inspector-intelligence-hud-plan-action{justify-self:start}.inspector-whats-new-header{align-items:center;gap:16px;width:calc(100% - 24px);padding:24px 22px}.inspector-whats-new-document,.inspector-whats-new-empty{padding:20px 22px 36px}.inspector-whats-new-document .announcement-content h1+p{font-size:16px}}.inspector-whats-new-header{background:#f8f7ff;border:1px solid #d8d8e8;border-radius:5px;justify-content:space-between;align-items:center;gap:24px;width:calc(100% - 44px);max-width:calc(70ch - 44px);padding:30px 32px 28px;display:flex;box-shadow:0 12px 28px #26224e0f}.inspector-whats-new-header .inspector-home-title{letter-spacing:-.035em;margin:0;font-size:clamp(27px,3.6vw,36px)}.inspector-whats-new-updated{color:#6c687c;letter-spacing:.01em;white-space:nowrap;flex:none;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;font-weight:600}.inspector-whats-new .inspector-home-news{max-width:70ch;margin-top:0}.inspector-whats-new-document,.inspector-whats-new-empty{max-width:70ch;padding:22px 32px 52px}.inspector-whats-new-document .announcement-content{color:#2b2b39;font-size:15px;line-height:1.72}.inspector-whats-new-document .announcement-content h1{color:#15131d;letter-spacing:-.032em;max-width:24ch;margin:0 0 16px;font-size:clamp(26px,3.2vw,34px);line-height:1.1}.inspector-whats-new-document .announcement-content h1+p{color:#504d61;max-width:58ch;margin-top:0;font-size:18px;line-height:1.58}.inspector-whats-new-document .announcement-content>hr:first-child{display:none}.inspector-whats-new-document .announcement-content h2:first-of-type{border-top:0;margin-top:14px;padding-top:0}.inspector-whats-new-document .announcement-content h2{color:#1b1924;letter-spacing:-.024em;border-top:1px solid #dfdeea;margin:44px 0 14px;padding-top:24px;font-size:21px;line-height:1.2}.inspector-whats-new-document .announcement-content p{max-width:70ch;margin:.85rem 0}.inspector-whats-new-document .announcement-content ul,.inspector-whats-new-document .announcement-content ol{max-width:68ch;margin:1.25rem 0 1.5rem;padding-left:1.4rem}.inspector-whats-new-document .announcement-content li+li{margin-top:.7rem}.inspector-whats-new-document .announcement-content a{color:#4e46a5;text-underline-offset:4px;font-weight:600;text-decoration-color:#4e46a56b;text-decoration-thickness:1px;transition:color .16s,text-decoration-color .16s}.inspector-whats-new-document .announcement-content a:hover{color:#312879;text-decoration-color:currentColor}.inspector-whats-new-empty{color:#5e5b70}.inspector-whats-new-empty .inspector-home-card-title{color:#1b1924;margin:0}.inspector-whats-new-empty .inspector-home-card-copy{max-width:48ch;margin:8px 0 0}.inspector-home-story-featured{padding:22px}.inspector-home-story-link{color:inherit;cursor:pointer;text-decoration:none;display:block}.inspector-home-story-link:hover{background-color:#fff;border-color:#8f91d7}.inspector-home-story[data-unread=true]{border-color:#bec2ff;padding-right:64px;box-shadow:0 0 0 1px #6430ab}.inspector-home-story-unread{color:#fff;letter-spacing:.04em;text-transform:uppercase;background-color:#6430ab;border-radius:999px;align-items:center;min-height:18px;padding:0 7px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-nav-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;transition:opacity .18s,width .22s;overflow:hidden}.inspector-nav-control{color:#57575b;min-height:32px;font:inherit;text-align:left;outline-offset:-2px;cursor:pointer;background-color:#0000;border:1px solid #0000;border-radius:5px;outline:2px solid #0000;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;line-height:1.25;display:flex}.inspector-nav-control:hover{color:#010507;background-color:#f0f0f4}.inspector-nav-control-active{color:#3f176f;background-color:#eee6fe;border-color:#bec2ff}.inspector-nav-icon{flex:none;align-items:center;display:inline-flex}.inspector-nav-icon svg{width:15px;height:15px}.inspector-nav-control:focus-visible,.inspector-account-control:focus-visible,[data-inspector-thread-cta]:focus-visible,[data-inspector-sidebar-intelligence-action]:focus-visible,[data-inspector-whats-new-preview]:focus-visible,[data-inspector-whats-new-dismiss]:focus-visible,[data-inspector-home-intelligence-action]:focus-visible,.inspector-home-feature:focus-visible,[data-inspector-action-placement=threads-footer]:focus-visible{outline-offset:2px;outline:2px solid #6430ab!important}.inspector-sidebar .inspector-nav-control:focus-visible,.inspector-sidebar .inspector-sidebar-label:focus-visible,.inspector-sidebar [data-inspector-thread-cta]:focus-visible{outline-offset:-2px!important}.inspector-account-control{color:#57575b;font:inherit;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #0000;outline:2px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.inspector-account-control:hover,.inspector-account-control-active{color:#3f176f;background-color:#6430ab17}:host ::selection{color:#010507;background-color:#cfd2ff}:host *{scrollbar-color:#aaa9c1 transparent;scrollbar-width:thin}:host ::-webkit-scrollbar{width:8px;height:8px}:host ::-webkit-scrollbar-thumb{background:#aaa9c1 padding-box padding-box;border:2px solid #0000;border-radius:999px}.inspector-account-control-icon{flex:none;justify-content:center;align-items:center;display:inline-flex}.inspector-account-control-icon svg{width:15px;height:15px}[data-inspector-thread-cta],[data-inspector-account-strip] button,[data-inspector-account-strip] a{cursor:pointer}@media (prefers-reduced-motion:reduce){.inspector-sidebar,.inspector-nav-label{transition:none}}[data-inspector-threads-setup-prompt],[data-inspector-threads-setup-link]{min-height:34px;font:inherit;outline-offset:2px;cursor:pointer;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-threads-setup-prompt]{color:#fff;background-color:#010507;border-color:#010507}[data-inspector-threads-setup-prompt]:hover{background-color:#2b2b2b;border-color:#2b2b2b}[data-inspector-threads-setup-link]{color:#57575b;background-color:#fff}[data-inspector-threads-setup-link]:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}[data-inspector-threads-setup-prompt]:focus-visible,[data-inspector-threads-setup-link]:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.inspector-threads-footer{color:#57575b;background-color:#f7f7f9;border-top:1px solid #dbdbe5;flex:none;gap:10px;padding:12px;font-size:11px;line-height:1.35;display:grid}.inspector-threads-usage{gap:6px;display:grid}[data-inspector-thread-count]{color:#010507;font-weight:600}[data-inspector-thread-expiry]{color:#57575b}.inspector-thread-progress{--inspector-thread-progress-color:#189370;width:100%;height:6px;accent-color:var(--inspector-thread-progress-color);border-radius:999px;overflow:hidden}.inspector-thread-progress[data-inspector-thread-capacity=warning]{--inspector-thread-progress-color:#b45309}.inspector-thread-progress[data-inspector-thread-capacity=critical]{--inspector-thread-progress-color:#be123c}.inspector-thread-progress::-webkit-progress-bar{background-color:#dbdbe5;border-radius:999px}.inspector-thread-progress::-webkit-progress-value{background-color:var(--inspector-thread-progress-color);border-radius:999px}.inspector-thread-progress::-moz-progress-bar{background-color:var(--inspector-thread-progress-color);border-radius:999px}[data-inspector-action-placement=threads-footer]{color:#57575b;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #d5d3e4;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;width:100%;min-height:32px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]{color:#fff;background-color:#6430ab;border-color:#6430ab}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]:hover{color:#fff;background-color:#3f176f;border-color:#3f176f}[data-inspector-action-placement=threads-footer]:hover{color:#010507;background-color:#f7f4fe;border-color:#c8c6e6}.cpk-threads-overview-video{opacity:0;transition:opacity .22s}.cpk-threads-overview{background-color:#f7f7f9;flex:1;justify-content:center;align-items:center;min-width:0;padding:32px;display:flex}.cpk-threads-overview-content{color:#57575b;width:100%;max-width:440px}.cpk-threads-overview-title{color:#010507;margin:0 0 10px;font-size:20px;font-weight:600;line-height:1.25}.cpk-threads-overview-copy{color:#57575b;margin:0 0 16px;font-size:13px;line-height:1.55}.cpk-threads-overview-actions{flex-wrap:wrap;gap:8px;display:flex}.cpk-threads-overview-action{outline-offset:2px;border:1px solid #0000;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}.cpk-threads-overview-action-primary{color:#fff;background-color:#010507;border-color:#010507}.cpk-threads-overview-action-primary:hover{background-color:#2b2b2b;border-color:#2b2b2b}.cpk-threads-overview-action-secondary{color:#010507;background-color:#fff;border-color:#dbdbe5}.cpk-threads-overview-action-secondary:hover{background-color:#fff;border-color:#afafb7}.cpk-threads-overview-video[data-loaded=true]{opacity:1}.cpk-threads-overview-video-control{color:#3f176f;min-height:32px;font:inherit;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;margin:0 0 14px;padding:6px 10px;font-size:12px;font-weight:600;line-height:1.25;display:inline-flex}.cpk-threads-overview-video-control:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}.cpk-threads-overview-video-control:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.cpk-threads-overview-video-fallback{color:#57575b;max-width:440px;margin:-4px 0 14px;font-size:12px;line-height:1.5}.cpk-threads-tour-launch{z-index:2;color:#57575b;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600;position:absolute;bottom:16px;right:16px;box-shadow:0 8px 18px #01050714}.cpk-threads-tour{z-index:3;color:#57575b;background-color:#fff;border:1px solid #dbdbe5;border-radius:10px;width:min(340px,100% - 32px);padding:14px;position:absolute;bottom:16px;right:16px;box-shadow:0 16px 36px #01050724}.cpk-threads-tour-step{color:#087653;text-transform:uppercase;margin-bottom:8px;font-family:Spline Sans Mono,monospace;font-size:10px;font-weight:600}.cpk-threads-tour-title{color:#010507;margin-bottom:6px;font-size:14px;font-weight:600;line-height:1.35}.cpk-threads-tour-copy{color:#57575b;font-size:12px;line-height:1.5}.cpk-threads-tour-actions{justify-content:space-between;gap:8px;margin-top:14px;display:flex}.cpk-threads-tour-nav{gap:8px;display:flex}.cpk-threads-tour-skip,.cpk-threads-tour-button{font:inherit;outline-offset:2px;cursor:pointer;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600}.cpk-threads-overview-action:focus-visible,.cpk-threads-tour-launch:focus-visible,.cpk-threads-tour-skip:focus-visible,.cpk-threads-tour-button:focus-visible{outline-color:#6430ab}.cpk-threads-tour-skip{color:#68686e;background-color:#0000;border:0;padding-inline:0}.cpk-threads-tour-button-secondary{color:#57575b;background-color:#fff;border:1px solid #dbdbe5}.cpk-threads-tour-button-primary{color:#fff;background-color:#010507;border:1px solid #010507}.cpk-threads-tour-button:disabled{cursor:not-allowed;opacity:.45}@media (max-width:720px){.cpk-threads-overview{padding:24px}}@media (prefers-reduced-motion:reduce){.cpk-threads-overview-video{transition:none}}.inspector-window[data-color-scheme=dark]{color-scheme:dark;color:#f3f4f8!important;background-color:#111319!important;border-color:#7b7d89!important}.inspector-window[data-color-scheme=dark]>div,.inspector-window[data-color-scheme=dark] .inspector-shell,.inspector-window[data-color-scheme=dark] .inspector-main,.inspector-window[data-color-scheme=dark] #cpk-main-scroll{color:#f3f4f8!important;background-color:#111319!important}.inspector-window[data-color-scheme=dark] .drag-handle,.inspector-window[data-color-scheme=dark] .inspector-account-strip{color:#f3f4f8!important;background:#171a22!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-logo{filter:brightness(0)invert();clip-path:inset(0 20% 0 0)}.inspector-window[data-color-scheme=dark] .inspector-account-logo-accent{filter:none;display:block}.inspector-window[data-color-scheme=dark] .inspector-agent-placeholder{color:#b8bbc7!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-control{color:#b8bbc7!important;border:0!important}.inspector-window[data-color-scheme=dark] .inspector-account-control:hover,.inspector-window[data-color-scheme=dark] .inspector-account-control-active{color:#d8d9ff!important;background-color:#292c38!important}.inspector-window[data-color-scheme=dark] .inspector-account-cta{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-account-cta:hover{color:#fff;background-color:#353854}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu{color:#f3f4f8;background-color:#191c24;border-color:#464957;box-shadow:0 12px 28px #00000052}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:hover,.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:focus-visible{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{color:#f3f4f8!important;background-color:#20232c!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button:hover{background-color:#292c38!important;border-color:#777aae!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button>span:last-child{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div{color:#f3f4f8!important;box-shadow:none!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:hover,.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:focus{color:#f3f4f8!important;background-color:#343746!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar{color:#f3f4f8;background-color:#15171e;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-label{color:#8f93a1}.inspector-window[data-color-scheme=dark] .inspector-sidebar-rail-tooltip{color:#191c24;background-color:#e9e9f1;box-shadow:0 7px 18px #00000047}.inspector-window[data-color-scheme=dark] .inspector-nav-control,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle{color:#b8bbc7}.inspector-window[data-color-scheme=dark] .inspector-nav-control:hover,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle:hover{color:#fff;background-color:#22252f}.inspector-window[data-color-scheme=dark] .inspector-nav-control-active{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-agent-scope{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy>span,.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action:hover{color:#fff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup:hover{background-color:#343653;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-setup-arrow{background-color:#caccff1f}@media (prefers-reduced-motion:reduce){.inspector-sidebar-intelligence-setup{animation:none}}.inspector-window[data-color-scheme=dark] .inspector-home{background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings-header,.inspector-window[data-color-scheme=dark] .inspector-settings-privacy,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-settings-title,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading h2,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row h3,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-settings-subtitle,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading p,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row p,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content>p{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-settings-section-icon{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li span{color:#75d8b9}.inspector-window[data-color-scheme=dark] .inspector-settings-status{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#f2cf8f;background-color:#342916;border-color:#866932}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link:hover{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-home-card,.inspector-window[data-color-scheme=dark] .inspector-home-story,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud,.inspector-window[data-color-scheme=dark] .inspector-home-feature-list,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview{color:#f3f4f8;background:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected]{background-color:#1d1e2b;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-description{color:#c5c7d0}.inspector-window[data-color-scheme=dark] .inspector-system-health,.inspector-window[data-color-scheme=dark] .inspector-system-health-section{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-section{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-section .inspector-system-health-header{background-color:#191c24;border-bottom-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-event-link>small{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=success]{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=success],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=success]{background-color:#173b32;border-color:#347d69;color:#8ce1c5!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=checking],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=checking]{background-color:#342916;border-color:#866932;color:#f2cf8f!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=error],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=error]{background-color:#3b1c22;border-color:#87424a;color:#ff9aa0!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=unavailable],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#242731;border-color:#464957;color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=checking]{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=error]{color:#ff9aa0}.inspector-window[data-color-scheme=dark] .inspector-home-story-link:hover,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background:#242131;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-home-title,.inspector-window[data-color-scheme=dark] .inspector-home-section-title,.inspector-window[data-color-scheme=dark] .inspector-home-card-title,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dd,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-value,.inspector-window[data-color-scheme=dark] .inspector-home-feature{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-home-eyebrow,.inspector-window[data-color-scheme=dark] .inspector-home-card-label,.inspector-window[data-color-scheme=dark] .inspector-home-meta,.inspector-window[data-color-scheme=dark] .inspector-home-body,.inspector-window[data-color-scheme=dark] .inspector-home-card-copy,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dt,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal small,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-heading p,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-label,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-subvalue,.inspector-window[data-color-scheme=dark] .inspector-home-section-header>span,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-copy>span:last-child{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details{background-color:#3a3d49;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section{background-color:#15171e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action:hover{color:#fff;background-color:#0000;border-color:#0000}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal+.inspector-system-health-signal,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section+section,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details,.inspector-window[data-color-scheme=dark] .inspector-home-features-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] dd,.inspector-window[data-color-scheme=dark] .inspector-home-feature small{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] dd{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#ff9aa0;background-color:#3b1c22}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#8ce1c5;background-color:#173b32}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#f2cf8f;background-color:#342916}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header{color:#c9ccd6;background-color:#20232d;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header>span{color:#c9ccd6;background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-home-feature{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature:hover{background-color:#20232d}.inspector-window[data-color-scheme=dark] .inspector-home-feature+.inspector-home-feature{border-color:#2f323d}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-empty{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off] small,.inspector-window[data-color-scheme=dark] .inspector-home-feature-arrow{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss:hover{color:#fff;background-color:#302a40}.inspector-window[data-color-scheme=dark] .inspector-home-usage-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-thread-progress::-webkit-progress-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-header{box-shadow:none;background-color:#1d1e2b;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-updated,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-action{color:#d8d9ff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:hover .inspector-whats-new-preview-action{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty .inspector-home-card-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1+p{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2{border-top-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h3,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content a{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-threads-footer{color:#aeb1bd;background-color:#15171e;border-color:#343742}.inspector-window[data-color-scheme=dark] [data-inspector-thread-count]{color:#f3f4f8}.inspector-window[data-color-scheme=dark] [data-inspector-thread-expiry]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]:hover{color:#fff;background-color:#20232d;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-content,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-copy,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-fallback,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-title,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-frame{background:linear-gradient(135deg,#666a9e3d,#347d6929),#191c24;border-color:#3a3d49;box-shadow:0 8px 20px #00000038}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary{color:#171823;background-color:#caccff;border-color:#caccff}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary:hover{background-color:#d8d9ff;border-color:#d8d9ff}.inspector-window[data-color-scheme=dark] .cpk-threads-tour{color:#aeb1bd;background-color:#191c24;border-color:#464957;box-shadow:0 16px 36px #00000052}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-step{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button:focus-visible{outline-color:#bec2ff}.inspector-window[data-color-scheme=dark] .cpk-memory-locked{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-sidebar{background-color:#15171e;border-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-main{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true]{background-color:#292b43}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-bar{background-color:#333641}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line{background-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line:last-child,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy+.cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#292c36}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-card{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-scrim{background:radial-gradient(circle,#111319f0 0,#111319d6 24%,#11131975 48%,#111319ad 100%)}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-content,.inspector-window[data-color-scheme=dark] .cpk-memory-locked-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-icon{color:#d8d9ff;box-shadow:none;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-agent-overview,.inspector-window[data-color-scheme=dark] .cpk-section-card{background-color:#191c24!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header{background-color:#242731!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header h4{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] .cpk-agent-icon{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] .cpk-stat-card{background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] button.cpk-stat-card:hover{background-color:#20232d!important}.inspector-window[data-color-scheme=dark] .cpk-agent-view .divide-gray-200>:not([hidden])~:not([hidden]){border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-json-block{color:#c9ccd6}.inspector-window[data-color-scheme=dark] [class*=bg-emerald-50],.inspector-window[data-color-scheme=dark] [class*=bg-green-100]{color:#8ce1c5!important;background-color:#173b32!important}.inspector-window[data-color-scheme=dark] [class*=bg-rose-50]{color:#ff9aa0!important;background-color:#3b1c22!important}.inspector-window[data-color-scheme=dark] [class*=bg-amber-50],.inspector-window[data-color-scheme=dark] [class*=bg-amber-100]{color:#f2cf8f!important;background-color:#342916!important}.inspector-window[data-color-scheme=dark] [class*=bg-blue-50],.inspector-window[data-color-scheme=dark] [class*=bg-blue-100],.inspector-window[data-color-scheme=dark] [class*=bg-sky-50],.inspector-window[data-color-scheme=dark] [class*=bg-violet-50],.inspector-window[data-color-scheme=dark] [class*=bg-purple-50],.inspector-window[data-color-scheme=dark] [class*=bg-fuchsia-50]{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] [class*=bg-white]{background-color:#191c24!important}.inspector-window[data-color-scheme=dark] [class*=bg-gray-50],.inspector-window[data-color-scheme=dark] [class*=bg-slate-50],.inspector-window[data-color-scheme=dark] [class*=bg-gray-100],.inspector-window[data-color-scheme=dark] [class*=bg-slate-100]{background-color:#171a22!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-900],.inspector-window[data-color-scheme=dark] [class*=text-slate-900],.inspector-window[data-color-scheme=dark] [class*=text-gray-800],.inspector-window[data-color-scheme=dark] [class*=text-slate-800],.inspector-window[data-color-scheme=dark] [class*=text-gray-700],.inspector-window[data-color-scheme=dark] [class*=text-slate-700]{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-600],.inspector-window[data-color-scheme=dark] [class*=text-slate-600],.inspector-window[data-color-scheme=dark] [class*=text-gray-500],.inspector-window[data-color-scheme=dark] [class*=text-slate-500],.inspector-window[data-color-scheme=dark] [class*=text-gray-400],.inspector-window[data-color-scheme=dark] [class*=text-slate-400]{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [class*=border-gray-100],.inspector-window[data-color-scheme=dark] [class*=border-slate-100],.inspector-window[data-color-scheme=dark] [class*=border-gray-200],.inspector-window[data-color-scheme=dark] [class*=border-slate-200],.inspector-window[data-color-scheme=dark] [class*=border-gray-300],.inspector-window[data-color-scheme=dark] [class*=border-slate-300]{border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] input,.inspector-window[data-color-scheme=dark] select,.inspector-window[data-color-scheme=dark] textarea{color:#f3f4f8!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] input::placeholder,.inspector-window[data-color-scheme=dark] textarea::placeholder{color:#858996}.inspector-window[data-color-scheme=dark] ::selection{color:#fff;background-color:#5b5f92}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
|
|
9
|
+
var generated_default = "/*! tailwindcss v4.1.18 | MIT License | https://tailwindcss.com */\n@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-100:oklch(96.2% .044 156.743);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-100:oklch(95.1% .026 236.824);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-700:oklch(50% .134 242.749);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-100:oklch(94.3% .029 294.588);--color-violet-200:oklch(89.4% .057 293.283);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-950:oklch(28.3% .141 291.089);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-700:oklch(49.6% .265 301.924);--color-fuchsia-50:oklch(97.7% .017 320.058);--color-fuchsia-200:oklch(90.3% .076 319.62);--color-fuchsia-700:oklch(51.8% .253 323.949);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height:calc(1.5/1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}:host{font-family:var(--font-sans);color:var(--color-slate-900);background-color:#0000;display:block}}@layer components;@layer utilities{.\\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.collapse{visibility:collapse}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.top-0{top:calc(var(--spacing)*0)}.right-0{right:calc(var(--spacing)*0)}.bottom-0{bottom:calc(var(--spacing)*0)}.left-0{left:calc(var(--spacing)*0)}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.m-0{margin:calc(var(--spacing)*0)}.mx-3{margin-inline:calc(var(--spacing)*3)}.mx-4{margin-inline:calc(var(--spacing)*4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing)*1)}.my-3{margin-block:calc(var(--spacing)*3)}.mt-0\\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mt-5{margin-top:calc(var(--spacing)*5)}.mt-6{margin-top:calc(var(--spacing)*6)}.mr-auto{margin-right:auto}.mb-0\\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.-ml-1{margin-left:calc(var(--spacing)*-1)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\\.5{height:calc(var(--spacing)*1.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-12{height:calc(var(--spacing)*12)}.h-20{height:calc(var(--spacing)*20)}.h-24{height:calc(var(--spacing)*24)}.h-40{height:calc(var(--spacing)*40)}.h-\\[28rem\\]{height:28rem}.h-full{height:100%}.max-h-32{max-height:calc(var(--spacing)*32)}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-7{min-height:calc(var(--spacing)*7)}.min-h-\\[20rem\\]{min-height:20rem}.min-h-\\[40px\\]{min-height:40px}.min-h-\\[420px\\]{min-height:420px}.w-1\\.5{width:calc(var(--spacing)*1.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-40{width:calc(var(--spacing)*40)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\\[80\\%\\]{max-width:80%}.max-w-\\[200px\\]{max-width:200px}.max-w-\\[240px\\]{max-width:240px}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\\[200px\\]{min-width:200px}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.table-fixed{table-layout:fixed}.border-collapse{border-collapse:collapse}.translate-x-0\\.5{--tw-translate-x:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-4{--tw-translate-x:calc(var(--spacing)*4);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-\\[2px\\]{--tw-translate-y:calc(2px*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,)var(--tw-rotate-y,)var(--tw-rotate-z,)var(--tw-skew-x,)var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.cursor-col-resize{cursor:col-resize}.cursor-grab{cursor:grab}.cursor-grabbing{cursor:grabbing}.cursor-nesw-resize{cursor:nesw-resize}.cursor-not-allowed{cursor:not-allowed}.cursor-nwse-resize{cursor:nwse-resize}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-\\[16px\\]{border-radius:16px}.rounded-\\[28px\\]{border-radius:28px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-blue-200{border-color:var(--color-blue-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-fuchsia-200{border-color:var(--color-fuchsia-200)}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-purple-200{border-color:var(--color-purple-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-rose-300{border-color:var(--color-rose-300)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-200{border-color:var(--color-slate-200)}.border-violet-200{border-color:var(--color-violet-200)}.border-white\\/20{border-color:#fff3}@supports (color:color-mix(in lab, red, red)){.border-white\\/20{border-color:color-mix(in oklab,var(--color-white)20%,transparent)}}.bg-\\[\\#00000014\\]{background-color:#00000014}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-black{background-color:var(--color-black)}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-fuchsia-50{background-color:var(--color-fuchsia-50)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-50\\/50{background-color:#f9fafb80}@supports (color:color-mix(in lab, red, red)){.bg-gray-50\\/50{background-color:color-mix(in oklab,var(--color-gray-50)50%,transparent)}}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300{background-color:var(--color-gray-300)}.bg-gray-400{background-color:var(--color-gray-400)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-100{background-color:var(--color-green-100)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-sky-100{background-color:var(--color-sky-100)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950\\/95{background-color:#020618f2}@supports (color:color-mix(in lab, red, red)){.bg-slate-950\\/95{background-color:color-mix(in oklab,var(--color-slate-950)95%,transparent)}}.bg-transparent{background-color:#0000}.bg-violet-50{background-color:var(--color-violet-50)}.bg-violet-100{background-color:var(--color-violet-100)}.bg-white{background-color:var(--color-white)}.bg-white\\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\\/95{background-color:color-mix(in oklab,var(--color-white)95%,transparent)}}.p-0\\.5{padding:calc(var(--spacing)*.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.py-0\\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-8{padding-block:calc(var(--spacing)*8)}.py-10{padding-block:calc(var(--spacing)*10)}.pt-1{padding-top:calc(var(--spacing)*1)}.pt-1\\.5{padding-top:calc(var(--spacing)*1.5)}.pt-8{padding-top:calc(var(--spacing)*8)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-5{padding-bottom:calc(var(--spacing)*5)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\\[9px\\]{font-size:9px}.text-\\[10px\\]{font-size:10px}.text-\\[11px\\]{font-size:11px}.text-\\[13px\\]{font-size:13px}.leading-4{--tw-leading:calc(var(--spacing)*4);line-height:calc(var(--spacing)*4)}.leading-5{--tw-leading:calc(var(--spacing)*5);line-height:calc(var(--spacing)*5)}.leading-\\[22px\\]{--tw-leading:22px;line-height:22px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\\[rgb\\(13\\,13\\,13\\)\\]{color:#0d0d0d}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-blue-800{color:var(--color-blue-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-fuchsia-700{color:var(--color-fuchsia-700)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-gray-800{color:var(--color-gray-800)}.text-gray-900{color:var(--color-gray-900)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-purple-700{color:var(--color-purple-700)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-950{color:var(--color-rose-950)}.text-sky-700{color:var(--color-sky-700)}.text-slate-500{color:var(--color-slate-500)}.text-slate-800{color:var(--color-slate-800)}.text-violet-500{color:var(--color-violet-500)}.text-violet-600{color:var(--color-violet-600)}.text-violet-700{color:var(--color-violet-700)}.text-violet-950{color:var(--color-violet-950)}.text-white{color:var(--color-white)}.italic{font-style:italic}.underline{text-decoration-line:underline}.decoration-violet-300{-webkit-text-decoration-color:var(--color-violet-300);-webkit-text-decoration-color:var(--color-violet-300);text-decoration-color:var(--color-violet-300)}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-80{opacity:.8}.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)}.shadow-\\[0_4px_4px_0_\\#0000000a\\,0_0_1px_0_\\#0000009e\\]{--tw-shadow:0 4px 4px 0 var(--tw-shadow-color,#0000000a),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px 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)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-black\\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-transparent{--tw-ring-color:transparent}.ring-white\\/10{--tw-ring-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.ring-white\\/10{--tw-ring-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--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,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\\:text-gray-500::placeholder{color:var(--color-gray-500)}.focus-within\\:shadow-\\[0_6px_18px_0_\\#00000014\\,0_0_1px_0_\\#0000009e\\]:focus-within{--tw-shadow:0 6px 18px 0 var(--tw-shadow-color,#00000014),0 0 1px 0 var(--tw-shadow-color,#0000009e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}@media (hover:hover){.hover\\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\\:border-gray-300:hover{border-color:var(--color-gray-300)}.hover\\:border-white\\/30:hover{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.hover\\:border-white\\/30:hover{border-color:color-mix(in oklab,var(--color-white)30%,transparent)}}.hover\\:bg-blue-50\\/50:hover{background-color:#eff6ff80}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-blue-50\\/50:hover{background-color:color-mix(in oklab,var(--color-blue-50)50%,transparent)}}.hover\\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\\:bg-gray-100:hover{background-color:var(--color-gray-100)}.hover\\:bg-gray-200:hover{background-color:var(--color-gray-200)}.hover\\:bg-gray-400:hover{background-color:var(--color-gray-400)}.hover\\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\\:bg-rose-100:hover{background-color:var(--color-rose-100)}.hover\\:bg-slate-900\\/95:hover{background-color:#0f172bf2}@supports (color:color-mix(in lab, red, red)){.hover\\:bg-slate-900\\/95:hover{background-color:color-mix(in oklab,var(--color-slate-900)95%,transparent)}}.hover\\:bg-violet-100:hover{background-color:var(--color-violet-100)}.hover\\:text-gray-900:hover{color:var(--color-gray-900)}.hover\\:text-violet-800:hover{color:var(--color-violet-800)}.hover\\:decoration-violet-700:hover{-webkit-text-decoration-color:var(--color-violet-700);-webkit-text-decoration-color:var(--color-violet-700);text-decoration-color:var(--color-violet-700)}.hover\\:opacity-70:hover{opacity:.7}}.focus\\:border-gray-300:focus{border-color:var(--color-gray-300)}.focus\\:border-violet-400:focus{border-color:var(--color-violet-400)}.focus\\:bg-gray-50:focus{background-color:var(--color-gray-50)}.focus\\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\\:ring-gray-200:focus{--tw-ring-color:var(--color-gray-200)}.focus\\:ring-violet-100:focus{--tw-ring-color:var(--color-violet-100)}.focus\\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\\:rounded:focus-visible{border-radius:.25rem}.focus-visible\\:rounded-sm:focus-visible{border-radius:var(--radius-sm)}.focus-visible\\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\\:ring-rose-300:focus-visible{--tw-ring-color:var(--color-rose-300)}.focus-visible\\:ring-violet-300:focus-visible{--tw-ring-color:var(--color-violet-300)}.focus-visible\\:ring-violet-400:focus-visible{--tw-ring-color:var(--color-violet-400)}.focus-visible\\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\\:outline:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\\:outline-\\[\\#BEC2FF\\]:focus-visible{outline-color:#bec2ff}.focus-visible\\:outline-gray-300:focus-visible{outline-color:var(--color-gray-300)}.focus-visible\\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\\:opacity-60:active{opacity:.6}.disabled\\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\\:text-gray-500:disabled{color:var(--color-gray-500)}.disabled\\:opacity-50:disabled{opacity:.5}.disabled\\:opacity-60:disabled{opacity:.6}@media (min-width:48rem){.md\\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\\[\\&\\>svg\\]\\:\\!h-8>svg{height:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:h-3>svg{height:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:h-3\\.5>svg{height:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:h-\\[18px\\]>svg{height:18px}.\\[\\&\\>svg\\]\\:\\!w-8>svg{width:calc(var(--spacing)*8)!important}.\\[\\&\\>svg\\]\\:w-3>svg{width:calc(var(--spacing)*3)}.\\[\\&\\>svg\\]\\:w-3\\.5>svg{width:calc(var(--spacing)*3.5)}.\\[\\&\\>svg\\]\\:w-\\[18px\\]>svg{width:18px}.\\[\\&\\>svg\\]\\:animate-spin>svg{animation:var(--animate-spin)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}}.cpk-json-block{white-space:pre-wrap;word-break:break-all;color:#57575b;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;line-height:1.8;overflow:auto}.inspector-account-strip{border-bottom:1px solid #d8d8e8;width:100%;min-width:0;color:#010507!important;background:linear-gradient(90deg,#fff 0%,#f3f1ff 58%,#eefbf7 100%)!important}.inspector-account-logo{filter:none}.inspector-account-brand{position:relative}.inspector-account-logo-accent{clip-path:inset(0 0 0 80%);pointer-events:none;display:none;position:absolute;inset:0}.inspector-account-cta{isolation:isolate;color:#3f176f;white-space:nowrap;cursor:pointer;background-color:#eee6fe;border:0;border-radius:5px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:32px;padding:7px 10px;font-size:11px;font-weight:700;line-height:1;text-decoration:none;display:inline-flex;position:relative;overflow:hidden}.inspector-account-cta:after{z-index:0;content:\"\";opacity:0;pointer-events:none;background:linear-gradient(105deg,#0000 0%,#ffffff14 32%,#ffffffad 50%,#ffffff14 68%,#0000 100%);width:68%;animation:3.8s cubic-bezier(.16,1,.3,1) infinite inspector-account-cta-shimmer;position:absolute;inset:0;transform:translate(-180%)skew(-14deg)}.inspector-account-cta>*{z-index:1;position:relative}.inspector-account-cta[data-motion-paused=true]:after{animation-play-state:paused}@keyframes inspector-account-cta-shimmer{0%{opacity:0;transform:translate(-180%)skew(-14deg)}12%{opacity:1}82%{opacity:.8}to{opacity:0;transform:translate(280%)skew(-14deg)}}.inspector-account-cta:hover{color:#32105d;background-color:#e4d8fc}.inspector-account-cta svg{width:14px;height:14px}@media (prefers-reduced-motion:reduce){.inspector-account-cta:after{animation:none}}.inspector-window-layout{position:relative}.inspector-window-layout-menu{z-index:60;color:#010507;background-color:#fff;border:1px solid #d8d8e8;border-radius:5px;width:188px;padding:4px;display:grid;position:absolute;top:calc(100% + 6px);right:0;overflow:hidden;box-shadow:0 10px 24px #1f173924}.inspector-window-layout-menu button{min-height:34px;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;border-radius:4px;align-items:center;gap:9px;padding:7px 9px;font-size:12px;font-weight:600;display:flex}.inspector-window-layout-menu button:hover,.inspector-window-layout-menu button:focus-visible{color:#3f176f;background-color:#eee6fe;outline:none}.inspector-window-layout-menu button span:first-child{flex:none;display:inline-flex}.inspector-agent-placeholder{color:#68686e;border-color:#c8c8d8}.inspector-primary-navigation,.inspector-child-navigation{display:none}.inspector-shell{background-color:#f7f6fd;flex:auto;min-height:0;display:flex}.inspector-sidebar{z-index:20;background-color:#f7f6fd;border-right:1px solid #d8d8e8;flex-direction:column;flex:none;gap:8px;width:224px;min-width:224px;padding:12px 10px;transition:width .22s,min-width .22s,padding .22s;display:flex;position:relative;overflow:visible}.inspector-snippet-sidebar{background-color:#f7f6fd;flex-direction:column;gap:8px;padding:12px 10px;display:flex;overflow:auto}.inspector-sidebar[data-icon-rail=true]{width:56px;min-width:56px;padding:10px 6px}.inspector-sidebar-agent-scope{border-bottom:1px solid #d8d8e8;flex:none;min-width:0;padding-bottom:10px}.inspector-sidebar .inspector-agent-selector{width:100%;min-width:0}.inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{background-color:#fff;border-radius:5px;max-width:none;min-height:34px;padding:6px 8px}.inspector-context-dropdown-icon{color:#68686e;display:inline-flex}.inspector-context-dropdown-icon svg,.inspector-context-dropdown-chevron svg{width:14px;height:14px}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope{padding-bottom:8px}.inspector-sidebar[data-icon-rail=true] .inspector-agent-selector>[data-context-dropdown-root=true]>button{justify-content:center;width:100%;min-height:34px;padding:6px 0}.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-label,.inspector-sidebar[data-icon-rail=true] .inspector-context-dropdown-chevron,.inspector-sidebar[data-icon-rail=true] .inspector-agent-placeholder span:last-child{display:none}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-agent-scope [data-context-dropdown-root=true]>div{margin-top:0;top:0;left:calc(100% + 8px)}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-section+.inspector-sidebar-section{border-top:1px solid #dbdbe5;margin-top:4px;padding-top:10px}.inspector-sidebar-nav{cursor:default;flex-direction:column;flex:auto;gap:14px;min-height:0;display:flex;overflow:hidden auto}.inspector-sidebar-section{flex-direction:column;gap:4px;display:flex}.inspector-sidebar-label{color:#838389;letter-spacing:.02em;text-align:left;text-transform:none;background:0 0;border:0;width:100%;margin:0 0 2px;padding:0 8px;font-size:11px;font-weight:600;display:block}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-label,.inspector-sidebar[data-icon-rail=true] .inspector-nav-label{display:none}.inspector-sidebar-rail-tooltip{z-index:60;color:#fff;pointer-events:none;white-space:nowrap;background-color:#242331;border-radius:6px;max-width:220px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.2;position:absolute;left:calc(100% + 8px);transform:translateY(-50%);box-shadow:0 7px 18px #1a172a2e}.inspector-sidebar-control{justify-content:flex-start;width:100%;min-height:36px;display:flex;position:relative}.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-control,.inspector-sidebar[data-icon-rail=true] .inspector-sidebar-toggle,.inspector-sidebar[data-icon-rail=true] .inspector-nav-control{justify-content:center;align-items:center;gap:0;padding:6px 0;overflow:hidden}.inspector-home-badge{background-color:#fa5f67;border-radius:999px;width:7px;height:7px;position:absolute;top:8px;right:8px}.inspector-sidebar[data-icon-rail=true] .inspector-home-badge{top:6px;right:8px}.inspector-sidebar-toggle{color:#57575b;width:100%;min-height:32px;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:5px;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;display:flex}.inspector-sidebar-toggle:hover{color:#010507;background-color:#f0f0f4}.inspector-sidebar-footer{flex-direction:column;flex:none;gap:6px;padding:2px 0 18px;display:flex}.inspector-sidebar-status-list{grid-template-columns:minmax(0,1fr);gap:8px;display:grid}.inspector-sidebar-status-card{color:#2b2b2b;background-color:#fff;border:1px solid #d8d8e8;border-radius:7px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;min-height:52px;padding:9px 10px;display:grid;position:relative}.inspector-sidebar-status-copy{flex-direction:column;gap:2px;min-width:0;line-height:1.25;display:flex}.inspector-sidebar-status-copy strong{color:#010507;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;overflow:hidden}.inspector-sidebar-status-copy>span{color:#57575b;text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#68686e}.inspector-sidebar-status-action{color:#3f176f;white-space:nowrap;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;gap:0;width:28px;height:28px;padding:0;font-size:10px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-sidebar-status-action:hover{color:#6430ab;background-color:#eee7f8;text-decoration:none}.inspector-sidebar-status-action svg{width:12px;height:12px}.inspector-sidebar-status-action-label{display:none}.inspector-sidebar-intelligence-setup{color:#3f176f;cursor:pointer;background-color:#eee7f8;border-color:#bba5df;text-decoration:none;transition:border-color .12s,background-color .12s,box-shadow .3s;animation:3.2s ease-in-out infinite inspector-sidebar-intelligence-setup-glow}@keyframes inspector-sidebar-intelligence-setup-glow{0%,to{box-shadow:0 0 #6430ab00}50%{box-shadow:0 0 16px 2px #6430ab26}}.inspector-sidebar-intelligence-setup:hover{background-color:#e4d9f4;border-color:#8e6fc0}.inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#3f176f}.inspector-sidebar-setup-arrow{background-color:#6430ab1a;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex}.inspector-sidebar-setup-arrow svg{width:13px;height:13px}.inspector-main{background-color:#fff;flex-direction:column;flex:auto;min-width:0;display:flex;position:relative}.cpk-memory-locked{background-color:#fff;justify-content:center;align-items:center;height:100%;padding:32px;display:flex;position:relative;overflow:hidden}.cpk-locked-preview{opacity:.58;pointer-events:none;grid-template-columns:minmax(180px,28%) 1fr;display:grid;position:absolute;inset:0;overflow:hidden}.cpk-locked-preview-sidebar{background-color:#fafafa;border-right:1px solid #dbdbe5;flex-direction:column;gap:12px;padding:28px 24px;display:flex}.cpk-locked-preview-row{background-color:#fff;border-radius:10px;padding:12px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-row[data-accent=true]{background-color:#eee6fe}.cpk-locked-preview-bar{background-color:#d7d7df;border-radius:999px}.cpk-locked-preview-row-title{width:var(--preview-width);height:8px}.cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#a984f5}.cpk-locked-preview-row-line{background-color:#e3e3eb;width:88%;height:6px;margin-top:10px}.cpk-locked-preview-row-line:last-child{background-color:#e8e8ef;width:62%;margin-top:7px}.cpk-locked-preview-main{background-color:#fff;min-width:0;padding:42px 48px}.cpk-locked-preview-heading{width:180px;height:10px}.cpk-locked-preview-copy{background-color:#e3e3eb;width:min(520px,58%);height:8px;margin-top:28px}.cpk-locked-preview-copy+.cpk-locked-preview-copy{background-color:#e8e8ef;width:min(430px,48%);margin-top:12px}.cpk-locked-preview-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;max-width:620px;margin-top:30px;display:grid}.cpk-locked-preview-card{background-color:#f5f5f8;border-radius:10px;height:116px;box-shadow:inset 0 0 0 1px #eeeef4}.cpk-locked-preview-footer-line{background-color:#e3e3eb;width:min(680px,74%);height:10px;margin-top:34px}.cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#e8e8ef;width:min(560px,60%);margin-top:14px}.cpk-memory-locked-scrim{pointer-events:none;background:radial-gradient(circle,#ffffffe6 0,#ffffffc7 24%,#ffffff57 48%,#ffffff8f 100%);position:absolute;inset:0}.cpk-memory-locked-content{z-index:1;color:#57575b;text-align:center;max-width:440px;position:relative}.cpk-memory-locked-icon-wrap{justify-content:center;margin:0 auto 18px;display:flex}.cpk-memory-locked-icon{color:#57575b;background-color:#eee6fe;border:1px solid #dfd6fb;border-radius:10px;justify-content:center;align-items:center;width:44px;height:44px;display:flex;box-shadow:0 8px 18px #57575b24}.cpk-memory-locked-title{color:#010507;margin:0 0 8px;font-size:16px;font-weight:600;line-height:1.35}.cpk-memory-locked-copy{color:#57575b;max-width:380px;margin:0 auto 18px;font-size:13px;line-height:1.55}.cpk-memory-locked-actions{flex-wrap:wrap;justify-content:center;gap:8px;display:flex}.cpk-memory-locked-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:5px;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;text-decoration:none;display:inline-flex}.cpk-memory-locked-action:hover{background-color:#4e238c;border-color:#4e238c}.cpk-memory-locked-action-secondary{color:#57575b;background-color:#fff;border-color:#dbdbe5}.cpk-memory-locked-action-secondary:hover{background-color:#f7f7f9;border-color:#afafb7}.inspector-home{background-color:#fff;min-height:100%;padding:30px 32px 40px;position:relative;overflow:auto}.inspector-home:before{display:none}.inspector-home>*{width:min(100%,960px);margin-left:auto;margin-right:auto}.inspector-settings{color:#010507;background-color:#fff;min-height:100%;padding:28px 28px 36px;overflow:auto}.inspector-settings-header{border-bottom:1px solid #d5d3e4;max-width:70ch;padding-bottom:22px}.inspector-settings-title{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-settings-subtitle{color:#57575b;max-width:60ch;margin:10px 0 0;font-size:14px;line-height:1.5}.inspector-settings-section{grid-template-columns:minmax(138px,168px) minmax(0,1fr);gap:30px;max-width:820px;margin-top:28px;display:grid}.inspector-settings-section-heading{align-items:flex-start;gap:10px;display:flex}.inspector-settings-section-icon{color:#3f176f;background-color:#eee6fe;border:1px solid #bec2ff;border-radius:5px;flex:none;justify-content:center;align-items:center;width:30px;height:30px;display:inline-flex}.inspector-settings-section-icon svg{width:16px;height:16px}.inspector-settings-section-heading h2,.inspector-settings-status-row h3{color:#010507;margin:0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-weight:600}.inspector-settings-section-heading h2{font-size:15px;line-height:1.3}.inspector-settings-section-heading p{color:#68686e;margin:5px 0 0;font-size:11px;line-height:1.45}.inspector-settings-privacy{border-top:1px solid #d5d3e4;border-bottom:1px solid #d5d3e4;padding:20px 0 22px}.inspector-settings-status-row{justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.inspector-settings-status-row h3{font-size:16px;line-height:1.3}.inspector-settings-status-row p{color:#57575b;max-width:56ch;margin:8px 0 0;font-size:13px;line-height:1.55}.inspector-settings-status{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;min-height:24px;padding:3px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#7d4d0a;background-color:#fff5df;border-color:#dfc08f}.inspector-settings-private-content{border-top:1px solid #e4e4ec;margin-top:20px;padding-top:18px}.inspector-settings-private-content strong{color:#010507;font-size:13px;font-weight:700}.inspector-settings-private-content>p{color:#68686e;margin:4px 0 0;font-size:11px;line-height:1.45}.inspector-settings-private-content ul{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;margin:12px 0 0;display:grid}.inspector-settings-private-content li{color:#3e3d48;align-items:center;gap:7px;min-width:0;font-size:12px;line-height:1.35;display:flex}.inspector-settings-private-content li span{color:#087653;flex:none;display:inline-flex}.inspector-settings-private-content li svg{width:14px;height:14px}.inspector-settings-policy-link{color:#3f176f;text-underline-offset:3px;outline-offset:2px;outline:2px solid #0000;align-items:center;gap:6px;min-height:32px;margin-top:20px;font-size:12px;font-weight:700;text-decoration:underline;text-decoration-thickness:1px;display:inline-flex}.inspector-settings-policy-link:hover{color:#6430ab}.inspector-settings-policy-link:focus-visible{outline-color:#6430ab}.inspector-settings-policy-link svg{width:14px;height:14px}@media (max-width:720px){.inspector-settings{padding:24px 20px 32px}.inspector-settings-section{grid-template-columns:1fr;gap:18px}.inspector-settings-section-heading p{max-width:42ch}}@media (max-width:480px){.inspector-settings-status-row{flex-direction:column;gap:12px}.inspector-settings-private-content ul{grid-template-columns:1fr}}.inspector-home-card,.inspector-home-story{background-color:#ffffffd1;border:1px solid #deddea;border-radius:5px;padding:18px 18px 16px;position:relative}.inspector-home-eyebrow,.inspector-home-card-label,.inspector-home-meta{color:#57575b;margin:0;font-size:12px;font-weight:600}.inspector-home-title,.inspector-home-section-title,.inspector-home-card-title{color:#010507;margin:8px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:28px;font-weight:600;line-height:1.15}.inspector-home-section-title{letter-spacing:-.015em;margin:0 0 14px;font-size:17px}.inspector-home-card-title{font-size:16px}.inspector-home-body,.inspector-home-card-copy{color:#57575b;max-width:52ch;margin:10px 0 0;font-size:15px;line-height:1.5}.inspector-home-section{margin-top:24px;position:relative}.inspector-home>.inspector-home-section:first-child{margin-top:0}.inspector-whats-new-preview+.inspector-home-section{margin-top:20px}.inspector-home-section-header{justify-content:space-between;align-items:center;gap:16px;margin-bottom:12px;display:flex}.inspector-home-section-header .inspector-home-section-title{margin-bottom:0}.inspector-home-section-header>span{color:#68686e;font-size:11px;font-weight:600;line-height:1.35}.inspector-system-health-header>span[data-tone=success]{color:#087653}.inspector-system-health-header>span[data-tone=checking]{color:#8a5900}.inspector-system-health-header>span[data-tone=offline],.inspector-system-health-header>span[data-tone=error]{color:#b32d3b}.inspector-system-health-section{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-system-health-section .inspector-system-health-header{background-color:#f7f4fe;border-bottom:1px solid #d5d3e4;align-items:center;min-height:76px;margin:0;padding:18px}.inspector-system-health-heading{min-width:0}.inspector-system-health-heading .inspector-home-section-title{color:#010507;letter-spacing:-.025em;font-size:18px}.inspector-system-health-state,.inspector-intelligence-hud-state{color:#087653;background-color:#e5f7f1;border:1px solid #85d3bb;border-radius:999px;flex:none;align-items:center;gap:6px;min-height:24px;padding:4px 8px;font-size:10px;font-weight:700;line-height:1;display:inline-flex}.inspector-system-health-state>span,.inspector-intelligence-hud-state>span{background-color:currentColor;border-radius:999px;width:6px;height:6px}.inspector-system-health-state[data-tone=checking],.inspector-intelligence-hud-state[data-tone=checking]{background-color:#fff5df;border-color:#dfc08f;color:#7d4d0a!important}.inspector-system-health-state[data-tone=offline],.inspector-system-health-state[data-tone=error],.inspector-intelligence-hud-state[data-tone=offline],.inspector-intelligence-hud-state[data-tone=error]{background-color:#fff0f1;border-color:#e7a7ac;color:#b32d3b!important}.inspector-system-health-state[data-tone=unavailable],.inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#f0f0f4;border-color:#c8c8d2;color:#57575b!important}.inspector-system-health{background-color:#d5d3e4;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;display:grid;overflow:hidden}.inspector-system-health-signal{background-color:#fff;grid-template-columns:minmax(0,1fr);align-items:start;min-width:0;min-height:84px;padding:15px 16px 14px;display:grid}.inspector-system-health-copy{flex-direction:column;min-width:0;display:flex}.inspector-system-health-signal dt{color:#68686e;letter-spacing:.035em;text-transform:uppercase;font-size:10px;font-weight:700;line-height:1.3}.inspector-system-health-signal dd{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:15px;font-weight:700;overflow:hidden}.inspector-system-health-signal small{color:#68686e;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin-top:4px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;line-height:1.4;overflow:hidden}small.inspector-system-health-detail{letter-spacing:0;font-family:inherit;font-size:11px;font-weight:500;line-height:1.4}.inspector-system-health-url{cursor:help;outline:none;position:relative;overflow:visible!important}.inspector-system-health-url>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-url:after{z-index:30;color:#f3f4f8;content:attr(data-full-value);opacity:0;overflow-wrap:anywhere;pointer-events:none;white-space:normal;background-color:#15171e;border:1px solid #3a3d49;border-radius:4px;width:max-content;max-width:min(360px,70vw);padding:7px 9px;font-size:10px;font-weight:500;line-height:1.45;transition:opacity .12s,transform .12s;position:absolute;bottom:calc(100% + 7px);left:0;transform:translateY(3px);box-shadow:0 8px 20px #0105072e}.inspector-system-health-url:hover:after,.inspector-system-health-url:focus-visible:after{opacity:1;transform:translateY(0)}.inspector-system-health-url:focus-visible>span{outline-offset:2px;border-radius:3px;outline:2px solid #6430ab}.inspector-system-health-signal[data-tone=success] dd{color:#087653}.inspector-system-health-signal[data-tone=active] dd{color:#8a5900}.inspector-system-health-event-link{width:100%;min-width:0;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;padding:0;display:block}.inspector-system-health-event-link>span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.inspector-system-health-event-link>.inspector-system-health-event-type{color:#57575b;letter-spacing:.025em;background-color:#f1f1f3;border-radius:999px;align-items:center;width:fit-content;max-width:100%;padding:3px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;line-height:1.25;display:inline-flex}.inspector-system-health-event-link>small{color:#68686e;align-items:center;gap:6px;margin:5px 0 0;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:10px;font-weight:500;line-height:1.25;display:flex}.inspector-system-health-event-meta strong{color:#6430ab;text-underline-offset:3px;font-weight:700;-webkit-text-decoration:underline #0000;text-decoration:underline #0000}.inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#b32d3b;background-color:#fff0f1}.inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#087653;background-color:#e3f5ee}.inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#8a5900;background-color:#fff5df}.inspector-system-health-event-link:hover .inspector-system-health-event-meta strong{text-decoration-color:currentColor}.inspector-system-health-event-link:focus-visible{outline-offset:3px;border-radius:3px;outline:2px solid #6430ab}.inspector-intelligence-hud{background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;overflow:hidden}.inspector-intelligence-hud-header{justify-content:space-between;align-items:center;gap:24px;padding:18px;display:flex}.inspector-intelligence-hud[data-state=disconnected]{border-color:#bba5df}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header{align-items:center;min-height:132px;padding:22px}.inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-header-actions{flex-direction:column;align-items:flex-end;gap:10px}.inspector-intelligence-hud-heading{min-width:0}.inspector-intelligence-hud-header-actions{flex:none;align-items:center;gap:8px;display:flex}.inspector-intelligence-hud-heading .inspector-home-section-title{margin:0;font-size:18px}.inspector-intelligence-hud-description{color:#4f4f55;max-width:64ch;margin:10px 0 0;font-size:12px;line-height:1.55}.inspector-intelligence-hud-action{color:#fff;background-color:#6430ab;border:1px solid #6430ab;border-radius:4px;flex:none;justify-content:center;align-items:center;gap:7px;min-height:34px;padding:8px 11px;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:11px;font-weight:700;text-decoration:none;display:inline-flex}.inspector-intelligence-hud-action:hover{background-color:#4e238c;border-color:#4e238c}.inspector-intelligence-hud-action svg{width:13px;height:13px}.inspector-intelligence-hud-connect-action{min-height:38px;padding:10px 14px;font-size:12px}.inspector-intelligence-hud-details{background-color:#d5d3e4;border-top:1px solid #d5d3e4;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:1px;display:grid}.inspector-intelligence-hud-details>section{background-color:#fff;min-width:0;padding:15px 18px 17px}.inspector-intelligence-hud-detail-label{color:#68686e;font-size:11px;font-weight:600;display:block}.inspector-intelligence-hud-detail-value{color:#010507;text-overflow:ellipsis;white-space:nowrap;min-width:0;margin:5px 0 0;font-size:14px;font-weight:700;display:block;overflow:hidden}.inspector-intelligence-hud-detail-subvalue{color:#68686e;text-transform:capitalize;margin-top:3px;font-size:10px;font-weight:500;display:block}.inspector-intelligence-hud-plan{grid-template-columns:minmax(0,1fr) minmax(120px,1fr);align-items:start;gap:24px;display:grid}.inspector-intelligence-hud-usage{min-width:0}.inspector-intelligence-hud-plan-action{color:#6430ab;text-underline-offset:3px;background-color:#0000;border:0;border-radius:0;gap:4px;min-height:auto;margin-top:9px;padding:0;font-size:10px;font-weight:700;line-height:1.2;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:1px}.inspector-intelligence-hud-plan-action:hover{color:#4e238c;background-color:#0000;border-color:#0000;text-decoration-color:currentColor}.inspector-intelligence-hud-plan-action svg{width:11px;height:11px}.inspector-home-usage-bar{background-color:#dbdbe5;border-radius:999px;width:min(160px,100%);height:5px;margin-top:8px;display:block;overflow:hidden}.inspector-home-usage-bar>span{background-color:#bec2ff;height:100%;display:block}.inspector-home-feature-groups{grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));align-items:start;gap:12px;display:grid}.inspector-home-feature-group{background-color:#fff;border:1px solid #d5d3e4;border-radius:5px;overflow:hidden}.inspector-home-feature-group-header{color:#57575b;background-color:#f7f7f9;border-bottom:1px solid #e4e4ec;justify-content:space-between;align-items:center;gap:12px;min-height:40px;padding:9px 12px;display:flex}.inspector-home-feature-group-header strong{font-size:12px;font-weight:700}.inspector-home-feature-group-header>span{background-color:#fff;border-radius:999px;justify-content:center;align-items:center;min-width:22px;min-height:20px;padding:2px 6px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#087653;background-color:#e5f7f1;border-color:#b9e3d6}.inspector-home-feature-list{background-color:#fff;flex-direction:column;margin:0;display:flex}.inspector-home-feature{color:#010507;background-color:#fff;grid-template-columns:minmax(0,1fr) auto 14px;align-items:center;gap:8px;min-width:0;min-height:43px;padding:10px 12px;font-size:12px;font-weight:600;text-decoration:none;display:grid}.inspector-home-feature+.inspector-home-feature{border-top:1px solid #ececf1}.inspector-home-feature-group-empty{color:#68686e;margin:0;padding:15px 12px;font-size:11px}.inspector-home-feature:hover{background-color:#f7f7f9}.inspector-home-feature-arrow svg{width:12px;height:12px}.inspector-home-feature small{color:#087653;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700}.inspector-home-feature[data-state=off],.inspector-home-feature[data-state=off] small,.inspector-home-feature-arrow{color:#68686e}.inspector-home-features-empty{color:#57575b;border-top:1px solid #deddea;border-bottom:1px solid #deddea;margin:14px 0 0;padding:16px 0;font-size:12px}.inspector-home-news{gap:12px;display:grid}.inspector-whats-new-preview{color:#010507;background-color:#f7f4fe;border:1px solid #c8c6e6;border-radius:5px;align-items:stretch;width:100%;min-height:64px;display:flex;position:relative;overflow:hidden;container-type:inline-size}.inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background-color:#f1ebfc;border-color:#8f91d7}.inspector-whats-new-preview-body{min-width:0;color:inherit;text-align:left;cursor:pointer;background-color:#0000;border:0;flex:auto;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 14px;display:grid}.inspector-whats-new-preview-copy{flex-direction:column;gap:3px;min-width:0;display:flex}.inspector-whats-new-preview-title{align-items:center;gap:8px;min-width:0;display:flex}.inspector-whats-new-preview-copy strong{text-overflow:ellipsis;white-space:nowrap;font-family:Plus Jakarta Sans,system-ui,sans-serif;font-size:13px;line-height:1.25;overflow:hidden}.inspector-whats-new-preview-copy>span:last-child{color:#4e4c63;text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:1.4;overflow:hidden}.inspector-whats-new-preview-action{color:#3f176f;white-space:nowrap;flex:none;align-items:center;gap:6px;font-size:11px;font-weight:700;display:inline-flex}.inspector-whats-new-preview-action svg{width:15px;height:15px}@container (max-width:640px){.inspector-whats-new-preview-body{grid-template-columns:minmax(0,1fr)}.inspector-whats-new-preview-action{display:none}}.inspector-whats-new-preview-dismiss{color:#68686e;cursor:pointer;background-color:#0000;border:0;border-radius:5px;justify-content:center;align-items:center;width:28px;height:28px;display:inline-flex;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.inspector-whats-new-preview-dismiss:hover{color:#3f176f;background-color:#6430ab1a}.inspector-whats-new-preview-dismiss svg{width:14px;height:14px}@media (max-width:720px){.inspector-account-cta{width:32px;padding-inline:0}.inspector-account-cta-label{display:none}.inspector-home{padding:24px 22px 34px}.inspector-intelligence-hud-header{flex-wrap:wrap}.inspector-intelligence-hud-details{grid-template-columns:1fr}.inspector-intelligence-hud-plan{grid-template-columns:repeat(2,minmax(0,1fr))}.inspector-whats-new-preview-action{display:none}}@media (max-width:600px){.inspector-system-health{grid-template-columns:1fr}}@media (max-width:480px){.inspector-system-health-section .inspector-system-health-header{align-items:flex-start}.inspector-intelligence-hud-header{flex-direction:column;align-items:stretch}.inspector-intelligence-hud-header-actions{justify-content:space-between}.inspector-intelligence-hud-header-actions .inspector-intelligence-hud-action,.inspector-intelligence-hud-plan{width:100%}.inspector-intelligence-hud-plan{grid-template-columns:1fr;align-items:stretch}.inspector-intelligence-hud-plan-action{justify-self:start}.inspector-whats-new-header{align-items:center;gap:16px;width:calc(100% - 24px);padding:24px 22px}.inspector-whats-new-document,.inspector-whats-new-empty{padding:20px 22px 36px}.inspector-whats-new-document .announcement-content h1+p{font-size:16px}}.inspector-whats-new-header{background:#f8f7ff;border:1px solid #d8d8e8;border-radius:5px;justify-content:space-between;align-items:center;gap:24px;width:calc(100% - 44px);max-width:calc(70ch - 44px);padding:30px 32px 28px;display:flex;box-shadow:0 12px 28px #26224e0f}.inspector-whats-new-header .inspector-home-title{letter-spacing:-.035em;margin:0;font-size:clamp(27px,3.6vw,36px)}.inspector-whats-new-updated{color:#6c687c;letter-spacing:.01em;white-space:nowrap;flex:none;margin:0;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:11px;font-weight:600}.inspector-whats-new .inspector-home-news{max-width:70ch;margin-top:0}.inspector-whats-new-document,.inspector-whats-new-empty{max-width:70ch;padding:22px 32px 52px}.inspector-whats-new-document .announcement-content{color:#2b2b39;font-size:15px;line-height:1.72}.inspector-whats-new-document .announcement-content h1{color:#15131d;letter-spacing:-.032em;max-width:24ch;margin:0 0 16px;font-size:clamp(26px,3.2vw,34px);line-height:1.1}.inspector-whats-new-document .announcement-content h1+p{color:#504d61;max-width:58ch;margin-top:0;font-size:18px;line-height:1.58}.inspector-whats-new-document .announcement-content>hr:first-child{display:none}.inspector-whats-new-document .announcement-content h2:first-of-type{border-top:0;margin-top:14px;padding-top:0}.inspector-whats-new-document .announcement-content h2{color:#1b1924;letter-spacing:-.024em;border-top:1px solid #dfdeea;margin:44px 0 14px;padding-top:24px;font-size:21px;line-height:1.2}.inspector-whats-new-document .announcement-content p{max-width:70ch;margin:.85rem 0}.inspector-whats-new-document .announcement-content ul,.inspector-whats-new-document .announcement-content ol{max-width:68ch;margin:1.25rem 0 1.5rem;padding-left:1.4rem}.inspector-whats-new-document .announcement-content li+li{margin-top:.7rem}.inspector-whats-new-document .announcement-content a{color:#4e46a5;text-underline-offset:4px;font-weight:600;text-decoration-color:#4e46a56b;text-decoration-thickness:1px;transition:color .16s,text-decoration-color .16s}.inspector-whats-new-document .announcement-content a:hover{color:#312879;text-decoration-color:currentColor}.inspector-whats-new-empty{color:#5e5b70}.inspector-whats-new-empty .inspector-home-card-title{color:#1b1924;margin:0}.inspector-whats-new-empty .inspector-home-card-copy{max-width:48ch;margin:8px 0 0}.inspector-home-story-featured{padding:22px}.inspector-home-story-link{color:inherit;cursor:pointer;text-decoration:none;display:block}.inspector-home-story-link:hover{background-color:#fff;border-color:#8f91d7}.inspector-home-story[data-unread=true]{border-color:#bec2ff;padding-right:64px;box-shadow:0 0 0 1px #6430ab}.inspector-home-story-unread{color:#fff;letter-spacing:.04em;text-transform:uppercase;background-color:#6430ab;border-radius:999px;align-items:center;min-height:18px;padding:0 7px;font-family:Spline Sans Mono,ui-monospace,monospace;font-size:10px;font-weight:700;display:inline-flex}.inspector-nav-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;transition:opacity .18s,width .22s;overflow:hidden}.inspector-nav-control{color:#57575b;min-height:32px;font:inherit;text-align:left;outline-offset:-2px;cursor:pointer;background-color:#0000;border:1px solid #0000;border-radius:5px;outline:2px solid #0000;flex:none;justify-content:flex-start;align-items:center;gap:6px;padding:6px 9px;font-size:12px;font-weight:600;line-height:1.25;display:flex}.inspector-nav-control:hover{color:#010507;background-color:#f0f0f4}.inspector-nav-control-active{color:#3f176f;background-color:#eee6fe;border-color:#bec2ff}.inspector-nav-icon{flex:none;align-items:center;display:inline-flex}.inspector-nav-icon svg{width:15px;height:15px}.inspector-nav-control:focus-visible,.inspector-account-control:focus-visible,[data-inspector-thread-cta]:focus-visible,[data-inspector-sidebar-intelligence-action]:focus-visible,[data-inspector-whats-new-preview]:focus-visible,[data-inspector-whats-new-dismiss]:focus-visible,[data-inspector-home-intelligence-action]:focus-visible,.inspector-home-feature:focus-visible,[data-inspector-action-placement=threads-footer]:focus-visible{outline-offset:2px;outline:2px solid #6430ab!important}.inspector-sidebar .inspector-nav-control:focus-visible,.inspector-sidebar .inspector-sidebar-label:focus-visible,.inspector-sidebar [data-inspector-thread-cta]:focus-visible{outline-offset:-2px!important}.inspector-account-control{color:#57575b;font:inherit;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #0000;outline:2px solid #0000;justify-content:center;align-items:center;padding:0;display:inline-flex}.inspector-account-control:hover,.inspector-account-control-active{color:#3f176f;background-color:#6430ab17}:host ::selection{color:#010507;background-color:#cfd2ff}:host *{scrollbar-color:#aaa9c1 transparent;scrollbar-width:thin}:host ::-webkit-scrollbar{width:8px;height:8px}:host ::-webkit-scrollbar-thumb{background:#aaa9c1 padding-box padding-box;border:2px solid #0000;border-radius:999px}.inspector-account-control-icon{flex:none;justify-content:center;align-items:center;display:inline-flex}.inspector-account-control-icon svg{width:15px;height:15px}[data-inspector-thread-cta],[data-inspector-account-strip] button,[data-inspector-account-strip] a{cursor:pointer}@media (prefers-reduced-motion:reduce){.inspector-sidebar,.inspector-nav-label{transition:none}}[data-inspector-threads-setup-prompt],[data-inspector-threads-setup-link]{min-height:34px;font:inherit;outline-offset:2px;cursor:pointer;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-threads-setup-prompt]{color:#fff;background-color:#010507;border-color:#010507}[data-inspector-threads-setup-prompt]:hover{background-color:#2b2b2b;border-color:#2b2b2b}[data-inspector-threads-setup-link]{color:#57575b;background-color:#fff}[data-inspector-threads-setup-link]:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}[data-inspector-threads-setup-prompt]:focus-visible,[data-inspector-threads-setup-link]:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.inspector-threads-footer{color:#57575b;background-color:#f7f7f9;border-top:1px solid #dbdbe5;flex:none;gap:10px;padding:12px;font-size:11px;line-height:1.35;display:grid}.inspector-threads-usage{gap:6px;display:grid}[data-inspector-thread-count]{color:#010507;font-weight:600}[data-inspector-thread-expiry]{color:#57575b}.inspector-thread-progress{--inspector-thread-progress-color:#189370;width:100%;height:6px;accent-color:var(--inspector-thread-progress-color);border-radius:999px;overflow:hidden}.inspector-thread-progress[data-inspector-thread-capacity=warning]{--inspector-thread-progress-color:#b45309}.inspector-thread-progress[data-inspector-thread-capacity=critical]{--inspector-thread-progress-color:#be123c}.inspector-thread-progress::-webkit-progress-bar{background-color:#dbdbe5;border-radius:999px}.inspector-thread-progress::-webkit-progress-value{background-color:var(--inspector-thread-progress-color);border-radius:999px}.inspector-thread-progress::-moz-progress-bar{background-color:var(--inspector-thread-progress-color);border-radius:999px}[data-inspector-action-placement=threads-footer]{color:#57575b;outline-offset:2px;cursor:pointer;background-color:#0000;border:1px solid #d5d3e4;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;width:100%;min-height:32px;padding:6px 9px;font-size:11px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]{color:#fff;background-color:#6430ab;border-color:#6430ab}[data-inspector-action-placement=threads-footer][data-inspector-action-intent=upgrade]:hover{color:#fff;background-color:#3f176f;border-color:#3f176f}[data-inspector-action-placement=threads-footer]:hover{color:#010507;background-color:#f7f4fe;border-color:#c8c6e6}.cpk-threads-overview-video{opacity:0;transition:opacity .22s}.cpk-threads-overview{background-color:#f7f7f9;flex:1;justify-content:center;align-items:center;min-width:0;padding:32px;display:flex}.cpk-threads-overview-content{color:#57575b;width:100%;max-width:440px}.cpk-threads-overview-title{color:#010507;margin:0 0 10px;font-size:20px;font-weight:600;line-height:1.25}.cpk-threads-overview-copy{color:#57575b;margin:0 0 16px;font-size:13px;line-height:1.55}.cpk-threads-overview-actions{flex-wrap:wrap;gap:8px;display:flex}.cpk-threads-overview-action{outline-offset:2px;border:1px solid #0000;border-radius:7px;outline:2px solid #0000;justify-content:center;align-items:center;gap:6px;min-height:34px;padding:8px 12px;font-size:12px;font-weight:600;line-height:1.25;text-decoration:none;display:inline-flex}.cpk-threads-overview-action-primary{color:#fff;background-color:#010507;border-color:#010507}.cpk-threads-overview-action-primary:hover{background-color:#2b2b2b;border-color:#2b2b2b}.cpk-threads-overview-action-secondary{color:#010507;background-color:#fff;border-color:#dbdbe5}.cpk-threads-overview-action-secondary:hover{background-color:#fff;border-color:#afafb7}.cpk-threads-overview-video[data-loaded=true]{opacity:1}.cpk-threads-overview-video-control{color:#3f176f;min-height:32px;font:inherit;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:5px;outline:2px solid #0000;justify-content:center;align-items:center;margin:0 0 14px;padding:6px 10px;font-size:12px;font-weight:600;line-height:1.25;display:inline-flex}.cpk-threads-overview-video-control:hover{color:#010507;background-color:#f7f7f9;border-color:#afafb7}.cpk-threads-overview-video-control:focus-visible{outline-offset:2px;outline:2px solid #6430ab}.cpk-threads-overview-video-fallback{color:#57575b;max-width:440px;margin:-4px 0 14px;font-size:12px;line-height:1.5}.cpk-threads-tour-launch{z-index:2;color:#57575b;outline-offset:2px;cursor:pointer;background-color:#fff;border:1px solid #dbdbe5;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600;position:absolute;bottom:16px;right:16px;box-shadow:0 8px 18px #01050714}.cpk-threads-tour{z-index:3;color:#57575b;background-color:#fff;border:1px solid #dbdbe5;border-radius:10px;width:min(340px,100% - 32px);padding:14px;position:absolute;bottom:16px;right:16px;box-shadow:0 16px 36px #01050724}.cpk-threads-tour-step{color:#087653;text-transform:uppercase;margin-bottom:8px;font-family:Spline Sans Mono,monospace;font-size:10px;font-weight:600}.cpk-threads-tour-title{color:#010507;margin-bottom:6px;font-size:14px;font-weight:600;line-height:1.35}.cpk-threads-tour-copy{color:#57575b;font-size:12px;line-height:1.5}.cpk-threads-tour-actions{justify-content:space-between;gap:8px;margin-top:14px;display:flex}.cpk-threads-tour-nav{gap:8px;display:flex}.cpk-threads-tour-skip,.cpk-threads-tour-button{font:inherit;outline-offset:2px;cursor:pointer;border-radius:7px;outline:2px solid #0000;padding:7px 10px;font-size:12px;font-weight:600}.cpk-threads-overview-action:focus-visible,.cpk-threads-tour-launch:focus-visible,.cpk-threads-tour-skip:focus-visible,.cpk-threads-tour-button:focus-visible{outline-color:#6430ab}.cpk-threads-tour-skip{color:#68686e;background-color:#0000;border:0;padding-inline:0}.cpk-threads-tour-button-secondary{color:#57575b;background-color:#fff;border:1px solid #dbdbe5}.cpk-threads-tour-button-primary{color:#fff;background-color:#010507;border:1px solid #010507}.cpk-threads-tour-button:disabled{cursor:not-allowed;opacity:.45}@media (max-width:720px){.cpk-threads-overview{padding:24px}}@media (prefers-reduced-motion:reduce){.cpk-threads-overview-video{transition:none}}.inspector-window[data-color-scheme=dark]{color-scheme:dark;color:#f3f4f8!important;background-color:#111319!important;border-color:#7b7d89!important}.inspector-window[data-color-scheme=dark]>div,.inspector-window[data-color-scheme=dark] .inspector-shell,.inspector-window[data-color-scheme=dark] .inspector-main,.inspector-window[data-color-scheme=dark] #cpk-main-scroll{color:#f3f4f8!important;background-color:#111319!important}.inspector-window[data-color-scheme=dark] .drag-handle,.inspector-window[data-color-scheme=dark] .inspector-account-strip{color:#f3f4f8!important;background:#171a22!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-logo{filter:brightness(0)invert();clip-path:inset(0 20% 0 0)}.inspector-window[data-color-scheme=dark] .inspector-account-logo-accent{filter:none;display:block}.inspector-window[data-color-scheme=dark] .inspector-agent-placeholder{color:#b8bbc7!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .inspector-account-control{color:#b8bbc7!important;border:0!important}.inspector-window[data-color-scheme=dark] .inspector-account-control:hover,.inspector-window[data-color-scheme=dark] .inspector-account-control-active{color:#d8d9ff!important;background-color:#292c38!important}.inspector-window[data-color-scheme=dark] .inspector-account-cta{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-account-cta:hover{color:#fff;background-color:#353854}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu{color:#f3f4f8;background-color:#191c24;border-color:#464957;box-shadow:0 12px 28px #00000052}.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:hover,.inspector-window[data-color-scheme=dark] .inspector-window-layout-menu button:focus-visible{color:#d8d9ff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button{color:#f3f4f8!important;background-color:#20232c!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button:hover{background-color:#292c38!important;border-color:#777aae!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar .inspector-agent-selector>[data-context-dropdown-root=true]>button>span:last-child{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div{color:#f3f4f8!important;box-shadow:none!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:hover,.inspector-window[data-color-scheme=dark] [data-context-dropdown-root=true]>div button:focus{color:#f3f4f8!important;background-color:#343746!important}.inspector-window[data-color-scheme=dark] .inspector-sidebar,.inspector-window[data-color-scheme=dark] .inspector-snippet-sidebar{color:#f3f4f8;background-color:#15171e;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-label{color:#8f93a1}.inspector-window[data-color-scheme=dark] .inspector-sidebar-rail-tooltip{color:#191c24;background-color:#e9e9f1;box-shadow:0 7px 18px #00000047}.inspector-window[data-color-scheme=dark] .inspector-nav-control,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle{color:#b8bbc7}.inspector-window[data-color-scheme=dark] .inspector-nav-control:hover,.inspector-window[data-color-scheme=dark] .inspector-sidebar-toggle:hover{color:#fff;background-color:#22252f}.inspector-window[data-color-scheme=dark] .inspector-nav-control-active{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-agent-scope{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-copy>span,.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-card[data-state=disconnected] .inspector-sidebar-status-copy>span{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-sidebar-status-action:hover{color:#fff;background-color:#292b43}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup:hover{background-color:#343653;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-sidebar-intelligence-setup .inspector-sidebar-status-copy strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-sidebar-setup-arrow{background-color:#caccff1f}@media (prefers-reduced-motion:reduce){.inspector-sidebar-intelligence-setup{animation:none}}.inspector-window[data-color-scheme=dark] .inspector-home{background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .inspector-settings-header,.inspector-window[data-color-scheme=dark] .inspector-settings-privacy,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-settings-title,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading h2,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row h3,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-settings-subtitle,.inspector-window[data-color-scheme=dark] .inspector-settings-section-heading p,.inspector-window[data-color-scheme=dark] .inspector-settings-status-row p,.inspector-window[data-color-scheme=dark] .inspector-settings-private-content>p{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-settings-section-icon{color:#d8d9ff;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-settings-private-content li span{color:#75d8b9}.inspector-window[data-color-scheme=dark] .inspector-settings-status{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-settings-privacy[data-state=disabled] .inspector-settings-status{color:#f2cf8f;background-color:#342916;border-color:#866932}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-settings-policy-link:hover{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-home-card,.inspector-window[data-color-scheme=dark] .inspector-home-story,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud,.inspector-window[data-color-scheme=dark] .inspector-home-feature-list,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview{color:#f3f4f8;background:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected]{background-color:#1d1e2b;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud[data-state=disconnected] .inspector-intelligence-hud-description{color:#c5c7d0}.inspector-window[data-color-scheme=dark] .inspector-system-health,.inspector-window[data-color-scheme=dark] .inspector-system-health-section{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-section{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-section .inspector-system-health-header{background-color:#191c24;border-bottom-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-system-health-event-link>small{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=success]{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=success],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=success]{background-color:#173b32;border-color:#347d69;color:#8ce1c5!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=checking],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=checking]{background-color:#342916;border-color:#866932;color:#f2cf8f!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=error],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=error]{background-color:#3b1c22;border-color:#87424a;color:#ff9aa0!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-state[data-tone=unavailable],.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-state[data-tone=unavailable]{background-color:#242731;border-color:#464957;color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=checking]{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=offline],.inspector-window[data-color-scheme=dark] .inspector-system-health-header>span[data-tone=error]{color:#ff9aa0}.inspector-window[data-color-scheme=dark] .inspector-home-story-link:hover,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:has(.inspector-whats-new-preview-body:hover){background:#242131;border-color:#777aae}.inspector-window[data-color-scheme=dark] .inspector-home-title,.inspector-window[data-color-scheme=dark] .inspector-home-section-title,.inspector-window[data-color-scheme=dark] .inspector-home-card-title,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dd,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-value,.inspector-window[data-color-scheme=dark] .inspector-home-feature{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-home-eyebrow,.inspector-window[data-color-scheme=dark] .inspector-home-card-label,.inspector-window[data-color-scheme=dark] .inspector-home-meta,.inspector-window[data-color-scheme=dark] .inspector-home-body,.inspector-window[data-color-scheme=dark] .inspector-home-card-copy,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal dt,.inspector-window[data-color-scheme=dark] .inspector-system-health-signal small,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-heading p,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-label,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details .inspector-intelligence-hud-detail-subvalue,.inspector-window[data-color-scheme=dark] .inspector-home-section-header>span,.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-copy>span:last-child{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details{background-color:#3a3d49;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section{background-color:#15171e}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-plan-action:hover{color:#fff;background-color:#0000;border-color:#0000}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal+.inspector-system-health-signal,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details>section+section,.inspector-window[data-color-scheme=dark] .inspector-intelligence-hud-details,.inspector-window[data-color-scheme=dark] .inspector-home-features-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] dd,.inspector-window[data-color-scheme=dark] .inspector-home-feature small{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] dd{color:#f2cf8f}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=error] .inspector-system-health-event-type{color:#ff9aa0;background-color:#3b1c22}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=success] .inspector-system-health-event-type{color:#8ce1c5;background-color:#173b32}.inspector-window[data-color-scheme=dark] .inspector-system-health-signal[data-tone=active] .inspector-system-health-event-type{color:#f2cf8f;background-color:#342916}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group{background-color:#191c24;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header{color:#c9ccd6;background-color:#20232d;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-header>span{color:#c9ccd6;background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group[data-feature-state-group=active] .inspector-home-feature-group-header{color:#8ce1c5;background-color:#173b32;border-color:#347d69}.inspector-window[data-color-scheme=dark] .inspector-home-feature{background-color:#191c24}.inspector-window[data-color-scheme=dark] .inspector-home-feature:hover{background-color:#20232d}.inspector-window[data-color-scheme=dark] .inspector-home-feature+.inspector-home-feature{border-color:#2f323d}.inspector-window[data-color-scheme=dark] .inspector-home-feature-group-empty{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-home-feature[data-state=off] small,.inspector-window[data-color-scheme=dark] .inspector-home-feature-arrow{color:#9da1af}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-dismiss:hover{color:#fff;background-color:#302a40}.inspector-window[data-color-scheme=dark] .inspector-home-usage-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-thread-progress::-webkit-progress-bar{background-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-header{box-shadow:none;background-color:#1d1e2b;border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-updated,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview-action{color:#d8d9ff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-preview:hover .inspector-whats-new-preview-action{color:#fff}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document,.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty{border-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-empty .inspector-home-card-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1+p{color:#c9ccd6}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2{border-top-color:#3a3d49}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h1,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h2,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content h3,.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content strong{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .inspector-whats-new-document .announcement-content a{color:#caccff}.inspector-window[data-color-scheme=dark] .inspector-threads-footer{color:#aeb1bd;background-color:#15171e;border-color:#343742}.inspector-window[data-color-scheme=dark] [data-inspector-thread-count]{color:#f3f4f8}.inspector-window[data-color-scheme=dark] [data-inspector-thread-expiry]{color:#aeb1bd}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] [data-inspector-action-placement=threads-footer]:hover{color:#fff;background-color:#20232d;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-content,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-copy,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-fallback,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-title,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-frame{background:linear-gradient(135deg,#666a9e3d,#347d6929),#191c24;border-color:#3a3d49;box-shadow:0 8px 20px #00000038}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-video-control:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-secondary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary{color:#171823;background-color:#caccff;border-color:#caccff}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action-primary:hover,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button-primary:hover{background-color:#d8d9ff;border-color:#d8d9ff}.inspector-window[data-color-scheme=dark] .cpk-threads-tour{color:#aeb1bd;background-color:#191c24;border-color:#464957;box-shadow:0 16px 36px #00000052}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-step{color:#8ce1c5}.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-threads-overview-action:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-launch:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-skip:focus-visible,.inspector-window[data-color-scheme=dark] .cpk-threads-tour-button:focus-visible{outline-color:#bec2ff}.inspector-window[data-color-scheme=dark] .cpk-memory-locked{color:#f3f4f8;background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-sidebar{background-color:#15171e;border-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-main{background-color:#111319}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true]{background-color:#292b43}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-bar{background-color:#333641}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row[data-accent=true] .cpk-locked-preview-row-title{background-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line{background-color:#2f323d}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-row-line:last-child,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-copy+.cpk-locked-preview-copy,.inspector-window[data-color-scheme=dark] .cpk-locked-preview-footer-line+.cpk-locked-preview-footer-line{background-color:#292c36}.inspector-window[data-color-scheme=dark] .cpk-locked-preview-card{background-color:#191c24;box-shadow:inset 0 0 0 1px #2f323d}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-scrim{background:radial-gradient(circle,#111319f0 0,#111319d6 24%,#11131975 48%,#111319ad 100%)}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-content,.inspector-window[data-color-scheme=dark] .cpk-memory-locked-copy{color:#aeb1bd}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-title{color:#f3f4f8}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-icon{color:#d8d9ff;box-shadow:none;background-color:#292b43;border-color:#666a9e}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary{color:#d8d9ff;background-color:#191c24;border-color:#464957}.inspector-window[data-color-scheme=dark] .cpk-memory-locked-action-secondary:hover{color:#fff;background-color:#242731;border-color:#777aae}.inspector-window[data-color-scheme=dark] .cpk-agent-overview,.inspector-window[data-color-scheme=dark] .cpk-section-card{background-color:#191c24!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header{background-color:#242731!important;border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-section-header h4{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] .cpk-agent-icon{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] .cpk-stat-card{background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] button.cpk-stat-card:hover{background-color:#20232d!important}.inspector-window[data-color-scheme=dark] .cpk-agent-view .divide-gray-200>:not([hidden])~:not([hidden]){border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] .cpk-json-block{color:#c9ccd6}.inspector-window[data-color-scheme=dark] [class*=bg-emerald-50],.inspector-window[data-color-scheme=dark] [class*=bg-green-100]{color:#8ce1c5!important;background-color:#173b32!important}.inspector-window[data-color-scheme=dark] [class*=bg-rose-50]{color:#ff9aa0!important;background-color:#3b1c22!important}.inspector-window[data-color-scheme=dark] [data-cpk-event-error] p,.inspector-window[data-color-scheme=dark] [data-playground-error] p{color:inherit!important}.inspector-window[data-color-scheme=dark] [class*=bg-amber-50],.inspector-window[data-color-scheme=dark] [class*=bg-amber-100]{color:#f2cf8f!important;background-color:#342916!important}.inspector-window[data-color-scheme=dark] [class*=bg-blue-50],.inspector-window[data-color-scheme=dark] [class*=bg-blue-100],.inspector-window[data-color-scheme=dark] [class*=bg-sky-50],.inspector-window[data-color-scheme=dark] [class*=bg-violet-50],.inspector-window[data-color-scheme=dark] [class*=bg-purple-50],.inspector-window[data-color-scheme=dark] [class*=bg-fuchsia-50]{color:#d8d9ff!important;background-color:#292b43!important}.inspector-window[data-color-scheme=dark] [class*=bg-white]{background-color:#191c24!important}.inspector-window[data-color-scheme=dark] [class*=bg-gray-50],.inspector-window[data-color-scheme=dark] [class*=bg-slate-50],.inspector-window[data-color-scheme=dark] [class*=bg-gray-100],.inspector-window[data-color-scheme=dark] [class*=bg-slate-100]{background-color:#171a22!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-900],.inspector-window[data-color-scheme=dark] [class*=text-slate-900],.inspector-window[data-color-scheme=dark] [class*=text-gray-800],.inspector-window[data-color-scheme=dark] [class*=text-slate-800],.inspector-window[data-color-scheme=dark] [class*=text-gray-700],.inspector-window[data-color-scheme=dark] [class*=text-slate-700]{color:#f3f4f8!important}.inspector-window[data-color-scheme=dark] [class*=text-gray-600],.inspector-window[data-color-scheme=dark] [class*=text-slate-600],.inspector-window[data-color-scheme=dark] [class*=text-gray-500],.inspector-window[data-color-scheme=dark] [class*=text-slate-500],.inspector-window[data-color-scheme=dark] [class*=text-gray-400],.inspector-window[data-color-scheme=dark] [class*=text-slate-400]{color:#aeb1bd!important}.inspector-window[data-color-scheme=dark] [class*=border-gray-100],.inspector-window[data-color-scheme=dark] [class*=border-slate-100],.inspector-window[data-color-scheme=dark] [class*=border-gray-200],.inspector-window[data-color-scheme=dark] [class*=border-slate-200],.inspector-window[data-color-scheme=dark] [class*=border-gray-300],.inspector-window[data-color-scheme=dark] [class*=border-slate-300]{border-color:#3a3d49!important}.inspector-window[data-color-scheme=dark] input,.inspector-window[data-color-scheme=dark] select,.inspector-window[data-color-scheme=dark] textarea{color:#f3f4f8!important;background-color:#191c24!important;border-color:#464957!important}.inspector-window[data-color-scheme=dark] input::placeholder,.inspector-window[data-color-scheme=dark] textarea::placeholder{color:#858996}.inspector-window[data-color-scheme=dark] ::selection{color:#fff;background-color:#5b5f92}@property --tw-translate-x{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-y{syntax:\"*\";inherits:false;initial-value:0}@property --tw-translate-z{syntax:\"*\";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:\"*\";inherits:false}@property --tw-rotate-y{syntax:\"*\";inherits:false}@property --tw-rotate-z{syntax:\"*\";inherits:false}@property --tw-skew-x{syntax:\"*\";inherits:false}@property --tw-skew-y{syntax:\"*\";inherits:false}@property --tw-space-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:\"*\";inherits:false;initial-value:0}@property --tw-border-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-leading{syntax:\"*\";inherits:false}@property --tw-font-weight{syntax:\"*\";inherits:false}@property --tw-tracking{syntax:\"*\";inherits:false}@property --tw-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:\"*\";inherits:false}@property --tw-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:\"*\";inherits:false}@property --tw-inset-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:\"*\";inherits:false}@property --tw-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:\"*\";inherits:false}@property --tw-inset-ring-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:\"*\";inherits:false}@property --tw-ring-offset-width{syntax:\"<length>\";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:\"*\";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:\"*\";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:\"*\";inherits:false;initial-value:solid}@property --tw-blur{syntax:\"*\";inherits:false}@property --tw-brightness{syntax:\"*\";inherits:false}@property --tw-contrast{syntax:\"*\";inherits:false}@property --tw-grayscale{syntax:\"*\";inherits:false}@property --tw-hue-rotate{syntax:\"*\";inherits:false}@property --tw-invert{syntax:\"*\";inherits:false}@property --tw-opacity{syntax:\"*\";inherits:false}@property --tw-saturate{syntax:\"*\";inherits:false}@property --tw-sepia{syntax:\"*\";inherits:false}@property --tw-drop-shadow{syntax:\"*\";inherits:false}@property --tw-drop-shadow-color{syntax:\"*\";inherits:false}@property --tw-drop-shadow-alpha{syntax:\"<percentage>\";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:\"*\";inherits:false}@property --tw-backdrop-blur{syntax:\"*\";inherits:false}@property --tw-backdrop-brightness{syntax:\"*\";inherits:false}@property --tw-backdrop-contrast{syntax:\"*\";inherits:false}@property --tw-backdrop-grayscale{syntax:\"*\";inherits:false}@property --tw-backdrop-hue-rotate{syntax:\"*\";inherits:false}@property --tw-backdrop-invert{syntax:\"*\";inherits:false}@property --tw-backdrop-opacity{syntax:\"*\";inherits:false}@property --tw-backdrop-saturate{syntax:\"*\";inherits:false}@property --tw-backdrop-sepia{syntax:\"*\";inherits:false}@property --tw-duration{syntax:\"*\";inherits:false}@property --tw-ease{syntax:\"*\";inherits:false}@property --tw-scale-x{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-y{syntax:\"*\";inherits:false;initial-value:1}@property --tw-scale-z{syntax:\"*\";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}";
|
|
10
10
|
|
|
11
11
|
//#endregion
|
|
12
12
|
//#region src/assets/inspector-logo.svg
|
|
@@ -537,6 +537,24 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
537
537
|
...eventDetails
|
|
538
538
|
};
|
|
539
539
|
}
|
|
540
|
+
/**
|
|
541
|
+
* Whether the runtime *connection* needs attention — the single condition
|
|
542
|
+
* shared by System Health and the launcher's error signal, so the two can
|
|
543
|
+
* never disagree about whether the wiring is broken.
|
|
544
|
+
*
|
|
545
|
+
* Exactly one state counts. `disconnected` is also the initial value, so
|
|
546
|
+
* counting it would raise the signal on every page load; `connecting` is a
|
|
547
|
+
* normal startup step; `unavailable` means no Core is attached, which is not
|
|
548
|
+
* a defect of the developer's wiring.
|
|
549
|
+
*
|
|
550
|
+
* Note the deliberate asymmetry with `health.state`: a failed *run* also
|
|
551
|
+
* drives System Health to "Needs attention" while the connection is fine.
|
|
552
|
+
* That is an event rather than a state, and it is excluded from the launcher
|
|
553
|
+
* on purpose — see the launcher-signal comments in index.ts.
|
|
554
|
+
*/
|
|
555
|
+
function runtimeConnectionNeedsAttention(state) {
|
|
556
|
+
return state === "error";
|
|
557
|
+
}
|
|
540
558
|
function runtimeHealthFromInput(input) {
|
|
541
559
|
const lastEvent = runtimeEventSignal(input.lastRuntimeEvent);
|
|
542
560
|
if (input.runtimeConnectionState === "connected") return {
|
|
@@ -578,15 +596,16 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
578
596
|
},
|
|
579
597
|
lastEvent
|
|
580
598
|
};
|
|
599
|
+
const needsAttention = runtimeConnectionNeedsAttention(input.runtimeConnectionState);
|
|
581
600
|
return {
|
|
582
|
-
state:
|
|
583
|
-
label:
|
|
601
|
+
state: needsAttention ? "error" : "offline",
|
|
602
|
+
label: needsAttention ? "Runtime error" : "Offline",
|
|
584
603
|
runtime: {
|
|
585
604
|
label: "Offline",
|
|
586
605
|
tone: "error"
|
|
587
606
|
},
|
|
588
607
|
liveUpdates: {
|
|
589
|
-
label:
|
|
608
|
+
label: needsAttention ? "Error" : "Disconnected",
|
|
590
609
|
tone: "error"
|
|
591
610
|
},
|
|
592
611
|
lastEvent
|
|
@@ -695,6 +714,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
695
714
|
inspect: [
|
|
696
715
|
"agents",
|
|
697
716
|
"ag-ui-events",
|
|
717
|
+
"event-snippets",
|
|
698
718
|
"frontend-tools",
|
|
699
719
|
"capabilities",
|
|
700
720
|
"agent-context"
|
|
@@ -768,9 +788,552 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
768
788
|
return (_sort$0$id = (_sort$ = [...input.threads].sort(compareVisibleThreads)[0]) === null || _sort$ === void 0 ? void 0 : _sort$.id) !== null && _sort$0$id !== void 0 ? _sort$0$id : null;
|
|
769
789
|
}
|
|
770
790
|
|
|
791
|
+
//#endregion
|
|
792
|
+
//#region src/lib/event-snippets.ts
|
|
793
|
+
const EVENT_SNIPPETS_STORAGE_KEY = "cpk:inspector:event-snippets";
|
|
794
|
+
const SNIPPET_RECIPES = [
|
|
795
|
+
"tool-call",
|
|
796
|
+
"reasoning",
|
|
797
|
+
"text",
|
|
798
|
+
"activity",
|
|
799
|
+
"raw"
|
|
800
|
+
];
|
|
801
|
+
const ACTIVITY_STARTERS = ["a2ui-surface", "open-generative-ui"];
|
|
802
|
+
function isSnippetRecipe(value) {
|
|
803
|
+
return typeof value === "string" && SNIPPET_RECIPES.some((recipe) => recipe === value);
|
|
804
|
+
}
|
|
805
|
+
function createSnippetId() {
|
|
806
|
+
if (typeof crypto !== "undefined" && "randomUUID" in crypto) return crypto.randomUUID();
|
|
807
|
+
return `cpk-snippet-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
808
|
+
}
|
|
809
|
+
function autoSnippetName(recipe, label) {
|
|
810
|
+
const time = (/* @__PURE__ */ new Date()).toLocaleTimeString([], {
|
|
811
|
+
hour: "2-digit",
|
|
812
|
+
minute: "2-digit"
|
|
813
|
+
});
|
|
814
|
+
return `${label.trim() || recipeLabel(recipe)} - ${time}`;
|
|
815
|
+
}
|
|
816
|
+
function recipeLabel(recipe) {
|
|
817
|
+
switch (recipe) {
|
|
818
|
+
case "tool-call": return "Tool call";
|
|
819
|
+
case "reasoning": return "Reasoning";
|
|
820
|
+
case "text": return "Assistant text";
|
|
821
|
+
case "activity": return "Activity";
|
|
822
|
+
case "raw": return "Raw events";
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
const GENERATE_SANDBOXED_UI_TOOL_NAME = "generateSandboxedUi";
|
|
826
|
+
const OPEN_GENERATIVE_UI_ACTIVITY_TYPE = "open-generative-ui";
|
|
827
|
+
function recipeIconName(recipe) {
|
|
828
|
+
switch (recipe) {
|
|
829
|
+
case "tool-call": return "Hammer";
|
|
830
|
+
case "reasoning": return "Brain";
|
|
831
|
+
case "text": return "MessageSquare";
|
|
832
|
+
case "activity": return "LayoutDashboard";
|
|
833
|
+
case "raw": return "Code";
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
function recipeIconWrapClass(recipe) {
|
|
837
|
+
switch (recipe) {
|
|
838
|
+
case "tool-call": return "bg-amber-100 text-amber-700";
|
|
839
|
+
case "reasoning": return "bg-violet-100 text-violet-700";
|
|
840
|
+
case "text": return "bg-sky-100 text-sky-700";
|
|
841
|
+
case "activity": return "bg-emerald-100 text-emerald-700";
|
|
842
|
+
case "raw": return "bg-gray-200 text-gray-700";
|
|
843
|
+
}
|
|
844
|
+
}
|
|
845
|
+
function groupEventSnippets(snippets) {
|
|
846
|
+
return SNIPPET_RECIPES.flatMap((recipe) => {
|
|
847
|
+
const items = snippets.filter((snippet) => snippet.recipe === recipe);
|
|
848
|
+
if (items.length === 0) return [];
|
|
849
|
+
return [{
|
|
850
|
+
recipe,
|
|
851
|
+
label: recipeLabel(recipe),
|
|
852
|
+
snippets: items
|
|
853
|
+
}];
|
|
854
|
+
});
|
|
855
|
+
}
|
|
856
|
+
function snippetJsonIsRunnable(raw) {
|
|
857
|
+
try {
|
|
858
|
+
return parseSnippetEvents(raw).length > 0;
|
|
859
|
+
} catch (_unused) {
|
|
860
|
+
return false;
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
function expandSnippetEventsForRun(events) {
|
|
864
|
+
const next = [...events];
|
|
865
|
+
const hasOpenGenUi = next.some((event) => event.type === "ACTIVITY_SNAPSHOT" && event.activityType === OPEN_GENERATIVE_UI_ACTIVITY_TYPE);
|
|
866
|
+
const toolCallIds = [];
|
|
867
|
+
for (const event of next) if (event.type === "TOOL_CALL_START" && event.toolCallName === GENERATE_SANDBOXED_UI_TOOL_NAME && typeof event.toolCallId === "string") toolCallIds.push(event.toolCallId);
|
|
868
|
+
if (toolCallIds.length === 0) return next;
|
|
869
|
+
const argParts = /* @__PURE__ */ new Map();
|
|
870
|
+
for (const event of next) if (event.type === "TOOL_CALL_ARGS" && typeof event.toolCallId === "string" && typeof event.delta === "string") {
|
|
871
|
+
var _argParts$get;
|
|
872
|
+
const parts = (_argParts$get = argParts.get(event.toolCallId)) !== null && _argParts$get !== void 0 ? _argParts$get : [];
|
|
873
|
+
parts.push(event.delta);
|
|
874
|
+
argParts.set(event.toolCallId, parts);
|
|
875
|
+
}
|
|
876
|
+
const extras = [];
|
|
877
|
+
for (const toolCallId of toolCallIds) {
|
|
878
|
+
let addedSnapshot = false;
|
|
879
|
+
if (!hasOpenGenUi) {
|
|
880
|
+
var _argParts$get2;
|
|
881
|
+
const snapshot = activitySnapshotFromSandboxedUiArgs(toolCallId, ((_argParts$get2 = argParts.get(toolCallId)) !== null && _argParts$get2 !== void 0 ? _argParts$get2 : []).join(""));
|
|
882
|
+
if (snapshot) {
|
|
883
|
+
extras.push(snapshot);
|
|
884
|
+
addedSnapshot = true;
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
if (!hasOpenGenUi && !addedSnapshot) continue;
|
|
888
|
+
if (!next.some((event) => event.type === "TOOL_CALL_RESULT" && event.toolCallId === toolCallId)) extras.push({
|
|
889
|
+
type: "TOOL_CALL_RESULT",
|
|
890
|
+
toolCallId,
|
|
891
|
+
messageId: `${toolCallId}-result`,
|
|
892
|
+
role: "tool",
|
|
893
|
+
content: "UI generated"
|
|
894
|
+
});
|
|
895
|
+
}
|
|
896
|
+
if (extras.length === 0) return next;
|
|
897
|
+
const finishIndex = next.findIndex((event) => event.type === "RUN_FINISHED");
|
|
898
|
+
if (finishIndex === -1) return [...next, ...extras];
|
|
899
|
+
return [
|
|
900
|
+
...next.slice(0, finishIndex),
|
|
901
|
+
...extras,
|
|
902
|
+
...next.slice(finishIndex)
|
|
903
|
+
];
|
|
904
|
+
}
|
|
905
|
+
function activitySnapshotFromSandboxedUiArgs(toolCallId, rawArgs) {
|
|
906
|
+
let args;
|
|
907
|
+
try {
|
|
908
|
+
const parsed = JSON.parse(snippetArgsJson(rawArgs));
|
|
909
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return null;
|
|
910
|
+
args = parsed;
|
|
911
|
+
} catch (_unused2) {
|
|
912
|
+
return null;
|
|
913
|
+
}
|
|
914
|
+
const html = sandboxedUiHtmlChunks(args.html);
|
|
915
|
+
const css = typeof args.css === "string" ? args.css : void 0;
|
|
916
|
+
const jsFunctions = typeof args.jsFunctions === "string" ? args.jsFunctions : void 0;
|
|
917
|
+
const jsExpressions = Array.isArray(args.jsExpressions) ? args.jsExpressions.filter((item) => typeof item === "string") : void 0;
|
|
918
|
+
if (html.length === 0 && css === void 0 && jsFunctions === void 0 && (jsExpressions === void 0 || jsExpressions.length === 0)) return null;
|
|
919
|
+
return {
|
|
920
|
+
type: "ACTIVITY_SNAPSHOT",
|
|
921
|
+
messageId: `${toolCallId}-activity`,
|
|
922
|
+
activityType: OPEN_GENERATIVE_UI_ACTIVITY_TYPE,
|
|
923
|
+
content: {
|
|
924
|
+
initialHeight: typeof args.initialHeight === "number" ? args.initialHeight : void 0,
|
|
925
|
+
generating: false,
|
|
926
|
+
css,
|
|
927
|
+
cssComplete: true,
|
|
928
|
+
html,
|
|
929
|
+
htmlComplete: true,
|
|
930
|
+
jsFunctions,
|
|
931
|
+
jsFunctionsComplete: true,
|
|
932
|
+
jsExpressions,
|
|
933
|
+
jsExpressionsComplete: true
|
|
934
|
+
},
|
|
935
|
+
replace: true
|
|
936
|
+
};
|
|
937
|
+
}
|
|
938
|
+
function sandboxedUiHtmlChunks(html) {
|
|
939
|
+
if (typeof html === "string" && html.length > 0) return [html];
|
|
940
|
+
if (Array.isArray(html)) return html.filter((item) => typeof item === "string");
|
|
941
|
+
return [];
|
|
942
|
+
}
|
|
943
|
+
function snippetContainsToolCall(events) {
|
|
944
|
+
return events.some((event) => typeof event.type === "string" && event.type.startsWith("TOOL_CALL"));
|
|
945
|
+
}
|
|
946
|
+
function ensureRunEnvelope(events, ids) {
|
|
947
|
+
const next = [...events];
|
|
948
|
+
const hasStart = next.some((event) => event.type === "RUN_STARTED");
|
|
949
|
+
const hasFinish = next.some((event) => event.type === "RUN_FINISHED");
|
|
950
|
+
if (!hasStart) next.unshift({
|
|
951
|
+
type: "RUN_STARTED",
|
|
952
|
+
threadId: ids.threadId,
|
|
953
|
+
runId: ids.runId
|
|
954
|
+
});
|
|
955
|
+
if (!hasFinish) next.push({
|
|
956
|
+
type: "RUN_FINISHED",
|
|
957
|
+
threadId: ids.threadId,
|
|
958
|
+
runId: ids.runId
|
|
959
|
+
});
|
|
960
|
+
return next;
|
|
961
|
+
}
|
|
962
|
+
function snippetArgsJson(value) {
|
|
963
|
+
if (value && typeof value === "object") return JSON.stringify(value);
|
|
964
|
+
if (typeof value !== "string") return "{}";
|
|
965
|
+
const trimmed = value.trim() || "{}";
|
|
966
|
+
try {
|
|
967
|
+
return JSON.stringify(JSON.parse(trimmed));
|
|
968
|
+
} catch (_unused3) {
|
|
969
|
+
const recovered = firstJsonValue(trimmed);
|
|
970
|
+
if (recovered !== void 0) return JSON.stringify(recovered);
|
|
971
|
+
throw new Error("Tool args JSON is invalid.");
|
|
972
|
+
}
|
|
973
|
+
}
|
|
974
|
+
function firstJsonValue(raw) {
|
|
975
|
+
const start = raw.indexOf("{");
|
|
976
|
+
if (start === -1) return;
|
|
977
|
+
let depth = 0;
|
|
978
|
+
let inString = false;
|
|
979
|
+
let escaped = false;
|
|
980
|
+
for (let index = start; index < raw.length; index += 1) {
|
|
981
|
+
const char = raw[index];
|
|
982
|
+
if (inString) {
|
|
983
|
+
if (escaped) escaped = false;
|
|
984
|
+
else if (char === "\\") escaped = true;
|
|
985
|
+
else if (char === "\"") inString = false;
|
|
986
|
+
continue;
|
|
987
|
+
}
|
|
988
|
+
if (char === "\"") inString = true;
|
|
989
|
+
else if (char === "{") depth += 1;
|
|
990
|
+
else if (char === "}") {
|
|
991
|
+
depth -= 1;
|
|
992
|
+
if (depth === 0) try {
|
|
993
|
+
return JSON.parse(raw.slice(start, index + 1));
|
|
994
|
+
} catch (_unused4) {
|
|
995
|
+
return;
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
function compileToolCallRecipe(input) {
|
|
1001
|
+
var _input$parentMessageI, _input$toolCallId;
|
|
1002
|
+
const toolName = input.toolName.trim();
|
|
1003
|
+
if (!toolName) throw new Error("Tool name is required.");
|
|
1004
|
+
const argsJson = snippetArgsJson(input.argsJson);
|
|
1005
|
+
parseObjectJson(argsJson, "Tool args");
|
|
1006
|
+
const parentMessageId = (_input$parentMessageI = input.parentMessageId) !== null && _input$parentMessageI !== void 0 ? _input$parentMessageI : createSnippetId();
|
|
1007
|
+
const toolCallId = (_input$toolCallId = input.toolCallId) !== null && _input$toolCallId !== void 0 ? _input$toolCallId : createSnippetId();
|
|
1008
|
+
return ensureRunEnvelope([
|
|
1009
|
+
{
|
|
1010
|
+
type: "TOOL_CALL_START",
|
|
1011
|
+
toolCallId,
|
|
1012
|
+
toolCallName: toolName,
|
|
1013
|
+
parentMessageId
|
|
1014
|
+
},
|
|
1015
|
+
{
|
|
1016
|
+
type: "TOOL_CALL_ARGS",
|
|
1017
|
+
toolCallId,
|
|
1018
|
+
delta: argsJson
|
|
1019
|
+
},
|
|
1020
|
+
{
|
|
1021
|
+
type: "TOOL_CALL_END",
|
|
1022
|
+
toolCallId
|
|
1023
|
+
}
|
|
1024
|
+
], input);
|
|
1025
|
+
}
|
|
1026
|
+
function compileReasoningRecipe(input) {
|
|
1027
|
+
const text = input.text.trim();
|
|
1028
|
+
if (!text) throw new Error("Reasoning text is required.");
|
|
1029
|
+
const messageId = createSnippetId();
|
|
1030
|
+
return ensureRunEnvelope([
|
|
1031
|
+
{
|
|
1032
|
+
type: "REASONING_START",
|
|
1033
|
+
messageId
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
type: "REASONING_MESSAGE_START",
|
|
1037
|
+
messageId,
|
|
1038
|
+
role: "reasoning"
|
|
1039
|
+
},
|
|
1040
|
+
{
|
|
1041
|
+
type: "REASONING_MESSAGE_CONTENT",
|
|
1042
|
+
messageId,
|
|
1043
|
+
delta: text
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
type: "REASONING_MESSAGE_END",
|
|
1047
|
+
messageId
|
|
1048
|
+
},
|
|
1049
|
+
{
|
|
1050
|
+
type: "REASONING_END",
|
|
1051
|
+
messageId
|
|
1052
|
+
}
|
|
1053
|
+
], input);
|
|
1054
|
+
}
|
|
1055
|
+
function compileTextRecipe(input) {
|
|
1056
|
+
var _input$messageId;
|
|
1057
|
+
const text = input.text.trim();
|
|
1058
|
+
if (!text) throw new Error("Assistant text is required.");
|
|
1059
|
+
const messageId = (_input$messageId = input.messageId) !== null && _input$messageId !== void 0 ? _input$messageId : createSnippetId();
|
|
1060
|
+
return ensureRunEnvelope([
|
|
1061
|
+
{
|
|
1062
|
+
type: "TEXT_MESSAGE_START",
|
|
1063
|
+
messageId,
|
|
1064
|
+
role: "assistant"
|
|
1065
|
+
},
|
|
1066
|
+
{
|
|
1067
|
+
type: "TEXT_MESSAGE_CONTENT",
|
|
1068
|
+
messageId,
|
|
1069
|
+
delta: text
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
type: "TEXT_MESSAGE_END",
|
|
1073
|
+
messageId
|
|
1074
|
+
}
|
|
1075
|
+
], input);
|
|
1076
|
+
}
|
|
1077
|
+
function compileActivityRecipe(input) {
|
|
1078
|
+
var _input$messageId2;
|
|
1079
|
+
const activityType = input.activityType.trim();
|
|
1080
|
+
if (!activityType) throw new Error("Activity type is required.");
|
|
1081
|
+
const content = parseObjectJson(input.contentJson, "Activity content");
|
|
1082
|
+
return ensureRunEnvelope([{
|
|
1083
|
+
type: "ACTIVITY_SNAPSHOT",
|
|
1084
|
+
messageId: (_input$messageId2 = input.messageId) !== null && _input$messageId2 !== void 0 ? _input$messageId2 : createSnippetId(),
|
|
1085
|
+
activityType,
|
|
1086
|
+
content,
|
|
1087
|
+
replace: true
|
|
1088
|
+
}], input);
|
|
1089
|
+
}
|
|
1090
|
+
function emptyRecipeDraft() {
|
|
1091
|
+
return {
|
|
1092
|
+
toolName: "",
|
|
1093
|
+
toolArgs: "{}",
|
|
1094
|
+
reasoningText: "",
|
|
1095
|
+
textContent: "",
|
|
1096
|
+
activityType: "a2ui-surface",
|
|
1097
|
+
activityContent: "{}"
|
|
1098
|
+
};
|
|
1099
|
+
}
|
|
1100
|
+
function compileChatSnippet(input) {
|
|
1101
|
+
switch (input.kind) {
|
|
1102
|
+
case "text": return {
|
|
1103
|
+
recipe: "text",
|
|
1104
|
+
events: compileTextRecipe({
|
|
1105
|
+
text: input.content,
|
|
1106
|
+
threadId: input.threadId,
|
|
1107
|
+
runId: input.runId,
|
|
1108
|
+
messageId: input.messageId
|
|
1109
|
+
}),
|
|
1110
|
+
name: autoSnippetName("text", snippetLabelFromText(input.content))
|
|
1111
|
+
};
|
|
1112
|
+
case "reasoning": return {
|
|
1113
|
+
recipe: "reasoning",
|
|
1114
|
+
events: compileReasoningRecipe({
|
|
1115
|
+
text: input.content,
|
|
1116
|
+
threadId: input.threadId,
|
|
1117
|
+
runId: input.runId
|
|
1118
|
+
}),
|
|
1119
|
+
name: autoSnippetName("reasoning", snippetLabelFromText(input.content))
|
|
1120
|
+
};
|
|
1121
|
+
case "tool-call": return {
|
|
1122
|
+
recipe: "tool-call",
|
|
1123
|
+
events: compileToolCallRecipe({
|
|
1124
|
+
toolName: input.toolName,
|
|
1125
|
+
argsJson: snippetArgsJson(input.argsJson),
|
|
1126
|
+
threadId: input.threadId,
|
|
1127
|
+
runId: input.runId,
|
|
1128
|
+
parentMessageId: input.messageId,
|
|
1129
|
+
toolCallId: input.toolCallId
|
|
1130
|
+
}),
|
|
1131
|
+
name: autoSnippetName("tool-call", input.toolName)
|
|
1132
|
+
};
|
|
1133
|
+
case "activity":
|
|
1134
|
+
var _input$content;
|
|
1135
|
+
return {
|
|
1136
|
+
recipe: "activity",
|
|
1137
|
+
events: compileActivityRecipe({
|
|
1138
|
+
activityType: input.activityType,
|
|
1139
|
+
contentJson: JSON.stringify((_input$content = input.content) !== null && _input$content !== void 0 ? _input$content : {}),
|
|
1140
|
+
threadId: input.threadId,
|
|
1141
|
+
runId: input.runId,
|
|
1142
|
+
messageId: input.messageId
|
|
1143
|
+
}),
|
|
1144
|
+
name: autoSnippetName("activity", input.activityType)
|
|
1145
|
+
};
|
|
1146
|
+
}
|
|
1147
|
+
}
|
|
1148
|
+
function editorStateFromSnippet(snippet) {
|
|
1149
|
+
return {
|
|
1150
|
+
recipe: snippet.recipe,
|
|
1151
|
+
name: snippet.name,
|
|
1152
|
+
json: JSON.stringify(snippet.events, null, 2),
|
|
1153
|
+
draft: recipeDraftFromEvents(snippet.events)
|
|
1154
|
+
};
|
|
1155
|
+
}
|
|
1156
|
+
function recipeDraftFromEvents(events) {
|
|
1157
|
+
const draft = emptyRecipeDraft();
|
|
1158
|
+
const textParts = [];
|
|
1159
|
+
const reasoningParts = [];
|
|
1160
|
+
const argParts = [];
|
|
1161
|
+
for (const event of events) {
|
|
1162
|
+
if (event.type === "TEXT_MESSAGE_CONTENT") {
|
|
1163
|
+
const delta = readEventString(event, "delta");
|
|
1164
|
+
if (delta) textParts.push(delta);
|
|
1165
|
+
}
|
|
1166
|
+
if (event.type === "REASONING_MESSAGE_CONTENT") {
|
|
1167
|
+
const delta = readEventString(event, "delta");
|
|
1168
|
+
if (delta) reasoningParts.push(delta);
|
|
1169
|
+
}
|
|
1170
|
+
if (event.type === "TOOL_CALL_START") {
|
|
1171
|
+
const toolName = readEventString(event, "toolCallName");
|
|
1172
|
+
if (toolName) draft.toolName = toolName;
|
|
1173
|
+
}
|
|
1174
|
+
if (event.type === "TOOL_CALL_ARGS") {
|
|
1175
|
+
const delta = readEventString(event, "delta");
|
|
1176
|
+
if (delta) argParts.push(delta);
|
|
1177
|
+
}
|
|
1178
|
+
if (event.type === "ACTIVITY_SNAPSHOT") {
|
|
1179
|
+
var _event$content;
|
|
1180
|
+
const activityType = readEventString(event, "activityType");
|
|
1181
|
+
if (activityType) draft.activityType = activityType;
|
|
1182
|
+
draft.activityContent = prettyJson((_event$content = event.content) !== null && _event$content !== void 0 ? _event$content : {});
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
draft.textContent = textParts.join("");
|
|
1186
|
+
draft.reasoningText = reasoningParts.join("");
|
|
1187
|
+
if (argParts.length > 0) draft.toolArgs = prettyJson(argParts.join(""));
|
|
1188
|
+
return draft;
|
|
1189
|
+
}
|
|
1190
|
+
function compileFromActivityMessage(input) {
|
|
1191
|
+
return compileChatSnippet({
|
|
1192
|
+
kind: "activity",
|
|
1193
|
+
messageId: input.message.id,
|
|
1194
|
+
activityType: input.message.activityType,
|
|
1195
|
+
content: input.message.content,
|
|
1196
|
+
threadId: input.threadId,
|
|
1197
|
+
runId: input.runId
|
|
1198
|
+
});
|
|
1199
|
+
}
|
|
1200
|
+
function parseSnippetEvents(raw) {
|
|
1201
|
+
let parsed;
|
|
1202
|
+
try {
|
|
1203
|
+
parsed = JSON.parse(raw);
|
|
1204
|
+
} catch (_unused5) {
|
|
1205
|
+
throw new Error("Snippet JSON is invalid.");
|
|
1206
|
+
}
|
|
1207
|
+
if (!Array.isArray(parsed)) throw new Error("Snippet JSON must be an array of events.");
|
|
1208
|
+
const events = [];
|
|
1209
|
+
for (const item of parsed) {
|
|
1210
|
+
if (!item || typeof item !== "object" || Array.isArray(item)) throw new Error("Each event must be an object with a string type.");
|
|
1211
|
+
const record = item;
|
|
1212
|
+
if (typeof record.type !== "string" || record.type.length === 0) throw new Error("Each event must have a string type.");
|
|
1213
|
+
events.push(item);
|
|
1214
|
+
}
|
|
1215
|
+
return events;
|
|
1216
|
+
}
|
|
1217
|
+
function loadEventSnippets(storage = defaultStorage()) {
|
|
1218
|
+
if (!storage) return [];
|
|
1219
|
+
try {
|
|
1220
|
+
const raw = storage.getItem(EVENT_SNIPPETS_STORAGE_KEY);
|
|
1221
|
+
if (!raw) return [];
|
|
1222
|
+
const parsed = JSON.parse(raw);
|
|
1223
|
+
if (!Array.isArray(parsed)) return [];
|
|
1224
|
+
return parsed.flatMap((item) => {
|
|
1225
|
+
const snippet = parseStoredSnippet(item);
|
|
1226
|
+
return snippet ? [snippet] : [];
|
|
1227
|
+
});
|
|
1228
|
+
} catch (_unused6) {
|
|
1229
|
+
return [];
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
function saveEventSnippets(snippets, storage = defaultStorage()) {
|
|
1233
|
+
if (!storage) throw new Error("Snippet storage is not available.");
|
|
1234
|
+
storage.setItem(EVENT_SNIPPETS_STORAGE_KEY, JSON.stringify(snippets));
|
|
1235
|
+
}
|
|
1236
|
+
function upsertEventSnippet(snippet, storage = defaultStorage()) {
|
|
1237
|
+
const current = loadEventSnippets(storage);
|
|
1238
|
+
const index = current.findIndex((item) => item.id === snippet.id);
|
|
1239
|
+
const next = index === -1 ? [...current, snippet] : current.map((item, itemIndex) => itemIndex === index ? snippet : item);
|
|
1240
|
+
saveEventSnippets(next, storage);
|
|
1241
|
+
return next;
|
|
1242
|
+
}
|
|
1243
|
+
function deleteEventSnippet(id, storage = defaultStorage()) {
|
|
1244
|
+
const next = loadEventSnippets(storage).filter((item) => item.id !== id);
|
|
1245
|
+
saveEventSnippets(next, storage);
|
|
1246
|
+
return next;
|
|
1247
|
+
}
|
|
1248
|
+
function exportEventSnippetsJson(snippets) {
|
|
1249
|
+
return JSON.stringify(snippets, null, 2);
|
|
1250
|
+
}
|
|
1251
|
+
function importEventSnippets(raw, storage = defaultStorage()) {
|
|
1252
|
+
let parsed;
|
|
1253
|
+
try {
|
|
1254
|
+
parsed = JSON.parse(raw);
|
|
1255
|
+
} catch (_unused7) {
|
|
1256
|
+
throw new Error("Import JSON is invalid.");
|
|
1257
|
+
}
|
|
1258
|
+
const incoming = Array.isArray(parsed) ? parsed : [parsed];
|
|
1259
|
+
const imported = [];
|
|
1260
|
+
for (const item of incoming) {
|
|
1261
|
+
const snippet = parseStoredSnippet(item);
|
|
1262
|
+
if (!snippet) throw new Error("Import JSON is not a valid snippet list.");
|
|
1263
|
+
imported.push({
|
|
1264
|
+
...snippet,
|
|
1265
|
+
id: createSnippetId(),
|
|
1266
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
1267
|
+
updatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
1268
|
+
});
|
|
1269
|
+
}
|
|
1270
|
+
if (imported.length === 0) throw new Error("Import JSON is not a valid snippet list.");
|
|
1271
|
+
const next = [...loadEventSnippets(storage), ...imported];
|
|
1272
|
+
saveEventSnippets(next, storage);
|
|
1273
|
+
return next;
|
|
1274
|
+
}
|
|
1275
|
+
function snippetLabelFromText(text) {
|
|
1276
|
+
const compact = text.trim().replace(/\s+/g, " ");
|
|
1277
|
+
if (compact.length <= 40) return compact;
|
|
1278
|
+
return `${compact.slice(0, 37)}...`;
|
|
1279
|
+
}
|
|
1280
|
+
function parseObjectJson(raw, label) {
|
|
1281
|
+
try {
|
|
1282
|
+
return JSON.parse(raw);
|
|
1283
|
+
} catch (_unused8) {
|
|
1284
|
+
throw new Error(`${label} JSON is invalid.`);
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
function readEventString(event, key) {
|
|
1288
|
+
const value = event[key];
|
|
1289
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
1290
|
+
}
|
|
1291
|
+
function prettyJson(value) {
|
|
1292
|
+
if (typeof value === "string") try {
|
|
1293
|
+
return JSON.stringify(JSON.parse(value), null, 2);
|
|
1294
|
+
} catch (_unused9) {
|
|
1295
|
+
return value;
|
|
1296
|
+
}
|
|
1297
|
+
try {
|
|
1298
|
+
return JSON.stringify(value !== null && value !== void 0 ? value : {}, null, 2);
|
|
1299
|
+
} catch (_unused10) {
|
|
1300
|
+
return "{}";
|
|
1301
|
+
}
|
|
1302
|
+
}
|
|
1303
|
+
function parseStoredSnippet(value) {
|
|
1304
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return null;
|
|
1305
|
+
const record = value;
|
|
1306
|
+
if (typeof record.id !== "string" || record.id.length === 0) return null;
|
|
1307
|
+
if (typeof record.name !== "string") return null;
|
|
1308
|
+
if (!isSnippetRecipe(record.recipe)) return null;
|
|
1309
|
+
if (!Array.isArray(record.events)) return null;
|
|
1310
|
+
const events = [];
|
|
1311
|
+
for (const event of record.events) {
|
|
1312
|
+
if (!event || typeof event !== "object" || Array.isArray(event)) return null;
|
|
1313
|
+
if (typeof event.type !== "string") return null;
|
|
1314
|
+
events.push(event);
|
|
1315
|
+
}
|
|
1316
|
+
return {
|
|
1317
|
+
id: record.id,
|
|
1318
|
+
name: record.name,
|
|
1319
|
+
recipe: record.recipe,
|
|
1320
|
+
events,
|
|
1321
|
+
createdAt: typeof record.createdAt === "string" ? record.createdAt : (/* @__PURE__ */ new Date()).toISOString(),
|
|
1322
|
+
updatedAt: typeof record.updatedAt === "string" ? record.updatedAt : (/* @__PURE__ */ new Date()).toISOString()
|
|
1323
|
+
};
|
|
1324
|
+
}
|
|
1325
|
+
function defaultStorage() {
|
|
1326
|
+
if (typeof window === "undefined") return null;
|
|
1327
|
+
try {
|
|
1328
|
+
return window.localStorage;
|
|
1329
|
+
} catch (_unused11) {
|
|
1330
|
+
return null;
|
|
1331
|
+
}
|
|
1332
|
+
}
|
|
1333
|
+
|
|
771
1334
|
//#endregion
|
|
772
1335
|
//#region package.json
|
|
773
|
-
var version = "1.69.
|
|
1336
|
+
var version = "1.69.1";
|
|
774
1337
|
|
|
775
1338
|
//#endregion
|
|
776
1339
|
//#region src/lib/telemetry.ts
|
|
@@ -778,6 +1341,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
778
1341
|
opened: "oss.inspector.opened",
|
|
779
1342
|
whatsNewViewed: "oss.inspector.whats_new_viewed",
|
|
780
1343
|
whatsNewSignalViewed: "oss.inspector.whats_new_signal_viewed",
|
|
1344
|
+
errorSignalViewed: "oss.inspector.error_signal_viewed",
|
|
781
1345
|
whatsNewClicked: "oss.inspector.whats_new_clicked",
|
|
782
1346
|
threadsTabClicked: "oss.inspector.threads_tab_clicked",
|
|
783
1347
|
threadsLockedViewed: "oss.inspector.threads_locked_viewed",
|
|
@@ -797,7 +1361,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
797
1361
|
homeViewed: "oss.inspector.home_viewed",
|
|
798
1362
|
homeCtaClicked: "oss.inspector.home_cta_clicked",
|
|
799
1363
|
metadataModuleViewed: "oss.inspector.metadata_module_viewed",
|
|
800
|
-
metadataActionClicked: "oss.inspector.metadata_action_clicked"
|
|
1364
|
+
metadataActionClicked: "oss.inspector.metadata_action_clicked",
|
|
1365
|
+
eventSnippetsRun: "oss.inspector.event_snippets_run",
|
|
1366
|
+
eventSnippetsSaved: "oss.inspector.event_snippets_saved"
|
|
801
1367
|
};
|
|
802
1368
|
const TELEMETRY_INGEST_URL = "https://telemetry.copilotkit.ai/ingest";
|
|
803
1369
|
const TELEMETRY_DOCS_URL = "https://docs.copilotkit.ai/telemetry";
|
|
@@ -860,6 +1426,31 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
860
1426
|
track(TELEMETRY_EVENTS.whatsNewSignalViewed, props);
|
|
861
1427
|
}
|
|
862
1428
|
/**
|
|
1429
|
+
* Fires when the launcher's error signal becomes *visible* — not when it arms.
|
|
1430
|
+
* Arming can happen with the panel open or the tab hidden, where there is no
|
|
1431
|
+
* launcher to look at, so counting arms would inflate the denominator this
|
|
1432
|
+
* event exists to provide.
|
|
1433
|
+
*
|
|
1434
|
+
* Deliberately carries three fixed enum values and nothing else. This is the
|
|
1435
|
+
* one place a later change could casually attach a free-text field, and the
|
|
1436
|
+
* failure message must never be transmitted.
|
|
1437
|
+
*
|
|
1438
|
+
* `label` is deliberately not a new event: the catalogue's size is asserted
|
|
1439
|
+
* and spelled out in a test title, and a property answers the one open
|
|
1440
|
+
* question — how often the no-room fallback fires — without touching either.
|
|
1441
|
+
*
|
|
1442
|
+
* The pill's own marginal effect cannot be measured here and must not be
|
|
1443
|
+
* reverse-engineered from this data: it ships together with the dot and the
|
|
1444
|
+
* beat, so there is no period with one and not the other.
|
|
1445
|
+
*/
|
|
1446
|
+
function trackErrorSignalViewed(props) {
|
|
1447
|
+
track(TELEMETRY_EVENTS.errorSignalViewed, {
|
|
1448
|
+
source: props.source,
|
|
1449
|
+
presentation: props.presentation,
|
|
1450
|
+
label: props.label
|
|
1451
|
+
});
|
|
1452
|
+
}
|
|
1453
|
+
/**
|
|
863
1454
|
* Fires for links followed inside the announcement body. `body` is the only
|
|
864
1455
|
* call-to-action left: dismissal no longer exists, so there is nothing else a
|
|
865
1456
|
* click on this surface can mean.
|
|
@@ -1019,6 +1610,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
1019
1610
|
...metadataCoarseProperties(props)
|
|
1020
1611
|
});
|
|
1021
1612
|
}
|
|
1613
|
+
function trackEventSnippetsRun(props) {
|
|
1614
|
+
track(TELEMETRY_EVENTS.eventSnippetsRun, {
|
|
1615
|
+
recipe: props.recipe,
|
|
1616
|
+
source: props.source,
|
|
1617
|
+
success: props.success
|
|
1618
|
+
});
|
|
1619
|
+
}
|
|
1620
|
+
function trackEventSnippetsSaved(props) {
|
|
1621
|
+
track(TELEMETRY_EVENTS.eventSnippetsSaved, {
|
|
1622
|
+
recipe: props.recipe,
|
|
1623
|
+
source: props.source,
|
|
1624
|
+
success: props.success
|
|
1625
|
+
});
|
|
1626
|
+
}
|
|
1022
1627
|
/**
|
|
1023
1628
|
* Returns the inspector's anonymous distinct-ID for cross-domain
|
|
1024
1629
|
* propagation onto outbound announcement-CTA links, or `null` when the user
|
|
@@ -1100,11 +1705,215 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
1100
1705
|
/** Menu key of the What's new leaf — the news signal's destination. */
|
|
1101
1706
|
const WHATS_NEW_MENU_KEY = "whats-new";
|
|
1102
1707
|
const NEWS_SIGNAL_ID = "whats-new";
|
|
1103
|
-
const
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1708
|
+
const LAUNCHER_SIGNAL_COLORS = {
|
|
1709
|
+
news: "#A78BFA",
|
|
1710
|
+
error: "#F87171"
|
|
1711
|
+
};
|
|
1712
|
+
/**
|
|
1713
|
+
* The failure gesture, four phases in series:
|
|
1714
|
+
*
|
|
1715
|
+
* ```
|
|
1716
|
+
* beat 400ms → open 250ms → hold 2500ms → close 250ms (3400ms total)
|
|
1717
|
+
* ```
|
|
1718
|
+
*
|
|
1719
|
+
* Sequential rather than simultaneous, deliberately: the beat says *here*, the
|
|
1720
|
+
* pill says *this*. The beat is short so the words arrive quickly.
|
|
1721
|
+
*
|
|
1722
|
+
* **All four durations live here and nowhere else.** The stylesheet reads the
|
|
1723
|
+
* two animated phases as custom properties injected from these numbers rather
|
|
1724
|
+
* than restating them, because they are taste and will be tuned by eye after
|
|
1725
|
+
* the first live look — tuning the feel must be a number, not a refactor.
|
|
1726
|
+
*/
|
|
1727
|
+
const ERROR_GESTURE_MS = {
|
|
1728
|
+
beat: 400,
|
|
1729
|
+
open: 250,
|
|
1730
|
+
hold: 2500,
|
|
1731
|
+
close: 250
|
|
1732
|
+
};
|
|
1733
|
+
/**
|
|
1734
|
+
* The words the pill carries, which are the words the panel already carries.
|
|
1735
|
+
*
|
|
1736
|
+
* `Runtime error` is the System Health runtime tile's own label, and
|
|
1737
|
+
* `Failed to load threads` is the Threads view's own heading. The outside and
|
|
1738
|
+
* the inside must agree, so these are shared rather than paraphrased.
|
|
1739
|
+
*/
|
|
1740
|
+
const RUNTIME_ERROR_LABEL = "Runtime error";
|
|
1741
|
+
const THREADS_LOAD_ERROR_LABEL = "Failed to load threads";
|
|
1742
|
+
const AGENT_RUN_FAILED_LABEL = "Agent run failed";
|
|
1743
|
+
const TOOL_ERROR_LABEL = "Tool error";
|
|
1744
|
+
const MEMORY_LOAD_ERROR_LABEL = "Failed to load learning data";
|
|
1745
|
+
/**
|
|
1746
|
+
* Copy on the landing view. Titles match the pill.
|
|
1747
|
+
*
|
|
1748
|
+
* The two fields differ in what they can promise. `advice` is about the
|
|
1749
|
+
* reader's next move and is always true. `highlight` is a claim about *this
|
|
1750
|
+
* view* — that the failed item is visible below — and the error carries no
|
|
1751
|
+
* guarantee of that: a code mapped to `run` can arrive with no run in the
|
|
1752
|
+
* buffer at all, and a tool error can arrive without the call id the
|
|
1753
|
+
* highlight needs. So it is rendered only once the item is actually there.
|
|
1754
|
+
* A card pointing at something the reader cannot find is worse than a card
|
|
1755
|
+
* that stays quiet, because it sends them looking.
|
|
1756
|
+
*/
|
|
1757
|
+
const EVENT_ERROR_GUIDANCE = {
|
|
1758
|
+
run: {
|
|
1759
|
+
title: AGENT_RUN_FAILED_LABEL,
|
|
1760
|
+
highlight: "The failed run event is highlighted below."
|
|
1761
|
+
},
|
|
1762
|
+
tool: {
|
|
1763
|
+
title: TOOL_ERROR_LABEL,
|
|
1764
|
+
highlight: "The failed tool call is highlighted below."
|
|
1765
|
+
},
|
|
1766
|
+
memory: {
|
|
1767
|
+
title: MEMORY_LOAD_ERROR_LABEL,
|
|
1768
|
+
advice: "Confirm CopilotKit Intelligence is connected, then retry Learning."
|
|
1769
|
+
}
|
|
1770
|
+
};
|
|
1771
|
+
/**
|
|
1772
|
+
* The pill's second line, shared by every subject that carries a pill.
|
|
1773
|
+
*
|
|
1774
|
+
* **This is the one string in the feature that exists nowhere else in the
|
|
1775
|
+
* product.** Every other word the launcher shows is word-identical to the
|
|
1776
|
+
* panel, which is the standing rule; this line is a deliberate, owner-approved
|
|
1777
|
+
* exception to it, because the pill became clickable and an invitation that
|
|
1778
|
+
* says nothing is not an invitation.
|
|
1779
|
+
*
|
|
1780
|
+
* It is shown, never spoken: the polite live region carries the failure class
|
|
1781
|
+
* alone. A screen-reader user cannot act on an instruction delivered through
|
|
1782
|
+
* an announcement, and it would double the spoken length.
|
|
1783
|
+
*/
|
|
1784
|
+
const PILL_SUBLINE_LABEL = "Open Inspector for details";
|
|
1785
|
+
const HUD_OPEN_INSPECTOR_LABEL = "Open Inspector";
|
|
1786
|
+
const HUD_THREADS_OFF_LABEL = "Turn on Threads";
|
|
1787
|
+
const HUD_THREADS_ON_LABEL = "Threads on";
|
|
1788
|
+
const HUD_INTELLIGENCE_OFF_LABEL = "Turn on Intelligence";
|
|
1789
|
+
const HUD_INTELLIGENCE_ON_LABEL = "Intelligence connected";
|
|
1790
|
+
const HUD_THREADS_OFF_DETAIL = "Inspect conversations from this app.";
|
|
1791
|
+
const HUD_THREADS_ON_DETAIL = "Threads is on. Opens the Threads view.";
|
|
1792
|
+
const HUD_INTELLIGENCE_OFF_DETAIL = "Connect Intelligence to use Threads and Learning.";
|
|
1793
|
+
const HUD_INTELLIGENCE_ON_DETAIL = "Intelligence is connected. Opens Home.";
|
|
1794
|
+
const HUD_LEARNING_OFF_LABEL = "Turn on Learning";
|
|
1795
|
+
const HUD_LEARNING_ON_LABEL = "Learning on";
|
|
1796
|
+
const HUD_LEARNING_OFF_DETAIL = "Connect Intelligence to use Learning.";
|
|
1797
|
+
const HUD_LEARNING_ON_DETAIL = "Learning is on. Opens the Learning view.";
|
|
1798
|
+
const HUD_OPEN_INSPECTOR_DETAIL = "Same as clicking the circle. Opens the full Inspector.";
|
|
1799
|
+
const LAUNCHER_SIGNALS = {
|
|
1800
|
+
"whats-new": {
|
|
1801
|
+
tone: "news",
|
|
1802
|
+
markerTarget: WHATS_NEW_MENU_KEY,
|
|
1803
|
+
landingTarget: "home",
|
|
1804
|
+
cadence: 2100,
|
|
1805
|
+
priority: 0,
|
|
1806
|
+
accessibleLabel: "new content"
|
|
1807
|
+
},
|
|
1808
|
+
connection: {
|
|
1809
|
+
tone: "error",
|
|
1810
|
+
markerTarget: "home",
|
|
1811
|
+
landingTarget: "home",
|
|
1812
|
+
cadence: ERROR_GESTURE_MS.beat,
|
|
1813
|
+
priority: 5,
|
|
1814
|
+
accessibleLabel: "runtime error",
|
|
1815
|
+
pillLabel: RUNTIME_ERROR_LABEL
|
|
1816
|
+
},
|
|
1817
|
+
threads: {
|
|
1818
|
+
tone: "error",
|
|
1819
|
+
markerTarget: "threads",
|
|
1820
|
+
landingTarget: "threads",
|
|
1821
|
+
cadence: ERROR_GESTURE_MS.beat,
|
|
1822
|
+
priority: 4,
|
|
1823
|
+
accessibleLabel: "thread loading error",
|
|
1824
|
+
pillLabel: THREADS_LOAD_ERROR_LABEL
|
|
1825
|
+
},
|
|
1826
|
+
run: {
|
|
1827
|
+
tone: "error",
|
|
1828
|
+
markerTarget: "ag-ui-events",
|
|
1829
|
+
landingTarget: "ag-ui-events",
|
|
1830
|
+
cadence: ERROR_GESTURE_MS.beat,
|
|
1831
|
+
priority: 3,
|
|
1832
|
+
accessibleLabel: "agent run failed",
|
|
1833
|
+
pillLabel: AGENT_RUN_FAILED_LABEL
|
|
1834
|
+
},
|
|
1835
|
+
tool: {
|
|
1836
|
+
tone: "error",
|
|
1837
|
+
markerTarget: "agents",
|
|
1838
|
+
landingTarget: "agents",
|
|
1839
|
+
cadence: ERROR_GESTURE_MS.beat,
|
|
1840
|
+
priority: 2,
|
|
1841
|
+
accessibleLabel: "tool error",
|
|
1842
|
+
pillLabel: TOOL_ERROR_LABEL
|
|
1843
|
+
},
|
|
1844
|
+
memory: {
|
|
1845
|
+
tone: "error",
|
|
1846
|
+
markerTarget: "memories",
|
|
1847
|
+
landingTarget: "memories",
|
|
1848
|
+
cadence: ERROR_GESTURE_MS.beat,
|
|
1849
|
+
priority: 1,
|
|
1850
|
+
accessibleLabel: "learning error",
|
|
1851
|
+
pillLabel: MEMORY_LOAD_ERROR_LABEL
|
|
1852
|
+
}
|
|
1853
|
+
};
|
|
1854
|
+
/** Highest priority first, so the winner of the single dot is the head. */
|
|
1855
|
+
const LAUNCHER_SIGNAL_PRIORITY_ORDER = Object.keys(LAUNCHER_SIGNALS).sort((a, b) => LAUNCHER_SIGNALS[b].priority - LAUNCHER_SIGNALS[a].priority);
|
|
1856
|
+
/** Wiring *state* — red until the problem heals. */
|
|
1857
|
+
const WIRING_ERROR_KEYS = ["connection", "threads"];
|
|
1858
|
+
/** Unread *events* — red until the landing view is read. */
|
|
1859
|
+
const EVENT_ERROR_KEYS = [
|
|
1860
|
+
"run",
|
|
1861
|
+
"tool",
|
|
1862
|
+
"memory"
|
|
1863
|
+
];
|
|
1864
|
+
function isWiringErrorKey(key) {
|
|
1865
|
+
return WIRING_ERROR_KEYS.includes(key);
|
|
1866
|
+
}
|
|
1867
|
+
/**
|
|
1868
|
+
* Takes a plain string rather than a `LauncherSignalKey`, because one caller
|
|
1869
|
+
* reads the subject back out of a `data-` attribute, where the DOM can only
|
|
1870
|
+
* offer `string | undefined`. Narrowing untrusted input is what a guard is
|
|
1871
|
+
* for; `LauncherSignalKey` still satisfies the parameter, so the callers that
|
|
1872
|
+
* already hold one are unaffected.
|
|
1873
|
+
*/
|
|
1874
|
+
function isEventErrorKey(key) {
|
|
1875
|
+
return EVENT_ERROR_KEYS.includes(key);
|
|
1876
|
+
}
|
|
1877
|
+
/** Narrows a signal key to an error source, excluding the announcement. */
|
|
1878
|
+
function isErrorSignalKey(key) {
|
|
1879
|
+
return isWiringErrorKey(key) || isEventErrorKey(key);
|
|
1880
|
+
}
|
|
1881
|
+
/**
|
|
1882
|
+
* The control range is the point, not an oversight: an attribute selector has
|
|
1883
|
+
* to escape those characters too, and CSS.escape — which the fallback below
|
|
1884
|
+
* stands in for — escapes them as well. Hoisted so the suppression can sit on
|
|
1885
|
+
* the pattern rather than three lines above it.
|
|
1886
|
+
*/
|
|
1887
|
+
const SELECTOR_ESCAPE_PATTERN = /[\0-\x1f\x7f!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g;
|
|
1888
|
+
/** Attribute selector value. jsdom does not implement CSS.escape. */
|
|
1889
|
+
function escapeSelectorValue(value) {
|
|
1890
|
+
if (typeof CSS !== "undefined" && typeof CSS.escape === "function") return CSS.escape(value);
|
|
1891
|
+
return value.replace(SELECTOR_ESCAPE_PATTERN, "\\$&");
|
|
1892
|
+
}
|
|
1893
|
+
function eventErrorKeyForCode(code) {
|
|
1894
|
+
switch (code) {
|
|
1895
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.TOOL_NOT_FOUND:
|
|
1896
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.TOOL_HANDLER_FAILED:
|
|
1897
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.TOOL_ARGUMENT_PARSE_FAILED:
|
|
1898
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_NOT_FOUND: return "tool";
|
|
1899
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_CONNECT_FAILED:
|
|
1900
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_RUN_FAILED:
|
|
1901
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_RUN_FAILED_EVENT:
|
|
1902
|
+
case _copilotkit_core.CopilotKitCoreErrorCode.AGENT_RUN_ERROR_EVENT: return "run";
|
|
1903
|
+
default: return null;
|
|
1904
|
+
}
|
|
1905
|
+
}
|
|
1906
|
+
/**
|
|
1907
|
+
* Coalesce inspector-owned GET /threads sends. The first refresh goes out
|
|
1908
|
+
* at once. Further calls in this window share one trailing request, so a
|
|
1909
|
+
* flaky network does not fire a burst of list fetches and error cards.
|
|
1910
|
+
*/
|
|
1911
|
+
const THREAD_LIST_DEBOUNCE_MS = 300;
|
|
1912
|
+
/** The launcher's accessible name with nothing wrong. */
|
|
1913
|
+
const LAUNCHER_BASE_LABEL = "Web Inspector";
|
|
1107
1914
|
const EDGE_MARGIN = 16;
|
|
1915
|
+
/** HUD card plus the hover bridge. Used to pick left vs right. */
|
|
1916
|
+
const LAUNCHER_HUD_WIDTH = 248;
|
|
1108
1917
|
const DRAG_THRESHOLD = 6;
|
|
1109
1918
|
const MIN_WINDOW_WIDTH = 880;
|
|
1110
1919
|
const MIN_WINDOW_WIDTH_DOCKED_LEFT = 640;
|
|
@@ -1585,6 +2394,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
|
|
|
1585
2394
|
super(..._args);
|
|
1586
2395
|
this.threads = [];
|
|
1587
2396
|
this.selectedThreadId = null;
|
|
2397
|
+
this.inAppThreadId = null;
|
|
1588
2398
|
this.errorMessage = null;
|
|
1589
2399
|
this.suppressEmptyState = false;
|
|
1590
2400
|
this._query = "";
|
|
@@ -1658,6 +2468,9 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
|
|
|
1658
2468
|
${thread.isExample ? lit.html`
|
|
1659
2469
|
<span class="cpk-tl__pill cpk-tl__pill--example">Example</span>
|
|
1660
2470
|
` : lit.nothing}
|
|
2471
|
+
${this.inAppThreadId === thread.id ? lit.html`
|
|
2472
|
+
<span class="cpk-tl__pill cpk-tl__pill--in-app">In app</span>
|
|
2473
|
+
` : lit.nothing}
|
|
1661
2474
|
</span>
|
|
1662
2475
|
</button>
|
|
1663
2476
|
`;
|
|
@@ -1716,6 +2529,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
|
|
|
1716
2529
|
CpkThreadList.properties = {
|
|
1717
2530
|
threads: { attribute: false },
|
|
1718
2531
|
selectedThreadId: { attribute: false },
|
|
2532
|
+
inAppThreadId: { attribute: false },
|
|
1719
2533
|
errorMessage: { attribute: false },
|
|
1720
2534
|
suppressEmptyState: { attribute: false },
|
|
1721
2535
|
_query: { state: true }
|
|
@@ -1864,6 +2678,11 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
|
|
|
1864
2678
|
color: #087653;
|
|
1865
2679
|
}
|
|
1866
2680
|
|
|
2681
|
+
.cpk-tl__pill--in-app {
|
|
2682
|
+
background: #bec2ff;
|
|
2683
|
+
color: #010507;
|
|
2684
|
+
}
|
|
2685
|
+
|
|
1867
2686
|
/* ── Empty state ── */
|
|
1868
2687
|
.cpk-tl__empty {
|
|
1869
2688
|
padding: 32px 16px;
|
|
@@ -1937,6 +2756,8 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
|
|
|
1937
2756
|
this.agentStateInput = null;
|
|
1938
2757
|
this.agentEventsInput = [];
|
|
1939
2758
|
this.liveMessageVersion = 0;
|
|
2759
|
+
this.viewInAppMode = "hidden";
|
|
2760
|
+
this.viewInAppError = null;
|
|
1940
2761
|
this.focusMessageId = null;
|
|
1941
2762
|
this.focusRequestId = 0;
|
|
1942
2763
|
this._tab = "timeline";
|
|
@@ -2937,8 +3758,32 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson(parsed))}</pre
|
|
|
2937
3758
|
</span>
|
|
2938
3759
|
`)}
|
|
2939
3760
|
</div>
|
|
3761
|
+
${this.renderViewInAppAction()}
|
|
2940
3762
|
${bulkControls}
|
|
2941
3763
|
</div>
|
|
3764
|
+
`;
|
|
3765
|
+
}
|
|
3766
|
+
renderViewInAppAction() {
|
|
3767
|
+
if (this.viewInAppMode === "hidden") return lit.nothing;
|
|
3768
|
+
const isStop = this.viewInAppMode === "stop";
|
|
3769
|
+
return lit.html`
|
|
3770
|
+
<button
|
|
3771
|
+
type="button"
|
|
3772
|
+
class="cpk-td__view-in-app ${isStop ? "cpk-td__view-in-app--stop" : ""}"
|
|
3773
|
+
data-testid="cpk-inspector-view-in-app"
|
|
3774
|
+
aria-label=${isStop ? "Stop viewing this thread in the app" : "View this thread in your app"}
|
|
3775
|
+
@click=${() => {
|
|
3776
|
+
this.dispatchEvent(new CustomEvent(isStop ? "stopViewing" : "viewInApp", {
|
|
3777
|
+
bubbles: true,
|
|
3778
|
+
composed: true
|
|
3779
|
+
}));
|
|
3780
|
+
}}
|
|
3781
|
+
>
|
|
3782
|
+
${isStop ? "Stop viewing" : "View in your app"}
|
|
3783
|
+
</button>
|
|
3784
|
+
${this.viewInAppError ? lit.html`<span class="cpk-td__view-in-app-error" role="alert"
|
|
3785
|
+
>${this.viewInAppError}</span
|
|
3786
|
+
>` : lit.nothing}
|
|
2942
3787
|
`;
|
|
2943
3788
|
}
|
|
2944
3789
|
renderActiveBulkControls() {
|
|
@@ -3523,6 +4368,8 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
3523
4368
|
agentStateInput: { attribute: false },
|
|
3524
4369
|
agentEventsInput: { attribute: false },
|
|
3525
4370
|
liveMessageVersion: { attribute: false },
|
|
4371
|
+
viewInAppMode: { attribute: false },
|
|
4372
|
+
viewInAppError: { attribute: false },
|
|
3526
4373
|
focusMessageId: { attribute: false },
|
|
3527
4374
|
focusRequestId: { attribute: false },
|
|
3528
4375
|
_tab: { state: true },
|
|
@@ -3754,6 +4601,37 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
3754
4601
|
overflow-wrap: anywhere;
|
|
3755
4602
|
}
|
|
3756
4603
|
|
|
4604
|
+
.cpk-td__view-in-app {
|
|
4605
|
+
appearance: none;
|
|
4606
|
+
flex-shrink: 0;
|
|
4607
|
+
margin: 0;
|
|
4608
|
+
border: 1px solid #5558b2;
|
|
4609
|
+
border-radius: 6px;
|
|
4610
|
+
background: #5558b2;
|
|
4611
|
+
color: #ffffff;
|
|
4612
|
+
font-family: "Plus Jakarta Sans", sans-serif;
|
|
4613
|
+
font-size: 11px;
|
|
4614
|
+
font-weight: 600;
|
|
4615
|
+
padding: 5px 10px;
|
|
4616
|
+
cursor: pointer;
|
|
4617
|
+
}
|
|
4618
|
+
|
|
4619
|
+
.cpk-td__view-in-app:focus-visible {
|
|
4620
|
+
outline: 2px solid #010507;
|
|
4621
|
+
outline-offset: 2px;
|
|
4622
|
+
}
|
|
4623
|
+
|
|
4624
|
+
.cpk-td__view-in-app--stop {
|
|
4625
|
+
background: #ffffff;
|
|
4626
|
+
color: #5558b2;
|
|
4627
|
+
}
|
|
4628
|
+
|
|
4629
|
+
.cpk-td__view-in-app-error {
|
|
4630
|
+
flex-basis: 100%;
|
|
4631
|
+
color: #c0333a;
|
|
4632
|
+
font-size: 11px;
|
|
4633
|
+
}
|
|
4634
|
+
|
|
3757
4635
|
/*
|
|
3758
4636
|
* Each tab's content is wrapped in this panel so the keep-mounted
|
|
3759
4637
|
* inactive panels can be hidden via display:none without disturbing
|
|
@@ -5230,7 +6108,33 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5230
6108
|
inspect: "ag-ui-events"
|
|
5231
6109
|
};
|
|
5232
6110
|
this.lastScrolledAgentNavigationLayout = null;
|
|
6111
|
+
this.eventSnippets = [];
|
|
6112
|
+
this.selectedSnippetId = null;
|
|
6113
|
+
this.snippetRecipe = "tool-call";
|
|
6114
|
+
this.snippetName = "";
|
|
6115
|
+
this.snippetJson = "[]";
|
|
6116
|
+
this.snippetToolName = "";
|
|
6117
|
+
this.snippetToolArgs = "{}";
|
|
6118
|
+
this.snippetReasoningText = "";
|
|
6119
|
+
this.snippetTextContent = "";
|
|
6120
|
+
this.snippetActivityType = "a2ui-surface";
|
|
6121
|
+
this.snippetActivityContent = "{}";
|
|
6122
|
+
this.snippetError = null;
|
|
6123
|
+
this.snippetBanner = null;
|
|
6124
|
+
this.snippetConfirmOpen = false;
|
|
6125
|
+
this.lastInject = null;
|
|
6126
|
+
this.snippetListWidth = 200;
|
|
6127
|
+
this.snippetDividerResizing = false;
|
|
6128
|
+
this.snippetDividerPointerId = -1;
|
|
6129
|
+
this.snippetDividerStartX = 0;
|
|
6130
|
+
this.snippetDividerStartWidth = 0;
|
|
5233
6131
|
this.selectedThreadId = null;
|
|
6132
|
+
this.inAppThreadId = null;
|
|
6133
|
+
this.inAppAgentId = null;
|
|
6134
|
+
this.inAppSource = null;
|
|
6135
|
+
this.activeViewInAppRequestId = null;
|
|
6136
|
+
this.viewInAppError = null;
|
|
6137
|
+
this.inspectorBridgeUnsubscribers = [];
|
|
5234
6138
|
this.selectedRealThreadIsExplicit = false;
|
|
5235
6139
|
this.selectedLocalExampleThreadId = null;
|
|
5236
6140
|
this.requestedThreadId = null;
|
|
@@ -5294,9 +6198,39 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5294
6198
|
this.announcementLoaded = false;
|
|
5295
6199
|
this.announcementPromise = null;
|
|
5296
6200
|
this.newsSignalArmed = false;
|
|
5297
|
-
this.
|
|
5298
|
-
this.
|
|
6201
|
+
this.pulsingSignal = null;
|
|
6202
|
+
this.pendingPulseSignal = null;
|
|
5299
6203
|
this.pulseTimeoutId = null;
|
|
6204
|
+
this.errorSignalArmed = {
|
|
6205
|
+
connection: false,
|
|
6206
|
+
threads: false
|
|
6207
|
+
};
|
|
6208
|
+
this.eventErrorArmed = {
|
|
6209
|
+
run: false,
|
|
6210
|
+
tool: false,
|
|
6211
|
+
memory: false
|
|
6212
|
+
};
|
|
6213
|
+
this.eventErrorDetails = {
|
|
6214
|
+
run: null,
|
|
6215
|
+
tool: null,
|
|
6216
|
+
memory: null
|
|
6217
|
+
};
|
|
6218
|
+
this.pendingScrollToEventId = null;
|
|
6219
|
+
this.pendingScrollToToolCallId = null;
|
|
6220
|
+
this.threadRefreshLastSentAt = /* @__PURE__ */ new Map();
|
|
6221
|
+
this.threadRefreshTrailingTimers = /* @__PURE__ */ new Map();
|
|
6222
|
+
this.errorBeatSpent = false;
|
|
6223
|
+
this.errorSignalViewedSources = /* @__PURE__ */ new Set();
|
|
6224
|
+
this.gestureSignal = null;
|
|
6225
|
+
this.pillPhase = null;
|
|
6226
|
+
this.pillDirection = null;
|
|
6227
|
+
this.pillTimeoutId = null;
|
|
6228
|
+
this.launcherHudOpen = false;
|
|
6229
|
+
this.launcherHudSide = "left";
|
|
6230
|
+
this.launcherHudHelp = null;
|
|
6231
|
+
this.launcherHudCloseTimer = null;
|
|
6232
|
+
this.hudLandingMenu = null;
|
|
6233
|
+
this.pillOutcome = null;
|
|
5300
6234
|
this.viewedNewsSignalIds = /* @__PURE__ */ new Set();
|
|
5301
6235
|
this.pendingNewsSignalViewed = null;
|
|
5302
6236
|
this.viewedBannerSurfaces = /* @__PURE__ */ new Set();
|
|
@@ -5370,9 +6304,60 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5370
6304
|
this.customTabIcons = { threads: `<svg class="h-3.5 w-3.5" width="15" height="15" viewBox="0 0 15 15" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M9.04167 15C8.29167 15 7.65972 14.7431 7.14583 14.2292C6.63194 13.7153 6.375 13.0972 6.375 12.375C6.375 11.3194 6.80208 10.3646 7.65625 9.51042C8.51042 8.65625 9.57639 8.125 10.8542 7.91667C10.8125 7.41667 10.6875 7.03819 10.4792 6.78125C10.2708 6.52431 9.98611 6.39583 9.625 6.39583C9.20833 6.39583 8.75694 6.56944 8.27083 6.91667C7.78472 7.26389 7.20833 7.83333 6.54167 8.625C5.45833 9.91667 4.66319 10.7569 4.15625 11.1458C3.64931 11.5347 3.10417 11.7292 2.52083 11.7292C1.8125 11.7292 1.21528 11.4653 0.729167 10.9375C0.243056 10.4097 0 9.77083 0 9.02083C0 8.27083 0.163194 7.50347 0.489583 6.71875C0.815972 5.93403 1.36806 4.99306 2.14583 3.89583C2.40972 3.53472 2.60417 3.22917 2.72917 2.97917C2.85417 2.72917 2.91667 2.52778 2.91667 2.375C2.91667 2.27778 2.89931 2.20486 2.86458 2.15625C2.82986 2.10764 2.77778 2.08333 2.70833 2.08333C2.56944 2.08333 2.39583 2.17014 2.1875 2.34375C1.97917 2.51736 1.73611 2.78472 1.45833 3.14583L0 1.66667C0.444444 1.125 0.895833 0.711806 1.35417 0.427083C1.8125 0.142361 2.26389 0 2.70833 0C3.34722 0 3.88889 0.222222 4.33333 0.666667C4.77778 1.11111 5 1.66667 5 2.33333C5 2.73611 4.89583 3.18056 4.6875 3.66667C4.47917 4.15278 4.13194 4.73611 3.64583 5.41667C3.11806 6.16667 2.72569 6.82639 2.46875 7.39583C2.21181 7.96528 2.08333 8.46528 2.08333 8.89583C2.08333 9.13194 2.12153 9.31597 2.19792 9.44792C2.27431 9.57986 2.38194 9.64583 2.52083 9.64583C2.65972 9.64583 2.78125 9.60764 2.88542 9.53125C2.98958 9.45486 3.18056 9.27083 3.45833 8.97917C3.63889 8.78472 3.85417 8.54514 4.10417 8.26042C4.35417 7.97569 4.65972 7.625 5.02083 7.20833C5.89583 6.16667 6.6875 5.42361 7.39583 4.97917C8.10417 4.53472 8.84722 4.3125 9.625 4.3125C10.5556 4.3125 11.3194 4.625 11.9167 5.25C12.5139 5.875 12.8542 6.72917 12.9375 7.8125H15V9.89583H12.9375C12.8264 11.4514 12.4201 12.691 11.7188 13.6146C11.0174 14.5382 10.125 15 9.04167 15ZM9.08333 12.9167C9.52778 12.9167 9.90278 12.6632 10.2083 12.1562C10.5139 11.6493 10.7222 10.9444 10.8333 10.0417C10.1944 10.1944 9.63889 10.4965 9.16667 10.9479C8.69444 11.3993 8.45833 11.8472 8.45833 12.2917C8.45833 12.4861 8.51389 12.6389 8.625 12.75C8.73611 12.8611 8.88889 12.9167 9.08333 12.9167Z" fill="currentColor"/></svg>` };
|
|
5371
6305
|
this.handleDocumentVisibilityChange = () => {
|
|
5372
6306
|
this.accountCtaMotionPaused = document.visibilityState !== "visible";
|
|
5373
|
-
if (document.visibilityState === "visible" &&
|
|
6307
|
+
if (document.visibilityState === "visible" && !this.isOpen) this.flushPendingSignalPulse();
|
|
6308
|
+
this.requestUpdate();
|
|
6309
|
+
};
|
|
6310
|
+
this.handlePillClick = (event) => {
|
|
6311
|
+
event.preventDefault();
|
|
6312
|
+
event.stopPropagation();
|
|
6313
|
+
this.openInspector("floating_button");
|
|
6314
|
+
};
|
|
6315
|
+
this.handleLauncherHudEnter = () => {
|
|
6316
|
+
this.openLauncherHud();
|
|
6317
|
+
};
|
|
6318
|
+
this.handleLauncherHudLeave = () => {
|
|
6319
|
+
if (this.launcherHudCloseTimer !== null) clearTimeout(this.launcherHudCloseTimer);
|
|
6320
|
+
this.launcherHudCloseTimer = setTimeout(() => {
|
|
6321
|
+
this.launcherHudCloseTimer = null;
|
|
6322
|
+
this.closeLauncherHud();
|
|
6323
|
+
}, 160);
|
|
6324
|
+
};
|
|
6325
|
+
this.handleLauncherHudFocusIn = () => {
|
|
6326
|
+
this.openLauncherHud();
|
|
6327
|
+
};
|
|
6328
|
+
this.handleLauncherHudFocusOut = (event) => {
|
|
6329
|
+
const next = event.relatedTarget;
|
|
6330
|
+
const wrapper = event.currentTarget;
|
|
6331
|
+
if (next instanceof Node && wrapper instanceof Node && wrapper.contains(next)) return;
|
|
6332
|
+
this.closeLauncherHud();
|
|
6333
|
+
};
|
|
6334
|
+
this.handleLauncherHudKeydown = (event) => {
|
|
6335
|
+
var _this$activeRoot$quer;
|
|
6336
|
+
if (event.key !== "Escape") return;
|
|
6337
|
+
if (!this.launcherHudOpen) return;
|
|
6338
|
+
event.preventDefault();
|
|
6339
|
+
event.stopPropagation();
|
|
6340
|
+
this.closeLauncherHud();
|
|
6341
|
+
(_this$activeRoot$quer = this.activeRoot.querySelector(".console-button")) === null || _this$activeRoot$quer === void 0 || _this$activeRoot$quer.focus();
|
|
6342
|
+
};
|
|
6343
|
+
this.handleHudActionClick = (event, row) => {
|
|
6344
|
+
event.preventDefault();
|
|
6345
|
+
event.stopPropagation();
|
|
6346
|
+
this.hudLandingMenu = row === "inspector" ? null : row === "threads" ? "threads" : row === "learning" ? "memories" : "home";
|
|
6347
|
+
this.closeLauncherHud();
|
|
6348
|
+
this.openInspector("floating_button");
|
|
6349
|
+
};
|
|
6350
|
+
this.handleHudHelpClick = (event, row) => {
|
|
6351
|
+
event.preventDefault();
|
|
6352
|
+
event.stopPropagation();
|
|
6353
|
+
this.launcherHudHelp = this.launcherHudHelp === row ? null : row;
|
|
5374
6354
|
this.requestUpdate();
|
|
5375
6355
|
};
|
|
6356
|
+
this.handleHudRowClick = (event, row) => {
|
|
6357
|
+
const target = event.target;
|
|
6358
|
+
if (target instanceof Element && target.closest(".cpk-launcher-hud__help, [data-cpk-hud-action]")) return;
|
|
6359
|
+
this.handleHudActionClick(event, row);
|
|
6360
|
+
};
|
|
5376
6361
|
this.handleSidebarToggle = () => {
|
|
5377
6362
|
this.sidebarRailTooltip = null;
|
|
5378
6363
|
this.sidebarCollapsed = !this.sidebarCollapsed;
|
|
@@ -5404,6 +6389,18 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5404
6389
|
this.persistState();
|
|
5405
6390
|
this.requestUpdate();
|
|
5406
6391
|
};
|
|
6392
|
+
this.handleEventErrorBannerKeydown = (event) => {
|
|
6393
|
+
if (event.key !== "Enter" && event.key !== " ") return;
|
|
6394
|
+
event.preventDefault();
|
|
6395
|
+
this.refocusEventErrorLanding(event);
|
|
6396
|
+
};
|
|
6397
|
+
this.refocusEventErrorLanding = (event) => {
|
|
6398
|
+
var _event$currentTarget;
|
|
6399
|
+
const key = (_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 ? void 0 : _event$currentTarget.dataset.cpkEventError;
|
|
6400
|
+
if (!key || !isEventErrorKey(key)) return;
|
|
6401
|
+
this.applyEventErrorLanding(key);
|
|
6402
|
+
this.requestUpdate();
|
|
6403
|
+
};
|
|
5407
6404
|
this.handleSystemColorSchemeChange = (event) => {
|
|
5408
6405
|
if (this.hasExplicitColorScheme) return;
|
|
5409
6406
|
this.colorScheme = event.matches ? "dark" : "light";
|
|
@@ -5540,7 +6537,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5540
6537
|
this.closePopOut();
|
|
5541
6538
|
};
|
|
5542
6539
|
this.handleResizePointerDown = (event) => {
|
|
5543
|
-
var _event$
|
|
6540
|
+
var _event$currentTarget2, _target$setPointerCap2;
|
|
5544
6541
|
event.stopPropagation();
|
|
5545
6542
|
event.preventDefault();
|
|
5546
6543
|
this.hasCustomPosition.window = true;
|
|
@@ -5552,7 +6549,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5552
6549
|
};
|
|
5553
6550
|
this.resizeInitialSize = { ...this.contextState.window.size };
|
|
5554
6551
|
this.resizeInitialPosition = { ...this.contextState.window.position };
|
|
5555
|
-
const edge = (_event$
|
|
6552
|
+
const edge = (_event$currentTarget2 = event.currentTarget) === null || _event$currentTarget2 === void 0 ? void 0 : _event$currentTarget2.dataset.resizeEdge;
|
|
5556
6553
|
this.resizeEdge = edge === "w" || edge === "e" || edge === "s" || edge === "se" || edge === "sw" ? edge : "se";
|
|
5557
6554
|
if (document.body && this.dockMode !== "floating") document.body.style.transition = "";
|
|
5558
6555
|
const target = event.currentTarget;
|
|
@@ -5744,6 +6741,20 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5744
6741
|
var _this$playgroundAgent;
|
|
5745
6742
|
(_this$playgroundAgent = this.playgroundAgent) === null || _this$playgroundAgent === void 0 || _this$playgroundAgent.abortRun();
|
|
5746
6743
|
};
|
|
6744
|
+
this.handleSnippetImportChange = async (event) => {
|
|
6745
|
+
var _input$files;
|
|
6746
|
+
const input = event.target;
|
|
6747
|
+
const file = (_input$files = input.files) === null || _input$files === void 0 ? void 0 : _input$files[0];
|
|
6748
|
+
input.value = "";
|
|
6749
|
+
if (!file) return;
|
|
6750
|
+
try {
|
|
6751
|
+
this.eventSnippets = importEventSnippets(await file.text());
|
|
6752
|
+
this.snippetError = null;
|
|
6753
|
+
} catch (error) {
|
|
6754
|
+
this.snippetError = error instanceof Error ? error.message : "Import failed.";
|
|
6755
|
+
}
|
|
6756
|
+
this.requestUpdate();
|
|
6757
|
+
};
|
|
5747
6758
|
this.handleInspectorMetadataActionClick = (action, placement) => {
|
|
5748
6759
|
var _this$core;
|
|
5749
6760
|
if (!this.isOpen || this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core = this.core) === null || _this$core === void 0 ? void 0 : _this$core.telemetryDisabled)) return;
|
|
@@ -5775,6 +6786,26 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5775
6786
|
if ((_this$core4 = this.core) === null || _this$core4 === void 0 ? void 0 : _this$core4.telemetryDisabled) return;
|
|
5776
6787
|
trackThreadsTalkToEngineerClicked(this.getThreadsCtaTelemetryProps("talk_to_engineer", "threads_locked"));
|
|
5777
6788
|
};
|
|
6789
|
+
this.handleSnippetListDividerPointerDown = (event) => {
|
|
6790
|
+
this.snippetDividerResizing = true;
|
|
6791
|
+
this.snippetDividerPointerId = event.pointerId;
|
|
6792
|
+
this.snippetDividerStartX = event.clientX;
|
|
6793
|
+
this.snippetDividerStartWidth = this.snippetListWidth;
|
|
6794
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
6795
|
+
event.preventDefault();
|
|
6796
|
+
};
|
|
6797
|
+
this.handleSnippetListDividerPointerMove = (event) => {
|
|
6798
|
+
if (!this.snippetDividerResizing || this.snippetDividerPointerId !== event.pointerId) return;
|
|
6799
|
+
const delta = event.clientX - this.snippetDividerStartX;
|
|
6800
|
+
this.snippetListWidth = Math.max(160, Math.min(360, this.snippetDividerStartWidth + delta));
|
|
6801
|
+
this.requestUpdate();
|
|
6802
|
+
};
|
|
6803
|
+
this.handleSnippetListDividerPointerUp = (event) => {
|
|
6804
|
+
if (this.snippetDividerPointerId !== event.pointerId) return;
|
|
6805
|
+
const target = event.currentTarget;
|
|
6806
|
+
if (target.hasPointerCapture(this.snippetDividerPointerId)) target.releasePointerCapture(this.snippetDividerPointerId);
|
|
6807
|
+
this.snippetDividerResizing = false;
|
|
6808
|
+
};
|
|
5778
6809
|
this.handleThreadDividerPointerDown = (event) => {
|
|
5779
6810
|
this.threadDividerResizing = true;
|
|
5780
6811
|
this.threadDividerPointerId = event.pointerId;
|
|
@@ -5795,7 +6826,41 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5795
6826
|
if (target.hasPointerCapture(this.threadDividerPointerId)) target.releasePointerCapture(this.threadDividerPointerId);
|
|
5796
6827
|
this.threadDividerResizing = false;
|
|
5797
6828
|
};
|
|
5798
|
-
this.
|
|
6829
|
+
this.handleViewInApp = () => {
|
|
6830
|
+
const thread = this.getSelectedRealThread();
|
|
6831
|
+
if (!thread) return;
|
|
6832
|
+
if (this.activeViewInAppRequestId && this.inAppAgentId) (0, _copilotkit_core.emitInspectorStopViewing)({
|
|
6833
|
+
requestId: this.activeViewInAppRequestId,
|
|
6834
|
+
agentId: this.inAppAgentId
|
|
6835
|
+
});
|
|
6836
|
+
this.viewInAppError = null;
|
|
6837
|
+
const requestId = (0, _copilotkit_core.createInspectorThreadRequestId)();
|
|
6838
|
+
this.activeViewInAppRequestId = requestId;
|
|
6839
|
+
if (!(0, _copilotkit_core.emitInspectorViewThread)({
|
|
6840
|
+
requestId,
|
|
6841
|
+
threadId: thread.id,
|
|
6842
|
+
agentId: thread.agentId
|
|
6843
|
+
})) {
|
|
6844
|
+
this.activeViewInAppRequestId = null;
|
|
6845
|
+
this.inAppThreadId = null;
|
|
6846
|
+
this.inAppAgentId = null;
|
|
6847
|
+
this.inAppSource = null;
|
|
6848
|
+
this.viewInAppError = "No official chat for this agent is on the page.";
|
|
6849
|
+
}
|
|
6850
|
+
this.requestUpdate();
|
|
6851
|
+
};
|
|
6852
|
+
this.handleStopViewing = () => {
|
|
6853
|
+
const requestId = this.activeViewInAppRequestId;
|
|
6854
|
+
const agentId = this.inAppAgentId;
|
|
6855
|
+
if (!requestId || !agentId) return;
|
|
6856
|
+
this.viewInAppError = null;
|
|
6857
|
+
(0, _copilotkit_core.emitInspectorStopViewing)({
|
|
6858
|
+
requestId,
|
|
6859
|
+
agentId
|
|
6860
|
+
});
|
|
6861
|
+
this.requestUpdate();
|
|
6862
|
+
};
|
|
6863
|
+
this.handleThreadsExampleOverviewVideoControl = () => {
|
|
5799
6864
|
const video = this.threadsExampleOverviewVideoElement;
|
|
5800
6865
|
if (!video) return;
|
|
5801
6866
|
if (this.threadsExampleOverviewVideoState === "playing") {
|
|
@@ -5990,6 +7055,11 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
5990
7055
|
label: "AG-UI Events",
|
|
5991
7056
|
icon: "Zap"
|
|
5992
7057
|
},
|
|
7058
|
+
{
|
|
7059
|
+
key: "event-snippets",
|
|
7060
|
+
label: "Event Snippets",
|
|
7061
|
+
icon: "Code"
|
|
7062
|
+
},
|
|
5993
7063
|
{
|
|
5994
7064
|
key: "agents",
|
|
5995
7065
|
label: "Agent",
|
|
@@ -6224,7 +7294,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6224
7294
|
const statusSub = store.select(createThreadStoreStatusSelector()).subscribe(({ error, isLoading }) => {
|
|
6225
7295
|
if (capabilityGeneration !== this.threadCapabilityGeneration || !this.areThreadEndpointsAvailable()) return;
|
|
6226
7296
|
if (error) this._threadsErrorByAgent.set(agentId, error);
|
|
6227
|
-
else this._threadsErrorByAgent.delete(agentId);
|
|
7297
|
+
else if (!isLoading) this._threadsErrorByAgent.delete(agentId);
|
|
6228
7298
|
this._threadsLoadingByAgent.set(agentId, isLoading);
|
|
6229
7299
|
this.requestUpdate();
|
|
6230
7300
|
});
|
|
@@ -6238,7 +7308,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6238
7308
|
this._threadsLoadingByAgent.set(agentId, (0, _copilotkit_core.ɵselectThreadsIsLoading)(initialState));
|
|
6239
7309
|
const initialError = (0, _copilotkit_core.ɵselectThreadsError)(initialState);
|
|
6240
7310
|
if (initialError) this._threadsErrorByAgent.set(agentId, initialError);
|
|
6241
|
-
else this._threadsErrorByAgent.delete(agentId);
|
|
7311
|
+
else if (!(0, _copilotkit_core.ɵselectThreadsIsLoading)(initialState)) this._threadsErrorByAgent.delete(agentId);
|
|
6242
7312
|
this.rebuildFlattenedThreads();
|
|
6243
7313
|
this.autoSelectLatestThread();
|
|
6244
7314
|
}
|
|
@@ -6317,11 +7387,32 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6317
7387
|
core.registerThreadStore(agentId, store);
|
|
6318
7388
|
}
|
|
6319
7389
|
refreshOwnedThreadStore(agentId) {
|
|
7390
|
+
var _this$threadRefreshLa;
|
|
6320
7391
|
if (!this.areThreadEndpointsAvailable()) return;
|
|
6321
7392
|
const store = this._ownedThreadStores.get(agentId);
|
|
6322
7393
|
if (!store) return;
|
|
7394
|
+
const now = Date.now();
|
|
7395
|
+
const waitMs = THREAD_LIST_DEBOUNCE_MS - (now - ((_this$threadRefreshLa = this.threadRefreshLastSentAt.get(agentId)) !== null && _this$threadRefreshLa !== void 0 ? _this$threadRefreshLa : 0));
|
|
7396
|
+
if (waitMs <= 0) {
|
|
7397
|
+
this.sendOwnedThreadRefresh(agentId, store, now);
|
|
7398
|
+
return;
|
|
7399
|
+
}
|
|
7400
|
+
if (this.threadRefreshTrailingTimers.has(agentId)) return;
|
|
7401
|
+
this.threadRefreshTrailingTimers.set(agentId, setTimeout(() => {
|
|
7402
|
+
this.threadRefreshTrailingTimers.delete(agentId);
|
|
7403
|
+
const current = this._ownedThreadStores.get(agentId);
|
|
7404
|
+
if (!current) return;
|
|
7405
|
+
this.sendOwnedThreadRefresh(agentId, current, Date.now());
|
|
7406
|
+
}, waitMs));
|
|
7407
|
+
}
|
|
7408
|
+
sendOwnedThreadRefresh(agentId, store, sentAt) {
|
|
7409
|
+
this.threadRefreshLastSentAt.set(agentId, sentAt);
|
|
6323
7410
|
store.refresh();
|
|
6324
7411
|
}
|
|
7412
|
+
cancelThreadRefreshDebounce() {
|
|
7413
|
+
for (const timer of this.threadRefreshTrailingTimers.values()) clearTimeout(timer);
|
|
7414
|
+
this.threadRefreshTrailingTimers.clear();
|
|
7415
|
+
}
|
|
6325
7416
|
updateOwnedThreadStoreHeaders(headers) {
|
|
6326
7417
|
if (!this.areThreadEndpointsAvailable()) return;
|
|
6327
7418
|
const core = this.core;
|
|
@@ -6383,6 +7474,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6383
7474
|
this.runtimeStatus = core.runtimeConnectionStatus;
|
|
6384
7475
|
this.coreProperties = core.properties;
|
|
6385
7476
|
this.lastCoreError = null;
|
|
7477
|
+
this.clearAllEventErrors();
|
|
6386
7478
|
const supportsInspectorMetadata = this.coreSupportsInspectorMetadata(core);
|
|
6387
7479
|
this.updateInspectorMetadataProjection(this.readCoreInspectorMetadata(core));
|
|
6388
7480
|
this.coreSubscriber = {
|
|
@@ -6418,11 +7510,12 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6418
7510
|
this.updateInspectorMetadataProjection(inspectorMetadata);
|
|
6419
7511
|
this.requestUpdate();
|
|
6420
7512
|
} } : {},
|
|
6421
|
-
onError: ({ code, error }) => {
|
|
7513
|
+
onError: ({ code, error, context }) => {
|
|
6422
7514
|
this.lastCoreError = {
|
|
6423
7515
|
code,
|
|
6424
7516
|
message: error.message
|
|
6425
7517
|
};
|
|
7518
|
+
this.armEventErrorFromCode(code, error.message, context);
|
|
6426
7519
|
this.requestUpdate();
|
|
6427
7520
|
},
|
|
6428
7521
|
onAgentsChanged: ({ agents }) => {
|
|
@@ -6515,6 +7608,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6515
7608
|
}),
|
|
6516
7609
|
memoryStore.select(_copilotkit_core.ɵselectMemoriesError).subscribe((v) => {
|
|
6517
7610
|
this._memoriesError = v;
|
|
7611
|
+
if (v) this.armEventError("memory", v.message);
|
|
6518
7612
|
this.requestUpdate();
|
|
6519
7613
|
}),
|
|
6520
7614
|
memoryStore.select(_copilotkit_core.ɵselectMemoriesAvailable).subscribe((v) => {
|
|
@@ -6603,10 +7697,12 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6603
7697
|
this._recallQuery = "";
|
|
6604
7698
|
this.coreSubscriber = null;
|
|
6605
7699
|
this.runtimeStatus = null;
|
|
7700
|
+
this.cancelThreadRefreshDebounce();
|
|
6606
7701
|
this.inspectorMetadataValue = void 0;
|
|
6607
7702
|
this.inspectorMetadataProjection = projectInspectorMetadata(void 0, void 0);
|
|
6608
7703
|
this.metadataTelemetryFingerprints.clear();
|
|
6609
7704
|
this.lastCoreError = null;
|
|
7705
|
+
this.clearAllEventErrors();
|
|
6610
7706
|
this.coreProperties = {};
|
|
6611
7707
|
this.cachedTools = [];
|
|
6612
7708
|
this.toolSignature = "";
|
|
@@ -6933,6 +8029,19 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6933
8029
|
this.persistState();
|
|
6934
8030
|
this.requestUpdate();
|
|
6935
8031
|
}
|
|
8032
|
+
focusEventSnippets(options) {
|
|
8033
|
+
this.pendingPersistedMenu = null;
|
|
8034
|
+
this.selectedMenu = "event-snippets";
|
|
8035
|
+
this.settingsOpen = false;
|
|
8036
|
+
this.lastSelectedMenuByGroup.inspect = "event-snippets";
|
|
8037
|
+
this.contextMenuOpen = false;
|
|
8038
|
+
this.layoutMenuOpen = false;
|
|
8039
|
+
this.reloadEventSnippets();
|
|
8040
|
+
if (options.snippetId) this.selectEventSnippet(options.snippetId);
|
|
8041
|
+
if (options.agentId && this.contextOptions.some((option) => option.key === options.agentId)) this.selectedContext = options.agentId;
|
|
8042
|
+
this.persistState();
|
|
8043
|
+
this.requestUpdate();
|
|
8044
|
+
}
|
|
6936
8045
|
filterEvents(events) {
|
|
6937
8046
|
const query = this.eventFilterText.trim().toLowerCase();
|
|
6938
8047
|
return events.filter((event) => {
|
|
@@ -6985,6 +8094,7 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6985
8094
|
}
|
|
6986
8095
|
renderToolCallDetails(toolCalls) {
|
|
6987
8096
|
if (!Array.isArray(toolCalls) || toolCalls.length === 0) return lit.nothing;
|
|
8097
|
+
const toolError = this.eventErrorDetails.tool;
|
|
6988
8098
|
return lit.html`
|
|
6989
8099
|
<div class="mt-2 space-y-2">
|
|
6990
8100
|
${toolCalls.map((call, index) => {
|
|
@@ -6992,16 +8102,21 @@ ${(0, lit_directives_unsafe_html_js.unsafeHTML)(highlightedJson((_event$rawEvent
|
|
|
6992
8102
|
const functionName = (_ref9 = (_call$function$name = (_call$function = call.function) === null || _call$function === void 0 ? void 0 : _call$function.name) !== null && _call$function$name !== void 0 ? _call$function$name : call.toolName) !== null && _ref9 !== void 0 ? _ref9 : "Unknown function";
|
|
6993
8103
|
const callId = typeof (call === null || call === void 0 ? void 0 : call.id) === "string" ? call.id : `tool-call-${index + 1}`;
|
|
6994
8104
|
const argsString = this.formatToolCallArguments((_call$function2 = call.function) === null || _call$function2 === void 0 ? void 0 : _call$function2.arguments);
|
|
8105
|
+
const isFailedCall = (toolError === null || toolError === void 0 ? void 0 : toolError.toolCallId) !== void 0 && toolError.toolCallId === callId;
|
|
6995
8106
|
return lit.html`
|
|
6996
8107
|
<div
|
|
6997
|
-
class
|
|
8108
|
+
class=${isFailedCall ? "rounded-md border border-rose-300 bg-rose-50 p-3 text-xs text-gray-900" : "rounded-md border border-gray-200 bg-gray-50 p-3 text-xs text-gray-700"}
|
|
8109
|
+
data-cpk-failed-tool-call=${isFailedCall ? callId : void 0}
|
|
6998
8110
|
>
|
|
6999
8111
|
<div
|
|
7000
8112
|
class="flex flex-wrap items-center justify-between gap-1 font-medium text-gray-900"
|
|
7001
8113
|
>
|
|
7002
|
-
<span>${functionName}</span>
|
|
7003
|
-
<span class="text-[10px] text-gray-
|
|
8114
|
+
<span>${functionName}${isFailedCall ? " failed" : ""}</span>
|
|
8115
|
+
<span class="text-[10px] text-gray-600">ID: ${callId}</span>
|
|
7004
8116
|
</div>
|
|
8117
|
+
${isFailedCall && (toolError === null || toolError === void 0 ? void 0 : toolError.message) ? lit.html`<p class="mt-2 break-words leading-relaxed text-gray-800">
|
|
8118
|
+
${toolError.message}
|
|
8119
|
+
</p>` : lit.nothing}
|
|
7005
8120
|
${argsString ? lit.html`<pre
|
|
7006
8121
|
class="mt-2 overflow-auto rounded bg-white p-2 text-[11px] leading-relaxed text-gray-800"
|
|
7007
8122
|
>
|
|
@@ -7132,6 +8247,7 @@ ${argsString}</pre
|
|
|
7132
8247
|
clearLegacyAnnouncementReadState();
|
|
7133
8248
|
this.tryAutoAttachCore();
|
|
7134
8249
|
this.ensureAnnouncementLoading();
|
|
8250
|
+
this.subscribeToInspectorThreadBridge();
|
|
7135
8251
|
}
|
|
7136
8252
|
this.requestUpdate();
|
|
7137
8253
|
}
|
|
@@ -7154,13 +8270,16 @@ ${argsString}</pre
|
|
|
7154
8270
|
clearTimeout(this.transitionTimeoutId);
|
|
7155
8271
|
this.transitionTimeoutId = null;
|
|
7156
8272
|
}
|
|
8273
|
+
this.unsubscribeFromInspectorThreadBridge();
|
|
7157
8274
|
this.threadsSetupPromptCopyGeneration += 1;
|
|
7158
8275
|
if (this.threadsSetupPromptCopyResetTimeoutId !== null) {
|
|
7159
8276
|
window.clearTimeout(this.threadsSetupPromptCopyResetTimeoutId);
|
|
7160
8277
|
this.threadsSetupPromptCopyResetTimeoutId = null;
|
|
7161
8278
|
}
|
|
7162
8279
|
this.threadsSetupPromptCopyState = "idle";
|
|
7163
|
-
this.
|
|
8280
|
+
this.stopSignalPulse();
|
|
8281
|
+
this.cancelGestureTail();
|
|
8282
|
+
this.cancelThreadRefreshDebounce();
|
|
7164
8283
|
this.clearInspectorUsageRefresh();
|
|
7165
8284
|
this.cleanupThreadsExampleOverviewVideo();
|
|
7166
8285
|
this.removeDockStyles(true);
|
|
@@ -7203,6 +8322,7 @@ ${argsString}</pre
|
|
|
7203
8322
|
` : this.renderButton();
|
|
7204
8323
|
}
|
|
7205
8324
|
willUpdate() {
|
|
8325
|
+
this.evaluateErrorSignals();
|
|
7206
8326
|
this.reconcileSelectedMenuVisibility();
|
|
7207
8327
|
if (this.isOpen && this.dockMode === "docked-left") this.setAttribute("data-docked", "true");
|
|
7208
8328
|
else this.removeAttribute("data-docked");
|
|
@@ -7212,7 +8332,11 @@ ${argsString}</pre
|
|
|
7212
8332
|
this.syncThreadsExampleOverviewVideo();
|
|
7213
8333
|
this.maybeTrackInspectorMetadataViews();
|
|
7214
8334
|
this.maybeTrackNewsSignalViewed();
|
|
8335
|
+
this.resolvePillDirection();
|
|
8336
|
+
this.maybeTrackErrorSignalViewed();
|
|
7215
8337
|
this.maybeCompleteWhatsNewView();
|
|
8338
|
+
this.maybeCompleteEventErrorView();
|
|
8339
|
+
this.flushErrorLandingScroll();
|
|
7216
8340
|
this.maybeTrackHomeViewed();
|
|
7217
8341
|
if (!this.isOpen) {
|
|
7218
8342
|
this.lastScrolledAgentNavigationLayout = null;
|
|
@@ -7238,6 +8362,7 @@ ${argsString}</pre
|
|
|
7238
8362
|
this.lastScrolledAgentNavigationLayout = layoutKey;
|
|
7239
8363
|
}
|
|
7240
8364
|
renderButton() {
|
|
8365
|
+
var _this$getGestureLabel;
|
|
7241
8366
|
const buttonClasses = [
|
|
7242
8367
|
"console-button",
|
|
7243
8368
|
"group",
|
|
@@ -7270,20 +8395,33 @@ ${argsString}</pre
|
|
|
7270
8395
|
"select-none",
|
|
7271
8396
|
this.isDragging ? "cursor-grabbing" : "cursor-pointer"
|
|
7272
8397
|
].join(" ");
|
|
7273
|
-
const
|
|
7274
|
-
|
|
7275
|
-
|
|
8398
|
+
const activeSignal = this.getActiveLauncherSignal();
|
|
8399
|
+
const signal = activeSignal ? LAUNCHER_SIGNALS[activeSignal] : null;
|
|
8400
|
+
const signalStyles = signal ? {
|
|
8401
|
+
"--cpk-launcher-signal": LAUNCHER_SIGNAL_COLORS[signal.tone],
|
|
8402
|
+
"--cpk-launcher-cadence": `${signal.cadence}ms`
|
|
7276
8403
|
} : {};
|
|
7277
8404
|
return lit.html`
|
|
7278
|
-
<div
|
|
8405
|
+
<div
|
|
8406
|
+
class="console-button-wrapper"
|
|
8407
|
+
data-cpk-hud=${this.launcherHudOpen ? "open" : "closed"}
|
|
8408
|
+
@pointerenter=${this.handleLauncherHudEnter}
|
|
8409
|
+
@pointerleave=${this.handleLauncherHudLeave}
|
|
8410
|
+
@focusin=${this.handleLauncherHudFocusIn}
|
|
8411
|
+
@focusout=${this.handleLauncherHudFocusOut}
|
|
8412
|
+
@keydown=${this.handleLauncherHudKeydown}
|
|
8413
|
+
>
|
|
8414
|
+
${this.renderLauncherPill()}
|
|
7279
8415
|
<button
|
|
7280
8416
|
class=${buttonClasses}
|
|
7281
8417
|
type="button"
|
|
7282
|
-
aria-
|
|
7283
|
-
|
|
8418
|
+
aria-expanded=${this.launcherHudOpen ? "true" : "false"}
|
|
8419
|
+
aria-controls=${this.launcherHudOpen ? "cpk-launcher-hud" : lit.nothing}
|
|
8420
|
+
aria-label=${signal && signal.tone === "error" ? `${LAUNCHER_BASE_LABEL}, ${signal.accessibleLabel}` : LAUNCHER_BASE_LABEL}
|
|
8421
|
+
title=${activeSignal === NEWS_SIGNAL_ID ? `${WHATS_NEW_VIEW_LABEL} — unread` : lit.nothing}
|
|
7284
8422
|
data-drag-context="button"
|
|
7285
|
-
data-cpk-signal=${
|
|
7286
|
-
data-cpk-signal-pulsing=${
|
|
8423
|
+
data-cpk-signal=${signal ? signal.tone : lit.nothing}
|
|
8424
|
+
data-cpk-signal-pulsing=${activeSignal !== null && this.pulsingSignal === activeSignal ? "true" : lit.nothing}
|
|
7287
8425
|
style=${(0, lit_directives_style_map_js.styleMap)(signalStyles)}
|
|
7288
8426
|
data-dragging=${this.isDragging && this.pointerContext === "button" ? "true" : "false"}
|
|
7289
8427
|
@pointerdown=${this.handlePointerDown}
|
|
@@ -7298,16 +8436,213 @@ ${argsString}</pre
|
|
|
7298
8436
|
class="cpk-launcher-mark h-6 w-auto"
|
|
7299
8437
|
loading="lazy"
|
|
7300
8438
|
/>
|
|
7301
|
-
${
|
|
8439
|
+
${activeSignal !== null ? lit.html`<span
|
|
7302
8440
|
class="cpk-launcher-signal-wash"
|
|
7303
8441
|
aria-hidden="true"
|
|
7304
8442
|
></span>
|
|
7305
8443
|
<span
|
|
7306
8444
|
class="cpk-launcher-signal-dot"
|
|
7307
|
-
data-cpk-signal-dot=${
|
|
8445
|
+
data-cpk-signal-dot=${activeSignal}
|
|
7308
8446
|
aria-hidden="true"
|
|
7309
8447
|
></span>` : lit.nothing}
|
|
7310
8448
|
</button>
|
|
8449
|
+
${lit.html`<span
|
|
8450
|
+
class="sr-only"
|
|
8451
|
+
data-cpk-launcher-announcement
|
|
8452
|
+
role="status"
|
|
8453
|
+
aria-live="polite"
|
|
8454
|
+
>${(_this$getGestureLabel = this.getGestureLabel()) !== null && _this$getGestureLabel !== void 0 ? _this$getGestureLabel : ""}</span
|
|
8455
|
+
>`}
|
|
8456
|
+
${this.renderLauncherHud()}
|
|
8457
|
+
</div>
|
|
8458
|
+
`;
|
|
8459
|
+
}
|
|
8460
|
+
/**
|
|
8461
|
+
* The words the running gesture carries, or null when the launcher is quiet.
|
|
8462
|
+
*
|
|
8463
|
+
* Read from the signal's own description rather than from a condition on the
|
|
8464
|
+
* tone, so a third signal can carry a pill by declaring a label.
|
|
8465
|
+
*/
|
|
8466
|
+
getGestureLabel() {
|
|
8467
|
+
var _LAUNCHER_SIGNALS$thi;
|
|
8468
|
+
if (this.gestureSignal === null) return null;
|
|
8469
|
+
return (_LAUNCHER_SIGNALS$thi = LAUNCHER_SIGNALS[this.gestureSignal].pillLabel) !== null && _LAUNCHER_SIGNALS$thi !== void 0 ? _LAUNCHER_SIGNALS$thi : null;
|
|
8470
|
+
}
|
|
8471
|
+
/**
|
|
8472
|
+
* The pill, laid out at its full width and clipped, for the whole gesture.
|
|
8473
|
+
*
|
|
8474
|
+
* It renders from the first frame of the beat — clipped to nothing, so it
|
|
8475
|
+
* shows nothing — because the room it needs cannot be measured until it has
|
|
8476
|
+
* been laid out, and the direction is decided at gesture start.
|
|
8477
|
+
*/
|
|
8478
|
+
renderLauncherPill() {
|
|
8479
|
+
var _this$pillDirection;
|
|
8480
|
+
const key = this.gestureSignal;
|
|
8481
|
+
if (key === null || this.pillPhase === null) return lit.nothing;
|
|
8482
|
+
const signal = LAUNCHER_SIGNALS[key];
|
|
8483
|
+
const label = signal.pillLabel;
|
|
8484
|
+
if (label === void 0) return lit.nothing;
|
|
8485
|
+
return lit.html`
|
|
8486
|
+
<span
|
|
8487
|
+
class="cpk-launcher-pill"
|
|
8488
|
+
data-cpk-launcher-pill=${key}
|
|
8489
|
+
data-cpk-pill-phase=${this.pillPhase}
|
|
8490
|
+
data-cpk-pill-direction=${(_this$pillDirection = this.pillDirection) !== null && _this$pillDirection !== void 0 ? _this$pillDirection : "left"}
|
|
8491
|
+
style=${(0, lit_directives_style_map_js.styleMap)({
|
|
8492
|
+
"--cpk-launcher-signal": LAUNCHER_SIGNAL_COLORS[signal.tone],
|
|
8493
|
+
"--cpk-launcher-pill-open": `${ERROR_GESTURE_MS.open}ms`,
|
|
8494
|
+
"--cpk-launcher-pill-close": `${ERROR_GESTURE_MS.close}ms`
|
|
8495
|
+
})}
|
|
8496
|
+
aria-hidden="true"
|
|
8497
|
+
@click=${this.handlePillClick}
|
|
8498
|
+
>
|
|
8499
|
+
<span class="cpk-launcher-pill__heading" data-cpk-pill-heading
|
|
8500
|
+
>${label}</span
|
|
8501
|
+
>
|
|
8502
|
+
<span class="cpk-launcher-pill__subline" data-cpk-pill-subline
|
|
8503
|
+
>${PILL_SUBLINE_LABEL}</span
|
|
8504
|
+
>
|
|
8505
|
+
</span>
|
|
8506
|
+
`;
|
|
8507
|
+
}
|
|
8508
|
+
isLauncherHudBlocked() {
|
|
8509
|
+
return this.gestureSignal !== null;
|
|
8510
|
+
}
|
|
8511
|
+
resolveLauncherHudSide() {
|
|
8512
|
+
if (typeof window === "undefined") {
|
|
8513
|
+
this.launcherHudSide = "left";
|
|
8514
|
+
return;
|
|
8515
|
+
}
|
|
8516
|
+
const button = this.activeRoot.querySelector(".console-button");
|
|
8517
|
+
if (!button) {
|
|
8518
|
+
this.launcherHudSide = "left";
|
|
8519
|
+
return;
|
|
8520
|
+
}
|
|
8521
|
+
if (button.getBoundingClientRect().left - LAUNCHER_HUD_WIDTH >= EDGE_MARGIN) {
|
|
8522
|
+
this.launcherHudSide = "left";
|
|
8523
|
+
return;
|
|
8524
|
+
}
|
|
8525
|
+
this.launcherHudSide = "right";
|
|
8526
|
+
}
|
|
8527
|
+
openLauncherHud() {
|
|
8528
|
+
if (this.isLauncherHudBlocked() || this.isOpen) return;
|
|
8529
|
+
this.resolveLauncherHudSide();
|
|
8530
|
+
if (this.launcherHudCloseTimer !== null) {
|
|
8531
|
+
clearTimeout(this.launcherHudCloseTimer);
|
|
8532
|
+
this.launcherHudCloseTimer = null;
|
|
8533
|
+
}
|
|
8534
|
+
if (this.launcherHudOpen) return;
|
|
8535
|
+
this.launcherHudOpen = true;
|
|
8536
|
+
this.requestUpdate();
|
|
8537
|
+
}
|
|
8538
|
+
closeLauncherHud() {
|
|
8539
|
+
if (this.launcherHudCloseTimer !== null) {
|
|
8540
|
+
clearTimeout(this.launcherHudCloseTimer);
|
|
8541
|
+
this.launcherHudCloseTimer = null;
|
|
8542
|
+
}
|
|
8543
|
+
if (!this.launcherHudOpen && this.launcherHudHelp === null) return;
|
|
8544
|
+
this.launcherHudOpen = false;
|
|
8545
|
+
this.launcherHudHelp = null;
|
|
8546
|
+
this.requestUpdate();
|
|
8547
|
+
}
|
|
8548
|
+
renderHudCheck() {
|
|
8549
|
+
return lit.html`
|
|
8550
|
+
<svg
|
|
8551
|
+
class="cpk-launcher-hud__check"
|
|
8552
|
+
viewBox="0 0 16 16"
|
|
8553
|
+
aria-hidden="true"
|
|
8554
|
+
focusable="false"
|
|
8555
|
+
data-cpk-hud-check
|
|
8556
|
+
>
|
|
8557
|
+
<path
|
|
8558
|
+
fill="none"
|
|
8559
|
+
stroke="currentColor"
|
|
8560
|
+
stroke-width="2"
|
|
8561
|
+
stroke-linecap="round"
|
|
8562
|
+
stroke-linejoin="round"
|
|
8563
|
+
d="M3 8.5 6.5 12 13 4.5"
|
|
8564
|
+
/>
|
|
8565
|
+
</svg>
|
|
8566
|
+
`;
|
|
8567
|
+
}
|
|
8568
|
+
renderHudRow(args) {
|
|
8569
|
+
const helpOpen = this.launcherHudHelp === args.id;
|
|
8570
|
+
const detailId = `cpk-hud-detail-${args.id}`;
|
|
8571
|
+
return lit.html`
|
|
8572
|
+
<li
|
|
8573
|
+
class="cpk-launcher-hud__row"
|
|
8574
|
+
data-cpk-hud-row=${args.id}
|
|
8575
|
+
data-cpk-hud-help=${helpOpen ? "open" : lit.nothing}
|
|
8576
|
+
@click=${(event) => this.handleHudRowClick(event, args.id)}
|
|
8577
|
+
>
|
|
8578
|
+
<button
|
|
8579
|
+
type="button"
|
|
8580
|
+
class="cpk-launcher-hud__action"
|
|
8581
|
+
data-cpk-hud-action
|
|
8582
|
+
aria-describedby=${detailId}
|
|
8583
|
+
@click=${(event) => this.handleHudActionClick(event, args.id)}
|
|
8584
|
+
@pointerdown=${(event) => event.stopPropagation()}
|
|
8585
|
+
>
|
|
8586
|
+
${args.connected ? this.renderHudCheck() : lit.nothing}${args.label}
|
|
8587
|
+
</button>
|
|
8588
|
+
<button
|
|
8589
|
+
type="button"
|
|
8590
|
+
class="cpk-launcher-hud__help"
|
|
8591
|
+
aria-expanded=${helpOpen ? "true" : "false"}
|
|
8592
|
+
aria-controls=${detailId}
|
|
8593
|
+
aria-label=${`About ${args.label}`}
|
|
8594
|
+
@click=${(event) => this.handleHudHelpClick(event, args.id)}
|
|
8595
|
+
@pointerdown=${(event) => event.stopPropagation()}
|
|
8596
|
+
>
|
|
8597
|
+
<span aria-hidden="true">?</span>
|
|
8598
|
+
</button>
|
|
8599
|
+
<p class="cpk-launcher-hud__detail" id=${detailId}>${args.detail}</p>
|
|
8600
|
+
</li>
|
|
8601
|
+
`;
|
|
8602
|
+
}
|
|
8603
|
+
renderLauncherHud() {
|
|
8604
|
+
var _this$_core6;
|
|
8605
|
+
if (!this.launcherHudOpen) return lit.nothing;
|
|
8606
|
+
const threadsOn = this.areThreadEndpointsAvailable();
|
|
8607
|
+
const intelligenceOn = Boolean((_this$_core6 = this._core) === null || _this$_core6 === void 0 ? void 0 : _this$_core6.intelligence);
|
|
8608
|
+
const learningOn = intelligenceOn && this._memoriesAvailable;
|
|
8609
|
+
return lit.html`
|
|
8610
|
+
<div
|
|
8611
|
+
class="cpk-launcher-hud"
|
|
8612
|
+
id="cpk-launcher-hud"
|
|
8613
|
+
data-cpk-launcher-hud
|
|
8614
|
+
data-cpk-hud-side=${this.launcherHudSide}
|
|
8615
|
+
>
|
|
8616
|
+
<div class="cpk-launcher-hud__card">
|
|
8617
|
+
<span class="cpk-launcher-hud__arrow" aria-hidden="true"></span>
|
|
8618
|
+
<ul class="cpk-launcher-hud__list" role="list">
|
|
8619
|
+
${this.renderHudRow({
|
|
8620
|
+
id: "inspector",
|
|
8621
|
+
label: HUD_OPEN_INSPECTOR_LABEL,
|
|
8622
|
+
detail: HUD_OPEN_INSPECTOR_DETAIL
|
|
8623
|
+
})}
|
|
8624
|
+
</ul>
|
|
8625
|
+
<ul class="cpk-launcher-hud__list" role="list">
|
|
8626
|
+
${this.renderHudRow({
|
|
8627
|
+
id: "threads",
|
|
8628
|
+
label: threadsOn ? HUD_THREADS_ON_LABEL : HUD_THREADS_OFF_LABEL,
|
|
8629
|
+
detail: threadsOn ? HUD_THREADS_ON_DETAIL : HUD_THREADS_OFF_DETAIL,
|
|
8630
|
+
connected: threadsOn
|
|
8631
|
+
})}
|
|
8632
|
+
${this.renderHudRow({
|
|
8633
|
+
id: "intelligence",
|
|
8634
|
+
label: intelligenceOn ? HUD_INTELLIGENCE_ON_LABEL : HUD_INTELLIGENCE_OFF_LABEL,
|
|
8635
|
+
detail: intelligenceOn ? HUD_INTELLIGENCE_ON_DETAIL : HUD_INTELLIGENCE_OFF_DETAIL,
|
|
8636
|
+
connected: intelligenceOn
|
|
8637
|
+
})}
|
|
8638
|
+
${this.renderHudRow({
|
|
8639
|
+
id: "learning",
|
|
8640
|
+
label: learningOn ? HUD_LEARNING_ON_LABEL : HUD_LEARNING_OFF_LABEL,
|
|
8641
|
+
detail: learningOn ? HUD_LEARNING_ON_DETAIL : HUD_LEARNING_OFF_DETAIL,
|
|
8642
|
+
connected: learningOn
|
|
8643
|
+
})}
|
|
8644
|
+
</ul>
|
|
8645
|
+
</div>
|
|
7311
8646
|
</div>
|
|
7312
8647
|
`;
|
|
7313
8648
|
}
|
|
@@ -7330,7 +8665,6 @@ ${argsString}</pre
|
|
|
7330
8665
|
`;
|
|
7331
8666
|
}
|
|
7332
8667
|
renderInspectorSidebar(iconRail, automaticallyCollapsed, agentSelector) {
|
|
7333
|
-
const unread = this.newsSignalArmed && this.announcementLoaded;
|
|
7334
8668
|
const homeModel = this.getHomeModel();
|
|
7335
8669
|
return lit.html`
|
|
7336
8670
|
<aside
|
|
@@ -7372,7 +8706,7 @@ ${argsString}</pre
|
|
|
7372
8706
|
</button>` : lit.nothing}
|
|
7373
8707
|
${items.map((item) => {
|
|
7374
8708
|
const isSelected = this.selectedMenu === item.key;
|
|
7375
|
-
const
|
|
8709
|
+
const marker = this.getNavigationSignalFor(item.key);
|
|
7376
8710
|
return lit.html`
|
|
7377
8711
|
<button
|
|
7378
8712
|
type="button"
|
|
@@ -7380,7 +8714,7 @@ ${argsString}</pre
|
|
|
7380
8714
|
data-inspector-group=${group}
|
|
7381
8715
|
data-inspector-menu-key=${item.key}
|
|
7382
8716
|
aria-current=${isSelected ? "page" : lit.nothing}
|
|
7383
|
-
aria-label=${
|
|
8717
|
+
aria-label=${marker ? `${item.label}, ${marker.accessibleLabel}` : item.label}
|
|
7384
8718
|
data-inspector-tooltip=${item.label}
|
|
7385
8719
|
title=${iconRail ? lit.nothing : item.label}
|
|
7386
8720
|
style=${INTERACTIVE_FOCUS_BASE_STYLE}
|
|
@@ -7394,8 +8728,12 @@ ${argsString}</pre
|
|
|
7394
8728
|
${item.key === "threads" ? (0, lit_directives_unsafe_html_js.unsafeHTML)(this.customTabIcons.threads) : this.renderIcon(item.icon)}
|
|
7395
8729
|
</span>
|
|
7396
8730
|
<span class="inspector-nav-label">${item.label}</span>
|
|
7397
|
-
${
|
|
7398
|
-
<span
|
|
8731
|
+
${marker ? lit.html`
|
|
8732
|
+
<span
|
|
8733
|
+
class="inspector-nav-signal-dot"
|
|
8734
|
+
data-cpk-signal-tone=${marker.tone}
|
|
8735
|
+
aria-hidden="true"
|
|
8736
|
+
></span>
|
|
7399
8737
|
` : lit.nothing}
|
|
7400
8738
|
</button>
|
|
7401
8739
|
`;
|
|
@@ -7513,13 +8851,13 @@ ${argsString}</pre
|
|
|
7513
8851
|
`;
|
|
7514
8852
|
}
|
|
7515
8853
|
getHomeModel() {
|
|
7516
|
-
var _this$
|
|
8854
|
+
var _this$_core7, _this$_core8, _this$_core9, _this$_core10, _this$_core11, _this$_core12, _this$_core13, _this$announcementPre, _this$announcementMar, _this$announcementHtm;
|
|
7517
8855
|
const lastRuntimeEvent = this.flattenedEvents[0];
|
|
7518
8856
|
return buildHomeModel({
|
|
7519
|
-
intelligenceConnected: Boolean((_this$
|
|
8857
|
+
intelligenceConnected: Boolean((_this$_core7 = this._core) === null || _this$_core7 === void 0 ? void 0 : _this$_core7.intelligence),
|
|
7520
8858
|
threadsAvailable: this.areThreadEndpointsAvailable(),
|
|
7521
8859
|
metadata: this.inspectorMetadataProjection,
|
|
7522
|
-
runtimeUrl: (_this$
|
|
8860
|
+
runtimeUrl: (_this$_core8 = this._core) === null || _this$_core8 === void 0 ? void 0 : _this$_core8.runtimeUrl,
|
|
7523
8861
|
runtimeConnectionState: this.getCoreStatusSummary().state,
|
|
7524
8862
|
lastRuntimeEvent: lastRuntimeEvent ? {
|
|
7525
8863
|
id: lastRuntimeEvent.id,
|
|
@@ -7528,11 +8866,11 @@ ${argsString}</pre
|
|
|
7528
8866
|
timestamp: lastRuntimeEvent.timestamp
|
|
7529
8867
|
} : void 0,
|
|
7530
8868
|
memoriesOn: this._memoriesAvailable,
|
|
7531
|
-
a2uiOn: ((_this$
|
|
7532
|
-
openGenUiOn: ((_this$
|
|
7533
|
-
suggestionsOn: ((_this$
|
|
7534
|
-
audioOn: ((_this$
|
|
7535
|
-
websocketUrl: (_this$
|
|
8869
|
+
a2uiOn: ((_this$_core9 = this._core) === null || _this$_core9 === void 0 ? void 0 : _this$_core9.a2uiEnabled) === true,
|
|
8870
|
+
openGenUiOn: ((_this$_core10 = this._core) === null || _this$_core10 === void 0 ? void 0 : _this$_core10.openGenerativeUIEnabled) === true,
|
|
8871
|
+
suggestionsOn: ((_this$_core11 = this._core) === null || _this$_core11 === void 0 ? void 0 : _this$_core11.suggestions) === true,
|
|
8872
|
+
audioOn: ((_this$_core12 = this._core) === null || _this$_core12 === void 0 ? void 0 : _this$_core12.audioFileTranscriptionEnabled) === true,
|
|
8873
|
+
websocketUrl: (_this$_core13 = this._core) === null || _this$_core13 === void 0 || (_this$_core13 = _this$_core13.intelligence) === null || _this$_core13 === void 0 ? void 0 : _this$_core13.wsUrl,
|
|
7536
8874
|
announcementPreviewText: (_this$announcementPre = this.announcementPreviewText) !== null && _this$announcementPre !== void 0 ? _this$announcementPre : void 0,
|
|
7537
8875
|
announcementMarkdown: (_this$announcementMar = this.announcementMarkdown) !== null && _this$announcementMar !== void 0 ? _this$announcementMar : void 0,
|
|
7538
8876
|
announcementHtml: (_this$announcementHtm = this.announcementHtml) !== null && _this$announcementHtm !== void 0 ? _this$announcementHtm : void 0,
|
|
@@ -7876,6 +9214,31 @@ ${argsString}</pre
|
|
|
7876
9214
|
})}
|
|
7877
9215
|
</dl>
|
|
7878
9216
|
</section>
|
|
9217
|
+
`;
|
|
9218
|
+
}
|
|
9219
|
+
renderEventErrorBanner(key) {
|
|
9220
|
+
const error = this.eventErrorDetails[key];
|
|
9221
|
+
if (!error) return lit.nothing;
|
|
9222
|
+
const guide = EVENT_ERROR_GUIDANCE[key];
|
|
9223
|
+
return lit.html`
|
|
9224
|
+
<div
|
|
9225
|
+
class="mx-3 mt-3 flex cursor-pointer items-start gap-2 rounded-lg border border-rose-200 bg-rose-50 px-3 py-2 text-left text-[11px] text-rose-950"
|
|
9226
|
+
role="alert"
|
|
9227
|
+
tabindex="0"
|
|
9228
|
+
data-cpk-event-error=${key}
|
|
9229
|
+
@click=${this.refocusEventErrorLanding}
|
|
9230
|
+
@keydown=${this.handleEventErrorBannerKeydown}
|
|
9231
|
+
>
|
|
9232
|
+
<span class="mt-0.5 shrink-0">${this.renderIcon("TriangleAlert")}</span>
|
|
9233
|
+
<div class="min-w-0 flex-1 space-y-1">
|
|
9234
|
+
<p class="font-semibold">${guide.title}</p>
|
|
9235
|
+
${error.agentId ? lit.html`<p>Agent: ${error.agentId}</p>` : lit.nothing}
|
|
9236
|
+
${error.toolName ? lit.html`<p>Tool: ${error.toolName}</p>` : lit.nothing}
|
|
9237
|
+
<p class="break-words leading-relaxed">${error.message}</p>
|
|
9238
|
+
${guide.advice ? lit.html`<p class="leading-relaxed">${guide.advice}</p>` : lit.nothing}
|
|
9239
|
+
${guide.highlight && this.hasEventErrorHighlight(key) ? lit.html`<p class="leading-relaxed">${guide.highlight}</p>` : lit.nothing}
|
|
9240
|
+
</div>
|
|
9241
|
+
</div>
|
|
7879
9242
|
`;
|
|
7880
9243
|
}
|
|
7881
9244
|
handleHomeLastEventSelect(eventId, agentId) {
|
|
@@ -8608,21 +9971,34 @@ ${argsString}</pre
|
|
|
8608
9971
|
this.draggedDuringInteraction = false;
|
|
8609
9972
|
}
|
|
8610
9973
|
openInspector(source, options = {}) {
|
|
8611
|
-
if (options.
|
|
9974
|
+
if (options.snippetId || options.menu === "event-snippets") this.focusEventSnippets(options);
|
|
9975
|
+
else if (options.threadId) this.focusThread(options);
|
|
8612
9976
|
if (this.isPoppedOut) return;
|
|
8613
9977
|
if (this.isOpen) return;
|
|
8614
9978
|
const hadUnseenAnnouncement = this.newsSignalArmed;
|
|
9979
|
+
const activeSignalAtOpen = this.getActiveLauncherSignal();
|
|
8615
9980
|
const firstOpen = !this.hasOpenedInspector;
|
|
8616
9981
|
this.hasOpenedInspector = true;
|
|
8617
9982
|
this.homeViewedThisOpen = false;
|
|
8618
|
-
|
|
8619
|
-
|
|
8620
|
-
|
|
9983
|
+
this.closeLauncherHud();
|
|
9984
|
+
const hudMenu = this.hudLandingMenu;
|
|
9985
|
+
this.hudLandingMenu = null;
|
|
9986
|
+
if (hudMenu) {
|
|
9987
|
+
this.selectedMenu = hudMenu;
|
|
9988
|
+
this.lastSelectedMenuByGroup[getGroupForMenu(hudMenu)] = hudMenu;
|
|
9989
|
+
} else if (activeSignalAtOpen !== null && source === "floating_button") {
|
|
9990
|
+
const landing = LAUNCHER_SIGNALS[activeSignalAtOpen].landingTarget;
|
|
9991
|
+
this.selectedMenu = landing;
|
|
9992
|
+
this.lastSelectedMenuByGroup[getGroupForMenu(landing)] = landing;
|
|
9993
|
+
if (landing === "agents" || landing === "ag-ui-events") {
|
|
9994
|
+
if (isEventErrorKey(activeSignalAtOpen)) this.applyEventErrorLanding(activeSignalAtOpen);
|
|
9995
|
+
}
|
|
8621
9996
|
}
|
|
8622
9997
|
this.ensureAnnouncementLoading();
|
|
8623
9998
|
this.isOpen = true;
|
|
9999
|
+
this.cancelGestureTail();
|
|
8624
10000
|
this.persistState();
|
|
8625
|
-
this.trackOpened(source, hadUnseenAnnouncement, firstOpen);
|
|
10001
|
+
this.trackOpened(source, hadUnseenAnnouncement, firstOpen, activeSignalAtOpen);
|
|
8626
10002
|
if (this.dockMode !== "floating") this.applyDockStyles();
|
|
8627
10003
|
this.ensureWindowPlacement();
|
|
8628
10004
|
this.requestUpdate();
|
|
@@ -8637,7 +10013,6 @@ ${argsString}</pre
|
|
|
8637
10013
|
if (this.isPoppedOut) return;
|
|
8638
10014
|
if (!this.isOpen) return;
|
|
8639
10015
|
this.isOpen = false;
|
|
8640
|
-
if (this.newsSignalPulsePending) this.startNewsSignalPulse();
|
|
8641
10016
|
if (this.dockMode !== "floating") this.removeDockStyles();
|
|
8642
10017
|
this.persistState();
|
|
8643
10018
|
this.updateHostTransform("button");
|
|
@@ -8645,6 +10020,7 @@ ${argsString}</pre
|
|
|
8645
10020
|
this.updateComplete.then(() => {
|
|
8646
10021
|
this.measureContext("button");
|
|
8647
10022
|
this.applyAnchorPosition("button");
|
|
10023
|
+
this.flushPendingSignalPulse();
|
|
8648
10024
|
});
|
|
8649
10025
|
}
|
|
8650
10026
|
renderIcon(name) {
|
|
@@ -8825,6 +10201,7 @@ ${argsString}</pre
|
|
|
8825
10201
|
contentText,
|
|
8826
10202
|
contentRaw: raw.content !== void 0 ? this.sanitizeForLogging(raw.content) : void 0,
|
|
8827
10203
|
toolCalls,
|
|
10204
|
+
toolCallId: typeof raw.toolCallId === "string" ? raw.toolCallId : void 0,
|
|
8828
10205
|
activityType: typeof raw.activityType === "string" ? raw.activityType : void 0
|
|
8829
10206
|
};
|
|
8830
10207
|
}
|
|
@@ -8897,8 +10274,8 @@ ${argsString}</pre
|
|
|
8897
10274
|
};
|
|
8898
10275
|
}
|
|
8899
10276
|
resolvePlaygroundAgentId(preferredAgentId) {
|
|
8900
|
-
var _this$_core$agents, _this$
|
|
8901
|
-
const agents = (_this$_core$agents = (_this$
|
|
10277
|
+
var _this$_core$agents, _this$_core14, _Object$keys$;
|
|
10278
|
+
const agents = (_this$_core$agents = (_this$_core14 = this._core) === null || _this$_core14 === void 0 ? void 0 : _this$_core14.agents) !== null && _this$_core$agents !== void 0 ? _this$_core$agents : {};
|
|
8902
10279
|
if (preferredAgentId && preferredAgentId !== "all-agents" && agents[preferredAgentId]) return preferredAgentId;
|
|
8903
10280
|
return (_Object$keys$ = Object.keys(agents)[0]) !== null && _Object$keys$ !== void 0 ? _Object$keys$ : null;
|
|
8904
10281
|
}
|
|
@@ -8927,13 +10304,13 @@ ${argsString}</pre
|
|
|
8927
10304
|
});
|
|
8928
10305
|
}
|
|
8929
10306
|
startPlaygroundSession(showEphemeralNotice, seedMessages = [], seedState = {}, preferredAgentId) {
|
|
8930
|
-
var _this$
|
|
10307
|
+
var _this$_core15, _this$_core16, _this$_core17;
|
|
8931
10308
|
const agentId = this.resolvePlaygroundAgentId(preferredAgentId !== null && preferredAgentId !== void 0 ? preferredAgentId : this.selectedContext);
|
|
8932
|
-
const sourceAgent = agentId ? typeof ((_this$
|
|
10309
|
+
const sourceAgent = agentId ? typeof ((_this$_core15 = this._core) === null || _this$_core15 === void 0 ? void 0 : _this$_core15.getAgent) === "function" ? this._core.getAgent(agentId) : (_this$_core16 = this._core) === null || _this$_core16 === void 0 ? void 0 : _this$_core16.agents[agentId] : void 0;
|
|
8933
10310
|
this.teardownPlaygroundAgent();
|
|
8934
10311
|
this.playgroundError = null;
|
|
8935
10312
|
this.playgroundSourceThreadId = null;
|
|
8936
|
-
this.playgroundShowEphemeralNotice = showEphemeralNotice && ((_this$
|
|
10313
|
+
this.playgroundShowEphemeralNotice = showEphemeralNotice && ((_this$_core17 = this._core) === null || _this$_core17 === void 0 ? void 0 : _this$_core17.runtimeMode) !== "intelligence";
|
|
8937
10314
|
if (!agentId || !sourceAgent) {
|
|
8938
10315
|
this.requestUpdate();
|
|
8939
10316
|
return;
|
|
@@ -9019,16 +10396,16 @@ ${argsString}</pre
|
|
|
9019
10396
|
@submit=${this.handlePlaygroundSubmit}
|
|
9020
10397
|
>
|
|
9021
10398
|
${this.playgroundError ? lit.html`<div
|
|
9022
|
-
class="mx-auto mb-2 flex max-w-3xl items-start gap-2 rounded-lg border border-rose-200 bg-rose-50 px-2.5 py-2 text-[10px] text-rose-
|
|
10399
|
+
class="mx-auto mb-2 flex max-w-3xl items-start gap-2 rounded-lg border border-rose-200 bg-rose-50 px-2.5 py-2 text-[10px] text-rose-950"
|
|
9023
10400
|
role="alert"
|
|
9024
10401
|
data-playground-error
|
|
9025
10402
|
>
|
|
9026
|
-
<span class="mt-0.5 shrink-0
|
|
10403
|
+
<span class="mt-0.5 shrink-0"
|
|
9027
10404
|
>${this.renderIcon("TriangleAlert")}</span
|
|
9028
10405
|
>
|
|
9029
10406
|
<div class="min-w-0 flex-1">
|
|
9030
10407
|
<p class="font-semibold">Agent run failed</p>
|
|
9031
|
-
<p class="mt-0.5 break-words leading-relaxed
|
|
10408
|
+
<p class="mt-0.5 break-words leading-relaxed">
|
|
9032
10409
|
${this.playgroundError}
|
|
9033
10410
|
</p>
|
|
9034
10411
|
</div>
|
|
@@ -9074,79 +10451,640 @@ ${argsString}</pre
|
|
|
9074
10451
|
</form>
|
|
9075
10452
|
`;
|
|
9076
10453
|
}
|
|
9077
|
-
|
|
9078
|
-
|
|
9079
|
-
if (this.selectedMenu === "home") return this.renderHomeView();
|
|
9080
|
-
if (this.selectedMenu === WHATS_NEW_MENU_KEY) return this.renderWhatsNewView();
|
|
9081
|
-
if (this.selectedMenu === "ag-ui-events") return this.renderEventsTable();
|
|
9082
|
-
if (this.selectedMenu === "playground") return this.renderPlaygroundView();
|
|
9083
|
-
if (this.selectedMenu === "agents") return this.renderAgentsView();
|
|
9084
|
-
if (this.selectedMenu === "frontend-tools") return this.renderToolsView();
|
|
9085
|
-
if (this.selectedMenu === "capabilities") return this.renderCapabilitiesView();
|
|
9086
|
-
if (this.selectedMenu === "agent-context") return this.renderContextView();
|
|
9087
|
-
if (this.selectedMenu === "threads") return this.renderThreadsView();
|
|
9088
|
-
if (this.selectedMenu === "memories") return this.renderMemoriesView();
|
|
9089
|
-
return lit.nothing;
|
|
10454
|
+
reloadEventSnippets() {
|
|
10455
|
+
this.eventSnippets = loadEventSnippets();
|
|
9090
10456
|
}
|
|
9091
|
-
|
|
9092
|
-
var _this$playgroundAgent4, _this$playgroundAgent5, _this$_core$runtimeMo, _this$_core17, _this$_core$runtimeUr, _this$_core18, _this$playgroundSourc;
|
|
9093
|
-
const agentId = this.resolvePlaygroundAgentId(this.selectedContext);
|
|
9094
|
-
const sourceThreads = this._threads.filter((thread) => !agentId || thread.agentId === agentId);
|
|
9095
|
-
const visibleMessages = this.playgroundMessages.filter((message) => message.role === "user" || message.role === "assistant" || message.role === "reasoning" || message.role === "activity");
|
|
9096
|
-
const hasRetry = (_this$playgroundAgent4 = (_this$playgroundAgent5 = this.playgroundAgent) === null || _this$playgroundAgent5 === void 0 ? void 0 : _this$playgroundAgent5.messages.some((message) => message.role === "user")) !== null && _this$playgroundAgent4 !== void 0 ? _this$playgroundAgent4 : false;
|
|
9097
|
-
const runtimeMode = (_this$_core$runtimeMo = (_this$_core17 = this._core) === null || _this$_core17 === void 0 ? void 0 : _this$_core17.runtimeMode) !== null && _this$_core$runtimeMo !== void 0 ? _this$_core$runtimeMo : "sse";
|
|
9098
|
-
const runtimeLabel = (_this$_core$runtimeUr = (_this$_core18 = this._core) === null || _this$_core18 === void 0 ? void 0 : _this$_core18.runtimeUrl) !== null && _this$_core$runtimeUr !== void 0 ? _this$_core$runtimeUr : "Self-managed agent";
|
|
9099
|
-
const busy = this.playgroundIsRunning || this.playgroundIsLoadingThread;
|
|
9100
|
-
const suggestions = agentId && this._core ? this._core.getSuggestions(agentId).suggestions : [];
|
|
9101
|
-
const lastAssistantIndex = visibleMessages.reduce((last, message, index) => message.role === "assistant" ? index : last, -1);
|
|
9102
|
-
const lastReasoningIndex = visibleMessages.reduce((last, message, index) => message.role === "reasoning" ? index : last, -1);
|
|
9103
|
-
const showWelcome = !this.playgroundIsLoadingThread && visibleMessages.length === 0;
|
|
10457
|
+
renderSnippetImportControl() {
|
|
9104
10458
|
return lit.html`
|
|
9105
|
-
<
|
|
9106
|
-
class="
|
|
10459
|
+
<label
|
|
10460
|
+
class="inline-flex shrink-0 cursor-pointer items-center rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] text-gray-700"
|
|
10461
|
+
data-testid="cpk-snippet-import"
|
|
9107
10462
|
>
|
|
9108
|
-
|
|
9109
|
-
|
|
10463
|
+
Import
|
|
10464
|
+
<input
|
|
10465
|
+
type="file"
|
|
10466
|
+
accept="application/json"
|
|
10467
|
+
class="hidden"
|
|
10468
|
+
@change=${this.handleSnippetImportChange}
|
|
10469
|
+
/>
|
|
10470
|
+
</label>
|
|
10471
|
+
`;
|
|
10472
|
+
}
|
|
10473
|
+
selectEventSnippet(id) {
|
|
10474
|
+
const snippet = this.eventSnippets.find((item) => item.id === id);
|
|
10475
|
+
this.selectedSnippetId = id;
|
|
10476
|
+
if (!snippet) {
|
|
10477
|
+
this.requestUpdate();
|
|
10478
|
+
return;
|
|
10479
|
+
}
|
|
10480
|
+
const editor = editorStateFromSnippet(snippet);
|
|
10481
|
+
this.snippetRecipe = editor.recipe;
|
|
10482
|
+
this.snippetName = editor.name;
|
|
10483
|
+
this.snippetJson = editor.json;
|
|
10484
|
+
this.snippetToolName = editor.draft.toolName;
|
|
10485
|
+
this.snippetToolArgs = editor.draft.toolArgs;
|
|
10486
|
+
this.snippetReasoningText = editor.draft.reasoningText;
|
|
10487
|
+
this.snippetTextContent = editor.draft.textContent;
|
|
10488
|
+
this.snippetActivityType = editor.draft.activityType;
|
|
10489
|
+
this.snippetActivityContent = editor.draft.activityContent;
|
|
10490
|
+
this.snippetError = null;
|
|
10491
|
+
this.requestUpdate();
|
|
10492
|
+
}
|
|
10493
|
+
compileSnippetDraft() {
|
|
10494
|
+
switch (this.snippetRecipe) {
|
|
10495
|
+
case "tool-call": return compileToolCallRecipe({
|
|
10496
|
+
toolName: this.snippetToolName,
|
|
10497
|
+
argsJson: this.snippetToolArgs,
|
|
10498
|
+
threadId: this.getSnippetThreadId(),
|
|
10499
|
+
runId: this.getSnippetRunId()
|
|
10500
|
+
});
|
|
10501
|
+
case "reasoning": return compileReasoningRecipe({
|
|
10502
|
+
text: this.snippetReasoningText,
|
|
10503
|
+
threadId: this.getSnippetThreadId(),
|
|
10504
|
+
runId: this.getSnippetRunId()
|
|
10505
|
+
});
|
|
10506
|
+
case "text": return compileTextRecipe({
|
|
10507
|
+
text: this.snippetTextContent,
|
|
10508
|
+
threadId: this.getSnippetThreadId(),
|
|
10509
|
+
runId: this.getSnippetRunId()
|
|
10510
|
+
});
|
|
10511
|
+
case "activity": return compileActivityRecipe({
|
|
10512
|
+
activityType: this.snippetActivityType,
|
|
10513
|
+
contentJson: this.snippetActivityContent,
|
|
10514
|
+
threadId: this.getSnippetThreadId(),
|
|
10515
|
+
runId: this.getSnippetRunId()
|
|
10516
|
+
});
|
|
10517
|
+
case "raw": return parseSnippetEvents(this.snippetJson);
|
|
10518
|
+
}
|
|
10519
|
+
}
|
|
10520
|
+
getSnippetThreadId() {
|
|
10521
|
+
var _this$selectedThreadI;
|
|
10522
|
+
return (_this$selectedThreadI = this.selectedThreadId) !== null && _this$selectedThreadI !== void 0 ? _this$selectedThreadI : "inspector-snippet";
|
|
10523
|
+
}
|
|
10524
|
+
getSnippetRunId() {
|
|
10525
|
+
return `inspector-snippet-${Date.now()}`;
|
|
10526
|
+
}
|
|
10527
|
+
getSnippetTargetAgent() {
|
|
10528
|
+
var _core$getAgent2;
|
|
10529
|
+
const core = this._core;
|
|
10530
|
+
if (!core) return null;
|
|
10531
|
+
const selected = this.selectedContext !== "all-agents" ? this.selectedContext : null;
|
|
10532
|
+
if (selected) {
|
|
10533
|
+
var _core$getAgent;
|
|
10534
|
+
return (_core$getAgent = core.getAgent(selected)) !== null && _core$getAgent !== void 0 ? _core$getAgent : null;
|
|
10535
|
+
}
|
|
10536
|
+
const first = this.contextOptions.find((option) => option.key !== "all-agents");
|
|
10537
|
+
return first ? (_core$getAgent2 = core.getAgent(first.key)) !== null && _core$getAgent2 !== void 0 ? _core$getAgent2 : null : null;
|
|
10538
|
+
}
|
|
10539
|
+
applyRecipeToEditor() {
|
|
10540
|
+
try {
|
|
10541
|
+
const events = this.compileSnippetDraft();
|
|
10542
|
+
this.snippetJson = JSON.stringify(events, null, 2);
|
|
10543
|
+
this.snippetError = null;
|
|
10544
|
+
} catch (error) {
|
|
10545
|
+
this.snippetError = error instanceof Error ? error.message : "Could not compile recipe.";
|
|
10546
|
+
}
|
|
10547
|
+
this.requestUpdate();
|
|
10548
|
+
}
|
|
10549
|
+
handleSnippetRecipeChange(event) {
|
|
10550
|
+
const value = event.target.value;
|
|
10551
|
+
if (value === "tool-call" || value === "reasoning" || value === "text" || value === "activity" || value === "raw") {
|
|
10552
|
+
this.snippetRecipe = value;
|
|
10553
|
+
if (value !== "raw") this.applyRecipeToEditor();
|
|
10554
|
+
else this.requestUpdate();
|
|
10555
|
+
}
|
|
10556
|
+
}
|
|
10557
|
+
saveCurrentSnippet(source) {
|
|
10558
|
+
try {
|
|
10559
|
+
var _this$selectedSnippet, _this$eventSnippets$f, _this$eventSnippets$f2, _this$core14;
|
|
10560
|
+
const events = parseSnippetEvents(this.snippetJson);
|
|
10561
|
+
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
10562
|
+
const snippet = {
|
|
10563
|
+
id: (_this$selectedSnippet = this.selectedSnippetId) !== null && _this$selectedSnippet !== void 0 ? _this$selectedSnippet : createSnippetId(),
|
|
10564
|
+
name: this.snippetName.trim() || recipeLabel(this.snippetRecipe),
|
|
10565
|
+
recipe: this.snippetRecipe,
|
|
10566
|
+
events,
|
|
10567
|
+
createdAt: (_this$eventSnippets$f = (_this$eventSnippets$f2 = this.eventSnippets.find((item) => item.id === this.selectedSnippetId)) === null || _this$eventSnippets$f2 === void 0 ? void 0 : _this$eventSnippets$f2.createdAt) !== null && _this$eventSnippets$f !== void 0 ? _this$eventSnippets$f : now,
|
|
10568
|
+
updatedAt: now
|
|
10569
|
+
};
|
|
10570
|
+
this.eventSnippets = upsertEventSnippet(snippet);
|
|
10571
|
+
this.selectedSnippetId = snippet.id;
|
|
10572
|
+
this.snippetBanner = "Snippet saved.";
|
|
10573
|
+
this.snippetError = null;
|
|
10574
|
+
if (!((_this$core14 = this.core) === null || _this$core14 === void 0 ? void 0 : _this$core14.telemetryDisabled)) trackEventSnippetsSaved({
|
|
10575
|
+
recipe: this.snippetRecipe,
|
|
10576
|
+
source,
|
|
10577
|
+
success: true
|
|
10578
|
+
});
|
|
10579
|
+
} catch (error) {
|
|
10580
|
+
var _this$core15;
|
|
10581
|
+
this.snippetError = error instanceof Error ? error.message : "Could not save snippet.";
|
|
10582
|
+
if (!((_this$core15 = this.core) === null || _this$core15 === void 0 ? void 0 : _this$core15.telemetryDisabled)) trackEventSnippetsSaved({
|
|
10583
|
+
recipe: this.snippetRecipe,
|
|
10584
|
+
source,
|
|
10585
|
+
success: false
|
|
10586
|
+
});
|
|
10587
|
+
}
|
|
10588
|
+
this.requestUpdate();
|
|
10589
|
+
}
|
|
10590
|
+
async runCurrentSnippet() {
|
|
10591
|
+
this.snippetError = null;
|
|
10592
|
+
this.snippetBanner = null;
|
|
10593
|
+
let events;
|
|
10594
|
+
try {
|
|
10595
|
+
events = expandSnippetEventsForRun(parseSnippetEvents(this.snippetJson));
|
|
10596
|
+
} catch (error) {
|
|
10597
|
+
this.snippetError = error instanceof Error ? error.message : "Snippet JSON is invalid.";
|
|
10598
|
+
this.requestUpdate();
|
|
10599
|
+
return;
|
|
10600
|
+
}
|
|
10601
|
+
if (snippetContainsToolCall(events) && !this.snippetConfirmOpen) {
|
|
10602
|
+
this.snippetConfirmOpen = true;
|
|
10603
|
+
this.requestUpdate();
|
|
10604
|
+
return;
|
|
10605
|
+
}
|
|
10606
|
+
this.snippetConfirmOpen = false;
|
|
10607
|
+
const core = this._core;
|
|
10608
|
+
const agent = this.getSnippetTargetAgent();
|
|
10609
|
+
if (!core || !agent) {
|
|
10610
|
+
this.snippetError = "No agent is available to inject into.";
|
|
10611
|
+
this.requestUpdate();
|
|
10612
|
+
return;
|
|
10613
|
+
}
|
|
10614
|
+
if (agent.isRunning) {
|
|
10615
|
+
this.snippetError = "The agent is running. Wait for the current run to end.";
|
|
10616
|
+
this.requestUpdate();
|
|
10617
|
+
return;
|
|
10618
|
+
}
|
|
10619
|
+
try {
|
|
10620
|
+
var _this$selectedSnippet2, _agent$agentId, _this$core16;
|
|
10621
|
+
const result = await (0, _copilotkit_core.ɵinjectInspectorEvents)({
|
|
10622
|
+
core,
|
|
10623
|
+
agent,
|
|
10624
|
+
events
|
|
10625
|
+
});
|
|
10626
|
+
this.lastInject = {
|
|
10627
|
+
snippetId: (_this$selectedSnippet2 = this.selectedSnippetId) !== null && _this$selectedSnippet2 !== void 0 ? _this$selectedSnippet2 : "unsaved",
|
|
10628
|
+
agentId: (_agent$agentId = agent.agentId) !== null && _agent$agentId !== void 0 ? _agent$agentId : "default",
|
|
10629
|
+
runId: this.getSnippetRunId(),
|
|
10630
|
+
messageIds: result.messageIds
|
|
10631
|
+
};
|
|
10632
|
+
this.snippetBanner = "Inspector injected these events into the live thread.";
|
|
10633
|
+
if (!((_this$core16 = this.core) === null || _this$core16 === void 0 ? void 0 : _this$core16.telemetryDisabled)) trackEventSnippetsRun({
|
|
10634
|
+
recipe: this.snippetRecipe,
|
|
10635
|
+
source: "pane",
|
|
10636
|
+
success: true
|
|
10637
|
+
});
|
|
10638
|
+
} catch (error) {
|
|
10639
|
+
var _this$core17;
|
|
10640
|
+
this.snippetError = error instanceof Error ? error.message : "Could not run snippet.";
|
|
10641
|
+
if (!((_this$core17 = this.core) === null || _this$core17 === void 0 ? void 0 : _this$core17.telemetryDisabled)) trackEventSnippetsRun({
|
|
10642
|
+
recipe: this.snippetRecipe,
|
|
10643
|
+
source: "pane",
|
|
10644
|
+
success: false
|
|
10645
|
+
});
|
|
10646
|
+
}
|
|
10647
|
+
this.requestUpdate();
|
|
10648
|
+
}
|
|
10649
|
+
resetLastSnippetRun() {
|
|
10650
|
+
const last = this.lastInject;
|
|
10651
|
+
const core = this._core;
|
|
10652
|
+
if (!last || !core) return;
|
|
10653
|
+
const agent = core.getAgent(last.agentId);
|
|
10654
|
+
if (!agent) {
|
|
10655
|
+
this.snippetError = "The injected agent is no longer available.";
|
|
10656
|
+
this.requestUpdate();
|
|
10657
|
+
return;
|
|
10658
|
+
}
|
|
10659
|
+
(0, _copilotkit_core.ɵresetInspectorInject)({
|
|
10660
|
+
agent,
|
|
10661
|
+
messageIds: last.messageIds
|
|
10662
|
+
});
|
|
10663
|
+
this.lastInject = null;
|
|
10664
|
+
this.snippetBanner = "Last inject was removed from the thread. App state from a tool handler was not undone.";
|
|
10665
|
+
this.requestUpdate();
|
|
10666
|
+
}
|
|
10667
|
+
renderEventSnippetsView() {
|
|
10668
|
+
var _this$_core$tools, _this$_core18;
|
|
10669
|
+
if (this.eventSnippets.length === 0 && this.selectedSnippetId === null) this.reloadEventSnippets();
|
|
10670
|
+
const agent = this.getSnippetTargetAgent();
|
|
10671
|
+
const runBlocked = (agent === null || agent === void 0 ? void 0 : agent.isRunning) === true;
|
|
10672
|
+
const canRunJson = snippetJsonIsRunnable(this.snippetJson);
|
|
10673
|
+
const canRun = canRunJson && !!agent && !runBlocked;
|
|
10674
|
+
const canSave = canRunJson;
|
|
10675
|
+
const canDelete = this.selectedSnippetId !== null;
|
|
10676
|
+
const canExport = this.eventSnippets.length > 0;
|
|
10677
|
+
const canReset = this.lastInject !== null;
|
|
10678
|
+
const snippetGroups = groupEventSnippets(this.eventSnippets);
|
|
10679
|
+
const tools = (_this$_core$tools = (_this$_core18 = this._core) === null || _this$_core18 === void 0 ? void 0 : _this$_core18.tools) !== null && _this$_core$tools !== void 0 ? _this$_core$tools : [];
|
|
10680
|
+
return lit.html`
|
|
10681
|
+
<div class="flex h-full min-h-0 flex-col bg-white">
|
|
10682
|
+
<div
|
|
10683
|
+
class="flex items-center justify-between gap-4 border-b border-gray-200 px-4 py-3"
|
|
9110
10684
|
>
|
|
9111
|
-
<div class="min-w-0
|
|
9112
|
-
<
|
|
9113
|
-
|
|
9114
|
-
|
|
9115
|
-
|
|
9116
|
-
|
|
9117
|
-
>
|
|
9118
|
-
</div>
|
|
9119
|
-
<div
|
|
9120
|
-
class="mt-0.5 flex min-w-0 items-center gap-1.5 text-[9px] text-gray-600"
|
|
9121
|
-
>
|
|
9122
|
-
<span class="truncate">Agent: ${agentId !== null && agentId !== void 0 ? agentId : "waiting..."}</span>
|
|
9123
|
-
<span
|
|
9124
|
-
class="h-3 w-px shrink-0 bg-gray-200"
|
|
9125
|
-
aria-hidden="true"
|
|
9126
|
-
></span>
|
|
9127
|
-
<span class="truncate" title=${runtimeLabel}>${runtimeLabel}</span>
|
|
9128
|
-
</div>
|
|
10685
|
+
<div class="min-w-0">
|
|
10686
|
+
<h2 class="text-sm font-semibold text-gray-900">Event Snippets</h2>
|
|
10687
|
+
<p class="mt-1 text-[11px] text-gray-500">
|
|
10688
|
+
Compile AG-UI events, run them on the live agent, and save them
|
|
10689
|
+
for later. Tool-call runs use the real frontend-tool handler.
|
|
10690
|
+
</p>
|
|
9129
10691
|
</div>
|
|
10692
|
+
${this.renderSnippetImportControl()}
|
|
10693
|
+
</div>
|
|
10694
|
+
${this.snippetBanner ? lit.html`<div
|
|
10695
|
+
class="border-b border-emerald-200 bg-emerald-50 px-4 py-2 text-[11px] text-emerald-800"
|
|
10696
|
+
role="status"
|
|
10697
|
+
>
|
|
10698
|
+
${this.snippetBanner}
|
|
10699
|
+
</div>` : lit.nothing}
|
|
10700
|
+
${this.snippetError ? lit.html`<div
|
|
10701
|
+
class="border-b border-rose-200 bg-rose-50 px-4 py-2 text-[11px] text-rose-800"
|
|
10702
|
+
role="alert"
|
|
10703
|
+
>
|
|
10704
|
+
${this.snippetError}
|
|
10705
|
+
</div>` : lit.nothing}
|
|
10706
|
+
${this.snippetConfirmOpen ? lit.html`<div
|
|
10707
|
+
class="border-b border-amber-200 bg-amber-50 px-4 py-2 text-[11px] text-amber-900"
|
|
10708
|
+
role="alertdialog"
|
|
10709
|
+
aria-label="Confirm tool-call run"
|
|
10710
|
+
>
|
|
10711
|
+
<p>
|
|
10712
|
+
This snippet contains a tool call. Run will execute the real
|
|
10713
|
+
handler on the live thread.
|
|
10714
|
+
</p>
|
|
10715
|
+
<div class="mt-2 flex gap-2">
|
|
10716
|
+
<button
|
|
10717
|
+
type="button"
|
|
10718
|
+
class="rounded-md bg-gray-900 px-2 py-1 text-[11px] text-white"
|
|
10719
|
+
data-testid="cpk-snippet-run-handler"
|
|
10720
|
+
@click=${() => {
|
|
10721
|
+
this.snippetConfirmOpen = true;
|
|
10722
|
+
this.runCurrentSnippet();
|
|
10723
|
+
}}
|
|
10724
|
+
>
|
|
10725
|
+
Run handler
|
|
10726
|
+
</button>
|
|
10727
|
+
<button
|
|
10728
|
+
type="button"
|
|
10729
|
+
class="rounded-md border border-gray-300 bg-white px-2 py-1 text-[11px]"
|
|
10730
|
+
@click=${() => {
|
|
10731
|
+
this.snippetConfirmOpen = false;
|
|
10732
|
+
this.requestUpdate();
|
|
10733
|
+
}}
|
|
10734
|
+
>
|
|
10735
|
+
Cancel
|
|
10736
|
+
</button>
|
|
10737
|
+
</div>
|
|
10738
|
+
</div>` : lit.nothing}
|
|
10739
|
+
<div class="flex min-h-0 flex-1">
|
|
9130
10740
|
<div
|
|
9131
|
-
class="
|
|
10741
|
+
class="inspector-snippet-sidebar shrink-0"
|
|
10742
|
+
style="width:${this.snippetListWidth}px"
|
|
10743
|
+
data-testid="cpk-snippet-list"
|
|
9132
10744
|
>
|
|
9133
|
-
${
|
|
9134
|
-
<
|
|
9135
|
-
|
|
9136
|
-
>
|
|
9137
|
-
|
|
9138
|
-
|
|
9139
|
-
|
|
9140
|
-
|
|
9141
|
-
|
|
9142
|
-
|
|
9143
|
-
|
|
9144
|
-
|
|
9145
|
-
|
|
9146
|
-
|
|
10745
|
+
${snippetGroups.length === 0 ? lit.html`
|
|
10746
|
+
<p class="px-2 py-2 text-[11px] text-gray-500">No saved snippets yet.</p>
|
|
10747
|
+
` : lit.html`
|
|
10748
|
+
<nav class="inspector-sidebar-nav" aria-label="Saved snippets">
|
|
10749
|
+
${snippetGroups.map((group) => lit.html`
|
|
10750
|
+
<div class="inspector-sidebar-section">
|
|
10751
|
+
<div
|
|
10752
|
+
class="inspector-sidebar-label"
|
|
10753
|
+
data-testid="cpk-snippet-category"
|
|
10754
|
+
data-recipe=${group.recipe}
|
|
10755
|
+
>
|
|
10756
|
+
${group.label}
|
|
10757
|
+
</div>
|
|
10758
|
+
${group.snippets.map((snippet) => {
|
|
10759
|
+
const isSelected = snippet.id === this.selectedSnippetId;
|
|
9147
10760
|
return lit.html`
|
|
9148
|
-
|
|
9149
|
-
|
|
10761
|
+
<button
|
|
10762
|
+
type="button"
|
|
10763
|
+
class="inspector-nav-control inspector-sidebar-control ${isSelected ? "inspector-nav-control-active" : ""}"
|
|
10764
|
+
data-testid="cpk-snippet-item"
|
|
10765
|
+
data-recipe=${snippet.recipe}
|
|
10766
|
+
aria-current=${isSelected ? "page" : lit.nothing}
|
|
10767
|
+
aria-label="${recipeLabel(snippet.recipe)}: ${snippet.name}"
|
|
10768
|
+
style=${INTERACTIVE_FOCUS_BASE_STYLE}
|
|
10769
|
+
@click=${() => this.selectEventSnippet(snippet.id)}
|
|
10770
|
+
>
|
|
10771
|
+
<span
|
|
10772
|
+
class="inspector-nav-icon"
|
|
10773
|
+
aria-hidden="true"
|
|
10774
|
+
>
|
|
10775
|
+
<span
|
|
10776
|
+
class="flex h-6 w-6 items-center justify-center rounded-md ${recipeIconWrapClass(snippet.recipe)}"
|
|
10777
|
+
>
|
|
10778
|
+
${this.renderIcon(recipeIconName(snippet.recipe))}
|
|
10779
|
+
</span>
|
|
10780
|
+
</span>
|
|
10781
|
+
<span class="inspector-nav-label"
|
|
10782
|
+
>${snippet.name}</span
|
|
10783
|
+
>
|
|
10784
|
+
</button>
|
|
10785
|
+
`;
|
|
10786
|
+
})}
|
|
10787
|
+
</div>
|
|
10788
|
+
`)}
|
|
10789
|
+
</nav>
|
|
10790
|
+
`}
|
|
10791
|
+
</div>
|
|
10792
|
+
<div
|
|
10793
|
+
class="w-1.5 shrink-0 cursor-col-resize bg-gray-200 hover:bg-gray-400"
|
|
10794
|
+
role="separator"
|
|
10795
|
+
aria-orientation="vertical"
|
|
10796
|
+
aria-label="Resize snippet list"
|
|
10797
|
+
title="Drag to resize"
|
|
10798
|
+
data-testid="cpk-snippet-list-resize"
|
|
10799
|
+
style="touch-action:none"
|
|
10800
|
+
@pointerdown=${this.handleSnippetListDividerPointerDown}
|
|
10801
|
+
@pointermove=${this.handleSnippetListDividerPointerMove}
|
|
10802
|
+
@pointerup=${this.handleSnippetListDividerPointerUp}
|
|
10803
|
+
@pointercancel=${this.handleSnippetListDividerPointerUp}
|
|
10804
|
+
></div>
|
|
10805
|
+
<div class="flex min-h-0 min-w-0 flex-1 flex-col gap-2 overflow-auto p-4">
|
|
10806
|
+
<label class="text-[11px] text-gray-600">
|
|
10807
|
+
Name
|
|
10808
|
+
<input
|
|
10809
|
+
class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
|
|
10810
|
+
data-testid="cpk-snippet-name"
|
|
10811
|
+
.value=${this.snippetName}
|
|
10812
|
+
@input=${(event) => {
|
|
10813
|
+
this.snippetName = event.target.value;
|
|
10814
|
+
}}
|
|
10815
|
+
/>
|
|
10816
|
+
</label>
|
|
10817
|
+
<label class="text-[11px] text-gray-600">
|
|
10818
|
+
Recipe
|
|
10819
|
+
<select
|
|
10820
|
+
class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
|
|
10821
|
+
data-testid="cpk-snippet-recipe"
|
|
10822
|
+
.value=${this.snippetRecipe}
|
|
10823
|
+
@change=${this.handleSnippetRecipeChange}
|
|
10824
|
+
>
|
|
10825
|
+
${[
|
|
10826
|
+
"tool-call",
|
|
10827
|
+
"reasoning",
|
|
10828
|
+
"text",
|
|
10829
|
+
"activity",
|
|
10830
|
+
"raw"
|
|
10831
|
+
].map((recipe) => lit.html`<option
|
|
10832
|
+
value=${recipe}
|
|
10833
|
+
?selected=${recipe === this.snippetRecipe}
|
|
10834
|
+
>
|
|
10835
|
+
${recipeLabel(recipe)}
|
|
10836
|
+
</option>`)}
|
|
10837
|
+
</select>
|
|
10838
|
+
</label>
|
|
10839
|
+
${this.snippetRecipe === "tool-call" ? lit.html`
|
|
10840
|
+
<label class="text-[11px] text-gray-600">
|
|
10841
|
+
Tool
|
|
10842
|
+
<input
|
|
10843
|
+
list="cpk-snippet-tools"
|
|
10844
|
+
class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
|
|
10845
|
+
data-testid="cpk-snippet-tool-name"
|
|
10846
|
+
.value=${this.snippetToolName}
|
|
10847
|
+
@input=${(event) => {
|
|
10848
|
+
this.snippetToolName = event.target.value;
|
|
10849
|
+
this.applyRecipeToEditor();
|
|
10850
|
+
}}
|
|
10851
|
+
/>
|
|
10852
|
+
<datalist id="cpk-snippet-tools">
|
|
10853
|
+
${tools.map((tool) => lit.html`<option value=${tool.name}></option>`)}
|
|
10854
|
+
</datalist>
|
|
10855
|
+
</label>
|
|
10856
|
+
<label class="text-[11px] text-gray-600">
|
|
10857
|
+
Args JSON
|
|
10858
|
+
<textarea
|
|
10859
|
+
class="mt-1 h-20 w-full rounded-md border border-gray-200 px-2 py-1 font-mono text-[11px]"
|
|
10860
|
+
data-testid="cpk-snippet-tool-args"
|
|
10861
|
+
.value=${this.snippetToolArgs}
|
|
10862
|
+
@input=${(event) => {
|
|
10863
|
+
this.snippetToolArgs = event.target.value;
|
|
10864
|
+
this.applyRecipeToEditor();
|
|
10865
|
+
}}
|
|
10866
|
+
></textarea>
|
|
10867
|
+
</label>
|
|
10868
|
+
` : lit.nothing}
|
|
10869
|
+
${this.snippetRecipe === "reasoning" ? lit.html`<label class="text-[11px] text-gray-600">
|
|
10870
|
+
Reasoning
|
|
10871
|
+
<textarea
|
|
10872
|
+
class="mt-1 h-20 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
|
|
10873
|
+
data-testid="cpk-snippet-reasoning"
|
|
10874
|
+
.value=${this.snippetReasoningText}
|
|
10875
|
+
@input=${(event) => {
|
|
10876
|
+
this.snippetReasoningText = event.target.value;
|
|
10877
|
+
this.applyRecipeToEditor();
|
|
10878
|
+
}}
|
|
10879
|
+
></textarea>
|
|
10880
|
+
</label>` : lit.nothing}
|
|
10881
|
+
${this.snippetRecipe === "text" ? lit.html`<label class="text-[11px] text-gray-600">
|
|
10882
|
+
Assistant text
|
|
10883
|
+
<textarea
|
|
10884
|
+
class="mt-1 h-20 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
|
|
10885
|
+
data-testid="cpk-snippet-text"
|
|
10886
|
+
.value=${this.snippetTextContent}
|
|
10887
|
+
@input=${(event) => {
|
|
10888
|
+
this.snippetTextContent = event.target.value;
|
|
10889
|
+
this.applyRecipeToEditor();
|
|
10890
|
+
}}
|
|
10891
|
+
></textarea>
|
|
10892
|
+
</label>` : lit.nothing}
|
|
10893
|
+
${this.snippetRecipe === "activity" ? lit.html`
|
|
10894
|
+
<label class="text-[11px] text-gray-600">
|
|
10895
|
+
Activity type
|
|
10896
|
+
<input
|
|
10897
|
+
list="cpk-snippet-activity"
|
|
10898
|
+
class="mt-1 w-full rounded-md border border-gray-200 px-2 py-1 text-[11px]"
|
|
10899
|
+
data-testid="cpk-snippet-activity-type"
|
|
10900
|
+
.value=${this.snippetActivityType}
|
|
10901
|
+
@input=${(event) => {
|
|
10902
|
+
this.snippetActivityType = event.target.value;
|
|
10903
|
+
this.applyRecipeToEditor();
|
|
10904
|
+
}}
|
|
10905
|
+
/>
|
|
10906
|
+
<datalist id="cpk-snippet-activity">
|
|
10907
|
+
${ACTIVITY_STARTERS.map((type) => lit.html`<option value=${type}></option>`)}
|
|
10908
|
+
</datalist>
|
|
10909
|
+
</label>
|
|
10910
|
+
<label class="text-[11px] text-gray-600">
|
|
10911
|
+
Content JSON
|
|
10912
|
+
<textarea
|
|
10913
|
+
class="mt-1 h-24 w-full rounded-md border border-gray-200 px-2 py-1 font-mono text-[11px]"
|
|
10914
|
+
data-testid="cpk-snippet-activity-content"
|
|
10915
|
+
.value=${this.snippetActivityContent}
|
|
10916
|
+
@input=${(event) => {
|
|
10917
|
+
this.snippetActivityContent = event.target.value;
|
|
10918
|
+
this.applyRecipeToEditor();
|
|
10919
|
+
}}
|
|
10920
|
+
></textarea>
|
|
10921
|
+
</label>
|
|
10922
|
+
` : lit.nothing}
|
|
10923
|
+
<label class="text-[11px] text-gray-600">
|
|
10924
|
+
Events JSON
|
|
10925
|
+
<textarea
|
|
10926
|
+
class="mt-1 h-40 w-full rounded-md border border-gray-200 px-2 py-1 font-mono text-[11px]"
|
|
10927
|
+
data-testid="cpk-snippet-json"
|
|
10928
|
+
.value=${this.snippetJson}
|
|
10929
|
+
@input=${(event) => {
|
|
10930
|
+
this.snippetJson = event.target.value;
|
|
10931
|
+
this.requestUpdate();
|
|
10932
|
+
}}
|
|
10933
|
+
></textarea>
|
|
10934
|
+
</label>
|
|
10935
|
+
<div class="flex flex-wrap gap-2">
|
|
10936
|
+
<button
|
|
10937
|
+
type="button"
|
|
10938
|
+
class="rounded-md bg-gray-900 px-3 py-1.5 text-[11px] text-white disabled:opacity-50"
|
|
10939
|
+
data-testid="cpk-snippet-run"
|
|
10940
|
+
?disabled=${!canRun}
|
|
10941
|
+
title=${runBlocked ? "The agent is running. Wait for the current run to end." : !agent ? "No agent is available to inject into." : !canRunJson ? "Events JSON must be a non-empty event array." : "Run snippet"}
|
|
10942
|
+
@click=${() => void this.runCurrentSnippet()}
|
|
10943
|
+
>
|
|
10944
|
+
${runBlocked ? "Agent running" : "Run"}
|
|
10945
|
+
</button>
|
|
10946
|
+
<button
|
|
10947
|
+
type="button"
|
|
10948
|
+
class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
|
|
10949
|
+
data-testid="cpk-snippet-save"
|
|
10950
|
+
?disabled=${!canSave}
|
|
10951
|
+
title=${canSave ? "Save snippet" : "Events JSON must be a non-empty event array."}
|
|
10952
|
+
@click=${() => this.saveCurrentSnippet("pane")}
|
|
10953
|
+
>
|
|
10954
|
+
Save
|
|
10955
|
+
</button>
|
|
10956
|
+
<button
|
|
10957
|
+
type="button"
|
|
10958
|
+
class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
|
|
10959
|
+
data-testid="cpk-snippet-reset"
|
|
10960
|
+
?disabled=${!canReset}
|
|
10961
|
+
title=${canReset ? "Remove the last inject from the thread" : "No Inspector inject to reset."}
|
|
10962
|
+
@click=${() => this.resetLastSnippetRun()}
|
|
10963
|
+
>
|
|
10964
|
+
Reset last run
|
|
10965
|
+
</button>
|
|
10966
|
+
<button
|
|
10967
|
+
type="button"
|
|
10968
|
+
class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
|
|
10969
|
+
data-testid="cpk-snippet-delete"
|
|
10970
|
+
?disabled=${!canDelete}
|
|
10971
|
+
title=${canDelete ? "Delete this snippet" : "Select a snippet to delete."}
|
|
10972
|
+
@click=${() => {
|
|
10973
|
+
if (!this.selectedSnippetId) return;
|
|
10974
|
+
if (!window.confirm("Delete this snippet?")) return;
|
|
10975
|
+
this.eventSnippets = deleteEventSnippet(this.selectedSnippetId);
|
|
10976
|
+
this.selectedSnippetId = null;
|
|
10977
|
+
this.requestUpdate();
|
|
10978
|
+
}}
|
|
10979
|
+
>
|
|
10980
|
+
Delete
|
|
10981
|
+
</button>
|
|
10982
|
+
<button
|
|
10983
|
+
type="button"
|
|
10984
|
+
class="rounded-md border border-gray-300 bg-white px-3 py-1.5 text-[11px] disabled:opacity-50"
|
|
10985
|
+
data-testid="cpk-snippet-export"
|
|
10986
|
+
?disabled=${!canExport}
|
|
10987
|
+
title=${canExport ? "Export snippets" : "Save a snippet before you export."}
|
|
10988
|
+
@click=${() => {
|
|
10989
|
+
if (!canExport) return;
|
|
10990
|
+
const blob = new Blob([exportEventSnippetsJson(this.eventSnippets)], { type: "application/json" });
|
|
10991
|
+
const url = URL.createObjectURL(blob);
|
|
10992
|
+
const link = document.createElement("a");
|
|
10993
|
+
link.href = url;
|
|
10994
|
+
link.download = "event-snippets.json";
|
|
10995
|
+
link.click();
|
|
10996
|
+
URL.revokeObjectURL(url);
|
|
10997
|
+
}}
|
|
10998
|
+
>
|
|
10999
|
+
Export
|
|
11000
|
+
</button>
|
|
11001
|
+
</div>
|
|
11002
|
+
</div>
|
|
11003
|
+
</div>
|
|
11004
|
+
</div>
|
|
11005
|
+
`;
|
|
11006
|
+
}
|
|
11007
|
+
renderMainContent() {
|
|
11008
|
+
if (this.settingsOpen) return this.renderSettingsPanel();
|
|
11009
|
+
if (this.selectedMenu === "home") return this.renderHomeView();
|
|
11010
|
+
if (this.selectedMenu === WHATS_NEW_MENU_KEY) return this.renderWhatsNewView();
|
|
11011
|
+
if (this.selectedMenu === "ag-ui-events") return lit.html`
|
|
11012
|
+
<div class="flex h-full min-h-0 flex-col">
|
|
11013
|
+
${this.renderEventErrorBanner("run")}
|
|
11014
|
+
<div class="min-h-0 flex-1 overflow-hidden">
|
|
11015
|
+
${this.renderEventsTable()}
|
|
11016
|
+
</div>
|
|
11017
|
+
</div>
|
|
11018
|
+
`;
|
|
11019
|
+
if (this.selectedMenu === "playground") return this.renderPlaygroundView();
|
|
11020
|
+
if (this.selectedMenu === "event-snippets") return this.renderEventSnippetsView();
|
|
11021
|
+
if (this.selectedMenu === "agents") return this.renderAgentsView();
|
|
11022
|
+
if (this.selectedMenu === "frontend-tools") return this.renderToolsView();
|
|
11023
|
+
if (this.selectedMenu === "capabilities") return this.renderCapabilitiesView();
|
|
11024
|
+
if (this.selectedMenu === "agent-context") return this.renderContextView();
|
|
11025
|
+
if (this.selectedMenu === "threads") return this.renderThreadsView();
|
|
11026
|
+
if (this.selectedMenu === "memories") return this.renderMemoriesView();
|
|
11027
|
+
return lit.nothing;
|
|
11028
|
+
}
|
|
11029
|
+
renderPlaygroundView() {
|
|
11030
|
+
var _this$playgroundAgent4, _this$playgroundAgent5, _this$_core$runtimeMo, _this$_core19, _this$_core$runtimeUr, _this$_core20, _this$playgroundSourc;
|
|
11031
|
+
const agentId = this.resolvePlaygroundAgentId(this.selectedContext);
|
|
11032
|
+
const sourceThreads = this._threads.filter((thread) => !agentId || thread.agentId === agentId);
|
|
11033
|
+
const visibleMessages = this.playgroundMessages.filter((message) => message.role === "user" || message.role === "assistant" || message.role === "reasoning" || message.role === "activity");
|
|
11034
|
+
const hasRetry = (_this$playgroundAgent4 = (_this$playgroundAgent5 = this.playgroundAgent) === null || _this$playgroundAgent5 === void 0 ? void 0 : _this$playgroundAgent5.messages.some((message) => message.role === "user")) !== null && _this$playgroundAgent4 !== void 0 ? _this$playgroundAgent4 : false;
|
|
11035
|
+
const runtimeMode = (_this$_core$runtimeMo = (_this$_core19 = this._core) === null || _this$_core19 === void 0 ? void 0 : _this$_core19.runtimeMode) !== null && _this$_core$runtimeMo !== void 0 ? _this$_core$runtimeMo : "sse";
|
|
11036
|
+
const runtimeLabel = (_this$_core$runtimeUr = (_this$_core20 = this._core) === null || _this$_core20 === void 0 ? void 0 : _this$_core20.runtimeUrl) !== null && _this$_core$runtimeUr !== void 0 ? _this$_core$runtimeUr : "Self-managed agent";
|
|
11037
|
+
const busy = this.playgroundIsRunning || this.playgroundIsLoadingThread;
|
|
11038
|
+
const suggestions = agentId && this._core ? this._core.getSuggestions(agentId).suggestions : [];
|
|
11039
|
+
const lastAssistantIndex = visibleMessages.reduce((last, message, index) => message.role === "assistant" ? index : last, -1);
|
|
11040
|
+
const lastReasoningIndex = visibleMessages.reduce((last, message, index) => message.role === "reasoning" ? index : last, -1);
|
|
11041
|
+
const showWelcome = !this.playgroundIsLoadingThread && visibleMessages.length === 0;
|
|
11042
|
+
return lit.html`
|
|
11043
|
+
<div
|
|
11044
|
+
class="cpk-playground-root flex h-full min-h-[420px] flex-col bg-white"
|
|
11045
|
+
>
|
|
11046
|
+
<header
|
|
11047
|
+
class="cpk-playground-header flex flex-wrap items-center gap-2 border-b border-gray-200 bg-white px-3 py-2"
|
|
11048
|
+
>
|
|
11049
|
+
<div class="min-w-0 flex-1">
|
|
11050
|
+
<div class="flex items-center gap-1.5">
|
|
11051
|
+
<h2 class="text-xs font-semibold text-gray-900">Playground</h2>
|
|
11052
|
+
<span
|
|
11053
|
+
class="rounded-full border border-gray-200 bg-gray-50 px-1.5 py-0.5 text-[9px] font-medium text-gray-600"
|
|
11054
|
+
>${runtimeMode.toUpperCase()}</span
|
|
11055
|
+
>
|
|
11056
|
+
</div>
|
|
11057
|
+
<div
|
|
11058
|
+
class="mt-0.5 flex min-w-0 items-center gap-1.5 text-[9px] text-gray-600"
|
|
11059
|
+
>
|
|
11060
|
+
<span class="truncate">Agent: ${agentId !== null && agentId !== void 0 ? agentId : "waiting..."}</span>
|
|
11061
|
+
<span
|
|
11062
|
+
class="h-3 w-px shrink-0 bg-gray-200"
|
|
11063
|
+
aria-hidden="true"
|
|
11064
|
+
></span>
|
|
11065
|
+
<span class="truncate" title=${runtimeLabel}>${runtimeLabel}</span>
|
|
11066
|
+
</div>
|
|
11067
|
+
</div>
|
|
11068
|
+
<div
|
|
11069
|
+
class="cpk-playground-actions ml-auto flex min-w-0 items-center gap-2"
|
|
11070
|
+
>
|
|
11071
|
+
${sourceThreads.length > 0 ? lit.html`
|
|
11072
|
+
<label class="sr-only" for="cpk-playground-thread-source"
|
|
11073
|
+
>Start from a thread</label
|
|
11074
|
+
>
|
|
11075
|
+
<select
|
|
11076
|
+
id="cpk-playground-thread-source"
|
|
11077
|
+
class="cpk-playground-thread-select max-w-[200px] rounded-md border border-gray-200 bg-white px-2 py-1 text-[10px] text-gray-700 outline-none transition hover:border-gray-300 focus:border-violet-400 focus:ring-2 focus:ring-violet-100 disabled:cursor-not-allowed disabled:opacity-50"
|
|
11078
|
+
.value=${(_this$playgroundSourc = this.playgroundSourceThreadId) !== null && _this$playgroundSourc !== void 0 ? _this$playgroundSourc : ""}
|
|
11079
|
+
?disabled=${busy}
|
|
11080
|
+
@change=${this.handlePlaygroundThreadSourceChange}
|
|
11081
|
+
>
|
|
11082
|
+
<option value="">Load a thread...</option>
|
|
11083
|
+
${sourceThreads.map((thread) => {
|
|
11084
|
+
var _thread$name2;
|
|
11085
|
+
return lit.html`
|
|
11086
|
+
<option value=${thread.id}>
|
|
11087
|
+
${((_thread$name2 = thread.name) === null || _thread$name2 === void 0 ? void 0 : _thread$name2.trim()) || `Thread ${thread.id.slice(0, 8)}`}
|
|
9150
11088
|
</option>
|
|
9151
11089
|
`;
|
|
9152
11090
|
})}
|
|
@@ -9390,8 +11328,8 @@ ${argsString}</pre
|
|
|
9390
11328
|
`;
|
|
9391
11329
|
}
|
|
9392
11330
|
renderSettingsPanel() {
|
|
9393
|
-
var _this$core$telemetryD, _this$
|
|
9394
|
-
const optedOut = (_this$core$telemetryD = (_this$
|
|
11331
|
+
var _this$core$telemetryD, _this$core18;
|
|
11332
|
+
const optedOut = (_this$core$telemetryD = (_this$core18 = this.core) === null || _this$core18 === void 0 ? void 0 : _this$core18.telemetryDisabled) !== null && _this$core$telemetryD !== void 0 ? _this$core$telemetryD : false;
|
|
9395
11333
|
return lit.html`
|
|
9396
11334
|
<div
|
|
9397
11335
|
class="inspector-settings"
|
|
@@ -9469,17 +11407,20 @@ ${argsString}</pre
|
|
|
9469
11407
|
</div>
|
|
9470
11408
|
`;
|
|
9471
11409
|
}
|
|
9472
|
-
trackOpened(source, hadUnseenAnnouncement, firstOpen = false) {
|
|
9473
|
-
var _this$
|
|
9474
|
-
if ((_this$
|
|
11410
|
+
trackOpened(source, hadUnseenAnnouncement, firstOpen = false, activeSignal = null) {
|
|
11411
|
+
var _this$core19, _this$core$licenseSta2, _this$core20, _this$core$runtimeMod2, _this$core21, _this$core22;
|
|
11412
|
+
if ((_this$core19 = this.core) === null || _this$core19 === void 0 ? void 0 : _this$core19.telemetryDisabled) return;
|
|
11413
|
+
const errorSignal = activeSignal !== null && isErrorSignalKey(activeSignal) ? activeSignal : null;
|
|
9475
11414
|
trackInspectorOpened({
|
|
9476
11415
|
open_source: source,
|
|
9477
11416
|
...this.runtimeStatus === "connected" ? {
|
|
9478
|
-
license_status: (_this$core$licenseSta2 = (_this$
|
|
9479
|
-
runtime_mode: (_this$core$runtimeMod2 = (_this$
|
|
11417
|
+
license_status: (_this$core$licenseSta2 = (_this$core20 = this.core) === null || _this$core20 === void 0 ? void 0 : _this$core20.licenseStatus) !== null && _this$core$licenseSta2 !== void 0 ? _this$core$licenseSta2 : void 0,
|
|
11418
|
+
runtime_mode: (_this$core$runtimeMod2 = (_this$core21 = this.core) === null || _this$core21 === void 0 ? void 0 : _this$core21.runtimeMode) !== null && _this$core$runtimeMod2 !== void 0 ? _this$core$runtimeMod2 : void 0
|
|
9480
11419
|
} : {},
|
|
9481
|
-
runtime_url_type: getRuntimeUrlType((_this$
|
|
11420
|
+
runtime_url_type: getRuntimeUrlType((_this$core22 = this.core) === null || _this$core22 === void 0 ? void 0 : _this$core22.runtimeUrl),
|
|
9482
11421
|
has_unseen_announcement: hadUnseenAnnouncement,
|
|
11422
|
+
has_error_signal: errorSignal !== null,
|
|
11423
|
+
...errorSignal === null ? {} : { error_signal_source: errorSignal },
|
|
9483
11424
|
first_open: firstOpen
|
|
9484
11425
|
});
|
|
9485
11426
|
}
|
|
@@ -9519,8 +11460,8 @@ ${argsString}</pre
|
|
|
9519
11460
|
} catch (_unused16) {}
|
|
9520
11461
|
}
|
|
9521
11462
|
maybeTrackInspectorMetadataViews() {
|
|
9522
|
-
var _this$
|
|
9523
|
-
if (!this.isOpen || this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$
|
|
11463
|
+
var _this$core23, _telemetryContext$gro, _telemetryContext$lea;
|
|
11464
|
+
if (!this.isOpen || this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core23 = this.core) === null || _this$core23 === void 0 ? void 0 : _this$core23.telemetryDisabled)) return;
|
|
9524
11465
|
const { identity, plan } = this.inspectorMetadataProjection;
|
|
9525
11466
|
const license_bucket = this.inspectorMetadataProjection.licenseState;
|
|
9526
11467
|
const telemetryContext = this.getMetadataTelemetryContext();
|
|
@@ -9572,8 +11513,8 @@ ${argsString}</pre
|
|
|
9572
11513
|
} else this.metadataTelemetryFingerprints.delete("action");
|
|
9573
11514
|
}
|
|
9574
11515
|
trackWhatsNewClickedOnce(opts) {
|
|
9575
|
-
var _this$
|
|
9576
|
-
if (this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$
|
|
11516
|
+
var _this$core24, _this$announcementCta;
|
|
11517
|
+
if (this.runtimeStatus !== _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected || ((_this$core24 = this.core) === null || _this$core24 === void 0 ? void 0 : _this$core24.telemetryDisabled)) return;
|
|
9577
11518
|
const id = this.announcementTimestamp;
|
|
9578
11519
|
if (!id) return;
|
|
9579
11520
|
const key = `${id}:${opts.cta}`;
|
|
@@ -9586,8 +11527,8 @@ ${argsString}</pre
|
|
|
9586
11527
|
});
|
|
9587
11528
|
}
|
|
9588
11529
|
trackThreadsViewStateOnce(state) {
|
|
9589
|
-
var _this$
|
|
9590
|
-
if ((_this$
|
|
11530
|
+
var _this$core25;
|
|
11531
|
+
if ((_this$core25 = this.core) === null || _this$core25 === void 0 ? void 0 : _this$core25.telemetryDisabled) return;
|
|
9591
11532
|
const key = `${state}:${this.getThreadServiceStatus()}`;
|
|
9592
11533
|
if (this.viewedThreadsTelemetryStates.has(key)) return;
|
|
9593
11534
|
this.viewedThreadsTelemetryStates.add(key);
|
|
@@ -9634,8 +11575,8 @@ ${argsString}</pre
|
|
|
9634
11575
|
return provider;
|
|
9635
11576
|
}
|
|
9636
11577
|
trackThreadsExampleViewedOnce() {
|
|
9637
|
-
var _this$
|
|
9638
|
-
if ((_this$
|
|
11578
|
+
var _this$core26;
|
|
11579
|
+
if ((_this$core26 = this.core) === null || _this$core26 === void 0 ? void 0 : _this$core26.telemetryDisabled) return;
|
|
9639
11580
|
for (const thread of THREADS_EXAMPLE_THREADS) {
|
|
9640
11581
|
const exampleKind = getExampleKind(thread.id);
|
|
9641
11582
|
if (!exampleKind || this.viewedExampleKinds.has(exampleKind)) continue;
|
|
@@ -9647,8 +11588,8 @@ ${argsString}</pre
|
|
|
9647
11588
|
}
|
|
9648
11589
|
}
|
|
9649
11590
|
trackThreadsExampleSelectedOnce(threadId) {
|
|
9650
|
-
var _this$
|
|
9651
|
-
if ((_this$
|
|
11591
|
+
var _this$core27;
|
|
11592
|
+
if ((_this$core27 = this.core) === null || _this$core27 === void 0 ? void 0 : _this$core27.telemetryDisabled) return;
|
|
9652
11593
|
const exampleKind = getExampleKind(threadId);
|
|
9653
11594
|
if (!exampleKind || this.selectedExampleKinds.has(exampleKind)) return;
|
|
9654
11595
|
this.selectedExampleKinds.add(exampleKind);
|
|
@@ -9657,6 +11598,52 @@ ${argsString}</pre
|
|
|
9657
11598
|
example_kind: exampleKind
|
|
9658
11599
|
});
|
|
9659
11600
|
}
|
|
11601
|
+
subscribeToInspectorThreadBridge() {
|
|
11602
|
+
this.unsubscribeFromInspectorThreadBridge();
|
|
11603
|
+
if (!(0, _copilotkit_core.isInspectorThreadBridgeEnabled)()) return;
|
|
11604
|
+
this.inspectorBridgeUnsubscribers.push((0, _copilotkit_core.onInspectorActiveThread)((payload) => {
|
|
11605
|
+
if (payload.requestId !== this.activeViewInAppRequestId) return;
|
|
11606
|
+
this.inAppThreadId = payload.threadId;
|
|
11607
|
+
this.inAppAgentId = payload.agentId;
|
|
11608
|
+
this.inAppSource = payload.source;
|
|
11609
|
+
if (payload.source === "app") {
|
|
11610
|
+
this.activeViewInAppRequestId = null;
|
|
11611
|
+
this.viewInAppError = null;
|
|
11612
|
+
}
|
|
11613
|
+
this.requestUpdate();
|
|
11614
|
+
}), (0, _copilotkit_core.onInspectorViewThreadResult)((payload) => {
|
|
11615
|
+
if (payload.requestId !== this.activeViewInAppRequestId) return;
|
|
11616
|
+
if (payload.ok) {
|
|
11617
|
+
this.viewInAppError = null;
|
|
11618
|
+
this.inAppThreadId = payload.threadId;
|
|
11619
|
+
this.inAppAgentId = payload.agentId;
|
|
11620
|
+
this.inAppSource = "override";
|
|
11621
|
+
} else {
|
|
11622
|
+
this.activeViewInAppRequestId = null;
|
|
11623
|
+
this.inAppThreadId = null;
|
|
11624
|
+
this.inAppAgentId = null;
|
|
11625
|
+
this.inAppSource = null;
|
|
11626
|
+
this.viewInAppError = "The app could not load that thread. The previous chat is back.";
|
|
11627
|
+
}
|
|
11628
|
+
this.requestUpdate();
|
|
11629
|
+
}));
|
|
11630
|
+
}
|
|
11631
|
+
unsubscribeFromInspectorThreadBridge() {
|
|
11632
|
+
for (const unsubscribe of this.inspectorBridgeUnsubscribers) unsubscribe();
|
|
11633
|
+
this.inspectorBridgeUnsubscribers = [];
|
|
11634
|
+
}
|
|
11635
|
+
getViewInAppMode(thread, isExample) {
|
|
11636
|
+
if (!(0, _copilotkit_core.isInspectorThreadBridgeEnabled)()) return "hidden";
|
|
11637
|
+
if (!thread || isExample) return "hidden";
|
|
11638
|
+
if (this.activeViewInAppRequestId && this.inAppSource === "override" && this.inAppThreadId === thread.id) return "stop";
|
|
11639
|
+
return "view";
|
|
11640
|
+
}
|
|
11641
|
+
getSelectedRealThread() {
|
|
11642
|
+
var _this$getActiveThread;
|
|
11643
|
+
if (!this.selectedThreadId) return null;
|
|
11644
|
+
if (this.selectedThreadId === this.selectedLocalExampleThreadId) return null;
|
|
11645
|
+
return (_this$getActiveThread = this.getActiveThreadsState().displayThreads.find((thread) => thread.id === this.selectedThreadId)) !== null && _this$getActiveThread !== void 0 ? _this$getActiveThread : null;
|
|
11646
|
+
}
|
|
9660
11647
|
getCurrentExampleTourProps() {
|
|
9661
11648
|
const exampleKind = this.selectedThreadId ? getExampleKind(this.selectedThreadId) : void 0;
|
|
9662
11649
|
const tourPair = getExampleTourTelemetryPair(this.exampleTourStep);
|
|
@@ -9668,8 +11655,8 @@ ${argsString}</pre
|
|
|
9668
11655
|
};
|
|
9669
11656
|
}
|
|
9670
11657
|
trackThreadsExampleTourStepViewedOnce() {
|
|
9671
|
-
var _this$
|
|
9672
|
-
if (((_this$
|
|
11658
|
+
var _this$core28;
|
|
11659
|
+
if (((_this$core28 = this.core) === null || _this$core28 === void 0 ? void 0 : _this$core28.telemetryDisabled) || !this.selectedThreadId) return;
|
|
9673
11660
|
const props = this.getCurrentExampleTourProps();
|
|
9674
11661
|
if (!props) return;
|
|
9675
11662
|
const key = `${props.example_kind}:${props.tour_step}`;
|
|
@@ -9688,18 +11675,18 @@ ${argsString}</pre
|
|
|
9688
11675
|
});
|
|
9689
11676
|
}
|
|
9690
11677
|
startExampleTour(autoStarted) {
|
|
9691
|
-
var _this$
|
|
11678
|
+
var _this$core30;
|
|
9692
11679
|
if (!this.selectedThreadId) return;
|
|
9693
11680
|
this.exampleTourActive = true;
|
|
9694
11681
|
this.exampleTourStep = 0;
|
|
9695
11682
|
if (autoStarted) {
|
|
9696
|
-
var _this$
|
|
11683
|
+
var _this$core29;
|
|
9697
11684
|
this.exampleTourAutoShown = true;
|
|
9698
|
-
if (!((_this$
|
|
11685
|
+
if (!((_this$core29 = this.core) === null || _this$core29 === void 0 ? void 0 : _this$core29.telemetryDisabled)) {
|
|
9699
11686
|
const props = this.getCurrentExampleTourProps();
|
|
9700
11687
|
if (props) trackThreadsExampleTourStarted(props);
|
|
9701
11688
|
}
|
|
9702
|
-
} else if (!((_this$
|
|
11689
|
+
} else if (!((_this$core30 = this.core) === null || _this$core30 === void 0 ? void 0 : _this$core30.telemetryDisabled)) {
|
|
9703
11690
|
const props = this.getCurrentExampleTourProps();
|
|
9704
11691
|
if (props) trackThreadsExampleTourReopened(props);
|
|
9705
11692
|
}
|
|
@@ -9715,12 +11702,12 @@ ${argsString}</pre
|
|
|
9715
11702
|
this.requestUpdate();
|
|
9716
11703
|
}
|
|
9717
11704
|
dismissExampleTour(method) {
|
|
9718
|
-
var _this$
|
|
11705
|
+
var _this$core31;
|
|
9719
11706
|
if (!this.selectedThreadId) return;
|
|
9720
11707
|
this.exampleTourActive = false;
|
|
9721
11708
|
this.exampleTourDismissed = true;
|
|
9722
11709
|
this.writeThreadsExampleTourDismissed();
|
|
9723
|
-
if (!((_this$
|
|
11710
|
+
if (!((_this$core31 = this.core) === null || _this$core31 === void 0 ? void 0 : _this$core31.telemetryDisabled)) {
|
|
9724
11711
|
const currentProps = this.getCurrentExampleTourProps();
|
|
9725
11712
|
if (currentProps) {
|
|
9726
11713
|
const props = {
|
|
@@ -10221,8 +12208,8 @@ ${argsString}</pre
|
|
|
10221
12208
|
`;
|
|
10222
12209
|
}
|
|
10223
12210
|
renderMemoriesView() {
|
|
10224
|
-
var _this$
|
|
10225
|
-
if (!((_this$
|
|
12211
|
+
var _this$core32;
|
|
12212
|
+
if (!((_this$core32 = this.core) === null || _this$core32 === void 0 ? void 0 : _this$core32.intelligence) || !this._memoriesAvailable) return lit.html`
|
|
10226
12213
|
<div class="cpk-memory-locked">
|
|
10227
12214
|
${this.renderThreadsLockedBackgroundMockup()}
|
|
10228
12215
|
<div aria-hidden="true" class="cpk-memory-locked-scrim"></div>
|
|
@@ -10286,7 +12273,7 @@ ${argsString}</pre
|
|
|
10286
12273
|
<line x1="12" y1="16" x2="12.01" y2="16" />
|
|
10287
12274
|
</svg>
|
|
10288
12275
|
<span style="font-size: 13px; color: #c0333a;">
|
|
10289
|
-
|
|
12276
|
+
${MEMORY_LOAD_ERROR_LABEL}
|
|
10290
12277
|
</span>
|
|
10291
12278
|
<span
|
|
10292
12279
|
style="
|
|
@@ -10299,6 +12286,17 @@ ${argsString}</pre
|
|
|
10299
12286
|
>
|
|
10300
12287
|
${this._memoriesError.message}
|
|
10301
12288
|
</span>
|
|
12289
|
+
<span
|
|
12290
|
+
style="
|
|
12291
|
+
max-width: 320px;
|
|
12292
|
+
text-align: center;
|
|
12293
|
+
font-size: 11px;
|
|
12294
|
+
line-height: 1.5;
|
|
12295
|
+
color: #c0333a;
|
|
12296
|
+
"
|
|
12297
|
+
>
|
|
12298
|
+
${EVENT_ERROR_GUIDANCE.memory.advice}
|
|
12299
|
+
</span>
|
|
10302
12300
|
</div>
|
|
10303
12301
|
`;
|
|
10304
12302
|
if (this._memoriesLoading && this._memories.length === 0) return lit.html`
|
|
@@ -10458,7 +12456,7 @@ ${argsString}</pre
|
|
|
10458
12456
|
`;
|
|
10459
12457
|
}
|
|
10460
12458
|
renderThreadsView() {
|
|
10461
|
-
var _visibleThreads$find, _this$_core$runtimeUr2, _this$
|
|
12459
|
+
var _visibleThreads$find, _this$_core$runtimeUr2, _this$_core21, _this$_core$headers, _this$_core22, _this$_core23, _this$liveMessageVers2, _this$agentEvents$get6;
|
|
10462
12460
|
const locked = !this.areThreadEndpointsAvailable();
|
|
10463
12461
|
const { displayThreads, threadsErrorMessage, threadsLoading } = this.getActiveThreadsState();
|
|
10464
12462
|
const loadingWithoutRows = !locked && threadsLoading && !threadsErrorMessage && displayThreads.length === 0;
|
|
@@ -10483,6 +12481,7 @@ ${argsString}</pre
|
|
|
10483
12481
|
data-color-scheme=${this.colorScheme}
|
|
10484
12482
|
.threads=${visibleThreads}
|
|
10485
12483
|
.selectedThreadId=${this.selectedThreadId}
|
|
12484
|
+
.inAppThreadId=${this.inAppThreadId}
|
|
10486
12485
|
.errorMessage=${threadsErrorMessage}
|
|
10487
12486
|
.suppressEmptyState=${loadingWithoutRows}
|
|
10488
12487
|
@threadSelected=${(e) => {
|
|
@@ -10548,10 +12547,14 @@ ${argsString}</pre
|
|
|
10548
12547
|
.threadId=${selectedThread.id}
|
|
10549
12548
|
.thread=${selectedThread}
|
|
10550
12549
|
.provider=${selectedThreadIsLocalExample ? this.getExampleThreadProvider(selectedThread.id) : null}
|
|
10551
|
-
.runtimeUrl=${selectedThreadIsLocalExample ? "" : (_this$_core$runtimeUr2 = (_this$
|
|
10552
|
-
.headers=${(_this$_core$headers = (_this$
|
|
10553
|
-
.threadInspectionAvailable=${selectedThreadIsLocalExample || this.areThreadEndpointsAvailable() && ((_this$
|
|
12550
|
+
.runtimeUrl=${selectedThreadIsLocalExample ? "" : (_this$_core$runtimeUr2 = (_this$_core21 = this._core) === null || _this$_core21 === void 0 ? void 0 : _this$_core21.runtimeUrl) !== null && _this$_core$runtimeUr2 !== void 0 ? _this$_core$runtimeUr2 : ""}
|
|
12551
|
+
.headers=${(_this$_core$headers = (_this$_core22 = this._core) === null || _this$_core22 === void 0 ? void 0 : _this$_core22.headers) !== null && _this$_core$headers !== void 0 ? _this$_core$headers : {}}
|
|
12552
|
+
.threadInspectionAvailable=${selectedThreadIsLocalExample || this.areThreadEndpointsAvailable() && ((_this$_core23 = this._core) === null || _this$_core23 === void 0 || (_this$_core23 = _this$_core23.threadEndpoints) === null || _this$_core23 === void 0 ? void 0 : _this$_core23.inspect) !== false}
|
|
10554
12553
|
.liveMessageVersion=${(_this$liveMessageVers2 = this.liveMessageVersion.get(selectedThread.id)) !== null && _this$liveMessageVers2 !== void 0 ? _this$liveMessageVers2 : 0}
|
|
12554
|
+
.viewInAppMode=${this.getViewInAppMode(selectedThread, selectedThreadIsLocalExample)}
|
|
12555
|
+
.viewInAppError=${this.viewInAppError}
|
|
12556
|
+
@viewInApp=${this.handleViewInApp}
|
|
12557
|
+
@stopViewing=${this.handleStopViewing}
|
|
10555
12558
|
.focusMessageId=${this.focusedThreadMessageId}
|
|
10556
12559
|
.focusRequestId=${this.threadFocusRequestId}
|
|
10557
12560
|
.agentStateInput=${this.getLatestStateForAgent(selectedThread.agentId)}
|
|
@@ -10720,7 +12723,11 @@ ${argsString}</pre
|
|
|
10720
12723
|
</div>
|
|
10721
12724
|
</div>
|
|
10722
12725
|
`;
|
|
10723
|
-
else
|
|
12726
|
+
else {
|
|
12727
|
+
var _this$findLatestRunEr;
|
|
12728
|
+
const runError = this.eventErrorDetails.run;
|
|
12729
|
+
const failedRunEventId = runError ? (_this$findLatestRunEr = this.findLatestRunErrorEvent(runError.agentId)) === null || _this$findLatestRunEr === void 0 ? void 0 : _this$findLatestRunEr.id : void 0;
|
|
12730
|
+
body = lit.html`
|
|
10724
12731
|
<div class="relative h-full w-full overflow-y-auto overflow-x-hidden">
|
|
10725
12732
|
<table class="w-full table-fixed border-collapse text-xs box-border">
|
|
10726
12733
|
<colgroup>
|
|
@@ -10732,10 +12739,10 @@ ${argsString}</pre
|
|
|
10732
12739
|
<thead class="sticky top-0 z-10">
|
|
10733
12740
|
<tr class="bg-white">
|
|
10734
12741
|
${[
|
|
10735
|
-
|
|
10736
|
-
|
|
10737
|
-
|
|
10738
|
-
|
|
12742
|
+
"Agent",
|
|
12743
|
+
"Time",
|
|
12744
|
+
"Event Type"
|
|
12745
|
+
].map((label, col) => lit.html` <th
|
|
10739
12746
|
class="border-b border-gray-200 bg-white px-3 py-2 text-left font-medium text-gray-900"
|
|
10740
12747
|
style="position:relative;overflow:hidden;"
|
|
10741
12748
|
>
|
|
@@ -10757,16 +12764,18 @@ ${argsString}</pre
|
|
|
10757
12764
|
</thead>
|
|
10758
12765
|
<tbody>
|
|
10759
12766
|
${filteredEvents.map((event, index) => {
|
|
10760
|
-
|
|
10761
|
-
|
|
10762
|
-
|
|
10763
|
-
|
|
10764
|
-
|
|
10765
|
-
|
|
10766
|
-
|
|
12767
|
+
const isFailedRunEvent = failedRunEventId !== void 0 && event.id === failedRunEventId;
|
|
12768
|
+
const rowBg = isFailedRunEvent ? "bg-rose-50" : index % 2 === 0 ? "bg-white" : "bg-gray-50/50";
|
|
12769
|
+
const badgeClasses = this.getEventBadgeClasses(event.type);
|
|
12770
|
+
const extractedEvent = this.extractEventFromPayload(event.payload);
|
|
12771
|
+
const inlineEvent = this.stringifyPayload(extractedEvent, false) || "—";
|
|
12772
|
+
const prettyEvent = this.stringifyPayload(extractedEvent, true) || inlineEvent;
|
|
12773
|
+
const isExpanded = this.expandedRows.has(event.id);
|
|
12774
|
+
return lit.html`
|
|
10767
12775
|
<tr
|
|
10768
12776
|
class="${rowBg} cursor-pointer transition hover:bg-blue-50/50"
|
|
10769
12777
|
data-inspector-event-id=${event.id}
|
|
12778
|
+
data-cpk-failed-run-event=${isFailedRunEvent ? event.id : void 0}
|
|
10770
12779
|
@click=${(clickEvent) => this.toggleRowExpansion(event.id, clickEvent)}
|
|
10771
12780
|
>
|
|
10772
12781
|
<td
|
|
@@ -10799,9 +12808,9 @@ ${prettyEvent}</pre
|
|
|
10799
12808
|
<button
|
|
10800
12809
|
class="absolute right-0 top-0 cursor-pointer rounded px-2 py-1 text-[10px] opacity-0 transition group-hover:opacity-100 ${this.copiedEvents.has(event.id) ? "bg-green-100 text-green-700" : "bg-gray-100 text-gray-600 hover:bg-gray-200 hover:text-gray-900"}"
|
|
10801
12810
|
@click=${(e) => {
|
|
10802
|
-
|
|
10803
|
-
|
|
10804
|
-
|
|
12811
|
+
e.stopPropagation();
|
|
12812
|
+
this.copyToClipboard(prettyEvent, event.id, e);
|
|
12813
|
+
}}
|
|
10805
12814
|
>
|
|
10806
12815
|
${this.copiedEvents.has(event.id) ? lit.html`
|
|
10807
12816
|
<span>✓ Copied</span>
|
|
@@ -10814,11 +12823,12 @@ ${prettyEvent}</pre
|
|
|
10814
12823
|
</td>
|
|
10815
12824
|
</tr>
|
|
10816
12825
|
`;
|
|
10817
|
-
|
|
12826
|
+
})}
|
|
10818
12827
|
</tbody>
|
|
10819
12828
|
</table>
|
|
10820
12829
|
</div>
|
|
10821
12830
|
`;
|
|
12831
|
+
}
|
|
10822
12832
|
return lit.html`
|
|
10823
12833
|
<div
|
|
10824
12834
|
class="${embedded ? "flex h-[28rem] min-h-[20rem] flex-col" : "flex h-full flex-col"}"
|
|
@@ -10888,6 +12898,7 @@ ${prettyEvent}</pre
|
|
|
10888
12898
|
}
|
|
10889
12899
|
renderAgentsView() {
|
|
10890
12900
|
if (this.selectedContext === "all-agents") return lit.html`
|
|
12901
|
+
${this.renderEventErrorBanner("tool")}
|
|
10891
12902
|
<div
|
|
10892
12903
|
class="flex h-full items-center justify-center px-4 py-8 text-center"
|
|
10893
12904
|
>
|
|
@@ -10911,6 +12922,7 @@ ${prettyEvent}</pre
|
|
|
10911
12922
|
const messages = this.getLatestMessagesForAgent(agentId);
|
|
10912
12923
|
return lit.html`
|
|
10913
12924
|
<div class="cpk-agent-view flex flex-col gap-4 p-4 overflow-auto">
|
|
12925
|
+
${this.renderEventErrorBanner("tool")}
|
|
10914
12926
|
<!-- Agent Overview Card -->
|
|
10915
12927
|
<div
|
|
10916
12928
|
class="cpk-agent-overview rounded-lg border border-gray-200 bg-white p-4"
|
|
@@ -11044,8 +13056,13 @@ ${prettyEvent}</pre
|
|
|
11044
13056
|
const toolCalls = (_msg$toolCalls2 = msg.toolCalls) !== null && _msg$toolCalls2 !== void 0 ? _msg$toolCalls2 : [];
|
|
11045
13057
|
const hasContent = rawContent.trim().length > 0;
|
|
11046
13058
|
const contentFallback = toolCalls.length > 0 ? "Invoked tool call" : "—";
|
|
13059
|
+
const toolError = this.eventErrorDetails.tool;
|
|
13060
|
+
const isFailedResult = role === "tool" && (toolError === null || toolError === void 0 ? void 0 : toolError.toolCallId) !== void 0 && toolError.toolCallId === msg.toolCallId;
|
|
11047
13061
|
return lit.html`
|
|
11048
|
-
<div
|
|
13062
|
+
<div
|
|
13063
|
+
class=${isFailedResult ? "flex items-start bg-rose-50" : "flex items-start"}
|
|
13064
|
+
data-cpk-failed-tool-result=${isFailedResult ? msg.toolCallId : lit.nothing}
|
|
13065
|
+
>
|
|
11049
13066
|
<div class="w-40 shrink-0 px-4 py-2">
|
|
11050
13067
|
<span
|
|
11051
13068
|
class="inline-flex rounded px-2 py-0.5 text-[10px] font-medium ${roleColors[role] || roleColors.unknown}"
|
|
@@ -11152,6 +13169,87 @@ ${prettyEvent}</pre
|
|
|
11152
13169
|
</div>
|
|
11153
13170
|
`;
|
|
11154
13171
|
}
|
|
13172
|
+
/**
|
|
13173
|
+
* The Agent view is empty on "All Agents". Pick the agent that just failed
|
|
13174
|
+
* a tool, or the one with the most recent activity.
|
|
13175
|
+
*/
|
|
13176
|
+
applyEventErrorLanding(key) {
|
|
13177
|
+
const error = this.eventErrorDetails[key];
|
|
13178
|
+
if (!error) {
|
|
13179
|
+
if (this.selectedMenu === "agents") this.focusAgentForView();
|
|
13180
|
+
return;
|
|
13181
|
+
}
|
|
13182
|
+
if (error.agentId && this.contextOptions.some((option) => option.key === error.agentId)) this.selectedContext = error.agentId;
|
|
13183
|
+
else if (this.selectedMenu === "agents") this.focusAgentForView(error);
|
|
13184
|
+
if (key === "tool" && error.toolCallId) {
|
|
13185
|
+
this.pendingScrollToToolCallId = error.toolCallId;
|
|
13186
|
+
return;
|
|
13187
|
+
}
|
|
13188
|
+
if (key === "run") {
|
|
13189
|
+
this.eventFilterText = "";
|
|
13190
|
+
this.eventTypeFilter = "all";
|
|
13191
|
+
const event = this.findLatestRunErrorEvent(error.agentId);
|
|
13192
|
+
if (!event) return;
|
|
13193
|
+
this.expandedRows.clear();
|
|
13194
|
+
this.expandedRows.add(event.id);
|
|
13195
|
+
this.pendingScrollToEventId = event.id;
|
|
13196
|
+
}
|
|
13197
|
+
}
|
|
13198
|
+
/**
|
|
13199
|
+
* Whether the landing view really carries the item the card points at.
|
|
13200
|
+
* Mirrors the two branches of `applyEventErrorLanding` that can bail out.
|
|
13201
|
+
*/
|
|
13202
|
+
hasEventErrorHighlight(key) {
|
|
13203
|
+
const error = this.eventErrorDetails[key];
|
|
13204
|
+
if (!error) return false;
|
|
13205
|
+
if (key === "tool") return error.toolCallId !== void 0;
|
|
13206
|
+
if (key === "run") return this.findLatestRunErrorEvent(error.agentId) !== void 0;
|
|
13207
|
+
return false;
|
|
13208
|
+
}
|
|
13209
|
+
findLatestRunErrorEvent(agentId) {
|
|
13210
|
+
var _this$agentEvents$get7;
|
|
13211
|
+
return (agentId && agentId !== "all-agents" ? (_this$agentEvents$get7 = this.agentEvents.get(agentId)) !== null && _this$agentEvents$get7 !== void 0 ? _this$agentEvents$get7 : [] : this.flattenedEvents).find((event) => event.type === "RUN_ERROR");
|
|
13212
|
+
}
|
|
13213
|
+
flushErrorLandingScroll() {
|
|
13214
|
+
const eventId = this.pendingScrollToEventId;
|
|
13215
|
+
if (eventId) {
|
|
13216
|
+
var _row$scrollIntoView2;
|
|
13217
|
+
this.pendingScrollToEventId = null;
|
|
13218
|
+
const row = Array.from(this.activeRoot.querySelectorAll("[data-inspector-event-id]")).find((candidate) => candidate.dataset.inspectorEventId === eventId);
|
|
13219
|
+
row === null || row === void 0 || (_row$scrollIntoView2 = row.scrollIntoView) === null || _row$scrollIntoView2 === void 0 || _row$scrollIntoView2.call(row, { block: "center" });
|
|
13220
|
+
}
|
|
13221
|
+
const toolCallId = this.pendingScrollToToolCallId;
|
|
13222
|
+
if (toolCallId) {
|
|
13223
|
+
var _this$activeRoot$quer2, _card$scrollIntoView;
|
|
13224
|
+
this.pendingScrollToToolCallId = null;
|
|
13225
|
+
const escaped = escapeSelectorValue(toolCallId);
|
|
13226
|
+
const card = (_this$activeRoot$quer2 = this.activeRoot.querySelector(`[data-cpk-failed-tool-call="${escaped}"]`)) !== null && _this$activeRoot$quer2 !== void 0 ? _this$activeRoot$quer2 : this.activeRoot.querySelector(`[data-cpk-failed-tool-result="${escaped}"]`);
|
|
13227
|
+
card === null || card === void 0 || (_card$scrollIntoView = card.scrollIntoView) === null || _card$scrollIntoView === void 0 || _card$scrollIntoView.call(card, { block: "center" });
|
|
13228
|
+
}
|
|
13229
|
+
}
|
|
13230
|
+
/**
|
|
13231
|
+
* The Agent view is empty on "All Agents". Pick the agent that just failed
|
|
13232
|
+
* a tool, or the one with the most recent activity.
|
|
13233
|
+
*/
|
|
13234
|
+
focusAgentForView(error) {
|
|
13235
|
+
const agentOptions = this.contextOptions.filter((opt) => opt.key !== "all-agents");
|
|
13236
|
+
if (agentOptions.length === 0) return;
|
|
13237
|
+
const errorAgentId = error === null || error === void 0 ? void 0 : error.agentId;
|
|
13238
|
+
if (errorAgentId && agentOptions.some((option) => option.key === errorAgentId)) {
|
|
13239
|
+
this.selectedContext = errorAgentId;
|
|
13240
|
+
return;
|
|
13241
|
+
}
|
|
13242
|
+
if (this.selectedContext !== "all-agents") return;
|
|
13243
|
+
const mostRecent = agentOptions.reduce((best, opt) => {
|
|
13244
|
+
var _this$getAgentStats$l;
|
|
13245
|
+
const ts = (_this$getAgentStats$l = this.getAgentStats(opt.key).lastActivity) !== null && _this$getAgentStats$l !== void 0 ? _this$getAgentStats$l : -1;
|
|
13246
|
+
return best === null || ts > best.ts ? {
|
|
13247
|
+
key: opt.key,
|
|
13248
|
+
ts
|
|
13249
|
+
} : best;
|
|
13250
|
+
}, null);
|
|
13251
|
+
this.selectedContext = mostRecent ? mostRecent.key : agentOptions[0].key;
|
|
13252
|
+
}
|
|
11155
13253
|
handleMenuSelect(key) {
|
|
11156
13254
|
if (!this.menuItems.some((item) => item.key === key)) return;
|
|
11157
13255
|
const previousMenu = this.selectedMenu;
|
|
@@ -11160,39 +13258,28 @@ ${prettyEvent}</pre
|
|
|
11160
13258
|
this.selectedMenu = key;
|
|
11161
13259
|
this.settingsOpen = false;
|
|
11162
13260
|
this.lastSelectedMenuByGroup[getGroupForMenu(key)] = key;
|
|
11163
|
-
if (key === "agents" && this.selectedContext === "all-agents") {
|
|
11164
|
-
const agentOptions = this.contextOptions.filter((opt) => opt.key !== "all-agents");
|
|
11165
|
-
if (agentOptions.length > 0) {
|
|
11166
|
-
const mostRecent = agentOptions.reduce((best, opt) => {
|
|
11167
|
-
var _this$getAgentStats$l;
|
|
11168
|
-
const ts = (_this$getAgentStats$l = this.getAgentStats(opt.key).lastActivity) !== null && _this$getAgentStats$l !== void 0 ? _this$getAgentStats$l : -1;
|
|
11169
|
-
return best === null || ts > best.ts ? {
|
|
11170
|
-
key: opt.key,
|
|
11171
|
-
ts
|
|
11172
|
-
} : best;
|
|
11173
|
-
}, null);
|
|
11174
|
-
this.selectedContext = mostRecent ? mostRecent.key : agentOptions[0].key;
|
|
11175
|
-
}
|
|
11176
|
-
}
|
|
11177
13261
|
if (previousMenu === "agents" && key !== "agents") {
|
|
11178
13262
|
if (this.contextOptions.filter((opt) => opt.key !== "all-agents").length > 1) this.selectedContext = "all-agents";
|
|
11179
13263
|
}
|
|
11180
13264
|
if (key === "threads") {
|
|
11181
|
-
var _this$
|
|
11182
|
-
if (previousMenu !== "threads" && !((_this$
|
|
13265
|
+
var _this$core33;
|
|
13266
|
+
if (previousMenu !== "threads" && !((_this$core33 = this.core) === null || _this$core33 === void 0 ? void 0 : _this$core33.telemetryDisabled)) trackThreadsTabClicked(this.getThreadsTelemetryProps());
|
|
11183
13267
|
this.autoSelectLatestThread();
|
|
11184
13268
|
}
|
|
11185
13269
|
if (key === "playground" && !this.playgroundAgent) this.startPlaygroundSession(false);
|
|
11186
13270
|
if (key === "memories") {
|
|
11187
|
-
var _this$
|
|
13271
|
+
var _this$core34;
|
|
11188
13272
|
this.ensureMemorySubscription();
|
|
11189
|
-
if (previousMenu !== "memories" && !((_this$
|
|
13273
|
+
if (previousMenu !== "memories" && !((_this$core34 = this.core) === null || _this$core34 === void 0 ? void 0 : _this$core34.telemetryDisabled)) trackMemoriesTabClicked(this.getMemoriesTelemetryProps());
|
|
11190
13274
|
}
|
|
11191
13275
|
if (key === "home" && previousMenu !== "home") this.homeViewedThisOpen = false;
|
|
11192
|
-
if (key === "
|
|
11193
|
-
|
|
11194
|
-
if (
|
|
11195
|
-
|
|
13276
|
+
if (key === "event-snippets") this.reloadEventSnippets();
|
|
13277
|
+
if (key === "ag-ui-events" || key === "agents") {
|
|
13278
|
+
if (!(this.pendingScrollToEventId !== null || this.pendingScrollToToolCallId !== null)) requestAnimationFrame(() => {
|
|
13279
|
+
const scroller = this.activeRoot.querySelector("#cpk-main-scroll");
|
|
13280
|
+
if (scroller) scroller.scrollTop = 0;
|
|
13281
|
+
});
|
|
13282
|
+
}
|
|
11196
13283
|
this.contextMenuOpen = false;
|
|
11197
13284
|
this.layoutMenuOpen = false;
|
|
11198
13285
|
this.persistState();
|
|
@@ -11378,10 +13465,10 @@ ${prettyEvent}</pre
|
|
|
11378
13465
|
`;
|
|
11379
13466
|
}
|
|
11380
13467
|
extractToolsFromAgents() {
|
|
11381
|
-
var _this$_core$
|
|
13468
|
+
var _this$_core$tools2;
|
|
11382
13469
|
if (!this._core) return [];
|
|
11383
13470
|
const tools = [];
|
|
11384
|
-
for (const coreTool of (_this$_core$
|
|
13471
|
+
for (const coreTool of (_this$_core$tools2 = this._core.tools) !== null && _this$_core$tools2 !== void 0 ? _this$_core$tools2 : []) {
|
|
11385
13472
|
var _coreTool$agentId;
|
|
11386
13473
|
tools.push({
|
|
11387
13474
|
agentId: (_coreTool$agentId = coreTool.agentId) !== null && _coreTool$agentId !== void 0 ? _coreTool$agentId : "",
|
|
@@ -11838,58 +13925,454 @@ ${prettyEvent}</pre
|
|
|
11838
13925
|
else this.expandedRows.add(eventId);
|
|
11839
13926
|
this.requestUpdate();
|
|
11840
13927
|
}
|
|
13928
|
+
/** Whether a given subject currently has something to say. */
|
|
13929
|
+
isSignalArmed(key) {
|
|
13930
|
+
if (isWiringErrorKey(key)) return this.errorSignalArmed[key];
|
|
13931
|
+
if (isEventErrorKey(key)) return this.eventErrorArmed[key];
|
|
13932
|
+
return this.newsSignalArmed;
|
|
13933
|
+
}
|
|
13934
|
+
/**
|
|
13935
|
+
* The signal that owns the single launcher dot, or null when the launcher is
|
|
13936
|
+
* quiet. Precedence rather than replacement: a suppressed signal stays armed
|
|
13937
|
+
* and takes the dot as soon as the higher-priority one clears, and its own
|
|
13938
|
+
* navigation marker is visible the whole time.
|
|
13939
|
+
*/
|
|
13940
|
+
getActiveLauncherSignal() {
|
|
13941
|
+
for (const key of LAUNCHER_SIGNAL_PRIORITY_ORDER) if (this.isSignalArmed(key)) return key;
|
|
13942
|
+
return null;
|
|
13943
|
+
}
|
|
13944
|
+
/**
|
|
13945
|
+
* The marker a navigation entry carries, or null for an unmarked entry.
|
|
13946
|
+
*
|
|
13947
|
+
* Markers are independent of the launcher's single dot, so a suppressed
|
|
13948
|
+
* signal is never actually hidden once the panel is open. They also render
|
|
13949
|
+
* on the entry that is *currently selected*: for the news signal that never
|
|
13950
|
+
* mattered, because its marker clears as soon as the view renders, but a
|
|
13951
|
+
* state mirror stays true while it is being read and suppressing it on the
|
|
13952
|
+
* active entry would make it reappear on navigating away.
|
|
13953
|
+
*/
|
|
13954
|
+
getNavigationSignalFor(key) {
|
|
13955
|
+
for (const signalKey of LAUNCHER_SIGNAL_PRIORITY_ORDER) {
|
|
13956
|
+
const signal = LAUNCHER_SIGNALS[signalKey];
|
|
13957
|
+
if (signal.markerTarget !== key) continue;
|
|
13958
|
+
if (!this.isSignalArmed(signalKey)) continue;
|
|
13959
|
+
if (signalKey === NEWS_SIGNAL_ID && !this.announcementLoaded) continue;
|
|
13960
|
+
return signal;
|
|
13961
|
+
}
|
|
13962
|
+
return null;
|
|
13963
|
+
}
|
|
13964
|
+
/** Whether a wiring error source is currently red. */
|
|
13965
|
+
hasArmedErrorSignal() {
|
|
13966
|
+
return WIRING_ERROR_KEYS.some((source) => this.errorSignalArmed[source]);
|
|
13967
|
+
}
|
|
13968
|
+
armEventErrorFromCode(code, message, context) {
|
|
13969
|
+
const key = eventErrorKeyForCode(code);
|
|
13970
|
+
if (key === null) return;
|
|
13971
|
+
const agentId = typeof (context === null || context === void 0 ? void 0 : context.agentId) === "string" && context.agentId.length > 0 ? context.agentId : void 0;
|
|
13972
|
+
const toolName = typeof (context === null || context === void 0 ? void 0 : context.toolName) === "string" && context.toolName.length > 0 ? context.toolName : void 0;
|
|
13973
|
+
const toolCallId = typeof (context === null || context === void 0 ? void 0 : context.toolCallId) === "string" && context.toolCallId.length > 0 ? context.toolCallId : void 0;
|
|
13974
|
+
this.armEventError(key, message, {
|
|
13975
|
+
agentId,
|
|
13976
|
+
toolName,
|
|
13977
|
+
toolCallId
|
|
13978
|
+
});
|
|
13979
|
+
}
|
|
13980
|
+
armEventError(key, message, extras = {}) {
|
|
13981
|
+
this.eventErrorDetails[key] = {
|
|
13982
|
+
message,
|
|
13983
|
+
...extras
|
|
13984
|
+
};
|
|
13985
|
+
const wasArmed = this.eventErrorArmed[key];
|
|
13986
|
+
this.eventErrorArmed[key] = true;
|
|
13987
|
+
if (!wasArmed) this.startSignalPulse(key);
|
|
13988
|
+
if (this.isOpen && !this.settingsOpen && this.selectedMenu === LAUNCHER_SIGNALS[key].landingTarget) this.applyEventErrorLanding(key);
|
|
13989
|
+
this.requestUpdate();
|
|
13990
|
+
}
|
|
13991
|
+
clearEventError(key) {
|
|
13992
|
+
if (!this.eventErrorArmed[key]) return;
|
|
13993
|
+
this.eventErrorArmed[key] = false;
|
|
13994
|
+
this.errorSignalViewedSources.delete(key);
|
|
13995
|
+
this.retireSignal(key);
|
|
13996
|
+
this.requestUpdate();
|
|
13997
|
+
}
|
|
13998
|
+
clearAllEventErrors() {
|
|
13999
|
+
for (const key of EVENT_ERROR_KEYS) {
|
|
14000
|
+
this.eventErrorDetails[key] = null;
|
|
14001
|
+
if (!this.eventErrorArmed[key]) continue;
|
|
14002
|
+
this.eventErrorArmed[key] = false;
|
|
14003
|
+
this.retireSignal(key);
|
|
14004
|
+
}
|
|
14005
|
+
}
|
|
14006
|
+
/**
|
|
14007
|
+
* An event error is unread until its landing view is actually on screen.
|
|
14008
|
+
* Opening the Inspector for a different leaf must not burn it.
|
|
14009
|
+
*/
|
|
14010
|
+
maybeCompleteEventErrorView() {
|
|
14011
|
+
if (!this.isOpen || this.settingsOpen) return;
|
|
14012
|
+
for (const key of EVENT_ERROR_KEYS) {
|
|
14013
|
+
if (!this.eventErrorArmed[key]) continue;
|
|
14014
|
+
if (this.selectedMenu !== LAUNCHER_SIGNALS[key].landingTarget) continue;
|
|
14015
|
+
this.clearEventError(key);
|
|
14016
|
+
}
|
|
14017
|
+
}
|
|
14018
|
+
isReducedMotionPreferred() {
|
|
14019
|
+
var _window$matchMedia4, _window4;
|
|
14020
|
+
return typeof window !== "undefined" && ((_window$matchMedia4 = (_window4 = window).matchMedia) === null || _window$matchMedia4 === void 0 ? void 0 : _window$matchMedia4.call(_window4, "(prefers-reduced-motion: reduce)").matches) === true;
|
|
14021
|
+
}
|
|
11841
14022
|
armNewsSignal(options) {
|
|
11842
14023
|
const wasArmed = this.newsSignalArmed;
|
|
11843
14024
|
this.newsSignalArmed = true;
|
|
11844
|
-
if (options.pulse
|
|
11845
|
-
this.newsSignalPulsePending = true;
|
|
11846
|
-
if (!wasArmed) this.requestUpdate();
|
|
11847
|
-
} else if (options.pulse) this.startNewsSignalPulse();
|
|
14025
|
+
if (options.pulse) this.startSignalPulse(NEWS_SIGNAL_ID);
|
|
11848
14026
|
else if (!wasArmed) this.requestUpdate();
|
|
11849
14027
|
}
|
|
11850
14028
|
clearNewsSignal() {
|
|
11851
14029
|
if (!this.newsSignalArmed) return;
|
|
11852
14030
|
this.newsSignalArmed = false;
|
|
11853
|
-
this.newsSignalPulsePending = false;
|
|
11854
14031
|
if (this.announcementTimestamp) saveAnnouncementReadTimestamp(this.announcementTimestamp);
|
|
11855
|
-
|
|
14032
|
+
this.retireSignal(NEWS_SIGNAL_ID);
|
|
11856
14033
|
this.requestUpdate();
|
|
11857
14034
|
}
|
|
11858
|
-
|
|
11859
|
-
|
|
11860
|
-
|
|
11861
|
-
|
|
14035
|
+
/**
|
|
14036
|
+
* Requests one beat for a signal, running it now or deferring it.
|
|
14037
|
+
*
|
|
14038
|
+
* There is a single pending slot and four reasons a beat cannot land. All
|
|
14039
|
+
* four are the same situation — "cannot land now, run later" — and treating
|
|
14040
|
+
* them alike is the point: three separate behaviours for one situation would
|
|
14041
|
+
* not survive a third signal.
|
|
14042
|
+
*
|
|
14043
|
+
* Reason 3 is not cosmetic. Starting a beat while one runs does not restart
|
|
14044
|
+
* the animation, because the attribute it binds to does not change value and
|
|
14045
|
+
* the pseudo-element selectors match on attribute *presence*; the running
|
|
14046
|
+
* beat would merely change colour mid-flight. A failure that arms during an
|
|
14047
|
+
* announcement beat must wait for that beat to end, or it would run only as
|
|
14048
|
+
* its final fraction.
|
|
14049
|
+
*
|
|
14050
|
+
* A failure's beat is followed by a pill, and the whole 3.4-second gesture
|
|
14051
|
+
* holds this one slot for its full duration. That is not a second scheduling
|
|
14052
|
+
* concept: reason 3 already says "another beat is running", and a gesture is
|
|
14053
|
+
* simply a longer beat.
|
|
14054
|
+
*/
|
|
14055
|
+
startSignalPulse(key) {
|
|
14056
|
+
if (this.isOpen || typeof document !== "undefined" && document.visibilityState !== "visible" || this.gestureSlotSignal !== null && this.gestureSlotSignal !== key || this.getActiveLauncherSignal() !== key) {
|
|
14057
|
+
const pending = this.pendingPulseSignal;
|
|
14058
|
+
if (pending === null || LAUNCHER_SIGNALS[key].priority >= LAUNCHER_SIGNALS[pending].priority) this.pendingPulseSignal = key;
|
|
11862
14059
|
this.requestUpdate();
|
|
11863
14060
|
return;
|
|
11864
14061
|
}
|
|
11865
|
-
this.
|
|
11866
|
-
this.
|
|
11867
|
-
|
|
14062
|
+
this.stopSignalPulse();
|
|
14063
|
+
this.pendingPulseSignal = null;
|
|
14064
|
+
this.pulsingSignal = key;
|
|
14065
|
+
if (isWiringErrorKey(key)) this.errorBeatSpent = true;
|
|
14066
|
+
else if (this.announcementTimestamp && key === NEWS_SIGNAL_ID) saveAnnouncementPulsedTimestamp(this.announcementTimestamp);
|
|
14067
|
+
this.beginGestureTail(key);
|
|
11868
14068
|
this.requestUpdate();
|
|
11869
14069
|
if (typeof window === "undefined") return;
|
|
11870
14070
|
this.pulseTimeoutId = setTimeout(() => {
|
|
11871
14071
|
this.pulseTimeoutId = null;
|
|
11872
|
-
this.
|
|
14072
|
+
this.pulsingSignal = null;
|
|
11873
14073
|
this.requestUpdate();
|
|
11874
|
-
|
|
14074
|
+
if (this.gestureSignal === key && this.pillPhase === "closed") {
|
|
14075
|
+
this.openPill();
|
|
14076
|
+
return;
|
|
14077
|
+
}
|
|
14078
|
+
if (this.gestureSignal === key) {
|
|
14079
|
+
this.endGesture();
|
|
14080
|
+
return;
|
|
14081
|
+
}
|
|
14082
|
+
this.flushPendingSignalPulse();
|
|
14083
|
+
}, LAUNCHER_SIGNALS[key].cadence);
|
|
11875
14084
|
}
|
|
11876
|
-
|
|
14085
|
+
stopSignalPulse() {
|
|
11877
14086
|
if (this.pulseTimeoutId !== null) {
|
|
11878
14087
|
clearTimeout(this.pulseTimeoutId);
|
|
11879
14088
|
this.pulseTimeoutId = null;
|
|
11880
14089
|
}
|
|
11881
|
-
this.
|
|
14090
|
+
this.pulsingSignal = null;
|
|
14091
|
+
}
|
|
14092
|
+
/**
|
|
14093
|
+
* Runs a deferred beat if it can land now, and drops it if its reason to
|
|
14094
|
+
* exist has gone: a nudge about a problem that no longer exists is worse
|
|
14095
|
+
* than no nudge at all.
|
|
14096
|
+
*/
|
|
14097
|
+
flushPendingSignalPulse() {
|
|
14098
|
+
const key = this.pendingPulseSignal;
|
|
14099
|
+
if (key === null) return;
|
|
14100
|
+
if (!this.isSignalArmed(key)) {
|
|
14101
|
+
this.pendingPulseSignal = null;
|
|
14102
|
+
this.requestUpdate();
|
|
14103
|
+
return;
|
|
14104
|
+
}
|
|
14105
|
+
this.startSignalPulse(key);
|
|
14106
|
+
}
|
|
14107
|
+
/**
|
|
14108
|
+
* Drops a signal's gesture, pending or running, when the signal goes quiet.
|
|
14109
|
+
*
|
|
14110
|
+
* The pill closes early: it states a condition, and the condition has
|
|
14111
|
+
* stopped being true. The beat is left to finish, because a beat asserts
|
|
14112
|
+
* nothing — it says *here*, and "here" is still true.
|
|
14113
|
+
*/
|
|
14114
|
+
retireSignal(key) {
|
|
14115
|
+
if (this.pendingPulseSignal === key) this.pendingPulseSignal = null;
|
|
14116
|
+
if (this.gestureSignal === key) this.closePillEarly();
|
|
14117
|
+
this.flushPendingSignalPulse();
|
|
14118
|
+
}
|
|
14119
|
+
/**
|
|
14120
|
+
* The signal holding the single gesture slot: a beat in flight, or the pill
|
|
14121
|
+
* and spoken sentence that follow it. One slot, not two — see reason 3 in
|
|
14122
|
+
* `startSignalPulse`.
|
|
14123
|
+
*/
|
|
14124
|
+
get gestureSlotSignal() {
|
|
14125
|
+
var _this$pulsingSignal;
|
|
14126
|
+
return (_this$pulsingSignal = this.pulsingSignal) !== null && _this$pulsingSignal !== void 0 ? _this$pulsingSignal : this.gestureSignal;
|
|
14127
|
+
}
|
|
14128
|
+
/**
|
|
14129
|
+
* Opens the gesture's tail alongside the beat, for a signal that carries a
|
|
14130
|
+
* pill. The pill is rendered immediately — clipped to nothing, so it shows
|
|
14131
|
+
* nothing — because its full width has to be on the page before the room
|
|
14132
|
+
* either side of the launcher can be measured.
|
|
14133
|
+
*
|
|
14134
|
+
* A signal with no pill label gets no tail at all, so the announcement's
|
|
14135
|
+
* gesture is exactly the beat it has always been.
|
|
14136
|
+
*/
|
|
14137
|
+
beginGestureTail(key) {
|
|
14138
|
+
this.cancelPillTimeout();
|
|
14139
|
+
if (LAUNCHER_SIGNALS[key].pillLabel === void 0) {
|
|
14140
|
+
this.gestureSignal = null;
|
|
14141
|
+
this.pillPhase = null;
|
|
14142
|
+
this.pillDirection = null;
|
|
14143
|
+
return;
|
|
14144
|
+
}
|
|
14145
|
+
this.gestureSignal = key;
|
|
14146
|
+
this.pillPhase = "closed";
|
|
14147
|
+
this.pillDirection = null;
|
|
14148
|
+
this.closeLauncherHud();
|
|
14149
|
+
}
|
|
14150
|
+
/**
|
|
14151
|
+
* Chooses the side, or suppresses the pill, from the room actually available
|
|
14152
|
+
* at gesture start. Measured once, from the DOM, because the launcher is
|
|
14153
|
+
* draggable and its position persists: a reader who parked it near the left
|
|
14154
|
+
* edge would otherwise get a permanently truncated pill.
|
|
14155
|
+
*
|
|
14156
|
+
* Where neither side has room there is no pill at all rather than a cut-off
|
|
14157
|
+
* one — the dot and the beat still fire, so the signal is intact and only
|
|
14158
|
+
* the label is lost. Constraining where the reader may drag the control to
|
|
14159
|
+
* protect this animation was considered and rejected: the page is theirs.
|
|
14160
|
+
*/
|
|
14161
|
+
resolvePillDirection() {
|
|
14162
|
+
if (this.pillDirection !== null || this.pillPhase === null) return;
|
|
14163
|
+
const wrapper = this.activeRoot.querySelector(".console-button-wrapper");
|
|
14164
|
+
const button = wrapper === null || wrapper === void 0 ? void 0 : wrapper.querySelector(".console-button");
|
|
14165
|
+
const pill = wrapper === null || wrapper === void 0 ? void 0 : wrapper.querySelector(".cpk-launcher-pill");
|
|
14166
|
+
if (!button || !pill || typeof window === "undefined") return;
|
|
14167
|
+
const mark = button.getBoundingClientRect();
|
|
14168
|
+
const overhang = Math.max(0, pill.getBoundingClientRect().width - mark.width);
|
|
14169
|
+
const viewportWidth = window.innerWidth;
|
|
14170
|
+
if (overhang === 0) {
|
|
14171
|
+
this.setPillOutcome("left");
|
|
14172
|
+
return;
|
|
14173
|
+
}
|
|
14174
|
+
if (mark.left - overhang >= EDGE_MARGIN) {
|
|
14175
|
+
this.setPillOutcome("left");
|
|
14176
|
+
return;
|
|
14177
|
+
}
|
|
14178
|
+
if (mark.right + overhang <= viewportWidth - EDGE_MARGIN) {
|
|
14179
|
+
this.setPillOutcome("right");
|
|
14180
|
+
return;
|
|
14181
|
+
}
|
|
14182
|
+
this.setPillOutcome(null);
|
|
14183
|
+
}
|
|
14184
|
+
/** Records the measurement's verdict, and drops the pill when it is null. */
|
|
14185
|
+
setPillOutcome(direction) {
|
|
14186
|
+
if (direction === null) {
|
|
14187
|
+
this.pillPhase = null;
|
|
14188
|
+
this.pillDirection = null;
|
|
14189
|
+
this.pillOutcome = "suppressed";
|
|
14190
|
+
this.requestUpdate();
|
|
14191
|
+
return;
|
|
14192
|
+
}
|
|
14193
|
+
this.pillDirection = direction;
|
|
14194
|
+
this.pillOutcome = "shown";
|
|
14195
|
+
this.requestUpdate();
|
|
14196
|
+
}
|
|
14197
|
+
/** Runs the pill's three phases in series once the beat has finished. */
|
|
14198
|
+
openPill() {
|
|
14199
|
+
this.resolvePillDirection();
|
|
14200
|
+
if (this.pillPhase === null) {
|
|
14201
|
+
this.endGesture();
|
|
14202
|
+
return;
|
|
14203
|
+
}
|
|
14204
|
+
this.advancePill("opening", ERROR_GESTURE_MS.open, () => {
|
|
14205
|
+
this.advancePill("holding", ERROR_GESTURE_MS.hold, () => {
|
|
14206
|
+
this.advancePill("closing", ERROR_GESTURE_MS.close, () => {
|
|
14207
|
+
this.endGesture();
|
|
14208
|
+
});
|
|
14209
|
+
});
|
|
14210
|
+
});
|
|
14211
|
+
}
|
|
14212
|
+
advancePill(phase, duration, next) {
|
|
14213
|
+
this.cancelPillTimeout();
|
|
14214
|
+
this.pillPhase = phase;
|
|
14215
|
+
this.requestUpdate();
|
|
14216
|
+
if (typeof window === "undefined") return;
|
|
14217
|
+
this.pillTimeoutId = setTimeout(() => {
|
|
14218
|
+
this.pillTimeoutId = null;
|
|
14219
|
+
next();
|
|
14220
|
+
}, duration);
|
|
14221
|
+
}
|
|
14222
|
+
/**
|
|
14223
|
+
* Closes the pill before its hold is out, because the failure it names has
|
|
14224
|
+
* been fixed. A pill that has not opened yet is simply dropped; the beat is
|
|
14225
|
+
* never cut short.
|
|
14226
|
+
*/
|
|
14227
|
+
closePillEarly() {
|
|
14228
|
+
if (this.pillPhase === null) {
|
|
14229
|
+
this.endGesture();
|
|
14230
|
+
return;
|
|
14231
|
+
}
|
|
14232
|
+
if (this.pillPhase === "closing") return;
|
|
14233
|
+
if (this.pillPhase === "closed") {
|
|
14234
|
+
this.pillPhase = null;
|
|
14235
|
+
this.requestUpdate();
|
|
14236
|
+
return;
|
|
14237
|
+
}
|
|
14238
|
+
this.advancePill("closing", ERROR_GESTURE_MS.close, () => {
|
|
14239
|
+
this.endGesture();
|
|
14240
|
+
});
|
|
14241
|
+
}
|
|
14242
|
+
/** Releases the slot and leaves the plain mark with its dot behind. */
|
|
14243
|
+
endGesture() {
|
|
14244
|
+
this.cancelGestureTail();
|
|
14245
|
+
this.requestUpdate();
|
|
14246
|
+
this.flushPendingSignalPulse();
|
|
14247
|
+
}
|
|
14248
|
+
/**
|
|
14249
|
+
* Drops the gesture's tail outright, with no closing animation, for the
|
|
14250
|
+
* cases where the launcher itself has gone: the panel opened over it, or the
|
|
14251
|
+
* element was removed from the page.
|
|
14252
|
+
*/
|
|
14253
|
+
cancelGestureTail() {
|
|
14254
|
+
this.cancelPillTimeout();
|
|
14255
|
+
this.gestureSignal = null;
|
|
14256
|
+
this.pillPhase = null;
|
|
14257
|
+
this.pillDirection = null;
|
|
14258
|
+
}
|
|
14259
|
+
cancelPillTimeout() {
|
|
14260
|
+
if (this.pillTimeoutId !== null) {
|
|
14261
|
+
clearTimeout(this.pillTimeoutId);
|
|
14262
|
+
this.pillTimeoutId = null;
|
|
14263
|
+
}
|
|
14264
|
+
}
|
|
14265
|
+
/**
|
|
14266
|
+
* Whether each error source is currently broken.
|
|
14267
|
+
*
|
|
14268
|
+
* Only two *wiring* conditions qualify. App errors (runs, tools, memory)
|
|
14269
|
+
* are unread events on a different latch — they name themselves on the pill
|
|
14270
|
+
* and clear when their landing view is read. Notably absent from *this*
|
|
14271
|
+
* latch:
|
|
14272
|
+
*
|
|
14273
|
+
* - **A failed agent run.** A run is an event. It arms `run`, not this
|
|
14274
|
+
* state. The resting wiring dot must not stay red for the rest of a debug
|
|
14275
|
+
* hour.
|
|
14276
|
+
* - **The core error channel as a wiring source.** Handshake failure already
|
|
14277
|
+
* sets the connection state. Other codes arm `run` or `tool`.
|
|
14278
|
+
* - **Memory failures before Learning is live.** The memory store is lazy
|
|
14279
|
+
* because creating it opens a realtime connection. Once it exists, a load
|
|
14280
|
+
* failure arms `memory`.
|
|
14281
|
+
* - **Product states.** An unconfigured Intelligence and an unentitled
|
|
14282
|
+
* Memory plan are not defects. The signal fires only where wiring is
|
|
14283
|
+
* present and the call still fails — which for threads is guaranteed by
|
|
14284
|
+
* `_threadsErrorByAgent` only ever being written while the thread
|
|
14285
|
+
* endpoints are available.
|
|
14286
|
+
*
|
|
14287
|
+
* Known limitation: the runtime handshake runs once, on connect. A server
|
|
14288
|
+
* that dies *after* the page loaded leaves the connection state at connected
|
|
14289
|
+
* and raises nothing; the next page load re-runs the handshake and the
|
|
14290
|
+
* signal appears then. The signal reports the wiring state as last
|
|
14291
|
+
* established. Closing that gap means a re-probe in the core, which is a
|
|
14292
|
+
* runtime concern.
|
|
14293
|
+
*/
|
|
14294
|
+
isErrorSourceBroken(source) {
|
|
14295
|
+
if (source === "connection") {
|
|
14296
|
+
const state = this.getCoreStatusSummary().state;
|
|
14297
|
+
if (runtimeConnectionNeedsAttention(state)) return true;
|
|
14298
|
+
return this.errorSignalArmed.connection && state === "connecting";
|
|
14299
|
+
}
|
|
14300
|
+
return this._threadsErrorByAgent.size > 0;
|
|
14301
|
+
}
|
|
14302
|
+
/**
|
|
14303
|
+
* Mirrors both error latches onto the live state. Called from `willUpdate`,
|
|
14304
|
+
* because every mutation of the underlying state already requests an update,
|
|
14305
|
+
* so the resting dot follows the state within the same render.
|
|
14306
|
+
*/
|
|
14307
|
+
evaluateErrorSignals() {
|
|
14308
|
+
const wasArmed = this.hasArmedErrorSignal();
|
|
14309
|
+
for (const source of WIRING_ERROR_KEYS) {
|
|
14310
|
+
if (this.isErrorSourceBroken(source)) {
|
|
14311
|
+
if (this.errorSignalArmed[source]) continue;
|
|
14312
|
+
this.errorSignalArmed[source] = true;
|
|
14313
|
+
continue;
|
|
14314
|
+
}
|
|
14315
|
+
if (!this.errorSignalArmed[source]) continue;
|
|
14316
|
+
this.errorSignalArmed[source] = false;
|
|
14317
|
+
this.errorSignalViewedSources.delete(source);
|
|
14318
|
+
this.retireSignal(source);
|
|
14319
|
+
}
|
|
14320
|
+
this.onErrorSignalsChanged(wasArmed);
|
|
14321
|
+
}
|
|
14322
|
+
/**
|
|
14323
|
+
* Applies the rising-edge rule after a latch changed.
|
|
14324
|
+
*
|
|
14325
|
+
* The beat fires on the transition from "no failure" to "at least one
|
|
14326
|
+
* failure", evaluated globally across the sources and never again while
|
|
14327
|
+
* anything is red — one root cause, one nudge.
|
|
14328
|
+
*/
|
|
14329
|
+
onErrorSignalsChanged(wasArmed) {
|
|
14330
|
+
if (!this.hasArmedErrorSignal()) {
|
|
14331
|
+
this.errorBeatSpent = false;
|
|
14332
|
+
this.pillOutcome = null;
|
|
14333
|
+
return;
|
|
14334
|
+
}
|
|
14335
|
+
if (wasArmed || this.errorBeatSpent) return;
|
|
14336
|
+
const active = this.getActiveLauncherSignal();
|
|
14337
|
+
if (active !== null && isErrorSignalKey(active)) this.startSignalPulse(active);
|
|
14338
|
+
}
|
|
14339
|
+
/**
|
|
14340
|
+
* Records `oss.inspector.error_signal_viewed` once per source per outage,
|
|
14341
|
+
* when the dot is actually on screen.
|
|
14342
|
+
*
|
|
14343
|
+
* Unlike the announcement's launcher event this fires immediately rather
|
|
14344
|
+
* than waiting for the runtime handshake to report `telemetryDisabled`.
|
|
14345
|
+
* The held-queue would never drain for the connection source — a connection
|
|
14346
|
+
* failure means the handshake did not complete — so queuing would guarantee
|
|
14347
|
+
* zero data for the case this event exists to measure. `trackOpened` already
|
|
14348
|
+
* sends on the same terms. Both opt-out layers still gate it: the local
|
|
14349
|
+
* opt-out inside `track`, and the runtime's flag once it is known.
|
|
14350
|
+
*/
|
|
14351
|
+
maybeTrackErrorSignalViewed() {
|
|
14352
|
+
var _this$core35, _this$pillOutcome;
|
|
14353
|
+
if (this.isOpen || typeof document === "undefined" || document.visibilityState !== "visible") return;
|
|
14354
|
+
const active = this.getActiveLauncherSignal();
|
|
14355
|
+
if (active === null || !isErrorSignalKey(active)) return;
|
|
14356
|
+
if (this.errorSignalViewedSources.has(active)) return;
|
|
14357
|
+
if (this.pillOutcome === null && LAUNCHER_SIGNALS[active].pillLabel !== void 0) return;
|
|
14358
|
+
if ((_this$core35 = this.core) === null || _this$core35 === void 0 ? void 0 : _this$core35.telemetryDisabled) return;
|
|
14359
|
+
this.errorSignalViewedSources.add(active);
|
|
14360
|
+
trackErrorSignalViewed({
|
|
14361
|
+
source: active,
|
|
14362
|
+
presentation: this.isReducedMotionPreferred() ? "reduced_motion" : "animated",
|
|
14363
|
+
label: (_this$pillOutcome = this.pillOutcome) !== null && _this$pillOutcome !== void 0 ? _this$pillOutcome : "suppressed"
|
|
14364
|
+
});
|
|
11882
14365
|
}
|
|
11883
14366
|
maybeTrackNewsSignalViewed() {
|
|
11884
|
-
var _window$
|
|
11885
|
-
if (!this.newsSignalArmed ||
|
|
14367
|
+
var _window$matchMedia5, _window5, _this$announcementCta2;
|
|
14368
|
+
if (!this.newsSignalArmed || this.pulsingSignal !== NEWS_SIGNAL_ID || this.isOpen || typeof document === "undefined" || document.visibilityState !== "visible") return;
|
|
11886
14369
|
const id = this.announcementTimestamp;
|
|
11887
14370
|
if (!id || this.viewedNewsSignalIds.has(id)) return;
|
|
11888
14371
|
this.viewedNewsSignalIds.add(id);
|
|
11889
14372
|
this.pendingNewsSignalViewed = {
|
|
11890
14373
|
banner_id: id,
|
|
11891
14374
|
surface: "launcher",
|
|
11892
|
-
presentation: typeof window !== "undefined" && ((_window$
|
|
14375
|
+
presentation: typeof window !== "undefined" && ((_window$matchMedia5 = (_window5 = window).matchMedia) === null || _window$matchMedia5 === void 0 ? void 0 : _window$matchMedia5.call(_window5, "(prefers-reduced-motion: reduce)").matches) ? "reduced_motion" : "animated",
|
|
11893
14376
|
cta_label: (_this$announcementCta2 = this.announcementCtaLabel) !== null && _this$announcementCta2 !== void 0 ? _this$announcementCta2 : void 0
|
|
11894
14377
|
};
|
|
11895
14378
|
this.flushPendingWhatsNewTelemetry();
|
|
@@ -11951,9 +14434,9 @@ ${prettyEvent}</pre
|
|
|
11951
14434
|
this.flushPendingWhatsNewTelemetry();
|
|
11952
14435
|
}
|
|
11953
14436
|
flushPendingWhatsNewTelemetry() {
|
|
11954
|
-
var _this$
|
|
14437
|
+
var _this$core36;
|
|
11955
14438
|
if (this.pendingBannerViewed.length === 0 && !this.pendingNewsSignalViewed) return;
|
|
11956
|
-
if ((_this$
|
|
14439
|
+
if ((_this$core36 = this.core) === null || _this$core36 === void 0 ? void 0 : _this$core36.telemetryDisabled) {
|
|
11957
14440
|
this.pendingBannerViewed = [];
|
|
11958
14441
|
this.pendingNewsSignalViewed = null;
|
|
11959
14442
|
return;
|
|
@@ -12035,11 +14518,11 @@ ${prettyEvent}</pre
|
|
|
12035
14518
|
}
|
|
12036
14519
|
appendRefParam(href, ref = "cpk-inspector") {
|
|
12037
14520
|
try {
|
|
12038
|
-
var _this$
|
|
14521
|
+
var _this$core37;
|
|
12039
14522
|
const isRootRelative = href.startsWith("/") && !href.startsWith("//");
|
|
12040
14523
|
const url = new URL(href, typeof window !== "undefined" ? window.location.href : "https://copilotkit.ai");
|
|
12041
14524
|
if (!url.searchParams.has("ref")) url.searchParams.append("ref", ref);
|
|
12042
|
-
if (!url.searchParams.has("posthog_distinct_id") && this.runtimeStatus === _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected && !((_this$
|
|
14525
|
+
if (!url.searchParams.has("posthog_distinct_id") && this.runtimeStatus === _copilotkit_core.CopilotKitCoreRuntimeConnectionStatus.Connected && !((_this$core37 = this.core) === null || _this$core37 === void 0 ? void 0 : _this$core37.telemetryDisabled) && this.isCopilotKitDestination(url)) {
|
|
12043
14526
|
const distinctId = getTelemetryDistinctIdForUrl();
|
|
12044
14527
|
if (distinctId) url.searchParams.append("posthog_distinct_id", distinctId);
|
|
12045
14528
|
}
|
|
@@ -12107,18 +14590,28 @@ ${prettyEvent}</pre
|
|
|
12107
14590
|
.console-button-wrapper {
|
|
12108
14591
|
position: relative;
|
|
12109
14592
|
display: inline-flex;
|
|
12110
|
-
|
|
12111
|
-
|
|
12112
|
-
|
|
14593
|
+
/* The launcher's surface and edge, shared by the button and the pill so
|
|
14594
|
+
the two cannot drift apart. A dark grey rather than near-black: the
|
|
14595
|
+
launcher sits on a customer's page, and 1,5,7 against white is a
|
|
14596
|
+
harder edge than this surface needs. */
|
|
14597
|
+
--cpk-launcher-face: rgba(28, 31, 36, 0.95);
|
|
14598
|
+
--cpk-launcher-face-solid: rgb(28, 31, 36);
|
|
14599
|
+
--cpk-launcher-edge: rgba(190, 194, 255, 0.25);
|
|
12113
14600
|
/* The launcher's own size, exposed so the signal dot can be placed
|
|
12114
14601
|
against the OUTER rim with a length rather than a percentage.
|
|
12115
14602
|
Percentages resolve against the padding box, which the 1px border
|
|
12116
|
-
insets, and the dot would land inside the rim.
|
|
14603
|
+
insets, and the dot would land inside the rim.
|
|
14604
|
+
|
|
14605
|
+
Declared on the wrapper rather than on the button so the pill, which
|
|
14606
|
+
is the button's sibling, can clear the mark by the same length. */
|
|
12117
14607
|
--cpk-launcher-size: clamp(
|
|
12118
14608
|
${LAUNCHER_MIN_SIZE}px,
|
|
12119
14609
|
7vw,
|
|
12120
14610
|
${LAUNCHER_MAX_SIZE}px
|
|
12121
14611
|
);
|
|
14612
|
+
}
|
|
14613
|
+
|
|
14614
|
+
.console-button {
|
|
12122
14615
|
width: var(--cpk-launcher-size);
|
|
12123
14616
|
height: var(--cpk-launcher-size);
|
|
12124
14617
|
/* Keep the 1px border inside the declared outer size. */
|
|
@@ -12520,14 +15013,14 @@ ${prettyEvent}</pre
|
|
|
12520
15013
|
|
|
12521
15014
|
/* ── Floating button ─────────────────────────────────────────── */
|
|
12522
15015
|
.console-button {
|
|
12523
|
-
background-color:
|
|
12524
|
-
border-color:
|
|
15016
|
+
background-color: var(--cpk-launcher-face) !important;
|
|
15017
|
+
border-color: var(--cpk-launcher-edge) !important;
|
|
12525
15018
|
box-shadow:
|
|
12526
15019
|
0 0 0 1px rgba(190, 194, 255, 0.15),
|
|
12527
15020
|
0 4px 14px rgba(1, 5, 7, 0.28) !important;
|
|
12528
15021
|
}
|
|
12529
15022
|
.console-button:hover {
|
|
12530
|
-
background-color:
|
|
15023
|
+
background-color: var(--cpk-launcher-face-solid) !important;
|
|
12531
15024
|
border-color: rgba(190, 194, 255, 0.45) !important;
|
|
12532
15025
|
}
|
|
12533
15026
|
.console-button:focus-visible {
|
|
@@ -12545,7 +15038,6 @@ ${prettyEvent}</pre
|
|
|
12545
15038
|
* that forces a repaint every frame is not acceptable.
|
|
12546
15039
|
*/
|
|
12547
15040
|
.console-button[data-cpk-signal] {
|
|
12548
|
-
--cpk-launcher-face: rgba(1, 5, 7, 0.95);
|
|
12549
15041
|
isolation: isolate;
|
|
12550
15042
|
}
|
|
12551
15043
|
|
|
@@ -12655,11 +15147,197 @@ ${prettyEvent}</pre
|
|
|
12655
15147
|
box-shadow: 0 0 0 1.5px var(--cpk-launcher-face);
|
|
12656
15148
|
}
|
|
12657
15149
|
|
|
15150
|
+
/* ── Launcher pill: the launcher opens sideways and says what ─── */
|
|
15151
|
+
/*
|
|
15152
|
+
* The pill is laid out at its FULL width from the first frame and
|
|
15153
|
+
* revealed by animating a rectangular clip. Nothing is scaled and
|
|
15154
|
+
* nothing is resized.
|
|
15155
|
+
*
|
|
15156
|
+
* That is not a stylistic choice. This component is permanently mounted
|
|
15157
|
+
* on top of a customer's application, so no property that forces a
|
|
15158
|
+
* layout on every frame is acceptable — and animating "width" does
|
|
15159
|
+
* exactly that, sixty times a second, on someone else's page. A clip
|
|
15160
|
+
* leaves the element's geometry constant and changes only the visible
|
|
15161
|
+
* region, which the compositor handles. Animating a horizontal scale
|
|
15162
|
+
* was the other candidate and squashes the mark itself, not merely the
|
|
15163
|
+
* rounded end, so the logo would need counter-scaling and the dot and
|
|
15164
|
+
* halo would become ellipses.
|
|
15165
|
+
*
|
|
15166
|
+
* The launcher's own face and border are repeated here so the two form
|
|
15167
|
+
* one capsule: the button paints last and therefore on top, with no
|
|
15168
|
+
* z-index needed. The mark's own ring and shadow are deliberately left
|
|
15169
|
+
* alone for the whole gesture — the circle's outline staying visible
|
|
15170
|
+
* inside the open pill was looked at against the alternative and kept.
|
|
15171
|
+
*
|
|
15172
|
+
* A column, not a row: the pill carries a heading and a subline stacked,
|
|
15173
|
+
* centred against a height that does not change. "justify-content"
|
|
15174
|
+
* centres the pair vertically and "align-items" keeps both lines flush
|
|
15175
|
+
* left, so the pill never grows taller than the launcher it opens from.
|
|
15176
|
+
*/
|
|
15177
|
+
.cpk-launcher-pill {
|
|
15178
|
+
position: absolute;
|
|
15179
|
+
top: 50%;
|
|
15180
|
+
margin-top: calc(var(--cpk-launcher-size) / -2);
|
|
15181
|
+
height: var(--cpk-launcher-size);
|
|
15182
|
+
display: inline-flex;
|
|
15183
|
+
flex-direction: column;
|
|
15184
|
+
justify-content: center;
|
|
15185
|
+
align-items: flex-start;
|
|
15186
|
+
gap: 1px;
|
|
15187
|
+
box-sizing: border-box;
|
|
15188
|
+
border-radius: 999px;
|
|
15189
|
+
border: 1px solid var(--cpk-launcher-edge);
|
|
15190
|
+
background: var(--cpk-launcher-face);
|
|
15191
|
+
color: #ffffff;
|
|
15192
|
+
white-space: nowrap;
|
|
15193
|
+
pointer-events: none;
|
|
15194
|
+
opacity: 0;
|
|
15195
|
+
}
|
|
15196
|
+
|
|
15197
|
+
/* The failure class, word-identical to the panel's own wording. */
|
|
15198
|
+
.cpk-launcher-pill__heading {
|
|
15199
|
+
font-size: 12px;
|
|
15200
|
+
font-weight: 600;
|
|
15201
|
+
line-height: 1.2;
|
|
15202
|
+
}
|
|
15203
|
+
|
|
15204
|
+
/*
|
|
15205
|
+
* The one line of copy in this feature that exists nowhere else in the
|
|
15206
|
+
* product. The heading above is word-identical to the panel, which is
|
|
15207
|
+
* the standing rule; this line is a deliberate, owner-approved exception
|
|
15208
|
+
* to it, because the pill is now clickable and has to say so.
|
|
15209
|
+
*
|
|
15210
|
+
* It is NOT spoken. A screen-reader user cannot act on an instruction
|
|
15211
|
+
* delivered through an announcement, and it would double the spoken
|
|
15212
|
+
* length — so the live region carries the failure class alone.
|
|
15213
|
+
*/
|
|
15214
|
+
.cpk-launcher-pill__subline {
|
|
15215
|
+
font-size: 10.5px;
|
|
15216
|
+
font-weight: 500;
|
|
15217
|
+
line-height: 1.2;
|
|
15218
|
+
opacity: 0.72;
|
|
15219
|
+
}
|
|
15220
|
+
|
|
15221
|
+
/*
|
|
15222
|
+
* Two directions, one animation with the inset on the other side. The
|
|
15223
|
+
* padding on the launcher's side clears the mark, so the words never sit
|
|
15224
|
+
* under it. The text-side padding is derived from the capsule's radius
|
|
15225
|
+
* (half the launcher size), NOT a bare literal: padding is measured from
|
|
15226
|
+
* the bounding box, but the first half-height of that side is the rounded
|
|
15227
|
+
* cap. Half the size lands the text exactly where the cap ends and the
|
|
15228
|
+
* straight edge begins. A literal 14px put it 16px inside the curve at the
|
|
15229
|
+
* production launcher size, which is itself a clamp on the viewport.
|
|
15230
|
+
*/
|
|
15231
|
+
.cpk-launcher-pill[data-cpk-pill-direction="left"] {
|
|
15232
|
+
right: 0;
|
|
15233
|
+
padding: 0 calc(var(--cpk-launcher-size) + 12px) 0
|
|
15234
|
+
calc(var(--cpk-launcher-size) / 2);
|
|
15235
|
+
clip-path: inset(0 0 0 calc(100% - var(--cpk-launcher-size)));
|
|
15236
|
+
}
|
|
15237
|
+
.cpk-launcher-pill[data-cpk-pill-direction="right"] {
|
|
15238
|
+
left: 0;
|
|
15239
|
+
padding: 0 calc(var(--cpk-launcher-size) / 2) 0
|
|
15240
|
+
calc(var(--cpk-launcher-size) + 12px);
|
|
15241
|
+
clip-path: inset(0 calc(100% - var(--cpk-launcher-size)) 0 0);
|
|
15242
|
+
}
|
|
15243
|
+
|
|
15244
|
+
/*
|
|
15245
|
+
* "round" on both stops, so the revealing edge is the capsule's own
|
|
15246
|
+
* rounded end travelling sideways rather than a straight vertical line
|
|
15247
|
+
* wiping across it. An unrounded inset reads as a wipe; this reads as an
|
|
15248
|
+
* opening. It adds no animated property: the clip is still the clip.
|
|
15249
|
+
*/
|
|
15250
|
+
@keyframes cpk-launcher-pill-left {
|
|
15251
|
+
0% {
|
|
15252
|
+
opacity: 0;
|
|
15253
|
+
clip-path: inset(
|
|
15254
|
+
0 0 0 calc(100% - var(--cpk-launcher-size)) round 999px
|
|
15255
|
+
);
|
|
15256
|
+
}
|
|
15257
|
+
100% {
|
|
15258
|
+
opacity: 1;
|
|
15259
|
+
clip-path: inset(0 0 0 0 round 999px);
|
|
15260
|
+
}
|
|
15261
|
+
}
|
|
15262
|
+
|
|
15263
|
+
@keyframes cpk-launcher-pill-right {
|
|
15264
|
+
0% {
|
|
15265
|
+
opacity: 0;
|
|
15266
|
+
clip-path: inset(
|
|
15267
|
+
0 calc(100% - var(--cpk-launcher-size)) 0 0 round 999px
|
|
15268
|
+
);
|
|
15269
|
+
}
|
|
15270
|
+
100% {
|
|
15271
|
+
opacity: 1;
|
|
15272
|
+
clip-path: inset(0 0 0 0 round 999px);
|
|
15273
|
+
}
|
|
15274
|
+
}
|
|
15275
|
+
|
|
15276
|
+
/*
|
|
15277
|
+
* The pill takes the pointer exactly while it is on screen, so the
|
|
15278
|
+
* instruction it now carries is honest: a click on it opens the
|
|
15279
|
+
* Inspector, the same action as pressing the mark. During the beat the
|
|
15280
|
+
* clip covers only the mark itself, and a click target nobody can see
|
|
15281
|
+
* over someone else's page is not something to ship — so the base rule
|
|
15282
|
+
* keeps "pointer-events: none" and only the three visible phases take it
|
|
15283
|
+
* back.
|
|
15284
|
+
* The button paints last and therefore wins the pointer where the two
|
|
15285
|
+
* overlap, so dragging the launcher is unaffected throughout.
|
|
15286
|
+
*/
|
|
15287
|
+
.cpk-launcher-pill[data-cpk-pill-phase="opening"],
|
|
15288
|
+
.cpk-launcher-pill[data-cpk-pill-phase="holding"],
|
|
15289
|
+
.cpk-launcher-pill[data-cpk-pill-phase="closing"] {
|
|
15290
|
+
pointer-events: auto;
|
|
15291
|
+
cursor: pointer;
|
|
15292
|
+
}
|
|
15293
|
+
|
|
15294
|
+
/* Closing is the same animation played backwards, so the two phases can
|
|
15295
|
+
never drift apart. */
|
|
15296
|
+
.cpk-launcher-pill[data-cpk-pill-phase="opening"],
|
|
15297
|
+
.cpk-launcher-pill[data-cpk-pill-phase="closing"] {
|
|
15298
|
+
animation-timing-function: cubic-bezier(0.16, 1, 0.3, 1);
|
|
15299
|
+
animation-iteration-count: 1;
|
|
15300
|
+
animation-fill-mode: forwards;
|
|
15301
|
+
}
|
|
15302
|
+
.cpk-launcher-pill[data-cpk-pill-phase="opening"] {
|
|
15303
|
+
animation-duration: var(--cpk-launcher-pill-open);
|
|
15304
|
+
}
|
|
15305
|
+
.cpk-launcher-pill[data-cpk-pill-phase="closing"] {
|
|
15306
|
+
animation-duration: var(--cpk-launcher-pill-close);
|
|
15307
|
+
animation-direction: reverse;
|
|
15308
|
+
}
|
|
15309
|
+
.cpk-launcher-pill[data-cpk-pill-phase="opening"][data-cpk-pill-direction="left"],
|
|
15310
|
+
.cpk-launcher-pill[data-cpk-pill-phase="closing"][data-cpk-pill-direction="left"] {
|
|
15311
|
+
animation-name: cpk-launcher-pill-left;
|
|
15312
|
+
}
|
|
15313
|
+
.cpk-launcher-pill[data-cpk-pill-phase="opening"][data-cpk-pill-direction="right"],
|
|
15314
|
+
.cpk-launcher-pill[data-cpk-pill-phase="closing"][data-cpk-pill-direction="right"] {
|
|
15315
|
+
animation-name: cpk-launcher-pill-right;
|
|
15316
|
+
}
|
|
15317
|
+
|
|
15318
|
+
/* The hold is the end state of the reveal, held. */
|
|
15319
|
+
.cpk-launcher-pill[data-cpk-pill-phase="holding"] {
|
|
15320
|
+
opacity: 1;
|
|
15321
|
+
clip-path: inset(0 0 0 0);
|
|
15322
|
+
}
|
|
15323
|
+
|
|
12658
15324
|
/*
|
|
12659
15325
|
* Reduced motion: the halo is held statically rather than animated, so
|
|
12660
15326
|
* the information arrives without the movement.
|
|
12661
15327
|
*/
|
|
12662
15328
|
@media (prefers-reduced-motion: reduce) {
|
|
15329
|
+
/*
|
|
15330
|
+
* The pill is shown by opacity alone, with no clip animation and the
|
|
15331
|
+
* same hold. The instruction is to reduce motion, not to withhold
|
|
15332
|
+
* information, and this reader needs the label as much as anyone.
|
|
15333
|
+
*/
|
|
15334
|
+
.cpk-launcher-pill[data-cpk-pill-phase="opening"],
|
|
15335
|
+
.cpk-launcher-pill[data-cpk-pill-phase="holding"],
|
|
15336
|
+
.cpk-launcher-pill[data-cpk-pill-phase="closing"] {
|
|
15337
|
+
animation: none !important;
|
|
15338
|
+
opacity: 1;
|
|
15339
|
+
clip-path: inset(0 0 0 0);
|
|
15340
|
+
}
|
|
12663
15341
|
.cpk-launcher-signal-wash {
|
|
12664
15342
|
opacity: 0.85;
|
|
12665
15343
|
}
|
|
@@ -12679,11 +15357,225 @@ ${prettyEvent}</pre
|
|
|
12679
15357
|
}
|
|
12680
15358
|
}
|
|
12681
15359
|
|
|
15360
|
+
/* ── Launcher HUD: hover menu, quieter than the error island ── */
|
|
15361
|
+
.console-button-wrapper[data-cpk-hud="open"] .cpk-launcher-hud {
|
|
15362
|
+
pointer-events: auto;
|
|
15363
|
+
opacity: 1;
|
|
15364
|
+
transform: none;
|
|
15365
|
+
visibility: visible;
|
|
15366
|
+
}
|
|
15367
|
+
|
|
15368
|
+
.cpk-launcher-hud {
|
|
15369
|
+
position: absolute;
|
|
15370
|
+
top: 0;
|
|
15371
|
+
z-index: 4;
|
|
15372
|
+
padding-right: 14px;
|
|
15373
|
+
pointer-events: none;
|
|
15374
|
+
opacity: 0;
|
|
15375
|
+
visibility: hidden;
|
|
15376
|
+
transform: translateX(8px);
|
|
15377
|
+
transition:
|
|
15378
|
+
opacity 160ms ease,
|
|
15379
|
+
transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
15380
|
+
}
|
|
15381
|
+
|
|
15382
|
+
.cpk-launcher-hud[data-cpk-hud-side="left"] {
|
|
15383
|
+
right: 100%;
|
|
15384
|
+
padding-right: 14px;
|
|
15385
|
+
padding-left: 0;
|
|
15386
|
+
}
|
|
15387
|
+
|
|
15388
|
+
.cpk-launcher-hud[data-cpk-hud-side="right"] {
|
|
15389
|
+
left: 100%;
|
|
15390
|
+
right: auto;
|
|
15391
|
+
padding-right: 0;
|
|
15392
|
+
padding-left: 14px;
|
|
15393
|
+
transform: translateX(-8px);
|
|
15394
|
+
}
|
|
15395
|
+
|
|
15396
|
+
.console-button-wrapper[data-cpk-hud="open"]
|
|
15397
|
+
.cpk-launcher-hud[data-cpk-hud-side="right"] {
|
|
15398
|
+
transform: none;
|
|
15399
|
+
}
|
|
15400
|
+
|
|
15401
|
+
.cpk-launcher-hud__card {
|
|
15402
|
+
--hud-fill: rgb(28 31 36 / 0.88);
|
|
15403
|
+
--hud-line: rgb(190 194 255 / 0.5);
|
|
15404
|
+
position: relative;
|
|
15405
|
+
width: 228px;
|
|
15406
|
+
padding: 4px;
|
|
15407
|
+
border: 1px dotted var(--hud-line);
|
|
15408
|
+
border-radius: 10px;
|
|
15409
|
+
background: var(--hud-fill);
|
|
15410
|
+
color: #fff;
|
|
15411
|
+
backdrop-filter: blur(12px) saturate(1.2);
|
|
15412
|
+
box-shadow: 0 8px 20px rgb(1 5 7 / 0.18);
|
|
15413
|
+
}
|
|
15414
|
+
|
|
15415
|
+
.cpk-launcher-hud__arrow {
|
|
15416
|
+
position: absolute;
|
|
15417
|
+
top: calc(var(--cpk-launcher-size) / 2);
|
|
15418
|
+
width: 10px;
|
|
15419
|
+
height: 10px;
|
|
15420
|
+
background: var(--hud-fill);
|
|
15421
|
+
transform: translateY(-50%) rotate(45deg);
|
|
15422
|
+
}
|
|
15423
|
+
|
|
15424
|
+
.cpk-launcher-hud[data-cpk-hud-side="left"] .cpk-launcher-hud__arrow {
|
|
15425
|
+
right: -5px;
|
|
15426
|
+
border-top: 1px solid var(--hud-line);
|
|
15427
|
+
border-right: 1px solid var(--hud-line);
|
|
15428
|
+
}
|
|
15429
|
+
|
|
15430
|
+
.cpk-launcher-hud[data-cpk-hud-side="right"] .cpk-launcher-hud__arrow {
|
|
15431
|
+
left: -5px;
|
|
15432
|
+
border-bottom: 1px solid var(--hud-line);
|
|
15433
|
+
border-left: 1px solid var(--hud-line);
|
|
15434
|
+
}
|
|
15435
|
+
|
|
15436
|
+
.cpk-launcher-hud__list {
|
|
15437
|
+
margin: 0;
|
|
15438
|
+
padding: 0;
|
|
15439
|
+
list-style: none;
|
|
15440
|
+
}
|
|
15441
|
+
|
|
15442
|
+
.cpk-launcher-hud__list + .cpk-launcher-hud__list {
|
|
15443
|
+
margin-top: 4px;
|
|
15444
|
+
padding-top: 4px;
|
|
15445
|
+
border-top: 1px dotted var(--hud-line);
|
|
15446
|
+
}
|
|
15447
|
+
|
|
15448
|
+
.cpk-launcher-hud__row {
|
|
15449
|
+
position: relative;
|
|
15450
|
+
display: grid;
|
|
15451
|
+
grid-template-columns: 1fr 28px;
|
|
15452
|
+
align-items: start;
|
|
15453
|
+
border-radius: 7px;
|
|
15454
|
+
cursor: pointer;
|
|
15455
|
+
}
|
|
15456
|
+
|
|
15457
|
+
.cpk-launcher-hud__row + .cpk-launcher-hud__row {
|
|
15458
|
+
margin-top: 1px;
|
|
15459
|
+
}
|
|
15460
|
+
|
|
15461
|
+
.cpk-launcher-hud__row:hover,
|
|
15462
|
+
.cpk-launcher-hud__row:focus-within,
|
|
15463
|
+
.cpk-launcher-hud__row[data-cpk-hud-help="open"] {
|
|
15464
|
+
background: rgb(255 255 255 / 0.06);
|
|
15465
|
+
}
|
|
15466
|
+
|
|
15467
|
+
.cpk-launcher-hud__action {
|
|
15468
|
+
display: flex;
|
|
15469
|
+
gap: 8px;
|
|
15470
|
+
min-height: 32px;
|
|
15471
|
+
align-items: center;
|
|
15472
|
+
padding: 6px 8px;
|
|
15473
|
+
border: 0;
|
|
15474
|
+
border-radius: 7px;
|
|
15475
|
+
background: transparent;
|
|
15476
|
+
color: #fff;
|
|
15477
|
+
font-family: inherit;
|
|
15478
|
+
font-size: 12px;
|
|
15479
|
+
font-weight: 600;
|
|
15480
|
+
text-align: start;
|
|
15481
|
+
cursor: pointer;
|
|
15482
|
+
}
|
|
15483
|
+
|
|
15484
|
+
/* Stretch the row action over the whole tab, including the detail
|
|
15485
|
+
copy. The help mark sits above this layer. */
|
|
15486
|
+
.cpk-launcher-hud__action::after {
|
|
15487
|
+
content: "";
|
|
15488
|
+
position: absolute;
|
|
15489
|
+
inset: 0;
|
|
15490
|
+
}
|
|
15491
|
+
|
|
15492
|
+
.cpk-launcher-hud__check {
|
|
15493
|
+
flex: none;
|
|
15494
|
+
width: 14px;
|
|
15495
|
+
height: 14px;
|
|
15496
|
+
color: #34d399;
|
|
15497
|
+
}
|
|
15498
|
+
|
|
15499
|
+
.cpk-launcher-hud__help {
|
|
15500
|
+
position: relative;
|
|
15501
|
+
z-index: 1;
|
|
15502
|
+
display: inline-flex;
|
|
15503
|
+
width: 28px;
|
|
15504
|
+
height: 32px;
|
|
15505
|
+
align-items: center;
|
|
15506
|
+
justify-content: center;
|
|
15507
|
+
padding: 0;
|
|
15508
|
+
border: 0;
|
|
15509
|
+
background: transparent;
|
|
15510
|
+
color: rgb(255 255 255 / 0.78);
|
|
15511
|
+
font-size: 12px;
|
|
15512
|
+
font-weight: 600;
|
|
15513
|
+
cursor: pointer;
|
|
15514
|
+
}
|
|
15515
|
+
|
|
15516
|
+
.cpk-launcher-hud__help span {
|
|
15517
|
+
display: inline-flex;
|
|
15518
|
+
width: 16px;
|
|
15519
|
+
height: 16px;
|
|
15520
|
+
align-items: center;
|
|
15521
|
+
justify-content: center;
|
|
15522
|
+
border: 1px dotted rgb(190 194 255 / 0.55);
|
|
15523
|
+
border-radius: 50%;
|
|
15524
|
+
line-height: 1;
|
|
15525
|
+
}
|
|
15526
|
+
|
|
15527
|
+
.cpk-launcher-hud__help:focus-visible,
|
|
15528
|
+
.cpk-launcher-hud__action:focus-visible {
|
|
15529
|
+
outline: 2px solid #bec2ff;
|
|
15530
|
+
outline-offset: 1px;
|
|
15531
|
+
}
|
|
15532
|
+
|
|
15533
|
+
.cpk-launcher-hud__detail {
|
|
15534
|
+
grid-column: 1 / -1;
|
|
15535
|
+
max-height: 0;
|
|
15536
|
+
margin: 0;
|
|
15537
|
+
padding: 0 8px;
|
|
15538
|
+
overflow: hidden;
|
|
15539
|
+
color: rgb(255 255 255 / 0.78);
|
|
15540
|
+
font-size: 11px;
|
|
15541
|
+
font-weight: 400;
|
|
15542
|
+
line-height: 1.4;
|
|
15543
|
+
opacity: 0;
|
|
15544
|
+
pointer-events: none;
|
|
15545
|
+
transform: translateY(-6px);
|
|
15546
|
+
transition:
|
|
15547
|
+
max-height 200ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
15548
|
+
opacity 150ms ease-out,
|
|
15549
|
+
transform 200ms cubic-bezier(0.16, 1, 0.3, 1),
|
|
15550
|
+
padding-bottom 200ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
15551
|
+
}
|
|
15552
|
+
|
|
15553
|
+
.cpk-launcher-hud__row:hover .cpk-launcher-hud__detail,
|
|
15554
|
+
.cpk-launcher-hud__row:focus-within .cpk-launcher-hud__detail,
|
|
15555
|
+
.cpk-launcher-hud__row[data-cpk-hud-help="open"] .cpk-launcher-hud__detail {
|
|
15556
|
+
max-height: 72px;
|
|
15557
|
+
padding: 0 8px 7px;
|
|
15558
|
+
opacity: 1;
|
|
15559
|
+
transform: none;
|
|
15560
|
+
}
|
|
15561
|
+
|
|
15562
|
+
@media (prefers-reduced-motion: reduce) {
|
|
15563
|
+
.cpk-launcher-hud,
|
|
15564
|
+
.cpk-launcher-hud__detail {
|
|
15565
|
+
transition: none;
|
|
15566
|
+
}
|
|
15567
|
+
}
|
|
15568
|
+
|
|
12682
15569
|
/*
|
|
12683
|
-
*
|
|
12684
|
-
*
|
|
12685
|
-
*
|
|
12686
|
-
*
|
|
15570
|
+
* Marker on the navigation entry, which is what keeps a signal alive
|
|
15571
|
+
* once the panel is open and the launcher is hidden. Static by design:
|
|
15572
|
+
* the beat belongs to the launcher, and movement here would compete with
|
|
15573
|
+
* the live event stream a developer is actually watching.
|
|
15574
|
+
*
|
|
15575
|
+
* Tone-selected rather than tone-agnostic, because the marker has to
|
|
15576
|
+
* agree with the dot that sent the reader here. Same shape, same
|
|
15577
|
+
* placement, one declaration different — as on the launcher, where the
|
|
15578
|
+
* treatment is shared and only the injected colour changes.
|
|
12687
15579
|
*/
|
|
12688
15580
|
.inspector-nav-signal-dot {
|
|
12689
15581
|
display: inline-block;
|
|
@@ -12691,7 +15583,10 @@ ${prettyEvent}</pre
|
|
|
12691
15583
|
width: 6px;
|
|
12692
15584
|
height: 6px;
|
|
12693
15585
|
border-radius: 50%;
|
|
12694
|
-
background: ${(0, lit.unsafeCSS)(
|
|
15586
|
+
background: ${(0, lit.unsafeCSS)(LAUNCHER_SIGNAL_COLORS.news)};
|
|
15587
|
+
}
|
|
15588
|
+
.inspector-nav-signal-dot[data-cpk-signal-tone="error"] {
|
|
15589
|
+
background: ${(0, lit.unsafeCSS)(LAUNCHER_SIGNAL_COLORS.error)};
|
|
12695
15590
|
}
|
|
12696
15591
|
|
|
12697
15592
|
/* ── Inspector window ────────────────────────────────────────── */
|
|
@@ -13019,7 +15914,10 @@ exports.CpkThreadInspector = CpkThreadInspector;
|
|
|
13019
15914
|
exports.THREAD_INSPECTOR_TAG = THREAD_INSPECTOR_TAG;
|
|
13020
15915
|
exports.WEB_INSPECTOR_TAG = WEB_INSPECTOR_TAG;
|
|
13021
15916
|
exports.WebInspectorElement = WebInspectorElement;
|
|
15917
|
+
exports.compileChatSnippet = compileChatSnippet;
|
|
15918
|
+
exports.compileFromActivityMessage = compileFromActivityMessage;
|
|
13022
15919
|
exports.defineWebInspector = defineWebInspector;
|
|
15920
|
+
exports.upsertEventSnippet = upsertEventSnippet;
|
|
13023
15921
|
exports.ɵCpkThreadDetails = ɵCpkThreadDetails;
|
|
13024
15922
|
exports.ɵbuildCapabilityRows = buildCapabilityRows;
|
|
13025
15923
|
exports.ɵmaxRecallScore = maxRecallScore;
|