@opentabs-dev/opentabs-plugin-netlify 0.0.76 → 0.0.77
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 +86 -125
- 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,120 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Netlify
|
|
2
2
|
|
|
3
|
-
OpenTabs plugin for Netlify
|
|
3
|
+
OpenTabs plugin for Netlify — gives AI agents access to Netlify through your authenticated browser session.
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Install
|
|
6
6
|
|
|
7
|
+
```bash
|
|
8
|
+
opentabs plugin install netlify
|
|
7
9
|
```
|
|
8
|
-
netlify/
|
|
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
10
|
|
|
23
|
-
|
|
11
|
+
Or install globally via npm:
|
|
24
12
|
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
"name": "opentabs-plugin-netlify",
|
|
28
|
-
"main": "dist/adapter.iife.js",
|
|
29
|
-
"opentabs": {
|
|
30
|
-
"displayName": "Netlify",
|
|
31
|
-
"description": "OpenTabs plugin for Netlify",
|
|
32
|
-
"urlPatterns": ["*://*.app.netlify.com/*"]
|
|
33
|
-
}
|
|
34
|
-
}
|
|
13
|
+
```bash
|
|
14
|
+
npm install -g @opentabs-dev/opentabs-plugin-netlify
|
|
35
15
|
```
|
|
36
16
|
|
|
37
|
-
|
|
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
|
|
17
|
+
## Setup
|
|
41
18
|
|
|
42
|
-
|
|
19
|
+
1. Open [app.netlify.com](https://app.netlify.com) in Chrome and log in
|
|
20
|
+
2. Open the OpenTabs side panel — the Netlify plugin should appear as **ready**
|
|
43
21
|
|
|
44
|
-
|
|
22
|
+
## Tools (40)
|
|
45
23
|
|
|
46
|
-
|
|
47
|
-
netlify/
|
|
48
|
-
├── package.json
|
|
49
|
-
├── icon.svg ← custom icon (optional)
|
|
50
|
-
├── icon-inactive.svg ← manual inactive override (optional, requires icon.svg)
|
|
51
|
-
├── src/
|
|
52
|
-
│ └── ...
|
|
53
|
-
```
|
|
24
|
+
### Account (4)
|
|
54
25
|
|
|
55
|
-
|
|
26
|
+
| Tool | Description | Type |
|
|
27
|
+
|---|---|---|
|
|
28
|
+
| `get_current_user` | Get authenticated user profile | Read |
|
|
29
|
+
| `list_accounts` | List all accounts | Read |
|
|
30
|
+
| `get_account` | Get account details by ID | Read |
|
|
31
|
+
| `list_audit_events` | List account audit log events | Read |
|
|
56
32
|
|
|
57
|
-
|
|
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
|
|
33
|
+
### Members (2)
|
|
60
34
|
|
|
61
|
-
|
|
35
|
+
| Tool | Description | Type |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| `list_members` | List account team members | Read |
|
|
38
|
+
| `get_member` | Get member details by ID | Read |
|
|
62
39
|
|
|
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
|
|
40
|
+
### Sites (5)
|
|
67
41
|
|
|
68
|
-
|
|
42
|
+
| Tool | Description | Type |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `list_sites` | List sites in an account | Read |
|
|
45
|
+
| `get_site` | Get site details by ID | Read |
|
|
46
|
+
| `create_site` | Create a new site | Write |
|
|
47
|
+
| `update_site` | Update site settings | Write |
|
|
48
|
+
| `delete_site` | Delete a site permanently | Write |
|
|
69
49
|
|
|
70
|
-
|
|
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
|
|
76
|
-
```
|
|
50
|
+
### Deploys (6)
|
|
77
51
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
```
|
|
52
|
+
| Tool | Description | Type |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `list_deploys` | List site deploys | Read |
|
|
55
|
+
| `get_deploy` | Get deploy details by ID | Read |
|
|
56
|
+
| `lock_deploy` | Lock a deploy to prevent auto-publish | Write |
|
|
57
|
+
| `unlock_deploy` | Unlock a deploy to re-enable auto-publish | Write |
|
|
58
|
+
| `restore_deploy` | Restore a previous deploy | Write |
|
|
59
|
+
| `rollback_deploy` | Rollback site to previous deploy | Write |
|
|
99
60
|
|
|
100
|
-
|
|
61
|
+
### Builds (2)
|
|
101
62
|
|
|
102
|
-
|
|
63
|
+
| Tool | Description | Type |
|
|
64
|
+
|---|---|---|
|
|
65
|
+
| `list_builds` | List site builds | Read |
|
|
66
|
+
| `create_build` | Trigger a new site build | Write |
|
|
103
67
|
|
|
104
|
-
|
|
68
|
+
### Environment (5)
|
|
105
69
|
|
|
106
|
-
|
|
107
|
-
|
|
70
|
+
| Tool | Description | Type |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `list_env_vars` | List environment variables | Read |
|
|
73
|
+
| `get_env_var` | Get environment variable by key | Read |
|
|
74
|
+
| `create_env_vars` | Create environment variables | Write |
|
|
75
|
+
| `update_env_var` | Update an environment variable | Write |
|
|
76
|
+
| `delete_env_var` | Delete an environment variable | Write |
|
|
108
77
|
|
|
109
|
-
|
|
110
|
-
const token = getLocalStorage('token');
|
|
78
|
+
### DNS (6)
|
|
111
79
|
|
|
112
|
-
|
|
113
|
-
|
|
80
|
+
| Tool | Description | Type |
|
|
81
|
+
|---|---|---|
|
|
82
|
+
| `list_dns_zones` | List DNS zones | Read |
|
|
83
|
+
| `get_dns_zone` | Get DNS zone details by ID | Read |
|
|
84
|
+
| `create_dns_zone` | Create a new DNS zone | Write |
|
|
85
|
+
| `list_dns_records` | List DNS records in a zone | Read |
|
|
86
|
+
| `create_dns_record` | Create a DNS record | Write |
|
|
87
|
+
| `delete_dns_record` | Delete a DNS record | Write |
|
|
114
88
|
|
|
115
|
-
|
|
116
|
-
const appState = getPageGlobal('__APP_STATE__');
|
|
117
|
-
```
|
|
89
|
+
### Hooks (5)
|
|
118
90
|
|
|
119
|
-
|
|
91
|
+
| Tool | Description | Type |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `list_hooks` | List site notification hooks | Read |
|
|
94
|
+
| `delete_hook` | Delete a notification hook | Write |
|
|
95
|
+
| `list_build_hooks` | List site build hooks | Read |
|
|
96
|
+
| `create_build_hook` | Create a build hook | Write |
|
|
97
|
+
| `delete_build_hook` | Delete a build hook | Write |
|
|
120
98
|
|
|
121
|
-
|
|
99
|
+
### Deploy Keys (2)
|
|
122
100
|
|
|
123
|
-
|
|
101
|
+
| Tool | Description | Type |
|
|
102
|
+
|---|---|---|
|
|
103
|
+
| `list_deploy_keys` | List deploy keys | Read |
|
|
104
|
+
| `create_deploy_key` | Create a new deploy key | Write |
|
|
124
105
|
|
|
125
|
-
|
|
106
|
+
### Forms (3)
|
|
126
107
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
108
|
+
| Tool | Description | Type |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| `list_forms` | List site forms | Read |
|
|
111
|
+
| `list_form_submissions` | List form submissions | Read |
|
|
112
|
+
| `delete_submission` | Delete a form submission | Write |
|
|
130
113
|
|
|
131
|
-
|
|
132
|
-
id: z.string().describe('Channel ID'),
|
|
133
|
-
name: z.string().describe('Channel name'),
|
|
134
|
-
});
|
|
114
|
+
## How It Works
|
|
135
115
|
|
|
136
|
-
|
|
137
|
-
```
|
|
116
|
+
This plugin runs inside your Netlify 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
117
|
|
|
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
|
-
```
|
|
118
|
+
## License
|
|
158
119
|
|
|
159
|
-
|
|
120
|
+
MIT
|
package/dist/adapter.iife.js
CHANGED
|
@@ -383,6 +383,8 @@
|
|
|
383
383
|
* (e.g., 'https://github.com'), not a match pattern.
|
|
384
384
|
*/
|
|
385
385
|
homepage;
|
|
386
|
+
/** Typed configuration schema — declares settings that users provide via config.json or the side panel. */
|
|
387
|
+
configSchema;
|
|
386
388
|
};
|
|
387
389
|
|
|
388
390
|
// src/netlify-api.ts
|
|
@@ -15516,7 +15518,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15516
15518
|
};
|
|
15517
15519
|
var src_default = new NetlifyPlugin();
|
|
15518
15520
|
|
|
15519
|
-
// dist/
|
|
15521
|
+
// dist/_adapter_entry_293bef17-e218-4bc6-94fd-d1ec130153ed.ts
|
|
15520
15522
|
if (!globalThis.__openTabs) {
|
|
15521
15523
|
globalThis.__openTabs = {};
|
|
15522
15524
|
} else {
|
|
@@ -15732,5 +15734,5 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
|
|
|
15732
15734
|
};
|
|
15733
15735
|
delete src_default.onDeactivate;
|
|
15734
15736
|
}
|
|
15735
|
-
})();(function(){var o=(globalThis).__openTabs;if(o&&o.adapters&&o.adapters["netlify"]){var a=o.adapters["netlify"];a.__adapterHash="
|
|
15737
|
+
})();(function(){var o=(globalThis).__openTabs;if(o&&o.adapters&&o.adapters["netlify"]){var a=o.adapters["netlify"];a.__adapterHash="463d2a50be33bd7d4bf0d8a617d3ac69e4ce99e6fac1203136c8d5b2f5f63871";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,"netlify",{value:a,writable:false,configurable:false,enumerable:true});Object.defineProperty(o,"adapters",{value:o.adapters,writable:false,configurable:false});}})();
|
|
15736
15738
|
//# sourceMappingURL=adapter.iife.js.map
|