Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 54 additions & 8 deletions .github/workflows/deploy-website.yml
Original file line number Diff line number Diff line change
Expand Up @@ -130,34 +130,80 @@ jobs:
name: website-build
path: ${{ env.WEBSITE_DIR }}

- name: Resolve preview deploy eligibility
id: preview_eligibility
shell: bash
env:
CF_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CF_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
run: |
if [[ -n "${CF_API_TOKEN}" && -n "${CF_ACCOUNT_ID}" ]]; then
echo "can_deploy=true" >> "$GITHUB_OUTPUT"
else
echo "can_deploy=false" >> "$GITHUB_OUTPUT"
fi

- name: Deploy Preview to Cloudflare
id: deploy
if: ${{ steps.preview_eligibility.outputs.can_deploy == 'true' }}
working-directory: ${{ env.WEBSITE_DIR }}
run: pnpm dlx @opennextjs/cloudflare deploy --env preview
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}
CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}

- name: Upsert PR comment with preview URL (no spam)
if: ${{ always() && (steps.deploy.outcome == 'success' || steps.deploy.outcome == 'skipped') && github.event.pull_request.head.repo.fork == false }}
uses: actions/github-script@v8
env:
MARKER: ${{ env.PREVIEW_COMMENT_MARKER }}
DEPLOYMENT_URL: ${{ steps.deploy.outputs.deployment-url }}
DEPLOY_OUTCOME: ${{ steps.deploy.outcome }}
HEAD_IS_FORK: ${{ github.event.pull_request.head.repo.fork }}
HAS_CF_SECRETS: ${{ steps.preview_eligibility.outputs.can_deploy }}
with:
script: |
const marker = process.env.MARKER;
const url = process.env.DEPLOYMENT_URL || "Check the Cloudflare dashboard for the preview URL.";
const url = process.env.DEPLOYMENT_URL || "";
const deployOutcome = (process.env.DEPLOY_OUTCOME || "").toLowerCase();
const isFork = (process.env.HEAD_IS_FORK || "").toLowerCase() === "true";
const hasCfSecrets = (process.env.HAS_CF_SECRETS || "").toLowerCase() === "true";

const baseMeta = `- Branch: \`${context.payload.pull_request.head.ref}\`
- Commit: \`${context.sha}\``;

let body;
if (deployOutcome === "success") {
body = `${marker}
## 🚀 Preview Deployment Ready!

Preview URL: ${url || "Check the Cloudflare dashboard for the preview URL."}

const body = `${marker}
## 🚀 Preview Deployment Ready!
${baseMeta}

Preview URL: ${url}
(This comment will be updated on new pushes.)
`;
} else if (!hasCfSecrets && isFork) {
body = `${marker}
## ℹ️ Preview Deployment Skipped

- Branch: \`${context.payload.pull_request.head.ref}\`
- Commit: \`${context.sha}\`
This PR comes from a fork, and repository Cloudflare secrets are not exposed to \`pull_request\` workflows.

(This comment will be updated on new pushes.)
`;
${baseMeta}

(This comment will be updated on new pushes.)
`;
} else {
body = `${marker}
## ℹ️ Preview Deployment Skipped

Preview deployment was skipped because required Cloudflare secrets are missing.

${baseMeta}

(This comment will be updated on new pushes.)
`;
}

const { owner, repo } = context.repo;
const issue_number = context.issue.number;
Expand Down
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Your AI conversations deserve a better clipboard.
[![Gemini](https://img.shields.io/badge/Gemini-8E75B2?style=for-the-badge&logo=google&logoColor=white)](https://gemini.google.com)
[![DeepSeek](https://img.shields.io/badge/DeepSeek-0066FF?style=for-the-badge&logo=deepseek&logoColor=white)](https://chat.deepseek.com)
[![Grok](https://img.shields.io/badge/Grok-000000?style=for-the-badge&logo=x&logoColor=white)](https://grok.com)
[![Doubao](https://img.shields.io/badge/豆包-4e6ef2?style=for-the-badge&logoColor=white)](https://www.doubao.com)
[![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com)

<br />
Expand Down Expand Up @@ -167,7 +168,7 @@ Then load the unpacked extension from `apps/browser-extension/dist/chrome-mv3-de

### Usage

1. Navigate to any supported platform (ChatGPT, Claude, Gemini, DeepSeek, Grok, GitHub)
1. Navigate to any supported platform (ChatGPT, Claude, Gemini, DeepSeek, Grok, Doubao, GitHub)
2. Start or open a conversation
3. Click the **CtxPort copy button** that appears in the chat, or press `Alt+Shift+C`
4. Paste your Context Bundle wherever you need it
Expand All @@ -183,6 +184,7 @@ For sidebar list copy: hover over any conversation in the left sidebar to reveal
- [x] Gemini support
- [x] DeepSeek support
- [x] Grok support
- [x] Doubao (豆包) support
- [x] GitHub Issues & PRs support
- [x] Sidebar list copy
- [x] Multiple copy formats
Expand Down
4 changes: 3 additions & 1 deletion README_cn.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
[![Gemini](https://img.shields.io/badge/Gemini-8E75B2?style=for-the-badge&logo=google&logoColor=white)](https://gemini.google.com)
[![DeepSeek](https://img.shields.io/badge/DeepSeek-0066FF?style=for-the-badge&logo=deepseek&logoColor=white)](https://chat.deepseek.com)
[![Grok](https://img.shields.io/badge/Grok-000000?style=for-the-badge&logo=x&logoColor=white)](https://grok.com)
[![Doubao](https://img.shields.io/badge/豆包-4e6ef2?style=for-the-badge&logoColor=white)](https://www.doubao.com)
[![GitHub](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=github&logoColor=white)](https://github.com)

<br />
Expand Down Expand Up @@ -167,7 +168,7 @@ pnpm dev:ext

### 使用方法

1. 打开任何支持的平台(ChatGPT, Claude, Gemini, DeepSeek, Grok, GitHub)
1. 打开任何支持的平台(ChatGPT, Claude, Gemini, DeepSeek, Grok, 豆包, GitHub)
2. 开始或打开一段对话
3. 点击对话中出现的 **CtxPort 复制按钮**,或按 `Alt+Shift+C`
4. 将 Context Bundle 粘贴到任何你需要的地方
Expand All @@ -183,6 +184,7 @@ pnpm dev:ext
- [x] Gemini 支持
- [x] DeepSeek 支持
- [x] Grok 支持
- [x] 豆包 (Doubao) 支持
- [x] GitHub Issues & PRs 支持
- [x] 侧边栏列表复制
- [x] 多种复制格式
Expand Down
30 changes: 20 additions & 10 deletions apps/web/content/en/supported-platforms.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "Supported Platforms"
description: "CtxPort supported platforms: ChatGPT, Claude, Gemini, DeepSeek, Grok, and GitHub. Full feature matrix for each platform."
description: "CtxPort supported platforms: ChatGPT, Claude, Gemini, DeepSeek, Grok, Doubao, and GitHub. Full feature matrix for each platform."
---

# Supported Platforms
Expand Down Expand Up @@ -54,6 +54,16 @@ CtxPort works with the most popular AI chat platforms and GitHub. Here's what's
- All four copy formats (Full, User Only, Code Only, Compact)
- Context menu support

## Doubao

**URL:** [www.doubao.com](https://www.doubao.com)

- In-chat copy button
- Sidebar list copy (hover to copy without opening)
- Keyboard shortcut (Alt+Shift+C)
- All four copy formats (Full, User Only, Code Only, Compact)
- Context menu support

## GitHub

**URL:** [github.com](https://github.com)
Expand All @@ -65,12 +75,12 @@ CtxPort works with the most popular AI chat platforms and GitHub. Here's what's

## Feature Support Matrix

| Feature | ChatGPT | Claude | Gemini | DeepSeek | Grok | GitHub |
|---------|---------|--------|--------|----------|------|--------|
| In-chat copy button | Yes | Yes | Yes | Yes | Yes | Yes |
| Sidebar list copy | Yes | Yes | — | — | — | — |
| Keyboard shortcut | Yes | Yes | Yes | Yes | Yes | Yes |
| Full format | Yes | Yes | Yes | Yes | Yes | Yes |
| User Only format | Yes | Yes | Yes | Yes | Yes | Yes |
| Code Only format | Yes | Yes | Yes | Yes | Yes | Yes |
| Compact format | Yes | Yes | Yes | Yes | Yes | Yes |
| Feature | ChatGPT | Claude | Gemini | DeepSeek | Grok | Doubao | GitHub |
|---------|---------|--------|--------|----------|------|--------|--------|
| In-chat copy button | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Sidebar list copy | Yes | Yes | — | — | — | Yes | — |
| Keyboard shortcut | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Full format | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| User Only format | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Code Only format | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Compact format | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
30 changes: 20 additions & 10 deletions apps/web/content/zh/supported-platforms.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: "支持平台"
description: "CtxPort 支持的平台:ChatGPT、Claude、Gemini、DeepSeek、Grok GitHub。各平台功能支持详情。"
description: "CtxPort 支持的平台:ChatGPT、Claude、Gemini、DeepSeek、Grok、豆包和 GitHub。各平台功能支持详情。"
---

# 支持平台
Expand Down Expand Up @@ -54,6 +54,16 @@ CtxPort 支持最主流的 AI 聊天平台和 GitHub。以下是各平台的功
- 四种复制格式(Full、User Only、Code Only、Compact)
- 右键菜单支持

## 豆包

**地址:** [www.doubao.com](https://www.doubao.com)

- 对话内复制按钮
- 侧边栏列表复制(悬停即可复制,无需打开对话)
- 键盘快捷键(Alt+Shift+C)
- 四种复制格式(Full、User Only、Code Only、Compact)
- 右键菜单支持

## GitHub

**地址:** [github.com](https://github.com)
Expand All @@ -65,12 +75,12 @@ CtxPort 支持最主流的 AI 聊天平台和 GitHub。以下是各平台的功

## 功能支持对照表

| 功能 | ChatGPT | Claude | Gemini | DeepSeek | Grok | GitHub |
|------|---------|--------|--------|----------|------|--------|
| 对话内复制按钮 | Yes | Yes | Yes | Yes | Yes | Yes |
| 侧边栏列表复制 | Yes | Yes | — | — | — | — |
| 键盘快捷键 | Yes | Yes | Yes | Yes | Yes | Yes |
| Full 格式 | Yes | Yes | Yes | Yes | Yes | Yes |
| User Only 格式 | Yes | Yes | Yes | Yes | Yes | Yes |
| Code Only 格式 | Yes | Yes | Yes | Yes | Yes | Yes |
| Compact 格式 | Yes | Yes | Yes | Yes | Yes | Yes |
| 功能 | ChatGPT | Claude | Gemini | DeepSeek | Grok | 豆包 | GitHub |
|------|---------|--------|--------|----------|------|------|--------|
| 对话内复制按钮 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| 侧边栏列表复制 | Yes | Yes | — | — | — | Yes | — |
| 键盘快捷键 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Full 格式 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| User Only 格式 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Code Only 格式 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| Compact 格式 | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
5 changes: 5 additions & 0 deletions apps/web/src/components/home/landing-page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ const PLATFORMS = [
"Gemini",
"DeepSeek",
"Grok",
"Doubao",
"GitHub",
] as const;

Expand Down Expand Up @@ -621,6 +622,10 @@ function PlatformsSection() {
name: t("web.home.platforms.grok.name"),
desc: t("web.home.platforms.grok.desc"),
},
{
name: t("web.home.platforms.doubao.name"),
desc: t("web.home.platforms.doubao.desc"),
},
{
name: t("web.home.platforms.github.name"),
desc: t("web.home.platforms.github.desc"),
Expand Down
2 changes: 1 addition & 1 deletion apps/web/src/components/structured-data.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ const softwareApp = {
"@type": "SoftwareApplication",
name: "CtxPort",
description:
"Copy AI conversations as structured Markdown Context Bundles. One-click copy from ChatGPT, Claude, Gemini, DeepSeek, Grok and more.",
"Copy AI conversations as structured Markdown Context Bundles. One-click copy from ChatGPT, Claude, Gemini, DeepSeek, Grok, Doubao and more.",
url: siteConfig.url,
applicationCategory: "BrowserApplication",
operatingSystem: "Chrome",
Expand Down
3 changes: 3 additions & 0 deletions packages/core-plugins/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ export {
chatgptPlugin,
claudePlugin,
deepseekPlugin,
doubaoPlugin,
geminiPlugin,
githubPlugin,
grokPlugin,
Expand All @@ -34,13 +35,15 @@ export {
import { chatgptPlugin } from "./plugins/chatgpt/plugin";
import { claudePlugin } from "./plugins/claude/plugin";
import { deepseekPlugin } from "./plugins/deepseek/plugin";
import { doubaoPlugin } from "./plugins/doubao/plugin";
import { geminiPlugin } from "./plugins/gemini/plugin";
import { githubPlugin } from "./plugins/github/plugin";
import { grokPlugin } from "./plugins/grok/plugin";
export const EXTENSION_HOST_PERMISSIONS = [
...chatgptPlugin.urls.hosts,
...claudePlugin.urls.hosts,
...deepseekPlugin.urls.hosts,
...doubaoPlugin.urls.hosts,
...geminiPlugin.urls.hosts,
...githubPlugin.urls.hosts,
...grokPlugin.urls.hosts,
Expand Down
Loading