軟體自己進化自己:Neo.mjs 自我進化有機體架構深度拆解(entries: neomjs-self-evolving-software-organism)💡
當一個 framework 話自己係「self-evolving software organism」,大部份工程師嘅第一反應都係 marketing hype。但 Neo.mjs 嘅做法偏偏反轉晒成個命題:佢唔係一個俾人類 developer 用嘅框架,而係一個俾 AI agent 居住同進化嘅作業系統。人寫 code 只係副產品,AI agent 自己寫自己、自己改自己、自己 deploy 自己,先係主菜。
呢個唔係科幻。Neo.mjs 將一套 production-ready 嘅多視窗前端引擎(佢地叫左半球),同一套 AI Agent 作業系統(右半球),通過一條叫做 Neural Link 嘅 WebSocket 橋連埋一齊。結果係一個可以自我修改、自我診斷、自我進化嘅封閉迴圈。
左半球:唔係框架,係多執行緒應用引擎
如果你用過 React 或者 Vue,你習慣嘅係 single-threaded 嘅世界——所有 logic 同 DOM diffing 塞晒喺 main thread,然後用 virtual DOM 扮快。Neo.mjs 嘅做法完全相反:main thread 係最低級嘅工人,淨係負責 DOM mutation,其他所有嘢都搬去 web worker。
具體嚟講,一個 Neo.mjs app 會 spawn 最少五個 workers:App Worker 放晒所有 component、state、business logic;VDom Worker 負責 JSON diffing,每秒可以處理超過四萬個 delta update;Data Worker 做 store、sorting、filtering;Canvas Worker 處理 charts 同 graphics;Task Worker 做背景任務。最主要嘅係個 VDom Worker 係 asymmetric 嘅——佢接受 App Worker 產生嘅 JSON VDOM blueprint,然後計算最小 delta,壓縮再傳俾 main thread 執行。
呢個架構嘅恐怖之處係佢嘅 scalability。當你 set useSharedWorkers: true,App Worker 會變成 SharedWorker,同一時間多個 browser windows 可以連去同一個 JavaScript heap。你可以將一個 component 喺 window A unmount,然後喺 window B remount,state 完全唔會丟失。對於 trading platform、control room 呢類 multi-window 場景,呢個係 game changer。
Component 喺 Neo.mjs 入面唔係 ephemeral render result——唔似 React 嘅 functional component 每次 render 都 destroy 再 recreate——而係 persistent object,有 identity、有 lifecycle,detach 咗都仲喺度。呢個概念叫 Object Permanence,作者叫佢做「Lego Technic」模型,對比其他框架嘅「熔化塑膠」模型。
但呢啲都只係開胃菜。
右半球:AI Agent 住喺你個 app 裏面
Neo.mjs 嘅右半球係一套行喺 Node.js 嘅 Agent OS。佢唔係一個獨立嘅 AI tool——佢係原生嵌喺 framework 裏面嘅認知層。所有 agent infrastructure——Memory Core、Knowledge Base GraphRAG、MCP servers——都係用同一套 Neo.core.Base class system 寫嘅。換句話講,AI infrastructure 唔係一個 external plugin,而係 framework 嘅一等公民。
Agent OS 行緊一個四階段 cognitive loop:感知、推理、行動、學習。當 agent idle 嘅時候,DreamService 會開始運作——呢個係一個 background daemon,會將 agent session 產生嘅 internal friction(例如 agent 犯過嘅錯、搵唔到嘅 context、architectural 嘅不一致)distill 成 ticket,再變成 skills,再變成下一個 agent 嘅 reflexes。
呢個就係 Neo.mjs 同其他 AI-powered dev tools 嘅本質分別。Cursor 或者 Copilot 俾你嘅係 assistant——佢幫你寫 code,但佢唔喺你個 system 裏面住。Neo.mjs 嘅 agent 係 inhabitant——佢住喺你個 app 嘅 runtime 入面,可以直接讀取 semantic component tree、inspect store data、hot-patch method、然後即時驗證自己嘅改動有冇問題。
Neural Link:AI 佔據你個 app 嘅接口
呢個「內住」嘅能力係靠 Neural Link 實現嘅。Neural Link 係一條 WebSocket JSON-RPC 橋,連接左半球(browser runtime)同右半球(Node.js Agent OS)。但關鍵係佢唔係 scrap DOM——傳統嘅 browser automation 工具好似 Playwright 咁係用 CSS selector 或者 XPath 去搵 element,慢、脆弱,仲要等 render。
Neural Link 直接 query App Worker 嘅 heap。Agent 可以呼叫 get_component_tree() 嚟拎晒成個 semantic component hierarchy,可以 set_instance_properties() 直接改 live component 嘅 config,可以 patch_code() 熱修復 method。所有呢啲操作都唔需要 reload browser,唔需要等 DOM render,直接喺 worker thread 完成。
同一條 WebSocket bridge 同時 serve AI agent 同 Playwright test fixture,形成咗一個 unified「Whitebox E2E」testing architecture。Test 唔再係 black box 咁點 button 睇結果,而係可以直接 assert component tree 嘅內部 state。
Dream Pipeline:系統點樣進化自己
全個系統最反直覺嘅部分係 DreamService。佢係一個 REM-cycle daemon——模擬人類睡眠嘅記憶鞏固機制。當冇 active agent session 嗰陣,DreamService 會撈起過去 session 嘅日誌、agent 犯過嘅錯、user 嘅操作模式,然後 distill 成所謂嘅「Golden Path」topology。
呢啲 Golden Path 係 Neo.mjs 嘅知識圖譜裏面嘅永久路徑。下次有 agent 遇到類似問題,佢唔係由零開始諗,而係直接行 Golden Path。系統每次 evolve 都係累積式嘅——agent 嘅 improvement 改善咗 framework,改善咗嘅 framework 提供更好嘅 context 俾下一個 agent,下一個 agent 嘅 output 又會再 feed 返入個 cycle。
呢個正正係 Neo.mjs 自稱 autopoietic(自我創造)嘅原因。Internal friction——由 agent session 產生嘅 conflict、error、miss——變成 system 嘅進化燃料。作者叫呢個做 MX Loop:Model Experience 作為 production mechanism。850+ agent sessions 累積落嚟嘅資料,全部返返去 training data 同 vector store,形成一個 local RLAIF flywheel。
對香港同繁體中文圈嘅 developer 嚟講,Neo.mjs 代表住一條值得深思嘅命題:如果你下一個 project 嘅主要「開發者」唔係人類而係 AI agent,你嘅架構應該點樣設計?
大部份人嘅 approach 係用現有 framework,然後上 AI tool 做膠水層。Neo.mjs 嘅 approach 係反過嚟:你先設計一個俾 AI 住嘅 runtime,然後先諗人類 developer 點用。呢個 frame shift 唔係技術問題——係世界觀問題。
如果你想試下呢種思維,唔需要即刻跳去用 Neo.mjs。你可以從一個簡單嘅問題開始:如果我個 system 需要俾一個 AI agent 直接讀取同修改 runtime state,而唔係靠 DOM scraping,我而家嘅架構要改幾多?答案通常會話俾你知,你嘅架構唔係為呢個世界而設計嘅。