feat: continue tree rust family cutover

- add rust renderer/state-family scaffolds and inline compat host thinning for page tree, file tree, and picker
- route tree/filetree preflight, file projection, resource artifact, and stream delta contracts through rust plans
- preserve canonical move-order validation, file-tree search projection, and related frontend/runtime regression coverage
This commit is contained in:
lix-2026
2026-04-26 19:35:52 +08:00
parent 338bb2e20f
commit e564dfde02
93 changed files with 17492 additions and 1856 deletions
@@ -13,6 +13,8 @@ export type TreeRendererFamily = "react" | "rust_family";
export type TreeShellHostMode = "page" | "filetree" | "picker";
const RUST_RENDERER_CONTRACT = "rust_renderer_input_v1";
export type TreeShellPickerCommand = {
kind: "next" | "previous" | "home" | "end" | "pick";
seq: number;
@@ -118,8 +120,9 @@ export function TreeShellHost({
const useRustHost = rendererFamily === "rust_family";
const useIframeHost = useRustHost && Boolean(workspaceId?.trim());
const hostKind = rendererFamily === "rust_family" ? "rust_family" : "react";
const rendererContract = useRustHost ? RUST_RENDERER_CONTRACT : undefined;
const implementation = useIframeHost
? "mnote_web_iframe_proxy"
? "rust_inline_compat_host"
: fallbackImplementation ??
(rendererFamily === "rust_family" ? "react_fallback" : "react_primary");
@@ -130,6 +133,7 @@ export function TreeShellHost({
data-renderer-family={rendererFamily}
data-tree-host-kind={hostKind}
data-tree-host-implementation={implementation}
data-tree-renderer-contract={rendererContract}
data-page-tree-focused-id={mode === "page" ? (focusedDocumentId ?? "") : undefined}
className={cn(className)}
>
@@ -139,6 +143,7 @@ export function TreeShellHost({
data-tree-host-mode={mode}
data-tree-host-kind="rust_family"
data-tree-host-implementation={implementation}
data-tree-renderer-contract={rendererContract}
className="contents"
>
{useIframeHost && workspaceId ? (