grok-cli-acp 0.1.2

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.
Files changed (100) hide show
  1. package/.env.example +42 -0
  2. package/.github/workflows/ci.yml +30 -0
  3. package/.github/workflows/rust.yml +22 -0
  4. package/.grok/.env.example +85 -0
  5. package/.grok/COMPLETE_FIX_SUMMARY.md +466 -0
  6. package/.grok/ENV_CONFIG_GUIDE.md +173 -0
  7. package/.grok/QUICK_REFERENCE.md +180 -0
  8. package/.grok/README.md +104 -0
  9. package/.grok/TESTING_GUIDE.md +393 -0
  10. package/CHANGELOG.md +465 -0
  11. package/CODE_REVIEW_SUMMARY.md +414 -0
  12. package/COMPLETE_FIX_SUMMARY.md +415 -0
  13. package/CONFIGURATION.md +489 -0
  14. package/CONTEXT_FILES_GUIDE.md +419 -0
  15. package/CONTRIBUTING.md +55 -0
  16. package/CURSOR_POSITION_FIX.md +206 -0
  17. package/Cargo.toml +88 -0
  18. package/ERROR_HANDLING_REPORT.md +361 -0
  19. package/FINAL_FIX_SUMMARY.md +462 -0
  20. package/FIXES.md +37 -0
  21. package/FIXES_SUMMARY.md +87 -0
  22. package/GROK_API_MIGRATION_SUMMARY.md +111 -0
  23. package/LICENSE +22 -0
  24. package/MIGRATION_TO_GROK_API.md +223 -0
  25. package/README.md +504 -0
  26. package/REVIEW_COMPLETE.md +416 -0
  27. package/REVIEW_QUICK_REFERENCE.md +173 -0
  28. package/SECURITY.md +463 -0
  29. package/SECURITY_AUDIT.md +661 -0
  30. package/SETUP.md +287 -0
  31. package/TESTING_TOOLS.md +88 -0
  32. package/TESTING_TOOL_EXECUTION.md +239 -0
  33. package/TOOL_EXECUTION_FIX.md +491 -0
  34. package/VERIFICATION_CHECKLIST.md +419 -0
  35. package/docs/API.md +74 -0
  36. package/docs/CHAT_LOGGING.md +39 -0
  37. package/docs/CURSOR_FIX_DEMO.md +306 -0
  38. package/docs/ERROR_HANDLING_GUIDE.md +547 -0
  39. package/docs/FILE_OPERATIONS.md +449 -0
  40. package/docs/INTERACTIVE.md +401 -0
  41. package/docs/PROJECT_CREATION_GUIDE.md +570 -0
  42. package/docs/QUICKSTART.md +378 -0
  43. package/docs/QUICK_REFERENCE.md +691 -0
  44. package/docs/RELEASE_NOTES_0.1.2.md +240 -0
  45. package/docs/TOOLS.md +459 -0
  46. package/docs/TOOLS_QUICK_REFERENCE.md +210 -0
  47. package/docs/ZED_INTEGRATION.md +371 -0
  48. package/docs/extensions.md +464 -0
  49. package/docs/settings.md +293 -0
  50. package/examples/extensions/logging-hook/README.md +91 -0
  51. package/examples/extensions/logging-hook/extension.json +22 -0
  52. package/package.json +30 -0
  53. package/scripts/test_acp.py +252 -0
  54. package/scripts/test_acp.sh +143 -0
  55. package/scripts/test_acp_simple.sh +72 -0
  56. package/src/acp/mod.rs +741 -0
  57. package/src/acp/protocol.rs +323 -0
  58. package/src/acp/security.rs +298 -0
  59. package/src/acp/tools.rs +697 -0
  60. package/src/bin/banner_demo.rs +216 -0
  61. package/src/bin/docgen.rs +18 -0
  62. package/src/bin/installer.rs +217 -0
  63. package/src/cli/app.rs +310 -0
  64. package/src/cli/commands/acp.rs +721 -0
  65. package/src/cli/commands/chat.rs +485 -0
  66. package/src/cli/commands/code.rs +513 -0
  67. package/src/cli/commands/config.rs +394 -0
  68. package/src/cli/commands/health.rs +442 -0
  69. package/src/cli/commands/history.rs +421 -0
  70. package/src/cli/commands/mod.rs +14 -0
  71. package/src/cli/commands/settings.rs +1384 -0
  72. package/src/cli/mod.rs +166 -0
  73. package/src/config/mod.rs +2212 -0
  74. package/src/display/ascii_art.rs +139 -0
  75. package/src/display/banner.rs +289 -0
  76. package/src/display/components/input.rs +323 -0
  77. package/src/display/components/mod.rs +2 -0
  78. package/src/display/components/settings_list.rs +306 -0
  79. package/src/display/interactive.rs +1255 -0
  80. package/src/display/mod.rs +62 -0
  81. package/src/display/terminal.rs +42 -0
  82. package/src/display/tips.rs +316 -0
  83. package/src/grok_client_ext.rs +177 -0
  84. package/src/hooks/loader.rs +407 -0
  85. package/src/hooks/mod.rs +158 -0
  86. package/src/lib.rs +174 -0
  87. package/src/main.rs +65 -0
  88. package/src/mcp/client.rs +195 -0
  89. package/src/mcp/config.rs +20 -0
  90. package/src/mcp/mod.rs +6 -0
  91. package/src/mcp/protocol.rs +67 -0
  92. package/src/utils/auth.rs +41 -0
  93. package/src/utils/chat_logger.rs +568 -0
  94. package/src/utils/context.rs +390 -0
  95. package/src/utils/mod.rs +16 -0
  96. package/src/utils/network.rs +320 -0
  97. package/src/utils/rate_limiter.rs +166 -0
  98. package/src/utils/session.rs +73 -0
  99. package/src/utils/shell_permissions.rs +389 -0
  100. package/src/utils/telemetry.rs +41 -0
@@ -0,0 +1,491 @@
1
+ # Tool Execution Fix - Automated File Operations
2
+
3
+ ## Problem Statement
4
+
5
+ When users asked `grok-cli` to create projects or files, the AI would respond with **text descriptions** of what to do instead of actually creating the files. This required users to manually copy-paste content and create files themselves.
6
+
7
+ ### Example of the Problem
8
+
9
+ **Before (v0.1.1):**
10
+ ```
11
+ User: Create a new Rust project structure
12
+
13
+ Grok: I'll help you create a Rust project! Here's what you need:
14
+
15
+ 1. Create a file called Cargo.toml with this content:
16
+ [package]
17
+ name = "my-project"
18
+ version = "0.1.0"
19
+
20
+ 2. Create src/main.rs with:
21
+ fn main() {
22
+ println!("Hello, world!");
23
+ }
24
+
25
+ 3. Create a .gitignore file...
26
+ ```
27
+
28
+ **Result**: User had to manually create each file and copy the content.
29
+
30
+ ## Root Cause
31
+
32
+ The tool calling functionality existed but was **only enabled in ACP mode** (for Zed editor integration). The interactive mode (`src/display/interactive.rs`) had a completely separate code path that did not:
33
+ 1. Send tool definitions to the Grok API
34
+ 2. Parse tool calls from responses
35
+ 3. Execute the requested file operations
36
+
37
+ The `send_to_grok()` function in interactive mode was passing `None` for the tools parameter, causing Grok to respond with text instructions instead of executable tool calls.
38
+
39
+ ## Solution Implemented
40
+
41
+ ### Changes Made
42
+
43
+ #### 1. Made ACP Modules Public (`src/acp/mod.rs`)
44
+ ```rust
45
+ // Before:
46
+ mod security;
47
+ mod tools;
48
+
49
+ // After:
50
+ pub mod security;
51
+ pub mod tools;
52
+ ```
53
+
54
+ This allows the chat command to access security policies and tool execution functions.
55
+
56
+ #### 2. Enhanced Interactive Mode (`src/display/interactive.rs`)
57
+
58
+ **This was the critical fix for terminal/PowerShell usage!**
59
+
60
+ The interactive mode runs when you type `grok` without arguments. Updated the `send_to_grok()` function to:
61
+ - Import `SecurityPolicy` and `tools` from the ACP module
62
+ - Include tool definitions in API requests
63
+ - Parse tool calls from responses
64
+ - Execute each tool call with proper security validation
65
+ - Display execution results with visual feedback
66
+
67
+ **Key changes:**
68
+ ```rust
69
+ // Added imports
70
+ use crate::acp::security::SecurityPolicy;
71
+ use crate::acp::tools;
72
+
73
+ // In send_to_grok():
74
+ // Get tool definitions
75
+ let tools = tools::get_tool_definitions();
76
+
77
+ // Set up security
78
+ let mut security = SecurityPolicy::new();
79
+ security.add_trusted_directory(&session.current_directory);
80
+
81
+ // Send to API with tools
82
+ let response = client.chat_completion_with_history(
83
+ &messages,
84
+ session.temperature,
85
+ session.max_tokens,
86
+ &session.model,
87
+ Some(tools) // ← Now includes tools instead of None
88
+ ).await?;
89
+
90
+ // Handle tool calls
91
+ if let Some(tool_calls) = &response.tool_calls {
92
+ for tool_call in tool_calls {
93
+ execute_tool_call_interactive(tool_call, &security)?;
94
+ }
95
+ }
96
+ ```
97
+
98
+ **New `execute_tool_call_interactive()` function:**
99
+ Handles execution of all 6 tools in the interactive mode.
100
+
101
+ #### 3. Enhanced Chat Commands (`src/cli/commands/chat.rs`)
102
+
103
+ **Added tool calling support:**
104
+ - Import necessary types: `SecurityPolicy`, `tools`, `ToolCall`
105
+ - Include tool definitions in API requests
106
+ - Parse tool calls from responses
107
+ - Execute each tool call with proper security validation
108
+ - Display execution results with visual feedback
109
+
110
+ **Key additions:**
111
+ ```rust
112
+ // Set up security policy
113
+ let mut security = SecurityPolicy::new();
114
+ security.add_trusted_directory(&env::current_dir()?);
115
+
116
+ // Get tool definitions
117
+ let tools = tools::get_tool_definitions();
118
+
119
+ // Send to API with tools
120
+ let response = client.chat_completion_with_history(
121
+ &messages,
122
+ temperature,
123
+ max_tokens,
124
+ model,
125
+ Some(tools) // ← Tool definitions included
126
+ ).await?;
127
+
128
+ // Handle tool calls in response
129
+ if let Some(tool_calls) = &response.tool_calls {
130
+ for tool_call in tool_calls {
131
+ execute_tool_call(tool_call, &security)?;
132
+ }
133
+ }
134
+ ```
135
+
136
+ **New `execute_tool_call` function:**
137
+ Handles execution of:
138
+ - `write_file` - Create/overwrite files
139
+ - `read_file` - Read file contents
140
+ - `replace` - Find and replace in files
141
+ - `list_directory` - List directory contents
142
+ - `glob_search` - Find files by pattern
143
+ - `save_memory` - Save facts to memory
144
+
145
+ #### 4. Updated Documentation
146
+
147
+ **Created comprehensive guides:**
148
+ - `docs/FILE_OPERATIONS.md` (402 lines) - Complete feature documentation
149
+ - `docs/PROJECT_CREATION_GUIDE.md` (561 lines) - Step-by-step tutorials
150
+ - Updated `README.md` with quick examples
151
+ - Updated `CHANGELOG.md` with feature details
152
+
153
+ ## How It Works Now
154
+
155
+ ### After (v0.1.2+)
156
+
157
+ **User Experience:**
158
+ ```
159
+ User: Create a new Rust project structure
160
+
161
+ Grok is executing operations...
162
+ ✓ Successfully wrote to Cargo.toml
163
+ ✓ Successfully wrote to src/main.rs
164
+ ✓ Successfully wrote to .gitignore
165
+ All operations completed!
166
+ ```
167
+
168
+ **Result**: Files are automatically created in the current directory!
169
+
170
+ ### Technical Flow
171
+
172
+ ```
173
+ ┌─────────────────────────────────────────────────────┐
174
+ │ 1. User makes request │
175
+ │ "Create a new Rust project" │
176
+ └─────────────────────┬───────────────────────────────┘
177
+
178
+
179
+ ┌─────────────────────────────────────────────────────┐
180
+ │ 2. CLI sends to Grok API with tool definitions │
181
+ │ - Messages (conversation history) │
182
+ │ - Tool schemas (write_file, read_file, etc.) │
183
+ └─────────────────────┬───────────────────────────────┘
184
+
185
+
186
+ ┌─────────────────────────────────────────────────────┐
187
+ │ 3. Grok AI processes and returns response │
188
+ │ { │
189
+ │ "content": "I'll create those files", │
190
+ │ "tool_calls": [ │
191
+ │ { │
192
+ │ "function": { │
193
+ │ "name": "write_file", │
194
+ │ "arguments": "{...}" │
195
+ │ } │
196
+ │ } │
197
+ │ ] │
198
+ │ } │
199
+ └─────────────────────┬───────────────────────────────┘
200
+
201
+
202
+ ┌─────────────────────────────────────────────────────┐
203
+ │ 4. CLI parses tool_calls array │
204
+ │ - Extracts function name │
205
+ │ - Parses arguments JSON │
206
+ └─────────────────────┬───────────────────────────────┘
207
+
208
+
209
+ ┌─────────────────────────────────────────────────────┐
210
+ │ 5. Execute each tool with security validation │
211
+ │ - Check path is in trusted directory │
212
+ │ - Create parent directories if needed │
213
+ │ - Write file / perform operation │
214
+ │ - Display confirmation │
215
+ └─────────────────────────────────────────────────────┘
216
+ ```
217
+
218
+ ## Security Features
219
+
220
+ ### Path Restrictions
221
+ - Operations limited to **current working directory** and subdirectories
222
+ - No access to parent directories (`../` blocked)
223
+ - No access to system directories
224
+ - Security policy validated for every operation
225
+
226
+ ### Example Security Check
227
+ ```rust
228
+ pub fn write_file(path: &str, content: &str, security: &SecurityPolicy) -> Result<String> {
229
+ // Resolve to absolute canonical path
230
+ let resolved_path = security.resolve_path(path)?;
231
+
232
+ // Check if path is trusted
233
+ if !security.is_path_trusted(&resolved_path) {
234
+ return Err(anyhow!("Access denied: Path not in trusted directory"));
235
+ }
236
+
237
+ // Create parent directories
238
+ if let Some(parent) = resolved_path.parent() {
239
+ fs::create_dir_all(parent)?;
240
+ }
241
+
242
+ // Write file
243
+ fs::write(&resolved_path, content)?;
244
+ Ok(format!("Successfully wrote to {}", resolved_path.display()))
245
+ }
246
+ ```
247
+
248
+ ## Available Tools
249
+
250
+ ### 1. write_file
251
+ Creates or overwrites files with content.
252
+
253
+ **Example:**
254
+ ```
255
+ You: Create a hello world program in main.rs
256
+ ✓ Successfully wrote to main.rs
257
+ ```
258
+
259
+ ### 2. read_file
260
+ Reads file contents.
261
+
262
+ **Example:**
263
+ ```
264
+ You: Show me what's in Cargo.toml
265
+ ✓ Read 245 bytes from Cargo.toml
266
+ ```
267
+
268
+ ### 3. replace
269
+ Find and replace text in files.
270
+
271
+ **Example:**
272
+ ```
273
+ You: Change version to 2.0.0 in Cargo.toml
274
+ ✓ Successfully replaced 1 occurrence(s) in Cargo.toml
275
+ ```
276
+
277
+ ### 4. list_directory
278
+ Lists directory contents.
279
+
280
+ **Example:**
281
+ ```
282
+ You: What files are in src/?
283
+ ✓ Directory contents of src/:
284
+ main.rs
285
+ lib.rs
286
+ utils/
287
+ ```
288
+
289
+ ### 5. glob_search
290
+ Finds files matching patterns.
291
+
292
+ **Example:**
293
+ ```
294
+ You: Find all .rs files
295
+ ✓ Files matching '**/*.rs':
296
+ src/main.rs
297
+ src/lib.rs
298
+ src/utils/helper.rs
299
+ ```
300
+
301
+ ### 6. save_memory
302
+ Saves facts to long-term memory.
303
+
304
+ **Example:**
305
+ ```
306
+ You: Remember that this project uses PostgreSQL
307
+ ✓ Fact saved to memory.
308
+ ```
309
+
310
+ ## Usage Examples
311
+
312
+ ### Create a New Project
313
+ ```bash
314
+ mkdir my-project && cd my-project
315
+ grok
316
+
317
+ You: Create a Rust CLI application with:
318
+ - Cargo.toml for a binary called my-app
319
+ - src/main.rs with clap argument parsing
320
+ - README.md with basic documentation
321
+ - .gitignore for Rust
322
+ ```
323
+
324
+ ### Modify Existing Files
325
+ ```bash
326
+ cd existing-project
327
+ grok
328
+
329
+ You: Add error handling to src/main.rs
330
+ You: Update dependencies in Cargo.toml
331
+ You: Create a new module src/database.rs
332
+ ```
333
+
334
+ ### Generate Documentation
335
+ ```bash
336
+ grok
337
+
338
+ You: Create documentation files:
339
+ - docs/ARCHITECTURE.md
340
+ - docs/API.md
341
+ - docs/SETUP.md
342
+ ```
343
+
344
+ ## Benefits
345
+
346
+ ### 1. Dramatic Productivity Boost
347
+ - **Before**: 10+ minutes of manual file creation and copy-pasting
348
+ - **After**: Instant file creation with a single request
349
+
350
+ ### 2. Natural Interaction
351
+ Just ask naturally:
352
+ - "Create a web server"
353
+ - "Add a config file"
354
+ - "Set up a new project"
355
+
356
+ ### 3. Reduced Errors
357
+ - No typos from manual copying
358
+ - Consistent formatting
359
+ - Proper directory structure
360
+
361
+ ### 4. Iterative Development
362
+ ```
363
+ You: Create basic project structure
364
+ You: Add database module
365
+ You: Add authentication
366
+ You: Add tests
367
+ ```
368
+
369
+ Each step builds on the previous, all automated.
370
+
371
+ ## Breaking Changes
372
+
373
+ None! This is a **new feature** that doesn't affect existing functionality:
374
+ - Existing commands work exactly the same
375
+ - Tool execution is automatically enabled
376
+ - Backward compatible with all previous versions
377
+
378
+ ## Upgrade Instructions
379
+
380
+ ### For Users
381
+ 1. Update to v0.1.2 or later:
382
+ ```bash
383
+ cd grok-cli
384
+ git pull
385
+ cargo build --release
386
+ ```
387
+
388
+ 2. Start using tool execution:
389
+ ```bash
390
+ grok
391
+ You: Create a new project
392
+ ```
393
+
394
+ That's it! Tool execution is enabled by default.
395
+
396
+ ### For Developers
397
+ If you're integrating grok-cli as a library:
398
+ ```rust
399
+ use grok_cli::acp::{security::SecurityPolicy, tools};
400
+
401
+ // Set up security
402
+ let mut security = SecurityPolicy::new();
403
+ security.add_trusted_directory(&current_dir);
404
+
405
+ // Execute tools
406
+ tools::write_file("hello.txt", "Hello, world!", &security)?;
407
+ ```
408
+
409
+ ## Testing
410
+
411
+ ### Verified Scenarios
412
+ ✅ Create new Rust projects
413
+ ✅ Create web API projects
414
+ ✅ Modify existing files
415
+ ✅ Generate documentation
416
+ ✅ Security restrictions work
417
+ ✅ Error handling works
418
+ ✅ All existing tests pass (82/82)
419
+
420
+ ### Test Coverage
421
+ ```bash
422
+ cargo test --lib --release
423
+ running 83 tests
424
+ test result: ok. 82 passed; 0 failed; 1 ignored
425
+ ```
426
+
427
+ ## Performance Impact
428
+
429
+ Minimal performance overhead:
430
+ - Tool definitions add ~2KB to API requests
431
+ - Tool execution is sequential (fast for file operations)
432
+ - No impact when tools aren't used
433
+
434
+ ## Future Enhancements
435
+
436
+ Planned improvements:
437
+ - [ ] Confirmation prompts for destructive operations
438
+ - [ ] Undo/redo for file operations
439
+ - [ ] Dry-run mode to preview changes
440
+ - [ ] Git integration for automatic commits
441
+ - [ ] Batch operation confirmation
442
+ - [ ] File templates and scaffolding
443
+
444
+ ## Troubleshooting
445
+
446
+ ### Files Not Created?
447
+ 1. Check version: `grok --version` (need v0.1.2+)
448
+ 2. Be explicit: "Create the file..." not "Maybe create..."
449
+ 3. Use interactive mode: `grok` not `grok chat "..."`
450
+
451
+ ### Permission Denied?
452
+ 1. Make sure you're in your project directory
453
+ 2. Don't try to access parent directories
454
+ 3. System directories are protected
455
+
456
+ ### Wrong Content?
457
+ 1. Ask to read file first: "Show me main.rs"
458
+ 2. Use replace for targeted edits
459
+ 3. Be specific about requirements
460
+
461
+ ## Documentation
462
+
463
+ Complete documentation available:
464
+ - **Quick Start**: README.md
465
+ - **Detailed Guide**: docs/FILE_OPERATIONS.md (402 lines)
466
+ - **Tutorial**: docs/PROJECT_CREATION_GUIDE.md (561 lines)
467
+ - **Configuration**: docs/CONFIGURATION.md
468
+ - **Changelog**: CHANGELOG.md
469
+
470
+ ## Contributing
471
+
472
+ Want to add more tools? See:
473
+ - `src/acp/tools.rs` - Tool implementations
474
+ - `src/cli/commands/chat.rs` - Tool execution handler
475
+ - Tool definition format follows OpenAI function calling spec
476
+
477
+ ## Credits
478
+
479
+ **Implementation**: AI-assisted development with Grok CLI
480
+ **Feature Request**: User feedback about manual file creation
481
+ **Testing**: Windows 11, Rust 2024 edition
482
+ **Version**: 0.1.2
483
+ **Date**: January 2026
484
+
485
+ ---
486
+
487
+ **Status**: ✅ Stable and Production Ready
488
+ **Impact**: 🚀 High - Dramatically improves user experience
489
+ **Breaking Changes**: ❌ None - Fully backward compatible
490
+
491
+ For questions or issues, see: https://github.com/microtech/grok-cli/issues