@staticpayload/zai-code 1.2.15 → 1.4.1
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/README.md +85 -154
- package/dist/apply.d.ts.map +1 -1
- package/dist/apply.js +43 -16
- package/dist/apply.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +5 -1
- package/dist/auth.js.map +1 -1
- package/dist/commands.d.ts.map +1 -1
- package/dist/commands.js +1021 -47
- package/dist/commands.js.map +1 -1
- package/dist/context/context_builder.d.ts.map +1 -1
- package/dist/context/context_builder.js +18 -3
- package/dist/context/context_builder.js.map +1 -1
- package/dist/context/project_memory.d.ts +2 -2
- package/dist/context/project_memory.d.ts.map +1 -1
- package/dist/context/project_memory.js +14 -4
- package/dist/context/project_memory.js.map +1 -1
- package/dist/doctor.d.ts.map +1 -1
- package/dist/doctor.js +51 -7
- package/dist/doctor.js.map +1 -1
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +13 -8
- package/dist/history.js.map +1 -1
- package/dist/mode_prompts.d.ts.map +1 -1
- package/dist/mode_prompts.js +25 -22
- package/dist/mode_prompts.js.map +1 -1
- package/dist/orchestrator.d.ts.map +1 -1
- package/dist/orchestrator.js +69 -11
- package/dist/orchestrator.js.map +1 -1
- package/dist/planner.js +18 -18
- package/dist/planner.js.map +1 -1
- package/dist/rollback.d.ts +1 -0
- package/dist/rollback.d.ts.map +1 -1
- package/dist/rollback.js +28 -4
- package/dist/rollback.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +22 -9
- package/dist/runtime.js.map +1 -1
- package/dist/session.d.ts +1 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +8 -1
- package/dist/session.js.map +1 -1
- package/dist/settings.d.ts +1 -0
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +8 -3
- package/dist/settings.js.map +1 -1
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +85 -14
- package/dist/shell.js.map +1 -1
- package/dist/task_runner.d.ts.map +1 -1
- package/dist/task_runner.js +20 -2
- package/dist/task_runner.js.map +1 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +709 -107
- package/dist/tui.js.map +1 -1
- package/dist/ui.d.ts +7 -0
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +113 -11
- package/dist/ui.js.map +1 -1
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +6 -0
- package/dist/workspace.js.map +1 -1
- package/dist/workspace_model.d.ts +1 -1
- package/dist/workspace_model.d.ts.map +1 -1
- package/dist/workspace_model.js +8 -1
- package/dist/workspace_model.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -17,20 +17,13 @@
|
|
|
17
17
|
|
|
18
18
|
## ✨ Features
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
│ ► Git awareness — branch, dirty state, warnings │
|
|
28
|
-
│ ► Dry-run mode — preview without applying │
|
|
29
|
-
│ ► Undo/rollback — revert last operation │
|
|
30
|
-
│ ► Task history — audit log of all operations │
|
|
31
|
-
│ ► Safe file ops — binary blocked, large files warned │
|
|
32
|
-
└─────────────────────────────────────────────────────────────┘
|
|
33
|
-
```
|
|
20
|
+
- **Interactive TUI** — Full terminal UI with command palette
|
|
21
|
+
- **Multiple Modes** — `edit`, `ask`, `explain`, `review`, `debug`, `auto`
|
|
22
|
+
- **Plan → Generate → Apply** — Safe workflow with explicit confirmation
|
|
23
|
+
- **Z.ai GLM Models** — Uses GLM-4.7, GLM-4.6, GLM-4.5
|
|
24
|
+
- **Git Awareness** — Branch, dirty state, warnings
|
|
25
|
+
- **Undo/Rollback** — Revert last operation
|
|
26
|
+
- **Cross-Platform** — Works on macOS, Linux, Windows
|
|
34
27
|
|
|
35
28
|
---
|
|
36
29
|
|
|
@@ -40,10 +33,21 @@
|
|
|
40
33
|
npm install -g @staticpayload/zai-code
|
|
41
34
|
```
|
|
42
35
|
|
|
43
|
-
|
|
36
|
+
## 🔑 Authentication
|
|
37
|
+
|
|
38
|
+
On first run, you'll be prompted for your Z.ai API key:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
zcode auth
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
This automatically:
|
|
45
|
+
1. Saves key to `~/.zai/auth.json`
|
|
46
|
+
2. Adds `export Z_KEY="..."` to your shell profile
|
|
44
47
|
|
|
48
|
+
Or set manually:
|
|
45
49
|
```bash
|
|
46
|
-
|
|
50
|
+
export Z_KEY="your-api-key"
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
---
|
|
@@ -54,88 +58,63 @@ npx @staticpayload/zai-code
|
|
|
54
58
|
zcode
|
|
55
59
|
```
|
|
56
60
|
|
|
57
|
-
This opens the interactive
|
|
61
|
+
This opens the interactive TUI:
|
|
58
62
|
|
|
59
63
|
```
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
███████╗ █████╗ ██╗ ██████╗ ██████╗ ██████╗ ███████╗
|
|
65
|
+
╚══███╔╝██╔══██╗██║ ██╔════╝██╔═══██╗██╔══██╗██╔════╝
|
|
66
|
+
███╔╝ ███████║██║ ██║ ██║ ██║██║ ██║█████╗
|
|
67
|
+
███╔╝ ██╔══██║██║ ██║ ██║ ██║██║ ██║██╔══╝
|
|
68
|
+
███████╗██║ ██║██║ ╚██████╗╚██████╔╝██████╔╝███████╗
|
|
69
|
+
╚══════╝╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝
|
|
64
70
|
|
|
65
|
-
|
|
66
|
-
|
|
71
|
+
Tips for getting started:
|
|
72
|
+
1. Type a task or question to begin.
|
|
73
|
+
2. Use /commands for direct actions.
|
|
74
|
+
3. /help for more information.
|
|
67
75
|
|
|
68
|
-
|
|
76
|
+
┌──────────────────────────────────────────────────────┐
|
|
77
|
+
│ ❯ │
|
|
78
|
+
└──────────────────────────────────────────────────────┘
|
|
79
|
+
|
|
80
|
+
[edit] master glm-4.7
|
|
69
81
|
```
|
|
70
82
|
|
|
71
83
|
---
|
|
72
84
|
|
|
73
85
|
## 📋 Commands
|
|
74
86
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
+
| Command | Description |
|
|
88
|
+
| --------------- | ------------------------------------------------ |
|
|
89
|
+
| `/help` | Show all commands |
|
|
90
|
+
| `/plan` | Generate execution plan |
|
|
91
|
+
| `/generate` | Create file changes |
|
|
92
|
+
| `/diff` | Review pending changes |
|
|
93
|
+
| `/apply` | Apply changes |
|
|
94
|
+
| `/undo` | Rollback last operation |
|
|
95
|
+
| `/mode <name>` | Switch mode (edit/ask/auto/explain/review/debug) |
|
|
96
|
+
| `/model <name>` | Switch model (glm-4.7/glm-4.6/glm-4.5) |
|
|
97
|
+
| `/settings` | Open settings menu |
|
|
98
|
+
| `/doctor` | System health check |
|
|
99
|
+
| `/exit` | Exit zcode |
|
|
87
100
|
|
|
88
|
-
|
|
89
|
-
```
|
|
90
|
-
┌────────────┬──────────────────────────────────┐
|
|
91
|
-
│ Command │ Description │
|
|
92
|
-
├────────────┼──────────────────────────────────┤
|
|
93
|
-
│ /plan │ Generate execution plan │
|
|
94
|
-
│ /generate │ Create file changes │
|
|
95
|
-
│ /diff │ Review pending changes │
|
|
96
|
-
│ /apply │ Apply changes │
|
|
97
|
-
│ /undo │ Rollback last operation │
|
|
98
|
-
└────────────┴──────────────────────────────────┘
|
|
99
|
-
```
|
|
101
|
+
---
|
|
100
102
|
|
|
101
|
-
|
|
102
|
-
```
|
|
103
|
-
┌─────────────────┬──────────────────────────────────┐
|
|
104
|
-
│ Command │ Description │
|
|
105
|
-
├─────────────────┼──────────────────────────────────┤
|
|
106
|
-
│ /mode <name> │ Set mode (edit/explain/review) │
|
|
107
|
-
│ /dry-run on|off │ Toggle dry-run mode │
|
|
108
|
-
│ /profile list │ List execution profiles │
|
|
109
|
-
│ /profile set │ Apply a profile │
|
|
110
|
-
└─────────────────┴──────────────────────────────────┘
|
|
111
|
-
```
|
|
103
|
+
## 🎯 Modes
|
|
112
104
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
│ /skip │ Skip current step │
|
|
122
|
-
│ /progress │ Show task progress │
|
|
123
|
-
└────────────┴──────────────────────────────────┘
|
|
124
|
-
```
|
|
105
|
+
| Mode | Description |
|
|
106
|
+
| --------- | ------------------------------------------------------- |
|
|
107
|
+
| `edit` | Default mode — plan and execute code changes |
|
|
108
|
+
| `ask` | Read-only — ask questions, no file modifications |
|
|
109
|
+
| `auto` | YOLO mode — execute tasks directly without manual steps |
|
|
110
|
+
| `explain` | Explain code without modifications |
|
|
111
|
+
| `review` | Review code and suggest improvements |
|
|
112
|
+
| `debug` | Debug issues with context-aware analysis |
|
|
125
113
|
|
|
126
|
-
|
|
114
|
+
Switch modes:
|
|
127
115
|
```
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
├────────────┼──────────────────────────────────┤
|
|
131
|
-
│ /settings │ Open interactive settings menu │
|
|
132
|
-
│ /git │ Show repository status │
|
|
133
|
-
│ /exec │ Run allowed shell command │
|
|
134
|
-
│ /history │ View task history │
|
|
135
|
-
│ /doctor │ System health check │
|
|
136
|
-
│ /reset │ Reset session │
|
|
137
|
-
│ /exit │ Exit zcode │
|
|
138
|
-
└────────────┴──────────────────────────────────┘
|
|
116
|
+
/mode auto
|
|
117
|
+
/mode ask
|
|
139
118
|
```
|
|
140
119
|
|
|
141
120
|
---
|
|
@@ -143,99 +122,51 @@ Mode: edit | State: clean
|
|
|
143
122
|
## 🔧 Workflow
|
|
144
123
|
|
|
145
124
|
```
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
│ └── Intent: CODE_EDIT │
|
|
153
|
-
│ │
|
|
154
|
-
│ 3. Run /plan │
|
|
155
|
-
│ └── Plan generated. Steps: 3 │
|
|
156
|
-
│ │
|
|
157
|
-
│ 4. Run /generate │
|
|
158
|
-
│ └── Changes generated. Files: 2 │
|
|
159
|
-
│ │
|
|
160
|
-
│ 5. Run /diff │
|
|
161
|
-
│ └── Review changes before applying │
|
|
162
|
-
│ │
|
|
163
|
-
│ 6. Run /apply │
|
|
164
|
-
│ └── Applied. Session clean. │
|
|
165
|
-
│ │
|
|
166
|
-
└──────────────────────────────────────────────────────────────┘
|
|
125
|
+
1. Enter task → "add error handling to auth.ts"
|
|
126
|
+
2. Intent detected → Intent: CODE_EDIT
|
|
127
|
+
3. /plan → Plan generated
|
|
128
|
+
4. /generate → Changes generated
|
|
129
|
+
5. /diff → Review changes
|
|
130
|
+
6. /apply → Applied!
|
|
167
131
|
```
|
|
168
132
|
|
|
169
133
|
**No changes are made without explicit `/apply`.**
|
|
170
134
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
## ⚙️ Settings Menu
|
|
174
|
-
|
|
175
|
-
Run `/settings` to open the interactive menu:
|
|
176
|
-
|
|
135
|
+
Or use **auto mode** for direct execution:
|
|
177
136
|
```
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
├────────────────────────────────────────────────┤
|
|
181
|
-
│ [Model] UI Execution Context Debug Exit │
|
|
182
|
-
├────────────────────────────────────────────────┤
|
|
183
|
-
│ Select AI model for execution │
|
|
184
|
-
│ > Model: [claude-sonnet-4] claude-3-5-sonnet │
|
|
185
|
-
│ │
|
|
186
|
-
│ │
|
|
187
|
-
├────────────────────────────────────────────────┤
|
|
188
|
-
│ │
|
|
189
|
-
├────────────────────────────────────────────────┤
|
|
190
|
-
│ ↑↓ navigate ←→ change Tab section Esc exit │
|
|
191
|
-
└────────────────────────────────────────────────┘
|
|
137
|
+
/mode auto
|
|
138
|
+
create a hello.py file that prints hello world
|
|
192
139
|
```
|
|
193
140
|
|
|
194
|
-
### Sections:
|
|
195
|
-
- **Model** — Select AI model
|
|
196
|
-
- **UI** — ASCII logo, colors, prompt style
|
|
197
|
-
- **Execution** — Confirmation mode, iteration limits
|
|
198
|
-
- **Context** — File scope, token limits
|
|
199
|
-
- **Debug** — Logging options
|
|
200
|
-
|
|
201
141
|
---
|
|
202
142
|
|
|
203
|
-
##
|
|
143
|
+
## ⚙️ Configuration
|
|
204
144
|
|
|
205
145
|
```
|
|
206
146
|
~/.zai/
|
|
207
|
-
├──
|
|
147
|
+
├── auth.json # API key (auto-generated)
|
|
148
|
+
├── settings.json # User settings
|
|
208
149
|
├── config.json # API configuration
|
|
209
|
-
|
|
210
|
-
└── history.log # Task history
|
|
211
|
-
|
|
212
|
-
.zai/
|
|
213
|
-
└── settings.json # Project-specific overrides
|
|
150
|
+
└── workspace.json # Workspace state
|
|
214
151
|
```
|
|
215
152
|
|
|
216
153
|
---
|
|
217
154
|
|
|
218
|
-
## 🔒 Safety
|
|
155
|
+
## 🔒 Safety
|
|
219
156
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
│ ✓ Binary blocked — prevents binary file modifications │
|
|
227
|
-
│ ✓ Large file warnings — alerts on files >50KB │
|
|
228
|
-
│ ✓ Shell allowlist — only safe commands permitted │
|
|
229
|
-
│ ✓ Bounded loops — max iterations enforced │
|
|
230
|
-
└─────────────────────────────────────────────────────────────┘
|
|
231
|
-
```
|
|
157
|
+
- ✅ No auto-execution in edit mode
|
|
158
|
+
- ✅ Dry-run mode available
|
|
159
|
+
- ✅ Undo/rollback support
|
|
160
|
+
- ✅ Git dirty state warnings
|
|
161
|
+
- ✅ Binary files blocked
|
|
162
|
+
- ✅ Large file warnings
|
|
232
163
|
|
|
233
164
|
---
|
|
234
165
|
|
|
235
166
|
## 📜 Requirements
|
|
236
167
|
|
|
237
|
-
- Node.js 18
|
|
238
|
-
- Z.ai API key
|
|
168
|
+
- Node.js 18+
|
|
169
|
+
- Z.ai API key ([Get one here](https://z.ai))
|
|
239
170
|
|
|
240
171
|
---
|
|
241
172
|
|
|
@@ -251,4 +182,4 @@ GPL-3.0
|
|
|
251
182
|
|
|
252
183
|
---
|
|
253
184
|
|
|
254
|
-
> ⚠️ **DISCLAIMER**: This project is an independent, open-source tool. It is **NOT** affiliated with, endorsed by, or sponsored by Z.ai, Anthropic, or any related entities.
|
|
185
|
+
> ⚠️ **DISCLAIMER**: This project is an independent, open-source tool. It is **NOT** affiliated with, endorsed by, or sponsored by Z.ai, Anthropic, or any related entities.
|
package/dist/apply.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,oBAAoB,CAoDtB;AAkCD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY,GACrB,mBAAmB,CAmFrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,CAAC,EAAE,YAAY,GACrB,mBAAmB,CA8FrB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,OAAO,CAAC,EAAE,YAAY,GACrB,WAAW,CAqDb"}
|
package/dist/apply.js
CHANGED
|
@@ -45,7 +45,14 @@ const rollback_1 = require("./rollback");
|
|
|
45
45
|
*/
|
|
46
46
|
function validatePath(filePath, basePath) {
|
|
47
47
|
try {
|
|
48
|
-
|
|
48
|
+
// Resolve relative to basePath if provided, otherwise cwd
|
|
49
|
+
let resolvedPath;
|
|
50
|
+
if (basePath) {
|
|
51
|
+
resolvedPath = path.resolve(basePath, filePath);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
resolvedPath = path.resolve(filePath);
|
|
55
|
+
}
|
|
49
56
|
// Normalize the path to remove any redundant components
|
|
50
57
|
resolvedPath = path.normalize(resolvedPath);
|
|
51
58
|
// If basePath is provided, ensure the resolved path is within it
|
|
@@ -55,7 +62,8 @@ function validatePath(filePath, basePath) {
|
|
|
55
62
|
// Check if the resolved path is within the base path
|
|
56
63
|
const relativePath = path.relative(resolvedBaseNormalized, resolvedPath);
|
|
57
64
|
// If the relative path starts with '..', it's outside the base path
|
|
58
|
-
|
|
65
|
+
// Also check for absolute paths on Windows (e.g., C:\)
|
|
66
|
+
if (relativePath.startsWith('..') || path.isAbsolute(relativePath)) {
|
|
59
67
|
return {
|
|
60
68
|
valid: false,
|
|
61
69
|
resolved: resolvedPath,
|
|
@@ -63,18 +71,16 @@ function validatePath(filePath, basePath) {
|
|
|
63
71
|
};
|
|
64
72
|
}
|
|
65
73
|
}
|
|
66
|
-
// Check for path traversal attempts in the original input
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (!basePath) {
|
|
74
|
+
// Check for path traversal attempts in the original input when no basePath
|
|
75
|
+
if (!basePath) {
|
|
76
|
+
const normalizedInput = path.normalize(filePath);
|
|
77
|
+
if (normalizedInput.startsWith('..')) {
|
|
71
78
|
return {
|
|
72
79
|
valid: false,
|
|
73
80
|
resolved: resolvedPath,
|
|
74
81
|
error: `Path '${filePath}' contains path traversal`,
|
|
75
82
|
};
|
|
76
83
|
}
|
|
77
|
-
// Re-check with basePath logic above
|
|
78
84
|
}
|
|
79
85
|
return { valid: true, resolved: resolvedPath };
|
|
80
86
|
}
|
|
@@ -158,13 +164,11 @@ function applyFileOperation(operation, filePath, content, options) {
|
|
|
158
164
|
// Actual operation
|
|
159
165
|
switch (operation) {
|
|
160
166
|
case 'create':
|
|
161
|
-
if (fs.existsSync(resolvedPath)) {
|
|
162
|
-
return { success: false, error: `File already exists: ${resolvedPath}` };
|
|
163
|
-
}
|
|
164
167
|
if (content === undefined) {
|
|
165
168
|
return { success: false, error: 'Content required for create operation' };
|
|
166
169
|
}
|
|
167
|
-
|
|
170
|
+
// Allow create to overwrite existing files (common use case for code generation)
|
|
171
|
+
(0, rollback_1.createBackup)(resolvedPath, fs.existsSync(resolvedPath) ? 'modify' : 'create');
|
|
168
172
|
return atomicWrite(resolvedPath, content);
|
|
169
173
|
case 'modify':
|
|
170
174
|
if (!fs.existsSync(resolvedPath)) {
|
|
@@ -208,6 +212,10 @@ function applyDiff(filePath, hunks, options) {
|
|
|
208
212
|
if (!fs.existsSync(resolvedPath)) {
|
|
209
213
|
return { success: false, error: `File does not exist: ${resolvedPath}` };
|
|
210
214
|
}
|
|
215
|
+
// Validate hunks
|
|
216
|
+
if (!hunks || hunks.length === 0) {
|
|
217
|
+
return { success: false, error: 'No hunks provided' };
|
|
218
|
+
}
|
|
211
219
|
// Read existing file
|
|
212
220
|
let lines;
|
|
213
221
|
try {
|
|
@@ -226,24 +234,43 @@ function applyDiff(filePath, hunks, options) {
|
|
|
226
234
|
// Apply each hunk
|
|
227
235
|
for (const hunk of sortedHunks) {
|
|
228
236
|
const { start, end, content } = hunk;
|
|
237
|
+
// Validate hunk has required fields
|
|
238
|
+
if (typeof start !== 'number' || typeof end !== 'number') {
|
|
239
|
+
return {
|
|
240
|
+
success: false,
|
|
241
|
+
error: `Invalid hunk: start and end must be numbers`,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
229
244
|
// Convert from 1-indexed to 0-indexed
|
|
230
245
|
const startIndex = start - 1;
|
|
231
246
|
const endIndex = end - 1;
|
|
232
247
|
// Validate line numbers
|
|
233
|
-
if (startIndex < 0
|
|
248
|
+
if (startIndex < 0) {
|
|
249
|
+
return {
|
|
250
|
+
success: false,
|
|
251
|
+
error: `Invalid hunk start line: ${start} (must be >= 1)`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
if (startIndex >= lines.length) {
|
|
234
255
|
return {
|
|
235
256
|
success: false,
|
|
236
257
|
error: `Invalid hunk start line: ${start} (file has ${lines.length} lines)`,
|
|
237
258
|
};
|
|
238
259
|
}
|
|
239
|
-
if (endIndex < startIndex
|
|
260
|
+
if (endIndex < startIndex) {
|
|
261
|
+
return {
|
|
262
|
+
success: false,
|
|
263
|
+
error: `Invalid hunk: end line (${end}) must be >= start line (${start})`,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
if (endIndex >= lines.length) {
|
|
240
267
|
return {
|
|
241
268
|
success: false,
|
|
242
269
|
error: `Invalid hunk end line: ${end} (file has ${lines.length} lines)`,
|
|
243
270
|
};
|
|
244
271
|
}
|
|
245
|
-
// Split content into lines
|
|
246
|
-
const newLines = content.split('\n');
|
|
272
|
+
// Split content into lines (handle undefined/null content)
|
|
273
|
+
const newLines = (content ?? '').split('\n');
|
|
247
274
|
// Replace lines from start to end with new content
|
|
248
275
|
lines.splice(startIndex, endIndex - startIndex + 1, ...newLines);
|
|
249
276
|
}
|
package/dist/apply.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCA,
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../src/apply.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAkBA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxD;AAGD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;AAGD,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG5D;AA+BD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAkBA,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxD;AAGD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG1D;AAGD,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAIlD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG5D;AA+BD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkBlE;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAwCvD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CA+EnD;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAc3D"}
|
package/dist/auth.js
CHANGED
|
@@ -119,11 +119,15 @@ async function httpsGet(url, headers) {
|
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
async function validateApiKey(key) {
|
|
122
|
+
if (!key || key.trim().length === 0) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
122
125
|
try {
|
|
123
126
|
const config = (0, config_1.loadConfig)();
|
|
124
127
|
// Z.ai (Zhipu AI) international coding API
|
|
125
128
|
const baseUrl = config.api?.baseUrl || 'https://api.z.ai/api/coding/paas/v4/';
|
|
126
|
-
const
|
|
129
|
+
const modelsUrl = baseUrl.endsWith('/') ? `${baseUrl}models` : `${baseUrl}/models`;
|
|
130
|
+
const response = await httpsGet(modelsUrl, {
|
|
127
131
|
'Authorization': `Bearer ${key}`,
|
|
128
132
|
});
|
|
129
133
|
return response.statusCode >= 200 && response.statusCode < 300;
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,8BAqBC;AAGD,8BAGC;AAGD,oCAIC;AAED,kDAGC;AA+BD,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/commands.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,CAiBvD;AA+lDD,wBAAsB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CA4B5E;AAGD,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C"}
|