Documentation Index
Fetch the complete documentation index at: https://docs.praison.ai/llms.txt
Use this file to discover all available pages before exploring further.
Code Editing
PraisonAI provides a powerful code editing module for AI-powered code manipulation, inspired by Kilo Code’s architecture.
Installation
The code editing module is included with PraisonAI:
Quick Start
from praisonai.code import (
set_workspace,
code_read_file,
code_write_file,
code_apply_diff,
code_execute_command,
CODE_TOOLS
)
# Set the workspace directory
set_workspace("/path/to/project")
# Read a file with line numbers
content = code_read_file("src/main.py")
print(content)
# Write to a file
code_write_file("src/new_file.py", "print('Hello, World!')")
# Execute a command
output = code_execute_command("python --version")
The code editing module uses a SEARCH/REPLACE diff format for precise code modifications:
from praisonai.code import code_apply_diff
diff = """
<<<<<<< SEARCH
def old_function():
return "old"
=======
def new_function():
return "new"
>>>>>>> REPLACE
"""
result = code_apply_diff("src/main.py", diff)
print(result) # "Successfully applied diff to src/main.py"
Line Number Hints
For faster matching in large files, use line number hints:
diff = """
<<<<<<< SEARCH :start_line:42
def target_function():
pass
=======
def target_function():
return "updated"
>>>>>>> REPLACE
"""
result = code_apply_diff("src/large_file.py", diff)
code_read_file
Read file contents with optional line range:
from praisonai.code import code_read_file
# Read entire file
content = code_read_file("src/main.py")
# Read specific lines (1-indexed)
content = code_read_file("src/main.py", start_line=10, end_line=20)
code_write_file
Create or overwrite a file:
from praisonai.code import code_write_file
code_write_file("src/new_file.py", """
def hello():
print("Hello, World!")
""")
code_apply_diff
Apply SEARCH/REPLACE diffs:
from praisonai.code import code_apply_diff
diff = """
<<<<<<< SEARCH
old_code
=======
new_code
>>>>>>> REPLACE
"""
result = code_apply_diff("src/file.py", diff)
code_search_replace
Apply multiple search/replace operations:
from praisonai.code import code_search_replace
operations = [
{"search": "old_name", "replace": "new_name"},
{"search": "deprecated_func", "replace": "new_func"}
]
result = code_search_replace("src/file.py", operations)
code_list_files
List files in a directory:
from praisonai.code import code_list_files
files = code_list_files("src/", recursive=True)
for f in files:
print(f)
code_execute_command
Execute shell commands:
from praisonai.code import code_execute_command
output = code_execute_command("python -m pytest tests/")
print(output)
Using with Agents
The code tools can be used directly with PraisonAI agents:
from praisonai import Agent
from praisonai.code import CODE_TOOLS
agent = Agent(
name="Code Editor",
role="Software Developer",
goal="Edit and improve code",
tools=CODE_TOOLS
)
result = agent.start("Refactor the main.py file to use async/await")
Features
Fuzzy Matching
The diff application uses fuzzy matching with Levenshtein distance:
from praisonai.code import code_apply_diff
# Even with slight differences, the diff will match
diff = """
<<<<<<< SEARCH
def function(): # slight whitespace difference
pass
=======
def function():
return True
>>>>>>> REPLACE
"""
result = code_apply_diff("src/file.py", diff, similarity_threshold=0.8)
Indentation Preservation
The module automatically preserves indentation when applying diffs:
diff = """
<<<<<<< SEARCH
def nested_function():
pass
=======
def nested_function():
return "preserved indentation"
>>>>>>> REPLACE
"""
Workspace Security
- Path Traversal Protection: Prevents access outside workspace
- Gitignore Support: Respects
.gitignore patterns
- Access Control: Configurable file access rules
Configuration
Set Workspace
from praisonai.code import set_workspace, get_workspace
# Set workspace
set_workspace("/path/to/project")
# Get current workspace
workspace = get_workspace()
print(workspace) # "/path/to/project"
Environment Variables
# Set default workspace
export PRAISONAI_CODE_WORKSPACE=/path/to/project
Module Structure
praisonai/code/
├── __init__.py # Main exports
├── agent_tools.py # Agent-compatible tool wrappers
├── diff/
│ └── diff_strategy.py # SEARCH/REPLACE diff with fuzzy matching
├── tools/
│ ├── read_file.py # Read files with line ranges
│ ├── write_file.py # Create/overwrite files
│ ├── list_files.py # List directory contents
│ ├── apply_diff.py # Apply SEARCH/REPLACE diffs
│ ├── search_replace.py # Multiple search/replace ops
│ └── execute_command.py # Run shell commands
└── utils/
├── file_utils.py # Line numbers, file ops
├── text_utils.py # Similarity, fuzzy search
└── ignore_utils.py # Gitignore, access control