nimcode 0.1.14__tar.gz → 0.1.16__tar.gz
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.
- {nimcode-0.1.14 → nimcode-0.1.16}/PKG-INFO +1 -1
- {nimcode-0.1.14 → nimcode-0.1.16}/setup.py +1 -1
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/repo_map.py +16 -2
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/stdio_server.py +29 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode.egg-info/PKG-INFO +1 -1
- {nimcode-0.1.14 → nimcode-0.1.16}/README.md +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/setup.cfg +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/__init__.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/agent.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/analytics.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/cli.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/config.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/lenient_parser.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/mcp_client.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/memory.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/nim_client.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/permissions.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/plugin_manager.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/repl.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/secret_scanner.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/swarm.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/tools.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/updater.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode/watcher.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode.egg-info/SOURCES.txt +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode.egg-info/dependency_links.txt +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode.egg-info/entry_points.txt +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode.egg-info/requires.txt +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/src/nimcode.egg-info/top_level.txt +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_agent.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_analytics.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_cli.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_config.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_lenient_parser.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_mcp_client.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_memory.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_nim_client.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_nimcoderules.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_permissions.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_plugin_manager.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_repl.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_repl_extra.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_repl_trust.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_repo_map.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_secret_scanner.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_tools.py +0 -0
- {nimcode-0.1.14 → nimcode-0.1.16}/tests/test_updater.py +0 -0
|
@@ -13,7 +13,7 @@ class RepoMapper:
|
|
|
13
13
|
try:
|
|
14
14
|
with open(filepath, "r", encoding="utf-8") as f:
|
|
15
15
|
content = f.read()
|
|
16
|
-
tree = ast.parse(content)
|
|
16
|
+
tree = ast.parse(content, filename=filepath)
|
|
17
17
|
|
|
18
18
|
lines = []
|
|
19
19
|
for node in tree.body:
|
|
@@ -37,11 +37,24 @@ class RepoMapper:
|
|
|
37
37
|
map_lines = []
|
|
38
38
|
map_lines.append(f"Repository Map for: {self.root_dir}\n")
|
|
39
39
|
|
|
40
|
+
file_count = 0
|
|
41
|
+
max_files = 1000
|
|
42
|
+
|
|
40
43
|
for root, dirs, files in os.walk(self.root_dir):
|
|
41
|
-
|
|
44
|
+
# Exclude specific dirs, hidden dirs, and common system folders
|
|
45
|
+
dirs[:] = [
|
|
46
|
+
d for d in dirs
|
|
47
|
+
if d not in self.exclude_dirs
|
|
48
|
+
and not d.startswith('.')
|
|
49
|
+
and d.lower() not in ('appdata', 'windows', 'program files', 'program files (x86)', 'temp')
|
|
50
|
+
]
|
|
42
51
|
|
|
43
52
|
for file in files:
|
|
44
53
|
if file.endswith(".py"):
|
|
54
|
+
if file_count >= max_files:
|
|
55
|
+
map_lines.append("... (Repository Map Truncated: Too many Python files) ...\n")
|
|
56
|
+
return "\n".join(map_lines)
|
|
57
|
+
|
|
45
58
|
full_path = os.path.join(root, file)
|
|
46
59
|
rel_path = os.path.relpath(full_path, self.root_dir)
|
|
47
60
|
map_lines.append(f"FILE: {rel_path}")
|
|
@@ -49,5 +62,6 @@ class RepoMapper:
|
|
|
49
62
|
file_map = self._parse_python_file(full_path)
|
|
50
63
|
map_lines.append(file_map)
|
|
51
64
|
map_lines.append("")
|
|
65
|
+
file_count += 1
|
|
52
66
|
|
|
53
67
|
return "\n".join(map_lines)
|
|
@@ -59,6 +59,35 @@ class StdioServer:
|
|
|
59
59
|
|
|
60
60
|
self.agent._stream_response = stdio_stream_response
|
|
61
61
|
|
|
62
|
+
# Override rich.console.Console.print to capture slash command outputs and general prints
|
|
63
|
+
from rich.console import Console
|
|
64
|
+
original_print = Console.print
|
|
65
|
+
|
|
66
|
+
def patched_print(console_self, *objects, **kwargs):
|
|
67
|
+
# Try to extract raw string from objects
|
|
68
|
+
text_parts = []
|
|
69
|
+
for obj in objects:
|
|
70
|
+
if isinstance(obj, str):
|
|
71
|
+
text_parts.append(obj)
|
|
72
|
+
elif hasattr(obj, "__rich_console__") or hasattr(obj, "__rich_measure__"):
|
|
73
|
+
# For complex rich objects (like Markdown), we could render it to text
|
|
74
|
+
try:
|
|
75
|
+
with console_self.capture() as capture:
|
|
76
|
+
original_print(console_self, obj, **kwargs)
|
|
77
|
+
text_parts.append(capture.get())
|
|
78
|
+
except Exception:
|
|
79
|
+
text_parts.append(str(obj))
|
|
80
|
+
else:
|
|
81
|
+
text_parts.append(str(obj))
|
|
82
|
+
|
|
83
|
+
if text_parts:
|
|
84
|
+
content = " ".join(text_parts)
|
|
85
|
+
# Strip excessive ANSI codes if capture includes them, but we want plain text or markdown
|
|
86
|
+
# For simplicity, just send it to the UI
|
|
87
|
+
self.send_message({"type": "info", "content": content})
|
|
88
|
+
|
|
89
|
+
Console.print = patched_print
|
|
90
|
+
|
|
62
91
|
def send_message(self, message: dict):
|
|
63
92
|
"""Send a JSON message to original stdout."""
|
|
64
93
|
try:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|