feat(desktop): embed BoosAPI Desktop client as a subproject

Vendor the rebranded BoosAPI Desktop client (Tauri + Vue) into metapi as
a monorepo subdirectory under desktop/. Source only — node_modules,
dist, Cargo target and the upstream .git history are excluded.

desktop/ keeps its own independent Cargo workspace (desktop/src-tauri
with crates/*); it is not part of the backend boosapi crate, so a
`cargo check` at the metapi root still compiles only the backend. Build
the desktop app from desktop/src-tauri per desktop/README.md.

Note: app icons are still placeholder assets pending the final BoosAPI
logo. The updater signing keys live outside the repo and are not
included.
This commit is contained in:
boos
2026-06-22 11:32:57 +08:00
parent d9c78ecc73
commit e0a5f57793
2305 changed files with 449355 additions and 0 deletions
@@ -0,0 +1,5 @@
# Cloudflare Pages 重定向规则
# SPA 路由: 将所有请求重定向到 index.html
# https://developers.cloudflare.com/pages/configuration/redirects/
/* /index.html 200
Binary file not shown.

After

Width:  |  Height:  |  Size: 180 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 B

@@ -0,0 +1,9 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
<style>
path { fill: #222; }
@media (prefers-color-scheme: dark) {
path { fill: #ffffff; }
}
</style>
<path d="M27.562 26L17.17 8.928l2.366-3.888L17.828 4L16 7.005L14.17 4l-1.708 1.04l2.366 3.888L4.438 26H2v2h28v-2zM16 10.85L25.22 26H17v-8h-2v8H6.78z" />
</svg>

After

Width:  |  Height:  |  Size: 347 B

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-label="Vue Markdown Renderer">
<title>Vue Markdown Renderer</title>
<defs>
<linearGradient id="g-vue" x1="0" x2="1" y1="0" y2="1">
<stop offset="0" stop-color="#41b883" />
<stop offset="1" stop-color="#2c9f67" />
</linearGradient>
<linearGradient id="g-accent" x1="0" x2="1" y1="0" y2="1">
<stop offset="0" stop-color="#3aa8ff" />
<stop offset="1" stop-color="#5cc6ff" />
</linearGradient>
</defs>
<!-- background card -->
<rect x="6" y="6" width="116" height="116" rx="16" fill="#0b1220" />
<rect x="12" y="12" width="104" height="104" rx="12" fill="#ffffff" />
<!-- folded corner -->
<path d="M92 12 H108 V28" fill="#f6f7f8" opacity="0.9" />
<path d="M92 12 L108 28" stroke="#e6e6e6" stroke-width="1.5" fill="none" />
<!-- document area -->
<rect x="28" y="26" width="72" height="76" rx="6" fill="#ffffff" />
<!-- Vue chevron (simplified) -->
<g transform="translate(34,30)">
<path d="M10 0 L24 24 L0 24 Z" fill="url(#g-vue)" />
<path d="M10 6 L24 30 L0 30 Z" fill="#063" opacity="0.95" />
</g>
<!-- Markdown hash (#) drawn with strokes (reliable across renderers) -->
<g transform="translate(64,46)" stroke="#0b1220" stroke-width="4" stroke-linecap="round">
<line x1="-12" y1="-4" x2="12" y2="-4" />
<line x1="-12" y1="8" x2="12" y2="8" />
<line x1="-6" y1="-12" x2="-6" y2="20" />
<line x1="6" y1="-12" x2="6" y2="20" />
</g>
<!-- small code brackets to indicate renderer -->
<g transform="translate(36,84)" stroke="#0b1220" stroke-width="3" fill="none" stroke-linecap="round">
<path d="M0 0 L8 8 L0 16" />
<path d="M56 0 L48 8 L56 16" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB