Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

42 lines
1.5 KiB
TypeScript

import { selectVisibleWorkbenchNodes } from "../core/selectors.ts";
import { createDerivedSnapshotGetter } from "../store/createDerivedSnapshotGetter.ts";
import type { WorkbenchController } from "../store/types.ts";
import type { WorkbenchMissionControlAdapter } from "../mission-control/types.ts";
import type { WorkbenchHostNodeData } from "./types.ts";
export function createWorkbenchHostMissionControlAdapter(input: {
controller: WorkbenchController<WorkbenchHostNodeData>;
}): WorkbenchMissionControlAdapter<WorkbenchHostNodeData> {
const getSnapshot = createDerivedSnapshotGetter<
ReturnType<WorkbenchController<WorkbenchHostNodeData>["getSnapshot"]>,
ReturnType<
WorkbenchMissionControlAdapter<WorkbenchHostNodeData>["getSnapshot"]
>
>({
deriveSnapshot(controllerSnapshot) {
return {
isLayoutLocked: controllerSnapshot.lockedLayout !== null,
layoutConstraints: controllerSnapshot.layoutConstraints,
surfaceSize: controllerSnapshot.surfaceSize,
visibleNodes: selectVisibleWorkbenchNodes(controllerSnapshot)
};
},
getSourceSnapshot() {
return input.controller.getSnapshot();
}
});
return {
applyLayoutPreset(nodeIds, preset, lock) {
input.controller.commands.applyLayoutPreset(nodeIds, preset, lock);
},
getSnapshot,
releaseLockedLayout() {
input.controller.commands.releaseLockedLayout();
},
subscribe(listener) {
return input.controller.subscribe(listener);
}
};
}