mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-02 10:01:34 +00:00
* refactor(agents): route scheduler tool-name consumers through canonical identity Introduce AUTOMATIONS_TOOL_NAME + isAutomationsToolName() in src/agents/tools/automations-tool-name.ts as the single source of truth for the scheduler agent tool's name, and convert every exact-name consumer: factory descriptors, deferred-followup availability detection, add-counting, policy deny lists, mutation classification, trusted media set, tool catalog id, system-prompt tool order and tool-line map, sandbox deny defaults, delegation capability map, MCP loopback probes, and local-model lean deny. Behavior-neutral: the constant still resolves to "cron". Prepares the rename in RFC openclaw/rfcs#50 so the flip is a one-line change with no scattered literals. * feat(agents): rename scheduler agent tool cron -> automations Flip AUTOMATIONS_TOOL_NAME to "automations" and register the legacy name: - TOOL_NAME_ALIASES gains cron -> automations, so persisted toolsAllow/ toolsDeny lists, tool groups, and creator allowlists written before the rename keep matching through the same shipped mechanism as bash -> exec. No doctor rewrite needed. - isAutomationsToolName() accepts legacy names so saved transcripts keep their mutation/replay-safety classification; MUTATING_TOOL_NAMES retains the legacy entry for the same reason. - Tool label, catalog label, and tool-search keywords follow the rename ("cron" kept as a search synonym). - Regression tests cover old-name policy matching (allow and deny), legacy transcript replay classification, and legacy creator allowlists normalizing to the canonical id. Model-facing description strings still say cron; those move in the follow-up strings PR. Part of RFC openclaw/rfcs#50 Phase 1. * test(agents): update creator-cap expectations for canonical automations id The creator tool surface derives from normalized live tool names, so derived toolsAllow outputs now emit "automations". Passthrough paths without a creator cap keep storing user input verbatim; those expectations stay on the legacy name as stored-data coverage. * fix(gateway): canonicalize legacy cron tool calls and restore scheduler deny protection Review follow-ups from ClawSweeper and Codex on the rename (RFC 0026): - MCP loopback tools/call resolves legacy "cron" names to the published automations tool without re-advertising the old name in tools/list. - Gateway /tools/invoke canonicalizes legacy names before core-id checks and exact-name dispatch, so pre-rename integrations keep working. - Security fix: dangerous-tools deny lists (owner-only HTTP deny and control-plane set) were keyed on the literal "cron", so the renamed tool silently lost default-deny and owner-only protection on the HTTP invoke surface. Lists now use the canonical constant, and the gateway.tools.allow un-deny filter normalizes both sides so legacy allow entries still lift it. - Voice high-impact confirmation list and MCP serve creator allowlist follow the canonical name. Existing cron-regression suite now proves the legacy path end to end: default deny 404 for both names, legacy allow entry lifts the deny, and non-owner protection holds. * fix(agents): cover stdio MCP legacy calls, probe prompts, and prompt snapshots for the rename - stdio MCP servers (openclaw-tools-serve / plugin tools handlers) resolve legacy "cron" callTool names to the published canonical tool, matching the HTTP loopback behavior; listTools stays canonical-only. - Live probe prompts instruct harnesses to load/call the automations MCP tool (mcp__openclaw__automations) instead of the retired name. - Prompt snapshot fixture filter follows the canonical name (the renamed tool had silently dropped out of the Codex dynamic-tools snapshots); snapshots regenerated as a clean rename. - Type-cast the new mcp-http handler test payloads for check-test-types. * test(agents): update tool-surface expectations for the automations rename CI-surfaced fallout in shards not covered by the focused local runs: tool availability, agent-config filtering, coding-tools construction, model-provider lean policy, and skill dispatch all assert the scheduler tool's surface name. Mock fixtures and expectations follow the canonical id; legacy-name coverage stays in the dedicated policy/creator-cap/invoke regression suites. * test(gateway): update tool-resolution exclude expectations for automations rename * test(security): update trust-model audit expectations for automations rename * docs(agents): declare cron a permanent scheduler-tool alias per owner decision Maintainer decision (Omar): cron is not being retired anywhere — config keys, RPC methods, schedule syntax, and the CLI token all keep it, and the tool alias follows the same permanent contract as bash -> exec. No doctor rewrite and no removal window; comments updated to state the contract instead of a deprecation plan. * chore(agents): regen prompt snapshots after rebase onto main * fix(agents): teach canonical automations tool in fallback guidance and reuse the identity source Review follow-ups: the structured-list fallback still taught models the cron tool; the cron-scope test echoed its own stub; MCP serve allowlist and voice confirmation hardcoded the name instead of the canonical constant. * fix(mcp): place automations identity import outside the header comment --------- Co-authored-by: Omar Shahine <10343873+omarshahine@users.noreply.github.com>