2a4fd52d43
fix: clear progress on clean finish — keywords only reused when previous run was incomplete
2026-03-06 02:26:14 +00:00
97b753d401
feat: cache keywords in search_progress.json — restarts reuse same keywords, no regeneration mid-run
2026-03-06 02:24:54 +00:00
65d6d1e50c
feat: per-keyword resume — restart picks up from last completed keyword, not keyword 1
2026-03-06 02:23:07 +00:00
261f5800ad
fix: load API keys from .env at runtime — never embed credentials in cron payloads or source code
2026-03-06 02:04:55 +00:00
ed908c91af
fix: audit bugs + better error logging for searcher debugging
...
Bugs fixed:
- form_filler.mjs: add missing await on el.evaluate() in getLabel()
- analyze_ats.mjs: check job.apply_type instead of non-existent job.easy_apply
- status.mjs: fix typo "that run" → "in that run"
- README: add missing lock.mjs to project structure
Logging improvements:
- job_searcher.mjs: log browser creation, login steps, stack traces on error
- linkedin.mjs/wellfound.mjs: catch and log navigation failures per keyword
- browser.mjs: descriptive errors for Kernel and CDP connection failures
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 17:28:23 -08:00
fb7fc31fe1
fix: move Kernel connection IDs out of source into settings.json (gitignored)
2026-03-06 01:17:52 +00:00
f065a9a786
feat: auto-refresh Kernel Managed Auth session on login failure — ensureLoggedIn() with retry
2026-03-06 01:09:30 +00:00
2574276a85
refactor: classify apply_type inline during search (click card → detect right panel); no second pass
2026-03-06 01:00:59 +00:00
dee6e98603
feat: searcher Phase 2 classifies apply type; applier sorts by priority; already-applied detection
2026-03-06 00:58:22 +00:00
f9446f5bee
fix: resume lookback from progress file — don't reset to 2d when queue is non-empty
2026-03-06 00:41:27 +00:00
86d00297df
feat: search progress tracking — resume on restart, skip completed platform:track combinations
2026-03-06 00:37:35 +00:00
b091473735
fix: graceful shutdown — write last-run file on SIGTERM, show interrupted state in status
2026-03-06 00:35:10 +00:00
1920df51a4
feat: rich status report — searcher/applier last run time, timeAgo, per-run metadata files
2026-03-06 00:33:03 +00:00
f9fa36b47c
feat: flush jobs to queue per-page — no data loss on crash; live progress output
2026-03-06 00:17:33 +00:00
234820ad91
feat: lockfile to prevent parallel runs + AI keywords lib
2026-03-06 00:11:37 +00:00
d61ca4f54f
feat: AI-generated search keywords via Claude — full profile + search config context
2026-03-06 00:04:20 +00:00
e71f940687
fix: add config validation and retry logic for failed jobs
...
- Add loadConfig() helper with clear errors for missing/malformed JSON
- Replace raw JSON.parse(readFileSync(...)) in both entry points
- Track retry_count on jobs; re-queue as 'new' up to max_retries (default 2)
- Add max_retries and DEFAULT_MAX_RETRIES constant
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 16:03:33 -08:00
47513e8cec
fix: security/bug fixes, extract constants, remove magic values
...
- Remove random suffix from Wellfound job IDs (broke dedup)
- Add null coalescing to all profile field returns in form_filler
- Fix honeypot case referencing nonexistent results.skipped counter
- Remove unused makeJobId import from linkedin.mjs
- Navigate directly to job URL instead of search+click in linkedin apply
- Add Telegram notification rate limiting (1.5s between sends)
- Replace Mode B blocking sleep with --preview flag
- Add max_applications_per_run enforcement
- Remove tracked search_config.json (keep .example.json only)
- Add search_config.json to .gitignore, fix duplicate node_modules entry
- Extract all magic numbers/strings to lib/constants.mjs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 16:01:42 -08:00
cb7a401aff
feat: first_run_days config — defaults to 90 days on first run, then posted_within_days after
2026-03-05 23:38:21 +00:00
52a56f59f6
feat: claw-apply v0.1 — full implementation
...
- job_searcher.mjs: LinkedIn + Wellfound search, queue population
- job_applier.mjs: Easy Apply + Wellfound apply, Mode A/B
- lib/form_filler.mjs: config-driven form filling, custom answers.json
- lib/linkedin.mjs: two-panel Easy Apply flow
- lib/wellfound.mjs: Wellfound search + apply
- lib/browser.mjs: Kernel stealth browser factory with local fallback
- lib/queue.mjs: jobs_queue.json management
- lib/notify.mjs: Telegram notifications
- setup.mjs: setup wizard with login verification
- Config templates: profile, search_config, answers, settings
- SKILL.md: OpenClaw skill definition
2026-03-05 23:24:09 +00:00