ollama-coding-agent 0.2.0__tar.gz → 0.4.0__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.
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/PKG-INFO +31 -26
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/PYPI_README.md +30 -25
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/README.md +36 -26
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/mcp_client.py +17 -1
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/PKG-INFO +31 -26
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/pyproject.toml +1 -1
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/LICENSE +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/__init__.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/__main__.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/agent.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/cli.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/config.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/intent.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/mcp_server.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/ollama_client.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/session_store.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/tools.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/coding_agent/ui.py +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/SOURCES.txt +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/dependency_links.txt +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/entry_points.txt +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/requires.txt +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/top_level.txt +0 -0
- {ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ollama-coding-agent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: AI coding agent driving Qwen Coder (or any Ollama-compatible model) through a scoped toolset via MCP
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/HarryChen1995/coding_agent
|
|
@@ -82,31 +82,36 @@ in-process — the agent is an MCP *client* that talks to a tool server over
|
|
|
82
82
|
stdio:
|
|
83
83
|
|
|
84
84
|
```
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
85
|
+
+-----------------------------+
|
|
86
|
+
| CLI / REPL |
|
|
87
|
+
+-----------------------------+
|
|
88
|
+
|
|
|
89
|
+
v
|
|
90
|
+
+-----------------------------+
|
|
91
|
+
| Agent loop |
|
|
92
|
+
| parse intent, call model, |
|
|
93
|
+
| approve, execute, persist |
|
|
94
|
+
+-----------------------------+
|
|
95
|
+
|
|
|
96
|
+
v
|
|
97
|
+
+-----------------------------+
|
|
98
|
+
| MCP client |
|
|
99
|
+
| built-in + custom servers |
|
|
100
|
+
| merged into one tool list |
|
|
101
|
+
+-----------------------------+
|
|
102
|
+
|
|
|
103
|
+
stdio / SSE / streamable-http
|
|
104
|
+
v
|
|
105
|
+
+-----------------------------+
|
|
106
|
+
| MCP server(s) |
|
|
107
|
+
+-----------------------------+
|
|
108
|
+
|
|
|
109
|
+
v
|
|
110
|
+
+-----------------------------+
|
|
111
|
+
| Tools |
|
|
112
|
+
| read / write / edit / |
|
|
113
|
+
| search / shell |
|
|
114
|
+
+-----------------------------+
|
|
110
115
|
```
|
|
111
116
|
|
|
112
117
|
Because tools are exposed over MCP, any MCP-compatible client — Claude
|
|
@@ -61,31 +61,36 @@ in-process — the agent is an MCP *client* that talks to a tool server over
|
|
|
61
61
|
stdio:
|
|
62
62
|
|
|
63
63
|
```
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
64
|
+
+-----------------------------+
|
|
65
|
+
| CLI / REPL |
|
|
66
|
+
+-----------------------------+
|
|
67
|
+
|
|
|
68
|
+
v
|
|
69
|
+
+-----------------------------+
|
|
70
|
+
| Agent loop |
|
|
71
|
+
| parse intent, call model, |
|
|
72
|
+
| approve, execute, persist |
|
|
73
|
+
+-----------------------------+
|
|
74
|
+
|
|
|
75
|
+
v
|
|
76
|
+
+-----------------------------+
|
|
77
|
+
| MCP client |
|
|
78
|
+
| built-in + custom servers |
|
|
79
|
+
| merged into one tool list |
|
|
80
|
+
+-----------------------------+
|
|
81
|
+
|
|
|
82
|
+
stdio / SSE / streamable-http
|
|
83
|
+
v
|
|
84
|
+
+-----------------------------+
|
|
85
|
+
| MCP server(s) |
|
|
86
|
+
+-----------------------------+
|
|
87
|
+
|
|
|
88
|
+
v
|
|
89
|
+
+-----------------------------+
|
|
90
|
+
| Tools |
|
|
91
|
+
| read / write / edit / |
|
|
92
|
+
| search / shell |
|
|
93
|
+
+-----------------------------+
|
|
89
94
|
```
|
|
90
95
|
|
|
91
96
|
Because tools are exposed over MCP, any MCP-compatible client — Claude
|
|
@@ -162,32 +162,42 @@ converts it to Ollama's function-calling schema, and calls tools through the
|
|
|
162
162
|
MCP session instead of Python function calls directly.
|
|
163
163
|
|
|
164
164
|
```
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
165
|
+
+------------------------------------------+
|
|
166
|
+
| cli.py (Typer CLI / REPL) |
|
|
167
|
+
+------------------------------------------+
|
|
168
|
+
|
|
|
169
|
+
v
|
|
170
|
+
+------------------------------------------+
|
|
171
|
+
| agent.py |
|
|
172
|
+
| call model, parse intent, approve, |
|
|
173
|
+
| execute tools, persist, repeat |
|
|
174
|
+
+------------------------------------------+
|
|
175
|
+
|
|
|
176
|
+
v
|
|
177
|
+
+------------------------------------------+
|
|
178
|
+
| ollama_client.py (model calls) |
|
|
179
|
+
| session_store.py (SQLite history) |
|
|
180
|
+
+------------------------------------------+
|
|
181
|
+
|
|
|
182
|
+
v
|
|
183
|
+
+------------------------------------------+
|
|
184
|
+
| mcp_client.py |
|
|
185
|
+
| built-in + custom servers merged |
|
|
186
|
+
| into one namespaced tool list |
|
|
187
|
+
+------------------------------------------+
|
|
188
|
+
|
|
|
189
|
+
stdio / SSE / streamable-http
|
|
190
|
+
v
|
|
191
|
+
+------------------------------------------+
|
|
192
|
+
| mcp_server.py / custom MCP server(s) |
|
|
193
|
+
+------------------------------------------+
|
|
194
|
+
|
|
|
195
|
+
v
|
|
196
|
+
+------------------------------------------+
|
|
197
|
+
| tools.py |
|
|
198
|
+
| read / write / edit / search / shell, |
|
|
199
|
+
| each scoped to project_root |
|
|
200
|
+
+------------------------------------------+
|
|
191
201
|
```
|
|
192
202
|
|
|
193
203
|
What this buys you:
|
|
@@ -40,6 +40,22 @@ def save_mcp_config(path: str, servers: dict) -> None:
|
|
|
40
40
|
f.write("\n")
|
|
41
41
|
|
|
42
42
|
|
|
43
|
+
def _split_command(s: str) -> list:
|
|
44
|
+
"""Split a command string into tokens, Windows-path-safe. shlex.split()'s
|
|
45
|
+
default POSIX mode treats backslash as an escape character, which
|
|
46
|
+
silently eats every backslash in a Windows path (`C:\\Users\\...` becomes
|
|
47
|
+
`C:Users...`) — so split in non-POSIX mode instead (preserves backslashes
|
|
48
|
+
literally) and manually strip matching quotes non-POSIX mode leaves on
|
|
49
|
+
quoted tokens."""
|
|
50
|
+
tokens = shlex.split(s, posix=False)
|
|
51
|
+
cleaned = []
|
|
52
|
+
for t in tokens:
|
|
53
|
+
if len(t) >= 2 and t[0] == t[-1] and t[0] in ('"', "'"):
|
|
54
|
+
t = t[1:-1]
|
|
55
|
+
cleaned.append(t)
|
|
56
|
+
return cleaned
|
|
57
|
+
|
|
58
|
+
|
|
43
59
|
def parse_mcp_server_specs(specs: list) -> dict:
|
|
44
60
|
"""Parse repeatable `--mcp-server` CLI values into the same shape
|
|
45
61
|
load_mcp_config() returns, so both sources can be merged uniformly.
|
|
@@ -68,7 +84,7 @@ def parse_mcp_server_specs(specs: list) -> dict:
|
|
|
68
84
|
raise ValueError(f"Invalid --mcp-server transport {transport!r} for {name!r} — expected one of {_TRANSPORTS}")
|
|
69
85
|
servers[name] = {"url": url, "transport": transport}
|
|
70
86
|
else:
|
|
71
|
-
parts =
|
|
87
|
+
parts = _split_command(rest)
|
|
72
88
|
if not parts:
|
|
73
89
|
raise ValueError(f'Invalid --mcp-server value {spec!r} — expected "name=command args..."')
|
|
74
90
|
servers[name] = {"command": parts[0], "args": parts[1:]}
|
{ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ollama-coding-agent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: AI coding agent driving Qwen Coder (or any Ollama-compatible model) through a scoped toolset via MCP
|
|
5
5
|
License-Expression: MIT
|
|
6
6
|
Project-URL: Homepage, https://github.com/HarryChen1995/coding_agent
|
|
@@ -82,31 +82,36 @@ in-process — the agent is an MCP *client* that talks to a tool server over
|
|
|
82
82
|
stdio:
|
|
83
83
|
|
|
84
84
|
```
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
85
|
+
+-----------------------------+
|
|
86
|
+
| CLI / REPL |
|
|
87
|
+
+-----------------------------+
|
|
88
|
+
|
|
|
89
|
+
v
|
|
90
|
+
+-----------------------------+
|
|
91
|
+
| Agent loop |
|
|
92
|
+
| parse intent, call model, |
|
|
93
|
+
| approve, execute, persist |
|
|
94
|
+
+-----------------------------+
|
|
95
|
+
|
|
|
96
|
+
v
|
|
97
|
+
+-----------------------------+
|
|
98
|
+
| MCP client |
|
|
99
|
+
| built-in + custom servers |
|
|
100
|
+
| merged into one tool list |
|
|
101
|
+
+-----------------------------+
|
|
102
|
+
|
|
|
103
|
+
stdio / SSE / streamable-http
|
|
104
|
+
v
|
|
105
|
+
+-----------------------------+
|
|
106
|
+
| MCP server(s) |
|
|
107
|
+
+-----------------------------+
|
|
108
|
+
|
|
|
109
|
+
v
|
|
110
|
+
+-----------------------------+
|
|
111
|
+
| Tools |
|
|
112
|
+
| read / write / edit / |
|
|
113
|
+
| search / shell |
|
|
114
|
+
+-----------------------------+
|
|
110
115
|
```
|
|
111
116
|
|
|
112
117
|
Because tools are exposed over MCP, any MCP-compatible client — Claude
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "ollama-coding-agent"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.4.0"
|
|
8
8
|
description = "AI coding agent driving Qwen Coder (or any Ollama-compatible model) through a scoped toolset via MCP"
|
|
9
9
|
readme = "PYPI_README.md"
|
|
10
10
|
requires-python = ">=3.10"
|
|
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
|
{ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/requires.txt
RENAMED
|
File without changes
|
{ollama_coding_agent-0.2.0 → ollama_coding_agent-0.4.0}/ollama_coding_agent.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|