fix: triage all 16 open GitHub issues — close 9, fix 6, comment 1
Batch 1 (closed): #43 spam, #34 dup, #19 resolved, #2 resolved, #41 answered Batch 2: Added MIT LICENSE file (#35), closed #42 (license question) Batch 3 code fixes: - #29: YouTube skip reason shows "0 results" instead of "not installed" - #30: Bird source mapping handles reddit-web + Bird combo - #39: watchlist.py extracts YouTube + TikTok findings, run-one prints output - #40: watchlist.py uses search_queries field when available Batch 4: - #32: marketplace.json source "." → "./" with $schema ref - #36: commented with investigation plan ($ARGUMENTS forwarding) - #4: Added SSL troubleshooting section to README Also commented on #22 (Bird features) and #31 (skills.sh audit). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1145,8 +1145,10 @@ def main():
|
||||
if x_source == 'bird':
|
||||
if available == 'reddit':
|
||||
available = 'both' # Now have both Reddit + X (via Bird)
|
||||
elif available == 'reddit-web':
|
||||
available = 'all' # Reddit + X (via Bird) + Web
|
||||
elif available == 'web':
|
||||
available = 'x' # Now have X via Bird
|
||||
available = 'x-web' # X via Bird + Web
|
||||
|
||||
# Mock mode can work without keys
|
||||
if args.mock:
|
||||
@@ -1360,6 +1362,8 @@ def main():
|
||||
source_info["x_skip_reason"] = "No Bird CLI or XAI_API_KEY (Node.js 22+ needed for Bird)"
|
||||
if not has_ytdlp:
|
||||
source_info["youtube_skip_reason"] = "yt-dlp not installed — fix: brew install yt-dlp"
|
||||
elif has_ytdlp and not report.youtube:
|
||||
source_info["youtube_skip_reason"] = "0 results (query may be too specific)"
|
||||
if not web_source:
|
||||
source_info["web_skip_reason"] = "assistant will use WebSearch (add BRAVE_API_KEY for native search)"
|
||||
|
||||
|
||||
+26
-3
@@ -86,7 +86,8 @@ def cmd_run_one(args):
|
||||
print(json.dumps({"error": f'Topic not found: "{args.topic}"'}))
|
||||
sys.exit(1)
|
||||
|
||||
_run_topic(topic)
|
||||
result = _run_topic(topic)
|
||||
print(json.dumps(result, default=str))
|
||||
|
||||
|
||||
def cmd_run_all(args):
|
||||
@@ -132,11 +133,13 @@ def _run_topic(topic: dict) -> dict:
|
||||
run_id = store.record_run(topic_id, source_mode="both", status="running")
|
||||
|
||||
try:
|
||||
# Run the research script
|
||||
# Prefer custom search_queries over topic name (#40)
|
||||
search_queries = json.loads(topic["search_queries"]) if topic.get("search_queries") else None
|
||||
search_term = search_queries[0] if search_queries else topic["name"]
|
||||
cmd = [
|
||||
sys.executable,
|
||||
str(SCRIPT_DIR / "last30days.py"),
|
||||
topic["name"],
|
||||
search_term,
|
||||
"--emit=json",
|
||||
]
|
||||
result = subprocess.run(
|
||||
@@ -188,6 +191,26 @@ def _run_topic(topic: dict) -> dict:
|
||||
"engagement_score": (item.get("engagement") or {}).get("likes", 0),
|
||||
"relevance_score": item.get("relevance", 0),
|
||||
})
|
||||
for item in data.get("youtube", []):
|
||||
findings.append({
|
||||
"source": "youtube",
|
||||
"url": item.get("url", ""),
|
||||
"title": item.get("title", ""),
|
||||
"author": item.get("channel_name", item.get("channel", "")),
|
||||
"content": item.get("transcript_snippet", "") or item.get("title", ""),
|
||||
"engagement_score": (item.get("engagement") or {}).get("views", 0),
|
||||
"relevance_score": item.get("relevance", 0),
|
||||
})
|
||||
for item in data.get("tiktok", []):
|
||||
findings.append({
|
||||
"source": "tiktok",
|
||||
"url": item.get("url", ""),
|
||||
"title": (item.get("caption_snippet", "") or "")[:120],
|
||||
"author": item.get("author", ""),
|
||||
"content": item.get("caption_snippet", ""),
|
||||
"engagement_score": (item.get("engagement") or {}).get("views", 0),
|
||||
"relevance_score": item.get("relevance", 0),
|
||||
})
|
||||
|
||||
# Store with dedup
|
||||
counts = store.store_findings(run_id, topic_id, findings)
|
||||
|
||||
Reference in New Issue
Block a user