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
2 changes: 1 addition & 1 deletion .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/release-cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Run CLI tests
working-directory: cli
Expand All @@ -77,7 +77,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Configure Git
run: |
Expand Down
24 changes: 12 additions & 12 deletions .github/workflows/release-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -163,7 +163,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Docker Compose
run: |
Expand Down Expand Up @@ -233,7 +233,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Docker Compose
run: |
Expand Down Expand Up @@ -298,7 +298,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -343,7 +343,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -385,7 +385,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -437,7 +437,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -506,7 +506,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -590,7 +590,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -675,7 +675,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Configure Git
run: |
Expand Down Expand Up @@ -773,7 +773,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down Expand Up @@ -873,7 +873,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Set up Node.js
uses: actions/setup-node@v4
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/snyk.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Install Snyk CLI
uses: snyk/actions/setup@master
Expand Down Expand Up @@ -107,7 +107,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@v6
with:
go-version: "1.26"
go-version: "1.26.1"

- name: Build
run: make build
Expand Down
4 changes: 2 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ bifrost/
│ └── (architecture|features|providers|mcp|plugins|enterprise|...)
├── .claude/skills/ # Claude Code skill definitions (4 skills)
├── go.work # Go workspace — requires Go 1.26
├── go.work # Go workspace — requires Go 1.26.1
├── Makefile # Build, test, dev commands (1300+ lines)
└── terraform/ # Infrastructure as Code
```
Expand All @@ -142,7 +142,7 @@ go.work
**Rules:**
- Run `go mod tidy` in the **specific module directory**, not the root
- Cross-module imports resolve via workspace locally, but need explicit `require` in `go.mod` for releases
- The workspace requires **Go 1.26** (`go.work` directive)
- The workspace requires **Go 1.26.1** (`go.work` directive)

---

Expand Down
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ _build-with-docker: # Internal target for Docker-based cross-compilation
-e GOOS=$(TARGET_OS) \
-e GOARCH=$(TARGET_ARCH) \
$(if $(LOCAL),,-e GOWORK=off) \
golang:1.26-alpine3.22 \
golang:1.26.1-alpine3.23 \
sh -c "apk add --no-cache gcc musl-dev && \
go build \
-ldflags='-w -s -X main.Version=v$(VERSION)' \
Expand All @@ -249,7 +249,7 @@ _build-with-docker: # Internal target for Docker-based cross-compilation
-e GOOS=$(TARGET_OS) \
-e GOARCH=$(TARGET_ARCH) \
$(if $(LOCAL),,-e GOWORK=off) \
golang:1.26-alpine3.22 \
golang:1.26.1-alpine3.23 \
sh -c "apk add --no-cache gcc musl-dev && \
go build \
-ldflags='-w -s -extldflags "-static" -X main.Version=v$(VERSION)' \
Expand Down
2 changes: 1 addition & 1 deletion cli/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/maximhq/bifrost/cli

go 1.26
go 1.26.1

require (
github.com/bytedance/sonic v1.15.0
Expand Down
71 changes: 71 additions & 0 deletions cli/internal/runtime/sgr.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package runtime

import (
"bytes"
"strconv"
)

// rewriteSGRParams converts colon-separated SGR sub-parameters to semicolon-
// separated equivalents. Each semicolon-delimited group is processed:
//
// - 4:x -> 4 (underline style -> basic underline)
// - 38:2:cs:r:g:b -> 38;2;r;g;b (fg true-color, drop colorspace)
// - 48:2:cs:r:g:b -> 48;2;r;g;b (bg true-color, drop colorspace)
// - 38:5:n -> 38;5;n (fg 256-color)
// - 48:5:n -> 48;5;n (bg 256-color)
// - 58:... -> (dropped - underline color, unsupported by vt10x)
// - other:x -> other (keep first sub-param only)
func rewriteSGRParams(params []byte) []byte {
parts := bytes.Split(params, []byte{';'})
var out [][]byte
for _, part := range parts {
if !bytes.ContainsRune(part, ':') {
out = append(out, part)
continue
}
subs := bytes.Split(part, []byte{':'})
if len(subs) == 0 {
continue
}
code, err := strconv.Atoi(string(subs[0]))
if err != nil {
out = append(out, subs[0])
continue
}
switch code {
case 4: // underline style -> basic underline
out = append(out, []byte("4"))
case 38, 48: // fg/bg color
if len(subs) >= 2 {
switch string(subs[1]) {
case "2": // true-color: code:2[:cs]:r:g:b
// Find r,g,b - skip optional colorspace id.
if len(subs) >= 6 {
// code:2:cs:r:g:b
out = append(out, subs[0], []byte("2"), subs[3], subs[4], subs[5])
} else if len(subs) >= 5 {
// code:2:r:g:b (no colorspace)
out = append(out, subs[0], []byte("2"), subs[2], subs[3], subs[4])
} else {
out = append(out, subs[0])
}
case "5": // 256-color: code:5:n
if len(subs) >= 3 {
out = append(out, subs[0], []byte("5"), subs[2])
} else {
out = append(out, subs[0])
}
default:
out = append(out, subs[0])
}
} else {
out = append(out, subs[0])
}
case 58: // underline color - not supported by vt10x, drop entirely
continue
default:
out = append(out, subs[0])
}
}
return bytes.Join(out, []byte{';'})
}
65 changes: 0 additions & 65 deletions cli/internal/runtime/tabmgr.go
Original file line number Diff line number Diff line change
Expand Up @@ -1527,71 +1527,6 @@ func sanitizeSGR(data []byte) []byte {
return result
}

// rewriteSGRParams converts colon-separated SGR sub-parameters to semicolon-
// separated equivalents. Each semicolon-delimited group is processed:
//
// - 4:x → 4 (underline style → basic underline)
// - 38:2:cs:r:g:b → 38;2;r;g;b (fg true-color, drop colorspace)
// - 48:2:cs:r:g:b → 48;2;r;g;b (bg true-color, drop colorspace)
// - 38:5:n → 38;5;n (fg 256-color)
// - 48:5:n → 48;5;n (bg 256-color)
// - 58:... → (dropped — underline color, unsupported by vt10x)
// - other:x → other (keep first sub-param only)
func rewriteSGRParams(params []byte) []byte {
parts := bytes.Split(params, []byte{';'})
var out [][]byte
for _, part := range parts {
if !bytes.ContainsRune(part, ':') {
out = append(out, part)
continue
}
subs := bytes.Split(part, []byte{':'})
if len(subs) == 0 {
continue
}
code, err := strconv.Atoi(string(subs[0]))
if err != nil {
out = append(out, subs[0])
continue
}
switch code {
case 4: // underline style → basic underline
out = append(out, []byte("4"))
case 38, 48: // fg/bg color
if len(subs) >= 2 {
switch string(subs[1]) {
case "2": // true-color: code:2[:cs]:r:g:b
// Find r,g,b — skip optional colorspace id
if len(subs) >= 6 {
// code:2:cs:r:g:b
out = append(out, subs[0], []byte("2"), subs[3], subs[4], subs[5])
} else if len(subs) >= 5 {
// code:2:r:g:b (no colorspace)
out = append(out, subs[0], []byte("2"), subs[2], subs[3], subs[4])
} else {
out = append(out, subs[0])
}
case "5": // 256-color: code:5:n
if len(subs) >= 3 {
out = append(out, subs[0], []byte("5"), subs[2])
} else {
out = append(out, subs[0])
}
default:
out = append(out, subs[0])
}
} else {
out = append(out, subs[0])
}
case 58: // underline color — not supported by vt10x, drop entirely
continue
default:
out = append(out, subs[0])
}
}
return bytes.Join(out, []byte{';'})
}

// ─────────────────────────────────────────────────────────────────────────────
// Frame-based rendering
// ─────────────────────────────────────────────────────────────────────────────
Expand Down
2 changes: 1 addition & 1 deletion core/go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
module github.com/maximhq/bifrost/core

go 1.26
go 1.26.1

require (
cloud.google.com/go v0.123.0
Expand Down
2 changes: 1 addition & 1 deletion docs/benchmarking/run-your-own-benchmarks.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Want to see Bifrost's performance in your specific environment? The [**Bifrost B

Before running benchmarks, ensure you have:

- **Go 1.23+** installed on your testing machine
- **Go 1.26.1+** installed on your testing machine
- **Bifrost instance** running and accessible
- **Target API providers** configured (OpenAI, Anthropic, etc.)
- **Network access** between benchmark tool and Bifrost
Expand Down
Loading
Loading