onetool-mcp 1.0.0b1__py3-none-any.whl → 1.0.0rc2__py3-none-any.whl
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.
- onetool/cli.py +63 -4
- onetool_mcp-1.0.0rc2.dist-info/METADATA +266 -0
- onetool_mcp-1.0.0rc2.dist-info/RECORD +129 -0
- {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/licenses/LICENSE.txt +1 -1
- {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/licenses/NOTICE.txt +54 -64
- ot/__main__.py +6 -6
- ot/config/__init__.py +48 -46
- ot/config/global_templates/__init__.py +2 -2
- ot/config/{defaults → global_templates}/diagram-templates/api-flow.mmd +33 -33
- ot/config/{defaults → global_templates}/diagram-templates/c4-context.puml +30 -30
- ot/config/{defaults → global_templates}/diagram-templates/class-diagram.mmd +87 -87
- ot/config/{defaults → global_templates}/diagram-templates/feature-mindmap.mmd +70 -70
- ot/config/{defaults → global_templates}/diagram-templates/microservices.d2 +81 -81
- ot/config/{defaults → global_templates}/diagram-templates/project-gantt.mmd +37 -37
- ot/config/{defaults → global_templates}/diagram-templates/state-machine.mmd +42 -42
- ot/config/global_templates/diagram.yaml +167 -0
- ot/config/global_templates/onetool.yaml +3 -1
- ot/config/{defaults → global_templates}/prompts.yaml +102 -97
- ot/config/global_templates/security.yaml +31 -0
- ot/config/global_templates/servers.yaml +93 -12
- ot/config/global_templates/snippets.yaml +5 -26
- ot/config/{defaults → global_templates}/tool_templates/__init__.py +7 -7
- ot/config/loader.py +221 -105
- ot/config/mcp.py +5 -1
- ot/config/secrets.py +192 -190
- ot/decorators.py +116 -116
- ot/executor/__init__.py +35 -35
- ot/executor/base.py +16 -16
- ot/executor/fence_processor.py +83 -83
- ot/executor/linter.py +142 -142
- ot/executor/pep723.py +288 -288
- ot/executor/runner.py +20 -6
- ot/executor/simple.py +163 -163
- ot/executor/validator.py +603 -164
- ot/http_client.py +145 -145
- ot/logging/__init__.py +37 -37
- ot/logging/entry.py +213 -213
- ot/logging/format.py +191 -188
- ot/logging/span.py +349 -349
- ot/meta.py +236 -14
- ot/paths.py +32 -49
- ot/prompts.py +218 -218
- ot/proxy/manager.py +14 -2
- ot/registry/__init__.py +189 -189
- ot/registry/parser.py +269 -269
- ot/server.py +330 -315
- ot/shortcuts/__init__.py +15 -15
- ot/shortcuts/aliases.py +87 -87
- ot/shortcuts/snippets.py +258 -258
- ot/stats/__init__.py +35 -35
- ot/stats/html.py +2 -2
- ot/stats/reader.py +354 -354
- ot/stats/timing.py +57 -57
- ot/support.py +63 -63
- ot/tools.py +1 -1
- ot/utils/batch.py +161 -161
- ot/utils/cache.py +120 -120
- ot/utils/exceptions.py +23 -23
- ot/utils/factory.py +178 -179
- ot/utils/format.py +65 -65
- ot/utils/http.py +202 -202
- ot/utils/platform.py +45 -45
- ot/utils/truncate.py +69 -69
- ot_tools/__init__.py +4 -4
- ot_tools/_convert/__init__.py +12 -12
- ot_tools/_convert/pdf.py +254 -254
- ot_tools/diagram.yaml +167 -167
- ot_tools/scaffold.py +2 -2
- ot_tools/transform.py +124 -19
- ot_tools/web_fetch.py +94 -43
- onetool_mcp-1.0.0b1.dist-info/METADATA +0 -163
- onetool_mcp-1.0.0b1.dist-info/RECORD +0 -132
- ot/config/defaults/bench.yaml +0 -4
- ot/config/defaults/onetool.yaml +0 -25
- ot/config/defaults/servers.yaml +0 -7
- ot/config/defaults/snippets.yaml +0 -4
- ot_tools/firecrawl.py +0 -732
- {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/WHEEL +0 -0
- {onetool_mcp-1.0.0b1.dist-info → onetool_mcp-1.0.0rc2.dist-info}/entry_points.txt +0 -0
- /ot/config/{defaults → global_templates}/tool_templates/extension.py +0 -0
- /ot/config/{defaults → global_templates}/tool_templates/isolated.py +0 -0
ot_tools/web_fetch.py
CHANGED
|
@@ -118,16 +118,38 @@ def _format_error(
|
|
|
118
118
|
return f"Error: {message}"
|
|
119
119
|
|
|
120
120
|
|
|
121
|
+
def _is_html_content_type(content_type: str | None) -> bool:
|
|
122
|
+
"""Check if content type indicates HTML content."""
|
|
123
|
+
if not content_type:
|
|
124
|
+
return True # Assume HTML if no content type (legacy behavior)
|
|
125
|
+
ct_lower = content_type.lower().split(";")[0].strip()
|
|
126
|
+
return ct_lower in ("text/html", "application/xhtml+xml")
|
|
127
|
+
|
|
128
|
+
|
|
121
129
|
@cache(ttl=300) # Cache fetched pages for 5 minutes
|
|
122
|
-
def _fetch_url_cached(url: str, timeout: float) -> str | None:
|
|
123
|
-
"""Fetch URL with caching to avoid redundant requests.
|
|
130
|
+
def _fetch_url_cached(url: str, timeout: float) -> tuple[str | None, str | None]:
|
|
131
|
+
"""Fetch URL with caching to avoid redundant requests.
|
|
132
|
+
|
|
133
|
+
Returns:
|
|
134
|
+
Tuple of (content, content_type). Content is the decoded response,
|
|
135
|
+
content_type is the Content-Type header value.
|
|
136
|
+
"""
|
|
124
137
|
with LogSpan(span="web.download", url=url, timeout=timeout) as span:
|
|
125
138
|
config = _create_config(timeout)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
139
|
+
response = trafilatura.fetch_response(
|
|
140
|
+
url, config=config, with_headers=True, decode=True
|
|
141
|
+
)
|
|
142
|
+
if response is None:
|
|
143
|
+
span.add(success=False)
|
|
144
|
+
return None, None
|
|
145
|
+
content = response.html
|
|
146
|
+
content_type = (
|
|
147
|
+
response.headers.get("content-type") if response.headers else None
|
|
148
|
+
)
|
|
149
|
+
span.add(success=content is not None, contentType=content_type)
|
|
150
|
+
if content:
|
|
151
|
+
span.add(responseLen=len(content))
|
|
152
|
+
return content, content_type
|
|
131
153
|
|
|
132
154
|
|
|
133
155
|
def fetch(
|
|
@@ -153,6 +175,9 @@ def fetch(
|
|
|
153
175
|
Uses trafilatura to extract the main content, filtering out navigation,
|
|
154
176
|
ads, and boilerplate. Returns clean text optimized for LLM consumption.
|
|
155
177
|
|
|
178
|
+
For non-HTML content types (text/plain, application/json, text/xml, text/csv,
|
|
179
|
+
etc.), returns the raw content directly without extraction.
|
|
180
|
+
|
|
156
181
|
Args:
|
|
157
182
|
url: The URL to fetch
|
|
158
183
|
output_format: Output format - "text", "markdown" (default), or "json"
|
|
@@ -208,9 +233,20 @@ def fetch(
|
|
|
208
233
|
|
|
209
234
|
# Fetch the page (with optional caching)
|
|
210
235
|
if use_cache:
|
|
211
|
-
downloaded = _fetch_url_cached(url, timeout)
|
|
236
|
+
downloaded, content_type = _fetch_url_cached(url, timeout)
|
|
212
237
|
else:
|
|
213
|
-
|
|
238
|
+
response = trafilatura.fetch_response(
|
|
239
|
+
url, config=config, with_headers=True, decode=True
|
|
240
|
+
)
|
|
241
|
+
if response is None:
|
|
242
|
+
downloaded, content_type = None, None
|
|
243
|
+
else:
|
|
244
|
+
downloaded = response.html
|
|
245
|
+
content_type = (
|
|
246
|
+
response.headers.get("content-type")
|
|
247
|
+
if response.headers
|
|
248
|
+
else None
|
|
249
|
+
)
|
|
214
250
|
|
|
215
251
|
if downloaded is None:
|
|
216
252
|
s.add(error="fetch_failed")
|
|
@@ -218,38 +254,43 @@ def fetch(
|
|
|
218
254
|
url, "fetch_failed", f"Failed to fetch URL: {url}", output_format
|
|
219
255
|
)
|
|
220
256
|
|
|
221
|
-
#
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
url,
|
|
248
|
-
"no_content",
|
|
249
|
-
f"No content could be extracted from: {url}",
|
|
250
|
-
output_format,
|
|
257
|
+
# For non-HTML content, return raw content directly (no extraction needed)
|
|
258
|
+
if not _is_html_content_type(content_type):
|
|
259
|
+
s.add(contentType=content_type, rawContent=True)
|
|
260
|
+
result = downloaded
|
|
261
|
+
else:
|
|
262
|
+
# Map output format to trafilatura format
|
|
263
|
+
trafilatura_format: str = output_format
|
|
264
|
+
if output_format == "text":
|
|
265
|
+
trafilatura_format = "txt"
|
|
266
|
+
|
|
267
|
+
# Extract content from HTML
|
|
268
|
+
result = trafilatura.extract(
|
|
269
|
+
downloaded,
|
|
270
|
+
url=url,
|
|
271
|
+
output_format=trafilatura_format,
|
|
272
|
+
include_links=include_links,
|
|
273
|
+
include_images=include_images,
|
|
274
|
+
include_tables=include_tables,
|
|
275
|
+
include_comments=include_comments,
|
|
276
|
+
include_formatting=include_formatting,
|
|
277
|
+
favor_precision=favor_precision,
|
|
278
|
+
favor_recall=favor_recall,
|
|
279
|
+
fast=fast,
|
|
280
|
+
target_language=target_language,
|
|
281
|
+
with_metadata=output_format == "json",
|
|
282
|
+
config=config,
|
|
251
283
|
)
|
|
252
284
|
|
|
285
|
+
if result is None:
|
|
286
|
+
s.add(error="no_content")
|
|
287
|
+
return _format_error(
|
|
288
|
+
url,
|
|
289
|
+
"no_content",
|
|
290
|
+
f"No content could be extracted from: {url}",
|
|
291
|
+
output_format,
|
|
292
|
+
)
|
|
293
|
+
|
|
253
294
|
# Wrap with metadata if requested (JSON only)
|
|
254
295
|
if include_metadata and output_format == "json":
|
|
255
296
|
try:
|
|
@@ -278,16 +319,24 @@ def fetch(
|
|
|
278
319
|
except TimeoutError:
|
|
279
320
|
s.add(error="timeout")
|
|
280
321
|
return _format_error(
|
|
281
|
-
url,
|
|
322
|
+
url,
|
|
323
|
+
"timeout",
|
|
324
|
+
f"Timeout after {timeout}s fetching: {url}",
|
|
325
|
+
output_format,
|
|
282
326
|
)
|
|
283
327
|
except ConnectionError as e:
|
|
284
328
|
s.add(error="connection_failed")
|
|
285
329
|
return _format_error(
|
|
286
|
-
url,
|
|
330
|
+
url,
|
|
331
|
+
"connection_failed",
|
|
332
|
+
f"Connection failed for {url}: {e}",
|
|
333
|
+
output_format,
|
|
287
334
|
)
|
|
288
335
|
except Exception as e:
|
|
289
336
|
s.add(error=str(e))
|
|
290
|
-
return _format_error(
|
|
337
|
+
return _format_error(
|
|
338
|
+
url, "error", f"Error fetching {url}: {e}", output_format
|
|
339
|
+
)
|
|
291
340
|
|
|
292
341
|
|
|
293
342
|
def fetch_batch(
|
|
@@ -356,7 +405,9 @@ def fetch_batch(
|
|
|
356
405
|
|
|
357
406
|
normalized = normalize_items(urls)
|
|
358
407
|
|
|
359
|
-
with LogSpan(
|
|
408
|
+
with LogSpan(
|
|
409
|
+
span="web.batch", urlCount=len(normalized), output_format=output_format
|
|
410
|
+
) as s:
|
|
360
411
|
|
|
361
412
|
def _fetch_one(url: str, label: str) -> tuple[str, str]:
|
|
362
413
|
"""Fetch a single URL and return (label, result)."""
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: onetool-mcp
|
|
3
|
-
Version: 1.0.0b1
|
|
4
|
-
Summary: One MCP, unlimited tools.
|
|
5
|
-
Project-URL: Homepage, https://github.com/beycom/onetool
|
|
6
|
-
Project-URL: Repository, https://github.com/beycom/onetool
|
|
7
|
-
Project-URL: Documentation, https://onetool.beycom.online
|
|
8
|
-
Project-URL: Issues, https://github.com/beycom/onetool/issues
|
|
9
|
-
Author-email: Gavin Las <beycom99@gmail.com>
|
|
10
|
-
License: GPL-3.0
|
|
11
|
-
License-File: LICENSE.txt
|
|
12
|
-
License-File: NOTICE.txt
|
|
13
|
-
Keywords: agents,code-execution,context-rot,llm,mcp,mcp-server,model-context-protocol,token-efficiency,tools
|
|
14
|
-
Classifier: Development Status :: 4 - Beta
|
|
15
|
-
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
17
|
-
Classifier: Programming Language :: Python :: 3
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
-
Classifier: Typing :: Typed
|
|
22
|
-
Requires-Python: >=3.11
|
|
23
|
-
Requires-Dist: aiofiles>=25.1.0
|
|
24
|
-
Requires-Dist: docstring-parser>=0.17
|
|
25
|
-
Requires-Dist: duckdb>=1.4.3
|
|
26
|
-
Requires-Dist: fastmcp>=2.14.4
|
|
27
|
-
Requires-Dist: firecrawl>=4.13.4
|
|
28
|
-
Requires-Dist: google-genai>=1.60.0
|
|
29
|
-
Requires-Dist: httpx>=0.28.1
|
|
30
|
-
Requires-Dist: jinja2>=3.1.6
|
|
31
|
-
Requires-Dist: loguru>=0.7.3
|
|
32
|
-
Requires-Dist: mcp>=1.26.0
|
|
33
|
-
Requires-Dist: openai>=2.15.0
|
|
34
|
-
Requires-Dist: openpyxl>=3.1.5
|
|
35
|
-
Requires-Dist: pillow>=12.1.0
|
|
36
|
-
Requires-Dist: pydantic-settings>=2.12.0
|
|
37
|
-
Requires-Dist: pydantic>=2.12.5
|
|
38
|
-
Requires-Dist: pymupdf>=1.26.7
|
|
39
|
-
Requires-Dist: python-docx>=1.2.0
|
|
40
|
-
Requires-Dist: python-pptx>=1.0.2
|
|
41
|
-
Requires-Dist: pyyaml>=6.0.3
|
|
42
|
-
Requires-Dist: questionary>=2.1.1
|
|
43
|
-
Requires-Dist: rich>=14.3.1
|
|
44
|
-
Requires-Dist: sqlalchemy>=2.0.46
|
|
45
|
-
Requires-Dist: trafilatura>=2.0.0
|
|
46
|
-
Requires-Dist: typer>=0.21.1
|
|
47
|
-
Provides-Extra: file
|
|
48
|
-
Requires-Dist: send2trash>=2.1.0; extra == 'file'
|
|
49
|
-
Description-Content-Type: text/markdown
|
|
50
|
-
|
|
51
|
-
<p align="center">
|
|
52
|
-
<img src="docs/assets/onetool-logo.png" alt="OneTool" width="400">
|
|
53
|
-
</p>
|
|
54
|
-
|
|
55
|
-
<p align="center">
|
|
56
|
-
<em>One tool to rule them all, one tool to find them, one tool to bring them all, and in the development bind them.</em>
|
|
57
|
-
</p>
|
|
58
|
-
|
|
59
|
-
<p align="center">
|
|
60
|
-
<a href="https://pypi.org/project/onetool-mcp/"><img alt="PyPI" src="https://img.shields.io/pypi/v/onetool-mcp"></a>
|
|
61
|
-
<a href="https://github.com/beycom/onetool-mcp/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/badge/license-GPLv3-blue"></a>
|
|
62
|
-
<a href="https://www.python.org/"><img alt="Python" src="https://img.shields.io/badge/python-3.11%2B-blue"></a>
|
|
63
|
-
</p>
|
|
64
|
-
|
|
65
|
-
> **v1.0.0 Pre-Release** - API stable, actively tested.
|
|
66
|
-
|
|
67
|
-
OneTool is a local-first MCP server that exposes a single `run` tool for code execution, giving your AI assistant access to unlimited capabilities through one interface.
|
|
68
|
-
|
|
69
|
-
## The Problem
|
|
70
|
-
|
|
71
|
-
Connect 5 MCP servers and you've burned 55K tokens before the conversation starts. Connect 10+ and you're at 100K tokens. Your AI gets worse as you add more tools - that's not a bug, it's how context windows work.
|
|
72
|
-
|
|
73
|
-
## The Solution
|
|
74
|
-
|
|
75
|
-
**98.7% fewer tokens. Same accuracy. 10x lower cost.**
|
|
76
|
-
|
|
77
|
-
Instead of loading 50 separate tool schemas, you write Python directly:
|
|
78
|
-
|
|
79
|
-
```python
|
|
80
|
-
__ot brave.search(query="AI trends 2026")
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
No JSON schema parsing. No tool selection loops. No hoping the model guesses correctly. You write explicit code to call APIs - deterministic, visible, no hidden magic.
|
|
84
|
-
|
|
85
|
-
Based on [Anthropic's research](https://www.anthropic.com/engineering/code-execution-with-mcp), which found token usage dropped from 150,000 to 2,000 when presenting tools as code APIs.
|
|
86
|
-
|
|
87
|
-
## Core Capabilities
|
|
88
|
-
|
|
89
|
-
- **30-second setup** - Install with uv or pip
|
|
90
|
-
- **Drop-in extensibility** - Add a Python file, get a new pack
|
|
91
|
-
- **AST security** - All code validated before execution
|
|
92
|
-
- **Benchmark harness** - Test LLM + MCP combinations with `bench`
|
|
93
|
-
|
|
94
|
-
## Batteries Included with 100+ Tools
|
|
95
|
-
|
|
96
|
-
See [Tool Reference](docs/tool-reference.md) for the complete list of packs and tools.
|
|
97
|
-
|
|
98
|
-
## Installation
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
uv tool install onetool-mcp
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Or with pip: `pip install onetool-mcp`
|
|
105
|
-
|
|
106
|
-
**With optional dependencies** (for convert, excel, code search):
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
uv tool install onetool-mcp \
|
|
110
|
-
--with pymupdf --with python-docx --with python-pptx \
|
|
111
|
-
--with openpyxl --with Pillow --with duckdb --with openai
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Add to Claude Code (`~/.claude/settings.json`):
|
|
115
|
-
|
|
116
|
-
```json
|
|
117
|
-
{
|
|
118
|
-
"mcpServers": {
|
|
119
|
-
"onetool": {
|
|
120
|
-
"command": "onetool"
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
## Extending
|
|
127
|
-
|
|
128
|
-
Drop a Python file, get a pack. No registration, no config:
|
|
129
|
-
|
|
130
|
-
```python
|
|
131
|
-
# tools/mytool.py
|
|
132
|
-
pack = "mytool"
|
|
133
|
-
|
|
134
|
-
def search(*, query: str) -> str:
|
|
135
|
-
"""Search for something."""
|
|
136
|
-
return f"Results for: {query}"
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## Why this approach
|
|
140
|
-
|
|
141
|
-
LLMs write Python instead of parsing JSON schemas. You see what's being called. 2K tokens instead of 150K. Adding your own packs is just dropping in a file.
|
|
142
|
-
|
|
143
|
-
## Documentation
|
|
144
|
-
|
|
145
|
-
- [Why OneTool](docs/intro/index.md) - The problem and our solution
|
|
146
|
-
- [Getting Started](docs/getting-started/quickstart.md) - 2-minute setup
|
|
147
|
-
- [Tools Reference](docs/reference/tools/index.md) - All built-in tools
|
|
148
|
-
- [Extending](docs/extending/index.md) - Create your own tools
|
|
149
|
-
|
|
150
|
-
## References
|
|
151
|
-
|
|
152
|
-
- [Code Execution with MCP](https://www.anthropic.com/engineering/code-execution-with-mcp) - Anthropic Engineering
|
|
153
|
-
- [Context Rot](https://research.trychroma.com/context-rot) - Chroma Research
|
|
154
|
-
|
|
155
|
-
## Licensing
|
|
156
|
-
|
|
157
|
-
**GPLv3** - Will transition to **MIT** at v2.0. Contribute via PRs to help us get there.
|
|
158
|
-
|
|
159
|
-
## Support
|
|
160
|
-
|
|
161
|
-
If you use or like this project, please consider buying me a coffee:
|
|
162
|
-
|
|
163
|
-
[](https://ko-fi.com/beycom)
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
bench/__init__.py,sha256=y388vnV0atWMmhJA4RzbIGGHrWNifzidcXkIgjSQR2Q,133
|
|
2
|
-
bench/cli.py,sha256=8QjzxnTkMFvJ-c_bQ0YZkr-MtN9sdZDau_Vo62DFSTQ,1664
|
|
3
|
-
bench/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
bench/reporter.py,sha256=peV3xaDiasQR5UAMCC1oRDuOWG_IAMC6HqQ8XjdXgC8,23602
|
|
5
|
-
bench/run.py,sha256=9s1z_Q4vEE5rdct9aKOpo2A6JLLl8vD0bwQ-jAWB2Ec,16456
|
|
6
|
-
bench/secrets.py,sha256=ho1susoPnJbmdhhMubhdCueQnybMm2ykBapR_nkpTZ0,2676
|
|
7
|
-
bench/utils.py,sha256=Kr3ZHb9cBFaM1HRNBFCUH3JKHk4-fNAiBpr2I95eR0c,386
|
|
8
|
-
bench/harness/__init__.py,sha256=e9qbt4m_7I6j1wlLd_HCI2kQSXNs_vdluFpOLULD25A,1511
|
|
9
|
-
bench/harness/client.py,sha256=qBW1Y49QFEt-NElybRKu1bA1YbuXKv2cPYr58hCSLjw,25303
|
|
10
|
-
bench/harness/config.py,sha256=k6jqvQeumS91ka_QBV8pXtpwQUZhgutbbNiL5n68gxI,12581
|
|
11
|
-
bench/harness/csv_writer.py,sha256=iwy3ixo9KlzoXmJVAYTHYt2Nm8s5vQsxVAaykgsvHEY,3305
|
|
12
|
-
bench/harness/evaluate.py,sha256=Mv6I63aBXwEZHoarUOYu3UIG3-rRcInLtBULlqcqeDk,17262
|
|
13
|
-
bench/harness/metrics.py,sha256=5Zy0x3IG-CeXUk-nxGm8-w2YCds1B2oxNGQMKNkgjGE,9690
|
|
14
|
-
bench/harness/runner.py,sha256=Gx9_IXVBhmogaWCf5e-YNuuyDNeJVJpSPKtbp7PyxaI,38332
|
|
15
|
-
onetool/__init__.py,sha256=NH91OBFDKBASlyorvmrLjckwXblgcToPkdqtZOIya7o,110
|
|
16
|
-
onetool/cli.py,sha256=9TR0BMcUw05O2yt0kcS-3MrCfWPbxavVCtNpsIscxtg,12159
|
|
17
|
-
onetool/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
18
|
-
ot/__init__.py,sha256=WI1BaMpZr1Xag5DLy8710K19v4EEiU0plLsgbCWWgz0,983
|
|
19
|
-
ot/__main__.py,sha256=Lj60MDYULRpq5qUSW2zQF-7eaG7R90v_vB_vl1dv2Fg,123
|
|
20
|
-
ot/_cli.py,sha256=cJ6mazEkl1cseHTUmtPFrsJfjZZ5IFkfFqh0c5s7xuY,2700
|
|
21
|
-
ot/_tui.py,sha256=fbF_iwK58EBPhxWmEEQozneHlSRr7MRop7aRugVQ688,1437
|
|
22
|
-
ot/decorators.py,sha256=8VRje2gT-9C3cpSITKkOSadZF6MBusbqTlRvkafqbAs,3223
|
|
23
|
-
ot/http_client.py,sha256=lwmAISFK9qGwMvWVX4mltZcttt2NUVKaxEnadYzuYy8,4163
|
|
24
|
-
ot/meta.py,sha256=cEaI-3Aul2OcSteY9g7XOheXDswwPo577IqIrFF-qeM,50052
|
|
25
|
-
ot/paths.py,sha256=0R13bHR-8TYBVcMNIepY7O0LXy5xlIZ-1-KRZCJRpJA,14410
|
|
26
|
-
ot/prompts.py,sha256=UdFjOhdhVtgFGJnNWL-I7Mv_KtVBA5Dc9MAG8cwPCOI,6593
|
|
27
|
-
ot/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
28
|
-
ot/server.py,sha256=YzVeXrm7wml623CZFTQSFJFyMlL0oD_hKHWN1h_vOJA,9603
|
|
29
|
-
ot/support.py,sha256=u6OQonVDktmQyMxm8GGPSzWmwTuts6a8vNmSjRpuBuU,1639
|
|
30
|
-
ot/tools.py,sha256=MeZx-5sXJ8go7tn_yqs-QYAbhzve-QliL7ZMVO6ilxU,3591
|
|
31
|
-
ot/config/__init__.py,sha256=xa0QbmATFJb01EXZi5kD5j4BgEcfEZZMt2AdKRihxis,1054
|
|
32
|
-
ot/config/dynamic.py,sha256=alaJUnDL2KRIWeCNN-garmPmJ3qFoOirkwh0hSFcMuc,3711
|
|
33
|
-
ot/config/loader.py,sha256=sWjvaaXraQVs45HFGxMrC6P21LPQ2qtbSdBus67JC4U,36016
|
|
34
|
-
ot/config/mcp.py,sha256=iQdDrc3o8UpmW9T-IeMGu_Qyl1lw1lS2vjoTamW4J5k,5072
|
|
35
|
-
ot/config/secrets.py,sha256=zrQZZwRNgnoxyC84WtJgtkcPY7AnB1J22kFDjKI-mxg,6009
|
|
36
|
-
ot/config/tool_config.py,sha256=BisTtEj9Ws8NnWxvSbW9kskkygO8F-RO4Mgm9KIuPm0,3651
|
|
37
|
-
ot/config/defaults/bench.yaml,sha256=roIxVP2QqksP3DS01_DsU87DjyHbQKKjPSVm4h6Lijc,114
|
|
38
|
-
ot/config/defaults/onetool.yaml,sha256=XZRfMsuF91vu9-Z1Ogp51bC5EN3lILtACr6StClirN8,750
|
|
39
|
-
ot/config/defaults/prompts.yaml,sha256=1viP1ELp3uq7U9-xrhlkgNrWWqB5gXtZ-NSOT3zShao,4443
|
|
40
|
-
ot/config/defaults/servers.yaml,sha256=YmrNEhfESEmWTBjK5BTohXw-E1R7SYhJn7RwzRDS-RQ,216
|
|
41
|
-
ot/config/defaults/snippets.yaml,sha256=G7cGnHrX_jUYQqQJi5vPqB4_FaYMdpGDXiFA3ykuK1A,107
|
|
42
|
-
ot/config/defaults/diagram-templates/api-flow.mmd,sha256=YizXla-1o85KyUJqMoT2rOJqFa6wUqhZNf8ZnZtvjyI,696
|
|
43
|
-
ot/config/defaults/diagram-templates/c4-context.puml,sha256=v6KPHcZ2Q_0QY9h80oLTb_xzJUB1Qq5XyeuzNckVh9c,916
|
|
44
|
-
ot/config/defaults/diagram-templates/class-diagram.mmd,sha256=T1VfDg6UK-tKxgT3qZF45JOlMiCdl4Nsa3tmrQhoaLU,1717
|
|
45
|
-
ot/config/defaults/diagram-templates/feature-mindmap.mmd,sha256=mjpih6ehYH5Z8cMquAN7U-8BR8UshC7ggeMOkDQWaF8,1357
|
|
46
|
-
ot/config/defaults/diagram-templates/microservices.d2,sha256=vzW_HJs0-XiOzOjxLZngcqZzjnJGdgPwutqgkXVyaZw,1448
|
|
47
|
-
ot/config/defaults/diagram-templates/project-gantt.mmd,sha256=TNNHDund_OaUM_G1ByGJAPIz95TLBPgtuNMB8rEYu5s,1277
|
|
48
|
-
ot/config/defaults/diagram-templates/state-machine.mmd,sha256=fO36UWr0inb979kyHB1PnLx7RYLzOWd4_ZCBXNmRdDw,971
|
|
49
|
-
ot/config/defaults/tool_templates/__init__.py,sha256=RwRpiQf_iQ5S7uGsfWM92cE8JN_Y1KDqaPfo24h-A5w,214
|
|
50
|
-
ot/config/defaults/tool_templates/extension.py,sha256=VfHxAjiIZ2BdbFMWEkdxGZT4OUxSAUb9ng9p-HH2lCM,1371
|
|
51
|
-
ot/config/defaults/tool_templates/isolated.py,sha256=aTl7_hG1ALHCGqyHMPjKa6fNBXoTBPjsLtbFgq76LAg,1556
|
|
52
|
-
ot/config/global_templates/__init__.py,sha256=aHmytPELRNraAZf2cMf5c9-4yZQUd5m5Z9wg0-dMRKY,109
|
|
53
|
-
ot/config/global_templates/bench-secrets-template.yaml,sha256=srZcnOM8Af2gQTpmo7g16sE9-zj0Tlguv54V-WE3hCs,224
|
|
54
|
-
ot/config/global_templates/bench.yaml,sha256=h2Ac5-unilwx5TPvDsp02y4I0WiPI7y9CyRh7FIBuL8,223
|
|
55
|
-
ot/config/global_templates/onetool.yaml,sha256=hj22T9SkiX5qNao8DisLmV950nAILvUFMX-HoHhVJdI,813
|
|
56
|
-
ot/config/global_templates/secrets-template.yaml,sha256=sUb2uExdrx_07bH2UVKtp-tqCSpcW-PenH_UFDxPF2k,1541
|
|
57
|
-
ot/config/global_templates/servers.yaml,sha256=tDDYHNovK7WuANaH3YepXwhNl9ky35GpAszWKNPmZyw,657
|
|
58
|
-
ot/config/global_templates/snippets.yaml,sha256=r92kjjs21C0gVGsEl7NpnvcjPbmtA1bsPeU8YfoOjs8,9762
|
|
59
|
-
ot/executor/__init__.py,sha256=JGGWInQwvhV1ttr7seATxHbsoL3jwTAUeT0GfeG-56M,836
|
|
60
|
-
ot/executor/base.py,sha256=Z_Sm0Jyf77ffduJG7IS5UCDRX9JquQ6pWm3ek8lEl4o,317
|
|
61
|
-
ot/executor/fence_processor.py,sha256=4GQ0MccQmsuRVSWHRtpv4X1jvL8c2P68gYxjnZl_yj8,2744
|
|
62
|
-
ot/executor/linter.py,sha256=oxXvd-HtWPxHkqUT3d1713xMN5MpxWjuKFQWTLH458U,3704
|
|
63
|
-
ot/executor/pack_proxy.py,sha256=S0d3VsHaXvoraoJdgySAkk4Jc_ExzjGkPbKeCDstUEc,8793
|
|
64
|
-
ot/executor/param_resolver.py,sha256=lQR73bB_aJ1zgXGiI_JmzOiCeUYnW-jiEPHRdquSY00,4361
|
|
65
|
-
ot/executor/pep723.py,sha256=j53wwEtUDWqNe0DMRq0usbySnWEUUeCe4Gd0pMf7qyA,8474
|
|
66
|
-
ot/executor/result_store.py,sha256=BwTd4Gk0JPVmysGB0bC1vtc3M-5q4ZMsfkBle7e-jRE,11104
|
|
67
|
-
ot/executor/runner.py,sha256=Xr-V9k07T773-IN5NJFJmoEH78sj2e3ONsYR5UU4DS0,16432
|
|
68
|
-
ot/executor/simple.py,sha256=Ps181W5FfHOp7CkxF2m5kCe6YZz0qlp4sXSxsysSK6Q,5029
|
|
69
|
-
ot/executor/tool_loader.py,sha256=vdu5pAL1NvGGu1H7tE3lqBafzWHWP3MfFXMZgzgFyIw,13377
|
|
70
|
-
ot/executor/validator.py,sha256=i7xS5EvHVjFFlwX2NKPQJQUK-75gp-XzVGQXs6UCuMY,14241
|
|
71
|
-
ot/executor/worker_pool.py,sha256=HJOu3P9E5MKgBZsddmeElctPUhF5kwx5Hfd9IezwJo8,12635
|
|
72
|
-
ot/executor/worker_proxy.py,sha256=NUxOI2VZFkNbH5IMulvokHEe5cZQtViOSpb4DEHBf4I,5651
|
|
73
|
-
ot/logging/__init__.py,sha256=cEvgp-lB9SNgwIWBoATp0dXroBaaBt4SxYri6AHiBgY,943
|
|
74
|
-
ot/logging/config.py,sha256=PwvQDzcfrcDiUBJhRLyCc07GaMHzn9hu6rFq5wFQCyo,9919
|
|
75
|
-
ot/logging/entry.py,sha256=9kaR2DuxJFUrNUZl6z0IXSjmCmxJS970v8uNykc8L0s,6169
|
|
76
|
-
ot/logging/format.py,sha256=MMpdrvGJqnW2lFOClfhZyzm36rIU7MAq6BUaXOhjFn8,5388
|
|
77
|
-
ot/logging/span.py,sha256=cP2t06AGMWaqFCXRbKyZX0W7gyYyjvIQfFijupLd2ik,11373
|
|
78
|
-
ot/proxy/__init__.py,sha256=N4shk9gsZ76BBe8tUftXL83ELB42zlbTXtF05lTUqUc,435
|
|
79
|
-
ot/proxy/manager.py,sha256=ZhivveB9MthYv5oeI_vj61uYxkN82wMAPzPOdjTaGkg,13442
|
|
80
|
-
ot/registry/__init__.py,sha256=VAvn1JAL8dZrsTh_Y7NilIrLo9blbhWt38TN-FcTapM,5149
|
|
81
|
-
ot/registry/models.py,sha256=Z-lsRRN3pDyL2nUalZA9QoD1IG_e7aSPUoE6TvRspCk,2160
|
|
82
|
-
ot/registry/parser.py,sha256=NXLFXYIMjFfEb4ztTLZqz4GxYZw-uEWAdxDuMMT_iVI,8416
|
|
83
|
-
ot/registry/registry.py,sha256=HFPPIGWop2szXRQeQeFs5axK4iS17dEOHV8qf9Jm5nE,13458
|
|
84
|
-
ot/shortcuts/__init__.py,sha256=n-yQvYHoEIg-7Ydm_P7bA86AJk5iq9o38pLiAj_zGGY,461
|
|
85
|
-
ot/shortcuts/aliases.py,sha256=0oCgkvTQcPS2TqNYa6uGwLYunA8-1L-FfrHCVynZ4-Q,2705
|
|
86
|
-
ot/shortcuts/snippets.py,sha256=rCbyFdQ4_1HY4AhxeLRMUfDXDcVN3FZpEUp_8ACRIiY,7956
|
|
87
|
-
ot/stats/__init__.py,sha256=5IP7bkfeXZm_B-WS9kNnQDCoggwF0Mit3dFtBe5CvKU,933
|
|
88
|
-
ot/stats/html.py,sha256=vlMCxfyjm6gipNyPYP5O8Nicmhq8tsP0l6Ifpc1-dnY,9079
|
|
89
|
-
ot/stats/jsonl_writer.py,sha256=ym-Wfy0gv90M59ipCQsxapTKNQBO28btKDe6kgFdxck,8169
|
|
90
|
-
ot/stats/reader.py,sha256=zKNegWFSbEBekBDmbgzVTv1Lj3UckRZKkiGkfqPN3XY,11883
|
|
91
|
-
ot/stats/timing.py,sha256=ZAzigZwmAdyRKdUBjtkIuAi_KJXyrsygwSxm0_NM7aE,1500
|
|
92
|
-
ot/utils/__init__.py,sha256=k54kcSGmKl8zrnKXw9svCyXej7FrVZvshMSK1f_6de4,2108
|
|
93
|
-
ot/utils/batch.py,sha256=0oi0wx2kn0XlbB03Utn9lJho_Fmdomasl1_F5AauSdU,4939
|
|
94
|
-
ot/utils/cache.py,sha256=s3z7R_xv-hWxB_q76L7eFPbwnc_KFYRoZllnRloQswg,3506
|
|
95
|
-
ot/utils/deps.py,sha256=5U_bnAEfd_Ivt9ZZitn9emt8T7Ehm99_xb1_okbURfA,11654
|
|
96
|
-
ot/utils/exceptions.py,sha256=_kYtWpnxkBPF2TXkXksPeX2MfJLrCJ2VU-1CckPjZoU,613
|
|
97
|
-
ot/utils/factory.py,sha256=UhKV6Wa2FOZHh4SKWmfeps1ThboS0rQnBUL38-eMljE,5106
|
|
98
|
-
ot/utils/format.py,sha256=4bUvYnsUD9Wz2czPsSoxQOIqxrFIlx-n3Y5HdtZpfxc,2065
|
|
99
|
-
ot/utils/http.py,sha256=IaRTxn--2TJYGpAquywsuHm_xJQxOcMvtFDfuaJUJIU,5653
|
|
100
|
-
ot/utils/platform.py,sha256=dBnxrLN-H2W0onc_LM9BML5WXmKahdpdkW2pVdauup4,1512
|
|
101
|
-
ot/utils/sanitize.py,sha256=5zDKpDwE6oo-74Bwv-yhovOJ6zk03vO2-gsCiEDA2kk,3815
|
|
102
|
-
ot/utils/truncate.py,sha256=03ObrMxElh3CM5lhwThA00oLgPzzFSOPR9Y8BmzAwis,1771
|
|
103
|
-
ot_tools/__init__.py,sha256=uUxp9V0E1lqzeT3wOx10JHzAFu3esn7M6FJrwBn_8Z0,95
|
|
104
|
-
ot_tools/brave_search.py,sha256=JPVR_S2J1NLL7ad4AudIkgMsvnqggibjZ5FRXPt5ZA0,17746
|
|
105
|
-
ot_tools/code_search.py,sha256=P3-oReY7n_3nrlEiYzFv5ompcU-cuVRTeEK4fSQKuew,25191
|
|
106
|
-
ot_tools/context7.py,sha256=sn75QMEeOeSQSYZeVwT4UjYEXo3QXa8KC61mwIUix3U,16088
|
|
107
|
-
ot_tools/convert.py,sha256=mCmDFLWgLiEJhYyd6Ex9s7qfyPOWj7FKaqtIFKG_Ig4,20488
|
|
108
|
-
ot_tools/db.py,sha256=RH_OOUJYqYVw14O8QYGB9QKg9IGNPQAM33HDa71D3v4,13142
|
|
109
|
-
ot_tools/diagram.py,sha256=tGNyd3PYdpi3Qs7Gs8pbcZVWMBVmyNbJG_wxiZ8682M,50478
|
|
110
|
-
ot_tools/diagram.yaml,sha256=Q4twP0rH-1zPWFbgBhl_RZbUg5dkmldX5E6Lp49Ugp4,5439
|
|
111
|
-
ot_tools/excel.py,sha256=yZGgKzDzPvZAE7b9vjC25FY7lJkw7PCBFMYOGcU1UyE,43067
|
|
112
|
-
ot_tools/file.py,sha256=9o_A1m7GCxpnIKIwAiahvGaQrfxXcfkVQicPH1_ztW0,46689
|
|
113
|
-
ot_tools/firecrawl.py,sha256=PtWtiKSUGl0VUdZfMhfHOmQSJ__UN2xcJ-BBuVaXmgo,23433
|
|
114
|
-
ot_tools/grounding_search.py,sha256=ak0wZzBQMPR5VYVrATOIzldZj_n8UxYeCxrmpTZrykA,20182
|
|
115
|
-
ot_tools/package.py,sha256=5MtsPW9ieolQAnaw60Yb4TyODSlowW56HAZj-j_QSkU,19148
|
|
116
|
-
ot_tools/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
117
|
-
ot_tools/ripgrep.py,sha256=_dKHo5TTlYlzoRQV8-7kFw3yuYk7I5r_9FYJvnGFECc,17105
|
|
118
|
-
ot_tools/scaffold.py,sha256=92pjn0kqncK-2XrzEUn058HRkp1iJpAvWInaCKVdbGI,17374
|
|
119
|
-
ot_tools/transform.py,sha256=IQ6bBZ4mDS7c-8FzpUSQB1EwseYgq3kVGr5LFxLBcwA,6747
|
|
120
|
-
ot_tools/web_fetch.py,sha256=l9taGigHIW8QMaFRObjQuoUNdv9MzYMIyZgtdaTO3DA,13483
|
|
121
|
-
ot_tools/_convert/__init__.py,sha256=Cwo87GiP8JUWpGFSpbkCEyt_q4PUKauFpbqzyOIFOy0,465
|
|
122
|
-
ot_tools/_convert/excel.py,sha256=mVCgolocTKd7ZCpVd2hANaYnhJrneNtGYEZafrCeYqE,8679
|
|
123
|
-
ot_tools/_convert/pdf.py,sha256=6ATY_8NGrc5877Hhw-z5Gxo4Nxsw7MBhVLaHwAmvBXE,7323
|
|
124
|
-
ot_tools/_convert/powerpoint.py,sha256=M8lwkTV7x4wafR7eXrVojCBKgcXVxO1tT-Z2Ml5wwxo,7855
|
|
125
|
-
ot_tools/_convert/utils.py,sha256=AfId8ulTx_kKq0zVbhvuY3KGXqQjEk8Y7o8BXjP8WgA,10192
|
|
126
|
-
ot_tools/_convert/word.py,sha256=XfjqQRhEYS_433LprmF6vqyosytXVdNWzsCXo42WNcA,8710
|
|
127
|
-
onetool_mcp-1.0.0b1.dist-info/METADATA,sha256=S4eE3OnUcKTZpd8MK0COy_vlI9kzMV1ZrCatCbQ1E0w,5584
|
|
128
|
-
onetool_mcp-1.0.0b1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
129
|
-
onetool_mcp-1.0.0b1.dist-info/entry_points.txt,sha256=UUr3FvhGxnRdyJSxRG5YeqCGUi8nQ3oMCoueM35sF04,66
|
|
130
|
-
onetool_mcp-1.0.0b1.dist-info/licenses/LICENSE.txt,sha256=EAAF-2Agl1ewXnFl4KFpREq8Jh1YFRiogyBIzfGyImM,35561
|
|
131
|
-
onetool_mcp-1.0.0b1.dist-info/licenses/NOTICE.txt,sha256=GTNDiQ3_2O_AcngYY3t41ZQ7S_E7r0EcflmdZGjGFxM,2470
|
|
132
|
-
onetool_mcp-1.0.0b1.dist-info/RECORD,,
|
ot/config/defaults/bench.yaml
DELETED
ot/config/defaults/onetool.yaml
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# OneTool Bundled Defaults
|
|
2
|
-
# Minimal working config - inherited by global and project configs.
|
|
3
|
-
# User customization goes in ~/.onetool/onetool.yaml
|
|
4
|
-
|
|
5
|
-
version: 1
|
|
6
|
-
|
|
7
|
-
# Include external config files (merged left-to-right)
|
|
8
|
-
include:
|
|
9
|
-
- prompts.yaml # Tool instructions for LLM
|
|
10
|
-
- snippets.yaml # Snippet workflows
|
|
11
|
-
- servers.yaml # External MCP servers
|
|
12
|
-
# Diagram defaults: src/ot_tools/diagram.yaml (sidecar pattern)
|
|
13
|
-
|
|
14
|
-
log_level: INFO
|
|
15
|
-
|
|
16
|
-
# Transform tool (LLM for code generation)
|
|
17
|
-
transform:
|
|
18
|
-
model: google/gemini-3-flash-preview
|
|
19
|
-
base_url: https://openrouter.ai/api/v1
|
|
20
|
-
|
|
21
|
-
# Security configuration
|
|
22
|
-
security:
|
|
23
|
-
# Output sanitization for prompt injection protection
|
|
24
|
-
sanitize:
|
|
25
|
-
enabled: true # Enables __sanitize__ magic variable
|
ot/config/defaults/servers.yaml
DELETED
ot/config/defaults/snippets.yaml
DELETED