feat: root agent hierarchy at Level 1 from both orchestrators
Gemini and OpenAI orchestrators now inject _agent_level=1 into spawn_agent args so the full 3-level chain works: Persona (L1) → Specialist (L2) → Support (L3, cannot delegate further). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -509,6 +509,8 @@ async def _execute_tool(
|
|||||||
args = json.loads(arguments_json)
|
args = json.loads(arguments_json)
|
||||||
except json.JSONDecodeError:
|
except json.JSONDecodeError:
|
||||||
args = {}
|
args = {}
|
||||||
|
if name == "spawn_agent":
|
||||||
|
args = {**args, "_agent_level": 1}
|
||||||
try:
|
try:
|
||||||
return await call_tool(name, args, callables)
|
return await call_tool(name, args, callables)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
@@ -524,6 +526,8 @@ async def _execute_tool_dict(
|
|||||||
) -> str:
|
) -> str:
|
||||||
"""Execute a tool from a pre-parsed args dict."""
|
"""Execute a tool from a pre-parsed args dict."""
|
||||||
_, callables = get_tools_for_role(user_role, tool_list)
|
_, callables = get_tools_for_role(user_role, tool_list)
|
||||||
|
if name == "spawn_agent":
|
||||||
|
args = {**args, "_agent_level": 1}
|
||||||
try:
|
try:
|
||||||
return await call_tool(name, args, callables)
|
return await call_tool(name, args, callables)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -468,6 +468,8 @@ async def _claude_handoff(
|
|||||||
|
|
||||||
async def _execute_tool(name: str, args: dict, callables: dict | None = None) -> str:
|
async def _execute_tool(name: str, args: dict, callables: dict | None = None) -> str:
|
||||||
"""Execute a single tool call, catching all exceptions."""
|
"""Execute a single tool call, catching all exceptions."""
|
||||||
|
if name == "spawn_agent":
|
||||||
|
args = {**args, "_agent_level": 1}
|
||||||
try:
|
try:
|
||||||
return await call_tool(name, args, callables)
|
return await call_tool(name, args, callables)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -77,3 +77,4 @@
|
|||||||
- **RAG via Open WebUI** — feed Nextcloud docs into local knowledge collections; possible complement to AE Journals search
|
- **RAG via Open WebUI** — feed Nextcloud docs into local knowledge collections; possible complement to AE Journals search
|
||||||
- **Multi-host local models** — per-user config already supports multiple hosts; routing logic TBD
|
- **Multi-host local models** — per-user config already supports multiple hosts; routing logic TBD
|
||||||
- **WhatsApp** — requires Business API account or a bridge; not started
|
- **WhatsApp** — requires Business API account or a bridge; not started
|
||||||
|
- **Docling** (https://github.com/docling-project/docling) — IBM Research doc parser; converts PDF/DOCX/PPTX/images → clean Markdown/JSON for LLM ingestion; would enhance file attachments and the knowledge import pipeline
|
||||||
|
|||||||
@@ -97,10 +97,10 @@ pipelines) unusable without freezing the orchestrator.
|
|||||||
- [x] **L2→L3 boundary enforcement** — `spawn_agent` param `_agent_level` (default 2);
|
- [x] **L2→L3 boundary enforcement** — `spawn_agent` param `_agent_level` (default 2);
|
||||||
when `child_level >= 3`, auto-adds `spawn_agent` + `aider_run` to deny_tools so
|
when `child_level >= 3`, auto-adds `spawn_agent` + `aider_run` to deny_tools so
|
||||||
Level 3 children cannot delegate; level stored in AgentRecord — 2026-06-03
|
Level 3 children cannot delegate; level stored in AgentRecord — 2026-06-03
|
||||||
- [ ] **`_agent_level=1` from main orchestrators** — Gemini and OpenAI orchestrators
|
- [x] **`_agent_level=1` from main orchestrators** — Gemini and OpenAI orchestrators
|
||||||
should pass `_agent_level=1` when calling spawn_agent so the hierarchy is rooted
|
inject `_agent_level=1` into args in `_execute_tool` / `_execute_tool_dict` so the
|
||||||
correctly; currently defaults to 2 (children become Level 3, which is safe but
|
hierarchy is rooted correctly; Persona spawns Level 2 agents that can themselves
|
||||||
means Level 1 cannot spawn Level 2 that itself spawns Level 3)
|
spawn Level 3 — 2026-06-16
|
||||||
|
|
||||||
**Phase 3 — `aider_run` async:**
|
**Phase 3 — `aider_run` async:**
|
||||||
- [x] **`aider_run` background mode** — added `background: bool = False` and
|
- [x] **`aider_run` background mode** — added `background: bool = False` and
|
||||||
@@ -313,6 +313,22 @@ and lint commands; model/key come from env vars (not committed).
|
|||||||
- `cortex/routers/` already has pattern; add `gitea.py`
|
- `cortex/routers/` already has pattern; add `gitea.py`
|
||||||
- Gitea Actions (CI) for "run tests on push" — simpler than custom runner
|
- Gitea Actions (CI) for "run tests on push" — simpler than custom runner
|
||||||
|
|
||||||
|
### [Intelligence] Docling — document parsing for LLM ingestion
|
||||||
|
https://github.com/docling-project/docling
|
||||||
|
|
||||||
|
IBM Research library that converts PDF, DOCX, PPTX, XLSX, images, HTML, and more into
|
||||||
|
clean Markdown or structured JSON ready for LLM consumption. Two integration points:
|
||||||
|
|
||||||
|
- **File attachment enrichment** — today, non-text attachments are limited; Docling would
|
||||||
|
let Cortex extract structured content from PDFs and Office docs before injecting into context
|
||||||
|
- **Knowledge ingestion pipeline** — convert Nextcloud files (meeting notes, contracts, reports)
|
||||||
|
into AE Journal entries or a local RAG corpus; complements the existing markdown import script
|
||||||
|
- **`file_read` / `web_read` enhancement** — optionally route binary file types through Docling
|
||||||
|
for clean extraction instead of raw binary handling
|
||||||
|
|
||||||
|
Install: `pip install docling`; GPU-accelerated OCR support available.
|
||||||
|
No design started — evaluate before integrating.
|
||||||
|
|
||||||
### [Local] RAG via Open WebUI
|
### [Local] RAG via Open WebUI
|
||||||
Open WebUI has a full RAG pipeline (file upload → embed → knowledge collections →
|
Open WebUI has a full RAG pipeline (file upload → embed → knowledge collections →
|
||||||
reference in chat). Could feed Nextcloud docs or session logs into a local knowledge
|
reference in chat). Could feed Nextcloud docs or session logs into a local knowledge
|
||||||
|
|||||||
Reference in New Issue
Block a user