@squidcloud/cli 1.0.460 → 1.0.461
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/dist/index.js +5 -3
- package/dist/resources/claude/skills/squid-development/SKILL.md +9 -2
- package/dist/resources/claude/skills/squid-development/reference/ai.md +8 -6
- package/dist/resources/claude/skills/squid-development/reference/backend.md +72 -0
- package/dist/resources/claude/skills/squid-development/reference/connectors.md +28 -0
- package/dist/resources/claude/skills/squid-integrations/SKILL.md +249 -0
- package/dist/resources/claude/skills/squid-integrations/reference/connector-functions.md +541 -0
- package/dist/resources/claude/skills/squid-integrations/reference/connector-sdks.md +616 -0
- package/dist/resources/claude/skills/squid-integrations/reference/integration-catalog.md +154 -0
- package/dist/resources/claude/skills/squid-integrations/reference/integration-setup.md +529 -0
- package/dist/resources/claude/skills/squid-react-development/SKILL.md +2 -0
- package/package.json +2 -2
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Integration Type Catalog
|
|
2
|
+
|
|
3
|
+
Complete catalog of all Squid integration types. Source of truth: `INTEGRATION_TYPES` from `@squidcloud/client`.
|
|
4
|
+
|
|
5
|
+
```typescript
|
|
6
|
+
import { IntegrationType, INTEGRATION_TYPES } from '@squidcloud/client';
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Databases (14 types)
|
|
10
|
+
|
|
11
|
+
| Type | Description | Config Required |
|
|
12
|
+
|------|-------------|-----------------|
|
|
13
|
+
| `postgres` | PostgreSQL | host, port, database, user, password |
|
|
14
|
+
| `mysql` | MySQL / MariaDB | host, port, database, user, password |
|
|
15
|
+
| `mongo` | MongoDB | connectionString, password |
|
|
16
|
+
| `mssql` | Microsoft SQL Server | host, port, database, user, password |
|
|
17
|
+
| `snowflake` | Snowflake | account, database, schema, warehouse, user, password or privateKey |
|
|
18
|
+
| `bigquery` | Google BigQuery | GCP credentials, dataset |
|
|
19
|
+
| `dynamodb` | Amazon DynamoDB | region, accessKeyId, secretAccessKey |
|
|
20
|
+
| `elasticsearch` | Elasticsearch | host, port, user, password |
|
|
21
|
+
| `clickhouse` | ClickHouse | host, port, database, user, password |
|
|
22
|
+
| `oracledb` | Oracle Database | host, port, database, user, password |
|
|
23
|
+
| `cockroach` | CockroachDB | host, port, database, user, password |
|
|
24
|
+
| `sap_hana` | SAP HANA | host, port, user, password |
|
|
25
|
+
| `databricks` | Databricks | host, catalog, schemas, warehousePath |
|
|
26
|
+
| `legend` | Legend metadata | GitLab PAT |
|
|
27
|
+
| `built_in_db` | Built-in database (included free) | None |
|
|
28
|
+
|
|
29
|
+
Additional database types (available as integration, no dedicated connector):
|
|
30
|
+
- `mariadb` - MariaDB (separate from MySQL)
|
|
31
|
+
- `alloydb` - Google AlloyDB
|
|
32
|
+
- `cloudsql` - Google Cloud SQL
|
|
33
|
+
- `cassandra` - Apache Cassandra
|
|
34
|
+
- `db2` - IBM DB2
|
|
35
|
+
- `documentdb` - AWS DocumentDB
|
|
36
|
+
- `firestore` - Google Firestore
|
|
37
|
+
- `spanner` - Google Cloud Spanner
|
|
38
|
+
- `xata` - Xata database
|
|
39
|
+
- `azure_cosmosdb` - Azure Cosmos DB
|
|
40
|
+
- `azure_postgresql` - Azure PostgreSQL
|
|
41
|
+
- `azure_sql` - Azure SQL
|
|
42
|
+
- `redis` - Redis
|
|
43
|
+
|
|
44
|
+
## Authentication (8 types)
|
|
45
|
+
|
|
46
|
+
| Type | Description | Config Required |
|
|
47
|
+
|------|-------------|-----------------|
|
|
48
|
+
| `auth0` | Auth0 | Auto-discovered via JWKS |
|
|
49
|
+
| `cognito` | Amazon Cognito | region, userPoolId, appClientId |
|
|
50
|
+
| `okta` | Okta | domain, clientId |
|
|
51
|
+
| `keycloak` | Keycloak | realm, JWKS URL |
|
|
52
|
+
| `firebase_auth` | Firebase Authentication | projectId |
|
|
53
|
+
| `jwt_rsa` | Custom JWT (RSA) | JWKS URI, optional audience/issuer |
|
|
54
|
+
| `jwt_hmac` | Custom JWT (HMAC) | Optional verification URI |
|
|
55
|
+
| `descope` | Descope | projectId |
|
|
56
|
+
|
|
57
|
+
## SaaS Connectors (18 types with AI functions)
|
|
58
|
+
|
|
59
|
+
| Type | Description | Key AI Functions |
|
|
60
|
+
|------|-------------|------------------|
|
|
61
|
+
| `slack` | Slack messaging | searchInSlack |
|
|
62
|
+
| `jira` | Atlassian Jira | search, create, update issues |
|
|
63
|
+
| `jira_jsm` | Jira Service Management | search, create, transition requests |
|
|
64
|
+
| `zendesk` | Zendesk support | search tickets, get details |
|
|
65
|
+
| `freshdesk` | Freshdesk support | search, create, reply to tickets |
|
|
66
|
+
| `salesforce` | Salesforce CRM | CRUD for opportunities, cases, accounts, incidents |
|
|
67
|
+
| `hubspot` | HubSpot CRM | search/get contacts and companies |
|
|
68
|
+
| `github` | GitHub repos | search PRs/code, create/merge PRs, reviews |
|
|
69
|
+
| `confluence` | Atlassian Confluence | searchInConfluence |
|
|
70
|
+
| `google_calendar` | Google Calendar | listCalendarEvents |
|
|
71
|
+
| `google_drive` | Google Drive | search, list documents |
|
|
72
|
+
| `google_docs` | Google Docs | Access via Google Drive connector |
|
|
73
|
+
| `linear` | Linear issues | search, create, update issues |
|
|
74
|
+
| `servicenow_csm` | ServiceNow CSM | search cases, create, reply |
|
|
75
|
+
| `teams` | Microsoft Teams | searchInTeams |
|
|
76
|
+
| `sharepoint` | Microsoft SharePoint | search, list documents |
|
|
77
|
+
| `onedrive` | Microsoft OneDrive | Access via SharePoint connector |
|
|
78
|
+
| `mail` | Email (SMTP) | sendMailWithAi |
|
|
79
|
+
| `monday` | Monday.com | Board and item management |
|
|
80
|
+
| `active_directory` | Active Directory | User/group management |
|
|
81
|
+
|
|
82
|
+
## Storage (6 types)
|
|
83
|
+
|
|
84
|
+
| Type | Description | Config Required |
|
|
85
|
+
|------|-------------|-----------------|
|
|
86
|
+
| `s3` | Amazon S3 | bucket, region, accessKeyId, secretKey |
|
|
87
|
+
| `gcs` | Google Cloud Storage | bucket, GCP credentials |
|
|
88
|
+
| `azure_blob` | Azure Blob Storage | container, connectionString |
|
|
89
|
+
| `built_in_s3` | Built-in S3 (AWS deployments) | None |
|
|
90
|
+
| `built_in_gcs` | Built-in GCS (GCP deployments) | None |
|
|
91
|
+
| `built_in_azure_blob` | Built-in Azure Blob (Azure deployments) | None |
|
|
92
|
+
|
|
93
|
+
## Message Queues (3 types)
|
|
94
|
+
|
|
95
|
+
| Type | Description | Config Required |
|
|
96
|
+
|------|-------------|-----------------|
|
|
97
|
+
| `kafka` | Apache Kafka | bootstrapServers, SASL credentials |
|
|
98
|
+
| `confluent` | Confluent Cloud | Kafka-compatible configuration |
|
|
99
|
+
| `built_in_queue` | Built-in queue (included free) | None |
|
|
100
|
+
|
|
101
|
+
## API Integrations (2 types)
|
|
102
|
+
|
|
103
|
+
| Type | Description | Config Required |
|
|
104
|
+
|------|-------------|-----------------|
|
|
105
|
+
| `api` | REST API (OpenAPI) | OpenAPI spec URL |
|
|
106
|
+
| `graphql` | GraphQL endpoint | Base URL |
|
|
107
|
+
|
|
108
|
+
## AI Providers (3 types)
|
|
109
|
+
|
|
110
|
+
| Type | Description | Config Required |
|
|
111
|
+
|------|-------------|-----------------|
|
|
112
|
+
| `openai_compatible` | OpenAI-compatible chat models | Base URL, API key, model list |
|
|
113
|
+
| `openai_compatible_embedding` | OpenAI-compatible embeddings | Base URL, API key, model list |
|
|
114
|
+
| `bedrock` | AWS Bedrock | Region, API key, model list |
|
|
115
|
+
|
|
116
|
+
Note: Standard AI providers (OpenAI, Anthropic, Gemini, Grok) are configured in Console AI Settings, not as integration types.
|
|
117
|
+
|
|
118
|
+
## Agent Protocols (2 types)
|
|
119
|
+
|
|
120
|
+
| Type | Description | Config Required |
|
|
121
|
+
|------|-------------|-----------------|
|
|
122
|
+
| `mcp` | MCP Server connection | Server URL, optional auth header |
|
|
123
|
+
| `a2a` | Agent-to-Agent protocol | Agent URL, optional auth header |
|
|
124
|
+
|
|
125
|
+
## Observability (3 types)
|
|
126
|
+
|
|
127
|
+
| Type | Description | Config Required |
|
|
128
|
+
|------|-------------|-----------------|
|
|
129
|
+
| `datadog` | Datadog monitoring | API key, app key, region |
|
|
130
|
+
| `newrelic` | New Relic APM | API key, region |
|
|
131
|
+
| `sentry` | Sentry error tracking | Configuration via Console |
|
|
132
|
+
|
|
133
|
+
## Search & Vector (2 types)
|
|
134
|
+
|
|
135
|
+
| Type | Description | Config Required |
|
|
136
|
+
|------|-------------|-----------------|
|
|
137
|
+
| `algolia` | Algolia search | API key, app ID |
|
|
138
|
+
| `pinecone` | Pinecone vector DB | API key, environment |
|
|
139
|
+
|
|
140
|
+
## Special Types
|
|
141
|
+
|
|
142
|
+
| Type | Description |
|
|
143
|
+
|------|-------------|
|
|
144
|
+
| `ai_agents` | Internal - AI agent management |
|
|
145
|
+
| `ai_chatbot` | Internal - AI chatbot configuration |
|
|
146
|
+
| `connected_knowledgebases` | Internal - Knowledge base connections |
|
|
147
|
+
|
|
148
|
+
## Built-in Integrations (Free, No Setup)
|
|
149
|
+
|
|
150
|
+
Every Squid app automatically includes:
|
|
151
|
+
- `built_in_db` - NoSQL database
|
|
152
|
+
- `built_in_queue` - Message queue
|
|
153
|
+
- `built_in_s3` / `built_in_gcs` / `built_in_azure_blob` - Cloud-specific storage
|
|
154
|
+
- **Essentials Connector** - AI search, URL extraction, short URLs, PDF creation, data extraction, matchmaking
|
|
@@ -0,0 +1,529 @@
|
|
|
1
|
+
# Integration Setup via IAC API
|
|
2
|
+
|
|
3
|
+
Integrations can be managed programmatically using the IAC REST API or the ManagementClient SDK.
|
|
4
|
+
|
|
5
|
+
## IAC REST API
|
|
6
|
+
|
|
7
|
+
Base URL: `https://console.getsquid.ai/iac/applications/{appId}/integrations`
|
|
8
|
+
|
|
9
|
+
All requests require the `x-app-api-key` header.
|
|
10
|
+
|
|
11
|
+
### Endpoints
|
|
12
|
+
|
|
13
|
+
| Method | Path | Description |
|
|
14
|
+
|--------|------|-------------|
|
|
15
|
+
| GET | `/` | List all integrations |
|
|
16
|
+
| GET | `/{integrationId}` | Get integration config |
|
|
17
|
+
| PUT | `/{integrationId}` | Create or update integration |
|
|
18
|
+
| DELETE | `/{integrationId}` | Delete integration |
|
|
19
|
+
| POST | `/{integrationId}/discover-schema` | Discover database schema |
|
|
20
|
+
| POST | `/{integrationId}/discover-graphql-schema` | Discover GraphQL schema |
|
|
21
|
+
| POST | `/{integrationId}/discover-openapi-schema` | Discover OpenAPI schema |
|
|
22
|
+
| POST | `/test-connection` | Test database connection |
|
|
23
|
+
| POST | `/{integrationId}/schema/generate-ai-descriptions` | Generate AI descriptions for schema |
|
|
24
|
+
| GET | `/{integrationId}/schema` | Get integration schema |
|
|
25
|
+
| PUT | `/{integrationId}/schema` | Set integration schema |
|
|
26
|
+
|
|
27
|
+
### ManagementClient SDK
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { ManagementClient } from '@squidcloud/client';
|
|
31
|
+
|
|
32
|
+
const mgmt = new ManagementClient({
|
|
33
|
+
apiKey: 'management-api-key',
|
|
34
|
+
orgId: 'your-org-id'
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
// Upsert integration
|
|
38
|
+
await mgmt.upsertIntegration(appId, 'my-postgres', {
|
|
39
|
+
id: 'my-postgres',
|
|
40
|
+
type: 'postgres',
|
|
41
|
+
configuration: {
|
|
42
|
+
connectionOptions: {
|
|
43
|
+
host: 'db.example.com',
|
|
44
|
+
port: 5432,
|
|
45
|
+
database: 'mydb',
|
|
46
|
+
user: 'admin',
|
|
47
|
+
secrets: { password: 'SECRET_NAME' },
|
|
48
|
+
ssl: true
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Discover schema after connecting
|
|
54
|
+
await mgmt.discoverDataConnectionSchema(appId, 'my-postgres');
|
|
55
|
+
|
|
56
|
+
// Test connection
|
|
57
|
+
await mgmt.testDataConnection(appId, {
|
|
58
|
+
id: 'test-pg',
|
|
59
|
+
type: 'postgres',
|
|
60
|
+
configuration: { connectionOptions: { /* ... */ } }
|
|
61
|
+
});
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Configuration Examples by Integration Type
|
|
65
|
+
|
|
66
|
+
### Authentication
|
|
67
|
+
|
|
68
|
+
#### Auth0
|
|
69
|
+
```json
|
|
70
|
+
{
|
|
71
|
+
"id": "my-auth0",
|
|
72
|
+
"type": "auth0"
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
Auth0 configuration is auto-discovered via JWKS. Set the Auth0 domain in Console.
|
|
76
|
+
|
|
77
|
+
#### Cognito
|
|
78
|
+
```json
|
|
79
|
+
{
|
|
80
|
+
"id": "my-cognito",
|
|
81
|
+
"type": "cognito",
|
|
82
|
+
"configuration": {
|
|
83
|
+
"region": "us-east-1",
|
|
84
|
+
"userPoolId": "us-east-1_xxxxxx",
|
|
85
|
+
"appClientId": "your-app-client-id"
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
#### Okta
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"id": "my-okta",
|
|
94
|
+
"type": "okta",
|
|
95
|
+
"configuration": {
|
|
96
|
+
"domain": "your-domain.okta.com",
|
|
97
|
+
"clientId": "your-client-id"
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
#### JWT RSA
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"id": "my-jwt",
|
|
106
|
+
"type": "jwt_rsa",
|
|
107
|
+
"configuration": {
|
|
108
|
+
"jwksUri": "https://your-auth-server/.well-known/jwks.json",
|
|
109
|
+
"audience": "your-api-audience",
|
|
110
|
+
"issuer": "https://your-auth-server/"
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
#### Firebase Auth
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"id": "my-firebase",
|
|
119
|
+
"type": "firebase_auth",
|
|
120
|
+
"configuration": {
|
|
121
|
+
"projectId": "your-firebase-project-id"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Databases
|
|
127
|
+
|
|
128
|
+
#### PostgreSQL
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"id": "my-postgres",
|
|
132
|
+
"type": "postgres",
|
|
133
|
+
"configuration": {
|
|
134
|
+
"connectionOptions": {
|
|
135
|
+
"host": "db.example.com",
|
|
136
|
+
"port": 5432,
|
|
137
|
+
"database": "mydb",
|
|
138
|
+
"user": "admin",
|
|
139
|
+
"secrets": { "password": "PG_PASSWORD_SECRET" },
|
|
140
|
+
"ssl": true
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
#### MongoDB
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"id": "my-mongo",
|
|
150
|
+
"type": "mongo",
|
|
151
|
+
"configuration": {
|
|
152
|
+
"connectionOptions": {
|
|
153
|
+
"connectionString": "mongodb+srv://...",
|
|
154
|
+
"secrets": { "password": "MONGO_PASSWORD_SECRET" }
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### MySQL
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"id": "my-mysql",
|
|
164
|
+
"type": "mysql",
|
|
165
|
+
"configuration": {
|
|
166
|
+
"connectionOptions": {
|
|
167
|
+
"host": "db.example.com",
|
|
168
|
+
"port": 3306,
|
|
169
|
+
"database": "mydb",
|
|
170
|
+
"user": "admin",
|
|
171
|
+
"secrets": { "password": "MYSQL_PASSWORD_SECRET" }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
#### Snowflake
|
|
178
|
+
```json
|
|
179
|
+
{
|
|
180
|
+
"id": "my-snowflake",
|
|
181
|
+
"type": "snowflake",
|
|
182
|
+
"configuration": {
|
|
183
|
+
"connectionOptions": {
|
|
184
|
+
"account": "your-account",
|
|
185
|
+
"database": "MY_DB",
|
|
186
|
+
"schema": "PUBLIC",
|
|
187
|
+
"warehouse": "COMPUTE_WH",
|
|
188
|
+
"user": "admin",
|
|
189
|
+
"secrets": { "password": "SNOWFLAKE_PASSWORD_SECRET" }
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
#### DynamoDB
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"id": "my-dynamodb",
|
|
199
|
+
"type": "dynamodb",
|
|
200
|
+
"configuration": {
|
|
201
|
+
"connectionOptions": {
|
|
202
|
+
"region": "us-east-1",
|
|
203
|
+
"secrets": {
|
|
204
|
+
"accessKeyId": "AWS_ACCESS_KEY_SECRET",
|
|
205
|
+
"secretAccessKey": "AWS_SECRET_KEY_SECRET"
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### SaaS Connectors
|
|
213
|
+
|
|
214
|
+
#### Slack
|
|
215
|
+
```json
|
|
216
|
+
{
|
|
217
|
+
"id": "my-slack",
|
|
218
|
+
"type": "slack",
|
|
219
|
+
"configuration": {
|
|
220
|
+
"appId": "A12345678",
|
|
221
|
+
"secrets": {
|
|
222
|
+
"botUserAuthToken": "SLACK_BOT_TOKEN_SECRET",
|
|
223
|
+
"signingSecret": "SLACK_SIGNING_SECRET",
|
|
224
|
+
"clientSecret": "SLACK_CLIENT_SECRET",
|
|
225
|
+
"verificationToken": "SLACK_VERIFICATION_TOKEN_SECRET"
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
#### Jira
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"id": "my-jira",
|
|
235
|
+
"type": "jira",
|
|
236
|
+
"configuration": {
|
|
237
|
+
"domain": "your-company.atlassian.net",
|
|
238
|
+
"email": "admin@company.com",
|
|
239
|
+
"secrets": { "apiKey": "JIRA_API_KEY_SECRET" },
|
|
240
|
+
"indexIssues": true,
|
|
241
|
+
"selectedProjectKeys": ["PROJ1", "PROJ2"],
|
|
242
|
+
"issueHistoryDays": 90
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
#### Zendesk
|
|
248
|
+
```json
|
|
249
|
+
{
|
|
250
|
+
"id": "my-zendesk",
|
|
251
|
+
"type": "zendesk",
|
|
252
|
+
"configuration": {
|
|
253
|
+
"subdomain": "your-company",
|
|
254
|
+
"email": "admin@company.com",
|
|
255
|
+
"secrets": { "apiToken": "ZENDESK_TOKEN_SECRET" }
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
#### GitHub
|
|
261
|
+
```json
|
|
262
|
+
{
|
|
263
|
+
"id": "my-github",
|
|
264
|
+
"type": "github",
|
|
265
|
+
"configuration": {
|
|
266
|
+
"appId": "123456",
|
|
267
|
+
"installationId": "789012",
|
|
268
|
+
"secrets": {
|
|
269
|
+
"privateKey": "GITHUB_PRIVATE_KEY_SECRET",
|
|
270
|
+
"webhookSecret": "GITHUB_WEBHOOK_SECRET"
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
#### Salesforce
|
|
277
|
+
```json
|
|
278
|
+
{
|
|
279
|
+
"id": "my-salesforce",
|
|
280
|
+
"type": "salesforce",
|
|
281
|
+
"configuration": {
|
|
282
|
+
"instanceDomain": "your-company.my.salesforce.com",
|
|
283
|
+
"secrets": {
|
|
284
|
+
"consumerKey": "SF_CONSUMER_KEY_SECRET",
|
|
285
|
+
"consumerSecret": "SF_CONSUMER_SECRET_SECRET"
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
#### HubSpot
|
|
292
|
+
```json
|
|
293
|
+
{
|
|
294
|
+
"id": "my-hubspot",
|
|
295
|
+
"type": "hubspot",
|
|
296
|
+
"configuration": {
|
|
297
|
+
"secrets": { "accessToken": "HUBSPOT_TOKEN_SECRET" }
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
#### Mail (SMTP)
|
|
303
|
+
```json
|
|
304
|
+
{
|
|
305
|
+
"id": "my-mail",
|
|
306
|
+
"type": "mail",
|
|
307
|
+
"configuration": {
|
|
308
|
+
"host": "smtp.gmail.com",
|
|
309
|
+
"port": 587,
|
|
310
|
+
"user": "noreply@company.com",
|
|
311
|
+
"encryption": "tls",
|
|
312
|
+
"secrets": { "password": "SMTP_PASSWORD_SECRET" }
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
#### Linear
|
|
318
|
+
```json
|
|
319
|
+
{
|
|
320
|
+
"id": "my-linear",
|
|
321
|
+
"type": "linear",
|
|
322
|
+
"configuration": {
|
|
323
|
+
"secrets": { "apiKey": "LINEAR_API_KEY_SECRET" },
|
|
324
|
+
"indexIssues": true,
|
|
325
|
+
"selectedTeamIds": ["team-id-1"],
|
|
326
|
+
"issueHistoryDays": 90
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
#### Freshdesk
|
|
332
|
+
```json
|
|
333
|
+
{
|
|
334
|
+
"id": "my-freshdesk",
|
|
335
|
+
"type": "freshdesk",
|
|
336
|
+
"configuration": {
|
|
337
|
+
"subdomain": "your-company",
|
|
338
|
+
"secrets": { "apiKey": "FRESHDESK_API_KEY_SECRET" },
|
|
339
|
+
"indexTickets": true,
|
|
340
|
+
"ticketHistoryDays": 90
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### Storage
|
|
346
|
+
|
|
347
|
+
#### Amazon S3
|
|
348
|
+
```json
|
|
349
|
+
{
|
|
350
|
+
"id": "my-s3",
|
|
351
|
+
"type": "s3",
|
|
352
|
+
"configuration": {
|
|
353
|
+
"bucket": "my-bucket",
|
|
354
|
+
"region": "us-east-1",
|
|
355
|
+
"secrets": {
|
|
356
|
+
"accessKeyId": "S3_ACCESS_KEY_SECRET",
|
|
357
|
+
"secretKey": "S3_SECRET_KEY_SECRET"
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
#### Google Cloud Storage
|
|
364
|
+
```json
|
|
365
|
+
{
|
|
366
|
+
"id": "my-gcs",
|
|
367
|
+
"type": "gcs",
|
|
368
|
+
"configuration": {
|
|
369
|
+
"bucket": "my-bucket",
|
|
370
|
+
"secrets": { "credentials": "GCS_CREDENTIALS_JSON_SECRET" }
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
#### Azure Blob Storage
|
|
376
|
+
```json
|
|
377
|
+
{
|
|
378
|
+
"id": "my-azure-blob",
|
|
379
|
+
"type": "azure_blob",
|
|
380
|
+
"configuration": {
|
|
381
|
+
"container": "my-container",
|
|
382
|
+
"secrets": { "connectionString": "AZURE_BLOB_CONNECTION_STRING_SECRET" }
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### Message Queues
|
|
388
|
+
|
|
389
|
+
#### Kafka
|
|
390
|
+
```json
|
|
391
|
+
{
|
|
392
|
+
"id": "my-kafka",
|
|
393
|
+
"type": "kafka",
|
|
394
|
+
"configuration": {
|
|
395
|
+
"connectionOptions": {
|
|
396
|
+
"bootstrapServers": "kafka1:9092,kafka2:9092",
|
|
397
|
+
"secrets": {
|
|
398
|
+
"saslUsername": "KAFKA_USER_SECRET",
|
|
399
|
+
"saslPassword": "KAFKA_PASSWORD_SECRET"
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### API Integrations
|
|
407
|
+
|
|
408
|
+
#### REST API (OpenAPI)
|
|
409
|
+
```json
|
|
410
|
+
{
|
|
411
|
+
"id": "my-api",
|
|
412
|
+
"type": "api",
|
|
413
|
+
"configuration": {
|
|
414
|
+
"discoveryOptions": {
|
|
415
|
+
"openApiSpecUrl": "https://api.example.com/openapi.json"
|
|
416
|
+
},
|
|
417
|
+
"exposeAsMcpServer": false
|
|
418
|
+
}
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
#### GraphQL
|
|
423
|
+
```json
|
|
424
|
+
{
|
|
425
|
+
"id": "my-graphql",
|
|
426
|
+
"type": "graphql",
|
|
427
|
+
"configuration": {
|
|
428
|
+
"connectionOptions": {
|
|
429
|
+
"baseUrl": "https://api.example.com/graphql"
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### AI Providers
|
|
436
|
+
|
|
437
|
+
#### OpenAI-Compatible
|
|
438
|
+
```json
|
|
439
|
+
{
|
|
440
|
+
"id": "my-llm",
|
|
441
|
+
"type": "openai_compatible",
|
|
442
|
+
"configuration": {
|
|
443
|
+
"baseUrl": "https://api.your-llm.com/v1",
|
|
444
|
+
"secrets": { "apiKey": "LLM_API_KEY_SECRET" },
|
|
445
|
+
"models": ["model-name-1", "model-name-2"]
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
#### AWS Bedrock
|
|
451
|
+
```json
|
|
452
|
+
{
|
|
453
|
+
"id": "my-bedrock",
|
|
454
|
+
"type": "bedrock",
|
|
455
|
+
"configuration": {
|
|
456
|
+
"region": "us-east-1",
|
|
457
|
+
"secrets": { "apiKey": "BEDROCK_API_KEY_SECRET" },
|
|
458
|
+
"models": ["anthropic.claude-3-sonnet"]
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
### Agent Protocols
|
|
464
|
+
|
|
465
|
+
#### MCP Server
|
|
466
|
+
```json
|
|
467
|
+
{
|
|
468
|
+
"id": "my-mcp",
|
|
469
|
+
"type": "mcp",
|
|
470
|
+
"configuration": {
|
|
471
|
+
"url": "https://mcp-server.example.com",
|
|
472
|
+
"authorizationHeader": "Bearer TOKEN"
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
#### A2A (Agent-to-Agent)
|
|
478
|
+
```json
|
|
479
|
+
{
|
|
480
|
+
"id": "my-a2a",
|
|
481
|
+
"type": "a2a",
|
|
482
|
+
"configuration": {
|
|
483
|
+
"url": "https://a2a-agent.example.com",
|
|
484
|
+
"authorizationHeader": "Bearer TOKEN"
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
```
|
|
488
|
+
|
|
489
|
+
### Observability
|
|
490
|
+
|
|
491
|
+
#### Datadog
|
|
492
|
+
```json
|
|
493
|
+
{
|
|
494
|
+
"id": "my-datadog",
|
|
495
|
+
"type": "datadog",
|
|
496
|
+
"configuration": {
|
|
497
|
+
"region": "us1",
|
|
498
|
+
"secrets": {
|
|
499
|
+
"apiKey": "DD_API_KEY_SECRET",
|
|
500
|
+
"appKey": "DD_APP_KEY_SECRET"
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
#### New Relic
|
|
507
|
+
```json
|
|
508
|
+
{
|
|
509
|
+
"id": "my-newrelic",
|
|
510
|
+
"type": "newrelic",
|
|
511
|
+
"configuration": {
|
|
512
|
+
"region": "worldwide",
|
|
513
|
+
"secrets": { "apiKey": "NR_API_KEY_SECRET" }
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
```
|
|
517
|
+
|
|
518
|
+
## Secrets Management
|
|
519
|
+
|
|
520
|
+
Integration secrets are stored securely in Squid. The values in the `secrets` fields are **secret names** (references), not the actual secret values. Set secret values in Squid Console > Your App > Secrets, or via the Secrets IAC API:
|
|
521
|
+
|
|
522
|
+
```
|
|
523
|
+
PUT /iac/applications/{appId}/secrets/{secretName}
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
```typescript
|
|
527
|
+
// Via ManagementClient
|
|
528
|
+
await mgmt.setSecret(appId, 'PG_PASSWORD_SECRET', 'actual-password-value');
|
|
529
|
+
```
|
|
@@ -17,6 +17,8 @@ This skill provides comprehensive, code-verified knowledge about developing Reac
|
|
|
17
17
|
|
|
18
18
|
**Key Point:** `@squidcloud/react` provides partial hooks for common operations. For any functionality not covered by a dedicated hook, use `useSquid()` to access the full Squid client SDK.
|
|
19
19
|
|
|
20
|
+
**IMPORTANT:** Never invoke LLMs directly (e.g., importing `openai` or `@anthropic-ai/sdk`). Use Squid AI hooks (`useAiAgent`, `useAiChat`) or `squid.ai().agent()`. For external service integrations (email, Slack, Jira, etc.), use Squid's built-in integrations - see `squid-integrations` skill.
|
|
21
|
+
|
|
20
22
|
## Installation
|
|
21
23
|
|
|
22
24
|
```bash
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@squidcloud/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.461",
|
|
4
4
|
"description": "The Squid CLI",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"node": ">=18.0.0"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@squidcloud/local-backend": "^1.0.
|
|
31
|
+
"@squidcloud/local-backend": "^1.0.461",
|
|
32
32
|
"adm-zip": "^0.5.16",
|
|
33
33
|
"copy-webpack-plugin": "^12.0.2",
|
|
34
34
|
"decompress": "^4.2.1",
|