kiku-agent 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +122 -0
- package/package.json +85 -0
- package/server/agent/agentCore.js +782 -0
- package/server/agent/agentState.js +140 -0
- package/server/agent/audioPlayer.js +673 -0
- package/server/agent/cli.js +1111 -0
- package/server/agent/commandRegistry.js +58 -0
- package/server/agent/commands.js +788 -0
- package/server/agent/config.js +90 -0
- package/server/agent/errors.js +9 -0
- package/server/agent/eventBus.js +103 -0
- package/server/agent/llmClient.js +200 -0
- package/server/agent/memory.js +566 -0
- package/server/agent/sanitizer.js +314 -0
- package/server/agent/session.js +239 -0
- package/server/agent/theme.js +124 -0
- package/server/agent/tools.js +1528 -0
- package/server/agent/ui.js +469 -0
- package/server/agent/webSearch.js +719 -0
- package/server/agent/youtubeAuth.js +299 -0
- package/server/mcp/claude-desktop-config.example.json +9 -0
- package/server/mcp/data/awards.js +14 -0
- package/server/mcp/data/brands.js +9 -0
- package/server/mcp/data/discography.js +36 -0
- package/server/mcp/data/gallery.js +25 -0
- package/server/mcp/data/index.js +7 -0
- package/server/mcp/data/profile.js +44 -0
- package/server/mcp/data/timeline.js +16 -0
- package/server/mcp/data/works.js +104 -0
- package/server/mcp/handler.js +159 -0
- package/server/mcp/prompts.js +143 -0
- package/server/mcp/resources.js +54 -0
- package/server/mcp/security.js +138 -0
- package/server/mcp/server.js +100 -0
- package/server/mcp/stdio.js +33 -0
- package/server/mcp/tools.js +126 -0
- package/src/data/awardsData.js +146 -0
- package/src/data/brandsData.js +249 -0
- package/src/data/discographyData.js +874 -0
- package/src/data/galleryData.js +666 -0
- package/src/data/musicVideoData.js +406 -0
- package/src/data/profileData.js +156 -0
- package/src/data/socialUpdatesData.js +381 -0
- package/src/data/timelineData.js +172 -0
- package/src/data/worksData.js +516 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { executeTool, toolsSchema } from '../agent/tools.js';
|
|
3
|
+
|
|
4
|
+
const PUBLIC_TOOL_NAMES = new Set([
|
|
5
|
+
'get_profile_and_fandom',
|
|
6
|
+
'get_quotes',
|
|
7
|
+
'search_works',
|
|
8
|
+
'get_work_detail',
|
|
9
|
+
'get_character_roles',
|
|
10
|
+
'search_discography',
|
|
11
|
+
'get_music_videos',
|
|
12
|
+
'get_media_links',
|
|
13
|
+
'get_brand_endorsements',
|
|
14
|
+
'get_career_timeline',
|
|
15
|
+
'get_awards',
|
|
16
|
+
'get_social_feed',
|
|
17
|
+
'get_gallery_photos',
|
|
18
|
+
'global_search',
|
|
19
|
+
'get_system_stats',
|
|
20
|
+
]);
|
|
21
|
+
|
|
22
|
+
const OPTIONAL_WEB_TOOL_NAMES = new Set(['web_search', 'fetch_webpage', 'fetch_api', 'fetch_json', 'web_extract']);
|
|
23
|
+
const webToolsEnabled = process.env.KIKU_MCP_ENABLE_WEB_TOOLS === 'true';
|
|
24
|
+
|
|
25
|
+
const COMPATIBILITY_ALIASES = Object.freeze({
|
|
26
|
+
get_profile: 'get_profile_and_fandom',
|
|
27
|
+
get_timeline: 'get_career_timeline',
|
|
28
|
+
search_gallery: 'get_gallery_photos',
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
function jsonPropertyToZod(schema = {}) {
|
|
32
|
+
let validator;
|
|
33
|
+
if (schema.enum?.length) validator = z.enum(schema.enum);
|
|
34
|
+
else if (schema.type === 'string') validator = z.string();
|
|
35
|
+
else if (schema.type === 'number') validator = z.number();
|
|
36
|
+
else if (schema.type === 'integer') validator = z.number().int();
|
|
37
|
+
else if (schema.type === 'boolean') validator = z.boolean();
|
|
38
|
+
else if (schema.type === 'array') validator = z.array(jsonPropertyToZod(schema.items || {}));
|
|
39
|
+
else if (schema.type === 'object') validator = z.record(z.string(), z.unknown());
|
|
40
|
+
else validator = z.unknown();
|
|
41
|
+
|
|
42
|
+
return schema.description ? validator.describe(schema.description) : validator;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function jsonSchemaToZodShape(schema = {}) {
|
|
46
|
+
const required = new Set(schema.required || []);
|
|
47
|
+
return Object.fromEntries(Object.entries(schema.properties || {}).map(([name, property]) => {
|
|
48
|
+
const validator = jsonPropertyToZod(property);
|
|
49
|
+
return [name, required.has(name) ? validator : validator.optional()];
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const sourceDefinitions = toolsSchema
|
|
54
|
+
.map(tool => tool.function)
|
|
55
|
+
.filter(tool => PUBLIC_TOOL_NAMES.has(tool.name) || (webToolsEnabled && OPTIONAL_WEB_TOOL_NAMES.has(tool.name)));
|
|
56
|
+
|
|
57
|
+
const sourceByName = new Map(sourceDefinitions.map(tool => [tool.name, tool]));
|
|
58
|
+
|
|
59
|
+
export const toolDefinitions = [
|
|
60
|
+
...sourceDefinitions.map(tool => {
|
|
61
|
+
const parameters = structuredClone(tool.parameters || { type: 'object', properties: {} });
|
|
62
|
+
if (tool.name === 'search_discography') {
|
|
63
|
+
parameters.properties.category = {
|
|
64
|
+
type: 'string',
|
|
65
|
+
enum: ['all', 'ost', 'single'],
|
|
66
|
+
description: 'Compatibility alias for the type filter',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
name: tool.name,
|
|
71
|
+
targetName: tool.name,
|
|
72
|
+
description: tool.description,
|
|
73
|
+
inputSchema: jsonSchemaToZodShape(parameters),
|
|
74
|
+
};
|
|
75
|
+
}),
|
|
76
|
+
...Object.entries(COMPATIBILITY_ALIASES).map(([alias, targetName]) => {
|
|
77
|
+
const source = sourceByName.get(targetName);
|
|
78
|
+
const parameters = structuredClone(source?.parameters || { type: 'object', properties: {} });
|
|
79
|
+
if (alias === 'search_gallery') {
|
|
80
|
+
parameters.properties.query = { type: 'string', description: 'Optional gallery keyword (compatibility parameter)' };
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
name: alias,
|
|
84
|
+
targetName,
|
|
85
|
+
description: `[Compatibility alias for ${targetName}] ${source?.description || ''}`,
|
|
86
|
+
inputSchema: jsonSchemaToZodShape(parameters),
|
|
87
|
+
};
|
|
88
|
+
}),
|
|
89
|
+
];
|
|
90
|
+
|
|
91
|
+
const definitionByName = new Map(toolDefinitions.map(tool => [tool.name, tool]));
|
|
92
|
+
|
|
93
|
+
export async function handleToolCall(toolName, args = {}, options = {}) {
|
|
94
|
+
const definition = definitionByName.get(toolName);
|
|
95
|
+
if (!definition) {
|
|
96
|
+
return {
|
|
97
|
+
status: 'error',
|
|
98
|
+
message: `Unknown MCP tool "${toolName}".`,
|
|
99
|
+
availableTools: toolDefinitions.map(tool => tool.name),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const adaptedArgs = { ...(args || {}) };
|
|
104
|
+
if (toolName === 'search_gallery') delete adaptedArgs.query;
|
|
105
|
+
if (adaptedArgs.category && definition.targetName === 'search_discography' && !adaptedArgs.type) {
|
|
106
|
+
adaptedArgs.type = adaptedArgs.category;
|
|
107
|
+
delete adaptedArgs.category;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const startedAt = Date.now();
|
|
111
|
+
const result = await executeTool(definition.targetName, adaptedArgs, options);
|
|
112
|
+
return {
|
|
113
|
+
...result,
|
|
114
|
+
_meta: {
|
|
115
|
+
protocol: 'mcp',
|
|
116
|
+
requestedTool: toolName,
|
|
117
|
+
executedTool: definition.targetName,
|
|
118
|
+
durationMs: Date.now() - startedAt,
|
|
119
|
+
cached: result?.cache?.hit === true,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function getMcpToolNames() {
|
|
125
|
+
return toolDefinitions.map(tool => tool.name);
|
|
126
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
export const awardsData = [
|
|
2
|
+
{
|
|
3
|
+
id: "award-2024-weibo",
|
|
4
|
+
year: 2024,
|
|
5
|
+
titleTh: "นักแสดงหญิงยอดนิยมแห่งปี (Popular Actress of the Year)",
|
|
6
|
+
titleCn: "年度人气女演员",
|
|
7
|
+
ceremony: "Weibo TV & Internet Video Summit 2024",
|
|
8
|
+
work: "In Blossom (ฮวาเจียนลิ่ง ในม่านเมฆ)",
|
|
9
|
+
category: "Acting"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: "award-2023-weibo-night",
|
|
13
|
+
year: 2023,
|
|
14
|
+
titleTh: "รางวัลบุคคลผู้ทรงอิทธิพลแห่งปี (Influential Figure of the Year)",
|
|
15
|
+
titleCn: "年度影响力艺人",
|
|
16
|
+
ceremony: "Weibo Night 2023",
|
|
17
|
+
work: "Beauty of Resilience (ตำนานเลือดฟีนิกซ์)",
|
|
18
|
+
category: "Honor"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
id: "award-2022-erc",
|
|
22
|
+
year: 2022,
|
|
23
|
+
titleTh: "นักร้องยอดนิยมแห่งปี (Popular Singer of the Year)",
|
|
24
|
+
titleCn: "年度最佳人气歌手",
|
|
25
|
+
ceremony: "29th ERC Chinese Top Ten Awards (第29届东方风云榜)",
|
|
26
|
+
work: "Single '0.2s' & Solo Music Portfolio",
|
|
27
|
+
category: "Music"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
id: "award-2021-tencent",
|
|
31
|
+
year: 2021,
|
|
32
|
+
titleTh: "นักแสดงนำหญิงซีรีส์ยอดเยี่ยมแห่งปี (Outstanding Actress)",
|
|
33
|
+
titleCn: "年度卓越女演员",
|
|
34
|
+
ceremony: "Tencent Video Starlight Awards 2021",
|
|
35
|
+
work: "Rebirth for You (มู่หนานจือ)",
|
|
36
|
+
category: "Acting"
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "award-2020-erc-stage",
|
|
40
|
+
year: 2020,
|
|
41
|
+
titleTh: "การแสดงบนเวทียอดเยี่ยมแห่งปี (Best Stage Interpretation)",
|
|
42
|
+
titleCn: "最佳舞台演绎",
|
|
43
|
+
ceremony: "27th ERC Chinese Top Ten Awards (第27届东方风云榜)",
|
|
44
|
+
work: "Love Emergency Report (恋爱告急)",
|
|
45
|
+
category: "Music"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
id: "award-2020-iqiyi-breakthrough",
|
|
49
|
+
year: 2020,
|
|
50
|
+
titleTh: "นักแสดงหญิงผู้ก้าวกระโดดยอดเยี่ยม (Breakthrough Actress)",
|
|
51
|
+
titleCn: "年度飞跃女演员",
|
|
52
|
+
ceremony: "iQIYI Scream Night 2020",
|
|
53
|
+
work: "The Blooms at Ruyi Pavilion & In a Class of Her Own",
|
|
54
|
+
category: "Acting"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
id: "award-2019-china-canada",
|
|
58
|
+
year: 2019,
|
|
59
|
+
titleTh: "นักแสดงนำหญิงยอดเยี่ยม (Best Actress - Web Series)",
|
|
60
|
+
titleCn: "最佳网剧女主角",
|
|
61
|
+
ceremony: "China Canada Television Festival Award 2019 (中加电视节)",
|
|
62
|
+
work: "Legend of Yunxi (ตำนานหยุนซี)",
|
|
63
|
+
category: "Acting"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: "award-2019-erc-trend",
|
|
67
|
+
year: 2019,
|
|
68
|
+
titleTh: "นักร้องผู้นำเทรนด์แห่งปี (Trend Singer Award)",
|
|
69
|
+
titleCn: "年度风尚歌手",
|
|
70
|
+
ceremony: "26th ERC Chinese Top Ten Awards (第26届东方风云榜)",
|
|
71
|
+
work: "Solo Music & OST Works",
|
|
72
|
+
category: "Music"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
id: "award-2019-iqiyi-drama-actress",
|
|
76
|
+
year: 2019,
|
|
77
|
+
titleTh: "นักแสดงหญิงยอดนิยมด้านการแสดง (Drama Actress of the Year)",
|
|
78
|
+
titleCn: "年度戏剧人气女艺人",
|
|
79
|
+
ceremony: "iQIYI Scream Night 2019",
|
|
80
|
+
work: "The Legend of White Snake (ตำนานนางพญางูขาว)",
|
|
81
|
+
category: "Acting"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "award-2018-weibo-improved",
|
|
85
|
+
year: 2018,
|
|
86
|
+
titleTh: "ศิลปินผู้มีพัฒนาการก้าวกระโดดแห่งปี (Improved Artist of the Year)",
|
|
87
|
+
titleCn: "年度进取艺人",
|
|
88
|
+
ceremony: "Weibo Awards Ceremony 2018",
|
|
89
|
+
work: "Legend of Yunxi & Solo Career Launch",
|
|
90
|
+
category: "Honor"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: "award-2017-may4th-medal",
|
|
94
|
+
year: 2017,
|
|
95
|
+
titleTh: "เหรียญรางวัลเกียรติยศเยาวชน 4 พฤษภาคม (May 4th Youth Medal)",
|
|
96
|
+
titleCn: "五四优秀青年勋章",
|
|
97
|
+
ceremony: "Chinese Communist Youth League (共青团中央)",
|
|
98
|
+
work: "เยาวชนตัวอย่างผู้สร้างคุณประโยชน์ทางศิลปวัฒนธรรม",
|
|
99
|
+
category: "State Honor"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
id: "award-2017-erc-breakthrough",
|
|
103
|
+
year: 2017,
|
|
104
|
+
titleTh: "ศิลปินผู้มีพัฒนาการโดดเด่นยอดเยี่ยม (Best Breakthrough Artist)",
|
|
105
|
+
titleCn: "最佳飞跃艺人",
|
|
106
|
+
ceremony: "24th ERC Chinese Top Ten Awards (第24届东方风云榜)",
|
|
107
|
+
work: "EP Everyday & Music Solo Works",
|
|
108
|
+
category: "Music"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
id: "award-2017-migu-top10",
|
|
112
|
+
year: 2017,
|
|
113
|
+
titleTh: "1 ใน 10 เพลงยอดเยี่ยมแห่งปี (Top 10 Songs of the Year)",
|
|
114
|
+
titleCn: "年度十大金曲",
|
|
115
|
+
ceremony: "11th Migu Music Awards (第11届音乐盛典咪咕汇)",
|
|
116
|
+
work: "Think of You (想你了)",
|
|
117
|
+
category: "Music"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
id: "award-2017-snh48-champion",
|
|
121
|
+
year: 2017,
|
|
122
|
+
titleTh: "ชนะเลิศอันดับ 1 การเลือกตั้งทั่วไป SNH48 ครั้งที่ 4 (แชมป์ 2 สมัยซ้อน)",
|
|
123
|
+
titleCn: "SNH48第四届偶像年度人气总决选冠军 (晋升明星殿堂)",
|
|
124
|
+
ceremony: "SNH48 4th General Election",
|
|
125
|
+
work: "บรรจุเข้าสู่ SNH48 Star Hall of Fame (วิหารแห่งดาว)",
|
|
126
|
+
category: "Hall of Fame"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: "award-2016-tencent-new-actress",
|
|
130
|
+
year: 2016,
|
|
131
|
+
titleTh: "นักแสดงโทรทัศน์หน้าใหม่ยอดเยี่ยมแห่งปี (New Television Actress)",
|
|
132
|
+
titleCn: "年度新锐电视剧女演员",
|
|
133
|
+
ceremony: "Tencent Video Star Awards 2016 (腾讯视频星光大赏)",
|
|
134
|
+
work: "Novoland: The Castle in the Sky (九州·天空城)",
|
|
135
|
+
category: "Acting"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
id: "award-2016-snh48-champion",
|
|
139
|
+
year: 2016,
|
|
140
|
+
titleTh: "ชนะเลิศอันดับ 1 การเลือกตั้งทั่วไป SNH48 ครั้งที่ 3 (คะแนนเกิน 230,000)",
|
|
141
|
+
titleCn: "SNH48第三届偶像年度人气总决选冠军",
|
|
142
|
+
ceremony: "SNH48 3rd General Election",
|
|
143
|
+
work: "เซ็นเตอร์เพลง Princess's Cloak (公主披风)",
|
|
144
|
+
category: "Idol & Acting"
|
|
145
|
+
}
|
|
146
|
+
];
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
export const brandsData = {
|
|
2
|
+
title: "Commercial Power & Brand Endorsements",
|
|
3
|
+
titleTh: "มูลค่าทางการค้าและพอร์ตพรีเซนเตอร์ระดับโลก (2024–2026)",
|
|
4
|
+
subtitle: "ฉายา 'เครื่องเก็บเกี่ยวสัญญาพาณิชย์ (商务收割机)' ด้วยยอดขายจริงระดับประวัติศาสตร์และการครองตำแหน่ง Global Brand Ambassador",
|
|
5
|
+
|
|
6
|
+
milanFashionWeek: {
|
|
7
|
+
event: "Milan Fashion Week (มิลานแฟชั่นวีค)",
|
|
8
|
+
brand: "PRSR (Pasha / 帕莎眼镜)",
|
|
9
|
+
brandId: "prsr",
|
|
10
|
+
role: "Global Brand Ambassador",
|
|
11
|
+
lookTitle: "ลุคไวรัลสะเทือนมิลาน: สีชมพูประกายเลื่อมตัดโค้ตดำสุดชิค",
|
|
12
|
+
description: "จวีจิ้งอีสร้างปรากฏการณ์ระดับสากลด้วยลุคเดินชมเมืองมิลานในชุดเดรสสั้นผ้าไหมสีชมพูประดับเลื่อมแวววาว แมตช์กับแว่นตากันแดดสุดเท่ของ PRSR (Pasha), เสื้อโค้ตยาว และรองเท้าส้นสูงสีดำ ผสมผสานความเรโทร (Retro) และโมเดิร์น (Modern) ได้อย่างลงตัวสะท้อนตัวตนทั้งความอ่อนหวานและลุคทรงพลังแบบคูลชิค"
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
salesHighlights: [
|
|
16
|
+
{
|
|
17
|
+
brand: "TuTuCare (凸凸棉)",
|
|
18
|
+
brandId: "tutucare",
|
|
19
|
+
stat: "20,000 ชุด หมดใน 1 วินาที!",
|
|
20
|
+
revenue: "GMV เกิน 10.3 ล้านหยวนใน 1 ชั่วโมง",
|
|
21
|
+
detail: "กล่องของขวัญลิมิเต็ดจำหน่ายหมดทันทีที่เปิดตัว ส่งให้แบรนด์ขึ้นสู่อันดับ 1 ในหมวดสินค้าทันที"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
brand: "DAFUYAN (达肤妍)",
|
|
25
|
+
brandId: "dafuyan",
|
|
26
|
+
stat: "10,000 เซ็ต หมดใน 8 นาที",
|
|
27
|
+
revenue: "ยอดขายทะลุ 20 ล้านหยวนใน 24 ชม.",
|
|
28
|
+
detail: "ทำสถิติ Conversion Rate สูงเป็นประวัติการณ์ของแบรนด์สกินแคร์"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
brand: "Lafang (拉芳)",
|
|
32
|
+
brandId: "lafang",
|
|
33
|
+
stat: "Global Ambassador ในรอบ 30 ปี",
|
|
34
|
+
revenue: "แบรนด์แอมบาสเดอร์ระดับโลกคนแรก",
|
|
35
|
+
detail: "แบรนด์ดูแลเส้นผมระดับตำนานแต่งตั้งพรีเซนเตอร์ระดับโลกเป็นครั้งแรกนับแต่ก่อตั้ง"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
|
|
39
|
+
brandList: [
|
|
40
|
+
{
|
|
41
|
+
id: "prsr",
|
|
42
|
+
year: 2026,
|
|
43
|
+
brandNameEn: "PRSR / Pasha",
|
|
44
|
+
brandNameCn: "帕莎眼镜",
|
|
45
|
+
title: "Global Brand Ambassador (แบรนด์แอมบาสเดอร์ระดับโลก)",
|
|
46
|
+
category: "แว่นตาแฟชั่นระดับโลก (Luxury Eyewear)",
|
|
47
|
+
highlight: "เปิดตัวมกราคม 2026 พร้อมลุคไวรัลสะเทือน Milan Fashion Week",
|
|
48
|
+
isGlobal: true,
|
|
49
|
+
logoColor: "from-purple-600 to-indigo-700",
|
|
50
|
+
accentBg: "bg-purple-500/10 text-purple-600 border-purple-200 dark:border-purple-800",
|
|
51
|
+
tier: "Global Luxury"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
id: "fred",
|
|
55
|
+
year: 2025,
|
|
56
|
+
brandNameEn: "FRED Paris",
|
|
57
|
+
brandNameCn: "斐登珠宝 (LVMH)",
|
|
58
|
+
title: "China Brand Ambassador (ภูมิภาคจีน)",
|
|
59
|
+
category: "เครื่องประดับอัญมณีชั้นสูงจากฝรั่งเศส (French High Jewelry)",
|
|
60
|
+
highlight: "แบรนด์ระดับ High-Luxury แบรนด์แรกในเครือ LVMH หลังก้าวสู่ศิลปินอิสระ",
|
|
61
|
+
isGlobal: false,
|
|
62
|
+
logoColor: "from-sky-600 to-blue-800",
|
|
63
|
+
accentBg: "bg-sky-500/10 text-sky-600 border-sky-200 dark:border-sky-800",
|
|
64
|
+
tier: "LVMH High Jewelry"
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "mac",
|
|
68
|
+
year: 2025,
|
|
69
|
+
brandNameEn: "M·A·C Cosmetics",
|
|
70
|
+
brandNameCn: "魅可彩妆",
|
|
71
|
+
title: "Brand Ambassador",
|
|
72
|
+
category: "เครื่องสำอางระดับโลก (Professional Makeup)",
|
|
73
|
+
highlight: "แคมเปญลุคเมกอัป 'Warrior Goddess Makeup' และ 'Sparkling Fairy' อันโด่งดัง",
|
|
74
|
+
isGlobal: false,
|
|
75
|
+
logoColor: "from-stone-800 to-black",
|
|
76
|
+
accentBg: "bg-stone-500/10 text-stone-700 dark:text-stone-300 border-stone-200 dark:border-stone-700",
|
|
77
|
+
tier: "Global Beauty Leader"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
id: "elixir",
|
|
81
|
+
year: 2025,
|
|
82
|
+
brandNameEn: "ELIXIR",
|
|
83
|
+
brandNameCn: "怡丽丝尔 (Shiseido)",
|
|
84
|
+
title: "Brand Ambassador",
|
|
85
|
+
category: "สกินแคร์บำรุงผิวพรีเมียมจากญี่ปุ่น (Prestige Skincare)",
|
|
86
|
+
highlight: "ตัวแทนความงามผิวเปล่งประกาย 'Pearl Skin / TSUYA-DAMA'",
|
|
87
|
+
isGlobal: false,
|
|
88
|
+
logoColor: "from-amber-500 to-yellow-600",
|
|
89
|
+
accentBg: "bg-amber-500/10 text-amber-600 border-amber-200 dark:border-amber-800",
|
|
90
|
+
tier: "Japanese Prestige"
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
id: "dafuyan",
|
|
94
|
+
year: 2026,
|
|
95
|
+
brandNameEn: "DAFUYAN",
|
|
96
|
+
brandNameCn: "达肤妍",
|
|
97
|
+
title: "Global Brand Ambassador",
|
|
98
|
+
category: "ผลิตภัณฑ์บำรุงผิวและสกินแคร์ (Biotech Skincare)",
|
|
99
|
+
highlight: "ยอดขายรวมทะลุ 20 ล้านหยวนภายใน 24 ชั่วโมงหลังเปิดตัว",
|
|
100
|
+
isGlobal: true,
|
|
101
|
+
logoColor: "from-rose-500 to-pink-600",
|
|
102
|
+
accentBg: "bg-rose-500/10 text-rose-600 border-rose-200 dark:border-rose-800",
|
|
103
|
+
tier: "Global Skincare"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
id: "hushan-aiyi",
|
|
107
|
+
year: 2026,
|
|
108
|
+
brandNameEn: "Hushan Aiyi",
|
|
109
|
+
brandNameCn: "沪上阿姨",
|
|
110
|
+
title: "Global Brand Ambassador",
|
|
111
|
+
category: "เครื่องดื่มและชาชีสพรีเมียม (Premium Fresh Tea)",
|
|
112
|
+
highlight: "ยกระดับสู่ตำแหน่งระดับโลกภายในเวลาเพียง 7 เดือน ด้วยยอดขยายสาขาทั่วโลก",
|
|
113
|
+
isGlobal: true,
|
|
114
|
+
logoColor: "from-amber-500 to-orange-600",
|
|
115
|
+
accentBg: "bg-amber-500/10 text-amber-600 border-amber-200 dark:border-amber-800",
|
|
116
|
+
tier: "Global Beverage"
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: "tutucare",
|
|
120
|
+
year: 2026,
|
|
121
|
+
brandNameEn: "TuTuCare",
|
|
122
|
+
brandNameCn: "凸凸棉",
|
|
123
|
+
title: "Global Brand Ambassador",
|
|
124
|
+
category: "ผลิตภัณฑ์อนามัยส่วนบุคคล (Personal Care)",
|
|
125
|
+
highlight: "20,000 กล่องลิมิเต็ดขายหมดใน 1 วินาที (ยอดขาย 10.3M+ หยวนใน 1 ชม.)",
|
|
126
|
+
isGlobal: true,
|
|
127
|
+
logoColor: "from-pink-500 to-rose-500",
|
|
128
|
+
accentBg: "bg-pink-500/10 text-pink-600 border-pink-200 dark:border-pink-800",
|
|
129
|
+
tier: "Global Personal Care"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
id: "lafang",
|
|
133
|
+
year: 2026,
|
|
134
|
+
brandNameEn: "Lafang",
|
|
135
|
+
brandNameCn: "拉芳",
|
|
136
|
+
title: "Global Brand Ambassador",
|
|
137
|
+
category: "ผลิตภัณฑ์ดูแลเส้นผม (Legendary Haircare)",
|
|
138
|
+
highlight: "แบรนด์แอมบาสเดอร์ระดับโลกคนแรกในรอบ 30 ปีของแบรนด์ระดับตำนาน",
|
|
139
|
+
isGlobal: true,
|
|
140
|
+
logoColor: "from-emerald-500 to-teal-600",
|
|
141
|
+
accentBg: "bg-emerald-500/10 text-emerald-600 border-emerald-200 dark:border-emerald-800",
|
|
142
|
+
tier: "30-Year Heritage"
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: "enya",
|
|
146
|
+
year: 2026,
|
|
147
|
+
brandNameEn: "Enya Cyber Guitar",
|
|
148
|
+
brandNameCn: "恩雅乐器",
|
|
149
|
+
title: "First Female Global Brand Ambassador",
|
|
150
|
+
category: "เครื่องดนตรีและสมาร์ตกีตาร์ (Smart Musical Instruments)",
|
|
151
|
+
highlight: "แอมบาสเดอร์หญิงระดับโลกคนแรก ตอกย้ำภาพลักษณ์อัจฉริยะทางดนตรี",
|
|
152
|
+
isGlobal: true,
|
|
153
|
+
logoColor: "from-blue-600 to-cyan-600",
|
|
154
|
+
accentBg: "bg-blue-500/10 text-blue-600 border-blue-200 dark:border-blue-800",
|
|
155
|
+
tier: "Global Music Tech"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: "rufi",
|
|
159
|
+
year: 2026,
|
|
160
|
+
brandNameEn: "RUFI",
|
|
161
|
+
brandNameCn: "RUFI生活美学",
|
|
162
|
+
title: "Global Brand Ambassador",
|
|
163
|
+
category: "ผลิตภัณฑ์ทำความสะอาดและดูแลผ้า (Aesthetic Fragrance)",
|
|
164
|
+
highlight: "แคมเปญไลฟ์สไตล์ความหอมพรีเมียมระดับสากล ครองยอดจองล่วงหน้าอันดับ 1",
|
|
165
|
+
isGlobal: true,
|
|
166
|
+
logoColor: "from-violet-500 to-purple-600",
|
|
167
|
+
accentBg: "bg-violet-500/10 text-violet-600 border-violet-200 dark:border-violet-800",
|
|
168
|
+
tier: "Global Lifestyle"
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
id: "bkt",
|
|
172
|
+
year: 2026,
|
|
173
|
+
brandNameEn: "BKT",
|
|
174
|
+
brandNameCn: "BKT健康椅",
|
|
175
|
+
title: "Global Brand Ambassador",
|
|
176
|
+
category: "เก้าอี้เพื่อสุขภาพและไลฟ์สไตล์ (Ergonomic Health)",
|
|
177
|
+
highlight: "ขยายการโปรโมตสุขภาพทั่วภูมิภาคเอเชียแปซิฟิกและอเมริกาเหนือ",
|
|
178
|
+
isGlobal: true,
|
|
179
|
+
logoColor: "from-stone-700 to-stone-900",
|
|
180
|
+
accentBg: "bg-stone-500/10 text-stone-700 dark:text-stone-300 border-stone-200 dark:border-stone-700",
|
|
181
|
+
tier: "Global Ergonomics"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
id: "qq-music",
|
|
185
|
+
year: 2026,
|
|
186
|
+
brandNameEn: "QQ Music",
|
|
187
|
+
brandNameCn: "QQ音乐 (Tencent)",
|
|
188
|
+
title: "Super VIP Ambassador",
|
|
189
|
+
category: "แพลตฟอร์มดนตรีดิจิทัลอันดับ 1 ของจีน (Digital Streaming Platform)",
|
|
190
|
+
highlight: "พรีเซนเตอร์พิเศษแพลตฟอร์มสตรีมมิ่งดนตรีดิจิทัลยอดผู้ฟังหลายร้อยล้านคน",
|
|
191
|
+
isGlobal: false,
|
|
192
|
+
logoColor: "from-emerald-500 to-green-600",
|
|
193
|
+
accentBg: "bg-emerald-500/10 text-emerald-600 border-emerald-200 dark:border-emerald-800",
|
|
194
|
+
tier: "Digital Streaming Titan"
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
id: "tmall",
|
|
198
|
+
year: 2026,
|
|
199
|
+
brandNameEn: "Tmall Fashion",
|
|
200
|
+
brandNameCn: "天猫服饰 (Alibaba)",
|
|
201
|
+
title: "Tmall Fashion Brand Ambassador",
|
|
202
|
+
category: "แพลตฟอร์มอีคอมเมิร์ซแฟชั่น (Fashion E-Commerce)",
|
|
203
|
+
highlight: "ผู้นำเทรนด์แฟชั่นและการแต่งหน้าสไตล์จีนโมเดิร์น (Chinese Aesthetic Leader)",
|
|
204
|
+
isGlobal: false,
|
|
205
|
+
logoColor: "from-red-600 to-rose-700",
|
|
206
|
+
accentBg: "bg-red-500/10 text-red-600 border-red-200 dark:border-red-800",
|
|
207
|
+
tier: "Alibaba Flagship"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: "davena",
|
|
211
|
+
year: 2025,
|
|
212
|
+
brandNameEn: "Davena",
|
|
213
|
+
brandNameCn: "蒂玮娜",
|
|
214
|
+
title: "First Brand Ambassador",
|
|
215
|
+
category: "นาฬิกาและแฟชั่นประดับคริสตัล (Crystal Luxury Timepieces)",
|
|
216
|
+
highlight: "แบรนด์แอมบาสเดอร์คนแรกของแบรนด์ ส่องประกายหรูหราทุกมุมมอง",
|
|
217
|
+
isGlobal: false,
|
|
218
|
+
logoColor: "from-pink-500 to-rose-600",
|
|
219
|
+
accentBg: "bg-pink-500/10 text-pink-600 border-pink-200 dark:border-pink-800",
|
|
220
|
+
tier: "Luxury Timepiece"
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
id: "marie-claire",
|
|
224
|
+
year: 2024,
|
|
225
|
+
brandNameEn: "Marie Claire China",
|
|
226
|
+
brandNameCn: "嘉人",
|
|
227
|
+
title: "Beauty Ambassador (Glamour 100)",
|
|
228
|
+
category: "นิตยสารแฟชั่นและความงามชั้นนำระดับโลก (High-Fashion Media)",
|
|
229
|
+
highlight: "ทูตความงามประจำปี 2024 สำหรับโครงการ Glamour 100",
|
|
230
|
+
isGlobal: false,
|
|
231
|
+
logoColor: "from-stone-900 to-rose-950",
|
|
232
|
+
accentBg: "bg-rose-500/10 text-rose-600 border-rose-200 dark:border-rose-800",
|
|
233
|
+
tier: "Editorial High Fashion"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
id: "spes",
|
|
237
|
+
year: 2021,
|
|
238
|
+
brandNameEn: "Spes",
|
|
239
|
+
brandNameCn: "诗裴丝",
|
|
240
|
+
title: "First Brand Ambassador",
|
|
241
|
+
category: "ผลิตภัณฑ์ดูแลหนังศีรษะและเส้นผม (Scalp Science)",
|
|
242
|
+
highlight: "แบรนด์แอมบาสเดอร์คนแรกของแบรนด์ สร้างปรากฏการณ์แห้งไวรัลขายดีอันดับ 1",
|
|
243
|
+
isGlobal: false,
|
|
244
|
+
logoColor: "from-cyan-500 to-blue-600",
|
|
245
|
+
accentBg: "bg-cyan-500/10 text-cyan-600 border-cyan-200 dark:border-cyan-800",
|
|
246
|
+
tier: "Scalp Innovation"
|
|
247
|
+
}
|
|
248
|
+
]
|
|
249
|
+
};
|