@openhands/extensions 0.9.0 → 0.11.0
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/.github/workflows/deprecation-check.yml +25 -0
- package/.release-please-manifest.json +1 -1
- package/README.md +3 -2
- package/integrations/README.md +25 -0
- package/integrations/catalog/atlassian-rovo.json +44 -0
- package/integrations/catalog/atlassian.json +13 -0
- package/integrations/catalog/github.json +21 -1
- package/integrations/catalog/linear.json +1 -1
- package/integrations/catalog/microsoft-outlook.json +13 -0
- package/integrations/catalog/microsoft-teams.json +13 -0
- package/integrations/catalog/notion.json +13 -0
- package/integrations/catalog/onedrive.json +13 -0
- package/integrations/catalog/sharepoint.json +13 -0
- package/integrations/catalog/slack.json +16 -2
- package/integrations/catalog/vanta.json +55 -0
- package/integrations/catalog-index.js +71 -67
- package/integrations/catalog.schema.json +70 -3
- package/integrations/index.d.ts +49 -3
- package/marketplaces/openhands-extensions.json +9 -0
- package/package.json +1 -1
- package/pyproject.toml +6 -1
- package/python/openhands_extensions/__init__.py +38 -0
- package/python/openhands_extensions/_version.py +2 -2
- package/python/openhands_extensions/deprecation.py +159 -0
- package/python/openhands_extensions/integration_models.py +233 -0
- package/python/openhands_extensions/integrations.py +59 -4
- package/scripts/check_deprecations.py +488 -0
- package/skills/index.js +7 -1
- package/skills/iterate/README.md +4 -1
- package/skills/iterate/SKILL.md +22 -2
- package/skills/technical-writing/.plugin/plugin.json +15 -0
- package/skills/technical-writing/README.md +14 -0
- package/skills/technical-writing/SKILL.md +106 -0
- package/tests/test_catalog_schema.py +58 -0
- package/tests/test_catalogs.py +67 -0
- package/tests/test_deprecations.py +136 -0
- package/tests/test_integration_catalog_in_sync.py +118 -7
- package/tests/test_live_integration_smoke.py +366 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
name: Deprecation deadlines
|
|
2
|
+
|
|
3
|
+
# release-please opens its release PR with the OpenHands GitHub App token, so
|
|
4
|
+
# this pull_request workflow also runs against the generated version bump.
|
|
5
|
+
on:
|
|
6
|
+
pull_request:
|
|
7
|
+
branches: ["**"]
|
|
8
|
+
push:
|
|
9
|
+
branches: ["main", "master"]
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
check:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
steps:
|
|
15
|
+
- name: Checkout repository
|
|
16
|
+
uses: actions/checkout@v4
|
|
17
|
+
|
|
18
|
+
- name: Install uv
|
|
19
|
+
uses: astral-sh/setup-uv@v7
|
|
20
|
+
with:
|
|
21
|
+
enable-cache: true
|
|
22
|
+
python-version: "3.12"
|
|
23
|
+
|
|
24
|
+
- name: Verify deprecation deadlines
|
|
25
|
+
run: uv run python scripts/check_deprecations.py
|
package/README.md
CHANGED
|
@@ -87,7 +87,7 @@ The JS and Python versions are kept in lock-step by `release-please` and guarded
|
|
|
87
87
|
## Extensions Catalog
|
|
88
88
|
|
|
89
89
|
<!-- BEGIN AUTO-GENERATED CATALOG -->
|
|
90
|
-
This repository contains **2 marketplace(s)** with **
|
|
90
|
+
This repository contains **2 marketplace(s)** with **63 extensions** (53 skills, 10 plugins).
|
|
91
91
|
|
|
92
92
|
### large-codebase
|
|
93
93
|
|
|
@@ -106,7 +106,7 @@ OpenHands skills for interacting, improving, and refactoring large codebases
|
|
|
106
106
|
|
|
107
107
|
Official skills and plugins for OpenHands — the open-source AI software engineer.
|
|
108
108
|
|
|
109
|
-
**
|
|
109
|
+
**59 extensions** (51 skills, 8 plugins)
|
|
110
110
|
|
|
111
111
|
| Name | Type | Description | Commands |
|
|
112
112
|
|------|------|-------------|----------|
|
|
@@ -164,6 +164,7 @@ Official skills and plugins for OpenHands — the open-source AI software engine
|
|
|
164
164
|
| slack-standup-digest | skill | Create an automation that generates an async standup digest from Slack. Searches selected channels for messages since... | `/standup-digest:setup` |
|
|
165
165
|
| ssh | skill | Establish and manage SSH connections to remote machines, including key generation, configuration, and file transfers.... | — |
|
|
166
166
|
| swift-linux | skill | Install and configure Swift programming language on Debian Linux for server-side development. Use when building Swift... | — |
|
|
167
|
+
| technical-writing | skill | Write and revise technical explanations in flowing, direct, conversational prose that stays concise without becoming ... | — |
|
|
167
168
|
| theme-factory | skill | Toolkit for styling artifacts with a theme. These artifacts can be slides, docs, reportings, HTML landing pages, etc.... | — |
|
|
168
169
|
| uv | skill | Common project, dependency, and environment operations using uv. | — |
|
|
169
170
|
| vercel | skill | Deploy and manage applications on Vercel, including preview deployments and deployment protection. | — |
|
package/integrations/README.md
CHANGED
|
@@ -18,6 +18,31 @@ integrations so clients can consume one source of truth.
|
|
|
18
18
|
Each integration carries its OAuth/MCP connection data directly. Do not add a
|
|
19
19
|
separate provider catalog or per-language provider data.
|
|
20
20
|
|
|
21
|
+
Every entry must include `docsUrl`. Marketplace input fields must explicitly
|
|
22
|
+
declare both their `type` and whether they are `required`, rather than relying
|
|
23
|
+
on client defaults. When connection metadata includes an `identityMapping`, it
|
|
24
|
+
must also identify the external principal. These requirements keep catalogs
|
|
25
|
+
actionable and prevent clients from guessing security- or UX-relevant defaults.
|
|
26
|
+
|
|
27
|
+
Connection options may also carry an optional `connectionModel`. This metadata
|
|
28
|
+
lets consumers distinguish the authenticated principal from the external
|
|
29
|
+
resource the credential can reach:
|
|
30
|
+
|
|
31
|
+
- `principalType` describes who or what authenticated.
|
|
32
|
+
- `credentialScope` describes the provider boundary enforced by the credential.
|
|
33
|
+
- `resourceType` and `resourceCardinality` describe whether the grant represents
|
|
34
|
+
one workspace/site/tenant or can enumerate several.
|
|
35
|
+
- `selectionMode` tells clients whether the resource is known during auth,
|
|
36
|
+
selected immediately after auth, or supplied at runtime.
|
|
37
|
+
- `identityMapping` contains constrained dot paths for identity values returned
|
|
38
|
+
by OAuth, access-token claims, or a provider identity endpoint.
|
|
39
|
+
- `resourceDiscovery` describes a read-only endpoint used to enumerate resources
|
|
40
|
+
when one grant covers several of them.
|
|
41
|
+
|
|
42
|
+
These fields are descriptive; they never broaden the scopes enforced by the
|
|
43
|
+
provider credential. Consumers must not claim resource-level isolation when a
|
|
44
|
+
provider token is only account- or tenant-scoped.
|
|
45
|
+
|
|
21
46
|
Consumers should use the read functions exported by the package:
|
|
22
47
|
|
|
23
48
|
```js
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "atlassian-rovo",
|
|
3
|
+
"name": "Atlassian Rovo",
|
|
4
|
+
"description": "Search, create, and update Jira issues, Confluence pages, Bitbucket repos, and Jira Service Management tickets - all through Atlassian's official hosted MCP server, powered by your Teamwork Graph.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Project management",
|
|
7
|
+
"Documentation",
|
|
8
|
+
"Engineering"
|
|
9
|
+
],
|
|
10
|
+
"appUrl": "https://www.atlassian.com/rovo",
|
|
11
|
+
"docsUrl": "https://support.atlassian.com/atlassian-rovo-mcp-server/docs/getting-started-with-the-atlassian-remote-mcp-server/",
|
|
12
|
+
"notes": "OAuth 2.1 is handled entirely by the Atlassian Rovo MCP server. No client credentials required - sign in with your Atlassian account when the authentication flow starts.",
|
|
13
|
+
"iconBg": "#0052CC",
|
|
14
|
+
"logoUrl": "https://cdn.simpleicons.org/atlassian/FFFFFF",
|
|
15
|
+
"keywords": [
|
|
16
|
+
"atlassian",
|
|
17
|
+
"rovo",
|
|
18
|
+
"jira",
|
|
19
|
+
"confluence",
|
|
20
|
+
"bitbucket",
|
|
21
|
+
"jsm",
|
|
22
|
+
"tickets",
|
|
23
|
+
"wiki",
|
|
24
|
+
"issues",
|
|
25
|
+
"sprint",
|
|
26
|
+
"mcp"
|
|
27
|
+
],
|
|
28
|
+
"connectionOptions": [
|
|
29
|
+
{
|
|
30
|
+
"id": "oauth",
|
|
31
|
+
"provider": "mcp",
|
|
32
|
+
"transport": {
|
|
33
|
+
"kind": "shttp",
|
|
34
|
+
"url": "https://mcp.atlassian.com/v1/mcp/authv2"
|
|
35
|
+
},
|
|
36
|
+
"auth": {
|
|
37
|
+
"strategy": "oauth2",
|
|
38
|
+
"oauth": {
|
|
39
|
+
"clientAuthentication": "none"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
]
|
|
44
|
+
}
|
|
@@ -24,6 +24,19 @@
|
|
|
24
24
|
{
|
|
25
25
|
"id": "oauth",
|
|
26
26
|
"provider": "mcp",
|
|
27
|
+
"connectionModel": {
|
|
28
|
+
"principalType": "user",
|
|
29
|
+
"credentialScope": "account",
|
|
30
|
+
"resourceType": "site",
|
|
31
|
+
"resourceCardinality": "many",
|
|
32
|
+
"selectionMode": "post_auth",
|
|
33
|
+
"resourceDiscovery": {
|
|
34
|
+
"endpoint": "https://api.atlassian.com/oauth/token/accessible-resources",
|
|
35
|
+
"externalResourceIdPath": "id",
|
|
36
|
+
"resourceNamePath": "name",
|
|
37
|
+
"resourceUrlPath": "url"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
27
40
|
"transport": {
|
|
28
41
|
"kind": "shttp",
|
|
29
42
|
"url": "https://mcp.atlassian.com/v1/mcp"
|
|
@@ -14,6 +14,26 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "mcp",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "account",
|
|
20
|
+
"resourceType": "organization",
|
|
21
|
+
"resourceCardinality": "many",
|
|
22
|
+
"selectionMode": "post_auth",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "identity_api",
|
|
25
|
+
"endpoint": "https://api.github.com/user",
|
|
26
|
+
"externalPrincipalIdPath": "id",
|
|
27
|
+
"resourceNamePath": "login",
|
|
28
|
+
"resourceUrlPath": "html_url"
|
|
29
|
+
},
|
|
30
|
+
"resourceDiscovery": {
|
|
31
|
+
"endpoint": "https://api.github.com/user/orgs",
|
|
32
|
+
"externalResourceIdPath": "id",
|
|
33
|
+
"resourceNamePath": "login",
|
|
34
|
+
"resourceUrlPath": "html_url"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
17
37
|
"auth": {
|
|
18
38
|
"strategy": "oauth2",
|
|
19
39
|
"oauth": {
|
|
@@ -41,7 +61,7 @@
|
|
|
41
61
|
"strategy": "api_key",
|
|
42
62
|
"credentialLabel": "Personal access token",
|
|
43
63
|
"credentialPlaceholder": "github_pat_...",
|
|
44
|
-
"credentialHelp": "
|
|
64
|
+
"credentialHelp": "Create a token in [GitHub settings](https://github.com/settings/personal-access-tokens): classic tokens need the repo and read:user scopes; fine-grained tokens need read access to Contents, Issues, and Pull requests for the repositories you use.",
|
|
45
65
|
"credentialSecretName": "GITHUB_PERSONAL_ACCESS_TOKEN",
|
|
46
66
|
"saveCredentialAsSecretByDefault": true
|
|
47
67
|
}
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"apiKeyOptional": true,
|
|
53
53
|
"credentialLabel": "Linear API key",
|
|
54
54
|
"credentialPlaceholder": "Paste your Linear API key",
|
|
55
|
-
"credentialHelp": "
|
|
55
|
+
"credentialHelp": "Create a personal API key (grant at least read access) under Security & access in [Linear settings](https://linear.app/settings/account/security). Sent as Authorization: Bearer <token>; optional when the endpoint accepts your OAuth session."
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
],
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -13,6 +13,19 @@
|
|
|
13
13
|
{
|
|
14
14
|
"id": "oauth",
|
|
15
15
|
"provider": "http",
|
|
16
|
+
"connectionModel": {
|
|
17
|
+
"principalType": "user",
|
|
18
|
+
"credentialScope": "resource",
|
|
19
|
+
"resourceType": "workspace",
|
|
20
|
+
"resourceCardinality": "one",
|
|
21
|
+
"selectionMode": "automatic",
|
|
22
|
+
"identityMapping": {
|
|
23
|
+
"source": "oauth_token_response",
|
|
24
|
+
"externalPrincipalIdPath": "owner.user.id",
|
|
25
|
+
"externalResourceIdPath": "workspace_id",
|
|
26
|
+
"resourceNamePath": "workspace_name"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
16
29
|
"auth": {
|
|
17
30
|
"strategy": "oauth2",
|
|
18
31
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -14,6 +14,19 @@
|
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "http",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "tenant",
|
|
20
|
+
"resourceType": "tenant",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "access_token_claims",
|
|
25
|
+
"externalPrincipalIdPath": "oid",
|
|
26
|
+
"externalTenantIdPath": "tid",
|
|
27
|
+
"externalResourceIdPath": "tid"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
17
30
|
"auth": {
|
|
18
31
|
"strategy": "oauth2",
|
|
19
32
|
"oauth": {
|
|
@@ -8,12 +8,26 @@
|
|
|
8
8
|
],
|
|
9
9
|
"appUrl": "https://slack.com",
|
|
10
10
|
"docsUrl": "https://github.com/zencoderai/slack-mcp-server",
|
|
11
|
-
"notes": "
|
|
11
|
+
"notes": "The OAuth option uses Slack's official hosted MCP server (confidential OAuth user-token auth); the local option runs the open-source zencoderai stdio server with a bot token.",
|
|
12
12
|
"popularityRank": 95,
|
|
13
13
|
"connectionOptions": [
|
|
14
14
|
{
|
|
15
15
|
"id": "oauth",
|
|
16
16
|
"provider": "mcp",
|
|
17
|
+
"connectionModel": {
|
|
18
|
+
"principalType": "user",
|
|
19
|
+
"credentialScope": "resource",
|
|
20
|
+
"resourceType": "workspace",
|
|
21
|
+
"resourceCardinality": "one",
|
|
22
|
+
"selectionMode": "automatic",
|
|
23
|
+
"identityMapping": {
|
|
24
|
+
"source": "oauth_token_response",
|
|
25
|
+
"externalPrincipalIdPath": "authed_user.id",
|
|
26
|
+
"externalTenantIdPath": "enterprise.id",
|
|
27
|
+
"externalResourceIdPath": "team.id",
|
|
28
|
+
"resourceNamePath": "team.name"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
17
31
|
"auth": {
|
|
18
32
|
"strategy": "oauth2",
|
|
19
33
|
"oauth": {
|
|
@@ -87,5 +101,5 @@
|
|
|
87
101
|
"messaging",
|
|
88
102
|
"team"
|
|
89
103
|
],
|
|
90
|
-
"installHint": "Create a Slack app with
|
|
104
|
+
"installHint": "Create a Slack app with bot token scopes channels:history, channels:read, chat:write, reactions:write, users:read, and users.profile:read, then paste its bot token below."
|
|
91
105
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "vanta",
|
|
3
|
+
"name": "Vanta",
|
|
4
|
+
"description": "Query Vanta compliance controls, tests, evidence, risks, and vulnerabilities from the agent.",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Security",
|
|
7
|
+
"Compliance"
|
|
8
|
+
],
|
|
9
|
+
"appUrl": "https://www.vanta.com",
|
|
10
|
+
"docsUrl": "https://developer.vanta.com/docs/vanta-mcp",
|
|
11
|
+
"notes": "Vanta's hosted remote MCP server (beta, requires a Vanta Admin role). Regional endpoints: US https://mcp.vanta.com/mcp, EU https://mcp.eu.vanta.com/mcp, AUS https://mcp.aus.vanta.com/mcp. Authentication is OAuth only - no API keys.",
|
|
12
|
+
"popularityRank": 64,
|
|
13
|
+
"connectionOptions": [
|
|
14
|
+
{
|
|
15
|
+
"id": "oauth",
|
|
16
|
+
"provider": "mcp",
|
|
17
|
+
"auth": {
|
|
18
|
+
"strategy": "oauth2",
|
|
19
|
+
"oauth": {
|
|
20
|
+
"authorizationUrl": "https://app.vanta.com/oauth/authorize",
|
|
21
|
+
"tokenUrl": "https://api.vanta.com/oauth/token",
|
|
22
|
+
"registrationUrl": "https://api.vanta.com/oauth/register",
|
|
23
|
+
"scopes": [
|
|
24
|
+
"mcp-api.all:read"
|
|
25
|
+
],
|
|
26
|
+
"optionalScopes": [
|
|
27
|
+
"mcp-api.all:write"
|
|
28
|
+
],
|
|
29
|
+
"pkce": true,
|
|
30
|
+
"clientAuthentication": "none",
|
|
31
|
+
"additionalAuthorizationParams": {
|
|
32
|
+
"resource": "https://mcp.vanta.com"
|
|
33
|
+
},
|
|
34
|
+
"additionalTokenParams": {
|
|
35
|
+
"resource": "https://mcp.vanta.com"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
"transport": {
|
|
40
|
+
"kind": "shttp",
|
|
41
|
+
"url": "https://mcp.vanta.com/mcp"
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"iconBg": "#003D2B",
|
|
46
|
+
"keywords": [
|
|
47
|
+
"compliance",
|
|
48
|
+
"soc2",
|
|
49
|
+
"security",
|
|
50
|
+
"audit",
|
|
51
|
+
"risk",
|
|
52
|
+
"vanta"
|
|
53
|
+
],
|
|
54
|
+
"installHint": "Connect via the OAuth MCP option. After connecting, complete the OAuth flow in your browser as a Vanta Admin. EU tenants should use https://mcp.eu.vanta.com/mcp and AUS tenants https://mcp.aus.vanta.com/mcp as the transport URL. The legacy local server @vantasdk/vanta-mcp-server is deprecated - prefer the hosted remote server."
|
|
55
|
+
}
|
|
@@ -8,73 +8,75 @@ import entry2 from "./catalog/tavily.json" with { type: "json" };
|
|
|
8
8
|
import entry3 from "./catalog/atlassian.json" with { type: "json" };
|
|
9
9
|
import entry4 from "./catalog/linear.json" with { type: "json" };
|
|
10
10
|
import entry5 from "./catalog/notion.json" with { type: "json" };
|
|
11
|
-
import entry6 from "./catalog/
|
|
12
|
-
import entry7 from "./catalog/
|
|
13
|
-
import entry8 from "./catalog/
|
|
14
|
-
import entry9 from "./catalog/
|
|
15
|
-
import entry10 from "./catalog/
|
|
16
|
-
import entry11 from "./catalog/
|
|
17
|
-
import entry12 from "./catalog/
|
|
18
|
-
import entry13 from "./catalog/
|
|
19
|
-
import entry14 from "./catalog/
|
|
20
|
-
import entry15 from "./catalog/
|
|
21
|
-
import entry16 from "./catalog/
|
|
22
|
-
import entry17 from "./catalog/
|
|
23
|
-
import entry18 from "./catalog/
|
|
24
|
-
import entry19 from "./catalog/
|
|
25
|
-
import entry20 from "./catalog/
|
|
26
|
-
import entry21 from "./catalog/
|
|
27
|
-
import entry22 from "./catalog/
|
|
28
|
-
import entry23 from "./catalog/
|
|
29
|
-
import entry24 from "./catalog/
|
|
30
|
-
import entry25 from "./catalog/
|
|
31
|
-
import entry26 from "./catalog/
|
|
32
|
-
import entry27 from "./catalog/
|
|
33
|
-
import entry28 from "./catalog/
|
|
34
|
-
import entry29 from "./catalog/
|
|
35
|
-
import entry30 from "./catalog/microsoft-
|
|
36
|
-
import entry31 from "./catalog/
|
|
37
|
-
import entry32 from "./catalog/
|
|
38
|
-
import entry33 from "./catalog/
|
|
39
|
-
import entry34 from "./catalog/
|
|
40
|
-
import entry35 from "./catalog/
|
|
41
|
-
import entry36 from "./catalog/
|
|
42
|
-
import entry37 from "./catalog/
|
|
43
|
-
import entry38 from "./catalog/
|
|
44
|
-
import entry39 from "./catalog/
|
|
45
|
-
import entry40 from "./catalog/
|
|
46
|
-
import entry41 from "./catalog/google-
|
|
47
|
-
import entry42 from "./catalog/
|
|
48
|
-
import entry43 from "./catalog/
|
|
49
|
-
import entry44 from "./catalog/
|
|
50
|
-
import entry45 from "./catalog/
|
|
51
|
-
import entry46 from "./catalog/
|
|
52
|
-
import entry47 from "./catalog/
|
|
53
|
-
import entry48 from "./catalog/
|
|
54
|
-
import entry49 from "./catalog/
|
|
55
|
-
import entry50 from "./catalog/cloudflare-
|
|
56
|
-
import entry51 from "./catalog/cloudflare-
|
|
57
|
-
import entry52 from "./catalog/cloudflare-
|
|
58
|
-
import entry53 from "./catalog/
|
|
59
|
-
import entry54 from "./catalog/
|
|
60
|
-
import entry55 from "./catalog/
|
|
61
|
-
import entry56 from "./catalog/
|
|
62
|
-
import entry57 from "./catalog/
|
|
63
|
-
import entry58 from "./catalog/
|
|
64
|
-
import entry59 from "./catalog/
|
|
65
|
-
import entry60 from "./catalog/
|
|
66
|
-
import entry61 from "./catalog/
|
|
67
|
-
import entry62 from "./catalog/
|
|
68
|
-
import entry63 from "./catalog/
|
|
69
|
-
import entry64 from "./catalog/
|
|
70
|
-
import entry65 from "./catalog/
|
|
71
|
-
import entry66 from "./catalog/
|
|
72
|
-
import entry67 from "./catalog/
|
|
73
|
-
import entry68 from "./catalog/
|
|
74
|
-
import entry69 from "./catalog/
|
|
75
|
-
import entry70 from "./catalog/
|
|
76
|
-
import entry71 from "./catalog/
|
|
77
|
-
import entry72 from "./catalog/
|
|
11
|
+
import entry6 from "./catalog/vanta.json" with { type: "json" };
|
|
12
|
+
import entry7 from "./catalog/ordinal.json" with { type: "json" };
|
|
13
|
+
import entry8 from "./catalog/elevenlabs.json" with { type: "json" };
|
|
14
|
+
import entry9 from "./catalog/bitbucket.json" with { type: "json" };
|
|
15
|
+
import entry10 from "./catalog/xero.json" with { type: "json" };
|
|
16
|
+
import entry11 from "./catalog/quickbooks.json" with { type: "json" };
|
|
17
|
+
import entry12 from "./catalog/okta.json" with { type: "json" };
|
|
18
|
+
import entry13 from "./catalog/netlify.json" with { type: "json" };
|
|
19
|
+
import entry14 from "./catalog/vercel.json" with { type: "json" };
|
|
20
|
+
import entry15 from "./catalog/supabase.json" with { type: "json" };
|
|
21
|
+
import entry16 from "./catalog/posthog.json" with { type: "json" };
|
|
22
|
+
import entry17 from "./catalog/sentry.json" with { type: "json" };
|
|
23
|
+
import entry18 from "./catalog/datadog.json" with { type: "json" };
|
|
24
|
+
import entry19 from "./catalog/canva.json" with { type: "json" };
|
|
25
|
+
import entry20 from "./catalog/miro.json" with { type: "json" };
|
|
26
|
+
import entry21 from "./catalog/webflow.json" with { type: "json" };
|
|
27
|
+
import entry22 from "./catalog/zoom.json" with { type: "json" };
|
|
28
|
+
import entry23 from "./catalog/discord.json" with { type: "json" };
|
|
29
|
+
import entry24 from "./catalog/stripe.json" with { type: "json" };
|
|
30
|
+
import entry25 from "./catalog/intercom.json" with { type: "json" };
|
|
31
|
+
import entry26 from "./catalog/hubspot.json" with { type: "json" };
|
|
32
|
+
import entry27 from "./catalog/salesforce.json" with { type: "json" };
|
|
33
|
+
import entry28 from "./catalog/sharepoint.json" with { type: "json" };
|
|
34
|
+
import entry29 from "./catalog/onedrive.json" with { type: "json" };
|
|
35
|
+
import entry30 from "./catalog/microsoft-teams.json" with { type: "json" };
|
|
36
|
+
import entry31 from "./catalog/microsoft-outlook.json" with { type: "json" };
|
|
37
|
+
import entry32 from "./catalog/box.json" with { type: "json" };
|
|
38
|
+
import entry33 from "./catalog/airtable.json" with { type: "json" };
|
|
39
|
+
import entry34 from "./catalog/monday.json" with { type: "json" };
|
|
40
|
+
import entry35 from "./catalog/trello.json" with { type: "json" };
|
|
41
|
+
import entry36 from "./catalog/asana.json" with { type: "json" };
|
|
42
|
+
import entry37 from "./catalog/confluence.json" with { type: "json" };
|
|
43
|
+
import entry38 from "./catalog/jira.json" with { type: "json" };
|
|
44
|
+
import entry39 from "./catalog/google-calendar.json" with { type: "json" };
|
|
45
|
+
import entry40 from "./catalog/gmail.json" with { type: "json" };
|
|
46
|
+
import entry41 from "./catalog/google-sheets.json" with { type: "json" };
|
|
47
|
+
import entry42 from "./catalog/google-drive.json" with { type: "json" };
|
|
48
|
+
import entry43 from "./catalog/figma.json" with { type: "json" };
|
|
49
|
+
import entry44 from "./catalog/google-docs.json" with { type: "json" };
|
|
50
|
+
import entry45 from "./catalog/apify.json" with { type: "json" };
|
|
51
|
+
import entry46 from "./catalog/atlassian-rovo.json" with { type: "json" };
|
|
52
|
+
import entry47 from "./catalog/brave-search.json" with { type: "json" };
|
|
53
|
+
import entry48 from "./catalog/browser-mcp.json" with { type: "json" };
|
|
54
|
+
import entry49 from "./catalog/clickhouse.json" with { type: "json" };
|
|
55
|
+
import entry50 from "./catalog/cloudflare-bindings.json" with { type: "json" };
|
|
56
|
+
import entry51 from "./catalog/cloudflare-browser-rendering.json" with { type: "json" };
|
|
57
|
+
import entry52 from "./catalog/cloudflare-builds.json" with { type: "json" };
|
|
58
|
+
import entry53 from "./catalog/cloudflare-docs.json" with { type: "json" };
|
|
59
|
+
import entry54 from "./catalog/cloudflare-observability.json" with { type: "json" };
|
|
60
|
+
import entry55 from "./catalog/deepwiki.json" with { type: "json" };
|
|
61
|
+
import entry56 from "./catalog/everything.json" with { type: "json" };
|
|
62
|
+
import entry57 from "./catalog/exa.json" with { type: "json" };
|
|
63
|
+
import entry58 from "./catalog/fetch.json" with { type: "json" };
|
|
64
|
+
import entry59 from "./catalog/filesystem.json" with { type: "json" };
|
|
65
|
+
import entry60 from "./catalog/firecrawl.json" with { type: "json" };
|
|
66
|
+
import entry61 from "./catalog/git.json" with { type: "json" };
|
|
67
|
+
import entry62 from "./catalog/huggingface.json" with { type: "json" };
|
|
68
|
+
import entry63 from "./catalog/kagi.json" with { type: "json" };
|
|
69
|
+
import entry64 from "./catalog/memory.json" with { type: "json" };
|
|
70
|
+
import entry65 from "./catalog/mongodb.json" with { type: "json" };
|
|
71
|
+
import entry66 from "./catalog/neon.json" with { type: "json" };
|
|
72
|
+
import entry67 from "./catalog/obsidian.json" with { type: "json" };
|
|
73
|
+
import entry68 from "./catalog/paypal.json" with { type: "json" };
|
|
74
|
+
import entry69 from "./catalog/playwright.json" with { type: "json" };
|
|
75
|
+
import entry70 from "./catalog/redis.json" with { type: "json" };
|
|
76
|
+
import entry71 from "./catalog/resend.json" with { type: "json" };
|
|
77
|
+
import entry72 from "./catalog/sequential-thinking.json" with { type: "json" };
|
|
78
|
+
import entry73 from "./catalog/superhuman-mail.json" with { type: "json" };
|
|
79
|
+
import entry74 from "./catalog/time.json" with { type: "json" };
|
|
78
80
|
|
|
79
81
|
export const INTEGRATION_CATALOG_ENTRIES = [
|
|
80
82
|
entry0,
|
|
@@ -150,4 +152,6 @@ export const INTEGRATION_CATALOG_ENTRIES = [
|
|
|
150
152
|
entry70,
|
|
151
153
|
entry71,
|
|
152
154
|
entry72,
|
|
155
|
+
entry73,
|
|
156
|
+
entry74,
|
|
153
157
|
];
|