Skip to content

Commit 26f374d

Browse files
Sync public snapshot from freebuff-private
Source: CodebuffAI/freebuff-private@2d2fc185bafd253bdf4e62da3225c0eefe310341
1 parent b0ec802 commit 26f374d

6 files changed

Lines changed: 82 additions & 64 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Freebuff includes a curated model catalog. The regular picker currently offers:
3939
| **GPT-5.6 Luna** | Full access | Strong all-around with native images |
4040
| **MiMo 2.5** | Full and limited access | Balanced performance with image support |
4141
| **Solar Pro 4** | Full and limited access | Limited-time trial; 524K context, text only; unmetered at full access |
42-
| **Muse Spark 1.2** | Full access | Meta's agentic coding model; 1M context. Rate limited and shared by every user, so it queues when busy and answers on DeepSeek V4 Flash rather than making you wait |
42+
| **Muse Spark 1.3** | Full access | Meta's agentic coding model; 1M context. Rate limited and shared by every user, so it queues when busy and answers on DeepSeek V4 Flash rather than making you wait |
4343

4444
Most models draw on your normal daily sessions rather than a separate limit. GLM 5.3 Flash, DeepSeek V4.1 Flash, MiMo 2.5 and Solar Pro 4 are unmetered at full access and cost no session at all. Models may still serve from a quantized (Q8_0) build.
4545

README.zh-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Freebuff 提供经过筛选的模型目录。常规模型选择器目前包括
3939
| **GPT-5.6 Luna** | 完整访问 | 综合能力强,原生支持图像 |
4040
| **MiMo 2.5** | 完整和受限访问 | 均衡性能并支持图像 |
4141
| **Solar Pro 4** | 完整和受限访问 | 限时试用;52.4 万上下文,仅支持文本;完整访问下不消耗会话 |
42-
| **Muse Spark 1.2** | 完整访问 | Meta 的智能体编码模型;100 万上下文。有速率限制且所有用户共享,繁忙时排队,随后改由 DeepSeek V4 Flash 作答,不会让你一直等 |
42+
| **Muse Spark 1.3** | 完整访问 | Meta 的智能体编码模型;100 万上下文。有速率限制且所有用户共享,繁忙时排队,随后改由 DeepSeek V4 Flash 作答,不会让你一直等 |
4343

4444
大多数模型使用你的常规每日会话,而不再各自设限。GLM 5.3 Flash、DeepSeek V4.1 Flash、MiMo 2.5 和 Solar Pro 4 在完整访问下保持无限使用,完全不消耗会话。模型仍可能由量化(Q8_0)版本提供服务。
4545

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

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -724,10 +724,11 @@ describe('freebuff model availability', () => {
724724
// It is a temporary occupant — see the removal order on its constant. If
725725
// anything ELSE turns up here, check it against the same three questions
726726
// before accepting it.
727-
// EMPTY since 2026-09-07: its only occupant, Muse Spark 1.2, went back
728-
// into the pickers when 1.3 was withdrawn. An id landing here again should
729-
// be checked against the same three questions in the comment above.
730-
expect(FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS).toEqual([])
727+
// Empty 2026-09-07 → 2026-09-13 while 1.2 was the offered row; it is back
728+
// here now that 1.3 has replaced it again.
729+
expect(FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS).toEqual([
730+
FREEBUFF_MUSE_SPARK_12_CONTRIBUTOR_MODEL_ID,
731+
])
731732
for (const id of FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS) {
732733
// Still a session model (live sessions keep running) and still metered
733734
// by some pool (never unlimited by omission).
@@ -1875,58 +1876,59 @@ describe('limited-offer models (Claude Fable 5)', () => {
18751876
describe('Meta Muse Spark 1.3 Contributor', () => {
18761877
const ID = FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID
18771878

1878-
test('is withdrawn: recognised, paused, and in no picker', () => {
1879-
// Withdrawn 2026-09-07, three days after it was listed. Not busy and not
1880-
// flapping — GONE: probed that day, all four Meta keys answered `404
1881-
// model_not_found` on 5 of 5 attempts each, while 1.2 answered 5 of 5 on
1882-
// the same keys in the same minute. 2,838 sessions a day were still being
1883-
// admitted on it and every one was served on DeepSeek V4 Flash by the
1884-
// fallback, which is a promise broken on every turn however well the
1885-
// fallback works.
1886-
expect(isFreebuffPausedFreeModelId(ID)).toBe(true)
1887-
expect(FREEBUFF_MODELS.map((model) => model.id)).not.toContain(ID)
1888-
expect(FREEBUFF_WEB_MODELS.map((model) => model.id)).not.toContain(ID)
1889-
// RECOGNISED, though: every released CLI and Desktop holds this id and
1890-
// will keep sending it. An id the server does not know can only be
1891-
// refused, and a refusal is the retry loop of #1801; listed in
1892-
// SUPPORTED_FREEBUFF_MODELS it is coerced instead.
1879+
test('is the offered Muse Spark row, everywhere', () => {
1880+
// Withdrawn 2026-09-07 (`404 model_not_found` on every key, every attempt)
1881+
// and restored 2026-09-13, when it answered every probe on the live keys
1882+
// exactly as 1.2 did. It replaces 1.2 on every surface.
1883+
expect(isFreebuffPausedFreeModelId(ID)).toBe(false)
1884+
expect(FREEBUFF_MODELS.map((model) => model.id)).toContain(ID)
1885+
expect(FREEBUFF_WEB_MODELS.map((model) => model.id)).toContain(ID)
1886+
expect(isFreebuffWebSelectableModelId(ID)).toBe(true)
1887+
expect(isFreebuffSessionModelId(ID)).toBe(true)
1888+
expect(isFreebuffWebPremiumModelId(ID)).toBe(true)
1889+
expect(FREEBUFF_STANDARD_MODEL_IDS).not.toContain(ID)
18931890
expect(SUPPORTED_FREEBUFF_MODELS.map((model) => model.id)).toContain(ID)
18941891
expect(isSupportedFreebuffModelId(ID)).toBe(true)
18951892
})
1896-
18971893
})
18981894

18991895
describe('Meta Muse Spark 1.2 Contributor', () => {
19001896
const ID = FREEBUFF_MUSE_SPARK_12_CONTRIBUTOR_MODEL_ID
19011897

1902-
test('is the offered Muse Spark row, everywhere', () => {
1903-
// It was retired to a draining row on 2026-09-02 in favour of 1.3, and it
1904-
// came back on 2026-09-07 when 1.3 turned out to be gone at Meta — `404
1905-
// model_not_found` on all four keys, 5 of 5 each, while this one answered
1906-
// 5 of 5 on the same keys in the same minute.
1898+
test('is retired from every picker but still served', () => {
1899+
// Replaced by 1.3 on 2026-09-13, as it first was on 2026-09-02. Gone from
1900+
// the CLI/Desktop grid and hidden in the browser pickers, but still a
1901+
// premium-metered session model and a recognised id, so a live session and
1902+
// an installed build that holds it keep running on it. NOT paused: a pause
1903+
// would coerce that pick to the tier default instead.
1904+
expect(FREEBUFF_MODELS.map((model) => model.id)).not.toContain(ID)
1905+
expect(isFreebuffWebSelectableModelId(ID)).toBe(false)
1906+
expect(FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS).toContain(ID)
19071907
expect(FREEBUFF_WEB_MODELS.map((model) => model.id)).toContain(ID)
19081908
expect(isFreebuffSessionModelId(ID)).toBe(true)
19091909
expect(isFreebuffWebPremiumModelId(ID)).toBe(true)
1910-
expect(FREEBUFF_STANDARD_MODEL_IDS).not.toContain(ID)
1911-
// Offered by every picker now, not hidden behind the retirement list.
1912-
expect(isFreebuffWebSelectableModelId(ID)).toBe(true)
1913-
expect(FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS).not.toContain(ID)
1914-
expect(FREEBUFF_MODELS.map((model) => model.id)).toContain(ID)
1910+
expect(isFreebuffPausedFreeModelId(ID)).toBe(false)
19151911
expect(SUPPORTED_FREEBUFF_MODELS.map((model) => model.id)).toContain(ID)
19161912
expect(isSupportedFreebuffModelId(ID)).toBe(true)
19171913
})
19181914

1919-
test('a saved 1.2 pick is no longer pushed anywhere', () => {
1920-
// It used to point at 1.3, which was the only route from a browser that
1921-
// remembered 1.2 to the row that replaced it. 1.3 was withdrawn on
1922-
// 2026-09-07 (`404 model_not_found` on every key), so the arrow went with
1923-
// it: superseding a pick onto a model that cannot answer is worse than
1924-
// leaving it where it is.
1915+
test('a saved 1.2 pick moves to 1.3 wherever 1.3 is offered', () => {
19251916
const webSelectable = FREEBUFF_WEB_MODELS.map((model) => model.id).filter(
19261917
(id) => isFreebuffWebSelectableModelId(id),
19271918
)
1928-
expect(migrateSupersededFreebuffModelPreference(ID, webSelectable)).toBeNull()
1929-
expect(getFreebuffModelSupersededBy(ID, webSelectable)).toBeUndefined()
1919+
expect(migrateSupersededFreebuffModelPreference(ID, webSelectable)).toBe(
1920+
FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID,
1921+
)
1922+
expect(getFreebuffModelSupersededBy(ID, webSelectable)?.modelId).toBe(
1923+
FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID,
1924+
)
1925+
// The CLI migrates against the grid it renders.
1926+
expect(
1927+
migrateSupersededFreebuffModelPreference(
1928+
ID,
1929+
FREEBUFF_MODELS.map((model) => model.id),
1930+
),
1931+
).toBe(FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID)
19301932
// A surface that cannot show 1.3 is not told to switch to it.
19311933
expect(
19321934
migrateSupersededFreebuffModelPreference(ID, [

common/src/constants/free-agents.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -606,9 +606,10 @@ export const FREE_MODE_AGENT_MODELS: Record<string, Set<string>> = {
606606
FREEBUFF_DEEPSEEK_V4_FLASH_MAX_MODEL_ID,
607607
]),
608608
'base2-free-luna-max': new Set([FREEBUFF_GPT_5_6_LUNA_MAX_MODEL_ID]),
609-
// The Muse Spark root — on every surface since 2026-09-07, when 1.3 was
610-
// withdrawn and 1.2 took its place. Exactly one model, like every other
611-
// pinned root:
609+
// The Muse Spark 1.2 root. The offered row from 2026-09-07, while 1.3 was
610+
// withdrawn, until 1.3 replaced it again on 2026-09-13; it now serves live
611+
// sessions and installed builds that still hold 1.2. Exactly one model, like
612+
// every other pinned root:
612613
// the rate-limit queue accounts by model, so a root that could also run
613614
// something else would let a turn escape the queue's bookkeeping.
614615
'base2-free-muse-spark': new Set([

common/src/constants/freebuff-models.ts

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1779,16 +1779,23 @@ const MUSE_SPARK_12_CONTRIBUTOR_MODEL = {
17791779
// better model. migrateSupersededFreebuffModelPreference rewrites a saved
17801780
// 1.2 pick to 1.3 on load, which is the only way a browser that remembered
17811781
// this row ever reaches the new one — the retired row itself is not offered.
1782+
// Removed 2026-09-07 while 1.3 was withdrawn; back 2026-09-13 with 1.3.
1783+
supersededBy: {
1784+
modelId: FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID,
1785+
notice:
1786+
'Muse Spark 1.3 replaces 1.2: same price and terms, better at agentic coding.',
1787+
actionLabel: 'Switch to Muse Spark 1.3',
1788+
},
17821789
} as const satisfies FreebuffModelOption
17831790

17841791
/**
17851792
* Meta Muse Spark 1.3 Contributor. Premium on Web and Cloud, and unusual in
17861793
* WHY: every other premium row is priced premium, while this one is cheaper
17871794
* per token than DeepSeek V4 Flash. What is scarce is the team-wide rate
17881795
* limit, so the daily premium session pool is doing double duty here as a way
1789-
* to bound how many people are inside that limit at once. See
1790-
* FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID for why it stays off the CLI and
1791-
* Desktop for now, and what widening it takes.
1796+
* to bound how many people are inside that limit at once. On every surface
1797+
* since 2026-09-04; withdrawn 2026-09-07 (`404 model_not_found` on every key)
1798+
* and restored 2026-09-13, replacing 1.2 again (docs/freebuff-muse-spark.md).
17921799
*/
17931800
const MUSE_SPARK_13_CONTRIBUTOR_MODEL = {
17941801
id: FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID,
@@ -2004,19 +2011,25 @@ export const FREEBUFF_MODELS = [
20042011
// works. Its id is PAUSED rather than deleted so the installed binaries
20052012
// that hold it are coerced instead of refused.
20062013
//
2007-
// 1.2 TAKES ITS PLACE, on every surface (2026-09-07). It answered 5 of 5 on
2014+
// 1.2 TOOK ITS PLACE, on every surface (2026-09-07). It answered 5 of 5 on
20082015
// all four keys in the same probe that found 1.3 dead, and the reason it was
20092016
// Freebuff Web only for its first life no longer holds: the completions
20102017
// layer reroutes anything the shared ceiling cannot absorb to DeepSeek V4
20112018
// Flash with no client involvement, and the key pool made saturation rare —
20122019
// so a surface no longer needs somewhere to render a wait, which was the
2013-
// only thing that kept it browser-bound. That is the same argument that
2014-
// widened 1.3 three days ago; it did not depend on the version.
2020+
// only thing that kept it browser-bound.
20152021
//
2016-
// Last in the list on purpose, as 1.3 was: this is still the one row that
2017-
// may answer as another model when Meta's team-wide ceiling is full, and a
2018-
// row carrying that caveat should not outrank one without it.
2019-
MUSE_SPARK_12_CONTRIBUTOR_MODEL,
2022+
// MUSE SPARK 1.3 IS BACK, replacing 1.2 on every surface (2026-09-13). It
2023+
// answered every probe on the live keys exactly as 1.2 did, with no 404s.
2024+
// 1.2 left this list but not the catalog: it is retired from the browser
2025+
// pickers (FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS), still served for live
2026+
// sessions and installed builds, and its `supersededBy` moves saved picks
2027+
// here.
2028+
//
2029+
// Last in the list on purpose: this is still the one row that may answer as
2030+
// another model when Meta's team-wide ceiling is full, and a row carrying
2031+
// that caveat should not outrank one without it.
2032+
MUSE_SPARK_13_CONTRIBUTOR_MODEL,
20202033
] as const satisfies readonly FreebuffModelOption[]
20212034

20222035
/** Public full-access models metered by the shared premium pool. The catalog
@@ -2098,12 +2111,6 @@ export function getFreebuffPerModelSessionSpendCap(
20982111
* clients that need it are the ones already installed.
20992112
*/
21002113
export const FREEBUFF_PAUSED_FREE_MODEL_IDS: readonly string[] = [
2101-
// Muse Spark 1.3, withdrawn 2026-09-07: `404 model_not_found` on every key,
2102-
// every attempt. Paused rather than deleted for the reason the whole list
2103-
// exists — an id the server does not recognise can only be refused, and a
2104-
// refusal is the retry loop that cost the limited tier 2.5x its admissions
2105-
// in #1801. See its row in FREEBUFF_MODELS for the measurement.
2106-
FREEBUFF_MUSE_SPARK_13_CONTRIBUTOR_MODEL_ID,
21072114
// Withdrawn from free mode entirely on 2026-08-20. Its hourly burn became
21082115
// the largest single line on the bill — and is not worth that at any tier.
21092116
//
@@ -2343,9 +2350,11 @@ export const FREEBUFF_WEB_MODELS = [
23432350
// back in the picker without making it admissible — a visible row whose
23442351
// first send is coerced away, which is the offer-without-gate shape
23452352
// common/src/testing/freebuff-offer-invariants.ts exists to catch.
2346-
// Muse Spark 1.2 reaches this list by spreading FREEBUFF_MODELS again,
2347-
// as it did before its 2026-09-02 retirement; naming it here too would
2348-
// duplicate the row.
2353+
// Muse Spark 1.2 is RETIRED from the picker again as of 2026-09-13, when 1.3
2354+
// replaced it (FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS hides it). It left
2355+
// FREEBUFF_MODELS, so it is named here to stay a Web session model for the
2356+
// sessions already on it; the premium-pool metering follows from this entry.
2357+
MUSE_SPARK_12_CONTRIBUTOR_MODEL,
23492358
// Gemini 3.8 Flash is listed HERE rather than in FREEBUFF_MODELS, and the
23502359
// difference is the whole gate. It is a Pro row
23512360
// (FREEBUFF_SUBSCRIPTION_PRO_MODEL_IDS), and Pro is enforced on Freebuff Web
@@ -2416,6 +2425,12 @@ export const FREEBUFF_WEB_RETIRED_PICKER_MODEL_IDS = [
24162425
// budget at Meta. A saved pick is rewritten to 1.3 by `supersededBy`.
24172426
// Finish the removal (row, roots, allowlist entries, this line) once the
24182427
// last 1.2 session is gone — a day is plenty.
2428+
//
2429+
// Emptied 2026-09-07 when 1.3 was withdrawn and 1.2 became the offered row;
2430+
// back on 2026-09-13 when 1.3 was restored and replaced it again. Installed
2431+
// CLI/Desktop builds that hold 1.2 keep being served on it too (it stays in
2432+
// SUPPORTED_FREEBUFF_MODELS with its roots), so "a day" is the Web drain only.
2433+
FREEBUFF_MUSE_SPARK_12_CONTRIBUTOR_MODEL_ID,
24192434
] as const
24202435

24212436
/** Whether the Web/Cloud picker should offer `id` as a new selection. False

freebuff/cli/release/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ freebuff
1919

2020
## Why Freebuff?
2121

22-
**Choice of leading models** — The regular CLI picker includes GLM 5.3 Flash, DeepSeek, GPT-5.6 Luna, MiMo, Solar Pro 4, and Muse Spark 1.2, with GLM 5.3 Flash selected by default.
22+
**Choice of leading models** — The regular CLI picker includes GLM 5.3 Flash, DeepSeek, GPT-5.6 Luna, MiMo, Solar Pro 4, and Muse Spark 1.3, with GLM 5.3 Flash selected by default.
2323

2424
**Fast** — 5–10× speed up. 3–5× tokens per second compared to Claude, plus context gathering in seconds.
2525

@@ -29,7 +29,7 @@ freebuff
2929

3030
**How can it be free?** Freebuff is supported by text ads.
3131

32-
**What models do you use?** In full mode, the regular picker includes GLM 5.3 Flash, DeepSeek V4.1 Flash, GPT-5.6 Luna, MiMo 2.5, Solar Pro 4, and Muse Spark 1.2. Solar Pro 4 is a limited-time trial. Muse Spark 1.2 has a 1M-token context and is rate limited across all users, so at busy times it queues and then answers on DeepSeek V4 Flash instead of leaving you waiting. GLM 5.3 Flash is the CLI default, and it costs no session at all, so the default is always available no matter how much you have used. Limited mode uses GLM 5.3 Flash, DeepSeek V4.1 Flash, MiMo 2.5, and Solar Pro 4. Most models draw on your normal daily sessions rather than a separate limit; GLM 5.3 Flash, DeepSeek V4.1 Flash, MiMo 2.5, and Solar Pro 4 are unmetered at full access. Models may still serve from a quantized (Q8_0) build.
32+
**What models do you use?** In full mode, the regular picker includes GLM 5.3 Flash, DeepSeek V4.1 Flash, GPT-5.6 Luna, MiMo 2.5, Solar Pro 4, and Muse Spark 1.3. Solar Pro 4 is a limited-time trial. Muse Spark 1.3 has a 1M-token context and is rate limited across all users, so at busy times it queues and then answers on DeepSeek V4 Flash instead of leaving you waiting. GLM 5.3 Flash is the CLI default, and it costs no session at all, so the default is always available no matter how much you have used. Limited mode uses GLM 5.3 Flash, DeepSeek V4.1 Flash, MiMo 2.5, and Solar Pro 4. Most models draw on your normal daily sessions rather than a separate limit; GLM 5.3 Flash, DeepSeek V4.1 Flash, MiMo 2.5, and Solar Pro 4 are unmetered at full access. Models may still serve from a quantized (Q8_0) build.
3333

3434
**Which countries is Freebuff available in?** All countries. Freebuff runs in "full" mode in the US, Canada, UK, EU, and other select countries, and in "limited" mode everywhere else (or while using a VPN). See [freebuff.com](https://freebuff.com) for the full list.
3535

0 commit comments

Comments
 (0)