zora-agent 0.10.0 → 0.10.2

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.
Files changed (166) hide show
  1. package/README.md +171 -65
  2. package/dist/cli/daemon.js +1 -0
  3. package/dist/cli/daemon.js.map +1 -1
  4. package/dist/cli/index.js +27 -0
  5. package/dist/cli/index.js.map +1 -1
  6. package/dist/cli/secret-commands.d.ts +16 -0
  7. package/dist/cli/secret-commands.d.ts.map +1 -0
  8. package/dist/cli/secret-commands.js +87 -0
  9. package/dist/cli/secret-commands.js.map +1 -0
  10. package/dist/cli/skill-commands.d.ts.map +1 -1
  11. package/dist/cli/skill-commands.js +75 -0
  12. package/dist/cli/skill-commands.js.map +1 -1
  13. package/dist/cli/subagent-commands.d.ts +13 -0
  14. package/dist/cli/subagent-commands.d.ts.map +1 -0
  15. package/dist/cli/subagent-commands.js +80 -0
  16. package/dist/cli/subagent-commands.js.map +1 -0
  17. package/dist/config/defaults.d.ts +6 -0
  18. package/dist/config/defaults.d.ts.map +1 -1
  19. package/dist/config/defaults.js +6 -0
  20. package/dist/config/defaults.js.map +1 -1
  21. package/dist/dashboard/cost-tracker.d.ts +40 -0
  22. package/dist/dashboard/cost-tracker.d.ts.map +1 -0
  23. package/dist/dashboard/cost-tracker.js +63 -0
  24. package/dist/dashboard/cost-tracker.js.map +1 -0
  25. package/dist/dashboard/frontend/dist/assets/{index-DSXaCp9r.js → index-Bi0V-1ti.js} +83 -83
  26. package/dist/dashboard/frontend/dist/assets/index-SQqtXVeO.css +1 -0
  27. package/dist/dashboard/frontend/dist/index.html +2 -2
  28. package/dist/dashboard/server.d.ts +5 -0
  29. package/dist/dashboard/server.d.ts.map +1 -1
  30. package/dist/dashboard/server.js +17 -0
  31. package/dist/dashboard/server.js.map +1 -1
  32. package/dist/hooks/built-in/audit-log.d.ts +13 -0
  33. package/dist/hooks/built-in/audit-log.d.ts.map +1 -0
  34. package/dist/hooks/built-in/audit-log.js +48 -0
  35. package/dist/hooks/built-in/audit-log.js.map +1 -0
  36. package/dist/hooks/built-in/rate-limit.d.ts +18 -0
  37. package/dist/hooks/built-in/rate-limit.d.ts.map +1 -0
  38. package/dist/hooks/built-in/rate-limit.js +30 -0
  39. package/dist/hooks/built-in/rate-limit.js.map +1 -0
  40. package/dist/hooks/built-in/secret-redact.d.ts +7 -0
  41. package/dist/hooks/built-in/secret-redact.d.ts.map +1 -0
  42. package/dist/hooks/built-in/secret-redact.js +33 -0
  43. package/dist/hooks/built-in/secret-redact.js.map +1 -0
  44. package/dist/hooks/built-in/shell-safety.d.ts +7 -0
  45. package/dist/hooks/built-in/shell-safety.d.ts.map +1 -0
  46. package/dist/hooks/built-in/shell-safety.js +34 -0
  47. package/dist/hooks/built-in/shell-safety.js.map +1 -0
  48. package/dist/hooks/index.d.ts +5 -0
  49. package/dist/hooks/index.d.ts.map +1 -1
  50. package/dist/hooks/index.js +5 -0
  51. package/dist/hooks/index.js.map +1 -1
  52. package/dist/hooks/tool-hook-runner.d.ts +36 -0
  53. package/dist/hooks/tool-hook-runner.d.ts.map +1 -0
  54. package/dist/hooks/tool-hook-runner.js +49 -0
  55. package/dist/hooks/tool-hook-runner.js.map +1 -0
  56. package/dist/lib/error-normalizer.d.ts +53 -0
  57. package/dist/lib/error-normalizer.d.ts.map +1 -0
  58. package/dist/lib/error-normalizer.js +128 -0
  59. package/dist/lib/error-normalizer.js.map +1 -0
  60. package/dist/memory/context-compressor.d.ts +3 -1
  61. package/dist/memory/context-compressor.d.ts.map +1 -1
  62. package/dist/memory/context-compressor.js +18 -3
  63. package/dist/memory/context-compressor.js.map +1 -1
  64. package/dist/memory/plan-cache.d.ts +27 -0
  65. package/dist/memory/plan-cache.d.ts.map +1 -0
  66. package/dist/memory/plan-cache.js +91 -0
  67. package/dist/memory/plan-cache.js.map +1 -0
  68. package/dist/orchestrator/code-tool-runner.d.ts +41 -0
  69. package/dist/orchestrator/code-tool-runner.d.ts.map +1 -0
  70. package/dist/orchestrator/code-tool-runner.js +375 -0
  71. package/dist/orchestrator/code-tool-runner.js.map +1 -0
  72. package/dist/orchestrator/error-pattern-detector.d.ts +54 -0
  73. package/dist/orchestrator/error-pattern-detector.d.ts.map +1 -0
  74. package/dist/orchestrator/error-pattern-detector.js +87 -0
  75. package/dist/orchestrator/error-pattern-detector.js.map +1 -0
  76. package/dist/orchestrator/execution-planner.d.ts +33 -0
  77. package/dist/orchestrator/execution-planner.d.ts.map +1 -0
  78. package/dist/orchestrator/execution-planner.js +67 -0
  79. package/dist/orchestrator/execution-planner.js.map +1 -0
  80. package/dist/orchestrator/orchestrator.d.ts +77 -0
  81. package/dist/orchestrator/orchestrator.d.ts.map +1 -1
  82. package/dist/orchestrator/orchestrator.js +595 -29
  83. package/dist/orchestrator/orchestrator.js.map +1 -1
  84. package/dist/orchestrator/retry-queue.d.ts +7 -1
  85. package/dist/orchestrator/retry-queue.d.ts.map +1 -1
  86. package/dist/orchestrator/retry-queue.js +10 -4
  87. package/dist/orchestrator/retry-queue.js.map +1 -1
  88. package/dist/orchestrator/step-classifier.d.ts +26 -0
  89. package/dist/orchestrator/step-classifier.d.ts.map +1 -0
  90. package/dist/orchestrator/step-classifier.js +77 -0
  91. package/dist/orchestrator/step-classifier.js.map +1 -0
  92. package/dist/orchestrator/tlci-dispatcher.d.ts +47 -0
  93. package/dist/orchestrator/tlci-dispatcher.d.ts.map +1 -0
  94. package/dist/orchestrator/tlci-dispatcher.js +116 -0
  95. package/dist/orchestrator/tlci-dispatcher.js.map +1 -0
  96. package/dist/routines/heartbeat.d.ts.map +1 -1
  97. package/dist/routines/heartbeat.js +3 -1
  98. package/dist/routines/heartbeat.js.map +1 -1
  99. package/dist/routines/routine-manager.d.ts.map +1 -1
  100. package/dist/routines/routine-manager.js +3 -1
  101. package/dist/routines/routine-manager.js.map +1 -1
  102. package/dist/security/intent-capsule.d.ts +19 -0
  103. package/dist/security/intent-capsule.d.ts.map +1 -1
  104. package/dist/security/intent-capsule.js +84 -1
  105. package/dist/security/intent-capsule.js.map +1 -1
  106. package/dist/security/policy-engine.d.ts +1 -0
  107. package/dist/security/policy-engine.d.ts.map +1 -1
  108. package/dist/security/policy-engine.js +22 -1
  109. package/dist/security/policy-engine.js.map +1 -1
  110. package/dist/services/negative-cache.d.ts +67 -0
  111. package/dist/services/negative-cache.d.ts.map +1 -0
  112. package/dist/services/negative-cache.js +164 -0
  113. package/dist/services/negative-cache.js.map +1 -0
  114. package/dist/skills/skill-auditor.d.ts +36 -0
  115. package/dist/skills/skill-auditor.d.ts.map +1 -0
  116. package/dist/skills/skill-auditor.js +89 -0
  117. package/dist/skills/skill-auditor.js.map +1 -0
  118. package/dist/skills/skill-installer.d.ts +41 -0
  119. package/dist/skills/skill-installer.d.ts.map +1 -0
  120. package/dist/skills/skill-installer.js +141 -0
  121. package/dist/skills/skill-installer.js.map +1 -0
  122. package/dist/skills/skill-scanner.d.ts +30 -0
  123. package/dist/skills/skill-scanner.d.ts.map +1 -0
  124. package/dist/skills/skill-scanner.js +249 -0
  125. package/dist/skills/skill-scanner.js.map +1 -0
  126. package/dist/tools/index.d.ts +2 -0
  127. package/dist/tools/index.d.ts.map +1 -1
  128. package/dist/tools/index.js +2 -0
  129. package/dist/tools/index.js.map +1 -1
  130. package/dist/tools/planning-tool.d.ts +95 -0
  131. package/dist/tools/planning-tool.d.ts.map +1 -0
  132. package/dist/tools/planning-tool.js +117 -0
  133. package/dist/tools/planning-tool.js.map +1 -0
  134. package/dist/tools/skill-tool.d.ts +94 -0
  135. package/dist/tools/skill-tool.d.ts.map +1 -0
  136. package/dist/tools/skill-tool.js +202 -0
  137. package/dist/tools/skill-tool.js.map +1 -0
  138. package/dist/tools/subagent-tool.d.ts +11 -0
  139. package/dist/tools/subagent-tool.d.ts.map +1 -0
  140. package/dist/tools/subagent-tool.js +87 -0
  141. package/dist/tools/subagent-tool.js.map +1 -0
  142. package/dist/types.d.ts +22 -0
  143. package/dist/types.d.ts.map +1 -1
  144. package/dist/utils/args.d.ts +5 -0
  145. package/dist/utils/args.d.ts.map +1 -0
  146. package/dist/utils/args.js +20 -0
  147. package/dist/utils/args.js.map +1 -0
  148. package/package.json +4 -1
  149. package/dist/dashboard/frontend/dist/assets/index-2FaDr6iS.js +0 -277
  150. package/dist/dashboard/frontend/dist/assets/index-B9-KXW14.css +0 -1
  151. package/dist/dashboard/frontend/dist/assets/index-BMxbyTer.css +0 -1
  152. package/dist/dashboard/frontend/dist/assets/index-BXUfB9iR.js +0 -253
  153. package/dist/dashboard/frontend/dist/assets/index-BcOGj1EF.css +0 -1
  154. package/dist/dashboard/frontend/dist/assets/index-BtiFO9YN.js +0 -261
  155. package/dist/dashboard/frontend/dist/assets/index-CQmpMTLW.js +0 -253
  156. package/dist/dashboard/frontend/dist/assets/index-Cfjy5acU.css +0 -1
  157. package/dist/dashboard/frontend/dist/assets/index-D41hcjgc.js +0 -253
  158. package/dist/dashboard/frontend/dist/assets/index-D83BawFd.css +0 -1
  159. package/dist/dashboard/frontend/dist/assets/index-DAODjoxu.css +0 -1
  160. package/dist/dashboard/frontend/dist/assets/index-DB-Eu5oV.js +0 -253
  161. package/dist/dashboard/frontend/dist/assets/index-W0VVEDu6.js +0 -253
  162. package/dist/dashboard/frontend/dist/assets/index-aK9PWl6w.js +0 -253
  163. package/dist/dashboard/frontend/vite.config.d.ts +0 -3
  164. package/dist/dashboard/frontend/vite.config.d.ts.map +0 -1
  165. package/dist/dashboard/frontend/vite.config.js +0 -11
  166. package/dist/dashboard/frontend/vite.config.js.map +0 -1
@@ -0,0 +1 @@
1
+ @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-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@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-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-orange-400:oklch(75% .183 55.934);--color-amber-500:oklch(76.9% .188 70.08);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-emerald-400:oklch(76.5% .177 163.223);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-rose-400:oklch(71.2% .194 13.428);--color-neutral-200:oklch(92.2% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-700:oklch(37.1% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--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);--color-zora-obsidian:#0a0b0f;--color-zora-teal:#1fd1b9;--color-zora-cyan:#64e9ff;--color-zora-gold:#ffb347;--color-zora-blue:#8cdff0;--color-zora-ghost:#2a3342;--color-zora-rail:#161b26;--color-zora-white:#eaf7ff;--font-tactical:"IBM Plex Sans Condensed",sans-serif;--font-data:"Space Mono","Menlo",monospace;--font-prose:"Inter","SF Pro Text",system-ui,-apple-system,sans-serif}}@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;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}body{font-family:var(--font-tactical);overflow:hidden}}@layer components;@layer utilities{.lcars-bar{color:#000;text-transform:uppercase;letter-spacing:.1em;border-top-left-radius:9999px;border-bottom-left-radius:9999px;align-items:center;height:2rem;padding-left:1.5rem;padding-right:1.5rem;font-size:.875rem;font-weight:700;display:flex;position:relative}.bubble{max-width:85%;font-family:var(--font-data);border-radius:1rem;padding:1rem;font-size:.875rem;line-height:1.625;position:relative}.lcars-panel{background-color:#0006;border-left-width:4px;padding:1rem;position:relative;overflow:hidden}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing)*0)}.z-40{z-index:40}.mx-auto{margin-inline:auto}.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-6{margin-top:calc(var(--spacing)*6)}.mt-8{margin-top:calc(var(--spacing)*8)}.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-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-8{height:calc(var(--spacing)*8)}.h-10{height:calc(var(--spacing)*10)}.h-16{height:calc(var(--spacing)*16)}.h-full{height:100%}.h-screen{height:100vh}.max-h-40{max-height:calc(var(--spacing)*40)}.min-h-0{min-height:calc(var(--spacing)*0)}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-8{width:calc(var(--spacing)*8)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-16{width:calc(var(--spacing)*16)}.w-32{width:calc(var(--spacing)*32)}.w-80{width:calc(var(--spacing)*80)}.w-full{width:100%}.w-screen{width:100vw}.bubble-tool{background-color:#ffb3470f}@supports (color:color-mix(in lab,red,red)){.bubble-tool{background-color:color-mix(in srgb,var(--color-zora-gold)6%,transparent)}}.bubble-tool{border-color:#ffb34780;border-left-width:2px}@supports (color:color-mix(in lab,red,red)){.bubble-tool{border-color:color-mix(in srgb,var(--color-zora-gold)50%,transparent)}}.bubble-tool{color:#ffc26c}@supports (color:color-mix(in lab,red,red)){.bubble-tool{color:color-mix(in srgb,var(--color-zora-gold)80%,white)}}.bubble-tool{cursor:pointer;-webkit-user-select:none;user-select:none;align-self:flex-start;max-width:90%;padding:.375rem .75rem;font-size:11px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-\[90\%\]{max-width:90%}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.min-w-0{min-width:calc(var(--spacing)*0)}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.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-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-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-y-reverse)))}: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-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*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(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing)*4)}.gap-y-1{row-gap:calc(var(--spacing)*1)}.bubble-user{background-color:#ffb3471a}@supports (color:color-mix(in lab,red,red)){.bubble-user{background-color:color-mix(in srgb,var(--color-zora-gold)10%,transparent)}}.bubble-user{border-right-width:4px;border-color:var(--color-zora-gold);color:var(--color-zora-gold);text-align:right;align-self:flex-end}.bubble-system{background-color:#8cdff00d}@supports (color:color-mix(in lab,red,red)){.bubble-system{background-color:color-mix(in srgb,var(--color-zora-blue)5%,transparent)}}.bubble-system{border-left-width:2px;border-color:var(--color-zora-blue);color:#8cdff099}@supports (color:color-mix(in lab,red,red)){.bubble-system{color:color-mix(in srgb,var(--color-zora-blue)60%,transparent)}}.bubble-system{opacity:.6;align-self:center;padding:.25rem .75rem;font-size:10px;font-style:italic}.bubble-agent{background-color:#64e9ff1a}@supports (color:color-mix(in lab,red,red)){.bubble-agent{background-color:color-mix(in srgb,var(--color-zora-cyan)10%,transparent)}}.bubble-agent{border-left-width:4px;border-color:var(--color-zora-cyan);color:var(--color-zora-white);align-self:flex-start}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl-xl{border-top-left-radius:var(--radius-xl)}.rounded-r-full{border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.rounded-bl-xl{border-bottom-left-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-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.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-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-green-400\/30{border-color:#05df724d}@supports (color:color-mix(in lab,red,red)){.border-green-400\/30{border-color:color-mix(in oklab,var(--color-green-400)30%,transparent)}}.border-green-800\/30{border-color:#0166304d}@supports (color:color-mix(in lab,red,red)){.border-green-800\/30{border-color:color-mix(in oklab,var(--color-green-800)30%,transparent)}}.border-neutral-700{border-color:var(--color-neutral-700)}.border-purple-400\/30{border-color:#c07eff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-400\/30{border-color:color-mix(in oklab,var(--color-purple-400)30%,transparent)}}.border-red-800\/20{border-color:#9f071233}@supports (color:color-mix(in lab,red,red)){.border-red-800\/20{border-color:color-mix(in oklab,var(--color-red-800)20%,transparent)}}.border-rose-400\/30{border-color:#ff667f4d}@supports (color:color-mix(in lab,red,red)){.border-rose-400\/30{border-color:color-mix(in oklab,var(--color-rose-400)30%,transparent)}}.border-transparent{border-color:#0000}.border-white\/10{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.border-white\/10{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.border-zora-cyan{border-color:var(--color-zora-cyan)}.border-zora-cyan\/30{border-color:#64e9ff4d}@supports (color:color-mix(in lab,red,red)){.border-zora-cyan\/30{border-color:color-mix(in oklab,var(--color-zora-cyan)30%,transparent)}}.border-zora-ghost\/30{border-color:#2a33424d}@supports (color:color-mix(in lab,red,red)){.border-zora-ghost\/30{border-color:color-mix(in oklab,var(--color-zora-ghost)30%,transparent)}}.border-zora-ghost\/50{border-color:#2a334280}@supports (color:color-mix(in lab,red,red)){.border-zora-ghost\/50{border-color:color-mix(in oklab,var(--color-zora-ghost)50%,transparent)}}.border-zora-gold{border-color:var(--color-zora-gold)}.border-zora-gold\/30{border-color:#ffb3474d}@supports (color:color-mix(in lab,red,red)){.border-zora-gold\/30{border-color:color-mix(in oklab,var(--color-zora-gold)30%,transparent)}}.border-zora-teal{border-color:var(--color-zora-teal)}.border-zora-teal\/30{border-color:#1fd1b94d}@supports (color:color-mix(in lab,red,red)){.border-zora-teal\/30{border-color:color-mix(in oklab,var(--color-zora-teal)30%,transparent)}}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/20{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.bg-black\/20{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-green-400\/10{background-color:#05df721a}@supports (color:color-mix(in lab,red,red)){.bg-green-400\/10{background-color:color-mix(in oklab,var(--color-green-400)10%,transparent)}}.bg-green-500{background-color:var(--color-green-500)}.bg-green-900\/30{background-color:#0d542b4d}@supports (color:color-mix(in lab,red,red)){.bg-green-900\/30{background-color:color-mix(in oklab,var(--color-green-900)30%,transparent)}}.bg-neutral-700{background-color:var(--color-neutral-700)}.bg-neutral-800\/50{background-color:#26262680}@supports (color:color-mix(in lab,red,red)){.bg-neutral-800\/50{background-color:color-mix(in oklab,var(--color-neutral-800)50%,transparent)}}.bg-purple-400\/10{background-color:#c07eff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-400\/10{background-color:color-mix(in oklab,var(--color-purple-400)10%,transparent)}}.bg-purple-500{background-color:var(--color-purple-500)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-900\/20{background-color:#82181a33}@supports (color:color-mix(in lab,red,red)){.bg-red-900\/20{background-color:color-mix(in oklab,var(--color-red-900)20%,transparent)}}.bg-rose-400\/10{background-color:#ff667f1a}@supports (color:color-mix(in lab,red,red)){.bg-rose-400\/10{background-color:color-mix(in oklab,var(--color-rose-400)10%,transparent)}}.bg-zora-cyan\/10{background-color:#64e9ff1a}@supports (color:color-mix(in lab,red,red)){.bg-zora-cyan\/10{background-color:color-mix(in oklab,var(--color-zora-cyan)10%,transparent)}}.bg-zora-cyan\/20{background-color:#64e9ff33}@supports (color:color-mix(in lab,red,red)){.bg-zora-cyan\/20{background-color:color-mix(in oklab,var(--color-zora-cyan)20%,transparent)}}.bg-zora-ghost{background-color:var(--color-zora-ghost)}.bg-zora-gold{background-color:var(--color-zora-gold)}.bg-zora-gold\/5{background-color:#ffb3470d}@supports (color:color-mix(in lab,red,red)){.bg-zora-gold\/5{background-color:color-mix(in oklab,var(--color-zora-gold)5%,transparent)}}.bg-zora-gold\/10{background-color:#ffb3471a}@supports (color:color-mix(in lab,red,red)){.bg-zora-gold\/10{background-color:color-mix(in oklab,var(--color-zora-gold)10%,transparent)}}.bg-zora-gold\/20{background-color:#ffb34733}@supports (color:color-mix(in lab,red,red)){.bg-zora-gold\/20{background-color:color-mix(in oklab,var(--color-zora-gold)20%,transparent)}}.bg-zora-obsidian{background-color:var(--color-zora-obsidian)}.bg-zora-obsidian\/95{background-color:#0a0b0ff2}@supports (color:color-mix(in lab,red,red)){.bg-zora-obsidian\/95{background-color:color-mix(in oklab,var(--color-zora-obsidian)95%,transparent)}}.bg-zora-rail{background-color:var(--color-zora-rail)}.bg-zora-rail\/50{background-color:#161b2680}@supports (color:color-mix(in lab,red,red)){.bg-zora-rail\/50{background-color:color-mix(in oklab,var(--color-zora-rail)50%,transparent)}}.bg-zora-teal{background-color:var(--color-zora-teal)}.bg-zora-teal\/10{background-color:#1fd1b91a}@supports (color:color-mix(in lab,red,red)){.bg-zora-teal\/10{background-color:color-mix(in oklab,var(--color-zora-teal)10%,transparent)}}.bg-zora-teal\/20{background-color:#1fd1b933}@supports (color:color-mix(in lab,red,red)){.bg-zora-teal\/20{background-color:color-mix(in oklab,var(--color-zora-teal)20%,transparent)}}.bg-zora-teal\/40{background-color:#1fd1b966}@supports (color:color-mix(in lab,red,red)){.bg-zora-teal\/40{background-color:color-mix(in oklab,var(--color-zora-teal)40%,transparent)}}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-8{padding:calc(var(--spacing)*8)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-8{padding-inline:calc(var(--spacing)*8)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-6{padding-block:calc(var(--spacing)*6)}.pt-2{padding-top:calc(var(--spacing)*2)}.pt-4{padding-top:calc(var(--spacing)*4)}.pb-2{padding-bottom:calc(var(--spacing)*2)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pl-7{padding-left:calc(var(--spacing)*7)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-data{font-family:var(--font-data)}.font-mono{font-family:var(--font-mono)}.font-tactical{font-family:var(--font-tactical)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--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}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-emerald-400{color:var(--color-emerald-400)}.text-green-400{color:var(--color-green-400)}.text-green-400\/70{color:#05df72b3}@supports (color:color-mix(in lab,red,red)){.text-green-400\/70{color:color-mix(in oklab,var(--color-green-400)70%,transparent)}}.text-green-500{color:var(--color-green-500)}.text-neutral-200{color:var(--color-neutral-200)}.text-neutral-300{color:var(--color-neutral-300)}.text-neutral-400{color:var(--color-neutral-400)}.text-neutral-500{color:var(--color-neutral-500)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-red-400\/70{color:#ff6568b3}@supports (color:color-mix(in lab,red,red)){.text-red-400\/70{color:color-mix(in oklab,var(--color-red-400)70%,transparent)}}.text-red-500{color:var(--color-red-500)}.text-rose-400{color:var(--color-rose-400)}.text-white{color:var(--color-white)}.text-white\/20{color:#fff3}@supports (color:color-mix(in lab,red,red)){.text-white\/20{color:color-mix(in oklab,var(--color-white)20%,transparent)}}.text-white\/25{color:#ffffff40}@supports (color:color-mix(in lab,red,red)){.text-white\/25{color:color-mix(in oklab,var(--color-white)25%,transparent)}}.text-white\/30{color:#ffffff4d}@supports (color:color-mix(in lab,red,red)){.text-white\/30{color:color-mix(in oklab,var(--color-white)30%,transparent)}}.text-white\/40{color:#fff6}@supports (color:color-mix(in lab,red,red)){.text-white\/40{color:color-mix(in oklab,var(--color-white)40%,transparent)}}.text-white\/50{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.text-white\/50{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab,red,red)){.text-white\/60{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.text-zora-blue{color:var(--color-zora-blue)}.text-zora-blue\/50{color:#8cdff080}@supports (color:color-mix(in lab,red,red)){.text-zora-blue\/50{color:color-mix(in oklab,var(--color-zora-blue)50%,transparent)}}.text-zora-blue\/70{color:#8cdff0b3}@supports (color:color-mix(in lab,red,red)){.text-zora-blue\/70{color:color-mix(in oklab,var(--color-zora-blue)70%,transparent)}}.text-zora-cyan{color:var(--color-zora-cyan)}.text-zora-cyan\/40{color:#64e9ff66}@supports (color:color-mix(in lab,red,red)){.text-zora-cyan\/40{color:color-mix(in oklab,var(--color-zora-cyan)40%,transparent)}}.text-zora-gold{color:var(--color-zora-gold)}.text-zora-gold\/50{color:#ffb34780}@supports (color:color-mix(in lab,red,red)){.text-zora-gold\/50{color:color-mix(in oklab,var(--color-zora-gold)50%,transparent)}}.text-zora-gold\/60{color:#ffb34799}@supports (color:color-mix(in lab,red,red)){.text-zora-gold\/60{color:color-mix(in oklab,var(--color-zora-gold)60%,transparent)}}.text-zora-gold\/70{color:#ffb347b3}@supports (color:color-mix(in lab,red,red)){.text-zora-gold\/70{color:color-mix(in oklab,var(--color-zora-gold)70%,transparent)}}.text-zora-obsidian{color:var(--color-zora-obsidian)}.text-zora-teal{color:var(--color-zora-teal)}.text-zora-teal\/70{color:#1fd1b9b3}@supports (color:color-mix(in lab,red,red)){.text-zora-teal\/70{color:color-mix(in oklab,var(--color-zora-teal)70%,transparent)}}.text-zora-white{color:var(--color-zora-white)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.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-all{transition-property:all;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))}@media(hover:hover){.group-hover\:text-zora-teal:is(:where(.group):hover *){color:var(--color-zora-teal)}}.selection\:text-black ::selection{color:var(--color-black)}.selection\:text-black::selection{color:var(--color-black)}.placeholder\:text-white\/20::placeholder{color:#fff3}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-white\/20::placeholder{color:color-mix(in oklab,var(--color-white)20%,transparent)}}@media(hover:hover){.hover\:border-zora-teal\/50:hover{border-color:#1fd1b980}@supports (color:color-mix(in lab,red,red)){.hover\:border-zora-teal\/50:hover{border-color:color-mix(in oklab,var(--color-zora-teal)50%,transparent)}}.hover\:bg-black\/20:hover{background-color:#0003}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/20:hover{background-color:color-mix(in oklab,var(--color-black)20%,transparent)}}.hover\:bg-black\/30:hover{background-color:#0000004d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/30:hover{background-color:color-mix(in oklab,var(--color-black)30%,transparent)}}.hover\:bg-black\/60:hover{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/60:hover{background-color:color-mix(in oklab,var(--color-black)60%,transparent)}}.hover\:bg-zora-cyan:hover{background-color:var(--color-zora-cyan)}.hover\:text-white\/50:hover{color:#ffffff80}@supports (color:color-mix(in lab,red,red)){.hover\:text-white\/50:hover{color:color-mix(in oklab,var(--color-white)50%,transparent)}}.hover\:text-white\/60:hover{color:#fff9}@supports (color:color-mix(in lab,red,red)){.hover\:text-white\/60:hover{color:color-mix(in oklab,var(--color-white)60%,transparent)}}.hover\:text-zora-gold\/90:hover{color:#ffb347e6}@supports (color:color-mix(in lab,red,red)){.hover\:text-zora-gold\/90:hover{color:color-mix(in oklab,var(--color-zora-gold)90%,transparent)}}.hover\:text-zora-teal:hover{color:var(--color-zora-teal)}.hover\:text-zora-white:hover{color:var(--color-zora-white)}}.focus\:border-transparent:focus{border-color:#0000}.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-zora-teal:focus{--tw-ring-color:var(--color-zora-teal)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.\[\&_blockquote\]\:my-2 blockquote{margin-block:calc(var(--spacing)*2)}.\[\&_blockquote\]\:border-l-2 blockquote{border-left-style:var(--tw-border-style);border-left-width:2px}.\[\&_blockquote\]\:border-zora-teal\/40 blockquote{border-color:#1fd1b966}@supports (color:color-mix(in lab,red,red)){.\[\&_blockquote\]\:border-zora-teal\/40 blockquote{border-color:color-mix(in oklab,var(--color-zora-teal)40%,transparent)}}.\[\&_blockquote\]\:pl-3 blockquote{padding-left:calc(var(--spacing)*3)}.\[\&_blockquote\]\:opacity-70 blockquote{opacity:.7}.\[\&_code\]\:rounded code{border-radius:.25rem}.\[\&_code\]\:bg-black\/40 code{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.\[\&_code\]\:bg-black\/40 code{background-color:color-mix(in oklab,var(--color-black)40%,transparent)}}.\[\&_code\]\:px-1\.5 code{padding-inline:calc(var(--spacing)*1.5)}.\[\&_code\]\:py-0\.5 code{padding-block:calc(var(--spacing)*.5)}.\[\&_code\]\:font-mono code{font-family:var(--font-mono)}.\[\&_code\]\:text-\[11px\] code{font-size:11px}.\[\&_code\]\:text-zora-gold code{color:var(--color-zora-gold)}.\[\&_h1\]\:mt-3 h1{margin-top:calc(var(--spacing)*3)}.\[\&_h1\]\:mb-2 h1{margin-bottom:calc(var(--spacing)*2)}.\[\&_h1\]\:text-\[15px\] h1{font-size:15px}.\[\&_h1\]\:font-semibold h1{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h1\]\:text-zora-cyan h1{color:var(--color-zora-cyan)}.\[\&_h2\]\:mt-3 h2{margin-top:calc(var(--spacing)*3)}.\[\&_h2\]\:mb-2 h2{margin-bottom:calc(var(--spacing)*2)}.\[\&_h2\]\:text-\[13px\] h2{font-size:13px}.\[\&_h2\]\:font-semibold h2{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h2\]\:text-zora-cyan h2{color:var(--color-zora-cyan)}.\[\&_h3\]\:mt-2 h3{margin-top:calc(var(--spacing)*2)}.\[\&_h3\]\:mb-1 h3{margin-bottom:calc(var(--spacing)*1)}.\[\&_h3\]\:text-\[12px\] h3{font-size:12px}.\[\&_h3\]\:font-semibold h3{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_h3\]\:text-zora-teal h3{color:var(--color-zora-teal)}.\[\&_hr\]\:my-3 hr{margin-block:calc(var(--spacing)*3)}.\[\&_hr\]\:border-white\/10 hr{border-color:#ffffff1a}@supports (color:color-mix(in lab,red,red)){.\[\&_hr\]\:border-white\/10 hr{border-color:color-mix(in oklab,var(--color-white)10%,transparent)}}.\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--spacing)*1)}.\[\&_ol\]\:mb-3 ol{margin-bottom:calc(var(--spacing)*3)}.\[\&_ol\]\:list-decimal ol{list-style-type:decimal}.\[\&_ol\]\:pl-5 ol{padding-left:calc(var(--spacing)*5)}.\[\&_p\]\:mb-3 p{margin-bottom:calc(var(--spacing)*3)}.\[\&_p\:last-child\]\:mb-0 p:last-child{margin-bottom:calc(var(--spacing)*0)}.\[\&_pre\]\:my-2 pre{margin-block:calc(var(--spacing)*2)}.\[\&_pre\]\:overflow-x-auto pre{overflow-x:auto}.\[\&_pre\]\:rounded-md pre{border-radius:var(--radius-md)}.\[\&_pre\]\:bg-black\/50 pre{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.\[\&_pre\]\:bg-black\/50 pre{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.\[\&_pre\]\:p-3 pre{padding:calc(var(--spacing)*3)}.\[\&_pre\]\:text-xs pre{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_strong\]\:font-semibold strong{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_strong\]\:text-zora-white strong{color:var(--color-zora-white)}.\[\&_table\]\:my-2 table{margin-block:calc(var(--spacing)*2)}.\[\&_table\]\:text-xs table{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_td\]\:px-2 td{padding-inline:calc(var(--spacing)*2)}.\[\&_td\]\:py-1 td{padding-block:calc(var(--spacing)*1)}.\[\&_th\]\:px-2 th{padding-inline:calc(var(--spacing)*2)}.\[\&_th\]\:py-1 th{padding-block:calc(var(--spacing)*1)}.\[\&_th\]\:font-data th{font-family:var(--font-data)}.\[\&_th\]\:text-\[9px\] th{font-size:9px}.\[\&_th\]\:text-zora-teal th{color:var(--color-zora-teal)}.\[\&_th\]\:uppercase th{text-transform:uppercase}.\[\&_ul\]\:mb-3 ul{margin-bottom:calc(var(--spacing)*3)}.\[\&_ul\]\:list-disc ul{list-style-type:disc}.\[\&_ul\]\:pl-5 ul{padding-left:calc(var(--spacing)*5)}}.tool-mini:hover{color:#fff9}.lcars-scrollbar::-webkit-scrollbar{width:6px}.lcars-scrollbar::-webkit-scrollbar-track{background-color:#0003}.lcars-scrollbar::-webkit-scrollbar-thumb{background-color:#1fd1b966}@supports (color:color-mix(in lab,red,red)){.lcars-scrollbar::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--color-zora-teal)40%,transparent)}}.lcars-scrollbar::-webkit-scrollbar-thumb{border-radius:9999px}.lcars-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#1fd1b999}@supports (color:color-mix(in lab,red,red)){.lcars-scrollbar::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb,var(--color-zora-teal)60%,transparent)}}.scanline{pointer-events:none;z-index:50;background:linear-gradient(#12101000 50%,#00000040 50%) 0 0/100% 4px,linear-gradient(90deg,#ff00000f,#00ff0005,#0000ff0f) 0 0/3px 100%;position:absolute;inset:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
@@ -8,8 +8,8 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com">
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
10
  <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&family=IBM+Plex+Sans+Condensed:wght@400;600;700&display=swap" rel="stylesheet">
11
- <script type="module" crossorigin src="/assets/index-DSXaCp9r.js"></script>
12
- <link rel="stylesheet" crossorigin href="/assets/index-BMxbyTer.css">
11
+ <script type="module" crossorigin src="/assets/index-Bi0V-1ti.js"></script>
12
+ <link rel="stylesheet" crossorigin href="/assets/index-SQqtXVeO.css">
13
13
  </head>
14
14
  <body class="text-white selection:bg-zora-amber selection:text-black">
15
15
  <div id="root"></div>
@@ -10,6 +10,7 @@ import type { SessionManager } from '../orchestrator/session-manager.js';
10
10
  import type { SteeringManager } from '../steering/steering-manager.js';
11
11
  import type { AuthMonitor } from '../orchestrator/auth-monitor.js';
12
12
  import type { LLMProvider } from '../types.js';
13
+ import { CostTracker } from './cost-tracker.js';
13
14
  export interface SubmitTaskFn {
14
15
  (prompt: string): Promise<string>;
15
16
  }
@@ -29,6 +30,8 @@ export interface DashboardOptions {
29
30
  * skipped (localhost-only use case).
30
31
  */
31
32
  dashboardToken?: string;
33
+ /** Optional TLCI cost tracker — enables /api/tlci-stats endpoint */
34
+ costTracker?: CostTracker;
32
35
  }
33
36
  export declare class DashboardServer {
34
37
  private readonly _app;
@@ -36,6 +39,8 @@ export declare class DashboardServer {
36
39
  private _server;
37
40
  /** TYPE-12: Map SSE clients to their verbosity level */
38
41
  private readonly _sseClients;
42
+ /** TLCI cost tracker — undefined when not configured */
43
+ private readonly _tlciCostTracker;
39
44
  constructor(options: DashboardOptions);
40
45
  /**
41
46
  * Simple in-memory rate limiter (no external dependency).
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AAgBtE,MAAM,WAAW,YAAY;IAC3B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAAqB;IACpC,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;gBAEnE,OAAO,EAAE,gBAAgB;IA6BrC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,YAAY;IAwPpB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA2B5D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAyB,MAAM,aAAa,CAAC;AAGtE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAchD,MAAM,WAAW,YAAY;IAC3B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,SAAS,CAAC,EAAE,WAAW,EAAE,CAAC;IAC1B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,CAAC,EAAE,YAAY,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;OAKG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oEAAoE;IACpE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,OAAO,CAAqB;IACpC,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;IAC/E,wDAAwD;IACxD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;gBAE/C,OAAO,EAAE,gBAAgB;IA8BrC;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAqC1B,OAAO,CAAC,YAAY;IAsQpB;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IA2B5D;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAgB5B"}
@@ -24,8 +24,11 @@ export class DashboardServer {
24
24
  _server;
25
25
  /** TYPE-12: Map SSE clients to their verbosity level */
26
26
  _sseClients = new Map();
27
+ /** TLCI cost tracker — undefined when not configured */
28
+ _tlciCostTracker;
27
29
  constructor(options) {
28
30
  this._options = options;
31
+ this._tlciCostTracker = options.costTracker;
29
32
  this._app = express();
30
33
  // R22: Explicit body size limits
31
34
  this._app.use(express.json({ limit: '1mb' }));
@@ -303,6 +306,20 @@ export class DashboardServer {
303
306
  this._sseClients.delete(res);
304
307
  });
305
308
  });
309
+ /** GET /api/tlci-stats — TLCI cost tracker snapshot for dashboard UI */
310
+ this._app.get('/api/tlci-stats', async (_req, res) => {
311
+ if (!this._tlciCostTracker) {
312
+ res.status(503).json({ error: 'TLCI cost tracker not enabled' });
313
+ return;
314
+ }
315
+ try {
316
+ const snapshot = await this._tlciCostTracker.getSnapshot();
317
+ res.json(snapshot);
318
+ }
319
+ catch (err) {
320
+ res.status(500).json({ error: String(err) });
321
+ }
322
+ });
306
323
  // Catch-all: serve index.html for SPA routing
307
324
  this._app.get('*', (_req, res) => {
308
325
  res.sendFile(path.join(__dirname, 'frontend', 'dist', 'index.html'));
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/dashboard/server.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAQzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAI9D,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D;;;GAGG;AACH,MAAM,wBAAwB,GAAG,GAAG,CAAC;AA0BrC,MAAM,OAAO,eAAe;IACT,IAAI,CAAsB;IAC1B,QAAQ,CAAmB;IACpC,OAAO,CAAqB;IACpC,wDAAwD;IACvC,WAAW,GAAyC,IAAI,GAAG,EAAE,CAAC;IAC/E,wDAAwD;IACvC,gBAAgB,CAA0B;IAE3D,YAAY,OAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;QAEtB,iCAAiC;QACjC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAE9C,6EAA6E;QAC7E,0EAA0E;QAC1E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAEjD,4EAA4E;QAC5E,wEAAwE;QACxE,6EAA6E;QAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;QAC5E,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACpE,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnD,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACnF,CAAC;QAED,kDAAkD;QAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QAE1C,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED;;;;OAIG;IACK,kBAAkB;QACxB,MAAM,QAAQ,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,GAAG,EAA8C,CAAC;QACtE,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;YACxB,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,SAAS,CAAC;YAE3D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEvB,wCAAwC;YACxC,IAAI,GAAG,GAAG,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;gBACtC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;oBACjC,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG;wBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC;gBACD,WAAW,GAAG,GAAG,CAAC;YACpB,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAE/B,IAAI,CAAC,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;gBACvD,IAAI,EAAE,CAAC;gBACP,OAAO;YACT,CAAC;YAED,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC;gBAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;gBAClF,OAAO;YACT,CAAC;YAED,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC;IAEO,YAAY;QAClB,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEvE,sBAAsB;QAEtB,gGAAgG;QAChG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC/C,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;gBAChD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAEhD,iCAAiC;gBACjC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,GAAG,CACtC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;oBACxB,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,CAAC;oBAC3H,IAAI,KAAK,CAAC;oBACV,IAAI,CAAC;wBACH,KAAK,GAAG,MAAM,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnC,CAAC;oBAAC,MAAM,CAAC;wBACP,KAAK,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;oBAC/F,CAAC;oBAED,gCAAgC;oBAChC,IAAI,MAAM,GAA+B,IAAI,CAAC;oBAC9C,IAAI,CAAC,IAAI,CAAC,KAAK;wBAAE,MAAM,GAAG,MAAM,CAAC;yBAC5B,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,GAAG,wBAAwB;wBAAE,MAAM,GAAG,UAAU,CAAC;oBAEhG,OAAO;wBACL,IAAI,EAAE,CAAC,CAAC,IAAI;wBACZ,MAAM;wBACN,sEAAsE;wBACtE,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;wBAChD,cAAc,EAAE,IAAI,CAAC,cAAc;wBACnC,IAAI,EAAE;4BACJ,KAAK,EAAE,IAAI,CAAC,KAAK;4BACjB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,IAAI;4BAChD,cAAc,EAAE,IAAI,CAAC,cAAc;yBACpC;wBACD,KAAK,EAAE;4BACL,WAAW,EAAE,KAAK,CAAC,WAAW;4BAC9B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;4BAC1C,WAAW,EAAE,KAAK,CAAC,WAAW;yBAC/B;wBACD,QAAQ,EAAE,CAAC,CAAC,QAAQ;qBACrB,CAAC;gBACJ,CAAC,CAAC,CACH,CAAC;gBAEF,kFAAkF;gBAClF,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;gBACzE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;gBACjF,IAAI,aAAa,GAAmC,IAAI,CAAC;gBACzD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,SAAS,CAAC,MAAM;oBAAE,aAAa,GAAG,UAAU,CAAC;qBAClF,IAAI,SAAS,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC;oBAAE,aAAa,GAAG,UAAU,CAAC;gBAExE,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;gBAElC,GAAG,CAAC,IAAI,CAAC;oBACP,EAAE,EAAE,aAAa,KAAK,UAAU;oBAChC,MAAM,EAAE,aAAa;oBACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,SAAS,EAAE,cAAc;oBACzB,MAAM,EAAE;wBACN,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;wBACpC,WAAW,EAAE;4BACX,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;4BACpD,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;4BACtD,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;yBAC3C;qBACF;oBACD,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;iBAClC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,QAAQ,EAAE,CAAC;gBAChD,MAAM,SAAS,GAA4B,MAAM,OAAO,CAAC,GAAG,CAC1D,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE;oBACnH,KAAK,EAAE,MAAM,CAAC,CAAC,cAAc,EAAE;oBAC/B,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE;oBACnB,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC,CACJ,CAAC;gBACF,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,8EAA8E;QAC9E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;wBACvB,KAAK,EAAE,CAAC,CAAC,KAAK;wBACd,UAAU,EAAE,CAAC,CAAC,UAAU;wBACxB,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,IAAI;wBACnD,MAAM,EAAE,CAAC,CAAC,MAAM;qBACjB,CAAC,CAAC;iBACJ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH;;;WAGG;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC/C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;gBACrD,MAAM,MAAM,GAAG,QAAQ;qBACpB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;qBACnF,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAEnB,+EAA+E;gBAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvF,MAAM,SAAS,GAA6C,EAAE,CAAC;gBAC/D,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;oBACvC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;oBAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;wBAC3B,MAAM,CAAC,GAAG,KAA0B,CAAC;wBACrC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;4BACjC,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;wBAClD,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,6EAA6E;QAC7E,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAClC,GAAG,CAAC,IAAI,CAAC;gBACP,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,EAAE;oBACN,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;oBAC9C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;iBACjD;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAE1B,6DAA6D;QAC7D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAE5B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;YACzF,CAAC;YAED,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9C,kFAAkF;gBAClF,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;YAChC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,wBAAwB;QAExB,kDAAkD;QAClD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;YAEpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;gBACjG,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,6CAA6C,EAAE,CAAC,CAAC;YACnG,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,aAAa,CAAC;oBAClC,IAAI,EAAE,OAAO;oBACb,KAAK;oBACL,OAAO;oBACP,MAAM,EAAE,MAAM,IAAI,UAAU;oBAC5B,MAAM,EAAE,MAAM,IAAI,WAAW;oBAC7B,SAAS,EAAE,IAAI,IAAI,EAAE;iBACtB,CAAC,CAAC;gBACH,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,YAAY,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACtE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,sDAAsD;QAEtD;iFACyE;QACzE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACxC,MAAM,SAAS,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAmB,CAAC;gBACvF,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS;gBACrB,CAAC,CAAC,QAAQ,CAAmB,CAAC;YAEhC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;gBACjB,cAAc,EAAE,mBAAmB;gBACnC,eAAe,EAAE,UAAU;gBAC3B,YAAY,EAAE,YAAY;gBAC1B,mBAAmB,EAAE,IAAI;aAC1B,CAAC,CAAC;YAEH,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAErC,kEAAkE;YAClE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;gBACjC,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC/B,CAAC,EAAE,MAAM,CAAC,CAAC;YAEX,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACnB,aAAa,CAAC,SAAS,CAAC,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,wEAAwE;QACxE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YACnD,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC3B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;gBACjE,OAAO;YACT,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC;gBAC3D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,8CAA8C;QAC9C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YAC/B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,KAAsC;QACnD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,sEAAsE;QACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAEjE,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnD,4DAA4D;YAC5D,oEAAoE;YACpE,sDAAsD;YACtD,MAAM,SAAS,GAAG,KAAK,CAAC,IAA2C,CAAC;YACpE,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC;gBAClG,IAAI,CAAC,kBAAkB,CAAC,SAAkC,EAAE,SAAS,CAAC,EAAE,CAAC;oBACvE,SAAS,CAAC,kCAAkC;gBAC9C,CAAC;YACH,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,4CAA4C;gBAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC;oBAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,WAAW,CAAC;QAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE;gBAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,gCAAgC,CAAC,CAAC;gBAC3D,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,4BAA4B;QAC5B,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACxC,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,CAAC,OAAQ,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC1B,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * AuditLogHook — Appends every tool call + result to ~/.zora/audit.jsonl.
3
+ * Fires in 'after' phase so result is available.
4
+ */
5
+ import type { ToolHook, ToolCallContext, ToolHookResult } from '../tool-hook-runner.js';
6
+ export declare class AuditLogHook implements ToolHook {
7
+ private readonly _logPath;
8
+ name: string;
9
+ phase: "after";
10
+ constructor(_logPath?: string);
11
+ run(ctx: ToolCallContext): Promise<ToolHookResult>;
12
+ }
13
+ //# sourceMappingURL=audit-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.d.ts","sourceRoot":"","sources":["../../../src/hooks/built-in/audit-log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAsBxF,qBAAa,YAAa,YAAW,QAAQ;IAI/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAHrC,IAAI,SAAe;IACnB,KAAK,EAAG,OAAO,CAAU;gBAEI,QAAQ,SAAkD;IAEjF,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAezD"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * AuditLogHook — Appends every tool call + result to ~/.zora/audit.jsonl.
3
+ * Fires in 'after' phase so result is available.
4
+ */
5
+ import fs from 'node:fs/promises';
6
+ import path from 'node:path';
7
+ import os from 'node:os';
8
+ function redactSecrets(obj, depth = 0) {
9
+ if (depth > 5 || obj === null || obj === undefined)
10
+ return obj;
11
+ if (typeof obj === 'string') {
12
+ return obj.replace(/(?:key|token|secret|password|auth|bearer)\s*[:=]\s*[^\s,}"']+/gi, (m) => {
13
+ const colonIdx = m.search(/[:=]/);
14
+ return m.slice(0, colonIdx + 1) + ' [REDACTED]';
15
+ });
16
+ }
17
+ if (Array.isArray(obj))
18
+ return obj.map(v => redactSecrets(v, depth + 1));
19
+ if (typeof obj === 'object') {
20
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => {
21
+ const sensitive = /key|token|secret|password|auth|bearer/i.test(k);
22
+ return [k, sensitive ? '[REDACTED]' : redactSecrets(v, depth + 1)];
23
+ }));
24
+ }
25
+ return obj;
26
+ }
27
+ export class AuditLogHook {
28
+ _logPath;
29
+ name = 'audit-log';
30
+ phase = 'after';
31
+ constructor(_logPath = path.join(os.homedir(), '.zora', 'audit.jsonl')) {
32
+ this._logPath = _logPath;
33
+ }
34
+ async run(ctx) {
35
+ const entry = JSON.stringify({
36
+ ts: new Date().toISOString(),
37
+ jobId: ctx.jobId,
38
+ tool: ctx.tool,
39
+ arguments: redactSecrets(ctx.arguments),
40
+ result: redactSecrets(ctx.result),
41
+ durationMs: ctx.durationMs,
42
+ });
43
+ await fs.mkdir(path.dirname(this._logPath), { recursive: true });
44
+ await fs.appendFile(this._logPath, entry + '\n', 'utf-8');
45
+ return { allow: true };
46
+ }
47
+ }
48
+ //# sourceMappingURL=audit-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-log.js","sourceRoot":"","sources":["../../../src/hooks/built-in/audit-log.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,SAAS,aAAa,CAAC,GAAY,EAAE,KAAK,GAAG,CAAC;IAC5C,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IAC/D,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,OAAO,CAAC,iEAAiE,EAAE,CAAC,CAAC,EAAE,EAAE;YAC1F,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAA8B,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5D,MAAM,SAAS,GAAG,wCAAwC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,OAAO,YAAY;IAIM;IAH7B,IAAI,GAAG,WAAW,CAAC;IACnB,KAAK,GAAG,OAAgB,CAAC;IAEzB,YAA6B,WAAW,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC;QAA1D,aAAQ,GAAR,QAAQ,CAAkD;IAAG,CAAC;IAE3F,KAAK,CAAC,GAAG,CAAC,GAAoB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC5B,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,SAAS,EAAE,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC;YACvC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;YACjC,UAAU,EAAE,GAAG,CAAC,UAAU;SAC3B,CAAC,CAAC;QAEH,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;QAE1D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * RateLimitHook — Throttles per-tool call rates using a sliding window.
3
+ */
4
+ import type { ToolHook, ToolCallContext, ToolHookResult } from '../tool-hook-runner.js';
5
+ export interface RateLimitConfig {
6
+ tool: string;
7
+ maxCalls: number;
8
+ windowMs: number;
9
+ }
10
+ export declare class RateLimitHook implements ToolHook {
11
+ private readonly _limits;
12
+ name: string;
13
+ phase: "before";
14
+ private readonly _windows;
15
+ constructor(_limits: RateLimitConfig[]);
16
+ run(ctx: ToolCallContext): Promise<ToolHookResult>;
17
+ }
18
+ //# sourceMappingURL=rate-limit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../../src/hooks/built-in/rate-limit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExF,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,aAAc,YAAW,QAAQ;IAMhC,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,IAAI,SAAgB;IACpB,KAAK,EAAG,QAAQ,CAAU;IAE1B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;gBAE3B,OAAO,EAAE,eAAe,EAAE;IAEjD,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;CAmBzD"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * RateLimitHook — Throttles per-tool call rates using a sliding window.
3
+ */
4
+ export class RateLimitHook {
5
+ _limits;
6
+ name = 'rate-limit';
7
+ phase = 'before';
8
+ _windows = new Map();
9
+ constructor(_limits) {
10
+ this._limits = _limits;
11
+ }
12
+ async run(ctx) {
13
+ const limit = this._limits.find(l => l.tool === ctx.tool || l.tool === '*');
14
+ if (!limit)
15
+ return { allow: true };
16
+ const now = Date.now();
17
+ const key = ctx.tool;
18
+ const calls = (this._windows.get(key) ?? []).filter(t => now - t < limit.windowMs);
19
+ calls.push(now);
20
+ this._windows.set(key, calls);
21
+ if (calls.length > limit.maxCalls) {
22
+ return {
23
+ allow: false,
24
+ reason: `Rate limit: ${ctx.tool} exceeds ${limit.maxCalls} calls per ${limit.windowMs}ms`,
25
+ };
26
+ }
27
+ return { allow: true };
28
+ }
29
+ }
30
+ //# sourceMappingURL=rate-limit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../../src/hooks/built-in/rate-limit.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,OAAO,aAAa;IAMK;IAL7B,IAAI,GAAG,YAAY,CAAC;IACpB,KAAK,GAAG,QAAiB,CAAC;IAET,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;IAExD,YAA6B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;IAE3D,KAAK,CAAC,GAAG,CAAC,GAAoB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAC5E,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;QACrB,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAE9B,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,eAAe,GAAG,CAAC,IAAI,YAAY,KAAK,CAAC,QAAQ,cAAc,KAAK,CAAC,QAAQ,IAAI;aAC1F,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SecretRedactHook — Redacts API keys and secrets from tool arguments before execution.
3
+ * Modifies args in the before phase so secrets never reach the LLM or logs.
4
+ */
5
+ import type { ToolHook } from '../tool-hook-runner.js';
6
+ export declare const SecretRedactHook: ToolHook;
7
+ //# sourceMappingURL=secret-redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-redact.d.ts","sourceRoot":"","sources":["../../../src/hooks/built-in/secret-redact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,wBAAwB,CAAC;AA2BxF,eAAO,MAAM,gBAAgB,EAAE,QAS9B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * SecretRedactHook — Redacts API keys and secrets from tool arguments before execution.
3
+ * Modifies args in the before phase so secrets never reach the LLM or logs.
4
+ */
5
+ const SECRET_KEY_PATTERN = /key|token|secret|password|auth|bearer|credential/i;
6
+ const SECRET_VALUE_PATTERN = /^(sk-|ghp_|xox[baprs]-|eyJ|AIza)[A-Za-z0-9_-]{10,}/;
7
+ function redactDeep(key, value) {
8
+ if (typeof value === 'string') {
9
+ if (SECRET_KEY_PATTERN.test(key) || SECRET_VALUE_PATTERN.test(value))
10
+ return '[REDACTED]';
11
+ return value;
12
+ }
13
+ if (Array.isArray(value)) {
14
+ return value.map((item, i) => redactDeep(String(i), item));
15
+ }
16
+ if (typeof value === 'object' && value !== null) {
17
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, redactDeep(k, v)]));
18
+ }
19
+ return value;
20
+ }
21
+ function redactObj(obj) {
22
+ return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, redactDeep(k, v)]));
23
+ }
24
+ export const SecretRedactHook = {
25
+ name: 'secret-redact',
26
+ phase: 'before',
27
+ async run(ctx) {
28
+ const modifiedArgs = redactObj(ctx.arguments);
29
+ const changed = JSON.stringify(modifiedArgs) !== JSON.stringify(ctx.arguments);
30
+ return { allow: true, modifiedArgs: changed ? modifiedArgs : undefined };
31
+ },
32
+ };
33
+ //# sourceMappingURL=secret-redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-redact.js","sourceRoot":"","sources":["../../../src/hooks/built-in/secret-redact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,kBAAkB,GAAG,mDAAmD,CAAC;AAC/E,MAAM,oBAAoB,GAAG,oDAAoD,CAAC;AAElF,SAAS,UAAU,CAAC,GAAW,EAAE,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC1F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,GAA4B;IAC7C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAChC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAa;IACxC,IAAI,EAAE,eAAe;IACrB,KAAK,EAAE,QAAQ;IAEf,KAAK,CAAC,GAAG,CAAC,GAAoB;QAC5B,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAC3E,CAAC;CACF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * ShellSafetyHook — Blocks dangerous shell command patterns.
3
+ * Applies to the 'bash' tool (and any alias: 'shell', 'run_command').
4
+ */
5
+ import type { ToolHook } from '../tool-hook-runner.js';
6
+ export declare const ShellSafetyHook: ToolHook;
7
+ //# sourceMappingURL=shell-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-safety.d.ts","sourceRoot":"","sources":["../../../src/hooks/built-in/shell-safety.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAmC,MAAM,wBAAwB,CAAC;AAaxF,eAAO,MAAM,eAAe,EAAE,QAqB7B,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * ShellSafetyHook — Blocks dangerous shell command patterns.
3
+ * Applies to the 'bash' tool (and any alias: 'shell', 'run_command').
4
+ */
5
+ const BLOCKED_PATTERNS = [
6
+ { pattern: /rm\s+-[a-z]*r[a-z]*\s+\/(?!\s*tmp)/i, reason: 'rm -rf on non-tmp path' },
7
+ { pattern: /:\s*\(\s*\)\s*\{.*\}/, reason: 'fork bomb pattern' },
8
+ { pattern: /\|\s*bash\b|\|\s*sh\b/i, reason: 'pipe-to-shell' },
9
+ { pattern: /curl\s+.*\|\s*(bash|sh)\b/i, reason: 'curl-pipe-to-shell' },
10
+ { pattern: /wget\s+.*\|\s*(bash|sh)\b/i, reason: 'wget-pipe-to-shell' },
11
+ { pattern: /chmod\s+777\s+\//i, reason: 'chmod 777 on root path' },
12
+ { pattern: /mkfs\b/i, reason: 'filesystem format command' },
13
+ { pattern: />\s*\/dev\/sd[a-z]/i, reason: 'write to block device' },
14
+ ];
15
+ export const ShellSafetyHook = {
16
+ name: 'shell-safety',
17
+ phase: 'before',
18
+ tools: ['bash', 'shell', 'run_command', 'execute_bash'],
19
+ async run(ctx) {
20
+ const rawCmd = String(ctx.arguments['command'] ?? ctx.arguments['cmd'] ?? '');
21
+ // Normalize path traversal segments (e.g. /tmp/../home → /home) before
22
+ // pattern matching so that directory-traversal bypasses are caught.
23
+ const cmd = rawCmd
24
+ .replace(/\/[^/\s]+\/\.\.\//g, '/')
25
+ .replace(/\/\.\.\//g, '/');
26
+ for (const { pattern, reason } of BLOCKED_PATTERNS) {
27
+ if (pattern.test(cmd)) {
28
+ return { allow: false, reason: `Blocked shell command: ${reason}` };
29
+ }
30
+ }
31
+ return { allow: true };
32
+ },
33
+ };
34
+ //# sourceMappingURL=shell-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-safety.js","sourceRoot":"","sources":["../../../src/hooks/built-in/shell-safety.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,gBAAgB,GAA+C;IACnE,EAAE,OAAO,EAAE,qCAAqC,EAAE,MAAM,EAAE,wBAAwB,EAAE;IACpF,EAAE,OAAO,EAAE,sBAAsB,EAAmB,MAAM,EAAE,mBAAmB,EAAE;IACjF,EAAE,OAAO,EAAE,wBAAwB,EAAiB,MAAM,EAAE,eAAe,EAAE;IAC7E,EAAE,OAAO,EAAE,4BAA4B,EAAc,MAAM,EAAE,oBAAoB,EAAE;IACnF,EAAE,OAAO,EAAE,4BAA4B,EAAc,MAAM,EAAE,oBAAoB,EAAE;IACnF,EAAE,OAAO,EAAE,mBAAmB,EAAuB,MAAM,EAAE,wBAAwB,EAAE;IACvF,EAAE,OAAO,EAAE,SAAS,EAAiC,MAAM,EAAE,2BAA2B,EAAE;IAC1F,EAAE,OAAO,EAAE,qBAAqB,EAAqB,MAAM,EAAE,uBAAuB,EAAE;CACvF,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAa;IACvC,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,CAAC;IAEvD,KAAK,CAAC,GAAG,CAAC,GAAoB;QAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,uEAAuE;QACvE,oEAAoE;QACpE,MAAM,GAAG,GAAG,MAAM;aACf,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC;aAClC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAE7B,KAAK,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,gBAAgB,EAAE,CAAC;YACnD,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,0BAA0B,MAAM,EAAE,EAAE,CAAC;YACtE,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;CACF,CAAC"}
@@ -3,4 +3,9 @@
3
3
  */
4
4
  export * from './hook-types.js';
5
5
  export * from './hook-runner.js';
6
+ export * from './tool-hook-runner.js';
7
+ export * from './built-in/shell-safety.js';
8
+ export * from './built-in/audit-log.js';
9
+ export * from './built-in/rate-limit.js';
10
+ export * from './built-in/secret-redact.js';
6
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC"}
@@ -3,4 +3,9 @@
3
3
  */
4
4
  export * from './hook-types.js';
5
5
  export * from './hook-runner.js';
6
+ export * from './tool-hook-runner.js';
7
+ export * from './built-in/shell-safety.js';
8
+ export * from './built-in/audit-log.js';
9
+ export * from './built-in/rate-limit.js';
10
+ export * from './built-in/secret-redact.js';
6
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * ToolHookRunner — Intercepts tool calls at the execution level.
3
+ * Hooks fire before and after every tool call inside an LLM turn.
4
+ * Built-in hooks: ShellSafety, AuditLog, SecretRedact, RateLimit.
5
+ */
6
+ export type ToolHookPhase = 'before' | 'after' | 'both';
7
+ export interface ToolCallContext {
8
+ jobId: string;
9
+ tool: string;
10
+ arguments: Record<string, unknown>;
11
+ result?: unknown;
12
+ durationMs?: number;
13
+ }
14
+ export interface ToolHookResult {
15
+ allow: boolean;
16
+ modifiedArgs?: Record<string, unknown>;
17
+ reason?: string;
18
+ }
19
+ export interface ToolHook {
20
+ name: string;
21
+ phase: ToolHookPhase;
22
+ tools?: string[];
23
+ run(ctx: ToolCallContext): Promise<ToolHookResult>;
24
+ }
25
+ export declare class ToolHookRunner {
26
+ private readonly _hooks;
27
+ register(hook: ToolHook): void;
28
+ /** Run all 'before' hooks. Returns allow=false if any hook blocks. */
29
+ runBefore(ctx: ToolCallContext): Promise<{
30
+ allow: boolean;
31
+ args: Record<string, unknown>;
32
+ }>;
33
+ /** Run all 'after' hooks. Errors are logged but do not throw. */
34
+ runAfter(ctx: ToolCallContext): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=tool-hook-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-hook-runner.d.ts","sourceRoot":"","sources":["../../src/hooks/tool-hook-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACpD;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B,sEAAsE;IAChE,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAoBjG,iEAAiE;IAC3D,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAYpD"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * ToolHookRunner — Intercepts tool calls at the execution level.
3
+ * Hooks fire before and after every tool call inside an LLM turn.
4
+ * Built-in hooks: ShellSafety, AuditLog, SecretRedact, RateLimit.
5
+ */
6
+ import { createLogger } from '../utils/logger.js';
7
+ const log = createLogger('tool-hook-runner');
8
+ export class ToolHookRunner {
9
+ _hooks = [];
10
+ register(hook) {
11
+ this._hooks.push(hook);
12
+ log.debug({ hook: hook.name, phase: hook.phase, tools: hook.tools }, 'tool hook registered');
13
+ }
14
+ /** Run all 'before' hooks. Returns allow=false if any hook blocks. */
15
+ async runBefore(ctx) {
16
+ let args = { ...ctx.arguments };
17
+ for (const hook of this._hooks) {
18
+ if (hook.phase !== 'before' && hook.phase !== 'both')
19
+ continue;
20
+ if (hook.tools && hook.tools.length > 0 && !hook.tools.includes(ctx.tool))
21
+ continue;
22
+ const result = await hook.run({ ...ctx, arguments: args });
23
+ if (!result.allow) {
24
+ log.warn({ jobId: ctx.jobId, tool: ctx.tool, hook: hook.name, reason: result.reason }, 'tool call blocked');
25
+ return { allow: false, args };
26
+ }
27
+ if (result.modifiedArgs) {
28
+ args = { ...args, ...result.modifiedArgs };
29
+ }
30
+ }
31
+ return { allow: true, args };
32
+ }
33
+ /** Run all 'after' hooks. Errors are logged but do not throw. */
34
+ async runAfter(ctx) {
35
+ for (const hook of this._hooks) {
36
+ if (hook.phase !== 'after' && hook.phase !== 'both')
37
+ continue;
38
+ if (hook.tools && hook.tools.length > 0 && !hook.tools.includes(ctx.tool))
39
+ continue;
40
+ try {
41
+ await hook.run(ctx);
42
+ }
43
+ catch (err) {
44
+ log.error({ jobId: ctx.jobId, tool: ctx.tool, hook: hook.name, err }, 'after-hook error');
45
+ }
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=tool-hook-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-hook-runner.js","sourceRoot":"","sources":["../../src/hooks/tool-hook-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,GAAG,GAAG,YAAY,CAAC,kBAAkB,CAAC,CAAC;AAyB7C,MAAM,OAAO,cAAc;IACR,MAAM,GAAe,EAAE,CAAC;IAEzC,QAAQ,CAAC,IAAc;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;IAC/F,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,SAAS,CAAC,GAAoB;QAClC,IAAI,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;gBAAE,SAAS;YAC/D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEpF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClB,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBAC5G,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChC,CAAC;YACD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;gBACxB,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,iEAAiE;IACjE,KAAK,CAAC,QAAQ,CAAC,GAAoB;QACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;gBAAE,SAAS;YAC9D,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEpF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;YAC5F,CAAC;QACH,CAAC;IACH,CAAC;CACF"}