docs: ai 协作文档体系重构与多 ai 仲裁结果落地

1.AI 协作文档体系重构(objections/worklines/contracts+matrix.md)

2.coord 仲裁文档(final-decisions/cross-review/final-rulings/orchestration)

3.各服务 01/02 文档补全

4.共享包初始化(shared-ts/shared-go/hooks/ui-components/ui-tokens)

5.Proto 契约补全

6.004 架构影响地图更新

7.端口分配表

8.设计规格文档
This commit is contained in:
SpecialX
2026-07-10 12:58:22 +08:00
parent 2a2a56f541
commit faaaf29f67
120 changed files with 23201 additions and 2 deletions

View File

@@ -0,0 +1,65 @@
import { useMemo } from "react";
import type { Viewport } from "./types.js";
/**
* useViewports - 视口列表查询
*
* 用途:按 scope 过滤当前用户的可用视口iam 4 层视口模型)。
* 视口数据由调用方注入apps/* 从 iam /iam/viewports 获取后传入)。
*
* iam 视口 4 层admin / teacher / student / parent
*
* @example
* const { viewports, getByType, hasViewport } = useViewports({ viewports });
* const teacherViewports = getByType("teacher");
*/
export interface UseViewportsProps {
/** 当前用户的视口列表(从 iam 获取) */
viewports: Viewport[] | null;
}
export interface UseViewportsReturn {
/** 全部视口 */
viewports: Viewport[];
/** 按类型过滤 */
getByType: (type: Viewport["type"]) => Viewport[];
/** 检查是否拥有指定类型视口 */
hasViewport: (type: Viewport["type"]) => boolean;
/** 按 ID 查找 */
getById: (id: string) => Viewport | undefined;
}
export function useViewports({
viewports: input,
}: UseViewportsProps): UseViewportsReturn {
const viewports = useMemo(() => input ?? [], [input]);
const getByType = useMemo(
() =>
(type: Viewport["type"]): Viewport[] =>
viewports.filter((v) => v.type === type),
[viewports],
);
const hasViewport = useMemo(
() =>
(type: Viewport["type"]): boolean =>
viewports.some((v) => v.type === type),
[viewports],
);
const getById = useMemo(
() =>
(id: string): Viewport | undefined =>
viewports.find((v) => v.id === id),
[viewports],
);
return {
viewports,
getByType,
hasViewport,
getById,
};
}