離線、可攜、以隱私與資安為優先的 Windows 本地 LLM 程式碼助理。
CodeWorker 將 llama.cpp、WinPython、PortableGit、GGUF 模型與 Web UI 整合在同一個 Windows 工作目錄。它適合不能上傳原始碼、不能使用雲端模型,或需要帶到客戶端、內網、air-gapped environment 的開發情境。
主要能力:
- 本機模型服務:初始 fallback 為
Gemma 4 26B,之後會把最後一次成功使用的模型作為預設模型;所有模型都由 bundledllama.cppservice 啟動,不需要 Ollama。 - 模型下載進度:大型 GGUF 下載會顯示百分比、已下載大小與總大小,讓使用者知道模型仍在下載。
- 多模型選擇:保留
Gemma 4 26B與Qwen 3.5 9B Vision,並新增Qwen3.6-35B-A3B Vision、Gemma 4 E4B Uncensored Q6、Qwen3.6-35B-A3B Uncensored IQ2_M、Qwen3-Coder 30B A3B、GLM-4.6、Qwen2.5-Coder 14B Instruct、DeepSeek-Coder V2 Lite。 - 硬體自動最佳化:Web UI 會偵測 RAM、CPU、GPU vendor、VRAM、
nvidia-smi與 Vulkan 可用性,推薦模型並套用 backend、context、threads、GPU layers 與 8GB NVIDIA MoE offload 參數;效能測試後會寫入本機硬體匹配設定檔供下次沿用。 - Context 下拉選單:每個模型可獨立選擇自己的 context options,支援
4k到256k,GLM-4.6另支援200k選項。 - Context 容量實測:可針對目前模型測試可送出的 KB 上限,結果寫入本機
data\model-context-calibration.json,後續修改計畫會優先使用實測structuredEditChars。 - 完整檔案上下文:pinned files 與 resolver 鎖定檔案若低於模型實測容量,會以完整檔案送出;放不下時才逐步降為完整函式 / class region,再降為 line windows。
- 修改計畫診斷:每次
產生修改計畫會顯示 context coverage;無法安全產生 patch 時會降級為未驗證參考片段,不顯示可直接套用 action。 - 全專案檢索:開啟專案後,即使沒有 pinned files,也會使用本機 RAG index 搜尋相關檔案、symbols、summary 與 chunks。
- CodeGraph 式語意索引:RAG 重建時會同步建立
code_nodes、code_edges與code_unresolved_refs,提供 symbol entry points、imports、calls、extends 與 impact navigation。 - 分析專案檔案結構:以 deterministic 多語言分類找出入口、核心程式、專案設定、UI、資源、測試與可忽略產物,作為釘選前的篩選工具。
- 單一訊息流:AI 回答、專案結構分析、CodeGraph 查詢、context coverage 與檔案生成確認都保存在同一個 transcript,可以在同一個區塊上下捲動回看。
- 忙碌狀態提示:AI 回答、streaming 與
產生修改計畫期間會顯示 spinner / busy bar,讓使用者知道模型仍在工作。 - Codex plugin:新增
plugins\codeworker-codegraph,可安裝到 Codex 後用 skill/script 查 CodeWorker 本機 graph,再決定要讀哪些檔案。 - 聚焦上下文:在
檔案樹勾選檔案時,pinned files 會優先於全專案 RAG。 - 附件分析:支援程式碼、設定、文件、圖片、音訊與影片;可抽文字、keyframes 或 transcript 時會送入模型,否則送 metadata fallback。
- 多對話串:右側
240pxthread panel 可新增、切換、重新命名、刪除對話串,每個 thread 保留自己的 history、memory 與 transcript。 - 模型主導檔案生成:在一般對話中要求產生文件即可,模型會先產生內容與標題,CodeWorker 依模型標題自動命名並建立 pending preview;確認後才寫入
.txt/.md/.py/.js/.ts/.json/.html/.css/.yaml/.sql/.cs/.docx/.pdf/.pptx/.xlsx。 - Agent 安全機制:寫檔、patch、刪檔、rename 與執行 command 前都會建立 pending action,使用者確認後才執行;套用前會建立 Git checkpoint,套用後若有檔案變更會建立 post checkpoint,可查看 diff 並復原這次修改。
- 直接修改專案檔案:
產生修改計畫會優先產生可審查、可套用的patch_file,模型只要能提供唯一命中的search/replace,CodeWorker 就能轉成真正的檔案修改 action,而不是只輸出文字建議。 - 模型 patch 容錯:若本地模型回傳的 JSON 不完整,但仍能抽出
path、search、replace,且search在目標檔案中唯一命中,CodeWorker 會救回為可確認套用的 patch;如果無法安全定位才降級為保守文字建議。 - 套用後驗證建議:修改完成後會依專案型態建議下一步驗證指令,例如
.sln/.csproj專案會提示dotnet build,package.json會提示npm test/npm run build,但不會自動執行有副作用的 command。 - 版本來源與啟動驗證:版本由根目錄
VERSION統一管理,/api/status會回傳appVersion、appName、rootDir與serverPath,scripts\launch-webui.cmd會檢查實際啟動版本並用 cache-busting URL 開啟頁面。
- 第一次執行需要網路下載 runtime 與模型;完成後可離線使用。
Qwen3.6-35B-A3B Vision、Qwen3-Coder 30B A3B、GLM-4.6、Qwen2.5-Coder 14B Instruct、DeepSeek-Coder V2 Lite不會在第一次 bootstrap 時自動下載,需由使用者選定模型後再下載。Qwen3.6-35B-A3B Vision的 8GB NVIDIA profile 需要足夠 system RAM;目前設定會依硬體在32k/64kcontext 間選擇,使用q4_0KV cache、--n-cpu-moe=999、--flash-attn、--jinja、--batch-size=512、--ubatch-size=128與必要的 GPU offload 參數,將 MoE weights 留在 CPU/RAM 並以 CUDA offload 非 MoE layers。- 沒有獨立顯卡也可以用
Qwen3.6-35B-A3B Vision的 CPU-only 模式,但需要更高 system RAM、較小 context 與較長等待時間;詳細設定在 docs\qwen36a3b-cpu-only-llamacpp.md,README 摘要見第 4 節的 Qwen3.6-35B-A3B CPU-only llama.cpp 設定。 256kcontext 是可選上限,不代表每台機器都能穩定跑滿;若模型啟動失敗,UI 會顯示錯誤與 log path,不會自動降級。- 建議至少
32GB RAM等級;大型 context、圖片、影片 keyframes 與長回答都會增加記憶體壓力。 - 高階模型與 GPU backend 尚需在高階硬體實機驗證;測試時請保留
logs\hardware-optimization.jsonl與對應的logs\llama-server-<model>-*.log/.err.log。 - 未開啟專案時只做一般問答;已開啟專案且未釘選檔案時使用全專案 RAG;有 pinned files 時優先使用 pinned context。
- 影片不是直接把 MP4 binary 丟給模型,而是先用
FFmpeg抽 keyframes;音訊與影片音軌會嘗試whisper.cppspeech-to-text。 - 檔案生成與 Agent 寫入都必須確認後才會落到 project root;生成完成後 UI 會顯示實際檔案路徑與檔名。
產生修改計畫會先建立可審查的檔案操作清單;確認套用前會建立 Git checkpoint,套用後若有檔案變更會建立 post checkpoint,查看 Git diff可比對變更,必要時可復原這次修改。產生修改計畫的速度不代表功能完成度。CodeWorker 的判準是:必須有可定位的檔案、可審查的 diff、可確認套用的 action,以及套用後能透過 Git diff / build / test 驗證;如果只能產生文字建議,UI 會標示為保守建議,不會假裝已能改 code。- 對於已知且可安全判斷的局部修改,CodeWorker 可能使用本地 deterministic patch 直接產生
patch_file。這不是單純加速,而是先確認原始片段唯一命中,再交給相同的 pending action / Git checkpoint / restore 流程套用。 - 對於一般修改需求,CodeWorker 會要求本地模型輸出
search/replace。只要search在本機檔案唯一命中,且安全檢查通過,就會變成真正可套用的patch_file;若命中 0 次、多次、越界、保護目錄或高風險操作未確認,都會被拒絕。 scripts\bootstrap.cmd不是git pull的替代品。更新另一台電腦時必須先拉到最新 repo,再執行 bootstrap 補 runtime / packages。新版 bootstrap 會先停止同一個 CodeWorker root/runtime 下的舊 process,避免舊 WebUI 還在 port 上繼續服務。- 如果更新後 Web UI 仍顯示舊版,請先檢查
/api/status的appVersion、rootDir、serverPath,以及logs\webui-*.log開頭三行;這比只看瀏覽器畫面更可靠,因為瀏覽器可能有舊快取或捷徑可能指向另一個舊資料夾。 - CodeGraph 功能參考
colbymchenry/codegraph的本機語意索引做法;出處、作者與授權資訊列於 THIRD_PARTY_NOTICES.md。
scripts\bootstrap.cmd這會依 config\bootstrap.manifest.json 準備:
llama.cppWinPythonPortableGitFFmpegwhisper.cpp與 speech-to-text modelGemma 4 26B/Qwen 3.5 9B VisionGGUF 與mmproj- Python 文件套件:
pypdf、pdfplumber、python-docx、reportlab、python-pptx、openpyxl
git pull
scripts\bootstrap.cmd
scripts\launch-webui.cmd更新檢查重點:
- Web UI 左上角應顯示
CodeWorker V1.02.001。 scripts\bootstrap.cmd會補齊 runtime、Python packages、模型 manifest 與既有下載項目,不會重複下載已存在且校驗通過的檔案。- bootstrap 一開始會停止同一個 CodeWorker root/runtime 下的舊 process,避免舊 WebUI server 繼續佔用 port。
scripts\launch-webui.cmd會重新啟動http://127.0.0.1:8764;若 port 上已有舊的 CodeWorker Web UI,會先回收舊 process。- launch 會讀取根目錄
VERSION,並呼叫/api/status檢查實際回傳的appVersion是否符合預期;若版本不一致,啟動等待會失敗,不會讓你誤以為新版已開啟。 - launch 開啟瀏覽器時會使用
?v=版本-時間戳,降低瀏覽器載入舊index.html或舊 JavaScript 快取的機率。 - 開啟專案後可執行
分析專案檔案結構、用目前輸入查 CodeGraph、重新掃描索引、產生修改計畫與一般聊天,結果都會出現在同一個 transcript。
如果另一台電腦更新後仍看到 V1.00.000 或其他舊版,不要只看瀏覽器畫面,請依序檢查:
git pull
type VERSION
scripts\bootstrap.cmd
scripts\launch-webui.cmd然後在 PowerShell 查 /api/status:
(Invoke-RestMethod -Uri "http://127.0.0.1:8764/api/status").data |
Select-Object appVersion,appName,rootDir,serverPath |
ConvertTo-Json正確結果應類似:
{
"appVersion": "V1.02.001",
"appName": "CodeWorker V1.02.001",
"rootDir": "D:\\CodeWorker",
"serverPath": "D:\\CodeWorker\\webui\\server.py"
}如果 appVersion 是舊版,代表實際跑的 server source 還是舊的;如果 rootDir 或 serverPath 指到不同資料夾,代表你啟動的是另一份 CodeWorker。新版 logs\webui-*.log 開頭也會列出:
CodeWorker V1.02.001 Web UI running at http://127.0.0.1:8764
RootDir: D:\CodeWorker
ServerPath: D:\CodeWorker\webui\server.py
log 中若只看到 ConnectionAbortedError / WinError 10053,通常只是瀏覽器或啟動探測連線中途關閉;新版已忽略這類中斷,避免它蓋過真正的版本資訊。
scripts\launch-webui.cmd開啟:
http://127.0.0.1:8764
scripts\install-aider.cmd畫面顯示目前主要工作區:專案控制入口、清空選取專案、專案摘要與虛擬化檔案樹、單一對話流、輸入區 / CodeGraph / Git 修改操作,以及右側對話串管理。
- 啟動 Web UI。
- 不必開啟專案,直接在主對話框提問。
- 此模式不會加入
PROJECT RAG CONTEXT、pinned files 或 file tree。 - 如果已開啟專案,按
清空選取專案可清除目前 project context,但保留模型與對話紀錄。
- 在
專案路徑選擇專案根目錄。 - 點
開啟專案。 - 需要先整理大量檔案時點
分析專案檔案結構;若要回到一般問答,點右側的清空選取專案。 - 直接詢問「在哪個檔案」、「哪段 code」、「要怎麼修改」;沒有 pinned files 時會自動用 RAG 搜尋全專案。
- 若要聚焦少數檔案,在
檔案樹勾選檔名。
- 開啟專案後按
分析專案檔案結構。 - CodeWorker 會依不同語言與工具鏈分類入口、核心 source、project configs、UI/form、assets、tests、generated files 與 build outputs。
- 結果會以 transcript tool card 顯示,不會覆蓋聊天紀錄。
- 按
一鍵釘選建議檔案可把入口、設定、核心程式與 UI/測試檔加入 pinned files,再讓 AI 分析或修改。
CodeGraph 適合在「還不知道要釘選哪些檔案」或「修改前想確認影響範圍」時使用。
- 在對話輸入框輸入目前專案的 symbol、class/function、檔名或問題,例如
Form1、AudioManager、Program.cs、誰呼叫 build_project_rag_context?。 - 按
用目前輸入查 CodeGraph。這一步只查本機 SQLite graph,不會問 AI。 - transcript 會顯示命中 symbols、relationships、matched files、nodes/edges/unresolved 與下一步提示。
- 若結果符合目標,按
釘選命中文件,再按一般送出,AI 就會用這些 pinned files 回答。 - 若查不到新檔案或新 symbol,按
重新掃描索引。它會重建 RAG + CodeGraph index,完成後保留重建摘要;若輸入框仍有 query,會再追加一張查詢結果卡。
優點:
- 先找 symbol 與關聯,再決定讀哪些檔案,降低大型專案中亂翻檔案的成本。
- 可在修改前檢查 callers/callees/imports/extends,避免漏掉受影響位置。
- 全程本機 SQLite 與本機模型,不需要 API key,也不會把專案送到雲端。
- 與
分析專案檔案結構搭配時,先用檔案分類縮小範圍,再用 CodeGraph 查 symbol 關聯。
CodeWorker 的目標不是只回答「你應該怎麼改」,而是能在使用者確認後真正修改專案檔案。這個流程目前分成「產生計畫」與「確認套用」兩段,目的是讓本地模型可以協助開發,同時避免失控寫檔。
操作方式:
- 開啟專案。
- 建議先用
分析專案檔案結構或 CodeGraph 查詢找出要修改的檔案,再釘選相關檔案;小型專案也可以不釘選,讓 RAG / CodeGraph 自動找候選。 - 在對話輸入框輸入修改需求,例如:「幫我修改按方向鍵的下不要直接掉到底,改成按 ctrl 掉到底。」
- 按
產生修改計畫。 - transcript 會顯示修改位置、命中函式 / 區塊、修改原因、before snippet、after snippet、diff 與 pending action。
- 檢查 diff 正確後按
確認套用。 - CodeWorker 會建立 pre-edit Git checkpoint,套用
patch_file/create_file/replace_file/delete_file/rename_file/run_command,若檔案有變更再建立 post-edit checkpoint。 - 套用後可以按
查看 Git diff檢查變更;若有問題可按復原這次修改回到 pre-edit checkpoint。
直接修改的安全規則:
- 所有寫入都限制在 project root 內。
.git/、runtime/、models/、data/indexes/等保護路徑會被拒絕。patch_file的search片段必須在當前檔案中剛好命中 1 次;命中 0 次代表模型看的是舊內容,命中多次代表風險太高,都不會套用。delete_file、rename_file、replace_file、run_command屬於高風險操作,必須明確確認。- 套用前後使用 Git checkpoint,不另外複製整個資料夾,避免大量專案造成備份爆量。
- 如果使用者原本已有 dirty working tree,pre-edit checkpoint 會包含既有變更,UI 會顯示 Git 狀態與 diff。
模型 patch 如何落地:
- 對於一般需求,本地模型會被要求輸出 JSON 結構,內含
path、target、reason、operations.search與operations.replace。 - CodeWorker 不會直接相信模型輸出,而是讀取本機檔案,確認
search唯一命中後才建立patch_fileaction。 - 如果模型 JSON 不完整,但仍能抽出
path、search、replace,CodeWorker 會嘗試 salvage;只要本機驗證安全,仍可產生真正 action。 - 如果模型只輸出文字建議、片段無法定位、或引入明顯不安全內容,就會保留為 advisory,不會假裝可以套用。
- 對於少數非常明確且可驗證的情境,CodeWorker 會使用本地 deterministic patch 產生 action;這仍然走相同的 diff、確認、Git checkpoint 與 restore 流程。
套用後驗證:
- CodeWorker 會依專案檔案推斷建議驗證命令。
.sln/.csproj:建議dotnet build。package.json:建議npm test或npm run build。pyproject.toml/pytest.ini/tests/:建議pytest。Cargo.toml:建議cargo test。go.mod:建議go test ./...。- 這些命令目前是建議,不會自動執行,因為 build/test script 可能有副作用或耗時很長。
在 C:\Games Tetris 專案中,需求「按方向鍵的下不要直接掉到底,改成按 Ctrl 掉到底」會被產生為真正的 patch_file。修改後 Form1_KeyDown 類似:
case Keys.Down:
case Keys.S:
if (MovePiece(0, 1))
{
score += 1;
}
break;
case Keys.Control:
case Keys.ControlKey:
case Keys.LControlKey:
case Keys.RControlKey:
HardDrop();
break;這代表:
Down:只下降一格。S:只下降一格。Ctrl/ControlKey/LControlKey/RControlKey:直接掉到底。- 舊的
Down + Control -> HardDrop()區塊會被移除。 - 如果同一句需求在已完成後再次送出,CodeWorker 會回覆「目前專案已符合這次修改需求,沒有需要套用的檔案操作」,避免再丟給模型浪費時間或產生重複 patch。
- 對話、工具結果、CodeGraph、專案結構分析、context coverage 與檔案確認都會存在同一個 transcript。
- AI streaming 時,只有使用者停在底部附近才會自動跟隨;如果你往上捲閱讀舊內容,畫面不會被強制拉回底部。
- 切換 thread 或重新整理頁面後,chat 與 tool cards 會從 persisted
transcript回放;舊 thread 若沒有transcript,會從既有history自動轉成基本顯示。
CodeWorker 也提供 repo-local Codex plugin:
codex plugin install plugins\codeworker-codegraph安裝後,在 Codex 裡可使用 codeworker-codegraph skill。常用查詢:
runtime\WinPython\python\python.exe C:\Users\Admin\.codex\skills\codeworker-codegraph\scripts\query_codeworker_graph.py --project C:\path\to\project --status
runtime\WinPython\python\python.exe C:\Users\Admin\.codex\skills\codeworker-codegraph\scripts\query_codeworker_graph.py --project C:\path\to\project --rebuild --query "Form1"
runtime\WinPython\python\python.exe C:\Users\Admin\.codex\skills\codeworker-codegraph\scripts\query_codeworker_graph.py --project C:\path\to\project --query "AudioManager callers" --json使用情境:
- 要修改功能前,先查相關 symbol 與呼叫關係。
- 要交接陌生專案時,先用 graph 找入口與核心檔案。
- 要讓 Codex 減少無目的
rg/Read,先用 graph 當導航圖,再讀目標檔案。
推薦問題:
- 「請問加載 model 的 code 在哪個檔案的哪一段?」
- 「想更新遊戲速度要怎麼修改?請列出檔案路徑與原因。」
- 「我加入網路連線對戰,第一步要改哪些檔案?」
- 在聊天輸入區底部的
Context下拉選單選擇4k到256k。 - 每個模型會記住自己的選擇。
- 如果現有
llama-servercontext 低於目前選擇,下一次啟動模型時會用新 context 重啟。 - 按
測試此模型可送出 KB可實測目前模型與 context 的輸入上限;成功後會寫入本機data\model-context-calibration.json,Web UI 不會提交這個本機校準檔。 產生修改計畫會優先使用實測structuredEditChars;若沒有校準資料,才使用保守估算。- 若
256k或大 context 在本機失敗,請看左側錯誤區與logs/llama-server-*.err.log。
完整設定文件位置:docs\qwen36a3b-cpu-only-llamacpp.md。本節只列最常用的 CPU-only 啟動方式;需要 CodeWorker 自動啟動方式、低記憶體調整與排錯位置時,請看該文件。
Qwen3.6-35B-A3B Vision 可在無獨立顯卡或不想使用 GPU 時以 CPU-only 方式啟動,但這不是 8GB 顯卡最佳化模式;它會更慢,也更依賴 system RAM。建議先用 16k 或 32k context 測試,穩定後再提高。
範例命令:
runtime\llama.cpp\llama-server.exe ^
-m models\qwen3.6-35b-a3b-ud-q4-k-m\Qwen3.6-35B-A3B-UD-Q4_K_M.gguf ^
--mmproj models\qwen3.6-35b-a3b-ud-q4-k-m\mmproj-BF16.gguf ^
--host 127.0.0.1 ^
--port 8087 ^
--ctx-size 32768 ^
--cache-type-k q4_0 ^
--cache-type-v q4_0 ^
--threads 12 ^
--n-gpu-layers 0 ^
--n-cpu-moe 999 ^
--batch-size 256 ^
--ubatch-size 64 ^
--jinja設定重點:
--n-gpu-layers 0:明確禁止 GPU offload,避免沒有顯卡或顯存不足時仍嘗試把 layers 放進 GPU。--n-cpu-moe=999:MoE layers 保留在 CPU/RAM;CPU-only 時這與--n-gpu-layers 0搭配可避免 MoE offload 誤判。--ctx-size 32768:先用32k;若 RAM 不足可降到16384或8192。--cache-type-k q4_0 --cache-type-v q4_0:降低 KV cache 記憶體需求。--batch-size 256 --ubatch-size 64:比 8GB NVIDIA profile 更保守,適合低記憶體或 CPU-only 測試。--mmproj:需要圖片理解時才保留;只做純文字 / 程式碼修改可先省略,降低啟動與記憶體壓力。- 不建議 CPU-only 預設加
--mlock;除非 RAM 很充足,否則可能讓 Windows 更難回收記憶體。
注意事項:
Qwen3.6-35B-A3B-UD-Q4_K_M.gguf約 21GB 等級,CPU-only 建議至少64GB RAM;32GB RAM可能非常慢或直接失敗。- Context 越大,KV cache 越大;如果回答不穩、啟動失敗或系統開始大量 paging,先降低
--ctx-size。 - CPU-only 推理延遲會明顯高於 CUDA / Vulkan offload;產生修改計畫時要允許較長時間,不要用很短 timeout 判定失敗。
- 啟動失敗時優先看
logs\llama-server-qwen36a3b-*.err.log與logs\hardware-optimization.jsonl,確認實際 command、context、threads 與 offload 參數。
- 優先在
檔案樹勾選明確相關檔案;多個 pinned files 只要總量低於目前模型的實測容量,就會完整送出。 - 未釘選或釘選不足時,CodeWorker 會用 project structure、RAG 與 CodeGraph 鎖定候選檔案與 symbol。
- 若完整檔案放不下,才退到完整函式 / class region;再放不下才使用 line windows。
- transcript 的
本次上下文/修改計畫上下文會列出每個檔案是完整、區域或片段,也會顯示送出大小與是否截斷。 - 若模型輸出不能被本機唯一定位,UI 會顯示
未驗證參考片段並禁用套用;只有後端驗證成功的actions才能確認套用。
- 右側
對話串可新增、切換、重新命名與刪除 thread。 - 每個 thread 保存自己的
history、memory_summary、modelKey與projectPath。 清空對話只清目前 thread,不會清掉其他 thread。
- 點
上傳檔案,或把截圖貼到聊天輸入區。 - 可上傳程式碼、設定檔、PDF、DOCX、圖片、音訊與影片。
- 圖片會先嘗試 native vision;影片會先抽 keyframes;音訊會嘗試 speech-to-text。
- 若 extractor 或 native payload 不可用,CodeWorker 會送 metadata 與限制說明,不會假裝已看見內容。
- 開啟專案。
- 直接用一般聊天要求模型生成檔案,例如:「我要生成一個專案功能介紹的 PPT 文件」。
- 模型會先產生文件內容,第一行標題會作為自動命名依據;CodeWorker 會用這份回覆建立 pending preview。
- 若要把上一則回答輸出成文件,可以直接寫:「把剛剛的說明與使用場景做成一個 PPTX 跟 PDF 檔」或「幫我把說明生成 Word 檔」。
- 若同一則訊息已貼上完整 Markdown 內容,例如「請把上面的內容生成docx檔給我」後接
# 標題,CodeWorker 會直接建立 pending preview,不再呼叫模型重寫內容。 - 若要求「把上面的內容 / 剛剛的回答 / 上一則回答」生成文件,CodeWorker 會直接取上一則 assistant 可見回答建立 preview,不再呼叫模型。
- 若同一句話提到多個格式,CodeWorker 會建立多個 pending preview,例如
.pptx與.pdf各一個。 - Word 請寫明
Word、word檔、docx或docx檔,例如:「請把剛剛的回答生成word檔」。 - 純文字與程式碼可直接寫副檔名或格式別名,例如
txt檔、md檔、py檔、js檔、json檔、html檔、css檔、yaml檔、sql檔、cs檔。 - Excel 請寫明
Excel、xlsx、試算表或目標副檔名,例如:「把測試清單做成 Excel 試算表」。 - 檢查 pending preview 後按「確認寫入」;寫入完成後,對話中會顯示絕對路徑、相對路徑與檔案大小。若檔案沒有實際落檔,後端會回錯,不會顯示成功。
CodeWorker/
├─ config/ # bootstrap、模型 registry 與 aider 設定
├─ data/ # RAG indexes、chat threads、本機 context 選擇與 audit log
├─ docs/ # 截圖、內部文件與測試筆記
├─ downloads/ # bootstrap 下載暫存
├─ logs/ # Web UI、model server 與 context bench log
├─ models/ # GGUF 模型與 mmproj
├─ runtime/ # WinPython、PortableGit、llama.cpp、FFmpeg、whisper.cpp
├─ scripts/ # bootstrap、模型解析、server 啟動與回歸測試
├─ webui/ # Python 後端、RAG/Agent 模組與前端資源
├─ plugins/ # Codex plugin,例如 codeworker-codegraph
├─ THIRD_PARTY_NOTICES.md
├─ VERSION
├─ README.md
├─ README.zh-TW.md
└─ README.en.md
重要檔案:
config\bootstrap.manifest.json:runtime、模型來源、contextWindow、KV cache type、mmproj與預設設定。scripts\resolve_model_env.py:依 manifest 解析模型檔、port、context、KV cache type 與mmproj。scripts\launch_llama_server.py:啟動 bundledllama.cppmodel server。scripts\run_webui_regression.py:Web UI、附件、RAG 與 streaming 回歸測試。webui\server.py:API routes、streaming chat、context assembly、threads、file generation、attachment handling、memory 與 model call。webui\core\hardware.py:偵測硬體 profile、選擇 backend、推薦模型與產生自動最佳化設定。webui\core\models.py:模型 registry、狀態與 OpenAI-compatible endpoint 資訊。webui\rag\index.py:hierarchical project index、SQLite FTS5 fallback、chunk search 與 impact hints。webui\rag\code_graph.py:CodeGraph-style symbol graph、relationship edges、graph search 與 compact graph context。webui\agent\runtime.py:ReAct-style Agent、tool calls、pending actions 與 audit log。webui\static\js\app-*.js:前端 state、API、UI、檔案樹、threads、chat、CodeGraph 與初始化流程。webui\static\styles.css:450px sidebar、單一 transcript chat、輸入區與 240px thread panel。VERSION:Web UI 與/api/status使用的單一版本來源;scripts\launch-webui.cmd也會用它驗證實際啟動版本。plugins\codeworker-codegraph:repo-local Codex plugin,內含codeworker-codegraphskill 與query_codeworker_graph.py查詢工具。THIRD_PARTY_NOTICES.md:第三方出處、作者與授權註記。
flowchart LR
U["使用者"] --> W["Web UI"]
W --> K["Context selector per model"]
W --> T["Thread panel"]
W --> O["Open project / Analyze file structure"]
O --> I["Local RAG index / CodeGraph"]
W --> X["CodeGraph query / rescan"]
W --> P["Pinned files"]
W --> F["Attachments"]
W --> G["Model decides file generation"]
W --> E["Generate edit plan"]
I --> S["webui/server.py"]
P --> S
F --> S
T --> S
K --> S
G --> A["Auto pending preview"]
E --> V["Validate unique search/replace"]
V --> B["Pending edit action"]
O --> H["Transcript tool card"]
X --> H
A --> Q["User confirmation"]
Q --> D["Write generated file"]
B --> Q2["User confirmation"]
Q2 --> C1["Git pre-edit checkpoint"]
C1 --> C2["Apply file operation"]
C2 --> C3["Git post-edit checkpoint / diff / restore"]
S --> C["Assemble memory / RAG / pinned context / attachments"]
C --> M["llama.cpp local model server"]
M --> R["Streaming reply"]
R --> H
流程重點:
- 沒有開啟專案時,chat payload 只包含使用者問題、附件與對話記憶。
- 開啟專案但沒有 pinned files 時,RAG index 會依問題搜尋相關檔案、symbols、summary 與 chunks。
分析專案檔案結構與 CodeGraph 查詢只寫入transcript,不會被送進模型 history。- 有 pinned files 時,會優先使用 pinned context。
- 長回答續寫使用上一段回答 tail,不再重送大型
PROJECT RAG CONTEXT。 - 檔案生成由一般聊天觸發;模型先產生內容與標題,CodeWorker 再建立 pending preview。同一句多格式需求會建立多個 preview,文件輸出會清理 Markdown 標記並使用可顯示中文的 PDF 字型。
- 直接修改由
產生修改計畫觸發;模型或本地 deterministic rule 產生search/replace,後端驗證唯一命中後才建立 pending action。 確認套用前建立 Git pre-edit checkpoint;套用後如果 working tree 變 dirty,建立 post-edit checkpoint,並回傳 diff、changed files、diff stat 與建議驗證指令。VERSION、/api/status.appVersion、logs\webui-*.log開頭的RootDir/ServerPath是更新與部署問題的主要排查來源。
CodeGraph 出處:
- 原始專案:
colbymchenry/codegraph - 作者 / copyright holder:Colby Mchenry
- 授權:MIT License
- CodeWorker 實作:參考其「本機 symbol graph + relationships + SQLite」工作流,改寫為 Python-native lightweight implementation,詳見 THIRD_PARTY_NOTICES.md。
- 將 Web UI 與啟動檢查版本推進到
CodeWorker V1.02.001,同步更新VERSION、/api/status、scripts\launch-webui.cmd、前端顯示文字與 README 截圖。 - 新增
清空選取專案按鈕,放在分析專案檔案結構右側;可清除 project path、summary、file tree、pinned files、preview 與 pending edit,保留目前模型與對話紀錄,讓同一個 thread 回到一般問答模式。 - 新增
Gemma 4 E4B Uncensored Q6與Qwen3.6-35B-A3B Uncensored IQ2_M模型 catalog / manifest / resolver 設定,包含獨立 port、context options、matchingmmproj與--jinja啟動參數。 - 強化硬體最佳化與模型效能測試:
/api/models、/api/status、/api/hardware/optimization會回傳一致的optimizationPlan,效能測試結果會寫入本機data\model-performance-calibration.json與data\hardware-model-profiles.json,下次遇到相同或相容硬體時可套用匹配設定。 - 針對 CPU-only / shared-memory iGPU 的大型模型啟動改用保守設定,加入
--no-repack、較小 batch / ubatch 與 adaptive startup timeout,避免用固定過短 timeout 誤判本機模型啟動失敗。 - 擴充 regression,覆蓋清空專案、兩個新增 HauhauCS 模型、硬體 profile matching、performance-test 寫入設定檔、低記憶體啟動參數、adaptive timeout 與前端
/api/project/clear呼叫。
- 將 Web UI 與啟動檢查版本推進到
CodeWorker V1.02.000,同步更新VERSION、/api/status、scripts\launch-webui.cmd、前端顯示文字與 README 截圖。 - 新增 last-used model preference:模型成功用於開啟專案、chat、model ensure、context 校準或
產生修改計畫後,會寫入本機data\model-preferences.json,下次啟動與新專案預設使用最後一次模型;無效或缺檔時 fallback 到gemma4。 產生修改計畫前端會送出目前下拉選到的modelKey,後端會用該模型建立 edit context、必要時啟動模型,成功後同步更新 last-used default。- 新增
scripts\measure_context_limits.pyruntime calibration 工作流,支援 enabled models 與qwen36a3b,校準結果寫入data\model-context-calibration.json;/api/models會回傳calibrated、structuredEditChars與measuredAt。 estimate_input_char_budget()/get_context_limits()優先使用 calibration;無校準資料時才回到保守估算,避免硬把修改計畫容量固定成單一 KB。- 重寫 edit target resolver 與 context assembly:pinned files 優先,可納入多檔;無 pinned 時用 project structure、RAG 與 CodeGraph 鎖定候選;容量允許時送完整檔案,否則依序退到完整 member region 與 line windows。
- 每次修改計畫都產生 context coverage,顯示送出檔案、
full/region/window模式、送出大小、總大小、是否截斷與漏掉候選。 - precise patch validation 失敗也會寫入 raw reply log;advisory suggestion 會標記
verified=false、source="model-unverified"、failureReason與missingSearchSnippet,UI 以未驗證參考片段呈現並禁用 apply。 call_local_model()支援 streaming collection,修改計畫與 advisory fallback 可保留 partial reply log,降低長推理被 timeout 誤判成無內容的機率。- 新增 Qwen 模型請求選項,
qwen36a3b預設送出enable_thinking=false,避免 visible answer 混入模型 thinking template。 - 補充
Qwen3.6-35B-A3B VisionCPU-onlyllama.cpp設定教學,說明--n-gpu-layers 0、--n-cpu-moe=999、低 batch、KV cache、context 降級與--mlock注意事項。 - 擴充 regression,覆蓋 last-used default、edit plan 指定模型、完整 pinned file context、多 pinned files、RAG/CodeGraph resolver、calibration budget、advisory UI、raw reply log 與 timeout streaming fallback。
- 將 Web UI 與啟動檢查版本推進到
CodeWorker V1.01.003,同步更新VERSION、/api/status、scripts\launch-webui.cmd與前端顯示文字。 - 更新 README 與中英文註解截圖,標出專案控制入口、專案摘要、虛擬化檔案樹、單一對話流、AI 忙碌指示、CodeGraph、Git 修改與對話串管理。
- 重新整理 Web UI 版面密度:
專案控制改為可折疊區塊,sidebar 改成 flex layout,修正隱藏錯誤區造成的多餘間距,並縮小按鈕、輸入框、label、標題與對話訊息卡片。 - 將
對話輸入說明移到 textarea 右下角,讓Context下拉與主要 action buttons 不再擠在同一個 label row。 - 模型下載進度會依實際檔案大小顯示百分比、已下載大小與總大小,例如
38% (3.4 GB / 9.0 GB),避免大型 GGUF 下載時看起來像程式卡住。 - AI 回答、streaming 與
產生修改計畫期間會顯示 spinner / busy bar,結束後自動清除,並保留可由 E2E 檢查的 busy state。 - 新增
Qwen3.6-35B-A3B Vision模型選項,使用unsloth/Qwen3.6-35B-A3B-GGUF的UD-Q4_K_M與mmproj-BF16.gguf,並在 64GB RAM + RTX 3070 8GB 等級硬體上推薦。 scripts\launch_llama_server.py與 Web UI 啟動流程新增--n-cpu-moe、--batch-size、--ubatch-size、--mlock白名單,讓 manifest 可套用 8GB NVIDIA MoE offload 啟動參數。- 修正不存在的 project/thread path 造成舊路徑殘留或 UI 卡住的問題;失敗時會清空 stale project state 並回到 idle。
- 針對本地 coding models 放寬
產生修改計畫timeout,避免低速 PC 上還在正常推理就被過早中斷。 - 補強 regression 與 browser E2E,覆蓋版本顯示、模型下載進度、AI busy indicator、CodeGraph、Git 修改 action 與 responsive layout。
- 將 Web UI 版本更新為
CodeWorker V1.01.002。 - 新增根目錄
VERSION作為單一版本來源;webui/server.py啟動時讀取此檔,/api/status回傳appVersion、appName、rootDir與serverPath。 scripts\launch-webui.cmd會讀取VERSION、等待/api/status回傳相同版本,並用?v=版本-時間戳開啟頁面,避免瀏覽器或舊 process 造成更新後仍看到舊版。scripts\bootstrap.ps1啟動時會停止同一個 CodeWorker root/runtime 下的舊 process,降低更新 runtime 或 source 後舊 WebUI 仍佔用 port 的機率。- WebUI log 開頭會印出實際
RootDir與ServerPath;這可用來判斷另一台電腦是否啟動到舊資料夾或舊捷徑。 json_response()與text_response()會忽略瀏覽器中途斷線造成的BrokenPipeError、ConnectionAbortedError、ConnectionResetError,避免WinError 10053混淆版本問題判讀。- 新增本地檔案修改工作流:
產生修改計畫、pending action card、確認套用、查看 Git diff、建立 checkpoint與復原這次修改。 - 新增 Git safety layer,檔案修改套用前建立 pre-edit checkpoint,套用後若有檔案變更建立 post-edit checkpoint,並限制 restore 只能回到 CodeWorker 建立的 pre-edit checkpoint。
- 新增
/api/edit/apply、/api/edit/status、/api/git/diff、/api/git/checkpoint、/api/git/restore,支援create_file、patch_file、replace_file、delete_file、rename_file、run_commandpending actions。 patch_file通用化:本地模型輸出合法 JSON patch 時,CodeWorker 會驗證search是否唯一命中本機檔案,通過後才建立可套用 action。- 新增模型 patch salvage:若模型 JSON 不完整,但仍可抽出
path/search/replace,且本機驗證安全,仍會建立真正patch_file;無法安全定位時才降級為 advisory。 - 修正安全檢查:程式碼字串 literal 內的新文字不會被誤判為未知 identifier,但真正引入未宣告 identifier 仍會被攔截。
- 套用修改後新增 validation command suggestions,例如
.sln/.csproj建議dotnet build,package.json建議npm test/npm run build,但不自動執行任意 build/test script。 - 新增 Tetris 鍵盤行為 deterministic patch 範例:
Down/S軟降一格,Ctrl/ControlKey/LControlKey/RControlKey執行HardDrop();已符合需求時會回覆無需修改,避免重複 patch 或模型逾時。 - 將對話、AI streaming、專案結構分析、CodeGraph 查詢 / 重建、context coverage 與檔案生成確認整合到單一 transcript scroll container。
- 新增 persisted
transcriptVersion: 1與transcriptthread data;舊 thread 會從既有historyfallback 顯示。 - 保留
history作為模型上下文來源,工具卡與狀態卡只進transcript,避免 CodeGraph / 分析結果被誤送進 LLM。 分析專案重新定位為分析專案檔案結構,用於釘選前分類入口、核心程式、project configs、UI/form、assets、tests、generated files 與 build outputs。- 擴充多語言分類,納入 Delphi / Object Pascal、C、C++、VB、.NET、JS/TS、Python、Java/Kotlin、Go、Rust、PHP、Ruby 與常見資源目錄。
- CodeGraph 工具列改為使用對話輸入框查詢,查詢結果、no-match 建議、matched files、重建摘要與釘選回饋都插入 transcript。
- 新增
/api/project/structure、/api/codegraph/status、/api/codegraph/query與POST /api/threads/cleanup-empty相關 regression coverage。 - 正式加入
scripts\run_webui_e2e.mjs與scripts\run_webui_e2e.cmd,覆蓋 3 輪 browser E2E、thread cleanup、CodeGraph、file tree virtualization、busy indicator 與 responsive layout。 - 新增
THIRD_PARTY_NOTICES.md,註明colbymchenry/codegraph的出處、作者 Colby Mchenry 與 MIT License。 - 新增 V1.01.002 中英文 Web UI 截圖,README 使用最新工作內容畫面。
- 新增高階模型選項
Qwen3-Coder 30B A3B與GLM-4.6,以及低階 / 標準備援Qwen2.5-Coder 14B Instruct與DeepSeek-Coder V2 Lite。 - 新增硬體偵測與自動最佳化設定,會依 RAM、CPU threads、GPU vendor、VRAM、
nvidia-smi與 Vulkan 可用性推薦模型、backend、context、threads 與--n-gpu-layers。 /api/models會回傳hardwareProfile、recommendedModelKey、各模型 tier、估計模型大小、runtime backend、GPU layers 與 threads。- Web UI 模型下拉選單會顯示 tier、模型大小、context 與推薦資訊,左側新增硬體偵測狀態區。
scripts\launch_llama_server.py支援--n-gpu-layers、--flash-attn與--jinja,不再固定 CPU-only。- 新增
logs\hardware-optimization.jsonl詳細記錄硬體 profile、模型推薦、啟動計畫、實際 backend、context、threads、GPU layers、模型檔路徑與 log path。 - 每次
llama-server-*.log開頭會寫入[CODEWORKER_LAUNCH_METADATA],方便回查實際 command 與 llama.cpp 啟動參數。 - 新增 CodeGraph-style 本機語意索引,在 RAG index 內建立
code_nodes/code_edges/code_unresolved_refs,讓模型上下文先取得 symbol 與 relationship map。 - 新增
plugins\codeworker-codegraphCodex plugin,可安裝後用codeworker-codegraphskill 與query_codeworker_graph.py查 CodeWorker 本機 graph。 - 高階硬體尚待實機驗證:CUDA / Vulkan runtime 選擇、
Qwen3-Coder 30B A3B、GLM-4.6、大 context 與 GPU offload 穩定性需由高階 PC 測試後回傳 log 確認。
- 新增每模型獨立
Context下拉選單,固定支援4k / 8k / 16k / 32k / 64k / 128k / 256k。 Gemma 4 26B與Qwen 3.5 9B Vision預設 context 改為256k,啟動時傳入llama-server -c 262144。- 新增 KV cache type 設定,預設
cacheTypeK=q4_0、cacheTypeV=q4_0。 - 新增右側
240px對話串面板,支援新增、切換、重新命名與刪除 thread。 - 新增 file generation pending workflow,支援 text/code、
.docx、.pdf、.pptx、.xlsx。 - 移除前端
生成檔案按鈕,檔案生成改由模型在一般聊天中判斷並發起。 - 檔名改由模型回覆的第一個 Markdown H1 標題自動命名,寫入完成後顯示實際檔案路徑。
- 修正「請把剛剛的回答生成word檔」被誤判為續寫的問題,Word 生成會正確建立
.docxpending preview。 - 補齊純文字與程式碼格式別名,支援
txt檔、md檔、py檔、js檔、ts檔、json檔、html檔、css檔、yaml檔、sql檔、cs檔等自然語言寫法。 - 新增同則訊息內嵌內容生成流程;使用者貼上完整 Markdown 並要求
.docx等格式時,CodeWorker 直接建立 preview,不再消耗模型推理。 - 新增上一則回答直接生成流程;使用者要求「上面的內容 / 剛剛的回答」輸出成文件時,CodeWorker 直接取 history 建立 preview,不再消耗模型推理。
- 檔案確認寫入後會驗證實體檔案存在並回傳絕對路徑與大小;前端成功訊息改顯示絕對路徑,避免相對路徑造成誤判。
- 檔案生成可解析「PPTX 跟 PDF」等多格式需求,並在提到「剛剛 / 上一則」時使用上一則 assistant 可見回答當內容來源。
- 修正 PDF 中文亂碼、PPTX / DOCX 暴露 Markdown 標記,以及「把說明生成 Word 檔」未使用上一則回答的問題。
scripts\bootstrap.ps1新增pdfplumber、reportlab、python-pptx與openpyxl。- README、流程圖、檔案結構與使用教學更新到 V1.01.000。
- 預設模型改為
Gemma 4 26B,Qwen 3.5 9B Vision保留為可選備用模型。 - Gemma4 改用 Unsloth GGUF 與 bundled
llama.cpp,並檢查實際model_path與 visionmmproj狀態。 - 新增全專案 RAG 搜尋,未釘選檔案也能找相關檔案、片段與行號。
- 新增通用附件流程:文件抽文字、圖片 native vision、影片 keyframes、音訊 / 影片音軌 speech-to-text,失敗時提供 metadata fallback。
- 新增壓縮式對話記憶與最近多輪原文,改善追問連貫並降低 token 使用量。
- 修正長回答截斷與「請繼續」問題。
- 思考過程改為預設摺疊,展開時自動捲到最新輸出。
- 移除右側檔案預覽面板,改為 450px sidebar 與單欄寬版 chat。
Gemma 4從 E4B 更新為 26B GGUF,改由 CodeWorker 內建llama.cppservice 服務,不依賴 Ollama。- 一般聊天解除「必須開啟專案 / 必須釘選檔案」限制。
- 新增
/api/chat/stream,顯示 streaming content 與 reasoning/thinking 輸出。 - 新增本機 RAG index、Agent v1 API、pending action 確認與 audit log。
- 主對話框與
分析專案收斂為較接近模型原始輸出的raw-first路線。 - 修正大型 pinned file 僅剩檔名、內容不足的問題。
- README landing page、中英文文件與 UI 對齊。
- 建立 README landing page 與雙語文件分流。
- Web UI 新增
繁中 / EN語言切換。
- 移除舊的修改建議 modal。
- 所有分析與修正迭代回到主對話框。
本專案採用 MIT 授權。
CodeGraph 相關註記:
- CodeWorker 的 CodeGraph-style 功能參考
colbymchenry/codegraph的本機語意索引與 graph-first exploration 工作流。 colbymchenry/codegraph作者 / copyright holder 為 Colby Mchenry,採 MIT License。- CodeWorker 目前未 vendoring 上游 TypeScript package;本專案以
webui\rag\code_graph.py提供 Python-native lightweight implementation。 - 詳細第三方出處與授權請見 THIRD_PARTY_NOTICES.md。
在客戶端、內網或 air-gapped environment 使用本工具時,仍需自行確認:
- 本地模型與第三方 runtime 的授權條件。
- 客戶環境對 USB、可攜式工具與 offline AI 的使用規範。
- 目標專案與資料是否允許被本機模型讀取。
