@kubbisec/ai-linux-arm64 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/bin/kubbisec +0 -0
  2. package/bundled/assets/terminal/banner-compact.ansi +7 -0
  3. package/bundled/assets/terminal/banner-wide.ansi +10 -0
  4. package/bundled/assets/terminal/logotipo-compact-fallback.ansi +7 -0
  5. package/bundled/assets/terminal/logotipo-compact.ansi +1 -0
  6. package/bundled/assets/terminal/logotipo-compact.png +0 -0
  7. package/bundled/assets/terminal/logotipo-wide-fallback.ansi +10 -0
  8. package/bundled/assets/terminal/logotipo-wide.ansi +1 -0
  9. package/bundled/assets/terminal/logotipo-wide.png +0 -0
  10. package/bundled/assets/terminal/mark.ansi +7 -0
  11. package/bundled/edit-format.md +17 -0
  12. package/bundled/extensions/cli-local-shared.d.ts +26 -0
  13. package/bundled/extensions/cli-local-shared.d.ts.map +1 -0
  14. package/bundled/extensions/cli-local-shared.js +97 -0
  15. package/bundled/extensions/cli-local-shared.js.map +1 -0
  16. package/bundled/extensions/kubbisec-aspm-local.extension.d.ts +17 -0
  17. package/bundled/extensions/kubbisec-aspm-local.extension.d.ts.map +1 -0
  18. package/bundled/extensions/kubbisec-aspm-local.extension.js +134 -0
  19. package/bundled/extensions/kubbisec-aspm-local.extension.js.map +1 -0
  20. package/bundled/extensions/kubbisec-brand.extension.d.ts +20 -0
  21. package/bundled/extensions/kubbisec-brand.extension.d.ts.map +1 -0
  22. package/bundled/extensions/kubbisec-brand.extension.js +84 -0
  23. package/bundled/extensions/kubbisec-brand.extension.js.map +1 -0
  24. package/bundled/extensions/kubbisec-byok-provider.extension.d.ts +30 -0
  25. package/bundled/extensions/kubbisec-byok-provider.extension.d.ts.map +1 -0
  26. package/bundled/extensions/kubbisec-byok-provider.extension.js +44 -0
  27. package/bundled/extensions/kubbisec-byok-provider.extension.js.map +1 -0
  28. package/bundled/extensions/kubbisec-clarify.extension.d.ts +45 -0
  29. package/bundled/extensions/kubbisec-clarify.extension.d.ts.map +1 -0
  30. package/bundled/extensions/kubbisec-clarify.extension.js +305 -0
  31. package/bundled/extensions/kubbisec-clarify.extension.js.map +1 -0
  32. package/bundled/extensions/kubbisec-footer.extension.d.ts +64 -0
  33. package/bundled/extensions/kubbisec-footer.extension.d.ts.map +1 -0
  34. package/bundled/extensions/kubbisec-footer.extension.js +187 -0
  35. package/bundled/extensions/kubbisec-footer.extension.js.map +1 -0
  36. package/bundled/extensions/kubbisec-github-local.extension.d.ts +23 -0
  37. package/bundled/extensions/kubbisec-github-local.extension.d.ts.map +1 -0
  38. package/bundled/extensions/kubbisec-github-local.extension.js +105 -0
  39. package/bundled/extensions/kubbisec-github-local.extension.js.map +1 -0
  40. package/bundled/extensions/kubbisec-memory.extension.d.ts +12 -0
  41. package/bundled/extensions/kubbisec-memory.extension.d.ts.map +1 -0
  42. package/bundled/extensions/kubbisec-memory.extension.js +107 -0
  43. package/bundled/extensions/kubbisec-memory.extension.js.map +1 -0
  44. package/bundled/extensions/kubbisec-naus-local.extension.d.ts +17 -0
  45. package/bundled/extensions/kubbisec-naus-local.extension.d.ts.map +1 -0
  46. package/bundled/extensions/kubbisec-naus-local.extension.js +125 -0
  47. package/bundled/extensions/kubbisec-naus-local.extension.js.map +1 -0
  48. package/bundled/extensions/kubbisec-platform-tools.extension.d.ts +27 -0
  49. package/bundled/extensions/kubbisec-platform-tools.extension.d.ts.map +1 -0
  50. package/bundled/extensions/kubbisec-platform-tools.extension.js +144 -0
  51. package/bundled/extensions/kubbisec-platform-tools.extension.js.map +1 -0
  52. package/bundled/extensions/kubbisec-runtime-status.extension.d.ts +13 -0
  53. package/bundled/extensions/kubbisec-runtime-status.extension.d.ts.map +1 -0
  54. package/bundled/extensions/kubbisec-runtime-status.extension.js +18 -0
  55. package/bundled/extensions/kubbisec-runtime-status.extension.js.map +1 -0
  56. package/bundled/extensions/kubbisec-scope.extension.d.ts +14 -0
  57. package/bundled/extensions/kubbisec-scope.extension.d.ts.map +1 -0
  58. package/bundled/extensions/kubbisec-scope.extension.js +14 -0
  59. package/bundled/extensions/kubbisec-scope.extension.js.map +1 -0
  60. package/bundled/extensions/kubbisec-skill-mentions.extension.d.ts +24 -0
  61. package/bundled/extensions/kubbisec-skill-mentions.extension.d.ts.map +1 -0
  62. package/bundled/extensions/kubbisec-skill-mentions.extension.js +54 -0
  63. package/bundled/extensions/kubbisec-skill-mentions.extension.js.map +1 -0
  64. package/bundled/extensions/kubbisec-skill-telemetry.extension.d.ts +6 -0
  65. package/bundled/extensions/kubbisec-skill-telemetry.extension.d.ts.map +1 -0
  66. package/bundled/extensions/kubbisec-skill-telemetry.extension.js +85 -0
  67. package/bundled/extensions/kubbisec-skill-telemetry.extension.js.map +1 -0
  68. package/bundled/extensions/kubbisec-ui.extension.d.ts +6 -0
  69. package/bundled/extensions/kubbisec-ui.extension.d.ts.map +1 -0
  70. package/bundled/extensions/kubbisec-ui.extension.js +116 -0
  71. package/bundled/extensions/kubbisec-ui.extension.js.map +1 -0
  72. package/bundled/extensions/kubbisec-workflow.extension.d.ts +38 -0
  73. package/bundled/extensions/kubbisec-workflow.extension.d.ts.map +1 -0
  74. package/bundled/extensions/kubbisec-workflow.extension.js +169 -0
  75. package/bundled/extensions/kubbisec-workflow.extension.js.map +1 -0
  76. package/bundled/gate-system.md +27 -0
  77. package/bundled/reflect-system.md +31 -0
  78. package/bundled/skills/aspm-platform/SKILL.md +58 -0
  79. package/bundled/skills/chat-mention-render.d.ts +7 -0
  80. package/bundled/skills/chat-mention-render.d.ts.map +1 -0
  81. package/bundled/skills/chat-mention-render.js +122 -0
  82. package/bundled/skills/chat-mention-render.js.map +1 -0
  83. package/bundled/skills/chat-mention-render.test.ts +47 -0
  84. package/bundled/skills/chat-mention-render.ts +141 -0
  85. package/bundled/skills/chat-mentions.d.ts +27 -0
  86. package/bundled/skills/chat-mentions.d.ts.map +1 -0
  87. package/bundled/skills/chat-mentions.js +104 -0
  88. package/bundled/skills/chat-mentions.js.map +1 -0
  89. package/bundled/skills/chat-mentions.test.ts +32 -0
  90. package/bundled/skills/chat-mentions.ts +126 -0
  91. package/bundled/skills/github-local/SKILL.md +16 -0
  92. package/bundled/skills/list-bundled-skills.d.ts +7 -0
  93. package/bundled/skills/list-bundled-skills.d.ts.map +1 -0
  94. package/bundled/skills/list-bundled-skills.js +44 -0
  95. package/bundled/skills/list-bundled-skills.js.map +1 -0
  96. package/bundled/skills/list-bundled-skills.ts +46 -0
  97. package/bundled/skills/naus-pipelines/SKILL.md +31 -0
  98. package/bundled/skills/remediation/SKILL.md +12 -0
  99. package/bundled/skills/scanner-gitleaks/SKILL.md +10 -0
  100. package/bundled/skills/scanner-nmap/SKILL.md +10 -0
  101. package/bundled/skills/scanner-osv/SKILL.md +10 -0
  102. package/bundled/skills/scanner-semgrep/SKILL.md +10 -0
  103. package/bundled/skills/scanner-skipfish/SKILL.md +10 -0
  104. package/bundled/skills/scanner-sonar/SKILL.md +10 -0
  105. package/bundled/skills/scanner-syft/SKILL.md +10 -0
  106. package/bundled/skills/scanner-trivy/SKILL.md +10 -0
  107. package/bundled/skills/sec-brainstorm/SKILL.md +74 -0
  108. package/bundled/skills/sec-clarify/SKILL.md +68 -0
  109. package/bundled/skills/sec-debug/SKILL.md +94 -0
  110. package/bundled/skills/sec-plan/SKILL.md +101 -0
  111. package/bundled/skills/sec-review/SKILL.md +110 -0
  112. package/bundled/skills/sec-review/code-reviewer-sec.md +176 -0
  113. package/bundled/skills/sec-using-skills/SKILL.md +79 -0
  114. package/bundled/skills/sec-verify/SKILL.md +77 -0
  115. package/bundled/skills/skill-mention.d.ts +3 -0
  116. package/bundled/skills/skill-mention.d.ts.map +1 -0
  117. package/bundled/skills/skill-mention.js +3 -0
  118. package/bundled/skills/skill-mention.js.map +1 -0
  119. package/bundled/skills/skill-mention.test.ts +46 -0
  120. package/bundled/skills/skill-mention.ts +10 -0
  121. package/bundled/theme/kubbisec.json +93 -0
  122. package/package.json +3 -2
package/bin/kubbisec CHANGED
Binary file
@@ -0,0 +1,7 @@
1
+  ███▄▄ 
2
+ ▄█ ████▀▀ 
3
+ ██ █▀▀ ▄▄██ 
4
+ ██ █████ K U B B I S E C
5
+ ██ █▄▄ ▀▀██ 
6
+ ▀█ █████▄ 
7
+  ▀███▀ 
@@ -0,0 +1,10 @@
1
+  ▄████▄ 
2
+  ███████▄ 
3
+ ███ █████▀▀ ▄ 
4
+ ███ ██▀▀ ▄███ 
5
+ ███ ▄██████ K U B B I S E C
6
+ ███ ▀██████ 
7
+ ███ ▄█▄▄ ▀▀███ 
8
+ ███ █████▄▄ ▀ 
9
+  ████████ 
10
+  ▀▀███▀ 
@@ -0,0 +1,7 @@
1
+  ███▄▄ 
2
+ ▄█ ████▀▀ 
3
+ ██ █▀▀ ▄▄██ 
4
+ ██ █████ K U B B I S E C
5
+ ██ █▄▄ ▀▀██ 
6
+ ▀█ █████▄ 
7
+  ▀███▀ 
@@ -0,0 +1 @@
1
+ ]1337;File=height=36px;inline=1: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
@@ -0,0 +1,10 @@
1
+  ▄████▄ 
2
+  ███████▄ 
3
+ ███ █████▀▀ ▄ 
4
+ ███ ██▀▀ ▄███ 
5
+ ███ ▄██████ K U B B I S E C
6
+ ███ ▀██████ 
7
+ ███ ▄█▄▄ ▀▀███ 
8
+ ███ █████▄▄ ▀ 
9
+  ████████ 
10
+  ▀▀███▀ 
@@ -0,0 +1 @@
1
+ ]1337;File=height=46px;inline=1:iVBORw0KGgoAAAANSUhEUgAAAm0AAAFBCAYAAAAljZhuAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dZ3xUVcIG8GfulMyk90ICKRZkVbCADRGJq4Ksrq6yFnDtgqIoEESlSlVpimADVFaxgAqoFMUFFQsgSpNioSckmUmZtOlz5/2A+IqZQMrMnDtzn//Huck5z88APjn33HM1AHwg8sPUtTvie/8LpnMvhC63ALrEFMj1NXCVHIZz+2bUrVmOhq/WwOdxi45KREQU8TQsbfRX0RdfjrSiiTB1ueCkX+s+tA+W5yei9qN3AB//KBEREQULSxv9QZ+Vg9ThE5Bwff8Wf69j+2aUTxgG+9aNQclGRESkdixtBMkUjeT7hiPl/uHQGE2tH0iWUfPROzBPHQlvpSWQEYmIiFSPpU3lYgv7In3sczDkdAjYmN6aalS8MAnWN1+Gz+sJ2LhERERqxtKmUsYzz0XG6BkwdesetDlce39G+cRhaPj686DNQUREpBYsbSqjTUxB6sOjkNR/IKDThWTOurUrYX7qEbhLDoVkPiIiokjE0qYSGp0eiQMGIm3IGEjxiSGf32trQPX8Wah8ZRp8TkfI5yciIgp3LG0qENO9EGmjp8N42pmio8B9aB/M00ajbtUHoqMQERGFFZa2CGbIOxVpT05DXOE1oqM00vDNOpgnDoXzt92ioxAREYUFlrYIJJlikHzfMKQMKoLGYBQdp0myx4WaRfNgmTUecn2t6DhERESKxtIWSTQaJFzfH6mPTYU+LV10mmZzm8tQMW0UapYt4lsViIiImsDSFiGMnbsifexMRJ9zoegorebY9j3KJgyFY9v3oqMQEREpDktbmNOlZyHtsclIuO5WQJJEx2k7rxc1H78L85SR8FbxrQpERETHsLSFKY3egMT+9yNt6DhIMfGi4wScx1qFyjmTUf3mS4DXKzoOERGRcCxtYSi2sC8yxsyAvn2+6ChB59i9FeYJw2H7/mvRUYiIiIRiaQsjhlM6ImPUdMRcdpXoKCFXt3YlzOOHwH3ksOgoREREQrC0hQFtQhJSh4xBwoD7IWn1ouMI88dbFV5+Fj6XU3QcIiKikGJpUzJJQsI/b0P6E09Dm5wmOo1iOA/uhWXScNSvWyU6ChERUciwtClU9EU9kTFqOqI6dRYdRbEavlmL8glD4dq7R3QUIiKioGNpUxh9dgekPTkN8VdfLzpKWPC5HKha8DwqX3wGsr1BdBwiIqKgYWlTkMR+dyF99LMReYRHsLlLi2F5+nHUrlgiOgoREVFQsLQpRNrQ8UgZ/IToGGGvYdNXMD81FM6ffxIdhYiIKKBY2hQg6T8PImPsLNExIobsdaNm0TxUPD8B3ppq0XGIiIgCgqVNsKjT/oa85d9BYzCKjhJxvFUWWGaMg3XJ64Asi45DRETUJixtgrV/7WNVHpYbSvadP8I8YTjsP3wrOgoREVGrsbQJFHX6mchf+aPoGOogy7AuXYSK6aPgsZSLTkNERNRikugAahbft5/oCOohSUi88XYUrNmB5HsehUan3jdLEBFReGJpE8jYrbvoCKojxSYg/YlnkLdyC2Iv7y06DhERUbOxtAlkyOsoOoJqRRWchpz5y5E9dzH0Obmi4xAREZ0U97QJ1PEnKzRGk+gYquez21A5fxaqXp0O2W4THYeIiMgvljaBTv+5HpKWe6uUwlN+BJbpY1Cz9C3RUYiIiBrh7VGi3+ky2iFr2gJ0eOszRHU8S3QcIiKi47C0Ef1F9EU9kfvRBmSMmQkpLkF0HCIiIoCljcg/SatH0h2DUbBuN5LufAiQ+FeFiIjE4p42gbinLXw4fvoB5U8Ng33LBtFRiIhIpbh8QNQMxrPOR+5765A1/TXoUtNFxyEiIhViaSNqLklCwvX9kf/pdqQMLIJGbxCdiIiIVIS3RwXi7dHw5tr3C8onDkPD+jWioxARkQpwpY2olQwFp6P9658g+9WlfKsCEREFHUsbURvFFV6DglVbkTpkDDRRRtFxiIgoQvH2qEC8PRp53KXFqJg5jm9VICKigONKG1EA6bNykDVtAdq//gkMBaeLjkNERBGEpY0oCGJ6XIn8jzYh+a4hoqMQEVGEYGkjChKN0YT0UdOQOflFvlGBiIjajP8nIQqyxJvvQdrwiaJjEBFRmGNpIwqBlIFFiLn0CtExiIgojLG0EYVI+ugZvE1KREStxv+DEIVI1KmdENvzatExiIgoTLG0EYVQXN9+oiMQEVGYYmkjCiFT1x6iIxARUZhiaSMKIUO7HEimaNExiIgoDLG0EYWSJEGKixedgoiIwhBLG1GI+Vwu0RGIiCgMsbQRhZDX1gBvrVV0DCIiCkMsbUQh5NqzHZBl0TGIiCgMsbQRhVD9ulWiIxARUZhiaSMKEdntRM3St0THICKiMMXSRhQiNYtfh6esRHQMIiIKUyxtRCHgKj4Ey/SxomMQEVEY0wkPkJ6J6IsLYfxbF2gTkwEA3upKOHZvg+2b/8FTYRYdkahN5ForSgbeALmuRnQUIiIKY8JKm6nLBUh9eDRiLr0C0DURw+NB/fo1qHzxadi3bAh1RKI285SV4PC9/4Tz559ERyEiojCnAeAL5YS69EykP/404q+7tfnfJMuwLn4N5skjINttwYwXUqf/XA9Jqxcdg4JBllH78bsonzgcXmuV6DRERBQBQlbaNFodEm8fhLRHx0KKTWjVGI5t3+PwvdfDW10R8HwisLRFJvvOH2GZNAK2778WHYWIiCJISEqb6byLkfnU84jq1KXNYzm2bcLB/lfB57AHJJtILG2RxWOtROWcKah+8yXA6xUdh4iIIkxQnx7VJqcha+oryH13bUAKGwAYu1yAtJFTAzIWUSDIHheqF87Fvl6dUP3GHBY2IiIKiuCstGk0SLi+P9KffAbapNSADw+vF/uvvwjO3dsDP3YIcaUt/DV8sxblE4bCtXeP6ChERBThAr7SZjzrPOS9vx5Z0xYEp7ABgFaLlPuGBWdsomZw7f0Zh++5Dofv6MPCRkREIRGwIz+0CUlIHTYeSTff2/QRHgEU8/frIJliINsbgj4X0THH9q1Z33wZPq9HdBwiIlKRtrer32+Fpj42Ffq09ICEag5tdAyMZ58P26avQjYnqZfsdaN2yUJYZo6Ht8oiOg4REalQm0pbVMezkDl+NkzdugcuUUvmP+1vLG0UdA3frIN5ShEPyCUiIqFaVdqkmDikPjoWif95QOhGem1SsrC5KfI59/+GipljUbfqA9FRiIiIWl7aYgv7In3c8zBktw9OohbQ6A2iI1AE8trqUD3/eVS+/Cx8LqfoOEREREBLSpsh71RkjHsOMT2uDG4iIlG8XtR8/C4sTz8OT4VZdBoiIqLjnLS0aYwmpNxfhJRBRdAYjKFJRRRiDZu+gmViERy7t4mOQkRE5NcJS1tsYV9kjJ0FfU5u6BIRhZCnrASWGWNRs2wR4AvJa3iJiIhaxW9p07fPR8bYWYjt1Sf0iYhCwGtrQPX8Wah8ZRp8TofoOERERCfVqLQl3nwP0kY/C60pVkwiomCSZdR9uhTmqSPhPnJYdBoiIqJmO660pRZNROqgx8SlIQoix/bNKJ9UBPuP34mOQkRE1GJ/lLakOx9iYaOI5DGXomL2JFgXvwbIsug4REREraLD7282SBs5RXQWooDy2W2o+u+LqHzxacgNdaLjEBERtYkOANKeeAaSPkp0FqKAqVu7EuYJQ+EuPiA6ChERUUDoojp1RuylfxedgyggHLu2wDxxBGzfrxcdhYiIKKB08X1uFJ2BqM081kpUzpmC6jdfArxe0XGIiIgCTmfq1l10BqJWkz0u1CyaB8tzT0GuqxEdh4iIKGh0+ryOojMQtUrDN2thnjgMzt92i45CREQUdDpdQrzoDEQt4tr3C8xTRqD+i9WioxAREYWMTiOd9J3xRIrgsVahcs5kWN98GT6vR3QcIiKikGJjI8WTvW7ULlkIy8zx8FZZRMchIiISgqWNFK3hm3UwTymC8+efREchIiISiqWNFMl5cC8qpo9B3aoPREdRNY1Oj+iLesJ0zgXQ5+RBiomFXF8H1+H9sP/wLWybv+ERK0REIcLSRoritdWhev7zqHz5WfhcTtFxVEsbn4ikux9B4oCB0CWmNPl1bosZ1rdeRPUbc/iqMCKiIJNEByACAHi9qFm2CPsL/4aK2RNZ2ESRJCTeci8K/rcTqQ89ecLCBgD6tHSkDR2P/NVbEXNJr5DFJCJSI5Y2Es6+bRMO/vtylBbdDU+FWXQc1TKdcyHyPvwamZPmQpuU2qLv1WflIPv1j5H477uDlo+ISO14e5SE8ZSVwDJjLGqWLQJ8PtFxVEuXmo60EZORcMMAQGr973GSVo/MiXPgrbWibvWHAc1IREQsbSSA19aA6vmzUPnqdPgcdtFxVEuj1SHpPw8g9eHRkOITAzOoVousKS/BsWMz3CWHAjMmEREBvD1KISXLqFv1AQ70OefovjUWNmGiL7wMecs3IH3U9MAVtt9J8YlIK5oU0DGJiIiljULEsX0zDt56BUoevo0rMALps3KQ/cLb6LBoDaLOODto88RfcxP07fODNj4RkRqxtFFQecylKBs9GAdu6gH7D9+KjqNaGkMUUh58HHmfbUNcnxuDP6FWi/hrbw7+PEREKsLSRkEhu52oXjgX+648G9Z35wOyLDqSasV0L0T+x5uQNuwpaE2xIZvXdEGPkM1FRKQGfBCBAq5u7UqYJwyFu/iA6CiqZsg9BemjZyC2Vx8h8xtP7SRkXiKiSMXSRgHj2LUF5okjYPt+vegoqiaZYpA8+HGk3D0EGoNRWA5tQpKwuYmIIhFLG7WZx1qJyjlTUP3mS3wPpWCxhX2RPvY5GHI6iI4Cjd4gOgIRUURhaaNWkz0u1CyaB8tzT0GuqxEdR9UMBacjY8xMxPS4UnQUIiIKEpY2apWGb9bCPHEYnL/tFh1F1bTxiUgeOAJJdz8MSR8lOg4REQURSxu1iGvfLzBPGYH6L1aLjqJuGg0Sru+P1MemQp+WLjoNERGFAEsbNYvHWoXqeTNQ9dps+Nwu0XFUzXjmucgYNwum8y4WHYWIiEKIpY1OSPa6UbtkISwzx8NbZREdR9W0iclIfXg0kvoPBHT8q0tEpDb8l5+aZPv2C5RPKYJzzw7RUdRNkpDwz9uQ/uQz0Calik5DRESCsLRRI86De1ExfQzqVn0gOorqRXfrgYyxMxHVqbPoKEREJBhLG/3Ba69H9bznUPnys/C5nKLjqJouPQtpj01GwnW3AhLfNkdERCxtBABeL2o+fheWZ56Ax1IuOo2qaXR6JA4YiLRHx0KKTRAdh4iIFISlTSCf0wVE64VmsH3/NcyTiuDYuUVoDgJiLumF9LGzEMV3dhIRkR8sbQL5aq1AdIyQuV3Fh2B59gnUrXxfyPz0//RZOUgdPgEJ1/cXHYWIiBSMpU0g56+7oMvMDumcXlsDqufPQuWr0+Fz2EM6Nx1PYzQh5f4ipNw/HBqjSXQcIiJSOJY2gWyb1ofuXZGyjNqP34X52VHwlB8JzZzUpNjCvsgYOwv6nFzRUYiIKEzwsTSBaj9+D/B6gz6PY9smHPz35Tgy/C4WNsEM+aeh/fyPkPPqhyxsRETUIixtArmLD6Bm5ZKgje8xl6Js9GAc6NcT9q0bgzYPnZxkikHqkDHIX7EZMZdfLToOERGFId4eFazi2VGIvexqaBOSAjamz2FH1euzUfnSs5Bt9QEbl1pBo0Fc738h/clnoc/KEZ2GiIjCGFfaBHOXFqN05H2AxxOQ8epWf4h9vc+BZcZYFjbBjJ26IPft/yH7hbdZ2IiIqM1Y2hSg/vOPUfrEQMgeV6vHcOzeikP9r0TJQ7fCXXwgoPmoZbQJScgYMxN5S7+FqVt30XGIiChC8PaoQtQsfQvu4oPImjYf+py8Zn+ft8oCy8zxsC55PSQPNdAJHHux+xNPQ5ucJjoNERFFGJY2BbF9vx77+5yLxP4DkXj7YBiy2zf5tW5zGaxvvojqN1+CXF8b0pzUmLFzV2SMmwVTlwtERyEiogjF0qYwst2GqvmzULXgOZg6d4PpvAuhb18AKS4ePrsNrkP7YN+6CfYfvwNkWXRc1dOlZSD1kbFI7HcXoNWKjkNERBGMpU2pfD7Yt22Cfdsm0UnID77YnYiIQo2ljaiFoi/qifQxM2HseJboKEREpCIsbUTNpMtoh7QRk/hidyIiEoKljegkNHoDEvvfj9Rh46GNjhMdh4iIVIqljegEYgv7ImPMDOjb54uOQkREKsfSRuSHIfcUpI+eidhevUVHISIiAljaiI4nmaKRfN9wpAwqgsZgFB2HiIjoDyxtRL+LLeyL9HHPn/BQYyIiIlFY2kj1DKd0RPqYWYi99ArRUYiIiJrE0kaqpY1PROojY5Ew4H5IWr3oOERERCfE0kbqo9Eg4fr+SB/5NLSpfLE7ERGFB5Y2UhXjWechfdwsRJ97kegoRERELcLSRqqgTUxB6sOjkDRgEF/sTkREYYmljSKaRqtDQr87kVo0AbrEFNFxiIiIWo2ljSJW9AWXIWPsTESdcbboKERERG3G0kYRR5eehbTHJiPhulsBSRIdh4iIKCBY2ihiaHR6JA4YiLSh4yDFxIuOQ0REFFAsbRQRYroXImPsLBhOOUN0FCIioqBgaaOwpu9QgPQRkxDX50bRUYiIiIKKpY3C0h8vdr9/ODRGk+g4REREQcfSRmEntrAvMsbOgj4nV3QUEiRl8BNIGzq+0eeH774WDV991upxDQWnI/f99dDGJza65rVW4uCNPeA6uLdFY7ab9V/EX3tzo8/39jgF7tLiVmc9pv2CjxDT8+pGn//SJRVyQ12rxjxtYzG0KYF/W4hsb4BcXw/X3j2wb92I2mVvw/nb7jaPa8g9BQX/2xWQjH8l19XAW1sD588/wbbpK9QufxseS3mbx024vj+ypr/W6POyMQ/B+s68No2tiTIi/pqbEHN5bxjPOg+65FRIcQltGvOvaj9ZjCOP3t6q75Vi43H6VktA85zM/n90hXPPjoCNp9EbEN2tO4xdLoCxc1cYOhRAik+ENi4eUmzL91QfGfof1H783km/jqWNwoah4HRkjJmJmB5Xio5CEUibmIycV5f6LWw+jxslg29pcWGj40mmGEimGOjSMhB9UU+kDHoMNe8vRPmEYZBt9aLj+SXFJUCKS4A+uwNiC69B2tDxqJg9EZWvzgB8PtHxGonpeTWypr4CXXqW6CgRSd+uPRJvG4jEfncG5Rebk2FpI8WTTDFIvm8Ykh8YAUkfJToORSCNVod2s9+GIe9Uv9fLxz0C28avQp5LDRJuugO6zBwU33MdfF6P6DgnpYkyIm3EZEgxcbDMHCc6znHi+/ZDu1n/5VFHwaDRIPHme5D+5DOQomOFxeBPlpRLo0HCDQOQv3YPUoeMZmGjoEkfMwMxl/Tye63ylemwvrcg5JnUJObSK5Bw439Ex2iRlEGPwdipi+gYf9CmpCFzykssbEGgiTIi+8XFyJw0V2hhA1faSKmMZ56LjHGzYDrvYtFRKMIl9Lvz6Dtp/aj/YjUsM8eGPJMSyQ11bdovqDFEwVDQEYb80/xeT7zlHlgXN97j1Rbu4oNw7Njc6u+XomMRdea50KWm+7koIeHG/8AxaXjbQgZI0u0PQoqJ83tNttXDfXAfPFUVAZvP+cvOgI11jNdaBecvPwV8XACQG1p5+12jQbuZCxF35XUn/jqvF66De+G1VkK221s8jcdS1qyvY2kjRdEmJiP14dFI6j8Q0PGPJwVXdLdLkTnhBb/XnL/uOrrR2usNeS4l8pjLUPLwbW0bRKNBUv+ByBj/fKNLxjPPhWSKhmy3tW2OP7Ft/BKlI+9r0xiaKCMyn5qNhJvuaHTN1K17m8YOpNgm9vpal7wO86QRrX4oJZQc277H4XtOUo5CLOFftyPu6uv9X/R6UbtiCWo+/C/sP2yAbG8Ieh6uo5IySBISbhiAgjU7kHTHYBY2Cjp9Ti6y574Ljd7Q6JrHUo7ie66DXF8rJFvE8vlQ/dbLcO7e3viaVgttip8VLcF8TgfKJw4HZLnRNV2acjb763MLGn3mrbWifMzDYVHYlEhjiELqI/5X2t1HDuPgzb1wZNgdaPj6fyEpbGBpIyUwdumGvCVfImvaAmiTUkXHIRWQYuKQ88qH0CY3fvrL53Sg5IF+cB85LCSbGrhLDvr9XKPVhjxLc8gNdfBaKxt9rtEpJ6+/YybcxQfg87iF5IkECf+8Dfp27Rt97q214vBdfWHfujHkmbicQcLo0rOQ/vhUxP/jZm6epdCRJLSbtRBRHc9qfM3nQ+mTg4T8Y6waGg0MBR0bf+7zwVNhFpHopLRJqX5/ofSYm7cPKRTkuppGGfXZudBodWHxVK4SxVze2+/nVfNmwrX355DnAVfaSJT4f96G/FVbEH/drSxsFFJpRZMQW9jX77WKOVNQu/ydkGdSC41Wh9SHnoSh4PRG1xw7tyjyNp4Ul4DMSXMBjabRNdum9UIy+eM+tL/RZ9qEJKSPnQHJFC0kU1jTahF9Uc/Gn8tymw8/bguutFHIpQ17CikPPi46BkWgtKKJSL5naJPXNTodoi+8zO+1ulUfoGL2xCCmC2+69Exkv/B2q79fm5gCwylnQJee6fd69aJX2pDOv+gLe7Y+s0YDXVomojqe5ffWo8/rUdRRMPXr18DYpVujz5P6D0LCdbfCuXcP5IaW77uSG+rgramC65edsG34Co7d2wKUuDFjl27o8PaagI5ZMqgfvLXWFn+fPj0L2oSkRp87ft4Br7UqQOlajqWNQir5vmEsbBQ0xr+d06rvc+zcgtLH7lPkCfdKIcXEIa7PjUEZu271h6h5f2HAx9Xn5AbtdXeWZ0fB+XNwjqdoDeuil5F89xC/54hJcQkwnXNhQOaxb92I8qeGwrHjh4CM92faxGREX+D/l6pW0+tbl8XPflcAcO//tY2B2ob3pShkjGefj/ThXMkgZfF5PSgZfHPInv6i4/mcDlS+PC2sCrPrwG+oWbZIdIzjeCzlKHvyAb9PuQaS6ZwLkbvky6AVeKXQJqX4/VzkKhtY2iiUMsY/x6M8SHE0Wh2S7x0mOoZqaaKMyH1vnd+X3iuVIe9U5H+8GfqcPNFRjlP7yWIUD7ox6A9IaHR6tJv+GqJO7RTUecRq4pcIwU84s7RRSERfcBlMXS4QHYPIr6QBg5DQ707RMVRLE2VEu+mvNXlLSol06ZloN/MN0TEaqV+7Ent7dUTpiHtQ+8liuPb90qo9XSejiTIidcjogI+rFN6qxke84PeHO0TisgeFRPw/+omOQCpw+O5rT/iqJY1Ojw5vfQpT18Yn2WeOfx7OPTuCslcnErj2/4p9V/o5JqUFdGkZiL7kCqQ/8UyjV0Npk1IRf93NqH5jThuT/r+aD/7btjciaLXQZ+Ug/h83I/WRMY0OYjaddzGMnbvCsb31r8oKBp/TgZqlb6Fm6VttGkcTZYQh/zSk3Dcc8f+8tdH1mF7XQGOIgs/lbNM8xzR8+ali3ojgrfb/yi/DKWeEPMufcaWNQqKpJ/aIQsnncaPk0dvhrbI0uqaJMiJ77nuBX+1pao9RoI66aWqcIO9tag2PpRy1y99G2agH/F6P7en/XCxhvF64iw+i8uVnUbWg8au3ACA2jG7rtpTP6YBzzw4cGX4nbBu/anRdMkUj6oyzhWQLNre5FN6a6kafR53aCbq0DCGZwNJGIaHVQpd3iugURAAAT1kJSob09/tOUX279sh+/i1otIG7CdHUrSl/x0i0hhSf0Ogzn9Oh6AcrGtav8fvfX5fRTkie5mhqBVfJmQOpqTPpdCnhc0u7Rbxe2DZ82fhzjQZJtz8oIhHA0kahoI2Jg6Rt3WPXRMFg2/AlLE2cyRZ98eVIHT4hYHP5W9UDEJAVCo1W53czuKfK/60dxfB64ZMblzbR+4VOpKlbgErOHEi+Jn4J0Ogi99/2pop60l0Pw3jmuSHPA5Y2CgWf2yU6AlEjlS8+jbo1H/m9lnLfMMRdc1NA5vGUHfH7edJt97f5SbSEf90OKSau8ZzlJW0aN9iiOnVutD8MgN/bUUph7Hy+38+VnDmQos7o7Pdz0UdgBFPNskXwlDX+uySZYpCz4CPEXPr3kGdiaaOgk+02yPU1omMQHc/nQ9nj98N9uPHrf6DRIOvpVxB1+pltnsb243d+PzedfwlyXnq/Vb+xa5NSkXzfsKPH6Phh/8H/nEqgb9cemU/N9nvNdXBvyPM0h6nLBUh96Em/15SaOWA0GsRfezPirvFzLpvXC+cvO0WkCgmf04GK2ZP8XtOlpqP9658gZ/5yxPW+AdoQ3Sbm06MUEvZd2xAT6JOuidrIW1ON4gf/jbwlX0FjNB13TYqORfaLi3HwX93bdGSCa+8eOHZvg7FTl0bXYguvQWzhNZDtNngryuExl0J2OPyOo9FqoU1Jgy4l7aQPS9SuWNLqvE3RZWaj/cJVbRsjORWGUzpCY4jye9327do2jf9XMT2ualtmjQb6zGwY8k/z++5RALB9u6714wdQTM+rkXz3owEdU2PQQ5+TD31Wjt/r9i0bArrSGIzXWB1TOrKJX9BOwvr+G4i9oi9ir/hH44saDWIv743Y318s7zGXwVtlgVxfC9nZsidqHds2wTJz3Em/jqWNQsL2xWqWNlIk5+7tKJ8wDJlTXmp0zZB3KrKmv4biQTe16WnMillPIefVD5u8LpmiIbXPh759fqvnOKb+f58E5QgKyRSNmO6FAR/3GK+1EjUftu2Iir/SpWc2+a7TQLD/8C0cO7cEbfyW0GdkB/Xn40/Fi08HdLygvMbqd1JM49d7NYsso+SRAciZ+95JD4Buy5+35h6bwtujFBI1y9+Bz+V/BYFINOvi11CzxP9BqbGFfZE6+Ik2jV+/dgUq5kxp0xjN4fx1F0pH3h/0eQJOllH6+EDIDXWikzSbt6YapY+H4X/rAKl67fkTnokYSXwOO7/0hPkAABYPSURBVA7f+0+UjR4s/KlsljYKCU/5EVS/97roGERNKhv/SJOrJqkPj0Zsrz5tGr/iuadwZOh/4Cn3/2BCW/i8HljfmYeD/XrCa/V/krtSeassKH6gH+o//1h0lGZz/vwTDt16BVyCXx4ugs/pgHnKYzBPHSk6Smj5fLC+Ox/7+5yLqnkzm3wqPNh4e5RCpmLGWMT26gtDTgfRUYga8TkdKHnw38hbvgHaxL+8LFqSkDXjDRy84ZI2bTyv/fg91K1eipjLrkJM9ysQ1elsaJNSoU1IhjYpuVnHJ8h1NfBWV8JbXQlX8QHYf/gWdauXwmMubXWuUPLWVMNbVQHHrq1o+Ppz1H2yGLLdJjpWk3xeD+RaKzxlR+D46UfUrVmO+i9WK/Lw4mCQ7TbINdVw/vwTbBu/hPX9/worLErgLj4I8zNPwDJrPKK7dYexczcYO3eFoUMBpLgEaOMTAnYGoz+aM/Y0+ML1Jd6Vc6fCMmu86BjUAlFnnI3cd/8HKbbxgaAUYTwe7DkjRnQKIqKIwdujFFLOPTtw6Lar4DaXiY5CREQUVljaKOQcu7biwD+6onbFYtFRiIiIwgZLGwnhrbLgyCO349CAq+DYvVV0HCIiIsVjaSOhbBu+xIF/XozSEffAbS4XHYeIiEixWNpIPFlGzdK3sP+KTqiYPQk+h110IiIiIsVhaSPFkO0NqJg9EfuuPAs1yxap5pF6IiKi5mBpI8VxlxajtOhuHLr9au53IyIi+h1LGymWbeNX3O9GRET0O5Y2UjbudyMiIgJY2ihccL8bERGpHUsbhZVj+90O9usJ29aNouMQERGFDEsbhSX7tk041K8n97sREZFqsLRR+PL5uN+NiIhUg6WNwh73uxERkRqwtFHEOG6/25YNouMQEREFFEsbRRz7tk049O/LUfLwbXCVHBYdh4iIKCBY2igy+XyoW/UBDvTucnS/m90mOhEREVGbsLRRRDu2320v97sREVGYY2kjVfCUlaC06G4c6HcZ97sREVFYYmkjVXFs+5773YiIKCyxtJH6/LHfrTP3uxERUdhgaSPVku027ncjIqKwwdJGqvfHfrebesD+43ei4xAREfnF0kb0O8f2zTh4c6+j+92KD4mOQ0REdByWNqI/O7bfrU8XWKaNgtdWJzoRERERwNJG5J9st6HylenYf2Vn7ncjIiJF0IkOQM0TdfqZMHXtDkPuKZBiYuFzueA+vA/2bZth37qRpSJIPOVHUFp0N6r/+yIynpwGU9dLREciIiKVYmlTMI1Oj4QbBiDpnkcQdWqnJr/OYy5F9ZsvofrNlyDX14Y0o1o4tm/GwVsLEdf7X0gb+TQMOR1ERyIiIpXh7VGFijrjbOQu/RqZU18+YWEDAF16FtKGT8Apa3ch8ZZ7Aa02ZDlVhfvdiIhIIJY2BYq9vDc6LF4HY6dzWvR92uQ0ZE6ai/xl3yH6wsuClk/t/rzfzfrufMDrFR2JiIhUgKVNYUxduyN7zrvQRse1eoyoTl3QYdEaZM95F/r2+QHNR//PU34EZaMHHz3fbfO3ouMQEVGEY2lTEG1CErKfexMaoykg48X1vgEFq7YgtWgipOjYgIxJjTl2/ICDtxai5OHb4C4+KDoOERFFKJY2BUl5aBR0mdkBHVNjNCF10GPI/3wn97sF0+/73fb3OQeWaaMgN/CBECIiCiyWNoXQJiQh6dZ7gza+Pj0TmZPmIm/JVzCdd3HQ5lG7Y/vd9l3VhfvdiIgooFjaFCLu6hsCdlv0RIyduyL33bXImrUQ+qycoM+nVsftd/v+G9FxiIgoArC0KUT0RSF82lOSkHDtLSj4bAfSRkyGFNP6hx7oxBw7fsDB267gfjciImozljaFMJx24rPYgkFjikbKwCLkr96K+GtvBjSakGdQhd/3u+3r3YX73YiIqNVY2hRCm5gqbG59Vg7azfovct9bB2PnrsJyRDqfw350vxvPdyMiolZgaVMIKSpKdASYzrsYee+vR/YLb0Pfrr3oOBHLYy49ut/txkth+/5r0XGIiChMsLQphVJuTUoS4vrciLxPtyJ1yBhoooyiE0Usx08/4tCtV6D4/n/BXXxAdBwiIlI4ljaF8CmltP1Oa4pF6pDRKPh8JxJuGKCcUhmB6teuwL7ePN+NiIhOjKVNMZRZivRZOciatgDtF30GY6cuouNErEb73Twe0ZGIiEhhWNoUQpKU/aOIueAy5C37DlnTX4MuNV10nIj1x363m3pwvxsRER1H2U1BTSRlrrQdR6tFwvX9kb9219H9bgbxD09EKu53IyKiv2JpUwifwlfa/kwbHYfUIaORt+JHxPW5UXSciFa/dgX2XXk2yicNh1xfIzoOEREJFD5NIeKF348iKv9UZL/wNtovXI2ojmeJjhOxfG4Xqt+Yg31Xcb8bEZGahV9TiFBSGD+dGdO9F3I/2oDMSXOhTU4THSdiecxlfzrfbb3oOEREFGIsbUqhDe8fhaTVI/GWe5H/2XakDCyCRm8QHSliOXZuwaFb/350v9vh/aLjEBFRiIR3U4ggSjunrbV0iclIGzEZ+St+QGyvPqLjRLT6tSuw76rO3O9GRKQSLG1KEUYPIjSHoeB05MxbhvYLVyHqtL+JjhOxju1329vrb6heOJf73YiIIlhkNYUwJvkiY6Xtr2K6FyL3443IGDMTUlyC6DgRy1tdgfKJwxS1303W+ERHICKKKCxtShFhK21/JukMSLpjMArW7UbSnQ8BWq3oSBFLSfvdfLW8ZUtEFEiR2xTCTQSXtmN0iSnIGD0DBSt/REyPK0XHiWh/vM90+mhh7zP1lJUImZeIKFJFflMIBxHyEEJzGU45A+1f/wTZry6Fvn2+6DgRy+d0oPLladj397NgXfI64PWGdH77jh9COh8RUaRjaVMCFayy+RNXeA3yP9t2dL9bbLzoOBHLYylH2RODcOCGS9Cw6auQzVv/2fKQzUVEpAbqbAsKo4G6Vtr+TNJHIemOwcj/bAcSb7mX+92CyLFrKw7fdiVKHrol6Pvd3MUH0PD1/4I6BxGR2rC0KYFKV9r+TJ+eicxJc5H3wXqYunYXHSei1a1ein1Xd4Fl2qigne9mmfUUfB53UMYmIlIrtgUlYGn7g/Gs85H77tqj+91yckXHiVg+lxOVr0w/ut9t8WsB3e9W9+ly1C5/O2DjERHRUWwLSqCyBxGaI67wGhSs2oq0EZMhRceKjhOxPBVmlD35AA5cfzFsG9u+382+bRNKi+4KSDYiIjoeS5sCaDT8MfijMUUjZWARCtbsQMINA1hug8ixexsO9b8SJYNvhvvQvlaNUb92BQ7f3geyvSHg+YiIiKVNGVhGTkiX0Q5Z0xYg7/31MJ17keg4Ea3u02XY1/scmJ95At7qimZ9j9tcjrJRD6J44I2QbfVBz0hEpFYsbUrAPW3NYuzSDbnvrUP2C29D36696DgRy+dyomreTOzt2RFlYx5C/defw1tTfdzXeKyVqF+3CqWP3Yt9hR1hfW8B4ONrq4iIgkknOgBxpa1FJAlxfW5E9OVXo3rec6h8ZRp8TofoVBFJttXD+s48WN+ZBwDQJiZDikuAXGttVOKIiCj4uMSjABqutLWY1hSL1CGjUfD5Tu53CxGvtQruw/tZ2IiIBJFkp010BmLhaDV9Vg6ypi1Ah7c+g7FTF9FxiIiIgkZyV1hEZyA+Pdpm0Rdehrxl3yFr+mvQpaaLjkNERBRwkmvXVtEZiCttgaHVIuH6/shfuwupQ8ZAY4gSnYiIiChgpPovPxWdQfU0EktbIGmj45A6ZDTyVvyIuD43io5DREQUEFLdp8sg11pF51A3rrQFRVT+qch+4W20X7gaUR3PEh2HiIioTSS5rgZVb8wRnUPduKctqGK690LuRxuQOWkutMlpouMQERG1igQAla9Mg/O33aKzqBeP/Ag6SatH4i33Iv+z7UgZWASN3iA6EhERUYtIAOBzOlAy6CZ4rJWi86iShrdHQ0aXmIy0EZORv+IHxF7eW3QcIiKiZvtjicd14Dccvu1KeMpKxCZSI660hZyh4HTkzF+O9gtXIerUTqLjEBERndRxbcH5y07sv/YC1K1cIi6RGnGlTZiY7oXI/WQTMsbMhBSXIDoOERFRkxot8XirK1AyZAAO3X41HL/uFJNKbfggglCSzoCkOwajYN1uJN35EKDVio5ERETUSJNtwfbdFzh47YUonzQccn1NaFOpDVfaFEGXmIKM0TNQsPJHxPS4UnQcIiKi45xwicfncaP6jTnYd1Vn1CxbBMhy6JKpCF8YryyGU85A+9c/QfarS6Fvny86DhEREXCy0naMx1yG0qK7ceCmHnBs2xT8VGrDlTZFiiu8BvmfbTu63y02XnQcIiJSuRYt8Ti2b8aBf1+OsnFDFHE8iM/rFR0hMLjSpliSPgpJdwxG/mc7kHjLvfxZERGRMC3/P5DXC+uiV7D/72fD+s48QGBx8tZWC5s7sLjSpnT69ExkTpqLvA+/hqlrd9FxiIhIhVq9bOC1VqJszEM4cMMlsG/+NrCpmsm1/1ch8wYa97SFD+NZ5yP33bVH97vl5IqOQ0REKtLmtuDYtRUHby1E6Yh74DaXBSZVc3g8cGz/IXTzBRP3tIWduMJrkLdyC9JGTIYUHSs6DhERqUBglnh8PtQsfQv7rzobVQueg+xxBWTYE2n4bh281RVBnyckuNIWlrTRMUgZWISCNTuQcMMAlm8iIgqqgLYFub4W5qkjcaDPeWj44tNADt1I1YLngjp+KGl4uG5Y02W0Q9a0Bch7fz1M514kOg4REUWooLQF1/5fcfje61Ay+Ga4ig8FfPz6davR8PXnAR9XGK7QRARjl27IfW8dsl94G/qsHNFxiIgowgR1iafu02XY37szKmZPgs9uC8iYnvIjKHvy/oCMpRi8PRo5JAlxfW5E3mfbkDpkDDRRRtGJiIgoQgS9LfgcdlTMnoh9fc5F3ZqP2jSW22LG4bv+AY+lPGD5FIErbRFHa4pF6pDRKPh859H9bkRERG0UsiUed/EBlDzQD4fv7AvXvl9a/P2ObZtw6KbucP4SgS+xZ2mLWPqsHGRNW4CcN1ZCn91BdBwiIgpjIb8v1/D159jf93yUTxgKj7n0pF/vKStB+VOP4uC/e8FdEvj9cUrABxEiX+ylVyB/xWbEXHqF6ChERBSmNAB8wibX6RHdvRCxPa5CVKfOkBKTAUkD2WKBY882NKxfA9u36+DzekRFDAnTORci9/2vRMegEJA9LpTce0NkPUhDREQhIbS00VGm8y5G7uIvRMegEJFrrdh/3QVwFx8UHYWIiMII78spAfe0qYoUn4iMcbNFxyAiojDD0qYAfPeo+sT26g1TlwtExyAiojDCtqAEfBBBlRL63SE6AhERhRG2BSXg3VFViu11jegIREQURljalIB72lRJl9EO2pQ00TGIiChMsLQpAPe0qZcuPUt0BCIiChNsC0rAlTbV0ugNoiMQEVGYYGlTAj6IoFpyTbXoCEREFCbYFpSAt0dVyWe38YBdIiJqNrYFJeDtUVWy/bgh4l/RRkREgcPSpgB8EEGd6j5ZLDoCERGFEbYFJeBKm+q4zWWo+egd0TGIiCiMsLQpAR9EUB3L5CL4nA7RMYiIKIywLSgBV9pUxbr4NdSuWCI6BhERhRmWNgXgnjb1qF2xGOVjh4iOQUREYUgnOgBxpU0NZI8LlS9MQeVLzwCyLDoOERGFIZY2JeCetohm2/gVyicMhfPnn0RHISKiMMbSpgS8PRqRPGUlsMwYi5pliwCfT3QcIiIKcyxtCqDh7dGI4rU1wPrmS6icOxWyrV50HCIiihAsbUrAlbaIUbd2JcwTHuXrqYiIKOBY2pSApS3sOXZtgXliEWzffy06ChERRSiWNkXg7dFw5bFWonLOFFS/+RLg9YqOQ0REEYylTQF4Tlv4kb1u1C5ZCMuMcfBWV4iOQ0REKsDSpgR8ECGsNHyzDubJw+H8ZafoKEREpCIsbUrAlbaw4Dy4FxXTx6Bu1QeioxARkQqxtCkBV9oUzWuvR/W851D5yjS+5J2IiIRhaVMADd+IoEyyjLpPl8I85TG4S4tFpyEiIpVjaVMCrrQpjuOnH1A+YTjsP34nOgoRERHA0qYMPo9bdAT6ndtchorpo1Gz9C2+eoqIiBSFpU0BvNYq0RFUz+dyoOr1Oah88WnIDXWi4xARETXC0qYArt92i46gag3frEX5hKFw7d0jOgoREVGTWNoUwHVoH9ylxdBn5YiOoiquvXtQPnE4Gr7+XHQUIiKik+Jji0rg86Huk8WiU6iGt6Ya5slF2N+3KwsbERGFDQ0A7rZWAF16Fk5Zuxsao0l0lMjl9cK65HVYZo6Ht8oiOg0REVGLaAGMFx2CALmhHvD5EHNJL9FRIpJj2yaUPHQbrO/Mg89uEx2HiIioxbjSpiAarQ7ZC5Yj9tK/i44SMdylxbA88wRqVyzhER5ERBTWWNoURoqNR84rHyD6wstERwlrPrsNlfNnoerV6ZC5skZERBGApU2BNIYopI+ciqQBgwCtVnScsFO3+kOYp46Eu+SQ6ChEREQBw9KmYKbzLkbGqGkwdukmOkpYcO7ejvJJw2Hb+JXoKERERAHH0qZ0Gg3iev8LaSOfhiGng+g0iuSxVqJyzhRY33wZPq9HdBwiIqKgYGkLE5IpGkn/eRDJgx+HNjpOdBxFkL1u1C5ZyCM8iIhIFVjawowuox1SHx6FxH53qXq/m23DlyifNBzOPTtERyEiIgoJlrYwZezcFRlPToOp6yWio4SUu7QYFTPHoWbpW6KjEBERhRRLWzj7fb9b+sip0Ofkik4TVF5bA6rnz0LlK9PgczpExyEiIgo5lrYIcGy/W8qDIyHFxIuOE1iyjLpPl8L89OM8woOIiFSNpS2CRNp+N/vOH2GeWAT75m9ERyEiIhKOpS0CGc8+/+h+t27dRUdplWNHeFS/+RLg9YqOQ0REpAgsbREstrAvMsbOCpv9brLHhZpF82B57inIdTWi4xARESkKS1uE0xhNSL5jsOL3uzV8sxbmScPh/HWX6ChERESKxNKmErr0LKQOGa24/W7O/b/BMnUE6teuFB2FiIhI0VjaVMZ41nlIHzUN0d0uFZrDa69H9bznUPnys/C5nEKzEBERhQOWNpU6ut9tJvQ5eaGdWJZR89E7sDzzBDyW8tDOTUREFMZY2lRMozcgsf/9SHt0LKTYhKDP59j2PconFcG+ZUPQ5yIiIoo0LG0EXXomUoeMQeJNdwI6XcDH95hLUTF7EqyLXwNkOeDjExERqQFLG/3BeOa5SB89DdHdegRkPNntRM3b82GZOQ5yQ11AxiQiIlIrljZqJLawLzLGzIC+fX6rx6hbuxLmicPgPrw/oNmIiIjUiqWN/GrtfjfXvl9QPrkIDV9+GtR8REREasPSRiekS01H8j1DEd/vDugSU5r8Oufu7ah6fTZql78Dn9cT0oxERERqwNJGzaLR6WHqeglMnbtCl5kDjcEAuaEern2/wLb5G7j27hEdkYiIKKL9HxsDacbwRC9ZAAAAAElFTkSuQmCC
@@ -0,0 +1,7 @@
1
+  ███▄▄ 
2
+ ▄█ ████▀▀ 
3
+ ██ █▀▀ ▄▄██
4
+ ██ █████
5
+ ██ █▄▄ ▀▀██
6
+ ▀█ █████▄ 
7
+  ▀███▀ 
@@ -0,0 +1,17 @@
1
+ # Edit format (normative)
2
+
3
+ SkillOpt overlay edits use ADD / DEL / REP operations inside a fenced `edits` block.
4
+
5
+ ```edits
6
+ ADD after "## Usage":
7
+ - New guidance line.
8
+
9
+ DEL line matching "deprecated step".
10
+
11
+ REP "old text" with "new text".
12
+ ```
13
+
14
+ Rules:
15
+ - One operation per block section.
16
+ - No frontmatter changes.
17
+ - Maximum operations enforced by edit budget.
@@ -0,0 +1,26 @@
1
+ export declare const CLI_LOCAL_MAX_OUTPUT_CHARS = 12000;
2
+ export declare const NAUS_LOCAL_RUN_TIMEOUT_MS: number;
3
+ export declare function extendedContextEnabled(): boolean;
4
+ export declare function resolveWorkspace(): string;
5
+ export declare function truncateCliOutput(text: string, max?: number): string;
6
+ export declare function denyExtendedContextMessage(): {
7
+ content: Array<{
8
+ type: "text";
9
+ text: string;
10
+ }>;
11
+ };
12
+ export declare function formatExecResult(bin: string, args: string[], cwd: string, result: {
13
+ code: number;
14
+ stdout: string;
15
+ stderr: string;
16
+ }): string;
17
+ export declare function execCapture(bin: string, args: string[], cwd: string, options?: {
18
+ signal?: AbortSignal;
19
+ timeoutMs?: number;
20
+ }): Promise<{
21
+ code: number;
22
+ stdout: string;
23
+ stderr: string;
24
+ }>;
25
+ export declare function resolvePathInWorkspace(relativePath: string, workspace: string): string;
26
+ //# sourceMappingURL=cli-local-shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-local-shared.d.ts","sourceRoot":"","sources":["../../src/extensions/cli-local-shared.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,yBAAyB,QAAiB,CAAC;AAExD,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAKzC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAA6B,GAAG,MAAM,CAGxF;AAED,wBAAgB,0BAA0B,IAAI;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAU/F;AAED,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACvD,MAAM,CAWR;AAED,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GACrD,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAsD3D;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAOtF"}
@@ -0,0 +1,97 @@
1
+ import { spawn } from "node:child_process";
2
+ import * as path from "node:path";
3
+ export const CLI_LOCAL_MAX_OUTPUT_CHARS = 12_000;
4
+ export const NAUS_LOCAL_RUN_TIMEOUT_MS = 15 * 60 * 1000;
5
+ export function extendedContextEnabled() {
6
+ return process.env.KUBBISEC_CHAT_EXTENDED_CONTEXT === "1";
7
+ }
8
+ export function resolveWorkspace() {
9
+ const fromEnv = process.env.KUBBISEC_LOCAL_WORKSPACE?.trim() ||
10
+ process.env.KUBBISEC_AI_WORKSPACE?.trim();
11
+ return fromEnv ? path.resolve(fromEnv) : process.cwd();
12
+ }
13
+ export function truncateCliOutput(text, max = CLI_LOCAL_MAX_OUTPUT_CHARS) {
14
+ if (text.length <= max)
15
+ return text;
16
+ return `${text.slice(0, max)}\n\n… (output truncated at ${max} chars)`;
17
+ }
18
+ export function denyExtendedContextMessage() {
19
+ return {
20
+ content: [
21
+ {
22
+ type: "text",
23
+ text: "Extended local CLI context is disabled. Restart with: kubbisec chat --extended-context [-w <workspace>]",
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ export function formatExecResult(bin, args, cwd, result) {
29
+ const combined = [result.stdout, result.stderr].filter(Boolean).join("\n");
30
+ return truncateCliOutput([
31
+ `command: ${bin} ${args.join(" ")}`,
32
+ `cwd: ${cwd}`,
33
+ `exit: ${result.code}`,
34
+ "",
35
+ combined.trim() || "(no output)",
36
+ ].join("\n"));
37
+ }
38
+ export function execCapture(bin, args, cwd, options) {
39
+ return new Promise((resolve, reject) => {
40
+ const child = spawn(bin, args, {
41
+ cwd,
42
+ env: process.env,
43
+ stdio: ["ignore", "pipe", "pipe"],
44
+ });
45
+ let stdout = "";
46
+ let stderr = "";
47
+ let timedOut = false;
48
+ const timer = options?.timeoutMs != null
49
+ ? setTimeout(() => {
50
+ timedOut = true;
51
+ child.kill("SIGTERM");
52
+ }, options.timeoutMs)
53
+ : undefined;
54
+ const onAbort = () => {
55
+ child.kill("SIGTERM");
56
+ };
57
+ options?.signal?.addEventListener("abort", onAbort);
58
+ child.stdout?.on("data", (c) => {
59
+ stdout += String(c);
60
+ });
61
+ child.stderr?.on("data", (c) => {
62
+ stderr += String(c);
63
+ });
64
+ child.on("error", reject);
65
+ child.on("close", (code) => {
66
+ if (timer)
67
+ clearTimeout(timer);
68
+ options?.signal?.removeEventListener("abort", onAbort);
69
+ if (options?.signal?.aborted) {
70
+ resolve({
71
+ code: 130,
72
+ stdout,
73
+ stderr: `${stderr}\n(aborted)`.trim(),
74
+ });
75
+ return;
76
+ }
77
+ if (timedOut) {
78
+ resolve({
79
+ code: 124,
80
+ stdout,
81
+ stderr: `${stderr}\n(timed out after ${options?.timeoutMs}ms)`.trim(),
82
+ });
83
+ return;
84
+ }
85
+ resolve({ code: code ?? 1, stdout, stderr });
86
+ });
87
+ });
88
+ }
89
+ export function resolvePathInWorkspace(relativePath, workspace) {
90
+ const resolved = path.resolve(workspace, relativePath);
91
+ const ws = path.resolve(workspace);
92
+ if (!resolved.startsWith(ws)) {
93
+ throw new Error("path must stay inside the workspace");
94
+ }
95
+ return resolved;
96
+ }
97
+ //# sourceMappingURL=cli-local-shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-local-shared.js","sourceRoot":"","sources":["../../src/extensions/cli-local-shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ type ExtensionApi = {
2
+ registerTool: (def: {
3
+ name: string;
4
+ label: string;
5
+ description: string;
6
+ parameters: unknown;
7
+ execute: (toolCallId: string, params: Record<string, unknown>, signal: AbortSignal) => Promise<{
8
+ content: Array<{
9
+ type: "text";
10
+ text: string;
11
+ }>;
12
+ }>;
13
+ }) => void;
14
+ };
15
+ export default function kubbisecAspmLocal(api: ExtensionApi): void;
16
+ export {};
17
+ //# sourceMappingURL=kubbisec-aspm-local.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-aspm-local.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-aspm-local.extension.ts"],"names":[],"mappings":"AAwBA,KAAK,YAAY,GAAG;IAClB,YAAY,EAAE,CAAC,GAAG,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,CACP,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC;YAAE,OAAO,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,MAAM,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC,CAAC;KAClE,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAyHjE"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Local `aspm` CLI tools — only when KUBBISEC_CHAT_EXTENDED_CONTEXT=1
3
+ */
4
+ import { Type } from "@earendil-works/pi-ai";
5
+ import { denyExtendedContextMessage, execCapture, extendedContextEnabled, formatExecResult, resolvePathInWorkspace, resolveWorkspace, } from "./cli-local-shared.js";
6
+ const ASPM_SOURCES = [
7
+ "trivy",
8
+ "sonar",
9
+ "semgrep",
10
+ "nmap",
11
+ "skipfish",
12
+ "osv",
13
+ "gitleaks",
14
+ "syft",
15
+ ];
16
+ export default function kubbisecAspmLocal(api) {
17
+ api.registerTool({
18
+ name: "aspm_local_status",
19
+ label: "ASPM CLI status",
20
+ description: "Checks if `aspm` is on PATH and shows version/help (requires kubbisec chat --extended-context).",
21
+ parameters: Type.Object({}),
22
+ async execute() {
23
+ if (!extendedContextEnabled())
24
+ return denyExtendedContextMessage();
25
+ const cwd = resolveWorkspace();
26
+ const parts = [`workspace: ${cwd}`];
27
+ try {
28
+ const which = await execCapture("which", ["aspm"], cwd);
29
+ parts.push(formatExecResult("which", ["aspm"], cwd, which));
30
+ const version = await execCapture("aspm", ["--version"], cwd);
31
+ parts.push(formatExecResult("aspm", ["--version"], cwd, version));
32
+ }
33
+ catch {
34
+ parts.push("aspm: not installed or not on PATH (npm install -g @kubbisec/aspm)");
35
+ }
36
+ return { content: [{ type: "text", text: parts.join("\n\n") }] };
37
+ },
38
+ });
39
+ api.registerTool({
40
+ name: "aspm_local_doctor",
41
+ label: "ASPM doctor",
42
+ description: "Runs `aspm doctor` (config, API, git, optional scanner binaries).",
43
+ parameters: Type.Object({}),
44
+ async execute() {
45
+ if (!extendedContextEnabled())
46
+ return denyExtendedContextMessage();
47
+ const cwd = resolveWorkspace();
48
+ try {
49
+ const result = await execCapture("aspm", ["doctor"], cwd);
50
+ return {
51
+ content: [{ type: "text", text: formatExecResult("aspm", ["doctor"], cwd, result) }],
52
+ };
53
+ }
54
+ catch (err) {
55
+ return {
56
+ content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
57
+ };
58
+ }
59
+ },
60
+ });
61
+ api.registerTool({
62
+ name: "aspm_local_scan",
63
+ label: "ASPM scan (local)",
64
+ description: "Runs `aspm scan <file> -s <source>` without uploading to the platform.",
65
+ parameters: Type.Object({
66
+ file: Type.String({ description: "Report file path relative to workspace" }),
67
+ source: Type.Union(ASPM_SOURCES.map((s) => Type.Literal(s)), { description: "Scanner source id" }),
68
+ }),
69
+ async execute(_id, params) {
70
+ if (!extendedContextEnabled())
71
+ return denyExtendedContextMessage();
72
+ const cwd = resolveWorkspace();
73
+ const filePath = resolvePathInWorkspace(String(params.file), cwd);
74
+ const source = String(params.source);
75
+ const args = ["scan", filePath, "-s", source];
76
+ try {
77
+ const result = await execCapture("aspm", args, cwd);
78
+ return {
79
+ content: [{ type: "text", text: formatExecResult("aspm", args, cwd, result) }],
80
+ };
81
+ }
82
+ catch (err) {
83
+ return {
84
+ content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
85
+ };
86
+ }
87
+ },
88
+ });
89
+ api.registerTool({
90
+ name: "aspm_local_upload",
91
+ label: "ASPM upload",
92
+ description: "Runs `aspm upload <file> -s <source> -p <projectId>` using local ~/.kubbisec config for API key.",
93
+ parameters: Type.Object({
94
+ file: Type.String({ description: "Report file path relative to workspace" }),
95
+ source: Type.Union(ASPM_SOURCES.map((s) => Type.Literal(s)), { description: "Scanner source id" }),
96
+ projectId: Type.String({
97
+ description: "KubbiSec project id (required; also KUBBISEC_CONTEXT_PROJECT_ID if omitted)",
98
+ }),
99
+ }),
100
+ async execute(_id, params) {
101
+ if (!extendedContextEnabled())
102
+ return denyExtendedContextMessage();
103
+ const cwd = resolveWorkspace();
104
+ const filePath = resolvePathInWorkspace(String(params.file), cwd);
105
+ const source = String(params.source);
106
+ const projectId = String(params.projectId).trim() ||
107
+ process.env.KUBBISEC_CONTEXT_PROJECT_ID?.trim() ||
108
+ "";
109
+ if (!projectId) {
110
+ return {
111
+ content: [
112
+ {
113
+ type: "text",
114
+ text: "projectId is required (pass explicitly or set KUBBISEC_CONTEXT_PROJECT_ID via kubbisec chat -p).",
115
+ },
116
+ ],
117
+ };
118
+ }
119
+ const args = ["upload", filePath, "-s", source, "-p", projectId];
120
+ try {
121
+ const result = await execCapture("aspm", args, cwd);
122
+ return {
123
+ content: [{ type: "text", text: formatExecResult("aspm", args, cwd, result) }],
124
+ };
125
+ }
126
+ catch (err) {
127
+ return {
128
+ content: [{ type: "text", text: err instanceof Error ? err.message : String(err) }],
129
+ };
130
+ }
131
+ },
132
+ });
133
+ }
134
+ //# sourceMappingURL=kubbisec-aspm-local.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-aspm-local.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-aspm-local.extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ type Theme = {
2
+ fg: (role: string, text: string) => string;
3
+ bold: (text: string) => string;
4
+ };
5
+ type ExtensionApi = {
6
+ on: (event: string, handler: (event: unknown, ctx: ExtensionContext) => void | Promise<void>) => void;
7
+ };
8
+ type ExtensionContext = {
9
+ hasUI: boolean;
10
+ ui: {
11
+ setHeader: (factory: ((tui: unknown, theme: Theme) => {
12
+ render: (width: number) => string[];
13
+ invalidate: () => void;
14
+ }) | undefined) => void;
15
+ setTerminalTitle?: (title: string) => void;
16
+ };
17
+ };
18
+ export default function kubbisecBrand(api: ExtensionApi): void;
19
+ export {};
20
+ //# sourceMappingURL=kubbisec-brand.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-brand.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-brand.extension.ts"],"names":[],"mappings":"AASA,KAAK,KAAK,GAAG;IACX,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CAChC,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;CACvG,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,EAAE,EAAE;QACF,SAAS,EAAE,CACT,OAAO,EACH,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK;YAAE,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;YAAC,UAAU,EAAE,MAAM,IAAI,CAAA;SAAE,CAAC,GACjG,SAAS,KACV,IAAI,CAAC;QACV,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;KAC5C,CAAC;CACH,CAAC;AAwDF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAiC7D"}
@@ -0,0 +1,84 @@
1
+ import * as fs from "node:fs";
2
+ import * as path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { KUBBISEC_HEADER_HINTS, KUBBISEC_HEADER_TAGLINE, KUBBISEC_PRODUCT_NAME, } from "../copy/kubbisec-shell-copy.js";
5
+ const BRAND_WORDMARK = "KUBBISEC";
6
+ function terminalAssetsDir() {
7
+ return path.join(path.dirname(fileURLToPath(import.meta.url)), "../../assets/terminal");
8
+ }
9
+ function readAnsiFile(name) {
10
+ const file = path.join(terminalAssetsDir(), name);
11
+ if (!fs.existsSync(file))
12
+ return null;
13
+ return fs
14
+ .readFileSync(file, "utf8")
15
+ .split("\n")
16
+ .map((l) => l.replace(/\r$/, ""))
17
+ .filter((l) => l.length > 0);
18
+ }
19
+ function stripAnsi(value) {
20
+ return value.replace(/\x1b\[[0-9;]*m/g, "");
21
+ }
22
+ function supportsInlineImages() {
23
+ const term = process.env.TERM_PROGRAM?.toLowerCase() ?? "";
24
+ if (term.includes("iterm") || term.includes("wezterm") || term.includes("ghostty"))
25
+ return true;
26
+ if (process.env.KITTY_WINDOW_ID)
27
+ return true;
28
+ if (process.env.KUBBISEC_TUI_INLINE_IMAGES === "1")
29
+ return true;
30
+ return false;
31
+ }
32
+ function loadLogotipoBanner(width, theme, version) {
33
+ const useWide = width >= 72;
34
+ const primaryName = useWide ? "logotipo-wide.ansi" : "logotipo-compact.ansi";
35
+ const fallbackName = useWide ? "logotipo-wide-fallback.ansi" : "logotipo-compact-fallback.ansi";
36
+ if (supportsInlineImages()) {
37
+ const inline = readAnsiFile(primaryName);
38
+ if (inline?.length)
39
+ return inline;
40
+ }
41
+ const fallback = readAnsiFile(fallbackName);
42
+ if (fallback?.length)
43
+ return fallback;
44
+ const mark = readAnsiFile("mark.ansi");
45
+ if (mark?.length) {
46
+ const markWidth = Math.max(...mark.map((line) => stripAnsi(line).length));
47
+ const anchor = Math.min(mark.length - 1, Math.floor(mark.length / 2));
48
+ const wordmark = `${theme.bold(theme.fg("accent", BRAND_WORDMARK))}${theme.fg("dim", ` v${version}`)}`;
49
+ return mark.map((line, index) => index === anchor ? `${line}${" ".repeat(Math.max(2, markWidth - stripAnsi(line).length))} ${wordmark}` : line);
50
+ }
51
+ return [`${theme.bold(theme.fg("accent", BRAND_WORDMARK))}${theme.fg("dim", ` v${version}`)}`];
52
+ }
53
+ export default function kubbisecBrand(api) {
54
+ const version = process.env.KUBBISEC_AI_VERSION?.trim() || "0.1.0";
55
+ api.on("session_start", async (_event, ctx) => {
56
+ if (!ctx.hasUI)
57
+ return;
58
+ ctx.ui.setHeader((_tui, theme) => {
59
+ let cachedWidth = 0;
60
+ let cachedBanner = loadLogotipoBanner(80, theme, version);
61
+ return {
62
+ render(width) {
63
+ if (width !== cachedWidth) {
64
+ cachedWidth = width;
65
+ cachedBanner = loadLogotipoBanner(width, theme, version);
66
+ }
67
+ const lines = [...cachedBanner, ""];
68
+ const rule = "─".repeat(Math.max(32, Math.min(width, 72)));
69
+ lines.push(theme.fg("dim", `${KUBBISEC_PRODUCT_NAME} · ${KUBBISEC_HEADER_TAGLINE}`));
70
+ lines.push(theme.fg("dim", rule));
71
+ lines.push(theme.fg("dim", KUBBISEC_HEADER_HINTS));
72
+ return lines;
73
+ },
74
+ invalidate() {
75
+ cachedWidth = 0;
76
+ },
77
+ };
78
+ });
79
+ const cwd = process.cwd();
80
+ const base = path.basename(cwd) || cwd;
81
+ ctx.ui.setTerminalTitle?.(`${KUBBISEC_PRODUCT_NAME} — ${base}`);
82
+ });
83
+ }
84
+ //# sourceMappingURL=kubbisec-brand.extension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-brand.extension.js","sourceRoot":"","sources":["../../src/extensions/kubbisec-brand.extension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * KubbiSec AI extension: routes OpenAI provider to org BYOK proxy (Chat Completions).
3
+ */
4
+ type ProviderModelDef = {
5
+ id: string;
6
+ name?: string;
7
+ api?: string;
8
+ reasoning?: boolean;
9
+ input?: string[];
10
+ cost?: {
11
+ input: number;
12
+ output: number;
13
+ cacheRead: number;
14
+ cacheWrite: number;
15
+ };
16
+ contextWindow?: number;
17
+ maxTokens?: number;
18
+ };
19
+ type ExtensionApi = {
20
+ registerProvider: (id: string, config: {
21
+ baseUrl?: string;
22
+ headers?: Record<string, string>;
23
+ apiKey?: string;
24
+ api?: string;
25
+ models?: ProviderModelDef[];
26
+ }) => void;
27
+ };
28
+ export default function kubbisecByokProvider(api: ExtensionApi): void;
29
+ export {};
30
+ //# sourceMappingURL=kubbisec-byok-provider.extension.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubbisec-byok-provider.extension.d.ts","sourceRoot":"","sources":["../../src/extensions/kubbisec-byok-provider.extension.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,KAAK,gBAAgB,GAAG;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAChF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,gBAAgB,EAAE,CAChB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE;QACN,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;KAC7B,KACE,IAAI,CAAC;CACX,CAAC;AAoBF,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,GAAG,EAAE,YAAY,GAAG,IAAI,CAiCpE"}