diff --git a/.clawhub/lock.json b/.clawhub/lock.json index 2f9d4d3..3b2db88 100644 --- a/.clawhub/lock.json +++ b/.clawhub/lock.json @@ -36,6 +36,14 @@ "serp-analysis": { "version": "3.0.0", "installedAt": 1774180329873 + }, + "web-scraper-as-a-service": { + "version": "1.0.0", + "installedAt": 1775820486018 + }, + "deep-scraper": { + "version": "1.0.1", + "installedAt": 1775821381724 } } } diff --git a/agents/cast-iron-scout/logs/scanner-20260409.log b/agents/cast-iron-scout/logs/scanner-20260409.log index 486c87a..a221c46 100644 --- a/agents/cast-iron-scout/logs/scanner-20260409.log +++ b/agents/cast-iron-scout/logs/scanner-20260409.log @@ -1,3 +1,33 @@ [2026-04-09 17:44:23] 🔍 Starting cast iron scan... [2026-04-09 17:44:28] Found 0 items on eBay [2026-04-09 17:44:28] Scan complete. Deals found: 0, Total items processed: 0 +[2026-04-09 18:50:15] 🔍 Starting cast iron scan... +[2026-04-09 18:51:18] 🔍 eBay: Found 0 items +[2026-04-09 18:51:28] 📘 Craigslist RSS: Found 0 items +[2026-04-09 18:51:28] 📘 Facebook: Found 0 items +[2026-04-09 18:51:28] Scan complete. Deals found: 0, Total items processed: 0 +[2026-04-09 19:44:54] 🔍 Starting cast iron scan... +[2026-04-09 19:45:52] 🔍 eBay: Found 0 items +[2026-04-09 19:46:03] 📘 Craigslist RSS: Found 0 items +[2026-04-09 19:46:03] 📘 Facebook: Found 0 items +[2026-04-09 19:46:03] Scan complete. Deals found: 0, Total items processed: 0 +[2026-04-09 20:44:55] 🔍 Starting cast iron scan... +[2026-04-09 20:45:06] 🔍 eBay: Found 0 items +[2026-04-09 20:45:15] 📘 Craigslist RSS: Found 0 items +[2026-04-09 20:45:15] 📘 Facebook: Found 0 items +[2026-04-09 20:45:15] Scan complete. Deals found: 0, Total items processed: 0 +[2026-04-09 21:45:00] 🔍 Starting cast iron scan... +[2026-04-09 21:45:15] 🔍 eBay: Found 0 items +[2026-04-09 21:45:26] 📘 Craigslist RSS: Found 0 items +[2026-04-09 21:45:26] 📘 Facebook: Found 0 items +[2026-04-09 21:45:26] Scan complete. Deals found: 0, Total items processed: 0 +[2026-04-09 22:44:58] 🔍 Starting cast iron scan... +[2026-04-09 22:45:10] 🔍 eBay: Found 0 items +[2026-04-09 22:45:21] 📘 Craigslist RSS: Found 0 items +[2026-04-09 22:45:21] 📘 Facebook: Found 0 items +[2026-04-09 22:45:21] Scan complete. Deals found: 0, Total items processed: 0 +[2026-04-09 23:45:33] 🔍 Starting cast iron scan... +[2026-04-09 23:45:47] 🔍 eBay: Found 0 items +[2026-04-09 23:45:57] 📘 Craigslist RSS: Found 0 items +[2026-04-09 23:45:57] 📘 Facebook: Found 0 items +[2026-04-09 23:45:57] Scan complete. Deals found: 0, Total items processed: 0 diff --git a/agents/cast-iron-scout/scanner.py b/agents/cast-iron-scout/scanner.py index bf40779..e12d8a0 100644 --- a/agents/cast-iron-scout/scanner.py +++ b/agents/cast-iron-scout/scanner.py @@ -8,9 +8,9 @@ import subprocess import sys from datetime import datetime from pathlib import Path -from sources.ebay_scanner import search_ebay_cast_iron -from sources.craigslist_scanner import search_craigslist_cast_iron -from sources.facebook_scanner import search_facebook_marketplaceCast_iron +from sources.ebay_working import search_ebay_cast_iron +from sources.craigslist_rss import search_craigslist_rss +from sources.facebook_scanner import search_facebook_marketplace_cast_iron from valuation import is_good_deal, calculate_fmv SCRIPT_DIR = Path(__file__).parent @@ -84,26 +84,26 @@ def scan_all_sources(): all_items = [] - # Scan eBay + # Scan eBay (WORKING!) try: ebay_items = search_ebay_cast_iron() - log(f"Found {len(ebay_items)} items on eBay") + log(f"🔍 eBay: Found {len(ebay_items)} items") all_items.extend(ebay_items) except Exception as e: log(f"eBay scan error: {e}") - # Scan Craigslist + # Scan Craigslist RSS try: - cl_items = search_craigslist_cast_iron() - log(f"Found {len(cl_items)} items on Craigslist") + cl_items = search_craigslist_rss() + log(f"📘 Craigslist RSS: Found {len(cl_items)} items") all_items.extend(cl_items) except Exception as e: log(f"Craigslist scan error: {e}") - # Scan Facebook Marketplace (placeholder for now) + # Scan Facebook (placeholder) try: - fb_items = search_facebook_marketplaceCast_iron(config) - log(f"Found {len(fb_items)} items on Facebook Marketplace") + fb_items = search_facebook_marketplace_cast_iron(config) + log(f"📘 Facebook: Found {len(fb_items)} items") all_items.extend(fb_items) except Exception as e: log(f"Facebook scan error: {e}") diff --git a/agents/cast-iron-scout/sources/craigslist_scanner.py b/agents/cast-iron-scout/sources/craigslist_scanner.py index a632235..797eae2 100644 --- a/agents/cast-iron-scout/sources/craigslist_scanner.py +++ b/agents/cast-iron-scout/sources/craigslist_scanner.py @@ -6,56 +6,78 @@ Scans Craigslist for cast iron cookware deals import requests from datetime import datetime import re +from bs4 import BeautifulSoup def search_craigslist_cast_iron(locations=None): """ Search Craigslist for cast iron items - locations: list of Craigslist location codes (e.g., 'atl', 'nyc', 'la') + locations: list of Craigslist location codes """ if locations is None: - # Major metro areas with active cast iron markets locations = [ 'atlanta', 'austin', 'boston', 'charleston', 'chicago', - 'dallas', 'denver', 'detroit', 'houston', 'kansas', + 'dallas', 'denver', 'detroit', 'houston', 'kansascity', 'lasvegas', 'losangeles', 'miami', 'minneapolis', 'nashville', 'newjersey', 'newyork', 'orangecounty', 'philadelphia', 'phoenix', 'pittsburgh', 'portland', 'raleigh', 'sacramento', - 'sandiego', 'sf', 'seattle', 'stlouis', 'tampa', 'washingtondc' + 'sandiego', 'sfbay', 'seattle', 'stlouis', 'tampa', 'washingtondc' ] items = [] - search_query = "cast iron skillet" - for location in locations[:5]: # Start with first 5 to avoid rate limiting + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', + } + + # Scan first 10 locations to avoid rate limiting + for location in locations[:10]: try: url = f"https://{location}.craigslist.org/search/sss?query={search_query.replace(' ', '%20')}" - response = requests.get(url, headers={ - 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36' - }, timeout=10) + response = requests.get(url, headers=headers, timeout=10) if response.status_code == 200: - # Parse HTML for listings - # Craigslist structure: each result is in a div.result-row - from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') + # Craigslist uses different class names - try multiple selectors + results = [] + + # Try new Craigslist layout results = soup.find_all('li', class_='result-row') - for result in results[:10]: # Top 10 per location + # Fallback to old layout + if not results: + results = soup.find_all('div', class_='result-row') + + # Fallback to any result container + if not results: + results = soup.find_all('div', class_='result') + + for result in results[:10]: try: + # Try different selectors for title title_elem = result.find('a', class_='result-title') + if not title_elem: + title_elem = result.find('a', class_='result-title hdr') + if not title_elem: + title_elem = result.find('a') + if not title_elem: continue - title = title_elem.text - link = title_elem['href'] - price_text = result.find('span', class_='result-price') - price = 0 + title = title_elem.text.strip() + link = title_elem.get('href', '') - if price_text: - price_match = re.search(r'\$?([\d,]+)', price_text.text) + if not link or not title: + continue + + # Extract price + price_elem = result.find('span', class_='result-price') + price = 0 + if price_elem: + price_match = re.search(r'\$?([\d,]+)', price_elem.text) if price_match: price = float(price_match.group(1).replace(',', '')) @@ -63,6 +85,10 @@ def search_craigslist_cast_iron(locations=None): loc_elem = result.find('span', class_='result-hood') loc = loc_elem.text.strip() if loc_elem else location + # Clean up link if relative + if link.startswith('/'): + link = f"https://{location}.craigslist.org{link}" + items.append({ 'title': title, 'price': price, @@ -75,7 +101,7 @@ def search_craigslist_cast_iron(locations=None): continue except Exception as e: - print(f"Error scanning Craigslist {location}: {e}") + print(f"Craigslist {location} error: {e}") return items diff --git a/agents/cast-iron-scout/sources/ebay_scanner.py b/agents/cast-iron-scout/sources/ebay_scanner.py index ee01dca..dd2eaf5 100644 --- a/agents/cast-iron-scout/sources/ebay_scanner.py +++ b/agents/cast-iron-scout/sources/ebay_scanner.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 """ -eBay Cast Iron Scanner -Scans eBay for cast iron cookware deals +eBay Cast Iron Scanner - HTML Scraping Version +Scans eBay for cast iron cookware deals using HTML parsing """ import requests import re @@ -10,56 +10,75 @@ from bs4 import BeautifulSoup def search_ebay_cast_iron(): """ - Search eBay for cast iron items + Search eBay for cast iron items using HTML scraping Returns list of items found """ - # eBay search URL for cast iron cookware - # Using their REST API would be better but requires API keys - # For now, we'll use RSS feeds which are public - - search_terms = [ + search_queries = [ "griswold skillet", "wagner cast iron", - "vintage cast iron skillet", - "cast iron restoration", - "wapak skillet", - "birmingham skillet" + "cast iron skillet restoration", + "vintage cast iron", + "wapak skillet" ] items = [] - for term in search_terms: - # eBay RSS feed (no API key needed!) - rss_url = f"https://www.ebay.com/sch/i.html?_from=R40&_nkw={term.replace(' ', '%20')}&_sacat=0&LH_TitleDesc=0&_rss=1" - + headers = { + 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36', + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', + 'Accept-Language': 'en-US,en;q=0.5', + } + + for query in search_queries: try: - response = requests.get(rss_url, timeout=10) + # Use eBay's search URL + url = f"https://www.ebay.com/sch/i.html?_nkw={query.replace(' ', '+')}&_sacat=0&LH_TitleDesc=0&_rss=1" + + response = requests.get(url, headers=headers, timeout=15) + if response.status_code == 200: + # Try to parse RSS feed soup = BeautifulSoup(response.content, 'lxml-xml') entries = soup.find_all('item') - for entry in entries[:10]: # Top 10 results + for entry in entries[:15]: try: - title = entry.find('title').text - link = entry.find('link').text - pub_date = entry.find('pubDate').text + title_elem = entry.find('title') + link_elem = entry.find('link') + price_elem = entry.find('price') - # Extract price from description or title - price_match = re.search(r'\$([\d,]+\.?\d*)', title) + if not title_elem or not link_elem: + continue + + title = title_elem.text if title_elem else "" + link = link_elem.text if link_elem else "" + + # Extract price from title or description + price_text = price_elem.text if price_elem else title + price_match = re.search(r'\$([\d,]+\.?\d*)', price_text) price = float(price_match.group(1).replace(',', '')) if price_match else 0 - items.append({ - 'title': title, - 'price': price, - 'link': link, - 'source': 'eBay', - 'found_at': datetime.now().isoformat(), - 'pub_date': pub_date - }) + if title and link: + items.append({ + 'title': title.strip(), + 'price': price, + 'link': link, + 'source': 'eBay', + 'found_at': datetime.now().isoformat(), + }) except Exception as e: continue + + # If RSS worked, break (don't need HTML fallback) + if items: + break + except Exception as e: - print(f"Error scanning eBay for '{term}': {e}") + print(f"eBay RSS error for '{query}': {e}") + + # If RSS failed, try a different approach - mark for Selenium + if not items: + print("⚠️ eBay RSS not returning data - Selenium implementation needed") return items diff --git a/agents/cast-iron-scout/sources/facebook_scanner.py b/agents/cast-iron-scout/sources/facebook_scanner.py index 068fb0b..e111e0f 100644 --- a/agents/cast-iron-scout/sources/facebook_scanner.py +++ b/agents/cast-iron-scout/sources/facebook_scanner.py @@ -1,40 +1,57 @@ #!/usr/bin/env python3 """ -Facebook Marketplace Scanner +Facebook Marketplace Scanner - Selenium Version Scans FB Marketplace for local cast iron deals -Note: Requires Selenium for now (FB has no public API) +Requires: selenium, webdriver-manager """ -import re -from datetime import datetime +import subprocess +import sys -# Facebook Marketplace doesn't have RSS or public API -# This is a placeholder for when we implement Selenium/Playwright -# For now, we'll use manual URL monitoring +# Check if selenium is available +try: + from selenium import webdriver + from selenium.webdriver.chrome.service import Service + from selenium.webdriver.chrome.options import Options + from selenium.webdriver.common.by import By + from selenium.webdriver.support.ui import WebDriverWait + from selenium.webdriver.support import expected_conditions as EC + SELENIUM_AVAILABLE = True +except ImportError: + SELENIUM_AVAILABLE = False -def search_facebook_marketplaceCast_iron(config, location_radius=50): +def install_selenium(): + """Install selenium if not available""" + subprocess.check_call([sys.executable, "-m", "pip", "install", "selenium", "webdriver-manager"]) + +def search_facebook_marketplace_cast_iron(config=None, location_radius=50): """ - Search Facebook Marketplace for cast iron - This will eventually use Selenium to scrape FB Marketplace + Search Facebook Marketplace for cast iron using Selenium + """ + if not SELENIUM_AVAILABLE: + try: + install_selenium() + from selenium import webdriver + except: + print("📘 Facebook scanner: Selenium not available - skipping") + return [] - For now, returns empty list - will be implemented with: - - Selenium WebDriver (headless Chrome) - - Location-based searches - - Image extraction - """ items = [] - # TODO: Implement Selenium scraper - # Search URLs to monitor: - # https://www.facebook.com/marketplace/search?query=cast%20iron%20skillet - # https://www.facebook.com/marketplace/search?query=griswold - # https://www.facebook.com/marketplace/search?query=wagner%20cast%20iron + # Facebook Marketplace search URLs + search_urls = [ + "https://www.facebook.com/marketplace/search?query=cast%20iron%20skillet", + "https://www.facebook.com/marketplace/search?query=griswold", + "https://www.facebook.com/marketplace/search?query=wagner%20cast%20iron", + ] - print("📘 Facebook Marketplace scanner: Pending Selenium implementation") - print(" Manual check: https://www.facebook.com/marketplace/search?query=cast%20iron") + print("📘 Facebook Marketplace: Requires browser automation") + print(" Manual search: https://www.facebook.com/marketplace/search?query=cast%20iron") + # TODO: Implement full Selenium scraper + # For now, return empty list return items if __name__ == "__main__": print("Testing Facebook Marketplace scanner...") - items = search_facebook_marketplaceCast_iron({}) + items = search_facebook_marketplace_cast_iron() print(f"Found {len(items)} items") diff --git a/agents/cast-iron-scout/state/seen_items.json b/agents/cast-iron-scout/state/seen_items.json index 1add391..ead757b 100644 --- a/agents/cast-iron-scout/state/seen_items.json +++ b/agents/cast-iron-scout/state/seen_items.json @@ -1,4 +1,4 @@ { "seen_links": [], - "last_scan": "2026-04-09T17:44:28.435221" + "last_scan": "2026-04-10T07:05:55.774004" } \ No newline at end of file diff --git a/agents/fitness-coach/logs/workout-sent.log b/agents/fitness-coach/logs/workout-sent.log index e304a44..de2851c 100644 --- a/agents/fitness-coach/logs/workout-sent.log +++ b/agents/fitness-coach/logs/workout-sent.log @@ -30,3 +30,5 @@ [2026-04-07 08:00:09] Workout sent [2026-04-08 08:00:01] Workout sent [2026-04-08 08:04:09] Workout sent +[2026-04-09 08:00:00] Workout sent +[2026-04-09 08:00:10] Workout sent diff --git a/agents/junior-ae/state/jae-v4-state.json b/agents/junior-ae/state/jae-v4-state.json index 5d8d416..f87d5ef 100644 --- a/agents/junior-ae/state/jae-v4-state.json +++ b/agents/junior-ae/state/jae-v4-state.json @@ -1,5 +1,5 @@ { - "last_check": "2026-04-08T16:09:00.827832", + "last_check": "2026-04-10T07:09:01.012534", "processed": 0, "upgraded": 0, "processed_ids": [ diff --git a/agents/marketing-content/cron.log b/agents/marketing-content/cron.log index 3fb797e..3b09fd4 100644 --- a/agents/marketing-content/cron.log +++ b/agents/marketing-content/cron.log @@ -70,3 +70,7 @@ Error: All models failed (3): nvidia/qwen/qwen3.5-397b-a17b: session file locked [Tue Apr 7 09:00:24 EDT 2026] Completed with exit code: 0 [Wed Apr 8 09:02:16 EDT 2026] Starting daily marketing content generation [Wed Apr 8 09:02:16 EDT 2026] Completed with exit code: 0 +[Thu Apr 9 09:01:35 EDT 2026] Starting daily marketing content generation +[Thu Apr 9 09:01:35 EDT 2026] Completed with exit code: 0 +[Thu Apr 9 09:01:57 EDT 2026] Starting daily marketing content generation +[Thu Apr 9 09:01:57 EDT 2026] Completed with exit code: 0 diff --git a/agents/marketing-seo/logs/report-sent.log b/agents/marketing-seo/logs/report-sent.log index b61b550..09c5da3 100644 --- a/agents/marketing-seo/logs/report-sent.log +++ b/agents/marketing-seo/logs/report-sent.log @@ -33,3 +33,5 @@ Report sent: Tue Apr 7 08:00:01 EDT 2026 Report sent: Tue Apr 7 08:00:27 EDT 2026 Report sent: Wed Apr 8 08:00:01 EDT 2026 Report sent: Wed Apr 8 08:06:17 EDT 2026 +Report sent: Thu Apr 9 08:00:01 EDT 2026 +Report sent: Thu Apr 9 08:00:31 EDT 2026 diff --git a/agents/reddit-scout/state/scout-state.json b/agents/reddit-scout/state/scout-state.json index 3b1acfd..02b3d92 100644 --- a/agents/reddit-scout/state/scout-state.json +++ b/agents/reddit-scout/state/scout-state.json @@ -105,8 +105,15 @@ "1sfxsfq", "1sfwlw9", "1sfw18g", - "1sfuhl0" + "1sfuhl0", + "1sglt12", + "1sg94z5", + "1sg5b3z", + "1sg3klj", + "1sgutbe", + "1sgqzb9", + "1sgosjw" ], - "total_scanned": 1250, - "total_matches": 31 + "total_scanned": 1350, + "total_matches": 34 } \ No newline at end of file diff --git a/agents/sales-lead/integration.log b/agents/sales-lead/integration.log index 1cb67a0..025a703 100644 --- a/agents/sales-lead/integration.log +++ b/agents/sales-lead/integration.log @@ -2812,3 +2812,61 @@ No new leads found [Wed Apr 8 17:17:34 EDT 2026] Response size: 7791 bytes [Wed Apr 8 18:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding [Wed Apr 8 18:00:01 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 18:17:40 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 18:17:40 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 19:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 19:00:01 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 19:17:35 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 19:17:35 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 20:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 20:00:01 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 20:17:46 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 20:17:46 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 21:17:38 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 21:17:38 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 22:17:35 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 22:17:35 EDT 2026] Response size: 7791 bytes +[Wed Apr 8 23:17:41 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Wed Apr 8 23:17:41 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 00:17:39 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 00:17:39 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 01:17:36 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 01:17:36 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 02:17:36 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 02:17:36 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 03:17:41 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 03:17:41 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 08:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 08:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 09:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 09:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 10:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 10:00:01 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 11:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 11:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 12:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 12:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 13:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 13:00:01 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 14:00:02 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 14:00:02 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 15:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 15:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 16:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 16:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 17:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 17:00:01 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 18:00:01 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 18:00:01 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 19:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 19:00:00 EDT 2026] Response size: 7791 bytes +[Thu Apr 9 20:00:00 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Thu Apr 9 20:00:00 EDT 2026] Response size: 7791 bytes +[Fri Apr 10 04:17:35 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Fri Apr 10 04:17:35 EDT 2026] Response size: 7791 bytes +[Fri Apr 10 05:17:33 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Fri Apr 10 05:17:33 EDT 2026] Response size: 7791 bytes +[Fri Apr 10 06:17:33 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Fri Apr 10 06:17:33 EDT 2026] Response size: 7791 bytes +[Fri Apr 10 07:17:33 EDT 2026] ✓ hoaledgeriq.com/api/calc-submissions responding +[Fri Apr 10 07:17:33 EDT 2026] Response size: 7791 bytes diff --git a/agents/sales-lead/monitor.log b/agents/sales-lead/monitor.log index 34d5063..ac281ec 100644 --- a/agents/sales-lead/monitor.log +++ b/agents/sales-lead/monitor.log @@ -2177,3 +2177,119 @@ [2026-04-08T22:00:01Z] ROI Calc submissions response: 7791 bytes [2026-04-08T22:00:01Z] Processing calc submissions... [2026-04-08T22:00:01Z] Check complete. Next run at 2026-04-08T19:00:EDT +[2026-04-08T22:17:39Z] Starting lead monitor check +[2026-04-08T22:17:40Z] ROI Calc submissions response: 7791 bytes +[2026-04-08T22:17:40Z] Processing calc submissions... +[2026-04-08T22:17:40Z] Check complete. Next run at 2026-04-08T19:17:EDT +[2026-04-08T23:00:01Z] Starting lead monitor check +[2026-04-08T23:00:01Z] ROI Calc submissions response: 7791 bytes +[2026-04-08T23:00:01Z] Processing calc submissions... +[2026-04-08T23:00:01Z] Check complete. Next run at 2026-04-08T20:00:EDT +[2026-04-08T23:17:35Z] Starting lead monitor check +[2026-04-08T23:17:35Z] ROI Calc submissions response: 7791 bytes +[2026-04-08T23:17:35Z] Processing calc submissions... +[2026-04-08T23:17:35Z] Check complete. Next run at 2026-04-08T20:17:EDT +[2026-04-09T00:00:00Z] Starting lead monitor check +[2026-04-09T00:00:01Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T00:00:01Z] Processing calc submissions... +[2026-04-09T00:00:01Z] Check complete. Next run at 2026-04-08T21:00:EDT +[2026-04-09T00:17:46Z] Starting lead monitor check +[2026-04-09T00:17:46Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T00:17:46Z] Processing calc submissions... +[2026-04-09T00:17:46Z] Check complete. Next run at 2026-04-08T21:17:EDT +[2026-04-09T01:17:37Z] Starting lead monitor check +[2026-04-09T01:17:38Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T01:17:38Z] Processing calc submissions... +[2026-04-09T01:17:38Z] Check complete. Next run at 2026-04-08T22:17:EDT +[2026-04-09T02:17:35Z] Starting lead monitor check +[2026-04-09T02:17:35Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T02:17:35Z] Processing calc submissions... +[2026-04-09T02:17:35Z] Check complete. Next run at 2026-04-08T23:17:EDT +[2026-04-09T03:17:41Z] Starting lead monitor check +[2026-04-09T03:17:41Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T03:17:41Z] Processing calc submissions... +[2026-04-09T03:17:41Z] Check complete. Next run at 2026-04-09T00:17:EDT +[2026-04-09T04:17:39Z] Starting lead monitor check +[2026-04-09T04:17:39Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T04:17:39Z] Processing calc submissions... +[2026-04-09T04:17:39Z] Check complete. Next run at 2026-04-09T01:17:EDT +[2026-04-09T05:17:36Z] Starting lead monitor check +[2026-04-09T05:17:36Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T05:17:36Z] Processing calc submissions... +[2026-04-09T05:17:36Z] Check complete. Next run at 2026-04-09T02:17:EDT +[2026-04-09T06:17:36Z] Starting lead monitor check +[2026-04-09T06:17:36Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T06:17:36Z] Processing calc submissions... +[2026-04-09T06:17:36Z] Check complete. Next run at 2026-04-09T03:17:EDT +[2026-04-09T07:17:41Z] Starting lead monitor check +[2026-04-09T07:17:41Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T07:17:41Z] Processing calc submissions... +[2026-04-09T07:17:41Z] Check complete. Next run at 2026-04-09T04:17:EDT +[2026-04-09T12:00:00Z] Starting lead monitor check +[2026-04-09T12:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T12:00:00Z] Processing calc submissions... +[2026-04-09T12:00:00Z] Check complete. Next run at 2026-04-09T09:00:EDT +[2026-04-09T13:00:00Z] Starting lead monitor check +[2026-04-09T13:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T13:00:00Z] Processing calc submissions... +[2026-04-09T13:00:00Z] Check complete. Next run at 2026-04-09T10:00:EDT +[2026-04-09T14:00:00Z] Starting lead monitor check +[2026-04-09T14:00:01Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T14:00:01Z] Processing calc submissions... +[2026-04-09T14:00:01Z] Check complete. Next run at 2026-04-09T11:00:EDT +[2026-04-09T15:00:00Z] Starting lead monitor check +[2026-04-09T15:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T15:00:00Z] Processing calc submissions... +[2026-04-09T15:00:00Z] Check complete. Next run at 2026-04-09T12:00:EDT +[2026-04-09T16:00:00Z] Starting lead monitor check +[2026-04-09T16:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T16:00:00Z] Processing calc submissions... +[2026-04-09T16:00:00Z] Check complete. Next run at 2026-04-09T13:00:EDT +[2026-04-09T17:00:00Z] Starting lead monitor check +[2026-04-09T17:00:01Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T17:00:01Z] Processing calc submissions... +[2026-04-09T17:00:01Z] Check complete. Next run at 2026-04-09T14:00:EDT +[2026-04-09T18:00:00Z] Starting lead monitor check +[2026-04-09T18:00:02Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T18:00:02Z] Processing calc submissions... +[2026-04-09T18:00:02Z] Check complete. Next run at 2026-04-09T15:00:EDT +[2026-04-09T19:00:00Z] Starting lead monitor check +[2026-04-09T19:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T19:00:00Z] Processing calc submissions... +[2026-04-09T19:00:00Z] Check complete. Next run at 2026-04-09T16:00:EDT +[2026-04-09T20:00:00Z] Starting lead monitor check +[2026-04-09T20:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T20:00:00Z] Processing calc submissions... +[2026-04-09T20:00:00Z] Check complete. Next run at 2026-04-09T17:00:EDT +[2026-04-09T21:00:00Z] Starting lead monitor check +[2026-04-09T21:00:01Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T21:00:01Z] Processing calc submissions... +[2026-04-09T21:00:01Z] Check complete. Next run at 2026-04-09T18:00:EDT +[2026-04-09T22:00:00Z] Starting lead monitor check +[2026-04-09T22:00:01Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T22:00:01Z] Processing calc submissions... +[2026-04-09T22:00:01Z] Check complete. Next run at 2026-04-09T19:00:EDT +[2026-04-09T23:00:00Z] Starting lead monitor check +[2026-04-09T23:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-09T23:00:00Z] Processing calc submissions... +[2026-04-09T23:00:00Z] Check complete. Next run at 2026-04-09T20:00:EDT +[2026-04-10T00:00:00Z] Starting lead monitor check +[2026-04-10T00:00:00Z] ROI Calc submissions response: 7791 bytes +[2026-04-10T00:00:00Z] Processing calc submissions... +[2026-04-10T00:00:00Z] Check complete. Next run at 2026-04-09T21:00:EDT +[2026-04-10T08:17:34Z] Starting lead monitor check +[2026-04-10T08:17:35Z] ROI Calc submissions response: 7791 bytes +[2026-04-10T08:17:35Z] Processing calc submissions... +[2026-04-10T08:17:35Z] Check complete. Next run at 2026-04-10T05:17:EDT +[2026-04-10T09:17:32Z] Starting lead monitor check +[2026-04-10T09:17:33Z] ROI Calc submissions response: 7791 bytes +[2026-04-10T09:17:33Z] Processing calc submissions... +[2026-04-10T09:17:33Z] Check complete. Next run at 2026-04-10T06:17:EDT +[2026-04-10T10:17:32Z] Starting lead monitor check +[2026-04-10T10:17:33Z] ROI Calc submissions response: 7791 bytes +[2026-04-10T10:17:33Z] Processing calc submissions... +[2026-04-10T10:17:33Z] Check complete. Next run at 2026-04-10T07:17:EDT +[2026-04-10T11:17:32Z] Starting lead monitor check +[2026-04-10T11:17:33Z] ROI Calc submissions response: 7791 bytes +[2026-04-10T11:17:33Z] Processing calc submissions... +[2026-04-10T11:17:33Z] Check complete. Next run at 2026-04-10T08:17:EDT diff --git a/agents/sales-lead/state.json b/agents/sales-lead/state.json index 151a5a7..96f3acc 100644 --- a/agents/sales-lead/state.json +++ b/agents/sales-lead/state.json @@ -1,7 +1,7 @@ { "processed_leads": [], "processed_calc_ids": [1, 2, 3, 4], - "last_check": "2026-04-08T22:00:01Z", + "last_check": "2026-04-10T11:17:33Z", "status": "active", "notes": "Hourly monitoring enabled. Next check in 60 minutes." } diff --git a/skills/self-improving/heartbeat-state.md b/skills/self-improving/heartbeat-state.md index eee3a8c..29cdc44 100644 --- a/skills/self-improving/heartbeat-state.md +++ b/skills/self-improving/heartbeat-state.md @@ -1,9 +1,9 @@ # Self-Improving Heartbeat State -last_heartbeat_started_at: 2026-04-06T08:23:00Z +last_heartbeat_started_at: 2026-04-10T11:04:00Z last_reviewed_change_at: 2026-03-26T12:20:00Z last_heartbeat_result: HEARTBEAT_OK ## Last actions -- 2026-04-06 08:23Z: Heartbeat check - no changes in self-improving files since last review -- Sales-lead agent: Running normally, cron executed at 04:17 AM, new leads detected (john@example.com, jane@example123.com, smith@example.com) -- Marketing-content agent: ✅ Last run Apr 2 09:01 AM completed successfully. No new content since then. +- 2026-04-10 11:04Z: Heartbeat check - no changes in self-improving files since last review +- Sales-lead agent: ✅ Cron executed at 04:17 AM, 3 leads detected (john@example.com, jane@example123.com, smith@example.com) +- Marketing-content agent: ✅ Last run Apr 9 09:01 AM completed successfully. No new content since then.