On-demand Scout service (replaces the nightly aggregator): - FastAPI agent-mesh service; card name "matchmaking-service" (HTTP /a2a/tasks + Redis-stream worker matching the sibling-service pattern) - run_search: parallel multi-board sweep (Naukri/blackfalcondata + Foundit + LinkedIn), city-filtered at the board, cheapest-per-result first - per-board adapters + normalizers -> ScoutJob with rich read-only details and offsite apply links; recall mode + MVQ guard - result cache for dev replay ($0); per-board cost knobs; retry-on-5xx - research/: engine design, board cost economics, India-actor shortlist, POC
24 lines
962 B
Python
24 lines
962 B
Python
"""
|
|
GenericAdapter — the master key's default. Matches ANY URL, adds no board-specific assumptions.
|
|
This is what handles the long tail (bespoke company career pages, unknown ATS) purely by vision.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from .base import Adapter
|
|
|
|
|
|
class GenericAdapter(Adapter):
|
|
name = "generic"
|
|
tier = "generic"
|
|
|
|
def matches(self, url: str) -> bool:
|
|
return True # catch-all fallback
|
|
|
|
def hints(self) -> str:
|
|
# No board assumptions. The engine's universal logic does everything.
|
|
return ("BOARD = unknown / bespoke. No known shortcuts — read the page carefully. Look for "
|
|
"any 'autofill from resume' control and use it if present; otherwise fill fields "
|
|
"manually. Watch for a login/account wall (report login_required) or a page with no "
|
|
"real application form, e.g. a generic /careers page or 'email your CV' (report "
|
|
"no_form).")
|