| @@ -256,9 +256,9 @@ | ||
| 256 | 256 | wp_register_ability( |
| 257 | 257 | 'desktop-mode/search-comments-by-post', |
| 258 | 258 | array( |
| 259 | 259 | 'label' => __( 'Search comments on a post', 'desktop-mode' ), |
| 260 | - 'description' => 'Keyword-searches approved comments on a SPECIFIC post by its WordPress ID (the post must be readable by the requesting user; an unreadable or nonexistent post returns an empty result). Use this when you have already identified a post (via search-posts) and the user\'s query also mentions something a reader said on that post — e.g. "I remember a comment on my Málaga post asking about the Alcazaba at night." Call search-posts first to find the post ID, then call this tool with that ID and the distinctive words as `query`. Much more precise than search-comments when the parent post is known. If has_more is true, call again with the next offset.', | |
| 260 | + 'description' => 'Keyword-searches approved comments on a SPECIFIC post by its WordPress ID (the post must be readable by the requesting user; an unreadable or nonexistent post returns an empty result). Use this when the user describes both a post and something a reader said on it: identify the post with search-posts, then pass its ID and the distinctive words of the comment as `query`. More precise than search-comments whenever the parent post is known. If has_more is true, call again with the next offset.', | |
| 261 | 261 | 'category' => OPENSTATION_AI_ABILITY_CATEGORY, |
| 262 | 262 | 'input_schema' => array( |
| 263 | 263 | 'type' => 'object', |
| 264 | 264 | 'additionalProperties' => false, |
| @@ -324,9 +324,9 @@ | ||
| 324 | 324 | wp_register_ability( |
| 325 | 325 | 'desktop-mode/search-wporg-plugins', |
| 326 | 326 | array( |
| 327 | 327 | 'label' => __( 'Search WordPress.org plugins', 'desktop-mode' ), |
| 328 | - 'description' => 'Searches the official WordPress.org plugin directory. Use this when the user asks for a plugin recommendation — e.g. "is there a plugin for SEO?", "find me a backup plugin", "a caching plugin", "form builder". Returns up to 10 plugins with name, description, rating, active install count, and an admin URL that opens the plugin-info / install screen directly.', | |
| 328 | + 'description' => 'Searches the official WordPress.org plugin directory. Use this when the user asks for a plugin recommendation — e.g. "is there a plugin for SEO?", "find me a backup plugin", "a caching plugin", "form builder". Returns up to 10 plugins with name, description, rating (0-100) and stars (0-5), active install count, and an admin URL that opens the plugin-info / install screen directly.', | |
| 329 | 329 | 'category' => OPENSTATION_AI_ABILITY_CATEGORY, |
| 330 | 330 | 'input_schema' => array( |
| 331 | 331 | 'type' => 'object', |
| 332 | 332 | 'additionalProperties' => false, |
| @@ -341,9 +341,9 @@ | ||
| 341 | 341 | 'output_schema' => openstation_ai_ability_output_schema( |
| 342 | 342 | array( |
| 343 | 343 | 'results' => array( |
| 344 | 344 | 'type' => 'array', |
| 345 | - 'description' => 'Matching plugins with name, description, rating, installs, and admin URL.', | |
| 345 | + 'description' => 'Matching plugins with name, description, rating (0-100), stars (0-5), installs, and admin URL.', | |
| 346 | 346 | ), |
| 347 | 347 | 'count' => array( 'type' => 'integer' ), |
| 348 | 348 | ) |
| 349 | 349 | ), |
| @@ -399,11 +399,14 @@ | ||
| 399 | 399 | /** |
| 400 | 400 | * Registers the comment-spam analysis ability. |
| 401 | 401 | * |
| 402 | 402 | * Not offered to the model during a search turn (see |
| 403 | - * {@see openstation_ai_search_ability_names()}); the moderation pipeline | |
| 404 | - * resolves and executes it directly ({@see openstation_ai_analyze_comment_now()} | |
| 405 | - * runs through it). Exposed in the abilities catalog for observability + reuse. | |
| 403 | + * {@see openstation_ai_search_ability_names()}) — a search turn can be driven | |
| 404 | + * by attacker-controlled comment text, and this one spends provider tokens. | |
| 405 | + * It is an on-demand ability: a caller with `moderate_comments` runs it for one | |
| 406 | + * comment and gets the verdict back. Automatic scoring on comment save was | |
| 407 | + * removed (`docs/migration-comments-ai-scoring.md`), so nothing in the plugin | |
| 408 | + * invokes it on its own. | |
| 406 | 409 | * |
| 407 | 410 | * @return void |
| 408 | 411 | */ |
| 409 | 412 | function openstation_ai_register_comment_analysis_ability() { |
| @@ -410,9 +413,9 @@ | ||
| 410 | 413 | wp_register_ability( |
| 411 | 414 | 'desktop-mode/analyze-comment', |
| 412 | 415 | array( |
| 413 | 416 | 'label' => __( 'Analyze comment for spam', 'desktop-mode' ), |
| 414 | - 'description' => 'Runs the AI spam/harm analysis for a single comment and returns its structured verdict ({ topic, ai_summary, harmful, spam }). Used by comment moderation to score incoming comments.', | |
| 417 | + 'description' => 'Runs the AI spam/harm analysis for a single comment and returns its structured verdict ({ topic, ai_summary, harmful, spam }). On-demand only: nothing in the plugin runs it automatically.', | |
| 415 | 418 | 'category' => OPENSTATION_AI_ABILITY_CATEGORY, |
| 416 | 419 | 'input_schema' => array( |
| 417 | 420 | 'type' => 'object', |
| 418 | 421 | 'additionalProperties' => false, |