Wave C subtraction: keep skills as prompt-only, route netx via MCP with a shared netx_http client for xlsx/context inject, and delete plan_agent_v2 from the gateway.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default scheduled CLI steps to ne_ids/ume_ne_ids batch, compact oversized tool chat_message/tool_log after turns, and on getManagedNe miss guide agents to listManagedNe/UME paths instead of blind retries.
Co-authored-by: Cursor <cursoragent@cursor.com>
Keeps recent days of chat tool messages, tool_log, traces, and sent outbound; admin API and CLI support apply + optional VACUUM.
Co-authored-by: Cursor <cursoragent@cursor.com>
LLM replies keep **/#/tables in admin history; WhatsApp queue text is rewritten to *bold*, plain links, and bullet rows (disable with AIA_WHATSAPP_MARKDOWN_CONVERT=0).
Co-authored-by: Cursor <cursoragent@cursor.com>
Due ticks no longer stack on an active run (WA skip notice + stale clear); schedule_list/admin/gateway now show playbook, steps_n, and last_run signals without dumping full recipes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Legacy jobs with empty recipes (e.g. dying-gasp algorithms in prompt_text) now compile into durable playbooks on create/enqueue, and each run gets a short previous-run summary for continuity.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wrap successful scheduled jobs with a short WA header (+ attachment count), expire stale access pending and DM requesters on admin approve/deny, and add concrete next_steps for insufficient_scope:sql:query.
Co-authored-by: Cursor <cursoragent@cursor.com>
Fiber/offline/alarm/excel/license/congestion turns drop list/exec/sql/run_command so the model must use ume_alarm_xlsx_report instead of inventory self-loops.
Co-authored-by: Cursor <cursoragent@cursor.com>
When require_mention drops an ops short-intent, send one throttled @sender tip instead of silent ignore; casual chat stays quiet.
Co-authored-by: Cursor <cursoragent@cursor.com>
After admin YES/NO, DM the requester a field guide; WA help/bind no longer returns the Chinese productivity todo menu.
Co-authored-by: Cursor <cursoragent@cursor.com>
Guide ops to use ne_ids/ume_ne_ids for sweeps, raise exec wall-clock for batches, and mark inventory/list MCP tools read_only so consecutive queries can run in parallel.
Co-authored-by: Cursor <cursoragent@cursor.com>
Field turns may legitimately use many distinct CLI/shell calls (e.g. 200 rounds). Drop per-turn call/fail budgets and default short-intent round caps; identical-arg and retry_forbidden blocks remain.
Co-authored-by: Cursor <cursoragent@cursor.com>
Budget shell calls like CLI, and when rounds are exhausted inject a no-more-tools system nudge plus any user_facing_hint constraints into the final synthesis pass.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reuse open pending requests without re-notifying admins, clarify already-waiting replies, and block further CLI after 4 calls or 2 failures in the same turn.
Co-authored-by: Cursor <cursoragent@cursor.com>
Refuse openpyxl/pandas-to_excel via run_command, auto-write content-only files under tmp/, and limit WhatsApp ops short intents to 8 tool rounds by default.
Co-authored-by: Cursor <cursoragent@cursor.com>
After insufficient_scope/retry_forbidden, refuse the same tool for the rest of the turn (even with new args), emit pre-call WA progress from ToolExecutor, TTL-cache findTopologyPaths, and add bandwidth congestion short-intent + schedule template.
Co-authored-by: Cursor <cursoragent@cursor.com>
Always tag group senders, inject group-focus system hints, label queued follow-ups by speaker, and mark insufficient_scope failures as non-retryable with a user-facing hint.
Co-authored-by: Cursor <cursoragent@cursor.com>
Stamp failure_class for schema/timeout/runtime analytics, refuse same tool+args after a failure in the turn, and add a license short-intent recipe for WhatsApp ops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enqueue a short English failure notice on job crashes, default scheduler lang to en, and tell unauthorized users their request id is pending admin YES.
Co-authored-by: Cursor <cursoragent@cursor.com>
Extend short TTL reuse to listManagedNe/queryUmeNeInventory to cut list self-loops, and treat short YES/continue as confirmation when a token is pending.
Co-authored-by: Cursor <cursoragent@cursor.com>
Inject English recipe hints for fiber/offline/excel/continue, ack the first queued follow-up, localize gate copy, and classify execManagedNe errors so agents stop blind retries.
Co-authored-by: Cursor <cursoragent@cursor.com>
Default progress, quote wrappers, tool-error copy, and playbook recipes to English unless lang is explicitly zh.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire channel inbound on_progress/on_tool_ui to outbound queue so group users see wait signals for CLI/UME work without sharing per-speaker session context.
Co-authored-by: Cursor <cursoragent@cursor.com>
Unregistered tools now suggest close matches; MCP insufficient_scope is rewritten with fallbacks so ops agents stop blind-retrying SQL without sql:query.
Co-authored-by: Cursor <cursoragent@cursor.com>
Production usage showed schema mismatches and multi-tool loops; accept common arg aliases and route agents to <=3-call alarm recipes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire should_stop from aborted runs, snapshot abort before clearing flags so finals are not emitted after stop, and keep fail-path turn_uuid aligned for bubble splitting.
Co-authored-by: Cursor <cursoragent@cursor.com>
start_job/get_job/sleep replace blocked run_command for multi-hour work; Chat shows a live count badge and allows manual kill, with a reaper reclaiming timed-out or stale processes.
Co-authored-by: Cursor <cursoragent@cursor.com>
Enqueue deliverable tool attachments on the WhatsApp queue path, and dedupe the same attachment_id within one Chat bubble (prefer deliverable).
Co-authored-by: Cursor <cursoragent@cursor.com>
Claim pending rows atomically and serialize the sidecar poller so overlapping polls cannot send the same reply twice; also stop inbound queue delivery from falling through to a second enqueue.
Co-authored-by: Cursor <cursoragent@cursor.com>
Strip @mention prefixes and widen history lookup so reply-to of the bot's own prior answer is not wrapped as [被引用消息] again.
Co-authored-by: Cursor <cursoragent@cursor.com>
Serialize per-session inbound turns and merge follow-ups after the active run; show composing while busy and enqueue final replies so long agent runs still reach the group.
Co-authored-by: Cursor <cursoragent@cursor.com>
Align administrator session deletion with the administrator chat view so
sessions surfaced through channel_session_v2 can be removed without a
ui_session_owner row.
Co-authored-by: Cursor <cursoragent@cursor.com>
Reuse channel_session_v2 per job_id so cron runs do not create a new
oclaw session each time; isolate scheduled turn context to the active
turn_uuid so shared sessions do not leak prior run history.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pass the active workspace lane into tool execution and default schedule_create to that specialist so WhatsApp ops-bound jobs are stored and run as ops instead of generalist.
Co-authored-by: Cursor <cursoragent@cursor.com>
Use a fresh execution session per run while keeping source_session_id for delivery only; filter bot JIDs and default scheduled @mentions to the job creator.
Co-authored-by: Cursor <cursoragent@cursor.com>
Scheduled outbound only sent text via pollOutboundQueue; collect deliverable attachments from the turn, encode them in source JSON, and send via sendReplyWithAttachments.
Co-authored-by: Cursor <cursoragent@cursor.com>
Require preview confirmation for schedule_delete, extra confirm_foreign for others' jobs in groups, and mirror the same flow in chat slash commands.
Co-authored-by: Cursor <cursoragent@cursor.com>
Store self-contained playbook recipes on scheduled jobs, add schedule_propose draft gate, and run playbook instructions at fire time instead of only short reminders.
Co-authored-by: Cursor <cursoragent@cursor.com>
Wire mention JIDs/names through scheduled delivery and immediate replies (including attachment captions), sanitize group message text for the model, and surface channel-derived sessions in admin Chat.
Co-authored-by: Cursor <cursoragent@cursor.com>