Detect phrases like: "ask gemini to X" "have claude do X" "call qwen and X" "use gemini to X" "tell claude to X" "let qwen X" "get claude to X" Returns (peer_name, task_string) or (None, None).
(user_message: str)
| 495 | |
| 496 | |
| 497 | def _detect_peer_delegation(user_message: str): |
| 498 | """ |
| 499 | Detect phrases like: |
| 500 | "ask gemini to X" "have claude do X" "call qwen and X" |
| 501 | "use gemini to X" "tell claude to X" "let qwen X" |
| 502 | "get claude to X" |
| 503 | |
| 504 | Returns (peer_name, task_string) or (None, None). |
| 505 | """ |
| 506 | _PEER_NAMES = ["claude", "gemini", "qwen"] |
| 507 | _pattern = re.compile( |
| 508 | r'\b(?:ask|call|have|tell|use|get|let)\s+(' |
| 509 | + '|'.join(_PEER_NAMES) |
| 510 | + r')\s+(?:to\s+|and\s+|do\s+|to\s+do\s+|to\s+help\s+with\s+)?(.+)', |
| 511 | re.IGNORECASE, |
| 512 | ) |
| 513 | m = _pattern.search(user_message) |
| 514 | if m: |
| 515 | return m.group(1).lower(), m.group(2).strip() |
| 516 | |
| 517 | # Also match direct-name patterns: "gemini, X" / "qwen: X" / "claude - X" |
| 518 | _direct = re.compile( |
| 519 | r'^(' |
| 520 | + '|'.join(_PEER_NAMES) |
| 521 | + r')[\s,:\-]+(.+)', |
| 522 | re.IGNORECASE, |
| 523 | ) |
| 524 | m2 = _direct.match(user_message.strip()) |
| 525 | if m2: |
| 526 | return m2.group(1).lower(), m2.group(2).strip() |
| 527 | |
| 528 | return None, None |
| 529 | |
| 530 | |
| 531 | def _auto_apply_peer_code(peer_output, context_message=""): |