agent 전술 재설계로 늘어난 치환 변수를 편집기 툴바·칩에 노출: 제시가(input_price)·협력사 직전가(prev_partner_price)·제안가(counter_price)· 중간가(target_mid_price)·절충가(middle_price)·인하율(discount_rate). name 은 agent chat_engine.vars_for 치환 키와 일치. 라벨은 렌더 시점 조회라 기존 저장 카드도 마이그레이션 없이 한글 라벨로 표기된다. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
30 lines
1.7 KiB
TypeScript
30 lines
1.7 KiB
TypeScript
// 협상카드 스크립트에 끼워 넣는 치환 변수 카탈로그.
|
|
// negowiz 는 Zustand 전역 스토어로 들고 있었지만, 여기선 결합도를 낮추려 순수 상수로 둔다.
|
|
// 저장 포맷의 토큰은 {name} (단일 중괄호) — 백엔드/기존 카드 hint 와 동일 표기.
|
|
|
|
export type CardVariable = {
|
|
name: string; // 토큰/직렬화 키 (예: target_price)
|
|
label: string; // 칩·툴바에 보이는 한글 라벨 (예: 목표가)
|
|
};
|
|
|
|
// 라벨은 카드 작성자(구매 담당) 관점 용어. name 은 agent 치환 키(chat_engine.vars_for)와 일치해야 한다.
|
|
export const CARD_VARIABLES: CardVariable[] = [
|
|
{ name: 'target_price', label: '목표가' },
|
|
{ name: 'anchor_price', label: '앵커가' },
|
|
{ name: 'partner_name', label: '협력사명' },
|
|
{ name: 'product_name', label: '상품명' },
|
|
{ name: 'input_price', label: '제시가' }, // 협력사가 이번에 제시한 가격
|
|
{ name: 'prev_partner_price', label: '협력사 직전가' }, // 협력사의 직전 라운드 제시가
|
|
{ name: 'counter_price', label: '제안가' }, // 당사가 이번에 제시하는 카운터 가격
|
|
{ name: 'target_mid_price', label: '중간가' }, // 앵커·목표 중간값(역제안용)
|
|
{ name: 'middle_price', label: '절충가' }, // 당사 직전가·협력사 제시가의 절충값
|
|
{ name: 'discount_rate', label: '인하율' }, // 기존 공급가 대비 인하율(%)
|
|
];
|
|
|
|
const VARIABLE_NAMES = new Set(CARD_VARIABLES.map((v) => v.name));
|
|
|
|
export const isKnownVariable = (name: string): boolean => VARIABLE_NAMES.has(name);
|
|
|
|
export const variableLabel = (name: string): string =>
|
|
CARD_VARIABLES.find((v) => v.name === name)?.label ?? name;
|