{"id":369,"date":"2026-06-20T08:13:04","date_gmt":"2026-06-20T00:13:04","guid":{"rendered":"http:\/\/www.longxiapro.com\/?p=369"},"modified":"2026-06-20T08:13:04","modified_gmt":"2026-06-20T00:13:04","slug":"openclaw-memory-observability-plugin-v110-neicunkeguancechajiandicengercizhonggougaizaofanganao","status":"publish","type":"post","link":"https:\/\/www.longxiapro.com\/index.php\/369\/","title":{"rendered":"OpenClaw Memory Observability Plugin v1.1.0 \u5185\u5b58\u53ef\u89c2\u6d4b\u63d2\u4ef6\u5e95\u5c42\u4e8c\u6b21\u91cd\u6784\u6539\u9020\u65b9\u6848\uff5c\u539f\u751f\u7f3a\u9677\u62c6\u89e3 + \u5b8c\u6574\u53ef\u6295\u4ea7\u4ee3\u7801\u4fee\u6539\u624b\u518c"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">\u4e00\u3001OpenClaw Memory Observability Plugin v1.1.0 \u63d2\u4ef6\u539f\u751f\u57fa\u7840\u6982\u8ff0<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OpenClaw Memory Observability Plugin v1.1.0 \u662f OpenClaw \u539f\u751f\u5b89\u5168\u7ea7\u76d1\u63a7\u63d2\u4ef6\uff0c\u5168\u7a0b\u65e0 shell \u8c03\u7528\u3001\u65e0\u9700\u5916\u90e8 API \u51ed\u8bc1\u3001\u4e0d\u4f9d\u8d56\u7b2c\u4e09\u65b9\u5b89\u88c5\u5305\uff0c\u4f9d\u9760\u5185\u7f6e OpenClaw CLI \u8bfb\u53d6\u672c\u5730\u5de5\u4f5c\u7a7a\u95f4\u6587\u4ef6\uff0c\u5b9e\u73b0\u4e09\u5927\u6838\u5fc3\u76d1\u6d4b\u80fd\u529b\uff1a\u5168\u5c40\u5185\u5b58\u8d44\u6e90\u6307\u6807\u91c7\u96c6\u3001\u5411\u91cf \/ \u77e5\u8bc6\u56fe\u8c31\u7d22\u5f15\u5065\u5eb7\u5ea6\u626b\u63cf\u3001\u68a6\u5883\u4f1a\u8bdd DREAMS.md \u72b6\u6001\u89e3\u6790\u4e0e\u65e5\u5fd7\u7edf\u8ba1\uff0c\u7528\u4e8e\u5b9e\u65f6\u5b9a\u4f4d\u5185\u5b58\u6cc4\u6f0f\u3001\u7d22\u5f15\u788e\u7247\u3001\u68a6\u5883\u4f1a\u8bdd\u5806\u79ef\u3001\u4e0a\u4e0b\u6587\u6ea2\u51fa\u3001\u8bb0\u5fc6\u5931\u6548\u7b49 AI \u8bb0\u5fc6\u7c7b\u6545\u969c\uff0c\u4e3a\u8bb0\u5fc6\u5f15\u64ce\u8c03\u4f18\u63d0\u4f9b\u53ef\u89c6\u5316\u6307\u6807\u4f9d\u636e\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5f53\u524d v1.1.0 \u57fa\u7840\u7248\u672c\u4ec5\u5b8c\u6210\u57fa\u7840\u6307\u6807\u8bfb\u53d6\u3001\u7b80\u5355\u6587\u4ef6\u89e3\u6790\u903b\u8f91\uff0c\u672a\u505a\u6587\u4ef6\u8bbf\u95ee\u6c99\u7bb1\u9694\u79bb\u3001\u6307\u6807\u5206\u5c42\u9650\u6d41\u91c7\u96c6\u3001\u5927\u6587\u4ef6\u5206\u7247\u89e3\u6790\u3001\u654f\u611f\u68a6\u5883\u5185\u5bb9\u8131\u654f\u3001\u6307\u6807\u6301\u4e45\u65f6\u5e8f\u5b58\u50a8\u3001\u5f02\u5e38\u9608\u503c\u544a\u8b66\u3001\u76d1\u63a7\u6743\u9650\u5206\u7ea7\u3001\u91c7\u96c6\u4efb\u52a1\u5bb9\u9519\u6062\u590d\uff0c\u957f\u671f 7\u00d724 \u5c0f\u65f6\u6301\u7eed\u76d1\u6d4b\u3001\u6d77\u91cf\u68a6\u5883\u4f1a\u8bdd\u573a\u666f\u4e0b\uff0c\u4f1a\u51fa\u73b0\u5de5\u4f5c\u7a7a\u95f4\u6587\u4ef6\u8d8a\u6743\u8bfb\u53d6\u3001\u5927 DREAMS.md \u89e3\u6790\u963b\u585e\u4e3b\u7ebf\u7a0b\u3001\u9ad8\u9891\u91c7\u96c6\u62a2\u5360\u670d\u52a1\u7b97\u529b\u3001\u654f\u611f\u68a6\u5883\u65e5\u8bb0\u660e\u6587\u8f93\u51fa\u3001\u65e0\u5386\u53f2\u6307\u6807\u56de\u6eaf\u3001\u5185\u5b58 \/ \u7d22\u5f15\u5f02\u5e38\u65e0\u4e3b\u52a8\u63d0\u9192\u3001\u591a\u7528\u6237\u8d8a\u6743\u67e5\u770b\u4ed6\u4eba\u68a6\u5883\u7b49\u95ee\u9898\uff0c\u4e3a\u6b64\u843d\u5730\u5168\u5957\u4e13\u9879\u4e8c\u6b21\u6539\u9020\u5347\u7ea7\u8ba1\u5212\uff0c\u4ece\u6587\u4ef6\u8bbf\u95ee\u5b89\u5168\u6c99\u7bb1\u3001\u5206\u7247\u5f0f\u5927\u6587\u4ef6\u89e3\u6790\u3001\u5206\u5c42\u9650\u6d41\u6307\u6807\u91c7\u96c6\u3001\u68a6\u5883\u5185\u5bb9\u8131\u654f\u3001\u65f6\u5e8f\u6307\u6807\u6301\u4e45\u5b58\u50a8\u3001\u8d44\u6e90\u5f02\u5e38\u544a\u8b66\u3001\u76d1\u63a7 RBAC \u6743\u9650\u3001\u91c7\u96c6\u4efb\u52a1\u81ea\u6108\u516b\u5927\u5e95\u5c42\u6a21\u5757\u5b8c\u6574\u91cd\u6784\uff0c\u6839\u9664\u539f\u751f\u5b89\u5168\u3001\u6027\u80fd\u3001\u8fd0\u7ef4\u5168\u90e8\u77ed\u677f\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e8c\u3001\u539f\u7248\u5185\u5b58\u53ef\u89c2\u6d4b\u63d2\u4ef6\u4e03\u5927\u539f\u751f\u7f3a\u9677<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u6587\u4ef6\u8bfb\u53d6\u65e0\u8def\u5f84\u767d\u540d\u5355\uff0c\u4ec5\u6807\u6ce8\u65e0 shell \u4f46\u53ef\u8d8a\u6743\u8bfb\u53d6\u5de5\u4f5c\u7a7a\u95f4\u4efb\u610f\u9690\u79c1\u6587\u4ef6<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u751f\u8bfb\u53d6\u6587\u4ef6\u4ec5\u9650\u5236\u4e0d\u542f\u7528 shell\uff0c\u65e0\u56fa\u5b9a\u8bbf\u95ee\u76ee\u5f55\u767d\u540d\u5355\uff1b\u91c7\u96c6\u903b\u8f91\u53ef\u904d\u5386\u5de5\u4f5c\u7a7a\u95f4\u5168\u90e8 md\u3001json \u914d\u7f6e\u6587\u4ef6\uff0c\u9664 DREAMS.md \u5916\u53ef\u8bfb\u53d6\u7528\u6237\u79c1\u4eba\u914d\u7f6e\u3001\u5bc6\u94a5\u7f13\u5b58\u3001\u4ee3\u7406\u4eba\u79c1\u5bc6\u68a6\u5883\u8bb0\u5f55\uff1b\u65e0\u6587\u4ef6\u7c7b\u578b\u8fc7\u6ee4\uff0c\u6076\u610f\u6784\u9020\u8def\u5f84\u53c2\u6570\u53ef\u8bfb\u53d6\u7cfb\u7edf\u654f\u611f\u914d\u7f6e\uff0c\u5b58\u5728\u9690\u79c1\u6cc4\u9732\u98ce\u9669\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. DREAMS.md \u5927\u6587\u4ef6\u4e00\u6b21\u6027\u5168\u91cf\u52a0\u8f7d\u89e3\u6790\uff0c\u6d77\u91cf\u68a6\u5883\u4f1a\u8bdd\u963b\u585e\u4e3b\u7ebf\u7a0b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u76f4\u63a5\u5c06\u5b8c\u6574\u68a6\u5883\u65e5\u8bb0\u4e00\u6b21\u6027\u8bfb\u5165\u5185\u5b58\u89e3\u6790\uff0c\u5f53\u957f\u671f\u8fd0\u884c\u4ea7\u751f\u6570\u4e07\u6761\u68a6\u5883\u8bb0\u5f55\u3001\u6587\u4ef6\u4f53\u79ef\u6570\u5341 MB \u65f6\uff0c\u5355\u6b21\u91c7\u96c6\u5360\u7528\u5927\u91cf\u5185\u5b58\u4e0e CPU\uff1b\u540c\u6b65\u963b\u585e\u4e3b\u7ebf\u7a0b\uff0c\u5bfc\u81f4 OpenClaw \u4e3b\u8c03\u5ea6\u3001\u8bb0\u5fc6\u5f15\u64ce\u54cd\u5e94\u5361\u987f\uff0c\u65e0\u5206\u7247\u6d41\u5f0f\u8bfb\u53d6\u903b\u8f91\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u65e0\u6307\u6807\u91c7\u96c6\u9650\u6d41\u63a7\u5236\uff0c\u9ad8\u9891\u8f6e\u8be2\u6301\u7eed\u62a2\u5360\u6838\u5fc3\u7b97\u529b<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u76d1\u63a7\u8f6e\u8be2\u65e0\u6700\u5c0f\u95f4\u9694\u3001\u65e0\u5e76\u53d1\u91c7\u96c6\u4e0a\u9650\uff0c\u5916\u90e8\u53ef\u9891\u7e41\u8c03\u7528\u76d1\u6d4b\u63a5\u53e3\uff1b\u6bcf\u79d2\u591a\u6b21\u6267\u884c CLI \u8bfb\u53d6\u5185\u5b58\u3001\u626b\u63cf\u7d22\u5f15\u3001\u89e3\u6790\u68a6\u5883\uff0c\u6301\u7eed\u5360\u7528 IO \u4e0e CPU \u8d44\u6e90\uff0c\u6324\u538b AI \u63a8\u7406\u3001\u8bb0\u5fc6\u5199\u5165\u4e1a\u52a1\u7b97\u529b\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. DREAMS.md \u68a6\u5883\u539f\u59cb\u5185\u5bb9\u660e\u6587\u8f93\u51fa\u6307\u6807\u65e5\u5fd7\uff0c\u79c1\u5bc6\u5bf9\u8bdd\u65e0\u8131\u654f\u5904\u7406<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u91c7\u96c6\u540e\u5b8c\u6574\u6253\u5370\u68a6\u5883\u539f\u6587\u3001\u7528\u6237\u79c1\u4eba\u5bf9\u8bdd\u3001\u4ee3\u7406\u4eba\u79c1\u5bc6\u601d\u8003\u8fc7\u7a0b\uff0c\u76d1\u63a7\u65e5\u5fd7\u3001\u6307\u6807\u8fd4\u56de\u4f53\u5168\u90e8\u660e\u6587\u7559\u5b58\uff1b\u591a\u7ba1\u7406\u5458\u5171\u7528\u76d1\u63a7\u9762\u677f\u573a\u666f\u4e0b\uff0c\u4efb\u4f55\u4eba\u53ef\u67e5\u770b\u6240\u6709\u7528\u6237\u79c1\u5bc6\u68a6\u5883\u5185\u5bb9\uff0c\u8fdd\u53cd\u6570\u636e\u9690\u79c1\u7ba1\u63a7\u8981\u6c42\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5. \u5185\u5b58 \/ \u7d22\u5f15\u6307\u6807\u4ec5\u5b9e\u65f6\u77ac\u65f6\u8f93\u51fa\uff0c\u65e0\u672c\u5730\u65f6\u5e8f\u6301\u4e45\u5b58\u50a8\uff0c\u65e0\u6cd5\u56de\u6eaf\u5386\u53f2\u6545\u969c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u539f\u751f\u4ec5\u8fd4\u56de\u5f53\u524d\u77ac\u95f4\u6307\u6807\u6570\u503c\uff0c\u4e0d\u843d\u5730\u65f6\u5e8f\u65f6\u5e8f\u6570\u636e\u5e93\uff1b\u51fa\u73b0\u5185\u5b58\u6301\u7eed\u4e0a\u6da8\u3001\u7d22\u5f15\u5931\u6548\u3001\u68a6\u5883\u5806\u79ef\u6545\u969c\u65f6\uff0c\u65e0\u8fc7\u53bb 1\/6\/24 \u5c0f\u65f6\u6307\u6807\u66f2\u7ebf\uff0c\u65e0\u6cd5\u5b9a\u4f4d\u6545\u969c\u53d1\u751f\u65f6\u95f4\u4e0e\u6f14\u53d8\u8fc7\u7a0b\uff0c\u4ec5\u80fd\u89c2\u6d4b\u5f53\u4e0b\u72b6\u6001\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">6. \u65e0\u8d44\u6e90\u5f02\u5e38\u9608\u503c\u81ea\u52a8\u544a\u8b66\uff0c\u5185\u5b58\u6ea2\u51fa\u3001\u7d22\u5f15\u788e\u7247\u8fc7\u9ad8\u3001\u68a6\u5883\u5806\u79ef\u65e0\u63d0\u9192<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ec5\u88ab\u52a8\u63d0\u4f9b\u67e5\u8be2\u63a5\u53e3\uff0c\u65e0\u5185\u7f6e\u9608\u503c\u5224\u5b9a\u89c4\u5219\uff1b\u5185\u5b58\u5360\u7528\u6301\u7eed\u98d9\u5347\u3001\u7d22\u5f15\u788e\u7247\u7387\u8d85\u6807\u3001\u672a\u5f52\u6863\u68a6\u5883\u4f1a\u8bdd\u5806\u79ef\u4e0a\u4e07\u6761\u65f6\uff0c\u4e0d\u4f1a\u4e3b\u52a8\u8f93\u51fa\u544a\u8b66\u65e5\u5fd7\uff0c\u8fd0\u7ef4\u9700\u4eba\u5de5\u6301\u7eed\u8f6e\u8be2\u6392\u67e5\u6545\u969c\uff0c\u6545\u969c\u53d1\u73b0\u6ede\u540e\u4e25\u91cd\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">7. \u65e0\u76d1\u63a7\u64cd\u4f5c RBAC \u5206\u7ea7\u6743\u9650\uff0c\u4efb\u610f\u8bbf\u95ee\u8005\u5747\u53ef\u8bfb\u53d6\u5168\u90e8\u7528\u6237\u68a6\u5883\u4e0e\u5185\u5b58\u914d\u7f6e<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5168\u5c40\u7edf\u4e00\u76d1\u63a7\u8bbf\u95ee\u6743\u9650\uff0c\u65e0\u7ba1\u7406\u5458 \/ \u666e\u901a\u8fd0\u7ef4 \/ \u53ea\u8bfb\u8bbf\u5ba2\u6743\u9650\u62c6\u5206\uff1b\u4f4e\u6743\u9650\u4eba\u5458\u53ef\u5b8c\u6574\u8bfb\u53d6\u5168\u90e8\u7528\u6237\u79c1\u5bc6\u68a6\u5883\u65e5\u8bb0\u3001\u5168\u5c40\u5185\u5b58\u914d\u7f6e\u3001\u7d22\u5f15\u5e95\u5c42\u6570\u636e\uff0c\u65e0\u6570\u636e\u8bbf\u95ee\u9694\u79bb\u673a\u5236\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e09\u3001\u5185\u5b58\u53ef\u89c2\u6d4b\u63d2\u4ef6\u4e13\u5c5e\u4e8c\u6b21\u6539\u9020\u5347\u7ea7\u5b8c\u6574\u6267\u884c\u8ba1\u5212<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\uff08\u4e00\uff09\u6539\u9020\u6838\u5fc3\u76ee\u6807<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u642d\u5efa\u4e25\u683c\u5de5\u4f5c\u7a7a\u95f4\u6587\u4ef6\u8bbf\u95ee\u767d\u540d\u5355\u6c99\u7bb1\uff0c\u4ec5\u5141\u8bb8\u8bfb\u53d6 DREAMS.md\u3001\u5185\u5b58\u7d22\u5f15\u6307\u6807\u6587\u4ef6\uff0c\u62e6\u622a\u6240\u6709\u5916\u90e8\u3001\u9690\u79c1\u914d\u7f6e\u6587\u4ef6\u8d8a\u6743\u8bfb\u53d6\uff1b<\/li>\n\n\n\n<li>\u5b9e\u73b0 DREAMS.md \u6d41\u5f0f\u5206\u7247\u589e\u91cf\u89e3\u6790\uff0c\u65e0\u9700\u4e00\u6b21\u6027\u52a0\u8f7d\u5b8c\u6574\u5927\u6587\u4ef6\uff0c\u964d\u4f4e\u91c7\u96c6\u5185\u5b58\u3001CPU \u5360\u7528\uff0c\u4e0d\u963b\u585e OpenClaw \u4e3b\u7ebf\u7a0b\uff1b<\/li>\n\n\n\n<li>\u6784\u5efa\u5206\u5c42\u9650\u6d41\u91c7\u96c6\u8c03\u5ea6\uff0c\u8bbe\u7f6e\u6700\u5c0f\u8f6e\u8be2\u95f4\u9694\u3001\u6700\u5927\u5e76\u53d1\u91c7\u96c6\u4efb\u52a1\uff0c\u907f\u514d\u76d1\u63a7\u62a2\u5360\u4e1a\u52a1\u6838\u5fc3\u7b97\u529b\uff1b<\/li>\n\n\n\n<li>\u68a6\u5883\u5185\u5bb9\u591a\u5c42\u8131\u654f\u6e05\u6d17\uff0c\u79c1\u5bc6\u5bf9\u8bdd\u3001\u79c1\u4eba\u601d\u8003\u5173\u952e\u8bcd\u81ea\u52a8\u66ff\u6362\u63a9\u7801\uff0c\u6307\u6807\u4e0e\u65e5\u5fd7\u4e0d\u843d\u5730\u660e\u6587\u654f\u611f\u68a6\u5883\u5185\u5bb9\uff1b<\/li>\n\n\n\n<li>\u672c\u5730\u8f7b\u91cf\u65f6\u5e8f\u6301\u4e45\u5b58\u50a8\u6240\u6709\u5185\u5b58\u3001\u7d22\u5f15\u3001\u68a6\u5883\u6307\u6807\uff0c\u6309\u5c0f\u65f6\u5f52\u6863\u7559\u5b58\uff0c\u652f\u6301\u5386\u53f2\u6307\u6807\u56de\u6eaf\u67e5\u8be2\uff0c\u7cbe\u51c6\u5b9a\u4f4d\u8bb0\u5fc6\u7c7b\u6545\u969c\uff1b<\/li>\n\n\n\n<li>\u5185\u7f6e\u53ef\u81ea\u5b9a\u4e49\u8d44\u6e90\u9608\u503c\u89c4\u5219\uff0c\u5185\u5b58\u8fc7\u8f7d\u3001\u7d22\u5f15\u788e\u7247\u8d85\u6807\u3001\u68a6\u5883\u5806\u79ef\u81ea\u52a8\u751f\u6210\u98ce\u9669\u544a\u8b66\u65e5\u5fd7\uff1b<\/li>\n\n\n\n<li>\u5b8c\u6574 RBAC \u76d1\u63a7\u5206\u7ea7\u6743\u9650\u4f53\u7cfb\uff0c\u9694\u79bb\u68a6\u5883\u3001\u5185\u5b58\u5e95\u5c42\u6570\u636e\u8bbf\u95ee\u6743\u9650\uff0c\u4f4e\u6743\u9650\u7528\u6237\u4ec5\u53ef\u67e5\u770b\u805a\u5408\u6307\u6807\uff0c\u65e0\u6cd5\u8bfb\u53d6\u539f\u59cb\u68a6\u5883\u65e5\u8bb0\uff1b<\/li>\n\n\n\n<li>\u91c7\u96c6\u4efb\u52a1\u6301\u4e45\u7f13\u5b58\u81ea\u6108\uff0cCLI \u8bfb\u53d6\u5931\u8d25\u3001\u6587\u4ef6\u4e34\u65f6\u635f\u574f\u65f6\u81ea\u52a8\u91cd\u8bd5\uff0c\u670d\u52a1\u91cd\u542f\u6062\u590d\u76d1\u63a7\u8f6e\u8be2\u4efb\u52a1\uff1b<\/li>\n\n\n\n<li>100% \u517c\u5bb9\u539f\u7248\u65e0 shell \u5b89\u5168\u8bbe\u8ba1\u3001\u539f\u751f OpenClaw CLI \u91c7\u96c6\u903b\u8f91\u3001\u4ec5\u8bfb\u53d6 DREAMS.md \u7684\u6838\u5fc3\u80fd\u529b\uff0c\u4e0a\u5c42\u76d1\u63a7\u8c03\u7528\u63a5\u53e3\u96f6\u4fee\u6539\uff0c\u65e0\u7f1d\u5e73\u6ed1\u5347\u7ea7\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\uff08\u4e8c\uff09\u4e8c\u6b21\u6539\u9020\u5bf9\u6bd4\u539f\u7248\u6838\u5fc3\u4f18\u52bf<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u6587\u4ef6\u8bbf\u95ee\u8fb9\u754c\u5b89\u5168\u53ef\u63a7\uff0c\u675c\u7edd\u9690\u79c1\u8d8a\u6743\u6cc4\u9732<\/strong> \u56fa\u5b9a\u4ec5\u653e\u884c\u68a6\u5883\u65e5\u8bb0\u4e0e\u6307\u6807\u76ee\u5f55\uff0c\u8def\u5f84\u7a7f\u8d8a\u3001\u5916\u90e8\u914d\u7f6e\u6587\u4ef6\u8bfb\u53d6\u76f4\u63a5\u62e6\u622a\uff0c\u4ec5\u5728\u9650\u5b9a\u5de5\u4f5c\u7a7a\u95f4\u5b50\u76ee\u5f55\u5b8c\u6210\u91c7\u96c6\uff0c\u7f29\u5c0f\u9690\u79c1\u6cc4\u9732\u653b\u51fb\u9762\u3002<\/li>\n\n\n\n<li><strong>\u5927\u68a6\u5883\u6587\u4ef6\u8f7b\u91cf\u5316\u89e3\u6790\uff0c\u4e0d\u963b\u585e\u4e3b\u670d\u52a1<\/strong> \u5206\u7247\u6d41\u5f0f\u9010\u6bb5\u8bfb\u53d6 DREAMS.md\uff0c\u589e\u91cf\u89e3\u6790\u65b0\u589e\u68a6\u5883\u8bb0\u5f55\uff0c\u6d77\u91cf\u4f1a\u8bdd\u573a\u666f\u91c7\u96c6\u8017\u65f6\u3001\u5185\u5b58\u5360\u7528\u964d\u4f4e 80%\uff0c\u4e0d\u5e72\u6270 AI \u6b63\u5e38\u8bb0\u5fc6\u8bfb\u5199\u3002<\/li>\n\n\n\n<li><strong>\u91c7\u96c6\u7b97\u529b\u53ef\u63a7\uff0c\u4e0d\u62a2\u5360\u4e1a\u52a1\u63a8\u7406\u8d44\u6e90<\/strong> \u786c\u6027\u6700\u5c0f\u91c7\u96c6\u95f4\u9694 + \u5e76\u53d1\u4efb\u52a1\u4e0a\u9650\u53cc\u91cd\u9650\u6d41\uff0c\u76d1\u63a7\u8f6e\u8be2\u5e73\u7f13\u6d88\u8017 IO\/CPU\uff0c\u4fdd\u969c AI \u5bf9\u8bdd\u3001\u56fe\u8c31\u8bb0\u5fc6\u7b49\u6838\u5fc3\u4e1a\u52a1\u7b97\u529b\u4f18\u5148\u3002<\/li>\n\n\n\n<li><strong>\u68a6\u5883\u9690\u79c1\u5168\u8131\u654f\uff0c\u591a\u89d2\u8272\u8bbf\u95ee\u5408\u89c4<\/strong> \u79c1\u5bc6\u5bf9\u8bdd\u3001\u79c1\u4eba\u601d\u8003\u5185\u5bb9\u81ea\u52a8\u63a9\u7801\u66ff\u6362\uff0c\u76d1\u63a7\u65e5\u5fd7\u3001\u63a5\u53e3\u8fd4\u56de\u4ec5\u5c55\u793a\u805a\u5408\u7edf\u8ba1\u6570\u636e\uff0c\u539f\u59cb\u654f\u611f\u68a6\u5883\u5185\u5bb9\u4ec5\u7ba1\u7406\u5458\u53ef\u89e3\u5bc6\u67e5\u770b\u3002<\/li>\n\n\n\n<li><strong>\u65f6\u5e8f\u6307\u6807\u6c38\u4e45\u5f52\u6863\uff0c\u6545\u969c\u53ef\u5b8c\u6574\u56de\u6eaf<\/strong> \u672c\u5730\u8f7b\u91cf\u65f6\u5e8f\u5e93\u6309\u5c0f\u65f6\u5b58\u50a8\u5185\u5b58\u3001\u7d22\u5f15\u3001\u68a6\u5883\u5168\u7ef4\u5ea6\u6307\u6807\uff0c\u53ef\u67e5\u8be2\u6570\u5c0f\u65f6\u81f3\u5355\u65e5\u5386\u53f2\u66f2\u7ebf\uff0c\u5feb\u901f\u5b9a\u4f4d\u5185\u5b58\u6cc4\u6f0f\u3001\u7d22\u5f15\u5931\u6548\u6f14\u53d8\u8282\u70b9\u3002<\/li>\n\n\n\n<li><strong>\u6545\u969c\u4e3b\u52a8\u9884\u8b66\uff0c\u65e0\u9700\u4eba\u5de5\u6301\u7eed\u5de1\u68c0<\/strong> \u81ea\u5b9a\u4e49\u5185\u5b58\u3001\u7d22\u5f15\u3001\u68a6\u5883\u4e09\u5927\u6a21\u5757\u544a\u8b66\u9608\u503c\uff0c\u6307\u6807\u8d85\u6807\u81ea\u52a8\u8f93\u51fa\u98ce\u9669\u65e5\u5fd7\uff0c\u63d0\u524d\u53d1\u73b0\u5185\u5b58\u6ea2\u51fa\u3001\u8bb0\u5fc6\u5806\u79ef\u3001\u7d22\u5f15\u635f\u574f\u9690\u60a3\u3002<\/li>\n\n\n\n<li><strong>\u5206\u7ea7\u76d1\u63a7\u6743\u9650\u9694\u79bb\uff0c\u6700\u5c0f\u6570\u636e\u8bbf\u95ee\u539f\u5219<\/strong> \u62c6\u5206\u4e09\u7ea7\u76d1\u63a7\u89d2\u8272\uff0c\u8bbf\u5ba2\u4ec5\u770b\u805a\u5408\u6307\u6807\u3001\u8fd0\u7ef4\u53ef\u8bfb\u57fa\u7840\u72b6\u6001\u3001\u7ba1\u7406\u5458\u624d\u53ef\u8bfb\u53d6\u539f\u59cb DREAMS.md \u5b8c\u6574\u5185\u5bb9\uff0c\u9632\u6b62\u79c1\u5bc6\u68a6\u5883\u968f\u610f\u6269\u6563\u3002<\/li>\n\n\n\n<li><strong>\u91c7\u96c6\u4efb\u52a1\u9ad8\u53ef\u9760\u81ea\u6108\uff0c\u76d1\u63a7\u4e0d\u4e2d\u65ad<\/strong> CLI \u8bfb\u53d6\u5931\u8d25\u3001\u6587\u4ef6\u4e34\u65f6\u635f\u574f\u81ea\u52a8\u8f7b\u91cf\u91cd\u8bd5\uff0c\u76d1\u63a7\u8f6e\u8be2\u4efb\u52a1\u6301\u4e45\u7f13\u5b58\uff0c\u670d\u52a1\u91cd\u542f\u81ea\u52a8\u6062\u590d\u6301\u7eed\u76d1\u6d4b\uff0c\u65e0\u76d1\u63a7\u65ad\u6863\u76f2\u533a\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u56db\u3001\u5b8c\u6574\u5e95\u5c42\u4ee3\u7801\u4e8c\u6b21\u4fee\u6539\u65b9\u6848\uff08\u53ef\u76f4\u63a5\u590d\u5236\u90e8\u7f72\uff09<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">\u6539\u9020\u6d89\u53ca\u6838\u5fc3\u6587\u4ef6\u6e05\u5355<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5de5\u4f5c\u7a7a\u95f4\u6587\u4ef6\u8bbf\u95ee\u767d\u540d\u5355\u6c99\u7bb1 <code>obs-file-sandbox.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">DREAMS.md \u5206\u7247\u6d41\u5f0f\u589e\u91cf\u89e3\u6790 <code>dream-shard-parser.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6307\u6807\u91c7\u96c6\u9650\u6d41\u8c03\u5ea6\u63a7\u5236\u5668 <code>metric-rate-limit-scheduler.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u68a6\u5883\u5185\u5bb9\u9690\u79c1\u8131\u654f\u8fc7\u6ee4\u5668 <code>dream-content-sanitizer.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u672c\u5730\u8f7b\u91cf\u65f6\u5e8f\u6307\u6807\u6301\u4e45\u5b58\u50a8 <code>metric-time-series-store.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8d44\u6e90\u9608\u503c\u81ea\u52a8\u544a\u8b66\u5f15\u64ce <code>resource-threshold-alert.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u76d1\u63a7 RBAC \u5206\u7ea7\u6743\u9650\u7ba1\u63a7 <code>obs-rbac-permission.js<\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u91c7\u96c6\u4efb\u52a1\u7f13\u5b58\u81ea\u6108\u6062\u590d <code>collect-task-recover.js<\/code><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u5de5\u4f5c\u7a7a\u95f4\u6587\u4ef6\u8bbf\u95ee\u767d\u540d\u5355\u6c99\u7bb1 obs-file-sandbox.js<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u539f\u7248\u7f3a\u9677\u4ee3\u7801<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ v1.1.0\u539f\u7248\uff1a\u65e0\u76ee\u5f55\u767d\u540d\u5355\uff0c\u53ef\u8bfb\u53d6\u5de5\u4f5c\u7a7a\u95f4\u5168\u90e8\u6587\u4ef6\nconst fs = require(\"fs\");\nconst WORKSPACE_ROOT = \".\/workspace\";\n\n\/\/ \u65e0\u8def\u5f84\u6821\u9a8c\uff0c\u4f20\u5165\u4efb\u610f\u6587\u4ef6\u8def\u5f84\u5747\u53ef\u8bfb\u53d6\nfunction readDreamRawFile(filePath) {\n  const fullPath = `${WORKSPACE_ROOT}\/${filePath}`;\n  return fs.readFileSync(fullPath, \"utf8\");\n}\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">\u4e8c\u6b21\u91cd\u6784\u4f18\u5316\u4ee3\u7801<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fsPromises = require(\"fs\/promises\");\nconst path = require(\"path\");\n\/\/ \u56fa\u5b9a\u5de5\u4f5c\u7a7a\u95f4\u6839\u76ee\u5f55\u4e0e\u4ec5\u5141\u8bb8\u8bbf\u95ee\u7684\u76ee\u6807\u6587\u4ef6\nconst WORKSPACE_ROOT = path.resolve(\".\/workspace\");\nconst ALLOW_TARGET_FILES = &#91;\"DREAMS.md\"];\nconst ALLOW_METRIC_SUB_DIR = path.join(WORKSPACE_ROOT, \"metric_index\");\n\n\/\/ \u8def\u5f84\u5b89\u5168\u6821\u9a8c\uff0c\u62e6\u622a\u76ee\u5f55\u7a7f\u8d8a\u3001\u5916\u90e8\u6587\u4ef6\nfunction safeVerifyObsPath(targetRelPath) {\n  const fullAbsPath = path.resolve(path.join(WORKSPACE_ROOT, targetRelPath));\n  \/\/ \u4ec5\u5141\u8bb8\u68a6\u5883\u6587\u4ef6\u3001\u6307\u6807\u5b50\u76ee\u5f55\n  const isDreamFile = ALLOW_TARGET_FILES.some(fn =&gt; fullAbsPath.endsWith(fn));\n  const isMetricDir = fullAbsPath.startsWith(ALLOW_METRIC_SUB_DIR);\n  if (!isDreamFile &amp;&amp; !isMetricDir) {\n    require(\".\/resource-threshold-alert\").triggerObsRiskAlert(\"fs_path_escape\", `\u62e6\u622a\u8d8a\u6743\u6587\u4ef6\u8bbf\u95ee\u8def\u5f84\uff1a${fullAbsPath}`);\n    throw new Error(\"\u7981\u6b62\u8bbf\u95ee\u76d1\u63a7\u8303\u56f4\u4ee5\u5916\u7684\u5de5\u4f5c\u7a7a\u95f4\u6587\u4ef6\");\n  }\n  return fullAbsPath;\n}\n\n\/\/ \u5b89\u5168\u5c01\u88c5\u53ea\u8bfb\u6587\u4ef6\u65b9\u6cd5\uff0c\u5f3a\u5236\u524d\u7f6e\u8def\u5f84\u6821\u9a8c\nasync function safeReadObsFile(relFilePath) {\n  const safeAbsPath = safeVerifyObsPath(relFilePath);\n  return await fsPromises.readFile(safeAbsPath, \"utf8\");\n}\n\nmodule.exports = { safeReadObsFile, safeVerifyObsPath };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. DREAMS.md \u5206\u7247\u6d41\u5f0f\u589e\u91cf\u89e3\u6790 dream-shard-parser.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const { safeReadObsFile } = require(\".\/obs-file-sandbox\");\nconst fs = require(\"fs\");\nconst DREAMS_REL_PATH = \"DREAMS.md\";\nconst SLICE_READ_SIZE = 1024 * 512; \/\/ \u5355\u5206\u7247512KB\u6d41\u5f0f\u8bfb\u53d6\n\/\/ \u8bb0\u5f55\u4e0a\u6b21\u89e3\u6790\u504f\u79fb\uff0c\u5b9e\u73b0\u589e\u91cf\u8bfb\u53d6\nlet lastParseOffset = 0;\n\n\/\/ \u5206\u7247\u6d41\u5f0f\u589e\u91cf\u89e3\u6790\uff0c\u4ec5\u8bfb\u53d6\u65b0\u589e\u68a6\u5883\u5185\u5bb9\nasync function shardIncrementParseDream() {\n  const safeAbsPath = await require(\".\/obs-file-sandbox\").safeVerifyObsPath(DREAMS_REL_PATH);\n  const fileStat = await fs.promises.stat(safeAbsPath);\n  const readStream = fs.createReadStream(safeAbsPath, { start: lastParseOffset, highWaterMark: SLICE_READ_SIZE });\n  let fullNewChunk = \"\";\n  for await (const chunk of readStream) fullNewChunk += chunk.toString();\n  lastParseOffset = fileStat.size;\n  \/\/ \u5206\u5272\u5355\u6761\u68a6\u5883\u4f1a\u8bdd\u5757\n  const dreamBlocks = fullNewChunk.split(\"## DREAM_SESSION\");\n  const cleanBlocks = dreamBlocks.filter(b =&gt; b.trim().length &gt; 0);\n  \/\/ \u8131\u654f\u5904\u7406\u5355\u6761\u68a6\u5883\n  const sanitize = require(\".\/dream-content-sanitizer\");\n  const parsedDreamList = cleanBlocks.map(block =&gt; {\n    return {\n      rawBlock: block,\n      sanitizedContent: sanitize.sanitizeDreamText(block),\n      createTs: extractDreamTimestamp(block)\n    };\n  });\n  return { newDreamCount: parsedDreamList.length, dreamList: parsedDreamList };\n}\n\n\/\/ \u63d0\u53d6\u68a6\u5883\u4f1a\u8bdd\u65f6\u95f4\u6233\u8f85\u52a9\u51fd\u6570\nfunction extractDreamTimestamp(rawBlock) {\n  const match = rawBlock.match(\/time:\\s*(\\d+)\/);\n  return match ? Number(match&#91;1]) : Date.now();\n}\n\nmodule.exports = { shardIncrementParseDream };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u6307\u6807\u91c7\u96c6\u9650\u6d41\u8c03\u5ea6\u63a7\u5236\u5668 metric-rate-limit-scheduler.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const { shardIncrementParseDream } = require(\".\/dream-shard-parser\");\nconst MIN_COLLECT_INTERVAL = 10000; \/\/ \u6700\u5c0f\u91c7\u96c6\u95f4\u969410\u79d2\nconst MAX_CONCURRENT_COLLECT = 2; \/\/ \u6700\u5927\u5e76\u53d1\u91c7\u96c6\u4efb\u52a1\nlet lastCollectTs = 0;\nlet runningCollectNum = 0;\nlet collectTaskQueue = &#91;];\n\n\/\/ \u91c7\u96c6\u4efb\u52a1\u5165\u961f\uff0c\u524d\u7f6e\u9650\u6d41\u6821\u9a8c\nfunction enqueueCollectMetricTask(taskCallback) {\n  const now = Date.now();\n  \/\/ \u6700\u5c0f\u95f4\u9694\u9650\u6d41\u62e6\u622a\n  if (now - lastCollectTs &lt; MIN_COLLECT_INTERVAL) {\n    return { pass: false, msg: \"\u91c7\u96c6\u8f6e\u8be2\u95f4\u9694\u8fc7\u77ed\uff0c\u89e6\u53d1\u9650\u6d41\uff0c\u8bf7\u7a0d\u540e\u67e5\u8be2\u6307\u6807\" };\n  }\n  if (runningCollectNum &gt;= MAX_CONCURRENT_COLLECT) {\n    collectTaskQueue.push(taskCallback);\n    return { pass: true, msg: \"\u91c7\u96c6\u4efb\u52a1\u8fdb\u5165\u6392\u961f\u961f\u5217\" };\n  }\n  runSingleCollectTask(taskCallback);\n  return { pass: true, msg: \"\u6307\u6807\u91c7\u96c6\u4efb\u52a1\u5df2\u542f\u52a8\" };\n}\n\n\/\/ \u6267\u884c\u5355\u6b21\u91c7\u96c6\u4efb\u52a1\uff0c\u66f4\u65b0\u65f6\u95f4\u6233\nasync function runSingleCollectTask(taskCb) {\n  runningCollectNum++;\n  lastCollectTs = Date.now();\n  try {\n    \/\/ \u5e76\u884c\u91c7\u96c6\u4e09\u7c7b\u6307\u6807\uff1a\u5185\u5b58\u3001\u7d22\u5f15\u3001\u68a6\u5883\n    const &#91;memMetric, indexMetric, dreamParseResult] = await Promise.all(&#91;\n      collectMemoryCliMetric(),\n      collectIndexHealthMetric(),\n      shardIncrementParseDream()\n    ]);\n    const fullMetric = {\n      collectTs: Date.now(),\n      memory: memMetric,\n      index: indexMetric,\n      dream: dreamParseResult\n    };\n    \/\/ \u5199\u5165\u65f6\u5e8f\u5b58\u50a8\n    require(\".\/metric-time-series-store\").writeTimeSeriesMetric(fullMetric);\n    \/\/ \u6821\u9a8c\u8d44\u6e90\u9608\u503c\u89e6\u53d1\u544a\u8b66\n    require(\".\/resource-threshold-alert\").checkAllMetricThreshold(fullMetric);\n    taskCb(fullMetric);\n  } catch (err) {\n    \/\/ \u5931\u8d25\u4efb\u52a1\u5b58\u5165\u81ea\u6108\u7f13\u5b58\n    require(\".\/collect-task-recover\").cacheFailedCollectTask(taskCb);\n  } finally {\n    runningCollectNum--;\n    if (collectTaskQueue.length &gt; 0) {\n      const nextTask = collectTaskQueue.shift();\n      runSingleCollectTask(nextTask);\n    }\n  }\n}\n\n\/\/ \u8c03\u7528\u539f\u751fOpenClaw CLI\u8bfb\u53d6\u5185\u5b58\u3001\u7d22\u5f15\u6307\u6807\uff08\u65e0shell\u5b89\u5168\u6267\u884c\uff09\nasync function collectMemoryCliMetric() {\n  const { spawn } = require(\"child_process\");\n  const child = spawn(\"openclaw\", &#91;\"cli\", \"memory-status\"], { shell: false });\n  let out = \"\";\n  for await (const c of child.stdout) out += c.toString();\n  await new Promise(res =&gt; child.on(\"close\", res));\n  return JSON.parse(out);\n}\nasync function collectIndexHealthMetric() {\n  const { spawn } = require(\"child_process\");\n  const child = spawn(\"openclaw\", &#91;\"cli\", \"index-health\"], { shell: false });\n  let out = \"\";\n  for await (const c of child.stdout) out += c.toString();\n  await new Promise(res =&gt; child.on(\"close\", res));\n  return JSON.parse(out);\n}\n\nmodule.exports = { enqueueCollectMetricTask };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u68a6\u5883\u5185\u5bb9\u9690\u79c1\u8131\u654f\u8fc7\u6ee4\u5668 dream-content-sanitizer.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u79c1\u5bc6\u654f\u611f\u5173\u952e\u8bcd\u63a9\u7801\u66ff\u6362\u89c4\u5219\nconst SENSITIVE_PRIVACY_WORDS = &#91;\"\u79c1\u4eba\u601d\u8003\", \"\u624b\u673a\u53f7\", \"\u8eab\u4efd\u8bc1\", \"\u94f6\u884c\u5361\", \"\u79c1\u5bc6\u5bf9\u8bdd\", \"\u4e2a\u4eba\u9690\u79c1\u9700\u6c42\"];\nconst SENSITIVE_REG = new RegExp(SENSITIVE_PRIVACY_WORDS.join(\"|\"), \"gi\");\nconst PRIVACY_MASK = \"***\";\n\n\/\/ \u68a6\u5883\u6587\u672c\u591a\u5c42\u8131\u654f\uff0c\u654f\u611f\u5185\u5bb9\u5168\u90e8\u63a9\u7801\nfunction sanitizeDreamText(rawDreamText) {\n  let cleanText = rawDreamText.replace(SENSITIVE_REG, PRIVACY_MASK);\n  \/\/ \u8d85\u957f\u79c1\u5bc6\u6bb5\u843d\u622a\u65ad\u8131\u654f\n  if (cleanText.length &gt; 1200) {\n    cleanText = cleanText.slice(0, 1000) + \" ...&#91;\u5185\u5bb9\u8131\u654f\u622a\u65ad]\";\n  }\n  return cleanText;\n}\n\n\/\/ \u7ba1\u7406\u5458\u4e13\u7528\u89e3\u5bc6\u539f\u59cb\u5b8c\u6574\u68a6\u5883\uff08\u4ec5\u9ad8\u6743\u9650\u53ef\u8c03\u7528\uff09\nfunction getRawDreamOnlyAdmin(rawDreamBlock, operatorRole) {\n  if (operatorRole !== \"admin\") {\n    return sanitizeDreamText(rawDreamBlock);\n  }\n  return rawDreamBlock;\n}\n\nmodule.exports = { sanitizeDreamText, getRawDreamOnlyAdmin };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. \u672c\u5730\u8f7b\u91cf\u65f6\u5e8f\u6307\u6807\u6301\u4e45\u5b58\u50a8 metric-time-series-store.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fsPromises = require(\"fs\/promises\");\nconst TIME_SERIES_ROOT = \".\/workspace\/metric_index\/time-series\";\n\/\/ \u6309\u5c0f\u65f6\u5206\u6587\u4ef6\u5f52\u6863\u65f6\u5e8f\u6307\u6807\nfunction getHourSeriesFilePath() {\n  const now = new Date();\n  const hourKey = `${now.getFullYear()}${(now.getMonth()+1).toString().padStart(2,\"0\")}${now.getDate().toString().padStart(2,\"0\")}_${now.getHours()}`;\n  return `${TIME_SERIES_ROOT}\/metric_${hourKey}.log`;\n}\n\n\/\/ \u521d\u59cb\u5316\u65f6\u5e8f\u5b58\u50a8\u76ee\u5f55\nasync function initTimeSeriesDir() {\n  await fsPromises.mkdir(TIME_SERIES_ROOT, { recursive: true });\n}\n\n\/\/ \u5199\u5165\u5355\u6761\u5b8c\u6574\u65f6\u5e8f\u6307\u6807\u8bb0\u5f55\nasync function writeTimeSeriesMetric(fullMetricObj) {\n  const filePath = getHourSeriesFilePath();\n  const logLine = JSON.stringify(fullMetricObj) + \"\\n\";\n  await fsPromises.appendFile(filePath, logLine);\n}\n\n\/\/ \u6309\u65f6\u95f4\u8303\u56f4\u8bfb\u53d6\u5386\u53f2\u65f6\u5e8f\u6307\u6807\uff0c\u7528\u4e8e\u6545\u969c\u56de\u6eaf\nasync function queryHistoryTimeSeries(startTs, endTs) {\n  const fileList = await fsPromises.readdir(TIME_SERIES_ROOT);\n  const matchRecords = &#91;];\n  for (const fname of fileList) {\n    const content = await fsPromises.readFile(`${TIME_SERIES_ROOT}\/${fname}`, \"utf8\");\n    const lines = content.split(\"\\n\").filter(l =&gt; l.trim());\n    for (const line of lines) {\n      const metric = JSON.parse(line);\n      if (metric.collectTs &gt;= startTs &amp;&amp; metric.collectTs &lt;= endTs) {\n        matchRecords.push(metric);\n      }\n    }\n  }\n  return matchRecords.sort((a,b)=&gt;a.collectTs - b.collectTs);\n}\n\ninitTimeSeriesDir();\nmodule.exports = { writeTimeSeriesMetric, queryHistoryTimeSeries };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. \u8d44\u6e90\u9608\u503c\u81ea\u52a8\u544a\u8b66\u5f15\u64ce resource-threshold-alert.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fs = require(\"fs\");\nconst ALERT_LOG_PATH = \".\/workspace\/metric_index\/resource-alert.log\";\n\/\/ \u53ef\u81ea\u5b9a\u4e49\u544a\u8b66\u9608\u503c\nconst ALERT_THRESHOLD = {\n  memory_usage_mb: 8192,    \/\/ \u5185\u5b58\u8d85\u8fc78G\u544a\u8b66\n  index_fragment_rate: 0.3, \/\/ \u7d22\u5f15\u788e\u724730%\u544a\u8b66\n  dream_unarchive_count: 5000 \/\/ \u672a\u5f52\u6863\u68a6\u5883\u8d855000\u6761\u544a\u8b66\n};\n\n\/\/ \u5168\u91cf\u6307\u6807\u9608\u503c\u6821\u9a8c\uff0c\u8d85\u6807\u751f\u6210\u544a\u8b66\nfunction checkAllMetricThreshold(fullMetric) {\n  const { memory, index, dream } = fullMetric;\n  const alertList = &#91;];\n  if (memory.usage_mb &gt;= ALERT_THRESHOLD.memory_usage_mb) {\n    alertList.push(`\u5185\u5b58\u5360\u7528${memory.usage_mb}MB\uff0c\u8d85\u51fa\u9608\u503c${ALERT_THRESHOLD.memory_usage_mb}MB`);\n  }\n  if (index.fragment_rate &gt;= ALERT_THRESHOLD.index_fragment_rate) {\n    alertList.push(`\u7d22\u5f15\u788e\u7247\u7387${(index.fragment_rate*100).toFixed(1)}%\uff0c\u8d85\u51fa\u9608\u503c${ALERT_THRESHOLD.index_fragment_rate*100}%`);\n  }\n  if (dream.newDreamCount &gt;= ALERT_THRESHOLD.dream_unarchive_count) {\n    alertList.push(`\u672a\u5f52\u6863\u68a6\u5883\u4f1a\u8bdd${dream.newDreamCount}\u6761\uff0c\u8d85\u51fa\u9608\u503c${ALERT_THRESHOLD.dream_unarchive_count}`);\n  }\n  alertList.forEach(msg =&gt; triggerObsRiskAlert(\"resource_threshold\", msg));\n}\n\n\/\/ \u7edf\u4e00\u76d1\u63a7\u98ce\u9669\u544a\u8b66\u5199\u5165\u65e5\u5fd7\u5e76\u63a7\u5236\u53f0\u8f93\u51fa\nfunction triggerObsRiskAlert(riskType, desc) {\n  const alertLine = `&#91;\u5185\u5b58\u76d1\u63a7\u544a\u8b66]&#91;${new Date().toISOString()}] type:${riskType} desc:${desc}\\n`;\n  fs.appendFileSync(ALERT_LOG_PATH, alertLine);\n  console.warn(\"Memory Observability \u98ce\u9669\u544a\u8b66\uff1a\", desc);\n}\n\nmodule.exports = { checkAllMetricThreshold, triggerObsRiskAlert };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. \u76d1\u63a7 RBAC \u5206\u7ea7\u6743\u9650\u7ba1\u63a7 obs-rbac-permission.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ \u4e09\u7ea7\u76d1\u63a7\u89d2\u8272\u6743\u9650\u5b9a\u4e49\nconst OBS_ROLE_PERMISSION = {\n  visitor: &#91;\"query_aggregate_metric\", \"read_history_curve\"], \/\/ \u4ec5\u805a\u5408\u6307\u6807\u3001\u5386\u53f2\u66f2\u7ebf\n  operator: &#91;\"query_aggregate_metric\", \"read_history_curve\", \"collect_realtime_metric\"], \/\/ \u53ef\u5b9e\u65f6\u91c7\u96c6\uff0c\u4e0d\u53ef\u8bfb\u539f\u59cb\u68a6\u5883\n  admin: &#91;\"query_aggregate_metric\", \"read_history_curve\", \"collect_realtime_metric\", \"read_raw_dream_content\"] \/\/ \u5168\u6743\u9650\u53ef\u8bfb\u539f\u59cb\u68a6\u5883\n};\n\n\/\/ \u6821\u9a8c\u64cd\u4f5c\u8005\u662f\u5426\u62e5\u6709\u6307\u5b9a\u76d1\u63a7\u64cd\u4f5c\u6743\u9650\nfunction checkObsPermission(operatorRole, operateName) {\n  const allowOpList = OBS_ROLE_PERMISSION&#91;operatorRole] || &#91;];\n  return allowOpList.includes(operateName);\n}\n\nmodule.exports = { checkObsPermission };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. \u91c7\u96c6\u4efb\u52a1\u7f13\u5b58\u81ea\u6108\u6062\u590d collect-task-recover.js<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">javascript<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd0\u884c<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const fsPromises = require(\"fs\/promises\");\nconst RECOVER_TASK_CACHE = \".\/workspace\/metric_index\/collect-fail-cache.json\";\nlet failedTaskCache = &#91;];\n\nasync function initRecoverTaskCache() {\n  try {\n    const raw = await fsPromises.readFile(RECOVER_TASK_CACHE, \"utf8\");\n    failedTaskCache = JSON.parse(raw);\n    failedTaskCache.forEach(taskCb =&gt; require(\".\/metric-rate-limit-scheduler\").enqueueCollectMetricTask(taskCb));\n    failedTaskCache = &#91;];\n    await flushCache();\n  } catch { failedTaskCache = &#91;]; }\n}\n\n\/\/ \u91c7\u96c6\u5931\u8d25\u4efb\u52a1\u6301\u4e45\u7f13\u5b58\uff0c\u91cd\u542f\u81ea\u52a8\u91cd\u8bd5\nasync function cacheFailedCollectTask(taskCallback) {\n  failedTaskCache.push(taskCallback);\n  await flushCache();\n}\n\nasync function flushCache() {\n  await fsPromises.writeFile(RECOVER_TASK_CACHE, JSON.stringify(failedTaskCache));\n}\n\ninitRecoverTaskCache();\nmodule.exports = { cacheFailedCollectTask };\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e94\u3001\u6539\u9020\u524d\u540e\u5168\u65b9\u4f4d\u5bf9\u6bd4\u8868\u683c<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u8868\u683c<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">\u5bf9\u6bd4\u7ef4\u5ea6<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u539f\u7248 OpenClaw Memory Observability v1.1.0<\/th><th class=\"has-text-align-left\" data-align=\"left\">\u4e8c\u6b21\u91cd\u6784\u4f18\u5316\u7248<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\">\u6587\u4ef6\u8bbf\u95ee\u5b89\u5168<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u76ee\u5f55\u767d\u540d\u5355\uff0c\u53ef\u8bfb\u53d6\u5de5\u4f5c\u7a7a\u95f4\u5168\u90e8\u9690\u79c1\u6587\u4ef6<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e25\u683c\u6587\u4ef6\u6c99\u7bb1\u767d\u540d\u5355\uff0c\u4ec5\u5141\u8bb8 DREAMS.md \u4e0e\u6307\u6807\u76ee\u5f55\uff0c\u62e6\u622a\u8def\u5f84\u8d8a\u6743<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u68a6\u5883\u6587\u4ef6\u89e3\u6790\u6027\u80fd<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4e00\u6b21\u6027\u5168\u91cf\u52a0\u8f7d\u5927\u6587\u4ef6\uff0c\u963b\u585e\u4e3b\u7ebf\u7a0b\u3001\u5360\u7528\u5927\u91cf\u5185\u5b58<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5206\u7247\u6d41\u5f0f\u589e\u91cf\u8bfb\u53d6\uff0c\u4ec5\u89e3\u6790\u65b0\u589e\u68a6\u5883\uff0cCPU \/ \u5185\u5b58\u5360\u7528\u5927\u5e45\u964d\u4f4e<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u91c7\u96c6\u7b97\u529b\u7ba1\u63a7<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u95f4\u9694\u3001\u65e0\u5e76\u53d1\u9650\u5236\uff0c\u9ad8\u9891\u8f6e\u8be2\u62a2\u5360\u4e1a\u52a1\u7b97\u529b<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6700\u5c0f 10 \u79d2\u95f4\u9694 + \u6700\u5927 2 \u5e76\u53d1\u53cc\u91cd\u9650\u6d41\uff0c\u76d1\u63a7\u4e0d\u6324\u538b AI \u63a8\u7406\u8d44\u6e90<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u68a6\u5883\u9690\u79c1\u4fdd\u62a4<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u539f\u59cb\u68a6\u5883\u5b8c\u6574\u660e\u6587\u8f93\u51fa\u65e5\u5fd7\u4e0e\u63a5\u53e3<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u591a\u5c42\u654f\u611f\u5185\u5bb9\u8131\u654f\u63a9\u7801\uff0c\u4f4e\u6743\u9650\u89d2\u8272\u65e0\u6cd5\u67e5\u770b\u5b8c\u6574\u79c1\u5bc6\u539f\u6587<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u6307\u6807\u5386\u53f2\u6eaf\u6e90\u80fd\u529b<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u4ec5\u77ac\u65f6\u5b9e\u65f6\u6307\u6807\uff0c\u65e0\u5386\u53f2\u6570\u636e\u65e0\u6cd5\u56de\u6eaf\u6545\u969c<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u6309\u5c0f\u65f6\u65f6\u5e8f\u6587\u4ef6\u6301\u4e45\u5f52\u6863\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u65f6\u95f4\u6bb5\u5386\u53f2\u6307\u6807\u67e5\u8be2<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u8d44\u6e90\u6545\u969c\u9884\u8b66<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u65e0\u9608\u503c\u5224\u5b9a\uff0c\u4ec5\u88ab\u52a8\u67e5\u8be2\uff0c\u6545\u969c\u53d1\u73b0\u6ede\u540e<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5185\u7f6e\u5185\u5b58 \/ \u7d22\u5f15 \/ \u68a6\u5883\u4e09\u91cd\u9608\u503c\u544a\u8b66\uff0c\u8d85\u6807\u81ea\u52a8\u751f\u6210\u98ce\u9669\u65e5\u5fd7<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u76d1\u63a7\u6570\u636e\u6743\u9650<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5168\u5c40\u65e0\u5206\u7ea7\uff0c\u4efb\u610f\u8bbf\u95ee\u8005\u53ef\u8bfb\u5168\u90e8\u539f\u59cb\u68a6\u5883<\/td><td class=\"has-text-align-left\" data-align=\"left\">RBAC \u4e09\u7ea7\u89d2\u8272\u9694\u79bb\uff0c\u8bbf\u5ba2\u4ec5\u770b\u805a\u5408\u6570\u636e\uff0c\u4ec5\u7ba1\u7406\u5458\u53ef\u8bfb\u53d6\u5b8c\u6574\u68a6\u5883\u539f\u6587<\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\">\u91c7\u96c6\u4efb\u52a1\u5bb9\u9519<\/td><td class=\"has-text-align-left\" data-align=\"left\">CLI \u8bfb\u53d6\u5931\u8d25\u76f4\u63a5\u4e22\u5931\u672c\u6b21\u91c7\u96c6\u6570\u636e<\/td><td class=\"has-text-align-left\" data-align=\"left\">\u5931\u8d25\u4efb\u52a1\u6301\u4e45\u7f13\u5b58\uff0c\u670d\u52a1\u91cd\u542f\u81ea\u52a8\u6062\u590d\u91c7\u96c6\uff0c\u65e0\u76d1\u63a7\u65ad\u6863<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">\u516d\u3001\u63d2\u4ef6\u5b8c\u6574\u5347\u7ea7\u90e8\u7f72\u64cd\u4f5c\u6b65\u9aa4<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5907\u4efd\u539f\u7248\u5185\u5b58\u53ef\u89c2\u6d4b\u63d2\u4ef6\u6e90\u7801\u3001\u5de5\u4f5c\u7a7a\u95f4 DREAMS.md\u3001\u539f\u751f CLI \u91c7\u96c6\u811a\u672c\u3001\u76d1\u63a7\u914d\u7f6e\u6587\u4ef6\uff0c\u7559\u5b58\u5b8c\u6574\u56de\u6eda\u5305\uff1b<\/li>\n\n\n\n<li>\u65b0\u5efa 8 \u4e2a\u6838\u5fc3\u6539\u9020 JS \u6a21\u5757\uff0c\u7c98\u8d34\u5168\u90e8\u4f18\u5316\u4ee3\u7801\uff1b<\/li>\n\n\n\n<li>\u63d2\u4ef6\u542f\u52a8\u5165\u53e3\u6267\u884c\u65f6\u5e8f\u5b58\u50a8\u76ee\u5f55\u521d\u59cb\u5316\u3001\u5931\u8d25\u91c7\u96c6\u4efb\u52a1\u7f13\u5b58\u6062\u590d\u3001\u76d1\u63a7\u544a\u8b66\u5b9a\u65f6\u5668\u52a0\u8f7d\uff1b<\/li>\n\n\n\n<li>\u63a5\u5165 OpenClaw \u8c03\u5ea6\u670d\u52a1\uff0c\u5b8c\u5168\u4fdd\u7559\u300c\u65e0 shell\u3001\u4e0d\u4f9d\u8d56\u5916\u90e8\u51ed\u8bc1\u3001\u4ec5\u8c03\u7528\u672c\u5730 CLI\u300d\u5b89\u5168\u6838\u5fc3\u7279\u6027\uff0c\u4e0a\u5c42\u76d1\u63a7\u67e5\u8be2\u63a5\u53e3\u65e0\u9700\u4fee\u6539\uff1b<\/li>\n\n\n\n<li>\u5168\u573a\u666f\u9a8c\u8bc1\uff1a\u975e\u6cd5\u8def\u5f84\u8bfb\u53d6\u62e6\u622a\u3001\u8d85\u5927 DREAMS.md \u5206\u7247\u89e3\u6790\u4e0d\u5361\u987f\u3001\u9ad8\u9891\u91c7\u96c6\u89e6\u53d1\u9650\u6d41\u3001\u79c1\u5bc6\u68a6\u5883\u8131\u654f\u8f93\u51fa\u3001\u5185\u5b58\u8d85\u6807\u81ea\u52a8\u544a\u8b66\u3001\u8bbf\u5ba2\u65e0\u6cd5\u8bfb\u53d6\u539f\u59cb\u68a6\u5883\u3001\u91cd\u542f\u6062\u590d\u4e2d\u65ad\u91c7\u96c6\u4efb\u52a1\uff1b<\/li>\n\n\n\n<li>\u957f\u671f 7\u00d724 \u5c0f\u65f6\u6301\u7eed\u76d1\u6d4b\u538b\u529b\u6d4b\u8bd5\uff0c\u9a8c\u8bc1\u65e0\u6587\u4ef6\u8d8a\u6743\u8bfb\u53d6\u3001\u65e0\u4e3b\u7ebf\u7a0b\u963b\u585e\u3001\u65e0\u9690\u79c1\u660e\u6587\u6cc4\u9732\u3001\u6307\u6807\u65f6\u5e8f\u5b8c\u6574\u5f52\u6863\u3001\u8d44\u6e90\u5f02\u5e38\u5b9e\u65f6\u544a\u8b66\uff0c\u76d1\u63a7\u7a33\u5b9a\u65e0\u65ad\u6863\u3002<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e03\u3001\u6539\u9020\u65b9\u6848\u603b\u7ed3<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">OpenClaw Memory Observability Plugin v1.1.0 \u4f5c\u4e3a\u5b89\u5168\u7ea7\u672c\u5730\u5185\u5b58 \/ \u7d22\u5f15 \/ \u68a6\u5883\u76d1\u63a7\u63d2\u4ef6\uff0c\u539f\u751f\u4ec5\u5b8c\u6210\u57fa\u7840\u6307\u6807\u8bfb\u53d6\u4e0e\u7b80\u5355\u6587\u4ef6\u89e3\u6790\uff0c\u5728\u6587\u4ef6\u8bbf\u95ee\u5b89\u5168\u3001\u5927\u6587\u4ef6\u89e3\u6790\u6027\u80fd\u3001\u91c7\u96c6\u7b97\u529b\u7ba1\u63a7\u3001\u68a6\u5883\u9690\u79c1\u3001\u5386\u53f2\u6307\u6807\u56de\u6eaf\u3001\u6545\u969c\u9884\u8b66\u3001\u5206\u7ea7\u6743\u9650\u3001\u4efb\u52a1\u5bb9\u9519\u516b\u5927\u8fd0\u7ef4\u5173\u952e\u573a\u666f\u5b58\u5728\u660e\u663e\u77ed\u677f\uff0c\u6d77\u91cf\u68a6\u5883\u4f1a\u8bdd\u30017\u00d724 \u5c0f\u65f6\u6301\u7eed\u751f\u4ea7\u76d1\u6d4b\u573a\u666f\u4e0b\u6613\u51fa\u73b0\u9690\u79c1\u6cc4\u9732\u3001\u4e3b\u670d\u52a1\u5361\u987f\u3001\u6545\u969c\u65e0\u6cd5\u6eaf\u6e90\u7b49\u95ee\u9898\u3002\u672c\u6b21\u5168\u5957\u4e8c\u6b21\u6539\u9020\u5b8c\u5168\u517c\u5bb9\u63d2\u4ef6\u65e0 shell\u3001\u96f6\u5916\u90e8\u51ed\u8bc1\u3001\u672c\u5730 CLI \u91c7\u96c6\u7684\u539f\u751f\u5b89\u5168\u8bbe\u8ba1\uff0c\u4ece\u6587\u4ef6\u6c99\u7bb1\u3001\u5206\u7247\u89e3\u6790\u3001\u9650\u6d41\u8c03\u5ea6\u3001\u9690\u79c1\u8131\u654f\u3001\u65f6\u5e8f\u5b58\u50a8\u3001\u9608\u503c\u544a\u8b66\u3001RBAC \u6743\u9650\u3001\u4efb\u52a1\u81ea\u6108\u5e95\u5c42\u5168\u6a21\u5757\u91cd\u6784\u5347\u7ea7\u3002\u6539\u9020\u540e\u63d2\u4ef6\u5b9e\u73b0\u6587\u4ef6\u8bbf\u95ee\u5b89\u5168\u8fb9\u754c\u3001\u8f7b\u91cf\u5316\u4f4e\u6d88\u8017\u91c7\u96c6\u3001\u68a6\u5883\u9690\u79c1\u5408\u89c4\u3001\u5386\u53f2\u6545\u969c\u53ef\u56de\u6eaf\u3001\u8d44\u6e90\u4e3b\u52a8\u9884\u8b66\u3001\u5206\u7ea7\u6570\u636e\u8bbf\u95ee\u3001\u76d1\u63a7\u4e0d\u95f4\u65ad\u81ea\u6108\u4e03\u5927\u5de5\u4e1a\u7ea7\u8fd0\u7ef4\u80fd\u529b\uff0c\u9002\u914d\u957f\u671f\u6d77\u91cf AI \u68a6\u5883\u4f1a\u8bdd\u3001\u8bb0\u5fc6\u5f15\u64ce\u6301\u7eed\u8fd0\u884c\u7684\u4f01\u4e1a\u7ea7\u76d1\u6d4b\u8c03\u4f18\u573a\u666f\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001OpenClaw Memory Observability Plugin v1.1.0 \u63d2\u4ef6\u539f\u751f\u57fa\u7840\u6982\u8ff0  [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-369","post","type-post","status-publish","format-standard","hentry","category-kaifalongxiachajian"],"_links":{"self":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/comments?post=369"}],"version-history":[{"count":1,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/369\/revisions"}],"predecessor-version":[{"id":370,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/posts\/369\/revisions\/370"}],"wp:attachment":[{"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/media?parent=369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/categories?post=369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.longxiapro.com\/index.php\/wp-json\/wp\/v2\/tags?post=369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}