拆出引用草稿键与 token 的取值 helper 消除嵌套三元

- apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx 新增 referenceDraftKey/referenceDraftToken,替换 readDraftFromNodes 里构造 labels 时的嵌套三元表达式
- 行为与原先一致,只是把「resource 取 id、skill 取 name、其余取 label」的规则收敛到一处
This commit is contained in:
2026-09-19 23:04:47 +08:00
parent 7a89a119d9
commit e259106267
@@ -240,6 +240,20 @@ type DraftProjection = {
content: DirectCodexUserContentPart[];
};
/** 引用在草稿文本里的稳定键:resource 用资源 id,skill 用技能名,其余用显示名。 */
function referenceDraftKey(reference: ChatReference) {
if (reference.type === 'resource') return reference.resourceId;
if (reference.type === 'skill') return reference.name;
return reference.label;
}
/** 引用回读成草稿文本时的 tokenskill 是 `$name`resource 与 runtime region 是 `@显示名`。 */
function referenceDraftToken(reference: ChatReference) {
return reference.type === 'skill'
? `$${reference.name}`
: `@${reference.label}`;
}
/** 仅供编辑器内部派生引用(重建文本草稿时用);对外只暴露 canonical content。 */
function readDraftProjectionFromNodes(): DraftProjection {
const references: ChatReference[] = [];
@@ -256,12 +270,8 @@ function readDraftFromNodes(): ChatComposerDraft {
const projection = readDraftProjectionFromNodes();
const labels = new Map(
projection.references.map((reference) => [
reference.type === 'resource'
? reference.resourceId
: reference.type === 'skill'
? reference.name
: reference.label,
reference.type === 'skill' ? `$${reference.name}` : `@${reference.label}`,
referenceDraftKey(reference),
referenceDraftToken(reference),
]),
);
const text = projection.content