v2.7.0 — AiNative domain sub-agents
Features
- AiNative domain sub-agents (
'handler' => 'ai_native',AiNativeSubAgentHandler): a true domain agent that runs the full AiNative planner (NL → tool call with parameters, guards, confirmation) scoped to only its declared tools — e.g. an "invoice agent" that answers "how much has X spent" by planning anaggregate_datacall itself. (#52)
Fixes / stability
- Convergence safety net: when the planner runs a tool successfully but fails to emit a final answer (loops, exhausts its step budget), the handler now surfaces the last successful tool result instead of dead-ending on "I need more information." Genuine asks (carrying
requiredInputs) pass through untouched. (#53) public-model scope:data_query/aggregate_datanow honor'public' => truewhen applying scope, not only in the access block — a public model is no longer silently user/workspace/tenant-scoped (which could zero out rows the caller doesn't "own"). (#53)
⚠️ Behavior change
If you have a 'public' model with a user_id / workspace_id / tenant_id column that relied on the previous implicit scoping, it is now unscoped — matching the documented meaning of 'public' => true.
Full suite green: 1899 tests.