@squidcloud/cli 1.0.487 → 1.0.489
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 +69 -19
- package/dist/resources/claude/skills/squid-development/SKILL.md +8 -8
- package/dist/resources/claude/skills/squid-development/reference/admin.md +30 -0
- package/dist/resources/claude/skills/squid-development/reference/ai.md +372 -10
- package/dist/resources/claude/skills/squid-development/reference/api.md +46 -1
- package/dist/resources/claude/skills/squid-development/reference/backend.md +57 -1
- package/dist/resources/claude/skills/squid-development/reference/chat-widget.md +1 -1
- package/dist/resources/claude/skills/squid-development/reference/client.md +75 -4
- package/dist/resources/claude/skills/squid-development/reference/console.md +6 -1
- package/dist/resources/claude/skills/squid-development/reference/databases.md +48 -0
- package/dist/resources/claude/skills/squid-development/reference/openai.md +1 -1
- package/dist/resources/claude/skills/squid-development/reference/security.md +74 -1
- package/dist/resources/claude/skills/squid-integrations/reference/connector-functions.md +1 -1
- package/dist/resources/claude/skills/squid-react-development/SKILL.md +21 -4
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -32174,7 +32174,8 @@ module.exports = function toBuffer(data, encoding) {
|
|
|
32174
32174
|
var __webpack_unused_export__;
|
|
32175
32175
|
|
|
32176
32176
|
__webpack_unused_export__ = ({ value: true });
|
|
32177
|
-
__webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = exports.h3 = exports.VF = __webpack_unused_export__ = exports.F3 = exports.eS = exports.Eh = exports.dH = exports.mz = exports.Pq = exports.lZ = exports.I1 = exports.xV = exports.Kq = exports.oL = exports.hp = exports.AI_PROVIDER_TYPES = __webpack_unused_export__ = void 0;
|
|
32177
|
+
__webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = exports.h3 = exports.VF = __webpack_unused_export__ = exports.F3 = exports.eS = exports.Eh = exports.dH = exports.mz = exports.Pq = exports.lZ = exports.I1 = exports.xV = exports.Kq = exports.oL = exports.hp = exports.MD = exports.AI_PROVIDER_TYPES = __webpack_unused_export__ = void 0;
|
|
32178
|
+
__webpack_unused_export__ = isFileCapableProviderType;
|
|
32178
32179
|
__webpack_unused_export__ = isVendorAiChatModelName;
|
|
32179
32180
|
__webpack_unused_export__ = isAiEmbeddingsModelName;
|
|
32180
32181
|
__webpack_unused_export__ = isIntegrationEmbeddingModelSpec;
|
|
@@ -32204,29 +32205,40 @@ exports.AI_PROVIDER_TYPES = [
|
|
|
32204
32205
|
'vertex',
|
|
32205
32206
|
'external', // This is a technicality, referring to user-defined providers.
|
|
32206
32207
|
];
|
|
32208
|
+
/**
|
|
32209
|
+
* The AI providers that support file upload operations, and so are the only ones that resolve a
|
|
32210
|
+
* pre-uploaded file id. Declared as the list, with the type derived from it, so the two cannot drift:
|
|
32211
|
+
* a provider added to one is added to both.
|
|
32212
|
+
*/
|
|
32213
|
+
exports.MD = [
|
|
32214
|
+
'openai',
|
|
32215
|
+
'gemini',
|
|
32216
|
+
'anthropic',
|
|
32217
|
+
'grok',
|
|
32218
|
+
];
|
|
32219
|
+
/**
|
|
32220
|
+
* True when the provider resolves pre-uploaded file ids. Every other provider — the integration-backed
|
|
32221
|
+
* and user-defined ones, which report no vendor identity of their own — ignores `fileIds` outright, so
|
|
32222
|
+
* for them the ids are inert rather than wrong.
|
|
32223
|
+
*/
|
|
32224
|
+
function isFileCapableProviderType(type) {
|
|
32225
|
+
return exports.MD.includes(type);
|
|
32226
|
+
}
|
|
32207
32227
|
/**
|
|
32208
32228
|
* Public OpenAI chat model names (active models only).
|
|
32209
32229
|
* @category AI
|
|
32210
32230
|
*/
|
|
32211
|
-
exports.hp = [
|
|
32212
|
-
'gpt-5.4-mini',
|
|
32213
|
-
'gpt-5.4-nano',
|
|
32214
|
-
'gpt-5.5',
|
|
32215
|
-
'gpt-5.5-pro',
|
|
32216
|
-
'gpt-5.6-sol',
|
|
32217
|
-
'gpt-5.6-terra',
|
|
32218
|
-
'gpt-5.6-luna',
|
|
32219
|
-
];
|
|
32231
|
+
exports.hp = ['gpt-5.5-pro', 'gpt-5.6-sol', 'gpt-5.6-terra', 'gpt-5.6-luna'];
|
|
32220
32232
|
/**
|
|
32221
32233
|
* Public Gemini chat model names (active models only).
|
|
32222
32234
|
* @category AI
|
|
32223
32235
|
*/
|
|
32224
|
-
exports.oL = ['gemini-3.1-pro', 'gemini-3.
|
|
32236
|
+
exports.oL = ['gemini-3.1-pro', 'gemini-3.7-flash', 'gemini-3.5-flash-lite'];
|
|
32225
32237
|
/**
|
|
32226
32238
|
* Public Grok chat model names (active models only).
|
|
32227
32239
|
* @category AI
|
|
32228
32240
|
*/
|
|
32229
|
-
exports.Kq = ['grok-4.
|
|
32241
|
+
exports.Kq = ['grok-4.6', 'grok-4-1-fast-reasoning', 'grok-4-1-fast-non-reasoning'];
|
|
32230
32242
|
/**
|
|
32231
32243
|
* Public Anthropic chat model names (active models only).
|
|
32232
32244
|
* @category AI
|
|
@@ -34735,7 +34747,24 @@ onStagingStarted) {
|
|
|
34735
34747
|
activeJobIds.add(jobId);
|
|
34736
34748
|
const { finalStatus, timedOut } = await waitForJobCompletion(client, jobId, batchLabel, timeoutMillis, isInterrupted);
|
|
34737
34749
|
activeJobIds.delete(jobId);
|
|
34738
|
-
|
|
34750
|
+
// A duplicate found by the deferred extraction pass (a presigned object's bytes are first hashed
|
|
34751
|
+
// there) reports as a failed file with `errorCode: 'DUPLICATE_CONTENT'` — the same skip a
|
|
34752
|
+
// staging-time rejection is, so fold it into the duplicates the summary reconciles by name.
|
|
34753
|
+
const deferredDuplicates = (finalStatus?.files ?? [])
|
|
34754
|
+
.filter(file => file.errorCode === 'DUPLICATE_CONTENT')
|
|
34755
|
+
.map(file => file.title);
|
|
34756
|
+
if (deferredDuplicates.length > 0) {
|
|
34757
|
+
console.log(`${batchLabel}: ${deferredDuplicates.length} file(s) skipped as content this knowledge base already holds.`);
|
|
34758
|
+
}
|
|
34759
|
+
return {
|
|
34760
|
+
batchIndex,
|
|
34761
|
+
batchCount,
|
|
34762
|
+
jobId,
|
|
34763
|
+
uploadFailures,
|
|
34764
|
+
duplicates: [...duplicates, ...deferredDuplicates],
|
|
34765
|
+
finalStatus,
|
|
34766
|
+
timedOut,
|
|
34767
|
+
};
|
|
34739
34768
|
}
|
|
34740
34769
|
/** Mints presigned upload URLs for a batch, chunking requests to the server's per-call cap. */
|
|
34741
34770
|
async function createUploadUrlsForBatch(client, fileNames) {
|
|
@@ -34832,7 +34861,13 @@ async function cancelActiveJobs(client, activeJobIds) {
|
|
|
34832
34861
|
}
|
|
34833
34862
|
function printProgress(batchLabel, jobId, status) {
|
|
34834
34863
|
const { counts, state } = status;
|
|
34835
|
-
|
|
34864
|
+
// Deferred duplicates sit inside counts.failed but are skips to the caller (see printSummary) — shown
|
|
34865
|
+
// raw, the live line says "1 failed" on a job the summary then reports as 0 failed, 1 skipped.
|
|
34866
|
+
const duplicateSkips = status.files.filter(file => file.errorCode === 'DUPLICATE_CONTENT').length;
|
|
34867
|
+
const failed = Math.max(0, counts.failed - duplicateSkips);
|
|
34868
|
+
const skippedPart = duplicateSkips > 0 ? `, ${duplicateSkips} skipped` : '';
|
|
34869
|
+
const line = `${batchLabel} job ${jobId}: ${counts.finalized}/${counts.files} finalized, ` +
|
|
34870
|
+
`${failed} failed${skippedPart}, state=${state}`;
|
|
34836
34871
|
process.stdout.write(`\r${line}${' '.repeat(Math.max(0, PROGRESS_LINE_WIDTH - line.length))}`);
|
|
34837
34872
|
}
|
|
34838
34873
|
/** Narrows a `FileUploadResult` to one that uploaded successfully (has a `stagedObjectKey`, no `error`). */
|
|
@@ -34855,7 +34890,13 @@ async function printDryRun(dir, files, batchSize) {
|
|
|
34855
34890
|
}
|
|
34856
34891
|
function printSummary(totalFiles, results) {
|
|
34857
34892
|
const totalFinalized = results.reduce((sum, result) => sum + (result.finalStatus?.counts.finalized ?? 0), 0);
|
|
34858
|
-
|
|
34893
|
+
// Deferred duplicates sit inside counts.failed but are reported on the "Skipped as duplicate" line
|
|
34894
|
+
// (runBatch folds them into `duplicates`), so subtract them here or the two lines double-count.
|
|
34895
|
+
const totalServerFailed = results.reduce((sum, result) => {
|
|
34896
|
+
const failed = result.finalStatus?.counts.failed ?? 0;
|
|
34897
|
+
const duplicateFailures = (result.finalStatus?.files ?? []).filter(file => file.errorCode === 'DUPLICATE_CONTENT').length;
|
|
34898
|
+
return sum + Math.max(0, failed - duplicateFailures);
|
|
34899
|
+
}, 0);
|
|
34859
34900
|
const totalUploadFailed = results.reduce((sum, result) => sum + result.uploadFailures.length, 0);
|
|
34860
34901
|
const totalDuplicates = results.reduce((sum, result) => sum + result.duplicates.length, 0);
|
|
34861
34902
|
const totalStagedButFailed = results.reduce((sum, result) => sum + (result.stagingError ? (result.stagedCount ?? 0) : 0), 0);
|
|
@@ -34890,9 +34931,15 @@ function printSummary(totalFiles, results) {
|
|
|
34890
34931
|
const state = result.timedOut
|
|
34891
34932
|
? `${result.finalStatus?.state ?? 'unknown'} (timed out waiting)`
|
|
34892
34933
|
: result.finalStatus?.state;
|
|
34893
|
-
|
|
34934
|
+
// Deferred duplicates are excluded from BOTH the failed count and the per-file failure lines: they
|
|
34935
|
+
// are already named on the "skipped" lines below, and a clean idempotent re-run must not read as
|
|
34936
|
+
// "0/1 finalized, 1 failed" while exiting 0 — the CLI tells one story about a skip.
|
|
34937
|
+
const deferredDuplicateCount = result.finalStatus?.files.filter(file => file.errorCode === 'DUPLICATE_CONTENT').length ?? 0;
|
|
34938
|
+
const failedCount = Math.max(0, (result.finalStatus?.counts.failed ?? 0) - deferredDuplicateCount);
|
|
34939
|
+
console.log(` ${label}: job ${result.jobId} — ${result.finalStatus?.counts.finalized ?? 0}/${result.finalStatus?.counts.files ?? 0} finalized, ${failedCount} failed [${state}]`);
|
|
34894
34940
|
// Per-file failure reasons, straight from the job-status response (BulkIngestionFileStatus).
|
|
34895
|
-
const failedFiles = result.finalStatus?.files.filter(file => file.status === 'failed') ??
|
|
34941
|
+
const failedFiles = result.finalStatus?.files.filter(file => file.status === 'failed' && file.errorCode !== 'DUPLICATE_CONTENT') ??
|
|
34942
|
+
[];
|
|
34896
34943
|
for (const failedFile of failedFiles) {
|
|
34897
34944
|
console.log(` - ${failedFile.title}: ${failedFile.errorMessage ?? 'unknown error'}`);
|
|
34898
34945
|
}
|
|
@@ -34908,7 +34955,10 @@ function hasBatchFailed(result) {
|
|
|
34908
34955
|
return true;
|
|
34909
34956
|
if (!result.finalStatus)
|
|
34910
34957
|
return true;
|
|
34911
|
-
|
|
34958
|
+
// Deferred duplicates are skips, not failures: an idempotent re-run over an already-ingested
|
|
34959
|
+
// directory must exit 0, exactly as it does when staging rejects the duplicates synchronously.
|
|
34960
|
+
const duplicateFailures = result.finalStatus.files.filter(file => file.errorCode === 'DUPLICATE_CONTENT').length;
|
|
34961
|
+
return result.finalStatus.state !== 'completed' || result.finalStatus.counts.failed > duplicateFailures;
|
|
34912
34962
|
}
|
|
34913
34963
|
/** Recursively walks `dir`, skipping symlinks and dotfiles/dot-directories, filtered to `extensions`. */
|
|
34914
34964
|
async function collectFiles(dir, extensions) {
|
|
@@ -40729,7 +40779,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"name":"seek-bzip","version":"1.0.6",
|
|
|
40729
40779
|
(module) {
|
|
40730
40780
|
|
|
40731
40781
|
"use strict";
|
|
40732
|
-
module.exports = /*#__PURE__*/JSON.parse('{"name":"@squidcloud/cli","version":"1.0.
|
|
40782
|
+
module.exports = /*#__PURE__*/JSON.parse('{"name":"@squidcloud/cli","version":"1.0.489","description":"The Squid CLI","main":"dist/index.js","scripts":{"start":"node dist/index.js","start-ts":"ts-node -r tsconfig-paths/register src/index.ts","prebuild":"rimraf dist","build":"webpack --mode=production","build:dev":"webpack --mode=development","lint":"eslint","link":"npm run build && chmod 755 dist/index.js && npm link","watch":"webpack --watch","deploy":"npm run build && npm pack --silent | xargs -I {} mv {} package.tgz && npm install -g package.tgz && rm -rf package.tgz","publish:public":"npm run build && npm publish --access public"},"files":["dist/**/*"],"bin":{"squid":"dist/index.js"},"keywords":[],"author":"","license":"ISC","engines":{"node":">=18.0.0"},"dependencies":{"@squidcloud/local-backend":"^1.0.489","adm-zip":"^0.5.16","copy-webpack-plugin":"^14.0.0","decompress":"^4.2.1","logpipes":"^1.11.0","nodemon":"^3.1.9","terser-webpack-plugin":"^5.5.0","ts-loader":"^9.5.1","ts-node":"^10.9.2","tsconfig-paths":"^4.2.0","tsconfig-paths-webpack-plugin":"^4.1.0","webpack":"^5.106.2","zip-webpack-plugin":"^4.0.1"},"devDependencies":{"@types/adm-zip":"^0.5.7","@types/decompress":"^4.2.7","terminal-link":"^3.0.0"}}');
|
|
40733
40783
|
|
|
40734
40784
|
/***/ }
|
|
40735
40785
|
|
|
@@ -21,15 +21,15 @@ Squid is a backend-as-a-service platform that provides:
|
|
|
21
21
|
|
|
22
22
|
## Feature-Specific Guidance
|
|
23
23
|
|
|
24
|
-
- **[client.md](reference/client.md)** → client SDK, initialization, setup, auth, login, tokens, OAuth, appId, region, environmentId, apiKey, authProvider, getToken, setAuthProvider, Squid client, frontend, collection, executeFunction, executeFunctionWithHeaders, getWebhookUrl, externalAuth, saveAuthCode, getAccessToken, storage, uploadFile, downloadUrl, queues, produce, consume, distributed locks, acquireLock, withLock, web, aiSearch, getUrlContent, createShortUrl, jobs, getJob, awaitJob, observability, metrics, reportMetric, queryMetrics, notifications, publishNotification, observeNotifications
|
|
25
|
-
- **[console.md](reference/console.md)** → Squid Console, web UI, organizations, applications, AI Studio, knowledge bases, integrations, monitoring, logs, API keys, secrets, testing, debugging, profile settings, management API keys
|
|
26
|
-
- **[ai.md](reference/ai.md)** → AI agents, chat, ask, askWithAnnotations, askAsync, askWithVoiceResponse, transcribeAndChat, transcribeAndAsk, knowledge bases, RAG, embeddings, image generation, audio, transcription, text-to-speech, TTS, connectedAgents, connectedIntegrations, connectedKnowledgeBases, @aiFunction, @secureAiAgent, @secureAiQuery, memory, memoryOptions, voiceOptions, OpenAI, Anthropic, Gemini, Grok, DALL-E, Whisper, MCP, @mcpServer, @mcpTool, executeAiQuery, executeAiApiCall, extraction, createPdf, upsert agent, listAgents, spreadsheet understanding, querySpreadsheetsWithAi, searchMode, keyword search, xlsx, csv
|
|
24
|
+
- **[client.md](reference/client.md)** → client SDK, initialization, setup, auth, login, tokens, OAuth, appId, region, environmentId, apiKey, authProvider, getToken, setAuthProvider, Squid client, frontend, collection, executeFunction, executeFunctionWithHeaders, getWebhookUrl, externalAuth, saveAuthCode, getAccessToken, storage, uploadFile, downloadUrl, queues, produce, consume, distributed locks, acquireLock, withLock, web, aiSearch, allowedDomains, getUrlContent, createShortUrl, jobs, getJob, awaitJob, startJob, completeJob, failJob, events, squid.events(), emit, TriggerEvent, LangGraph, squid.langGraph(), invoke, invokeAsync, resume, getState, deleteThread, observability, metrics, reportMetric, queryMetrics, setMetricAnnotations, notifications, publishNotification, observeNotifications
|
|
25
|
+
- **[console.md](reference/console.md)** → Squid Console, web UI, organizations, applications, AI Studio, knowledge bases, knowledge graph toggle, integrations, monitoring, logs, API keys, secrets, testing, debugging, profile settings, management API keys
|
|
26
|
+
- **[ai.md](reference/ai.md)** → AI agents, chat, ask, askWithAnnotations, askAsync, askWithVoiceResponse, transcribeAndChat, transcribeAndAsk, knowledge bases, RAG, embeddings, image generation, audio, transcription, text-to-speech, TTS, connectedAgents, connectedIntegrations, connectedKnowledgeBases, @aiFunction, @secureAiAgent, @secureAiQuery, memory, memoryOptions, metricAnnotations, voiceOptions, OpenAI, Anthropic, Gemini, Grok, DALL-E, Whisper, MCP, @mcpServer, @mcpTool, agent as MCP server, updateMcpServer, generateMcpDescriptions, agent API key, executeAiQuery, executeAiApiCall, extraction, createPdf, upsert agent, listAgents, listChatModels, listFunctions, spreadsheet understanding, querySpreadsheetsWithAi, searchMode, keyword search, xlsx, csv, grep, literal scan, knowledge graph, GraphRAG, graphRag, graph search, queryGraph, getGraphStatus, rebuildGraph, exploreGraph, searchWithGraphContext, graphOptions, graphFilter, underConcept, entityTypes, queryKnowledgeGraph, bulk ingestion, bulkUpsertContexts, createBulkUploadUrls, observeBulkIngestionJob, listContextsPage, generateMetadataFieldDescriptions
|
|
27
27
|
- **[chat-widget.md](reference/chat-widget.md)** → AI chat widget, @squidcloud/react-chat-widget, squid-chat-widget, squid-chat-widget-with-fab-button, embeddable chat, custom API webhook, AI query mode, chain-of-thought, status updates, session management, agentContext, memoryOptions, squid-ai-custom-api-url, squid-ai-agent-chat-options, FAB button, theming, CSS variables, localization, RTL, menu items slots, suggested prompts, voice transcription, error formatting, authentication, squid-auth-provider, onChange events
|
|
28
|
-
- **[databases.md](reference/databases.md)** → collections, documents, queries, subscriptions, snapshots, insert, update, delete, CRUD, real-time, dereference, pagination, transactions, query operators, eq, neq, gt, gte, lt, lte, like, in, nin, arrayIncludesSome, arrayIncludesAll, sortBy, limit, join queries, OR queries, @trigger, native queries, SQL, MongoDB, Elasticsearch, incrementInPath, decrementInPath, watch changes, doc(), projectFields, field projection, __docId__, __id
|
|
29
|
-
- **[backend.md](reference/backend.md)** → SquidService, @executable, @webhook, @trigger, TriggerRequest, @scheduler, @limits, rate limiting, quotas, decorators, backend functions, WebhookRequest, CronExpression, cron, file handling, SquidFile, getUserAuth, isAuthenticated, assertIsAuthenticated, createWebhookResponse, this.squid, this.secrets, @clientConnectionStateHandler, @onQueueMessage, QueueMessageRequest, queue message handler, server-side queue consumer, CLI, squid init, squid start, squid deploy, squid build, project structure, multiple services, service architecture, squidInject, cross-service communication
|
|
30
|
-
- **[security.md](reference/security.md)** → security rules, @secureDatabase, @secureCollection, @secureTopic, @secureStorage, @secureApi, @secureNativeQuery, @secureAiQuery, @secureAiAgent, @secureDistributedLock, @secureGraphQL, QueryContext, MutationContext, isSubqueryOf, affectsPath, permissions, authorization, row-level security, role-based access
|
|
31
|
-
- **[admin.md](reference/admin.md)** → ManagementClient, management API keys, organizations, applications, programmatic management, CI/CD, automation, integrations admin, secrets admin, upsertIntegration, discoverDataConnectionSchema, testDataConnection, createOrganization, createApplication
|
|
32
|
-
- **[api.md](reference/api.md)** → API, REST API, HTTP endpoints, API reference, Agent API, AI Audio API, AI Image API, KnowledgeBase API, Matchmaking API, Web Utilities API, Database API, Extraction API
|
|
28
|
+
- **[databases.md](reference/databases.md)** → collections, documents, queries, subscriptions, snapshots, insert, update, delete, CRUD, real-time, dereference, pagination, transactions, query operators, eq, neq, gt, gte, lt, lte, like, in, nin, arrayIncludesSome, arrayIncludesAll, sortBy, limit, join queries, OR queries, @trigger, native queries, SQL, MongoDB, Elasticsearch, incrementInPath, decrementInPath, watch changes, doc(), docId, docIds, query.delete(), delete by query, projectFields, field projection, __docId__, __id
|
|
29
|
+
- **[backend.md](reference/backend.md)** → SquidService, @executable, @webhook, @trigger, TriggerRequest, @scheduler, @limits, rate limiting, quotas, decorators, backend functions, WebhookRequest, CronExpression, cron, file handling, SquidFile, getUserAuth, isAuthenticated, assertIsAuthenticated, createWebhookResponse, this.squid, getSquid, getPassiveSquid, this.secrets, @clientConnectionStateHandler, @onQueueMessage, QueueMessageRequest, queue message handler, server-side queue consumer, @eventHandler, event handler, workspace, CLI, squid init, squid start, squid deploy, squid build, squid kb-upload, printBundle, project structure, multiple services, service architecture, squidInject, cross-service communication
|
|
30
|
+
- **[security.md](reference/security.md)** → security rules, @secureDatabase, @secureCollection, @publicCollection, public read, @secureTopic, @secureStorage, @secureApi, @secureNativeQuery, @secureAiQuery, @secureAiAgent, @secureLangGraph, @secureDistributedLock, @secureGraphQL, QueryContext, MutationContext, SecureLangGraphContext, isSubqueryOf, affectsPath, permissions, authorization, row-level security, role-based access
|
|
31
|
+
- **[admin.md](reference/admin.md)** → ManagementClient, management API keys, organizations, applications, programmatic management, CI/CD, automation, integrations admin, secrets admin, connectors admin, squid.admin().connectors(), attach connector, appConnectors, upsertIntegration, discoverDataConnectionSchema, testDataConnection, createOrganization, createApplication
|
|
32
|
+
- **[api.md](reference/api.md)** → API, REST API, HTTP endpoints, API reference, Agent API, AiSettings API, AiFunction API, AI Audio API, AI Image API, KnowledgeBase API, Matchmaking API, Web Utilities API, Database API, Extraction API, apiKeyAuth, agentApiKeyAuth, x-squid-agent-api-key, memoryOptions, memoryId, memoryMode
|
|
33
33
|
- **[openai.md](reference/openai.md)** → OpenAI, code interpreter, verbosity, reasoning models, o1, o3, gpt-5, DALL-E, Whisper, TTS, voice options, structured output, file upload
|
|
34
34
|
- **[connectors.md](reference/connectors.md)** → connectors, integrations, IntegrationType, postgres, mongo, auth0, s3, kafka, salesforce, essentials connector, built-in connector, @squidcloud/slack-client, @squidcloud/jira-client, @squidcloud/github-client, @squidcloud/salesforce-client, @squidcloud/freshdesk-client, @squidcloud/linear-client, @squidcloud/mail-client, @squidcloud/google-calendar-client, @squidcloud/google-drive-client, @squidcloud/teams-client, @squidcloud/sharepoint-client, @squidcloud/servicenow_csm-client, @squidcloud/jira-jsm-client, SquidSlackClient, SquidJiraClient, SquidGitHubClient, sendMail, sendMessage, searchIssues, createIssue, connector SDK
|
|
35
35
|
- **Integrations** → See `squid-integrations` skill for full catalog, connector AI functions, SDK methods, and configuration
|
|
@@ -5,6 +5,7 @@ This document covers programmatic management of Squid organizations, application
|
|
|
5
5
|
## Contents
|
|
6
6
|
- ManagementClient
|
|
7
7
|
- Admin Integrations
|
|
8
|
+
- Admin Connectors
|
|
8
9
|
- Admin Secrets
|
|
9
10
|
|
|
10
11
|
## ManagementClient
|
|
@@ -204,6 +205,35 @@ const openApiSchema = await integrations.discoverOpenApiSchema('my-api', {
|
|
|
204
205
|
const fileSchema = await integrations.discoverOpenApiSchemaFromFile('my-api');
|
|
205
206
|
```
|
|
206
207
|
|
|
208
|
+
### Admin - Connectors
|
|
209
|
+
|
|
210
|
+
Attach and detach **app-level (integration-less) connectors**. Unlike integrations, these carry no
|
|
211
|
+
per-connector configuration record — attaching one adds it to the application's `appConnectors` list
|
|
212
|
+
and (re)deploys its bundle. Any configuration the connector needs comes in out of band, e.g. via
|
|
213
|
+
application secrets.
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
const connectors = squid.admin().connectors();
|
|
217
|
+
|
|
218
|
+
// List the connectors explicitly attached to the app
|
|
219
|
+
const attached = await connectors.list(); // Array<ConnectorId>
|
|
220
|
+
|
|
221
|
+
// Attach (idempotent - attaching an already-attached connector is a no-op)
|
|
222
|
+
await connectors.connect('slack');
|
|
223
|
+
|
|
224
|
+
// Detach
|
|
225
|
+
await connectors.disconnect('slack');
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
`ConnectorId` is one of: `bitbucket`, `confluence`, `cotomi`, `essentials`, `freshdesk`, `github`,
|
|
229
|
+
`google_calendar`, `google_drive`, `hubspot`, `sharepoint`, `jira`, `jira_jsm`, `linear`, `mail`,
|
|
230
|
+
`onedrive`, `outlook`, `salesforce`, `servicenow_csm`, `slack`, `teams`, `ticketmind_companion`,
|
|
231
|
+
`zendesk`.
|
|
232
|
+
|
|
233
|
+
**Connectors vs integrations:** use `squid.admin().integrations()` when the connection needs
|
|
234
|
+
configuration (credentials, a connection string, an OAuth app). Use `connectors()` for connectors the
|
|
235
|
+
app just needs turned on.
|
|
236
|
+
|
|
207
237
|
### Admin - Secrets
|
|
208
238
|
|
|
209
239
|
```typescript
|