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.
- package/README.md +171 -65
- package/dist/cli/daemon.js +1 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/index.js +27 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/secret-commands.d.ts +16 -0
- package/dist/cli/secret-commands.d.ts.map +1 -0
- package/dist/cli/secret-commands.js +87 -0
- package/dist/cli/secret-commands.js.map +1 -0
- package/dist/cli/skill-commands.d.ts.map +1 -1
- package/dist/cli/skill-commands.js +75 -0
- package/dist/cli/skill-commands.js.map +1 -1
- package/dist/cli/subagent-commands.d.ts +13 -0
- package/dist/cli/subagent-commands.d.ts.map +1 -0
- package/dist/cli/subagent-commands.js +80 -0
- package/dist/cli/subagent-commands.js.map +1 -0
- package/dist/config/defaults.d.ts +6 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +6 -0
- package/dist/config/defaults.js.map +1 -1
- package/dist/dashboard/cost-tracker.d.ts +40 -0
- package/dist/dashboard/cost-tracker.d.ts.map +1 -0
- package/dist/dashboard/cost-tracker.js +63 -0
- package/dist/dashboard/cost-tracker.js.map +1 -0
- package/dist/dashboard/frontend/dist/assets/{index-DSXaCp9r.js → index-Bi0V-1ti.js} +83 -83
- package/dist/dashboard/frontend/dist/assets/index-SQqtXVeO.css +1 -0
- package/dist/dashboard/frontend/dist/index.html +2 -2
- package/dist/dashboard/server.d.ts +5 -0
- package/dist/dashboard/server.d.ts.map +1 -1
- package/dist/dashboard/server.js +17 -0
- package/dist/dashboard/server.js.map +1 -1
- package/dist/hooks/built-in/audit-log.d.ts +13 -0
- package/dist/hooks/built-in/audit-log.d.ts.map +1 -0
- package/dist/hooks/built-in/audit-log.js +48 -0
- package/dist/hooks/built-in/audit-log.js.map +1 -0
- package/dist/hooks/built-in/rate-limit.d.ts +18 -0
- package/dist/hooks/built-in/rate-limit.d.ts.map +1 -0
- package/dist/hooks/built-in/rate-limit.js +30 -0
- package/dist/hooks/built-in/rate-limit.js.map +1 -0
- package/dist/hooks/built-in/secret-redact.d.ts +7 -0
- package/dist/hooks/built-in/secret-redact.d.ts.map +1 -0
- package/dist/hooks/built-in/secret-redact.js +33 -0
- package/dist/hooks/built-in/secret-redact.js.map +1 -0
- package/dist/hooks/built-in/shell-safety.d.ts +7 -0
- package/dist/hooks/built-in/shell-safety.d.ts.map +1 -0
- package/dist/hooks/built-in/shell-safety.js +34 -0
- package/dist/hooks/built-in/shell-safety.js.map +1 -0
- package/dist/hooks/index.d.ts +5 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/tool-hook-runner.d.ts +36 -0
- package/dist/hooks/tool-hook-runner.d.ts.map +1 -0
- package/dist/hooks/tool-hook-runner.js +49 -0
- package/dist/hooks/tool-hook-runner.js.map +1 -0
- package/dist/lib/error-normalizer.d.ts +53 -0
- package/dist/lib/error-normalizer.d.ts.map +1 -0
- package/dist/lib/error-normalizer.js +128 -0
- package/dist/lib/error-normalizer.js.map +1 -0
- package/dist/memory/context-compressor.d.ts +3 -1
- package/dist/memory/context-compressor.d.ts.map +1 -1
- package/dist/memory/context-compressor.js +18 -3
- package/dist/memory/context-compressor.js.map +1 -1
- package/dist/memory/plan-cache.d.ts +27 -0
- package/dist/memory/plan-cache.d.ts.map +1 -0
- package/dist/memory/plan-cache.js +91 -0
- package/dist/memory/plan-cache.js.map +1 -0
- package/dist/orchestrator/code-tool-runner.d.ts +41 -0
- package/dist/orchestrator/code-tool-runner.d.ts.map +1 -0
- package/dist/orchestrator/code-tool-runner.js +375 -0
- package/dist/orchestrator/code-tool-runner.js.map +1 -0
- package/dist/orchestrator/error-pattern-detector.d.ts +54 -0
- package/dist/orchestrator/error-pattern-detector.d.ts.map +1 -0
- package/dist/orchestrator/error-pattern-detector.js +87 -0
- package/dist/orchestrator/error-pattern-detector.js.map +1 -0
- package/dist/orchestrator/execution-planner.d.ts +33 -0
- package/dist/orchestrator/execution-planner.d.ts.map +1 -0
- package/dist/orchestrator/execution-planner.js +67 -0
- package/dist/orchestrator/execution-planner.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +77 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.js +595 -29
- package/dist/orchestrator/orchestrator.js.map +1 -1
- package/dist/orchestrator/retry-queue.d.ts +7 -1
- package/dist/orchestrator/retry-queue.d.ts.map +1 -1
- package/dist/orchestrator/retry-queue.js +10 -4
- package/dist/orchestrator/retry-queue.js.map +1 -1
- package/dist/orchestrator/step-classifier.d.ts +26 -0
- package/dist/orchestrator/step-classifier.d.ts.map +1 -0
- package/dist/orchestrator/step-classifier.js +77 -0
- package/dist/orchestrator/step-classifier.js.map +1 -0
- package/dist/orchestrator/tlci-dispatcher.d.ts +47 -0
- package/dist/orchestrator/tlci-dispatcher.d.ts.map +1 -0
- package/dist/orchestrator/tlci-dispatcher.js +116 -0
- package/dist/orchestrator/tlci-dispatcher.js.map +1 -0
- package/dist/routines/heartbeat.d.ts.map +1 -1
- package/dist/routines/heartbeat.js +3 -1
- package/dist/routines/heartbeat.js.map +1 -1
- package/dist/routines/routine-manager.d.ts.map +1 -1
- package/dist/routines/routine-manager.js +3 -1
- package/dist/routines/routine-manager.js.map +1 -1
- package/dist/security/intent-capsule.d.ts +19 -0
- package/dist/security/intent-capsule.d.ts.map +1 -1
- package/dist/security/intent-capsule.js +84 -1
- package/dist/security/intent-capsule.js.map +1 -1
- package/dist/security/policy-engine.d.ts +1 -0
- package/dist/security/policy-engine.d.ts.map +1 -1
- package/dist/security/policy-engine.js +22 -1
- package/dist/security/policy-engine.js.map +1 -1
- package/dist/services/negative-cache.d.ts +67 -0
- package/dist/services/negative-cache.d.ts.map +1 -0
- package/dist/services/negative-cache.js +164 -0
- package/dist/services/negative-cache.js.map +1 -0
- package/dist/skills/skill-auditor.d.ts +36 -0
- package/dist/skills/skill-auditor.d.ts.map +1 -0
- package/dist/skills/skill-auditor.js +89 -0
- package/dist/skills/skill-auditor.js.map +1 -0
- package/dist/skills/skill-installer.d.ts +41 -0
- package/dist/skills/skill-installer.d.ts.map +1 -0
- package/dist/skills/skill-installer.js +141 -0
- package/dist/skills/skill-installer.js.map +1 -0
- package/dist/skills/skill-scanner.d.ts +30 -0
- package/dist/skills/skill-scanner.d.ts.map +1 -0
- package/dist/skills/skill-scanner.js +249 -0
- package/dist/skills/skill-scanner.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/planning-tool.d.ts +95 -0
- package/dist/tools/planning-tool.d.ts.map +1 -0
- package/dist/tools/planning-tool.js +117 -0
- package/dist/tools/planning-tool.js.map +1 -0
- package/dist/tools/skill-tool.d.ts +94 -0
- package/dist/tools/skill-tool.d.ts.map +1 -0
- package/dist/tools/skill-tool.js +202 -0
- package/dist/tools/skill-tool.js.map +1 -0
- package/dist/tools/subagent-tool.d.ts +11 -0
- package/dist/tools/subagent-tool.d.ts.map +1 -0
- package/dist/tools/subagent-tool.js +87 -0
- package/dist/tools/subagent-tool.js.map +1 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/args.d.ts +5 -0
- package/dist/utils/args.d.ts.map +1 -0
- package/dist/utils/args.js +20 -0
- package/dist/utils/args.js.map +1 -0
- package/package.json +4 -1
- package/dist/dashboard/frontend/dist/assets/index-2FaDr6iS.js +0 -277
- package/dist/dashboard/frontend/dist/assets/index-B9-KXW14.css +0 -1
- package/dist/dashboard/frontend/dist/assets/index-BMxbyTer.css +0 -1
- package/dist/dashboard/frontend/dist/assets/index-BXUfB9iR.js +0 -253
- package/dist/dashboard/frontend/dist/assets/index-BcOGj1EF.css +0 -1
- package/dist/dashboard/frontend/dist/assets/index-BtiFO9YN.js +0 -261
- package/dist/dashboard/frontend/dist/assets/index-CQmpMTLW.js +0 -253
- package/dist/dashboard/frontend/dist/assets/index-Cfjy5acU.css +0 -1
- package/dist/dashboard/frontend/dist/assets/index-D41hcjgc.js +0 -253
- package/dist/dashboard/frontend/dist/assets/index-D83BawFd.css +0 -1
- package/dist/dashboard/frontend/dist/assets/index-DAODjoxu.css +0 -1
- package/dist/dashboard/frontend/dist/assets/index-DB-Eu5oV.js +0 -253
- package/dist/dashboard/frontend/dist/assets/index-W0VVEDu6.js +0 -253
- package/dist/dashboard/frontend/dist/assets/index-aK9PWl6w.js +0 -253
- package/dist/dashboard/frontend/vite.config.d.ts +0 -3
- package/dist/dashboard/frontend/vite.config.d.ts.map +0 -1
- package/dist/dashboard/frontend/vite.config.js +0 -11
- 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-
|
|
12
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
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;
|
|
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"}
|
package/dist/dashboard/server.js
CHANGED
|
@@ -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":"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"}
|
|
@@ -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"}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -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
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -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"}
|