# matrx_ai.tools.implementations — Module Overview


## IMPORTANT: Do not edit auto-generated sections.

> This document is partially auto-generated. Sections tagged `<!-- AUTO:id -->` are refreshed by the generator.
> Everything else is yours to edit freely and will never be overwritten.

<!-- AUTO:meta -->
## About This Document

This file is **partially auto-generated**. Sections wrapped in `<!-- AUTO:id -->` tags
are overwritten each time the generator runs. Everything else is yours to edit freely.

| Field | Value |
|-------|-------|
| Module | `packages/matrx-ai/matrx_ai/tools/implementations` |
| Last generated | 2026-05-01 20:54 |
| Output file | `packages/matrx-ai/matrx_ai/tools/implementations/MODULE_README.md` |
| Signature mode | `signatures` |

**To refresh auto-sections:**
```bash
python utils/code_context/generate_module_readme.py packages/matrx-ai/matrx_ai/tools/implementations --mode signatures
```

**To add permanent notes:** Write anywhere outside the `<!-- AUTO:... -->` blocks.
<!-- /AUTO:meta -->

<!-- HUMAN-EDITABLE: This section is yours. Agents & Humans can edit this section freely — it will not be overwritten. -->

## Architecture

> **Fill this in.** Describe the execution flow and layer map for this module.
> See `utils/code_context/MODULE_README_SPEC.md` for the recommended format.
>
> Suggested structure:
>
> ### Layers
> | File | Role |
> |------|------|
> | `entry.py` | Public entry point — receives requests, returns results |
> | `engine.py` | Core dispatch logic |
> | `models.py` | Shared data types |
>
> ### Call Flow (happy path)
> ```
> entry_function() → engine.dispatch() → implementation()
> ```


<!-- AUTO:tree -->
## Directory Tree

> Auto-generated. 25 files across 1 directories.

```
packages/matrx-ai/matrx_ai/tools/implementations/
├── MODULE_README.md
├── __init__.py
├── _summarize_helper.py
├── browser.py
├── code.py
├── ctx.py
├── ctx_write.py
├── database.py
├── datasets_tools.py
├── filesystem.py
├── math.py
├── memory.py
├── news.py
├── notes.py
├── picklists_tools.py
├── questionnaire.py
├── seo.py
├── shell.py
├── tasks.py
├── text.py
├── tool_component.py
├── travel.py
├── vsc.py
├── web.py
├── widgets.py
# excluded: 3 .md
```
<!-- /AUTO:tree -->

<!-- AUTO:signatures -->
## API Signatures

> Auto-generated via `output_mode="signatures"`. ~5-10% token cost vs full source.
> For full source, open the individual files directly.

```
---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/_summarize_helper.py  [python]

  async def summarize_content(content: str, instructions: str, ctx: ToolContext, model_id: str = 'gemini-2.5-flash-preview-05-20') -> tuple[str, list[TokenUsage]]


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/web.py  [python]

  async def web_search(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def web_read(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def research_web(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def _search_with_query(query: str) -> tuple[str, dict[str, Any] | None]


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/vsc.py  [python]

  async def vsc_get_state(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/tasks.py  [python]

  async def task_get(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def task_list(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def task_create(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def task_update(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def task_delete(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/travel.py  [python]

  async def travel_get_location(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def travel_get_weather(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def travel_get_restaurants(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def travel_get_activities(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def travel_get_events(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def travel_create_summary(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/seo.py  [python]

  async def seo_check_meta_titles(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def seo_check_meta_descriptions(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def seo_check_meta_tags_batch(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def seo_get_keyword_data(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/datasets_tools.py  [python]

  def _run_query(query_name: str, params: dict[str, Any]) -> list[dict]
  def _run_batch(query_name: str, batch_params: list[dict], batch_size: int = 50) -> list[dict]
  async def usertable_get_all(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_get_metadata(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_get_fields(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_get_data(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_search_data(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_add_rows(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_update_row(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_delete_row(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_create_advanced(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def usertable_create(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/memory.py  [python]

  EXPIRY_MAP = {'short': timedelta(hours=1), 'medium': timedelta(days=7), 'long': None}
  def _scope_id(ctx: ToolContext, scope: str) -> str | None
  async def memory_store(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def memory_recall(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def memory_search(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def memory_update(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def memory_forget(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/questionnaire.py  [python]

  VALID_COMPONENT_TYPES = {'dropdown', 'checkboxes', 'radio', 'toggle', 'slider', 'input', 'textarea'}
  async def interaction_ask(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/picklists_tools.py  [python]

  async def userlist_create(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def userlist_create_simple(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  def _make_serializable(obj: Any) -> Any
  async def userlist_get_all(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def userlist_get_details(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def userlist_update_item(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def userlist_batch_update(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/tool_component.py  [python]

  async def _get_tools_manager()
  def _get_supabase()
  def _extract_sample_shape(sample: dict) -> dict
  def _dedup_incidents(incidents: list[dict]) -> list[dict]
  async def toolcomp_get_context(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_get_code(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_update_code(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_update_settings(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_get_sample_detail(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_get_incident_detail(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_resolve_incident(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_list_tools(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def toolcomp_create_component(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  def _normalize_whitespace(s: str) -> str
  def _normalize_quotes(s: str) -> str
  def _apply_patch(code: str, old_str: str, new_str: str) -> tuple[str, str]
  async def toolcomp_patch_code(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  def _tool_row(t: dict) -> dict


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/database.py  [python]

  BLOCKED_TABLES = {'conversation', 'message', 'user_request', 'request'}
  READ_ONLY_TABLES = {'agent.definition'}
  MAX_QUERY_TIMEOUT = 10
  def _get_database_name() -> str
  def _write_output(verb: str, rows: Any, returning: str) -> dict[str, Any]  # full (default) echoes rows; minimal returns only ids
  def _split_schema_table(table: str) -> tuple[str | None, str]
  async def _resolve_table(table: str) -> tuple[str | None, str, list[str]]
  def _is_blocked_table(table: str) -> bool
  def _is_read_only(schema: str, name: str) -> bool
  async def _get_table_fks(schema: str, table: str) -> dict[str, list[str]]
  async def db_query(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def db_insert(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def db_update(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def db_schema(args: dict[str, Any], ctx: ToolContext) -> ToolResult  # table mode now returns foreign_keys + referenced_by


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/filesystem.py  [python]

  MAX_READ_SIZE = 1048576
  MAX_PATCH_SIZE = 5242880
  def _proxy_error(exc: SandboxProxyError | Exception, *, tool_name: str, call_id: str, started_at: float) -> ToolResult
  def _resolve_sandbox_path(binding: SandboxBinding, raw: str) -> str
  def _resolve_path(relative: str, ctx: ToolContext) -> Path
  async def fs_read(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def fs_write(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def fs_list(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def fs_search(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def fs_patch(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  def _preview(text: str, limit: int = 160) -> str
  async def fs_mkdir(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/ctx_write.py  [python]

  class _PatchApplyError(Exception):
      def __init__(self, error_type: str, message: str, suggestion: str | None = None, retryable: bool = False) -> None
  async def ctx_patch(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def ctx_create(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def _create_from_patch(args: dict[str, Any], ctx: ToolContext, started_at: float, tool_name: str = 'ctx_patch') -> ToolResult
  def _apply_text_command(command: str, content: str, args: dict[str, Any]) -> tuple[str, str | None]
  def _fuzzy_replace(content: str, old_str: str, new_str: str) -> tuple[str, str]
  def _apply_json_command(command: str, content: Any, args: dict[str, Any]) -> Any
  def _apply_rfc6902(doc: Any, operations: list[dict[str, Any]]) -> Any
  def _apply_rfc7396(target: Any, patch: Any) -> Any
  def _jp_split(path: str) -> list[str]
  def _jp_get(doc: Any, path: str) -> Any
  def _jp_add(doc: Any, path: str, value: Any) -> Any
  def _jp_remove(doc: Any, path: str) -> Any
  def _jp_replace(doc: Any, path: str, value: Any) -> Any
  def _deepcopy_json(value: Any) -> Any
  def _try_parse_json(value: Any) -> Any | None
  def _load_manifest_or_none(app_ctx: Any | None = None) -> tuple[Any | None, Any]
  def _write_back(app_ctx: Any, manifest: Any, key: str, new_content: Any) -> Any
  async def _emit_context_changed(ctx: ToolContext, *, obj: Any, command: str) -> None
  def _schedule_writeback(ctx: ToolContext, obj: Any, *, command: str) -> None
  def _success(tool_name: str, call_id: str, started_at: float, output: Any) -> ToolResult
  def _validation_err(tool_name: str, call_id: str, started_at: float, message: str, suggestion: str | None) -> ToolResult
  def _not_found(tool_name: str, call_id: str, started_at: float, message: str, suggestion: str | None) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/shell.py  [python]

  MAX_OUTPUT_SIZE = 10240
  def _real_program_token(tokens: list[str]) -> str
  def _is_blocked(command: str) -> bool
  def _split_segments(command: str) -> list[str]
  def _build_exit_error_message(*, command: str, exit_code: int, stdout: str, stderr: str) -> str
  def _recovery_hint_for(error_text: str, command: str) -> str | None
  def _workspace_dir(ctx: ToolContext, working_dir: str = '.') -> str
  async def shell_execute(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def shell_python(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/code.py  [python]

  def _workspace_dir(ctx: ToolContext) -> Path
  async def code_execute_python(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def code_store_html(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  def _resolve_project_root(project_root: str) -> str | None
  async def code_fetch_code(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def code_fetch_tree(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/__init__.py  [python]



---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/notes.py  [python]

  async def note_get(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def note_list(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def note_create(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def note_update(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def note_patch(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def note_delete(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/widgets.py  [python]

  WIDGET_CONTENT_KEY = 'widget_content'
  WIDGET_RECORD_KEY = 'widget_record'
  WIDGET_MEDIA_KEY = 'widget_media'
  WIDGET_ARTIFACTS_KEY = 'widget_artifacts'
  async def _has_manifest_key(key: str) -> bool
  def _missing_context_error(tool_name: str, call_id: str, key: str) -> ToolResult
  def _validation_error(tool_name: str, call_id: str, message: str) -> ToolResult
  async def _forward_to_patch(tool_name: str, ctx: ToolContext, patch_args: dict[str, Any]) -> ToolResult
  async def _forward_to_create(tool_name: str, ctx: ToolContext, create_args: dict[str, Any]) -> ToolResult
  async def widget_text_replace(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_text_insert_before(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_text_insert_after(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_text_prepend(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_text_append(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_text_patch(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_update_field(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_update_record(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_attach_media(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def widget_create_artifact(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/browser.py  [python]

  def _mgr()
  async def browser_navigate(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_click(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_type_text(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_screenshot(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_close(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_select_option(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_wait_for(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_get_element(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def browser_scroll(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/text.py  [python]

  async def text_analyze(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def text_regex_extract(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/math.py  [python]

  async def math_calculate(args: dict[str, Any], ctx: ToolContext) -> ToolResult


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/ctx.py  [python]

  async def ctx_get(args: dict[str, Any], ctx: ToolContext) -> ToolResult
  async def _run_summary_agent(agent_id: str, content: str, ctx: ToolContext) -> str


---
Filepath: packages/matrx-ai/matrx_ai/tools/implementations/news.py  [python]

  async def news_get_headlines(args: dict[str, Any], ctx: ToolContext) -> ToolResult
```
<!-- /AUTO:signatures -->

<!-- AUTO:callers -->
## Upstream Callers

> Auto-discovered by scanning all project files that import from this module.
> Set `ENTRY_POINTS` in `generate_readme.py` to pin specific functions.

| Caller | Calls |
|--------|-------|
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_click()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_close()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_get_element()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_navigate()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_screenshot()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_scroll()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_select_option()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_type_text()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `browser_wait_for()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `code_execute_python()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `code_fetch_code()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `code_fetch_tree()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `code_store_html()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `db_insert()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `db_query()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `db_schema()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `db_update()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `fs_list()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `fs_mkdir()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `fs_read()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `fs_search()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `fs_write()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `interaction_ask()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `math_calculate()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `memory_forget()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `memory_recall()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `memory_search()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `memory_store()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `memory_update()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `news_get_headlines()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `research_web()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `seo_check_meta_descriptions()` |
| `matrx_ai/tools/tests/test_seo_tools.py` | `seo_check_meta_descriptions()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `seo_check_meta_tags_batch()` |
| `matrx_ai/tools/tests/test_seo_tools.py` | `seo_check_meta_tags_batch()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `seo_check_meta_titles()` |
| `matrx_ai/tools/tests/test_seo_tools.py` | `seo_check_meta_titles()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `seo_get_keyword_data()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `shell_execute()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `shell_python()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `text_analyze()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `text_regex_extract()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_create_component()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_get_code()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_get_context()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_get_incident_detail()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_get_sample_detail()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_list_tools()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_patch_code()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_resolve_incident()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_update_code()` |
| `matrx_ai/tools/tests/test_toolcomp_tools.py` | `toolcomp_update_settings()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `travel_create_summary()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `travel_get_activities()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `travel_get_events()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `travel_get_location()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `travel_get_restaurants()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `travel_get_weather()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `userlist_batch_update()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `userlist_create()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `userlist_create_simple()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `userlist_get_all()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `userlist_get_details()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `userlist_update_item()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_add_rows()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_create()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_create_advanced()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_delete_row()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_get_all()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_get_data()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_get_fields()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_get_metadata()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_search_data()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `usertable_update_row()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `web_read()` |
| `matrx_ai/tools/tests/mimic_model_tests.py` | `web_search()` |
<!-- /AUTO:callers -->

<!-- AUTO:dependencies -->
## Dependencies

**External packages:** matrx_ai, matrx_connect, matrx_orm, matrx_scraper, matrx_utils, requests
**Internal modules:** seo.utils
<!-- /AUTO:dependencies -->

<!-- AUTO:config -->
## Generation Config

> Auto-managed. Contains the exact parameters used to generate this README.
> Used by parent modules to auto-refresh this file when it is stale.
> Do not edit manually — changes will be overwritten on the next run.

```json
{
  "subdirectory": "packages/matrx-ai/matrx_ai/tools/implementations",
  "mode": "signatures",
  "scope": null,
  "project_noise": null,
  "include_call_graph": true,
  "entry_points": null,
  "call_graph_exclude": null
}
```
<!-- /AUTO:config -->

<!-- AUTO:call_graph -->
## Call Graph

> Auto-generated. All Python files.
> Shows which functions call which. `async` prefix = caller is an async function.
> Method calls shown as `receiver.method()`. Private methods (`_`) excluded by default.

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper

```
async packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.summarize_content → UnifiedConfig.from_dict({'model': model_id, 'system_instruction': "You are a summarization assistant. Summarize the provided content following the user's instructions precisely. Be concise and accurate.", 'messages': []}) (line 29)
  async packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.summarize_content → packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.Agent() (line 39)
  async packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.summarize_content → packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.child_agent_context('summarize_content') (line 42)
  async packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.summarize_content → agent.execute() (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations._summarize_helper.summarize_content → traceback.format_exc() (line 56)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.web

```
Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.web.configure_extensions() (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → time.time() (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.WebSearchArgs() (line 42)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolStreamManager(ctx.emitter, ctx.call_id, 'web_search') (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → stream.progress(f'Searching: {query}') (line 52)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.search_web_mcp_quick() (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → results.get('status') (line 60)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → results.get('result', '') (line 61)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → all_text_results.append(text_content) (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → join(all_text_results) (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → combined_text.strip() (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 70)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → time.time() (line 77)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → stream.progress(f'Search complete — {query_label} finished') (line 85)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 87)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → time.time() (line 91)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → time.time() (line 105)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 111)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_search → time.time() (line 120)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → time.time() (line 128)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.WebReadArgs() (line 129)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolStreamManager(ctx.emitter, ctx.call_id, 'web_read') (line 130)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → stream.progress(f'Reading: {url[:60]}...') (line 139)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.read_page_mcp_quick() (line 140)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → result.get('content', result.get('result', '')) (line 142)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → result.get('result', '') (line 142)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → pages.append({'url': url, 'content': content}) (line 148)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → pages.append({'url': url, 'content': str(result)[:parsed.max_content_length]}) (line 150)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → stream.step('summarize', 'Summarizing page content...') (line 155)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → join((f"URL: {p['url']}\n{p['content']}" for p in pages)) (line 160)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.summarize_content() (line 163)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 168)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → time.time() (line 173)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 178)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → time.time() (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 190)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → time.time() (line 195)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 200)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 202)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.web_read → time.time() (line 208)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.time() (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.WebResearchArgs() (line 216)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolStreamManager(ctx.emitter, ctx.call_id, 'research_web') (line 217)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.get_ext('brave_search') (line 228)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.perf_counter() (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.web._search_with_query → packages.matrx-ai.matrx_ai.tools.implementations.web.async_brave_search() (line 244)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web._search_with_query(q) (line 252)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → asyncio.as_completed(search_tasks) (line 263)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → queries_with_results.append((query, search_result)) (line 269)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → stream.progress(f'Searched: {query}') (line 271)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.perf_counter() (line 274)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → get('results', []) (line 282)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → search_result.get('web', {}) (line 282)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → get('results', []) (line 283)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → search_result.get('news', {}) (line 283)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → r.get('url') (line 287)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → seen_urls.add(url) (line 289)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → filtered_results.append(r) (line 290)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → asyncio.create_task(scrape_urls_from_search_result(search_result=task_search_result, seen_urls=set(), urls_per_query=urls_per_query, good_scrape_threshold=good_scrape_threshold, emitter=ctx.emitter, call_id=ctx.call_id)) (line 300)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.scrape_urls_from_search_result() (line 301)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → scraping_tasks.append(scraping_task) (line 310)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 313)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 315)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.time() (line 322)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → asyncio.gather(*scraping_tasks) (line 328)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.perf_counter() (line 331)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → s.get('is_good_scrape', False) (line 339)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → s.get('is_good_scrape', False) (line 341)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → stream.step('scraping_complete', f'Scraped {len(all_scraped_pages)} pages ({len(good_scrapes)} good, {len(thin_scrapes)} thin, {failed_count} failed)') (line 350)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.format_scraped_pages_section() (line 358)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.generate_search_text_summary(queries_with_results) (line 363)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → full_context_for_agent.strip() (line 374)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → stream.step('condensing', 'Conducting in-depth research analysis on scraped content') (line 375)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → join(parsed.queries) (line 381)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.scrape_research_condenser_agent_1() (line 383)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → join(parsed.queries) (line 424)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.perf_counter() (line 430)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 444)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.time() (line 449)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 453)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 455)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → traceback.format_exc() (line 458)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.time() (line 462)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → traceback.format_exc() (line 467)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolResult() (line 471)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → packages.matrx-ai.matrx_ai.tools.implementations.web.ToolError() (line 473)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → traceback.format_exc() (line 476)
  async packages.matrx-ai.matrx_ai.tools.implementations.web.research_web → time.time() (line 481)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.vsc

```
Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.vsc.frozenset({'vsc_active_file_path', 'vsc_active_file_content', 'vsc_active_file_language', 'vsc_active_file_all', 'vsc_selected_text', 'vsc_diagnostics', 'vsc_workspace_name', 'vsc_workspace_folders', 'vsc_workspace_all', 'vsc_git_branch', 'vsc_git_status', 'vsc_git_all', 'vsc_editor', 'vsc_all'}) (line 20)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.get_ext('IdeState') (line 45)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → args.get('fields', []) (line 47)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolResult() (line 50)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolError() (line 52)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolResult() (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolError() (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.get_app_context() (line 74)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → ...get('ide_state') (line 75)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolResult() (line 78)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolError() (line 80)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → IdeState.model_validate(raw) (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → state.to_variables() (line 90)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → variables.get(field) (line 94)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolResult() (line 96)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolResult() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → packages.matrx-ai.matrx_ai.tools.implementations.vsc.ToolError() (line 101)
  async packages.matrx-ai.matrx_ai.tools.implementations.vsc.vsc_get_state → traceback.format_exc() (line 104)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.tasks

```
async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → time.time() (line 11)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → strip() (line 12)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → args.get('task_id', '') (line 12)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 14)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 16)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → time.time() (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → tasks_manager_instance.get_task(task_id) (line 22)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → result.get('success') (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 24)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 26)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → result.get('error', 'Task not found.') (line 26)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → time.time() (line 27)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 31)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('id') (line 34)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('title') (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('description') (line 36)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('status') (line 37)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('priority') (line 38)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('due_date') (line 39)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('project_id') (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('parent_task_id') (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('assignee_id') (line 42)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('is_public') (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('created_at') (line 44)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → t.get('updated_at') (line 45)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → time.time() (line 47)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 51)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → traceback.format_exc() (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_get → time.time() (line 54)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → time.time() (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → strip() (line 66)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → args.get('project_id', '') (line 66)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → strip() (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → args.get('parent_task_id', '') (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → tasks_manager_instance.list_subtasks(parent_task_id) (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → tasks_manager_instance.list_tasks_for_project(project_id) (line 75)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → tasks_manager_instance.list_tasks_for_user(ctx.user_id) (line 78)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → result.get('success') (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 82)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 84)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → result.get('error', 'Failed to list tasks.') (line 84)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → time.time() (line 85)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → result.get(tasks_key, []) (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → time.time() (line 92)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 96)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 98)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → traceback.format_exc() (line 98)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_list → time.time() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → time.time() (line 105)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → strip() (line 106)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('title', '') (line 106)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 108)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 110)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → time.time() (line 111)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → tasks_manager_instance.create_task() (line 116)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('description', '') (line 119)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('project_id') (line 120)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('parent_task_id') (line 121)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('status', 'incomplete') (line 122)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('priority') (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('due_date') (line 124)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('assignee_id') (line 125)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → args.get('is_public', False) (line 126)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → result.get('success') (line 128)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 129)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → result.get('error', 'Failed to create task.') (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → time.time() (line 132)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → t.get('id') (line 139)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → t.get('title') (line 140)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → t.get('status') (line 141)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → t.get('project_id') (line 142)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → t.get('created_at') (line 143)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → time.time() (line 145)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 149)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → traceback.format_exc() (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_create → time.time() (line 152)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → time.time() (line 158)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → strip() (line 159)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → args.get('task_id', '') (line 159)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 161)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 163)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → time.time() (line 164)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → args.items() (line 167)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 169)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 171)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → time.time() (line 176)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → tasks_manager_instance.update_task(task_id) (line 181)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → result.get('success') (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 185)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → result.get('error', 'Update failed.') (line 185)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → time.time() (line 186)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → t.get('id') (line 191)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → t.get('title') (line 192)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → t.get('status') (line 193)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → t.get('priority') (line 194)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → t.get('updated_at') (line 195)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → result.get('warning_stripped_immutable') (line 197)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 199)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → time.time() (line 201)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 205)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 207)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → traceback.format_exc() (line 207)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_update → time.time() (line 208)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → time.time() (line 214)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → strip() (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → args.get('task_id', '') (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 217)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 219)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → time.time() (line 220)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → tasks_manager_instance.delete_task(task_id) (line 225)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → result.get('success') (line 226)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 227)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → result.get('error', 'Delete failed.') (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → time.time() (line 230)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 233)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → time.time() (line 236)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolResult() (line 240)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → packages.matrx-ai.matrx_ai.tools.implementations.tasks.ToolError() (line 242)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → traceback.format_exc() (line 242)
  async packages.matrx-ai.matrx_ai.tools.implementations.tasks.task_delete → time.time() (line 243)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.travel

```
async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_location → packages.matrx-ai.matrx_ai.tools.implementations.travel.ToolResult() (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_location → random.choice(cities) (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_weather → args.get('city', 'Unknown') (line 21)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_weather → packages.matrx-ai.matrx_ai.tools.implementations.travel.ToolResult() (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_weather → random.choice(conditions) (line 27)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_weather → random.randint(45, 85) (line 28)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_restaurants → args.get('city', 'Unknown') (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_restaurants → random.choice(prefixes) (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_restaurants → random.choice(cuisines) (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_restaurants → random.choice(suffixes) (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_restaurants → packages.matrx-ai.matrx_ai.tools.implementations.travel.ToolResult() (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_activities → args.get('city', 'Unknown') (line 47)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_activities → args.get('weather', 'sunny') (line 48)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_activities → random.sample(indoor if weather.lower() in ('rainy', 'snowy') else outdoor, 3) (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_activities → weather.lower() (line 66)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_activities → packages.matrx-ai.matrx_ai.tools.implementations.travel.ToolResult() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_events → args.get('city', 'Unknown') (line 75)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_events → args.get('weather', 'sunny') (line 76)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_events → random.sample(indoor if weather.lower() in ('rainy', 'snowy') else outdoor, 2) (line 93)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_events → weather.lower() (line 94)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_get_events → packages.matrx-ai.matrx_ai.tools.implementations.travel.ToolResult() (line 96)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → args.get('location', 'Unknown') (line 102)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → args.get('weather_info', {}) (line 103)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → args.get('restaurants', []) (line 104)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → args.get('activities', []) (line 105)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → args.get('events', []) (line 106)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → weather_info.get('condition', 'N/A') (line 108)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → weather_info.get('temperature', 'N/A') (line 109)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → join((f'  - {r}' for r in restaurants)) (line 115)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → join((f'  - {a}' for a in activities)) (line 117)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → join((f'  - {e}' for e in events)) (line 118)
  async packages.matrx-ai.matrx_ai.tools.implementations.travel.travel_create_summary → packages.matrx-ai.matrx_ai.tools.implementations.travel.ToolResult() (line 120)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.seo

```
async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → args.get('titles', []) (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 21)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → packages.matrx-ai.matrx_ai.tools.implementations.seo.calculate_meta_title_metrics(title) (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → analysis.append({'title': title, 'pixel_width': metrics.get('pixel_width'), 'character_count': metrics.get('character_count'), 'desktop_ok': metrics.get('desktop_ok'), 'mobile_ok': metrics.get('mobile_ok'), 'seo_length_ok': metrics.get('seo_length_ok'), 'too_short': metrics.get('too_short'), 'issues': metrics.get('issues', []), 'title_ok': metrics.get('title_ok')}) (line 33)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('pixel_width') (line 36)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('character_count') (line 37)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('desktop_ok') (line 38)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('mobile_ok') (line 39)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('seo_length_ok') (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('too_short') (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('issues', []) (line 42)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → metrics.get('title_ok') (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 46)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 50)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 52)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_titles → traceback.format_exc() (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → args.get('descriptions', []) (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 69)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → packages.matrx-ai.matrx_ai.tools.implementations.seo.calculate_meta_description_metrics(desc) (line 78)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → analysis.append({'description': desc, 'pixel_width': metrics.get('pixel_width'), 'character_count': metrics.get('character_count'), 'desktop_ok': metrics.get('desktop_ok'), 'mobile_ok': metrics.get('mobile_ok'), 'seo_length_ok': metrics.get('seo_length_ok'), 'too_short': metrics.get('too_short'), 'issues': metrics.get('issues', []), 'description_ok': metrics.get('description_ok')}) (line 79)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('pixel_width') (line 82)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('character_count') (line 83)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('desktop_ok') (line 84)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('mobile_ok') (line 85)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('seo_length_ok') (line 86)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('too_short') (line 87)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('issues', []) (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → metrics.get('description_ok') (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 92)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_descriptions → traceback.format_exc() (line 100)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → args.get('meta_data', []) (line 110)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 112)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 114)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 124)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 126)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.analyze_meta_tags_batch(meta_data) (line 133)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 134)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 138)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 140)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_check_meta_tags_batch → traceback.format_exc() (line 141)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.get_ext('keyword_research') (line 150)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('keywords', []) (line 152)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('date_from', '') (line 153)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('date_to', '') (line 154)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('location_code', 2840) (line 155)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('language_code', 'en') (line 156)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('search_partners', True) (line 157)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → args.get('sort_by', 'search_volume') (line 158)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 161)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 163)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 169)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 171)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date.fromisoformat(date_from_str.strip()) (line 178)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date_from_str.strip() (line 178)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date.fromisoformat(date_to_str.strip()) (line 179)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date_to_str.strip() (line 179)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 181)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date.today() (line 189)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 191)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 193)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 200)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 202)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.timedelta() (line 208)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 212)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → four_years_ago.isoformat() (line 214)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → four_years_ago.isoformat() (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date_from_str.strip() (line 219)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → date_to_str.strip() (line 220)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.keyword_research() (line 223)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → json.loads(response) (line 232)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → data.get('tasks', []) (line 234)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → get('status_code') (line 235)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 236)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 238)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → get('status_message', 'Unknown') (line 240)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → get('result', []) (line 244)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.normalize_keyword_item(item) (line 246)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.SeoKeywordDataOutput() (line 250)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 259)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → output.model_dump() (line 259)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolResult() (line 261)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → packages.matrx-ai.matrx_ai.tools.implementations.seo.ToolError() (line 263)
  async packages.matrx-ai.matrx_ai.tools.implementations.seo.seo_get_keyword_data → traceback.format_exc() (line 264)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools

```
packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools._run_query → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.execute_query(query_name, params) (line 30)
  packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools._run_batch → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.execute_query(query_name) (line 39)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → asyncio.to_thread(_run_query, 'datasets_list_for_user', {'user_id': ctx.user_id}) (line 50)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → r.get('id', '') (line 57)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → r.get('table_name', '') (line 58)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → r.get('description', '') (line 59)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → r.get('row_count', 0) (line 60)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → r.get('created_at', '') (line 61)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 69)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_all → traceback.format_exc() (line 70)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → strip() (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → args.get('table_id', '') (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 83)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 85)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → asyncio.to_thread(_run_query, 'datasets_get_metadata', {'table_id': table_id}) (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 95)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 103)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('id', '') (line 106)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('table_name', '') (line 107)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('description', '') (line 108)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('version', 1) (line 109)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('is_public', False) (line 110)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('authenticated_read', False) (line 111)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('row_count', 0) (line 112)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('created_at', '') (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → r.get('updated_at', '') (line 114)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 118)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 120)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_metadata → traceback.format_exc() (line 121)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → strip() (line 132)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → args.get('table_id', '') (line 132)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 134)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → asyncio.to_thread(_run_query, 'datasets_get_fields', {'table_id': table_id}) (line 140)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → r.get('id', '') (line 147)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → r.get('field_name', '') (line 148)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → r.get('display_name', '') (line 149)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → r.get('data_type', 'string') (line 150)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → r.get('field_order', 0) (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → r.get('is_required', False) (line 152)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 156)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 158)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 160)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_fields → traceback.format_exc() (line 161)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → strip() (line 172)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → args.get('table_id', '') (line 172)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 174)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 176)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → args.get('limit', 50) (line 179)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → args.get('offset', 0) (line 180)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → args.get('sort_field') (line 181)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → lower() (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → args.get('sort_direction') (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → asyncio.to_thread(_run_query, query_name, params) (line 201)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → r.get('id', '') (line 208)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → r.get('data', {}) (line 209)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → r.get('created_at', '') (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 214)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 219)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_get_data → traceback.format_exc() (line 222)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → strip() (line 233)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → args.get('table_id', '') (line 233)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → strip() (line 234)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → args.get('search_term', '') (line 234)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 236)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 238)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → args.get('limit', 50) (line 248)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → args.get('offset', 0) (line 249)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → asyncio.to_thread(_run_query, 'datasets_search_rows', {'table_id': table_id, 'search_term': wildcard_term, 'limit': limit, 'offset': offset}) (line 254)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → r.get('id', '') (line 266)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → r.get('data', {}) (line 267)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → r.get('created_at', '') (line 268)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 272)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 281)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 283)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_search_data → traceback.format_exc() (line 284)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → strip() (line 295)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → args.get('table_id', '') (line 295)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → args.get('rows') (line 296)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 298)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 300)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 303)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 305)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → json.dumps(row) (line 312)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → asyncio.to_thread(_run_batch, 'datasets_add_rows_batch', batch_params) (line 317)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 322)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → r.get('id', '') (line 327)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 331)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 333)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_add_rows → traceback.format_exc() (line 334)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → strip() (line 345)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → args.get('row_id', '') (line 345)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → strip() (line 346)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → args.get('table_id', '') (line 346)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → args.get('data') (line 347)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 349)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 351)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 354)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 356)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 359)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 361)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → asyncio.to_thread(_run_query, 'datasets_update_row', {'id': row_id, 'table_id': table_id, 'data': json.dumps(data), 'user_id': ctx.user_id}) (line 367)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → json.dumps(data) (line 373)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 378)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 380)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 385)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → get('id', row_id) (line 386)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 389)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 391)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_update_row → traceback.format_exc() (line 392)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → strip() (line 403)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → args.get('row_id', '') (line 403)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → strip() (line 404)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → args.get('table_id', '') (line 404)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 406)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 408)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 411)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 413)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.get_ext('get_async_supabase_client') (line 418)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.get_async_supabase_client() (line 420)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → execute() (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → eq('user_id', ctx.user_id) (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → eq('table_id', table_id) (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → eq('id', row_id) (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → delete() (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → client.table('udt_dataset_rows') (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 431)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 433)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 438)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 440)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 442)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_delete_row → traceback.format_exc() (line 443)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.get_ext('DatasetCreator') (line 457)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → strip() (line 459)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → args.get('table_name', '') (line 459)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → args.get('description', '') (line 460)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → args.get('data') (line 461)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 464)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 466)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 469)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 471)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.DatasetCreator() (line 478)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → asyncio.to_thread(creator.create_table_from_data, data, table_name, description) (line 479)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('success') (line 485)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 486)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 488)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('error', 'Unknown error.') (line 490)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 493)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('table_id', '') (line 496)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('table_name', table_name) (line 497)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('row_count', len(data)) (line 499)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('field_count', 0) (line 500)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → result.get('existing', False) (line 501)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 505)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 507)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create_advanced → traceback.format_exc() (line 508)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.get_ext('DatasetCreator') (line 520)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → args.get('table_name', '') (line 522)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → args.get('description', '') (line 523)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → args.get('data') (line 524)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 527)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 529)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 532)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 534)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.DatasetCreator() (line 541)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → creator.create_table_from_data() (line 542)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 545)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolResult() (line 555)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.ToolError() (line 557)
  async packages.matrx-ai.matrx_ai.tools.implementations.datasets_tools.usertable_create → traceback.format_exc() (line 560)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.memory

```
Global Scope → logging.getLogger(__name__) (line 19)
  Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.memory.timedelta() (line 22)
  Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.memory.timedelta() (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → time.time() (line 37)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → packages.matrx-ai.matrx_ai.tools.implementations.memory.MemoryStoreArgs() (line 38)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → EXPIRY_MAP.get(parsed.memory_type) (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → isoformat() (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → datetime.now(UTC) (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → packages.matrx-ai.matrx_ai.tools.implementations.memory._scope_id(ctx, parsed.scope) (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → ...filter_cx_agent_memories() (line 57)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → isoformat() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → datetime.now(UTC) (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → ...update_cx_agent_memory(existing[0].id) (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → isoformat() (line 74)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → datetime.now(UTC) (line 74)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → ...create_cx_agent_memory() (line 76)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 78)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → time.time() (line 82)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 87)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolError() (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_store → time.time() (line 93)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → time.time() (line 100)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → packages.matrx-ai.matrx_ai.tools.implementations.memory.MemoryRecallArgs() (line 101)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → packages.matrx-ai.matrx_ai.tools.implementations.memory._scope_id(ctx, parsed.scope) (line 109)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → ...filter_cx_agent_memories() (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → item.to_dict() (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → asyncio.create_task(cxm.agent_memory.update_cx_agent_memory(item.id, access_count=(item.access_count or 0) + 1, last_accessed_at=datetime.now(UTC).isoformat())) (line 127)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → ...update_cx_agent_memory(item.id) (line 128)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → isoformat() (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → datetime.now(UTC) (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 135)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → time.time() (line 139)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 144)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolError() (line 146)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_recall → time.time() (line 150)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → time.time() (line 157)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → packages.matrx-ai.matrx_ai.tools.implementations.memory.MemorySearchArgs() (line 158)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → ...filter_cx_agent_memories() (line 167)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → ...lower() (line 169)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → lower() (line 172)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → lower() (line 173)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → item.to_dict() (line 177)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 179)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → time.time() (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolError() (line 190)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_search → time.time() (line 194)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → time.time() (line 201)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → packages.matrx-ai.matrx_ai.tools.implementations.memory.MemoryUpdateArgs() (line 202)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → ...filter_cx_agent_memories() (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolError() (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → time.time() (line 220)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → isoformat() (line 227)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → datetime.now(UTC) (line 227)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → ...update_cx_agent_memory(existing[0].id) (line 232)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 234)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → time.time() (line 238)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolError() (line 245)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_update → time.time() (line 249)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → time.time() (line 256)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → packages.matrx-ai.matrx_ai.tools.implementations.memory.MemoryForgetArgs() (line 257)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → ...filter_cx_agent_memories() (line 265)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → ...delete_cx_agent_memory(item.id) (line 269)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 272)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → time.time() (line 276)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolResult() (line 281)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → packages.matrx-ai.matrx_ai.tools.implementations.memory.ToolError() (line 283)
  async packages.matrx-ai.matrx_ai.tools.implementations.memory.memory_forget → time.time() (line 287)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.questionnaire

```
async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → args.get('introduction', '') (line 19)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 21)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → args.get('questions') (line 28)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 30)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 39)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 49)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 51)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 58)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 60)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 70)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 79)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 90)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.QuestionnaireDisplayData() (line 107)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → emitter.send_tool_event({'event': 'tool_step', 'call_id': ctx.call_id, 'tool_name': ctx.tool_name, 'message': 'Displaying questionnaire', 'data': frontend_payload.model_dump()}) (line 116)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → frontend_payload.model_dump() (line 122)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → emitter.send_data(frontend_payload) (line 126)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 128)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolError() (line 138)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.ToolResult() (line 143)
  async packages.matrx-ai.matrx_ai.tools.implementations.questionnaire.interaction_ask → frontend_payload.model_dump() (line 147)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools

```
async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.get_ext('PicklistCreator') (line 12)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → args.get('list_name', '') (line 14)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → args.get('description', '') (line 15)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → args.get('items', []) (line 16)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 19)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 21)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 24)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 26)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → item.get('label') (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 33)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.PicklistCreator(ctx.user_id) (line 42)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → creator.create_list_with_items(items, list_name, description) (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 44)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 56)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 57)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.get_ext('PicklistCreator') (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → args.get('list_name', '') (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → args.get('description', '') (line 66)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → args.get('labels', []) (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → args.get('group_name') (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 71)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 73)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 76)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 78)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → label.strip() (line 85)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 86)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.PicklistCreator(ctx.user_id) (line 95)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → creator.create_simple_list(labels, list_name, description, group_name) (line 96)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 109)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_create_simple → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 110)
  packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable → obj.isoformat() (line 121)
  packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable → obj.isoformat() (line 123)
  packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable(v) (line 125)
  packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable → obj.items() (line 125)
  packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable(i) (line 127)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → args.get('page', 1) (line 134)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → args.get('page_size', 50) (line 135)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → args.get('search_term') (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.execute_standard_query('picklists_search', {'user_id': ctx.user_id, 'search_term': f'%{search_term}%', 'limit': page_size, 'offset': offset}) (line 141)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.execute_standard_query('picklists_list_for_user', {'user_id': ctx.user_id}) (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable(raw) (line 154)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable(result) (line 162)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 163)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 175)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_all → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 176)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → args.get('list_id') (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → args.get('group_by', False) (line 184)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 187)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 189)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.execute_standard_query('picklists_get', {'list_id': list_id}) (line 193)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 195)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 197)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.execute_standard_query(query_name, {'list_id': list_id}) (line 207)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 209)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools._make_serializable({'list': list_data, 'items': items or [], 'is_grouped': group_by}) (line 211)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 222)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_get_details → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 223)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → args.get('item_id') (line 230)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 232)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 234)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 252)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 254)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.execute_standard_query('picklists_update_item', {'item_id': item_id, 'user_id': ctx.user_id, 'label': update_fields.get('label'), 'description': update_fields.get('description'), 'help_text': update_fields.get('help_text'), 'group_name': update_fields.get('group_name'), 'is_public': args.get('is_public'), 'authenticated_read': args.get('authenticated_read'), 'public_read': args.get('public_read'), 'icon_name': args.get('icon_name')}) (line 261)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → update_fields.get('label') (line 266)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → update_fields.get('description') (line 267)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → update_fields.get('help_text') (line 268)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → update_fields.get('group_name') (line 269)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → args.get('is_public') (line 270)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → args.get('authenticated_read') (line 271)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → args.get('public_read') (line 272)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → args.get('icon_name') (line 273)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 276)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 283)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_update_item → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 284)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → args.get('list_id') (line 291)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → args.get('items', []) (line 292)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 295)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 297)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 300)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolError() (line 302)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('id') (line 311)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → failed_items.append({'item': item, 'error': "Missing 'id' field."}) (line 313)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.execute_standard_query('picklists_update_item', {'item_id': item_id, 'user_id': ctx.user_id, 'label': item.get('label'), 'description': item.get('description'), 'help_text': item.get('help_text'), 'group_name': item.get('group_name'), 'is_public': item.get('is_public'), 'authenticated_read': item.get('authenticated_read'), 'public_read': item.get('public_read'), 'icon_name': item.get('icon_name')}) (line 316)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('label') (line 321)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('description') (line 322)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('help_text') (line 323)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('group_name') (line 324)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('is_public') (line 325)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('authenticated_read') (line 326)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('public_read') (line 327)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → item.get('icon_name') (line 328)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → failed_items.append({'item_id': item_id, 'error': error_mesage}) (line 335)
  async packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.userlist_batch_update → packages.matrx-ai.matrx_ai.tools.implementations.picklists_tools.ToolResult() (line 337)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.tool_component

```
packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.get_ext('get_async_supabase_client') (line 19)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('final_payload') (line 30)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → final_payload.get('output') (line 31)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → output.get('full_result') (line 32)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → final_payload.get('metadata') (line 33)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('raw_stream_events') (line 35)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → ev.get('event', '') (line 38)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → ev.get('data') (line 39)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → get('event') (line 42)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → timeline.append({'event': 'chunk', 'note': '(streaming text)'}) (line 43)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('status') (line 51)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('user_message') (line 52)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('system_message') (line 52)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('event') (line 54)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('message') (line 55)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('tool_name') (line 56)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('status') (line 58)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('event') (line 60)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → data.get('reason') (line 64)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → timeline.append(entry) (line 66)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → full_result.get('output', '') (line 68)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → preview_text.rfind(' ', 700, 900) (line 73)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('id') (line 79)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('is_success') (line 80)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('use_for_component') (line 81)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('arguments') (line 82)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → full_result.get('duration_ms') (line 86)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape → sample.get('admin_comments') (line 89)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('error_stack') (line 109)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('error_type') (line 111)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('error_message') (line 112)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('id') (line 118)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('component_type') (line 119)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('error_type') (line 120)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('error_message') (line 121)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('component_version') (line 123)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('resolved') (line 124)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('resolution_notes') (line 125)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('tool_update_snapshot') (line 129)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → keys() (line 128)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → inc.get('created_at') (line 134)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → append(ts) (line 136)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → groups.values() (line 139)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → result.append(group) (line 145)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → result.sort() (line 148)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents → g.get('last_seen') (line 148)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → strip() (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → args.get('tool_name', '') (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → strip() (line 167)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → args.get('tool_id', '') (line 167)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 170)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 172)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 180)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → execute() (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → eq('name', tool_name) (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → select('id') (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → client.table('tools') (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 186)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → execute() (line 196)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → eq('id', tool_id) (line 196)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → select('id, name, description, parameters, output_schema, annotations, function_path, category, tags, icon, is_active') (line 196)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → client.table('tools') (line 196)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 202)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 204)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → execute() (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → eq('tool_id', tool_id) (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → select('*') (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → client.table('tool_ui_components') (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → execute() (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → limit(3) (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → order('created_at') (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → eq('tool_id', tool_id) (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → select('*') (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → client.table('tool_test_samples') (line 213)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape(s) (line 217)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → s.get('use_for_component') (line 218)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → execute() (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → limit(50) (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → order('created_at') (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → eq('resolved', False) (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → eq('tool_name', resolved_tool_name) (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → select('*') (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → client.table('tool_ui_incidents') (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._dedup_incidents(incident_res.data or []) (line 224)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → component_summaries.append({'id': comp.get('id'), 'display_name': comp.get('display_name'), 'results_label': comp.get('results_label'), 'language': comp.get('language'), 'version': comp.get('version'), 'is_active': comp.get('is_active'), 'keep_expanded_on_stream': comp.get('keep_expanded_on_stream'), 'allowed_imports': comp.get('allowed_imports'), 'notes': comp.get('notes'), 'has_inline_code': bool(comp.get('inline_code')), 'has_overlay_code': bool(comp.get('overlay_code')), 'has_utility_code': bool(comp.get('utility_code')), 'has_header_extras_code': bool(comp.get('header_extras_code')), 'has_header_subtitle_code': bool(comp.get('header_subtitle_code')), 'inline_code_length': len(comp.get('inline_code') or ''), 'overlay_code_length': len(comp.get('overlay_code') or ''), 'created_at': comp.get('created_at'), 'updated_at': comp.get('updated_at')}) (line 228)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('id') (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('display_name') (line 230)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('results_label') (line 231)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('language') (line 232)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('version') (line 233)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('is_active') (line 234)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('keep_expanded_on_stream') (line 235)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('allowed_imports') (line 236)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('notes') (line 237)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('inline_code') (line 238)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('overlay_code') (line 239)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('utility_code') (line 240)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('header_extras_code') (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('header_subtitle_code') (line 242)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('inline_code') (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('overlay_code') (line 244)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('created_at') (line 245)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → comp.get('updated_at') (line 246)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 252)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 273)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 275)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_context → traceback.format_exc() (line 278)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → strip() (line 298)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → args.get('component_id', '') (line 298)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → args.get('sections') (line 299)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 302)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 304)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 314)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 316)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 323)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → join(sections) (line 324)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → execute() (line 325)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → eq('id', component_id) (line 325)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → select(fields) (line 325)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → client.table('tool_ui_components') (line 325)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 328)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 330)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get('language') (line 334)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get(s) (line 339)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get('tool_name') (line 344)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get('display_name') (line 345)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get('version') (line 346)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get('allowed_imports') (line 348)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → json.dumps(metadata) (line 355)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → comp.get(section) (line 358)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → parts.append(f'\n\n[{section}]\n```{lang}\n{code}\n```') (line 359)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → join(parts) (line 361)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 363)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 366)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 368)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_code → traceback.format_exc() (line 368)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → strip() (line 380)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → args.get('component_id', '') (line 380)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → args.get('updates') (line 381)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → strip() (line 382)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → args.get('notes', '') (line 382)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → args.get('bump_version', False) (line 383)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 386)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 388)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 394)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 396)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 404)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 406)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 410)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → execute() (line 413)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → eq('id', component_id) (line 413)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → select('version') (line 413)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → client.table('tool_ui_components') (line 413)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → get('version', '1.0.0') (line 415)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → ver.split('.') (line 416)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → join(parts) (line 419)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → execute() (line 426)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → eq('id', component_id) (line 426)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → update(updates) (line 426)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → client.table('tool_ui_components') (line 426)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 429)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 431)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 435)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → updates.keys() (line 439)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → updated.get('version') (line 440)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → updated.get('updated_at') (line 441)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 447)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 449)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_code → traceback.format_exc() (line 449)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → strip() (line 461)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → args.get('component_id', '') (line 461)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → args.get('settings') (line 462)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 465)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 467)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 476)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 478)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 485)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 487)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 494)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 496)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 500)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → execute() (line 501)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → eq('id', component_id) (line 501)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → update(settings) (line 501)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → client.table('tool_ui_components') (line 501)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 504)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 506)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 510)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → settings.keys() (line 514)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → updated.get('updated_at') (line 515)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 520)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 522)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_update_settings → traceback.format_exc() (line 522)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → strip() (line 537)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → args.get('sample_id', '') (line 537)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → args.get('full_events', False) (line 538)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 541)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 543)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 547)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → execute() (line 548)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → eq('id', sample_id) (line 548)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → select('*') (line 548)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → client.table('tool_test_samples') (line 548)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 551)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 553)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 559)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → sample.get('arguments') (line 563)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → sample.get('is_success') (line 564)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → sample.get('raw_stream_events') (line 565)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → sample.get('final_payload') (line 566)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → sample.get('admin_comments') (line 567)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 571)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._extract_sample_shape(sample) (line 573)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 577)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 579)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_sample_detail → traceback.format_exc() (line 579)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → strip() (line 592)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → args.get('incident_id', '') (line 592)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 595)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 597)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 601)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → execute() (line 602)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → eq('id', incident_id) (line 602)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → select('*') (line 602)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → client.table('tool_ui_incidents') (line 602)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 605)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 607)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 611)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('tool_name') (line 615)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('component_id') (line 616)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('component_type') (line 617)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('component_version') (line 618)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('error_type') (line 619)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('error_message') (line 620)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('error_stack') (line 621)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('browser_info') (line 622)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('session_id') (line 623)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('tool_update_snapshot') (line 624)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('resolved') (line 625)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('resolution_notes') (line 626)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → incident.get('created_at') (line 627)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 632)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 634)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_get_incident_detail → traceback.format_exc() (line 634)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → strip() (line 645)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → args.get('incident_id', '') (line 645)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → strip() (line 646)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → args.get('resolution_notes', '') (line 646)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 649)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 651)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 656)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → isoformat() (line 659)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → datetime.now(timezone.utc) (line 659)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → execute() (line 665)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → eq('id', incident_id) (line 665)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → update(updates) (line 665)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → client.table('tool_ui_incidents') (line 665)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 668)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 670)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 673)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 684)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 686)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_resolve_incident → traceback.format_exc() (line 686)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → strip() (line 714)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('category', '') (line 714)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → strip() (line 715)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('source_app', '') (line 715)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → strip() (line 716)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('prefix', '') (line 716)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → strip() (line 717)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('tag', '') (line 717)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('has_component') (line 718)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('is_active') (line 719)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → strip() (line 720)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('group_by', '') (line 720)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('limit', 30) (line 721)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → args.get('offset', 0) (line 722)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 725)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 727)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 734)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → order('name') (line 739)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → select('id, name, description, category, tags, is_active, source_app') (line 739)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → client.table('tools') (line 739)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → query.eq('category', category) (line 744)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → query.eq('source_app', source_app) (line 746)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → query.eq('is_active', is_active) (line 748)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → query.ilike('name', f'{prefix}_%') (line 751)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → execute() (line 753)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → query.limit(500) (line 753)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → t.get('tags') (line 759)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → execute() (line 762)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → select('tool_id') (line 762)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → client.table('tool_ui_components') (line 762)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row → t.get('description') (line 775)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row → t.get('category') (line 776)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row → t.get('tags') (line 777)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row → t.get('is_active') (line 778)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row → t.get('source_app') (line 779)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → split('_') (line 787)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → t.get('category') (line 789)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → t.get('source_app') (line 791)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → append(_tool_row(t)) (line 793)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → groups.setdefault(key, []) (line 793)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row(t) (line 793)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → groups.items() (line 795)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 796)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 817)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._tool_row(t) (line 826)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 831)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 833)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_list_tools → traceback.format_exc() (line 833)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → strip() (line 846)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('tool_id', '') (line 846)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → strip() (line 847)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('display_name', '') (line 847)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → strip() (line 848)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('inline_code', '') (line 848)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → strip() (line 849)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('overlay_code', '') (line 849)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → strip() (line 850)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('results_label', '') (line 850)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('allowed_imports') (line 851)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('language', 'tsx') (line 852)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → strip() (line 853)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → args.get('notes', '') (line 853)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 856)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 858)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 865)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → execute() (line 867)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → eq('id', tool_id) (line 867)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → select('id, name') (line 867)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → client.table('tools') (line 867)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 869)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 871)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → execute() (line 875)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → eq('tool_id', tool_id) (line 875)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → select('id') (line 875)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → client.table('tool_ui_components') (line 875)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 877)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 879)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → execute() (line 903)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → insert(payload) (line 903)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → client.table('tool_ui_components') (line 903)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 906)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 908)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 912)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → created.get('id') (line 915)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → created.get('created_at') (line 919)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 925)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 927)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_create_component → traceback.format_exc() (line 927)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_whitespace → strip() (line 937)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_whitespace → re.sub('\\s+', ' ', s) (line 937)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_quotes → replace('’', "'") (line 942)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_quotes → s.replace('‘', "'") (line 942)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_quotes → replace('”', '"') (line 943)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_quotes → s.replace('“', '"') (line 943)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._normalize_quotes → s.replace('`', "'") (line 944)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → code.replace(old_str, new_str, 1) (line 962)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → re.escape(old_str) (line 966)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → re.sub('(\\\\ |\\\\\\t|\\\\\\n|\\\\\\r)+', '\\\\s+', escaped) (line 967)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → re.search(ws_pattern, code) (line 968)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → match.start() (line 970)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → match.end() (line 970)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → parts.append(quote_chars) (line 979)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → parts.append('\\s+') (line 982)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → parts.append(re.escape(ch)) (line 986)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → re.escape(ch) (line 986)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → join(parts) (line 989)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → re.search(combined, code) (line 990)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → match.start() (line 992)
  packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch → match.end() (line 992)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → strip() (line 1015)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → args.get('component_id', '') (line 1015)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → strip() (line 1016)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → args.get('section', 'inline_code') (line 1016)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → args.get('patches') (line 1017)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → strip() (line 1018)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → args.get('notes', '') (line 1018)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → args.get('bump_version', False) (line 1019)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1024)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1026)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1030)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1032)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1039)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1041)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1046)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1048)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._get_supabase() (line 1055)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → execute() (line 1056)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → eq('id', component_id) (line 1056)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → select(f'id, {section}, version') (line 1056)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → client.table('tool_ui_components') (line 1056)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1061)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1063)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → comp.get(section) (line 1067)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1070)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1072)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → patch.get('description', f'patch {i + 1}') (line 1085)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component._apply_patch(working_code, old_str, new_str) (line 1088)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → patch_results.append({'index': i, 'description': description, 'status': 'applied', 'match_round': round_used}) (line 1089)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1096)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1098)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → comp.get('version', '1.0.0') (line 1119)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → ver.split('.') (line 1120)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → join(parts) (line 1123)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → execute() (line 1130)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → eq('id', component_id) (line 1130)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → update(update_payload) (line 1130)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → client.table('tool_ui_components') (line 1130)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1133)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → updated.get('version') (line 1140)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → updated.get('updated_at') (line 1141)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolResult() (line 1147)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → packages.matrx-ai.matrx_ai.tools.implementations.tool_component.ToolError() (line 1149)
  async packages.matrx-ai.matrx_ai.tools.implementations.tool_component.toolcomp_patch_code → traceback.format_exc() (line 1149)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.database

Regenerate this call graph from the current ORM-backed implementation; the stale PostgREST/RPC graph was removed because it advertised deleted SQL execution paths.

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.filesystem

```
Global Scope → logging.getLogger(__name__) (line 44)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 61)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 63)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error → time.time() (line 65)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path → raw.startswith('/') (line 82)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path → raw.startswith('~/') (line 84)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path → ...rstrip('/') (line 85)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path → ...rstrip('/') (line 86)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.scoped_base_for(ctx.user_id, ctx.project_id) (line 90)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path → resolve() (line 91)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path → base.resolve() (line 92)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path → startswith(str(base_resolved)) (line 93)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.PermissionError(f"Path escapes workspace.\n  requested:        {relative}\n  resolved to:      {resolved}\n  workspace base:   {base_resolved}\n  recover by:\n    - binding a sandbox to this conversation (then absolute paths like /home/agent/aidream/... are valid — that's the sandbox's home)\n    - OR passing a path RELATIVE to the workspace base above\n    - OR using shell_execute if you need to read something outside the workspace (multi-tenant aidream still runs the file-system permission check; shell_execute follows POSIX permissions instead)") (line 100)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → time.time() (line 117)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.FsReadArgs() (line 118)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.get_active_sandbox() (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path(binding, parsed.path) (line 125)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_read(binding, sandbox_path) (line 126)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 127)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → text.encode('utf-8') (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → time.time() (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error(exc) (line 141)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path(parsed.path, ctx) (line 144)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → filepath.exists() (line 145)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 146)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 148)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → time.time() (line 152)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → filepath.stat() (line 157)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.open(filepath) (line 161)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → f.seek(parsed.offset) (line 163)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → f.read(read_limit) (line 164)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → time.time() (line 175)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 180)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → time.time() (line 184)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 189)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 191)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_read → time.time() (line 193)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → time.time() (line 200)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.FsWriteArgs() (line 201)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.get_active_sandbox() (line 203)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path(binding, parsed.path) (line 205)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_read(binding, sandbox_path) (line 212)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_write(binding, sandbox_path, content) (line 216)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.emit_fs_changed() (line 223)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → stat.get('size') (line 226)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 228)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → stat.get('size') (line 230)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → time.time() (line 232)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error(exc) (line 237)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path(parsed.path, ctx) (line 240)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → filepath.exists() (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → ...mkdir() (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.open(filepath, mode) (line 246)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → f.write(parsed.content) (line 247)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → filepath.stat() (line 249)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.emit_fs_changed() (line 250)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → filepath.stat() (line 256)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 260)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → ...encode() (line 264)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → time.time() (line 268)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 273)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 275)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → time.time() (line 277)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 282)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 284)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_write → time.time() (line 286)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → time.time() (line 293)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.FsListArgs() (line 294)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.get_active_sandbox() (line 296)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path(binding, parsed.path) (line 298)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_list(binding, sandbox_path) (line 299)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → data.get('entries', []) (line 301)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('kind') (line 305)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → entries.append({'name': e.get('name') or (e.get('path') or '').rsplit('/', 1)[-1], 'path': e.get('path'), 'is_dir': kind == 'dir' if kind is not None else bool(e.get('is_dir')), 'size': e.get('size'), 'mtime': e.get('mtime')}) (line 306)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('name') (line 308)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → rsplit('/', 1) (line 308)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('path') (line 308)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('path') (line 309)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('is_dir') (line 310)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('size') (line 311)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → e.get('mtime') (line 312)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 315)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → time.time() (line 319)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error(exc) (line 324)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path(parsed.path, ctx) (line 327)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → dirpath.is_dir() (line 328)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 329)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 331)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → time.time() (line 336)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → dirpath.rglob('*') (line 342)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → dirpath.iterdir() (line 342)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → fnmatch.fnmatch(entry.name, parsed.pattern) (line 344)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → entries.append({'name': entry.name, 'path': str(entry.relative_to(dirpath)), 'is_dir': entry.is_dir(), 'size': entry.stat().st_size if entry.is_file() else 0}) (line 346)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → entry.relative_to(dirpath) (line 349)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → entry.is_dir() (line 350)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → entry.is_file() (line 351)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → entry.stat() (line 351)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 357)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → time.time() (line 361)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 366)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 368)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → time.time() (line 370)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 375)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 377)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_list → time.time() (line 379)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → time.time() (line 386)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.FsSearchArgs() (line 387)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.get_active_sandbox() (line 389)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path(binding, parsed.path) (line 391)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_search(binding, parsed.pattern) (line 392)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 399)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → data.get('results', []) (line 402)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → time.time() (line 408)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error(exc) (line 413)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path(parsed.path, ctx) (line 416)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → basepath.is_dir() (line 417)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 418)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 420)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → time.time() (line 425)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → basepath.rglob('*') (line 433)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → entry.is_dir() (line 436)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → entry.read_text() (line 441)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → m.group() (line 442)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → re.finditer(parsed.pattern, content) (line 442)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → results.append({'path': str(entry.relative_to(basepath)), 'matches': matches[:10]}) (line 444)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → entry.relative_to(basepath) (line 446)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → fnmatch.fnmatch(entry.name, parsed.pattern) (line 453)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → results.append({'path': str(entry.relative_to(basepath)), 'size': entry.stat().st_size}) (line 454)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → entry.relative_to(basepath) (line 456)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → entry.stat() (line 457)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 461)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → time.time() (line 465)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 470)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 472)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → time.time() (line 474)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 479)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 481)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_search → time.time() (line 483)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 503)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.FsPatchArgs() (line 504)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.get_active_sandbox() (line 506)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path(binding, parsed.path) (line 508)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_patch(binding, sandbox_path, edits) (line 513)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.emit_fs_changed() (line 519)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 524)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 528)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error(exc) (line 533)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path(parsed.path, ctx) (line 536)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → filepath.exists() (line 537)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 541)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 543)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 549)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 555)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 557)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 562)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → filepath.stat() (line 568)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 570)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 572)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 578)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → filepath.read_text() (line 582)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → applied_summaries.append({'edit_index': i, 'mode': 'create', 'added_chars': len(edit.new_text)}) (line 591)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → content.count(edit.old_text) (line 597)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → failures.append({'edit_index': i, 'reason': 'old_text not found in current file content', 'old_text_preview': _preview(edit.old_text)}) (line 599)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._preview(edit.old_text) (line 602)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → failures.append({'edit_index': i, 'reason': f'old_text matches {count} locations — add surrounding context to make it unique, or set replace_all=True to update every match.', 'old_text_preview': _preview(edit.old_text)}) (line 606)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._preview(edit.old_text) (line 612)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → content.replace(edit.old_text, edit.new_text) (line 617)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → applied_summaries.append({'edit_index': i, 'mode': 'replace_all', 'matches_replaced': count, 'delta_chars': (len(edit.new_text) - len(edit.old_text)) * count}) (line 618)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → content.replace(edit.old_text, edit.new_text, 1) (line 624)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → applied_summaries.append({'edit_index': i, 'mode': 'replace', 'delta_chars': len(edit.new_text) - len(edit.old_text)}) (line 625)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 631)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 633)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 639)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → ...mkdir() (line 645)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → filepath.write_text(content) (line 646)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.emit_fs_changed() (line 648)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → filepath.stat() (line 655)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 659)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 670)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 676)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 678)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 680)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 685)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 687)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_patch → time.time() (line 689)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._preview → splitlines() (line 697)
  packages.matrx-ai.matrx_ai.tools.implementations.filesystem._preview → text.strip() (line 697)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → time.time() (line 702)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.FsMkdirArgs() (line 703)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.get_active_sandbox() (line 705)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_sandbox_path(binding, parsed.path) (line 707)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_fs_mkdir(binding, sandbox_path) (line 708)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.emit_fs_changed() (line 709)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 714)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → time.time() (line 718)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._proxy_error(exc) (line 723)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem._resolve_path(parsed.path, ctx) (line 726)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → dirpath.exists() (line 727)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → dirpath.mkdir() (line 728)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.emit_fs_changed() (line 731)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 738)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → time.time() (line 742)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 747)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 749)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → time.time() (line 751)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolResult() (line 756)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → packages.matrx-ai.matrx_ai.tools.implementations.filesystem.ToolError() (line 758)
  async packages.matrx-ai.matrx_ai.tools.implementations.filesystem.fs_mkdir → time.time() (line 760)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.ctx_write

```
Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.frozenset({'str_replace', 'insert', 'append', 'prepend', 'overwrite', 'json_patch', 'json_merge'}) (line 49)
  Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.frozenset({'str_replace', 'insert', 'append', 'prepend', 'overwrite'}) (line 59)
  Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.frozenset({'json_patch', 'json_merge'}) (line 60)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → time.time() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → strip() (line 71)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → args.get('key') (line 71)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → strip() (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → args.get('command') (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, 'key is required.', 'Provide the context object key to edit (see the Available Context manifest).') (line 75)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, f"Invalid command '{command}'.", f'Use one of: {sorted(_VALID_COMMANDS)}') (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._load_manifest_or_none() (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._not_found(tool_name, ctx.call_id, started_at, 'No context objects are available for this request.', 'The caller must include a context dict in the request body.') (line 90)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → manifest.get(key) (line 96)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → args.get('create_if_missing') (line 101)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch(args, ctx, started_at) (line 102)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._not_found(tool_name, ctx.call_id, started_at, f"Context object '{key}' not found.", f'Available keys: {available}. Pass create_if_missing=true to create it.') (line 104)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, f"Context object '{key}' is read-only and cannot be edited.", f"Editable keys: {manifest.mutable_keys() or '(none)'}. Tell the user you cannot modify this item directly; suggest an alternative or ask them to mark the item editable.") (line 112)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → manifest.mutable_keys() (line 115)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → obj.content_as_str() (line 122)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command(command, old_content, args) (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._write_back(app_ctx, manifest, key, new_content) (line 124)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._emit_context_changed(ctx) (line 125)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._schedule_writeback(ctx, updated) (line 126)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._success(tool_name, ctx.call_id, started_at) (line 127)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._try_parse_json(obj.content) (line 142)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, f"Context object '{key}' is not JSON-structured; command '{command}' requires dict/list content.", "Use command='str_replace', 'insert', 'append', 'prepend', or 'overwrite' for text content.") (line 144)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command(command, working, args) (line 155)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._write_back(app_ctx, manifest, key, new_content) (line 156)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._emit_context_changed(ctx) (line 157)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._schedule_writeback(ctx, updated) (line 158)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._success(tool_name, ctx.call_id, started_at) (line 159)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, f'Unhandled command: {command}', None) (line 169)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolResult() (line 175)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolError() (line 177)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → time.time() (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolResult() (line 187)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolError() (line 189)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → traceback.format_exc() (line 192)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_patch → time.time() (line 195)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_create → time.time() (line 205)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ctx_create → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch(args, ctx, started_at) (line 206)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → strip() (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('key') (line 215)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('content') (line 216)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('new_str', '') (line 219)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, 'key is required.', 'Provide a unique key for the new context object.') (line 222)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → strip() (line 228)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('type') (line 228)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → strip() (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('label') (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → title() (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → key.replace('_', ' ') (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('description') (line 230)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('overwrite_existing', False) (line 231)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('context_object_cls') (line 237)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('context_object_type_cls') (line 238)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('context_source_cls') (line 239)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('persist_mode_cls') (line 240)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_app_context() (line 242)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._load_manifest_or_none() (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('context_manifest_cls') (line 247)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ContextManifest([]) (line 248)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → manifest.get(key) (line 250)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, f"Context object '{key}' already exists.", "Pass overwrite_existing=true, or use ctx_patch with command='overwrite'.") (line 251)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ContextObjectType(obj_type_raw) (line 260)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err(tool_name, ctx.call_id, started_at, f"Invalid type '{obj_type_raw}'.", f'Use one of: {[t.value for t in ContextObjectType]}') (line 262)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('mutable', True) (line 276)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → strip() (line 277)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('persist') (line 277)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.PersistMode(persist_raw) (line 279)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → args.get('source') (line 283)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ContextSource() (line 287)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ContextObject() (line 291)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → manifest.store_on_ctx(app_ctx) (line 303)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._emit_context_changed(ctx) (line 305)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._schedule_writeback(ctx, new_obj) (line 306)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._success(tool_name, ctx.call_id, started_at) (line 308)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolResult() (line 321)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolError() (line 323)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → traceback.format_exc() (line 326)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._create_from_patch → time.time() (line 329)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('old_str', '') (line 358)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('new_str', '') (line 359)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', 'str_replace requires old_str (the verbatim excerpt to find).', 'Provide a unique excerpt of the current content as old_str.') (line 361)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._fuzzy_replace(content, old_str, new_str) (line 366)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('insert_line') (line 369)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('new_str', '') (line 370)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', 'insert requires insert_line (0-based line number to insert AFTER; use 0 to insert at the very top).', 'Pass insert_line=N. The new content is inserted after line N.') (line 372)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'insert_line must be an integer (got {insert_line!r}).') (line 381)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → content.splitlines() (line 384)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'insert_line={line_idx} is out of range (content has {len(lines)} lines).', f'Use 0..{len(lines)} inclusive.') (line 386)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → new_str.endswith('\n') (line 393)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → join(new_lines) (line 395)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('new_str', '') (line 398)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('separator', '\n\n') (line 399)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → content.rstrip() (line 400)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('new_str', '') (line 403)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('separator', '\n\n') (line 404)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → content.lstrip() (line 405)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → args.get('new_str', '') (line 408)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_text_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Unhandled text command: {command}') (line 411)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._fuzzy_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.apply_patch() (line 418)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._fuzzy_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError() (line 425)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → args.get('operations') (line 444)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', "json_patch requires 'operations' as a list of RFC 6902 ops.", 'Example: [{"op":"replace","path":"/name","value":"Alice"}]') (line 446)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902(content, operations) (line 451)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → args.get('patch') (line 454)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', "json_merge requires 'patch' as a dict (RFC 7396 merge patch).", 'Example: {"status":"active","tags":["new"]}. null removes fields.') (line 456)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396(content, patch) (line 461)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_json_command → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Unhandled json command: {command}') (line 463)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json(doc) (line 472)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'operations[{i}] is not an object.') (line 475)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('op') (line 476)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('path') (line 477)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Unsupported json_patch op: {op_name!r}') (line 479)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'operations[{i}].path must be a JSON pointer string.') (line 481)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add(doc, path, op.get('value')) (line 484)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('value') (line 484)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove(doc, path) (line 486)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace(doc, path, op.get('value')) (line 488)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('value') (line 488)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('from') (line 490)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f"operations[{i}] 'move' requires string 'from'.") (line 492)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get(doc, frm) (line 493)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove(doc, frm) (line 494)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add(doc, path, value) (line 495)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('from') (line 497)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f"operations[{i}] 'copy' requires string 'from'.") (line 499)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add(doc, path, _deepcopy_json(_jp_get(doc, frm))) (line 500)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json(_jp_get(doc, frm)) (line 500)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get(doc, frm) (line 500)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get(doc, path) (line 502)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('value') (line 503)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('test_failed', f"json_patch test at {path} failed (expected {op.get('value')!r}, got {actual!r}).") (line 504)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc6902 → op.get('value') (line 506)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json(patch) (line 515)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json(target) (line 519)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396 → patch.items() (line 520)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396 → target.pop(k, None) (line 522)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396 → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396(target.get(k), v) (line 524)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._apply_rfc7396 → target.get(k) (line 524)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split → path.startswith('/') (line 533)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f"JSON pointer must be empty or start with '/', got {path!r}.") (line 534)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split → path.split('/') (line 535)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split → replace('~0', '~') (line 536)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split → p.replace('~1', '/') (line 536)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split(path) (line 541)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Invalid list index at {path}: {token!r}.') (line 546)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Missing key at {path}: {token!r}.') (line 549)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Cannot traverse into scalar at {path}.') (line 552)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split(path) (line 557)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json(value) (line 559)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get(doc, '/' + '/'.join(tokens[:-1])) (line 560)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add → join(tokens[:-1]) (line 560)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add → parent.insert(idx, value) (line 564)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_add → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Cannot add to scalar parent at {path}.') (line 568)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split(path) (line 573)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', 'Cannot remove the root document.') (line 575)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get(doc, '/' + '/'.join(tokens[:-1])) (line 576)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → join(tokens[:-1]) (line 576)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → parent.pop(int(leaf)) (line 580)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Invalid list index at {path}: {leaf!r}.') (line 582)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Missing key at {path}: {leaf!r}.') (line 585)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_remove → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Cannot remove from scalar parent at {path}.') (line 588)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_split(path) (line 593)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json(value) (line 595)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_get(doc, '/' + '/'.join(tokens[:-1])) (line 596)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → join(tokens[:-1]) (line 596)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Invalid list index at {path}: {leaf!r}.') (line 602)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Missing key at {path}: {leaf!r}.') (line 605)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._jp_replace → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('validation', f'Cannot replace inside scalar parent at {path}.') (line 608)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json → json.loads(json.dumps(value)) (line 616)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json → json.dumps(value) (line 616)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._deepcopy_json → copy.deepcopy(value) (line 619)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._try_parse_json → json.loads(value) (line 625)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._load_manifest_or_none → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_app_context() (line 641)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._load_manifest_or_none → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('load_manifest_from_ctx') (line 642)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._load_manifest_or_none → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.load_manifest_from_ctx(app_ctx) (line 643)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._write_back → manifest.replace_content(key, new_content) (line 654)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._write_back → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._PatchApplyError('not_found', f"Context object '{key}' vanished mid-patch.") (line 656)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._write_back → manifest.store_on_ctx(app_ctx) (line 657)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._emit_context_changed → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ContextChangedData() (line 684)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._emit_context_changed → emitter.send_data(payload) (line 704)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._schedule_writeback → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.has_ext('schedule_context_writeback') (line 722)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._schedule_writeback → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.get_ext('schedule_context_writeback') (line 725)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._schedule_writeback → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.schedule_writeback(obj) (line 726)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._success → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolResult() (line 741)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._success → time.time() (line 745)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolResult() (line 758)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolError() (line 760)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._validation_err → time.time() (line 767)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._not_found → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolResult() (line 780)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._not_found → packages.matrx-ai.matrx_ai.tools.implementations.ctx_write.ToolError() (line 782)
  packages.matrx-ai.matrx_ai.tools.implementations.ctx_write._not_found → time.time() (line 789)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.shell

```
Global Scope → logging.getLogger(__name__) (line 20)
  Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.shell.frozenset({'mkfs', 'fdisk', 'shutdown', 'reboot', 'poweroff'}) (line 43)
  Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.shell.frozenset({'sudo', 'doas', 'exec', 'env', 'nohup', 'time', 'command'}) (line 52)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._real_program_token → lower() (line 62)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._real_program_token → startswith('-') (line 67)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._real_program_token → startswith('-') (line 70)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._real_program_token → packages.matrx-ai.matrx_ai.tools.implementations.shell.Path(t) (line 75)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → packages.matrx-ai.matrx_ai.tools.implementations.shell.sandbox_mode_active() (line 104)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → packages.matrx-ai.matrx_ai.tools.implementations.shell.get_active_sandbox() (line 104)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → command.strip() (line 107)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → raw.lower() (line 116)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → raw_lower.startswith(phrase + ' ') (line 118)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → raw_lower.startswith(phrase + '\n') (line 118)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments(raw) (line 121)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → lower() (line 123)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → seg.strip() (line 123)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → seg_lower.startswith(phrase + ' ') (line 125)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → shlex.split(seg) (line 133)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → packages.matrx-ai.matrx_ai.tools.implementations.shell._real_program_token(tokens) (line 140)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked → program.startswith('mkfs.') (line 143)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → out.append(''.join(current)) (line 161)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → join(current) (line 161)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → out.append(''.join(current)) (line 166)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → join(current) (line 166)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → current.append(c) (line 170)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → out.append(''.join(current)) (line 172)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → join(current) (line 172)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._split_segments → seg.strip() (line 173)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → stderr.strip() (line 195)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → parts.append(f'\nstderr:\n{stderr}') (line 196)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → stdout.strip() (line 197)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → stderr.strip() (line 197)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → parts.append(f'\nstdout:\n{stdout}') (line 200)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → packages.matrx-ai.matrx_ai.tools.implementations.shell._recovery_hint_for(stderr or stdout, command) (line 202)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → parts.append(f'\nrecovery hint:\n{hint}') (line 204)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message → join(parts) (line 206)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._recovery_hint_for → lower() (line 214)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._recovery_hint_for → lower() (line 215)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir → packages.matrx-ai.matrx_ai.tools.implementations.shell.scoped_base_for(ctx.user_id, ctx.project_id) (line 271)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir → base.mkdir() (line 272)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir → resolve() (line 273)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir → startswith(str(base.resolve())) (line 274)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir → base.resolve() (line 274)
  packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir → resolved.mkdir() (line 276)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 281)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ShellExecuteArgs() (line 282)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell._is_blocked(parsed.command) (line 284)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 288)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 290)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 309)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.get_active_sandbox() (line 319)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → ...startswith('/') (line 323)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → ...rstrip('/') (line 324)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → ...lstrip('./') (line 324)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell._proxy_exec(binding, parsed.command) (line 328)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → result.get('exit_code', 0) (line 334)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → result.get('stdout', '') (line 335)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → result.get('stderr', '') (line 336)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 339)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.write_tool_call_log() (line 345)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 364)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → result.get('cwd', cwd_path) (line 372)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 375)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message() (line 377)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 387)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 392)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 394)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 399)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir(ctx, parsed.working_dir) (line 404)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → asyncio.create_subprocess_shell(parsed.command) (line 407)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → asyncio.wait_for(process.communicate()) (line 415)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → process.communicate() (line 416)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → process.kill() (line 420)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 421)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 423)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 430)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → stdout.decode('utf-8') (line 435)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → stderr.decode('utf-8') (line 436)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.Path(cwd) (line 442)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → spill_dir.mkdir() (line 444)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.Path(cwd) (line 446)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → log_path.write_text(stdout_text) (line 452)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → err_path.write_text(stderr_text) (line 461)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 466)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 473)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message() (line 475)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 485)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 491)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 493)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_execute → time.time() (line 497)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 504)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ShellPythonArgs() (line 505)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.get_active_sandbox() (line 511)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell._proxy_exec(binding, 'python3 -') (line 513)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → result.get('exit_code', 0) (line 520)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → result.get('stdout', '') (line 521)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → result.get('stderr', '') (line 522)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 525)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.write_tool_call_log() (line 527)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 545)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 555)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell._build_exit_error_message() (line 557)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 567)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 572)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 574)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 579)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell._workspace_dir(ctx) (line 584)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.Path(cwd) (line 585)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → script_path.write_text(parsed.code) (line 588)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → asyncio.create_subprocess_exec('python3', str(script_path)) (line 590)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → asyncio.wait_for(process.communicate()) (line 599)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → process.communicate() (line 600)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → process.kill() (line 604)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 605)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 607)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 613)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → script_path.unlink() (line 619)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → stdout.decode('utf-8') (line 623)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → stderr.decode('utf-8') (line 624)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.Path(cwd) (line 628)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → log_path.write_text(stdout_text) (line 629)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.Path(cwd) (line 634)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → err_path.write_text(stderr_text) (line 635)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 638)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 645)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 652)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolResult() (line 658)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → packages.matrx-ai.matrx_ai.tools.implementations.shell.ToolError() (line 660)
  async packages.matrx-ai.matrx_ai.tools.implementations.shell.shell_python → time.time() (line 664)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.code

```
packages.matrx-ai.matrx_ai.tools.implementations.code._workspace_dir → packages.matrx-ai.matrx_ai.tools.implementations.code.scoped_base_for(ctx.user_id, ctx.project_id) (line 18)
  packages.matrx-ai.matrx_ai.tools.implementations.code._workspace_dir → base.mkdir() (line 19)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → args.get('code_input', '') (line 24)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → args.get('timeout_seconds', 30) (line 25)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 28)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 30)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → re.search('```python\\s*(.*?)\\s*```', code_input, re.DOTALL) (line 34)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → strip() (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → match.group(1) (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → code_input.strip() (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 38)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code._workspace_dir(ctx) (line 46)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → script_path.write_text(code) (line 50)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → asyncio.create_subprocess_exec('python3', str(script_path)) (line 52)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → asyncio.wait_for(process.communicate()) (line 61)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → process.communicate() (line 62)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → process.kill() (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 66)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → script_path.unlink() (line 77)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → stdout.decode('utf-8') (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → stderr.decode('utf-8') (line 82)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → log_path.write_text(stdout_text) (line 87)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → err_path.write_text(stderr_text) (line 93)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 104)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 115)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_execute_python → traceback.format_exc() (line 116)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → args.get('html_input', '') (line 122)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 124)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 126)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → requests.post(api_url) (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → response.raise_for_status() (line 132)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 133)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → get('id') (line 133)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → response.json() (line 133)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 135)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_store_html → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 137)
  packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root → packages.matrx-ai.matrx_ai.tools.implementations.code.Path(project_root) (line 146)
  packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root → p.is_absolute() (line 147)
  packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root → Path.cwd() (line 149)
  packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root → p.resolve() (line 150)
  packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root → p.is_dir() (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → args.get('project_root', '') (line 167)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → args.get('subdirectory', '') (line 168)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → args.get('output_mode', 'clean') (line 169)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 173)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 175)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root(project_root_raw) (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 184)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 186)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.Path(project_root) (line 195)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → full_path.is_dir() (line 196)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 197)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 199)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.CodeContextBuilder() (line 206)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → builder.build() (line 211)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 212)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 224)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 226)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_code → traceback.format_exc() (line 227)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → args.get('project_root', '') (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → args.get('subdirectory', '') (line 242)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → args.get('show_all_directories', False) (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code._resolve_project_root(project_root_raw) (line 245)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 247)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 249)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.Path(project_root) (line 257)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → full_path.is_dir() (line 258)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 259)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 261)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.CodeContextBuilder() (line 268)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → builder.build() (line 274)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 275)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolResult() (line 287)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → packages.matrx-ai.matrx_ai.tools.implementations.code.ToolError() (line 289)
  async packages.matrx-ai.matrx_ai.tools.implementations.code.code_fetch_tree → traceback.format_exc() (line 290)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.notes

```
async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → time.time() (line 11)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → strip() (line 12)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → args.get('note_id', '') (line 12)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 14)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 16)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → time.time() (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → notes_manager_instance.get_note(note_id) (line 22)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → result.get('success') (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 24)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 26)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → result.get('error', 'Note not found.') (line 26)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → time.time() (line 27)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 31)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('id') (line 34)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('label') (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('folder_name') (line 36)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('content') (line 37)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('tags', []) (line 38)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('is_public') (line 39)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('created_at') (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → n.get('updated_at') (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → time.time() (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 47)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 49)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → traceback.format_exc() (line 49)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_get → time.time() (line 50)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → time.time() (line 56)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → notes_manager_instance.list_notes_for_user(ctx.user_id) (line 59)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → result.get('success') (line 60)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 61)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → result.get('error', 'Failed to list notes.') (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → time.time() (line 64)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → n.get('id') (line 69)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → n.get('label') (line 70)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → n.get('folder_name') (line 71)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → n.get('tags', []) (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → n.get('updated_at') (line 73)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → result.get('notes', []) (line 75)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 77)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → time.time() (line 80)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 84)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 86)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → traceback.format_exc() (line 86)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_list → time.time() (line 87)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → time.time() (line 93)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → strip() (line 94)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → args.get('label', '') (line 94)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → strip() (line 95)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → args.get('content', '') (line 95)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 97)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → time.time() (line 100)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → notes_manager_instance.create_note() (line 105)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → args.get('folder_name', '') (line 109)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → args.get('tags', []) (line 110)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → args.get('is_public', False) (line 111)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → result.get('success') (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 114)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 116)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → result.get('error', 'Failed to create note.') (line 116)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → time.time() (line 117)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 121)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → n.get('id') (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → n.get('label') (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → n.get('folder_name') (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → n.get('created_at') (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → time.time() (line 124)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 128)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 130)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → traceback.format_exc() (line 130)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_create → time.time() (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → time.time() (line 137)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → strip() (line 138)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → args.get('note_id', '') (line 138)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 140)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 142)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → time.time() (line 143)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → args.items() (line 146)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 148)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 150)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → time.time() (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → notes_manager_instance.update_note(note_id) (line 156)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → result.get('success') (line 157)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 158)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 160)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → result.get('error', 'Update failed.') (line 160)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → time.time() (line 161)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → n.get('id') (line 165)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → n.get('label') (line 165)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → n.get('updated_at') (line 165)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → result.get('warning_stripped_immutable') (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 168)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → time.time() (line 170)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 174)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 176)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → traceback.format_exc() (line 176)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_update → time.time() (line 177)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → time.time() (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → strip() (line 184)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → args.get('note_id', '') (line 184)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → args.get('search_text', '') (line 185)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → args.get('replacement_text', '') (line 186)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 190)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → time.time() (line 191)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 195)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 197)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → time.time() (line 198)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → notes_manager_instance.patch_note_content(note_id, search_text, replacement_text) (line 203)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → result.get('success') (line 204)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 205)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 207)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → result.get('message', 'No match found for the search text.') (line 209)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → time.time() (line 212)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 216)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → n.get('id') (line 219)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → result.get('matched_at_pass') (line 220)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → n.get('updated_at') (line 221)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → time.time() (line 223)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 227)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → traceback.format_exc() (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_patch → time.time() (line 230)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → time.time() (line 236)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → strip() (line 237)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → args.get('note_id', '') (line 237)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 239)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → time.time() (line 242)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → notes_manager_instance.delete_note(note_id) (line 247)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → result.get('success') (line 248)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 249)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 251)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → result.get('error', 'Delete failed.') (line 251)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → time.time() (line 252)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 255)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → time.time() (line 258)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolResult() (line 262)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → packages.matrx-ai.matrx_ai.tools.implementations.notes.ToolError() (line 264)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → traceback.format_exc() (line 264)
  async packages.matrx-ai.matrx_ai.tools.implementations.notes.note_delete → time.time() (line 265)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.widgets

```
async packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key → packages.matrx-ai.matrx_ai.tools.implementations.widgets.get_app_context() (line 61)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key → packages.matrx-ai.matrx_ai.tools.implementations.widgets.get_ext('load_manifest_from_ctx') (line 62)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key → packages.matrx-ai.matrx_ai.tools.implementations.widgets.load_manifest_from_ctx(app_ctx) (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key → manifest.get(key) (line 68)
  packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error → time.time() (line 72)
  packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error → packages.matrx-ai.matrx_ai.tools.implementations.widgets.ToolResult() (line 73)
  packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error → packages.matrx-ai.matrx_ai.tools.implementations.widgets.ToolError() (line 75)
  packages.matrx-ai.matrx_ai.tools.implementations.widgets._validation_error → time.time() (line 96)
  packages.matrx-ai.matrx_ai.tools.implementations.widgets._validation_error → packages.matrx-ai.matrx_ai.tools.implementations.widgets.ToolResult() (line 97)
  packages.matrx-ai.matrx_ai.tools.implementations.widgets._validation_error → packages.matrx-ai.matrx_ai.tools.implementations.widgets.ToolError() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch → packages.matrx-ai.matrx_ai.tools.implementations.widgets.ctx_patch(patch_args, ctx) (line 114)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_create → packages.matrx-ai.matrx_ai.tools.implementations.widgets.ctx_create(create_args, ctx) (line 122)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_replace → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_CONTENT_KEY) (line 133)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_replace → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_CONTENT_KEY) (line 134)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_replace → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_CONTENT_KEY, 'command': 'overwrite', 'new_str': args.get('text', '')}) (line 135)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_replace → args.get('text', '') (line 138)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_before → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_CONTENT_KEY) (line 144)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_before → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_CONTENT_KEY) (line 145)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_before → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_CONTENT_KEY, 'command': 'prepend', 'new_str': args.get('text', '')}) (line 146)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_before → args.get('text', '') (line 149)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_after → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_CONTENT_KEY) (line 155)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_after → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_CONTENT_KEY) (line 156)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_after → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_CONTENT_KEY, 'command': 'append', 'new_str': args.get('text', '')}) (line 157)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_insert_after → args.get('text', '') (line 160)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_prepend → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_CONTENT_KEY) (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_prepend → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_CONTENT_KEY) (line 167)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_prepend → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_CONTENT_KEY, 'command': 'prepend', 'new_str': args.get('text', '')}) (line 168)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_prepend → args.get('text', '') (line 171)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_append → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_CONTENT_KEY) (line 177)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_append → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_CONTENT_KEY) (line 178)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_append → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_CONTENT_KEY, 'command': 'append', 'new_str': args.get('text', '')}) (line 179)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_append → args.get('text', '') (line 182)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_patch → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_CONTENT_KEY) (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_patch → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_CONTENT_KEY) (line 189)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_patch → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_CONTENT_KEY, 'command': 'str_replace', 'old_str': args.get('search_text', ''), 'new_str': args.get('replacement_text', '')}) (line 190)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_patch → args.get('search_text', '') (line 193)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_text_patch → args.get('replacement_text', '') (line 194)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_field → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_RECORD_KEY) (line 204)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_field → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_RECORD_KEY) (line 205)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_field → args.get('field') (line 206)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_field → packages.matrx-ai.matrx_ai.tools.implementations.widgets._validation_error(tool_name, ctx.call_id, 'field must be a non-empty string') (line 208)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_field → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_RECORD_KEY, 'command': 'json_merge', 'patch': {field: args.get('value')}}) (line 209)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_field → args.get('value') (line 212)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_record → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_RECORD_KEY) (line 218)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_record → packages.matrx-ai.matrx_ai.tools.implementations.widgets._missing_context_error(tool_name, ctx.call_id, WIDGET_RECORD_KEY) (line 219)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_record → args.get('patch') (line 220)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_record → packages.matrx-ai.matrx_ai.tools.implementations.widgets._validation_error(tool_name, ctx.call_id, 'patch must be a JSON object') (line 222)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_update_record → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_RECORD_KEY, 'command': 'json_merge', 'patch': patch}) (line 223)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → args.get('url') (line 237)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → args.get('mimeType') (line 238)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → args.get('title') (line 239)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → args.get('alt') (line 240)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → args.get('position') (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → media_item.items() (line 243)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_MEDIA_KEY) (line 245)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_MEDIA_KEY, 'command': 'json_patch', 'operations': [{'op': 'add', 'path': '/-', 'value': media_item}]}) (line 246)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_attach_media → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_create(tool_name, ctx, {'key': WIDGET_MEDIA_KEY, 'content': [media_item], 'type': 'json', 'label': 'Widget Media', 'description': 'List of media attached to the focused widget this turn.', 'mutable': True, 'persist': 'client'}) (line 252)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_create_artifact → args.get('kind') (line 265)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_create_artifact → packages.matrx-ai.matrx_ai.tools.implementations.widgets._validation_error(tool_name, ctx.call_id, 'kind is required') (line 267)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_create_artifact → args.get('data') (line 269)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_create_artifact → packages.matrx-ai.matrx_ai.tools.implementations.widgets._has_manifest_key(WIDGET_ARTIFACTS_KEY) (line 271)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_create_artifact → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_patch(tool_name, ctx, {'key': WIDGET_ARTIFACTS_KEY, 'command': 'json_patch', 'operations': [{'op': 'add', 'path': '/-', 'value': artifact}]}) (line 272)
  async packages.matrx-ai.matrx_ai.tools.implementations.widgets.widget_create_artifact → packages.matrx-ai.matrx_ai.tools.implementations.widgets._forward_to_create(tool_name, ctx, {'key': WIDGET_ARTIFACTS_KEY, 'content': [artifact], 'type': 'json', 'label': 'Widget Artifacts', 'description': 'Artifacts created by the agent for the focused widget this turn.', 'mutable': True, 'persist': 'client'}) (line 278)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.browser

```
Global Scope → logging.getLogger(__name__) (line 20)
  packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr → packages.matrx-ai.matrx_ai.tools.implementations.browser.get_browser_session_manager() (line 26)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → time.time() (line 31)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserNavigateArgs() (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → manager.get(parsed.session_id) (line 38)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 40)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 42)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → time.time() (line 48)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → manager.create() (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → ...goto(parsed.url) (line 60)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → ...title() (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → ...inner_text('body') (line 69)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → time.time() (line 76)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 83)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → time.time() (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 94)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 96)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_navigate → time.time() (line 102)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → time.time() (line 110)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserClickArgs() (line 111)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → get(parsed.session_id) (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 113)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 115)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 117)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → time.time() (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → ...click(parsed.selector) (line 129)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → ...wait_for_timeout(parsed.wait_after_ms) (line 132)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → ...inner_text('body') (line 134)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → ...title() (line 142)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → time.time() (line 146)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 151)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 153)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_click → time.time() (line 155)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → time.time() (line 163)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserTypeArgs() (line 164)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → get(parsed.session_id) (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 168)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 170)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → time.time() (line 176)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → ...fill(parsed.selector, parsed.text) (line 183)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → ...press('Enter') (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → ...wait_for_load_state('load') (line 189)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → ...inner_text('body') (line 191)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 193)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → time.time() (line 203)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 208)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 210)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_type_text → time.time() (line 212)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → time.time() (line 222)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserScreenshotArgs() (line 223)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → get(parsed.session_id) (line 225)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 225)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 227)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 229)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → time.time() (line 235)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → ...set_viewport_size({'width': parsed.width, 'height': parsed.height}) (line 241)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → ...query_selector(parsed.selector) (line 246)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → element.screenshot() (line 248)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → ...screenshot() (line 250)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → ...screenshot() (line 253)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → decode('utf-8') (line 255)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → base64.b64encode(screenshot_bytes) (line 255)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 257)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → time.time() (line 267)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 272)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 274)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_screenshot → time.time() (line 276)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_close → time.time() (line 284)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_close → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserCloseArgs() (line 285)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_close → close(parsed.session_id) (line 287)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_close → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 287)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_close → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 289)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_close → time.time() (line 293)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → time.time() (line 301)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserSelectOptionArgs() (line 302)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 305)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 307)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → time.time() (line 313)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → get(parsed.session_id) (line 318)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 318)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 320)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 322)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → time.time() (line 328)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → ...select_option(parsed.selector) (line 335)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → ...select_option(parsed.selector) (line 339)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 343)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → time.time() (line 352)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 357)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 359)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_select_option → time.time() (line 361)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → time.time() (line 369)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserWaitForArgs() (line 370)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 373)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 375)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → time.time() (line 381)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → get(parsed.session_id) (line 386)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 386)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 388)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 390)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → time.time() (line 396)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → ...wait_for_selector(parsed.selector) (line 405)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → ...wait_for_function(f'document.body.innerText.includes({repr(parsed.text)})') (line 410)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 416)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → ...title() (line 422)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → time.time() (line 425)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 430)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 432)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_wait_for → time.time() (line 439)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → time.time() (line 447)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserGetElementArgs() (line 448)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → get(parsed.session_id) (line 450)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 450)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 452)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 454)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → time.time() (line 460)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → ...query_selector(parsed.selector) (line 466)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 468)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 470)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → time.time() (line 476)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → element.inner_text() (line 481)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → element.inner_html() (line 482)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → element.evaluate('el => el.tagName.toLowerCase()') (line 483)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → element.get_attribute(attr) (line 487)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → element.bounding_box() (line 489)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 491)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → time.time() (line 503)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 508)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 510)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_get_element → time.time() (line 512)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → time.time() (line 520)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.BrowserScrollArgs() (line 521)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → get(parsed.session_id) (line 523)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser._mgr() (line 523)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 525)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 527)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → time.time() (line 533)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...query_selector(parsed.selector) (line 540)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 542)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 544)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → time.time() (line 549)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → element.evaluate('el => el.scrollTop = 0') (line 554)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → element.evaluate('el => el.scrollTop = el.scrollHeight') (line 556)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → element.evaluate(f'el => el.scrollTop -= {parsed.amount_px}') (line 558)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → element.evaluate(f'el => el.scrollTop += {parsed.amount_px}') (line 560)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...evaluate('window.scrollTo(0, 0)') (line 563)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...evaluate('window.scrollTo(0, document.body.scrollHeight)') (line 565)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...evaluate(f'window.scrollBy(0, -{parsed.amount_px})') (line 569)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...evaluate(f'window.scrollBy(0, {parsed.amount_px})') (line 571)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...wait_for_timeout(300) (line 573)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...evaluate('window.scrollY') (line 575)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → ...evaluate('document.body.scrollHeight') (line 576)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 578)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → time.time() (line 588)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolResult() (line 593)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → packages.matrx-ai.matrx_ai.tools.implementations.browser.ToolError() (line 595)
  async packages.matrx-ai.matrx_ai.tools.implementations.browser.browser_scroll → time.time() (line 597)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.text

```
async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → time.time() (line 13)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → packages.matrx-ai.matrx_ai.tools.implementations.text.TextAnalyzeArgs() (line 14)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → ...lower() (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.split() (line 21)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → re.split('[.!?]+', text.strip()) (line 24)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.strip() (line 24)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.split('\n\n') (line 25)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → p.strip() (line 25)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → re.findall('\\b[a-zA-Z]{3,}\\b', text.lower()) (line 28)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.lower() (line 28)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → packages.matrx-ai.matrx_ai.tools.implementations.text.Counter(filtered) (line 61)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → counter.most_common(20) (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → patterns.items() (line 73)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → re.findall(pattern, text) (line 74)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.split() (line 78)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → split() (line 79)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.lower() (line 79)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.split() (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → text.split() (line 81)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → packages.matrx-ai.matrx_ai.tools.implementations.text.ToolResult() (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_analyze → time.time() (line 92)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → time.time() (line 99)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → packages.matrx-ai.matrx_ai.tools.implementations.text.RegexExtractArgs() (line 100)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → re.findall(parsed.pattern, parsed.text) (line 104)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → packages.matrx-ai.matrx_ai.tools.implementations.text.ToolResult() (line 105)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → time.time() (line 109)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → re.search(parsed.pattern, parsed.text) (line 114)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → packages.matrx-ai.matrx_ai.tools.implementations.text.ToolResult() (line 116)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → match.group(parsed.group) (line 119)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → match.span() (line 120)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → time.time() (line 123)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → packages.matrx-ai.matrx_ai.tools.implementations.text.ToolResult() (line 127)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → time.time() (line 131)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → packages.matrx-ai.matrx_ai.tools.implementations.text.ToolResult() (line 136)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → packages.matrx-ai.matrx_ai.tools.implementations.text.ToolError() (line 138)
  async packages.matrx-ai.matrx_ai.tools.implementations.text.text_regex_extract → time.time() (line 144)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.math

```
Global Scope → k.startswith('_') (line 11)
  Global Scope → SAFE_MATH_NAMES.update({'abs': abs, 'round': round, 'min': min, 'max': max, 'sum': sum, 'int': int, 'float': float}) (line 13)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → time.time() (line 27)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → packages.matrx-ai.matrx_ai.tools.implementations.math.CalculateArgs() (line 28)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → packages.matrx-ai.matrx_ai.tools.implementations.math.eval(parsed.expression, {'__builtins__': {}}, SAFE_MATH_NAMES) (line 31)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → packages.matrx-ai.matrx_ai.tools.implementations.math.ToolResult() (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → time.time() (line 36)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → packages.matrx-ai.matrx_ai.tools.implementations.math.ToolResult() (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → packages.matrx-ai.matrx_ai.tools.implementations.math.ToolError() (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.math.math_calculate → time.time() (line 49)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.ctx

```
Global Scope → packages.matrx-ai.matrx_ai.tools.implementations.ctx.frozenset({'full', 'page', 'summary'}) (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.get_ext('load_manifest_from_ctx') (line 32)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → args.get('key', '') (line 34)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → args.get('mode', 'full') (line 35)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → args.get('offset', 0) (line 36)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → args.get('chars', _DEFAULT_PAGE_CHARS) (line 37)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 41)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 43)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 52)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 54)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.get_app_context() (line 62)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.load_manifest_from_ctx(app_ctx) (line 63)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 66)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → manifest.get(key) (line 77)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 80)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 82)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → obj.content_as_str() (line 89)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 93)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 114)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 132)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 134)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx._run_summary_agent() (line 143)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 148)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 160)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 162)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolResult() (line 166)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → packages.matrx-ai.matrx_ai.tools.implementations.ctx.ToolError() (line 168)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx.ctx_get → traceback.format_exc() (line 171)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx._run_summary_agent → packages.matrx-ai.matrx_ai.tools.implementations.ctx.child_agent_context(f'summary:{agent_id}') (line 186)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx._run_summary_agent → Agent.from_prompt(agent_id) (line 187)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx._run_summary_agent → agent.set_variable('content', content) (line 188)
  async packages.matrx-ai.matrx_ai.tools.implementations.ctx._run_summary_agent → agent.execute() (line 189)
```

### Call graph: packages.matrx-ai.matrx_ai.tools.implementations.news

```
async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.get_ext('get_top_headlines') (line 12)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → args.get('country') (line 14)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → args.get('category') (line 15)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → args.get('query') (line 16)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → args.get('sources') (line 17)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → args.get('language') (line 18)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolResult() (line 21)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolError() (line 23)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.get_top_headlines() (line 36)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → response.get('status') (line 44)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolResult() (line 45)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolError() (line 47)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → response.get('message', 'Unknown error') (line 49)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → response.get('articles', []) (line 53)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → response.get('totalResults', 0) (line 54)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → strftime('%A, %B %d, %Y') (line 55)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → datetime.now() (line 55)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → country.upper() (line 57)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('title') (line 62)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → get('id') (line 64)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('source', {}) (line 64)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → get('name') (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('source', {}) (line 65)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('author') (line 67)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('description') (line 68)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('url') (line 69)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('urlToImage') (line 70)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('publishedAt') (line 71)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → a.get('content') (line 72)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolResult() (line 77)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolResult() (line 88)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → packages.matrx-ai.matrx_ai.tools.implementations.news.ToolError() (line 90)
  async packages.matrx-ai.matrx_ai.tools.implementations.news.news_get_headlines → traceback.format_exc() (line 93)
```
<!-- /AUTO:call_graph -->
