rossum-agent 1.0.0rc0__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.
rossum_agent/__init__.py CHANGED
@@ -4,6 +4,6 @@ from __future__ import annotations
4
4
 
5
5
  from rossum_agent.agent import AgentConfig, AgentStep, RossumAgent, create_agent
6
6
 
7
- __version__ = "1.0.0rc0"
7
+ __version__ = "1.0.0rc2"
8
8
 
9
9
  __all__ = ["AgentConfig", "AgentStep", "RossumAgent", "create_agent"]
@@ -91,6 +91,7 @@ from rossum_agent.tools import (
91
91
  get_dynamic_tools,
92
92
  get_internal_tool_names,
93
93
  get_internal_tools,
94
+ get_mcp_mode,
94
95
  preload_categories_for_request,
95
96
  reset_dynamic_tools,
96
97
  set_mcp_connection,
@@ -824,7 +825,8 @@ class RossumAgent:
824
825
  return
825
826
 
826
827
  loop = asyncio.get_event_loop()
827
- set_mcp_connection(self.mcp_connection, loop)
828
+ mcp_mode = get_mcp_mode()
829
+ set_mcp_connection(self.mcp_connection, loop, mcp_mode)
828
830
 
829
831
  # Pre-load tool categories based on keywords in the user's request
830
832
  # Run in thread pool to avoid blocking the event loop (preload uses sync MCP calls)
rossum_agent/api/main.py CHANGED
@@ -119,7 +119,7 @@ app.add_middleware(RequestSizeLimitMiddleware)
119
119
 
120
120
  def _build_cors_origin_regex() -> str:
121
121
  """Build CORS origin regex including any additional allowed hosts."""
122
- patterns = [r".*\.rossum\.app"]
122
+ patterns = [r".*\.rossum\.(app|ai)"]
123
123
  additional_hosts = os.environ.get("ADDITIONAL_ALLOWED_ROSSUM_HOSTS", "")
124
124
  if additional_hosts:
125
125
  patterns.extend(p.strip() for p in additional_hosts.split(",") if p.strip())
@@ -225,7 +225,7 @@ class AgentService:
225
225
  mcp_connection=mcp_connection, system_prompt=system_prompt, config=AgentConfig()
226
226
  )
227
227
 
228
- set_mcp_connection(mcp_connection, asyncio.get_event_loop())
228
+ set_mcp_connection(mcp_connection, asyncio.get_event_loop(), mcp_mode)
229
229
 
230
230
  self._restore_conversation_history(agent, conversation_history)
231
231
 
@@ -100,7 +100,7 @@ async def run_agent_turn(
100
100
  async with connect_mcp_server(
101
101
  rossum_api_token=rossum_api_token, rossum_api_base_url=rossum_api_base_url, mcp_mode=mcp_mode
102
102
  ) as mcp_connection:
103
- set_mcp_connection(mcp_connection, asyncio.get_event_loop())
103
+ set_mcp_connection(mcp_connection, asyncio.get_event_loop(), mcp_mode)
104
104
 
105
105
  agent = await create_agent(mcp_connection=mcp_connection, system_prompt=system_prompt, config=AgentConfig())
106
106
 
@@ -16,8 +16,10 @@ from rossum_agent.tools.core import (
16
16
  SubAgentTokenUsage,
17
17
  get_mcp_connection,
18
18
  get_mcp_event_loop,
19
+ get_mcp_mode,
19
20
  get_output_dir,
20
21
  get_rossum_credentials,
22
+ is_read_only_mode,
21
23
  report_progress,
22
24
  report_text,
23
25
  report_token_usage,
@@ -46,11 +48,11 @@ from rossum_agent.tools.dynamic_tools import (
46
48
  DISCOVERY_TOOL_NAME,
47
49
  CatalogData,
48
50
  DynamicToolsState,
49
- get_destructive_tools,
50
51
  get_dynamic_tools,
51
52
  get_load_tool_category_definition,
52
53
  get_load_tool_definition,
53
54
  get_loaded_categories,
55
+ get_write_tools,
54
56
  load_tool,
55
57
  load_tool_category,
56
58
  preload_categories_for_request,
@@ -179,7 +181,6 @@ __all__ = [
179
181
  "execute_tool",
180
182
  "get_deploy_tool_names",
181
183
  "get_deploy_tools",
182
- "get_destructive_tools",
183
184
  "get_dynamic_tools",
184
185
  "get_internal_tool_names",
185
186
  "get_internal_tools",
@@ -188,8 +189,11 @@ __all__ = [
188
189
  "get_loaded_categories",
189
190
  "get_mcp_connection",
190
191
  "get_mcp_event_loop",
192
+ "get_mcp_mode",
191
193
  "get_output_dir",
192
194
  "get_rossum_credentials",
195
+ "get_write_tools",
196
+ "is_read_only_mode",
193
197
  "load_skill",
194
198
  "load_tool",
195
199
  "load_tool_category",
@@ -60,6 +60,7 @@ _text_callback: ContextVar[SubAgentTextCallback | None] = ContextVar("text_callb
60
60
  _token_callback: ContextVar[SubAgentTokenCallback | None] = ContextVar("token_callback", default=None)
61
61
  _mcp_connection: ContextVar[MCPConnection | None] = ContextVar("mcp_connection", default=None)
62
62
  _mcp_event_loop: ContextVar[asyncio.AbstractEventLoop | None] = ContextVar("mcp_event_loop", default=None)
63
+ _mcp_mode: ContextVar[str] = ContextVar("mcp_mode", default="read-only")
63
64
  _output_dir: ContextVar[Path | None] = ContextVar("output_dir", default=None)
64
65
  _rossum_credentials: ContextVar[tuple[str, str] | None] = ContextVar("rossum_credentials", default=None)
65
66
 
@@ -111,10 +112,15 @@ def get_output_dir() -> Path:
111
112
  return fallback
112
113
 
113
114
 
114
- def set_mcp_connection(connection: MCPConnection | None, loop: asyncio.AbstractEventLoop | None) -> None:
115
+ def set_mcp_connection(
116
+ connection: MCPConnection | None,
117
+ loop: asyncio.AbstractEventLoop | None,
118
+ mcp_mode: str = "read-only",
119
+ ) -> None:
115
120
  """Set the MCP connection for use by internal tools (pass None to clear)."""
116
121
  _mcp_connection.set(connection)
117
122
  _mcp_event_loop.set(loop)
123
+ _mcp_mode.set(mcp_mode)
118
124
 
119
125
 
120
126
  def get_mcp_connection() -> MCPConnection | None:
@@ -127,6 +133,16 @@ def get_mcp_event_loop() -> asyncio.AbstractEventLoop | None:
127
133
  return _mcp_event_loop.get()
128
134
 
129
135
 
136
+ def get_mcp_mode() -> str:
137
+ """Get the current MCP mode ('read-only' or 'read-write')."""
138
+ return _mcp_mode.get()
139
+
140
+
141
+ def is_read_only_mode() -> bool:
142
+ """Check if MCP is in read-only mode."""
143
+ return _mcp_mode.get() != "read-write"
144
+
145
+
130
146
  def set_rossum_credentials(api_base_url: str | None, token: str | None) -> None:
131
147
  """Set Rossum API credentials for internal tools.
132
148
 
@@ -14,7 +14,7 @@ from dataclasses import dataclass, field
14
14
  from typing import TYPE_CHECKING
15
15
 
16
16
  from rossum_agent.rossum_mcp_integration import mcp_tools_to_anthropic_format
17
- from rossum_agent.tools.core import get_mcp_connection, get_mcp_event_loop
17
+ from rossum_agent.tools.core import get_mcp_connection, get_mcp_event_loop, is_read_only_mode
18
18
 
19
19
  if TYPE_CHECKING:
20
20
  from anthropic.types import ToolParam
@@ -29,7 +29,7 @@ class CatalogData:
29
29
 
30
30
  catalog: dict[str, set[str]] = field(default_factory=dict)
31
31
  keywords: dict[str, list[str]] = field(default_factory=dict)
32
- destructive_tools: set[str] = field(default_factory=set)
32
+ write_tools: set[str] = field(default_factory=set)
33
33
 
34
34
 
35
35
  # Cached catalog from MCP (fetched once per process)
@@ -119,17 +119,17 @@ def _fetch_catalog_from_mcp() -> CatalogData:
119
119
 
120
120
  catalog: dict[str, set[str]] = {}
121
121
  keywords: dict[str, list[str]] = {}
122
- destructive_tools: set[str] = set()
122
+ write_tools: set[str] = set()
123
123
 
124
124
  for category in result:
125
125
  name = category["name"]
126
126
  catalog[name] = {tool["name"] for tool in category["tools"]}
127
127
  keywords[name] = category.get("keywords", [])
128
128
  for tool in category["tools"]:
129
- if tool.get("destructive", False):
130
- destructive_tools.add(tool["name"])
129
+ if not tool.get("read_only", True):
130
+ write_tools.add(tool["name"])
131
131
 
132
- _catalog_cache = CatalogData(catalog=catalog, keywords=keywords, destructive_tools=destructive_tools)
132
+ _catalog_cache = CatalogData(catalog=catalog, keywords=keywords, write_tools=write_tools)
133
133
  logger.info(f"Fetched catalog with {len(catalog)} categories from MCP")
134
134
  return _catalog_cache
135
135
 
@@ -148,9 +148,9 @@ def get_category_keywords() -> dict[str, list[str]]:
148
148
  return _fetch_catalog_from_mcp().keywords
149
149
 
150
150
 
151
- def get_destructive_tools() -> set[str]:
152
- """Get set of destructive tool names (fetched from MCP)."""
153
- return _fetch_catalog_from_mcp().destructive_tools
151
+ def get_write_tools() -> set[str]:
152
+ """Get set of write tool names (read_only=False) from MCP catalog."""
153
+ return _fetch_catalog_from_mcp().write_tools
154
154
 
155
155
 
156
156
  def suggest_categories_for_request(request_text: str) -> list[str]:
@@ -188,18 +188,10 @@ def _filter_discovery_tools(mcp_tools: list[MCPTool]) -> list[MCPTool]:
188
188
  def _load_categories_impl(
189
189
  categories: list[str],
190
190
  state: DynamicToolsState | None = None,
191
- exclude_destructive: bool = True,
192
191
  ) -> str:
193
192
  """Load multiple tool categories at once.
194
193
 
195
- Args:
196
- categories: List of category names to load
197
- state: Optional state container. Uses global state if not provided.
198
- exclude_destructive: If True (default), skip destructive tools (delete operations).
199
- Destructive tools can only be loaded via explicit load_tool call.
200
-
201
- Returns:
202
- Message indicating which tools were loaded or an error message.
194
+ In read-only mode, write tools (read_only=False) are excluded.
203
195
  """
204
196
  if state is None:
205
197
  state = get_global_state()
@@ -222,47 +214,35 @@ def _load_categories_impl(
222
214
  if mcp_connection is None or loop is None:
223
215
  return "Error: MCP connection not available"
224
216
 
225
- # Collect all tool names to load
226
217
  tool_names_to_load: set[str] = set()
227
218
  for category in to_load:
228
219
  tool_names_to_load.update(catalog[category])
229
220
 
230
- # Exclude destructive tools if requested (e.g., during automatic pre-loading)
231
- if exclude_destructive:
232
- destructive_tools = get_destructive_tools()
233
- tool_names_to_load -= destructive_tools
221
+ read_only = is_read_only_mode()
222
+ if read_only:
223
+ tool_names_to_load -= get_write_tools()
234
224
 
235
- # Get all MCP tools and filter
236
225
  mcp_tools = asyncio.run_coroutine_threadsafe(mcp_connection.get_tools(), loop).result()
237
226
  tools_to_add = _filter_mcp_tools_by_names(mcp_tools, tool_names_to_load)
238
227
 
239
228
  if not tools_to_add:
240
229
  return f"No tools found for categories: {to_load}"
241
230
 
242
- # Convert to Anthropic format and add to dynamic tools
243
231
  anthropic_tools = mcp_tools_to_anthropic_format(tools_to_add)
244
232
  state.tools.extend(anthropic_tools)
245
233
 
246
- # Mark categories as loaded
247
234
  for category in to_load:
248
235
  state.loaded_categories.add(category)
249
236
 
250
237
  tool_names = [t.name for t in tools_to_add]
251
238
  logger.info(f"Loaded {len(tool_names)} tools from categories {to_load}: {tool_names}")
252
239
 
253
- return f"Loaded {len(tool_names)} tools from {to_load}: {', '.join(sorted(tool_names))}"
240
+ mode_suffix = " (read-only mode)" if read_only else ""
241
+ return f"Loaded {len(tool_names)} tools from {to_load}{mode_suffix}: {', '.join(sorted(tool_names))}"
254
242
 
255
243
 
256
244
  def preload_categories_for_request(request_text: str) -> str | None:
257
- """Pre-load tool categories based on keywords in the user's request.
258
-
259
- Called automatically on first user message to reduce tool discovery friction.
260
- Destructive tools (delete operations) are excluded - they can only be loaded
261
- via explicit load_tool call.
262
-
263
- Returns:
264
- Message about loaded categories, or None if nothing was loaded.
265
- """
245
+ """Pre-load tool categories based on keywords in the user's request."""
266
246
  suggestions = suggest_categories_for_request(request_text)
267
247
  if not suggestions:
268
248
  return None
@@ -308,18 +288,14 @@ def get_load_tool_definition() -> ToolParam:
308
288
  """Get the tool definition for load_tool."""
309
289
  return {
310
290
  "name": "load_tool",
311
- "description": (
312
- "Load specific MCP tools by name. Use this to load destructive tools "
313
- "(delete operations) which are excluded from load_tool_category. "
314
- "Example: load_tool(['delete_hook']) to enable hook deletion."
315
- ),
291
+ "description": "Load specific MCP tools by name.",
316
292
  "input_schema": {
317
293
  "type": "object",
318
294
  "properties": {
319
295
  "tool_names": {
320
296
  "type": "array",
321
297
  "items": {"type": "string"},
322
- "description": "Tool names to load (e.g., ['delete_hook', 'delete_queue'])",
298
+ "description": "Tool names to load",
323
299
  }
324
300
  },
325
301
  "required": ["tool_names"],
@@ -328,11 +304,7 @@ def get_load_tool_definition() -> ToolParam:
328
304
 
329
305
 
330
306
  def load_tool(tool_names: list[str], state: DynamicToolsState | None = None) -> str:
331
- """Load specific MCP tools by name.
332
-
333
- Use this to load destructive tools (delete operations) that are excluded
334
- from category loading for safety.
335
- """
307
+ """Load specific MCP tools by name. In read-only mode, write tools are excluded."""
336
308
  if state is None:
337
309
  state = get_global_state()
338
310
 
@@ -340,23 +312,26 @@ def load_tool(tool_names: list[str], state: DynamicToolsState | None = None) ->
340
312
  if mcp_connection is None or loop is None:
341
313
  return "Error: MCP connection not available"
342
314
 
343
- # Get all MCP tools
344
315
  mcp_tools = asyncio.run_coroutine_threadsafe(mcp_connection.get_tools(), loop).result()
345
316
  available_tool_names = {t.name for t in mcp_tools}
346
317
 
347
- # Validate requested tool names
348
318
  invalid = [name for name in tool_names if name not in available_tool_names]
349
319
  if invalid:
350
320
  return f"Error: Unknown tools {invalid}"
351
321
 
352
- # Filter to already-loaded tools
322
+ read_only = is_read_only_mode()
323
+ if read_only:
324
+ write_tools = get_write_tools()
325
+ blocked = [name for name in tool_names if name in write_tools]
326
+ if blocked:
327
+ return f"Error: Write tools not available in read-only mode: {blocked}"
328
+
353
329
  already_loaded = {t["name"] for t in state.tools}
354
330
  to_load = [name for name in tool_names if name not in already_loaded]
355
331
 
356
332
  if not to_load:
357
333
  return f"Tools already loaded: {tool_names}"
358
334
 
359
- # Filter MCP tools and convert to Anthropic format
360
335
  tools_to_add = _filter_mcp_tools_by_names(mcp_tools, set(to_load))
361
336
  anthropic_tools = mcp_tools_to_anthropic_format(tools_to_add)
362
337
  state.tools.extend(anthropic_tools)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rossum-agent
3
- Version: 1.0.0rc0
3
+ Version: 1.0.0rc2
4
4
  Summary: AI agent toolkit for Rossum: document workflows conversationally, debug pipelines automatically, and enable agentic configuration of intelligent document processing.
5
5
  Author-email: "Dan Stancl (Rossum AI)" <daniel.stancl@gmail.com>
6
6
  License: MIT
@@ -30,7 +30,7 @@ Requires-Dist: python-dotenv
30
30
  Requires-Dist: requests>=2.32
31
31
  Requires-Dist: rossum-api>=3.8.0
32
32
  Requires-Dist: rossum-deploy>=0.1.0
33
- Requires-Dist: rossum-mcp>=1.0.0
33
+ Requires-Dist: rossum-mcp>=1.0.1
34
34
  Provides-Extra: api
35
35
  Requires-Dist: fastapi>=0.115.0; extra == "api"
36
36
  Requires-Dist: pydantic>2.0.0; extra == "api"
@@ -86,7 +86,7 @@ Dynamic: license-file
86
86
  **AI agent for Rossum document processing. Debug hooks, deploy configs, and automate workflows conversationally.**
87
87
 
88
88
  [![Documentation](https://img.shields.io/badge/docs-latest-blue.svg)](https://stancld.github.io/rossum-agents/)
89
- [![Python](https://img.shields.io/badge/python-3.12%20%7C%203.13%20%7C%203.14-blue.svg)](https://www.python.org/downloads/)
89
+ [![Python](https://img.shields.io/pypi/pyversions/rossum-agent.svg)](https://pypi.org/project/rossum-agent/)
90
90
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
91
91
  [![PyPI - rossum-agent](https://img.shields.io/pypi/v/rossum-agent?label=rossum-agent)](https://pypi.org/project/rossum-agent/)
92
92
  [![Coverage](https://codecov.io/gh/stancld/rossum-agents/branch/master/graph/badge.svg?flag=rossum-agent)](https://codecov.io/gh/stancld/rossum-agents)
@@ -101,7 +101,7 @@ Dynamic: license-file
101
101
  </div>
102
102
 
103
103
  > [!NOTE]
104
- > Community-developed integration (not official Rossum). Early stage - breaking changes expected.
104
+ > Community-developed integration (not official Rossum). Follows semantic versioning from 1.0.0.
105
105
 
106
106
  ## Features
107
107
 
@@ -125,7 +125,8 @@ export ROSSUM_API_BASE_URL="https://api.elis.rossum.ai/v1"
125
125
  export AWS_PROFILE="default" # For Bedrock
126
126
 
127
127
  # Run the agent
128
- uv pip install rossum-agent
128
+ uv pip install rossum-agent[streamlit]
129
+ uv cache clean rossum-agent # Re-init if upgrading
129
130
  rossum-agent
130
131
  ```
131
132
 
@@ -1,4 +1,4 @@
1
- rossum_agent/__init__.py,sha256=gcKOXF61VJGZQrGrwOa5K2MICwAMFBtAol-D7DY_9Z4,235
1
+ rossum_agent/__init__.py,sha256=dPQ3XWxuBaVoAoCutUPRYVOgNldzptqdmwqvrWOgwB0,235
2
2
  rossum_agent/agent_logging.py,sha256=d6V-VxFEiSgaiMV7JZnUA1Chg34SLU_e3ZF42gKmoZU,1848
3
3
  rossum_agent/bedrock_client.py,sha256=Ri3CmeC3DAazT8TnRf0m8rbyd0chSU0p9nI3an04n2E,2423
4
4
  rossum_agent/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -8,7 +8,7 @@ rossum_agent/url_context.py,sha256=u8j9_AFSHnZSkmcMVe6lypKKZ5qL148wKDgPmQA-MBc,5
8
8
  rossum_agent/user_detection.py,sha256=An-B7frKwXg3V0N7tTrbP5YWrsHX2VAk8K7i0JS2JZg,2845
9
9
  rossum_agent/utils.py,sha256=UCQEAKBsvGt7OdU1JG30DykPaGwyVb63ciFc-j09F0U,3709
10
10
  rossum_agent/agent/__init__.py,sha256=QpdTIYGE5MouIf73gIwXL2hvMTrdeJIMT1aCxwVI04k,753
11
- rossum_agent/agent/core.py,sha256=8zcgrWcP5AkNOzUO90wSHeKh0S3ucUcNyef7ajYqAl4,38237
11
+ rossum_agent/agent/core.py,sha256=2yKp5WAolp6O51j9raUuOB_wA46EGqx3xWN9dJebeaA,38299
12
12
  rossum_agent/agent/memory.py,sha256=lfRyFf1coM0JQ5dMFE3x6SjxnQXJhwj3oa_1Vn5Nj5Y,6194
13
13
  rossum_agent/agent/models.py,sha256=fdPZpNfrwxNu3dMz_uiWyyo5j9qnsj8UlppoBZtsz8g,4820
14
14
  rossum_agent/agent/request_classifier.py,sha256=ni0Aq5c6fFhDFv8NyBhJeYe5f2lmFoubN8GOZwa5fLs,5616
@@ -17,7 +17,7 @@ rossum_agent/agent/types.py,sha256=3wlQuHRuVRBeDo22Y-GhVsUwFyJdUdZ8QxmDFsBX6Vg,1
17
17
  rossum_agent/api/__init__.py,sha256=t3qzj02YM9fC82ZESBxPnt3z2psrFQ4uZb-iCzomm-M,47
18
18
  rossum_agent/api/cli.py,sha256=_1K2qGQ_WaSKUMbtIQvNV5iiSGf3wBxbSOXM_bPWN8Q,1681
19
19
  rossum_agent/api/dependencies.py,sha256=MWCMH6dfBZC5l3ARK_4ovti0Blq5gvqPB5xymA-emmg,6900
20
- rossum_agent/api/main.py,sha256=rCp7GYIJkFX8JS5PZ7aVk_53hx-gK7Giu-OCU5iZ7TA,5893
20
+ rossum_agent/api/main.py,sha256=LAmUGcbG9hVTZZtz2Mod-b1iMrNPxGmXXYqUiEX4K0U,5898
21
21
  rossum_agent/api/models/__init__.py,sha256=j4t5I5ptWWMBA_eS5FL3X6MJiAxTDF53ACnJPAvAZbE,54
22
22
  rossum_agent/api/models/schemas.py,sha256=g01hly4XhiwlYXVT6wQHGRVttFZRARtnrTVbxra56t4,9085
23
23
  rossum_agent/api/routes/__init__.py,sha256=L2rqkYFsGSCU1Qnkgrw5ngCisTmLUPH747uX3ess2NA,26
@@ -26,7 +26,7 @@ rossum_agent/api/routes/files.py,sha256=7SvZ1miOC2fwaFsd5ko9rLCvntgc1YbXK8FchB1a
26
26
  rossum_agent/api/routes/health.py,sha256=Sjis2KqfgFkfJAsGFjg5d8BhIswUFhNUfOf56o0MRI4,1435
27
27
  rossum_agent/api/routes/messages.py,sha256=2P7b6hZK_ZL6oqeqZtldAdwT8QCK6Vo9TvEWkb7rc6c,8164
28
28
  rossum_agent/api/services/__init__.py,sha256=oLA7_0cvWSde2ZDAG2lW-KrAj1E2mZDHhgAugftwnNc,40
29
- rossum_agent/api/services/agent_service.py,sha256=K6f5SgJg2BO2T2Sg0PEtc42nWle2XKwbnhR6mOscetg,18391
29
+ rossum_agent/api/services/agent_service.py,sha256=MDeY9UR1GrncC_pGS0UiCPPk9xKrH0PqMyKgfv98isQ,18401
30
30
  rossum_agent/api/services/chat_service.py,sha256=sJMRiYmVeIWMVIDFniMC99e03fdIO0IlZnnheh9c180,6745
31
31
  rossum_agent/api/services/file_service.py,sha256=9hw5n47ZezRKxD0o9d8dgX4mLDILmP7eCJpsXKtSAOM,1992
32
32
  rossum_agent/assets/Primary_light_logo.png,sha256=kKdNl4vB7N2HWjd2WxAe_Hap_PF0LrVHs4rNz066dGA,10441
@@ -40,15 +40,15 @@ rossum_agent/skills/schema-patching.md,sha256=CUUwa-cvgSTHugb1VhgP-MtlcVYyHURLTd
40
40
  rossum_agent/skills/schema-pruning.md,sha256=3lJzT4gUElEoq97uwL0fds78MG8klq-ZJFnNeqVOCnw,681
41
41
  rossum_agent/skills/ui-settings.md,sha256=OVYjUhsaE41kOMVg-e5_6wI0p-g1iikkeEElRx6xURE,1782
42
42
  rossum_agent/streamlit_app/__init__.py,sha256=X_0wth23f5ZE320MxeXY_zl2d7K9EfdWIqdTA-rABVg,59
43
- rossum_agent/streamlit_app/app.py,sha256=mo5946c55zQQRBLQRV13eH-DSvHnyIzXLKxbfgHILdA,26133
43
+ rossum_agent/streamlit_app/app.py,sha256=j_c2FN8fP-LAmfN8D-tQrtXwjgnHidG3jjS1ap02bZs,26143
44
44
  rossum_agent/streamlit_app/beep_sound.py,sha256=uafjXOjM65w6D08aq1KIXAd9aomspOP7FAdmihEFEEI,1016
45
45
  rossum_agent/streamlit_app/cli.py,sha256=5j9LTv8Qz0xX5Y2TXmZFagylSZqZHOmEJJTvJfT6SJ8,424
46
46
  rossum_agent/streamlit_app/render_modules.py,sha256=djB7bdjj9Rea-IifD4vInAwyu2uaQ7yobOdFvbDE5L8,4510
47
47
  rossum_agent/streamlit_app/response_formatting.py,sha256=_FXBIJXQ7iV4Y0oNLbeLGej1Yw4PRjJkjer8vh0BMgM,12066
48
- rossum_agent/tools/__init__.py,sha256=G_GStbSmscHKYLJrJ_OZkhLbQ-0_0lfKdQBFB5W2-BY,5871
49
- rossum_agent/tools/core.py,sha256=CVJa4HiAUVl0H1jLA-ANe3n4g6ubmzfCX__Gqt5eo8U,5504
48
+ rossum_agent/tools/__init__.py,sha256=XtEyO2AiuObkqXzgoJmRQsF_BY4hmoHelIn_fowkNGY,5945
49
+ rossum_agent/tools/core.py,sha256=dHQPXIEjmdam2Hz8q546vdvtCeRAXpq8j_Cw5OV5LGc,5894
50
50
  rossum_agent/tools/deploy.py,sha256=yS7PxnIsIdhdfQ3i9cSMmozDF1eeoBQjE002N1x4Mpc,14738
51
- rossum_agent/tools/dynamic_tools.py,sha256=eAODgnLjf4WhTC1ORkfxYkJuZkMsxiYs0Fc8PKTmomY,12695
51
+ rossum_agent/tools/dynamic_tools.py,sha256=m3DwfdxyiBQd6yTHdodCXLbLNGiSj8d-1qX2_sq7LXY,11620
52
52
  rossum_agent/tools/file_tools.py,sha256=egsWfYa3SFCXL1UySYPmVABuRG04G1sAI5Sf6DQpOKs,1999
53
53
  rossum_agent/tools/formula.py,sha256=nL87iU1EqiPZF_riEQ05bpSnady5TvKmTFmCVVg8Yx4,6785
54
54
  rossum_agent/tools/skills.py,sha256=Oy_OKaMoCIecrbJcVR6-KhDBR3uKDW8yTO-cTWBzydI,1155
@@ -59,9 +59,9 @@ rossum_agent/tools/subagents/hook_debug.py,sha256=5lJiIQAh1nf6uOF05KB4AAjD72cZUw
59
59
  rossum_agent/tools/subagents/knowledge_base.py,sha256=Xr1I6uscK8ETSwx_bS7ZylgtBI5Cj_p1Pmtd08655BI,10580
60
60
  rossum_agent/tools/subagents/mcp_helpers.py,sha256=1yR1gvoWJ1gfzXDcXRwO94viUrRRz7QuRUtCy0dc518,1452
61
61
  rossum_agent/tools/subagents/schema_patching.py,sha256=eJWK3HLdZ15EHr7S8myFo8AbX3N8MTN2r1-tAMb4-K4,17377
62
- rossum_agent-1.0.0rc0.dist-info/licenses/LICENSE,sha256=5nqARgtmPvoIU-1o1az3i8Qi2WOHYIn03vD6haewvEI,1087
63
- rossum_agent-1.0.0rc0.dist-info/METADATA,sha256=tjL2DsG8BuZ3xtS8zLt1WsA_lLveUQ8vMezIYS0JOnE,10917
64
- rossum_agent-1.0.0rc0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
65
- rossum_agent-1.0.0rc0.dist-info/entry_points.txt,sha256=1bbSeeptoKqT5-cWG4BuoMOGh_Crhu1sLL8AHXhbAJ0,115
66
- rossum_agent-1.0.0rc0.dist-info/top_level.txt,sha256=jQm_Tm7Yq8oB68I8Y1BEhGqMGrusIgqfvfzeO1PGQso,13
67
- rossum_agent-1.0.0rc0.dist-info/RECORD,,
62
+ rossum_agent-1.0.0rc2.dist-info/licenses/LICENSE,sha256=5nqARgtmPvoIU-1o1az3i8Qi2WOHYIn03vD6haewvEI,1087
63
+ rossum_agent-1.0.0rc2.dist-info/METADATA,sha256=mQkZ9gN_SOWsdwqYESaVfhi3C6jjIQbS2UutJNXJV2s,10964
64
+ rossum_agent-1.0.0rc2.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
65
+ rossum_agent-1.0.0rc2.dist-info/entry_points.txt,sha256=1bbSeeptoKqT5-cWG4BuoMOGh_Crhu1sLL8AHXhbAJ0,115
66
+ rossum_agent-1.0.0rc2.dist-info/top_level.txt,sha256=jQm_Tm7Yq8oB68I8Y1BEhGqMGrusIgqfvfzeO1PGQso,13
67
+ rossum_agent-1.0.0rc2.dist-info/RECORD,,