Add purpose-aware property assessor intake
This commit is contained in:
@@ -34,9 +34,9 @@ The wrapper script uses the skill-local Node dependencies under `node_modules/`.
|
||||
## Commands
|
||||
|
||||
```bash
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --recipient-email "buyer@example.com"
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --recipient-email "buyer@example.com" --output /tmp/property-assessment.pdf
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --assessment-purpose "investment property"
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --assessment-purpose "investment property" --recipient-email "buyer@example.com"
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --assessment-purpose "investment property" --recipient-email "buyer@example.com" --output /tmp/property-assessment.pdf
|
||||
|
||||
scripts/property-assessor locate-public-records --address "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
scripts/property-assessor locate-public-records --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --parcel-id "14069438"
|
||||
@@ -61,23 +61,26 @@ Default operating sequence:
|
||||
### `assess`
|
||||
|
||||
```bash
|
||||
scripts/property-assessor assess --address "<street-address>"
|
||||
scripts/property-assessor assess --address "<street-address>" --recipient-email "<target@example.com>"
|
||||
scripts/property-assessor assess --address "<street-address>" --assessment-purpose "<purpose>"
|
||||
scripts/property-assessor assess --address "<street-address>" --assessment-purpose "<purpose>" --recipient-email "<target@example.com>"
|
||||
```
|
||||
|
||||
Current behavior:
|
||||
|
||||
- starts from the address
|
||||
- requires an assessment purpose for decision-grade analysis
|
||||
- automatically runs public-record / appraisal-district lookup
|
||||
- automatically tries to discover Zillow and HAR listing URLs from the address when no listing URL is provided
|
||||
- runs Zillow photo extraction first, then HAR as fallback when available
|
||||
- returns a structured preliminary report payload
|
||||
- asks for recipient email(s) before PDF generation
|
||||
- renders the fixed-template PDF when recipient email(s) are present
|
||||
|
||||
Important limitation:
|
||||
|
||||
- this first implementation wires the address-first assessment spine
|
||||
- it does not yet auto-run listing extraction, photo review, comps, or carry underwriting inside the helper itself
|
||||
- those richer assessment steps are still governed by the skill workflow and the `web-automation` extractors
|
||||
- this implementation now wires the address-first intake, purpose-aware framing, public-record lookup, listing discovery, and photo-source extraction
|
||||
- it still does not perform full comp analysis, pricing judgment, or completed carry underwriting inside the helper itself
|
||||
- those deeper decision steps are still governed by the skill workflow after the helper assembles the enriched payload
|
||||
|
||||
## Source priority
|
||||
|
||||
@@ -205,8 +208,10 @@ For chat-driven runs, prefer file-based commands.
|
||||
|
||||
Good:
|
||||
|
||||
- `scripts/property-assessor assess --address "..."`
|
||||
- `scripts/property-assessor assess --address "..." --assessment-purpose "..."`
|
||||
- `node check-install.js`
|
||||
- `node zillow-discover.js "<street-address>"`
|
||||
- `node har-discover.js "<street-address>"`
|
||||
- `node zillow-photos.js "<url>"`
|
||||
- `node har-photos.js "<url>"`
|
||||
- `scripts/property-assessor locate-public-records --address "..."`
|
||||
@@ -304,13 +309,15 @@ npm test
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/skills/property-assessor
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --assessment-purpose "investment property"
|
||||
```
|
||||
|
||||
Expected shape:
|
||||
|
||||
- `needsAssessmentPurpose: false`
|
||||
- `needsRecipientEmails: true`
|
||||
- public-record / CAD jurisdiction included in the returned payload
|
||||
- `photoReview.imageUrls` populated when Zillow or HAR extraction succeeds
|
||||
- no PDF generated yet
|
||||
- explicit message telling the operator to ask for target recipient email(s)
|
||||
|
||||
@@ -332,7 +339,7 @@ Expected shape:
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/skills/property-assessor
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --recipient-email "buyer@example.com" --output /tmp/property-assessment.pdf
|
||||
scripts/property-assessor assess --address "4141 Whiteley Dr, Corpus Christi, TX 78418" --assessment-purpose "investment property" --recipient-email "buyer@example.com" --output /tmp/property-assessment.pdf
|
||||
```
|
||||
|
||||
Expected result:
|
||||
@@ -368,8 +375,10 @@ When testing `property-assessor` itself, confirm the assessment:
|
||||
|
||||
- starts from the address when available
|
||||
- uses Zillow first for photo extraction, HAR as fallback
|
||||
- frames the analysis around the stated assessment purpose
|
||||
- uses official public-record jurisdiction links when available
|
||||
- does not treat listing geo IDs as assessor keys
|
||||
- asks for assessment purpose if it was not provided
|
||||
- asks for recipient email(s) if they were not provided
|
||||
- renders the final report through the fixed PDF template once recipient email(s) are known
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ Automated web browsing and scraping using Playwright-compatible CloakBrowser, wi
|
||||
- Use `node skills/web-automation/scripts/extract.js "<URL>"` for one-shot extraction from a single URL
|
||||
- Use `npx tsx scrape.ts ...` for markdown scraping modes
|
||||
- Use `npx tsx browse.ts ...`, `auth.ts`, or `flow.ts` for interactive or authenticated flows
|
||||
- Use `node skills/web-automation/scripts/zillow-discover.js "<street-address>"` or `har-discover.js` to resolve a real-estate listing URL from an address
|
||||
- Use `node skills/web-automation/scripts/zillow-photos.js "<listing-url>"` or `har-photos.js` for real-estate photo extraction before attempting generic gallery automation
|
||||
|
||||
## Requirements
|
||||
@@ -93,6 +94,7 @@ Notes:
|
||||
- If matching is inconsistent, replace `~/.openclaw/...` with the full absolute path for the machine.
|
||||
- Keep the allowlist scoped to the main agent unless there is a clear reason to widen it.
|
||||
- Prefer file-based commands like `node check-install.js`, `node zillow-photos.js ...`, and `node har-photos.js ...` over inline `node -e ...`. Inline interpreter eval is more likely to trigger approval friction.
|
||||
- The same applies to `zillow-discover.js` and `har-discover.js`: keep discovery file-based, not inline.
|
||||
|
||||
## Common commands
|
||||
|
||||
@@ -104,6 +106,12 @@ node check-install.js
|
||||
# One-shot JSON extraction
|
||||
node skills/web-automation/scripts/extract.js "https://example.com"
|
||||
|
||||
# Zillow listing discovery from address
|
||||
node skills/web-automation/scripts/zillow-discover.js "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
|
||||
# HAR listing discovery from address
|
||||
node skills/web-automation/scripts/har-discover.js "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
|
||||
# Zillow photo extraction
|
||||
node skills/web-automation/scripts/zillow-photos.js "https://www.zillow.com/homedetails/..."
|
||||
|
||||
@@ -123,9 +131,35 @@ npx tsx auth.ts --url "https://example.com/login"
|
||||
npx tsx flow.ts --instruction 'go to https://search.fiorinis.com then type "pippo" then press enter then wait 2s'
|
||||
```
|
||||
|
||||
## Real-estate photo extraction
|
||||
## Real-estate listing discovery and photo extraction
|
||||
|
||||
Use the dedicated Zillow and HAR extractors before trying a free-form gallery flow.
|
||||
Use the dedicated Zillow and HAR discovery/photo commands before trying a free-form gallery flow.
|
||||
|
||||
### Zillow discovery
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/skills/web-automation/scripts
|
||||
node zillow-discover.js "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
```
|
||||
|
||||
What it does:
|
||||
- opens the Zillow address URL with CloakBrowser
|
||||
- resolves directly to a property page when Zillow supports the address slug
|
||||
- otherwise looks for a `homedetails` listing link in the rendered page
|
||||
- returns the discovered listing URL as JSON
|
||||
|
||||
### HAR discovery
|
||||
|
||||
```bash
|
||||
cd ~/.openclaw/workspace/skills/web-automation/scripts
|
||||
node har-discover.js "4141 Whiteley Dr, Corpus Christi, TX 78418"
|
||||
```
|
||||
|
||||
What it does:
|
||||
- opens the HAR address search page
|
||||
- looks for a confident `homedetail` match in rendered results
|
||||
- returns the discovered listing URL when HAR exposes a strong enough match
|
||||
- returns `listingUrl: null` when HAR discovery is not confident enough
|
||||
|
||||
### Zillow
|
||||
|
||||
@@ -169,6 +203,8 @@ From `skills/web-automation/scripts`:
|
||||
```bash
|
||||
node check-install.js
|
||||
npm run test:photos
|
||||
node zillow-discover.js "<street-address>"
|
||||
node har-discover.js "<street-address>"
|
||||
node zillow-photos.js "<zillow-listing-url>"
|
||||
node har-photos.js "<har-listing-url>"
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user