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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*.dll
*.so
*.dylib
/JoyCode2Api
/JoyCodeProxy

# Go build cache
Expand All @@ -17,7 +18,8 @@ dist/
out/
joycode_proxy_bin
joycode_proxy_bin.bak
cmd/JoyCodeProxy/JoyCodeProxy
cmd/JoyCode2Api/JoyCode2Api
cmd/JoyCode2Api/JoyCodeProxy
joycode_proxy_darwin_*
joycode_proxy_linux_*
joycode-proxy
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,20 @@ COPY go.mod go.sum ./
RUN go mod download

COPY . .
RUN CGO_ENABLED=1 go build -ldflags "-s -w" -o /JoyCodeProxy ./cmd/JoyCodeProxy
RUN CGO_ENABLED=1 go build -ldflags "-s -w" -o /JoyCode2Api ./cmd/JoyCode2Api

FROM alpine:3.19

ARG ALPINE_MIRROR
RUN sed -i "s|https://dl-cdn.alpinelinux.org/alpine|${ALPINE_MIRROR}|g" /etc/apk/repositories \
&& apk add --no-cache ca-certificates

COPY --from=builder /JoyCodeProxy /usr/local/bin/JoyCodeProxy
COPY --from=builder /JoyCode2Api /usr/local/bin/JoyCode2Api

EXPOSE 34891

HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
CMD wget -qO- http://localhost:34891/health || exit 1

ENTRYPOINT ["JoyCodeProxy"]
ENTRYPOINT ["JoyCode2Api"]
CMD ["serve"]
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<div align="center">

# JoyCodeProxy
# JoyCode2Api

**一个不太正经的协议翻译器**

Expand All @@ -24,10 +24,10 @@ JoyAI-Code · GLM-5.1 · Kimi-K2.6 · MiniMax-M2.7 · Doubao-Seed-2.0-pro

事情是这样的:JoyCode(京东的 AI 编程助手)里面有一些不错的模型,GLM、Kimi、MiniMax、Doubao 这些都有。但它的 API 协议跟 Anthropic 和 OpenAI 的不一样,所以 Claude Code、Cursor 这些主流编程工具接不上。

JoyCodeProxy 就是在中间做了一个翻译层,把协议对齐了。改两个环境变量,Claude Code 就能直接用 JoyCode 的模型了。
JoyCode2Api 就是在中间做了一个翻译层,把协议对齐了。改两个环境变量,Claude Code 就能直接用 JoyCode 的模型了。

```
Claude Code / Cursor / Windsurf → JoyCodeProxy → JoyCode API
Claude Code / Cursor / Windsurf → JoyCode2Api → JoyCode API
(协议翻译)
```

Expand Down Expand Up @@ -78,7 +78,7 @@ Claude Code / Cursor / Windsurf → JoyCodeProxy → JoyCode API
cd web && npm install && npm run build && cd ..

# 再构建后端(前端会自动嵌入)
go build -o joycode_proxy_bin ./cmd/JoyCodeProxy/
go build -o JoyCode2Api ./cmd/JoyCode2Api/
```

或者用 Docker:
Expand All @@ -101,7 +101,7 @@ docker run -p 34891:34891 joycode-proxy
### 启动

```bash
./joycode_proxy_bin serve
./JoyCode2Api serve
```

默认监听 `0.0.0.0:34891`。macOS 首次启动会自动从本地 JoyCode 客户端读取凭据,不需要手动配。
Expand Down Expand Up @@ -159,7 +159,7 @@ claude
## 项目结构

```
cmd/JoyCodeProxy/ 入口,HTTP 服务器
cmd/JoyCode2Api/ 入口,HTTP 服务器
pkg/anthropic/ Anthropic 协议翻译(请求、响应、SSE 流式)
pkg/openai/ OpenAI 协议翻译
pkg/joycode/ JoyCode API 客户端
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"strings"
"testing"

"github.com/vibe-coding-labs/JoyCodeProxy/pkg/anthropic"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/joycode"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/anthropic"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/joycode"
)

// Regression for issue #4 (vision sub-bug): the Anthropic /v1/messages path
Expand Down
2 changes: 1 addition & 1 deletion cmd/JoyCodeProxy/chat.go → cmd/JoyCode2Api/chat.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/joycode"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/joycode"
)

var (
Expand Down
File renamed without changes.
4 changes: 2 additions & 2 deletions cmd/JoyCodeProxy/config.go → cmd/JoyCode2Api/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"path/filepath"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/auth"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/joycode"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/auth"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/joycode"
)

var configCmd = &cobra.Command{
Expand Down
2 changes: 1 addition & 1 deletion cmd/JoyCodeProxy/daemon.go → cmd/JoyCode2Api/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import (
"time"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/logrot"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/logrot"
)

const (
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion cmd/JoyCodeProxy/models.go → cmd/JoyCode2Api/models.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"fmt"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/joycode"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/joycode"
)

var modelsCmd = &cobra.Command{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import (
"fmt"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/auth"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/store"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/auth"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/store"
)

var resetPasswordCmd = &cobra.Command{
Expand Down
4 changes: 2 additions & 2 deletions cmd/JoyCodeProxy/root.go → cmd/JoyCode2Api/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import (
"log"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/auth"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/joycode"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/auth"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/joycode"
)

var (
Expand Down
File renamed without changes.
18 changes: 9 additions & 9 deletions cmd/JoyCodeProxy/serve.go → cmd/JoyCode2Api/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ import (
"time"

"github.com/spf13/cobra"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/anthropic"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/auth"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/dashboard"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/joycode"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/keepalive"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/logrot"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/openai"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/proxy"
"github.com/vibe-coding-labs/JoyCodeProxy/pkg/store"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/anthropic"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/auth"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/dashboard"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/joycode"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/keepalive"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/logrot"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/openai"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/proxy"
"github.com/vibe-coding-labs/JoyCode2Api/pkg/store"
)

var (
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.

Large diffs are not rendered by default.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading