[{"data":1,"prerenderedAt":839},["ShallowReactive",2],{"post-aki-mcp-sv-1-6-0-gop-tool-local-va-tu-kiem-tra-update":3,"content-query-uf2eUrSQeA":486},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"categoryKey":11,"readTime":12,"body":13,"_type":480,"_id":481,"_source":482,"_file":483,"_stem":484,"_extension":485},"\u002Fposts\u002Faki-mcp-sv-1-6-0-gop-tool-local-va-tu-kiem-tra-update","posts",false,"","aki-mcp-sv 1.6.0: Gộp Tool Về Server `local` và Tự Kiểm Tra Bản Mới","Bản 1.5.0 gộp 8 tiến trình xuống 4 ở server `local`. Bản 1.6.0 tích hợp cơ chế tự phát hiện update qua GitHub và nhắc nhở trên console\u002Fpanel.","2026-08-12","aiInfra","4 min",{"type":14,"children":15,"toc":474},"root",[16,34,59,66,216,222,258,313,350,356,462],{"type":17,"tag":18,"props":19,"children":21},"element","h1",{"id":20},"aki-mcp-sv-160-gộp-tool-về-server-local-và-tự-kiểm-tra-bản-mới",[22,25,32],{"type":23,"value":24},"text","aki-mcp-sv 1.6.0: Gộp Tool Về Server ",{"type":17,"tag":26,"props":27,"children":29},"code",{"className":28},[],[30],{"type":23,"value":31},"local",{"type":23,"value":33}," và Tự Kiểm Tra Bản Mới",{"type":17,"tag":35,"props":36,"children":37},"p",{},[38,40,47,49,57],{"type":23,"value":39},"Bài ",{"type":17,"tag":41,"props":42,"children":44},"a",{"href":43},"\u002Fposts\u002Faki-mcp-sv-1-4-0-multi-client-panel\u002F",[45],{"type":23,"value":46},"1.4.0",{"type":23,"value":48}," dừng ở panel multi-client. Hai bản tiếp theo ra cùng ngày 12\u002F08\u002F2026 đổi hai thứ người dùng thấy ngay: tên tool và cách biết mình đang chạy bản cũ. GitHub ",{"type":17,"tag":41,"props":50,"children":54},{"href":51,"rel":52},"https:\u002F\u002Fgithub.com\u002Flacvietanh\u002Faki-mcp-sv\u002Fblob\u002Fmaster\u002FCHANGELOG.md",[53],"nofollow",[55],{"type":23,"value":56},"CHANGELOG",{"type":23,"value":58}," là nguồn chân lý.",{"type":17,"tag":60,"props":61,"children":63},"h2",{"id":62},"_150-tám-tiến-trình-xuống-bốn",[64],{"type":23,"value":65},"1.5.0 — Tám tiến trình xuống bốn",{"type":17,"tag":67,"props":68,"children":69},"ul",{},[70,99,148,167,195],{"type":17,"tag":71,"props":72,"children":73},"li",{},[74,76,81,83,89,91,97],{"type":23,"value":75},"Các arm shell\u002Fagy\u002Fkiro\u002Fsearch gộp về một server duy nhất tên ",{"type":17,"tag":26,"props":77,"children":79},{"className":78},[],[80],{"type":23,"value":31},{"type":23,"value":82}," (",{"type":17,"tag":26,"props":84,"children":86},{"className":85},[],[87],{"type":23,"value":88},"scripts\u002Flocal-tools-mcp.js",{"type":23,"value":90},"), mỗi arm còn là một module ",{"type":17,"tag":26,"props":92,"children":94},{"className":93},[],[95],{"type":23,"value":96},"register(server)",{"type":23,"value":98},".",{"type":17,"tag":71,"props":100,"children":101},{},[102,104,110,112,118,120,126,127,133,134,140,141,147],{"type":23,"value":103},"Tool đổi tên sang tiền tố ",{"type":17,"tag":26,"props":105,"children":107},{"className":106},[],[108],{"type":23,"value":109},"local__",{"type":23,"value":111},": ",{"type":17,"tag":26,"props":113,"children":115},{"className":114},[],[116],{"type":23,"value":117},"local__run_cmd",{"type":23,"value":119},", ",{"type":17,"tag":26,"props":121,"children":123},{"className":122},[],[124],{"type":23,"value":125},"local__agy_run",{"type":23,"value":119},{"type":17,"tag":26,"props":128,"children":130},{"className":129},[],[131],{"type":23,"value":132},"local__kiro_read",{"type":23,"value":119},{"type":17,"tag":26,"props":135,"children":137},{"className":136},[],[138],{"type":23,"value":139},"local__find_path",{"type":23,"value":119},{"type":17,"tag":26,"props":142,"children":144},{"className":143},[],[145],{"type":23,"value":146},"local__search_content",{"type":23,"value":98},{"type":17,"tag":71,"props":149,"children":150},{},[151,157,159,165],{"type":17,"tag":152,"props":153,"children":154},"strong",{},[155],{"type":23,"value":156},"Connector đang chạy phải kết nối lại",{"type":23,"value":158}," — tên tool đổi thì client phải nạp lại danh sách. ",{"type":17,"tag":26,"props":160,"children":162},{"className":161},[],[163],{"type":23,"value":164},"scripts\u002Fuserdata.js",{"type":23,"value":166}," tự migrate config cũ.",{"type":17,"tag":71,"props":168,"children":169},{},[170,172,178,180,186,187,193],{"type":23,"value":171},"Panel §0 thêm hướng dẫn re-sync Funnel cho trường hợp connector rớt chập chờn: edge public trả 200 nhưng một ingress IP bắt tay TLS chậm; chạy chu trình ",{"type":17,"tag":26,"props":173,"children":175},{"className":174},[],[176],{"type":23,"value":177},"funnel off",{"type":23,"value":179}," \u002F ",{"type":17,"tag":26,"props":181,"children":183},{"className":182},[],[184],{"type":23,"value":185},"serve reset",{"type":23,"value":179},{"type":17,"tag":26,"props":188,"children":190},{"className":189},[],[191],{"type":23,"value":192},"funnel --bg 9999",{"type":23,"value":194}," (cần sudo).",{"type":17,"tag":71,"props":196,"children":197},{},[198,200,206,208,214],{"type":23,"value":199},"Prompt dán vào AI đổi ",{"type":17,"tag":26,"props":201,"children":203},{"className":202},[],[204],{"type":23,"value":205},"working.md",{"type":23,"value":207}," thành ",{"type":17,"tag":26,"props":209,"children":211},{"className":210},[],[212],{"type":23,"value":213},"plan.md",{"type":23,"value":215},", plan động (bỏ qua khi chỉ hỏi đáp), siết ranh giới MCP so với sandbox.",{"type":17,"tag":60,"props":217,"children":219},{"id":218},"_160-máy-tự-nói-cho-bạn-biết-đã-có-bản-mới",[220],{"type":23,"value":221},"1.6.0 — Máy tự nói cho bạn biết đã có bản mới",{"type":17,"tag":35,"props":223,"children":224},{},[225,227,233,234,240,242,248,250,256],{"type":23,"value":226},"Mỗi lần ",{"type":17,"tag":26,"props":228,"children":230},{"className":229},[],[231],{"type":23,"value":232},"npm start",{"type":23,"value":119},{"type":17,"tag":26,"props":235,"children":237},{"className":236},[],[238],{"type":23,"value":239},"scripts\u002Fupdate-check.js",{"type":23,"value":241}," so bản local với GitHub cho cả hai dự án: aki-mcp-sv đọc ",{"type":17,"tag":26,"props":243,"children":245},{"className":244},[],[246],{"type":23,"value":247},"main\u002Fpackage.json",{"type":23,"value":249},", còn AkiDevRule đọc header phát hành mới nhất trong ",{"type":17,"tag":26,"props":251,"children":253},{"className":252},[],[254],{"type":23,"value":255},"master\u002FCHANGELOG.md",{"type":23,"value":257}," vì corpus rule không có trường version.",{"type":17,"tag":67,"props":259,"children":260},{},[261,266,301],{"type":17,"tag":71,"props":262,"children":263},{},[264],{"type":23,"value":265},"Banner console khi khởi động, và banner trong panel ngay dưới tiêu đề.",{"type":17,"tag":71,"props":267,"children":268},{},[269,271,276,278,283,285,291,293,299],{"type":23,"value":270},"Bản mcp: nút ",{"type":17,"tag":152,"props":272,"children":273},{},[274],{"type":23,"value":275},"Pull & restart",{"type":23,"value":277}," nếu cài bằng git, link ",{"type":17,"tag":152,"props":279,"children":280},{},[281],{"type":23,"value":282},"Download",{"type":23,"value":284}," nếu cài bằng zip. Route ",{"type":17,"tag":26,"props":286,"children":288},{"className":287},[],[289],{"type":23,"value":290},"POST \u002Fapi\u002Fpull-update",{"type":23,"value":292}," chỉ pull khi cây làm việc sạch, kiểm bằng ",{"type":17,"tag":26,"props":294,"children":296},{"className":295},[],[297],{"type":23,"value":298},"git status --porcelain",{"type":23,"value":300}," ngay lúc bấm.",{"type":17,"tag":71,"props":302,"children":303},{},[304,306,311],{"type":23,"value":305},"Bản AkiDevRule: nút ",{"type":17,"tag":152,"props":307,"children":308},{},[309],{"type":23,"value":310},"Install \u002F update",{"type":23,"value":312}," kèm cảnh báo phải dán lại instruction cho từng tài khoản AI. Cảnh báo lặp lại ở mục 3 khi chọn rule.",{"type":17,"tag":35,"props":314,"children":315},{},[316,318,324,326,332,334,340,342,348],{"type":23,"value":317},"Phần thứ hai là điều kiện đủ: chính model tự phát hiện instruction đã cũ. Prompt dán vào nay mở đầu bằng ",{"type":17,"tag":26,"props":319,"children":321},{"className":320},[],[322],{"type":23,"value":323},"[akimcp \u003Cver> · akidevrule \u003Cver>]",{"type":23,"value":325}," và có thêm một dòng bảo model đọc ",{"type":17,"tag":26,"props":327,"children":329},{"className":328},[],[330],{"type":23,"value":331},"~\u002F.aki\u002Faki-mcp-status.json",{"type":23,"value":333}," đầu phiên, so version trong đoạn đã dán với version đang cài; lệch thì nhắc người dùng dán lại. ",{"type":17,"tag":26,"props":335,"children":337},{"className":336},[],[338],{"type":23,"value":339},"start.js",{"type":23,"value":341}," ghi file trạng thái đó mỗi lần khởi động, đặt dưới ",{"type":17,"tag":26,"props":343,"children":345},{"className":344},[],[346],{"type":23,"value":347},"~\u002F.aki",{"type":23,"value":349}," là root connector vốn đã được phép đọc.",{"type":17,"tag":60,"props":351,"children":353},{"id":352},"panel-gọn-hơn-một-bậc",[354],{"type":23,"value":355},"Panel gọn hơn một bậc",{"type":17,"tag":67,"props":357,"children":358},{},[359,364,377,406,443],{"type":17,"tag":71,"props":360,"children":361},{},[362],{"type":23,"value":363},"Nút cuộn lên đầu trang xuất hiện sau 400px cuộn, có ở mọi breakpoint kể cả mobile.",{"type":17,"tag":71,"props":365,"children":366},{},[367,369,375],{"type":23,"value":368},"Thanh mục lục dọc đánh số 0–6 bám theo mục đang xem bằng ",{"type":17,"tag":26,"props":370,"children":372},{"className":371},[],[373],{"type":23,"value":374},"IntersectionObserver",{"type":23,"value":376},", nhãn dựng từ chính các section nên không bao giờ lệch; chỉ hiện từ 1040px trở lên khi còn chỗ hai bên.",{"type":17,"tag":71,"props":378,"children":379},{},[380,382,388,390,396,398,404],{"type":23,"value":381},"Mọi giá trị và lệnh copy được nay dùng chung một primitive ",{"type":17,"tag":26,"props":383,"children":385},{"className":384},[],[386],{"type":23,"value":387},".copy",{"type":23,"value":389},": cùng kiểu chip monospace, bấm đâu cũng copy, có glyph ⧉ và phản hồi ✓, chạy bằng một handler delegated duy nhất. Trước đó có hai dạng, và các hộp ",{"type":17,"tag":26,"props":391,"children":393},{"className":392},[],[394],{"type":23,"value":395},"\u003Ccode>",{"type":23,"value":397}," trong văn bản trông như copy được nhưng không phải. ",{"type":17,"tag":26,"props":399,"children":401},{"className":400},[],[402],{"type":23,"value":403},".mono",{"type":23,"value":405}," giữ lại làm chữ monospace thuần, không hộp, không bấm được — để không thứ gì giả dạng copy được nữa.",{"type":17,"tag":71,"props":407,"children":408},{},[409,411,417,419,425,427,433,435,441],{"type":23,"value":410},"Sửa lỗi lệnh dài tràn panel trên mobile: track giá trị của ",{"type":17,"tag":26,"props":412,"children":414},{"className":413},[],[415],{"type":23,"value":416},".row",{"type":23,"value":418}," là ",{"type":17,"tag":26,"props":420,"children":422},{"className":421},[],[423],{"type":23,"value":424},"1fr",{"type":23,"value":426},", tức ",{"type":17,"tag":26,"props":428,"children":430},{"className":429},[],[431],{"type":23,"value":432},"minmax(auto,1fr)",{"type":23,"value":434},", nên một lệnh không xuống dòng đẩy cả track vượt viewport. Đổi thành ",{"type":17,"tag":26,"props":436,"children":438},{"className":437},[],[439],{"type":23,"value":440},"minmax(0,1fr)",{"type":23,"value":442}," để chip chặn ở 100% và lệnh cuộn bên trong nó.",{"type":17,"tag":71,"props":444,"children":445},{},[446,448,454,455,461],{"type":23,"value":447},"Rule mặc định trỏ lại đúng tên sau khi AkiDevRule đổi ",{"type":17,"tag":26,"props":449,"children":451},{"className":450},[],[452],{"type":23,"value":453},"RULE-design-core.md",{"type":23,"value":207},{"type":17,"tag":26,"props":456,"children":458},{"className":457},[],[459],{"type":23,"value":460},"RULE-pattern-core.md",{"type":23,"value":98},{"type":17,"tag":35,"props":463,"children":464},{},[465,467,473],{"type":23,"value":466},"Cài: ",{"type":17,"tag":26,"props":468,"children":470},{"className":469},[],[471],{"type":23,"value":472},"git clone https:\u002F\u002Fgithub.com\u002Flacvietanh\u002Faki-mcp-sv.git && cd aki-mcp-sv && npm install && npm start",{"type":23,"value":98},{"title":7,"searchDepth":475,"depth":475,"links":476},2,[477,478,479],{"id":62,"depth":475,"text":65},{"id":218,"depth":475,"text":221},{"id":352,"depth":475,"text":355},"markdown","content:posts:aki-mcp-sv-1-6-0-gop-tool-local-va-tu-kiem-tra-update.md","content","posts\u002Faki-mcp-sv-1-6-0-gop-tool-local-va-tu-kiem-tra-update.md","posts\u002Faki-mcp-sv-1-6-0-gop-tool-local-va-tu-kiem-tra-update","md",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"categoryKey":11,"readTime":12,"body":487,"_type":480,"_id":481,"_source":482,"_file":483,"_stem":484,"_extension":485},{"type":14,"children":488,"toc":834},[489,499,514,518,635,639,667,709,737,741,824],{"type":17,"tag":18,"props":490,"children":491},{"id":20},[492,493,498],{"type":23,"value":24},{"type":17,"tag":26,"props":494,"children":496},{"className":495},[],[497],{"type":23,"value":31},{"type":23,"value":33},{"type":17,"tag":35,"props":500,"children":501},{},[502,503,507,508,513],{"type":23,"value":39},{"type":17,"tag":41,"props":504,"children":505},{"href":43},[506],{"type":23,"value":46},{"type":23,"value":48},{"type":17,"tag":41,"props":509,"children":511},{"href":51,"rel":510},[53],[512],{"type":23,"value":56},{"type":23,"value":58},{"type":17,"tag":60,"props":515,"children":516},{"id":62},[517],{"type":23,"value":65},{"type":17,"tag":67,"props":519,"children":520},{},[521,543,583,597,619],{"type":17,"tag":71,"props":522,"children":523},{},[524,525,530,531,536,537,542],{"type":23,"value":75},{"type":17,"tag":26,"props":526,"children":528},{"className":527},[],[529],{"type":23,"value":31},{"type":23,"value":82},{"type":17,"tag":26,"props":532,"children":534},{"className":533},[],[535],{"type":23,"value":88},{"type":23,"value":90},{"type":17,"tag":26,"props":538,"children":540},{"className":539},[],[541],{"type":23,"value":96},{"type":23,"value":98},{"type":17,"tag":71,"props":544,"children":545},{},[546,547,552,553,558,559,564,565,570,571,576,577,582],{"type":23,"value":103},{"type":17,"tag":26,"props":548,"children":550},{"className":549},[],[551],{"type":23,"value":109},{"type":23,"value":111},{"type":17,"tag":26,"props":554,"children":556},{"className":555},[],[557],{"type":23,"value":117},{"type":23,"value":119},{"type":17,"tag":26,"props":560,"children":562},{"className":561},[],[563],{"type":23,"value":125},{"type":23,"value":119},{"type":17,"tag":26,"props":566,"children":568},{"className":567},[],[569],{"type":23,"value":132},{"type":23,"value":119},{"type":17,"tag":26,"props":572,"children":574},{"className":573},[],[575],{"type":23,"value":139},{"type":23,"value":119},{"type":17,"tag":26,"props":578,"children":580},{"className":579},[],[581],{"type":23,"value":146},{"type":23,"value":98},{"type":17,"tag":71,"props":584,"children":585},{},[586,590,591,596],{"type":17,"tag":152,"props":587,"children":588},{},[589],{"type":23,"value":156},{"type":23,"value":158},{"type":17,"tag":26,"props":592,"children":594},{"className":593},[],[595],{"type":23,"value":164},{"type":23,"value":166},{"type":17,"tag":71,"props":598,"children":599},{},[600,601,606,607,612,613,618],{"type":23,"value":171},{"type":17,"tag":26,"props":602,"children":604},{"className":603},[],[605],{"type":23,"value":177},{"type":23,"value":179},{"type":17,"tag":26,"props":608,"children":610},{"className":609},[],[611],{"type":23,"value":185},{"type":23,"value":179},{"type":17,"tag":26,"props":614,"children":616},{"className":615},[],[617],{"type":23,"value":192},{"type":23,"value":194},{"type":17,"tag":71,"props":620,"children":621},{},[622,623,628,629,634],{"type":23,"value":199},{"type":17,"tag":26,"props":624,"children":626},{"className":625},[],[627],{"type":23,"value":205},{"type":23,"value":207},{"type":17,"tag":26,"props":630,"children":632},{"className":631},[],[633],{"type":23,"value":213},{"type":23,"value":215},{"type":17,"tag":60,"props":636,"children":637},{"id":218},[638],{"type":23,"value":221},{"type":17,"tag":35,"props":640,"children":641},{},[642,643,648,649,654,655,660,661,666],{"type":23,"value":226},{"type":17,"tag":26,"props":644,"children":646},{"className":645},[],[647],{"type":23,"value":232},{"type":23,"value":119},{"type":17,"tag":26,"props":650,"children":652},{"className":651},[],[653],{"type":23,"value":239},{"type":23,"value":241},{"type":17,"tag":26,"props":656,"children":658},{"className":657},[],[659],{"type":23,"value":247},{"type":23,"value":249},{"type":17,"tag":26,"props":662,"children":664},{"className":663},[],[665],{"type":23,"value":255},{"type":23,"value":257},{"type":17,"tag":67,"props":668,"children":669},{},[670,674,700],{"type":17,"tag":71,"props":671,"children":672},{},[673],{"type":23,"value":265},{"type":17,"tag":71,"props":675,"children":676},{},[677,678,682,683,687,688,693,694,699],{"type":23,"value":270},{"type":17,"tag":152,"props":679,"children":680},{},[681],{"type":23,"value":275},{"type":23,"value":277},{"type":17,"tag":152,"props":684,"children":685},{},[686],{"type":23,"value":282},{"type":23,"value":284},{"type":17,"tag":26,"props":689,"children":691},{"className":690},[],[692],{"type":23,"value":290},{"type":23,"value":292},{"type":17,"tag":26,"props":695,"children":697},{"className":696},[],[698],{"type":23,"value":298},{"type":23,"value":300},{"type":17,"tag":71,"props":701,"children":702},{},[703,704,708],{"type":23,"value":305},{"type":17,"tag":152,"props":705,"children":706},{},[707],{"type":23,"value":310},{"type":23,"value":312},{"type":17,"tag":35,"props":710,"children":711},{},[712,713,718,719,724,725,730,731,736],{"type":23,"value":317},{"type":17,"tag":26,"props":714,"children":716},{"className":715},[],[717],{"type":23,"value":323},{"type":23,"value":325},{"type":17,"tag":26,"props":720,"children":722},{"className":721},[],[723],{"type":23,"value":331},{"type":23,"value":333},{"type":17,"tag":26,"props":726,"children":728},{"className":727},[],[729],{"type":23,"value":339},{"type":23,"value":341},{"type":17,"tag":26,"props":732,"children":734},{"className":733},[],[735],{"type":23,"value":347},{"type":23,"value":349},{"type":17,"tag":60,"props":738,"children":739},{"id":352},[740],{"type":23,"value":355},{"type":17,"tag":67,"props":742,"children":743},{},[744,748,758,780,808],{"type":17,"tag":71,"props":745,"children":746},{},[747],{"type":23,"value":363},{"type":17,"tag":71,"props":749,"children":750},{},[751,752,757],{"type":23,"value":368},{"type":17,"tag":26,"props":753,"children":755},{"className":754},[],[756],{"type":23,"value":374},{"type":23,"value":376},{"type":17,"tag":71,"props":759,"children":760},{},[761,762,767,768,773,774,779],{"type":23,"value":381},{"type":17,"tag":26,"props":763,"children":765},{"className":764},[],[766],{"type":23,"value":387},{"type":23,"value":389},{"type":17,"tag":26,"props":769,"children":771},{"className":770},[],[772],{"type":23,"value":395},{"type":23,"value":397},{"type":17,"tag":26,"props":775,"children":777},{"className":776},[],[778],{"type":23,"value":403},{"type":23,"value":405},{"type":17,"tag":71,"props":781,"children":782},{},[783,784,789,790,795,796,801,802,807],{"type":23,"value":410},{"type":17,"tag":26,"props":785,"children":787},{"className":786},[],[788],{"type":23,"value":416},{"type":23,"value":418},{"type":17,"tag":26,"props":791,"children":793},{"className":792},[],[794],{"type":23,"value":424},{"type":23,"value":426},{"type":17,"tag":26,"props":797,"children":799},{"className":798},[],[800],{"type":23,"value":432},{"type":23,"value":434},{"type":17,"tag":26,"props":803,"children":805},{"className":804},[],[806],{"type":23,"value":440},{"type":23,"value":442},{"type":17,"tag":71,"props":809,"children":810},{},[811,812,817,818,823],{"type":23,"value":447},{"type":17,"tag":26,"props":813,"children":815},{"className":814},[],[816],{"type":23,"value":453},{"type":23,"value":207},{"type":17,"tag":26,"props":819,"children":821},{"className":820},[],[822],{"type":23,"value":460},{"type":23,"value":98},{"type":17,"tag":35,"props":825,"children":826},{},[827,828,833],{"type":23,"value":466},{"type":17,"tag":26,"props":829,"children":831},{"className":830},[],[832],{"type":23,"value":472},{"type":23,"value":98},{"title":7,"searchDepth":475,"depth":475,"links":835},[836,837,838],{"id":62,"depth":475,"text":65},{"id":218,"depth":475,"text":221},{"id":352,"depth":475,"text":355},1786664016777]