@agent-pattern-labs/leads-rig 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -27,7 +27,9 @@ Skip this only if the task explicitly says to attach to an existing session.
27
27
  ## Do
28
28
 
29
29
  - Crawl only public, high-signal company pages.
30
- - Extract emails, role inboxes, contact forms, public names/titles, source URL, evidence, and warnings.
30
+ - Use your judgment on each email candidate: only emit an email lead when public evidence identifies one specific human owner of the address.
31
+ - Extract high-quality named human emails, contact forms, public names/titles, source URL, evidence, and warnings.
32
+ - If an address is shared, role-based, departmental, generic, blocked, or not tied to a visible named human, do not emit it as an email lead; emit a `contact_path` if useful.
31
33
  - Emit JSON/JSONL matching `templates/lead-schema.json`.
32
34
  - Run `npx public-leads validate --input <file>` before returning a result.
33
35
  - Return file paths and terminal status, not a prose-only summary.
@@ -26,7 +26,9 @@ Skip this only if the task explicitly says to attach to an existing session.
26
26
  ## Do
27
27
 
28
28
  - Crawl only public, high-signal company pages.
29
- - Extract emails, role inboxes, contact forms, public names/titles, source URL, evidence, and warnings.
29
+ - Use your judgment on each email candidate: only emit an email lead when public evidence identifies one specific human owner of the address.
30
+ - Extract high-quality named human emails, contact forms, public names/titles, source URL, evidence, and warnings.
31
+ - If an address is shared, role-based, departmental, generic, blocked, or not tied to a visible named human, do not emit it as an email lead; emit a `contact_path` if useful.
30
32
  - Emit JSON/JSONL matching `templates/lead-schema.json`.
31
33
  - Run `npx public-leads validate --input <file>` before returning a result.
32
34
  - Return file paths and terminal status, not a prose-only summary.
@@ -10,6 +10,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
10
10
  ## Hard Limits
11
11
 
12
12
  - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
13
+ - [H8] Apply coding-agent judgment to every email candidate. An email may pass only when public source evidence identifies one specific human owner of that email. Shared, role, departmental, generic, blocked, unknown-owner, or unnamed person-like emails must not be emitted as email leads.
13
14
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
14
15
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
15
16
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -23,7 +24,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
23
24
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
24
25
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
25
26
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
26
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
27
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named human email is available, prefer a `contact_path` record instead.
27
28
 
28
29
  ## Procedure
29
30
 
@@ -36,7 +36,9 @@ Skip this only if the task explicitly says to attach to an existing session.
36
36
  ## Do
37
37
 
38
38
  - Crawl only public, high-signal company pages.
39
- - Extract emails, role inboxes, contact forms, public names/titles, source URL, evidence, and warnings.
39
+ - Use your judgment on each email candidate: only emit an email lead when public evidence identifies one specific human owner of the address.
40
+ - Extract high-quality named human emails, contact forms, public names/titles, source URL, evidence, and warnings.
41
+ - If an address is shared, role-based, departmental, generic, blocked, or not tied to a visible named human, do not emit it as an email lead; emit a `contact_path` if useful.
40
42
  - Emit JSON/JSONL matching `templates/lead-schema.json`.
41
43
  - Run `npx public-leads validate --input <file>` before returning a result.
42
44
  - Return file paths and terminal status, not a prose-only summary.
@@ -26,7 +26,9 @@ Skip this only if the task explicitly says to attach to an existing session.
26
26
  ## Do
27
27
 
28
28
  - Crawl only public, high-signal company pages.
29
- - Extract emails, role inboxes, contact forms, public names/titles, source URL, evidence, and warnings.
29
+ - Use your judgment on each email candidate: only emit an email lead when public evidence identifies one specific human owner of the address.
30
+ - Extract high-quality named human emails, contact forms, public names/titles, source URL, evidence, and warnings.
31
+ - If an address is shared, role-based, departmental, generic, blocked, or not tied to a visible named human, do not emit it as an email lead; emit a `contact_path` if useful.
30
32
  - Emit JSON/JSONL matching `templates/lead-schema.json`.
31
33
  - Run `npx public-leads validate --input <file>` before returning a result.
32
34
  - Return file paths and terminal status, not a prose-only summary.
package/AGENTS.md CHANGED
@@ -5,6 +5,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
5
5
  ## Hard Limits
6
6
 
7
7
  - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
8
+ - [H8] Apply coding-agent judgment to every email candidate. An email may pass only when public source evidence identifies one specific human owner of that email. Shared, role, departmental, generic, blocked, unknown-owner, or unnamed person-like emails must not be emitted as email leads.
8
9
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
9
10
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
10
11
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -18,7 +19,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
18
19
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
19
20
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
20
21
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
21
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
22
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named human email is available, prefer a `contact_path` record instead.
22
23
 
23
24
  ## Procedure
24
25
 
package/CLAUDE.md CHANGED
@@ -5,6 +5,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
5
5
  ## Hard Limits
6
6
 
7
7
  - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
8
+ - [H8] Apply coding-agent judgment to every email candidate. An email may pass only when public source evidence identifies one specific human owner of that email. Shared, role, departmental, generic, blocked, unknown-owner, or unnamed person-like emails must not be emitted as email leads.
8
9
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
9
10
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
10
11
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -18,7 +19,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
18
19
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
19
20
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
20
21
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
21
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
22
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named human email is available, prefer a `contact_path` record instead.
22
23
 
23
24
  ## Procedure
24
25
 
package/README.md CHANGED
@@ -12,6 +12,7 @@ Agentic public-web lead discovery harness for portable, source-backed lead artif
12
12
  - Ships OpenCode, Claude Code, Cursor, Codex, and Pi harness config from one `iso/` source.
13
13
 
14
14
  The harness is optimized to find named people who can actually be contacted. When only a general company contact path exists, it should emit a `contact_path` record rather than a generic organizational inbox.
15
+ CLI summaries distinguish total reviewable records from `goodLeads`; only non-generic `person` email records with a named human owner visible in the evidence count as good leads. Role, shared, departmental, unknown-owner, blocked, unsupported, or unnamed person-like emails are rejected by validation.
15
16
 
16
17
  ## Core Commands
17
18
 
@@ -70,7 +71,7 @@ gh run watch
70
71
  You can also publish by creating a GitHub release for the package version:
71
72
 
72
73
  ```bash
73
- gh release create v0.1.4 --title v0.1.4 --generate-notes
74
+ gh release create v0.1.6 --title v0.1.6 --generate-notes
74
75
  ```
75
76
 
76
77
  The package version must not already exist on npm.
package/batch/README.md CHANGED
@@ -17,10 +17,11 @@ id domain company notes
17
17
  ```bash
18
18
  batch/batch-runner.sh --dry-run
19
19
  batch/batch-runner.sh --parallel 2
20
+ batch/batch-runner.sh --parallel 2 --timeout-ms 8000
20
21
  batch/batch-runner.sh --runner codex --parallel 2
21
22
  ```
22
23
 
23
- `--parallel` is capped at `2` to keep browser-heavy work bounded. Worker CLI permission-bypass flags are disabled by default; pass `--allow-unsafe-workers` only in a trusted local workspace when you explicitly want the old unsafe behavior.
24
+ `--parallel` is capped at `2` to keep browser-heavy work bounded. `--timeout-ms` controls the deterministic crawler timeout suggested to workers; the batch default is `8000` to avoid spending too long on dead sites. Worker CLI permission-bypass flags are disabled by default; pass `--allow-unsafe-workers` only in a trusted local workspace when you explicitly want the old unsafe behavior.
24
25
 
25
26
  The runner writes:
26
27
 
@@ -51,7 +51,7 @@ write('package.json', JSON.stringify({
51
51
  'update-harness': 'npm install @agent-pattern-labs/leads-rig@latest && public-leads sync',
52
52
  },
53
53
  dependencies: {
54
- '@agent-pattern-labs/leads-rig': '^0.1.4',
54
+ '@agent-pattern-labs/leads-rig': '^0.1.6',
55
55
  },
56
56
  engines: {
57
57
  node: '>=20.6.0',
@@ -18,10 +18,23 @@ api:
18
18
 
19
19
  crawl:
20
20
  max_pages: 10
21
+ timeout_ms: 14000
21
22
  max_domains_per_batch: 50
22
23
  concurrency: 2
24
+ page_concurrency: 1
25
+ dns_concurrency: 8
26
+ cache_path: ".leadharness-cache/crawler-cache.json"
27
+ robots_cache_ttl_ms: 86400000
28
+ dns_cache_ttl_ms: 604800000
29
+ page_cache: false
30
+ page_cache_ttl_ms: 0
31
+ stop_after_good_leads: 0
32
+ stop_after_contact_path: false
23
33
  user_agent: "PublicLeadsBot/0.1 (+https://example.com/public-leads)"
24
34
 
35
+ batch:
36
+ batch_timeout_ms: 8000
37
+
25
38
  lead_policy:
26
39
  min_confidence: 30
27
40
  allowed_email_types:
@@ -82,4 +82,4 @@ The package also carries the `@agent-pattern-labs/iso-*` helper ecosystem for tr
82
82
  - page visits
83
83
  - ingest requests
84
84
 
85
- The validator intentionally accepts the same defaults the local runtime normalizes, but it fails missing source evidence, invalid URL fields, invalid `emailType`, invalid `verificationStatus`, invalid confidence, person/role leads without email, and generic catch-all inboxes such as `info@`, `hello@`, or similar organizational aliases.
85
+ The validator intentionally accepts the same defaults the local runtime normalizes, but it fails missing source evidence, invalid URL fields, invalid `emailType`, invalid `verificationStatus`, invalid confidence, person leads without email, and generic catch-all inboxes such as `info@`, `hello@`, or similar organizational aliases. Any email record must be a named `person` lead with a non-generic email and a human owner visible in the evidence; role inboxes, unknown-owner emails, blocked emails, unsupported emails, and unnamed person-like emails fail validation. Summaries expose `goodLeadCount`, which only counts those high-quality named human email records.
@@ -37,4 +37,4 @@
37
37
  6. Run `npm audit`.
38
38
  7. Run `npm pack` and confirm generated runtime surfaces are included.
39
39
  8. Scaffold a clean consumer project and test install-time sync from the packed package or source tree.
40
- 9. Publish through GitHub Actions with `gh workflow run publish.yml --ref main`, or create a published release with `gh release create v0.1.4 --title v0.1.4 --generate-notes`.
40
+ 9. Publish through GitHub Actions with `gh workflow run publish.yml --ref main`, or create a published release with `gh release create v0.1.6 --title v0.1.6 --generate-notes`.
@@ -38,7 +38,9 @@ Skip this only if the task explicitly says to attach to an existing session.
38
38
  ## Do
39
39
 
40
40
  - Crawl only public, high-signal company pages.
41
- - Extract emails, role inboxes, contact forms, public names/titles, source URL, evidence, and warnings.
41
+ - Use your judgment on each email candidate: only emit an email lead when public evidence identifies one specific human owner of the address.
42
+ - Extract high-quality named human emails, contact forms, public names/titles, source URL, evidence, and warnings.
43
+ - If an address is shared, role-based, departmental, generic, blocked, or not tied to a visible named human, do not emit it as an email lead; emit a `contact_path` if useful.
42
44
  - Emit JSON/JSONL matching `templates/lead-schema.json`.
43
45
  - Run `npx public-leads validate --input <file>` before returning a result.
44
46
  - Return file paths and terminal status, not a prose-only summary.
@@ -5,6 +5,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
5
5
  ## Hard Limits
6
6
 
7
7
  - [H1] Only collect public-source business contact data. Do not infer, guess, brute-force, or enrich private email addresses. Every lead needs a source URL and evidence excerpt. The primary goal is named people, not generic company inboxes.
8
+ - [H8] Apply coding-agent judgment to every email candidate. An email may pass only when public source evidence identifies one specific human owner of that email. Shared, role, departmental, generic, blocked, unknown-owner, or unnamed person-like emails must not be emitted as email leads.
8
9
  - [H2] Respect robots.txt, terms, rate limits, and site intent. If a page blocks crawling or is not public, record a warning and move on.
9
10
  - [H3] Never send outreach from this harness. The output is reviewable lead records and ingest-ready artifacts, not email campaigns.
10
11
  - [H4] Use file-backed artifacts before ingest. A subagent prose summary is not enough; write validated JSON/JSONL first, then ingest.
@@ -18,7 +19,7 @@ Agentic public-web lead discovery harness. It crawls company domains, extracts r
18
19
  - [D2] Use deterministic local helpers when they can validate, normalize, manifest, preflight, postflight, or ingest artifacts.
19
20
  - [D3] Read the active mode file before executing. Mode files own output shapes and gates.
20
21
  - [D4] Prefer official company websites and high-signal pages: home, contact, about, team, leadership, people, press, blog, careers, and legal pages.
21
- - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named person is available, prefer a `contact_path` record instead.
22
+ - [D5] Keep artifacts source-backed. Every emitted lead should include `domain`, `sourceUrl`, `evidence`, `emailType`, `extractionMethod`, `verificationStatus`, and `confidence`. Reject generic catch-all inboxes such as `info@`, `hello@`, `contact@`, `support@`, `team@`, and similar aliases; if no named human email is available, prefer a `contact_path` record instead.
22
23
 
23
24
  ## Procedure
24
25