Skip to content

Commit d46d844

Browse files
Sync public snapshot from freebuff-private
Source: CodebuffAI/freebuff-private@7ca52335951651002708a1e87161dcdc8f26d2fc
1 parent f3a659e commit d46d844

12 files changed

Lines changed: 121 additions & 5 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Freebuff includes a curated model catalog. The regular picker currently offers:
3737
| **GPT-5.6 Luna** | Full access | The default in full mode; strong all-around with native images |
3838
| **DeepSeek V4 Flash 07/31** | Full access | Fast coding and tool use; pauses during peak hours |
3939
| **MiMo 2.5** | Full and limited access | The limited-mode default; balanced performance with image support |
40+
| **Solar Pro 4** | Full access | Limited-time trial; 524K context, text only |
4041
| **GLM 5.3 Flash** | Full access | Deepest reasoning; 2 sessions a day |
4142

4243
Most models draw on your normal daily sessions rather than a separate limit. GLM 5.3 Flash is the exception, capped at 2 sessions a day while we measure what it costs at scale. MiMo 2.5 stays unmetered and costs no session at all. Models may still serve from a quantized (Q8_0) build.

README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ Freebuff 提供经过筛选的模型目录。常规模型选择器目前包括
3737
| **GPT-5.6 Luna** | 完整访问 | 完整模式下的默认模型;综合能力强,原生支持图像 |
3838
| **DeepSeek V4 Flash 07/31** | 完整访问 | 快速编程和工具调用;高峰时段暂停 |
3939
| **MiMo 2.5** | 完整和受限访问 | 受限模式的默认模型;均衡性能并支持图像 |
40+
| **Solar Pro 4** | 完整访问 | 限时试用;52.4 万上下文,仅支持文本 |
4041
| **GLM 5.3 Flash** | 完整访问 | 推理最深入;每天 2 次会话 |
4142

4243
大多数模型使用你的常规每日会话,而不再各自设限。GLM 5.3 Flash 是例外:在我们评估其规模化成本期间,每天限用 2 次会话。MiMo 2.5 保持无限使用,完全不消耗会话。模型仍可能由量化(Q8_0)版本提供服务。

agents/__tests__/base3.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import base3FreeLuna from '../base3-free-luna'
1717
import base3FreeMimo from '../base3-free-mimo'
1818
import base3FreeMinimaxM3 from '../base3-free-minimax-m3'
1919
import base3FreeOxAlpha from '../base3-free-ox-alpha'
20+
import base3FreeSolarPro4 from '../base3-free-solar-pro4'
2021
import base3Lite from '../base3-lite'
2122

2223
/**
@@ -50,13 +51,14 @@ const CLI_ROOTS = [
5051
base3FreeLuna,
5152
base3FreeFable,
5253
base3FreeOxAlpha,
54+
base3FreeSolarPro4,
5355
]
5456

5557
describe('base3 CLI roots', () => {
5658
test('keeps the efficiency flags the runtime reads', () => {
57-
// 13 since GLM 5.3 Flash shipped on 2026-08-26. The count is asserted so a
58-
// root added without the flags below cannot slip in unnoticed.
59-
expect(CLI_ROOTS.length).toBe(13)
59+
// 14 since Solar Pro 4 reached the CLI. The count is asserted so a root
60+
// added without the flags below cannot slip in unnoticed.
61+
expect(CLI_ROOTS.length).toBe(14)
6062
for (const agent of CLI_ROOTS) {
6163
// Windowed reads + the 100-entry glob cap + search-first tool wording.
6264
expect(agent.windowedFileReads).toBe(true)

agents/base-chat.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ End every response by calling the suggest_followups tool with exactly 3 followup
6868
'stealth/ox-alpha': 1_000_000,
6969
// GLM 5.3 Flash: 1,310,720 published, entered low for the same reason.
7070
'z-ai/glm-5.3-flash': 1_000_000,
71+
// Solar Pro 4: 524,288 published, entered low for the same reason.
72+
'upstage/solar-pro4': 500_000,
7173
}
7274

7375
/** For any model not listed above. Assuming a window is smaller than it is
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { FREEBUFF_SOLAR_PRO_4_MODEL_ID } from '@codebuff/common/constants/freebuff-models'
2+
3+
import { createBase2 } from './base2'
4+
5+
const definition = {
6+
...createBase2('free', {
7+
model: FREEBUFF_SOLAR_PRO_4_MODEL_ID,
8+
}),
9+
id: 'base2-free-solar-pro4',
10+
displayName: 'Buffy the Solar Pro 4 Free Orchestrator',
11+
}
12+
13+
export default definition

agents/base3-free-solar-pro4.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { FREEBUFF_SOLAR_PRO_4_MODEL_ID } from '@codebuff/common/constants/freebuff-models'
2+
3+
import { createBase3CliRoot } from './base3'
4+
5+
const definition = {
6+
...createBase3CliRoot({
7+
model: FREEBUFF_SOLAR_PRO_4_MODEL_ID,
8+
isFreebuff: true,
9+
}),
10+
id: 'base3-free-solar-pro4',
11+
displayName: 'Buffy on Solar Pro 4',
12+
}
13+
14+
export default definition
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { FREEBUFF_SOLAR_PRO_4_MODEL_ID } from '@codebuff/common/constants/freebuff-models'
2+
3+
import { publisher } from '../constants'
4+
import type { SecretAgentDefinition } from '../types/secret-agent-definition'
5+
import { createReviewer } from './code-reviewer'
6+
7+
const definition: SecretAgentDefinition = {
8+
id: 'code-reviewer-solar-pro4',
9+
publisher,
10+
...createReviewer(FREEBUFF_SOLAR_PRO_4_MODEL_ID),
11+
}
12+
13+
export default definition

common/src/__tests__/free-agents.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ describe('every freebuff root agent declares a prompt opening', () => {
682682
'base2-free-mimo': BASE2,
683683
'base2-free-minimax-m3': BASE2,
684684
'base2-free-luna': BASE2,
685+
'base2-free-solar-pro4': BASE2,
685686
'base2-free-glm': BASE2,
686687
// GLM 5.3 Flash's own root — a separate agent from 'base2-free-glm' above
687688
// because the two models draw on different pools; createBase2('free', …)

common/src/__tests__/freebuff-models.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ import {
3939
MUSE_SPARK_FALLBACK_MODEL_ID,
4040
MUSE_SPARK_FALLBACK_NOTICE,
4141
SUPPORTED_FREEBUFF_MODELS,
42+
FREEBUFF_WEB_PREMIUM_MODEL_IDS,
43+
isFreebuffDesktopPremiumBucketModelId,
4244
canFreebuffModelSpawnGeminiThinker,
4345
freebuffWithdrawnModelMessage,
4446
getFreebuffDeploymentAvailabilityLabel,
@@ -1427,6 +1429,25 @@ describe('freebuff model availability', () => {
14271429
}
14281430
})
14291431

1432+
test('gives every desktop-selectable metered model a one-tab slot', () => {
1433+
// buildAdmitStampStatement (web/src/server/free-session/store.ts) pairs a
1434+
// window to its admit row on (user_id, model, access_tier, admitted_at)
1435+
// with no instance id, so two Desktop tabs of one unit-metered model give
1436+
// that subquery two candidates and a `limit 1` that picks arbitrarily —
1437+
// one tab's session_units land on the other's admit. Fix a failure with a
1438+
// slot for the new row, or by keying admit rows by instance id.
1439+
//
1440+
// The premium pool, not "metered": Fable 5 is metered by an
1441+
// ADMISSION-counted pool, which the mis-pairing cannot corrupt.
1442+
const desktopSelectable: readonly string[] = SUPPORTED_FREEBUFF_MODELS.map(
1443+
(model) => model.id,
1444+
)
1445+
for (const id of FREEBUFF_WEB_PREMIUM_MODEL_IDS) {
1446+
if (!desktopSelectable.includes(id)) continue
1447+
expect(isFreebuffDesktopPremiumBucketModelId(id)).toBe(true)
1448+
}
1449+
})
1450+
14301451
test('marks both new DeepSeek builds as NEW and dates their names', () => {
14311452
// The wire ids are undated and auto-update, so the display has to carry the
14321453
// signal that this is a different model than the one users already judged.

common/src/constants/free-agents.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
FREEBUFF_MINIMAX_M3_MODEL_ID,
2222
FREEBUFF_MUSE_SPARK_12_CONTRIBUTOR_MODEL_ID,
2323
FREEBUFF_OX_ALPHA_MODEL_ID,
24+
FREEBUFF_SOLAR_PRO_4_MODEL_ID,
2425
LIMITED_FREEBUFF_MODEL_ID,
2526
FREEBUFF_MIMO_V25_MODEL_ID,
2627
} from './freebuff-models'
@@ -130,6 +131,7 @@ export const FREEBUFF_WEB_BASE3_AGENT_ID_BY_MODEL: Record<string, string> = {
130131
[FREEBUFF_GPT_5_6_LUNA_ES_MODEL_ID]: 'base3-free-luna-es',
131132
[FREEBUFF_MUSE_SPARK_12_CONTRIBUTOR_MODEL_ID]: 'base3-free-muse-spark',
132133
[FREEBUFF_OX_ALPHA_MODEL_ID]: 'base3-free-ox-alpha',
134+
[FREEBUFF_SOLAR_PRO_4_MODEL_ID]: 'base3-free-solar-pro4',
133135
}
134136

135137
/**
@@ -163,6 +165,7 @@ export const FREEBUFF_CLI_BASE3_AGENT_ID_BY_MODEL: Record<string, string> = {
163165
// pointed at the same root id since 2026-08-20; both surfaces share it, which
164166
// is the arrangement described in docs/freebuff-base3-harness.md.
165167
[FREEBUFF_OX_ALPHA_MODEL_ID]: 'base3-free-ox-alpha',
168+
[FREEBUFF_SOLAR_PRO_4_MODEL_ID]: 'base3-free-solar-pro4',
166169
}
167170

168171
/** Every base3 root id, whichever surface registered it. */
@@ -314,6 +317,7 @@ export const FREEBUFF_ROOT_AGENT_IDS = [
314317
'base2-free-mimo',
315318
'base2-free-minimax-m3',
316319
'base2-free-luna',
320+
'base2-free-solar-pro4',
317321
'base2-free-glm',
318322
'base2-free-glm-5-3-flash',
319323
'base2-free-kimi-k3-eco',
@@ -365,6 +369,7 @@ export const FREEBUFF_ROOT_AGENT_IDS = [
365369
'base3-free-mimo',
366370
'base3-free-minimax-m3',
367371
'base3-free-luna',
372+
'base3-free-solar-pro4',
368373
'base3-free-glm',
369374
'base3-free-glm-5-3-flash',
370375
'base3-free-kimi-k3-eco',
@@ -387,6 +392,7 @@ export const FREEBUFF_ROOT_AGENT_ID_BY_MODEL: Record<string, string> = {
387392
[FREEBUFF_MIMO_V25_MODEL_ID]: 'base2-free-mimo',
388393
[FREEBUFF_MINIMAX_M3_MODEL_ID]: 'base2-free-minimax-m3',
389394
[FREEBUFF_GPT_5_6_LUNA_MODEL_ID]: 'base2-free-luna',
395+
[FREEBUFF_SOLAR_PRO_4_MODEL_ID]: 'base2-free-solar-pro4',
390396
[FREEBUFF_DEEPSEEK_V4_PRO_MODEL_ID]: 'base2-free-deepseek',
391397
[FREEBUFF_DEEPSEEK_V4_FLASH_MODEL_ID]: 'base2-free-deepseek-flash',
392398
[FREEBUFF_GLM_V52_MODEL_ID]: 'base2-free-glm',
@@ -416,6 +422,7 @@ export const FREEBUFF_REVIEWER_AGENT_ID_BY_MODEL: Record<string, string> = {
416422
[FREEBUFF_MIMO_V25_MODEL_ID]: 'code-reviewer-mimo',
417423
[FREEBUFF_MINIMAX_M3_MODEL_ID]: 'code-reviewer-minimax-m3',
418424
[FREEBUFF_GPT_5_6_LUNA_MODEL_ID]: 'code-reviewer-luna',
425+
[FREEBUFF_SOLAR_PRO_4_MODEL_ID]: 'code-reviewer-solar-pro4',
419426
[FREEBUFF_DEEPSEEK_V4_PRO_MODEL_ID]: 'code-reviewer-deepseek',
420427
[FREEBUFF_DEEPSEEK_V4_FLASH_MODEL_ID]: 'code-reviewer-deepseek-flash',
421428
[FREEBUFF_GLM_V52_MODEL_ID]: 'code-reviewer-glm',
@@ -430,6 +437,7 @@ export const FREEBUFF_REVIEWER_AGENT_ID_BY_MODEL: Record<string, string> = {
430437
const FREEBUFF_DESKTOP_MODELS = new Set([
431438
FREEBUFF_MINIMAX_M3_MODEL_ID,
432439
FREEBUFF_GPT_5_6_LUNA_MODEL_ID,
440+
FREEBUFF_SOLAR_PRO_4_MODEL_ID,
433441
FREEBUFF_DEEPSEEK_V4_PRO_MODEL_ID,
434442
FREEBUFF_DEEPSEEK_V4_FLASH_MODEL_ID,
435443
FREEBUFF_MIMO_V25_MODEL_ID,
@@ -535,6 +543,7 @@ export const FREE_MODE_AGENT_MODELS: Record<string, Set<string>> = {
535543
// drain; the door is already shut in front of them.
536544
'base2-free-minimax-m3': new Set([FREEBUFF_MINIMAX_M3_MODEL_ID]),
537545
'base2-free-luna': new Set([FREEBUFF_GPT_5_6_LUNA_MODEL_ID]),
546+
'base2-free-solar-pro4': new Set([FREEBUFF_SOLAR_PRO_4_MODEL_ID]),
538547
'base2-free-glm': new Set([FREEBUFF_GLM_V52_MODEL_ID]),
539548
// GLM 5.3 Flash's root, pinned to its one model like every other. Kept
540549
// strictly separate from 'base2-free-glm' next door even though the models
@@ -634,6 +643,7 @@ export const FREE_MODE_AGENT_MODELS: Record<string, Set<string>> = {
634643
// Code reviewer for free mode
635644
'code-reviewer-minimax-m3': new Set([FREEBUFF_MINIMAX_M3_MODEL_ID]),
636645
'code-reviewer-luna': new Set([FREEBUFF_GPT_5_6_LUNA_MODEL_ID]),
646+
'code-reviewer-solar-pro4': new Set([FREEBUFF_SOLAR_PRO_4_MODEL_ID]),
637647
'code-reviewer-ox-alpha': new Set([FREEBUFF_OX_ALPHA_MODEL_ID]),
638648
'code-reviewer-deepseek': new Set([FREEBUFF_DEEPSEEK_V4_PRO_MODEL_ID]),
639649
'code-reviewer-deepseek-flash': new Set([

0 commit comments

Comments
 (0)