@tsconfigdotjson/vibe-os 0.0.0-stage → 0.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +988 -2
- package/THIRD_PARTY_NOTICES.md +2467 -0
- package/bin/vibe-os.mjs +13 -0
- package/dist/web/apple-touch-icon.png +0 -0
- package/dist/web/assets/index-B77Qk8B5.js +35 -0
- package/dist/web/assets/index-B77Qk8B5.js.br +0 -0
- package/dist/web/assets/index-B77Qk8B5.js.gz +0 -0
- package/dist/web/assets/index-CH5Em-Mo.css +1 -0
- package/dist/web/assets/index-CH5Em-Mo.css.br +0 -0
- package/dist/web/assets/index-CH5Em-Mo.css.gz +0 -0
- package/dist/web/icon-192.png +0 -0
- package/dist/web/icon-512.png +0 -0
- package/dist/web/icon-app.svg +19 -0
- package/dist/web/icon-maskable-512.png +0 -0
- package/dist/web/icon-maskable.svg +13 -0
- package/dist/web/icon.svg +15 -0
- package/dist/web/index.html +36 -0
- package/dist/web/ssh.wasm +0 -0
- package/dist/web/ssh.wasm.br +0 -0
- package/dist/web/ssh.wasm.gz +0 -0
- package/dist/web/sw.js +29 -0
- package/dist/web/wasm_exec.js +575 -0
- package/dist/web/wasm_exec.js.br +0 -0
- package/dist/web/wasm_exec.js.gz +0 -0
- package/package.json +82 -4
- package/scripts/compile.ts +62 -0
- package/scripts/compress.mjs +54 -0
- package/scripts/fetch-wasm.mjs +242 -0
- package/scripts/gen-assets.ts +76 -0
- package/scripts/lib/walk.ts +18 -0
- package/scripts/notices.ts +189 -0
- package/server/acme.ts +182 -0
- package/server/api.ts +515 -0
- package/server/assets.generated.ts +53 -0
- package/server/attach.ts +524 -0
- package/server/auth.ts +194 -0
- package/server/bridge.ts +145 -0
- package/server/browser.ts +519 -0
- package/server/cli.ts +857 -0
- package/server/config.ts +385 -0
- package/server/db.ts +262 -0
- package/server/doctor.ts +977 -0
- package/server/fsx.ts +88 -0
- package/server/harness.ts +655 -0
- package/server/http.ts +53 -0
- package/server/index.ts +469 -0
- package/server/log.ts +40 -0
- package/server/main.ts +7 -0
- package/server/mcp.ts +291 -0
- package/server/preflight.ts +87 -0
- package/server/profiles.ts +238 -0
- package/server/projects.ts +721 -0
- package/server/reaper.ts +303 -0
- package/server/runtime.ts +64 -0
- package/server/session.ts +330 -0
- package/server/setup.ts +1151 -0
- package/server/ssh-ca.ts +368 -0
- package/server/static.ts +147 -0
- package/server/wallpapers.ts +248 -0
- package/server/windows.ts +237 -0
- package/shared/args.ts +91 -0
- package/shared/grid.ts +32 -0
- package/shared/wire.ts +226 -0
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:-moz-fit-content;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}:root{--void:#06080c;--text:#dfe5f0;--text-dim:#9aa3b6;--muted:#667085;--ok:#7ee081;--warn:#f2c14e;--err:#ef6b73;--accent:#56cfe1;--glass-bg:linear-gradient(160deg, #ffffff17, #ffffff09);--glass-blur:blur(26px) saturate(165%);--glass-edge:#ffffff1c;--glass-sheen:inset 0 1px 0 #ffffff24;--glass-shadow:0 16px 50px #00000073, 0 2px 8px #00000059;--popover:#10141cf0;--popover-edge:#ffffff24;--plate:#090c129e;--sans:ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Inter, sans-serif;--mono:ui-monospace, SFMono-Regular, "SF Mono", "JetBrains Mono", "Cascadia Mono", Menlo, Consolas, monospace;--menubar:34px;--sidebar:210px;--rail:190px;--radius:12px;--profile-cyan:#56cfe1;--profile-teal:#63d4c0;--profile-green:#7ee081;--profile-lime:#b6e36a;--profile-amber:#f2c14e;--profile-orange:#ff9d5c;--profile-coral:#ef6b73;--profile-rose:#f472b6;--profile-violet:#a78bfa;--profile-blue:#6d9cf5;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--void);color:var(--text);font-family:var(--sans);-webkit-font-smoothing:antialiased;font-size:13px;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;padding:0}:focus-visible{outline:2px solid var(--win-color,var(--accent));outline-offset:2px}.glass{background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-edge);box-shadow:var(--glass-shadow), var(--glass-sheen)}.glass-solid{background:linear-gradient(160deg, #ffffff12, #ffffff05), var(--popover);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--popover-edge);box-shadow:0 24px 64px #0000009e, 0 2px 10px #00000073, var(--glass-sheen)}.desktop{grid-template-rows:var(--menubar) minmax(0, 1fr);isolation:isolate;height:100%;display:grid;position:relative}.workbench{grid-template-columns:var(--sidebar) minmax(0, 1fr);min-width:0;min-height:0;display:grid;position:relative}.wallpaper{z-index:-2;background-color:var(--void);background-image:radial-gradient(120% 90% at 50% 0,#10151f 0%,#06080c 62%);background-position:50%;position:fixed;inset:0}.wallpaper-dim{z-index:-1;pointer-events:none;background:#05070a;transition:opacity .22s;position:fixed;inset:0}.menubar{box-shadow:none;z-index:40;border-width:0 0 1px;border-radius:0;align-items:center;gap:14px;min-width:0;padding:0 12px;display:flex;position:relative}.wordmark{font-family:var(--mono);letter-spacing:-.03em;flex:none;align-items:baseline;font-size:13px;font-weight:600;display:inline-flex}.caret{background:var(--accent);width:.48em;height:.92em;margin-left:2px;animation:1.15s step-end infinite blink;display:inline-block;translate:0 .08em}@keyframes blink{0%,50%{opacity:1}50.01%,to{opacity:0}}.menu-facts{white-space:nowrap;min-width:0;font-family:var(--mono);color:var(--muted);align-items:center;gap:7px;font-size:11px;display:flex;overflow:hidden}.menu-facts>span{text-overflow:ellipsis;overflow:hidden}.menu-facts .sep{color:#ffffff24}.menu-facts [data-warn]{color:var(--warn)}.menu-right{font-family:var(--mono);color:var(--muted);flex:none;margin-left:auto;font-size:11px}.surface{z-index:0;min-width:0;min-height:0;position:relative;overflow:hidden}.win{border-radius:var(--radius);background:var(--glass-bg);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--glass-edge);box-shadow:var(--glass-shadow), var(--glass-sheen);will-change:transform;grid-template-rows:30px minmax(0,1fr);transition:box-shadow .16s,border-color .16s;display:grid;position:absolute;top:0;left:0;overflow:hidden}.win[data-focused]{border-color:color-mix(in oklab, var(--win-color) 42%, var(--glass-edge));box-shadow:0 24px 70px #0000008c, 0 0 0 1px color-mix(in oklab, var(--win-color) 22%, transparent), var(--glass-sheen)}.win[data-dragging]{cursor:grabbing;transition:none}.win-bar{background:linear-gradient(#ffffff0a, #ffffff0a), var(--popover);cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;border-bottom:1px solid #ffffff12;align-items:center;gap:8px;min-width:0;padding:0 6px 0 10px;display:flex}.win-dot{background:var(--win-color);width:7px;height:7px;box-shadow:0 0 10px color-mix(in oklab, var(--win-color) 60%, transparent);border-radius:50%;flex:none}.win[data-status=loading] .win-dot{animation:1.1s ease-in-out infinite pulse}.win[data-status=error] .win-dot{background:var(--err);box-shadow:none}.win[data-status=popped] .win-dot{opacity:.5;animation:none}.win[data-status=ended] .win-dot{background:var(--muted);box-shadow:none}@keyframes pulse{0%,to{opacity:1}50%{opacity:.3}}.win-name{font-family:var(--mono);color:var(--text-dim);flex:none;font-size:11px}.win-title{min-width:0;color:var(--muted);text-align:center;white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:11px;overflow:hidden}.win-state{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);flex:none;font-size:10px}.win[data-status=ready] .win-state{color:var(--text-dim)}.win[data-status=error] .win-state{color:var(--err)}.win-buttons{opacity:0;flex:none;gap:1px;transition:opacity .12s;display:flex}.win:hover .win-buttons,.win[data-focused] .win-buttons{opacity:1}.win-buttons button{width:20px;height:20px;color:var(--muted);border-radius:5px;place-items:center;font-size:11px;transition:background-color .12s,color .12s;display:grid}.win-buttons button:hover{color:var(--text);background:#ffffff1a}.win-buttons .win-close:hover{background:color-mix(in oklab, var(--err) 70%, transparent);color:#fff}.win-menu-anchor{place-items:center;display:grid;position:relative}.win-menu{z-index:50;background:color-mix(in oklab, var(--void) 88%, transparent);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);text-align:left;cursor:default;border:1px solid #ffffff1f;border-radius:10px;flex-direction:column;gap:1px;width:208px;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 14px 34px #00000085}.win-menu button{text-align:left;border-radius:7px;align-items:center;gap:9px;width:100%;height:auto;padding:7px 8px;display:flex}.win-menu button:disabled{opacity:.4;cursor:not-allowed}.win-menu button:disabled:hover{color:var(--muted);background:0 0}.win-menu-icon{width:20px;color:var(--accent);flex:none;place-items:center;font-size:12px;display:grid}.win-menu-text{flex-direction:column;gap:1px;min-width:0;display:flex}.win-menu-label{color:var(--text);font-size:12px}.win-menu-hint{color:var(--muted);font-size:10px}.win-body{background:linear-gradient(180deg, #ffffff08, transparent 120px), var(--plate);flex-direction:column;min-width:0;min-height:0;padding:6px 4px 4px 8px;display:flex;position:relative}.win[data-dragging] .win-body{pointer-events:none}.win-term{flex:1;width:100%;min-height:0}.win-term>div,.win-term .xterm,.win-term .xterm-viewport,.win-term .xterm-screen,.win-term .xterm-scrollable-element{background-color:#0000!important}.win-term .xterm .xterm-scrollable-element>.scrollbar{display:none}.win-term .xterm .xterm-viewport{scrollbar-width:none}.win-term .xterm .xterm-viewport::-webkit-scrollbar{display:none}.grip{touch-action:none;position:absolute}.grip-n,.grip-s{cursor:ns-resize;height:6px;left:10px;right:10px}.grip-n{top:-2px}.grip-s{bottom:-2px}.grip-e,.grip-w{cursor:ew-resize;width:6px;top:10px;bottom:10px}.grip-e{right:-2px}.grip-w{left:-2px}.grip-ne,.grip-nw,.grip-se,.grip-sw{width:14px;height:14px}.grip-ne{cursor:nesw-resize;top:-2px;right:-2px}.grip-nw{cursor:nwse-resize;top:-2px;left:-2px}.grip-se{cursor:nwse-resize;bottom:-2px;right:-2px}.grip-sw{cursor:nesw-resize;bottom:-2px;left:-2px}.grid-overlay{z-index:9999;pointer-events:none;color:#56cfe133;animation:.14s fade-in;position:absolute;inset:0}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.grid-target{border-radius:var(--radius);border:1.5px dashed color-mix(in oklab, var(--accent) 75%, transparent);background:color-mix(in oklab, var(--accent) 13%, transparent);box-shadow:0 0 44px color-mix(in oklab, var(--accent) 30%, transparent), inset 0 0 30px color-mix(in oklab, var(--accent) 8%, transparent);position:absolute;top:0;left:0}.dock-wrap{z-index:50;pointer-events:none;justify-content:center;display:flex;position:fixed;bottom:14px;left:0;right:0}.dock{pointer-events:auto;border-radius:16px;align-items:center;gap:6px;max-width:min(94vw,1100px);padding:6px;display:flex;position:relative}.dock-rule{background:#ffffff1a;flex:none;align-self:stretch;width:1px;margin:2px}.dock-spawn{height:32px;color:var(--text);background:#ffffff12;border-radius:10px;flex:none;align-items:center;gap:7px;padding:0 13px 0 10px;font-size:12px;font-weight:500;transition:background-color .13s,transform .13s;display:inline-flex}.dock-spawn:hover{background:color-mix(in oklab, var(--accent) 26%, #ffffff14)}.dock-spawn:active{transform:scale(.97)}.dock-plus{color:var(--accent);font-size:15px;line-height:1}.dock-list{scrollbar-width:none;align-items:center;gap:4px;min-width:0;margin:0;padding:0;list-style:none;display:flex;overflow-x:auto}.dock-list::-webkit-scrollbar{display:none}.dock-item{height:32px;color:var(--text-dim);white-space:nowrap;border-radius:10px;align-items:center;gap:7px;padding:0 11px 0 7px;font-size:12px;transition:background-color .13s,color .13s,opacity .13s;display:inline-flex}.dock-item:hover{color:var(--text);background:#ffffff14}.dock-item[data-active]{color:var(--text);background:#ffffff1f}.dock-item[data-minimized]{opacity:.5}.dock-chip{width:18px;height:18px;font-family:var(--mono);color:#05070a;background:var(--win-color);border-radius:6px;place-items:center;font-size:10px;font-weight:600;display:grid}.dock-item[data-status=error] .dock-chip{background:var(--err)}.dock-label{font-family:var(--mono);font-size:11px}.dock-icon{width:32px;height:32px;color:var(--text-dim);border-radius:10px;flex:none;place-items:center;font-size:15px;transition:background-color .13s,color .13s;display:grid}.dock-icon:hover:not(:disabled){color:var(--text);background:#ffffff14}.dock-icon:disabled{color:#ffffff2b;cursor:default}.dock,.rail{transition:translate .19s cubic-bezier(.2,.9,.3,1) .4s}.dock{translate:0 calc(100% + 20px)}.rail{translate:100%}.dock-edge:hover~.dock-wrap .dock,.dock:hover,.dock:focus-within,.rail-edge:hover~.rail,.rail:hover,.rail:focus-within{transition-delay:0s;translate:0}.dock-edge,.rail-edge{position:fixed}.dock-edge{z-index:49;height:6px;bottom:0;left:0;right:0}.rail-edge{top:var(--menubar);z-index:29;width:6px;bottom:0;right:0}.dock-edge:after,.rail-edge:after{content:"";background:#ffffff29;border-radius:2px;transition:background-color .14s,opacity .14s;position:absolute}.dock-edge:after{width:58px;height:2px;bottom:2px;left:50%;translate:-50%}.rail-edge:after{width:2px;height:58px;top:50%;right:2px;translate:0 -50%}.dock-edge:hover:after,.rail-edge:hover:after{background:color-mix(in oklab, var(--accent) 65%, transparent)}.desktop:has(.dock:hover) .dock-edge:after{opacity:0}.desktop:has(.dock:focus-within) .dock-edge:after{opacity:0}.dock:after{content:"";z-index:-1;position:absolute;inset:0 0 -20px}.scrim{z-index:60;background:#03050873;animation:.15s fade-in;position:fixed;inset:0}.panel{right:16px;top:calc(var(--menubar) + 12px);width:min(360px,100vw - 32px);max-height:calc(100vh - var(--menubar) - 90px);scrollbar-width:thin;scrollbar-color:#ffffff24 transparent;z-index:61;border-radius:16px;padding:14px;animation:.18s cubic-bezier(.2,.9,.3,1) panel-in;position:fixed;overflow:clip auto}@keyframes panel-in{0%{opacity:0;transform:translateY(-8px)scale(.98)}to{opacity:1;transform:none}}.panel-head{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.panel-head h2{margin:0;font-size:13px;font-weight:600}.panel-head button{width:24px;height:24px;color:var(--muted);border-radius:7px;font-size:11px}.panel-head button:hover{color:var(--text);background:#ffffff1a}.panel-error{color:var(--err);background:color-mix(in oklab, var(--err) 14%, transparent);border-radius:8px;margin:0 0 10px;padding:7px 9px;font-size:11px}.thumbs{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px;display:grid}.thumb-slot{position:relative}.thumb{aspect-ratio:16/10;background-position:50%;background-size:cover;border:1px solid #ffffff1a;border-radius:9px;width:100%;transition:border-color .13s,transform .13s;display:block}.thumb:hover{transform:translateY(-1px)}.thumb[data-active]{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.thumb-none{color:var(--muted);background:#ffffff0a;place-items:center;font-size:10px;display:grid}.thumb-remove{width:18px;height:18px;color:var(--text);opacity:0;background:#05070ab3;border-radius:6px;place-items:center;font-size:9px;transition:opacity .12s;display:grid;position:absolute;top:4px;right:4px}.thumb-slot:hover .thumb-remove{opacity:1}.thumb-remove:hover{color:#fff;background:#ffffff38}.upload{width:100%;color:var(--text-dim);text-align:center;border:1px dashed #ffffff29;border-radius:10px;flex-direction:column;gap:2px;padding:10px;font-size:12px;transition:border-color .13s,color .13s;display:flex}.upload:hover:not(:disabled){border-color:var(--accent);color:var(--text)}.upload:disabled{opacity:.6;cursor:default}.upload em{color:var(--muted);font-size:10px;font-style:normal}.field{margin-top:14px}fieldset.field{border:0;min-width:0;margin-inline:0;padding:0}.field label,.field-label{color:var(--muted);justify-content:space-between;margin-bottom:6px;font-size:11px;display:flex}legend.field-label{width:100%;padding:0}.field-value{font-family:var(--mono);color:var(--text-dim)}.field input[type=range]{width:100%;accent-color:var(--accent)}.segmented{border:1px solid #ffffff1a;border-radius:8px;display:flex;overflow:hidden}.segmented button{color:var(--muted);flex:1;padding:5px 0;font-size:11px;transition:background-color .12s,color .12s}.segmented button:hover{color:var(--text);background:#ffffff0f}.segmented button[data-active]{color:#05070a;background:var(--text-dim)}.empty{text-align:center;pointer-events:none;place-content:center;justify-items:center;display:grid;position:absolute;inset:0}.empty-card{pointer-events:auto;border-radius:16px;justify-items:center;gap:11px;max-width:min(420px,80vw);padding:26px 34px 24px;animation:.22s cubic-bezier(.2,.9,.3,1) panel-in;display:grid}.empty-line{color:var(--text);margin:0;font-size:14px}.empty-hint{color:var(--text-dim);margin:0;font-size:11px}.ghost{color:var(--text);background:#ffffff0f;border:1px solid #ffffff24;border-radius:9px;justify-content:center;align-items:center;gap:7px;padding:7px 14px;font-size:12px;transition:border-color .13s,background-color .13s;display:inline-flex}.ghost:disabled{color:var(--muted);cursor:default}.spinner{border:1.5px solid #fff3;border-top-color:var(--accent);border-radius:50%;flex:none;width:12px;height:12px;animation:.72s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.empty .ghost{pointer-events:auto}.ghost:hover{border-color:var(--accent);background:color-mix(in oklab, var(--accent) 16%, transparent)}.boot{background:radial-gradient(120% 90% at 50% 0,#10151f 0%,#06080c 62%);align-content:center;justify-items:start;gap:9px;height:100%;padding:0 clamp(20px,8vw,90px);display:grid}.boot-line{font-family:var(--mono);letter-spacing:-.03em;align-items:baseline;margin:0;font-size:16px;font-weight:600;display:flex}.boot-detail{color:var(--muted);max-width:68ch;margin:0;font-size:12px}.boot-error .boot-line{color:var(--err)}@media (max-width:720px){.menu-facts,.dock-label{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.caret{opacity:1}}.picker{flex:none;position:relative}.picker-trigger{height:24px;color:var(--text);background:#ffffff0f;border:1px solid #ffffff14;border-radius:8px;align-items:center;gap:7px;max-width:340px;padding:0 8px;font-size:12px;transition:background-color .13s,border-color .13s;display:inline-flex}.picker-trigger:hover,.picker-trigger[aria-expanded=true]{border-color:color-mix(in oklab, var(--accent) 34%, transparent);background:#ffffff1c}.picker-mark{background:var(--accent);width:7px;height:7px;box-shadow:0 0 9px color-mix(in oklab, var(--accent) 65%, transparent);border-radius:2px;flex:none}.picker-label{white-space:nowrap;text-overflow:ellipsis;font-weight:500;overflow:hidden}.picker-branch{font-family:var(--mono);color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;background:#ffffff1f;border-radius:4px;max-width:12ch;padding:1px 5px;font-size:10px;overflow:hidden}.picker-caret{color:var(--muted);font-size:9px}.picker-menu{z-index:70;border-radius:14px;width:min(430px,78vw);max-height:60vh;padding:10px;animation:.16s cubic-bezier(.2,.9,.3,1) panel-in;position:absolute;top:calc(100% + 11px);left:0;overflow-y:auto}.picker-head{text-transform:uppercase;letter-spacing:.09em;color:var(--muted);border-bottom:1px solid #ffffff12;justify-content:space-between;align-items:center;margin-bottom:4px;padding:2px 4px 10px;font-size:10.5px;display:flex}.picker-refresh{letter-spacing:.04em;text-transform:none;color:var(--accent);border-radius:6px;padding:2px 7px;font-size:10.5px;transition:background-color .12s}.picker-refresh:hover:not(:disabled){background:color-mix(in oklab, var(--accent) 18%, transparent)}.picker-refresh:disabled{color:var(--muted);cursor:default}.picker-empty,.sidebar-empty{color:var(--muted);margin:0;padding:10px 9px 12px;font-size:11.5px;line-height:1.55}.picker-list{gap:2px;margin:0;padding:0;list-style:none;display:grid}.picker-list button{text-align:left;border-radius:9px;grid-template-columns:1fr auto;gap:3px 10px;width:100%;padding:9px 10px;transition:background-color .12s;display:grid}.picker-list button:hover{background:#ffffff14}.picker-list button[data-active]{background:color-mix(in oklab, var(--accent) 16%, #ffffff0f)}.picker-name{color:var(--text);font-size:12.5px}.picker-meta{font-family:var(--mono);color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;grid-column:1;font-size:10px;overflow:hidden}.picker-tag{font-family:var(--mono);color:var(--text-dim);text-overflow:ellipsis;background:#ffffff1a;border-radius:5px;grid-area:1/2/span 2;align-self:center;max-width:14ch;padding:2px 6px;font-size:10px;overflow:hidden}.sidebar{min-height:0;-webkit-backdrop-filter:var(--glass-blur);background:linear-gradient(#ffffff0d,#ffffff05);flex-direction:column;padding:10px 0 10px 8px;display:flex;box-shadow:inset -1px 0 #ffffff14}.sidebar-head{justify-content:space-between;align-items:center;padding:0 12px 9px 10px;display:flex}.sidebar-title{text-transform:uppercase;letter-spacing:.09em;color:var(--muted);font-size:10.5px}.sidebar-new{width:21px;height:21px;color:var(--accent);background:color-mix(in oklab, var(--accent) 15%, transparent);border-radius:7px;place-items:center;font-size:14px;line-height:1;transition:background-color .13s,transform .13s;display:grid}.sidebar-new:hover:not(:disabled){background:color-mix(in oklab, var(--accent) 30%, transparent)}.sidebar-new:active:not(:disabled){transform:scale(.92)}.sidebar-new:disabled{color:var(--muted);cursor:default;background:#ffffff0d}.sidebar-error{color:var(--err);background:color-mix(in oklab, var(--err) 14%, transparent);border-radius:8px;margin:0 0 8px;padding:7px 9px;font-size:11px}.sidebar-note,.sidebar-busy{color:var(--muted);background:#ffffff0d;border-radius:8px;margin:0 0 8px;padding:7px 9px;font-size:11px;line-height:1.45}.sidebar-list{scrollbar-width:thin;scrollbar-color:#ffffff24 transparent;align-content:start;gap:2px;min-height:0;margin:0;padding:0;list-style:none;display:grid;overflow:clip auto}.sidebar-list li{align-items:center;display:flex;position:relative}.ws{text-align:left;border-radius:9px 0 0 9px;flex:1;gap:1px;min-width:0;padding:8px 12px 8px 10px;transition:background-color .12s;display:grid}.ws:hover{background:#ffffff12}.ws[data-active]{background:var(--plate);box-shadow:inset 0 1px #ffffff12}.ws-name{font-family:var(--mono);color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;transition:color .12s;overflow:hidden}.ws[data-active] .ws-name{color:var(--text);font-weight:600}.ws-meta{color:var(--text-dim);font-size:10.5px}.ws[data-active] .ws-meta{color:var(--text-dim)}.ws-remove{width:18px;height:18px;color:var(--muted);opacity:0;border-radius:6px;place-items:center;font-size:9px;transition:opacity .12s,background-color .12s,color .12s;display:grid;position:absolute;right:6px}.sidebar-list li:hover .ws-remove{opacity:1}.ws-remove:hover{color:var(--text);background:#ffffff24}.ws-confirming{cursor:default;background:#ffffff12;border-radius:9px;margin:1px 0 7px;padding-right:10px;box-shadow:inset 0 0 0 1px #ffffff12}.ws-confirming .ws-meta{color:var(--text-dim);white-space:normal;line-height:1.45}.ws:hover .ws-name{color:var(--text)}.ws:hover .ws-meta{color:var(--text-dim)}.ws-actions{grid-template-columns:1fr 1fr;gap:6px;margin-top:9px;display:grid}.btn{text-align:center;border-radius:8px;padding:6px 0;font-size:11.5px;font-weight:500;transition:background-color .12s,color .12s,border-color .12s}.btn-quiet{color:var(--text-dim);background:#ffffff12;border:1px solid #ffffff17}.btn-quiet:hover{color:var(--text);background:#ffffff1f}.btn-danger{color:#06080c;background:var(--text);border:1px solid #0000;font-weight:600}.btn-danger:hover{background:#fff}.linkish{color:var(--accent);text-underline-offset:2px;text-decoration:underline}.menu-strong{font-family:var(--mono);color:var(--text-dim)}.rail{z-index:30;width:var(--rail);background:linear-gradient(180deg, #ffffff0f, #ffffff08), var(--popover);min-height:0;-webkit-backdrop-filter:var(--glass-blur);border-left:1px solid var(--popover-edge);flex-direction:column;padding:10px 8px 10px 0;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-20px 0 48px #0006}.rail-head{justify-content:space-between;align-items:center;padding:0 10px 9px 12px;display:flex}.rail-title{text-transform:uppercase;letter-spacing:.09em;color:var(--muted);font-size:10.5px}.rail-new{width:21px;height:21px;color:var(--accent);background:color-mix(in oklab, var(--accent) 15%, transparent);border-radius:7px;place-items:center;font-size:14px;line-height:1;transition:background-color .13s,transform .13s;display:grid}.rail-new:hover:not(:disabled){background:color-mix(in oklab, var(--accent) 30%, transparent)}.rail-new:active:not(:disabled){transform:scale(.92)}.rail-new:disabled{color:var(--muted);cursor:default;background:#ffffff0d}.rail-empty{color:var(--muted);margin:0;padding:0 12px;font-size:11.5px;line-height:1.5}.rail-list{scrollbar-width:thin;scrollbar-color:#ffffff24 transparent;align-content:start;gap:2px;min-height:0;margin:0;padding:0;list-style:none;display:grid;overflow:clip auto}.rail-list li{align-items:center;display:flex;position:relative}.rail-item{text-align:left;border-radius:0 9px 9px 0;flex:1;align-items:center;gap:9px;min-width:0;padding:7px 24px 7px 12px;transition:background-color .12s;display:flex}.rail-list li:has(.rail-again) .rail-item{padding-right:46px}.rail-item:disabled{cursor:default;opacity:.45}.rail-item[data-active]{background:color-mix(in oklab, var(--win-color) 15%, #ffffff0d)}.rail-chip{background:var(--win-color);opacity:.42;border-radius:3px;flex:none;width:9px;height:9px;transition:opacity .14s,box-shadow .14s}.rail-item[data-live] .rail-chip{opacity:1;box-shadow:0 0 10px color-mix(in oklab, var(--win-color) 65%, transparent)}.rail-text{min-width:0;display:grid}.rail-name{color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;font-size:12px;transition:color .12s;overflow:hidden}.rail-item[data-live] .rail-name,.rail-item[data-active] .rail-name{color:var(--text)}.rail-meta{font-size:10px;font-family:var(--mono);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;transition:color .12s;overflow:hidden}.rail-item:hover:not(:disabled){background:#ffffff0f}.rail-item:hover:not(:disabled) .rail-name{color:var(--text)}.rail-item:hover:not(:disabled) .rail-meta{color:var(--text-dim)}.rail-item:hover:not(:disabled) .rail-chip{opacity:1}.rail-edit,.rail-again{width:18px;height:18px;color:var(--muted);opacity:0;border-radius:6px;place-items:center;font-size:13px;line-height:1;transition:opacity .12s,color .12s,background-color .12s;display:grid;position:absolute}.rail-edit{right:4px}.rail-again{font-size:14px;right:26px}.rail-list li:hover .rail-edit,.rail-list li:hover .rail-again,.rail-edit:focus-visible,.rail-again:focus-visible{opacity:1}.rail-edit:hover,.rail-again:hover{color:var(--text);background:#ffffff1a}.rail-again:hover{color:var(--accent)}.win[data-profile]{border-color:color-mix(in oklab, var(--win-color) 30%, var(--glass-edge));grid-template-rows:42px minmax(0,1fr)}.win[data-profile] .win-bar{background:linear-gradient(180deg, color-mix(in oklab, var(--win-color) 26%, transparent), color-mix(in oklab, var(--win-color) 11%, transparent)), var(--popover);border-bottom-color:color-mix(in oklab, var(--win-color) 26%, transparent);padding-left:12px}.win[data-profile] .win-body:after{content:"";pointer-events:none;background:var(--win-color);opacity:.05;position:absolute;inset:0}.win[data-profile] .win-dot{width:9px;height:9px}.win-ident{min-width:0;line-height:1.15;display:grid}.win-role{letter-spacing:-.01em;color:var(--text);white-space:nowrap;text-overflow:ellipsis;font-size:13.5px;font-weight:600;overflow:hidden}.win-sub{font-family:var(--mono);color:color-mix(in oklab, var(--text-dim) 80%, var(--win-color));white-space:nowrap;text-overflow:ellipsis;font-size:10px;overflow:hidden}.band{z-index:1;background:color-mix(in oklab, var(--win-color) 11%, #090c12b8);border-bottom:1px solid color-mix(in oklab, var(--win-color) 24%, transparent);gap:7px;max-height:60%;margin:-6px -4px 6px -8px;padding:9px 10px 8px;display:grid;position:relative}.band-head{justify-content:space-between;align-items:center;display:flex}.band-label{text-transform:uppercase;letter-spacing:.09em;color:color-mix(in oklab, var(--win-color) 55%, var(--text-dim));font-size:10px}.band-x{width:18px;height:18px;color:var(--muted);border-radius:6px;place-items:center;font-size:11px;transition:color .12s,background-color .12s;display:grid}.band-x:hover{color:var(--text);background:#ffffff1a}.band-text{min-height:0;max-height:5lh;font-family:var(--mono);color:var(--text-dim);white-space:pre-wrap;overflow-wrap:anywhere;scrollbar-width:thin;scrollbar-color:#ffffff24 transparent;padding-right:4px;font-size:11.5px;line-height:1.55;overflow-y:auto}.band-text[data-more]{-webkit-mask-image:linear-gradient(#000 calc(100% - 18px),#0000);mask-image:linear-gradient(#000 calc(100% - 18px),#0000)}.blank{font:inherit;font-family:var(--mono);color:var(--text);background:color-mix(in oklab, var(--win-color) 14%, transparent);border:none;border-bottom:1px solid color-mix(in oklab, var(--win-color) 55%, transparent);border-radius:3px 3px 0 0;min-width:3ch;margin:0 1px;padding:0 4px;transition:background-color .12s,border-color .12s}.blank::placeholder{color:color-mix(in oklab, var(--win-color) 60%, var(--muted));font-style:italic}.blank:hover{background:color-mix(in oklab, var(--win-color) 20%, transparent)}.blank:focus{background:color-mix(in oklab, var(--win-color) 26%, transparent);border-bottom-color:var(--win-color);outline:none}.blank:not([data-empty]){background:#ffffff0f;border-bottom-color:#ffffff2e}.band-actions{justify-content:flex-end;align-items:center;gap:6px;display:flex}.band-actions .btn{padding:5px 12px}.band-note{min-width:0;color:var(--warn);flex:1;font-size:10.5px;line-height:1.4}.band-ok{color:var(--ok)}.band-warn{background:color-mix(in oklab, var(--warn) 12%, #090c12d1);border-bottom-color:color-mix(in oklab, var(--warn) 30%, transparent)}.band-warn .band-text{font-family:var(--sans);max-height:none;color:var(--warn)}.popped{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:10px;min-height:0;padding:16px;display:flex}.popped-line{color:var(--text-dim);margin:0;font-size:12.5px}.popped-hint{color:var(--muted);margin:0;font-size:10.5px}.handoff{text-align:left;justify-content:safe center;align-items:stretch;gap:12px;overflow-y:auto}.handoff .popped-line,.handoff .popped-hint{text-align:center}.handoff-row{align-items:stretch;gap:6px;display:flex}.handoff-code{white-space:pre;min-width:0;color:var(--text);-webkit-user-select:all;user-select:all;background:#00000052;border:1px solid #ffffff1a;border-radius:7px;flex:1;padding:7px 9px;font-size:11px;line-height:1.5;overflow-x:auto}.handoff-copy{flex:none;padding:0 10px;font-size:11px}.handoff-error{color:var(--err);text-align:center;margin:0;font-size:11px}.popout{background:var(--void);grid-template-rows:30px minmax(0,1fr);height:100%;display:grid}.popout-bar{background:linear-gradient(180deg, color-mix(in oklab, var(--win-color) 26%, transparent), color-mix(in oklab, var(--win-color) 11%, transparent)), var(--popover);border-bottom:1px solid color-mix(in oklab, var(--win-color) 26%, transparent);-webkit-user-select:none;user-select:none;align-items:center;gap:8px;padding:0 10px;display:flex}.popout-name{min-width:0;color:var(--text);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:12.5px;font-weight:600;overflow:hidden}.popout-body{background:linear-gradient(180deg, #ffffff08, transparent 120px), var(--plate);min-height:0;padding:6px 4px 4px 8px}.popout-body .win-term{height:100%}.panel-wide{width:min(440px,92vw)}.text-input{width:100%;font:inherit;color:var(--text);background:#00000047;border:1px solid #ffffff1c;border-radius:8px;padding:7px 9px;font-size:12px;transition:border-color .12s}.text-input:focus{border-color:color-mix(in oklab, var(--win-color,var(--accent)) 55%, transparent);outline:none}.text-input.mono{font-family:var(--mono);font-size:11.5px}.prompt-input{font-family:var(--mono);resize:vertical;min-height:90px;font-size:11.5px;line-height:1.55}.swatches{flex-wrap:wrap;gap:6px;display:flex}.swatch{border:2px solid #0000;border-radius:7px;width:24px;height:24px;transition:transform .12s,box-shadow .12s;box-shadow:0 0 0 1px #00000059}.swatch:hover{transform:scale(1.08)}.swatch[data-active]{box-shadow:0 0 0 2px var(--void), 0 0 0 4px currentColor;color:var(--text)}.select{appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--text-dim) 50%), linear-gradient(135deg, var(--text-dim) 50%, transparent 50%);cursor:pointer;background-position:calc(100% - 14px) 52%,calc(100% - 9px) 52%;background-repeat:no-repeat;background-size:5px 5px,5px 5px;padding-right:26px}.select[data-warn]{color:var(--warn);border-color:color-mix(in oklab, var(--warn) 45%, transparent)}.select optgroup{color:var(--muted);background:var(--popover)}.select option{color:var(--text);background:var(--popover)}.row{align-items:center;gap:10px;display:flex}.row .select{flex:1;min-width:0}.switches{grid-template-columns:1fr 1fr;gap:6px 12px;display:grid}.field .check{color:var(--text-dim);cursor:pointer;white-space:nowrap;justify-content:flex-start;align-items:center;gap:7px;margin-bottom:0;font-size:11.5px;display:flex}.field .check:hover{color:var(--text)}.field .check input{accent-color:var(--win-color,var(--accent));cursor:pointer;flex:none;width:14px;height:14px}.field .check input:disabled{cursor:default}.field .check:has(input:disabled){color:var(--muted);cursor:default}.field-warn{color:var(--warn)}.mcp-list{gap:5px;max-height:168px;margin-top:7px;display:grid;overflow-y:auto}.field .check.mcp-item{white-space:normal;gap:8px}.mcp-name{font-family:var(--mono);font-size:11px}.mcp-meta{color:var(--muted);margin-left:auto;font-size:10.5px}.mcp-stray{color:var(--muted);text-decoration:line-through}.disclosure{color:var(--muted);align-items:center;gap:6px;padding:2px 0;font-size:11px;transition:color .12s;display:inline-flex}.disclosure:hover{color:var(--text-dim)}.disclosure-caret{font-size:12px;line-height:1}.command-preview{color:var(--text-dim);overflow-wrap:anywhere;background:#00000047;border:1px solid #ffffff14;border-radius:6px;margin-top:8px;padding:6px 8px}.chips{flex-wrap:wrap;gap:5px;margin-bottom:7px;display:flex}.chip{color:var(--text-dim);background:#ffffff0f;border:1px solid #ffffff17;border-radius:7px;padding:4px 9px;font-size:11px;transition:background-color .12s,color .12s,border-color .12s}.chip:hover{color:var(--text);background:#ffffff1c}.chip[data-active]{color:var(--text);background:color-mix(in oklab, var(--accent) 24%, transparent);border-color:color-mix(in oklab, var(--accent) 42%, transparent)}.chip[data-warn][data-active]{color:var(--warn);background:color-mix(in oklab, var(--warn) 20%, transparent);border-color:color-mix(in oklab, var(--warn) 42%, transparent)}.inline-action{color:var(--accent);background:color-mix(in oklab, var(--accent) 12%, transparent);border-radius:5px;padding:1px 6px;font-size:10.5px;transition:background-color .12s}.inline-action:hover{background:color-mix(in oklab, var(--accent) 24%, transparent)}.field-hint{color:var(--muted);margin:6px 0 0;font-size:10.5px;line-height:1.5}.field-hint code{font-family:var(--mono);background:#ffffff14;border-radius:3px;padding:1px 3px;font-size:10px}.panel-actions{align-items:center;gap:6px;margin-top:14px;display:flex}.panel-actions .btn{padding:7px 16px}.panel-delete{margin-right:auto}.panel-ask{color:var(--text-dim);flex:1;font-size:11.5px}.btn-primary{color:#06080c;background:var(--text);border:1px solid #0000;margin-left:auto;font-weight:600}.btn-primary:hover:not(:disabled){background:#fff}.btn-primary:disabled{color:var(--muted);cursor:default;background:#ffffff1f}.panel-foot{margin-top:10px}@media (max-width:900px){.workbench{grid-template-columns:minmax(0,1fr)}.sidebar{display:none}}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="vibe-os">
|
|
2
|
+
<title>vibe-os</title>
|
|
3
|
+
<!--
|
|
4
|
+
The installed-app icon: the same mark as icon.svg, with no transparency.
|
|
5
|
+
Edge to edge and fully opaque on purpose.
|
|
6
|
+
|
|
7
|
+
Every platform that installs this composites it into an icon of its own —
|
|
8
|
+
macOS builds an .icns, Android masks it to whichever shape the launcher
|
|
9
|
+
likes, iOS rounds it. A transparent corner is not left transparent by any of
|
|
10
|
+
them; it is filled, and Chromium-family browsers fill it white, which reads
|
|
11
|
+
as a white border around a dark icon in the Dock.
|
|
12
|
+
|
|
13
|
+
So the rounding lives in the platform's mask rather than in the file.
|
|
14
|
+
public/icon.svg keeps its rounded corners for the favicon and the README,
|
|
15
|
+
where the page behind it is the background and transparency is correct.
|
|
16
|
+
-->
|
|
17
|
+
<rect width="512" height="512" fill="#0d1117"/>
|
|
18
|
+
<rect x="128" y="128" width="160" height="256" rx="8" fill="#56cfe1"/>
|
|
19
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="vibe-os">
|
|
2
|
+
<title>vibe-os</title>
|
|
3
|
+
<!--
|
|
4
|
+
Android masks this to a circle, squircle or rounded square of its choosing,
|
|
5
|
+
and only the middle 80% is guaranteed to survive. The plate therefore fills
|
|
6
|
+
the whole canvas with no radius, and the cursor is scaled to sit well inside
|
|
7
|
+
that safe area rather than being clipped by whichever shape a launcher picks.
|
|
8
|
+
It is centred where the others are not, because an off-centre mark loses its
|
|
9
|
+
left edge to the mask — the one place the offset cannot survive.
|
|
10
|
+
-->
|
|
11
|
+
<rect width="512" height="512" fill="#0d1117"/>
|
|
12
|
+
<rect x="186" y="163" width="110" height="176" rx="6" fill="#56cfe1"/>
|
|
13
|
+
</svg>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="vibe-os">
|
|
2
|
+
<title>vibe-os</title>
|
|
3
|
+
<!--
|
|
4
|
+
The block cursor, which is the whole idea: a terminal you can see into.
|
|
5
|
+
Same two shapes and same two colours as the inline favicon in index.html —
|
|
6
|
+
a dark plate and one cyan cell — so the tab, the installed app and the
|
|
7
|
+
README are recognisably the same thing.
|
|
8
|
+
|
|
9
|
+
The cursor sits left of centre, exactly as the favicon does. That is the
|
|
10
|
+
point of it — a cursor rests at the start of a line, not in the middle of
|
|
11
|
+
one — so it is kept rather than balanced away.
|
|
12
|
+
-->
|
|
13
|
+
<rect width="512" height="512" rx="96" fill="#0d1117"/>
|
|
14
|
+
<rect x="128" y="128" width="160" height="256" rx="8" fill="#56cfe1"/>
|
|
15
|
+
</svg>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
6
|
+
<meta name="color-scheme" content="dark" />
|
|
7
|
+
<title>vibe-os</title>
|
|
8
|
+
|
|
9
|
+
<!-- Inline so a bare VPS with no outbound network still gets an icon, and
|
|
10
|
+
so the page never fires a 404 for /favicon.ico. The same mark, at the
|
|
11
|
+
same offset, as public/icon.svg. -->
|
|
12
|
+
<link
|
|
13
|
+
rel="icon"
|
|
14
|
+
href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect width='16' height='16' rx='3' fill='%230d1117'/%3E%3Crect x='4' y='4' width='5' height='8' fill='%2356cfe1'/%3E%3C/svg%3E"
|
|
15
|
+
/>
|
|
16
|
+
<link rel="icon" type="image/svg+xml" sizes="any" href="/icon.svg" />
|
|
17
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
18
|
+
|
|
19
|
+
<!-- Generated by the server, because the theme colour is a flag: two
|
|
20
|
+
installed instances are otherwise identical in a dock. -->
|
|
21
|
+
<link rel="manifest" href="/manifest.webmanifest" />
|
|
22
|
+
|
|
23
|
+
<!-- A sensible default for a normal tab. The installed app takes its colour
|
|
24
|
+
from the manifest, and main.tsx replaces this one once the real
|
|
25
|
+
configured value arrives. -->
|
|
26
|
+
<meta name="theme-color" content="#1c2128" />
|
|
27
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
28
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
|
29
|
+
<meta name="apple-mobile-web-app-title" content="vibe-os" />
|
|
30
|
+
<script type="module" crossorigin src="/assets/index-B77Qk8B5.js"></script>
|
|
31
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CH5Em-Mo.css">
|
|
32
|
+
</head>
|
|
33
|
+
<body>
|
|
34
|
+
<div id="root"></div>
|
|
35
|
+
</body>
|
|
36
|
+
</html>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/dist/web/sw.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// A service worker that deliberately caches nothing.
|
|
2
|
+
//
|
|
3
|
+
// Chrome will not offer to install a page as an app unless a service worker
|
|
4
|
+
// with a fetch handler is controlling it. That is the only reason this file
|
|
5
|
+
// exists, and it is worth being blunt about the alternative: a caching worker
|
|
6
|
+
// in front of a terminal is a way to serve a stale bundle to a live session,
|
|
7
|
+
// and "reload harder" is not a debugging step anyone enjoys discovering.
|
|
8
|
+
//
|
|
9
|
+
// So the fetch handler is a passthrough. Every request goes to the network
|
|
10
|
+
// exactly as it would with no worker at all, and the app is installable.
|
|
11
|
+
//
|
|
12
|
+
// If offline support is ever wanted it belongs here, but it needs a real answer
|
|
13
|
+
// for the asset hashes in dist/web and for the API — not a cache-first sweep.
|
|
14
|
+
|
|
15
|
+
self.addEventListener("install", () => {
|
|
16
|
+
// Take over immediately rather than waiting for every tab to close, so an
|
|
17
|
+
// updated worker is never a version behind the page that fetched it.
|
|
18
|
+
self.skipWaiting();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
self.addEventListener("activate", (event) => {
|
|
22
|
+
event.waitUntil(self.clients.claim());
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
self.addEventListener("fetch", (event) => {
|
|
26
|
+
// Present, and doing nothing on purpose. Not calling respondWith leaves the
|
|
27
|
+
// request to the browser, which is exactly the behaviour we want.
|
|
28
|
+
void event;
|
|
29
|
+
});
|