@jc20231028/local-code-agent 0.1.0 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 jeff
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 jeff
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,263 +1,290 @@
1
- # local-code-agent
2
-
3
- `local-code-agent` 是一個本地端 npm CLI,功能方向接近 Claude Code,但模型來源改成你自己電腦上的:
4
-
5
- - `Ollama`
6
- - `LM Studio`
7
-
8
- 它會在啟動時先做偵測:
9
-
10
- - 讓使用者選擇 `Ollama` 或 `LM Studio`
11
- - 使用上下鍵與 Enter 在終端內選擇
12
- - 檢查電腦上是否有安裝該軟體
13
- - 檢查本地 API 是否已啟動
14
- - 檢查是否已有可用的本地模型
15
- - 將使用者選過的 `provider` / `model` 自動寫回 `.local-code.json`
16
-
17
- 如果缺少任何一項,CLI 會直接提示使用者先安裝或先下載模型。
18
-
19
- ## 目前支援的能力
20
-
21
- - 列出檔案
22
- - 讀取檔案
23
- - 搜尋文字
24
- - 建立資料夾
25
- - 寫入或覆蓋檔案
26
- - 追加內容到既有檔案(`append_file`),不用重新輸出整份既有內容
27
- - 進行局部字串替換
28
- - 寫入 `.py` / `.js` / `.mjs` 後自動做語法檢查,結果會回饋給模型自我修正
29
- - 執行本地命令(`dotnet build`、`npm test`、`python xxx.py` 等)來編譯/測試/執行程式碼——預設每次執行前會在終端機跳出來問你要不要允許,`--allow-commands` 則整個 session 都自動允許不再詢問
30
- - 用 `/名稱` 打關鍵字叫出自訂 Skill(見下方「Skill 系統」)
31
- - 任務進度 Checkpoint:存目標/待辦事項,並自動附上最近對話內容,跨 session 恢復(見下方「任務進度 Checkpoint」)
32
-
33
- ## 安裝
34
-
35
- ```powershell
36
- npm.cmd install
37
- ```
38
-
39
- 直接執行:
40
-
41
- ```powershell
42
- node ./bin/local-code.js help
43
- ```
44
-
45
- ## 掛成全域命令
46
-
47
- 掛成全域命令後,就能在任何專案資料夾直接用 `local-code`,不用再 `cd` 回這個 repo 或打完整路徑:
48
-
49
- ```powershell
50
- npm.cmd link
51
- ```
52
-
53
- 掛完之後,切到任何專案資料夾都可以直接執行:
54
-
55
- ```powershell
56
- cd C:\path\to\other-project
57
- local-code help
58
- local-code run "read the repo and fix the bug"
59
- local-code chat
60
- ```
61
-
62
- `workspace` 預設就是執行當下的 `process.cwd()`,所以不同專案資料夾會各自使用自己的 `.local-code.json` / `.local-code-state.json`(沒有的話 CLI 會在互動模式下詢問並建立)。
63
-
64
- ## 初始化設定
65
-
66
- ```powershell
67
- node ./bin/local-code.js init
68
- ```
69
-
70
- 建立 `.local-code.json`:
71
-
72
- ```json
73
- {
74
- "provider": "",
75
- "model": "",
76
- "workspace": ".",
77
- "ollamaBaseUrl": "http://127.0.0.1:11434",
78
- "lmStudioBaseUrl": "http://127.0.0.1:1234",
79
- "maxSteps": 12,
80
- "allowCommands": false,
81
- "temperature": 0.2
82
- }
83
- ```
84
-
85
- `provider` `model` 留空時,程式會在啟動時互動式詢問使用者。
86
- 如果目前終端不是互動模式,程式會輸出完整的 provider 診斷摘要。
87
- 首次選完後,CLI 會把結果寫回 `.local-code.json`,下次直接沿用。
88
-
89
- ## 用法
90
-
91
- 列出可用模型:
92
-
93
- ```powershell
94
- node ./bin/local-code.js models
95
- node ./bin/local-code.js models --provider ollama
96
- node ./bin/local-code.js models --provider lmstudio
97
- ```
98
-
99
- 單次執行:
100
-
101
- ```powershell
102
- node ./bin/local-code.js run "閱讀目前專案,建立一個簡單的 express API"
103
- ```
104
-
105
- 互動模式:
106
-
107
- ```powershell
108
- node ./bin/local-code.js chat
109
- ```
110
-
111
- 執行本機命令(編譯、測試、跑程式):
112
-
113
- ```powershell
114
- node ./bin/local-code.js run "編譯並執行這個 C# 專案"
115
- ```
116
-
117
- 預設不用加任何參數——模型呼叫 `run_command`(例如 `dotnet build`、`npm test`)時,會直接在終端機印出指令內容並問你 `Allow this command? [y/N]:`,按 `y` 才會真的執行。如果不是在真人操作的終端機裡執行(例如透過管道/腳本),沒有 TTY 可以問就會直接安全拒絕。
118
-
119
- 如果你完全信任這個專案、不想每次都被問,可以整個 session 跳過詢問:
120
-
121
- ```powershell
122
- node ./bin/local-code.js run "執行測試並修正失敗案例" --allow-commands
123
- ```
124
-
125
- 列出目前可用的 Skill:
126
-
127
- ```powershell
128
- local-code skills
129
- ```
130
-
131
- 用關鍵字叫出 Skill(`run` 跟 `chat` 都支援,一開頭打 `/名稱`):
132
-
133
- ```powershell
134
- local-code run "/reviewer 看一下 src/agent.js 有沒有明顯 bug"
135
- ```
136
-
137
- ```powershell
138
- local-code chat
139
- > /skills
140
- > /reviewer 看一下 src/agent.js 有沒有明顯 bug
141
- ```
142
-
143
- ## Skill 系統
144
-
145
- Skill 是一份 Markdown 檔,開頭有簡單的 frontmatter,用來把「特定任務的額外指示」跟「這次任務可以用哪些工具」包成一個可重複使用、可分享的單位,類似 Claude Code 的 Skill / Slash command。
146
-
147
- 放置位置(同名時,專案層級蓋掉使用者層級):
148
-
149
- - 專案層級:`<workspace>/.local-code/skills/*.md` — 可以連同專案一起 commit,團隊共用
150
- - 使用者層級:`~/.local-code/skills/*.md` — 個人跨專案共用
151
-
152
- 檔案格式,例如 `.local-code/skills/reviewer.md`:
153
-
154
- ```markdown
155
- ---
156
- name: reviewer
157
- description: Review code changes for bugs, risky edge cases, and style issues.
158
- keywords: rv, code-review
159
- tools: read_file, search_text, list_files
160
- ---
161
-
162
- You are in "reviewer" mode for this task. Only look for bugs, risky edge
163
- cases, and style issues. Do not modify files unless explicitly asked.
164
- ```
165
-
166
- 欄位說明:
167
-
168
- - `name`:必填,唯一識別,也是預設觸發用的 `/名稱`
169
- - `description`:必填,`local-code skills` 列表會顯示
170
- - `keywords`:選填,逗號分隔的別名,一樣可以用 `/別名` 觸發
171
- - `tools`:選填,逗號分隔的工具白名單;省略代表這次任務可以用全部工具。模型呼叫白名單以外的工具時,會收到明確的錯誤訊息(不會讓整個 CLI 崩潰),可以在剩餘步數內自行改用允許的工具
172
-
173
- 觸發方式是明確的 `/名稱` 前綴(不是讓模型自己語意判斷要不要用),對本地小型模型來說最穩定、可預期:
174
-
175
- ```powershell
176
- local-code run "/reviewer 檢查 src/agent.js"
177
- ```
178
-
179
- `reviewer` 開頭的指示會被組進送給模型的內容,格式類似:
180
-
181
- ```
182
- [Skill: reviewer]
183
- <skill 內文>
184
-
185
- Task: 檢查 src/agent.js
186
- ```
187
-
188
- 保留字(不能拿來當 Skill 名稱或別名,會被忽略並印出警告):`exit`、`provider`、`model`、`status`、`skills`。
189
-
190
- `chat` 模式內也可以用 `/skills` 列出可用 Skill,或直接打 `/名稱 ...` 觸發。
191
-
192
- ## Chat 指令與記憶重置
193
-
194
- `chat` 對話記錄會存在 `.local-code-state.json`,下次在同一個資料夾用同樣的 provider/model 開 `chat` 時會自動還原(`restored saved chat history (N turn(s))`)。
195
-
196
- Chat 內建指令:
197
-
198
- - `/provider` 切換 provider,同時清空記憶重新開始
199
- - `/model` 切換 model,同時清空記憶重新開始
200
- - `/status` 顯示目前 provider、model、workspace、記憶狀態
201
- - `/reset` 只清空對話記憶,provider/model/workspace 都不變
202
- - `/skills` 列出可用 Skill
203
- - `/exit` 離開
204
-
205
- **什麼時候要用 `/reset`:** 對話記憶會把過去的 `<tool_result>`(包含失敗訊息)一起還原給模型。如果你升級了 `local-code`(例如修了某個工具的 bug)、或改了 `--allow-commands` 之類的設定,但這個資料夾的 chat 記憶裡還留著「舊版工具失敗」的紀錄,模型會傾向照著自己之前講過的話回答,即使新版工具其實已經能做到了,也可能還是說「我做不到」。這時候打 `/reset` 清掉舊記憶重新開始,模型才會重新嘗試。
206
-
207
- ## 任務進度 Checkpoint
208
-
209
- chat 記憶(對話逐字稿)分開,另外提供一套「任務進度」的存檔機制:記錄目標、目前狀態、已完成/待完成的步驟、背景決策、卡關點、關鍵檔案,存在同一個 `.local-code-state.json` 的 `checkpoints`欄位裡,跨資料夾重開 `chat` 或重啟電腦都還在。
210
-
211
- 存檔時會**自動從當下的對話紀錄擷取最近幾則你打過的原始 prompt**(會過濾掉 `<tool_result>` 之類的工具回傳內容,只留你自己輸入的部分),附加進 checkpoint 裡,不用自己手動回想輸入一次。
212
-
213
- 在 `chat` 內使用:
214
-
215
- ```
216
- /checkpoint # 互動式存檔(依序詢問目標/狀態/已完成/待辦/背景/卡關點/關鍵檔案)
217
- /checkpoint list # 列出所有 checkpoint
218
- /checkpoint show [id] # 顯示指定或目前進行中的 checkpoint 完整內容
219
- /checkpoint complete [id] # 標記完成
220
- ```
221
-
222
- 不進 chat,直接用 CLI 也可以:
223
-
224
- ```powershell
225
- node ./bin/local-code.js checkpoint save
226
- node ./bin/local-code.js checkpoint list
227
- node ./bin/local-code.js checkpoint show
228
- node ./bin/local-code.js checkpoint complete
229
- ```
230
-
231
- 只要該資料夾還有「進行中」(未標記完成)的 checkpoint,下次執行 `local-code chat` 時會自動在最上方顯示,提醒你從待辦步驟繼續,不用自己去找。
232
-
233
- ## 偵測邏輯
234
-
235
- `Ollama`
236
-
237
- - 先檢查 `ollama` 指令或常見安裝路徑
238
- - 再檢查 `http://127.0.0.1:11434/api/tags`
239
- - 如果沒有模型,會提示像 `ollama pull qwen2.5-coder:7b`
240
-
241
- `LM Studio`
242
-
243
- - 先檢查 `LM Studio` 常見安裝路徑或 `lms` 指令
244
- - 再檢查 `http://127.0.0.1:1234/v1/models`
245
- - 如果沒有模型,會提示先在 LM Studio 下載並啟用 local server
246
-
247
- ## 限制
248
-
249
- - 目前仍是 MVP,不是完整複刻 Claude Code
250
- - 工具呼叫仍採 prompt 協議,不是原生 function calling,本地小型模型偶爾會把大段程式碼包進 JSON 時跳脫字元出錯或被輸出長度截斷(CLI 會自動重試、多次失敗會清楚回報而不是靜默卡住,但無法保證每次都成功)
251
- - `replace_in_file` 仍是字串替換,不是 AST 或 diff patch
252
- - 語法檢查目前只支援 `.py`(需要系統裝有 `python`/`python3`/`py`)與 `.js`/`.mjs`(用 Node 內建 `--check`),其他副檔名不會檢查
253
- - Skill 觸發只支援明確的 `/名稱` 前綴,沒有 Claude Code 那種依描述語意自動判斷要不要用某個 Skill 的能力
254
- - 模型偶爾會在自然語言回答裡「宣稱」做了某件事但實際沒有呼叫工具(幻覺);system prompt 已要求模型有實際工具結果才能宣稱成功、被問到檔案在哪要先查證,但無法 100% 杜絕,遇到可疑的回答可以直接請它用 `list_files`/`read_file` 再次確認
255
-
256
- ## Workspace 掃描的容錯處理
257
-
258
- 啟動時(例如顯示「最近修改的檔案」)會遞迴掃描 workspace 目錄。掃描邏輯會:
259
-
260
- - 略過讀取失敗(權限不足、壞掉的 symlink 等)的檔案或資料夾,不會讓整個 CLI 崩潰
261
- - 最多掃描 5000 個項目,避免在超大型目錄(例如整個使用者家目錄)下卡住
262
-
263
- 如果直接在很大的資料夾(如使用者家目錄)下執行,建議還是切到實際的專案子資料夾再用 `local-code`,掃描範圍較小、啟動也更快。
1
+ # local-code-agent
2
+
3
+ `local-code-agent` 是一個本地端 npm CLI,功能方向接近 Claude Code,但模型來源改成你自己電腦上的:
4
+
5
+ - `Ollama`
6
+ - `LM Studio`
7
+
8
+ 它會在啟動時先做偵測:
9
+
10
+ - 讓使用者選擇 `Ollama` 或 `LM Studio`
11
+ - 使用上下鍵與 Enter 在終端內選擇
12
+ - 檢查電腦上是否有安裝該軟體
13
+ - 檢查本地 API 是否已啟動
14
+ - 檢查是否已有可用的本地模型
15
+ - 將使用者選過的 `provider` / `model` 自動寫回 `.local-code.json`
16
+
17
+ 如果缺少任何一項,CLI 會直接提示使用者先安裝或先下載模型。
18
+
19
+ ## 目前支援的能力
20
+
21
+ - 列出檔案
22
+ - 讀取檔案
23
+ - 搜尋文字
24
+ - 建立資料夾
25
+ - 寫入或覆蓋檔案
26
+ - 追加內容到既有檔案(`append_file`),不用重新輸出整份既有內容
27
+ - 進行局部字串替換
28
+ - 寫入 `.py` / `.js` / `.mjs` 後自動做語法檢查,結果會回饋給模型自我修正
29
+ - 執行本地命令(`dotnet build`、`npm test`、`python xxx.py` 等)來編譯/測試/執行程式碼——預設每次執行前會在終端機跳出來問你要不要允許,`--allow-commands` 則整個 session 都自動允許不再詢問
30
+ - 用 `/名稱` 打關鍵字叫出自訂 Skill(見下方「Skill 系統」)
31
+ - 任務進度 Checkpoint:存目標/待辦事項,並自動附上最近對話內容,跨 session 恢復(見下方「任務進度 Checkpoint」)
32
+
33
+ ## 安裝(推薦,跟 Claude Code 一樣)
34
+
35
+ 從 npm 全域安裝,裝完就能在任何資料夾直接打 `local-code`,不用額外初始化:
36
+
37
+ ```powershell
38
+ npm install -g @jc20231028/local-code-agent
39
+ ```
40
+
41
+ 裝完之後,切到任何專案資料夾都可以直接執行:
42
+
43
+ ```powershell
44
+ cd C:\path\to\your-project
45
+ local-code chat
46
+ ```
47
+
48
+ **注意:一定要加 `-g`。** 如果只下 `npm install @jc20231028/local-code-agent`(沒有 `-g`),
49
+ npm 只會把執行檔裝進當下專案的 `node_modules/.bin`,不會加進系統 PATH,
50
+ cmd 直接打 `local-code` 會抓不到指令。這種情況下要嘛加 `-g` 重裝,要嘛用 `npx local-code chat` 執行。
51
+
52
+ 如果你已經用沒加 `-g` 的方式裝過,先移除本地安裝再改用全域安裝:
53
+
54
+ ```powershell
55
+ npm uninstall @jc20231028/local-code-agent
56
+ npm install -g @jc20231028/local-code-agent
57
+ ```
58
+
59
+ `provider` / `model` 留空時,`local-code chat` 第一次啟動就會直接跳出互動選單讓你選(見下方「初始化設定」),
60
+ 不需要先手動跑 `local-code init`——`init` 只是用來印出設定檔範例,不是必要步驟。
61
+
62
+ `workspace` 預設就是執行當下的 `process.cwd()`,所以不同專案資料夾會各自使用自己的 `.local-code.json` / `.local-code-state.json`(沒有的話 CLI 會在互動模式下詢問並建立)。
63
+
64
+ ## 本地開發(clone 這個 repo 時使用)
65
+
66
+ ```powershell
67
+ npm.cmd install
68
+ ```
69
+
70
+ 直接執行:
71
+
72
+ ```powershell
73
+ node ./bin/local-code.js help
74
+ ```
75
+
76
+ 想在其他專案資料夾測試本地修改,可以用 `npm.cmd link` 掛成全域命令:
77
+
78
+ ```powershell
79
+ npm.cmd link
80
+ ```
81
+
82
+ ## 初始化設定(選用)
83
+
84
+ ```powershell
85
+ node ./bin/local-code.js init
86
+ ```
87
+
88
+ 建立 `.local-code.json`:
89
+
90
+ ```json
91
+ {
92
+ "provider": "",
93
+ "model": "",
94
+ "workspace": ".",
95
+ "ollamaBaseUrl": "http://127.0.0.1:11434",
96
+ "lmStudioBaseUrl": "http://127.0.0.1:1234",
97
+ "maxSteps": 12,
98
+ "allowCommands": false,
99
+ "allowWrites": false,
100
+ "temperature": 0.2
101
+ }
102
+ ```
103
+
104
+ `provider` 或 `model` 留空時,程式會在啟動時互動式詢問使用者。
105
+ 如果目前終端不是互動模式,程式會輸出完整的 provider 診斷摘要。
106
+ 首次選完後,CLI 會把結果寫回 `.local-code.json`,下次直接沿用。
107
+
108
+ ## 用法
109
+
110
+ 列出可用模型:
111
+
112
+ ```powershell
113
+ node ./bin/local-code.js models
114
+ node ./bin/local-code.js models --provider ollama
115
+ node ./bin/local-code.js models --provider lmstudio
116
+ ```
117
+
118
+ 單次執行:
119
+
120
+ ```powershell
121
+ node ./bin/local-code.js run "閱讀目前專案,建立一個簡單的 express API"
122
+ ```
123
+
124
+ 互動模式:
125
+
126
+ ```powershell
127
+ node ./bin/local-code.js chat
128
+ ```
129
+
130
+ 執行本機命令(編譯、測試、跑程式):
131
+
132
+ ```powershell
133
+ node ./bin/local-code.js run "編譯並執行這個 C# 專案"
134
+ ```
135
+
136
+ 預設不用加任何參數——模型呼叫 `run_command`(例如 `dotnet build`、`npm test`)時,會直接在終端機印出指令內容並問你 `Allow this command? [y/N]:`,按 `y` 才會真的執行。如果不是在真人操作的終端機裡執行(例如透過管道/腳本),沒有 TTY 可以問就會直接安全拒絕。
137
+
138
+ 如果你完全信任這個專案、不想每次都被問,可以整個 session 跳過詢問:
139
+
140
+ ```powershell
141
+ node ./bin/local-code.js run "執行測試並修正失敗案例" --allow-commands
142
+ ```
143
+
144
+ 同樣地,模型呼叫 `write_file`、`append_file`、`replace_in_file`、`make_directory` 這些會建立/覆寫/修改檔案或資料夾的工具時,預設也會先印出要變更的路徑(和內容預覽)並問 `Allow this change? [y/N]:`,按 `y` 才會真的寫入;沒有 TTY 時一樣直接安全拒絕。想跳過詢問可以加 `--allow-writes`:
145
+
146
+ ```powershell
147
+ node ./bin/local-code.js run "幫我建立這個功能的檔案" --allow-writes
148
+ ```
149
+
150
+ `run_command` 之外的其他工具(`list_files`、`read_file`、`search_text`)只是讀取,不會跳出詢問。每一步驟模型在做什麼、呼叫了哪個工具、帶了什麼參數,都會即時印在終端機(stderr),不會等到最後才一次顯示結果。
151
+
152
+ 列出目前可用的 Skill:
153
+
154
+ ```powershell
155
+ local-code skills
156
+ ```
157
+
158
+ 用關鍵字叫出 Skill(`run` 跟 `chat` 都支援,一開頭打 `/名稱`):
159
+
160
+ ```powershell
161
+ local-code run "/reviewer 看一下 src/agent.js 有沒有明顯 bug"
162
+ ```
163
+
164
+ ```powershell
165
+ local-code chat
166
+ > /skills
167
+ > /reviewer 看一下 src/agent.js 有沒有明顯 bug
168
+ ```
169
+
170
+ ## Skill 系統
171
+
172
+ Skill 是一份 Markdown 檔,開頭有簡單的 frontmatter,用來把「特定任務的額外指示」跟「這次任務可以用哪些工具」包成一個可重複使用、可分享的單位,類似 Claude Code 的 Skill / Slash command。
173
+
174
+ 放置位置(同名時,專案層級蓋掉使用者層級):
175
+
176
+ - 專案層級:`<workspace>/.local-code/skills/*.md` 可以連同專案一起 commit,團隊共用
177
+ - 使用者層級:`~/.local-code/skills/*.md` — 個人跨專案共用
178
+
179
+ 檔案格式,例如 `.local-code/skills/reviewer.md`:
180
+
181
+ ```markdown
182
+ ---
183
+ name: reviewer
184
+ description: Review code changes for bugs, risky edge cases, and style issues.
185
+ keywords: rv, code-review
186
+ tools: read_file, search_text, list_files
187
+ ---
188
+
189
+ You are in "reviewer" mode for this task. Only look for bugs, risky edge
190
+ cases, and style issues. Do not modify files unless explicitly asked.
191
+ ```
192
+
193
+ 欄位說明:
194
+
195
+ - `name`:必填,唯一識別,也是預設觸發用的 `/名稱`
196
+ - `description`:必填,`local-code skills` 列表會顯示
197
+ - `keywords`:選填,逗號分隔的別名,一樣可以用 `/別名` 觸發
198
+ - `tools`:選填,逗號分隔的工具白名單;省略代表這次任務可以用全部工具。模型呼叫白名單以外的工具時,會收到明確的錯誤訊息(不會讓整個 CLI 崩潰),可以在剩餘步數內自行改用允許的工具
199
+
200
+ 觸發方式是明確的 `/名稱` 前綴(不是讓模型自己語意判斷要不要用),對本地小型模型來說最穩定、可預期:
201
+
202
+ ```powershell
203
+ local-code run "/reviewer 檢查 src/agent.js"
204
+ ```
205
+
206
+ `reviewer` 開頭的指示會被組進送給模型的內容,格式類似:
207
+
208
+ ```
209
+ [Skill: reviewer]
210
+ <skill 內文>
211
+
212
+ Task: 檢查 src/agent.js
213
+ ```
214
+
215
+ 保留字(不能拿來當 Skill 名稱或別名,會被忽略並印出警告):`exit`、`provider`、`model`、`status`、`skills`。
216
+
217
+ `chat` 模式內也可以用 `/skills` 列出可用 Skill,或直接打 `/名稱 ...` 觸發。
218
+
219
+ ## Chat 指令與記憶重置
220
+
221
+ `chat` 對話記錄會存在 `.local-code-state.json`,下次在同一個資料夾用同樣的 provider/model 開 `chat` 時會自動還原(`restored saved chat history (N turn(s))`)。
222
+
223
+ Chat 內建指令:
224
+
225
+ - `/provider` 切換 provider,同時清空記憶重新開始
226
+ - `/model` 切換 model,同時清空記憶重新開始
227
+ - `/status` 顯示目前 provider、model、workspace、記憶狀態
228
+ - `/reset` 只清空對話記憶,provider/model/workspace 都不變
229
+ - `/skills` 列出可用 Skill
230
+ - `/exit` 離開
231
+
232
+ **什麼時候要用 `/reset`:** 對話記憶會把過去的 `<tool_result>`(包含失敗訊息)一起還原給模型。如果你升級了 `local-code`(例如修了某個工具的 bug)、或改了 `--allow-commands` 之類的設定,但這個資料夾的 chat 記憶裡還留著「舊版工具失敗」的紀錄,模型會傾向照著自己之前講過的話回答,即使新版工具其實已經能做到了,也可能還是說「我做不到」。這時候打 `/reset` 清掉舊記憶重新開始,模型才會重新嘗試。
233
+
234
+ ## 任務進度 Checkpoint
235
+
236
+ 跟 chat 記憶(對話逐字稿)分開,另外提供一套「任務進度」的存檔機制:記錄目標、目前狀態、已完成/待完成的步驟、背景決策、卡關點、關鍵檔案,存在同一個 `.local-code-state.json` 的 `checkpoints`欄位裡,跨資料夾重開 `chat` 或重啟電腦都還在。
237
+
238
+ 存檔時會**自動從當下的對話紀錄擷取最近幾則你打過的原始 prompt**(會過濾掉 `<tool_result>` 之類的工具回傳內容,只留你自己輸入的部分),附加進 checkpoint 裡,不用自己手動回想輸入一次。
239
+
240
+ 在 `chat` 內使用:
241
+
242
+ ```
243
+ /checkpoint # 互動式存檔(依序詢問目標/狀態/已完成/待辦/背景/卡關點/關鍵檔案)
244
+ /checkpoint list # 列出所有 checkpoint
245
+ /checkpoint show [id] # 顯示指定或目前進行中的 checkpoint 完整內容
246
+ /checkpoint complete [id] # 標記完成
247
+ ```
248
+
249
+ 不進 chat,直接用 CLI 也可以:
250
+
251
+ ```powershell
252
+ node ./bin/local-code.js checkpoint save
253
+ node ./bin/local-code.js checkpoint list
254
+ node ./bin/local-code.js checkpoint show
255
+ node ./bin/local-code.js checkpoint complete
256
+ ```
257
+
258
+ 只要該資料夾還有「進行中」(未標記完成)的 checkpoint,下次執行 `local-code chat` 時會自動在最上方顯示,提醒你從待辦步驟繼續,不用自己去找。
259
+
260
+ ## 偵測邏輯
261
+
262
+ `Ollama`
263
+
264
+ - 先檢查 `ollama` 指令或常見安裝路徑
265
+ - 再檢查 `http://127.0.0.1:11434/api/tags`
266
+ - 如果沒有模型,會提示像 `ollama pull qwen2.5-coder:7b`
267
+
268
+ `LM Studio`
269
+
270
+ - 先檢查 `LM Studio` 常見安裝路徑或 `lms` 指令
271
+ - 再檢查 `http://127.0.0.1:1234/v1/models`
272
+ - 如果沒有模型,會提示先在 LM Studio 下載並啟用 local server
273
+
274
+ ## 限制
275
+
276
+ - 目前仍是 MVP,不是完整複刻 Claude Code
277
+ - 工具呼叫仍採 prompt 協議,不是原生 function calling,本地小型模型偶爾會把大段程式碼包進 JSON 時跳脫字元出錯或被輸出長度截斷(CLI 會自動重試、多次失敗會清楚回報而不是靜默卡住,但無法保證每次都成功)
278
+ - `replace_in_file` 仍是字串替換,不是 AST 或 diff patch
279
+ - 語法檢查目前只支援 `.py`(需要系統裝有 `python`/`python3`/`py`)與 `.js`/`.mjs`(用 Node 內建 `--check`),其他副檔名不會檢查
280
+ - Skill 觸發只支援明確的 `/名稱` 前綴,沒有 Claude Code 那種依描述語意自動判斷要不要用某個 Skill 的能力
281
+ - 模型偶爾會在自然語言回答裡「宣稱」做了某件事但實際沒有呼叫工具(幻覺);system prompt 已要求模型有實際工具結果才能宣稱成功、被問到檔案在哪要先查證,但無法 100% 杜絕,遇到可疑的回答可以直接請它用 `list_files`/`read_file` 再次確認
282
+
283
+ ## Workspace 掃描的容錯處理
284
+
285
+ 啟動時(例如顯示「最近修改的檔案」)會遞迴掃描 workspace 目錄。掃描邏輯會:
286
+
287
+ - 略過讀取失敗(權限不足、壞掉的 symlink 等)的檔案或資料夾,不會讓整個 CLI 崩潰
288
+ - 最多掃描 5000 個項目,避免在超大型目錄(例如整個使用者家目錄)下卡住
289
+
290
+ 如果直接在很大的資料夾(如使用者家目錄)下執行,建議還是切到實際的專案子資料夾再用 `local-code`,掃描範圍較小、啟動也更快。
package/bin/local-code.js CHANGED
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env node
2
-
3
- import { main } from "../src/cli.js";
4
-
5
- main(process.argv.slice(2)).catch((error) => {
6
- console.error(error instanceof Error ? error.message : String(error));
7
- process.exitCode = 1;
8
- });
1
+ #!/usr/bin/env node
2
+
3
+ import { main } from "../src/cli.js";
4
+
5
+ main(process.argv.slice(2)).catch((error) => {
6
+ console.error(error instanceof Error ? error.message : String(error));
7
+ process.exitCode = 1;
8
+ });