You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make tool description order deterministic (BTreeMap + alphabetical)
ToolRegistry now uses BTreeMap instead of HashMap so
generate_description() always iterates tools in alphabetical order.
canonical_tool_descriptions() is also sorted alphabetically to match,
ensuring GEPA and production produce identical tool prompt strings.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
"List scheduled tasks. By default shows pending tasks only.",
50
+
r#"{"status": "optional filter: pending, completed, failed, cancelled, or all (default: pending)"}"#,
50
51
),
51
52
(
52
-
"set_preference",
53
-
"Set a user preference. Known keys: 'timezone' (IANA format like 'America/Chicago'), 'language' (ISO code like 'en'), 'display_name'. Other keys are also allowed.",
r#"{"block": "block label (e.g., 'persona', 'human')", "content": "text to append"}"#,
56
+
),
57
+
(
58
+
"memory_insert",
59
+
"Insert text at a specific line in a memory block. Use line=-1 for end.",
60
+
r#"{"block": "block label", "content": "text to insert", "line": "line number (0-indexed, -1 for end)"}"#,
61
+
),
62
+
(
63
+
"memory_replace",
64
+
"Replace text in a memory block. Requires exact match of old text.",
65
+
r#"{"block": "block label (e.g., 'persona', 'human')", "old": "exact text to find", "new": "replacement text"}"#,
55
66
),
56
67
(
57
68
"schedule_task",
58
69
"Schedule a future message or tool execution. Supports one-off (ISO datetime) or recurring (cron expression).",
59
70
r#"{"task_type": "message|tool_call", "description": "human-readable description", "run_at": "ISO datetime (2026-01-26T15:30:00Z) or cron (0 9 * * MON-FRI)", "payload": "JSON: {\"message\": \"...\"} for message, {\"tool\": \"name\", \"args\": {...}} for tool_call", "timezone": "optional IANA timezone for cron (default: user preference or UTC)"}"#,
60
71
),
61
72
(
62
-
"list_schedules",
63
-
"List scheduled tasks. By default shows pending tasks only.",
64
-
r#"{"status": "optional filter: pending, completed, failed, cancelled, or all (default: pending)"}"#,
65
-
),
66
-
(
67
-
"cancel_schedule",
68
-
"Cancel a pending scheduled task by ID.",
69
-
r#"{"id": "UUID of the task to cancel"}"#,
73
+
"set_preference",
74
+
"Set a user preference. Known keys: 'timezone' (IANA format like 'America/Chicago'), 'language' (ISO code like 'en'), 'display_name'. Other keys are also allowed.",
"Search the web with AI summaries, real-time data (weather, stocks, sports), and rich results. Use 'freshness' for time-sensitive queries, 'location' for local results.",
79
85
r#"{ "query": "search query", "count": "results (default 10)", "freshness": "pd=24h, pw=week, pm=month (optional)", "location": "city or 'city, state' for local results (optional)" }"#,
80
86
),
81
-
(
82
-
"done",
83
-
"No-op signal. Use ONLY when messages is [] AND no other tools needed. Indicates nothing to do this turn.",
84
-
r#"{}"#,
85
-
),
86
87
];
87
88
88
89
letmut desc = String::from("Available tools (add to tool_calls array to use):\n\n");
0 commit comments