@opentabs-dev/opentabs-plugin-zillow 0.0.76 → 0.0.78
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.
- package/README.md +42 -134
- package/dist/adapter.iife.js +4 -2
- package/dist/adapter.iife.js.map +2 -2
- package/dist/tools.json +1 -1
- package/package.json +10 -4
package/README.md
CHANGED
|
@@ -1,159 +1,67 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Zillow
|
|
2
2
|
|
|
3
|
-
OpenTabs plugin for Zillow real estate search
|
|
3
|
+
OpenTabs plugin for Zillow real estate search — gives AI agents access to Zillow through your authenticated browser session.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Install
|
|
6
6
|
|
|
7
|
+
```bash
|
|
8
|
+
opentabs plugin install zillow
|
|
7
9
|
```
|
|
8
|
-
zillow/
|
|
9
|
-
├── package.json # Plugin metadata (name, opentabs field, dependencies)
|
|
10
|
-
├── icon.svg # Optional custom icon (square SVG, max 8KB)
|
|
11
|
-
├── icon-inactive.svg # Optional manual inactive icon override
|
|
12
|
-
├── src/
|
|
13
|
-
│ ├── index.ts # Plugin class (extends OpenTabsPlugin)
|
|
14
|
-
│ └── tools/ # One file per tool (using defineTool)
|
|
15
|
-
│ └── example.ts
|
|
16
|
-
└── dist/ # Build output (generated)
|
|
17
|
-
├── adapter.iife.js # Bundled adapter injected into matching tabs
|
|
18
|
-
└── tools.json # Tool schemas for MCP registration
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
## Configuration
|
|
22
|
-
|
|
23
|
-
Plugin metadata is defined in `package.json` under the `opentabs` field:
|
|
24
|
-
|
|
25
|
-
```json
|
|
26
|
-
{
|
|
27
|
-
"name": "opentabs-plugin-zillow",
|
|
28
|
-
"main": "dist/adapter.iife.js",
|
|
29
|
-
"opentabs": {
|
|
30
|
-
"displayName": "Zillow",
|
|
31
|
-
"description": "OpenTabs plugin for Zillow real estate search",
|
|
32
|
-
"urlPatterns": ["*://*.zillow.com/*"]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
- **`main`** — entry point for the bundled adapter IIFE
|
|
38
|
-
- **`opentabs.displayName`** — human-readable name shown in the side panel
|
|
39
|
-
- **`opentabs.description`** — short description of what the plugin does
|
|
40
|
-
- **`opentabs.urlPatterns`** — Chrome match patterns for tabs where the adapter is injected
|
|
41
|
-
|
|
42
|
-
## Custom Icons
|
|
43
|
-
|
|
44
|
-
By default, the side panel shows a colored letter avatar for your plugin. To use a custom icon, place an `icon.svg` file in the plugin root (next to `package.json`):
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
zillow/
|
|
48
|
-
├── package.json
|
|
49
|
-
├── icon.svg ← custom icon (optional)
|
|
50
|
-
├── icon-inactive.svg ← manual inactive override (optional, requires icon.svg)
|
|
51
|
-
├── src/
|
|
52
|
-
│ └── ...
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
**How it works:**
|
|
56
|
-
|
|
57
|
-
- `opentabs-plugin build` reads `icon.svg`, validates it, auto-generates a grayscale inactive variant, and embeds both in `dist/tools.json`
|
|
58
|
-
- To override the auto-generated inactive icon, provide `icon-inactive.svg` (must use only grayscale colors)
|
|
59
|
-
- If no `icon.svg` is provided, the letter avatar is used automatically
|
|
60
|
-
|
|
61
|
-
**Icon requirements:**
|
|
62
10
|
|
|
63
|
-
|
|
64
|
-
- Maximum 8 KB file size
|
|
65
|
-
- No embedded `<image>`, `<script>`, or event handler attributes (`onclick`, etc.)
|
|
66
|
-
- Manual `icon-inactive.svg` must use only achromatic (grayscale) colors
|
|
67
|
-
|
|
68
|
-
## Development
|
|
11
|
+
Or install globally via npm:
|
|
69
12
|
|
|
70
13
|
```bash
|
|
71
|
-
npm install
|
|
72
|
-
npm run build # tsc && opentabs-plugin build
|
|
73
|
-
npm run dev # watch mode (tsc --watch + opentabs-plugin build --watch)
|
|
74
|
-
npm run type-check # tsc --noEmit
|
|
75
|
-
npm run lint # biome
|
|
14
|
+
npm install -g @opentabs-dev/opentabs-plugin-zillow
|
|
76
15
|
```
|
|
77
16
|
|
|
78
|
-
##
|
|
79
|
-
|
|
80
|
-
Create a new file in `src/tools/` using `defineTool`:
|
|
81
|
-
|
|
82
|
-
```ts
|
|
83
|
-
import { z } from 'zod';
|
|
84
|
-
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
85
|
-
|
|
86
|
-
export const myTool = defineTool({
|
|
87
|
-
name: 'my_tool',
|
|
88
|
-
displayName: 'My Tool',
|
|
89
|
-
description: 'What this tool does',
|
|
90
|
-
icon: 'wrench',
|
|
91
|
-
input: z.object({ /* ... */ }),
|
|
92
|
-
output: z.object({ /* ... */ }),
|
|
93
|
-
handle: async (params) => {
|
|
94
|
-
// Tool implementation runs in the browser tab context
|
|
95
|
-
return { /* ... */ };
|
|
96
|
-
},
|
|
97
|
-
});
|
|
98
|
-
```
|
|
17
|
+
## Setup
|
|
99
18
|
|
|
100
|
-
|
|
19
|
+
1. Open [zillow.com](https://www.zillow.com) in Chrome and log in
|
|
20
|
+
2. Open the OpenTabs side panel — the Zillow plugin should appear as **ready**
|
|
101
21
|
|
|
102
|
-
##
|
|
22
|
+
## Tools (12)
|
|
103
23
|
|
|
104
|
-
|
|
24
|
+
### Account (1)
|
|
105
25
|
|
|
106
|
-
|
|
107
|
-
|
|
26
|
+
| Tool | Description | Type |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `get_current_user` | Get the current Zillow user profile | Read |
|
|
108
29
|
|
|
109
|
-
|
|
110
|
-
const token = getLocalStorage('token');
|
|
30
|
+
### Search (8)
|
|
111
31
|
|
|
112
|
-
|
|
113
|
-
|
|
32
|
+
| Tool | Description | Type |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `search_locations` | Search for cities, ZIP codes, neighborhoods, and addresses | Read |
|
|
35
|
+
| `search_for_sale` | Search properties for sale | Read |
|
|
36
|
+
| `search_for_rent` | Search rental properties | Read |
|
|
37
|
+
| `search_recently_sold` | Search recently sold properties | Read |
|
|
38
|
+
| `search_open_houses` | Find properties with open houses | Read |
|
|
39
|
+
| `search_new_construction` | Find new construction homes | Read |
|
|
40
|
+
| `search_foreclosures` | Find foreclosure properties | Read |
|
|
41
|
+
| `search_by_owner` | Find for-sale-by-owner listings | Read |
|
|
114
42
|
|
|
115
|
-
|
|
116
|
-
const appState = getPageGlobal('__APP_STATE__');
|
|
117
|
-
```
|
|
43
|
+
### Properties (1)
|
|
118
44
|
|
|
119
|
-
|
|
45
|
+
| Tool | Description | Type |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| `search_by_address` | Look up a property by street address | Read |
|
|
120
48
|
|
|
121
|
-
|
|
49
|
+
### Saved Homes (1)
|
|
122
50
|
|
|
123
|
-
|
|
51
|
+
| Tool | Description | Type |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| `get_saved_homes` | Get saved/favorited home zpids | Read |
|
|
124
54
|
|
|
125
|
-
|
|
55
|
+
### Market (1)
|
|
126
56
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
57
|
+
| Tool | Description | Type |
|
|
58
|
+
|---|---|---|
|
|
59
|
+
| `get_market_overview` | Get market listing counts for an area | Read |
|
|
130
60
|
|
|
131
|
-
|
|
132
|
-
id: z.string().describe('Channel ID'),
|
|
133
|
-
name: z.string().describe('Channel name'),
|
|
134
|
-
});
|
|
61
|
+
## How It Works
|
|
135
62
|
|
|
136
|
-
|
|
137
|
-
```
|
|
63
|
+
This plugin runs inside your Zillow tab through the [OpenTabs](https://opentabs.dev) Chrome extension. It uses your existing browser session — no API tokens or OAuth apps required. All operations happen as you, with your permissions.
|
|
138
64
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
```ts
|
|
142
|
-
// src/tools/list-channels.ts
|
|
143
|
-
import { channelSchema } from '../schemas/channel.js';
|
|
144
|
-
|
|
145
|
-
export const listChannels = defineTool({
|
|
146
|
-
name: 'list_channels',
|
|
147
|
-
displayName: 'List Channels',
|
|
148
|
-
description: 'List all available channels',
|
|
149
|
-
icon: 'list',
|
|
150
|
-
input: z.object({}),
|
|
151
|
-
output: z.object({ channels: z.array(channelSchema) }),
|
|
152
|
-
handle: async () => {
|
|
153
|
-
// ...
|
|
154
|
-
return { channels: [] };
|
|
155
|
-
},
|
|
156
|
-
});
|
|
157
|
-
```
|
|
65
|
+
## License
|
|
158
66
|
|
|
159
|
-
|
|
67
|
+
MIT
|
package/dist/adapter.iife.js
CHANGED
|
@@ -401,6 +401,8 @@
|
|
|
401
401
|
* (e.g., 'https://github.com'), not a match pattern.
|
|
402
402
|
*/
|
|
403
403
|
homepage;
|
|
404
|
+
/** Typed configuration schema — declares settings that users provide via config.json or the side panel. */
|
|
405
|
+
configSchema;
|
|
404
406
|
};
|
|
405
407
|
|
|
406
408
|
// src/zillow-api.ts
|
|
@@ -14991,7 +14993,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
14991
14993
|
};
|
|
14992
14994
|
var src_default = new ZillowPlugin();
|
|
14993
14995
|
|
|
14994
|
-
// dist/
|
|
14996
|
+
// dist/_adapter_entry_a1687404-ff4b-431e-8241-3533435c23ce.ts
|
|
14995
14997
|
if (!globalThis.__openTabs) {
|
|
14996
14998
|
globalThis.__openTabs = {};
|
|
14997
14999
|
} else {
|
|
@@ -15207,5 +15209,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15207
15209
|
};
|
|
15208
15210
|
delete src_default.onDeactivate;
|
|
15209
15211
|
}
|
|
15210
|
-
})();(function(){var o=(globalThis).__openTabs;if(o&&o.adapters&&o.adapters["zillow"]){var a=o.adapters["zillow"];a.__adapterHash="
|
|
15212
|
+
})();(function(){var o=(globalThis).__openTabs;if(o&&o.adapters&&o.adapters["zillow"]){var a=o.adapters["zillow"];a.__adapterHash="61d40b5ccea7f06e168f92bf58613c336f428d8491a0583820e387bf3e161e0f";if(a.tools&&Array.isArray(a.tools)){for(var i=0;i<a.tools.length;i++){Object.freeze(a.tools[i]);}Object.freeze(a.tools);}Object.freeze(a);Object.defineProperty(o.adapters,"zillow",{value:a,writable:false,configurable:false,enumerable:true});Object.defineProperty(o,"adapters",{value:o.adapters,writable:false,configurable:false});}})();
|
|
15211
15213
|
//# sourceMappingURL=adapter.iife.js.map
|