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,41 @@
# Tests — helpers & midstate probes
This short guide explains how to run the mid-typing (midstate) tests and regenerate parser probe output used by the test suite.
Why
- Mid-typing tests exercise the parser's provisional states (unclosed fences, loading links, emoji shortcodes, etc.).
- When Vitest output is not fully available (CI or remote tooling), the probe script writes `test/probes/parse-output.json` so you can inspect the AST node shapes and tune tolerant assertions.
Common commands (zsh / macOS)
# Run the full test suite (CI mode):
CI=1 pnpm test
# Run only the midstate test file (verbose):
CI=1 pnpm vitest run test/markdown-midstates.test.ts --reporter verbose
# Run a named block/describe using grep (fast):
pnpm vitest -t 'additional mid-state edge cases' --reporter verbose
# Regenerate the probe JSON (writes to test/probes/parse-output.json):
node test/probes/parse-probe-write-tmp.cjs
# Inspect the probe output (first 200 lines):
# macOS / zsh
sed -n '1,200p' test/probes/parse-output.json
Test helper notes
- Use `test/utils/midstate-utils.ts` helpers instead of brittle JSON.stringify checks:
- `textIncludes(nodes, stringOrRegExp)` — safe recursive search (supports RegExp and raw strings)
- `collect(nodes, type)` — gather all nodes of a given type from an AST
- `hasLoadingLink(nodes)` and `links(nodes)` — helpers for link mid-states
- Tests are intentionally tolerant: they prefer structured nodes when present but accept plain text fallback (useful when optional plugins are disabled).
If you see a failing midstate test:
1. Run the probe script to capture the parse AST for the failing input.
2. Inspect `test/probes/parse-output.json` to see exactly which node fields exist (e.g. `text`, `raw`, `children`, `loading`).
3. Adjust assertions to use `textIncludes(...)` or `collect(...)` to be tolerant of AST variations.
If you'd like, I can:
- Sweep tests for remaining fragile patterns and replace them conservatively in small batches (I already fixed the most obvious cases).
- Add stricter/gated assertions behind an env var if you want deterministic enforcement in CI.