1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
//! Centralized constants for tool input bounds (CWE-770 prevention).
//!
//! These constants define safe minimum/maximum values for public MCP tool
//! parameters to prevent resource exhaustion. All handlers should use these
//! constants via `.clamp(MIN, MAX)` instead of hardcoded values.
// ──── Query / Memory limits ────
/// Minimum allowed limit for query_memory, analyze_patterns, etc.
pub const MIN_QUERY_LIMIT: usize = 1;
/// Maximum allowed limit for query_memory, analyze_patterns, etc.
pub const MAX_QUERY_LIMIT: usize = 1000;
/// Default limit for query_memory.
pub const DEFAULT_QUERY_LIMIT: usize = 10;
/// Default limit for analyze_patterns.
pub const DEFAULT_ANALYZE_LIMIT: usize = 20;
/// Maximum allowed number of fields for memory queries.
pub const MAX_QUERY_FIELDS: usize = 20;
// ──── Search / Recommend limits ────
/// Maximum allowed limit for search_patterns.
pub const MAX_SEARCH_LIMIT: usize = 100;
/// Default limit for search_patterns.
pub const DEFAULT_SEARCH_LIMIT: usize = 5;
/// Maximum allowed limit for recommend_patterns.
pub const MAX_RECOMMEND_LIMIT: usize = 50;
/// Default limit for recommend_patterns.
pub const DEFAULT_RECOMMEND_LIMIT: usize = 3;
// ──── Playbook / Steps limits ────
/// Minimum allowed max_steps for recommend_playbook.
pub const MIN_PLAYBOOK_STEPS: usize = 1;
/// Maximum allowed max_steps for recommend_playbook.
pub const MAX_PLAYBOOK_STEPS: usize = 100;
/// Default max_steps for recommend_playbook.
pub const DEFAULT_PLAYBOOK_STEPS: usize = 5;
// ──── Episode tags limits ────
/// Minimum allowed limit for search_episodes_by_tags.
pub const MIN_TAG_SEARCH_LIMIT: usize = 1;
/// Maximum allowed limit for search_episodes_by_tags.
pub const MAX_TAG_SEARCH_LIMIT: usize = 1000;
/// Default limit for search_episodes_by_tags.
pub const DEFAULT_TAG_SEARCH_LIMIT: usize = 100;
// ──── Bulk operations limits ────
/// Maximum allowed number of episode IDs in a single bulk request.
pub const MAX_BULK_EPISODE_IDS: usize = 100;
/// Maximum allowed number of tags in a single tags operation (add/remove/set).
pub const MAX_TAGS_PER_OPERATION: usize = 100;
// ──── Task description limits ────
/// Maximum allowed length (in bytes) for task descriptions.
pub const MAX_TASK_DESCRIPTION_LEN: usize = 10_000;
// ──── Dependency graph limits ────
/// Minimum allowed depth for dependency graph traversal.
pub const MIN_DEPTH: usize = 1;
/// Maximum allowed depth for dependency graph traversal.
pub const MAX_DEPTH: usize = 10;
/// Default depth for dependency graph traversal.
pub const DEFAULT_DEPTH: usize = 2;
/// Maximum allowed limit for find_related_episodes.
pub const MAX_FIND_RELATED_LIMIT: usize = 100;
/// Default limit for find_related_episodes.
pub const DEFAULT_FIND_RELATED_LIMIT: usize = 10;
// ──── Embedding limits ────
/// Maximum allowed length (in bytes) for text sent to generate_embedding.
pub const MAX_EMBEDDING_TEXT_LEN: usize = 50_000;
// ──── Checkpoint limits ────
/// Maximum allowed length for checkpoint reason.
pub const MAX_CHECKPOINT_REASON_LEN: usize = 1000;
/// Maximum allowed length for checkpoint note.
pub const MAX_CHECKPOINT_NOTE_LEN: usize = 5000;
// ──── Recommendation feedback limits ────
/// Maximum allowed number of recommended pattern/playbook IDs.
pub const MAX_RECOMMENDED_IDS: usize = 1000;
/// Minimum rating for agent recommendation feedback.
pub const MIN_AGENT_RATING: f32 = 0.0;
/// Maximum rating for agent recommendation feedback.
pub const MAX_AGENT_RATING: f32 = 1.0;
// ──── External signal provider limits ────
/// Minimum allowed weight for external signal merging.
pub const MIN_EXTERNAL_WEIGHT: f32 = 0.0;
/// Maximum allowed weight for external signal merging.
pub const MAX_EXTERNAL_WEIGHT: f32 = 1.0;
/// Minimum allowed min_samples for external signal configuration.
pub const MIN_EXTERNAL_SAMPLES: usize = 1;
/// Maximum allowed min_samples for external signal configuration.
pub const MAX_EXTERNAL_SAMPLES: usize = 10_000;
/// Maximum allowed length for AgentFS database path.
pub const MAX_DB_PATH_LEN: usize = 4096;
// ──── Advanced analysis limits ────
/// Maximum allowed number of variables in a time series analysis.
pub const MAX_SERIES_VARS: usize = 10;
/// Maximum allowed data points per variable in a time series.
pub const MAX_SERIES_POINTS: usize = 1000;
/// Maximum allowed length for metric type identifier.
pub const MAX_METRICS_TYPE_LEN: usize = 100;
/// Truncate a string to a maximum length in a UTF-8 safe manner.