\n border-radius:50%;\n background:#9aa0a6;\n border:none;\n cursor:pointer;\n pointer-events:auto;\n}\n\n.mp-filter-range{\n display:flex;\n justify-content:space-between;\n font-size:11px;\n color:#7a7f87;\n margin-bottom:8px;\n}\n\n@media (max-width:900px){\n .mp-toolbar{\n align-items:flex-start;\n }\n\n .mp-toolbar-right{\n margin-left:0;\n }\n\n .mp-search-wrap{\n width:100%;\n min-width:220px;\n }\n}\n\n@media (max-width:640px){\n .mp-grid{\n grid-template-columns:repeat(2, 1fr);\n }\n\n .mp-filter-pop{\n right:auto;\n left:0;\n width:min(100%, 280px);\n }\n}\n\n\n\n','People-Files 人物-檔案管理','','inherit','closed','closed','','1356-revision-v1','','','2026-04-24 10:30:13','2026-04-24 10:30:13','',1356,'https://wp.momentry.ddns.net/?p=1377',0,'revision','',0),
(1379,6,'2026-04-27 10:01:02','2026-04-27 10:01:02','\n
\n
\n \n\n \n\n \n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n \n \n
\n \n
\n\n\n\n\n','People-Files 人物-檔案管理','','inherit','closed','closed','','1356-revision-v1','','','2026-04-27 10:01:02','2026-04-27 10:01:02','',1356,'https://wp.momentry.ddns.net/?p=1379',0,'revision','',0),
(1380,6,'2026-04-27 10:11:42','2026-04-27 10:11:42','\n\n
\n \n\n \n\n \n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n \n \n
\n \n
\n\n\n\n\n','People-Files 人物-檔案管理','','inherit','closed','closed','','1356-revision-v1','','','2026-04-27 10:11:42','2026-04-27 10:11:42','',1356,'https://wp.momentry.ddns.net/?p=1380',0,'revision','',0),
(1381,6,'2026-04-27 10:15:54','2026-04-27 10:15:54','\n\n
\n \n\n \n\n \n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n
\n
VIDEO ✓ \n
\n \n \n\n
\n \n
\n
PHOTO ✓ \n
\n \n \n\n
\n \n \n \n
\n \n
\n\n\n\n\n','People-Files 人物-檔案管理','','inherit','closed','closed','','1356-revision-v1','','','2026-04-27 10:15:54','2026-04-27 10:15:54','',1356,'https://wp.momentry.ddns.net/?p=1381',0,'revision','',0),
(1382,6,'2026-04-28 06:30:00','2026-04-28 06:30:00','\n\n
\n \n\n \n\n 載入底層資料中...
\n
\n \n
\n\n\n\n\n','People-Files 人物-檔案管理','','inherit','closed','closed','','1356-revision-v1','','','2026-04-28 06:30:00','2026-04-28 06:30:00','',1356,'https://wp.momentry.ddns.net/?p=1382',0,'revision','',0),
(1384,6,'2026-04-28 06:44:02','2026-04-28 06:44:02','\n\n\n\n\n\n','People-Files 人物-檔案管理','','inherit','closed','closed','','1356-revision-v1','','','2026-04-28 06:44:02','2026-04-28 06:44:02','',1356,'https://wp.momentry.ddns.net/?p=1384',0,'revision','',0),
(1386,1,'2026-04-28 07:29:14','2026-04-28 07:29:14','\n\n\n\n\n \n
\n \n
搜尋品質評估入口。觸發 Evaluation 並查看整體與各維度指標結果。
\n
\n\n \n
\n
Evaluation Trigger
\n
\n
\n 點擊按鈕觸發搜尋品質評估流程。 \n 系統會跑目前設定好的考題並更新最新指標。\n
\n
\n ▶︎ Run Evaluation \n \n Running… \n \n
\n
\n
\n\n \n
\n
Overall
\n
\n
\n
\n
Hit @ 3
\n
—
\n
前 3 名命中率
\n
\n
\n
MRR
\n
—
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
—
\n
平均時間誤差
\n
\n
\n
Latency
\n
—
\n
平均 API 延遲
\n
\n
\n
\n\n \n
\n
\n Core Dimensions\n WHO / WHERE / ACTION \n
\n
\n\n
\n
WHO
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
WHERE
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
ACTION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
\n Advanced Dimensions\n WHAT / COMBINATION \n
\n
\n\n
\n
WHAT
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
COMBINATION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
Last Evaluation
\n
\n
\n
\n\n
\n\n\n','Search Lab','','inherit','closed','closed','','1035-revision-v1','','','2026-04-28 07:29:14','2026-04-28 07:29:14','',1035,'https://wp.momentry.ddns.net/?p=1386',0,'revision','',0),
(1388,4,'2026-04-28 14:12:27','2026-04-28 14:12:27','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:12:27','2026-04-28 14:12:27','',1359,'https://wp.momentry.ddns.net/?p=1388',0,'revision','',0),
(1389,4,'2026-04-28 14:17:33','2026-04-28 14:17:33','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:17:33','2026-04-28 14:17:33','',1359,'https://wp.momentry.ddns.net/?p=1389',0,'revision','',0),
(1390,4,'2026-04-28 14:22:15','2026-04-28 14:22:15','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:22:15','2026-04-28 14:22:15','',1359,'https://wp.momentry.ddns.net/?p=1390',0,'revision','',0),
(1391,4,'2026-04-28 14:26:45','2026-04-28 14:26:45','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:26:45','2026-04-28 14:26:45','',1359,'https://wp.momentry.ddns.net/?p=1391',0,'revision','',0),
(1392,4,'2026-04-28 14:29:09','2026-04-28 14:29:09','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:29:09','2026-04-28 14:29:09','',1359,'https://wp.momentry.ddns.net/?p=1392',0,'revision','',0),
(1393,4,'2026-04-28 14:33:37','2026-04-28 14:33:37','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:33:37','2026-04-28 14:33:37','',1359,'https://wp.momentry.ddns.net/?p=1393',0,'revision','',0),
(1394,4,'2026-04-28 14:34:57','2026-04-28 14:34:57','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:34:57','2026-04-28 14:34:57','',1359,'https://wp.momentry.ddns.net/?p=1394',0,'revision','',0),
(1395,4,'2026-04-28 14:36:32','2026-04-28 14:36:32','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:36:32','2026-04-28 14:36:32','',1359,'https://wp.momentry.ddns.net/?p=1395',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1396,4,'2026-04-28 14:38:53','2026-04-28 14:38:53','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:38:53','2026-04-28 14:38:53','',1359,'https://wp.momentry.ddns.net/?p=1396',0,'revision','',0),
(1397,4,'2026-04-28 14:41:13','2026-04-28 14:41:13','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:41:13','2026-04-28 14:41:13','',1359,'https://wp.momentry.ddns.net/?p=1397',0,'revision','',0),
(1398,4,'2026-04-28 14:43:35','2026-04-28 14:43:35','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:43:35','2026-04-28 14:43:35','',1359,'https://wp.momentry.ddns.net/?p=1398',0,'revision','',0),
(1399,4,'2026-04-28 14:46:37','2026-04-28 14:46:37','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:46:37','2026-04-28 14:46:37','',1359,'https://wp.momentry.ddns.net/?p=1399',0,'revision','',0),
(1400,4,'2026-04-28 14:48:05','2026-04-28 14:48:05','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理','','inherit','closed','closed','','1359-revision-v1','','','2026-04-28 14:48:05','2026-04-28 14:48:05','',1359,'https://wp.momentry.ddns.net/?p=1400',0,'revision','',0),
(1401,6,'2026-04-29 00:33:28','2026-04-29 00:33:28','\n\n\n\n\n \n
\n \n
搜尋品質評估入口。觸發 Evaluation 並查看整體與各維度指標結果。
\n
\n\n \n
\n
Evaluation Trigger
\n
\n
\n 點擊按鈕觸發搜尋品質評估流程。 \n 系統會跑目前設定好的考題並更新最新指標。\n
\n
\n ▶︎ Run Evaluation \n \n Running… \n \n
\n
\n
\n\n \n
\n
Overall
\n
\n
\n
\n
Hit @ 3
\n
—
\n
前 3 名命中率
\n
\n
\n
MRR
\n
—
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
—
\n
平均時間誤差
\n
\n
\n
Latency
\n
—
\n
平均 API 延遲
\n
\n
\n
\n\n \n
\n
\n Core Dimensions\n WHO / WHERE / ACTION \n
\n
\n\n
\n
WHO
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
WHERE
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
ACTION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
\n Advanced Dimensions\n WHAT / COMBINATION \n
\n
\n\n
\n
WHAT
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
COMBINATION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
Last Evaluation
\n
\n
\n
\n\n
\n\n\n','Search Lab','','inherit','closed','closed','','1035-revision-v1','','','2026-04-29 00:33:28','2026-04-29 00:33:28','',1035,'https://wp.momentry.ddns.net/?p=1401',0,'revision','',0),
(1403,1,'2026-04-29 03:47:53','2026-04-29 03:47:53','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','momentry-demo','','inherit','closed','closed','','360-revision-v1','','','2026-04-29 03:47:53','2026-04-29 03:47:53','',360,'https://wp.momentry.ddns.net/?p=1403',0,'revision','',0),
(1404,1,'2026-04-29 03:48:21','2026-04-29 03:48:21','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','momentry-demo','','inherit','closed','closed','','360-revision-v1','','','2026-04-29 03:48:21','2026-04-29 03:48:21','',360,'https://wp.momentry.ddns.net/?p=1404',0,'revision','',0),
(1405,1,'2026-04-29 03:52:20','2026-04-29 03:52:20','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','momentry-demo','','inherit','closed','closed','','360-revision-v1','','','2026-04-29 03:52:20','2026-04-29 03:52:20','',360,'https://wp.momentry.ddns.net/?p=1405',0,'revision','',0),
(1406,1,'2026-04-29 03:53:20','2026-04-29 03:53:20','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','momentry-demo','','inherit','closed','closed','','360-revision-v1','','','2026-04-29 03:53:20','2026-04-29 03:53:20','',360,'https://wp.momentry.ddns.net/?p=1406',0,'revision','',0),
(1407,6,'2026-04-30 03:25:44','2026-04-30 03:25:44','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-04-30 03:25:44','2026-04-30 03:25:44','',523,'https://wp.momentry.ddns.net/?p=1407',0,'revision','',0),
(1409,6,'2026-04-30 03:26:47','2026-04-30 03:26:47','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-04-30 03:26:47','2026-04-30 03:26:47','',523,'https://wp.momentry.ddns.net/?p=1409',0,'revision','',0),
(1410,6,'2026-04-30 03:27:13','2026-04-30 03:27:13','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-04-30 03:27:13','2026-04-30 03:27:13','',523,'https://wp.momentry.ddns.net/?p=1410',0,'revision','',0),
(1411,6,'2026-04-30 03:42:58','2026-04-30 03:42:58','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-04-30 03:42:58','2026-04-30 03:42:58','',523,'https://wp.momentry.ddns.net/?p=1411',0,'revision','',0),
(1413,6,'2026-04-30 03:43:20','2026-04-30 03:43:20','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-04-30 03:43:20','2026-04-30 03:43:20','',523,'https://wp.momentry.ddns.net/?p=1413',0,'revision','',0),
(1414,6,'2026-04-30 03:43:31','2026-04-30 03:43:31','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-04-30 03:43:31','2026-04-30 03:43:31','',523,'https://wp.momentry.ddns.net/?p=1414',0,'revision','',0),
(1416,1,'2026-05-02 12:03:13','2026-05-02 12:03:13','\n\n\n\n
Momentry Mini REST API Test \n
\n 用來確認 WordPress REST routes 是否正常轉接 AI Core。HTML 不放 API Key,API Key 由 PHP 加上。\n
\n\n
\n REST Base URL \n \n
\n\n
\n\n
\n health \n videos \n scan \n lookup \n process \n progress \n search \n clear \n
\n\n
\n Ready. 請先按 health,再按 videos。\n
\n\n
No response yet. \n
\n\n\n\n','Scan - test -SC','','trash','closed','closed','','scan-test-sc__trashed','','','2026-05-18 00:47:20','2026-05-18 00:47:20','',0,'https://wp.momentry.ddns.net/?page_id=1416',0,'page','',0),
(1417,1,'2026-05-02 12:03:02','2026-05-02 12:03:02','\n\n\n\n \n Momentry API Test \n \n\n\n\n Momentry AI Core 測試頁 \n\n Scan Files \n\n Response \n 尚未執行 \n\n \n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:03:02','2026-05-02 12:03:02','',1416,'https://wp.momentry.ddns.net/?p=1417',0,'revision','',0),
(1418,1,'2026-05-02 12:05:58','2026-05-02 12:05:58','\n\n\n\n \n Momentry API Test \n \n\n\n\n Momentry AI Core 測試頁 \n\n Scan Files \n\n Response \n 尚未執行 \n\n \n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:05:58','2026-05-02 12:05:58','',1416,'https://wp.momentry.ddns.net/?p=1418',0,'revision','',0),
(1420,1,'2026-05-02 12:32:26','2026-05-02 12:32:26','\n\n\n\n \nMomentry Demo Test \n\n\n\n\n\n\nMomentry Demo 控制台 \n\nScan Files \n\n
\n\nLog \nReady... \n\n\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:32:26','2026-05-02 12:32:26','',1416,'https://wp.momentry.ddns.net/?p=1420',0,'revision','',0),
(1421,1,'2026-05-02 12:49:24','2026-05-02 12:49:24','\n\n\n\n \nMomentry Full Test \n\n\n\n\n\n\nMomentry 全功能測試 \n\nScan \nIdentities \n\n
\n\nLog \nReady... \n\n\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:49:24','2026-05-02 12:49:24','',1416,'https://wp.momentry.ddns.net/?p=1421',0,'revision','',0),
(1422,1,'2026-05-02 12:53:31','2026-05-02 12:53:31','\n\n\n\n \n\n
\n
\n\n
\n \n
\n
Demo 後台資料處理 \n
用來檢查 Core 狀態、掃描檔案、啟動素材處理、追蹤進度,並快速測試 Demo 前的資料是否準備好。
\n
\n
\n 檢查 Core \n 更新影片清單 \n 掃描檔案 \n
\n
\n\n \n \n
Core Status — 尚未檢查
\n
Videos 0 尚未載入
\n
Last HTTP — 等待 API 回應
\n
Progress — 可輸入 UUID 查詢
\n
\n\n \n
\n
\n
Demo Readiness 建議 Demo 前依序確認這四件事。
\n
\n
\n
\n\n
\n
\n
Current Target 目前操作用的影片 UUID / 任務 UUID。
\n
\n
\n
\n UUID \n \n
\n
\n Lookup \n Process \n Progress \n
\n
\n
\n
\n
\n \n\n \n \n
\n
資料處理控制台 掃描素材、指定 UUID 觸發處理、查詢處理進度。
\n
Core Proxy Mode \n
\n
\n
\n
\n GET /api/v1/files/scan \n POST /api/v1/assets/:uuid/process \n GET /api/v1/progress/:uuid \n
\n
\n
\n\n \n
最近任務 / 狀態 這裡會顯示最近一次 scan、process、progress 的結果摘要。
\n
\n
\n \n\n \n \n
\n
影片清單 呼叫 GET /api/v1/videos,確認目前 Core 已註冊的影片。
\n
重新載入 \n
\n
\n
\n \n\n \n\n \n \n
\n
Raw Response 所有 API 回應會顯示在這裡,方便截圖給 Warren / Lynn / Wendy 對照。
\n
清空 \n
\n
\n
\n \n \n
\n
\n\n \n
\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:53:31','2026-05-02 12:53:31','',1416,'https://wp.momentry.ddns.net/?p=1422',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1423,1,'2026-05-02 12:55:37','2026-05-02 12:55:37','\n\n\n\n \n\n
\n
\n\n
\n \n
\n
Demo 後台資料處理 \n
用來檢查 Core 狀態、掃描檔案、啟動素材處理、追蹤進度,並快速測試 Demo 前的資料是否準備好。
\n
\n
\n 檢查 Core \n 更新影片清單 \n 掃描檔案 \n
\n
\n\n \n \n
Core Status — 尚未檢查
\n
Videos 0 尚未載入
\n
Last HTTP — 等待 API 回應
\n
Progress — 可輸入 UUID 查詢
\n
\n\n \n
\n
\n
Demo Readiness 建議 Demo 前依序確認這四件事。
\n
\n
\n
\n\n
\n
\n
Current Target 目前操作用的影片 UUID / 任務 UUID。
\n
\n
\n
\n UUID \n \n
\n
\n Lookup \n Process \n Progress \n
\n
\n
\n
\n
\n \n\n \n \n
\n
資料處理控制台 掃描素材、指定 UUID 觸發處理、查詢處理進度。
\n
Core Proxy Mode \n
\n
\n
\n
\n GET /api/v1/files/scan \n POST /api/v1/assets/:uuid/process \n GET /api/v1/progress/:uuid \n
\n
\n
\n\n \n
最近任務 / 狀態 這裡會顯示最近一次 scan、process、progress 的結果摘要。
\n
\n
\n \n\n \n \n
\n
影片清單 呼叫 GET /api/v1/videos,確認目前 Core 已註冊的影片。
\n
重新載入 \n
\n
\n
\n \n\n \n\n \n \n
\n
Contract 檢查 每次 API 回來後,會自動檢查欄位是否符合 Portal / Core 約定格式。
\n
尚未檢查 \n
\n
\n
\n\n \n
Contract 明細 綠色代表欄位存在且型別正確;橘色代表缺少或型別不符。
\n
\n
\n \n\n \n \n
\n
Raw Response 所有 API 回應會顯示在這裡,方便截圖給 Warren / Lynn / Wendy 對照。
\n
清空 \n
\n
\n
\n \n \n
\n
\n\n \n
\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:55:37','2026-05-02 12:55:37','',1416,'https://wp.momentry.ddns.net/?p=1423',0,'revision','',0),
(1424,1,'2026-05-02 12:59:37','2026-05-02 12:59:37','\n\n\n\n \n\n \n\n
\n
PHP Proxy — 尚未測試
\n
AI Core — 尚未測試 /health
\n
HTTP — 等待 API 回覆
\n
Contract — 尚未檢查
\n
\n\n
\n
1. Proxy 設定 \n
確認 WordPress PHP proxy endpoint。HTML 只打這支,不直接打 Core,也不放 API Key。
\n
\n
\n PHP Proxy URL \n \n
\n
\n Timeout \n \n 8 秒 \n 15 秒 \n 30 秒 \n \n
\n
\n
\n PHP proxy 建議回傳:{ ok, http_code, data }。如果 PHP 直接回 Core JSON,這頁也能讀,但比較不利 debug。\n
\n
\n\n
\n
2. 快速測試 \n
先測 /health,再測 videos、scan、progress。這幾個足夠確認 PHP 與 Core 是否正常。
\n
\n 檢查 AI Core /health \n 取得影片清單 /videos \n 掃描檔案 /files/scan \n Lookup UUID \n 查詢進度 /progress \n 搜尋測試 /n8n/search \n
\n
\n
\n\n
\n
3. 自訂 API 測試 \n
如果 Core 新增 endpoint,可以在這裡直接輸入 method、path、body 測試。
\n
\n
\n Method \n \n GET \n POST \n PATCH \n DELETE \n \n
\n
\n Core Path \n \n
\n
\n
\n Body JSON,GET 可留空 \n \n
\n
\n 送出測試 \n 清空結果 \n
\n
\n\n
\n
\n
4. Contract 檢查 \n
檢查目前回覆是否符合前端預期欄位。
\n
\n
\n\n
\n
5. Raw Response \n
把這段截圖或複製給 PHP / Core 同事最有用。
\n
Ready.
\n
\n
\n\n \n
\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 12:59:37','2026-05-02 12:59:37','',1416,'https://wp.momentry.ddns.net/?p=1424',0,'revision','',0),
(1425,1,'2026-05-02 13:06:07','2026-05-02 13:06:07','\n\n\n\n \n\n \n\n
\n
PHP Proxy — 尚未測試
\n
AI Core — 尚未測試 /health
\n
HTTP — 等待 API 回覆
\n
Contract — 尚未檢查
\n
\n\n
\n
1. PHP Proxy 設定 \n
HTML 只呼叫這支 PHP proxy。API Key 必須由 PHP 在 server 端補上,不要放在 HTML / JavaScript。
\n
\n
\n PHP Proxy URL \n \n
\n
\n Timeout \n \n 8 秒 \n 15 秒 \n 30 秒 \n \n
\n
\n
\n 判斷邏輯:如果 PHP 有回應但 Core HTTP 是 401,通常代表 PHP proxy 有通,但沒有正確帶上 X-API-Key,或 API Key 不正確。\n
\n
\n\n
\n
2. 一鍵測整條鏈 \n
建議先按這個。它會依序測:PHP Proxy → AI Core Health → Videos → Files Scan。
\n
\n 一鍵 Full Test \n 清空結果 \n
\n
\n
Step 1 等待測試 PHP Proxy / Health Pending
\n
Step 2 等待測試 AI Core /videos Pending
\n
Step 3 等待測試 /files/scan Pending
\n
\n
\n\n
\n
3. 常用 API 快速測試 \n
這幾個按鈕可以快速確認 Core 是否正常、PHP 回傳格式是否正確。
\n
\n 檢查 /health \n 取得 /api/v1/videos \n 掃描 /api/v1/files/scan \n Lookup UUID \n 查詢 Progress \n 搜尋測試 /api/v1/search \n
\n
\n
\n\n
\n
4. 自訂 API 測試 \n
如果 Core 新增 endpoint,直接在這裡輸入 method、path、body 測試。
\n
\n
\n Method \n \n GET \n POST \n PATCH \n DELETE \n \n
\n
\n Core Path \n \n
\n
\n
\n Body JSON,GET 可留空 \n \n
\n
\n 送出自訂 API \n
\n
\n\n
\n
\n
5. Contract 檢查 \n
檢查目前回覆是否符合前端預期欄位。
\n
\n
Contract Type 尚未檢查
\n
Wrapper 尚未檢查
\n
Fields 尚未檢查
\n
\n
\n
\n\n
\n
6. Raw Response \n
這裡最適合截圖或複製給 PHP / Core 同事。
\n
Ready.
\n
\n
\n\n \n
\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:06:07','2026-05-02 13:06:07','',1416,'https://wp.momentry.ddns.net/?p=1425',0,'revision','',0),
(1426,1,'2026-05-02 13:07:55','2026-05-02 13:07:55','\n\n\n\n \n\n \n\n
\n
PHP Proxy — 尚未測試
\n
AI Core — 尚未測試 /health
\n
HTTP — 等待 API 回覆
\n
Contract — 尚未檢查
\n
\n\n
\n
1. PHP Proxy 設定 \n
HTML 只呼叫這支 PHP proxy。API Key 必須由 PHP 在 server 端補上,不要放在 HTML / JavaScript。
\n
\n
\n PHP Proxy URL \n \n
\n
\n Timeout \n \n 8 秒 \n 15 秒 \n 30 秒 \n \n
\n
\n
\n 判斷邏輯:如果 PHP 有回應但 Core HTTP 是 401,通常代表 PHP proxy 有通,但沒有正確帶上 X-API-Key,或 API Key 不正確。\n
\n
\n\n
\n
2. 一鍵測整條鏈 \n
建議先按這個。它會依序測:PHP Proxy → AI Core Health → Videos → Files Scan。
\n
\n 一鍵 Full Test \n 清空結果 \n
\n
\n
Step 1 等待測試 PHP Proxy / Health Pending
\n
Step 2 等待測試 AI Core /videos Pending
\n
Step 3 等待測試 /files/scan Pending
\n
\n
\n\n
\n
3. 常用 API 快速測試 \n
這幾個按鈕可以快速確認 Core 是否正常、PHP 回傳格式是否正確。
\n
\n 檢查 /health \n 取得 /api/v1/videos \n 掃描 /api/v1/files/scan \n Lookup UUID \n 查詢 Progress \n 搜尋測試 /api/v1/search \n
\n
\n
\n\n
\n
4. 自訂 API 測試 \n
如果 Core 新增 endpoint,直接在這裡輸入 method、path、body 測試。
\n
\n
\n Method \n \n GET \n POST \n PATCH \n DELETE \n \n
\n
\n Core Path \n \n
\n
\n
\n Body JSON,GET 可留空 \n \n
\n
\n 送出自訂 API \n
\n
\n\n
\n
\n
5. Contract 檢查 \n
檢查目前回覆是否符合前端預期欄位。
\n
\n
Contract Type 尚未檢查
\n
Wrapper 尚未檢查
\n
Fields 尚未檢查
\n
\n
\n
\n\n
\n
6. Raw Response \n
這裡最適合截圖或複製給 PHP / Core 同事。
\n
Ready.
\n
\n
\n\n \n
\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:07:55','2026-05-02 13:07:55','',1416,'https://wp.momentry.ddns.net/?p=1426',0,'revision','',0),
(1427,1,'2026-05-02 13:11:25','2026-05-02 13:11:25','\n\n\n\n \n\n
Momentry PHP → AI Core 測試頁 \n
用來確認 PHP Proxy 是否有做好、AI Core 是否正常、回傳 contract 是否正確。這頁不使用 n8n。
\n\n
\n
JS Not Ready 如果一直是 Not Ready,代表 WordPress 擋掉 script。
\n
PHP Proxy — 尚未測試
\n
AI Core — 尚未測試 /health
\n
HTTP — 等待 API 回覆
\n
\n\n
\n
1. Proxy 設定 \n
\n
\n PHP Proxy URL \n \n
\n
\n Timeout \n \n 8 秒 \n 15 秒 \n 30 秒 \n \n
\n
\n
如果按鈕完全沒反應,先看上方 JS 是否顯示 Ready。若不是 Ready,表示 WordPress 目前不允許這段 HTML 裡的 JavaScript 執行。
\n
\n\n
\n
2. 快速測試 \n
建議先按「測 /health」。如果回 401,通常代表 PHP proxy 有通,但沒有正確帶上 X-API-Key。
\n
測 /health \n
測 /api/v1/videos \n
測 /api/v1/files/scan \n
測 lookup \n
測 progress \n
測 search \n
一鍵 Full Test \n
清空 \n\n
\n
\n\n
\n
3. 自訂 API 測試 \n
\n
\n Method \n \n GET \n POST \n PATCH \n DELETE \n \n
\n
\n Core Path \n \n
\n
\n
\n Body JSON,GET 可留空 \n \n
\n
送出自訂 API \n
\n\n
\n
\n
4. Contract 檢查 \n
尚未檢查。
\n
尚未取得 API response。
\n
\n\n
\n
5. Raw Response \n
Ready.
\n
\n
\n
\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:11:25','2026-05-02 13:11:25','',1416,'https://wp.momentry.ddns.net/?p=1427',0,'revision','',0),
(1428,1,'2026-05-02 13:14:46','2026-05-02 13:14:46','\n\n\n\n
Momentry PHP Proxy Mini Test \n
\n 用來快速確認 PHP proxy 是否正常轉接 AI Core。HTML 不放 API Key,API Key 由 PHP 加上。\n
\n\n
\n PHP Proxy URL \n \n
\n\n
\n UUID,用於 lookup 測試 \n \n
\n\n
\n Test /health \n Test /videos \n Test lookup \n Clear \n
\n\n
\n Ready. 請按上方按鈕測試。\n
\n\n
No response yet. \n
\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:14:46','2026-05-02 13:14:46','',1416,'https://wp.momentry.ddns.net/?p=1428',0,'revision','',0),
(1429,1,'2026-05-02 13:16:21','2026-05-02 13:16:21','\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:16:21','2026-05-02 13:16:21','',1416,'https://wp.momentry.ddns.net/?p=1429',0,'revision','',0),
(1431,1,'2026-05-02 13:17:40','2026-05-02 13:17:40','\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:17:40','2026-05-02 13:17:40','',1416,'https://wp.momentry.ddns.net/?p=1431',0,'revision','',0),
(1432,1,'2026-05-02 13:20:28','2026-05-02 13:20:28','\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:20:28','2026-05-02 13:20:28','',1416,'https://wp.momentry.ddns.net/?p=1432',0,'revision','',0),
(1433,1,'2026-05-02 13:29:00','2026-05-02 13:29:00','\n\n\n\n
Momentry Mini REST API Test \n
\n 用來確認 WordPress REST routes 是否正常轉接 AI Core。HTML 不放 API Key,API Key 由 PHP 加上。\n
\n\n
\n REST Base URL \n \n
\n\n
\n\n
\n health \n videos \n scan \n lookup \n process \n progress \n search \n clear \n
\n\n
\n Ready. 請先按 health,再按 videos。\n
\n\n
No response yet. \n
\n\n\n\n','Scan - test -SC','','inherit','closed','closed','','1416-revision-v1','','','2026-05-02 13:29:00','2026-05-02 13:29:00','',1416,'https://wp.momentry.ddns.net/?p=1433',0,'revision','',0),
(1434,1,'2026-05-05 09:46:54','2026-05-05 09:46:54','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore-Test-SC','','publish','closed','closed','','explore','','','2026-05-18 00:50:16','2026-05-18 00:50:16','',0,'https://wp.momentry.ddns.net/?page_id=1434',0,'page','',0),
(1435,1,'2026-05-05 09:46:32','2026-05-05 09:46:32','','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 09:46:32','2026-05-05 09:46:32','',1434,'https://wp.momentry.ddns.net/?p=1435',0,'revision','',0),
(1436,1,'2026-05-05 09:46:54','2026-05-05 09:46:54','','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 09:46:54','2026-05-05 09:46:54','',1434,'https://wp.momentry.ddns.net/?p=1436',0,'revision','',0),
(1437,1,'2026-05-05 10:00:35','2026-05-05 10:00:35','\n\n \n\n
\n \n\n \n All \n Videos \n Images \n Folders \n Documents \n \n
\n\n
Select directories and click Load.
\n\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:00:35','2026-05-05 10:00:35','',1434,'https://wp.momentry.ddns.net/?p=1437',0,'revision','',0),
(1439,1,'2026-05-05 10:34:29','2026-05-05 10:34:29','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\n Load Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:34:29','2026-05-05 10:34:29','',1434,'https://wp.momentry.ddns.net/?p=1439',0,'revision','',0),
(1440,1,'2026-05-05 10:46:17','2026-05-05 10:46:17','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\n Load Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:46:17','2026-05-05 10:46:17','',1434,'https://wp.momentry.ddns.net/?p=1440',0,'revision','',0),
(1441,1,'2026-05-05 10:47:00','2026-05-05 10:47:00','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\n Load Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:47:00','2026-05-05 10:47:00','',1434,'https://wp.momentry.ddns.net/?p=1441',0,'revision','',0),
(1442,1,'2026-05-05 10:48:16','2026-05-05 10:48:16','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\n Load Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:48:16','2026-05-05 10:48:16','',1434,'https://wp.momentry.ddns.net/?p=1442',0,'revision','',0),
(1443,1,'2026-05-05 10:53:36','2026-05-05 10:53:36','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\n Load Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:53:36','2026-05-05 10:53:36','',1434,'https://wp.momentry.ddns.net/?p=1443',0,'revision','',0),
(1444,1,'2026-05-05 10:56:26','2026-05-05 10:56:26','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\n Load Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 10:56:26','2026-05-05 10:56:26','',1434,'https://wp.momentry.ddns.net/?p=1444',0,'revision','',0),
(1446,1,'2026-05-05 11:01:38','2026-05-05 11:01:38','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:01:38','2026-05-05 11:01:38','',1434,'https://wp.momentry.ddns.net/?p=1446',0,'revision','',0),
(1447,1,'2026-05-05 11:04:27','2026-05-05 11:04:27','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:04:27','2026-05-05 11:04:27','',1434,'https://wp.momentry.ddns.net/?p=1447',0,'revision','',0),
(1448,1,'2026-05-05 11:07:12','2026-05-05 11:07:12','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:07:12','2026-05-05 11:07:12','',1434,'https://wp.momentry.ddns.net/?p=1448',0,'revision','',0),
(1449,1,'2026-05-05 11:16:17','2026-05-05 11:16:17','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:16:17','2026-05-05 11:16:17','',1434,'https://wp.momentry.ddns.net/?p=1449',0,'revision','',0),
(1450,1,'2026-05-05 11:19:01','2026-05-05 11:19:01','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:19:01','2026-05-05 11:19:01','',1434,'https://wp.momentry.ddns.net/?p=1450',0,'revision','',0),
(1451,1,'2026-05-05 11:22:11','2026-05-05 11:22:11','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:22:11','2026-05-05 11:22:11','',1434,'https://wp.momentry.ddns.net/?p=1451',0,'revision','',0),
(1452,1,'2026-05-05 11:29:39','2026-05-05 11:29:39','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:29:39','2026-05-05 11:29:39','',1434,'https://wp.momentry.ddns.net/?p=1452',0,'revision','',0),
(1453,1,'2026-05-05 11:31:53','2026-05-05 11:31:53','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:31:53','2026-05-05 11:31:53','',1434,'https://wp.momentry.ddns.net/?p=1453',0,'revision','',0),
(1454,1,'2026-05-05 11:37:51','2026-05-05 11:37:51','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore-SC','','inherit','closed','closed','','1434-revision-v1','','','2026-05-05 11:37:51','2026-05-05 11:37:51','',1434,'https://wp.momentry.ddns.net/?p=1454',0,'revision','',0),
(1455,1,'2026-05-07 02:45:58','2026-05-07 02:45:58','\n
\n\n\n\n[ms_login_form_v2]\n','Log In','','inherit','closed','closed','','44-revision-v1','','','2026-05-07 02:45:58','2026-05-07 02:45:58','',44,'https://wp.momentry.ddns.net/?p=1455',0,'revision','',0),
(1456,1,'2026-05-07 03:01:55','2026-05-07 03:01:55','\n
\n\n\n\n[ms_login_form]\n','Log In','','inherit','closed','closed','','44-revision-v1','','','2026-05-07 03:01:55','2026-05-07 03:01:55','',44,'https://wp.momentry.ddns.net/?p=1456',0,'revision','',0),
(1457,1,'2026-05-07 04:33:42','2026-05-07 04:33:42','\n[ms_lost_password_form]\n','Forgot Password','','publish','closed','closed','','forgot-password','','','2026-05-18 00:49:57','2026-05-18 00:49:57','',0,'https://wp.momentry.ddns.net/?page_id=1457',0,'page','',0),
(1458,1,'2026-05-07 04:33:24','2026-05-07 04:33:24','','Forgot Password','','inherit','closed','closed','','1457-revision-v1','','','2026-05-07 04:33:24','2026-05-07 04:33:24','',1457,'https://wp.momentry.ddns.net/?p=1458',0,'revision','',0),
(1459,1,'2026-05-07 04:34:03','2026-05-07 04:34:03','\n[ms_lost_password_form]\n','Forgot Password','','inherit','closed','closed','','1457-revision-v1','','','2026-05-07 04:34:03','2026-05-07 04:34:03','',1457,'https://wp.momentry.ddns.net/?p=1459',0,'revision','',0),
(1461,4,'2026-05-07 07:10:55','2026-05-07 07:10:55','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-07 07:10:55','2026-05-07 07:10:55','',523,'https://wp.momentry.ddns.net/?p=1461',0,'revision','',0),
(1462,4,'2026-05-07 07:17:23','2026-05-07 07:17:23','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-07 07:17:23','2026-05-07 07:17:23','',523,'https://wp.momentry.ddns.net/?p=1462',0,'revision','',0),
(1463,1,'2026-05-08 02:45:44','2026-05-08 02:45:44','\n[ms_lost_password_form]\n','Forgot Password-SC','','inherit','closed','closed','','1457-revision-v1','','','2026-05-08 02:45:44','2026-05-08 02:45:44','',1457,'https://wp.momentry.ddns.net/?p=1463',0,'revision','',0),
(1464,1,'2026-05-08 02:46:01','2026-05-08 02:46:01','\n
\n\n\n\n[ms_login_form]\n','Log In -SC','','inherit','closed','closed','','44-revision-v1','','','2026-05-08 02:46:01','2026-05-08 02:46:01','',44,'https://wp.momentry.ddns.net/?p=1464',0,'revision','',0),
(1465,1,'2026-05-08 02:47:05','2026-05-08 02:47:05','\n\n\n\n\n \n
\n \n
搜尋品質評估入口。觸發 Evaluation 並查看整體與各維度指標結果。
\n
\n\n \n
\n
Evaluation Trigger
\n
\n
\n 點擊按鈕觸發搜尋品質評估流程。 \n 系統會跑目前設定好的考題並更新最新指標。\n
\n
\n ▶︎ Run Evaluation \n \n Running… \n \n
\n
\n
\n\n \n
\n
Overall
\n
\n
\n
\n
Hit @ 3
\n
—
\n
前 3 名命中率
\n
\n
\n
MRR
\n
—
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
—
\n
平均時間誤差
\n
\n
\n
Latency
\n
—
\n
平均 API 延遲
\n
\n
\n
\n\n \n
\n
\n Core Dimensions\n WHO / WHERE / ACTION \n
\n
\n\n
\n
WHO
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
WHERE
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
ACTION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
\n Advanced Dimensions\n WHAT / COMBINATION \n
\n
\n\n
\n
WHAT
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
COMBINATION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
Last Evaluation
\n
\n
\n
\n\n
\n\n\n','Evaluation -SC','','inherit','closed','closed','','1035-revision-v1','','','2026-05-08 02:47:05','2026-05-08 02:47:05','',1035,'https://wp.momentry.ddns.net/?p=1465',0,'revision','',0),
(1466,1,'2026-05-08 02:47:19','2026-05-08 02:47:19','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 02:47:19','2026-05-08 02:47:19','',1356,'https://wp.momentry.ddns.net/?p=1466',0,'revision','',0),
(1467,1,'2026-05-08 02:47:25','2026-05-08 02:47:25','\n\n\n\n\n\n \n
\n\n \n
\n\n \n
尚未加入的人物
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n \n \n\n \n
\n\n \n
—
\n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-08 02:47:25','2026-05-08 02:47:25','',1359,'https://wp.momentry.ddns.net/?p=1467',0,'revision','',0),
(1468,6,'2026-05-08 09:46:36','2026-05-08 09:46:36','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:46:36','2026-05-08 09:46:36','',523,'https://wp.momentry.ddns.net/?p=1468',0,'revision','',0),
(1469,6,'2026-05-08 09:49:18','2026-05-08 09:49:18','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:49:18','2026-05-08 09:49:18','',523,'https://wp.momentry.ddns.net/?p=1469',0,'revision','',0),
(1470,6,'2026-05-08 09:49:29','2026-05-08 09:49:29','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:49:29','2026-05-08 09:49:29','',523,'https://wp.momentry.ddns.net/?p=1470',0,'revision','',0),
(1471,6,'2026-05-08 09:49:42','2026-05-08 09:49:42','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:49:42','2026-05-08 09:49:42','',523,'https://wp.momentry.ddns.net/?p=1471',0,'revision','',0),
(1472,6,'2026-05-08 09:49:54','2026-05-08 09:49:54','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:49:54','2026-05-08 09:49:54','',523,'https://wp.momentry.ddns.net/?p=1472',0,'revision','',0),
(1473,6,'2026-05-08 09:50:17','2026-05-08 09:50:17','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:50:17','2026-05-08 09:50:17','',523,'https://wp.momentry.ddns.net/?p=1473',0,'revision','',0),
(1474,6,'2026-05-08 09:50:39','2026-05-08 09:50:39','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:50:39','2026-05-08 09:50:39','',523,'https://wp.momentry.ddns.net/?p=1474',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1475,6,'2026-05-08 09:51:06','2026-05-08 09:51:06','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 09:51:06','2026-05-08 09:51:06','',523,'https://wp.momentry.ddns.net/?p=1475',0,'revision','',0),
(1476,6,'2026-05-08 10:01:19','2026-05-08 10:01:19','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:01:19','2026-05-08 10:01:19','',523,'https://wp.momentry.ddns.net/?p=1476',0,'revision','',0),
(1477,6,'2026-05-08 10:02:30','2026-05-08 10:02:30','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:02:30','2026-05-08 10:02:30','',523,'https://wp.momentry.ddns.net/?p=1477',0,'revision','',0),
(1478,6,'2026-05-08 10:02:50','2026-05-08 10:02:50','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:02:50','2026-05-08 10:02:50','',523,'https://wp.momentry.ddns.net/?p=1478',0,'revision','',0),
(1479,6,'2026-05-08 10:03:12','2026-05-08 10:03:12','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:03:12','2026-05-08 10:03:12','',523,'https://wp.momentry.ddns.net/?p=1479',0,'revision','',0),
(1480,6,'2026-05-08 10:03:31','2026-05-08 10:03:31','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:03:31','2026-05-08 10:03:31','',523,'https://wp.momentry.ddns.net/?p=1480',0,'revision','',0),
(1481,6,'2026-05-08 10:03:49','2026-05-08 10:03:49','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:03:49','2026-05-08 10:03:49','',523,'https://wp.momentry.ddns.net/?p=1481',0,'revision','',0),
(1482,6,'2026-05-08 10:10:39','2026-05-08 10:10:39','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:10:39','2026-05-08 10:10:39','',523,'https://wp.momentry.ddns.net/?p=1482',0,'revision','',0),
(1483,6,'2026-05-08 10:11:25','2026-05-08 10:11:25','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:11:25','2026-05-08 10:11:25','',523,'https://wp.momentry.ddns.net/?p=1483',0,'revision','',0),
(1484,6,'2026-05-08 10:11:47','2026-05-08 10:11:47','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:11:47','2026-05-08 10:11:47','',523,'https://wp.momentry.ddns.net/?p=1484',0,'revision','',0),
(1485,6,'2026-05-08 10:12:46','2026-05-08 10:12:46','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:12:46','2026-05-08 10:12:46','',523,'https://wp.momentry.ddns.net/?p=1485',0,'revision','',0),
(1486,6,'2026-05-08 10:19:27','2026-05-08 10:19:27','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:19:27','2026-05-08 10:19:27','',523,'https://wp.momentry.ddns.net/?p=1486',0,'revision','',0),
(1487,6,'2026-05-08 10:19:41','2026-05-08 10:19:41','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 10:19:41','2026-05-08 10:19:41','',523,'https://wp.momentry.ddns.net/?p=1487',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1488,6,'2026-05-08 11:47:31','2026-05-08 11:47:31','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 11:47:31','2026-05-08 11:47:31','',523,'https://wp.momentry.ddns.net/?p=1488',0,'revision','',0),
(1489,6,'2026-05-08 11:50:17','2026-05-08 11:50:17','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 11:50:17','2026-05-08 11:50:17','',523,'https://wp.momentry.ddns.net/?p=1489',0,'revision','',0),
(1490,6,'2026-05-08 12:26:10','2026-05-08 12:26:10','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 12:26:10','2026-05-08 12:26:10','',523,'https://wp.momentry.ddns.net/?p=1490',0,'revision','',0),
(1491,6,'2026-05-08 12:26:35','2026-05-08 12:26:35','\n\n \n \n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 12:26:35','2026-05-08 12:26:35','',523,'https://wp.momentry.ddns.net/?p=1491',0,'revision','',0),
(1492,6,'2026-05-08 12:26:50','2026-05-08 12:26:50','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 12:26:50','2026-05-08 12:26:50','',523,'https://wp.momentry.ddns.net/?p=1492',0,'revision','',0),
(1493,6,'2026-05-08 12:27:29','2026-05-08 12:27:29','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 12:27:29','2026-05-08 12:27:29','',523,'https://wp.momentry.ddns.net/?p=1493',0,'revision','',0),
(1494,6,'2026-05-08 12:28:46','2026-05-08 12:28:46','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 12:28:46','2026-05-08 12:28:46','',523,'https://wp.momentry.ddns.net/?p=1494',0,'revision','',0),
(1495,1,'2026-05-08 12:44:48','2026-05-08 12:44:48','\n\n\n\n\n \n
\n \n
搜尋品質評估入口。觸發 Evaluation 並查看整體與各維度指標結果。
\n
\n\n \n
\n
Evaluation Trigger
\n
\n
\n 點擊按鈕觸發搜尋品質評估流程。 \n 系統會跑目前設定好的考題並更新最新指標。\n
\n
\n ▶︎ Run Evaluation \n \n Running… \n \n
\n
\n
\n\n \n
\n
Overall
\n
\n
\n
\n
Hit @ 3
\n
—
\n
前 3 名命中率
\n
\n
\n
MRR
\n
—
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
—
\n
平均時間誤差
\n
\n
\n
Latency
\n
—
\n
平均 API 延遲
\n
\n
\n
\n\n \n
\n
\n Core Dimensions\n WHO / WHERE / ACTION \n
\n
\n\n
\n
WHO
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
WHERE
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
ACTION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
\n Advanced Dimensions\n WHAT / COMBINATION \n
\n
\n\n
\n
WHAT
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
COMBINATION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
Last Evaluation
\n
\n
\n
\n\n
\n\n\n','Evaluation -WW','','inherit','closed','closed','','1035-revision-v1','','','2026-05-08 12:44:48','2026-05-08 12:44:48','',1035,'https://wp.momentry.ddns.net/?p=1495',0,'revision','',0),
(1496,6,'2026-05-08 13:47:57','2026-05-08 13:47:57','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','WW - 04-07 對話結果顯示','','inherit','closed','closed','','523-revision-v1','','','2026-05-08 13:47:57','2026-05-08 13:47:57','',523,'https://wp.momentry.ddns.net/?p=1496',0,'revision','',0),
(1497,6,'2026-05-08 14:10:05','2026-05-08 14:10:05','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:10:05','2026-05-08 14:10:05','',1356,'https://wp.momentry.ddns.net/?p=1497',0,'revision','',0),
(1498,6,'2026-05-08 14:10:24','2026-05-08 14:10:24','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:10:24','2026-05-08 14:10:24','',1356,'https://wp.momentry.ddns.net/?p=1498',0,'revision','',0),
(1499,6,'2026-05-08 14:12:17','2026-05-08 14:12:17','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:12:17','2026-05-08 14:12:17','',1356,'https://wp.momentry.ddns.net/?p=1499',0,'revision','',0),
(1500,6,'2026-05-08 14:17:20','2026-05-08 14:17:20','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:17:20','2026-05-08 14:17:20','',1356,'https://wp.momentry.ddns.net/?p=1500',0,'revision','',0),
(1501,6,'2026-05-08 14:17:36','2026-05-08 14:17:36','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:17:36','2026-05-08 14:17:36','',1356,'https://wp.momentry.ddns.net/?p=1501',0,'revision','',0),
(1502,6,'2026-05-08 14:22:28','2026-05-08 14:22:28','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:22:28','2026-05-08 14:22:28','',1356,'https://wp.momentry.ddns.net/?p=1502',0,'revision','',0),
(1503,6,'2026-05-08 14:22:57','2026-05-08 14:22:57','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-08 14:22:57','2026-05-08 14:22:57','',1356,'https://wp.momentry.ddns.net/?p=1503',0,'revision','',0),
(1505,1,'2026-05-09 10:26:26','2026-05-09 10:26:26','\n[momentry_api_dashboard_v8]\n','API console','','trash','closed','closed','','api-console__trashed','','','2026-05-22 03:49:22','2026-05-22 03:49:22','',0,'https://wp.momentry.ddns.net/?page_id=1505',0,'page','',0),
(1506,1,'2026-05-09 10:26:26','2026-05-09 10:26:26','\n[momentry_api_dashboard]\n','','','inherit','closed','closed','','1505-revision-v1','','','2026-05-09 10:26:26','2026-05-09 10:26:26','',1505,'https://wp.momentry.ddns.net/?p=1506',0,'revision','',0),
(1507,1,'2026-05-09 10:26:46','2026-05-09 10:26:46','\n[momentry_api_dashboard]\n','API_Test_SC','','inherit','closed','closed','','1505-revision-v1','','','2026-05-09 10:26:46','2026-05-09 10:26:46','',1505,'https://wp.momentry.ddns.net/?p=1507',0,'revision','',0),
(1508,6,'2026-05-11 07:29:49','2026-05-11 07:29:49','\n\n\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-11 07:29:49','2026-05-11 07:29:49','',1356,'https://wp.momentry.ddns.net/?p=1508',0,'revision','',0),
(1509,6,'2026-05-11 07:57:07','2026-05-11 07:57:07','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-11 07:57:07','2026-05-11 07:57:07','',1356,'https://wp.momentry.ddns.net/?p=1509',0,'revision','',0),
(1511,6,'2026-05-11 08:35:36','2026-05-11 08:35:36','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-11 08:35:36','2026-05-11 08:35:36','',1356,'https://wp.momentry.ddns.net/?p=1511',0,'revision','',0),
(1512,6,'2026-05-11 08:37:45','2026-05-11 08:37:45','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-11 08:37:45','2026-05-11 08:37:45','',1356,'https://wp.momentry.ddns.net/?p=1512',0,'revision','',0),
(1513,6,'2026-05-11 08:40:28','2026-05-11 08:40:28','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-11 08:40:28','2026-05-11 08:40:28','',1356,'https://wp.momentry.ddns.net/?p=1513',0,'revision','',0),
(1515,6,'2026-05-13 06:54:27','2026-05-13 06:54:27','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-13 06:54:27','2026-05-13 06:54:27','',1356,'https://wp.momentry.ddns.net/?p=1515',0,'revision','',0),
(1516,6,'2026-05-14 08:53:20','2026-05-14 08:53:20','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-14 08:53:20','2026-05-14 08:53:20','',1356,'https://wp.momentry.ddns.net/?p=1516',0,'revision','',0),
(1517,6,'2026-05-14 09:19:33','2026-05-14 09:19:33','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-14 09:19:33','2026-05-14 09:19:33','',1356,'https://wp.momentry.ddns.net/?p=1517',0,'revision','',0),
(1518,6,'2026-05-14 11:38:54','2026-05-14 11:38:54','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-14 11:38:54','2026-05-14 11:38:54','',1356,'https://wp.momentry.ddns.net/?p=1518',0,'revision','',0),
(1519,1,'2026-05-14 14:00:50','2026-05-14 14:00:50','\n[momentry_api_dashboard_v4]\n','Test API 05/17-SC','','trash','closed','closed','','1519-2__trashed','','','2026-05-21 06:12:39','2026-05-21 06:12:39','',0,'https://wp.momentry.ddns.net/?page_id=1519',0,'page','',0),
(1520,1,'2026-05-14 14:00:50','2026-05-14 14:00:50','\n[momentry_api_dashboard_v2]\n','','','inherit','closed','closed','','1519-revision-v1','','','2026-05-14 14:00:50','2026-05-14 14:00:50','',1519,'https://wp.momentry.ddns.net/?p=1520',0,'revision','',0),
(1522,4,'2026-05-15 07:21:39','2026-05-15 07:21:39','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 07:21:39','2026-05-15 07:21:39','',1359,'https://wp.momentry.ddns.net/?p=1522',0,'revision','',0),
(1523,4,'2026-05-15 08:41:39','2026-05-15 08:41:39','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 08:41:39','2026-05-15 08:41:39','',1359,'https://wp.momentry.ddns.net/?p=1523',0,'revision','',0),
(1524,4,'2026-05-15 08:48:22','2026-05-15 08:48:22','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 08:48:22','2026-05-15 08:48:22','',1359,'https://wp.momentry.ddns.net/?p=1524',0,'revision','',0),
(1525,4,'2026-05-15 08:55:10','2026-05-15 08:55:10','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 08:55:10','2026-05-15 08:55:10','',1359,'https://wp.momentry.ddns.net/?p=1525',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1526,4,'2026-05-15 08:58:12','2026-05-15 08:58:12','\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 08:58:12','2026-05-15 08:58:12','',1359,'https://wp.momentry.ddns.net/?p=1526',0,'revision','',0),
(1527,4,'2026-05-15 08:58:46','2026-05-15 08:58:46','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 08:58:46','2026-05-15 08:58:46','',1359,'https://wp.momentry.ddns.net/?p=1527',0,'revision','',0),
(1528,4,'2026-05-15 09:08:47','2026-05-15 09:08:47','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 09:08:47','2026-05-15 09:08:47','',1359,'https://wp.momentry.ddns.net/?p=1528',0,'revision','',0),
(1529,4,'2026-05-15 10:26:25','2026-05-15 10:26:25','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 10:26:25','2026-05-15 10:26:25','',1359,'https://wp.momentry.ddns.net/?p=1529',0,'revision','',0),
(1530,4,'2026-05-15 10:28:16','2026-05-15 10:28:16','\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 10:28:16','2026-05-15 10:28:16','',1359,'https://wp.momentry.ddns.net/?p=1530',0,'revision','',0),
(1531,4,'2026-05-15 10:28:28','2026-05-15 10:28:28','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 10:28:28','2026-05-15 10:28:28','',1359,'https://wp.momentry.ddns.net/?p=1531',0,'revision','',0),
(1532,4,'2026-05-15 10:29:54','2026-05-15 10:29:54','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 10:29:54','2026-05-15 10:29:54','',1359,'https://wp.momentry.ddns.net/?p=1532',0,'revision','',0),
(1533,4,'2026-05-15 10:36:26','2026-05-15 10:36:26','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-15 10:36:26','2026-05-15 10:36:26','',1359,'https://wp.momentry.ddns.net/?p=1533',0,'revision','',0),
(1534,4,'2026-05-16 14:43:01','2026-05-16 14:43:01','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','LT-Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-16 14:43:01','2026-05-16 14:43:01','',341,'https://m5wp.momentry.ddns.net/?p=1534',0,'revision','',0),
(1535,1,'2026-05-17 03:57:28','2026-05-17 03:57:28','\n[momentry_api_dashboard_v3]\n','','','inherit','closed','closed','','1519-revision-v1','','','2026-05-17 03:57:28','2026-05-17 03:57:28','',1519,'https://m5wp.momentry.ddns.net/?p=1535',0,'revision','',0),
(1536,1,'2026-05-17 04:01:41','2026-05-17 04:01:41','\n[momentry_api_dashboard_v4]\n','','','inherit','closed','closed','','1519-revision-v1','','','2026-05-17 04:01:41','2026-05-17 04:01:41','',1519,'https://m5wp.momentry.ddns.net/?p=1536',0,'revision','',0),
(1537,1,'2026-05-17 04:30:39','2026-05-17 04:30:39','\n\n\n\n\n\n
\n
\n
Momentry Studio
\n
⭐ Progress \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n','Progress','','publish','closed','closed','','progress','','','2026-05-25 11:26:44','2026-05-25 11:26:44','',0,'https://m5wp.momentry.ddns.net/?page_id=1537',0,'page','',0),
(1538,1,'2026-05-17 04:30:35','2026-05-17 04:30:35','','Progress','','inherit','closed','closed','','1537-revision-v1','','','2026-05-17 04:30:35','2026-05-17 04:30:35','',1537,'https://m5wp.momentry.ddns.net/?p=1538',0,'revision','',0),
(1539,1,'2026-05-17 04:31:28','2026-05-17 04:31:28','\nPlace Holder...
\n\n\n\n等待設計中...
\n','Progress','','inherit','closed','closed','','1537-revision-v1','','','2026-05-17 04:31:28','2026-05-17 04:31:28','',1537,'https://m5wp.momentry.ddns.net/?p=1539',0,'revision','',0),
(1540,1,'2026-05-17 04:32:35','2026-05-17 04:32:35','','Measure','','publish','open','open','','measure','','','2026-05-17 04:32:35','2026-05-17 04:32:35','',0,'https://m5wp.momentry.ddns.net/?p=1540',0,'post','',0),
(1541,1,'2026-05-17 04:31:57','2026-05-17 04:31:57','','Measure','','inherit','closed','closed','','1540-revision-v1','','','2026-05-17 04:31:57','2026-05-17 04:31:57','',1540,'https://m5wp.momentry.ddns.net/?p=1541',0,'revision','',0),
(1542,1,'2026-05-17 04:33:19','2026-05-17 04:33:19','','Measure','','trash','open','open','','__trashed','','','2026-05-17 04:33:19','2026-05-17 04:33:19','',0,'https://m5wp.momentry.ddns.net/?p=1542',0,'post','',0),
(1543,1,'2026-05-17 04:33:14','2026-05-17 04:33:14','','Measure','','inherit','closed','closed','','1542-revision-v1','','','2026-05-17 04:33:14','2026-05-17 04:33:14','',1542,'https://m5wp.momentry.ddns.net/?p=1543',0,'revision','',0),
(1545,1,'2026-05-17 04:33:51','2026-05-17 04:33:51','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Measure','','trash','closed','closed','','measure__trashed','','','2026-05-17 06:11:57','2026-05-17 06:11:57','',0,'https://m5wp.momentry.ddns.net/?page_id=1545',0,'page','',0),
(1546,1,'2026-05-17 04:33:43','2026-05-17 04:33:43','','Measure','','inherit','closed','closed','','1545-revision-v1','','','2026-05-17 04:33:43','2026-05-17 04:33:43','',1545,'https://m5wp.momentry.ddns.net/?p=1546',0,'revision','',0),
(1547,1,'2026-05-17 04:34:19','2026-05-17 04:34:19','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Examination','','trash','closed','closed','','examination__trashed','','','2026-05-17 05:36:18','2026-05-17 05:36:18','',0,'https://m5wp.momentry.ddns.net/?page_id=1547',0,'page','',0),
(1548,1,'2026-05-17 04:34:12','2026-05-17 04:34:12','','Examination','','inherit','closed','closed','','1547-revision-v1','','','2026-05-17 04:34:12','2026-05-17 04:34:12','',1547,'https://m5wp.momentry.ddns.net/?p=1548',0,'revision','',0),
(1549,1,'2026-05-17 04:36:18','2026-05-17 04:36:18','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Measure','','inherit','closed','closed','','1545-revision-v1','','','2026-05-17 04:36:18','2026-05-17 04:36:18','',1545,'https://m5wp.momentry.ddns.net/?p=1549',0,'revision','',0),
(1550,1,'2026-05-17 04:36:30','2026-05-17 04:36:30','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Examination','','inherit','closed','closed','','1547-revision-v1','','','2026-05-17 04:36:30','2026-05-17 04:36:30','',1547,'https://m5wp.momentry.ddns.net/?p=1550',0,'revision','',0),
(1551,1,'2026-05-17 04:40:32','2026-05-17 04:40:32','\n[momentry_api_dashboard_v4]\n','Test API 05/17-SC','','inherit','closed','closed','','1519-revision-v1','','','2026-05-17 04:40:32','2026-05-17 04:40:32','',1519,'https://m5wp.momentry.ddns.net/?p=1551',0,'revision','',0),
(1552,1,'2026-05-17 05:01:36','2026-05-17 05:01:36','\n[momentry_api_dashboard_v5]\n','API_Test_SC','','inherit','closed','closed','','1505-revision-v1','','','2026-05-17 05:01:36','2026-05-17 05:01:36','',1505,'https://m5wp.momentry.ddns.net/?p=1552',0,'revision','',0),
(1553,1,'2026-05-17 05:36:22','2026-05-17 05:36:22','\n[momentry_api_dashboard_v5]\n','Examination','','inherit','closed','closed','','1505-revision-v1','','','2026-05-17 05:36:22','2026-05-17 05:36:22','',1505,'https://m5wp.momentry.ddns.net/?p=1553',0,'revision','',0),
(1554,1,'2026-05-17 05:54:09','2026-05-17 05:54:09','\n[momentry_api_dashboard_v6]\n','Examination','','inherit','closed','closed','','1505-revision-v1','','','2026-05-17 05:54:09','2026-05-17 05:54:09','',1505,'https://m5wp.momentry.ddns.net/?p=1554',0,'revision','',0),
(1555,1,'2026-05-17 06:10:20','2026-05-17 06:10:20','\n\n\n\n\n \n
\n \n
搜尋品質評估入口。觸發 Evaluation 並查看整體與各維度指標結果。
\n
\n\n \n
\n
Evaluation Trigger
\n
\n
\n 點擊按鈕觸發搜尋品質評估流程。 \n 系統會跑目前設定好的考題並更新最新指標。\n
\n
\n ▶︎ Run Evaluation \n \n Running… \n \n
\n
\n
\n\n \n
\n
Overall
\n
\n
\n
\n
Hit @ 3
\n
—
\n
前 3 名命中率
\n
\n
\n
MRR
\n
—
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
—
\n
平均時間誤差
\n
\n
\n
Latency
\n
—
\n
平均 API 延遲
\n
\n
\n
\n\n \n
\n
\n Core Dimensions\n WHO / WHERE / ACTION \n
\n
\n\n
\n
WHO
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
WHERE
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
ACTION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
\n Advanced Dimensions\n WHAT / COMBINATION \n
\n
\n\n
\n
WHAT
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
COMBINATION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
Last Evaluation
\n
\n
\n
\n\n
\n\n\n','Measure -WW','','inherit','closed','closed','','1035-revision-v1','','','2026-05-17 06:10:20','2026-05-17 06:10:20','',1035,'https://m5wp.momentry.ddns.net/?p=1555',0,'revision','',0),
(1556,1,'2026-05-17 06:28:10','2026-05-17 06:28:10','\n[momentry_api_dashboard_v7]\n','Examination','','inherit','closed','closed','','1505-revision-v1','','','2026-05-17 06:28:10','2026-05-17 06:28:10','',1505,'https://m5wp.momentry.ddns.net/?p=1556',0,'revision','',0),
(1557,1,'2026-05-17 06:42:13','2026-05-17 06:42:13','\n[momentry_api_dashboard_v8]\n','Examination','','inherit','closed','closed','','1505-revision-v1','','','2026-05-17 06:42:13','2026-05-17 06:42:13','',1505,'https://m5wp.momentry.ddns.net/?p=1557',0,'revision','',0),
(1558,1,'2026-05-18 00:49:49','2026-05-18 00:49:49','\n
\n\n\n\n[ms_login_form]\n','Log In','','inherit','closed','closed','','44-revision-v1','','','2026-05-18 00:49:49','2026-05-18 00:49:49','',44,'https://m5wp.momentry.ddns.net/?p=1558',0,'revision','',0),
(1559,1,'2026-05-18 00:49:57','2026-05-18 00:49:57','\n[ms_lost_password_form]\n','Forgot Password','','inherit','closed','closed','','1457-revision-v1','','','2026-05-18 00:49:57','2026-05-18 00:49:57','',1457,'https://m5wp.momentry.ddns.net/?p=1559',0,'revision','',0),
(1560,1,'2026-05-18 00:50:16','2026-05-18 00:50:16','\n\n
Explore \n\n
\n \n Downloads \n Desktop \n \n\nLoad Files \n
\n\n
Please select a directory.
\n
\n
\n\n\n\n\n','Explore-Test-SC','','inherit','closed','closed','','1434-revision-v1','','','2026-05-18 00:50:16','2026-05-18 00:50:16','',1434,'https://m5wp.momentry.ddns.net/?p=1560',0,'revision','',0),
(1561,4,'2026-05-18 04:45:33','2026-05-18 04:45:33','\n\n\n\n\n\n \n
\n\n \n
所有人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉辨識從此人物分類移除嗎?
\n
您仍可以從人物管理將其加回
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-18 04:45:33','2026-05-18 04:45:33','',1359,'https://m5wp.momentry.ddns.net/?p=1561',0,'revision','',0),
(1562,6,'2026-05-18 06:44:27','2026-05-18 06:44:27','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-18 06:44:27','2026-05-18 06:44:27','',1356,'https://m5wp.momentry.ddns.net/?p=1562',0,'revision','',0),
(1563,6,'2026-05-18 06:49:46','2026-05-18 06:49:46','\n\n\n\n','People-Files 人物-檔案管理 -LT','','inherit','closed','closed','','1356-revision-v1','','','2026-05-18 06:49:46','2026-05-18 06:49:46','',1356,'https://m5wp.momentry.ddns.net/?p=1563',0,'revision','',0),
(1564,4,'2026-05-18 09:40:19','2026-05-18 09:40:19','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-18 09:40:19','2026-05-18 09:40:19','',1359,'https://m5wp.momentry.ddns.net/?p=1564',0,'revision','',0),
(1565,4,'2026-05-18 09:49:34','2026-05-18 09:49:34','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-18 09:49:34','2026-05-18 09:49:34','',1359,'https://m5wp.momentry.ddns.net/?p=1565',0,'revision','',0),
(1566,4,'2026-05-18 09:54:33','2026-05-18 09:54:33','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-18 09:54:33','2026-05-18 09:54:33','',1359,'https://m5wp.momentry.ddns.net/?p=1566',0,'revision','',0),
(1567,4,'2026-05-18 09:57:26','2026-05-18 09:57:26','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-18 09:57:26','2026-05-18 09:57:26','',1359,'https://m5wp.momentry.ddns.net/?p=1567',0,'revision','',0),
(1568,1,'2026-05-19 00:57:08','2026-05-19 00:57:08','\n[momentry_api_logs]\n','Logs','','publish','closed','closed','','logs','','','2026-05-26 07:05:06','2026-05-26 07:05:06','',0,'https://m5wp.momentry.ddns.net/?page_id=1568',0,'page','',0),
(1569,1,'2026-05-19 00:57:04','2026-05-19 00:57:04','','Logs','','inherit','closed','closed','','1568-revision-v1','','','2026-05-19 00:57:04','2026-05-19 00:57:04','',1568,'https://m5wp.momentry.ddns.net/?p=1569',0,'revision','',0),
(1570,1,'2026-05-19 00:59:30','2026-05-19 00:59:30','\n\n\n
\n
\n
Momentry Studio
\n
⭐ Metrics \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n\n\n','Metrics','','publish','closed','closed','','metrics','','','2026-05-25 11:29:40','2026-05-25 11:29:40','',0,'https://m5wp.momentry.ddns.net/?page_id=1570',0,'page','',0),
(1571,1,'2026-05-19 00:59:25','2026-05-19 00:59:25','','Metrics','','inherit','closed','closed','','1570-revision-v1','','','2026-05-19 00:59:25','2026-05-19 00:59:25','',1570,'https://m5wp.momentry.ddns.net/?p=1571',0,'revision','',0),
(1572,1,'2026-05-19 01:03:17','2026-05-19 01:03:17','\n[momentry_api_dashboard_v8]\n','API console','','inherit','closed','closed','','1505-revision-v1','','','2026-05-19 01:03:17','2026-05-19 01:03:17','',1505,'https://m5wp.momentry.ddns.net/?p=1572',0,'revision','',0),
(1573,1,'2026-05-19 01:07:05','2026-05-19 01:07:05','\n\n\n\n\n\n
\n
\n
Momentry Studio
\n
⭐ Evaluation \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n','Evaluation','','publish','closed','closed','','evaluation','','','2026-05-25 11:32:04','2026-05-25 11:32:04','',0,'https://m5wp.momentry.ddns.net/?page_id=1573',0,'page','',0),
(1574,1,'2026-05-19 01:07:02','2026-05-19 01:07:02','','Evaluation','','inherit','closed','closed','','1573-revision-v1','','','2026-05-19 01:07:02','2026-05-19 01:07:02','',1573,'https://m5wp.momentry.ddns.net/?p=1574',0,'revision','',0),
(1575,4,'2026-05-19 12:12:34','2026-05-19 12:12:34','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People-People 人物-人物管理 -WW','','inherit','closed','closed','','1359-revision-v1','','','2026-05-19 12:12:34','2026-05-19 12:12:34','',1359,'https://m5wp.momentry.ddns.net/?p=1575',0,'revision','',0),
(1576,4,'2026-05-19 12:15:46','2026-05-19 12:15:46','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-19 12:15:46','2026-05-19 12:15:46','',1359,'https://m5wp.momentry.ddns.net/?p=1576',0,'revision','',0),
(1577,6,'2026-05-20 06:04:44','2026-05-20 06:04:44','\n
\n\n\n\n\n\n
\n
\n
Momentry Studio
\n
⭐ Upgrade plan \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n\n\n','Upgrade plan','','inherit','closed','closed','','627-revision-v1','','','2026-05-20 06:04:44','2026-05-20 06:04:44','',627,'https://m5wp.momentry.ddns.net/?p=1577',0,'revision','',0),
(1578,6,'2026-05-20 06:06:05','2026-05-20 06:06:05','\n\n\n
\n
\n
\n\n
\n
問題回報 \n\n
\n \n 傳送 \n
\n\n
\n
\n
\n\n
\n\n
\n
常見問題 \n\n
\n
\n 歷史記錄怎麼刪除? \n + \n \n
\n
\n 請到左側歷史記錄列表,將滑鼠移到要刪除的項目上,點擊刪除按鈕即可移除該筆記錄。\n
\n
\n
\n\n
\n
\n 如何更改用戶名? \n + \n \n
\n
\n 若目前系統尚未開放前台修改用戶名,請聯繫管理員或支援窗口協助處理。\n
\n
\n
\n\n
\n
\n 如何查看以前搜索過的視頻? \n + \n \n
\n
\n 您可以從左側歷史記錄中點選先前的搜尋項目,即可查看當時搜尋過的影片與結果內容。\n
\n
\n
\n
\n
\n
\n\n\n\n\n','Help','','inherit','closed','closed','','641-revision-v1','','','2026-05-20 06:06:05','2026-05-20 06:06:05','',641,'https://m5wp.momentry.ddns.net/?p=1578',0,'revision','',0),
(1579,6,'2026-05-20 06:07:32','2026-05-20 06:07:32','\n\n\n
\n\n
\n\n
\n\n \n
\n\n \n
\n
\n\n
\n
登入通知
\n
\n
\n \n \n \n\n
\n ? \n 每次登入會發送 Email 通知 \n
\n
\n
\n\n
\n
語言
\n\n
\n \n 繁體中文 \n ▾ \n \n\n \n
\n
\n
\n\n
\n\n
\n 保存更改 \n
\n\n
\n
\n\n\n\n\n','Settings','','inherit','closed','closed','','639-revision-v1','','','2026-05-20 06:07:32','2026-05-20 06:07:32','',639,'https://m5wp.momentry.ddns.net/?p=1579',0,'revision','',0),
(1580,6,'2026-05-20 06:08:57','2026-05-20 06:08:57','\n\n\n
\n
\n
Momentry Studio
\n
🎨 Personalization \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n\n\n','Personalization','','inherit','closed','closed','','635-revision-v1','','','2026-05-20 06:08:57','2026-05-20 06:08:57','',635,'https://m5wp.momentry.ddns.net/?p=1580',0,'revision','',0),
(1581,6,'2026-05-20 06:10:23','2026-05-20 06:10:23','\n\n\n\n','Collection','','inherit','closed','closed','','1356-revision-v1','','','2026-05-20 06:10:23','2026-05-20 06:10:23','',1356,'https://m5wp.momentry.ddns.net/?p=1581',0,'revision','',0),
(1582,6,'2026-05-20 06:10:52','2026-05-20 06:10:52','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-20 06:10:52','2026-05-20 06:10:52','',1356,'https://m5wp.momentry.ddns.net/?p=1582',0,'revision','',0),
(1584,6,'2026-05-20 06:19:42','2026-05-20 06:19:42','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-20 06:19:42','2026-05-20 06:19:42','',341,'https://m5wp.momentry.ddns.net/?p=1584',0,'revision','',0),
(1585,4,'2026-05-20 07:16:26','2026-05-20 07:16:26','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n 15,\n \'headers\' => [\n \'X-API-Key\' => $api_key,\n ],\n ]);\n\n $identities_json = \'[]\';\n\n if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {\n $body = json_decode(wp_remote_retrieve_body($response), true);\n if (!empty($body[\'identities\']) && is_array($body[\'identities\'])) {\n $identities_json = wp_json_encode($body[\'identities\']);\n }\n }\n?>\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 07:16:26','2026-05-20 07:16:26','',1359,'https://m5wp.momentry.ddns.net/?p=1585',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1586,4,'2026-05-20 07:17:09','2026-05-20 07:17:09','\n\n\n\n\n\n \n
\n\n \n
已知人物:
\n\n \n
\n\n \n
\n\n \n
待定人物:
\n\n \n
\n\n
\n\n\n\n\n \n
\n \n \n \n 返回\n \n\n \n
\n 編輯\n \n \n \n \n \n\n \n \n\n \n
\n\n \n
\n \n
\n\n \n \n\n \n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n
\n \n \n
\n \n
\n \n
\n \n \n
\n
\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 07:17:09','2026-05-20 07:17:09','',1359,'https://m5wp.momentry.ddns.net/?p=1586',0,'revision','',0),
(1587,4,'2026-05-20 07:21:16','2026-05-20 07:21:16','\n\n\n\n\n\n \n
\n\n
已知人物:
\n
\n\n
\n\n
待定人物:
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n\n $identities_json = \'[]\';\n if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {\n $body = json_decode(wp_remote_retrieve_body($response), true);\n if (!empty($body[\'identities\']) && is_array($body[\'identities\'])) {\n $identities_json = wp_json_encode($body[\'identities\']);\n }\n }\n\n echo \'\';\n\n});\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 07:21:16','2026-05-20 07:21:16','',1359,'https://m5wp.momentry.ddns.net/?p=1587',0,'revision','',0),
(1588,6,'2026-05-20 07:24:32','2026-05-20 07:24:32','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-20 07:24:32','2026-05-20 07:24:32','',1356,'https://m5wp.momentry.ddns.net/?p=1588',0,'revision','',0),
(1589,4,'2026-05-20 07:25:58','2026-05-20 07:25:58','\n\n\n\n\n\n \n
\n\n
已知人物:
\n
\n\n
\n\n
待定人物:
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 07:25:58','2026-05-20 07:25:58','',1359,'https://m5wp.momentry.ddns.net/?p=1589',0,'revision','',0),
(1590,6,'2026-05-20 07:47:15','2026-05-20 07:47:15','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-20 07:47:15','2026-05-20 07:47:15','',1356,'https://m5wp.momentry.ddns.net/?p=1590',0,'revision','',0),
(1591,4,'2026-05-20 08:40:33','2026-05-20 08:40:33','\n\n\n\n\n\n \n
\n\n
已知人物:
\n
\n\n
\n\n
待定人物:
\n
\n\n \n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n\n $identities_json = \'[]\';\n if (!is_wp_error($response) && wp_remote_retrieve_response_code($response) === 200) {\n $body = json_decode(wp_remote_retrieve_body($response), true);\n if (!empty($body[\'identities\']) && is_array($body[\'identities\'])) {\n $identities_json = wp_json_encode($body[\'identities\']);\n }\n }\n\n echo \'\';\n\n});\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 08:40:33','2026-05-20 08:40:33','',1359,'https://m5wp.momentry.ddns.net/?p=1591',0,'revision','',0),
(1592,4,'2026-05-20 08:45:15','2026-05-20 08:45:15','\n\n\n\n\n\n \n
\n\n
已知人物:
\n
\n\n
\n\n
待定人物:
\n
\n\n \n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 08:45:15','2026-05-20 08:45:15','',1359,'https://m5wp.momentry.ddns.net/?p=1592',0,'revision','',0),
(1593,4,'2026-05-20 08:47:56','2026-05-20 08:47:56','\n\n\n\n\n\n \n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 08:47:56','2026-05-20 08:47:56','',1359,'https://m5wp.momentry.ddns.net/?p=1593',0,'revision','',0),
(1594,4,'2026-05-20 09:00:34','2026-05-20 09:00:34','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n\n
\n\n
待定人物:
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 09:00:34','2026-05-20 09:00:34','',1359,'https://m5wp.momentry.ddns.net/?p=1594',0,'revision','',0),
(1595,4,'2026-05-20 09:06:57','2026-05-20 09:06:57','\n\n\n\n\n\n
\n\n \n
\n 已知人物 \n 待定人物 \n
\n\n \n
\n\n \n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 09:06:57','2026-05-20 09:06:57','',1359,'https://m5wp.momentry.ddns.net/?p=1595',0,'revision','',0),
(1596,4,'2026-05-20 09:08:41','2026-05-20 09:08:41','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n\n
\n\n
待定人物:
\n
\n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-20 09:08:41','2026-05-20 09:08:41','',1359,'https://m5wp.momentry.ddns.net/?p=1596',0,'revision','',0),
(1597,1,'2026-05-20 11:46:30','2026-05-20 11:46:30','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Logs','','inherit','closed','closed','','1568-revision-v1','','','2026-05-20 11:46:30','2026-05-20 11:46:30','',1568,'https://m5wp.momentry.ddns.net/?p=1597',0,'revision','',0),
(1598,1,'2026-05-20 11:47:00','2026-05-20 11:47:00','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Metrics','','inherit','closed','closed','','1570-revision-v1','','','2026-05-20 11:47:00','2026-05-20 11:47:00','',1570,'https://m5wp.momentry.ddns.net/?p=1598',0,'revision','',0),
(1599,1,'2026-05-20 11:47:17','2026-05-20 11:47:17','\nPlace Holder…
\n\n\n\n等待設計中…
\n','Evaluation','','inherit','closed','closed','','1573-revision-v1','','','2026-05-20 11:47:17','2026-05-20 11:47:17','',1573,'https://m5wp.momentry.ddns.net/?p=1599',0,'revision','',0),
(1600,1,'2026-05-20 11:58:05','2026-05-20 11:58:05','\n\n
\n[momentry_api_dashboard_v9]\n
\n
\n','Momentry API console','','publish','closed','closed','','momentry-api-console','','','2026-05-24 01:28:49','2026-05-24 01:28:49','',0,'https://m5wp.momentry.ddns.net/?page_id=1600',0,'page','',0),
(1601,1,'2026-05-20 11:58:02','2026-05-20 11:58:02','\n\n
\n[momentry_api_console_v9]\n
\n
\n','v9 版本 API Console - DH','','inherit','closed','closed','','1600-revision-v1','','','2026-05-20 11:58:02','2026-05-20 11:58:02','',1600,'https://m5wp.momentry.ddns.net/?p=1601',0,'revision','',0),
(1602,1,'2026-05-20 11:58:54','2026-05-20 11:58:54','\n\n
\n[momentry_api_console_v9]\n
\n
\n','API Console - DH','','inherit','closed','closed','','1600-revision-v1','','','2026-05-20 11:58:54','2026-05-20 11:58:54','',1600,'https://m5wp.momentry.ddns.net/?p=1602',0,'revision','',0),
(1603,1,'2026-05-20 12:17:30','2026-05-20 12:17:30','\n\n
\n[momentry_api_dashboard_v9]\n
\n
\n','API Console - DH','','inherit','closed','closed','','1600-revision-v1','','','2026-05-20 12:17:30','2026-05-20 12:17:30','',1600,'https://m5wp.momentry.ddns.net/?p=1603',0,'revision','',0),
(1605,5,'2026-05-20 15:11:12','2026-05-20 15:11:12','\n\n\n
\n
\n
\n\n
\n
問題回報 \n\n
\n \n 傳送 \n
\n\n
\n
\n
\n\n
\n\n
\n
常見問題 \n\n
\n
\n 歷史記錄怎麼刪除? \n + \n \n
\n
\n 請到左側歷史記錄列表,將滑鼠移到要刪除的項目上,點擊刪除按鈕即可移除該筆記錄。\n
\n
\n
\n\n
\n
\n 如何更改用戶名? \n + \n \n
\n
\n 若目前系統尚未開放前台修改用戶名,請聯繫管理員或支援窗口協助處理。\n
\n
\n
\n\n
\n
\n 如何查看以前搜索過的視頻? \n - \n \n
\n
\n 您可以從左側歷史記錄中點選先前的搜尋項目,即可查看當時搜尋過的影片與結果內容。\n
\n
\n
\n
\n
\n
\n\n\n\n\n','Help','','inherit','closed','closed','','641-revision-v1','','','2026-05-20 15:11:12','2026-05-20 15:11:12','',641,'https://m5wp.momentry.ddns.net/?p=1605',0,'revision','',0),
(1607,5,'2026-05-20 15:12:54','2026-05-20 15:12:54','\n\n\n
\n\n
\n\n
\n\n \n
\n\n \n
\n
\n\n
\n
登入通知
\n
\n
\n \n \n \n\n
\n ? \n 每次登入會發送 Email 通知 \n
\n
\n
\n\n
\n
語言
\n\n
\n \n 繁體中文 \n ▾ \n \n\n \n
\n
\n
\n\n
\n\n
\n 保存更改 \n
\n\n
\n
\n\n\n\n\n','Settings','','inherit','closed','closed','','639-revision-v1','','','2026-05-20 15:12:54','2026-05-20 15:12:54','',639,'https://m5wp.momentry.ddns.net/?p=1607',0,'revision','',0),
(1608,4,'2026-05-21 01:36:24','2026-05-21 01:36:24','\n\n\n\n\n \n
\n \n
搜尋品質評估入口。觸發 Evaluation 並查看整體與各維度指標結果。
\n
\n\n \n
\n
Evaluation Trigger
\n
\n
\n 點擊按鈕觸發搜尋品質評估流程。 \n 系統會跑目前設定好的考題並更新最新指標。\n
\n
\n ▶︎ Run Evaluation \n \n Running… \n \n
\n
\n
\n\n \n
\n
Overall
\n
\n
\n
\n
Hit @ 3
\n
—
\n
前 3 名命中率
\n
\n
\n
MRR
\n
—
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
—
\n
平均時間誤差
\n
\n
\n
Latency
\n
—
\n
平均 API 延遲
\n
\n
\n
\n\n \n
\n
\n Core Dimensions\n WHO / WHERE / ACTION \n
\n
\n\n
\n
WHO
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
WHERE
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
ACTION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
\n Advanced Dimensions\n WHAT / COMBINATION \n
\n
\n\n
\n
WHAT
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
COMBINATION
\n
Queries —
\n
Hit @ 3 —
\n
MRR —
\n
Time Error —
\n
\n\n
\n
\n\n \n
\n
Last Evaluation
\n
\n
\n
\n\n
\n\n\n','Measure','','inherit','closed','closed','','1035-revision-v1','','','2026-05-21 01:36:24','2026-05-21 01:36:24','',1035,'https://m5wp.momentry.ddns.net/?p=1608',0,'revision','',0),
(1609,4,'2026-05-21 01:47:35','2026-05-21 01:47:35','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-21 01:47:35','2026-05-21 01:47:35','',523,'https://m5wp.momentry.ddns.net/?p=1609',0,'revision','',0),
(1610,4,'2026-05-21 02:04:21','2026-05-21 02:04:21','\n\n \n\n\n\n\n
\n
\n
\n
‹ \n
以下是找到符合 風景 的照片與影片 \n
\n
\n \n \n \n \n \n \n
\n\n \n
\n
排序方式 \n \n
\n 時間 \n 檔案大小 \n 檔名 \n
\n
\n \n
\n 舊 → 新 \n 新 → 舊 \n
\n
\n\n
\n\n \n
\n
過濾方式 \n
\n 照片 \n 影片 \n
\n
\n\n
\n\n \n
\n
時間 \n
\n 區間 \n 之前 \n 之後 \n
\n
\n
\n
\n
\n ‹ \n ▾ \n › \n
\n
\n
\n \n
\n
\n
\n\n
\n\n \n
\n
檔案大小 \n
— —
\n
\n
1 MB 以下 100 GB+
\n
∞ 不限大小 \n
\n\n \n
\n
影片時長 \n
— —
\n
\n
3 秒以下 3 小時以上
\n
∞ 不限時長 \n
\n\n
套用篩選 \n
\n
\n
\n
\n
\n
\n
\n
\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n 關閉 \n
\n
\n
\n
\n','search-results','','inherit','closed','closed','','514-revision-v1','','','2026-05-21 02:04:21','2026-05-21 02:04:21','',514,'https://m5wp.momentry.ddns.net/?p=1610',0,'revision','',0),
(1611,4,'2026-05-21 03:18:18','2026-05-21 03:18:18','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-21 03:18:18','2026-05-21 03:18:18','',1359,'https://m5wp.momentry.ddns.net/?p=1611',0,'revision','',0),
(1612,1,'2026-05-21 05:17:48','2026-05-21 05:17:48','\n[raptor_api_dashboard_v1]\n','Raptor API Test Lab','','publish','closed','closed','','raptor-api-console','','','2026-05-22 03:42:30','2026-05-22 03:42:30','',0,'https://m5wp.momentry.ddns.net/?page_id=1612',0,'page','',0),
(1613,1,'2026-05-21 05:17:41','2026-05-21 05:17:41','','Raptor API Test Lab','','inherit','closed','closed','','1612-revision-v1','','','2026-05-21 05:17:41','2026-05-21 05:17:41','',1612,'https://m5wp.momentry.ddns.net/?p=1613',0,'revision','',0),
(1614,1,'2026-05-21 05:17:49','2026-05-21 05:17:49','\n[raptor_api_test_lab]\n','Raptor API Test Lab','','inherit','closed','closed','','1612-revision-v1','','','2026-05-21 05:17:49','2026-05-21 05:17:49','',1612,'https://m5wp.momentry.ddns.net/?p=1614',0,'revision','',0),
(1615,1,'2026-05-21 06:12:57','2026-05-21 06:12:57','\n[raptor_api_dashboard_v1]\n','Raptor API Test Lab','','inherit','closed','closed','','1612-revision-v1','','','2026-05-21 06:12:57','2026-05-21 06:12:57','',1612,'https://m5wp.momentry.ddns.net/?p=1615',0,'revision','',0),
(1617,4,'2026-05-22 05:44:54','2026-05-22 05:44:54','\n \n \n\n\n\n\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
排序方式 \n
\n 時間 \n 檔案大小 \n 檔名 \n
\n
\n
\n 舊 → 新 \n 新 → 舊 \n
\n
\n
\n
\n
過濾方式 \n
\n 照片 \n 影片 \n
\n
\n
\n
\n
時間 \n
\n 區間 \n 之前 \n 之後 \n
\n
\n
\n
\n
\n ‹ \n ▾ \n › \n
\n
\n
\n \n
\n
\n
\n
\n
\n
檔案大小 \n
— —
\n
\n
1 MB 以下 100 GB+
\n
∞ 不限大小 \n
\n
\n
影片時長 \n
— —
\n
\n
3 秒以下 3 小時以上
\n
∞ 不限時長 \n
\n
套用篩選 \n
\n\n \n
\n
\n
\n\n
\n
\n Recently viewed \n 查看全部 \n
\n
\n
\n
\n
\n
\n','media-detail','','inherit','closed','closed','','565-revision-v1','','','2026-05-22 05:44:54','2026-05-22 05:44:54','',565,'https://m5wp.momentry.ddns.net/?p=1617',0,'revision','',0),
(1618,6,'2026-05-22 07:43:55','2026-05-22 07:43:55','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-22 07:43:55','2026-05-22 07:43:55','',1356,'https://m5wp.momentry.ddns.net/?p=1618',0,'revision','',0),
(1619,6,'2026-05-22 07:46:19','2026-05-22 07:46:19','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-22 07:46:19','2026-05-22 07:46:19','',1356,'https://m5wp.momentry.ddns.net/?p=1619',0,'revision','',0),
(1620,6,'2026-05-22 07:54:36','2026-05-22 07:54:36','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-22 07:54:36','2026-05-22 07:54:36','',1356,'https://m5wp.momentry.ddns.net/?p=1620',0,'revision','',0),
(1621,6,'2026-05-22 07:55:28','2026-05-22 07:55:28','\n\n\n\n','Library','','inherit','closed','closed','','1356-revision-v1','','','2026-05-22 07:55:28','2026-05-22 07:55:28','',1356,'https://m5wp.momentry.ddns.net/?p=1621',0,'revision','',0),
(1623,4,'2026-05-22 09:38:46','2026-05-22 09:38:46','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 刪除\n \n \n \n \n \n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-22 09:38:46','2026-05-22 09:38:46','',1359,'https://m5wp.momentry.ddns.net/?p=1623',0,'revision','',0),
(1624,4,'2026-05-22 09:51:38','2026-05-22 09:51:38','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-22 09:51:38','2026-05-22 09:51:38','',1359,'https://m5wp.momentry.ddns.net/?p=1624',0,'revision','',0),
(1625,4,'2026-05-22 11:46:42','2026-05-22 11:46:42','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-22 11:46:42','2026-05-22 11:46:42','',1359,'https://m5wp.momentry.ddns.net/?p=1625',0,'revision','',0),
(1626,1,'2026-05-24 01:28:49','2026-05-24 01:28:49','\n\n
\n[momentry_api_dashboard_v9]\n
\n
\n','Momentry API console','','inherit','closed','closed','','1600-revision-v1','','','2026-05-24 01:28:49','2026-05-24 01:28:49','',1600,'https://m5wp.momentry.ddns.net/?p=1626',0,'revision','',0),
(1627,1,'2026-05-24 01:45:12','2026-05-24 01:45:12','\n[momentry_upload_debug]\n','Upload Debug','','trash','closed','closed','','upload-debug__trashed','','','2026-05-24 09:25:23','2026-05-24 09:25:23','',0,'https://m5wp.momentry.ddns.net/?page_id=1627',0,'page','',0),
(1628,1,'2026-05-24 01:45:07','2026-05-24 01:45:07','\n[momentry_upload_debug]\n','Upload Debug','','inherit','closed','closed','','1627-revision-v1','','','2026-05-24 01:45:07','2026-05-24 01:45:07','',1627,'https://m5wp.momentry.ddns.net/?p=1628',0,'revision','',0),
(1633,4,'2026-05-25 01:16:46','2026-05-25 01:16:46','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 01:16:46','2026-05-25 01:16:46','',1359,'https://m5wp.momentry.ddns.net/?p=1633',0,'revision','',0),
(1634,4,'2026-05-25 01:37:36','2026-05-25 01:37:36','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 01:37:36','2026-05-25 01:37:36','',1359,'https://m5wp.momentry.ddns.net/?p=1634',0,'revision','',0),
(1635,4,'2026-05-25 02:03:44','2026-05-25 02:03:44','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:03:44','2026-05-25 02:03:44','',1359,'https://m5wp.momentry.ddns.net/?p=1635',0,'revision','',0),
(1636,4,'2026-05-25 02:08:06','2026-05-25 02:08:06','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:08:06','2026-05-25 02:08:06','',1359,'https://m5wp.momentry.ddns.net/?p=1636',0,'revision','',0),
(1637,4,'2026-05-25 02:34:02','2026-05-25 02:34:02','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n \n \n \n 返回\n \n\n
\n 編輯\n \n \n \n \n \n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:34:02','2026-05-25 02:34:02','',1359,'https://m5wp.momentry.ddns.net/?p=1637',0,'revision','',0),
(1638,4,'2026-05-25 02:36:20','2026-05-25 02:36:20','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:36:20','2026-05-25 02:36:20','',1359,'https://m5wp.momentry.ddns.net/?p=1638',0,'revision','',0),
(1639,4,'2026-05-25 02:50:51','2026-05-25 02:50:51','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:50:51','2026-05-25 02:50:51','',1359,'https://m5wp.momentry.ddns.net/?p=1639',0,'revision','',0),
(1640,4,'2026-05-25 02:51:17','2026-05-25 02:51:17','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:51:17','2026-05-25 02:51:17','',1359,'https://m5wp.momentry.ddns.net/?p=1640',0,'revision','',0),
(1641,4,'2026-05-25 02:51:31','2026-05-25 02:51:31','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:51:31','2026-05-25 02:51:31','',1359,'https://m5wp.momentry.ddns.net/?p=1641',0,'revision','',0),
(1642,4,'2026-05-25 02:52:49','2026-05-25 02:52:49','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:52:49','2026-05-25 02:52:49','',1359,'https://m5wp.momentry.ddns.net/?p=1642',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1643,4,'2026-05-25 02:55:53','2026-05-25 02:55:53','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 02:55:53','2026-05-25 02:55:53','',1359,'https://m5wp.momentry.ddns.net/?p=1643',0,'revision','',0),
(1644,6,'2026-05-25 03:24:51','2026-05-25 03:24:51','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-25 03:24:51','2026-05-25 03:24:51','',523,'https://m5wp.momentry.ddns.net/?p=1644',0,'revision','',0),
(1645,6,'2026-05-25 03:29:50','2026-05-25 03:29:50','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-25 03:29:50','2026-05-25 03:29:50','',523,'https://m5wp.momentry.ddns.net/?p=1645',0,'revision','',0),
(1646,6,'2026-05-25 03:33:01','2026-05-25 03:33:01','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-25 03:33:01','2026-05-25 03:33:01','',341,'https://m5wp.momentry.ddns.net/?p=1646',0,'revision','',0),
(1647,6,'2026-05-25 03:35:13','2026-05-25 03:35:13','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-25 03:35:13','2026-05-25 03:35:13','',341,'https://m5wp.momentry.ddns.net/?p=1647',0,'revision','',0),
(1648,6,'2026-05-25 03:42:48','2026-05-25 03:42:48','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-25 03:42:48','2026-05-25 03:42:48','',523,'https://m5wp.momentry.ddns.net/?p=1648',0,'revision','',0),
(1650,6,'2026-05-25 05:51:04','2026-05-25 05:51:04','\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-25 05:51:04','2026-05-25 05:51:04','',523,'https://m5wp.momentry.ddns.net/?p=1650',0,'revision','',0),
(1651,6,'2026-05-25 05:54:52','2026-05-25 05:54:52','\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-25 05:54:52','2026-05-25 05:54:52','',523,'https://m5wp.momentry.ddns.net/?p=1651',0,'revision','',0),
(1652,6,'2026-05-25 06:18:36','2026-05-25 06:18:36','\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-25 06:18:36','2026-05-25 06:18:36','',523,'https://m5wp.momentry.ddns.net/?p=1652',0,'revision','',0),
(1653,4,'2026-05-25 07:54:54','2026-05-25 07:54:54','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 07:54:54','2026-05-25 07:54:54','',1359,'https://m5wp.momentry.ddns.net/?p=1653',0,'revision','',0),
(1654,4,'2026-05-25 07:57:20','2026-05-25 07:57:20','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 07:57:20','2026-05-25 07:57:20','',1359,'https://m5wp.momentry.ddns.net/?p=1654',0,'revision','',0),
(1655,4,'2026-05-25 08:01:26','2026-05-25 08:01:26','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:01:26','2026-05-25 08:01:26','',1359,'https://m5wp.momentry.ddns.net/?p=1655',0,'revision','',0),
(1656,4,'2026-05-25 08:09:13','2026-05-25 08:09:13','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:09:13','2026-05-25 08:09:13','',1359,'https://m5wp.momentry.ddns.net/?p=1656',0,'revision','',0),
(1657,4,'2026-05-25 08:11:29','2026-05-25 08:11:29','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:11:29','2026-05-25 08:11:29','',1359,'https://m5wp.momentry.ddns.net/?p=1657',0,'revision','',0),
(1658,4,'2026-05-25 08:14:14','2026-05-25 08:14:14','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:14:14','2026-05-25 08:14:14','',1359,'https://m5wp.momentry.ddns.net/?p=1658',0,'revision','',0),
(1659,4,'2026-05-25 08:18:43','2026-05-25 08:18:43','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:18:43','2026-05-25 08:18:43','',1359,'https://m5wp.momentry.ddns.net/?p=1659',0,'revision','',0),
(1660,4,'2026-05-25 08:19:42','2026-05-25 08:19:42','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:19:42','2026-05-25 08:19:42','',1359,'https://m5wp.momentry.ddns.net/?p=1660',0,'revision','',0),
(1661,4,'2026-05-25 08:20:18','2026-05-25 08:20:18','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:20:18','2026-05-25 08:20:18','',1359,'https://m5wp.momentry.ddns.net/?p=1661',0,'revision','',0),
(1662,4,'2026-05-25 08:24:23','2026-05-25 08:24:23','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:24:23','2026-05-25 08:24:23','',1359,'https://m5wp.momentry.ddns.net/?p=1662',0,'revision','',0),
(1663,4,'2026-05-25 08:29:56','2026-05-25 08:29:56','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 08:29:56','2026-05-25 08:29:56','',1359,'https://m5wp.momentry.ddns.net/?p=1663',0,'revision','',0),
(1664,4,'2026-05-25 09:05:57','2026-05-25 09:05:57','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n
\n
掃描孤立臉中…
\n
請稍候
\n
\n 關閉 \n 加入待定人物 \n
\n
\n
\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 09:05:57','2026-05-25 09:05:57','',1359,'https://m5wp.momentry.ddns.net/?p=1664',0,'revision','',0),
(1665,4,'2026-05-25 09:09:30','2026-05-25 09:09:30','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-25 09:09:30','2026-05-25 09:09:30','',1359,'https://m5wp.momentry.ddns.net/?p=1665',0,'revision','',0),
(1667,1,'2026-05-25 11:26:44','2026-05-25 11:26:44','\n\n\n\n\n\n
\n
\n
Momentry Studio
\n
⭐ Progress \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n','Progress','','inherit','closed','closed','','1537-revision-v1','','','2026-05-25 11:26:44','2026-05-25 11:26:44','',1537,'https://m5wp.momentry.ddns.net/?p=1667',0,'revision','',0),
(1669,1,'2026-05-25 11:28:15','2026-05-25 11:28:15','\n\n\n\n\n\n
\n
\n
Momentry Studio
\n
⭐ Logs \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n','Logs','','inherit','closed','closed','','1568-revision-v1','','','2026-05-25 11:28:15','2026-05-25 11:28:15','',1568,'https://m5wp.momentry.ddns.net/?p=1669',0,'revision','',0),
(1671,1,'2026-05-25 11:29:40','2026-05-25 11:29:40','\n\n\n
\n
\n
Momentry Studio
\n
⭐ Metrics \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n\n\n','Metrics','','inherit','closed','closed','','1570-revision-v1','','','2026-05-25 11:29:40','2026-05-25 11:29:40','',1570,'https://m5wp.momentry.ddns.net/?p=1671',0,'revision','',0),
(1672,1,'2026-05-25 11:30:29','2026-05-25 11:30:29','\n\n\n
\n
\n
Momentry Studio
\n
⭐ Evaluation \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n','Evaluation','','inherit','closed','closed','','1573-revision-v1','','','2026-05-25 11:30:29','2026-05-25 11:30:29','',1573,'https://m5wp.momentry.ddns.net/?p=1672',0,'revision','',0),
(1673,1,'2026-05-25 11:32:04','2026-05-25 11:32:04','\n\n\n\n\n\n
\n
\n
Momentry Studio
\n
⭐ Evaluation \n
Coming Soon
\n
\n \n \n \n
\n
\n
\n
\n','Evaluation','','inherit','closed','closed','','1573-revision-v1','','','2026-05-25 11:32:04','2026-05-25 11:32:04','',1573,'https://m5wp.momentry.ddns.net/?p=1673',0,'revision','',0),
(1674,1,'2026-05-25 11:34:07','2026-05-25 11:34:07','\n[raptor_workflow_demo]\n','raptor_workflow_demo','','publish','closed','closed','','demo','','','2026-05-25 14:16:11','2026-05-25 14:16:11','',0,'https://m5wp.momentry.ddns.net/?page_id=1674',0,'page','',0),
(1675,1,'2026-05-25 11:34:07','2026-05-25 11:34:07','\n[raptor_workflow_demo]\n','','','inherit','closed','closed','','1674-revision-v1','','','2026-05-25 11:34:07','2026-05-25 11:34:07','',1674,'https://m5wp.momentry.ddns.net/?p=1675',0,'revision','',0),
(1676,1,'2026-05-25 14:16:11','2026-05-25 14:16:11','\n[raptor_workflow_demo]\n','raptor_workflow_demo','','inherit','closed','closed','','1674-revision-v1','','','2026-05-25 14:16:11','2026-05-25 14:16:11','',1674,'https://m5wp.momentry.ddns.net/?p=1676',0,'revision','',0),
(1679,4,'2026-05-26 00:37:41','2026-05-26 00:37:41','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n \n\n待定人臉:
\n\n\n\n \n
\n\n \n
\n 信心值 \n \n 全部 \n ≥ 80% \n ≥ 60% \n ≥ 40% \n < 40% \n \n
\n\n \n
\n 排序 \n \n 信心值 高→低 \n 信心值 低→高 \n 時間 新→舊 \n 依檔案 \n \n
\n\n \n
\n\n \n
\n \n \n \n \n
\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 00:37:41','2026-05-26 00:37:41','',1359,'https://m5wp.momentry.ddns.net/?p=1679',0,'revision','',0),
(1680,4,'2026-05-26 00:41:24','2026-05-26 00:41:24','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n \n\n待定人臉:
\n\n\n\n \n
\n\n\n \n
\n 排序 \n \n 信心值 高→低 \n 信心值 低→高 \n 時間 新→舊 \n 依檔案 \n \n
\n\n \n
\n\n \n
\n \n \n \n \n
\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 00:41:24','2026-05-26 00:41:24','',1359,'https://m5wp.momentry.ddns.net/?p=1680',0,'revision','',0),
(1681,4,'2026-05-26 00:42:45','2026-05-26 00:42:45','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n \n\n待定人臉:
\n\n\n\n \n
\n\n\n \n
\n 排序 \n \n 時間 新→舊 \n 依檔案 \n \n
\n\n \n
\n\n \n
\n \n \n \n \n
\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 00:42:45','2026-05-26 00:42:45','',1359,'https://m5wp.momentry.ddns.net/?p=1681',0,'revision','',0),
(1682,4,'2026-05-26 00:50:19','2026-05-26 00:50:19','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 00:50:19','2026-05-26 00:50:19','',1359,'https://m5wp.momentry.ddns.net/?p=1682',0,'revision','',0),
(1683,4,'2026-05-26 00:51:27','2026-05-26 00:51:27','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n\n \n\n\n\n\n\n\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 00:51:27','2026-05-26 00:51:27','',1359,'https://m5wp.momentry.ddns.net/?p=1683',0,'revision','',0),
(1684,4,'2026-05-26 01:07:55','2026-05-26 01:07:55','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 01:07:55','2026-05-26 01:07:55','',1359,'https://m5wp.momentry.ddns.net/?p=1684',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1686,4,'2026-05-26 01:20:08','2026-05-26 01:20:08','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 01:20:08','2026-05-26 01:20:08','',1359,'https://m5wp.momentry.ddns.net/?p=1686',0,'revision','',0),
(1687,4,'2026-05-26 02:10:15','2026-05-26 02:10:15','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 02:10:15','2026-05-26 02:10:15','',1359,'https://m5wp.momentry.ddns.net/?p=1687',0,'revision','',0),
(1688,4,'2026-05-26 02:24:18','2026-05-26 02:24:18','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 02:24:18','2026-05-26 02:24:18','',1359,'https://m5wp.momentry.ddns.net/?p=1688',0,'revision','',0),
(1689,4,'2026-05-26 02:40:53','2026-05-26 02:40:53','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 02:40:53','2026-05-26 02:40:53','',1359,'https://m5wp.momentry.ddns.net/?p=1689',0,'revision','',0),
(1690,4,'2026-05-26 02:49:58','2026-05-26 02:49:58','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 02:49:58','2026-05-26 02:49:58','',1359,'https://m5wp.momentry.ddns.net/?p=1690',0,'revision','',0),
(1692,4,'2026-05-26 02:51:57','2026-05-26 02:51:57','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 02:51:57','2026-05-26 02:51:57','',1359,'https://m5wp.momentry.ddns.net/?p=1692',0,'revision','',0),
(1694,4,'2026-05-26 02:58:47','2026-05-26 02:58:47','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 02:58:47','2026-05-26 02:58:47','',1359,'https://m5wp.momentry.ddns.net/?p=1694',0,'revision','',0),
(1695,4,'2026-05-26 03:12:01','2026-05-26 03:12:01','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 03:12:01','2026-05-26 03:12:01','',1359,'https://m5wp.momentry.ddns.net/?p=1695',0,'revision','',0),
(1696,6,'2026-05-26 06:26:32','2026-05-26 06:26:32','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-26 06:26:32','2026-05-26 06:26:32','',341,'https://m5wp.momentry.ddns.net/?p=1696',0,'revision','',0),
(1697,4,'2026-05-26 06:30:05','2026-05-26 06:30:05','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n待定人臉:
\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 06:30:05','2026-05-26 06:30:05','',1359,'https://m5wp.momentry.ddns.net/?p=1697',0,'revision','',0),
(1698,4,'2026-05-26 06:43:06','2026-05-26 06:43:06','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 06:43:06','2026-05-26 06:43:06','',1359,'https://m5wp.momentry.ddns.net/?p=1698',0,'revision','',0),
(1699,1,'2026-05-26 07:05:06','2026-05-26 07:05:06','\n[momentry_api_logs]\n','Logs','','inherit','closed','closed','','1568-revision-v1','','','2026-05-26 07:05:06','2026-05-26 07:05:06','',1568,'https://m5wp.momentry.ddns.net/?p=1699',0,'revision','',0),
(1700,4,'2026-05-26 07:12:12','2026-05-26 07:12:12','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 07:12:12','2026-05-26 07:12:12','',1359,'https://m5wp.momentry.ddns.net/?p=1700',0,'revision','',0),
(1701,4,'2026-05-26 07:12:25','2026-05-26 07:12:25','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 07:12:25','2026-05-26 07:12:25','',1359,'https://m5wp.momentry.ddns.net/?p=1701',0,'revision','',0),
(1702,4,'2026-05-26 07:13:34','2026-05-26 07:13:34','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 07:13:34','2026-05-26 07:13:34','',1359,'https://m5wp.momentry.ddns.net/?p=1702',0,'revision','',0),
(1703,4,'2026-05-26 07:27:49','2026-05-26 07:27:49','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 07:27:49','2026-05-26 07:27:49','',1359,'https://m5wp.momentry.ddns.net/?p=1703',0,'revision','',0),
(1704,4,'2026-05-26 07:30:37','2026-05-26 07:30:37','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 07:30:37','2026-05-26 07:30:37','',1359,'https://m5wp.momentry.ddns.net/?p=1704',0,'revision','',0),
(1705,4,'2026-05-26 07:30:50','2026-05-26 07:30:50','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 07:30:50','2026-05-26 07:30:50','',1359,'https://m5wp.momentry.ddns.net/?p=1705',0,'revision','',0),
(1706,4,'2026-05-26 08:48:20','2026-05-26 08:48:20','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 08:48:20','2026-05-26 08:48:20','',1359,'https://m5wp.momentry.ddns.net/?p=1706',0,'revision','',0),
(1707,4,'2026-05-26 08:53:03','2026-05-26 08:53:03','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 08:53:03','2026-05-26 08:53:03','',1359,'https://m5wp.momentry.ddns.net/?p=1707',0,'revision','',0),
(1708,4,'2026-05-26 08:57:58','2026-05-26 08:57:58','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 08:57:58','2026-05-26 08:57:58','',1359,'https://m5wp.momentry.ddns.net/?p=1708',0,'revision','',0),
(1709,4,'2026-05-26 09:01:48','2026-05-26 09:01:48','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 09:01:48','2026-05-26 09:01:48','',1359,'https://m5wp.momentry.ddns.net/?p=1709',0,'revision','',0),
(1710,4,'2026-05-26 09:10:09','2026-05-26 09:10:09','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 09:10:09','2026-05-26 09:10:09','',1359,'https://m5wp.momentry.ddns.net/?p=1710',0,'revision','',0),
(1711,4,'2026-05-26 09:17:45','2026-05-26 09:17:45','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 09:17:45','2026-05-26 09:17:45','',1359,'https://m5wp.momentry.ddns.net/?p=1711',0,'revision','',0),
(1712,4,'2026-05-26 09:18:32','2026-05-26 09:18:32','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 09:18:32','2026-05-26 09:18:32','',1359,'https://m5wp.momentry.ddns.net/?p=1712',0,'revision','',0),
(1713,4,'2026-05-26 09:19:20','2026-05-26 09:19:20','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 09:19:20','2026-05-26 09:19:20','',1359,'https://m5wp.momentry.ddns.net/?p=1713',0,'revision','',0),
(1714,6,'2026-05-26 09:19:46','2026-05-26 09:19:46','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-26 09:19:46','2026-05-26 09:19:46','',341,'https://m5wp.momentry.ddns.net/?p=1714',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1715,4,'2026-05-26 09:20:43','2026-05-26 09:20:43','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 09:20:43','2026-05-26 09:20:43','',1359,'https://m5wp.momentry.ddns.net/?p=1715',0,'revision','',0),
(1717,4,'2026-05-26 11:44:47','2026-05-26 11:44:47','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
待定人物:
\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 11:44:47','2026-05-26 11:44:47','',1359,'https://m5wp.momentry.ddns.net/?p=1717',0,'revision','',0),
(1718,4,'2026-05-26 11:55:06','2026-05-26 11:55:06','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 11:55:06','2026-05-26 11:55:06','',1359,'https://m5wp.momentry.ddns.net/?p=1718',0,'revision','',0),
(1719,4,'2026-05-26 11:57:30','2026-05-26 11:57:30','\n\n\n\n\n\n
\n\n
已知人物:
\n
\n \n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 11:57:30','2026-05-26 11:57:30','',1359,'https://m5wp.momentry.ddns.net/?p=1719',0,'revision','',0),
(1720,4,'2026-05-26 12:23:13','2026-05-26 12:23:13','\n\n\n\n\n\n
\n\n\n\n
\n
\n\n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 12:23:13','2026-05-26 12:23:13','',1359,'https://m5wp.momentry.ddns.net/?p=1720',0,'revision','',0),
(1721,4,'2026-05-26 12:33:08','2026-05-26 12:33:08','\n\n\n\n\n\n
\n\n\n\n
\n
\n\n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 12:33:08','2026-05-26 12:33:08','',1359,'https://m5wp.momentry.ddns.net/?p=1721',0,'revision','',0),
(1722,4,'2026-05-26 12:35:54','2026-05-26 12:35:54','\n\n\n\n\n\n
\n\n\n\n
\n
\n\n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-26 12:35:54','2026-05-26 12:35:54','',1359,'https://m5wp.momentry.ddns.net/?p=1722',0,'revision','',0),
(1723,4,'2026-05-27 00:52:28','2026-05-27 00:52:28','\n\n\n\n\n\n
\n\n\n\n
\n
\n\n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-27 00:52:28','2026-05-27 00:52:28','',1359,'https://m5wp.momentry.ddns.net/?p=1723',0,'revision','',0),
(1724,4,'2026-05-27 01:55:47','2026-05-27 01:55:47','\n\n\n\n\n\n
\n\n\n\n
\n
\n\n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-27 01:55:47','2026-05-27 01:55:47','',1359,'https://m5wp.momentry.ddns.net/?p=1724',0,'revision','',0),
(1725,4,'2026-05-27 02:05:31','2026-05-27 02:05:31','\n\n\n\n\n\n
\n\n\n\n
\n
\n\n\n
\n\n
\n \n\n
\n\n\n\n\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
\n 編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n \n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n \n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n\n\n\n\n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n\n\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-27 02:05:31','2026-05-27 02:05:31','',1359,'https://m5wp.momentry.ddns.net/?p=1725',0,'revision','',0),
(1727,6,'2026-05-27 09:47:22','2026-05-27 09:47:22','\n\n\n\n\n\n \n\n
\n \n
\n
區塊 A — Evaluation Trigger
\n
▶ Run Evaluation \n
點擊後將呼叫後端 API 取得真實數據 \n
✓ Evaluation completed — metrics updated.
\n
\n\n \n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
-
\n
前3名命中率
\n
\n
\n
MRR
\n
-
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
-
\n
時間戳誤差(秒)
\n
\n
\n
\n\n \n
\n
區塊 C — Last Evaluation
\n
\n
\n
\n
\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:47:22','2026-05-27 09:47:22','',523,'https://m5wp.momentry.ddns.net/?p=1727',0,'revision','',0),
(1728,6,'2026-05-27 09:47:33','2026-05-27 09:47:33','\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:47:33','2026-05-27 09:47:33','',523,'https://m5wp.momentry.ddns.net/?p=1728',0,'revision','',0),
(1729,6,'2026-05-27 09:51:17','2026-05-27 09:51:17','\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:51:17','2026-05-27 09:51:17','',523,'https://m5wp.momentry.ddns.net/?p=1729',0,'revision','',0),
(1730,6,'2026-05-27 09:51:48','2026-05-27 09:51:48','\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:51:48','2026-05-27 09:51:48','',523,'https://m5wp.momentry.ddns.net/?p=1730',0,'revision','',0),
(1731,6,'2026-05-27 09:52:41','2026-05-27 09:52:41','\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:52:41','2026-05-27 09:52:41','',523,'https://m5wp.momentry.ddns.net/?p=1731',0,'revision','',0),
(1732,6,'2026-05-27 09:52:52','2026-05-27 09:52:52','\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:52:52','2026-05-27 09:52:52','',523,'https://m5wp.momentry.ddns.net/?p=1732',0,'revision','',0),
(1733,6,'2026-05-27 09:54:45','2026-05-27 09:54:45','\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 09:54:45','2026-05-27 09:54:45','',523,'https://m5wp.momentry.ddns.net/?p=1733',0,'revision','',0),
(1735,6,'2026-05-27 16:01:16','2026-05-27 16:01:16','\n\n\n
\n \n
\n
\n
\n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n\n \n
\n\n \n
\n
\n
\n \n \n \n
\n\n \n
\n \n Keyword \n ⌄ \n \n \n
\n\n \n
\n \n \n \n \n \n \n \n
\n
\n
\n
\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:01:16','2026-05-27 16:01:16','',523,'https://m5wp.momentry.ddns.net/?p=1735',0,'revision','',0),
(1736,6,'2026-05-27 16:03:32','2026-05-27 16:03:32','\n\n\n
\n \n
\n
\n
\n \n \n \n \n
\n \n \n \n \n \n
\n
\n
\n\n \n
\n\n \n
\n
\n
\n \n \n \n
\n\n \n
\n \n Keyword \n ⌄ \n \n \n
\n\n \n
\n \n \n \n \n \n \n \n
\n
\n
\n
\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:03:32','2026-05-27 16:03:32','',523,'https://m5wp.momentry.ddns.net/?p=1736',0,'revision','',0),
(1737,6,'2026-05-27 16:04:54','2026-05-27 16:04:54','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:04:54','2026-05-27 16:04:54','',523,'https://m5wp.momentry.ddns.net/?p=1737',0,'revision','',0),
(1738,6,'2026-05-27 16:11:01','2026-05-27 16:11:01','\n\n\n
\n \n
\n\n \n
\n\n \n
\n
\n
\n
\n\n \n
\n \n Keyword ⌄ \n \n \n
\n\n \n
🎤 \n
\n
\n
\n
\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:11:01','2026-05-27 16:11:01','',523,'https://m5wp.momentry.ddns.net/?p=1738',0,'revision','',0),
(1739,6,'2026-05-27 16:12:12','2026-05-27 16:12:12','\n\n\n
\n \n
\n\n \n
\n\n \n
\n
\n
\n\n \n
\n \n Keyword ⌄ \n \n \n
\n\n \n
🎤 \n
\n
\n
\n
\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:12:12','2026-05-27 16:12:12','',523,'https://m5wp.momentry.ddns.net/?p=1739',0,'revision','',0),
(1741,6,'2026-05-27 16:13:15','2026-05-27 16:13:15','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:13:15','2026-05-27 16:13:15','',523,'https://m5wp.momentry.ddns.net/?p=1741',0,'revision','',0),
(1742,6,'2026-05-27 16:16:42','2026-05-27 16:16:42','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:16:42','2026-05-27 16:16:42','',523,'https://m5wp.momentry.ddns.net/?p=1742',0,'revision','',0),
(1743,6,'2026-05-27 16:23:43','2026-05-27 16:23:43','\n\n\n\n
\n \n
\n\n \n
\n\n \n
\n
\n
\n \n
\n \n Keyword ⌄ \n \n \n
\n
🎤 \n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:23:43','2026-05-27 16:23:43','',523,'https://m5wp.momentry.ddns.net/?p=1743',0,'revision','',0),
(1744,6,'2026-05-27 16:25:47','2026-05-27 16:25:47','\n $file[\'uuid\'],\n \'name\' => $file[\'name\'],\n \'type\' => $file[\'type\'],\n \'status\' => $file[\'status\'] ?? \'Unknown\',\n ];\n }\n */\n\n return $results;\n}\n\n// ----------------------------\n// End full PHP snippet logic\n// ----------------------------\n\n?>\n\n\n
\n
\n\n
\n \';\n echo \'
\';\n echo \'
\';\n echo \'
\' . esc_html($item[\'name\']) . \'
\';\n echo \'
\' . esc_html($item[\'type\']) . \' · \' . esc_html($item[\'status\']) . \'
\';\n echo \'
\';\n }\n ?>\n
\n\n
\n
\n
\n
\n \n Keyword ⌄ \n \n \n
\n
🎤 \n
\n
\n
\n\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:25:47','2026-05-27 16:25:47','',523,'https://m5wp.momentry.ddns.net/?p=1744',0,'revision','',0),
(1745,6,'2026-05-27 16:26:25','2026-05-27 16:26:25','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:26:25','2026-05-27 16:26:25','',523,'https://m5wp.momentry.ddns.net/?p=1745',0,'revision','',0),
(1746,6,'2026-05-27 16:38:30','2026-05-27 16:38:30','\n\n\n
\n
\n\n
\n\n
\n
\n
🔍 \n
\n \n \n
\n
\n Keyword \n \n \n \n \n \n
\n\n
🎤 \n
\n
\n
\n
\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:38:30','2026-05-27 16:38:30','',523,'https://m5wp.momentry.ddns.net/?p=1746',0,'revision','',0),
(1747,6,'2026-05-27 16:39:24','2026-05-27 16:39:24','\n\n \n\n\n\n\n\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:39:24','2026-05-27 16:39:24','',523,'https://m5wp.momentry.ddns.net/?p=1747',0,'revision','',0),
(1748,6,'2026-05-27 16:42:19','2026-05-27 16:42:19','\n\n\n\n\n \n\n\n\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n Keyword \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:42:19','2026-05-27 16:42:19','',523,'https://m5wp.momentry.ddns.net/?p=1748',0,'revision','',0);
INSERT INTO `wp_posts` VALUES
(1749,6,'2026-05-27 16:44:50','2026-05-27 16:44:50','\n\n \n\n\n\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n Keyword \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:44:50','2026-05-27 16:44:50','',523,'https://m5wp.momentry.ddns.net/?p=1749',0,'revision','',0),
(1750,6,'2026-05-27 16:58:29','2026-05-27 16:58:29','\n\n\n\n\n \n\n\n\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n Keyword \n \n \n \n \n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-27 16:58:29','2026-05-27 16:58:29','',523,'https://m5wp.momentry.ddns.net/?p=1750',0,'revision','',0),
(1751,1,'2026-05-28 01:43:32','2026-05-28 01:43:32','\n\n\n
\n\n
\n\n \n
\n \n\n
\n \n \n \n \n \n\n
\n\n
\n\n \n
\n
\n Keyword \n \n \n \n \n\n \n
\n\n
\n\n
\n \n \n \n \n \n \n \n
\n \n\n \n
\n \n 最近瀏覽
\n
\n \n\n \n 最新加入
\n
\n \n \n\n
\n
\n\n\n\n\n','Home','','inherit','closed','closed','','341-revision-v1','','','2026-05-28 01:43:32','2026-05-28 01:43:32','',341,'https://m5wp.momentry.ddns.net/?p=1751',0,'revision','',0),
(1752,6,'2026-05-28 01:48:49','2026-05-28 01:48:49','\n\n\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n\n \n
\n
\n
區塊 A — Evaluation Trigger
\n
\n
\n
\n ▶ Run Evaluation \n \n
觸發後模擬執行 2 秒,目前不串接 backend。 \n
\n
✓ Evaluation completed — metrics updated.
\n
\n
\n
區塊 B — Search Quality Metrics
\n
\n
\n
Hit @ 3
\n
72%
\n
前3名命中率
\n
\n
\n
MRR
\n
0.58
\n
Mean Reciprocal Rank
\n
\n
\n
Time Error
\n
2.1s
\n
時間戳誤差(秒)
\n
\n
\n
ℹ️ 目前為 mock data,尚未串接 backend evaluation API。
\n
\n
\n
區塊 C — Last Evaluation
\n
\n
🕐
\n
\n
2026-03-28 14:20
\n
25 queries · dataset v1 · Hit@3 / MRR / Time Error
\n
\n
✓ Completed
\n
\n
\n
\n
\n\n\n\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-28 01:48:49','2026-05-28 01:48:49','',523,'https://m5wp.momentry.ddns.net/?p=1752',0,'revision','',0),
(1753,6,'2026-05-28 01:50:24','2026-05-28 01:50:24','\n\n\n\n\n
\n
\n
\n
\n
\n
\n
\n
\n \n Keyword \n ⌄ \n \n\n \n
\n
\n
\n
\n
\n
\n\n\n','search-chat','','inherit','closed','closed','','523-revision-v1','','','2026-05-28 01:50:24','2026-05-28 01:50:24','',523,'https://m5wp.momentry.ddns.net/?p=1753',0,'revision','',0),
(1754,1,'2026-05-28 10:30:29','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2026-05-28 10:30:29','0000-00-00 00:00:00','',0,'https://m5wp.momentry.ddns.net/?p=1754',0,'post','',0),
(1755,4,'2026-05-28 13:28:34','2026-05-28 13:28:34','\n\n\n\n\n\n\n\n\n\n
\n\n
\n\n
\n \n\n
\n\n
\n
\n \n\n
\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-28 13:28:34','2026-05-28 13:28:34','',1359,'https://m5wp.momentry.ddns.net/?p=1755',0,'revision','',0),
(1756,4,'2026-05-28 13:52:24','2026-05-28 13:52:24','\n\n\n\n\n\n\n\n
\n\n
\n\n
\n \n\n
\n\n
\n
\n \n\n
\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-28 13:52:24','2026-05-28 13:52:24','',1359,'https://m5wp.momentry.ddns.net/?p=1756',0,'revision','',0),
(1757,4,'2026-05-29 03:20:09','2026-05-29 03:20:09','\n\n\n\n\n\n\n\n
\n\n
\n\n
\n \n\n
\n\n
\n
\n \n\n
\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-29 03:20:09','2026-05-29 03:20:09','',1359,'https://m5wp.momentry.ddns.net/?p=1757',0,'revision','',0),
(1758,4,'2026-05-29 03:32:44','2026-05-29 03:32:44','\n\n\n\n\n\n\n\n
\n\n
\n\n
\n \n\n
\n\n
\n
\n \n\n
\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n\n\n\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-29 03:32:44','2026-05-29 03:32:44','',1359,'https://m5wp.momentry.ddns.net/?p=1758',0,'revision','',0),
(1759,4,'2026-05-29 03:38:33','2026-05-29 03:38:33','\n\n\n\n\n\n\n\n
\n\n
\n\n
\n \n\n
\n\n
\n
\n \n\n
\n\n\n\n\n\n\n
\n
\n \n \n \n 返回\n \n
編輯\n \n \n \n \n \n
\n\n \n\n
\n\n
\n
\n\n
\n
\n
\n \n \n \n \n \n 刪除此人物\n \n
\n\n \n\n
\n
\n
確定要將這個人臉從此人物移除嗎?
\n
此人臉將移至「待定人物」,您可從人物管理重新分類
\n
\n 取消 \n 確定移除 \n
\n
\n
\n\n
\n
\n
確定要刪除此人物嗎?
\n
刪除後無法復原,此人物的所有資料將永久移除
\n
\n 取消 \n 確定刪除 \n
\n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Save before leaving?
\n
\n Leave anyway \n Save \n
\n
\n
\n\n\n\n
\n
You have unsaved changes.
\n
Discard them?
\n
\n Keep editing \n Discard \n
\n
\n
\n\n\n \n\n
\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
\n
確定要合併這兩個人物嗎?
\n
您仍可以從人物管理修改
\n
\n 取消 \n 確定合併 \n
\n
\n
\n\n\n\n
\n \n
\n
\n
\n
\n ‹ 上一段 \n \n 下一段 › \n
\n
\n
\n','People','','inherit','closed','closed','','1359-revision-v1','','','2026-05-29 03:38:33','2026-05-29 03:38:33','',1359,'https://m5wp.momentry.ddns.net/?p=1759',0,'revision','',0),
(1760,4,'2026-05-29 06:31:52','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2026-05-29 06:31:52','0000-00-00 00:00:00','',0,'https://m5wp.momentry.ddns.net/?p=1760',0,'post','',0);
/*!40000 ALTER TABLE `wp_posts` ENABLE KEYS */;
UNLOCK TABLES;
COMMIT;
SET AUTOCOMMIT=@OLD_AUTOCOMMIT;
DROP TABLE IF EXISTS `wp_snippets`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8mb4 */;
CREATE TABLE `wp_snippets` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` tinytext NOT NULL,
`description` text NOT NULL,
`code` longtext NOT NULL,
`tags` longtext NOT NULL,
`scope` varchar(15) NOT NULL DEFAULT 'global',
`condition_id` bigint(20) NOT NULL DEFAULT 0,
`priority` smallint(6) NOT NULL DEFAULT 10,
`active` tinyint(1) NOT NULL DEFAULT 0,
`modified` datetime NOT NULL DEFAULT current_timestamp(),
`revision` bigint(20) NOT NULL DEFAULT 1,
`cloud_id` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `scope` (`scope`),
KEY `active` (`active`)
) ENGINE=InnoDB AUTO_INCREMENT=73 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, @@AUTOCOMMIT=0;
LOCK TABLES `wp_snippets` WRITE;
/*!40000 ALTER TABLE `wp_snippets` DISABLE KEYS */;
INSERT INTO `wp_snippets` VALUES
(1,'Make upload filenames lowercase','Makes sure that image and file uploads have lowercase filenames.\n\nThis is a sample snippet. Feel free to use it, edit it, or remove it.','add_filter( \'sanitize_file_name\', \'mb_strtolower\' );','sample, media','global',0,10,0,'2026-01-16 04:21:43',1,NULL),
(2,'Disable admin bar','Turns off the WordPress admin bar for everyone except administrators.\n\nThis is a sample snippet. Feel free to use it, edit it, or remove it.','add_action( \'wp\', function () {\n if ( ! current_user_can( \'manage_options\' ) ) {\n show_admin_bar( false );\n }\n} );','sample, admin-bar','front-end',0,10,0,'2026-01-16 04:21:43',1,NULL),
(3,'Allow smilies','Allows smiley conversion in obscure places.\n\nThis is a sample snippet. Feel free to use it, edit it, or remove it.','add_filter( \'widget_text\', \'convert_smilies\' );\nadd_filter( \'the_title\', \'convert_smilies\' );\nadd_filter( \'wp_title\', \'convert_smilies\' );\nadd_filter( \'get_bloginfo\', \'convert_smilies\' );','sample','global',0,10,0,'2026-01-16 04:21:43',1,NULL),
(4,'Current year','Shortcode for inserting the current year into a post or page..\n\nThis is a sample snippet. Feel free to use it, edit it, or remove it.','','sample, dates','content',0,10,0,'2026-01-16 04:21:43',1,NULL),
(5,'Gate Playground login','Gate 保護頁面
','add_action(\'template_redirect\', function () {\n\n $protected_pages = [\n \'lt-searching\',\n \'people\',\n \'library\',\n \'progress\',\n \'demo\',\n \'logs\',\n \'momentry-api-console\',\n \'raptor-api-console\'\n ];\n\n if (\n is_page($protected_pages)\n && !is_user_logged_in()\n ) {\n\n wp_redirect(\n home_url(\n \'/login/?redirect_to=\' .\n rawurlencode($_SERVER[\'REQUEST_URI\'])\n )\n );\n\n exit;\n }\n});','Gate 保護頁面','global',0,10,1,'2026-05-26 14:18:42',1,NULL),
(6,'確保 Playground 是「必須登入」','','/**\n * Protect Playground page: redirect to login if not logged in\n */\nadd_action(\'template_redirect\', function () {\n\n // TODO: 改成你 Playground 頁面的 slug\n // 例如網址是 https://xxx.com/playground/ → slug = \'playground\'\n if (is_page(\'playground\')) {\n\n if (!is_user_logged_in()) {\n $redirect_url = urlencode(home_url($_SERVER[\'REQUEST_URI\']));\n wp_redirect(home_url(\"/wp-login.php?redirect_to={$redirect_url}\"));\n exit;\n }\n }\n});\n','','global',0,10,-1,'2026-01-19 02:06:19',1,NULL),
(7,'Snippet ①:建立 Login Form shortcode','改畫面功能
','/**\n * A) On /login page: fix the REAL login form that posts to wp-login.php\n * B) Provide shortcode [ms_login_form] for your custom card UI (optional usage)\n */\n\n/** ✅ A) CSS fix for the login form shown on /login/ (action ends with wp-login.php) */\nadd_action(\'wp_head\', function () {\n\n if (!is_page(\'login\')) return;\n\n echo \'\';\n\n});\n\n\n/** ✅ B) Shortcode: [ms_login_form] (your custom card UI) */\nadd_shortcode(\'ms_login_form\', function () {\n\n // 已登入就顯示提示,不做 redirect(避免破壞 REST / 編輯器)\n if (is_user_logged_in()) {\n return \'\';\n }\n\n // 登入後要導回哪裡\n $redirect_to = isset($_GET[\'redirect_to\'])\n ? esc_url_raw($_GET[\'redirect_to\'])\n : home_url(\'/playground\');\n\n ob_start(); ?>\n\n\n\n\n\n
Log in to Momentry Studio \n
After logging in, you will be redirected to Playground
\n\n \n
\n Incorrect username or password, please try again.\n
\n \n\n
\n \n\n
\n\n把 wp-login.php 導去 /login','add_action(\'login_init\', function () {\n\n $action = $_GET[\'action\'] ?? \'\';\n\n if (\n $_SERVER[\'REQUEST_METHOD\'] === \'GET\' &&\n !in_array($action, [\'logout\', \'lostpassword\', \'resetpass\', \'rp\'])\n ) {\n wp_safe_redirect(home_url(\'/login/\'));\n exit;\n }\n\n});','把 wp-login.php 導去 /login','global',0,10,1,'2026-05-07 04:39:38',1,NULL),
(10,'Force Login Page Content','','add_action(\'init\', function () {\n $page = get_page_by_path(\'login\'); // 你的 slug 是 login\n if (!$page) return;\n\n $new_content = \"[ms_login_form]\";\n\n // 如果已經有了,就不再更新\n if (strpos($page->post_content, $new_content) !== false) return;\n\n wp_update_post([\n \'ID\' => $page->ID,\n \'post_content\' => $new_content\n ]);\n});\n','','global',0,10,-1,'2026-01-21 00:53:48',1,NULL),
(11,'Redirect After Login','','add_action(\'template_redirect\', function () {\n\n if (is_user_logged_in()) return;\n\n $uri = $_SERVER[\'REQUEST_URI\'] ?? \'\';\n\n // 鎖 /playground(包含 /playground/xxx)\n if (strpos($uri, \'/playground\') === 0) {\n\n // ✅ 正確把原頁網址帶回去\n $current_url = home_url($uri);\n\n wp_safe_redirect(add_query_arg(\n \'redirect_to\',\n rawurlencode($current_url),\n home_url(\'/login/\')\n ));\n exit;\n }\n});\n','','global',0,10,-1,'2026-01-21 01:34:30',1,NULL),
(12,'Redirect After Login','登入成功去哪
','add_filter(\'login_redirect\', function ($redirect_to, $requested_redirect_to, $user) {\n\n // 只處理登入成功的情況\n if (is_a($user, \'WP_User\')) {\n\n // 如果有指定 redirect_to,就回原頁\n if (!empty($requested_redirect_to)) {\n return $requested_redirect_to;\n }\n\n // 沒有的話一律去 Playground\n return home_url(\'/Playground/\');\n }\n\n return $redirect_to;\n\n}, 10, 3);\n','登入成功去哪','global',0,10,-1,'2026-05-07 03:43:46',1,NULL),
(13,'Show Login Failed','','add_action(\'wp_login_failed\', function () {\n wp_safe_redirect(home_url(\'/login/?login=failed\'));\n exit;\n});\n','','global',0,10,-1,'2026-01-21 01:59:31',1,NULL),
(14,'Render Login Page Without Editing','','add_action(\'init\', function () {\n if (!is_admin()) {\n header(\'X-MS-SNIPPET: playground-ui-loaded\');\n }\n});\n\n// \n// \n// \n// \n// // Render login form automatically on /login/ without needing page content\nadd_action(\'template_redirect\', function () {\n\n $uri = $_SERVER[\'REQUEST_URI\'] ?? \'\';\n $is_login_page = (strpos($uri, \'/login\') === 0);\n\n if (!$is_login_page) return;\n\n // 已登入 → 直接去 playground\n if (is_user_logged_in()) {\n wp_safe_redirect(home_url(\'/lt-searching/\'));\n exit;\n }\n\n // 取 redirect_to(如果有)\n $redirect_to = home_url(\'/lt-searching/\');\n if (!empty($_GET[\'redirect_to\'])) {\n $decoded = rawurldecode($_GET[\'redirect_to\']);\n if (filter_var($decoded, FILTER_VALIDATE_URL)) {\n $redirect_to = $decoded;\n }\n }\n\n // 顯示 login form(不用依賴頁面內容)\n status_header(200);\n nocache_headers();\n ?>\n \n \n \n \n \n Playground - Momentry Studio \n\n \n \n \n \n
Log in to Momentry Studio \n\n \n
帳號或密碼錯誤,請再試一次
\n \n\n
\n\n
After logging in, you will be redirected to Playground
\n
\n \n \n \n\n \n
\n\n
\n
Momentry Studio
\n
\n Your AI-powered media workspace.\n
\n\n
\n
\n\n
\n
\n\n \n\n\n\n\n \n post_content, \'ai_studio_layout\')) {\n return \'\'; // 👈 直接讓標題變成空\n }\n\n return $title;\n}, 10, 2);\n','','global',0,10,-1,'2026-01-26 03:08:53',1,NULL),
(20,'Hide Site Title and Post Title on AI Studio Page','','/**\n * Hide Site Title / Post Title blocks ONLY on pages that contain [ai_studio_layout]\n */\nadd_filter(\'render_block\', function ($block_content, $block) {\n\n if (is_admin() || !is_singular()) return $block_content;\n\n $post = get_post();\n if (!$post) return $block_content;\n\n // 只針對有放我們 shortcode 的頁面\n if (!has_shortcode($post->post_content, \'ai_studio_layout\')) return $block_content;\n\n $name = $block[\'blockName\'] ?? \'\';\n\n // 擋掉「Momentry Studio」常見來源:Site Title / Post Title\n if ($name === \'core/site-title\' || $name === \'core/post-title\') {\n return \'\';\n }\n\n return $block_content;\n\n}, 10, 2);\n','','global',0,10,-1,'2026-01-26 03:11:21',1,NULL),
(21,'AI Studio Layout CSS Loader','','/**\n * Inject AI Studio layout CSS for pages using [ai_studio_layout]\n */\nadd_action(\'wp_enqueue_scripts\', function () {\n\n if (!is_singular()) return;\n\n global $post;\n if (!$post) return;\n\n // 只在有使用 shortcode 的頁面載入\n if (!has_shortcode($post->post_content, \'ai_studio_layout\')) return;\n\n // 確保有一個 style 可以掛 inline css\n wp_register_style(\'ai-studio-inline\', false);\n wp_enqueue_style(\'ai-studio-inline\');\n\n $css = <<\n\n\n\n/* 讓主要內容區塊全寬 */\n.ai-studio-fullwidth .wp-site-blocks,\n.ai-studio-fullwidth main,\n.ai-studio-fullwidth .entry-content,\n.ai-studio-fullwidth .wp-block-post-content {\n max-width: 100% !important;\n width: 100% !important;\n padding-left: 0 !important;\n padding-right: 0 !important;\n}\n\n/* 拿掉 WordPress 預設的內容邊界 */\n.ai-studio-fullwidth .wp-block-group,\n.ai-studio-fullwidth .alignwide,\n.ai-studio-fullwidth .alignfull {\n margin-left: 0 !important;\n margin-right: 0 !important;\n}\n\n \';\n }\n});\n\nadd_filter(\'body_class\', function($classes) {\n if (is_page(\'ai-studio\')) {\n $classes[] = \'ai-studio-fullwidth\';\n }\n return $classes;\n});\n','','global',0,10,-1,'2026-01-26 15:32:44',1,NULL),
(24,'Playground Dashboard UI [CLONE]','','$N8N_DASHBOARD_URL = \'https://accusys1.app.n8n.cloud/webhook/ms-dashboard\';\n\n$uri = $_SERVER[\'REQUEST_URI\'] ?? \'\';\nif (strpos($uri, \'/playground\') !== 0) return;\n\n','','global',0,10,-1,'2026-01-27 05:44:04',1,NULL),
(25,'AI Studio Layout CSS [CLONE]','','#ai-studio-app{\n height: 100vh;\n display: flex;\n flex-direction: column;\n background: #f8f9fb;\n font-family: system-ui, -apple-system;\n}\n\n.ai-header{\n height: 56px;\n background: #fff;\n border-bottom: 1px solid rgba(0,0,0,.08);\n display:flex;\n align-items:center;\n padding: 0 20px;\n}\n\n.ai-body{\n flex:1;\n display:flex;\n}\n\n.ai-sidebar{\n width: 220px;\n background:#fff;\n border-right: 1px solid rgba(0,0,0,.08);\n padding: 12px;\n}\n.ai-view {\n display: none;\n}\n\n.ai-view.active {\n display: block;\n}\n\n.ai-nav-item{\n padding: 10px 12px;\n border-radius: 8px;\n margin-bottom: 4px;\n cursor:pointer;\n}\n\n.ai-nav-item.active{\n background: rgba(0,0,0,.06);\n}\n\n.ai-main{\n flex:1;\n padding: 24px;\n}\n\n.ai-main {\n position: relative;\n height: 100%;\n}\n\n.ai-view {\n display: none;\n height: 100%;\n}\n\n.ai-view.active {\n display: block;\n}\n\n\n/* === Hide theme header/footer ONLY for AI Studio page === */\nbody.page-id-60 header,\nbody.page-id-60 footer,\nbody.page-id-60 .site-header,\nbody.page-id-60 .site-footer {\n display: none !important;\n}\n\n/* remove theme content padding */\nbody.page-id-60 #content,\nbody.page-id-60 .site-content,\nbody.page-id-60 main {\n margin: 0 !important;\n padding: 0 !important;\n}\n\n\n/* ===== FORCE hide theme header/footer for AI Studio page ===== */\nbody.page-id-60 header,\nbody.page-id-60 footer,\nbody.page-id-60 .site-header,\nbody.page-id-60 .site-footer,\nbody.page-id-60 #masthead,\nbody.page-id-60 #colophon {\n display: none !important;\n}\n\n/* remove theme spacing */\nbody.page-id-60 #page,\nbody.page-id-60 #content,\nbody.page-id-60 .site-content,\nbody.page-id-60 main {\n margin: 0 !important;\n padding: 0 !important;\n max-width: none !important;\n}\n/* === AI Studio View Switch (CRITICAL) === */\n.ai-view {\n display: none !important;\n}\n\n.ai-view.active {\n display: block !important;\n}\n','','global',0,10,-1,'2026-01-27 05:44:16',1,NULL),
(26,'Momentry App Shell','','add_filter(\'the_content\', function ($content) {\n\n // 只在這兩頁生效:/playground 與 /momentry-studio\nif (!is_page([\'playground\', \'ai-studio\'])) return $content;\n\n // 共用外殼:左側選單 + 右側主內容(原本頁面內容放進來)\n ob_start();\n ?>\n \n\n \n \n\n \n
\n\n \n \n\n \n
\n\n \n \n \n
Momentry Studio
\n
Your AI-powered media workspace.
\n\n
\n\n
\n
🎬 Media Library
\n
Browse and manage your indexed video moments.
\n
\n\n
\n
🧠 AI Insights
\n
See summaries, tags, and detected key events.
\n
\n\n
\n
⚙️ System Status
\n
Connecting to system…
\n
\n \n \n
\n
\n\n
\n
\n \n\n \n \n\n \n
\n
\n\n\n\n \n\n\n\n \n\n \n\n\n\n \n\n
\n\n Momentry Studio
\n\n \n \n
\n\n\n\n\n Search History \n + New \n
\n\n
\n\n\n\n\n
\n\n \n\n
\n\n \n\n \n ID, [\'size\' => 96]); ?>\n\n \n
\" class=\"gs-avatar\" id=\"gsAvatarBtn\" />\n
\n
display_name); ?>
\n
\n roles)) echo \'Admin\';\n elseif (in_array(\'editor\', $u->roles)) echo \'Editor\';\n elseif (in_array(\'subscriber\', $u->roles)) echo \'Member\';\n else echo \'User\';\n ?>\n
\n
\n\n\n \n
\n\n \n\n \" class=\"gs-user\">\n 👤
\n \n
Sign in to Momentry
\n
Access your AI workspace
\n
\n \n\n \n\n \n\n
\n \n \n\n
\n\n \n \n \n
\n 🚀 Momentry Studio 正式發表 | 🎬 AI 影音資產搜尋新時代 | 💡 COMPUTEX 展位歡迎體驗\n
\n
\n\n \n\n \n window.MS_REST = {\n root: \'\".esc_url_raw(rest_url()).\"\',\n nonce: \'\".wp_create_nonce(\'wp_rest\').\"\'\n };\n \";\n});\n\n\ndefined(\'ABSPATH\') || exit;\n\n/* ---------- DB TABLE ---------- */\nfunction ms_table_name() {\n global $wpdb;\n return $wpdb->prefix . \'momentry_search_sessions\';\n}\n\nadd_action(\'init\', function () {\n global $wpdb;\n $table = ms_table_name();\n\n if ($wpdb->get_var(\"SHOW TABLES LIKE \'$table\'\") === $table) return;\n\n require_once ABSPATH . \'wp-admin/includes/upgrade.php\';\n dbDelta(\"CREATE TABLE $table (\n id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n user_id BIGINT UNSIGNED NOT NULL,\n parent_id BIGINT UNSIGNED NULL,\n query_text LONGTEXT NOT NULL,\n scope_text VARCHAR(190) NULL,\n answer_text LONGTEXT NULL,\n sources_json LONGTEXT NULL,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n KEY parent_id (parent_id),\n KEY user_id (user_id)\n ) {$wpdb->get_charset_collate()};\");\n});\n\n/* ---------- AUTH ---------- */\nfunction ms_require_logged_in() {\n return is_user_logged_in();\n}\n\n/* ---------- REST ROUTES ---------- */\nadd_action(\'rest_api_init\', function () {\n\n global $wpdb;\n $table = ms_table_name();\n\n /* Save message */\n register_rest_route(\'momentry/v1\', \'/save-search\', [\n \'methods\'=>\'POST\',\n \'permission_callback\'=>\'ms_require_logged_in\',\n \'callback\'=>function($req) use ($wpdb,$table){\n\n $body = $req->get_json_params(); // ⭐ 正確讀 JSON\n\n $user_id = get_current_user_id();\n $query = trim($body[\'query\'] ?? \'\');\n if(!$query) return [\'ok\'=>false];\n\n $parent_id = !empty($body[\'parent_id\']) ? (int)$body[\'parent_id\'] : null;\n\n $wpdb->insert($table,[\n \'user_id\'=>$user_id,\n \'parent_id\'=>$parent_id,\n \'query_text\'=>$query,\n \'scope_text\'=>$body[\'scope\'] ?? null,\n \'answer_text\'=>$body[\'answer\'] ?? null,\n \'sources_json\'=>!empty($body[\'sources\']) ? wp_json_encode($body[\'sources\']) : null\n ]);\n\n return [\'ok\'=>true,\'id\'=>$wpdb->insert_id];\n }\n]);\n\n\n /* List threads (only root messages) */\n register_rest_route(\'momentry/v1\', \'/search-history\', [\n \'methods\'=>\'GET\',\n \'permission_callback\'=>\'ms_require_logged_in\',\n \'callback\'=>function() use ($wpdb,$table){\n $uid=get_current_user_id();\n\n $rows = $wpdb->get_results(\n $wpdb->prepare(\"SELECT id, query_text AS query \n FROM $table \n WHERE user_id=%d AND parent_id IS NULL \n ORDER BY id DESC\",$uid),\n ARRAY_A);\n\n return [\'ok\'=>true,\'data\'=>$rows];\n }\n ]);\n/* Rename thread (only root message) */\nregister_rest_route(\'momentry/v1\', \'/rename-thread/(?P\\d+)\', [\n \'methods\'=>\'POST\',\n \'permission_callback\'=>\'ms_require_logged_in\',\n \'callback\'=>function($req) use ($wpdb,$table){\n $uid=get_current_user_id();\n $id=(int)$req[\'id\'];\n $title=sanitize_text_field($req[\'title\']);\n\n $updated=$wpdb->update(\n $table,\n [\'query_text\'=>$title],\n [\'id\'=>$id,\'user_id\'=>$uid,\'parent_id\'=>null]\n );\n\n return [\'ok\'=>(bool)$updated];\n }\n]);\n\n/* Delete thread (root + children) */\nregister_rest_route(\'momentry/v1\', \'/delete-thread/(?P\\d+)\', [\n \'methods\'=>\'DELETE\',\n \'permission_callback\'=>\'ms_require_logged_in\',\n \'callback\'=>function($req) use ($wpdb,$table){\n $uid=get_current_user_id();\n $id=(int)$req[\'id\'];\n\n $wpdb->query($wpdb->prepare(\n \"DELETE FROM $table WHERE (id=%d OR parent_id=%d) AND user_id=%d\",\n $id,$id,$uid\n ));\n\n return [\'ok\'=>true];\n }\n]);\n\n /* Load a full thread */\n register_rest_route(\'momentry/v1\', \'/search-thread/(?P\\d+)\', [\n \'methods\'=>\'GET\',\n \'permission_callback\'=>\'ms_require_logged_in\',\n \'callback\'=>function($req) use ($wpdb,$table){\n\n $uid=get_current_user_id();\n $id=(int)$req[\'id\'];\n\n $messages = $wpdb->get_results(\n $wpdb->prepare(\"SELECT query_text AS query, answer_text AS answer \n FROM $table \n WHERE (id=%d OR parent_id=%d) AND user_id=%d \n ORDER BY id ASC\",$id,$id,$uid),\n ARRAY_A);\n\n return [\'ok\'=>true,\'data\'=>[\'messages\'=>$messages]];\n }\n ]);\n\n});\n','','global',0,10,1,'2026-02-06 10:12:20',1,NULL),
(31,'Momentry Moments Wall','','add_action(\'wp_footer\', function () {\n?>\n\n\n\n\n\n\n\n \n\n \n\n 搜尋結果:「\" . esc_html($keyword) . \"」\";\n\n $files = glob($base_path . \"*_transcript.txt\");\n\n $found = false;\n\n foreach ($files as $file) {\n\n $content = file($file);\n\n foreach ($content as $line) {\n\n if (stripos($line, $keyword) !== false) {\n\n $found = true;\n\n $filename = basename($file);\n $meeting_name = str_replace(\"_transcript.txt\", \"\", $filename);\n\n echo \"\";\n echo \"\" . esc_html($meeting_name) . \" \";\n echo esc_html(trim($line));\n echo \"
\";\n }\n }\n }\n\n if (!$found) {\n echo \"沒有找到相關內容。
\";\n }\n }\n\n return ob_get_clean();\n}\n\nadd_shortcode(\'transcript_search\', \'momentry_transcript_search\');\n','','global',0,10,-1,'2026-02-12 10:31:22',1,NULL),
(33,'LT- Layer Bar','','add_filter(\'the_content\', function ($content) {\n\n if (!is_page([\'lt-searching\', \'ww-4-7\', \'momentry-demo\',\'lt-upgrade-plan\',\'lt-personalization\',\'lt-settings\',\'lt-help\',\'ww-04-07-api\'])) return $content;\n\n ob_start(); ?>\n\n \n\n \n\n \n\n
\n\n Momentry Studio
\n\n \n\n
\n\n \n Search History \n + New \n
\n\n
\n\n ID, [\'size\' => 96]); ?>\n\n \n
\" class=\"gs-avatar\" alt=\"avatar\" />\n
\n
display_name); ?>
\n
\n roles)) echo \'Admin\';\n elseif (in_array(\'editor\', $u->roles)) echo \'Editor\';\n elseif (in_array(\'subscriber\', $u->roles)) echo \'Member\';\n else echo \'User\';\n ?>\n
\n
\n\n \n
\n\n \n\n \" class=\"gs-user\">\n 👤
\n \n
Sign in to Momentry
\n
Access your AI workspace
\n
\n \n\n \n\n \n\n
\n \n \n\n
\n\n \n \n \n\n\n\n [\'GET\', \'POST\'],\n \'permission_callback\' => \'__return_true\',\n\n \'callback\' => function (WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n // Demo UUID provided for current search demo.\n $demo_uuid = \'aeed71342a899fe4b4c57b7d41bcb692\';\n\n $mode = sanitize_text_field($request->get_param(\'mode\'));\n $query = sanitize_text_field($request->get_param(\'query\'));\n\n if (!$query) {\n return new WP_REST_Response([\n \'success\' => false,\n \'message\' => \'Missing query\'\n ], 400);\n }\n\n if ($mode === \'semantic\') {\n\n $url = $base . \'/api/v1/search/smart\';\n $body = [\n \'file_uuid\' => $demo_uuid,\n \'query\' => $query,\n \'limit\' => 20,\n \'page\' => 1,\n \'page_size\' => 20,\n ];\n\n $args = [\n \'method\' => \'POST\',\n \'timeout\' => 60,\n \'headers\' => [\n \'Content-Type\' => \'application/json\',\n \'X-API-Key\' => $api_key,\n ],\n \'body\' => wp_json_encode($body),\n ];\n\n } elseif ($mode === \'people\') {\n\n $url = $base . \'/api/v1/identities/search?q=\' . rawurlencode($query)\n . \'&limit=20\'\n . \'&page=1\'\n . \'&page_size=20\';\n $args = [\n \'method\' => \'GET\',\n \'timeout\' => 60,\n \'headers\' => [\n \'X-API-Key\' => $api_key,\n ],\n ];\n\n } else {\n\n // Default: keyword / universal search.\n $url = $base . \'/api/v1/search/universal\';\n $body = [\n \'file_uuid\' => $demo_uuid,\n \'query\' => $query,\n \'limit\' => 20,\n \'page\' => 1,\n \'page_size\' => 20,\n ];\n\n $args = [\n \'method\' => \'POST\',\n \'timeout\' => 60,\n \'headers\' => [\n \'Content-Type\' => \'application/json\',\n \'X-API-Key\' => $api_key,\n ],\n \'body\' => wp_json_encode($body),\n ];\n }\n\n $response = wp_remote_request($url, $args);\n\n if (is_wp_error($response)) {\n return new WP_REST_Response([\n \'success\' => false,\n \'message\' => $response->get_error_message(),\n ], 500);\n }\n\n $code = wp_remote_retrieve_response_code($response);\n $raw_body = wp_remote_retrieve_body($response);\n $decoded = json_decode($raw_body, true);\n\n if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) {\n return new WP_REST_Response([\n \'success\' => false,\n \'message\' => \'Invalid JSON from upstream API\',\n \'raw\' => $raw_body,\n ], $code ?: 500);\n }\n\n return new WP_REST_Response($decoded, $code);\n }\n ]);\n});\n\nadd_action(\'wp_head\', function () {\n if (!is_page(\'search-chat\')) return;\n ?>\n \n\n\n \n\n 登入畫面包含輪播圖等等','add_action(\'init\', function () {\n if (empty($_GET[\'ms_login_local_img\'])) return;\n\n $base = \'/Users/accusys/momentry/var/sftpgo/data/demo/\';\n $file = basename($_GET[\'ms_login_local_img\']);\n $path = $base . $file;\n\n if (!file_exists($path)) {\n status_header(404);\n exit(\'Image not found\');\n }\n\n header(\'Content-Type: \' . mime_content_type($path));\n header(\'Content-Length: \' . filesize($path));\n readfile($path);\n exit;\n});\n\nadd_shortcode(\'ms_login_form\', function () {\n\n if (is_user_logged_in()) {\n $logout_url = wp_logout_url(home_url(\'/login/?loggedout=true\'));\n\n return \'\n \n\n \';\n }\n\n $redirect_to = !empty($_GET[\'redirect_to\'])\n ? esc_url_raw($_GET[\'redirect_to\'])\n : home_url(\'/lt-searching/\');\n\n ob_start(); ?>\n\n \n\n \n
\n\n
\n
\" alt=\"Momentry Studio\">\n\n
\" alt=\"Momentry Studio\">\n\n
\" alt=\"Momentry Studio\">\n\n
\" alt=\"Momentry Studio\">\n \n \n \n \n \n \n
❮ \n
❯ \n
\n \n \n \n \n\n
\n
\n\n \n \n
\n\n
Log in to Momentry Studio \n\n \n
\n Incorrect username or password, please try again.\n
\n \n\n
\n\n
\n\n
\n
\n\n $row) {\n if (\n empty($row[\'expires\']) ||\n !is_numeric($row[\'expires\']) ||\n (int) $row[\'expires\'] < $now\n ) {\n unset($store[$device_key]);\n }\n }\n return $store;\n }\n}\n\nif (!function_exists(\'ms_switch_register_device_token\')) {\n function ms_switch_register_device_token($user_id, $device_key) {\n $store = ms_switch_cleanup_store(ms_switch_get_store($user_id));\n\n $selector = wp_generate_password(12, false, false);\n $validator = wp_generate_password(32, false, false);\n $token = $selector . \'.\' . $validator;\n $expires = time() + DAY_IN_SECONDS;\n\n $store[$device_key] = [\n \'selector\' => $selector,\n \'hash\' => wp_hash_password($validator),\n \'expires\' => $expires,\n \'issued\' => time(),\n ];\n\n ms_switch_save_store($user_id, $store);\n\n return [\n \'token\' => $token,\n \'expires\' => $expires,\n ];\n }\n}\n\nif (!function_exists(\'ms_switch_verify_token\')) {\n function ms_switch_verify_token($user_id, $device_key, $token) {\n if (!$user_id || !$device_key || !$token) return false;\n\n $store = ms_switch_cleanup_store(ms_switch_get_store($user_id));\n ms_switch_save_store($user_id, $store);\n\n if (empty($store[$device_key])) return false;\n\n $row = $store[$device_key];\n\n if (empty($row[\'selector\']) || empty($row[\'hash\']) || empty($row[\'expires\'])) {\n return false;\n }\n\n if ((int) $row[\'expires\'] < time()) {\n return false;\n }\n\n $parts = explode(\'.\', $token, 2);\n if (count($parts) !== 2) return false;\n\n list($selector, $validator) = $parts;\n\n if (!hash_equals((string) $row[\'selector\'], (string) $selector)) {\n return false;\n }\n\n if (!wp_check_password($validator, $row[\'hash\'])) {\n return false;\n }\n\n return true;\n }\n}\n\n/* =========================================================\n * 2) REST API\n * ========================================================= */\nadd_action(\'rest_api_init\', function () {\n\n register_rest_route(\'momentry/v1\', \'/register-switch-device\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => function () {\n return is_user_logged_in();\n },\n \'callback\' => function (WP_REST_Request $request) {\n $user = wp_get_current_user();\n if (!$user || !$user->ID) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Not logged in\'\n ], 401);\n }\n\n $device_key = sanitize_text_field((string) $request->get_param(\'device_key\'));\n if (!$device_key) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Missing device_key\'\n ], 400);\n }\n\n $issued = ms_switch_register_device_token($user->ID, $device_key);\n\n return new WP_REST_Response([\n \'ok\' => true,\n \'data\' => [\n \'token\' => $issued[\'token\'],\n \'expires\' => $issued[\'expires\'],\n \'login\' => $user->user_login,\n ]\n ]);\n }\n ]);\n\n register_rest_route(\'momentry/v1\', \'/account-switch\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => function () {\n return is_user_logged_in();\n },\n \'callback\' => function (WP_REST_Request $request) {\n $target_login = sanitize_user((string) $request->get_param(\'login\'));\n $device_key = sanitize_text_field((string) $request->get_param(\'device_key\'));\n $switch_token = sanitize_text_field((string) $request->get_param(\'switch_token\'));\n\n if (!$target_login || !$device_key || !$switch_token) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Missing switch data\',\n \'requires_login\' => true\n ], 400);\n }\n\n $target_user = get_user_by(\'login\', $target_login);\n if (!$target_user || !$target_user->ID) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Target user not found\',\n \'requires_login\' => true\n ], 404);\n }\n\n $valid = ms_switch_verify_token($target_user->ID, $device_key, $switch_token);\n\n if (!$valid) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Token invalid or expired\',\n \'requires_login\' => true\n ], 403);\n }\n\n wp_clear_auth_cookie();\n wp_set_current_user($target_user->ID);\n wp_set_auth_cookie($target_user->ID, true, is_ssl());\n\n do_action(\'wp_login\', $target_user->user_login, $target_user);\n\n return new WP_REST_Response([\n \'ok\' => true,\n \'data\' => [\n \'redirect\' => home_url(\'/search/\'),\n \'login\' => $target_user->user_login,\n ]\n ]);\n }\n ]);\n\n});\n\n/* =========================================================\n * 3) Main layer wrapper\n * ========================================================= */\nadd_filter(\'the_content\', function ($content) {\n\n if (!is_page([\n \'lt-searching\',\n \'search-chat\',\n \'upgrade-plan\',\n \'personalization\',\n \'settings\',\n \'help\',\n \'ww-04-07-api\',\n \'library\',\n \'people\',\n \'progress\',\n \'momentry-api-console\',\n \'logs\',\n \'metrics\',\n \'measure\',\n \'Evaluation\',\n \'raptor-api-console\',\n \'demo\'\n\n\n ])) return $content;\n\n if (strpos($content, \'class=\"ms-app\"\') !== false) return $content;\n\n $is_search_lab = is_page(\'search-lab\');\n $can_view_search_lab = true;\n if ($is_search_lab) {\n if (!is_user_logged_in()) {\n $can_view_search_lab = false;\n } else {\n $u_check = wp_get_current_user();\n $allowed_roles = [\'administrator\', \'editor\'];\n $can_view_search_lab = !empty(array_intersect($allowed_roles, (array) $u_check->roles));\n }\n }\n\n $home_url = home_url(\'/lt-searching/\');\n $login_url = wp_login_url($home_url);\n $logout_login_template = wp_logout_url(add_query_arg(\'ms_prefill\', \'__LOGIN__\', $login_url));\n $logout_to_login = wp_logout_url($login_url);\n\n ob_start(); ?>\n\n \n\n \n\n data-current-login=\"user_login); ?>\"data-current-login=\"guest\">\n\n
\n\n Workspace
\n\n \n\n
\n\n \n Search History \n + New \n
\n\n \n\n ID, [\'size\' => 96]); ?>\n\n \n
\" class=\"gs-avatar\" alt=\"avatar\" />\n
\n
display_name); ?>
\n
\n roles)) echo \'Admin\';\n elseif (in_array(\'editor\', $u->roles)) echo \'Editor\';\n elseif (in_array(\'subscriber\', $u->roles)) echo \'Member\';\n else echo \'User\';\n ?>\n
\n
\n\n \n
\n\n \n\n \" class=\"gs-user\">\n 👤
\n \n
Sign in to Momentry
\n
Access your AI workspace
\n
\n \n\n \n\n \n\n roles)) $ms_role = \'admin\';\n elseif (in_array(\'editor\', $current_user->roles)) $ms_role = \'editor\';\n else $ms_role = \'member\';\n }\n ?>\n \n\n
\n \n \n
🔒
\n
Access Restricted
\n
\n Evaluation 僅限 Administrator 與 Editor 角色查看。 \n 如需存取權限,請聯繫管理員。\n
\n
\n 返回首頁\n \n
\n \n \n \n \n\n
\n\n \n \n \n\n\n\n\n\n \n\n \n\n \n\n
\n\n Momentry Studio
\n\n \n\n
\n\n \n Search History \n + New \n
\n\n
\n\n ID, [\'size\' => 96]); ?>\n\n \n
\" class=\"gs-avatar\" alt=\"avatar\" />\n
\n
display_name); ?>
\n
\n roles)) echo \'Admin\';\n elseif (in_array(\'editor\', $u->roles)) echo \'Editor\';\n elseif (in_array(\'subscriber\', $u->roles)) echo \'Member\';\n else echo \'User\';\n ?>\n
\n
\n\n \n
\n\n \n\n \" class=\"gs-user\">\n 👤
\n \n
Sign in to Momentry
\n
Access your AI workspace
\n
\n \n\n \n\n \n\n
\n \n \n\n
\n\n 播放影片\n * 2. ?momentry_thumb=1&uuid=xxx&t=1542.64 -> 取指定秒數縮圖\n */\n\nif (!defined(\'MOMENTRY_API_BASE\')) {\n define(\'MOMENTRY_API_BASE\', \'http://192.168.110.201:3002\');\n}\n\nif (!defined(\'MOMENTRY_API_KEY\')) {\n define(\'MOMENTRY_API_KEY\', \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\');\n}\n\nif (!defined(\'MOMENTRY_FFMPEG_PATH\')) {\n // Apple Silicon 常見路徑\n define(\'MOMENTRY_FFMPEG_PATH\', \'/opt/homebrew/bin/ffmpeg\');\n}\n\nadd_action(\'init\', function () {\n if (isset($_GET[\'momentry_video\'])) {\n momentry_output_video();\n }\n\n if (isset($_GET[\'momentry_thumb\'])) {\n momentry_output_thumb();\n }\n});\n\nfunction momentry_parse_http_range($range_header, $size) {\n if (!$range_header || $size <= 0) {\n return null;\n }\n\n if (!preg_match(\'/bytes=([0-9]*)-([0-9]*)/i\', $range_header, $m)) {\n return null;\n }\n\n $start_raw = $m[1];\n $end_raw = $m[2];\n\n // bytes=START-END\n if ($start_raw !== \'\') {\n $start = (int) $start_raw;\n $end = ($end_raw === \'\') ? ($size - 1) : (int) $end_raw;\n return [$start, $end];\n }\n\n // bytes=-SUFFIX (last N bytes)\n if ($end_raw !== \'\') {\n $suffix = (int) $end_raw;\n if ($suffix <= 0) {\n return null;\n }\n\n $start = max(0, $size - $suffix);\n $end = $size - 1;\n return [$start, $end];\n }\n\n return null;\n}\n\nfunction momentry_lookup_video($uuid) {\n $cache_key = \'momentry_lookup_\' . md5($uuid);\n $cached = get_transient($cache_key);\n if (is_array($cached) && !empty($cached[\'file_path\'])) {\n return $cached;\n }\n\n $lookup_url = MOMENTRY_API_BASE . \'/api/v1/lookup?uuid=\' . rawurlencode($uuid);\n\n $response = wp_remote_get($lookup_url, [\n \'timeout\' => 20,\n \'headers\' => [\n \'Accept\' => \'application/json\',\n \'X-API-Key\' => MOMENTRY_API_KEY,\n ],\n ]);\n\n if (is_wp_error($response)) {\n return new WP_Error(\'lookup_failed\', $response->get_error_message());\n }\n\n $status = wp_remote_retrieve_response_code($response);\n $body = wp_remote_retrieve_body($response);\n $data = json_decode($body, true);\n\n if ($status !== 200 || !is_array($data) || empty($data[\'file_path\'])) {\n return new WP_Error(\'lookup_invalid\', \'Lookup failed. HTTP=\' . $status);\n }\n\n // Short cache to reduce API round-trips during scrubbing/seek.\n set_transient($cache_key, $data, 60);\n return $data;\n}\n\nfunction momentry_validate_path($path) {\n $allowed_roots = [\n \'/Users/accusys/test_video/\',\n \'/Users/accusys/momentry/var/sftpgo/data/demo/\',\n ];\n\n if (!$path || !file_exists($path)) {\n return false;\n }\n\n $real = realpath($path);\n if ($real === false) {\n return false;\n }\n\n foreach ($allowed_roots as $root) {\n $root_real = realpath($root);\n if ($root_real !== false && strpos($real, $root_real) === 0) {\n return $real;\n }\n }\n\n return false;\n}\n\nfunction momentry_detect_mime($path) {\n $ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));\n $mime_map = [\n \'mp4\' => \'video/mp4\',\n \'m4v\' => \'video/x-m4v\',\n \'mov\' => \'video/quicktime\',\n \'webm\' => \'video/webm\',\n ];\n\n return isset($mime_map[$ext]) ? $mime_map[$ext] : \'application/octet-stream\';\n}\n\nfunction momentry_output_video() {\n $uuid = isset($_GET[\'uuid\']) ? sanitize_text_field($_GET[\'uuid\']) : \'\';\n if ($uuid === \'\') {\n status_header(400);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Missing uuid\';\n exit;\n }\n\n // Avoid any extra output that can break streaming.\n if (function_exists(\'wp_ob_end_flush_all\')) {\n wp_ob_end_flush_all();\n } else {\n while (ob_get_level() > 0) {\n ob_end_flush();\n }\n }\n\n $lookup = momentry_lookup_video($uuid);\n if (is_wp_error($lookup)) {\n status_header(502);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Lookup failed: \' . $lookup->get_error_message();\n exit;\n }\n\n $resolved_path = momentry_validate_path($lookup[\'file_path\']);\n if (!$resolved_path) {\n status_header(404);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Video file not found or not allowed\';\n exit;\n }\n\n $size = filesize($resolved_path);\n $mime = momentry_detect_mime($resolved_path);\n\n header(\'Content-Type: \' . $mime);\n header(\'Accept-Ranges: bytes\');\n header(\'Cache-Control: public, max-age=3600\');\n\n $range = isset($_SERVER[\'HTTP_RANGE\']) ? $_SERVER[\'HTTP_RANGE\'] : null;\n\n $parsed_range = momentry_parse_http_range($range, $size);\n if ($parsed_range) {\n [$start, $end] = $parsed_range;\n\n if ($start > $end || $end >= $size) {\n header(\'HTTP/1.1 416 Range Not Satisfiable\');\n header(\"Content-Range: bytes */{$size}\");\n exit;\n }\n\n $length = $end - $start + 1;\n\n header(\'HTTP/1.1 206 Partial Content\');\n header(\"Content-Length: {$length}\");\n header(\"Content-Range: bytes {$start}-{$end}/{$size}\");\n\n $fp = fopen($resolved_path, \'rb\');\n if ($fp === false) {\n status_header(500);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Failed to open video file\';\n exit;\n }\n fseek($fp, $start);\n\n // Turn off buffering/compression to improve streaming throughput.\n @ini_set(\'output_buffering\', \'off\');\n @ini_set(\'zlib.output_compression\', \'0\');\n set_time_limit(0);\n\n $out = fopen(\'php://output\', \'wb\');\n if ($out === false) {\n fclose($fp);\n status_header(500);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Failed to open output stream\';\n exit;\n }\n\n // stream_copy_to_stream is implemented in C and typically faster than\n // echo+fread loops with flush().\n stream_copy_to_stream($fp, $out, $length);\n fclose($out);\n fclose($fp);\n\n exit;\n }\n\n header(\'Content-Length: \' . $size);\n readfile($resolved_path);\n exit;\n}\n\nfunction momentry_output_thumb() {\n $uuid = isset($_GET[\'uuid\']) ? sanitize_text_field($_GET[\'uuid\']) : \'\';\n $time = isset($_GET[\'t\']) ? floatval($_GET[\'t\']) : 0;\n $debug_mode = isset($_GET[\'debug\']) && $_GET[\'debug\'] === \'1\';\n\n if ($uuid === \'\') {\n status_header(400);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Missing uuid\';\n exit;\n }\n\n $lookup = momentry_lookup_video($uuid);\n if (is_wp_error($lookup)) {\n status_header(502);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Lookup failed: \' . $lookup->get_error_message();\n exit;\n }\n\n $video_path = momentry_validate_path($lookup[\'file_path\']);\n if (!$video_path) {\n status_header(404);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'Video file not found or not allowed\';\n exit;\n }\n\n $ffmpeg = MOMENTRY_FFMPEG_PATH;\n if (!file_exists($ffmpeg)) {\n // Intel Mac 常見路徑\n $ffmpeg = \'/usr/local/bin/ffmpeg\';\n }\n\n if (!file_exists($ffmpeg)) {\n status_header(500);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'ffmpeg not found\';\n exit;\n }\n\n $upload = wp_upload_dir();\n $cache_dir = $upload[\'basedir\'] . \'/momentry-thumbs\';\n\n if (!file_exists($cache_dir)) {\n wp_mkdir_p($cache_dir);\n }\n\n $safe_time = max(0, $time);\n // Thumbnails 不需要精確到小數點後多位,時間越精細代表越難命中快取。\n // 統一成整秒可大幅降低 ffmpeg 重複生成的機率。\n $time_key = (string) (int) floor($safe_time);\n $thumb_key = md5($uuid . \'_\' . $time_key);\n $thumb_file = $cache_dir . \'/\' . $thumb_key . \'.jpg\';\n $lock_file = $cache_dir . \'/\' . $thumb_key . \'.lock\';\n\n $is_hit_before = file_exists($thumb_file);\n\n if (!$is_hit_before) {\n // Prevent thundering herd: only one generator per uuid+t.\n $lock_fp = fopen($lock_file, \'c\');\n if ($lock_fp !== false) {\n flock($lock_fp, LOCK_EX);\n }\n\n // Re-check after acquiring lock.\n if (!file_exists($thumb_file)) {\n $cmd = escapeshellarg($ffmpeg)\n . \' -hide_banner -loglevel error -nostdin\'\n . \' -an -sn -dn\'\n . \' -ss \' . escapeshellarg($time_key)\n . \' -noaccurate_seek\'\n . \' -i \' . escapeshellarg($video_path)\n . \' -frames:v 1 -q:v 5 -vf scale=640:-1\'\n . \' -y \' . escapeshellarg($thumb_file)\n . \' 2>&1\';\n\n exec($cmd, $output, $ret);\n\n if ($ret !== 0 || !file_exists($thumb_file)) {\n if ($lock_fp !== false) {\n flock($lock_fp, LOCK_UN);\n fclose($lock_fp);\n }\n status_header(500);\n header(\'Content-Type: text/plain; charset=utf-8\');\n echo \'thumbnail generation failed\';\n exit;\n }\n }\n\n if ($lock_fp !== false) {\n flock($lock_fp, LOCK_UN);\n fclose($lock_fp);\n }\n }\n\n $is_hit_after = file_exists($thumb_file);\n\n if ($debug_mode) {\n header(\'Content-Type: application/json; charset=utf-8\');\n echo json_encode([\n \'uuid\' => $uuid,\n \'t_input\' => $time,\n \'time_key\' => $time_key,\n \'thumb_status_before\' => $is_hit_before ? \'HIT\' : \'MISS\',\n \'thumb_status_after\' => $is_hit_after ? \'HIT\' : \'MISS\',\n \'thumb_file_exists_before\' => $is_hit_before,\n \'thumb_file_exists_after\' => $is_hit_after,\n \'thumb_file\' => basename($thumb_file),\n ], JSON_UNESCAPED_SLASHES);\n exit;\n }\n\n header(\'Content-Type: image/jpeg\');\n header(\'Cache-Control: public, max-age=86400\');\n header(\'Content-Length: \' . filesize($thumb_file));\n readfile($thumb_file);\n exit;\n}','','global',0,10,-1,'2026-03-26 12:42:23',1,NULL),
(44,'functions','','\n/**\n * Momentry Identity Manager AJAX Proxy\n * functions.php\n */\n\n/**\n * Source mode\n * person_list = 目前沿用 person-list\n * identity_candidates = 未來改成真實 identity-candidates\n */\nif (!defined(\'MOMENTRY_CORE_API_BASE\')) {\n define(\'MOMENTRY_CORE_API_BASE\', \'http://192.168.110.201:3002\');\n}\n\nif (!defined(\'MOMENTRY_CORE_API_KEY\')) {\n define(\'MOMENTRY_CORE_API_KEY\', \'muser_68600856036340bcafc01930eb4bd839\');\n}\n\nif (!defined(\'MOMENTRY_PEOPLE_SOURCE_MODE\')) {\n define(\'MOMENTRY_PEOPLE_SOURCE_MODE\', \'person_list\');\n}\n\nif (!defined(\'MOMENTRY_PERSON_LIST_URL\')) {\n define(\'MOMENTRY_PERSON_LIST_URL\', \'https://n8n.momentry.ddns.net/webhook/person-list\');\n}\n\nif (!defined(\'MOMENTRY_PERSON_LIST_MODE\')) {\n define(\'MOMENTRY_PERSON_LIST_MODE\', \'mock\');\n}\n\nif (!defined(\'MOMENTRY_IDENTITY_CANDIDATES_URL\')) {\n define(\'MOMENTRY_IDENTITY_CANDIDATES_URL\', \'https://n8n.momentry.ddns.net/webhook/identity-candidates\');\n}\n\nif (!defined(\'MOMENTRY_IDENTITY_LABEL_URL\')) {\n define(\'MOMENTRY_IDENTITY_LABEL_URL\', \'https://n8n.momentry.ddns.net/webhook/identity-label\');\n}\n\nif (!defined(\'MOMENTRY_IDENTITY_MERGE_URL\')) {\n define(\'MOMENTRY_IDENTITY_MERGE_URL\', \'https://n8n.momentry.ddns.net/webhook/identity-merge\');\n}\n\nif (!defined(\'MOMENTRY_IDENTITY_RESOLVE_URL\')) {\n define(\'MOMENTRY_IDENTITY_RESOLVE_URL\', \'https://n8n.momentry.ddns.net/webhook/identity-search-resolve\');\n}\n\nif (!defined(\'MOMENTRY_SEARCH_URL\')) {\n define(\'MOMENTRY_SEARCH_URL\', \'https://n8n.momentry.ddns.net/webhook/search\');\n}\n\nif (!defined(\'MOMENTRY_DEFAULT_VIDEO_UUID\')) {\n define(\'MOMENTRY_DEFAULT_VIDEO_UUID\', \'384b0ff44aaaa1f1\');\n}\n\n/**\n * Generic POST proxy for n8n endpoints\n */\nif (!function_exists(\'momentry_identity_proxy_post\')) {\n function momentry_identity_proxy_post($url, $payload = array()) {\n $args = array(\n \'timeout\' => 20,\n \'headers\' => array(\n \'Content-Type\' => \'application/json; charset=utf-8\',\n ),\n \'body\' => wp_json_encode($payload),\n );\n\n $response = wp_remote_post($url, $args);\n\n if (is_wp_error($response)) {\n return array(\n \'ok\' => false,\n \'status\' => 500,\n \'body\' => array(\n \'message\' => $response->get_error_message(),\n ),\n );\n }\n\n $status = wp_remote_retrieve_response_code($response);\n $body_raw = wp_remote_retrieve_body($response);\n $body = json_decode($body_raw, true);\n\n if (!is_array($body)) {\n $body = array(\n \'raw\' => $body_raw,\n );\n }\n\n return array(\n \'ok\' => ($status >= 200 && $status < 300),\n \'status\' => $status,\n \'body\' => $body,\n );\n }\n}\n\n/**\n * Generic request for Core API\n */\nif (!function_exists(\'momentry_core_request\')) {\n function momentry_core_request($method, $url, $payload = array()) {\n $args = array(\n \'method\' => strtoupper($method),\n \'timeout\' => 20,\n \'headers\' => array(\n \'Content-Type\' => \'application/json; charset=utf-8\',\n \'X-API-Key\' => MOMENTRY_CORE_API_KEY,\n ),\n );\n\n if (!empty($payload)) {\n $args[\'body\'] = wp_json_encode($payload);\n }\n\n $response = wp_remote_request($url, $args);\n\n if (is_wp_error($response)) {\n return array(\n \'ok\' => false,\n \'status\' => 500,\n \'body\' => array(\n \'message\' => $response->get_error_message(),\n ),\n );\n }\n\n $status = wp_remote_retrieve_response_code($response);\n $body_raw = wp_remote_retrieve_body($response);\n $body = json_decode($body_raw, true);\n\n if (!is_array($body)) {\n $body = array(\n \'raw\' => $body_raw,\n );\n }\n\n return array(\n \'ok\' => ($status >= 200 && $status < 300),\n \'status\' => $status,\n \'body\' => $body,\n );\n }\n}\n\n/**\n * Normalize person-list result to frontend items\n */\nif (!function_exists(\'momentry_normalize_person_list_items\')) {\n function momentry_normalize_person_list_items($items = array()) {\n $normalized = array();\n\n if (!is_array($items)) {\n return $normalized;\n }\n\n foreach ($items as $index => $item) {\n if (!is_array($item)) {\n continue;\n }\n\n $video_uuid = \'\';\n if (!empty($item[\'video_uuid\'])) {\n $video_uuid = sanitize_text_field($item[\'video_uuid\']);\n } elseif (!empty($item[\'sample_video_id\'])) {\n $video_uuid = sanitize_text_field($item[\'sample_video_id\']);\n } elseif (!empty($item[\'video_id\'])) {\n $video_uuid = sanitize_text_field($item[\'video_id\']);\n } else {\n $video_uuid = MOMENTRY_DEFAULT_VIDEO_UUID;\n }\n\n $person_id = \'\';\n if (!empty($item[\'person_id\'])) {\n $person_id = sanitize_text_field($item[\'person_id\']);\n } elseif (!empty($item[\'id\'])) {\n $person_id = sanitize_text_field($item[\'id\']);\n }\n\n $candidate_id = \'\';\n if ($video_uuid !== \'\' && $person_id !== \'\') {\n $candidate_id = $video_uuid . \'__\' . $person_id;\n } elseif (!empty($item[\'candidate_id\'])) {\n $candidate_id = sanitize_text_field($item[\'candidate_id\']);\n } elseif (!empty($item[\'identity_id\'])) {\n $candidate_id = sanitize_text_field($item[\'identity_id\']);\n } elseif (!empty($item[\'id\'])) {\n $candidate_id = sanitize_text_field($item[\'id\']);\n } else {\n $candidate_id = \'cand_auto_\' . ($index + 1);\n }\n\n $display_name = \'\';\n if (!empty($item[\'display_name\'])) {\n $display_name = sanitize_text_field($item[\'display_name\']);\n } elseif (!empty($item[\'name\'])) {\n $display_name = sanitize_text_field($item[\'name\']);\n } elseif (!empty($item[\'title\'])) {\n $display_name = sanitize_text_field($item[\'title\']);\n } elseif ($person_id !== \'\') {\n $display_name = $person_id;\n }\n\n $preview_image = \'\';\n if (!empty($item[\'preview_image\'])) {\n $preview_image = esc_url_raw($item[\'preview_image\']);\n } elseif (!empty($item[\'thumbnail\'])) {\n $preview_image = esc_url_raw($item[\'thumbnail\']);\n } elseif (!empty($item[\'thumb_url\'])) {\n $preview_image = esc_url_raw($item[\'thumb_url\']);\n }\n\n $sample_video_id = \'\';\n if (!empty($item[\'sample_video_id\'])) {\n $sample_video_id = sanitize_text_field($item[\'sample_video_id\']);\n } elseif (!empty($item[\'video_id\'])) {\n $sample_video_id = sanitize_text_field($item[\'video_id\']);\n } elseif ($video_uuid !== \'\') {\n $sample_video_id = $video_uuid;\n }\n\n $sample_t_start = 0;\n if (isset($item[\'sample_t_start\'])) {\n $sample_t_start = floatval($item[\'sample_t_start\']);\n } elseif (isset($item[\'t_start\'])) {\n $sample_t_start = floatval($item[\'t_start\']);\n }\n\n if ($preview_image === \'\' && $sample_video_id !== \'\') {\n $preview_image = home_url(\'/?momentry_thumb=1&uuid=\' . rawurlencode($sample_video_id) . \'&t=\' . rawurlencode($sample_t_start));\n }\n\n $normalized[] = array(\n \'candidate_id\' => $candidate_id,\n \'video_uuid\' => $video_uuid,\n \'person_id\' => $person_id,\n \'display_name\' => $display_name,\n \'preview_image\' => $preview_image,\n \'count\' => isset($item[\'count\']) ? intval($item[\'count\']) : (isset($item[\'appearances\']) ? intval($item[\'appearances\']) : 0),\n \'source_type\' => !empty($item[\'source_type\']) ? sanitize_text_field($item[\'source_type\']) : \'person\',\n \'face_cluster_id\' => !empty($item[\'face_cluster_id\']) ? sanitize_text_field($item[\'face_cluster_id\']) : \'\',\n \'speaker_cluster_id\' => !empty($item[\'speaker_cluster_id\']) ? sanitize_text_field($item[\'speaker_cluster_id\']) : \'\',\n \'last_seen\' => !empty($item[\'last_seen\']) ? sanitize_text_field($item[\'last_seen\']) : \'\',\n \'sample_video_id\' => $sample_video_id,\n \'sample_t_start\' => $sample_t_start,\n );\n }\n\n return $normalized;\n }\n}\n\n/**\n * Load candidates / people\n */\nfunction momentry_ajax_identity_candidates() {\n $query = isset($_POST[\'query\']) ? sanitize_text_field(wp_unslash($_POST[\'query\'])) : \'\';\n $limit = isset($_POST[\'limit\']) ? intval($_POST[\'limit\']) : 30;\n\nif (MOMENTRY_PEOPLE_SOURCE_MODE === \'person_list\') {\n $result = momentry_identity_proxy_post(\n MOMENTRY_PERSON_LIST_URL,\n array(\n \'query\' => $query,\n \'limit\' => $limit > 0 ? $limit : 30,\n \'mode\' => MOMENTRY_PERSON_LIST_MODE,\n \'video_uuid\' => MOMENTRY_DEFAULT_VIDEO_UUID,\n )\n );\n\n if (!$result[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to load people from person-list\',\n \'detail\' => $result[\'body\'],\n \'status\' => $result[\'status\'],\n ), $result[\'status\']);\n }\n\n $body = $result[\'body\'];\n $items = array();\n\n if (!empty($body[\'items\']) && is_array($body[\'items\'])) {\n $items = $body[\'items\'];\n } elseif (!empty($body[\'results\']) && is_array($body[\'results\'])) {\n $items = $body[\'results\'];\n } elseif (is_array($body)) {\n $items = $body;\n }\n\n $items = momentry_normalize_person_list_items($items);\n\n wp_send_json_success(array(\n \'query\' => $query,\n \'total\' => count($items),\n \'items\' => $items,\n \'source_mode\' => \'person_list\',\n ));\n }\n\n $result = momentry_identity_proxy_post(\n MOMENTRY_IDENTITY_CANDIDATES_URL,\n array(\n \'query\' => $query,\n \'limit\' => $limit > 0 ? $limit : 30,\n )\n );\n\n if (!$result[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to load people from identity-candidates\',\n \'detail\' => $result[\'body\'],\n \'status\' => $result[\'status\'],\n ), $result[\'status\']);\n }\n\n $body = $result[\'body\'];\n\n wp_send_json_success(array(\n \'query\' => isset($body[\'query\']) ? $body[\'query\'] : $query,\n \'total\' => isset($body[\'total\']) ? intval($body[\'total\']) : 0,\n \'items\' => isset($body[\'items\']) && is_array($body[\'items\']) ? $body[\'items\'] : array(),\n \'source_mode\' => \'identity_candidates\',\n ));\n}\nadd_action(\'wp_ajax_momentry_identity_candidates\', \'momentry_ajax_identity_candidates\');\nadd_action(\'wp_ajax_nopriv_momentry_identity_candidates\', \'momentry_ajax_identity_candidates\');\n\n/**\n * Rename person via Core PATCH\n */\nfunction momentry_ajax_person_rename() {\n $video_uuid = isset($_POST[\'video_uuid\']) ? sanitize_text_field(wp_unslash($_POST[\'video_uuid\'])) : \'\';\n $person_id = isset($_POST[\'person_id\']) ? sanitize_text_field(wp_unslash($_POST[\'person_id\'])) : \'\';\n $name = isset($_POST[\'name\']) ? sanitize_text_field(wp_unslash($_POST[\'name\'])) : \'\';\n\n if ($video_uuid === \'\' || $person_id === \'\') {\n wp_send_json_error(array(\'message\' => \'video_uuid and person_id are required\'), 400);\n }\n\n $url = MOMENTRY_CORE_API_BASE . \'/api/v1/person/\' . rawurlencode($person_id) . \'?video_uuid=\' . rawurlencode($video_uuid);\n\n $result = momentry_core_request(\'PATCH\', $url, array(\n \'name\' => $name,\n ));\n\n if (!$result[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to rename person\',\n \'detail\' => $result[\'body\'],\n \'status\' => $result[\'status\'],\n ), $result[\'status\']);\n }\n\n wp_send_json_success(array(\n \'ok\' => true,\n \'video_uuid\' => $video_uuid,\n \'person_id\' => $person_id,\n \'name\' => $name,\n \'response\' => $result[\'body\'],\n ));\n}\nadd_action(\'wp_ajax_momentry_person_rename\', \'momentry_ajax_person_rename\');\nadd_action(\'wp_ajax_nopriv_momentry_person_rename\', \'momentry_ajax_person_rename\');\n\n/**\n * Legacy label flow (保留,但正式 rename 已不走這條)\n */\nfunction momentry_ajax_identity_label() {\n $candidate_id = isset($_POST[\'candidate_id\']) ? sanitize_text_field(wp_unslash($_POST[\'candidate_id\'])) : \'\';\n $display_name = isset($_POST[\'display_name\']) ? sanitize_text_field(wp_unslash($_POST[\'display_name\'])) : \'\';\n\n if ($candidate_id === \'\') {\n wp_send_json_error(array(\'message\' => \'candidate_id is required\'), 400);\n }\n\n $result = momentry_identity_proxy_post(\n MOMENTRY_IDENTITY_LABEL_URL,\n array(\n \'candidate_id\' => $candidate_id,\n \'display_name\' => $display_name,\n )\n );\n\n if (!$result[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to save label\',\n \'detail\' => $result[\'body\'],\n \'status\' => $result[\'status\'],\n ), $result[\'status\']);\n }\n\n wp_send_json_success($result[\'body\']);\n}\nadd_action(\'wp_ajax_momentry_identity_label\', \'momentry_ajax_identity_label\');\nadd_action(\'wp_ajax_nopriv_momentry_identity_label\', \'momentry_ajax_identity_label\');\n\n/**\n * Merge\n */\nfunction momentry_ajax_identity_merge() {\n $identity_name = isset($_POST[\'identity_name\']) ? sanitize_text_field(wp_unslash($_POST[\'identity_name\'])) : \'\';\n $candidate_ids = isset($_POST[\'candidate_ids\']) ? (array) $_POST[\'candidate_ids\'] : array();\n\n $candidate_ids = array_values(array_filter(array_map(\'sanitize_text_field\', $candidate_ids)));\n\n if ($identity_name === \'\' || empty($candidate_ids)) {\n wp_send_json_error(array(\'message\' => \'identity_name and candidate_ids are required\'), 400);\n }\n\n $result = momentry_identity_proxy_post(\n MOMENTRY_IDENTITY_MERGE_URL,\n array(\n \'identity_name\' => $identity_name,\n \'candidate_ids\' => $candidate_ids,\n )\n );\n\n if (!$result[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to merge identities\',\n \'detail\' => $result[\'body\'],\n \'status\' => $result[\'status\'],\n ), $result[\'status\']);\n }\n\n wp_send_json_success($result[\'body\']);\n}\nadd_action(\'wp_ajax_momentry_identity_merge\', \'momentry_ajax_identity_merge\');\nadd_action(\'wp_ajax_nopriv_momentry_identity_merge\', \'momentry_ajax_identity_merge\');\n\n/**\n * Resolve\n */\nfunction momentry_ajax_identity_resolve() {\n $name = isset($_POST[\'name\']) ? sanitize_text_field(wp_unslash($_POST[\'name\'])) : \'\';\n\n if ($name === \'\') {\n wp_send_json_error(array(\'message\' => \'name is required\'), 400);\n }\n\n $result = momentry_identity_proxy_post(\n MOMENTRY_IDENTITY_RESOLVE_URL,\n array(\n \'name\' => $name,\n )\n );\n\n if (!$result[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to resolve identity\',\n \'detail\' => $result[\'body\'],\n \'status\' => $result[\'status\'],\n ), $result[\'status\']);\n }\n\n wp_send_json_success($result[\'body\']);\n}\nadd_action(\'wp_ajax_momentry_identity_resolve\', \'momentry_ajax_identity_resolve\');\nadd_action(\'wp_ajax_nopriv_momentry_identity_resolve\', \'momentry_ajax_identity_resolve\');\n\n/**\n * Search moments by resolved identity\n */\nfunction momentry_ajax_identity_search() {\n $name = isset($_POST[\'name\']) ? sanitize_text_field(wp_unslash($_POST[\'name\'])) : \'\';\n\n if ($name === \'\') {\n wp_send_json_error(array(\'message\' => \'name is required\'), 400);\n }\n\n $resolve = momentry_identity_proxy_post(\n MOMENTRY_IDENTITY_RESOLVE_URL,\n array(\n \'name\' => $name,\n )\n );\n\n if (!$resolve[\'ok\'] || empty($resolve[\'body\'][\'ok\'])) {\n wp_send_json_error(array(\n \'message\' => \'Identity not found\',\n \'detail\' => $resolve[\'body\'],\n ), 404);\n }\n\n $resolved = $resolve[\'body\'];\n\n $search = momentry_identity_proxy_post(\n MOMENTRY_SEARCH_URL,\n array(\n \'query\' => \'\',\n \'limit\' => 12,\n \'filters\' => array(\n \'identity_id\' => isset($resolved[\'identity_id\']) ? $resolved[\'identity_id\'] : \'\',\n \'candidate_ids\' => isset($resolved[\'candidate_ids\']) ? $resolved[\'candidate_ids\'] : array(),\n \'face_cluster_ids\' => isset($resolved[\'face_cluster_ids\']) ? $resolved[\'face_cluster_ids\'] : array(),\n \'speaker_cluster_ids\' => isset($resolved[\'speaker_cluster_ids\']) ? $resolved[\'speaker_cluster_ids\'] : array(),\n ),\n )\n );\n\n if (!$search[\'ok\']) {\n wp_send_json_error(array(\n \'message\' => \'Failed to search video moments\',\n \'detail\' => $search[\'body\'],\n \'status\' => $search[\'status\'],\n ), $search[\'status\']);\n }\n\n wp_send_json_success(array(\n \'resolve\' => $resolved,\n \'search\' => $search[\'body\'],\n ));\n}\nadd_action(\'wp_ajax_momentry_identity_search\', \'momentry_ajax_identity_search\');\nadd_action(\'wp_ajax_nopriv_momentry_identity_search\', \'momentry_ajax_identity_search\');','who','global',0,10,-1,'2026-04-17 10:22:06',1,NULL),
(45,'Function-LT','','add_action(\'wp_footer\', function () {\n if (!is_page(\'who-lt\')) return;\n ?>\n \n 回報問題','add_action(\'wp_head\', function () {\n if (is_user_logged_in()) {\n echo \'\';\n } else {\n echo \'\';\n }\n});\n\nadd_action(\'rest_api_init\', function () {\n register_rest_route(\'momentry/v1\', \'/help-report\', array(\n \'methods\' => \'POST\',\n \'callback\' => \'ms_handle_help_report\',\n \'permission_callback\' => function () {\n return is_user_logged_in();\n },\n ));\n});\n\nfunction ms_handle_help_report($request) {\n $params = $request->get_json_params();\n\n $message = isset($params[\'message\']) ? trim(wp_unslash($params[\'message\'])) : \'\';\n $page = isset($params[\'page\']) ? esc_url_raw($params[\'page\']) : \'\';\n $submitted_at = isset($params[\'submitted_at\']) ? sanitize_text_field($params[\'submitted_at\']) : \'\';\n $user_agent = isset($params[\'user_agent\']) ? sanitize_text_field($params[\'user_agent\']) : \'\';\n\n if ($message === \'\') {\n return new WP_REST_Response(array(\n \'success\' => false,\n \'message\' => \'請輸入內容\'\n ), 400);\n }\n\n $current_user = wp_get_current_user();\n $user_login = \'\';\n $display_name = \'\';\n $user_email = \'\';\n\n if ($current_user && $current_user->exists()) {\n $user_login = $current_user->user_login;\n $display_name = $current_user->display_name;\n $user_email = $current_user->user_email;\n }\n\n $mail_subject = \'Momentry 問題回報 - \' . ($user_login ?: \'guest\');\n\n $mail_body = \"收到新的 Momentry 問題回報\\n\\n\";\n $mail_body .= \"寄出者帳號: \" . ($user_login ?: \'(未登入)\') . \"\\n\";\n $mail_body .= \"顯示名稱: \" . ($display_name ?: \'-\') . \"\\n\";\n $mail_body .= \"Email: \" . ($user_email ?: \'-\') . \"\\n\";\n $mail_body .= \"頁面: \" . ($page ?: \'-\') . \"\\n\";\n $mail_body .= \"提交時間: \" . ($submitted_at ?: current_time(\'mysql\')) . \"\\n\";\n $mail_body .= \"User Agent: \" . ($user_agent ?: \'-\') . \"\\n\";\n $mail_body .= \"\\n-----------------------------\\n\";\n $mail_body .= \"問題內容:\\n\" . $message . \"\\n\";\n\n \n $headers = array(\n \'Content-Type: text/plain; charset=UTF-8\'\n );\n\n if (!empty($user_email)) {\n $headers[] = \'Reply-To: \' . $display_name . \' <\' . $user_email . \'>\';\n }\n\n wp_mail(\n \'una@accusys.com.tw\',\n $mail_subject,\n $mail_body,\n $headers\n );\n\n\n return new WP_REST_Response(array(\n \'success\' => true,\n \'message\' => \'已成功送出問題回報\'\n ), 200);\n}','','global',0,10,1,'2026-05-20 15:14:59',1,NULL),
(47,'People Tab Bar','','/**\n * Momentry People Tab Bar\n * 用于 lt-people-files / lt-people-people\n * 点击顶部「档案管理 / 人物管理」时,不刷新 sidebar,只替换右边内容\n */\n\nadd_filter(\'the_content\', function ($content) {\n\n if (!is_page([\'lt-people-files\', \'lt-people-people\'])) return $content;\n\n $is_files = is_page(\'lt-people-files\');\n $is_people = is_page(\'lt-people-people\');\n\n ob_start(); ?>\n\n \n\n \n\n \n\n \n\n 測試-讀取本地檔案用','if (!defined(\'ABSPATH\')) {\n exit;\n}\n\ndefine(\'MOMENTRY_CORE_BASE_URL\', \'http://192.168.110.201:3002\');\ndefine(\'MOMENTRY_API_KEY\', \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\');\n\n/**\n * Call Momentry Core API\n */\nfunction momentry_call_core($method, $path, $body = null) {\n $url = rtrim(MOMENTRY_CORE_BASE_URL, \'/\') . $path;\n\n $args = [\n \'method\' => strtoupper($method),\n \'headers\' => [\n \'X-API-Key\' => MOMENTRY_API_KEY,\n \'Content-Type\' => \'application/json\',\n \'Accept\' => \'application/json\',\n ],\n \'timeout\' => 30,\n ];\n\n if ($body !== null) {\n $args[\'body\'] = wp_json_encode($body);\n }\n\n $response = wp_remote_request($url, $args);\n\n if (is_wp_error($response)) {\n return [\n \'ok\' => false,\n \'core_url\' => $url,\n \'http_code\' => 0,\n \'raw_response\' => \'\',\n \'data\' => null,\n \'error\' => $response->get_error_message(),\n ];\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $raw_body = wp_remote_retrieve_body($response);\n $data = json_decode($raw_body, true);\n\n return [\n \'ok\' => ($http_code >= 200 && $http_code < 300),\n \'core_url\' => $url,\n \'http_code\' => $http_code,\n \'raw_response\' => $raw_body,\n \'data\' => $data,\n ];\n}\n\n/**\n * Register Momentry REST API routes\n */\nadd_action(\'rest_api_init\', function () {\n\n register_rest_route(\'momentry/v1\', \'/health\', [\n \'methods\' => \'GET\',\n \'callback\' => function () {\n return momentry_call_core(\'GET\', \'/health\');\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/videos\', [\n \'methods\' => \'GET\',\n \'callback\' => function () {\n return momentry_call_core(\'GET\', \'/api/v1/videos\');\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/scan\', [\n \'methods\' => \'GET\',\n \'callback\' => function () {\n return momentry_call_core(\'GET\', \'/api/v1/files/scan\');\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/lookup/(?P[^/]+)\', [\n \'methods\' => \'GET\',\n \'callback\' => function ($request) {\n $uuid = sanitize_text_field($request[\'uuid\']);\n\n return momentry_call_core(\n \'GET\',\n \'/api/v1/lookup?uuid=\' . rawurlencode($uuid)\n );\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/progress/(?P[^/]+)\', [\n \'methods\' => \'GET\',\n \'callback\' => function ($request) {\n $uuid = sanitize_text_field($request[\'uuid\']);\n\n return momentry_call_core(\n \'GET\',\n \'/api/v1/progress/\' . rawurlencode($uuid)\n );\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/process/(?P[^/]+)\', [\n \'methods\' => \'POST\',\n \'callback\' => function ($request) {\n $uuid = sanitize_text_field($request[\'uuid\']);\n $body = $request->get_json_params();\n\n if (!is_array($body)) {\n $body = [];\n }\n\n return momentry_call_core(\n \'POST\',\n \'/api/v1/assets/\' . rawurlencode($uuid) . \'/process\',\n $body\n );\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/search\', [\n \'methods\' => \'POST\',\n \'callback\' => function ($request) {\n $body = $request->get_json_params();\n\n if (!is_array($body)) {\n $body = [];\n }\n\n return momentry_call_core(\'POST\', \'/api/v1/search\', [\n \'query\' => sanitize_text_field($body[\'query\'] ?? \'\'),\n \'limit\' => intval($body[\'limit\'] ?? 10),\n ]);\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/register\', [\n \'methods\' => \'POST\',\n \'callback\' => function ($request) {\n $body = $request->get_json_params();\n $file_path = sanitize_text_field($body[\'file_path\'] ?? $request->get_param(\'file_path\'));\n\n return momentry_call_core(\'POST\', \'/api/v1/files/register\', [\n \'file_path\' => $file_path,\n ]);\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/unregister\', [\n \'methods\' => \'POST\',\n \'callback\' => function ($request) {\n $body = $request->get_json_params();\n $uuid = sanitize_text_field($body[\'uuid\'] ?? $request->get_param(\'uuid\'));\n\n return momentry_call_core(\'POST\', \'/api/v1/unregister\', [\n \'uuid\' => $uuid,\n ]);\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/probe/(?P[^/]+)\', [\n \'methods\' => \'GET\',\n \'callback\' => function ($request) {\n $uuid = sanitize_text_field($request[\'uuid\']);\n\n return momentry_call_core(\n \'GET\',\n \'/api/v1/files/\' . rawurlencode($uuid) . \'/probe\'\n );\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/faces\', [\n \'methods\' => \'GET\',\n \'callback\' => function ($request) {\n $file_uuid = sanitize_text_field($request->get_param(\'file_uuid\'));\n $min_confidence = sanitize_text_field($request->get_param(\'min_confidence\') ?: \'0.5\');\n $page_size = sanitize_text_field($request->get_param(\'page_size\') ?: \'20\');\n\n $path = \'/api/v1/faces/candidates\'\n . \'?file_uuid=\' . rawurlencode($file_uuid)\n . \'&min_confidence=\' . rawurlencode($min_confidence)\n . \'&page_size=\' . rawurlencode($page_size);\n\n return momentry_call_core(\'GET\', $path);\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/bind\', [\n \'methods\' => \'POST\',\n \'callback\' => function ($request) {\n $body = $request->get_json_params();\n\n if (!is_array($body)) {\n $body = [];\n }\n\n return momentry_call_core(\'POST\', \'/api/v1/identities/bind\', [\n \'identity_id\' => sanitize_text_field($body[\'identity_id\'] ?? $request->get_param(\'identity_id\')),\n \'binding_type\' => sanitize_text_field($body[\'binding_type\'] ?? $request->get_param(\'binding_type\') ?: \'face\'),\n \'binding_value\' => sanitize_text_field($body[\'binding_value\'] ?? $request->get_param(\'binding_value\')),\n ]);\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n\n register_rest_route(\'momentry/v1\', \'/identities\', [\n \'methods\' => \'GET\',\n \'callback\' => function () {\n return momentry_call_core(\'GET\', \'/api/v1/identities\');\n },\n \'permission_callback\' => \'__return_true\',\n ]);\n});','測試-讀取本地檔案用','global',0,10,1,'2026-05-27 02:10:05',1,NULL),
(49,'Code Snippets / functions -SC','測試-讀取本地檔案用
','add_action(\'rest_api_init\', function () {\n register_rest_route(\'momentry/v1\', \'/explore/files\', [\n \'methods\' => \'GET\',\n \'callback\' => \'momentry_explore_files\',\n \'permission_callback\' => \'__return_true\',\n ]);\n});\n\nfunction momentry_explore_files(WP_REST_Request $request) {\n $dir_key = sanitize_text_field($request->get_param(\'dir\'));\n\n // 只允許這幾個資料夾,避免亂讀整台電腦\n $allowed_dirs = [\n \'downloads\' => \'/Users/susan/Downloads\',\n \'desktop\' => \'/Users/susan/Desktop\',\n ];\n\n if (!isset($allowed_dirs[$dir_key])) {\n return [\n \'ok\' => false,\n \'message\' => \'Directory not allowed\',\n \'files\' => []\n ];\n }\n\n $target_dir = $allowed_dirs[$dir_key];\n\n if (!is_dir($target_dir)) {\n return [\n \'ok\' => false,\n \'message\' => \'Directory not found: \' . $target_dir,\n \'files\' => []\n ];\n }\n\n $items = scandir($target_dir);\n $files = [];\n\n foreach ($items as $item) {\n if ($item === \'.\' || $item === \'..\') continue;\n\n $path = $target_dir . \'/\' . $item;\n\n $files[] = [\n \'name\' => $item,\n \'type\' => is_dir($path) ? \'folder\' : \'file\',\n \'size\' => is_file($path) ? filesize($path) : 0,\n \'modified\' => date(\'Y-m-d H:i:s\', filemtime($path)),\n \'path\' => $path\n ];\n }\n\n return [\n \'ok\' => true,\n \'directory\' => $dir_key,\n \'count\' => count($files),\n \'files\' => $files\n ];\n}','測試-讀取本地檔案用','global',0,10,1,'2026-05-27 02:09:59',1,NULL),
(50,'TEST','','add_shortcode(\'ms_login_form_v2\', function () {\n\n if (is_user_logged_in()) {\n return \'You are already logged in. Go to Playground
\';\n }\n\n ob_start();\n\n echo \'\';\n echo \'
Log in to Momentry Studio \';\n\n if (isset($_GET[\'login\']) && $_GET[\'login\'] === \'failed\') {\n echo \'
Incorrect username or password.
\';\n }\n\n wp_login_form(array(\n \'redirect\' => home_url(\'/lt-searching/\'),\n \'label_username\' => \'Username / Email\',\n \'label_password\' => \'Password\',\n \'label_log_in\' => \'Log in\',\n \'remember\' => true\n ));\n\n echo \'
Forgot password?
\';\n\n if (isset($_GET[\'forgot\']) && $_GET[\'forgot\'] === \'1\') {\n echo \'
Please contact the administrator to reset your password.
\';\n }\n\n echo \'
\';\n\n return ob_get_clean();\n});','','global',0,10,-1,'2026-05-07 02:46:25',1,NULL),
(51,'Momentry Login Failed Redirect -SC','','add_action(\'wp_login_failed\', function () {\n wp_safe_redirect(home_url(\'/login/?login=failed\'));\n exit;\n});\n\nadd_filter(\'authenticate\', function ($user, $username, $password) {\n\n if (empty($username) || empty($password)) {\n wp_safe_redirect(home_url(\'/login/?login=failed\'));\n exit;\n }\n\n return $user;\n\n}, 1, 3);','','global',0,10,-1,'2026-05-07 02:51:08',1,NULL),
(52,'Login Failed Redirect','登入失敗顯示畫面
','add_action(\'wp_login_failed\', function ($username) {\n\n // 清掉可能殘留的登入狀態\n wp_clear_auth_cookie();\n\n $redirect_to = isset($_POST[\'redirect_to\'])\n ? esc_url_raw($_POST[\'redirect_to\'])\n : home_url(\'/lt-searching/\');\n\n wp_safe_redirect(\n home_url(\'/login/?login=failed&redirect_to=\' . rawurlencode($redirect_to))\n );\n\n exit;\n});','登入失敗顯示畫面','global',0,10,1,'2026-05-27 02:09:30',1,NULL),
(53,'Custom Lost Password Page','把 WordPress 預設 reset password 頁面 → 改成 Momentry UI
','add_shortcode(\'ms_lost_password_form\', function () {\n\n ob_start(); ?>\n\n \n\n \n
\n\n
Reset your password \n
Enter your email and we’ll send you a reset link.
\n\n \n
\n Password reset email has been sent.\n
\n \n\n
\n\n
\">\n Back to login\n \n\n
\n
\n\n 可以把 Momentry API 全部在這裡快速測試','add_action(\'rest_api_init\', function () {\n register_rest_route(\'momentry/v1\', \'/api-test\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_test_proxy\',\n \'permission_callback\' => \'__return_true\'\n ]);\n});\n\nfunction momentry_api_test_proxy(WP_REST_Request $request) {\n $base = \'http://192.168.110.201:3002\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $file = \'3abeee81d94597629ed8cb943f182e94\';\n $test_file = \'test_file_uuid\';\n $test_identity = \'test_identity_uuid\';\n\n $allowed = [\n // 1. Core / System\n \'health\' => [\'GET\', \'/health\', \'json\'],\n \'health_detailed\' => [\'GET\', \'/health/detailed\', \'json\'],\n \'auth_login_test\' => [\'POST\', \'/api/v1/auth/login\', \'json\'],\n \'auth_logout\' => [\'POST\', \'/api/v1/auth/logout\', \'json\'],\n \'stats_ingest\' => [\'GET\', \'/api/v1/stats/ingest\', \'json\'],\n \'stats_sftpgo\' => [\'GET\', \'/api/v1/stats/sftpgo\', \'json\'],\n \'stats_inference\' => [\'GET\', \'/api/v1/stats/inference\', \'json\'],\n\n // 2. File Management\n \'files_register\' => [\'POST\', \'/api/v1/files/register\', \'json\'],\n \'unregister\' => [\'POST\', \'/api/v1/unregister\', \'json\'],\n \'files_scan\' => [\'GET\', \'/api/v1/files/scan\', \'json\'],\n \'file_probe\' => [\'GET\', \"/api/v1/file/$file/probe\", \'json\'],\n \'file_process\' => [\'POST\', \"/api/v1/file/$test_file/process\", \'json\'],\n \'file_chunks\' => [\'GET\', \"/api/v1/file/$file/chunks\", \'json\'],\n \'progress\' => [\'GET\', \"/api/v1/progress/$file\", \'json\'],\n \'jobs\' => [\'GET\', \'/api/v1/jobs\', \'json\'],\n \'config_cache\' => [\'POST\', \'/api/v1/config/cache\', \'json\'],\n\n // 3. Visual Search\n \'search_visual\' => [\'POST\', \'/api/v1/search/visual\', \'json\'],\n \'search_visual_class\' => [\'POST\', \'/api/v1/search/visual/class\', \'json\'],\n \'search_visual_density\' => [\'POST\', \'/api/v1/search/visual/density\', \'json\'],\n \'search_visual_combination\' => [\'POST\', \'/api/v1/search/visual/combination\', \'json\'],\n \'search_visual_stats\' => [\'POST\', \'/api/v1/search/visual/stats\', \'json\'],\n\n // 4. File / Identity\n \'files\' => [\'GET\', \'/api/v1/files?page=1&page_size=5\', \'json\'],\n \'file_detail\' => [\'GET\', \"/api/v1/file/$file\", \'json\'],\n \'file_identities\' => [\'GET\', \"/api/v1/file/$file/identities\", \'json\'],\n \'identities\' => [\'GET\', \'/api/v1/identities?page=1&page_size=5\', \'json\'],\n \'identity_create\' => [\'POST\', \'/api/v1/identity\', \'json\'],\n \'identity_detail\' => [\'GET\', \"/api/v1/identity/$test_identity\", \'json\'],\n \'identity_delete\' => [\'DELETE\', \"/api/v1/identity/$test_identity\", \'json\'],\n \'identity_files\' => [\'GET\', \"/api/v1/identity/$test_identity/files\", \'json\'],\n \'identity_chunks\' => [\'GET\', \"/api/v1/identity/$test_identity/chunks\", \'json\'],\n \'resource_register\' => [\'POST\', \'/api/v1/resource/register\', \'json\'],\n \'resource_heartbeat\' => [\'POST\', \'/api/v1/resource/heartbeat\', \'json\'],\n \'resources\' => [\'GET\', \'/api/v1/resources\', \'json\'],\n\n // 5. Identity Binding\n \'identity_bind\' => [\'POST\', \"/api/v1/identity/$test_identity/bind\", \'json\'],\n \'identity_unbind\' => [\'POST\', \"/api/v1/identity/$test_identity/unbind\", \'json\'],\n \'identity_merge\' => [\'POST\', \"/api/v1/identity/$test_identity/mergeinto\", \'json\'],\n\n // 6. Face Candidates\n \'faces_candidates\' => [\'GET\', \'/api/v1/faces/candidates?page=1&page_size=5\', \'json\'],\n\n // 7. Search\n \'search_smart\' => [\'POST\', \'/api/v1/search/smart\', \'json\'],\n \'search_universal\' => [\'POST\', \'/api/v1/search/universal\', \'json\'],\n \'search_frames\' => [\'POST\', \'/api/v1/search/frames\', \'json\'],\n\n // 8. Trace\n \'face_trace_sortby\' => [\'POST\', \"/api/v1/file/$file/face_trace/sortby\", \'json\'],\n \'trace_faces\' => [\'GET\', \"/api/v1/file/$file/trace/2/faces?limit=2&interpolate=true\", \'json\'],\n\n // 9. Media\n \'thumbnail\' => [\'GET\', \"/api/v1/file/$file/thumbnail?frame=4650\", \'binary\'],\n \'video_stream\' => [\'GET\', \"/api/v1/file/$file/video\", \'binary\'],\n \'video_bbox\' => [\'GET\', \"/api/v1/file/$file/video/bbox?start=1&end=3&duration=2\", \'binary\'],\n \'trace_video\' => [\'GET\', \"/api/v1/file/$file/trace/2/video\", \'binary\'],\n\n // 10. Identity Delete duplicate item in dictionary\n \'identity_delete_full\' => [\'DELETE\', \"/api/v1/identity/$test_identity\", \'json\'],\n\n // 11. Agents\n \'translate\' => [\'POST\', \'/api/v1/agents/translate\', \'json\'],\n \'agent_5w1h_analyze\' => [\'POST\', \'/api/v1/agents/5w1h/analyze\', \'json\'],\n \'agent_5w1h_batch\' => [\'POST\', \'/api/v1/agents/5w1h/batch\', \'json\'],\n \'agent_5w1h_status\' => [\'GET\', \'/api/v1/agents/5w1h/status\', \'json\'],\n \'agent_identity_analyze\' => [\'POST\', \'/api/v1/agents/identity/analyze\', \'json\'],\n \'agent_identity_status\' => [\'GET\', \'/api/v1/agents/identity/status\', \'json\'],\n \'agent_identity_suggest\' => [\'POST\', \'/api/v1/agents/identity/suggest\', \'json\'],\n \'agent_suggest_merge\' => [\'POST\', \'/api/v1/agents/suggest/merge\', \'json\'],\n \'agent_suggest_clustering\' => [\'POST\', \'/api/v1/agents/suggest/clustering\', \'json\'],\n ];\n\n $api = sanitize_text_field($request->get_param(\'api\'));\n $body = $request->get_param(\'body\');\n\n if (!isset($allowed[$api])) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'api\' => $api,\n \'message\' => \'API not allowed\'\n ], 400);\n }\n\n [$method, $path, $response_type] = $allowed[$api];\n $url = $base . $path;\n\n $headers = [\n \'X-API-Key\' => $api_key,\n \'Accept\' => \'application/json\'\n ];\n\n if ($response_type === \'binary\') {\n $headers[\'Range\'] = \'bytes=0-2048\';\n }\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 20,\n \'headers\' => $headers\n ];\n\n if (in_array($method, [\'POST\', \'DELETE\'], true)) {\n $args[\'headers\'][\'Content-Type\'] = \'application/json\';\n $args[\'body\'] = json_encode($body ?: []);\n }\n\n $start = microtime(true);\n $response = wp_remote_request($url, $args);\n $latency_ms = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($response)) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'api\' => $api,\n \'method\' => $method,\n \'path\' => $path,\n \'url\' => $url,\n \'latency_ms\' => $latency_ms,\n \'message\' => $response->get_error_message()\n ], 500);\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $content_type = wp_remote_retrieve_header($response, \'content-type\');\n $body_raw = wp_remote_retrieve_body($response);\n $json = json_decode($body_raw, true);\n\n if ($response_type === \'binary\') {\n $data = [\n \'type\' => \'binary_or_stream\',\n \'content_type\' => $content_type,\n \'sample_bytes\' => strlen($body_raw),\n \'note\' => \'Binary response detected. Body is intentionally not displayed.\'\n ];\n } else {\n $data = $json ?? $body_raw;\n }\n\n return [\n \'ok\' => $http_code >= 200 && $http_code < 300,\n \'api\' => $api,\n \'method\' => $method,\n \'path\' => $path,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'response_type\' => $response_type,\n \'data\' => $data\n ];\n}\n\nadd_shortcode(\'momentry_api_dashboard\', function () {\n if (!current_user_can(\'manage_options\')) {\n return \'Admin only.
\';\n }\n\n ob_start();\n ?>\n\n\n
Momentry API Dashboard \n
Core API validation console. Safe APIs can run all. POST / Media / Dangerous checks are manual.
\n\n
\n
\n
Coverage
\n
Loading...
\n
API Dictionary total: 56 endpoints.
\n
\n
\n
Run Summary
\n
Ready
\n
Latency > 500ms will be marked orange.
\n
\n
\n\n
\n Run Safe APIs \n Run POST Tests \n Run Media APIs \n
\n\n
\n
Search Demo \n
\n \n \n Universal Search \n Smart Search \n Visual Search \n Frame Search \n \n Run Search \n
\n
\n\n
Response \n
Click Run to test an API. \n\n
Safe APIs \n
\n\n
POST Test APIs \n
\n\n
Media APIs \n
\n\n
Dangerous APIs — Safe Check Only \n
\n
\n\n\n\n\n\n console.log(\"LT FILES SNIPPET LOADED\");\';\n ?>\n\n \n\n \n \n\n \n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \'POST\',\n \'callback\' => \'momentry_api_test_proxy_v8\',\n \'permission_callback\' => \'__return_true\'\n ]);\n\n register_rest_route(\'momentry/v1\', \'/api-log-v8\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_log_v8\',\n \'permission_callback\' => \'__return_true\'\n ]);\n\n});\n\nfunction momentry_log_dir_v8() {\n $upload = wp_upload_dir();\n $dir = trailingslashit($upload[\'basedir\']) . \'momentry-api-logs\';\n\n if (!file_exists($dir)) {\n wp_mkdir_p($dir);\n }\n\n return $dir;\n}\n\nfunction momentry_safe_log_name_v8($name) {\n $name = sanitize_file_name($name ?: \'momentry-api-debug\');\n $name = preg_replace(\'/\\.log$/\', \'\', $name);\n return $name . \'.log\';\n}\n\nfunction momentry_write_log_v8($log_name, $line) {\n $file = trailingslashit(momentry_log_dir_v8()) . momentry_safe_log_name_v8($log_name);\n file_put_contents($file, $line . \"\\n\", FILE_APPEND);\n return $file;\n}\n\nfunction momentry_trace_id_v8() {\n return \'trc_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n}\n\nfunction momentry_log_level_v8($http_code) {\n if ($http_code >= 500) return \'ERROR\';\n if ($http_code >= 400) return \'WARN\';\n return \'INFO\';\n}\n\nfunction momentry_api_log_v8(WP_REST_Request $request) {\n $action = sanitize_text_field($request->get_param(\'action\'));\n $log_name = momentry_safe_log_name_v8($request->get_param(\'log_name\'));\n $file = trailingslashit(momentry_log_dir_v8()) . $log_name;\n\n if ($action === \'view\') {\n return [\n \'ok\' => true,\n \'log_name\' => $log_name,\n \'content\' => file_exists($file) ? file_get_contents($file) : \'\'\n ];\n }\n\n if ($action === \'clear\') {\n file_put_contents($file, \'\');\n return [\n \'ok\' => true,\n \'message\' => \'Log cleared\',\n \'log_name\' => $log_name\n ];\n }\n\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Invalid log action\'\n ], 400);\n}\n\nfunction momentry_api_test_proxy_v8(WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n\n // TODO: 建議之後移到 wp-config.php,不要長期寫死在頁面 snippet\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $method = strtoupper(sanitize_text_field($request->get_param(\'method\')));\n $path = $request->get_param(\'path\');\n $body = $request->get_param(\'body\');\n $log_name = $request->get_param(\'log_name\') ?: \'momentry-api-debug\';\n\n if (!$method) $method = \'GET\';\n\n if (!$path || strpos($path, \'/\') !== 0) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Path must start with /\'\n ], 400);\n }\n\n $url = rtrim($base, \'/\') . $path;\n\n $headers = [\n \'X-API-Key\' => $api_key,\n \'Accept\' => \'application/json\',\n \'User-Agent\' => \'Momentry-DebugConsole/8.0\'\n ];\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 60,\n \'headers\' => $headers,\n ];\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $args[\'headers\'][\'Content-Type\'] = \'application/json\';\n $args[\'body\'] = wp_json_encode($body ?: []);\n }\n\n $timestamp = gmdate(\'Y-m-d\\TH:i:s.v\\Z\');\n $trace_id = momentry_trace_id_v8();\n\n $start = microtime(true);\n $response = wp_remote_request($url, $args);\n $latency_ms = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($response)) {\n $error_message = $response->get_error_message();\n\n $log_block =\n\"================================================================================\n[$timestamp] [ERROR] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n\" . wp_json_encode($body ?: new stdClass(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . \"\n\nCURL\n--------------------------------------------------------------------------------\ncurl -X $method \\\"$url\\\" \\\\\n-H \\\"X-API-Key: ********\\\" \\\\\n-H \\\"Accept: application/json\\\"\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : NA\nLatency : {$latency_ms}ms\n\nERROR\n--------------------------------------------------------------------------------\n$error_message\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : FAIL\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v8($log_name, $log_block);\n\n return [\n \'ok\' => false,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'latency_ms\' => $latency_ms,\n \'message\' => $error_message\n ];\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $content_type = wp_remote_retrieve_header($response, \'content-type\');\n $body_raw = wp_remote_retrieve_body($response);\n $json = json_decode($body_raw, true);\n $ok = $http_code >= 200 && $http_code < 300;\n $level = momentry_log_level_v8($http_code);\n\n $pretty_request = wp_json_encode(\n $body ?: new stdClass(),\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $pretty_response = wp_json_encode(\n $json ?? $body_raw,\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $curl_command = \"curl -X $method \\\"$url\\\" \\\\\\n-H \\\"X-API-Key: ********\\\" \\\\\\n-H \\\"Accept: application/json\\\"\";\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $curl_command .= \" \\\\\\n-H \\\"Content-Type: application/json\\\" \\\\\\n-d \'\" . $pretty_request . \"\'\";\n }\n\n $summary = $ok ? \'PASS\' : \'FAIL\';\n\n $log_block =\n\"================================================================================\n[$timestamp] [$level] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Momentry Debug Console v8\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : $http_code\nLatency : {$latency_ms}ms\nContent-Type: $content_type\n\nRAW RESPONSE\n--------------------------------------------------------------------------------\n$pretty_response\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : $summary\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v8($log_name, $log_block);\n\n return [\n \'ok\' => $ok,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'content_type\' => $content_type,\n \'request_body\' => $body ?: new stdClass(),\n \'data\' => $json ?? $body_raw\n ];\n}\n\nadd_shortcode(\'momentry_api_dashboard_v8\', function () {\n\nob_start();\n?>\n\n\n\n
Momentry API Debug Console v8 \n\n
\n
Current Log File \n
\n \n Renew Log File \n
\n
\n\n
\n Health \n Health Detailed \n Inference \n Scan \n Register \n Probe \n Process \n Progress \n Unregister \n Identity Text \n Identities Search \n Universal Search \n Smart Search \n Video Clip \n
\n\n
\n
Method \n
\n GET \n POST \n PUT \n PATCH \n DELETE \n HEAD \n \n\n
Path \n
\n\n
Body JSON \n
\n\n
curl command \n
\n\n
\n Run API \n Copy curl \n Copy Response \n View Log \n Download Log \n Clear Log \n
\n
\n\n
Response / Log \n
Ready. \n\n
\n\n\n\n\n\nexists()) return $u->user_login;\n return \'guest\';\n}\n\nfunction momentry_people_write_log($args) {\n global $wpdb;\n $wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => $args[\'trace_id\'] ?? (\'ppl_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false)),\n \'user_id\' => get_current_user_id(),\n \'user_login\' => momentry_people_user_name(),\n \'page_source\' => \'People\',\n \'method\' => $args[\'method\'] ?? \'\',\n \'path\' => $args[\'path\'] ?? \'\',\n \'request_body\' => $args[\'request_body\'] ?? null,\n \'response_body\' => $args[\'response_body\'] ?? null,\n \'http_code\' => intval($args[\'http_code\'] ?? 0),\n \'latency_ms\' => intval($args[\'latency_ms\'] ?? 0),\n \'success\' => !empty($args[\'success\']) ? 1 : 0,\n \'error_message\' => $args[\'error_message\'] ?? null,\n ]\n );\n}\n\nfunction momentry_people_proxy($method, $path, $body = null) {\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 20,\n \'headers\' => [\n \'X-API-Key\' => $api_key,\n \'Content-Type\' => \'application/json\',\n ],\n ];\n\n if ($body !== null) {\n $args[\'body\'] = wp_json_encode($body);\n }\n\n $start = microtime(true);\n $response = wp_remote_request($api_base . $path, $args);\n $latency = round((microtime(true) - $start) * 1000);\n $code = is_wp_error($response) ? 0 : wp_remote_retrieve_response_code($response);\n $ok = ($code >= 200 && $code < 300);\n\n momentry_people_write_log([\n \'method\' => $method,\n \'path\' => \'People proxy → \' . $path,\n \'request_body\' => wp_json_encode($body, JSON_UNESCAPED_UNICODE),\n \'response_body\' => is_wp_error($response) ? $response->get_error_message() : wp_remote_retrieve_body($response),\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'success\' => $ok,\n \'error_message\' => $ok ? null : (is_wp_error($response) ? $response->get_error_message() : \'\'),\n ]);\n\n if (is_wp_error($response)) {\n return new WP_REST_Response([\'error\' => $response->get_error_message()], 502);\n }\n\n $data = json_decode(wp_remote_retrieve_body($response), true);\n return new WP_REST_Response($data ?? [], $code);\n}\n\nadd_action(\'rest_api_init\', function () {\n\n $auth = \'__return_true\';\n\n \n // ── 新增:處理前端 race/id/thumbnail 的請求 ──\n register_rest_route(\'momentry/v1\', \'/proxy/race/(?P[a-zA-Z0-9\\-_]+)/thumbnail\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => \'__return_true\', // 允許所有人讀取縮圖\n \'callback\' => function (WP_REST_Request $req) {\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n \n // 對接到你內部後端的真實路徑\n $response = wp_remote_get($api_base . \'/race/\' . $req[\'id\'] . \'/thumbnail\', [\n \'timeout\' => 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n\n if (is_wp_error($response)) { status_header(404); exit; }\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) { status_header($code); exit; }\n\n $content_type = wp_remote_retrieve_header($response, \'content-type\') ?: \'image/jpeg\';\n header(\'Content-Type: \' . $content_type);\n header(\'Cache-Control: max-age=3600\');\n echo wp_remote_retrieve_body($response);\n exit;\n },\n ]);\n \n \n \n register_rest_route(\'momentry/v1\', \'/people-log\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => \'__return_true\',\n \'callback\' => function (WP_REST_Request $request) {\n $body = $request->get_json_params();\n momentry_people_write_log([\n \'method\' => sanitize_text_field($body[\'method\'] ?? \'GET\'),\n \'path\' => sanitize_text_field($body[\'path\'] ?? \'\'),\n \'request_body\' => wp_json_encode($body[\'request_body\'] ?? [], JSON_UNESCAPED_UNICODE),\n \'response_body\' => wp_json_encode($body[\'response_body\'] ?? [], JSON_UNESCAPED_UNICODE),\n \'http_code\' => intval($body[\'http_code\'] ?? 0),\n \'latency_ms\' => intval($body[\'latency_ms\'] ?? 0),\n \'success\' => !empty($body[\'success\']),\n \'error_message\' => sanitize_text_field($body[\'error_message\'] ?? \'\'),\n ]);\n return new WP_REST_Response([\'success\' => true], 200);\n },\n ]);\n\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)\', [\n \'methods\' => \'PATCH\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'PATCH\', \'/identity/\' . $req[\'id\'], $req->get_json_params());\n },\n ]);\n\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)\', [\n \'methods\' => \'DELETE\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'DELETE\', \'/identity/\' . $req[\'id\']);\n },\n ]);\n\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)/mergeinto\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'POST\', \'/identity/\' . $req[\'id\'] . \'/mergeinto\', $req->get_json_params());\n },\n ]);\n\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)/bind/trace\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'POST\', \'/identity/\' . $req[\'id\'] . \'/bind/trace\', $req->get_json_params());\n },\n ]);\n\n // ── GET /identities ──\n // ── 處理前端基本資料抓取 (GET) ──\n register_rest_route(\'momentry/v1\', \'/proxy/identities\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $page = intval($req->get_param(\'page\') ?: 1);\n $page_size = intval($req->get_param(\'page_size\') ?: 50);\n return momentry_people_proxy(\'GET\', \'/identities?page=\' . $page . \'&page_size=\' . $page_size);\n },\n ]);\n\n // ── GET /identity/{id}/traces ──\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)/traces\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'GET\', \'/identity/\' . $req[\'id\'] . \'/traces\');\n },\n ]);\n\n // ── GET /identity/{id}/files ──\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)/files\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'GET\', \'/identity/\' . $req[\'id\'] . \'/files\');\n },\n ]);\n\n // ── GET /identity/{id}/profile-image(GET)──\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)/profile-image\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n $response = wp_remote_get($api_base . \'/identity/\' . $req[\'id\'] . \'/profile-image\', [\n \'timeout\' => 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n if (is_wp_error($response)) { status_header(404); exit; }\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) { status_header($code); exit; }\n $content_type = wp_remote_retrieve_header($response, \'content-type\') ?: \'image/jpeg\';\n header(\'Content-Type: \' . $content_type);\n header(\'Cache-Control: max-age=3600\');\n echo wp_remote_retrieve_body($response);\n exit;\n },\n ]);\n\n // ── GET /file/{uuid}/trace/{traceId}/thumbnail ──\n register_rest_route(\'momentry/v1\', \'/proxy/file/(?P[a-zA-Z0-9\\-_]+)/trace/(?P[a-zA-Z0-9\\-_]+)/thumbnail\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n $response = wp_remote_get($api_base . \'/file/\' . $req[\'file_uuid\'] . \'/trace/\' . $req[\'trace_id\'] . \'/thumbnail\', [\n \'timeout\' => 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n if (is_wp_error($response)) { status_header(404); exit; }\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) { status_header($code); exit; }\n $content_type = wp_remote_retrieve_header($response, \'content-type\') ?: \'image/jpeg\';\n header(\'Content-Type: \' . $content_type);\n header(\'Cache-Control: max-age=3600\');\n echo wp_remote_retrieve_body($response);\n exit;\n },\n ]);\n\n // ── GET /file/{uuid}/thumbnail ──\n register_rest_route(\'momentry/v1\', \'/proxy/file/(?P[a-zA-Z0-9\\-_]+)/thumbnail\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n $response = wp_remote_get($api_base . \'/file/\' . $req[\'file_uuid\'] . \'/thumbnail\', [\n \'timeout\' => 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n if (is_wp_error($response)) { status_header(404); exit; }\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) { status_header($code); exit; }\n $content_type = wp_remote_retrieve_header($response, \'content-type\') ?: \'image/jpeg\';\n header(\'Content-Type: \' . $content_type);\n header(\'Cache-Control: max-age=3600\');\n echo wp_remote_retrieve_body($response);\n exit;\n },\n ]);\n\n // ── GET /file/{uuid}/faces ──\n register_rest_route(\'momentry/v1\', \'/proxy/file/(?P[a-zA-Z0-9\\-_]+)/faces\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $binding = sanitize_text_field($req->get_param(\'binding\') ?: \'\');\n $page = intval($req->get_param(\'page\') ?: 1);\n $page_size = intval($req->get_param(\'page_size\') ?: 200);\n $qs = \'?page=\' . $page . \'&page_size=\' . $page_size;\n if ($binding) $qs .= \'&binding=\' . urlencode($binding);\n return momentry_people_proxy(\'GET\', \'/file/\' . $req[\'file_uuid\'] . \'/faces\' . $qs);\n },\n ]);\n\n // ── GET /files/scan ──\n register_rest_route(\'momentry/v1\', \'/proxy/files/scan\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'GET\', \'/files/scan\');\n },\n ]);\n\n // ── GET /file/{uuid}/video ──\n register_rest_route(\'momentry/v1\', \'/proxy/file/(?P[a-zA-Z0-9\\-_]+)/video\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n $start = $req->get_param(\'start_time\');\n $end = $req->get_param(\'end_time\');\n $qs = \'\';\n if ($start !== null) $qs .= \'?start_time=\' . floatval($start);\n if ($end !== null) $qs .= ($qs ? \'&\' : \'?\') . \'end_time=\' . floatval($end);\n $response = wp_remote_get($api_base . \'/file/\' . $req[\'file_uuid\'] . \'/video\' . $qs, [\n \'timeout\' => 60,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n if (is_wp_error($response)) { status_header(502); exit; }\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) { status_header($code); exit; }\n header(\'Content-Type: video/mp4\');\n echo wp_remote_retrieve_body($response);\n exit;\n },\n ]);\n \n // ── Merge Undo ──\n register_rest_route(\'momentry/v1\', \'/proxy/identity/merge/(?P[a-zA-Z0-9\\-_]+)/undo\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'POST\', \'/identity/merge/\' . $req[\'merge_id\'] . \'/undo\');\n },\n ]);\n\n // ── Merge Redo ──\n register_rest_route(\'momentry/v1\', \'/proxy/identity/merge/(?P[a-zA-Z0-9\\-_]+)/redo\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n return momentry_people_proxy(\'POST\', \'/identity/merge/\' . $req[\'merge_id\'] . \'/redo\');\n },\n ]);\n\n // ── Merge History ──\n register_rest_route(\'momentry/v1\', \'/proxy/identity/merge/history\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n $page = intval($req->get_param(\'page\') ?: 1);\n $page_size = intval($req->get_param(\'page_size\') ?: 20);\n return momentry_people_proxy(\'GET\', \'/identity/merge/history?page=\' . $page . \'&page_size=\' . $page_size);\n },\n ]);\n\n register_rest_route(\'momentry/v1\', \'/proxy/identity/(?P[a-zA-Z0-9\\-_]+)/profile-image\', [\n \'methods\' => \'POST\',\n \'permission_callback\' => $auth,\n \'callback\' => function (WP_REST_Request $req) {\n if (empty($_FILES[\'image\'])) {\n return new WP_REST_Response([\'error\' => \'No image\'], 400);\n }\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n $file = $_FILES[\'image\'];\n $boundary = wp_generate_password(20, false);\n $body = \"--{$boundary}\\r\\n\"\n . \"Content-Disposition: form-data; name=\\\"image\\\"; filename=\\\"\" . basename($file[\'name\']) . \"\\\"\\r\\n\"\n . \"Content-Type: \" . $file[\'type\'] . \"\\r\\n\\r\\n\"\n . file_get_contents($file[\'tmp_name\']) . \"\\r\\n\"\n . \"--{$boundary}--\\r\\n\";\n\n $response = wp_remote_post($api_base . \'/identity/\' . $req[\'id\'] . \'/profile-image\', [\n \'timeout\' => 30,\n \'headers\' => [\n \'X-API-Key\' => $api_key,\n \'Content-Type\' => \'multipart/form-data; boundary=\' . $boundary,\n ],\n \'body\' => $body,\n ]);\n\n if (is_wp_error($response)) {\n return new WP_REST_Response([\'error\' => $response->get_error_message()], 502);\n }\n return new WP_REST_Response([], wp_remote_retrieve_response_code($response));\n },\n ]);\n\n});\n\nadd_action(\'wp_footer\', function () {\n if (strpos($_SERVER[\'REQUEST_URI\'], \'people\') === false) return;\n\n $api_base = \'http://192.168.110.201:3002/api/v1\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n $people_url = $api_base . \'/identities?page=1&page_size=50\';\n\n $start = microtime(true);\n $response = wp_remote_get($people_url, [\n \'timeout\' => 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n $latency = round((microtime(true) - $start) * 1000);\n $code = is_wp_error($response) ? 0 : wp_remote_retrieve_response_code($response);\n $raw_body = is_wp_error($response) ? $response->get_error_message() : wp_remote_retrieve_body($response);\n $ok = ($code >= 200 && $code < 300);\n\n momentry_people_write_log([\n \'method\' => \'GET\',\n \'path\' => \'People initial load → \' . $people_url,\n \'request_body\' => wp_json_encode([\'page\' => 1, \'page_size\' => 50], JSON_UNESCAPED_UNICODE),\n \'response_body\' => $raw_body,\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'success\' => $ok,\n \'error_message\' => $ok ? null : $raw_body,\n ]);\n\n $first_page_json = \'[]\';\n $total_pages = 1;\n\n if (!is_wp_error($response) && $code === 200) {\n $body = json_decode($raw_body, true);\n if (!empty($body[\'identities\']) && is_array($body[\'identities\'])) {\n $clean = array_values(array_filter($body[\'identities\'], function ($item) {\n $encoded = wp_json_encode($item);\n return $encoded !== false && json_last_error() === JSON_ERROR_NONE;\n }));\n $first_page_json = wp_json_encode($clean) ?: \'[]\';\n }\n if (!empty($body[\'total_identities\']) && !empty($body[\'page_size\'])) {\n $total_pages = ceil($body[\'total_identities\'] / $body[\'page_size\']);\n }\n }\n ?>\n \n [\'X-API-Key: \' . $api_key],\n CURLOPT_TIMEOUT => 120,\n CURLOPT_FOLLOWLOCATION => true,\n CURLOPT_HEADERFUNCTION => function ($curl, $header) {\n $lower = strtolower(trim($header));\n if (str_starts_with($lower, \'content-type:\')) header($header, true);\n return strlen($header);\n },\n CURLOPT_WRITEFUNCTION => function ($curl, $data) {\n echo $data;\n if (ob_get_level()) ob_flush();\n flush();\n return strlen($data);\n },\n ]);\n header(\'Cache-Control: no-store\');\n header(\'Access-Control-Allow-Origin: *\');\n $ok = curl_exec($ch);\n $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n curl_close($ch);\n if (!$ok || $code !== 200) status_header($code ?: 502);\n exit;\n }\n\n $response = wp_remote_get($api_base . $path, [\n \'timeout\' => 60,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n\n if (is_wp_error($response)) { status_header(502); exit; }\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) { status_header($code); exit; }\n\n $content_type = wp_remote_retrieve_header($response, \'content-type\') ?: \'image/jpeg\';\n header(\'Content-Type: \' . $content_type);\n header(\'Cache-Control: public, max-age=3600\');\n header(\'Access-Control-Allow-Origin: *\');\n echo wp_remote_retrieve_body($response);\n exit;\n\n}, 1);','','global',0,10,1,'2026-05-29 09:54:45',1,NULL),
(61,'LT - API - 檔案管理','','add_action(\'rest_api_init\', function () {\n register_rest_route(\'momentry/v1\', \'/media\', [\n \'methods\' => \'GET\',\n \'permission_callback\' => \'__return_true\',\n \'callback\' => function (WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n $key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $uuid = sanitize_text_field($request->get_param(\'uuid\'));\n $type = sanitize_text_field($request->get_param(\'type\'));\n $start_time = $request->get_param(\'start_time\');\n $end_time = $request->get_param(\'end_time\');\n $frame = $request->get_param(\'frame\');\n $mode = sanitize_text_field($request->get_param(\'mode\')) ?: \'normal\';\n $audio = sanitize_text_field($request->get_param(\'audio\')) ?: \'on\';\n\n if (!$uuid || !in_array($type, [\'thumbnail\', \'video\', \'image\', \'file\'], true)) {\n return new WP_REST_Response(\'Missing uuid or invalid type\', 400);\n }\n\n // 构建 API URL\n if ($type === \'video\') {\n $url = $base . \'/api/v1/file/\' . rawurlencode($uuid) . \'/video\';\n } else {\n $url = $base . \'/api/v1/file/\' . rawurlencode($uuid) . \'/\' . $type;\n }\n\n $query = [];\n\n if ($start_time !== null && $start_time !== \'\') {\n $query[\'start_time\'] = floatval($start_time);\n }\n if ($end_time !== null && $end_time !== \'\') {\n $query[\'end_time\'] = floatval($end_time);\n }\n\n if ($type === \'video\') {\n $query[\'mode\'] = $mode;\n $query[\'audio\'] = $audio;\n }\n if ($type === \'thumbnail\' && $frame !== null && $frame !== \'\') {\n $query[\'frame\'] = intval($frame);\n }\n\n if (!empty($query)) {\n $url .= \'?\' . http_build_query($query);\n }\n\n // 代理请求\n $res = wp_remote_get($url, [\n \'timeout\' => 60,\n \'headers\' => [\n \'X-API-Key\' => $key,\n \'Authorization\' => $key,\n ],\n ]);\n\n if (is_wp_error($res)) {\n return new WP_REST_Response($res->get_error_message(), 500);\n }\n\n $code = wp_remote_retrieve_response_code($res);\n $body = wp_remote_retrieve_body($res);\n $content_type = wp_remote_retrieve_header($res, \'content-type\');\n\n if (!$content_type) {\n $content_type = $type === \'video\' ? \'video/mp4\' : \'image/jpeg\';\n }\n\n status_header($code);\n header(\'Content-Type: \' . $content_type);\n header(\'Cache-Control: public, max-age=3600\');\n\n echo $body;\n exit;\n },\n ]);\n});','','global',0,10,1,'2026-05-29 10:11:08',1,NULL),
(62,'people-proxy','','\n/* =========================================================\n ms-people-proxy — Snippet 3\n REST proxy:/wp-json/ms/v1/identities\n ========================================================= */\n\nadd_action(\'rest_api_init\', function () {\n\n register_rest_route(\'ms/v1\', \'/identities\', [\n \'methods\' => \'GET\',\n \'callback\' => \'ms_identities_proxy\',\n \'permission_callback\' => \'__return_true\',\n ]);\n\n});\n\nfunction ms_identities_proxy(WP_REST_Request $request) {\n\n $page = max(1, intval($request->get_param(\'page\') ?: 1));\n $page_size = 100;\n $api_url = \'http://192.168.110.201:3002/api/v1/identities?page=\' . $page . \'&page_size=\' . $page_size;\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $response = wp_remote_get($api_url, [\n \'timeout\' => 15,\n \'headers\' => [\'X-API-Key\' => $api_key],\n ]);\n\n if (is_wp_error($response)) {\n return new WP_Error(\'api_error\', $response->get_error_message(), [\'status\' => 500]);\n }\n\n $code = wp_remote_retrieve_response_code($response);\n if ($code !== 200) {\n return new WP_Error(\'api_error\', \'Upstream error\', [\'status\' => $code]);\n }\n\n $body = json_decode(wp_remote_retrieve_body($response), true);\n return rest_ensure_response($body);\n}','','global',0,10,-1,'2026-05-20 08:33:31',1,NULL),
(63,'Momentry API Console','3002 有問題時,就開啟這個
','/**\n * Momentry API Debug Console v9\n * Shortcode: [momentry_api_dashboard_v9]\n *\n * v9 = v8 log system + v9 API templates\n * - 保留 v8:log / renew log / view log / download log / clear log / trace_id / curl preview\n * - 新增 v9:jobs / identities / identity files / identity faces / identity chunks\n * - 新增 variables:FILE_UUID / IDENTITY_UUID / TRACE_ID / QUERY\n */\n\nif (!defined(\'ABSPATH\')) {\n exit;\n}\n\nadd_action(\'rest_api_init\', function () {\n\n register_rest_route(\'momentry/v1\', \'/api-test-v9\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_test_proxy_v9\',\n \'permission_callback\' => \'__return_true\'\n ]);\n\n register_rest_route(\'momentry/v1\', \'/api-log-v9\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_log_v9\',\n \'permission_callback\' => \'__return_true\'\n ]);\n\n});\n\nfunction momentry_log_dir_v9() {\n $upload = wp_upload_dir();\n $dir = trailingslashit($upload[\'basedir\']) . \'momentry-api-logs\';\n\n if (!file_exists($dir)) {\n wp_mkdir_p($dir);\n }\n\n return $dir;\n}\n\nfunction momentry_safe_log_name_v9($name) {\n $name = sanitize_file_name($name ?: \'momentry-api-debug\');\n $name = preg_replace(\'/\\.log$/\', \'\', $name);\n return $name . \'.log\';\n}\n\nfunction momentry_write_log_v9($log_name, $line) {\n $file = trailingslashit(momentry_log_dir_v9()) . momentry_safe_log_name_v9($log_name);\n file_put_contents($file, $line . \"\\n\", FILE_APPEND);\n return $file;\n}\n\nfunction momentry_trace_id_v9() {\n return \'trc_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n}\n\nfunction momentry_log_level_v9($http_code) {\n if ($http_code >= 500) return \'ERROR\';\n if ($http_code >= 400) return \'WARN\';\n return \'INFO\';\n}\n\nfunction momentry_api_log_v9(WP_REST_Request $request) {\n $action = sanitize_text_field($request->get_param(\'action\'));\n $log_name = momentry_safe_log_name_v9($request->get_param(\'log_name\'));\n $file = trailingslashit(momentry_log_dir_v9()) . $log_name;\n\n if ($action === \'view\') {\n return [\n \'ok\' => true,\n \'log_name\' => $log_name,\n \'content\' => file_exists($file) ? file_get_contents($file) : \'\'\n ];\n }\n\n if ($action === \'clear\') {\n file_put_contents($file, \'\');\n return [\n \'ok\' => true,\n \'message\' => \'Log cleared\',\n \'log_name\' => $log_name\n ];\n }\n\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Invalid log action\'\n ], 400);\n}\n\nfunction momentry_api_test_proxy_v9(WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n\n // TODO: 建議之後移到 wp-config.php,不要長期寫死在頁面 snippet\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $method = strtoupper(sanitize_text_field($request->get_param(\'method\')));\n $path = $request->get_param(\'path\');\n $body = $request->get_param(\'body\');\n $log_name = $request->get_param(\'log_name\') ?: \'momentry-api-debug\';\n $api_name = sanitize_text_field($request->get_param(\'api_name\') ?: \'Manual API\');\n $api_group = sanitize_text_field($request->get_param(\'api_group\') ?: \'General\');\n\n if (!$method) $method = \'GET\';\n\n if (!$path || strpos($path, \'/\') !== 0) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Path must start with /\'\n ], 400);\n }\n\n $url = rtrim($base, \'/\') . $path;\n\n $headers = [\n \'X-API-Key\' => $api_key,\n \'Accept\' => \'application/json\',\n \'User-Agent\' => \'Momentry-DebugConsole/9.0\'\n ];\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 60,\n \'headers\' => $headers,\n ];\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $args[\'headers\'][\'Content-Type\'] = \'application/json\';\n $args[\'body\'] = wp_json_encode($body ?: []);\n }\n\n $timestamp = gmdate(\'Y-m-d\\TH:i:s.v\\Z\');\n $trace_id = momentry_trace_id_v9();\n\n $start = microtime(true);\n $response = wp_remote_request($url, $args);\n $latency_ms = round((microtime(true) - $start) * 1000);\n\n $pretty_request = wp_json_encode(\n $body ?: new stdClass(),\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $curl_command = \"curl -i -s -X $method \\\"$url\\\" \\\\\\n-H \\\"X-API-Key: ********\\\" \\\\\\n-H \\\"Accept: application/json\\\"\";\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $curl_command .= \" \\\\\\n-H \\\"Content-Type: application/json\\\" \\\\\\n-d \'\" . $pretty_request . \"\'\";\n }\n\n if (is_wp_error($response)) {\n $error_message = $response->get_error_message();\n\n $log_block =\n\"================================================================================\n[$timestamp] [ERROR] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nAPI Group : $api_group\nAPI Name : $api_name\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Momentry Debug Console v9\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : NA\nLatency : {$latency_ms}ms\n\nERROR\n--------------------------------------------------------------------------------\n$error_message\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : FAIL\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v9($log_name, $log_block);\n\n return [\n \'ok\' => false,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'latency_ms\' => $latency_ms,\n \'message\' => $error_message\n ];\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $content_type = wp_remote_retrieve_header($response, \'content-type\');\n $body_raw = wp_remote_retrieve_body($response);\n $json = json_decode($body_raw, true);\n $ok = $http_code >= 200 && $http_code < 300;\n $level = momentry_log_level_v9($http_code);\n\n $pretty_response = wp_json_encode(\n $json ?? $body_raw,\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $summary = $ok ? \'PASS\' : \'FAIL\';\n\n $log_block =\n\"================================================================================\n[$timestamp] [$level] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nAPI Group : $api_group\nAPI Name : $api_name\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Momentry Debug Console v9\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : $http_code\nLatency : {$latency_ms}ms\nContent-Type: $content_type\n\nRAW RESPONSE\n--------------------------------------------------------------------------------\n$pretty_response\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : $summary\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v9($log_name, $log_block);\n\n return [\n \'ok\' => $ok,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'content_type\' => $content_type,\n \'request_body\' => $body ?: new stdClass(),\n \'data\' => $json ?? $body_raw\n ];\n}\n\nadd_shortcode(\'momentry_api_dashboard_v9\', function () {\n\nob_start();\n?>\n\n\n\n \n\n
\n
Current Log File \n
\n \n Renew Log File \n
\n
\n\n
\n File UUID\n \n \n Identity UUID\n \n \n Trace ID\n \n \n Query\n \n \n
\n\n
\n\n \n\n
\n\n
Method \n
\n GET \n POST \n PUT \n PATCH \n DELETE \n HEAD \n \n\n
Path \n
\n\n
Body JSON \n
\n\n
curl command \n
\n\n
\n Run API \n Copy curl \n Copy Response \n View Log \n Download Log \n Clear Log \n
\n\n
\n
\n\n
Response / Log \n
Ready. \n\n
\n\n\n\n\n\n \'POST\',\n \'callback\' => \'momentry_api_test_proxy_v8\',\n \'permission_callback\' => \'__return_true\'\n ]);\n\n register_rest_route(\'momentry/v1\', \'/api-log-v8\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_log_v8\',\n \'permission_callback\' => \'__return_true\'\n ]);\n\n});\n\nfunction momentry_log_dir_v8() {\n $upload = wp_upload_dir();\n $dir = trailingslashit($upload[\'basedir\']) . \'momentry-api-logs\';\n\n if (!file_exists($dir)) {\n wp_mkdir_p($dir);\n }\n\n return $dir;\n}\n\nfunction momentry_safe_log_name_v8($name) {\n $name = sanitize_file_name($name ?: \'momentry-api-debug\');\n $name = preg_replace(\'/\\.log$/\', \'\', $name);\n return $name . \'.log\';\n}\n\nfunction momentry_write_log_v8($log_name, $line) {\n $file = trailingslashit(momentry_log_dir_v8()) . momentry_safe_log_name_v8($log_name);\n file_put_contents($file, $line . \"\\n\", FILE_APPEND);\n return $file;\n}\n\nfunction momentry_trace_id_v8() {\n return \'trc_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n}\n\nfunction momentry_log_level_v8($http_code) {\n if ($http_code >= 500) return \'ERROR\';\n if ($http_code >= 400) return \'WARN\';\n return \'INFO\';\n}\n\nfunction momentry_api_log_v8(WP_REST_Request $request) {\n $action = sanitize_text_field($request->get_param(\'action\'));\n $log_name = momentry_safe_log_name_v8($request->get_param(\'log_name\'));\n $file = trailingslashit(momentry_log_dir_v8()) . $log_name;\n\n if ($action === \'view\') {\n return [\n \'ok\' => true,\n \'log_name\' => $log_name,\n \'content\' => file_exists($file) ? file_get_contents($file) : \'\'\n ];\n }\n\n if ($action === \'clear\') {\n file_put_contents($file, \'\');\n return [\n \'ok\' => true,\n \'message\' => \'Log cleared\',\n \'log_name\' => $log_name\n ];\n }\n\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Invalid log action\'\n ], 400);\n}\n\nfunction momentry_api_test_proxy_v8(WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n\n // TODO: 建議之後移到 wp-config.php,不要長期寫死在頁面 snippet\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $method = strtoupper(sanitize_text_field($request->get_param(\'method\')));\n $path = $request->get_param(\'path\');\n $body = $request->get_param(\'body\');\n $log_name = $request->get_param(\'log_name\') ?: \'momentry-api-debug\';\n\n if (!$method) $method = \'GET\';\n\n if (!$path || strpos($path, \'/\') !== 0) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Path must start with /\'\n ], 400);\n }\n\n $url = rtrim($base, \'/\') . $path;\n\n $headers = [\n \'X-API-Key\' => $api_key,\n \'Accept\' => \'application/json\',\n \'User-Agent\' => \'Momentry-DebugConsole/8.0\'\n ];\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 60,\n \'headers\' => $headers,\n ];\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $args[\'headers\'][\'Content-Type\'] = \'application/json\';\n $args[\'body\'] = wp_json_encode($body ?: []);\n }\n\n $timestamp = gmdate(\'Y-m-d\\TH:i:s.v\\Z\');\n $trace_id = momentry_trace_id_v8();\n\n $start = microtime(true);\n $response = wp_remote_request($url, $args);\n $latency_ms = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($response)) {\n $error_message = $response->get_error_message();\n\n $log_block =\n\"================================================================================\n[$timestamp] [ERROR] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n\" . wp_json_encode($body ?: new stdClass(), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) . \"\n\nCURL\n--------------------------------------------------------------------------------\ncurl -X $method \\\"$url\\\" \\\\\n-H \\\"X-API-Key: ********\\\" \\\\\n-H \\\"Accept: application/json\\\"\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : NA\nLatency : {$latency_ms}ms\n\nERROR\n--------------------------------------------------------------------------------\n$error_message\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : FAIL\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v8($log_name, $log_block);\n\n return [\n \'ok\' => false,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'latency_ms\' => $latency_ms,\n \'message\' => $error_message\n ];\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $content_type = wp_remote_retrieve_header($response, \'content-type\');\n $body_raw = wp_remote_retrieve_body($response);\n $json = json_decode($body_raw, true);\n $ok = $http_code >= 200 && $http_code < 300;\n $level = momentry_log_level_v8($http_code);\n\n $pretty_request = wp_json_encode(\n $body ?: new stdClass(),\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $pretty_response = wp_json_encode(\n $json ?? $body_raw,\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $curl_command = \"curl -X $method \\\"$url\\\" \\\\\\n-H \\\"X-API-Key: ********\\\" \\\\\\n-H \\\"Accept: application/json\\\"\";\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $curl_command .= \" \\\\\\n-H \\\"Content-Type: application/json\\\" \\\\\\n-d \'\" . $pretty_request . \"\'\";\n }\n\n $summary = $ok ? \'PASS\' : \'FAIL\';\n\n $log_block =\n\"================================================================================\n[$timestamp] [$level] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Momentry Debug Console v8\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : $http_code\nLatency : {$latency_ms}ms\nContent-Type: $content_type\n\nRAW RESPONSE\n--------------------------------------------------------------------------------\n$pretty_response\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : $summary\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v8($log_name, $log_block);\n\n return [\n \'ok\' => $ok,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'content_type\' => $content_type,\n \'request_body\' => $body ?: new stdClass(),\n \'data\' => $json ?? $body_raw\n ];\n}\n\nadd_shortcode(\'momentry_api_dashboard_v8\', function () {\n\nob_start();\n?>\n\n\n\n
Momentry API Debug Console v8 \n\n
\n
Current Log File \n
\n \n Renew Log File \n
\n
\n\n
\n Health \n Health Detailed \n Inference \n Scan \n Register \n Probe \n Process \n Progress \n Unregister \n Identity Text \n Identities Search \n Universal Search \n Smart Search \n Video Clip \n
\n\n
\n
Method \n
\n GET \n POST \n PUT \n PATCH \n DELETE \n HEAD \n \n\n
Path \n
\n\n
Body JSON \n
\n\n
curl command \n
\n\n
\n Run API \n Copy curl \n Copy Response \n View Log \n Download Log \n Clear Log \n
\n
\n\n
Response / Log \n
Ready. \n\n
\n\n\n\n\n\n可以把 RAPTOR API 全部在這裡快速測試','/**\n * Raptor API Debug Console v1\n * Shortcode: [raptor_api_dashboard_v1]\n */\n\nif (!defined(\'ABSPATH\')) exit;\n\nif (!defined(\'RAPTOR_DEFAULT_USERNAME\')) {\n define(\'RAPTOR_DEFAULT_USERNAME\', \'accusys_user1\');\n}\n\nif (!defined(\'RAPTOR_DEFAULT_PASSWORD\')) {\n define(\'RAPTOR_DEFAULT_PASSWORD\', \'12345\');\n}\n\nif (!defined(\'RAPTOR_DEFAULT_REALM\')) {\n define(\'RAPTOR_DEFAULT_REALM\', \'dhtsolution\');\n}\n\nadd_action(\'rest_api_init\', function () {\n register_rest_route(\'raptor/v1\', \'/api-test\', [\n \'methods\' => \'POST\',\n \'callback\' => \'raptor_api_test_proxy_v1\',\n\'permission_callback\' => function () {\n return is_user_logged_in();\n} ]);\n\n register_rest_route(\'raptor/v1\', \'/api-log\', [\n \'methods\' => \'POST\',\n \'callback\' => \'raptor_api_log_v1\',\n\'permission_callback\' => function () {\n return is_user_logged_in();\n} ]);\n});\n\nfunction raptor_log_dir_v1() {\n $upload = wp_upload_dir();\n $dir = trailingslashit($upload[\'basedir\']) . \'raptor-api-logs\';\n if (!file_exists($dir)) wp_mkdir_p($dir);\n return $dir;\n}\n\nfunction raptor_safe_log_name_v1($name) {\n $name = sanitize_file_name($name ?: \'raptor-api-debug\');\n $name = preg_replace(\'/\\.log$/\', \'\', $name);\n return $name . \'.log\';\n}\n\nfunction raptor_write_log_v1($log_name, $line) {\n $file = trailingslashit(raptor_log_dir_v1()) . raptor_safe_log_name_v1($log_name);\n file_put_contents($file, $line . \"\\n\", FILE_APPEND);\n return $file;\n}\n\nfunction raptor_trace_id_v1() {\n return \'rtr_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n}\n\nfunction raptor_log_level_v1($http_code) {\n if ($http_code >= 500) return \'ERROR\';\n if ($http_code >= 400) return \'WARN\';\n return \'INFO\';\n}\nfunction raptor_user_name_v1() {\n $u = wp_get_current_user();\n\n if ($u && $u->exists()) {\n return $u->user_login;\n }\n\n return \'guest\';\n}\n\nfunction raptor_write_db_log_v1($args) {\n global $wpdb;\n\n $wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => $args[\'trace_id\'] ?? raptor_trace_id_v1(),\n \'user_id\' => get_current_user_id(),\n \'user_login\' => raptor_user_name_v1(),\n \'page_source\' => \'Raptor API Debug Console\',\n \'method\' => $args[\'method\'] ?? \'\',\n \'path\' => $args[\'path\'] ?? \'\',\n \'request_body\' => $args[\'request_body\'] ?? null,\n \'response_body\' => $args[\'response_body\'] ?? null,\n \'http_code\' => intval($args[\'http_code\'] ?? 0),\n \'latency_ms\' => intval($args[\'latency_ms\'] ?? 0),\n \'success\' => !empty($args[\'success\']) ? 1 : 0,\n \'error_message\' => $args[\'error_message\'] ?? null\n ]\n );\n}\n\nfunction raptor_api_log_v1(WP_REST_Request $request) {\n $action = sanitize_text_field($request->get_param(\'action\'));\n $log_name = raptor_safe_log_name_v1($request->get_param(\'log_name\'));\n $file = trailingslashit(raptor_log_dir_v1()) . $log_name;\n\n if ($action === \'view\') {\n return [\n \'ok\' => true,\n \'log_name\' => $log_name,\n \'content\' => file_exists($file) ? file_get_contents($file) : \'\'\n ];\n }\n\n if ($action === \'clear\') {\n file_put_contents($file, \'\');\n return [\n \'ok\' => true,\n \'message\' => \'Log cleared\',\n \'log_name\' => $log_name\n ];\n }\n\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Invalid log action\'\n ], 400);\n}\n\nfunction raptor_is_allowed_path_v1($path) {\n $allowed_exact = [\n \'/\',\n \'/health\',\n \'/api/0.3/sso/login\',\n \'/api/0.3/sso/logout\',\n \'/api/0.3/search/hybrid\',\n \'/api/0.3/search/bm25\',\n \'/api/0.3/search/vector\',\n \'/api/0.3/search/tkg\',\n \'/api/0.3/search/graphrag\',\n \'/api/0.3/search/video_search\',\n \'/api/0.3/asset/fileupload_analysis\',\n \'/api/0.3/asset/fileupload_analysis_batch\',\n \'/api/0.3/asset/users/commits\',\n \'/api/0.3/processing/cache/all\',\n \'/api/0.3/a2a/query\',\n ];\n\n $allowed_prefix = [\n \'/api/0.3/asset/filedownload/\',\n \'/api/0.3/asset/fileversions/\',\n \'/api/0.3/asset/filearchive/\',\n \'/api/0.3/asset/delfile/\',\n \'/api/0.3/asset/file-expiration/\',\n \'/api/0.3/processing/cache/\',\n ];\n\n if (in_array($path, $allowed_exact, true)) return true;\n\n foreach ($allowed_prefix as $prefix) {\n if (strpos($path, $prefix) === 0) return true;\n }\n\n return false;\n}\n\nfunction raptor_api_test_proxy_v1(WP_REST_Request $request) {\n $base = \'http://raptor_open_0_3_api.dhtsolution.com:8012\';\n\n $method = strtoupper(sanitize_text_field($request->get_param(\'method\') ?: \'GET\'));\n $path = $request->get_param(\'path\');\n $body = $request->get_param(\'body\');\n $token = sanitize_text_field($request->get_param(\'token\') ?: \'\');\n $log_name = $request->get_param(\'log_name\') ?: \'raptor-api-debug\';\n $api_name = sanitize_text_field($request->get_param(\'api_name\') ?: \'Manual API\');\n $api_group = sanitize_text_field($request->get_param(\'api_group\') ?: \'General\');\n\n if (!$path || strpos($path, \'/\') !== 0) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Path must start with /\'\n ], 400);\n }\n\n if (!raptor_is_allowed_path_v1($path)) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Endpoint not allowed in Raptor Test Lab.\',\n \'path\' => $path\n ], 403);\n }\n\n $url = rtrim($base, \'/\') . $path;\n\n $headers = [\n \'Accept\' => \'application/json\',\n \'User-Agent\' => \'Raptor-DebugConsole/1.0\'\n ];\n\n if ($token) {\n $headers[\'Authorization\'] = \'Bearer \' . $token;\n }\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 60,\n \'headers\' => $headers,\n ];\n\n if ($path === \'/api/0.3/sso/login\') {\n $args[\'headers\'][\'Content-Type\'] = \'application/x-www-form-urlencoded\';\n $args[\'body\'] = [\n \'username\' => RAPTOR_DEFAULT_USERNAME,\n \'password\' => RAPTOR_DEFAULT_PASSWORD,\n \'realm_name\' => RAPTOR_DEFAULT_REALM,\n ];\n} else if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $args[\'headers\'][\'Content-Type\'] = \'application/json\';\n $args[\'body\'] = wp_json_encode($body ?: []);\n }\n\n $timestamp = gmdate(\'Y-m-d\\TH:i:s.v\\Z\');\n $trace_id = raptor_trace_id_v1();\n\n $pretty_request = wp_json_encode(\n $body ?: new stdClass(),\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $curl_command = \"BASE=\\\"{$base}\\\"\\nTOKEN=\\\"YOUR_TOKEN\\\"\\n\\ncurl -i -s -X {$method} \\\"\\$BASE{$path}\\\" \\\\\\n-H \\\"Accept: application/json\\\"\";\n\n if ($token) {\n $curl_command .= \" \\\\\\n-H \\\"Authorization: Bearer \\$TOKEN\\\"\";\n }\n\n if ($path === \'/api/0.3/sso/login\') {\n $curl_command .= \" \\\\\\n-H \\\"Content-Type: application/x-www-form-urlencoded\\\"\";\n $curl_command .= \" \\\\\\n-d \\\"username=YOUR_USERNAME&password=YOUR_PASSWORD&realm_name=dhtsolution\\\"\";\n } else if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $curl_command .= \" \\\\\\n-H \\\"Content-Type: application/json\\\"\";\n $curl_command .= \" \\\\\\n-d \'\" . $pretty_request . \"\'\";\n }\n\n $start = microtime(true);\n $response = wp_remote_request($url, $args);\n $latency_ms = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($response)) {\n $error_message = $response->get_error_message();\n\n $log_block = \"\n================================================================================\n[$timestamp] [ERROR] [RAPTOR_API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nAPI Group : $api_group\nAPI Name : $api_name\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Raptor Debug Console v1\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : NA\nLatency : {$latency_ms}ms\n\nERROR\n--------------------------------------------------------------------------------\n$error_message\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : FAIL\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n raptor_write_log_v1($log_name, $log_block);\n\n return [\n \'ok\' => false,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'latency_ms\' => $latency_ms,\n \'curl\' => $curl_command,\n \'message\' => $error_message\n ];\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $content_type = wp_remote_retrieve_header($response, \'content-type\');\n $body_raw = wp_remote_retrieve_body($response);\n $json = json_decode($body_raw, true);\n $ok = $http_code >= 200 && $http_code < 300;\n $level = raptor_log_level_v1($http_code);\nraptor_write_db_log_v1([\n \'trace_id\' => $trace_id,\n \'method\' => $method,\n \'path\' => \'Raptor API Test → \' . $url,\n \'request_body\' => $pretty_request,\n \'response_body\' => $body_raw,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'success\' => $ok,\n \'error_message\' => $ok ? null : $body_raw\n]);\n $pretty_response = wp_json_encode(\n $json ?? $body_raw,\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $summary = $ok ? \'PASS\' : \'FAIL\';\n\n $log_block = \"\n================================================================================\n[$timestamp] [$level] [RAPTOR_API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nAPI Group : $api_group\nAPI Name : $api_name\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Raptor Debug Console v1\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : $http_code\nLatency : {$latency_ms}ms\nContent-Type: $content_type\n\nRAW RESPONSE\n--------------------------------------------------------------------------------\n$pretty_response\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : $summary\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n raptor_write_log_v1($log_name, $log_block);\n\n return [\n \'ok\' => $ok,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'content_type\' => $content_type,\n \'request_body\' => $body ?: new stdClass(),\n \'curl\' => $curl_command,\n \'data\' => $json ?? $body_raw\n ];\n}\n\nadd_shortcode(\'raptor_api_dashboard_v1\', function () {\n ob_start();\n?>\n\n\n\n \n\n
\n
Current Log File \n
\n \n Renew Log File \n
\n
\n\n
\n Bearer Token\n \n \n Query\n \n \n Asset Path\n \n \n Filename\n \n \n Version ID\n \n \n Processing Key\n \n \n
\n\n
\n\n \n\n
\n\n
Method \n
\n GET \n POST \n PUT \n PATCH \n DELETE \n HEAD \n \n\n
Path \n
\n\n
Body JSON \n
\n\n
curl command \n
\n\n
\n Run API \n Copy curl \n Copy Response \n View Log \n Download Log \n Clear Log \n
\n\n
\n
\n\n
Response / Log \n
Ready. \n\n
\n\n\n\n\n\n搜索后缩略图可以显示,但是视频暂时播放不了','\n/**\n * Momentry Search Chat CSS + JS\n * 覆盖版:新增底部搜索栏 Keyword / Semantic / People 模式选择。\n * 只在 search-chat 页面加载。 momentry test345\n */\n\n\n/*\n|--------------------------------------------------------------------------\n| Momentry Search Proxy\n| API Key must stay in PHP. Frontend only calls /wp-json/momentry/v1/search-proxy\n|--------------------------------------------------------------------------\n*/\n// ====== search-chat JS 修复重复显示版本 ======\n\n// 全局变量\nvar LAST_QUERY = \'\';\nvar LAST_CARDS = [];\nvar CM = {};\nvar CURRENT_HISTORY_ID = null;\nvar SHOULD_SAVE_HISTORY = false;\nvar SEARCH_RESTORED = false;\nvar RENDERED_MSGS = new Set(); // 用于去重渲染\n\n// 包装原来的 send 和 renderSearchSuccess\nfunction renderOnce(query, cards, mid){\n mid = mid || \'m\' + Date.now();\n if(RENDERED_MSGS.has(mid)) return;\n RENDERED_MSGS.add(mid);\n\n var chatEl = document.getElementById(\'msChat\');\n if(chatEl){\n chatEl.querySelectorAll(\'.maiw\').forEach(function(el){ el.remove(); });\n }\n\n aiMsg(\'找到 \'+cards.length+\' 個與「\'+e(query)+\'」相關的片段,點擊可預覽。\', cards, mid, query);\n}\n\n// 修改 send 函数\nfunction send(t){\n if(!t.trim() || loading) return;\n loading = true; LAST_QUERY = t; userMsg(t); showL();\n sendEvent({event_type:\'search\', query:t, moment_id:\'\', video_id:\'\', t_start:0, timestamp:nowISO()});\n fetchSearchApi(t)\n .then(function(res){\n hideL(); loading = false;\n var results=Array.isArray(res.results) ? res.results : [];\n var cards=mapResultsToCards(results);\n if(CURRENT_HISTORY_ID && !SHOULD_SAVE_HISTORY) LAST_CARDS = mergeCardsStore(LAST_CARDS, cards);\n else LAST_CARDS = cards.slice();\n rebuildCardMap(LAST_CARDS);\n sessionStorage.setItem(\'ms_cards_data\', JSON.stringify(Array.isArray(LAST_CARDS) ? LAST_CARDS : []));\n if(cards.length > 0) renderOnce(t, cards, \'send_\'+Date.now());\n else renderSearchEmpty(t);\n if(SHOULD_SAVE_HISTORY || !CURRENT_HISTORY_ID){ setTimeout(function(){ upsertSearchHistory(t); SHOULD_SAVE_HISTORY = false; },80); }\n else { setTimeout(function(){ persistCurrentHistoryView(); },80); }\n })\n .catch(function(err){ hideL(); loading=false; renderSearchError(); });\n}\n\n// 修改 restoreHistoryByResearch\nfunction restoreHistoryByResearch(picked){\n if(!picked || !picked.query) return;\n var chatEl=document.getElementById(\'msChat\'); if(chatEl) chatEl.innerHTML=\'\';\n dateMsg(); userMsg(picked.query); showL();\n LAST_QUERY = picked.query || \'\'; CURRENT_HISTORY_ID = picked.id || null; SHOULD_SAVE_HISTORY = false;\n fetchSearchApi(picked.query)\n .then(function(res){\n hideL();\n var results=Array.isArray(res.results)?res.results:[];\n var cards=mapResultsToCards(results);\n LAST_CARDS = cards.slice(); rebuildCardMap(cards);\n sessionStorage.setItem(\'ms_cards_data\', JSON.stringify(LAST_CARDS));\n if(cards.length > 0) renderOnce(picked.query, cards, \'restore_\'+picked.id);\n else renderSearchEmpty(picked.query);\n var newChatHtml = chatEl?chatEl.innerHTML:\'\';\n updateHistoryRecordById(picked.id, {chatHtml:newChatHtml, cardsData:cards.slice(), query:picked.query||\'\'});\n sessionStorage.setItem(\'ms_chat_html\', newChatHtml);\n sessionStorage.setItem(\'ms_last_query\', picked.query||\'\');\n sessionStorage.setItem(\'ms_selected_history_id\', String(picked.id));\n }).catch(function(err){ hideL(); LAST_CARDS=[]; CM={}; renderSearchError(); });\n}\n\n// 修改 sidebar restore\nwindow.MS_RESTORE_HISTORY_FROM_SIDEBAR = function(picked){\n if(!picked) return;\n switchToSearch();\n var chatEl=document.getElementById(\'msChat\'); if(chatEl) chatEl.innerHTML=\'\';\n var inpEl=document.getElementById(\'msInp\'); if(inpEl) inpEl.value=picked.query||\'\';\n CURRENT_HISTORY_ID=picked.id||null; LAST_QUERY=picked.query||\'\'; SHOULD_SAVE_HISTORY=false;\n LAST_CARDS = Array.isArray(picked.cardsData)?picked.cardsData.slice():[]; rebuildCardMap(LAST_CARDS);\n sessionStorage.setItem(\'ms_chat_html\', picked.chatHtml||\'\');\n sessionStorage.setItem(\'ms_last_query\', picked.query||\'\');\n sessionStorage.setItem(\'ms_selected_history_id\', String(picked.id||\'\'));\n sessionStorage.setItem(\'ms_cards_data\', JSON.stringify(LAST_CARDS));\n renderOnce(picked.query, LAST_CARDS, \'sidebar_\'+picked.id);\n setTimeout(function(){ rebindAllCardEvents(); sb(); applySyncedTheme(); },80);\n};\n\nadd_action(\'rest_api_init\', function () {\n\n register_rest_route(\'momentry/v1\', \'/search-proxy\', [\n \'methods\' => [\'GET\', \'POST\'],\n \'permission_callback\' => \'__return_true\',\n\n \'callback\' => function (WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n // Demo UUID provided for current search demo.\n $demo_uuid = \'aeed71342a899fe4b4c57b7d41bcb692\';\n\n $mode = sanitize_text_field($request->get_param(\'mode\'));\n $query = sanitize_text_field($request->get_param(\'query\'));\n\n if (!$query) {\n return new WP_REST_Response([\n \'success\' => false,\n \'message\' => \'Missing query\'\n ], 400);\n }\n\n if ($mode === \'semantic\') {\n\n $url = $base . \'/api/v1/search/smart\';\n $body = [\n \'query\' => $query,\n \'limit\' => 20,\n \'page\' => 1,\n \'page_size\' => 20,\n ];\n\n $args = [\n \'method\' => \'POST\',\n \'timeout\' => 60,\n \'headers\' => [\n \'Content-Type\' => \'application/json\',\n \'X-API-Key\' => $api_key,\n ],\n \'body\' => wp_json_encode($body),\n ];\n\n } elseif ($mode === \'people\') {\n\n $url = $base . \'/api/v1/identities/search?q=\' . rawurlencode($query)\n . \'&limit=20\'\n //. \'&page=1\'\n //. \'&page_size=20\'\n ;\n $args = [\n \'method\' => \'GET\',\n \'timeout\' => 60,\n \'headers\' => [\n \'X-API-Key\' => $api_key,\n ],\n ];\n\n } else {\n\n // Default: keyword / universal search.\n $url = $base . \'/api/v1/search/universal\';\n $body = [\n \'query\' => $query,\n \'limit\' => 20,\n \'page\' => 1,\n \'page_size\' => 20,\n ];\n\n $args = [\n \'method\' => \'POST\',\n \'timeout\' => 60,\n \'headers\' => [\n \'Content-Type\' => \'application/json\',\n \'X-API-Key\' => $api_key,\n ],\n \'body\' => wp_json_encode($body),\n ];\n }\n\n $response = wp_remote_request($url, $args);\n\n if (is_wp_error($response)) {\n return new WP_REST_Response([\n \'success\' => false,\n \'message\' => $response->get_error_message(),\n ], 500);\n }\n\n $code = wp_remote_retrieve_response_code($response);\n $raw_body = wp_remote_retrieve_body($response);\n $decoded = json_decode($raw_body, true);\n\n if ($decoded === null && json_last_error() !== JSON_ERROR_NONE) {\n return new WP_REST_Response([\n \'success\' => false,\n \'message\' => \'Invalid JSON from upstream API\',\n \'raw\' => $raw_body,\n ], $code ?: 500);\n }\n\n return new WP_REST_Response($decoded, $code);\n }\n ]);\n});\n\nadd_action(\'wp_head\', function () {\n if (!is_page(\'search-chat\')) return;\n ?>\n \n\n\n \n\n 使用 3002 時,就開啟這個','/**\n * Momentry API Debug Console v9\n * Shortcode: [momentry_api_dashboard_v9]\n *\n * v9 = v8 log system + v9 API templates\n * - 保留 v8:log / renew log / view log / download log / clear log / trace_id / curl preview\n * - 新增 v9:jobs / identities / identity files / identity faces / identity chunks\n * - 新增 variables:FILE_UUID / IDENTITY_UUID / TRACE_ID / QUERY\n */\n\nif (!defined(\'ABSPATH\')) {\n exit;\n}\n\nadd_action(\'rest_api_init\', function () {\n\n register_rest_route(\'momentry/v1\', \'/api-test-v9\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_test_proxy_v9\',\n \'permission_callback\' => function () {\n return is_user_logged_in();\n }\n ]);\n\n register_rest_route(\'momentry/v1\', \'/api-log-v9\', [\n \'methods\' => \'POST\',\n \'callback\' => \'momentry_api_log_v9\',\n \'permission_callback\' => function () {\n return is_user_logged_in();\n }\n ]);\n\n});\nfunction momentry_core_request($method, $path, $body = []) {\n\n global $wpdb;\n\n $base = \'http://192.168.110.201:3002\';\n\n $api_key = \'YOUR_API_KEY\';\n\n $trace_id = \'trc_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n\n $start = microtime(true);\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 60,\n \'headers\' => [\n \'X-API-Key\' => $api_key,\n \'Accept\' => \'application/json\',\n \'Content-Type\' => \'application/json\'\n ]\n ];\n\n if(in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'])){\n $args[\'body\'] = wp_json_encode($body);\n }\n$res = wp_remote_request(\n $base . $path,\n $args\n);\n $latency = round((microtime(true) - $start) * 1000);\n\n $http_code = is_wp_error($res)\n ? 0\n : wp_remote_retrieve_response_code($res);\n\n $response_body = is_wp_error($res)\n ? $res->get_error_message()\n : wp_remote_retrieve_body($res);\n\n $wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => $trace_id,\n \'user_id\' => get_current_user_id(),\n \'user_login\' => momentry_user_name_v9(),\n \'page_source\' => \'Momentry API Console\',\n \'method\' => $method,\n \'path\' => $path,\n \'request_body\' => wp_json_encode($body),\n \'response_body\' => $response_body,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency,\n \'success\' => ($http_code >= 200 && $http_code < 300) ? 1 : 0,\n \'error_message\' => ($http_code >= 400 || $http_code === 0)\n ? $response_body\n : null\n ]\n );\n\n return [\n \'trace_id\' => $trace_id,\n \'http_code\' => $http_code,\n \'response_body\' => json_decode($response_body, true)\n ];\n}\nfunction momentry_log_dir_v9() {\n $upload = wp_upload_dir();\n $dir = trailingslashit($upload[\'basedir\']) . \'momentry-api-logs\';\n\n if (!file_exists($dir)) {\n wp_mkdir_p($dir);\n }\n\n return $dir;\n}\n\nfunction momentry_safe_log_name_v9($name) {\n $name = sanitize_file_name($name ?: \'momentry-api-debug\');\n $name = preg_replace(\'/\\.log$/\', \'\', $name);\n return $name . \'.log\';\n}\n\nfunction momentry_write_log_v9($log_name, $line) {\n $file = trailingslashit(momentry_log_dir_v9()) . momentry_safe_log_name_v9($log_name);\n file_put_contents($file, $line . \"\\n\", FILE_APPEND);\n return $file;\n}\nfunction momentry_trace_id_v9() {\n return \'trc_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n}\n\nfunction momentry_user_name_v9() {\n $u = wp_get_current_user();\n\n if ($u && $u->exists()) {\n return $u->display_name;\n }\n\n return \'guest\';\n}\n\nfunction momentry_log_level_v9($http_code) {\n if ($http_code >= 500) return \'ERROR\';\n if ($http_code >= 400) return \'WARN\';\n return \'INFO\';\n}\n\nfunction momentry_api_log_v9(WP_REST_Request $request) {\n $action = sanitize_text_field($request->get_param(\'action\'));\n $log_name = momentry_safe_log_name_v9($request->get_param(\'log_name\'));\n $file = trailingslashit(momentry_log_dir_v9()) . $log_name;\n\n if ($action === \'view\') {\n return [\n \'ok\' => true,\n \'log_name\' => $log_name,\n \'content\' => file_exists($file) ? file_get_contents($file) : \'\'\n ];\n }\n\n if ($action === \'clear\') {\n file_put_contents($file, \'\');\n return [\n \'ok\' => true,\n \'message\' => \'Log cleared\',\n \'log_name\' => $log_name\n ];\n }\n\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Invalid log action\'\n ], 400);\n}\n\nfunction momentry_api_test_proxy_v9(WP_REST_Request $request) {\n\n $base = \'http://192.168.110.201:3002\';\n\n // TODO: 建議之後移到 wp-config.php,不要長期寫死在頁面 snippet\n $api_key = \'muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69\';\n\n $method = strtoupper(sanitize_text_field($request->get_param(\'method\')));\n $path = $request->get_param(\'path\');\n $body = $request->get_param(\'body\');\n $log_name = $request->get_param(\'log_name\') ?: \'momentry-api-debug\';\n $api_name = sanitize_text_field($request->get_param(\'api_name\') ?: \'Manual API\');\n $api_group = sanitize_text_field($request->get_param(\'api_group\') ?: \'General\');\n\n if (!$method) $method = \'GET\';\n\n if (!$path || strpos($path, \'/\') !== 0) {\n return new WP_REST_Response([\n \'ok\' => false,\n \'message\' => \'Path must start with /\'\n ], 400);\n }\n\n $url = rtrim($base, \'/\') . $path;\n\n $headers = [\n \'X-API-Key\' => $api_key,\n \'Accept\' => \'application/json\',\n \'User-Agent\' => \'Momentry-DebugConsole/9.0\'\n ];\n\n $args = [\n \'method\' => $method,\n \'timeout\' => 60,\n \'headers\' => $headers,\n ];\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $args[\'headers\'][\'Content-Type\'] = \'application/json\';\n $args[\'body\'] = wp_json_encode($body ?: []);\n }\n\n $timestamp = gmdate(\'Y-m-d\\TH:i:s.v\\Z\');\n $trace_id = momentry_trace_id_v9();\n\n $start = microtime(true);\n $start_time = microtime(true);\n $response = wp_remote_request($url, $args);\n $latency_ms = round((microtime(true) - $start) * 1000);\n\n $pretty_request = wp_json_encode(\n $body ?: new stdClass(),\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $curl_command = \"curl -i -s -X $method \\\"$url\\\" \\\\\\n-H \\\"X-API-Key: ********\\\" \\\\\\n-H \\\"Accept: application/json\\\"\";\n\n if (in_array($method, [\'POST\',\'PUT\',\'PATCH\',\'DELETE\'], true)) {\n $curl_command .= \" \\\\\\n-H \\\"Content-Type: application/json\\\" \\\\\\n-d \'\" . $pretty_request . \"\'\";\n }\n\n if (is_wp_error($response)) {\n $error_message = $response->get_error_message();\n\n $log_block =\n\"================================================================================\n[$timestamp] [ERROR] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nAPI Group : $api_group\nAPI Name : $api_name\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Momentry Debug Console v9\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : NA\nLatency : {$latency_ms}ms\n\nERROR\n--------------------------------------------------------------------------------\n$error_message\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : FAIL\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v9($log_name, $log_block);\n\n return [\n \'ok\' => false,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'latency_ms\' => $latency_ms,\n \'message\' => $error_message\n ];\n }\n\n $http_code = wp_remote_retrieve_response_code($response);\n $latency_ms = round((microtime(true) - $start_time) * 1000);\n\n$ok = ($http_code >= 200 && $http_code < 300); \n $content_type = wp_remote_retrieve_header($response, \'content-type\');\n $body_raw = wp_remote_retrieve_body($response);\n $json = json_decode($body_raw, true);\n $ok = $http_code >= 200 && $http_code < 300;\n $level = momentry_log_level_v9($http_code);\n\n $pretty_response = wp_json_encode(\n $json ?? $body_raw,\n JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES\n );\n\n $summary = $ok ? \'PASS\' : \'FAIL\';\nglobal $wpdb;\n\n$wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => $trace_id,\n \'user_id\' => get_current_user_id(),\n \'user_login\' => momentry_user_name_v9(),\n \'page_source\' => \'Momentry API Console\',\n \'method\' => $method,\n \'path\' => $path,\n \'request_body\' => wp_json_encode($body ?: new stdClass()),\n \'response_body\' => $body_raw,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'success\' => $ok ? 1 : 0,\n \'error_message\' => $ok ? null : $body_raw\n ]\n);\n $log_block =\n\"================================================================================\n[$timestamp] [$level] [API_REQUEST]\n================================================================================\n\nREQUEST\n--------------------------------------------------------------------------------\nAPI Group : $api_group\nAPI Name : $api_name\nMethod : $method\nURL : $url\nTrace ID : $trace_id\nSource : Momentry Debug Console v9\nTimeout : 60000ms\n\nREQUEST BODY\n--------------------------------------------------------------------------------\n$pretty_request\n\nCURL\n--------------------------------------------------------------------------------\n$curl_command\n\nRESPONSE\n--------------------------------------------------------------------------------\nHTTP Status : $http_code\nLatency : {$latency_ms}ms\nContent-Type: $content_type\n\nRAW RESPONSE\n--------------------------------------------------------------------------------\n$pretty_response\n\nSUMMARY\n--------------------------------------------------------------------------------\nResult : $summary\nTrace ID : $trace_id\n\n================================================================================\nEND LOG\n================================================================================\n\";\n\n momentry_write_log_v9($log_name, $log_block);\n\n return [\n \'ok\' => $ok,\n \'trace_id\' => $trace_id,\n \'timestamp\' => $timestamp,\n \'url\' => $url,\n \'method\' => $method,\n \'path\' => $path,\n \'http_code\' => $http_code,\n \'latency_ms\' => $latency_ms,\n \'content_type\' => $content_type,\n \'request_body\' => $body ?: new stdClass(),\n \'data\' => $json ?? $body_raw\n ];\n}\n\nadd_shortcode(\'momentry_api_dashboard_v9\', function () {\n\nob_start();\n?>\n\n\n\n \n\n
\n
Current Log File \n
\n \n Renew Log File \n
\n
\n\n
\n File UUID\n \n \n Identity UUID\n \n \n Trace ID\n \n \n Query\n \n \n
\n\n
\n\n \n\n
\n\n
Method \n
\n GET \n POST \n PATCH \n DELETE \n \n\n
Path \n
\n\n
Body JSON \n
\n\n
curl command \n
\n\n
\n Run API \n Copy curl \n Copy Response \n View Log \n Download Log \n Clear Log \n
\n\n
\n
\n\n
Response / Log \n
Ready. \n\n
\n\n\n\n\n\n四流程 Demo','/**\n * Momentry / RAPTOR Workflow Demo Page\n * Shortcode: [raptor_workflow_demo]\n */\n\nif (!defined(\'ABSPATH\')) exit;\nadd_action(\'init\', function () {\n if (empty($_GET[\'raptor_video_proxy\'])) return;\n\n $url = isset($_GET[\'url\']) ? (string) $_GET[\'url\'] : \'\';\n\n $url = str_replace(\'\"\', \'%22\', $url);\n $url = str_replace(\' \', \'%20\', $url);\n $url = str_replace(\'\\\\\', \'\', $url);\n\n if (!$url) {\n status_header(400);\n echo \'Missing url\';\n exit;\n }\n\n if (!preg_match(\'#^http://raptor_open_0_3_api\\.dhtsolution\\.com:8333/#\', $url)) {\n status_header(403);\n echo \'URL not allowed\';\n exit;\n }\n\n while (ob_get_level()) {\n ob_end_clean();\n }\n\n$chunk_size = 4 * 1024 * 1024; // 4MB\n\n$range = $_SERVER[\'HTTP_RANGE\'] ?? \'bytes=0-\' . ($chunk_size - 1);\n\nif (preg_match(\'/^bytes=(\\d+)-$/\', $range, $m)) {\n $start = intval($m[1]);\n $end = $start + $chunk_size - 1;\n $range = \'bytes=\' . $start . \'-\' . $end;\n} $response_headers = [];\n\n $ch = curl_init($url);\n\n curl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_FOLLOWLOCATION => true,\n CURLOPT_HEADER => false,\n CURLOPT_NOBODY => false,\n CURLOPT_TIMEOUT => 0,\n CURLOPT_CONNECTTIMEOUT => 30,\n CURLOPT_HTTPHEADER => [\n \'User-Agent: Momentry-Raptor-VideoProxy/1.0\',\n \'Range: \' . $range\n ],\n CURLOPT_HEADERFUNCTION => function($ch, $header) use (&$response_headers) {\n $len = strlen($header);\n $h = trim($header);\n if ($h !== \'\') $response_headers[] = $h;\n return $len;\n },\n ]);\n\n $body = curl_exec($ch);\n $err = curl_error($ch);\n $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n curl_close($ch);\n\n if ($body === false || $code < 200 || $code >= 300) {\n status_header(502);\n header(\'Content-Type:text/plain;charset=utf-8\');\n echo \"Proxy failed\\n\\n\";\n echo \"curl_error: \" . $err . \"\\n\";\n echo \"http_code: \" . $code . \"\\n\";\n echo \"range: \" . $range . \"\\n\";\n exit;\n }\n\n status_header($code);\n\n foreach ($response_headers as $h) {\n if (\n stripos($h, \'Content-Type:\') === 0 ||\n stripos($h, \'Content-Length:\') === 0 ||\n stripos($h, \'Content-Range:\') === 0 ||\n stripos($h, \'Accept-Ranges:\') === 0 ||\n stripos($h, \'Content-Disposition:\') === 0\n ) {\n header($h);\n }\n }\n\n header(\'Cache-Control: no-store\');\n\n echo $body;\n exit;\n});\n\nif (!defined(\'RAPTOR_BASE_URL\')) {\n define(\'RAPTOR_BASE_URL\', \'http://raptor_open_0_3_api.dhtsolution.com:8012\');\n}\nif (!defined(\'RAPTOR_DEFAULT_USERNAME\')) {\n define(\'RAPTOR_DEFAULT_USERNAME\', \'accusys_user1\');\n}\nif (!defined(\'RAPTOR_DEFAULT_PASSWORD\')) {\n define(\'RAPTOR_DEFAULT_PASSWORD\', \'12345\');\n}\nif (!defined(\'RAPTOR_DEFAULT_REALM\')) {\n define(\'RAPTOR_DEFAULT_REALM\', \'dhtsolution\');\n}\n\nadd_action(\'rest_api_init\', function () {\n \nregister_rest_route(\'raptor-demo/v1\', \'/video-proxy\', [\n \'methods\' => \'GET\',\n \'callback\' => \'raptor_demo_video_proxy\',\n \'permission_callback\' => \'__return_true\'\n]); \n\n register_rest_route(\'raptor-demo/v1\', \'/login\', [\n \'methods\' => \'POST\',\n \'callback\' => \'raptor_demo_login\',\n\'permission_callback\' => function () {\n return is_user_logged_in();\n}\n]);\n\n register_rest_route(\'raptor-demo/v1\', \'/upload\', [\n \'methods\' => \'POST\',\n \'callback\' => \'raptor_demo_upload\',\n\'permission_callback\' => function () {\n return is_user_logged_in();\n}\n]);\n\n register_rest_route(\'raptor-demo/v1\', \'/status\', [\n \'methods\' => \'POST\',\n \'callback\' => \'raptor_demo_status\',\n\'permission_callback\' => function () {\n return is_user_logged_in();\n}\n]);\n\n register_rest_route(\'raptor-demo/v1\', \'/search\', [\n \'methods\' => \'POST\',\n \'callback\' => \'raptor_demo_search\',\n\'permission_callback\' => function () {\n return is_user_logged_in();\n}\n]);\n\n});\n\nfunction raptor_demo_video_proxy(WP_REST_Request $request) {\n\n $url = (string) $request->get_param(\'url\');\n\n $url = str_replace(\'\"\', \'%22\', $url);\n $url = str_replace(\' \', \'%20\', $url);\n $url = str_replace(\'\\\\\', \'\', $url);\n\n if (!$url) {\n status_header(400);\n echo \'Missing url\';\n exit;\n }\n\n if (!preg_match(\'#^http://raptor_open_0_3_api\\.dhtsolution\\.com:8333/#\', $url)) {\n status_header(403);\n echo \'URL not allowed\';\n exit;\n }\n\n while (ob_get_level()) {\n ob_end_clean();\n }\n\n $range = $_SERVER[\'HTTP_RANGE\'] ?? \'bytes=0-\';\n\n $response_headers = [];\n\n $ch = curl_init($url);\n\n curl_setopt_array($ch, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_FOLLOWLOCATION => true,\n CURLOPT_HEADER => false,\n CURLOPT_NOBODY => false,\n CURLOPT_TIMEOUT => 0,\n CURLOPT_CONNECTTIMEOUT => 30,\n CURLOPT_HTTPHEADER => [\n \'User-Agent: Momentry-Raptor-VideoProxy/1.0\',\n \'Range: \' . $range\n ],\n CURLOPT_HEADERFUNCTION => function($ch, $header) use (&$response_headers) {\n $len = strlen($header);\n $h = trim($header);\n if ($h !== \'\') $response_headers[] = $h;\n return $len;\n },\n ]);\n\n $body = curl_exec($ch);\n $err = curl_error($ch);\n $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n curl_close($ch);\n\n if ($body === false || $code < 200 || $code >= 300) {\n status_header(502);\n header(\'Content-Type:text/plain;charset=utf-8\');\n echo \"Proxy failed\\n\\n\";\n echo \"curl_error: \" . $err . \"\\n\";\n echo \"http_code: \" . $code . \"\\n\";\n echo \"range: \" . $range . \"\\n\";\n exit;\n }\n\n status_header($code);\n\n foreach ($response_headers as $h) {\n if (\n stripos($h, \'Content-Type:\') === 0 ||\n stripos($h, \'Content-Length:\') === 0 ||\n stripos($h, \'Content-Range:\') === 0 ||\n stripos($h, \'Accept-Ranges:\') === 0\n ) {\n header($h);\n }\n }\n\n header(\'Cache-Control: no-store\');\n\n echo $body;\n exit;\n}\n\nfunction raptor_demo_trace_id() {\n return \'rpd_\' . gmdate(\'Ymd_His\') . \'_\' . wp_generate_password(6, false, false);\n}\nfunction raptor_demo_user_name() {\n $u = wp_get_current_user();\n\n if ($u && $u->exists()) {\n return $u->display_name;\n }\n\n return \'guest\';\n}\n\nfunction raptor_demo_response($ok, $data = [], $http_code = 200) {\n return new WP_REST_Response(array_merge([\n \'ok\' => $ok,\n \'trace_id\' => raptor_demo_trace_id(),\n \'timestamp\' => gmdate(\'Y-m-d\\TH:i:s\\Z\')\n ], $data), $http_code);\n}\n\nfunction raptor_demo_login() {\n $url = RAPTOR_BASE_URL . \'/api/0.3/sso/login\';\n\n $start = microtime(true);\n\n $res = wp_remote_post($url, [\n \'timeout\' => 60,\n \'headers\' => [\n \'Accept\' => \'application/json\',\n \'Content-Type\' => \'application/x-www-form-urlencoded\',\n \'User-Agent\' => \'Momentry-Raptor-Demo/1.0\'\n ],\n \'body\' => [\n \'username\' => RAPTOR_DEFAULT_USERNAME,\n \'password\' => RAPTOR_DEFAULT_PASSWORD,\n \'realm_name\' => RAPTOR_DEFAULT_REALM\n ]\n ]);\n\n $latency = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($res)) {\n return raptor_demo_response(false, [\n \'step\' => \'login\',\n \'message\' => $res->get_error_message(),\n \'latency_ms\' => $latency\n ], 500);\n }\n\n $code = wp_remote_retrieve_response_code($res);\n $raw = wp_remote_retrieve_body($res);\n $json = json_decode($raw, true);\n\n $ok = ($code >= 200 && $code < 300);\n\nglobal $wpdb;\n\n$wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => raptor_demo_trace_id(),\n \n \'user_id\' => get_current_user_id(),\n\'user_login\' => raptor_demo_user_name(),\'page_source\' => \'RAPTOR Demo\',\n \'method\' => \'POST\',\n \'path\' => \'/raptor-demo/v1/login → \' . $url,\n \'request_body\' => wp_json_encode([\n \'username\' => RAPTOR_DEFAULT_USERNAME,\n \'realm_name\' => RAPTOR_DEFAULT_REALM\n ]),\n \'response_body\' => $raw,\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'success\' => $ok ? 1 : 0,\n \'error_message\' => $ok ? null : $raw\n ]\n);\n\nreturn raptor_demo_response($ok, [\n \'step\' => \'login\',\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'data\' => $json ?: $raw\n]);\n}\n\nfunction raptor_demo_upload(WP_REST_Request $request) {\n$token = sanitize_text_field(\n $request->get_param(\'token\')\n ?: ($_POST[\'token\'] ?? \'\')\n ?: ($_SERVER[\'HTTP_X_RAPTOR_TOKEN\'] ?? \'\')\n);\n if (!$token) {\n return raptor_demo_response(false, [\n \'step\' => \'upload\',\n \'message\' => \'Missing Bearer token\'\n ], 401);\n }\n\n if (empty($_FILES[\'primary_file\'])) {\n return raptor_demo_response(false, [\n \'step\' => \'upload\',\n \'message\' => \'Missing primary_file\'\n ], 400);\n }\n\n $file = $_FILES[\'primary_file\'];\n $tmp = $file[\'tmp_name\'];\n $filename = sanitize_file_name($file[\'name\']);\n\n $url = RAPTOR_BASE_URL . \'/api/0.3/asset/fileupload_analysis\';\n\n $start = microtime(true);\n\n $body = [\n \'primary_file\' => new CURLFile($tmp, $file[\'type\'] ?: \'video/mp4\', $filename),\n \'processing_mode\' => \'default\'\n ];\n\n $ch = curl_init();\n curl_setopt_array($ch, [\n CURLOPT_URL => $url,\n CURLOPT_POST => true,\n CURLOPT_POSTFIELDS => $body,\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_TIMEOUT => 600,\n CURLOPT_HTTPHEADER => [\n \'Accept: application/json\',\n \'Authorization: Bearer \' . $token,\n \'User-Agent: Momentry-Raptor-Demo/1.0\'\n ],\n ]);\n\n $raw = curl_exec($ch);\n $err = curl_error($ch);\n $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);\n$err = curl_error($ch);\n\nheader(\'X-Raptor-Proxy-Code: \' . $code);\nif ($err) header(\'X-Raptor-Proxy-Error: \' . $err);\n curl_close($ch);\n\n $latency = round((microtime(true) - $start) * 1000);\n\n if ($err) {\n return raptor_demo_response(false, [\n \'step\' => \'upload\',\n \'message\' => $err,\n \'latency_ms\' => $latency\n ], 500);\n }\n\n $json = json_decode($raw, true);\n$ok = ($code >= 200 && $code < 300);\n\nglobal $wpdb;\n\n$wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => raptor_demo_trace_id(),\n \'user_id\' => get_current_user_id(),\n\'user_login\' => raptor_demo_user_name(),\'page_source\' => \'RAPTOR Demo\',\n \'method\' => \'POST\',\n \'path\' => \'/raptor-demo/v1/upload → \' . $url,\n \'request_body\' => wp_json_encode([\n \'filename\' => $filename,\n \'processing_mode\' => \'default\'\n ]),\n \'response_body\' => $raw,\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'success\' => $ok ? 1 : 0,\n \'error_message\' => $ok ? null : $raw\n ]\n);\n\n return raptor_demo_response($ok, [\n \'step\' => \'upload\',\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'data\' => $json ?: $raw\n ]);\n}\n\nfunction raptor_demo_status(WP_REST_Request $request) {\n $params = $request->get_json_params();\n $token = sanitize_text_field($params[\'token\'] ?? \'\');\n $correlation_id = sanitize_text_field($params[\'correlation_id\'] ?? \'\');\n\n if (!$token || !$correlation_id) {\n return raptor_demo_response(false, [\n \'step\' => \'status\',\n \'message\' => \'Missing token or correlation_id\'\n ], 400);\n }\n\n $url = RAPTOR_BASE_URL . \'/api/0.3/processing/cache/video/\' . rawurlencode($correlation_id);\n\n $start = microtime(true);\n\n $res = wp_remote_get($url, [\n \'timeout\' => 60,\n \'headers\' => [\n \'Accept\' => \'application/json\',\n \'Authorization\' => \'Bearer \' . $token,\n \'User-Agent\' => \'Momentry-Raptor-Demo/1.0\'\n ]\n ]);\n\n $latency = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($res)) {\n return raptor_demo_response(false, [\n \'step\' => \'status\',\n \'message\' => $res->get_error_message(),\n \'latency_ms\' => $latency\n ], 500);\n }\n\n $code = wp_remote_retrieve_response_code($res);\n $raw = wp_remote_retrieve_body($res);\n $json = json_decode($raw, true);\n $ok = ($code >= 200 && $code < 300);\n\nglobal $wpdb;\n\n$wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => raptor_demo_trace_id(),\n\'user_id\' => get_current_user_id(),\n\'user_login\' => raptor_demo_user_name(),\'page_source\' => \'RAPTOR Demo\',\n\'method\' => \'POST\',\n\'path\' => \'/raptor-demo/v1/status → \' . $url,\n \'request_body\' => wp_json_encode([\n \'correlation_id\' => $correlation_id\n ]),\n \'response_body\' => $raw,\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'success\' => $ok ? 1 : 0,\n \'error_message\' => $ok ? null : $raw\n ]\n);\n\n return raptor_demo_response($ok, [\n \'step\' => \'status\',\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'data\' => $json ?: $raw\n ]);\n}\n\nfunction raptor_demo_search(WP_REST_Request $request) {\n $params = $request->get_json_params();\n\n $token = sanitize_text_field($params[\'token\'] ?? \'\');\n $query = sanitize_text_field($params[\'query\'] ?? \'\');\n $top_k = intval($params[\'top_k\'] ?? 5);\n\n if (!$token || !$query) {\n return raptor_demo_response(false, [\n \'step\' => \'search\',\n \'message\' => \'Missing token or query\'\n ], 400);\n }\n\n $url = RAPTOR_BASE_URL . \'/api/0.3/search/video_search\';\n\n $payload = [\n \'query\' => $query,\n \'top_k\' => max(1, min($top_k, 50)),\n \'candidate_multiplier\' => 5,\n \'score_threshold\' => 0.52\n ];\n\n $start = microtime(true);\n\n $res = wp_remote_post($url, [\n \'timeout\' => 120,\n \'headers\' => [\n \'Accept\' => \'application/json\',\n \'Content-Type\' => \'application/json\',\n \'Authorization\' => \'Bearer \' . $token,\n \'User-Agent\' => \'Momentry-Raptor-Demo/1.0\'\n ],\n \'body\' => wp_json_encode($payload)\n ]);\n\n $latency = round((microtime(true) - $start) * 1000);\n\n if (is_wp_error($res)) {\n return raptor_demo_response(false, [\n \'step\' => \'search\',\n \'message\' => $res->get_error_message(),\n \'latency_ms\' => $latency\n ], 500);\n }\n\n $code = wp_remote_retrieve_response_code($res);\n $raw = wp_remote_retrieve_body($res);\n $json = json_decode($raw, true);\n$ok = ($code >= 200 && $code < 300);\n\nglobal $wpdb;\n\n$wpdb->insert(\n $wpdb->prefix . \'momentry_api_logs\',\n [\n \'trace_id\' => raptor_demo_trace_id(),\n \'user_id\' => get_current_user_id(),\n\'user_login\' => raptor_demo_user_name(),\'page_source\' => \'RAPTOR Demo\',\n \'method\' => \'POST\',\n \'path\' => \'/raptor-demo/v1/search → \' . $url,\n \'request_body\' => wp_json_encode($payload),\n \'response_body\' => $raw,\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'success\' => $ok ? 1 : 0,\n \'error_message\' => $ok ? null : $raw\n ]\n);\n\n return raptor_demo_response($ok, [\n \'step\' => \'search\',\n \'http_code\' => $code,\n \'latency_ms\' => $latency,\n \'request_body\' => $payload,\n \'data\' => $json ?: $raw\n ]);\n}\n\nadd_shortcode(\'raptor_workflow_demo\', function () {\nob_start();\n?>\n\n\n\n
\n
\n
Momentry × RAPTOR
\n
Make Every Video Searchable \n
Login, upload a video, watch the AI pipeline process it, then search moments and play the result directly.
\n
\n
Ready
\n
\n\n
\n
\n 1 \n Login \n Bearer Token \n
\n
\n
\n 2 \n Upload \n Trigger Pipeline \n
\n
\n
\n 3 \n Process \n Transcribe / Index \n
\n
\n
\n 4 \n Search \n Find Moments \n
\n
\n\n
\n\n
\n\n
\n Processing Pipeline \n\n \n\n \n
Queued
\n
Transcribing
\n
Extracting
\n
Indexing
\n
Complete
\n
\n\n No processing status yet. \n \n\n
\n Search Moments \n\n \n \n Search \n
\n\n \n Try: meeting \n person walking \n machine learning \n car \n
\n\n No search yet.
\n
\n \n\n
\n Moment Playback \n \n Select a search result to play.
\n \n\n
\n\n
\n \n
Trace / Response Log \n Clear Log \n \n Ready. \n \n\n
\n\n\n\n\n\n抓完 Log 後的顯示表格','global $wpdb;\n\n$table = $wpdb->prefix . \'momentry_api_logs\';\n\n$sql = \"CREATE TABLE IF NOT EXISTS $table (\n id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n trace_id VARCHAR(64),\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP,\n\n user_id BIGINT NULL,\n user_login VARCHAR(100) NULL,\n\n method VARCHAR(10),\n\n page_source VARCHAR(100) NULL,\n\n path TEXT,\n request_body LONGTEXT,\n response_body LONGTEXT,\n\n http_code INT,\n latency_ms INT,\n\n success TINYINT(1),\n\n error_message TEXT\n)\";\n\nrequire_once ABSPATH . \'wp-admin/includes/upgrade.php\';\n\ndbDelta($sql);\n\n/* 新增欄位(舊 table 升級用) */\n\n$columns = $wpdb->get_col(\"SHOW COLUMNS FROM $table\");\n\nif (!in_array(\'user_id\', $columns)) {\n $wpdb->query(\"ALTER TABLE $table ADD user_id BIGINT NULL\");\n}\n\nif (!in_array(\'user_login\', $columns)) {\n $wpdb->query(\"ALTER TABLE $table ADD user_login VARCHAR(100) NULL\");\n}\n\nif (!in_array(\'page_source\', $columns)) {\n $wpdb->query(\"ALTER TABLE $table ADD page_source VARCHAR(100) NULL\");\n}\n\necho \'Momentry API Logs table ready.\';','抓完 Log 後的顯示表格','global',0,10,1,'2026-05-27 02:06:12',1,NULL),
(70,'Momentry API Logs Page','用這個來抓 Log
','add_shortcode(\'momentry_api_logs\', function () {\n global $wpdb;\n\n $table = $wpdb->prefix . \'momentry_api_logs\';\n\n if (isset($_GET[\'clear_logs\']) && current_user_can(\'manage_options\')) {\n\n $wpdb->query(\"TRUNCATE TABLE $table\");\n\n echo \'\n \n Logs cleared.\n
\';\n }\n\n$per_page = 50;\n$status = sanitize_text_field($_GET[\'status\'] ?? \'\');\n\n$where = \'WHERE 1=1\';\n\nif ($status === \'success\') {\n $where .= \' AND success = 1\';\n}\n\nif ($status === \'fail\') {\n $where .= \' AND success = 0\';\n}\n$page = max(1, intval($_GET[\'log_page\'] ?? 1));\n$offset = ($page - 1) * $per_page;\n\n$total = (int) $wpdb->get_var(\n\"SELECT COUNT(*) FROM $table $where\");\n\n$total_pages = max(1, ceil($total / $per_page));\n\n$logs = $wpdb->get_results(\n $wpdb->prepare(\n \"SELECT * FROM $table $where ORDER BY id DESC LIMIT %d OFFSET %d\",\n $per_page,\n $offset\n ),\n ARRAY_A\n);\n\n ob_start();\n ?>\n\n \n
Momentry API Logs \n
\n
\n \n \n ID \n Time \n User \nPage \n Method \n Path \n Code \n Latency \n Status \n \n \n\n \n \n \">\n \n \n \n\n \n \n \n \n \n \n ms \n \n \n\n \" style=\"display:none;\">\n \n \n
Trace ID \n
\n
Path \n
\n
Request Body \n
\n\n
Response Body \n
\n\n \n
Error \n
\n \n
\n \n \n \n \n
\n
\n\n \n\n \n\n 透過這個才能用 本地路徑顯示圖','add_action(\'init\', function () {\n if (empty($_GET[\'ms_local_image\'])) {\n return;\n }\n\n $file = rawurldecode($_GET[\'ms_local_image\']);\n\n $allowed_dir = \'/Users/accusys/momentry/var/sftpgo/data/demo/\';\n $real_file = realpath($file);\n\n if (!$real_file || strpos($real_file, realpath($allowed_dir)) !== 0 || !file_exists($real_file)) {\n status_header(404);\n exit(\'Image not found\');\n }\n\n header(\'Content-Type: \' . mime_content_type($real_file));\n header(\'Content-Length: \' . filesize($real_file));\n readfile($real_file);\n exit;\n});','透過這個才能用 本地路徑顯示圖','global',0,10,1,'2026-05-27 02:05:34',1,NULL),
(72,'People – Frontend JS','','add_action(\'wp_footer\', function() {\n if (strpos($_SERVER[\'REQUEST_URI\'], \'people\') === false) return;\n ?>\n \n