replicas-engine 0.1.678 → 0.1.680

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.
@@ -1621,6 +1621,8 @@ replicas computer record stop
1621
1621
  replicas media upload /tmp/demo.mp4 --name "Demo recording"
1622
1622
  \`\`\`
1623
1623
 
1624
+ For any external destination, continue with the required delivery flow in \`MEDIA.md\`.
1625
+
1624
1626
  ## Command reference
1625
1627
 
1626
1628
  ### \`replicas computer info\`
@@ -1755,7 +1757,7 @@ replicas computer record start /tmp/walkthrough.mp4
1755
1757
  replicas computer record stop
1756
1758
  replicas media upload /tmp/walkthrough.mp4 --name "Walkthrough recording"
1757
1759
  \`\`\`
1758
- Then embed the printed \`![\u2026](\u2026)\` line in your chat reply. See \`MEDIA.md\`.
1760
+ Then embed the printed \`![\u2026](\u2026)\` line in your chat reply and follow \`MEDIA.md\` for any external destination.
1759
1761
 
1760
1762
  ## Failure modes
1761
1763
 
@@ -1955,16 +1957,9 @@ gh pr review 123 --approve
1955
1957
  gh pr review 123 --request-changes --body "Changes needed"
1956
1958
  \`\`\`
1957
1959
 
1958
- ## Image Uploads in PRs
1960
+ ## Media in GitHub workflows
1959
1961
 
1960
- GitHub does NOT have a public API for uploading images to PRs/issues. When you need to include images:
1961
- - Do NOT use placeholder image URLs
1962
- - Do NOT commit screenshots as files to the repository
1963
- - Run \`replicas media upload <image> --name "<display name>" --share\` and put the printed \`Forge embed\` Markdown in the PR body or comment
1964
- - For a self-contained HTML report, run \`replicas media upload <page.html> --name "<display name>" --access organization\` and put the printed \`Forge link\` Markdown in the PR body or comment. Organization members who are already signed in open it directly; others sign in and return to the page
1965
- - For video, embed a shared poster image linked to the recording's **View in Replicas** URL; GitHub does not reliably render externally hosted video inline
1966
- - Treat the public URL as an opt-in bearer capability; revoke it with \`replicas media revoke <media-id>\` only when the user asks or the media should stop rendering \u2014 revoking breaks embeds already posted on the PR
1967
- - If you were triggered from Slack, also upload the image to the Slack thread so the user can see it directly
1962
+ Media delivery is owned by \`references/MEDIA.md\`. Read its GitHub section before adding screenshots, recordings, diagrams, or HTML reports to a pull request, issue, review comment, or commit; it covers the Replicas upload, GitHub's inline fallback, and the required **View in Replicas** link.
1968
1963
  `;
1969
1964
  var GITHUB_ABILITY = {
1970
1965
  label: "GitHub",
@@ -2026,7 +2021,7 @@ await replicas.gitlab.request('/projects/group%2Frepo/pipelines', {
2026
2021
 
2027
2022
  ## Descriptions and media
2028
2023
 
2029
- API updates replace the entire merge request description, so always preserve the required Replicas footer and co-author trailers. For media, first run \`replicas media upload\` as documented in \`MEDIA.md\`; use GitLab's project uploads endpoint only when a native repository-protected embed is required.
2024
+ API updates replace the entire merge request description, so always preserve the required Replicas footer and co-author trailers. Media delivery is owned by \`references/MEDIA.md\`; read its GitLab section before adding media so the original bytes are uploaded to Replicas and GitLab and the dashboard link remains secondary.
2030
2025
  `;
2031
2026
  var GITLAB_ABILITY = {
2032
2027
  label: "GitLab",
@@ -2091,6 +2086,8 @@ await replicas.linear.graphql({
2091
2086
  \`\`\`
2092
2087
 
2093
2088
  Search with \`containsIgnoreCase: $query\` filters, for example on both \`title\` and \`description\`. Batch independent queries with \`Promise.all\` to save round trips.
2089
+
2090
+ For screenshots, recordings, diagrams, or other media, read \`references/MEDIA.md\` before adding it to an issue or comment. It is the single source of truth for uploading the Replicas copy and the raw file to Linear; a dashboard link alone is not an inline attachment.
2094
2091
  `;
2095
2092
  var LINEAR_ABILITY = {
2096
2093
  label: "Linear",
@@ -2102,18 +2099,19 @@ var LINEAR_ABILITY = {
2102
2099
 
2103
2100
  // ../shared/src/default-skills/replicas-agent/abilities/media.ts
2104
2101
  var SECTION6 = `### Media
2105
- Share screenshots, screen recordings, generated diagrams, audio clips, and self-contained HTML pages through Replicas and external messages.
2102
+ Deliver screenshots, screen recordings, generated diagrams, audio clips, and self-contained HTML pages to the Replicas dashboard and, when applicable, inline in the destination workflow.
2106
2103
 
2107
2104
  **Reference:** \`references/MEDIA.md\`
2108
2105
 
2109
2106
  Use this when:
2107
+ - You are about to run \`replicas media upload\`; this reference owns the complete Replicas-first, destination-second workflow
2110
2108
  - You produce a screenshot, recording, generated image, or audio clip the user should see
2111
2109
  - You produce a self-contained HTML report that should be linked from a pull request
2112
2110
  - You record video output (browser automation, screen capture) \u2014 including the recommended aspect ratio and FPS
2113
- - You need to embed media in a Slack/Linear/GitHub message AND keep a referenceable copy in the Replicas dashboard`;
2111
+ - You need to embed media in a Slack/Linear/GitHub/GitLab message AND keep a referenceable copy in the Replicas dashboard`;
2114
2112
  var REFERENCE6 = `# Media (Screenshots, Recordings, Audio, HTML)
2115
2113
 
2116
- This guide covers how to share screenshots, screen recordings, generated diagrams, audio clips, and self-contained HTML pages through Replicas and external surfaces (Slack, Linear, GitHub).
2114
+ This is the single source of truth for delivering screenshots, screen recordings, generated diagrams, audio clips, and self-contained HTML pages through Replicas and external surfaces (Slack, Linear, GitHub, GitLab).
2117
2115
 
2118
2116
  ## Prerequisites
2119
2117
 
@@ -2123,12 +2121,32 @@ The \`replicas\` CLI is pre-installed and authenticated in your workspace. No ad
2123
2121
 
2124
2122
  Upload to Replicas in these cases \u2014 and **only** these cases:
2125
2123
 
2126
- 1. **Media you produce.** Any screenshot, screen recording, generated diagram, or audio clip you create that the user might want to see. Upload before doing anything else with the file (analyzing, deleting, sending elsewhere). This applies even when you're also sending the file to Slack, Linear, GitHub, etc.
2124
+ 1. **Media you produce.** Any screenshot, screen recording, generated diagram, audio clip, or HTML page you create that the user might want to see. Upload before doing anything else with the file (analyzing, deleting, sending elsewhere). This applies even when you're also sending the file to Slack, Linear, GitHub, or GitLab.
2127
2125
  2. **Files the user explicitly asks you to upload.** If the user sends or points at a file (image, video, audio, HTML) and asks you to upload it, run \`replicas media upload\`. Otherwise leave it alone \u2014 files in the workspace the user did not ask about should not be auto-uploaded as media.
2128
- 3. **Anything you plan to share externally (Slack, Linear, GitHub, etc.).** Upload to Replicas *in addition to* the platform's native upload. Never as a replacement.
2126
+ 3. **Anything you plan to share externally (Slack, Linear, GitHub, GitLab, etc.).** Upload to Replicas *in addition to* the platform's destination upload. Never as a replacement.
2129
2127
 
2130
2128
  If none of these apply, don't upload.
2131
2129
 
2130
+ ## Required delivery contract
2131
+
2132
+ \`replicas media upload\` is always the first delivery action. When the current task has an external destination, every other delivery step follows only after that command succeeds. For every file:
2133
+
2134
+ 1. First, run \`replicas media upload\` with the original file. Do not begin any destination upload until the command succeeds. This creates the canonical dashboard copy and prints the authenticated chat embed plus a per-file dashboard link.
2135
+ 2. Include the printed embed line in the Replicas chat reply, followed by the matching **View in Replicas** link. HTML uses its printed page link instead of an image embed.
2136
+ 3. Identify every destination in the task and attempt to upload the same original bytes there. Use the destination's inline representation from the table below; do not replace the file with a Replicas link.
2137
+ 4. Put the **View in Replicas** dashboard link next to the destination embed as a secondary link.
2138
+ 5. Check each destination response. If a native upload is unavailable or fails, say so explicitly and keep the dashboard link; never claim that a link is an inline upload.
2139
+
2140
+ | Destination | Required file delivery | Inline result |
2141
+ |---|---|---|
2142
+ | Replicas dashboard/chat | \`replicas media upload\` | Printed \`![\u2026](\u2026)\` line in chat |
2143
+ | Slack | \`files.getUploadURLExternal\` \u2192 raw-byte POST \u2192 \`files.completeUploadExternal\` | Uploaded file in the channel or thread |
2144
+ | Linear | \`fileUpload\` mutation \u2192 presigned upload \u2192 issue/comment mutation | Returned \`assetUrl\` in Markdown |
2145
+ | GitLab | Project \`/uploads\` endpoint with the original bytes | Returned GitLab Markdown |
2146
+ | GitHub | No supported attachment API; use a Replicas public forge share for the inline image or video poster | Printed Forge embed, linked to the recording when needed |
2147
+
2148
+ The dashboard link is the subtitle and jump-back path. It is never a substitute for the destination upload.
2149
+
2132
2150
  ## Uploading to Replicas
2133
2151
 
2134
2152
  \`\`\`bash
@@ -2185,7 +2203,7 @@ replicas media upload screenshot.png --name "Login page" --access public
2185
2203
  | \`https://api.tryreplicas.com/v1/media/<id>\` (inside \`![\u2026](\u2026)\`) | Authenticated API redirect to a presigned blob \u2014 requires the Replicas chat session | **Only** in the Replicas chat reply. Nowhere else. |
2186
2204
  | \`https://tryreplicas.com/organizations/<organization-id>/media/<media-id>\` | Organization-only page printed by \`--access organization\` | Pull requests and other places where every viewer belongs to the Replicas organization. |
2187
2205
  | \`https://api.tryreplicas.com/v1/media/public/<id>/<token>\` | Opt-in public bearer URL printed by \`--access public\` or \`--share\` | GitHub embeds for image, video, or audio media. |
2188
- | \`https://tryreplicas.com/workspaces/<workspace-id>?media=<media-id>\` | Authenticated dashboard deep link that opens the media file in the workspace | Everywhere external \u2014 Slack, GitHub, Linear, PR bodies, comments, emails. |
2206
+ | \`https://tryreplicas.com/workspaces/<workspace-id>?media=<media-id>\` | Authenticated dashboard deep link that opens the media file in the workspace | Everywhere external: Slack, GitHub, GitLab, Linear, PR bodies, comments, emails. |
2189
2207
 
2190
2208
  ### NEVER link the API redirect URL outside the Replicas chat reply
2191
2209
 
@@ -2195,6 +2213,7 @@ This rule has no exceptions:
2195
2213
  - \u274C Never paste it in a Slack message \u2014 upload the actual bytes via the 3-step \`files.getUploadURLExternal\` \u2192 POST bytes \u2192 \`files.completeUploadExternal\` flow instead (see below).
2196
2214
  - \u274C Never paste it in a GitHub PR description, issue body, review comment, or commit message.
2197
2215
  - \u274C Never paste it in a Linear issue body or comment \u2014 upload via Linear's \`fileUpload\` mutation instead (see below).
2216
+ - \u274C Never paste it in a GitLab merge request or issue; upload the original bytes through GitLab's project upload endpoint instead (see below).
2198
2217
  - \u274C Never link to it from any external doc, email, or external chat.
2199
2218
  - \u274C Never include it as a "backup link" in case the dashboard link breaks \u2014 it will always break externally.
2200
2219
 
@@ -2218,16 +2237,16 @@ Include each markdown embed line **verbatim** where you want that file to render
2218
2237
 
2219
2238
  After (or alongside) the embeds, include a \`[View in Replicas](<deep-link>)\` hyperlink for each file using the per-file dashboard URL from the CLI. This lets the user open the specific item in the workspace.
2220
2239
 
2221
- ## On external platforms \u2014 upload natively AND link the dashboard
2240
+ ## On external platforms: embed the file AND link the dashboard
2222
2241
 
2223
- Sharing media externally is a **two-step requirement** for every file:
2242
+ After \`replicas media upload\` succeeds, external delivery has two required follow-up steps for every file:
2224
2243
 
2225
- 1. **Upload the raw bytes natively to that platform** so the recipient sees the media embedded inline in the message itself.
2244
+ 1. **Upload the raw bytes through that platform's supported inline path** so the recipient sees the media embedded in the message itself.
2226
2245
  2. **Link the Replicas dashboard deep link** (\`?media=<id>\` form) so the user can jump straight to the file in the workspace.
2227
2246
 
2228
- A link alone is not enough. A native upload alone is not enough. Do both.
2247
+ A link alone is not enough. An upload without the dashboard link is not enough. Do both.
2229
2248
 
2230
- GitHub has no native upload API, so use an explicit Replicas public share for screenshots and recording previews. GitLab has a native upload API and should receive the original bytes.
2249
+ Slack, Linear, and GitLab receive the original bytes through their native upload APIs. GitHub has no supported attachment API, so use an explicit Replicas public share for screenshots and recording previews.
2231
2250
 
2232
2251
  ### Slack \u2014 embed natively via the 3-step external file upload flow
2233
2252
 
@@ -2358,7 +2377,7 @@ GitHub does not reliably render arbitrary external videos as inline players. For
2358
2377
  [![Demo recording](<public-poster-url>)](<recording-dashboard-url>)
2359
2378
  \`\`\`
2360
2379
 
2361
- Public forge shares are bearer capabilities. For private repositories, create one only when the user asked for inline PR media. Revoke with \`replicas media revoke <media-id>\` **only** when the user asks or the media should intentionally stop rendering \u2014 never as routine post-task cleanup, since revoking breaks every embed already posted on the PR.
2380
+ Public forge shares are unauthenticated bearer capabilities. For private repositories, create one only when the user explicitly asked for inline PR media. Without that consent, keep the media private in Replicas and report that GitHub has no supported attachment API; do not publish a bearer share or pretend the dashboard link is an embed. Revoke with \`replicas media revoke <media-id>\` **only** when the user asks or the media should intentionally stop rendering; never as routine post-task cleanup, since revoking breaks every embed already posted on the PR.
2362
2381
 
2363
2382
  For a self-contained HTML report, upload it with \`--access organization\` and put the printed \`Forge link\` Markdown in the PR body or comment. GitHub cannot render the page inline, so use the normal link rather than image syntax. HTML pages cannot be shared publicly.
2364
2383
 
@@ -2366,7 +2385,7 @@ Do **not** commit screenshots to the repo, use placeholder URLs, expose the auth
2366
2385
 
2367
2386
  ### GitLab: native inline screenshots and videos
2368
2387
 
2369
- GitLab supports native project Markdown uploads. Always upload the media to Replicas first, then POST the same original file to the repository's \`/projects/:id/uploads\` API using the workspace GitLab credential. Insert the returned \`markdown\` value into the merge request body or comment and include the Replicas dashboard link. Image uploads render inline; MP4, MOV, and WebM uploads render as inline video players.
2388
+ GitLab supports native project Markdown uploads. For a GitLab destination, always upload the media to Replicas first, then POST the same original file to the repository's \`/projects/:id/uploads\` API using the workspace GitLab credential. Insert the returned \`markdown\` value into the merge request body or comment and include the Replicas dashboard link. Image uploads render inline; MP4, MOV, and WebM uploads render as inline video players.
2370
2389
 
2371
2390
  Do not use a Replicas public forge share for GitLab when the native project upload succeeds; native uploads preserve project access controls.
2372
2391
 
@@ -2415,7 +2434,7 @@ replicas media upload chart-a.svg chart-b.svg --name "Latency chart" --name "Err
2415
2434
  `;
2416
2435
  var MEDIA_ABILITY = {
2417
2436
  label: "Media",
2418
- description: "Share screenshots, recordings, generated images, audio clips, and HTML pages.",
2437
+ description: "Deliver media to Replicas and destination workflows with inline uploads.",
2419
2438
  bullet: "- Producing or showing the user any media \u2014 screenshots, screen recordings, generated images or diagrams, audio clips, or HTML recap pages \u2014 including in your Replicas chat reply, PR descriptions/comments, and other external platforms",
2420
2439
  section: SECTION6,
2421
2440
  referenceFile: { name: "MEDIA.md", content: REFERENCE6 }
@@ -2518,16 +2537,13 @@ Discover and execute installed marketplace tools through the workspace-scoped Ty
2518
2537
  **Reference:** \`references/PLUGINS.md\`
2519
2538
 
2520
2539
  Use this when:
2521
- - The user asks for CRM data from Attio
2522
- - The user asks to manage Calendly events, invitees, or scheduling links
2523
- - The user asks to read or change Google Ads, Docs, Drive, Search Console, or Sheets data
2524
- - The user asks for ClickHouse analytics or PostHog product data
2540
+ - The user asks to work with an installed productivity, data, engineering, or business plugin
2541
+ - The user asks to discover which external services are connected
2525
2542
  - The user asks to create or control an E2B sandbox
2526
2543
  - The user asks to invoke a connected Modal function
2527
2544
  - The user asks to query or update a connected turbopuffer namespace
2528
2545
  - The user asks for PlanetScale organizations, databases, branches, or Insights data
2529
- - The user asks to analyze text with Pangram
2530
- - The user asks for Stripe customers, payments, invoices, subscriptions, or balances`;
2546
+ - The user asks to analyze text with Pangram`;
2531
2547
  var REFERENCE8 = `# Plugins
2532
2548
 
2533
2549
  Plugins are TypeScript libraries, not MCP servers. Import \`@replicas/sdk\`; Replicas authenticates the workspace and selects the owner\u2019s personal connection first, then the most specific environment the workspace inherits from, then Global. Provider credentials, sessions, and project keys are never exposed.
@@ -2700,7 +2716,7 @@ In agent mode the CLI hides commands that don't make sense for in-workspace agen
2700
2716
  | \`replicas automation ...\` | Manage automations (cron + GitHub/GitLab event triggers) |
2701
2717
  | \`replicas preview ...\` | Register / list preview URLs (covered in \`PREVIEWS.md\`) |
2702
2718
  | \`replicas service ...\` | Run long-lived services detached so they survive workspace sleep/wake (see below) |
2703
- | \`replicas media ...\` | Upload screenshots, videos, audio (covered in \`MEDIA.md\`) |
2719
+ | \`replicas media ...\` | Upload media to the dashboard and follow \`MEDIA.md\` for destination embedding |
2704
2720
  | \`replicas slack thread ...\` | Attach or switch Slack thread routing (covered in \`SLACK.md\`) |
2705
2721
 
2706
2722
  \`replicas <command> --help\` is always the source of truth for flags.
@@ -2994,6 +3010,8 @@ await replicas.slack.call('chat.postMessage', {
2994
3010
 
2995
3011
  Only the announcing message gets the button \u2014 follow-ups about a pull request already linked in the thread keep the link in the text and drop the \`blocks\`. Use "View MR" for GitLab. With several links, give each button a unique \`action_id\` and name its repository in the label ("View PR \xB7 web").
2996
3012
 
3013
+ For screenshots, recordings, diagrams, or other media, read \`references/MEDIA.md\` before posting. It is the single source of truth for uploading the Replicas copy and the raw file to Slack; a dashboard link in \`text\` is not an inline attachment.
3014
+
2997
3015
  Attach every new top-level conversation so future replies route to this workspace. For a reply in another thread, attach its root \`thread_ts\`, not the reply timestamp. Do not attach the originating thread again.
2998
3016
 
2999
3017
  ## Search and batch
@@ -3514,6 +3532,282 @@ function findGitCommitSignals(request) {
3514
3532
  return findGitCommitCommands(command).length > 0 ? ["git-commit"] : [];
3515
3533
  }
3516
3534
 
3535
+ // ../shared/src/routes/plugin-catalog.ts
3536
+ var EXPLICIT_PLUGIN_CATALOG = [
3537
+ {
3538
+ id: "attio",
3539
+ backend: "composio",
3540
+ toolkit: "attio",
3541
+ authType: "oauth",
3542
+ category: "business",
3543
+ name: "Attio",
3544
+ description: "Manage CRM records, people, companies, lists, and notes."
3545
+ },
3546
+ {
3547
+ id: "calendly",
3548
+ backend: "composio",
3549
+ toolkit: "calendly",
3550
+ authType: "oauth",
3551
+ category: "productivity",
3552
+ name: "Calendly",
3553
+ description: "Manage event types, scheduled events, invitees, and scheduling links."
3554
+ },
3555
+ {
3556
+ id: "clickhouse",
3557
+ backend: "composio",
3558
+ toolkit: "clickhouse",
3559
+ authType: "basic",
3560
+ category: "data",
3561
+ name: "ClickHouse",
3562
+ description: "Manage databases, tables, schemas, and queries."
3563
+ },
3564
+ {
3565
+ id: "cloudflare",
3566
+ backend: "composio",
3567
+ toolkit: "cloudflare_api_key",
3568
+ authType: "api_key",
3569
+ category: "data",
3570
+ name: "Cloudflare",
3571
+ description: "Manage zones, DNS records, analytics, and security settings."
3572
+ },
3573
+ {
3574
+ id: "e2b",
3575
+ toolkit: "e2b",
3576
+ backend: "native",
3577
+ authType: "api_key",
3578
+ category: "data",
3579
+ name: "E2B",
3580
+ description: "Create secure cloud sandboxes and run commands in them."
3581
+ },
3582
+ {
3583
+ id: "gmail",
3584
+ backend: "composio",
3585
+ toolkit: "gmail",
3586
+ authType: "oauth",
3587
+ category: "productivity",
3588
+ name: "Gmail",
3589
+ description: "Manage messages, threads, attachments, labels, and mailbox settings."
3590
+ },
3591
+ {
3592
+ id: "googleads",
3593
+ backend: "composio",
3594
+ toolkit: "googleads",
3595
+ authType: "oauth",
3596
+ category: "data",
3597
+ name: "Google Ads",
3598
+ description: "Manage campaigns, customers, accounts, and reporting data."
3599
+ },
3600
+ {
3601
+ id: "googledocs",
3602
+ backend: "composio",
3603
+ toolkit: "googledocs",
3604
+ authType: "oauth",
3605
+ category: "productivity",
3606
+ name: "Google Docs",
3607
+ description: "Manage documents, structure, comments, and exported content."
3608
+ },
3609
+ {
3610
+ id: "googledrive",
3611
+ backend: "composio",
3612
+ toolkit: "googledrive",
3613
+ authType: "oauth",
3614
+ category: "productivity",
3615
+ name: "Google Drive",
3616
+ description: "Manage files, folders, metadata, permissions, and shared drives."
3617
+ },
3618
+ {
3619
+ id: "googlesearch",
3620
+ backend: "composio",
3621
+ toolkit: "google_search_console",
3622
+ authType: "oauth",
3623
+ category: "data",
3624
+ name: "Google Search",
3625
+ description: "Manage Search Console performance, indexing, sites, and sitemaps."
3626
+ },
3627
+ {
3628
+ id: "googlesheets",
3629
+ backend: "composio",
3630
+ toolkit: "googlesheets",
3631
+ authType: "oauth",
3632
+ category: "productivity",
3633
+ name: "Google Sheets",
3634
+ description: "Manage spreadsheets, worksheets, ranges, tables, and charts."
3635
+ },
3636
+ {
3637
+ id: "linkedin",
3638
+ backend: "composio",
3639
+ toolkit: "linkedin",
3640
+ authType: "oauth",
3641
+ category: "business",
3642
+ name: "LinkedIn",
3643
+ description: "Manage profiles, organizations, posts, and professional activity."
3644
+ },
3645
+ {
3646
+ id: "modal",
3647
+ backend: "native",
3648
+ toolkit: "modal",
3649
+ authType: "basic",
3650
+ category: "data",
3651
+ name: "Modal",
3652
+ description: "Invoke deployed functions through Modal compute."
3653
+ },
3654
+ {
3655
+ id: "posthog",
3656
+ backend: "composio",
3657
+ toolkit: "posthog",
3658
+ authType: "api_key",
3659
+ category: "data",
3660
+ name: "PostHog",
3661
+ description: "Manage projects, events, insights, dashboards, flags, and recordings."
3662
+ },
3663
+ {
3664
+ id: "planetscale",
3665
+ toolkit: "planetscale",
3666
+ backend: "native",
3667
+ authType: "oauth",
3668
+ category: "data",
3669
+ name: "PlanetScale",
3670
+ description: "Manage organizations, databases, branches, deploy requests, and Insights."
3671
+ },
3672
+ {
3673
+ id: "stripe",
3674
+ backend: "composio",
3675
+ toolkit: "stripe",
3676
+ authType: "oauth",
3677
+ category: "business",
3678
+ name: "Stripe",
3679
+ description: "Manage customers, payments, invoices, subscriptions, and balances."
3680
+ },
3681
+ {
3682
+ id: "pangram",
3683
+ backend: "native",
3684
+ toolkit: "pangram",
3685
+ authType: "api_key",
3686
+ category: "data",
3687
+ name: "Pangram",
3688
+ description: "Analyze text for AI generation and plagiarism signals."
3689
+ },
3690
+ {
3691
+ id: "vercel",
3692
+ backend: "composio",
3693
+ toolkit: "vercel",
3694
+ authType: "api_key",
3695
+ category: "data",
3696
+ name: "Vercel",
3697
+ description: "Manage projects, deployments, logs, domains, and infrastructure."
3698
+ },
3699
+ {
3700
+ id: "turbopuffer",
3701
+ backend: "native",
3702
+ toolkit: "turbopuffer",
3703
+ authType: "api_key",
3704
+ category: "data",
3705
+ name: "turbopuffer",
3706
+ description: "Query and manage turbopuffer namespaces."
3707
+ }
3708
+ ];
3709
+ var HOSTED_COMPOSIO_PLUGIN_DEFINITIONS = [
3710
+ ["notion", "notion", "OAUTH2", true, "productivity", "Notion"],
3711
+ ["jira", "jira", "OAUTH2", true, "productivity", "Jira"],
3712
+ ["confluence", "confluence", "OAUTH2", true, "productivity", "Confluence"],
3713
+ ["googlecalendar", "googlecalendar", "OAUTH2", true, "productivity", "Google Calendar"],
3714
+ ["microsoftteams", "microsoft_teams", "OAUTH2", true, "productivity", "Microsoft Teams"],
3715
+ ["outlook", "outlook", "OAUTH2", true, "productivity", "Outlook"],
3716
+ ["bitbucket", "bitbucket", "OAUTH2", true, "data", "Bitbucket"],
3717
+ ["datadog", "datadog", "API_KEY", false, "data", "Datadog"],
3718
+ ["pagerduty", "pagerduty", "OAUTH2", true, "data", "PagerDuty"],
3719
+ ["intercom", "intercom", "OAUTH2", true, "business", "Intercom"],
3720
+ ["zendesk", "zendesk", "OAUTH2", true, "business", "Zendesk"],
3721
+ ["hubspot", "hubspot", "OAUTH2", true, "business", "HubSpot"],
3722
+ ["supabase", "supabase", "OAUTH2", true, "data", "Supabase"],
3723
+ ["figma", "figma", "OAUTH2", true, "productivity", "Figma"],
3724
+ ["launchdarkly", "launch_darkly", "API_KEY", false, "data", "LaunchDarkly"],
3725
+ ["asana", "asana", "OAUTH2", true, "productivity", "Asana"],
3726
+ ["clickup", "clickup", "OAUTH2", true, "productivity", "ClickUp"],
3727
+ ["trello", "trello", "OAUTH1", true, "productivity", "Trello"],
3728
+ ["todoist", "todoist", "OAUTH2", true, "productivity", "Todoist"],
3729
+ ["airtable", "airtable", "OAUTH2", true, "productivity", "Airtable"],
3730
+ ["coda", "coda", "API_KEY", false, "productivity", "Coda"],
3731
+ ["miro", "miro", "OAUTH2", true, "productivity", "Miro"],
3732
+ ["sharepoint", "share_point", "OAUTH2", true, "productivity", "SharePoint"],
3733
+ ["onedrive", "one_drive", "OAUTH2", true, "productivity", "OneDrive"],
3734
+ ["googleslides", "googleslides", "OAUTH2", true, "productivity", "Google Slides"],
3735
+ ["googlemeet", "googlemeet", "OAUTH2", true, "productivity", "Google Meet"],
3736
+ ["googletasks", "googletasks", "OAUTH2", true, "productivity", "Google Tasks"],
3737
+ ["dropbox", "dropbox", "OAUTH2", true, "productivity", "Dropbox"],
3738
+ ["box", "box", "OAUTH2", true, "productivity", "Box"],
3739
+ ["discord", "discord", "OAUTH2", true, "productivity", "Discord"],
3740
+ ["discordbot", "discordbot", "OAUTH2", true, "productivity", "Discord Bot"],
3741
+ ["zoom", "zoom", "OAUTH2", true, "productivity", "Zoom"],
3742
+ ["googlechat", "google_chat", "OAUTH2", false, "productivity", "Google Chat"],
3743
+ ["newrelic", "new_relic", "API_KEY", false, "data", "New Relic"],
3744
+ ["betterstack", "better_stack", "API_KEY", false, "data", "Better Stack"],
3745
+ ["incidentio", "incident_io", "API_KEY", false, "data", "incident.io"],
3746
+ ["grafana", "grafana", "BEARER_TOKEN", false, "data", "Grafana"],
3747
+ ["honeycomb", "honeycomb_mcp", "DCR_OAUTH", false, "data", "Honeycomb MCP"],
3748
+ ["bugsnag", "bugsnag", "API_KEY", false, "data", "Bugsnag"],
3749
+ ["circleci", "circleci", "API_KEY", false, "data", "CircleCI"],
3750
+ ["buildkite", "buildkite", "API_KEY", false, "data", "Buildkite"],
3751
+ ["dockerhub", "docker_hub", "API_KEY", false, "data", "Docker Hub"],
3752
+ ["digitalocean", "digital_ocean", "OAUTH2", true, "data", "DigitalOcean"],
3753
+ ["railway", "railway", "API_KEY", false, "data", "Railway"],
3754
+ ["render", "render", "API_KEY", false, "data", "Render"],
3755
+ ["firebase", "firebase", "API_KEY", false, "data", "Firebase"],
3756
+ ["cloudinary", "cloudinary", "API_KEY", false, "data", "Cloudinary"],
3757
+ ["configcat", "configcat", "API_KEY", false, "data", "ConfigCat"],
3758
+ ["googleanalytics", "google_analytics", "OAUTH2", true, "data", "Google Analytics"],
3759
+ ["googlebigquery", "googlebigquery", "OAUTH2", true, "data", "Google BigQuery"],
3760
+ ["amplitude", "amplitude", "API_KEY", false, "data", "Amplitude"],
3761
+ ["mixpanel", "mixpanel", "BASIC", false, "data", "Mixpanel"],
3762
+ ["segment", "segment", "API_KEY", false, "data", "Segment"],
3763
+ ["databricks", "databricks", "API_KEY", false, "data", "Databricks"],
3764
+ ["snowflake", "snowflake", "OAUTH2", false, "data", "Snowflake"],
3765
+ ["algolia", "algolia", "API_KEY", false, "data", "Algolia"],
3766
+ ["elasticsearch", "elasticsearch", "API_KEY", false, "data", "Elasticsearch"],
3767
+ ["salesforce", "salesforce", "OAUTH2", true, "business", "Salesforce"],
3768
+ ["pipedrive", "pipedrive", "API_KEY", false, "business", "Pipedrive"],
3769
+ ["close", "close", "API_KEY", false, "business", "Close"],
3770
+ ["apollo", "apollo", "API_KEY", false, "business", "Apollo"],
3771
+ ["gong", "gong", "OAUTH2", true, "business", "Gong"],
3772
+ ["freshdesk", "freshdesk", "API_KEY", false, "business", "Freshdesk"],
3773
+ ["helpscout", "help_scout", "OAUTH2", false, "business", "Help Scout"],
3774
+ ["servicenow", "servicenow", "BASIC", false, "business", "ServiceNow"],
3775
+ ["mailchimp", "mailchimp", "OAUTH2", true, "business", "Mailchimp"],
3776
+ ["customerio", "customerio", "API_KEY", false, "business", "Customer.io"],
3777
+ ["klaviyo", "klaviyo", "API_KEY", false, "business", "Klaviyo"],
3778
+ ["shopify", "shopify", "API_KEY", false, "business", "Shopify"],
3779
+ ["quickbooks", "quickbooks", "OAUTH2", true, "business", "QuickBooks"],
3780
+ ["xero", "xero", "OAUTH2", false, "business", "Xero"],
3781
+ ["brex", "brex", "API_KEY", false, "business", "Brex"],
3782
+ ["buffer", "buffer", "OAUTH2", false, "business", "Buffer"],
3783
+ ["canva", "canva", "OAUTH2", true, "productivity", "Canva"],
3784
+ ["webflow", "webflow", "API_KEY", false, "business", "Webflow"],
3785
+ ["firecrawl", "firecrawl", "API_KEY", false, "data", "Firecrawl"],
3786
+ ["browserbase", "browserbase_tool", "API_KEY", false, "data", "Browserbase"],
3787
+ ["exa", "exa", "API_KEY", false, "data", "Exa"],
3788
+ ["youtube", "youtube", "OAUTH2", true, "business", "YouTube"],
3789
+ ["twitter", "twitter", "OAUTH2", false, "business", "Twitter/X"],
3790
+ ["instagram", "instagram", "OAUTH2", true, "business", "Instagram"],
3791
+ ["facebook", "facebook", "OAUTH2", true, "business", "Facebook"]
3792
+ ];
3793
+ var HOSTED_COMPOSIO_PLUGINS = HOSTED_COMPOSIO_PLUGIN_DEFINITIONS.map(
3794
+ ([id, toolkit, authScheme, managedAuth, category, name]) => ({
3795
+ id,
3796
+ backend: "composio",
3797
+ toolkit,
3798
+ authType: "hosted",
3799
+ authScheme,
3800
+ managedAuth,
3801
+ category,
3802
+ name,
3803
+ description: `Use ${name} tools from workspace agents.`
3804
+ })
3805
+ );
3806
+ var PLUGIN_CATALOG = [
3807
+ ...EXPLICIT_PLUGIN_CATALOG,
3808
+ ...HOSTED_COMPOSIO_PLUGINS
3809
+ ];
3810
+
3517
3811
  // ../shared/src/routes/user.ts
3518
3812
  var PROFILE_AVATAR_MAX_SIZE_BYTES = 5 * 1024 * 1024;
3519
3813
 
@@ -6404,7 +6698,7 @@ var DEFAULT_CODEX_ARGS = [
6404
6698
  var MIN_CODEX_CLI_VERSION = "0.144.6";
6405
6699
  var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
6406
6700
  var codexCliVersionEnsured = null;
6407
- var ENGINE_PACKAGE_VERSION = "0.1.678";
6701
+ var ENGINE_PACKAGE_VERSION = "0.1.680";
6408
6702
  var INITIALIZE_METHOD = "initialize";
6409
6703
  var INITIALIZED_NOTIFICATION = "initialized";
6410
6704
  var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
@@ -7,7 +7,7 @@ import {
7
7
  headlessAgentRequestSchema,
8
8
  putPresignedFile,
9
9
  recoverCompletedTurn
10
- } from "./chunk-G2NKXO3H.js";
10
+ } from "./chunk-3SEROT57.js";
11
11
 
12
12
  // src/headless-agent.ts
13
13
  import { createHash } from "crypto";
package/dist/src/index.js CHANGED
@@ -190,7 +190,7 @@ import {
190
190
  serializeCanvasContentResponse,
191
191
  shellQuotePosix,
192
192
  stripAgentDiagnosticErrors
193
- } from "./chunk-G2NKXO3H.js";
193
+ } from "./chunk-3SEROT57.js";
194
194
 
195
195
  // src/index.ts
196
196
  import { serve } from "@hono/node-server";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "replicas-engine",
3
- "version": "0.1.678",
3
+ "version": "0.1.680",
4
4
  "description": "Lightweight API server for Replicas workspaces",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -0,0 +1,166 @@
1
+ // Generated from shared/src by generate-workspace-sdk-types.mjs; do not edit.
2
+ export declare const HOSTED_PLUGIN_AUTH_SCHEMES: readonly ["API_KEY", "BASIC", "BEARER_TOKEN", "DCR_OAUTH", "OAUTH1", "OAUTH2"];
3
+ export type HostedPluginAuthScheme = (typeof HOSTED_PLUGIN_AUTH_SCHEMES)[number];
4
+ export declare const PLUGIN_CATALOG: readonly [{
5
+ readonly id: "attio";
6
+ readonly backend: "composio";
7
+ readonly toolkit: "attio";
8
+ readonly authType: "oauth";
9
+ readonly category: "business";
10
+ readonly name: "Attio";
11
+ readonly description: "Manage CRM records, people, companies, lists, and notes.";
12
+ }, {
13
+ readonly id: "calendly";
14
+ readonly backend: "composio";
15
+ readonly toolkit: "calendly";
16
+ readonly authType: "oauth";
17
+ readonly category: "productivity";
18
+ readonly name: "Calendly";
19
+ readonly description: "Manage event types, scheduled events, invitees, and scheduling links.";
20
+ }, {
21
+ readonly id: "clickhouse";
22
+ readonly backend: "composio";
23
+ readonly toolkit: "clickhouse";
24
+ readonly authType: "basic";
25
+ readonly category: "data";
26
+ readonly name: "ClickHouse";
27
+ readonly description: "Manage databases, tables, schemas, and queries.";
28
+ }, {
29
+ readonly id: "cloudflare";
30
+ readonly backend: "composio";
31
+ readonly toolkit: "cloudflare_api_key";
32
+ readonly authType: "api_key";
33
+ readonly category: "data";
34
+ readonly name: "Cloudflare";
35
+ readonly description: "Manage zones, DNS records, analytics, and security settings.";
36
+ }, {
37
+ readonly id: "e2b";
38
+ readonly toolkit: "e2b";
39
+ readonly backend: "native";
40
+ readonly authType: "api_key";
41
+ readonly category: "data";
42
+ readonly name: "E2B";
43
+ readonly description: "Create secure cloud sandboxes and run commands in them.";
44
+ }, {
45
+ readonly id: "gmail";
46
+ readonly backend: "composio";
47
+ readonly toolkit: "gmail";
48
+ readonly authType: "oauth";
49
+ readonly category: "productivity";
50
+ readonly name: "Gmail";
51
+ readonly description: "Manage messages, threads, attachments, labels, and mailbox settings.";
52
+ }, {
53
+ readonly id: "googleads";
54
+ readonly backend: "composio";
55
+ readonly toolkit: "googleads";
56
+ readonly authType: "oauth";
57
+ readonly category: "data";
58
+ readonly name: "Google Ads";
59
+ readonly description: "Manage campaigns, customers, accounts, and reporting data.";
60
+ }, {
61
+ readonly id: "googledocs";
62
+ readonly backend: "composio";
63
+ readonly toolkit: "googledocs";
64
+ readonly authType: "oauth";
65
+ readonly category: "productivity";
66
+ readonly name: "Google Docs";
67
+ readonly description: "Manage documents, structure, comments, and exported content.";
68
+ }, {
69
+ readonly id: "googledrive";
70
+ readonly backend: "composio";
71
+ readonly toolkit: "googledrive";
72
+ readonly authType: "oauth";
73
+ readonly category: "productivity";
74
+ readonly name: "Google Drive";
75
+ readonly description: "Manage files, folders, metadata, permissions, and shared drives.";
76
+ }, {
77
+ readonly id: "googlesearch";
78
+ readonly backend: "composio";
79
+ readonly toolkit: "google_search_console";
80
+ readonly authType: "oauth";
81
+ readonly category: "data";
82
+ readonly name: "Google Search";
83
+ readonly description: "Manage Search Console performance, indexing, sites, and sitemaps.";
84
+ }, {
85
+ readonly id: "googlesheets";
86
+ readonly backend: "composio";
87
+ readonly toolkit: "googlesheets";
88
+ readonly authType: "oauth";
89
+ readonly category: "productivity";
90
+ readonly name: "Google Sheets";
91
+ readonly description: "Manage spreadsheets, worksheets, ranges, tables, and charts.";
92
+ }, {
93
+ readonly id: "linkedin";
94
+ readonly backend: "composio";
95
+ readonly toolkit: "linkedin";
96
+ readonly authType: "oauth";
97
+ readonly category: "business";
98
+ readonly name: "LinkedIn";
99
+ readonly description: "Manage profiles, organizations, posts, and professional activity.";
100
+ }, {
101
+ readonly id: "modal";
102
+ readonly backend: "native";
103
+ readonly toolkit: "modal";
104
+ readonly authType: "basic";
105
+ readonly category: "data";
106
+ readonly name: "Modal";
107
+ readonly description: "Invoke deployed functions through Modal compute.";
108
+ }, {
109
+ readonly id: "posthog";
110
+ readonly backend: "composio";
111
+ readonly toolkit: "posthog";
112
+ readonly authType: "api_key";
113
+ readonly category: "data";
114
+ readonly name: "PostHog";
115
+ readonly description: "Manage projects, events, insights, dashboards, flags, and recordings.";
116
+ }, {
117
+ readonly id: "planetscale";
118
+ readonly toolkit: "planetscale";
119
+ readonly backend: "native";
120
+ readonly authType: "oauth";
121
+ readonly category: "data";
122
+ readonly name: "PlanetScale";
123
+ readonly description: "Manage organizations, databases, branches, deploy requests, and Insights.";
124
+ }, {
125
+ readonly id: "stripe";
126
+ readonly backend: "composio";
127
+ readonly toolkit: "stripe";
128
+ readonly authType: "oauth";
129
+ readonly category: "business";
130
+ readonly name: "Stripe";
131
+ readonly description: "Manage customers, payments, invoices, subscriptions, and balances.";
132
+ }, {
133
+ readonly id: "pangram";
134
+ readonly backend: "native";
135
+ readonly toolkit: "pangram";
136
+ readonly authType: "api_key";
137
+ readonly category: "data";
138
+ readonly name: "Pangram";
139
+ readonly description: "Analyze text for AI generation and plagiarism signals.";
140
+ }, {
141
+ readonly id: "vercel";
142
+ readonly backend: "composio";
143
+ readonly toolkit: "vercel";
144
+ readonly authType: "api_key";
145
+ readonly category: "data";
146
+ readonly name: "Vercel";
147
+ readonly description: "Manage projects, deployments, logs, domains, and infrastructure.";
148
+ }, {
149
+ readonly id: "turbopuffer";
150
+ readonly backend: "native";
151
+ readonly toolkit: "turbopuffer";
152
+ readonly authType: "api_key";
153
+ readonly category: "data";
154
+ readonly name: "turbopuffer";
155
+ readonly description: "Query and manage turbopuffer namespaces.";
156
+ }, ...{
157
+ id: "close" | "notion" | "jira" | "confluence" | "googlecalendar" | "microsoftteams" | "outlook" | "bitbucket" | "datadog" | "pagerduty" | "intercom" | "zendesk" | "hubspot" | "supabase" | "figma" | "launchdarkly" | "asana" | "clickup" | "trello" | "todoist" | "airtable" | "coda" | "miro" | "sharepoint" | "onedrive" | "googleslides" | "googlemeet" | "googletasks" | "dropbox" | "box" | "discord" | "discordbot" | "zoom" | "googlechat" | "newrelic" | "betterstack" | "incidentio" | "grafana" | "honeycomb" | "bugsnag" | "circleci" | "buildkite" | "dockerhub" | "digitalocean" | "railway" | "render" | "firebase" | "cloudinary" | "configcat" | "googleanalytics" | "googlebigquery" | "amplitude" | "mixpanel" | "segment" | "databricks" | "snowflake" | "algolia" | "elasticsearch" | "salesforce" | "pipedrive" | "apollo" | "gong" | "freshdesk" | "helpscout" | "servicenow" | "mailchimp" | "customerio" | "klaviyo" | "shopify" | "quickbooks" | "xero" | "brex" | "buffer" | "canva" | "webflow" | "firecrawl" | "browserbase" | "exa" | "youtube" | "twitter" | "instagram" | "facebook";
158
+ backend: "composio";
159
+ toolkit: "close" | "notion" | "jira" | "confluence" | "googlecalendar" | "microsoft_teams" | "outlook" | "bitbucket" | "datadog" | "pagerduty" | "intercom" | "zendesk" | "hubspot" | "supabase" | "figma" | "launch_darkly" | "asana" | "clickup" | "trello" | "todoist" | "airtable" | "coda" | "miro" | "share_point" | "one_drive" | "googleslides" | "googlemeet" | "googletasks" | "dropbox" | "box" | "discord" | "discordbot" | "zoom" | "google_chat" | "new_relic" | "better_stack" | "incident_io" | "grafana" | "honeycomb_mcp" | "bugsnag" | "circleci" | "buildkite" | "docker_hub" | "digital_ocean" | "railway" | "render" | "firebase" | "cloudinary" | "configcat" | "google_analytics" | "googlebigquery" | "amplitude" | "mixpanel" | "segment" | "databricks" | "snowflake" | "algolia" | "elasticsearch" | "salesforce" | "pipedrive" | "apollo" | "gong" | "freshdesk" | "help_scout" | "servicenow" | "mailchimp" | "customerio" | "klaviyo" | "shopify" | "quickbooks" | "xero" | "brex" | "buffer" | "canva" | "webflow" | "firecrawl" | "browserbase_tool" | "exa" | "youtube" | "twitter" | "instagram" | "facebook";
160
+ authType: "hosted";
161
+ authScheme: "API_KEY" | "BASIC" | "BEARER_TOKEN" | "DCR_OAUTH" | "OAUTH1" | "OAUTH2";
162
+ managedAuth: boolean;
163
+ category: "data" | "productivity" | "business";
164
+ name: "Notion" | "Jira" | "Confluence" | "Google Calendar" | "Microsoft Teams" | "Outlook" | "Bitbucket" | "Datadog" | "PagerDuty" | "Intercom" | "Zendesk" | "HubSpot" | "Supabase" | "Figma" | "LaunchDarkly" | "Asana" | "ClickUp" | "Trello" | "Todoist" | "Airtable" | "Coda" | "Miro" | "SharePoint" | "OneDrive" | "Google Slides" | "Google Meet" | "Google Tasks" | "Dropbox" | "Box" | "Discord" | "Discord Bot" | "Zoom" | "Google Chat" | "New Relic" | "Better Stack" | "incident.io" | "Grafana" | "Honeycomb MCP" | "Bugsnag" | "CircleCI" | "Buildkite" | "Docker Hub" | "DigitalOcean" | "Railway" | "Render" | "Firebase" | "Cloudinary" | "ConfigCat" | "Google Analytics" | "Google BigQuery" | "Amplitude" | "Mixpanel" | "Segment" | "Databricks" | "Snowflake" | "Algolia" | "Elasticsearch" | "Salesforce" | "Pipedrive" | "Close" | "Apollo" | "Gong" | "Freshdesk" | "Help Scout" | "ServiceNow" | "Mailchimp" | "Customer.io" | "Klaviyo" | "Shopify" | "QuickBooks" | "Xero" | "Brex" | "Buffer" | "Canva" | "Webflow" | "Firecrawl" | "Browserbase" | "Exa" | "YouTube" | "Twitter/X" | "Instagram" | "Facebook";
165
+ description: string;
166
+ }[]];
@@ -1,158 +1,7 @@
1
1
  // Generated from shared/src by generate-workspace-sdk-types.mjs; do not edit.
2
2
  import type { WorkspaceNativeIntegrationStatus } from './integrations';
3
- export declare const PLUGIN_CATALOG: readonly [{
4
- readonly id: "attio";
5
- readonly backend: "composio";
6
- readonly toolkit: "attio";
7
- readonly authType: "oauth";
8
- readonly category: "business";
9
- readonly name: "Attio";
10
- readonly description: "Manage CRM records, people, companies, lists, and notes.";
11
- }, {
12
- readonly id: "calendly";
13
- readonly backend: "composio";
14
- readonly toolkit: "calendly";
15
- readonly authType: "oauth";
16
- readonly category: "productivity";
17
- readonly name: "Calendly";
18
- readonly description: "Manage event types, scheduled events, invitees, and scheduling links.";
19
- }, {
20
- readonly id: "clickhouse";
21
- readonly backend: "composio";
22
- readonly toolkit: "clickhouse";
23
- readonly authType: "basic";
24
- readonly category: "data";
25
- readonly name: "ClickHouse";
26
- readonly description: "Manage databases, tables, schemas, and queries.";
27
- }, {
28
- readonly id: "cloudflare";
29
- readonly backend: "composio";
30
- readonly toolkit: "cloudflare_api_key";
31
- readonly authType: "api_key";
32
- readonly category: "data";
33
- readonly name: "Cloudflare";
34
- readonly description: "Manage zones, DNS records, analytics, and security settings.";
35
- }, {
36
- readonly id: "e2b";
37
- readonly toolkit: "e2b";
38
- readonly backend: "native";
39
- readonly authType: "api_key";
40
- readonly category: "data";
41
- readonly name: "E2B";
42
- readonly description: "Create secure cloud sandboxes and run commands in them.";
43
- }, {
44
- readonly id: "gmail";
45
- readonly backend: "composio";
46
- readonly toolkit: "gmail";
47
- readonly authType: "oauth";
48
- readonly category: "productivity";
49
- readonly name: "Gmail";
50
- readonly description: "Manage messages, threads, attachments, labels, and mailbox settings.";
51
- }, {
52
- readonly id: "googleads";
53
- readonly backend: "composio";
54
- readonly toolkit: "googleads";
55
- readonly authType: "oauth";
56
- readonly category: "data";
57
- readonly name: "Google Ads";
58
- readonly description: "Manage campaigns, customers, accounts, and reporting data.";
59
- }, {
60
- readonly id: "googledocs";
61
- readonly backend: "composio";
62
- readonly toolkit: "googledocs";
63
- readonly authType: "oauth";
64
- readonly category: "productivity";
65
- readonly name: "Google Docs";
66
- readonly description: "Manage documents, structure, comments, and exported content.";
67
- }, {
68
- readonly id: "googledrive";
69
- readonly backend: "composio";
70
- readonly toolkit: "googledrive";
71
- readonly authType: "oauth";
72
- readonly category: "productivity";
73
- readonly name: "Google Drive";
74
- readonly description: "Manage files, folders, metadata, permissions, and shared drives.";
75
- }, {
76
- readonly id: "googlesearch";
77
- readonly backend: "composio";
78
- readonly toolkit: "google_search_console";
79
- readonly authType: "oauth";
80
- readonly category: "data";
81
- readonly name: "Google Search";
82
- readonly description: "Manage Search Console performance, indexing, sites, and sitemaps.";
83
- }, {
84
- readonly id: "googlesheets";
85
- readonly backend: "composio";
86
- readonly toolkit: "googlesheets";
87
- readonly authType: "oauth";
88
- readonly category: "productivity";
89
- readonly name: "Google Sheets";
90
- readonly description: "Manage spreadsheets, worksheets, ranges, tables, and charts.";
91
- }, {
92
- readonly id: "linkedin";
93
- readonly backend: "composio";
94
- readonly toolkit: "linkedin";
95
- readonly authType: "oauth";
96
- readonly category: "business";
97
- readonly name: "LinkedIn";
98
- readonly description: "Manage profiles, organizations, posts, and professional activity.";
99
- }, {
100
- readonly id: "modal";
101
- readonly backend: "native";
102
- readonly toolkit: "modal";
103
- readonly authType: "basic";
104
- readonly category: "data";
105
- readonly name: "Modal";
106
- readonly description: "Invoke deployed functions through Modal compute.";
107
- }, {
108
- readonly id: "posthog";
109
- readonly backend: "composio";
110
- readonly toolkit: "posthog";
111
- readonly authType: "api_key";
112
- readonly category: "data";
113
- readonly name: "PostHog";
114
- readonly description: "Manage projects, events, insights, dashboards, flags, and recordings.";
115
- }, {
116
- readonly id: "planetscale";
117
- readonly toolkit: "planetscale";
118
- readonly backend: "native";
119
- readonly authType: "oauth";
120
- readonly category: "data";
121
- readonly name: "PlanetScale";
122
- readonly description: "Manage organizations, databases, branches, deploy requests, and Insights.";
123
- }, {
124
- readonly id: "stripe";
125
- readonly backend: "composio";
126
- readonly toolkit: "stripe";
127
- readonly authType: "oauth";
128
- readonly category: "business";
129
- readonly name: "Stripe";
130
- readonly description: "Manage customers, payments, invoices, subscriptions, and balances.";
131
- }, {
132
- readonly id: "pangram";
133
- readonly backend: "native";
134
- readonly toolkit: "pangram";
135
- readonly authType: "api_key";
136
- readonly category: "data";
137
- readonly name: "Pangram";
138
- readonly description: "Analyze text for AI generation and plagiarism signals.";
139
- }, {
140
- readonly id: "vercel";
141
- readonly backend: "composio";
142
- readonly toolkit: "vercel";
143
- readonly authType: "api_key";
144
- readonly category: "data";
145
- readonly name: "Vercel";
146
- readonly description: "Manage projects, deployments, logs, domains, and infrastructure.";
147
- }, {
148
- readonly id: "turbopuffer";
149
- readonly backend: "native";
150
- readonly toolkit: "turbopuffer";
151
- readonly authType: "api_key";
152
- readonly category: "data";
153
- readonly name: "turbopuffer";
154
- readonly description: "Query and manage turbopuffer namespaces.";
155
- }];
3
+ import { PLUGIN_CATALOG, type HostedPluginAuthScheme } from './plugin-catalog';
4
+ export { PLUGIN_CATALOG } from './plugin-catalog';
156
5
  export type PluginId = (typeof PLUGIN_CATALOG)[number]['id'];
157
6
  export type PluginBackend = (typeof PLUGIN_CATALOG)[number]['backend'];
158
7
  export type NativePluginId = Extract<(typeof PLUGIN_CATALOG)[number], {
@@ -171,6 +20,8 @@ export interface PluginCatalogItem {
171
20
  backend: PluginBackend;
172
21
  toolkit: string;
173
22
  authType: PluginAuthType;
23
+ authScheme?: HostedPluginAuthScheme;
24
+ managedAuth?: boolean;
174
25
  category: PluginCategory;
175
26
  name: string;
176
27
  description: string;