@caddis/cli 0.4.77 → 0.4.79

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.
@@ -0,0 +1 @@
1
+ @font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/atkinson-400.849ae6f0.woff2) format("woff2")}@font-face{font-family:Atkinson Hyperlegible Next;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/atkinson-700.3a9cc18a.woff2) format("woff2")}@font-face{font-family:Maple Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/maple-mono-400.071799fd.woff2) format("woff2")}@font-face{font-family:Maple Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/maple-mono-700.1e17b237.woff2) format("woff2")}:root{--caddis-blue: #0d42fc;--caddis-cyan: #00cad5;--caddis-green: #91d202;--caddis-amber: #fdad01;--caddis-orange: #fc4e23;--caddis-violet: #8730fb;--caddis-bg-dark: #282a36;--caddis-bg-light: #f8f8f2}@media(prefers-reduced-motion:no-preference){.caddis-mark-build path{opacity:0;transform-box:fill-box;transform-origin:center;animation:caddis-piece-in .64s cubic-bezier(.2,.7,.2,1) forwards}.caddis-mark-build .p-blue{--from: -60px, -60px;animation-delay:0ms}.caddis-mark-build .p-purple{--from: -60px, 60px;animation-delay:90ms}.caddis-mark-build .p-cyan{--from: 60px, -60px;animation-delay:.18s}.caddis-mark-build .p-amber{--from: -40px, 60px;animation-delay:.27s}.caddis-mark-build .p-green{--from: 0px, 70px;animation-delay:.36s}.caddis-mark-build .p-orange{--from: 60px, 40px;animation-delay:.45s}}@keyframes caddis-piece-in{0%{opacity:0;transform:translate(var(--from, 0, 0)) scale(.85)}to{opacity:1;transform:none}}:root,[data-theme=dark]{color-scheme:dark;--bg-canvas: #191a23;--bg-lane: #21222c;--bg-card: #282a36;--bg-elevated: #343746;--border-dim: #363949;--border-bright: #4b4f65;--text-main: #f8f8f2;--text-sub: #c0c4d6;--text-dim: #9ca3c4;--purple: #bd93f9;--pink: #ff79c6;--green: #50fa7b;--yellow: #f1fa8c;--red: #ff5555;--cyan: #8be9fd;--orange: #ffb86c;--tone-yellow-bg: rgba(241, 250, 140, .08);--tone-yellow-bd: rgba(241, 250, 140, .42);--tone-red-bg: rgba(255, 85, 85, .09);--tone-red-bd: rgba(255, 85, 85, .45);--tone-pink-bg: rgba(255, 121, 198, .11);--tone-pink-bd: rgba(255, 121, 198, .45);--tone-cyan-bg: rgba(139, 233, 253, .09);--tone-cyan-bd: rgba(139, 233, 253, .36);--tone-green-bg: rgba(80, 250, 123, .09);--tone-green-bd: rgba(80, 250, 123, .36);--tone-purple-bg: rgba(189, 147, 249, .12);--tone-purple-bd: rgba(189, 147, 249, .42);--focus-ring: #bd93f9;--sidebar-w: 232px}[data-theme=light]{color-scheme:light;--bg-canvas: #f2f3f8;--bg-lane: #f9f9fc;--bg-card: #ffffff;--bg-elevated: #ebedf5;--border-dim: #dcdde8;--border-bright: #bfc2d4;--text-main: #1b1c26;--text-sub: #424659;--text-dim: #60667f;--purple: #6837e8;--pink: #cf2384;--green: #128038;--yellow: #8f6100;--red: #d12121;--cyan: #096b7d;--orange: #b85000;--tone-yellow-bg: rgba(217, 155, 8, .11);--tone-yellow-bd: rgba(168, 112, 0, .42);--tone-red-bg: rgba(209, 33, 33, .07);--tone-red-bd: rgba(209, 33, 33, .38);--tone-pink-bg: rgba(207, 35, 132, .08);--tone-pink-bd: rgba(207, 35, 132, .38);--tone-cyan-bg: rgba(9, 107, 125, .08);--tone-cyan-bd: rgba(9, 107, 125, .32);--tone-green-bg: rgba(18, 128, 56, .08);--tone-green-bd: rgba(18, 128, 56, .32);--tone-purple-bg: rgba(104, 55, 232, .09);--tone-purple-bd: rgba(104, 55, 232, .35);--focus-ring: #6837e8}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{min-height:100%;width:100%;max-width:100%;background:var(--bg-canvas);color:var(--text-main);font-family:Atkinson Hyperlegible Next,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden}.mono,code{font-family:Maple Mono,ui-monospace,SFMono-Regular,Consolas,monospace;font-feature-settings:"zero" on;font-size:.92em}code.cmd{background:var(--bg-elevated);padding:1px 6px;border-radius:4px;color:var(--yellow);overflow-wrap:anywhere}button,a{font-family:inherit}button:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}@keyframes work-pulse{0%,to{opacity:1}50%{opacity:.35}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.pulse-dot{width:8px;height:8px;border-radius:50%;background:var(--cyan);display:inline-block;animation:work-pulse 2.2s ease-in-out infinite;flex-shrink:0}.app-shell{display:flex;min-height:100vh;width:100%;max-width:100%}.mobile-topbar{display:none;position:sticky;top:0;z-index:45;background:var(--bg-card);border-bottom:1px solid var(--border-dim);padding:10px 14px;align-items:center;justify-content:space-between;gap:10px}.menu-btn{display:inline-flex;align-items:center;gap:8px;background:var(--bg-elevated);border:1px solid var(--border-bright);color:var(--text-main);padding:6px 10px;border-radius:7px;font-size:14px;font-weight:600;cursor:pointer}.drawer-backdrop{display:none;position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:49}.drawer-backdrop.open{display:block}.sidebar{width:var(--sidebar-w);background:var(--bg-card);border-right:1px solid var(--border-dim);position:fixed;top:0;bottom:0;left:0;z-index:50;display:flex;flex-direction:column;justify-content:space-between;transition:transform .2s ease;overflow-x:hidden;overflow-y:auto}.sidebar-top{padding:16px 12px;display:flex;flex-direction:column;gap:18px}.brand-row{display:flex;align-items:center;padding:0 6px}.brand-logo{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;color:var(--text-main);min-width:0}.brand-mark{width:36px;height:36px;flex-shrink:0}.brand-stack{display:flex;flex-direction:column;gap:4px;min-width:0}.brand-wordmark{width:100px;height:20px}.brand-sub{font-size:12px;font-weight:400;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)}.nav-list{display:flex;flex-direction:column;gap:4px;list-style:none}.nav-section-label{font-size:13px;font-weight:600;color:var(--text-dim);padding:0 10px;margin-bottom:-10px}.nav-empty{padding:6px 10px;color:var(--text-dim);font-size:14px}.nav-link{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 10px;border-radius:8px;color:var(--text-sub);text-decoration:none;font-weight:500;font-size:15px;transition:background .12s ease,color .12s ease;min-width:0}.nav-link:hover{background:var(--bg-elevated);color:var(--text-main)}.nav-link.active{background:var(--tone-purple-bg);color:var(--purple);font-weight:700}.nav-link-left{display:flex;align-items:center;gap:10px;min-width:0}.nav-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.soon{font-size:11.5px;color:var(--text-dim);border:1px solid var(--border-dim);border-radius:99px;padding:0 7px}.inbox-badge{display:inline-flex;align-items:center;justify-content:center;padding:1px 8px;border-radius:99px;font-size:12px;font-weight:700;background:linear-gradient(135deg,var(--yellow),var(--red));color:#191a23;flex-shrink:0}.repo-dot{width:9px;height:9px;margin:0 4.5px;border-radius:50%;flex-shrink:0}.repo-dot.attention{background:var(--yellow);box-shadow:0 0 0 2px var(--tone-yellow-bg)}.repo-dot.blocked{background:var(--red);box-shadow:0 0 0 2px var(--tone-red-bg)}.repo-dot.ok{background:var(--green)}.repo-dot.idle{background:var(--text-dim)}.sidebar-footer{padding:14px 12px;border-top:1px solid var(--border-dim);display:flex;flex-direction:column;gap:12px;background:var(--bg-lane)}.footer-meta{font-size:13px;color:var(--text-sub);display:flex;flex-direction:column;gap:8px}.updated-line{display:flex;align-items:center;gap:7px;color:var(--text-dim);font-size:12.5px;line-height:1.35}.spend-box{display:flex;flex-direction:column;gap:5px}.spend-row{display:flex;align-items:center;justify-content:space-between;gap:6px;font-size:13px}.meter-track{width:100%;height:6px;background:var(--bg-elevated);border-radius:99px;overflow:hidden}.meter-fill{height:100%;background:var(--purple);border-radius:99px}.meter-fill.hot{background:var(--orange)}.versions{color:var(--text-dim);font-size:11.5px;overflow-wrap:anywhere}.theme-switch{display:flex;gap:4px;background:var(--bg-elevated);border-radius:8px;padding:3px}.theme-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:5px;background:transparent;border:0;border-radius:6px;color:var(--text-sub);padding:5px 4px;font-size:12.5px;cursor:pointer}.theme-btn.active{background:var(--bg-card);color:var(--purple);font-weight:700}.main-area{flex:1;margin-left:var(--sidebar-w);min-width:0;width:100%}.page-wrap{max-width:1420px;margin:0 auto;padding:28px 28px 48px;display:flex;flex-direction:column;gap:28px;min-width:0}.page-header{display:flex;align-items:baseline;justify-content:space-between;gap:12px;flex-wrap:wrap}.page-title{font-size:22px;font-weight:700;color:var(--text-main);display:flex;align-items:center;gap:10px}.page-subtitle{font-size:14px;color:var(--text-sub)}.notice{display:flex;flex-direction:column;gap:8px;background:var(--bg-card);border:1px solid var(--border-dim);border-radius:10px;padding:18px 20px;max-width:560px}.banners{display:flex;flex-direction:column;gap:8px}.banner{display:flex;align-items:flex-start;gap:10px;border-radius:8px;padding:10px 14px;font-size:14px;border:1px solid var(--tone-yellow-bd);background:var(--tone-yellow-bg)}.banner svg{flex-shrink:0;margin-top:2px}.banner.warn svg{color:var(--yellow)}.banner.bad{border-color:var(--tone-red-bd);background:var(--tone-red-bg)}.banner.bad svg{color:var(--red)}.kpi-strip{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px}.kpi-tile{background:var(--bg-card);border:1px solid var(--border-dim);border-radius:10px;padding:13px 16px;display:flex;flex-direction:column;justify-content:space-between;gap:6px;text-decoration:none;color:var(--text-main);transition:border-color .15s ease;min-width:0}.kpi-tile:hover{border-color:var(--purple)}.kpi-tile.urgent{border-color:var(--tone-yellow-bd);background:var(--tone-yellow-bg)}.kpi-tile.danger{border-color:var(--tone-red-bd);background:var(--tone-red-bg)}.kpi-label{font-size:13.5px;color:var(--text-sub);font-weight:600;display:flex;align-items:center;gap:7px;min-width:0}.kpi-val{font-size:19px;font-weight:700;display:flex;align-items:baseline;gap:6px;flex-wrap:wrap}.kpi-sub{font-size:13px;font-weight:600}@media(max-width:1100px){.kpi-strip{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(max-width:720px){.mobile-topbar{display:flex}.app-shell{flex-direction:column}.sidebar{width:250px;transform:translate(-100%);visibility:hidden}.sidebar.drawer-open{transform:translate(0);visibility:visible}.main-area{margin-left:0}.page-wrap{padding:16px 12px 36px;gap:20px}.kpi-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}:root,[data-theme=dark]{--mk-accent: #00cad5;--mk-sel: #343746;--mk-bad: #ff7a7a;--mk-good: #91d202;--mk-warn: #fdad01;--mk-warn-bg: rgba(253, 173, 1, .1);--mk-warn-line: rgba(253, 173, 1, .45);--chip-waiting-bg: rgba(0, 202, 213, .16);--chip-waiting-fg: #5fe6ee;--chip-gate-bg: rgba(135, 48, 251, .22);--chip-gate-fg: #c9a7ff;--chip-bad-bg: rgba(255, 122, 122, .16);--chip-bad-fg: #ff9b9b;--chip-coord-bg: rgba(253, 173, 1, .16);--chip-coord-fg: #fdad01;--chip-done-bg: rgba(145, 210, 2, .16);--chip-done-fg: #a8e23a}[data-theme=light]{--mk-accent: #0d42fc;--mk-sel: #e8eefe;--mk-bad: #c0262d;--mk-good: #3d6b00;--mk-warn: #8a5a00;--mk-warn-bg: rgba(253, 173, 1, .14);--mk-warn-line: rgba(154, 101, 0, .45);--chip-waiting-bg: #dff7f8;--chip-waiting-fg: #006b72;--chip-gate-bg: #efe5ff;--chip-gate-fg: #5b1bb5;--chip-bad-bg: #fde4e4;--chip-bad-fg: #a11d24;--chip-coord-bg: #fff1cf;--chip-coord-fg: #7a5000;--chip-done-bg: #e9f6d2;--chip-done-fg: #3d6b00}.btn{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;border-radius:8px;border:1px solid var(--border-bright);background:transparent;color:var(--text-main);font-size:14px;font-weight:600;cursor:pointer}.btn:hover:not(:disabled){background:var(--bg-elevated)}.btn:disabled{opacity:.55;cursor:not-allowed}.kpi-tile .kpi-num{font-size:30px;font-weight:700;line-height:1.1}.kpi-num.accent{color:var(--mk-accent)}.kpi-num.bad{color:var(--mk-bad)}.tone-good{color:var(--mk-good)}.tone-warn{color:var(--mk-warn)}.tone-bad{color:var(--mk-bad)}.tone-muted{color:var(--text-dim)}.kpi-tile.deploy .kpi-val{font-size:15px}.mailbox{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start}.mailbox-folders{flex:1 1 180px;display:flex;flex-direction:column;gap:2px;padding:8px;border-radius:12px;background:var(--bg-lane);border:1px solid var(--border-dim)}.folder-btn,.item-btn{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:0 10px;border:0;border-radius:8px;text-align:left;background:transparent;color:var(--text-main);font-size:15px;cursor:pointer}.folder-btn span:first-of-type{flex-grow:1}.folder-btn.sel,.item-btn.sel{background:var(--mk-sel)}.folder-btn:hover,.item-btn:hover{background:var(--bg-elevated)}.mailbox-list{flex:2 1 280px;min-width:0;display:flex;flex-direction:column;gap:4px;padding:8px;border-radius:12px;background:var(--bg-lane);border:1px solid var(--border-dim)}.item-btn{align-items:flex-start;padding:10px;min-height:56px}.unread-dot{width:9px;height:9px;margin-top:6px;border-radius:50%;flex-shrink:0;background:transparent}.unread-dot.on{background:var(--mk-accent)}.item-main{display:flex;flex-direction:column;gap:3px;min-width:0}.item-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;color:var(--text-dim)}.item-title{font-weight:600;overflow-wrap:anywhere}.chip{padding:1px 8px;border-radius:99px;font-size:12px;font-weight:700}.chip-waiting{background:var(--chip-waiting-bg);color:var(--chip-waiting-fg)}.chip-owner-gate{background:var(--chip-gate-bg);color:var(--chip-gate-fg)}.chip-blocked,.chip-blocked-merge{background:var(--chip-bad-bg);color:var(--chip-bad-fg)}.chip-coordinator,.chip-hub{background:var(--chip-coord-bg);color:var(--chip-coord-fg)}.chip-resolved{background:var(--chip-done-bg);color:var(--chip-done-fg)}.list-empty{padding:24px 12px;text-align:center;color:var(--text-sub)}.mailbox-detail{flex:3 1 320px;min-width:0;display:flex;flex-direction:column;gap:14px;padding:18px;border-radius:12px;background:var(--bg-lane);border:1px solid var(--border-dim)}.mailbox-detail h2{font-size:20px;line-height:1.3;overflow-wrap:anywhere}.detail-block{display:flex;flex-direction:column;gap:4px}.detail-label{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-dim)}.detail-actions{display:flex;flex-wrap:wrap;gap:10px}.back-btn{display:none}.notify-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px;font-size:14px;color:var(--text-sub)}@media(max-width:720px){.mailbox{flex-direction:column;align-items:stretch}.mailbox.show-detail .mailbox-folders,.mailbox.show-detail .mailbox-list{display:none}.mailbox:not(.show-detail) .mailbox-detail{display:none}.mailbox-folders{flex-direction:row;flex-wrap:wrap}.folder-btn{width:auto;flex:1 1 140px}.back-btn{display:inline-flex;align-self:flex-start}}.lanes{display:flex;flex-direction:column;gap:14px}.lane{border-radius:12px;background:var(--bg-lane);border:1px solid var(--border-dim)}.lane.down .lane-body .card.grey{opacity:.55}.lane-head{display:flex;align-items:center;gap:10px;width:100%;min-height:48px;padding:0 14px;border:0;background:transparent;color:var(--text-main);font-size:15px;text-align:left;cursor:pointer;border-radius:12px}.lane-head .chev{margin-left:auto;flex-shrink:0;color:var(--text-dim)}.lane-name{font-weight:700;font-family:Maple Mono,ui-monospace,monospace;font-size:14px}.lane-summary{color:var(--text-dim);font-size:13.5px;min-width:0;overflow-wrap:anywhere}.lane-body{padding:0 14px 14px;display:flex;flex-direction:column;gap:12px}.lane-note{padding:10px 12px;border-radius:8px;background:var(--bg-elevated);border:1px solid var(--border-dim);font-size:14px}.lane.down .lane-note{background:var(--mk-warn-bg);border-color:var(--mk-warn-line)}.lane-cols{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}.lane-col{display:flex;flex-direction:column;gap:8px;min-width:0}.col-title{font-size:12.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim);font-weight:700}.card{display:flex;flex-direction:column;gap:2px;padding:9px 11px;border-radius:8px;background:var(--bg-card);border:1px solid var(--border-dim);overflow-wrap:anywhere}.card-title{font-weight:600;font-size:14px}.card-sub{font-size:13px}.col-empty{font-size:13px;color:var(--text-dim)}@media(max-width:1100px){.lane-cols{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.lane-cols{grid-template-columns:minmax(0,1fr)}.lane-head{flex-wrap:wrap;padding:10px 14px}}.first-run{border:1px dashed var(--border, var(--mk-line, #6272a4));border-radius:10px;padding:16px;margin:0 0 16px;display:grid;gap:8px;justify-items:start}.first-run h2{margin:0;font-size:1.1rem}.first-run p{margin:0;display:flex;gap:8px;align-items:center;flex-wrap:wrap}.first-run-reason{color:var(--text-dim);font-size:.85rem}.chip-stale{background:transparent;border:1px dashed currentColor;color:var(--text-dim)}.kpi-strip.stale .kpi-num,.kpi-strip.stale .kpi-val,.lanes.stale .lane-body{opacity:.55}.gh-fail{overflow-wrap:anywhere}.quota-low{color:var(--mk-warn, var(--text));font-size:.85rem;overflow-wrap:anywhere}
@@ -0,0 +1,8 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="97 80 1100 1100" role="img" aria-label="Caddis">
2
+ <path fill="#0D42FC" d="M640 98C705 150 720 215 680 275C640 340 590 375 540 420C480 470 410 520 395 605C385 700 355 790 270 855C310 780 315 700 305 640C300 540 340 460 480 340L545 285C600 235 645 180 640 98Z"/>
3
+ <path fill="#8730FB" d="M210 1025C200 950 225 890 270 855C330 810 400 750 445 670L525 720C440 830 330 930 250 985C235 998 222 1012 210 1025Z M875 622C960 690 1030 780 1028 850C1025 910 990 950 960 975L905 950C935 900 935 850 900 790C875 755 840 720 800 672C830 650 850 635 875 622Z"/>
4
+ <path fill="#00CAD5" d="M1025 182C1050 250 1030 320 985 360C940 395 880 390 820 405C750 420 690 460 668 500L592 452C650 360 760 310 880 290C950 275 990 235 1025 182Z"/>
5
+ <path fill="#FDAD01" d="M440 508C455 560 490 585 560 630C660 690 740 750 805 868C850 910 900 950 960 975C1000 990 1050 990 1085 982C1080 1030 1020 1075 950 1075C880 1075 820 1020 735 945C710 910 700 880 680 870C630 790 560 730 500 690C440 655 410 625 396 605C395 570 410 535 440 508Z"/>
6
+ <path fill="#91D202" d="M545 285C535 340 540 390 580 435C620 475 700 510 775 583C820 630 840 700 835 760C825 830 780 900 700 945C620 995 530 1020 470 1075C445 1100 435 1130 436 1163C400 1100 410 1040 470 985C520 945 600 920 680 870C730 830 755 790 745 730C740 690 700 640 640 600C560 550 480 505 457 400C455 370 470 345 480 345C500 325 525 305 545 285Z"/>
7
+ <path fill="#FC4E23" d="M1035 390C1055 440 1040 500 990 550C940 595 880 610 800 670C760 700 730 730 715 760L648 697C700 630 760 590 830 545C920 495 990 460 1035 390Z"/>
8
+ </svg>
@@ -0,0 +1,99 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 140 28" shape-rendering="crispEdges" role="img" aria-label="CADDIS">
2
+ <rect x="4" y="0" width="4" height="4" fill="#0D42FC"/>
3
+ <rect x="8" y="0" width="4" height="4" fill="#0D42FC"/>
4
+ <rect x="12" y="0" width="4" height="4" fill="#0D42FC"/>
5
+ <rect x="0" y="4" width="4" height="4" fill="#0D42FC"/>
6
+ <rect x="16" y="4" width="4" height="4" fill="#0D42FC"/>
7
+ <rect x="0" y="8" width="4" height="4" fill="#0D42FC"/>
8
+ <rect x="0" y="12" width="4" height="4" fill="#0D42FC"/>
9
+ <rect x="0" y="16" width="4" height="4" fill="#0D42FC"/>
10
+ <rect x="0" y="20" width="4" height="4" fill="#0D42FC"/>
11
+ <rect x="16" y="20" width="4" height="4" fill="#0D42FC"/>
12
+ <rect x="4" y="24" width="4" height="4" fill="#0D42FC"/>
13
+ <rect x="8" y="24" width="4" height="4" fill="#0D42FC"/>
14
+ <rect x="12" y="24" width="4" height="4" fill="#0D42FC"/>
15
+ <rect x="28" y="0" width="4" height="4" fill="#00CAD5"/>
16
+ <rect x="32" y="0" width="4" height="4" fill="#00CAD5"/>
17
+ <rect x="36" y="0" width="4" height="4" fill="#00CAD5"/>
18
+ <rect x="24" y="4" width="4" height="4" fill="#00CAD5"/>
19
+ <rect x="40" y="4" width="4" height="4" fill="#00CAD5"/>
20
+ <rect x="24" y="8" width="4" height="4" fill="#00CAD5"/>
21
+ <rect x="40" y="8" width="4" height="4" fill="#00CAD5"/>
22
+ <rect x="24" y="12" width="4" height="4" fill="#00CAD5"/>
23
+ <rect x="28" y="12" width="4" height="4" fill="#00CAD5"/>
24
+ <rect x="32" y="12" width="4" height="4" fill="#00CAD5"/>
25
+ <rect x="36" y="12" width="4" height="4" fill="#00CAD5"/>
26
+ <rect x="40" y="12" width="4" height="4" fill="#00CAD5"/>
27
+ <rect x="24" y="16" width="4" height="4" fill="#00CAD5"/>
28
+ <rect x="40" y="16" width="4" height="4" fill="#00CAD5"/>
29
+ <rect x="24" y="20" width="4" height="4" fill="#00CAD5"/>
30
+ <rect x="40" y="20" width="4" height="4" fill="#00CAD5"/>
31
+ <rect x="24" y="24" width="4" height="4" fill="#00CAD5"/>
32
+ <rect x="40" y="24" width="4" height="4" fill="#00CAD5"/>
33
+ <rect x="48" y="0" width="4" height="4" fill="#91D202"/>
34
+ <rect x="52" y="0" width="4" height="4" fill="#91D202"/>
35
+ <rect x="56" y="0" width="4" height="4" fill="#91D202"/>
36
+ <rect x="60" y="0" width="4" height="4" fill="#91D202"/>
37
+ <rect x="48" y="4" width="4" height="4" fill="#91D202"/>
38
+ <rect x="64" y="4" width="4" height="4" fill="#91D202"/>
39
+ <rect x="48" y="8" width="4" height="4" fill="#91D202"/>
40
+ <rect x="64" y="8" width="4" height="4" fill="#91D202"/>
41
+ <rect x="48" y="12" width="4" height="4" fill="#91D202"/>
42
+ <rect x="64" y="12" width="4" height="4" fill="#91D202"/>
43
+ <rect x="48" y="16" width="4" height="4" fill="#91D202"/>
44
+ <rect x="64" y="16" width="4" height="4" fill="#91D202"/>
45
+ <rect x="48" y="20" width="4" height="4" fill="#91D202"/>
46
+ <rect x="64" y="20" width="4" height="4" fill="#91D202"/>
47
+ <rect x="48" y="24" width="4" height="4" fill="#91D202"/>
48
+ <rect x="52" y="24" width="4" height="4" fill="#91D202"/>
49
+ <rect x="56" y="24" width="4" height="4" fill="#91D202"/>
50
+ <rect x="60" y="24" width="4" height="4" fill="#91D202"/>
51
+ <rect x="72" y="0" width="4" height="4" fill="#FDAD01"/>
52
+ <rect x="76" y="0" width="4" height="4" fill="#FDAD01"/>
53
+ <rect x="80" y="0" width="4" height="4" fill="#FDAD01"/>
54
+ <rect x="84" y="0" width="4" height="4" fill="#FDAD01"/>
55
+ <rect x="72" y="4" width="4" height="4" fill="#FDAD01"/>
56
+ <rect x="88" y="4" width="4" height="4" fill="#FDAD01"/>
57
+ <rect x="72" y="8" width="4" height="4" fill="#FDAD01"/>
58
+ <rect x="88" y="8" width="4" height="4" fill="#FDAD01"/>
59
+ <rect x="72" y="12" width="4" height="4" fill="#FDAD01"/>
60
+ <rect x="88" y="12" width="4" height="4" fill="#FDAD01"/>
61
+ <rect x="72" y="16" width="4" height="4" fill="#FDAD01"/>
62
+ <rect x="88" y="16" width="4" height="4" fill="#FDAD01"/>
63
+ <rect x="72" y="20" width="4" height="4" fill="#FDAD01"/>
64
+ <rect x="88" y="20" width="4" height="4" fill="#FDAD01"/>
65
+ <rect x="72" y="24" width="4" height="4" fill="#FDAD01"/>
66
+ <rect x="76" y="24" width="4" height="4" fill="#FDAD01"/>
67
+ <rect x="80" y="24" width="4" height="4" fill="#FDAD01"/>
68
+ <rect x="84" y="24" width="4" height="4" fill="#FDAD01"/>
69
+ <rect x="96" y="0" width="4" height="4" fill="#FC4E23"/>
70
+ <rect x="100" y="0" width="4" height="4" fill="#FC4E23"/>
71
+ <rect x="104" y="0" width="4" height="4" fill="#FC4E23"/>
72
+ <rect x="108" y="0" width="4" height="4" fill="#FC4E23"/>
73
+ <rect x="112" y="0" width="4" height="4" fill="#FC4E23"/>
74
+ <rect x="104" y="4" width="4" height="4" fill="#FC4E23"/>
75
+ <rect x="104" y="8" width="4" height="4" fill="#FC4E23"/>
76
+ <rect x="104" y="12" width="4" height="4" fill="#FC4E23"/>
77
+ <rect x="104" y="16" width="4" height="4" fill="#FC4E23"/>
78
+ <rect x="104" y="20" width="4" height="4" fill="#FC4E23"/>
79
+ <rect x="96" y="24" width="4" height="4" fill="#FC4E23"/>
80
+ <rect x="100" y="24" width="4" height="4" fill="#FC4E23"/>
81
+ <rect x="104" y="24" width="4" height="4" fill="#FC4E23"/>
82
+ <rect x="108" y="24" width="4" height="4" fill="#FC4E23"/>
83
+ <rect x="112" y="24" width="4" height="4" fill="#FC4E23"/>
84
+ <rect x="124" y="0" width="4" height="4" fill="#8730FB"/>
85
+ <rect x="128" y="0" width="4" height="4" fill="#8730FB"/>
86
+ <rect x="132" y="0" width="4" height="4" fill="#8730FB"/>
87
+ <rect x="136" y="0" width="4" height="4" fill="#8730FB"/>
88
+ <rect x="120" y="4" width="4" height="4" fill="#8730FB"/>
89
+ <rect x="120" y="8" width="4" height="4" fill="#8730FB"/>
90
+ <rect x="124" y="12" width="4" height="4" fill="#8730FB"/>
91
+ <rect x="128" y="12" width="4" height="4" fill="#8730FB"/>
92
+ <rect x="132" y="12" width="4" height="4" fill="#8730FB"/>
93
+ <rect x="136" y="16" width="4" height="4" fill="#8730FB"/>
94
+ <rect x="136" y="20" width="4" height="4" fill="#8730FB"/>
95
+ <rect x="120" y="24" width="4" height="4" fill="#8730FB"/>
96
+ <rect x="124" y="24" width="4" height="4" fill="#8730FB"/>
97
+ <rect x="128" y="24" width="4" height="4" fill="#8730FB"/>
98
+ <rect x="132" y="24" width="4" height="4" fill="#8730FB"/>
99
+ </svg>
@@ -0,0 +1,93 @@
1
+ Copyright 2020-2024 The Atkinson Hyperlegible Next Project Authors (https://github.com/googlefonts/atkinson-hyperlegible-next)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,93 @@
1
+ Copyright 2022 The Maple Mono Project Authors (https://github.com/subframe7536/maple-font)
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.
@@ -0,0 +1,14 @@
1
+ <!doctype html>
2
+ <html lang="en" data-theme="dark">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>caddis hub</title>
7
+ <link rel="icon" type="image/svg+xml" href="/assets/favicon-DtHQyAC1.svg" />
8
+ <script type="module" crossorigin src="/assets/index-D7fsc0PF.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-DWiypj6N.css">
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ </body>
14
+ </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@caddis/cli",
3
- "version": "0.4.77",
3
+ "version": "0.4.79",
4
4
  "description": "Install, update and diagnose the caddis dev harness across every coding agent you use (Claude Code, agy/Antigravity, and more).",
5
5
  "keywords": [
6
6
  "caddis",
@@ -45,11 +45,13 @@
45
45
  },
46
46
  "scripts": {
47
47
  "bundles": "node scripts/copy-bundles.mjs",
48
- "build": "npm run bundles && tsup",
48
+ "build": "npm run bundles && tsup && npm run build:ui",
49
+ "build:ui": "node scripts/build-ui-fonts.mjs && vite build --config ui/vite.config.ts",
49
50
  "dev": "tsup --watch",
50
51
  "test": "vitest run",
51
52
  "test:watch": "vitest",
52
- "typecheck": "tsc --noEmit",
53
+ "typecheck": "tsc --noEmit && tsc --noEmit -p ui",
54
+ "e2e": "playwright test",
53
55
  "prepack": "npm run build"
54
56
  },
55
57
  "dependencies": {
@@ -61,10 +63,18 @@
61
63
  "which": "^5.0.0"
62
64
  },
63
65
  "devDependencies": {
66
+ "@playwright/test": "^1.64.1",
64
67
  "@types/node": "^22.10.0",
68
+ "@types/react": "^18.3.31",
69
+ "@types/react-dom": "^18.3.7",
65
70
  "@types/which": "^3.0.4",
71
+ "@vitejs/plugin-react": "^4.7.0",
72
+ "lucide-react": "^1.61.0",
73
+ "react": "^18.3.1",
74
+ "react-dom": "^18.3.1",
66
75
  "tsup": "^8.5.0",
67
76
  "typescript": "^5.7.0",
77
+ "vite": "^6.4.5",
68
78
  "vitest": "^3.0.0"
69
79
  }
70
80
  }