@codeam/shared 2.60.66 → 2.60.68

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.d.mts CHANGED
@@ -327,8 +327,26 @@ declare function isHeadroomWrappable(agentId: string): boolean;
327
327
  * ubiquitous CLI for the tool → `cliEnv`; otherwise → `mcp`. A tool may
328
328
  * declare both.
329
329
  */
330
- type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion';
330
+ type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion' | 'azure_devops';
331
331
  type IntegrationAuthKind = 'oauth_redirect' | 'oauth_device' | 'api_key';
332
+ /**
333
+ * One user-entered field for an `api_key` integration (no browser OAuth — the
334
+ * user pastes credentials directly, e.g. a PAT + an org URL). The mobile form
335
+ * is driven entirely by this list, and `key` maps to a `BrokeredIntegrationToken`
336
+ * field the delivery `envMapping` references.
337
+ */
338
+ interface IntegrationApiKeyField {
339
+ /** Maps to a BrokeredIntegrationToken field (`accessToken`, `orgUrl`, …). */
340
+ key: 'accessToken' | 'orgUrl';
341
+ /** Form label. */
342
+ label: string;
343
+ /** Example / placeholder. */
344
+ placeholder?: string;
345
+ /** Masked (secret) input — true for the token, false for a plain URL. */
346
+ secret?: boolean;
347
+ /** Short help under the field (e.g. how to create the PAT). */
348
+ help?: string;
349
+ }
332
350
  type IntegrationHealth = 'ok' | 'expired' | 'revoked';
333
351
  /** stdio MCP server spec, executed as DATA by the CLI shim (`codeam mcp-run <id>`). */
334
352
  interface IntegrationMcpDelivery {
@@ -353,6 +371,8 @@ interface IntegrationDefinition {
353
371
  auth: {
354
372
  kind: IntegrationAuthKind;
355
373
  scopes?: string[];
374
+ /** For `kind: 'api_key'` — the credential fields the user pastes (no OAuth). */
375
+ fields?: IntegrationApiKeyField[];
356
376
  };
357
377
  delivery: IntegrationDelivery;
358
378
  }
@@ -386,6 +406,10 @@ interface BrokeredIntegrationToken {
386
406
  /** Slack workspace/team id (`T…`) — the Slack MCP server needs it alongside
387
407
  * the bot token (`SLACK_TEAM_ID`). Absent for non-Slack integrations. */
388
408
  teamId?: string;
409
+ /** Azure DevOps organization URL (`https://dev.azure.com/<org>`) — the ADO
410
+ * MCP server needs it alongside the PAT (`AZURE_DEVOPS_ORG_URL`). Absent for
411
+ * non-ADO integrations. */
412
+ orgUrl?: string;
389
413
  }
390
414
 
391
415
  /**
@@ -409,12 +433,15 @@ declare function isKnownIntegrationId(id: string): id is IntegrationId;
409
433
  * anything itself.
410
434
  *
411
435
  * `logoSvg` values are the OFFICIAL brand marks. jira/slack are the
412
- * multicolor originals (from the vendor). linear/sentry/notion are
413
- * simple-icons single-path marks that ship with a black fill by default —
436
+ * multicolor originals (from the vendor). Every other entry (the 6 live
437
+ * integrations' single-path marks + the whole COMING SOON set) is a
438
+ * simple-icons single-path mark that ships with a black fill by default —
414
439
  * that fill has been rewritten here to #FFFFFF so the mark reads on the
415
440
  * dark surfaces this catalog targets; consumers may re-tint via
416
441
  * `brandColor` (e.g. an SVG `<mask>`/currentColor wrapper) if a different
417
- * treatment is needed.
442
+ * treatment is needed. `pendo` + `amplitude` are NOT in simple-icons
443
+ * (brand-guideline restrictions) so they carry faithful hand-authored
444
+ * monochrome marks in the same 24×24 single-path shape.
418
445
  */
419
446
  interface IntegrationBranding {
420
447
  /** Stable id — registry ids ('jira') plus upcoming ones not yet in IntegrationId. */
@@ -429,7 +456,7 @@ interface IntegrationBranding {
429
456
  logoSvg: string;
430
457
  }
431
458
  declare const INTEGRATION_BRANDING: Record<string, IntegrationBranding>;
432
- declare const UPCOMING_INTEGRATION_IDS: readonly ["slack", "linear", "sentry", "notion"];
459
+ declare const UPCOMING_INTEGRATION_IDS: readonly ["gmail", "posthog", "clickup", "figma", "trello", "resend", "vercel", "supabase", "asana", "postman", "n8n", "stripe", "mixpanel", "pendo", "pagerduty", "amplitude", "datadog"];
433
460
  declare function getIntegrationBranding(id: string): IntegrationBranding | null;
434
461
 
435
462
  /**
@@ -1252,4 +1279,4 @@ type UserEventName = (typeof USER_EVENTS)[keyof typeof USER_EVENTS];
1252
1279
  */
1253
1280
  declare const PREVIEW_DETECT_PROMPT: string;
1254
1281
 
1255
- export { AGENT_REGISTRY, type AgentAuth, type AgentAuthKind, type AgentId, type AgentMetadata, type AgentModel, type AnswerResolvedEvent, type AwaitingAnswerEvent, type BeadsActionCommand, type BeadsActionKind, type BeadsActionPayload, type BeadsActionRequest, type BeadsActionType, type BeadsConfigureAction, type BeadsDependencyDto, type BeadsDependencyKind, type BeadsIngestPayload, type BeadsIssueDto, type BeadsIssueStatus, type BeadsMemoryDto, type BeadsProjectDto, type BeadsProvisioningPayload, type BeadsProvisioningStatus, type BeadsSnapshotDto, type BeadsStatus, type BeadsStatusState, type BeadsStatusSummary, type BlameLineWire, type BrokeredIntegrationToken, type ChromeStep, type ChromeToolType, type CommitEntryWire, DEFAULT_API_BASE_URL, DEV_API_BASE_URL, type EnvVar, type FileBlameEvent, type FileChangeStatus, type FileChangedEvent, type FileHistoryEvent, type FileReviewStatus, HEADROOM_BACKEND_ENV, HEADROOM_EXTRAS_BY_SURFACE, HEADROOM_MODELS, HEADROOM_PIP_COMPANIONS, HEADROOM_PROXY_PORT, HEARTBEAT_INTERVAL_MS_DEFAULT, HOUSE_AGENT_ID, HOUSE_AGENT_NAME, HOUSE_AGENT_PROVIDER, HOUSE_AGENT_SUBTITLE, HOUSE_AGENT_VENDOR, type HeadroomBudgetCommand, type HeadroomBudgetPeriod, type HeadroomBudgetUsage, type HeadroomKind, type HeadroomModelSpec, type HeadroomPythonRenderOpts, type HeadroomStatus, type HeadroomStep, type HeadroomSurface, type HunkLineType, INTEGRATION_BRANDING, INTEGRATION_REGISTRY, INTERNAL_TO_PUBLIC, type InputSuggestionChunk, type IntegrationAuthKind, type IntegrationBranding, type IntegrationDefinition, type IntegrationDelivery, type IntegrationHealth, type IntegrationId, type IntegrationMcpDelivery, type IntegrationStatus, type IntegrationsManifest, type IntegrationsManifestEntry, LINKED_AGENT_IDS, type LinkedAgentId, MODEL_CONTEXT_WINDOW, MODEL_PRICING, type ModelPricing, type NormalizedMessage, OBSERVER_BRIDGE_PORT, PREVIEW_DETECT_PROMPT, PROTOCOL_VERSION, PUBLIC_TO_INTERNAL, type PendingReviewHunkEvent, type PendingReviewHunkLine, type PreviewDetection, type PreviewErrorStage, type PreviewState, type PreviewStatus, type RemoteCommand, SSE_SOCKET_TIMEOUT_MS, type SelectPrompt, type StreamingChunkEvent, type StreamingChunkKind, TERMINAL_AGENT_PREFIX, UNKNOWN_MODEL_PRICING, UPCOMING_INTEGRATION_IDS, USER_EVENTS, type UserEventName, getAgent, getContextWindow, getEnabledAgents, getEnabledIntegrations, getIntegration, getIntegrationBranding, getPricing, headroomKindFor, headroomModelPredownloadScript, headroomPipPackage, headroomSnapshotDownloadLine, internalToPublic, isHeadroomWrappable, isKnownAgentId, isKnownIntegrationId, isKnownModel, isLinkedAgentId, normalizeAgentId, publicToInternal, renderToLines, resolveApiBaseUrl, toRemoteCommand };
1282
+ export { AGENT_REGISTRY, type AgentAuth, type AgentAuthKind, type AgentId, type AgentMetadata, type AgentModel, type AnswerResolvedEvent, type AwaitingAnswerEvent, type BeadsActionCommand, type BeadsActionKind, type BeadsActionPayload, type BeadsActionRequest, type BeadsActionType, type BeadsConfigureAction, type BeadsDependencyDto, type BeadsDependencyKind, type BeadsIngestPayload, type BeadsIssueDto, type BeadsIssueStatus, type BeadsMemoryDto, type BeadsProjectDto, type BeadsProvisioningPayload, type BeadsProvisioningStatus, type BeadsSnapshotDto, type BeadsStatus, type BeadsStatusState, type BeadsStatusSummary, type BlameLineWire, type BrokeredIntegrationToken, type ChromeStep, type ChromeToolType, type CommitEntryWire, DEFAULT_API_BASE_URL, DEV_API_BASE_URL, type EnvVar, type FileBlameEvent, type FileChangeStatus, type FileChangedEvent, type FileHistoryEvent, type FileReviewStatus, HEADROOM_BACKEND_ENV, HEADROOM_EXTRAS_BY_SURFACE, HEADROOM_MODELS, HEADROOM_PIP_COMPANIONS, HEADROOM_PROXY_PORT, HEARTBEAT_INTERVAL_MS_DEFAULT, HOUSE_AGENT_ID, HOUSE_AGENT_NAME, HOUSE_AGENT_PROVIDER, HOUSE_AGENT_SUBTITLE, HOUSE_AGENT_VENDOR, type HeadroomBudgetCommand, type HeadroomBudgetPeriod, type HeadroomBudgetUsage, type HeadroomKind, type HeadroomModelSpec, type HeadroomPythonRenderOpts, type HeadroomStatus, type HeadroomStep, type HeadroomSurface, type HunkLineType, INTEGRATION_BRANDING, INTEGRATION_REGISTRY, INTERNAL_TO_PUBLIC, type InputSuggestionChunk, type IntegrationApiKeyField, type IntegrationAuthKind, type IntegrationBranding, type IntegrationDefinition, type IntegrationDelivery, type IntegrationHealth, type IntegrationId, type IntegrationMcpDelivery, type IntegrationStatus, type IntegrationsManifest, type IntegrationsManifestEntry, LINKED_AGENT_IDS, type LinkedAgentId, MODEL_CONTEXT_WINDOW, MODEL_PRICING, type ModelPricing, type NormalizedMessage, OBSERVER_BRIDGE_PORT, PREVIEW_DETECT_PROMPT, PROTOCOL_VERSION, PUBLIC_TO_INTERNAL, type PendingReviewHunkEvent, type PendingReviewHunkLine, type PreviewDetection, type PreviewErrorStage, type PreviewState, type PreviewStatus, type RemoteCommand, SSE_SOCKET_TIMEOUT_MS, type SelectPrompt, type StreamingChunkEvent, type StreamingChunkKind, TERMINAL_AGENT_PREFIX, UNKNOWN_MODEL_PRICING, UPCOMING_INTEGRATION_IDS, USER_EVENTS, type UserEventName, getAgent, getContextWindow, getEnabledAgents, getEnabledIntegrations, getIntegration, getIntegrationBranding, getPricing, headroomKindFor, headroomModelPredownloadScript, headroomPipPackage, headroomSnapshotDownloadLine, internalToPublic, isHeadroomWrappable, isKnownAgentId, isKnownIntegrationId, isKnownModel, isLinkedAgentId, normalizeAgentId, publicToInternal, renderToLines, resolveApiBaseUrl, toRemoteCommand };
package/dist/index.d.ts CHANGED
@@ -327,8 +327,26 @@ declare function isHeadroomWrappable(agentId: string): boolean;
327
327
  * ubiquitous CLI for the tool → `cliEnv`; otherwise → `mcp`. A tool may
328
328
  * declare both.
329
329
  */
330
- type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion';
330
+ type IntegrationId = 'jira' | 'sentry' | 'linear' | 'slack' | 'notion' | 'azure_devops';
331
331
  type IntegrationAuthKind = 'oauth_redirect' | 'oauth_device' | 'api_key';
332
+ /**
333
+ * One user-entered field for an `api_key` integration (no browser OAuth — the
334
+ * user pastes credentials directly, e.g. a PAT + an org URL). The mobile form
335
+ * is driven entirely by this list, and `key` maps to a `BrokeredIntegrationToken`
336
+ * field the delivery `envMapping` references.
337
+ */
338
+ interface IntegrationApiKeyField {
339
+ /** Maps to a BrokeredIntegrationToken field (`accessToken`, `orgUrl`, …). */
340
+ key: 'accessToken' | 'orgUrl';
341
+ /** Form label. */
342
+ label: string;
343
+ /** Example / placeholder. */
344
+ placeholder?: string;
345
+ /** Masked (secret) input — true for the token, false for a plain URL. */
346
+ secret?: boolean;
347
+ /** Short help under the field (e.g. how to create the PAT). */
348
+ help?: string;
349
+ }
332
350
  type IntegrationHealth = 'ok' | 'expired' | 'revoked';
333
351
  /** stdio MCP server spec, executed as DATA by the CLI shim (`codeam mcp-run <id>`). */
334
352
  interface IntegrationMcpDelivery {
@@ -353,6 +371,8 @@ interface IntegrationDefinition {
353
371
  auth: {
354
372
  kind: IntegrationAuthKind;
355
373
  scopes?: string[];
374
+ /** For `kind: 'api_key'` — the credential fields the user pastes (no OAuth). */
375
+ fields?: IntegrationApiKeyField[];
356
376
  };
357
377
  delivery: IntegrationDelivery;
358
378
  }
@@ -386,6 +406,10 @@ interface BrokeredIntegrationToken {
386
406
  /** Slack workspace/team id (`T…`) — the Slack MCP server needs it alongside
387
407
  * the bot token (`SLACK_TEAM_ID`). Absent for non-Slack integrations. */
388
408
  teamId?: string;
409
+ /** Azure DevOps organization URL (`https://dev.azure.com/<org>`) — the ADO
410
+ * MCP server needs it alongside the PAT (`AZURE_DEVOPS_ORG_URL`). Absent for
411
+ * non-ADO integrations. */
412
+ orgUrl?: string;
389
413
  }
390
414
 
391
415
  /**
@@ -409,12 +433,15 @@ declare function isKnownIntegrationId(id: string): id is IntegrationId;
409
433
  * anything itself.
410
434
  *
411
435
  * `logoSvg` values are the OFFICIAL brand marks. jira/slack are the
412
- * multicolor originals (from the vendor). linear/sentry/notion are
413
- * simple-icons single-path marks that ship with a black fill by default —
436
+ * multicolor originals (from the vendor). Every other entry (the 6 live
437
+ * integrations' single-path marks + the whole COMING SOON set) is a
438
+ * simple-icons single-path mark that ships with a black fill by default —
414
439
  * that fill has been rewritten here to #FFFFFF so the mark reads on the
415
440
  * dark surfaces this catalog targets; consumers may re-tint via
416
441
  * `brandColor` (e.g. an SVG `<mask>`/currentColor wrapper) if a different
417
- * treatment is needed.
442
+ * treatment is needed. `pendo` + `amplitude` are NOT in simple-icons
443
+ * (brand-guideline restrictions) so they carry faithful hand-authored
444
+ * monochrome marks in the same 24×24 single-path shape.
418
445
  */
419
446
  interface IntegrationBranding {
420
447
  /** Stable id — registry ids ('jira') plus upcoming ones not yet in IntegrationId. */
@@ -429,7 +456,7 @@ interface IntegrationBranding {
429
456
  logoSvg: string;
430
457
  }
431
458
  declare const INTEGRATION_BRANDING: Record<string, IntegrationBranding>;
432
- declare const UPCOMING_INTEGRATION_IDS: readonly ["slack", "linear", "sentry", "notion"];
459
+ declare const UPCOMING_INTEGRATION_IDS: readonly ["gmail", "posthog", "clickup", "figma", "trello", "resend", "vercel", "supabase", "asana", "postman", "n8n", "stripe", "mixpanel", "pendo", "pagerduty", "amplitude", "datadog"];
433
460
  declare function getIntegrationBranding(id: string): IntegrationBranding | null;
434
461
 
435
462
  /**
@@ -1252,4 +1279,4 @@ type UserEventName = (typeof USER_EVENTS)[keyof typeof USER_EVENTS];
1252
1279
  */
1253
1280
  declare const PREVIEW_DETECT_PROMPT: string;
1254
1281
 
1255
- export { AGENT_REGISTRY, type AgentAuth, type AgentAuthKind, type AgentId, type AgentMetadata, type AgentModel, type AnswerResolvedEvent, type AwaitingAnswerEvent, type BeadsActionCommand, type BeadsActionKind, type BeadsActionPayload, type BeadsActionRequest, type BeadsActionType, type BeadsConfigureAction, type BeadsDependencyDto, type BeadsDependencyKind, type BeadsIngestPayload, type BeadsIssueDto, type BeadsIssueStatus, type BeadsMemoryDto, type BeadsProjectDto, type BeadsProvisioningPayload, type BeadsProvisioningStatus, type BeadsSnapshotDto, type BeadsStatus, type BeadsStatusState, type BeadsStatusSummary, type BlameLineWire, type BrokeredIntegrationToken, type ChromeStep, type ChromeToolType, type CommitEntryWire, DEFAULT_API_BASE_URL, DEV_API_BASE_URL, type EnvVar, type FileBlameEvent, type FileChangeStatus, type FileChangedEvent, type FileHistoryEvent, type FileReviewStatus, HEADROOM_BACKEND_ENV, HEADROOM_EXTRAS_BY_SURFACE, HEADROOM_MODELS, HEADROOM_PIP_COMPANIONS, HEADROOM_PROXY_PORT, HEARTBEAT_INTERVAL_MS_DEFAULT, HOUSE_AGENT_ID, HOUSE_AGENT_NAME, HOUSE_AGENT_PROVIDER, HOUSE_AGENT_SUBTITLE, HOUSE_AGENT_VENDOR, type HeadroomBudgetCommand, type HeadroomBudgetPeriod, type HeadroomBudgetUsage, type HeadroomKind, type HeadroomModelSpec, type HeadroomPythonRenderOpts, type HeadroomStatus, type HeadroomStep, type HeadroomSurface, type HunkLineType, INTEGRATION_BRANDING, INTEGRATION_REGISTRY, INTERNAL_TO_PUBLIC, type InputSuggestionChunk, type IntegrationAuthKind, type IntegrationBranding, type IntegrationDefinition, type IntegrationDelivery, type IntegrationHealth, type IntegrationId, type IntegrationMcpDelivery, type IntegrationStatus, type IntegrationsManifest, type IntegrationsManifestEntry, LINKED_AGENT_IDS, type LinkedAgentId, MODEL_CONTEXT_WINDOW, MODEL_PRICING, type ModelPricing, type NormalizedMessage, OBSERVER_BRIDGE_PORT, PREVIEW_DETECT_PROMPT, PROTOCOL_VERSION, PUBLIC_TO_INTERNAL, type PendingReviewHunkEvent, type PendingReviewHunkLine, type PreviewDetection, type PreviewErrorStage, type PreviewState, type PreviewStatus, type RemoteCommand, SSE_SOCKET_TIMEOUT_MS, type SelectPrompt, type StreamingChunkEvent, type StreamingChunkKind, TERMINAL_AGENT_PREFIX, UNKNOWN_MODEL_PRICING, UPCOMING_INTEGRATION_IDS, USER_EVENTS, type UserEventName, getAgent, getContextWindow, getEnabledAgents, getEnabledIntegrations, getIntegration, getIntegrationBranding, getPricing, headroomKindFor, headroomModelPredownloadScript, headroomPipPackage, headroomSnapshotDownloadLine, internalToPublic, isHeadroomWrappable, isKnownAgentId, isKnownIntegrationId, isKnownModel, isLinkedAgentId, normalizeAgentId, publicToInternal, renderToLines, resolveApiBaseUrl, toRemoteCommand };
1282
+ export { AGENT_REGISTRY, type AgentAuth, type AgentAuthKind, type AgentId, type AgentMetadata, type AgentModel, type AnswerResolvedEvent, type AwaitingAnswerEvent, type BeadsActionCommand, type BeadsActionKind, type BeadsActionPayload, type BeadsActionRequest, type BeadsActionType, type BeadsConfigureAction, type BeadsDependencyDto, type BeadsDependencyKind, type BeadsIngestPayload, type BeadsIssueDto, type BeadsIssueStatus, type BeadsMemoryDto, type BeadsProjectDto, type BeadsProvisioningPayload, type BeadsProvisioningStatus, type BeadsSnapshotDto, type BeadsStatus, type BeadsStatusState, type BeadsStatusSummary, type BlameLineWire, type BrokeredIntegrationToken, type ChromeStep, type ChromeToolType, type CommitEntryWire, DEFAULT_API_BASE_URL, DEV_API_BASE_URL, type EnvVar, type FileBlameEvent, type FileChangeStatus, type FileChangedEvent, type FileHistoryEvent, type FileReviewStatus, HEADROOM_BACKEND_ENV, HEADROOM_EXTRAS_BY_SURFACE, HEADROOM_MODELS, HEADROOM_PIP_COMPANIONS, HEADROOM_PROXY_PORT, HEARTBEAT_INTERVAL_MS_DEFAULT, HOUSE_AGENT_ID, HOUSE_AGENT_NAME, HOUSE_AGENT_PROVIDER, HOUSE_AGENT_SUBTITLE, HOUSE_AGENT_VENDOR, type HeadroomBudgetCommand, type HeadroomBudgetPeriod, type HeadroomBudgetUsage, type HeadroomKind, type HeadroomModelSpec, type HeadroomPythonRenderOpts, type HeadroomStatus, type HeadroomStep, type HeadroomSurface, type HunkLineType, INTEGRATION_BRANDING, INTEGRATION_REGISTRY, INTERNAL_TO_PUBLIC, type InputSuggestionChunk, type IntegrationApiKeyField, type IntegrationAuthKind, type IntegrationBranding, type IntegrationDefinition, type IntegrationDelivery, type IntegrationHealth, type IntegrationId, type IntegrationMcpDelivery, type IntegrationStatus, type IntegrationsManifest, type IntegrationsManifestEntry, LINKED_AGENT_IDS, type LinkedAgentId, MODEL_CONTEXT_WINDOW, MODEL_PRICING, type ModelPricing, type NormalizedMessage, OBSERVER_BRIDGE_PORT, PREVIEW_DETECT_PROMPT, PROTOCOL_VERSION, PUBLIC_TO_INTERNAL, type PendingReviewHunkEvent, type PendingReviewHunkLine, type PreviewDetection, type PreviewErrorStage, type PreviewState, type PreviewStatus, type RemoteCommand, SSE_SOCKET_TIMEOUT_MS, type SelectPrompt, type StreamingChunkEvent, type StreamingChunkKind, TERMINAL_AGENT_PREFIX, UNKNOWN_MODEL_PRICING, UPCOMING_INTEGRATION_IDS, USER_EVENTS, type UserEventName, getAgent, getContextWindow, getEnabledAgents, getEnabledIntegrations, getIntegration, getIntegrationBranding, getPricing, headroomKindFor, headroomModelPredownloadScript, headroomPipPackage, headroomSnapshotDownloadLine, internalToPublic, isHeadroomWrappable, isKnownAgentId, isKnownIntegrationId, isKnownModel, isLinkedAgentId, normalizeAgentId, publicToInternal, renderToLines, resolveApiBaseUrl, toRemoteCommand };
package/dist/index.js CHANGED
@@ -744,6 +744,53 @@ var INTEGRATION_REGISTRY = {
744
744
  }
745
745
  }
746
746
  }
747
+ },
748
+ azure_devops: {
749
+ id: "azure_devops",
750
+ name: "Azure DevOps",
751
+ icon: "azure_devops",
752
+ // LIVE — the FIRST api_key (PAT) integration. No OAuth: Azure DevOps OAuth
753
+ // apps are being sunset by Microsoft in favor of Entra ID, and PATs are the
754
+ // native, reliable ADO auth. The user pastes their org URL + a PAT; the
755
+ // backend validates against the ADO REST API and vaults it. No env secrets
756
+ // to configure (config-gated 503 doesn't apply — there's no OAuth app).
757
+ enabled: true,
758
+ auth: {
759
+ kind: "api_key",
760
+ fields: [
761
+ {
762
+ key: "orgUrl",
763
+ label: "Organization URL",
764
+ placeholder: "https://dev.azure.com/your-org",
765
+ secret: false,
766
+ help: "Your Azure DevOps organization URL \u2014 e.g. https://dev.azure.com/contoso"
767
+ },
768
+ {
769
+ key: "accessToken",
770
+ label: "Personal Access Token",
771
+ placeholder: "Paste your PAT",
772
+ secret: true,
773
+ help: "Create in Azure DevOps \u2192 User settings \u2192 Personal access tokens. Recommended scopes: Work Items (Read & Write), Code (Read), Build (Read), Project and Team (Read)."
774
+ }
775
+ ]
776
+ },
777
+ delivery: {
778
+ mcp: {
779
+ // The @tiberriver256 ADO MCP server (Node) in PAT mode: the PAT is fed
780
+ // via AZURE_DEVOPS_PAT (Basic auth) + the org via AZURE_DEVOPS_ORG_URL
781
+ // (env only, never argv). AZURE_DEVOPS_AUTH_METHOD=pat pins the PAT path
782
+ // (the alternative, azure-identity, uses DefaultAzureCredential and
783
+ // would ignore our token). Version PINNED; bump only after re-verifying
784
+ // headless.
785
+ command: "npx",
786
+ args: ["-y", "@tiberriver256/mcp-server-azure-devops@0.1.46"],
787
+ envMapping: {
788
+ AZURE_DEVOPS_PAT: "accessToken",
789
+ AZURE_DEVOPS_ORG_URL: "orgUrl"
790
+ },
791
+ staticEnv: { AZURE_DEVOPS_AUTH_METHOD: "pat" }
792
+ }
793
+ }
747
794
  }
748
795
  };
749
796
  function getEnabledIntegrations() {
@@ -801,9 +848,171 @@ var INTEGRATION_BRANDING = {
801
848
  tagline: "Docs, wikis & knowledge",
802
849
  brandColor: "#E8E7E4",
803
850
  logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Notion</title><path fill="#FFFFFF" d="M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z"/></svg>'
851
+ },
852
+ azure_devops: {
853
+ id: "azure_devops",
854
+ name: "Azure DevOps",
855
+ vendor: "Microsoft",
856
+ tagline: "Boards, Repos & Pipelines",
857
+ brandColor: "#0078D7",
858
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Azure DevOps</title><path fill="#FFFFFF" d="M0 8.877L2.247 5.91l8.405-3.416V.022l7.37 5.393L2.966 8.338v8.225L0 15.707zm24-4.45v14.651l-5.753 4.9-9.303-3.057v3.056l-5.978-7.416 15.057 1.798V5.415z"/></svg>'
859
+ },
860
+ gmail: {
861
+ id: "gmail",
862
+ name: "Gmail",
863
+ vendor: "Google",
864
+ tagline: "Read, search & send email",
865
+ brandColor: "#EA4335",
866
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Gmail</title><path fill="#FFFFFF" d="M24 5.457v13.909c0 .904-.732 1.636-1.636 1.636h-3.819V11.73L12 16.64l-6.545-4.91v9.273H1.636A1.636 1.636 0 0 1 0 19.366V5.457c0-2.023 2.309-3.178 3.927-1.964L5.455 4.64 12 9.548l6.545-4.91 1.528-1.145C21.69 2.28 24 3.434 24 5.457z"/></svg>'
867
+ },
868
+ posthog: {
869
+ id: "posthog",
870
+ name: "PostHog",
871
+ vendor: "PostHog",
872
+ tagline: "Product analytics & feature flags",
873
+ brandColor: "#1D4AFF",
874
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PostHog</title><path fill="#FFFFFF" d="M9.854 14.5 5 9.647.854 5.5A.5.5 0 0 0 0 5.854V8.44a.5.5 0 0 0 .146.353L5 13.647l.147.146L9.854 18.5l.146.147v-.049c.065.03.134.049.207.049h2.586a.5.5 0 0 0 .353-.854L9.854 14.5zm0-5-4-4a.487.487 0 0 0-.409-.144.515.515 0 0 0-.356.21.493.493 0 0 0-.089.288V8.44a.5.5 0 0 0 .147.353l9 9a.5.5 0 0 0 .853-.354v-2.585a.5.5 0 0 0-.146-.354l-5-5zm1-4a.5.5 0 0 0-.854.354V8.44a.5.5 0 0 0 .147.353l4 4a.5.5 0 0 0 .853-.354V9.854a.5.5 0 0 0-.146-.354l-4-4zm12.647 11.515a3.863 3.863 0 0 1-2.232-1.1l-4.708-4.707a.5.5 0 0 0-.854.354v6.585a.5.5 0 0 0 .5.5H23.5a.5.5 0 0 0 .5-.5v-.6c0-.276-.225-.497-.499-.532zm-5.394.032a.8.8 0 1 1 0-1.6.8.8 0 0 1 0 1.6zM.854 15.5a.5.5 0 0 0-.854.354v2.293a.5.5 0 0 0 .5.5h2.293c.222 0 .39-.135.462-.309a.493.493 0 0 0-.109-.545L.854 15.501zM5 14.647.854 10.5a.5.5 0 0 0-.854.353v2.586a.5.5 0 0 0 .146.353L4.854 18.5l.146.147h2.793a.5.5 0 0 0 .353-.854L5 14.647z"/></svg>'
875
+ },
876
+ clickup: {
877
+ id: "clickup",
878
+ name: "ClickUp",
879
+ vendor: "ClickUp",
880
+ tagline: "Tasks, docs & project management",
881
+ brandColor: "#7B68EE",
882
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>ClickUp</title><path fill="#FFFFFF" d="M2 18.439l3.69-2.828c1.961 2.56 4.044 3.739 6.363 3.739 2.307 0 4.33-1.166 6.203-3.704L22 18.405C19.298 22.065 15.941 24 12.053 24 8.178 24 4.788 22.078 2 18.439zM12.04 6.15l-6.568 5.66-3.036-3.52L12.055 0l9.543 8.296-3.05 3.509z"/></svg>'
883
+ },
884
+ figma: {
885
+ id: "figma",
886
+ name: "Figma",
887
+ vendor: "Figma",
888
+ tagline: "Designs, files & comments",
889
+ brandColor: "#F24E1E",
890
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Figma</title><path fill="#FFFFFF" d="M15.852 8.981h-4.588V0h4.588c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.491-4.49 4.491zM12.735 7.51h3.117c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-3.117V7.51zm0 1.471H8.148c-2.476 0-4.49-2.014-4.49-4.49S5.672 0 8.148 0h4.588v8.981zm-4.587-7.51c-1.665 0-3.019 1.355-3.019 3.019s1.354 3.02 3.019 3.02h3.117V1.471H8.148zm4.587 15.019H8.148c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h4.588v8.98zM8.148 8.981c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h3.117V8.981H8.148zM8.172 24c-2.489 0-4.515-2.014-4.515-4.49s2.014-4.49 4.49-4.49h4.588v4.441c0 2.503-2.047 4.539-4.563 4.539zm-.024-7.51a3.023 3.023 0 0 0-3.019 3.019c0 1.665 1.365 3.019 3.044 3.019 1.705 0 3.093-1.376 3.093-3.068v-2.97H8.148zm7.704 0h-.098c-2.476 0-4.49-2.014-4.49-4.49s2.014-4.49 4.49-4.49h.098c2.476 0 4.49 2.014 4.49 4.49s-2.014 4.49-4.49 4.49zm-.097-7.509c-1.665 0-3.019 1.355-3.019 3.019s1.355 3.019 3.019 3.019h.098c1.665 0 3.019-1.355 3.019-3.019s-1.355-3.019-3.019-3.019h-.098z"/></svg>'
891
+ },
892
+ trello: {
893
+ id: "trello",
894
+ name: "Trello",
895
+ vendor: "Atlassian",
896
+ tagline: "Boards, lists & cards",
897
+ brandColor: "#0052CC",
898
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Trello</title><path fill="#FFFFFF" d="M21.147 0H2.853A2.86 2.86 0 000 2.853v18.294A2.86 2.86 0 002.853 24h18.294A2.86 2.86 0 0024 21.147V2.853A2.86 2.86 0 0021.147 0zM10.34 17.287a.953.953 0 01-.953.953h-4a.954.954 0 01-.954-.953V5.38a.953.953 0 01.954-.953h4a.954.954 0 01.953.953zm9.233-5.467a.944.944 0 01-.953.947h-4a.947.947 0 01-.953-.947V5.38a.953.953 0 01.953-.953h4a.954.954 0 01.953.953z"/></svg>'
899
+ },
900
+ resend: {
901
+ id: "resend",
902
+ name: "Resend",
903
+ vendor: "Resend",
904
+ tagline: "Transactional email delivery",
905
+ brandColor: "#FFFFFF",
906
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Resend</title><path fill="#FFFFFF" d="M14.679 0c4.648 0 7.413 2.765 7.413 6.434s-2.765 6.434-7.413 6.434H12.33L24 24h-8.245l-8.88-8.44c-.636-.588-.93-1.273-.93-1.86 0-.831.587-1.565 1.713-1.883l4.574-1.224c1.737-.465 2.936-1.81 2.936-3.572 0-2.153-1.761-3.4-3.939-3.4H0V0z"/></svg>'
907
+ },
908
+ vercel: {
909
+ id: "vercel",
910
+ name: "Vercel",
911
+ vendor: "Vercel",
912
+ tagline: "Deployments, logs & projects",
913
+ brandColor: "#FFFFFF",
914
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Vercel</title><path fill="#FFFFFF" d="m12 1.608 12 20.784H0Z"/></svg>'
915
+ },
916
+ supabase: {
917
+ id: "supabase",
918
+ name: "Supabase",
919
+ vendor: "Supabase",
920
+ tagline: "Postgres, auth & storage",
921
+ brandColor: "#3FCF8E",
922
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Supabase</title><path fill="#FFFFFF" d="M11.9 1.036c-.015-.986-1.26-1.41-1.874-.637L.764 12.05C-.33 13.427.65 15.455 2.409 15.455h9.579l.113 7.51c.014.985 1.259 1.408 1.873.636l9.262-11.653c1.093-1.375.113-3.403-1.645-3.403h-9.642z"/></svg>'
923
+ },
924
+ asana: {
925
+ id: "asana",
926
+ name: "Asana",
927
+ vendor: "Asana",
928
+ tagline: "Tasks, projects & workflows",
929
+ brandColor: "#F06A6A",
930
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Asana</title><path fill="#FFFFFF" d="M18.78 12.653c-2.882 0-5.22 2.336-5.22 5.22s2.338 5.22 5.22 5.22 5.22-2.34 5.22-5.22-2.336-5.22-5.22-5.22zm-13.56 0c-2.88 0-5.22 2.337-5.22 5.22s2.338 5.22 5.22 5.22 5.22-2.338 5.22-5.22-2.336-5.22-5.22-5.22zm12-6.525c0 2.883-2.337 5.22-5.22 5.22-2.882 0-5.22-2.337-5.22-5.22 0-2.88 2.338-5.22 5.22-5.22 2.883 0 5.22 2.34 5.22 5.22z"/></svg>'
931
+ },
932
+ postman: {
933
+ id: "postman",
934
+ name: "Postman",
935
+ vendor: "Postman",
936
+ tagline: "APIs, collections & environments",
937
+ brandColor: "#FF6C37",
938
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Postman</title><path fill="#FFFFFF" d="M13.527.099C6.955-.744.942 3.9.099 10.473c-.843 6.572 3.8 12.584 10.373 13.428 6.573.843 12.587-3.801 13.428-10.374C24.744 6.955 20.101.943 13.527.099zm2.471 7.485a.855.855 0 0 0-.593.25l-4.453 4.453-.307-.307-.643-.643c4.389-4.376 5.18-4.418 5.996-3.753zm-4.863 4.861l4.44-4.44a.62.62 0 1 1 .847.903l-4.699 4.125-.588-.588zm.33.694l-1.1.238a.06.06 0 0 1-.067-.032.06.06 0 0 1 .01-.073l.645-.645.512.512zm-2.803-.459l1.172-1.172.879.878-1.979.426a.074.074 0 0 1-.085-.039.072.072 0 0 1 .013-.093zm-3.646 6.058a.076.076 0 0 1-.069-.083.077.077 0 0 1 .022-.046h.002l.946-.946 1.222 1.222-2.123-.147zm2.425-1.256a.228.228 0 0 0-.117.256l.203.865a.125.125 0 0 1-.211.117h-.003l-.934-.934-.294-.295 3.762-3.758 1.82-.393.874.874c-1.255 1.102-2.971 2.201-5.1 3.268zm5.279-3.428h-.002l-.839-.839 4.699-4.125a.952.952 0 0 0 .119-.127c-.148 1.345-2.029 3.245-3.977 5.091zm3.657-6.46l-.003-.002a1.822 1.822 0 0 1 2.459-2.684l-1.61 1.613a.119.119 0 0 0 0 .169l1.247 1.247a1.817 1.817 0 0 1-2.093-.343zm2.578 0a1.714 1.714 0 0 1-.271.218h-.001l-1.207-1.207 1.533-1.533c.661.72.637 1.832-.054 2.522zM18.855 6.05a.143.143 0 0 0-.053.157.416.416 0 0 1-.053.45.14.14 0 0 0 .023.197.141.141 0 0 0 .084.03.14.14 0 0 0 .106-.05.691.691 0 0 0 .087-.751.138.138 0 0 0-.194-.033z"/></svg>'
939
+ },
940
+ n8n: {
941
+ id: "n8n",
942
+ name: "n8n",
943
+ vendor: "n8n",
944
+ tagline: "Workflow automation & webhooks",
945
+ brandColor: "#EA4B71",
946
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>n8n</title><path fill="#FFFFFF" d="M21.4737 5.6842c-1.1772 0-2.1663.8051-2.4468 1.8947h-2.8955c-1.235 0-2.289.893-2.492 2.111l-.1038.623a1.263 1.263 0 0 1-1.246 1.0555H11.289c-.2805-1.0896-1.2696-1.8947-2.4468-1.8947s-2.1663.8051-2.4467 1.8947H4.973c-.2805-1.0896-1.2696-1.8947-2.4468-1.8947C1.1311 9.4737 0 10.6047 0 12s1.131 2.5263 2.5263 2.5263c1.1772 0 2.1663-.8051 2.4468-1.8947h1.4223c.2804 1.0896 1.2696 1.8947 2.4467 1.8947 1.1772 0 2.1663-.8051 2.4468-1.8947h1.0008a1.263 1.263 0 0 1 1.2459 1.0555l.1038.623c.203 1.218 1.257 2.111 2.492 2.111h.3692c.2804 1.0895 1.2696 1.8947 2.4468 1.8947 1.3952 0 2.5263-1.131 2.5263-2.5263s-1.131-2.5263-2.5263-2.5263c-1.1772 0-2.1664.805-2.4468 1.8947h-.3692a1.263 1.263 0 0 1-1.246-1.0555l-.1037-.623A2.52 2.52 0 0 0 13.9607 12a2.52 2.52 0 0 0 .821-1.4794l.1038-.623a1.263 1.263 0 0 1 1.2459-1.0555h2.8955c.2805 1.0896 1.2696 1.8947 2.4468 1.8947 1.3952 0 2.5263-1.131 2.5263-2.5263s-1.131-2.5263-2.5263-2.5263m0 1.2632a1.263 1.263 0 0 1 1.2631 1.2631 1.263 1.263 0 0 1-1.2631 1.2632 1.263 1.263 0 0 1-1.2632-1.2632 1.263 1.263 0 0 1 1.2632-1.2631M2.5263 10.7368A1.263 1.263 0 0 1 3.7895 12a1.263 1.263 0 0 1-1.2632 1.2632A1.263 1.263 0 0 1 1.2632 12a1.263 1.263 0 0 1 1.2631-1.2632m6.3158 0A1.263 1.263 0 0 1 10.1053 12a1.263 1.263 0 0 1-1.2632 1.2632A1.263 1.263 0 0 1 7.579 12a1.263 1.263 0 0 1 1.2632-1.2632m10.1053 3.7895a1.263 1.263 0 0 1 1.2631 1.2632 1.263 1.263 0 0 1-1.2631 1.2631 1.263 1.263 0 0 1-1.2632-1.2631 1.263 1.263 0 0 1 1.2632-1.2632"/></svg>'
947
+ },
948
+ stripe: {
949
+ id: "stripe",
950
+ name: "Stripe",
951
+ vendor: "Stripe",
952
+ tagline: "Payments, customers & invoices",
953
+ brandColor: "#635BFF",
954
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Stripe</title><path fill="#FFFFFF" d="M13.976 9.15c-2.172-.806-3.356-1.426-3.356-2.409 0-.831.683-1.305 1.901-1.305 2.227 0 4.515.858 6.09 1.631l.89-5.494C18.252.975 15.697 0 12.165 0 9.667 0 7.589.654 6.104 1.872 4.56 3.147 3.757 4.992 3.757 7.218c0 4.039 2.467 5.76 6.476 7.219 2.585.92 3.445 1.574 3.445 2.583 0 .98-.84 1.545-2.354 1.545-1.875 0-4.965-.921-6.99-2.109l-.9 5.555C5.175 22.99 8.385 24 11.714 24c2.641 0 4.843-.624 6.328-1.813 1.664-1.305 2.525-3.236 2.525-5.732 0-4.128-2.524-5.851-6.594-7.305h.003z"/></svg>'
955
+ },
956
+ mixpanel: {
957
+ id: "mixpanel",
958
+ name: "Mixpanel",
959
+ vendor: "Mixpanel",
960
+ tagline: "Product & user analytics",
961
+ brandColor: "#7856FF",
962
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Mixpanel</title><path fill="#FFFFFF" d="M6.967 9.996h3.053c-.763-.477-1.048-1.145-1.431-2.384L7.443 3.366C6.919 1.458 6.49.551 4.39.551H.004v1.145h.621c1.286 0 1.431.477 1.814 1.908L3.44 7.326c.524 1.814 1.337 2.67 3.53 2.67h-.003Zm7.06 0h3.053c2.194 0 2.956-.86 3.484-2.67l1.001-3.722c.382-1.431.57-1.908 1.814-1.908H24V.551h-4.34c-2.146 0-2.576.86-3.053 2.815l-1.145 4.246c-.384 1.286-.673 1.907-1.435 2.384Zm-4.007 4.008h4.007V9.996H10.02v4.008ZM0 23.449h4.39c2.1 0 2.529-.907 3.053-2.815l1.146-4.246c.383-1.239.668-1.907 1.431-2.384H6.967c-2.194 0-3.007.86-3.531 2.67l-1.001 3.722c-.383 1.431-.524 1.907-1.814 1.907H0v1.146Zm19.65 0h4.343v-1.146h-.622c-1.239 0-1.431-.476-1.814-1.907l-1.001-3.722c-.524-1.814-1.286-2.67-3.483-2.67h-3.046c.762.477 1.041 1.098 1.424 2.384l1.145 4.246c.477 1.955.907 2.815 3.054 2.815Z"/></svg>'
963
+ },
964
+ pendo: {
965
+ id: "pendo",
966
+ name: "Pendo",
967
+ vendor: "Pendo",
968
+ tagline: "Product analytics & user guides",
969
+ brandColor: "#EC2588",
970
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Pendo</title><path fill="#FFFFFF" d="M3 3h13.5A4.5 4.5 0 0 1 21 7.5v9A4.5 4.5 0 0 1 16.5 21H3V3Zm5 4v10h3v-3h2.2a3.5 3.5 0 0 0 0-7H8Zm3 2h1.9a1.5 1.5 0 0 1 0 3H11V9Z"/></svg>'
971
+ },
972
+ pagerduty: {
973
+ id: "pagerduty",
974
+ name: "PagerDuty",
975
+ vendor: "PagerDuty",
976
+ tagline: "Incidents, alerts & on-call",
977
+ brandColor: "#06AC38",
978
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>PagerDuty</title><path fill="#FFFFFF" d="M16.965 1.18C15.085.164 13.769 0 10.683 0H3.73v14.55h6.926c2.743 0 4.8-.164 6.61-1.37 1.975-1.303 3.004-3.484 3.004-6.007 0-2.716-1.262-4.896-3.305-5.994zm-5.5 10.326h-4.21V3.113l3.977-.027c3.62-.028 5.43 1.234 5.43 4.128 0 3.113-2.248 4.292-5.197 4.292zM3.73 17.61h3.525V24H3.73Z"/></svg>'
979
+ },
980
+ amplitude: {
981
+ id: "amplitude",
982
+ name: "Amplitude",
983
+ vendor: "Amplitude",
984
+ tagline: "Digital analytics & experiments",
985
+ brandColor: "#1F6FFF",
986
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Amplitude</title><path fill="#FFFFFF" d="M1 21h2V11H1v10Zm4 0h2V6H5v15Zm4 0h2V3H9v18Zm4 0h2V6h-2v15Zm4 0h2v-8h-2v8Zm4 0h2v-5h-2v5Z"/></svg>'
987
+ },
988
+ datadog: {
989
+ id: "datadog",
990
+ name: "Datadog",
991
+ vendor: "Datadog",
992
+ tagline: "Metrics, logs & monitoring",
993
+ brandColor: "#632CA6",
994
+ logoSvg: '<svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><title>Datadog</title><path fill="#FFFFFF" d="M19.57 17.04l-1.997-1.316-1.665 2.782-1.937-.567-1.706 2.604.087.82 9.274-1.71-.538-5.794zm-8.649-2.498l1.488-.204c.241.108.409.15.697.223.45.117.97.23 1.741-.16.18-.088.553-.43.704-.625l6.096-1.106.622 7.527-10.444 1.882zm11.325-2.712l-.602.115L20.488 0 .789 2.285l2.427 19.693 2.306-.334c-.184-.263-.471-.581-.96-.989-.68-.564-.44-1.522-.039-2.127.53-1.022 3.26-2.322 3.106-3.956-.056-.594-.15-1.368-.702-1.898-.02.22.017.432.017.432s-.227-.289-.34-.683c-.112-.15-.2-.199-.319-.4-.085.233-.073.503-.073.503s-.186-.437-.216-.807c-.11.166-.137.48-.137.48s-.241-.69-.186-1.062c-.11-.323-.436-.965-.343-2.424.6.421 1.924.321 2.44-.439.171-.251.288-.939-.086-2.293-.24-.868-.835-2.16-1.066-2.651l-.028.02c.122.395.374 1.223.47 1.625.293 1.218.372 1.642.234 2.204-.116.488-.397.808-1.107 1.165-.71.358-1.653-.514-1.713-.562-.69-.55-1.224-1.447-1.284-1.883-.062-.477.275-.763.445-1.153-.243.07-.514.192-.514.192s.323-.334.722-.624c.165-.109.262-.178.436-.323a9.762 9.762 0 0 0-.456.003s.42-.227.855-.392c-.318-.014-.623-.003-.623-.003s.937-.419 1.678-.727c.509-.208 1.006-.147 1.286.257.367.53.752.817 1.569.996.501-.223.653-.337 1.284-.509.554-.61.99-.688.99-.688s-.216.198-.274.51c.314-.249.66-.455.66-.455s-.134.164-.259.426l.03.043c.366-.22.797-.394.797-.394s-.123.156-.268.358c.277-.002.838.012 1.056.037 1.285.028 1.552-1.374 2.045-1.55.618-.22.894-.353 1.947.68.903.888 1.609 2.477 1.259 2.833-.294.295-.874-.115-1.516-.916a3.466 3.466 0 0 1-.716-1.562 1.533 1.533 0 0 0-.497-.85s.23.51.23.96c0 .246.03 1.165.424 1.68-.039.076-.057.374-.1.43-.458-.554-1.443-.95-1.604-1.067.544.445 1.793 1.468 2.273 2.449.453.927.186 1.777.416 1.997.065.063.976 1.197 1.15 1.767.306.994.019 2.038-.381 2.685l-1.117.174c-.163-.045-.273-.068-.42-.153.08-.143.241-.5.243-.572l-.063-.111c-.348.492-.93.97-1.414 1.245-.633.359-1.363.304-1.838.156-1.348-.415-2.623-1.327-2.93-1.566 0 0-.01.191.048.234.34.383 1.119 1.077 1.872 1.56l-1.605.177.759 5.908c-.337.048-.39.071-.757.124-.325-1.147-.946-1.895-1.624-2.332-.599-.384-1.424-.47-2.214-.314l-.05.059a2.851 2.851 0 0 1 1.863.444c.654.413 1.181 1.481 1.375 2.124.248.822.42 1.7-.248 2.632-.476.662-1.864 1.028-2.986.237.3.481.705.876 1.25.95.809.11 1.577-.03 2.106-.574.452-.464.69-1.434.628-2.456l.714-.104.258 1.834 11.827-1.424zM15.05 6.848c-.034.075-.085.125-.007.37l.004.014.013.032.032.073c.14.287.295.558.552.696.067-.011.136-.019.207-.023.242-.01.395.028.492.08.009-.048.01-.119.005-.222-.018-.364.072-.982-.626-1.308-.264-.122-.634-.084-.757.068a.302.302 0 0 1 .058.013c.186.066.06.13.027.207m1.958 3.392c-.092-.05-.52-.03-.821.005-.574.068-1.193.267-1.328.372-.247.191-.135.523.047.66.511.382.96.638 1.432.575.29-.038.546-.497.728-.914.124-.288.124-.598-.058-.698m-5.077-2.942c.162-.154-.805-.355-1.556.156-.554.378-.571 1.187-.041 1.646.053.046.096.078.137.104a4.77 4.77 0 0 1 1.396-.412c.113-.125.243-.345.21-.745-.044-.542-.455-.456-.146-.749"/></svg>'
804
995
  }
805
996
  };
806
- var UPCOMING_INTEGRATION_IDS = ["slack", "linear", "sentry", "notion"];
997
+ var UPCOMING_INTEGRATION_IDS = [
998
+ "gmail",
999
+ "posthog",
1000
+ "clickup",
1001
+ "figma",
1002
+ "trello",
1003
+ "resend",
1004
+ "vercel",
1005
+ "supabase",
1006
+ "asana",
1007
+ "postman",
1008
+ "n8n",
1009
+ "stripe",
1010
+ "mixpanel",
1011
+ "pendo",
1012
+ "pagerduty",
1013
+ "amplitude",
1014
+ "datadog"
1015
+ ];
807
1016
  function getIntegrationBranding(id) {
808
1017
  return INTEGRATION_BRANDING[id] ?? null;
809
1018
  }