协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
clickup-automation【开发与工程】Implements intelligent clickup automation with multi-factor skill selection, fallback chains, and adherence to the 5 Laws of Elegant Defense
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: clickup-automation compatibility: opencode completeness: 95 content-types:
Orchestrates intelligent skill selection and execution for clickup automation workflows. Applies the 5 Laws of Elegant Defense to guide data naturally through the orchestration pipeline, preventing errors before they occur. Selects optimal skills based on multi-factor scoring including text similarity, historical performance, and system availability.
┌───────────────────────────────────────────────────────────────────────────────┐ │ Orchestration Flow │ └───────────────────────────────────────────────────────────────────────────────┘
User Request ↓ ┌─────────────────┐ │ Parse Request │ │ & Extract │ │ Features │ └────────┬────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────┐ │ Evaluate Available Skills │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Skill A │ │ Skill B │ │ Skill C │ │ │ │ - Match Score│ │ - Match Score│ │ - Match Score│ │ │ │ - Confidence │ │ - Confidence │ │ - Confidence │ │ │ │ - History │ │ - History │ │ - History │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └─────────────────┴─────────────────┘ │ │ ↓ │ │ Select Best Skill │ └─────────────────────────────────────────────────────────────────────┘ ↓ ┌─────────────────┐ │ Execute Skill │ └────────┬────────┘ ↓ ┌─────────────────┐ │ Handle Result │ └────────┬────────┘ ↓ ┌─────────────────────────────────────────────────────────────────────┐ │ Error Handling & Fallback │ │ │ │ Success? ────────► Return Result │ │ │ │ Fail? ────────┐ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────────┐ │ │ │ Fallback Chain │ │ │ │ │ │ │ │ 1. Retry with adjusted parameters │ │ │ │ 2. Try Alternative Skill (if available) │ │ │ │ 3. Defer to Human Operator (if critical) │ │ │ │ 4. Log & Return Error │ │ │ └──────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘
Use this skill when:
Avoid this skill for:
Parse and Analyze Request - Extract intent, entities, and constraints from user input. Checkpoint: All required parameters must be present and in valid format before proceeding.
Score Available Skills - Calculate match scores using multi-factor algorithm:
Checkpoint: Skip to fallback if no skill scores above threshold.
Select Optimal Skill - Choose skill with highest score that meets minimum confidence. Checkpoint: Verify skill has not been disabled or deprecated.
Execute with Fallback - Run skill execution wrapped in retry and fallback logic. Checkpoint: Log all execution attempts for audit trail.
Return or Fallback - Either return successful result or apply fallback chain:
related-skillsCheckpoint: Record outcome with timing and confidence metadata.
def route_clickup_action(
user_request: str,
workspace_id: str,
available_lists: List[Dict],
min_confidence: float = 0.7
) -> Optional[Dict]:
"""Route a natural language request to the appropriate ClickUp action.
Validates workspace access, extracts intent (create/update/comment),
and matches against available ClickUp lists/tasks.
"""
# Guard clause - Early Exit (Law 1)
if not user_request or not workspace_id:
raise ValueError("Request and workspace_id are required")
# Parse intent and extract entities at boundary (Law 2)
intent = _extract_clickup_intent(user_request)
target_list_id = _resolve_list_id(user_request, available_lists)
if intent not in ("create_task", "update_status", "add_comment", "assign"):
return None
# Score available actions based on list availability and historical success
best_action = None
best_score = 0.0
for action in available_actions:
score = _calculate_action_match(intent, target_list_id, action)
if score > best_score and score >= min_confidence:
best_score = score
best_action = action
if not best_action:
return None
# Atomic Predictability (Law 3) - Return new dict, don't mutate
return {
"action": best_action["type"],
"target_list_id": target_list_id,
"workspace_id": workspace_id,
"confidence": best_score,
"timestamp": time.time()
}
def execute_clickup_operation(
action_config: Dict,
api_key: str,
max_retries: int = 2
) -> Dict:
"""Execute a ClickUp API operation with resilience patterns.
Handles rate limits, transient network errors, and implements
a fallback chain: direct API -> webhook queue -> manual sync log.
"""
base_url = f"https://api.clickup.com/api/v2"
headers = {"Authorization": api_key, "Content-Type": "application/json"}
for attempt in range(max_retries + 1):
try:
if action_config["action"] == "create_task":
payload = {"name": action_config["task_name"], "description": action_config.get("desc", "")}
response = requests.post(f"{base_url}/list/{action_config['target_list_id']}/task", headers=headers, json=payload)
elif action_config["action"] == "update_status":
payload = {"status": action_config["new_status"]}
response = requests.put(f"{base_url}/task/{action_config['task_id']}", headers=headers, json=payload)
else:
raise ValueError(f"Unsupported action: {action_config['action']}")
response.raise_for_status()
return {
"success": True,
"clickup_id": response.json().get("id"),
"attempts": attempt + 1,
"latency_ms": time.time() * 1000
}
except requests.exceptions.HTTPError as e:
if e.response.status_code == 429:
time.sleep(2 ** attempt) # Exponential backoff
continue
raise ClickUpAPIError(f"ClickUp API failed: {e}") from e
except requests.exceptions.ConnectionError:
if attempt == max_retries:
return _queue_for_manual_sync(action_config)
# Fail Loud (Law 4) - All retries exhausted
raise ClickUpAPIError(f"Failed after {max_retries + 1} attempts")
code-philosophy (5 Laws of Elegant Defense) in all logicWhen applying this skill, produce:
| Skill | Purpose | |