Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
173 commits
Select commit Hold shift + click to select a range
cf762b1
Merge pull request #2551 from lidge-jun/dev
lidge-jun Aug 25, 2026
678517f
release: v2.33.0-preview.20260825
lidge-jun Aug 25, 2026
4a5a749
merge dev into preview for the v2.34.0-preview.20260827 release
lidge-jun Aug 27, 2026
62dfc6c
Merge pull request #2757 from lidge-jun/codex/promote-preview-2340
lidge-jun Aug 27, 2026
809a06b
release: v2.34.0-preview.20260827
lidge-jun Aug 27, 2026
6667e34
merge dev into preview for the v2.35.0-preview release
Aug 28, 2026
e0e3234
Merge pull request #2825 from lidge-jun/codex/promote-preview-2350
lidge-jun Aug 28, 2026
dc1feaf
release: v2.36.0-preview.20260829
lidge-jun Aug 28, 2026
9f577ad
Merge pull request #2831 from lidge-jun/codex/release-preview-23600829
lidge-jun Aug 28, 2026
0df2ae4
merge preview into the promotion branch for v2.36.0-preview.20260830
lidge-jun Aug 30, 2026
dc3dd5b
Merge pull request #3001 from lidge-jun/codex/promote-preview-23600830
lidge-jun Aug 30, 2026
1e6497b
merge dev into the promotion branch for v2.38.0-preview.20260831
lidge-jun Aug 31, 2026
f86c975
merge dev into the promotion branch for v2.38.0-preview.20260831 (pic…
lidge-jun Aug 31, 2026
93704b4
Merge pull request #3072 from lidge-jun/codex/promote-preview-23800831
lidge-jun Aug 31, 2026
230cb19
Merge remote-tracking branch 'origin/dev' into codex/promote-preview-…
lidge-jun Sep 1, 2026
75f3895
merge dev into preview for v2.39.0-preview.20260901
lidge-jun Sep 1, 2026
84b48d6
merge dev into preview for v2.40.0-preview.20260902
Sep 2, 2026
7fd141f
Merge pull request #3260 from lidge-jun/codex/promote-preview-24000902
lidge-jun Sep 2, 2026
3224168
fix(release): pass the bump job's permissions through the reusable-wo…
lidge-jun Sep 2, 2026
49812c9
Merge pull request #3264 from lidge-jun/codex/promote-preview-relfix
lidge-jun Sep 2, 2026
798611e
merge dev into preview for v2.41.0-preview.20260903
Sep 3, 2026
d7de528
Merge pull request #3341 from lidge-jun/codex/promote-preview-2410-v2
lidge-jun Sep 3, 2026
1017867
Merge commit '1f00ff52b' into codex/promote-preview-2410-v3
Sep 3, 2026
491ffcf
Merge pull request #3347 from lidge-jun/codex/promote-preview-2410-v3
lidge-jun Sep 3, 2026
f2ed110
Merge commit '78c630a93' into codex/promote-preview-2410-v4
Sep 3, 2026
b064b8f
merge dev into preview for v2.42.0-preview.20260903
Sep 3, 2026
c779ae7
Merge pull request #3356 from lidge-jun/codex/promote-preview-2410-v4
lidge-jun Sep 3, 2026
bd85a6c
Merge pull request #3426 from lidge-jun/codex/promote-preview-2420-ba…
lidge-jun Sep 4, 2026
3959e6d
chore(release): promote main v2.42.0 onto preview and open 2.43.0-pre…
lidge-jun Sep 4, 2026
0748cf5
Merge pull request #3435 from lidge-jun/codex/promote-preview-2430
lidge-jun Sep 4, 2026
5c2d634
chore(release): promote verified dev candidate to 2.43.0 preview
invalid-email-address Sep 5, 2026
53c784c
Merge pull request #3677 from lidge-jun/codex/promote-preview-243-01a…
lidge-jun Sep 5, 2026
06ec553
Merge pull request #3678 from lidge-jun/codex/promote-main-243-01a07240
lidge-jun Sep 5, 2026
e609ada
chore(release): promote validated 2.44.0 candidate to preview
invalid-email-address Sep 6, 2026
f58fab8
Merge pull request #3784 from lidge-jun/codex/release-244-preview-07c0
lidge-jun Sep 6, 2026
116c2ac
Merge commit '44ea9576e27c6be8be7f13a86e32bb349368c54d' into codex/re…
invalid-email-address Sep 6, 2026
07b48da
Merge pull request #3785 from lidge-jun/codex/release-244-main-07c0
lidge-jun Sep 6, 2026
8b031f8
chore(release): promote validated 2.45.0-preview.20260907 to preview …
invalid-email-address Sep 6, 2026
bcdf559
chore(release): promote validated 2.45.0 to main [skip ci]
invalid-email-address Sep 6, 2026
15d0e8b
chore(release): promote 2.45.0-preview.20260907 (#3814)
lidge-jun Sep 6, 2026
b0900e5
chore(release): promote 2.45.0 to main (#3813)
lidge-jun Sep 6, 2026
3970601
chore(release): prepare 2.46.0 stable promotion
invalid-email-address Sep 7, 2026
6ccfe7e
chore(release): prepare 2.46.0-preview.20260907 promotion
invalid-email-address Sep 7, 2026
bba6322
Merge pull request #3851 from lidge-jun/codex/release-246-main
lidge-jun Sep 7, 2026
9ef2aaf
Merge pull request #3852 from lidge-jun/codex/release-246-preview
lidge-jun Sep 7, 2026
3d53e5f
release: prepare 2.47.0 from audited regression candidate
invalid-email-address Sep 7, 2026
63fb304
release: prepare 2.47.0-preview.20260908 from audited regression cand…
invalid-email-address Sep 7, 2026
665ef82
Merge commit '48ab3e1e66cfa6e0c873de2fafa4540ac61d6c7d' into codex/re…
invalid-email-address Sep 7, 2026
eda8754
Merge commit '48ab3e1e66cfa6e0c873de2fafa4540ac61d6c7d' into codex/re…
invalid-email-address Sep 7, 2026
d2ec06b
Merge commit '57252193b' into codex/release-247-preview
invalid-email-address Sep 7, 2026
f9e3515
Merge commit '57252193b' into codex/release-247-main
invalid-email-address Sep 7, 2026
7ef13dd
release: promote 2.47.0-preview.20260908 to preview (#3928)
lidge-jun Sep 7, 2026
6f71931
release: promote 2.47.0 to main (#3929)
lidge-jun Sep 7, 2026
09d1f04
Merge commit 'd0737cff3' into codex/release-247-preview-final
invalid-email-address Sep 7, 2026
9a60256
Merge commit 'd0737cff3' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
8ad5ca0
Merge commit 'f48c322c0' into codex/release-247-preview-final
invalid-email-address Sep 7, 2026
9e9b1d3
Merge commit 'f48c322c0' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
80b1f52
Merge commit '0d7652ad1' into codex/release-247-preview-final
invalid-email-address Sep 7, 2026
947bae9
Merge commit '0d7652ad1' into codex/release-247-main-final
invalid-email-address Sep 7, 2026
3bef206
release: apply final roster correction to preview (#3932)
lidge-jun Sep 7, 2026
f7f890f
release: apply final roster correction to main (#3933)
lidge-jun Sep 7, 2026
a5aaed6
release: promote 2.48.0 to preview
invalid-email-address Sep 8, 2026
544ebee
release: promote 2.48.0 to main
invalid-email-address Sep 8, 2026
954b99d
release: set preview channel version 2.48.0-preview.20260908
invalid-email-address Sep 8, 2026
d24ff57
release: set main channel version 2.48.0
invalid-email-address Sep 8, 2026
c71474e
Merge pull request #4010 from lidge-jun/codex/release-248-preview
lidge-jun Sep 8, 2026
9a27e86
Merge pull request #4011 from lidge-jun/codex/release-248-main
lidge-jun Sep 8, 2026
ad18c27
release: promote verified 2.49.0 product tree to preview
lidge-jun Sep 9, 2026
62849df
release: promote verified 2.49.0 product tree to main
lidge-jun Sep 9, 2026
a433d39
Merge pull request #4116 from lidge-jun/codex/release-249-preview-01a…
lidge-jun Sep 9, 2026
2f3f736
Merge pull request #4117 from lidge-jun/codex/release-249-main-01a08498
lidge-jun Sep 9, 2026
3a3de88
release: promote verified 2.50.0 product tree to main
lidge-jun Sep 10, 2026
2d4d7a2
Merge pull request #4195 from lidge-jun/codex/release-250-main-01a08a81
lidge-jun Sep 10, 2026
cf456e8
release: promote verified 2.51.0 product tree to main
lidge-jun Sep 11, 2026
c1af925
release: promote verified 2.52.0-preview.20260911 product tree to pre…
lidge-jun Sep 11, 2026
c155cc7
Merge pull request #4271 from lidge-jun/codex/release-251-main
lidge-jun Sep 11, 2026
69207f1
Merge pull request #4273 from lidge-jun/codex/release-252-preview
lidge-jun Sep 11, 2026
8d7e24e
release: promote verified 2.52.0-preview.20260912 product tree to pre…
lidge-jun Sep 12, 2026
9d4e45a
Merge pull request #4399 from lidge-jun/codex/release-2520-preview-20…
lidge-jun Sep 12, 2026
3608119
release: promote verified 2.52.0-preview.20260912 product tree to pre…
lidge-jun Sep 12, 2026
adb39cb
Merge pull request #4406 from lidge-jun/codex/release-2520-preview-20…
lidge-jun Sep 12, 2026
95c4875
release: promote verified 2.52.0 product tree to main
lidge-jun Sep 12, 2026
4d37c35
Merge pull request #4407 from lidge-jun/codex/release-2520-main
lidge-jun Sep 12, 2026
b06e54c
release: promote verified 2.53.0-preview.20260913 product tree to pre…
lidge-jun Sep 13, 2026
90ff8aa
Merge pull request #4504 from lidge-jun/codex/release-2530-preview-20…
lidge-jun Sep 13, 2026
641b05a
release: promote verified 2.53.0 product tree to main
lidge-jun Sep 13, 2026
aa05b3e
Merge pull request #4507 from lidge-jun/codex/release-2530-main
lidge-jun Sep 13, 2026
8e532c5
release: promote verified 2.54.0 product tree to main
lidge-jun Sep 13, 2026
f8d5fd9
release: promote verified 2.54.0-preview.20260914 product tree to pre…
lidge-jun Sep 13, 2026
9f7397e
Merge pull request #4540 from lidge-jun/codex/release-2540-main
lidge-jun Sep 13, 2026
4d633cb
Merge pull request #4541 from lidge-jun/codex/release-2540-preview-20…
lidge-jun Sep 13, 2026
02044b2
chore(release): promote 2.55.0-preview.20260914 to preview
lidge-jun Sep 14, 2026
704857f
release: promote the verified 2.55.0-preview.20260914 product tree to…
lidge-jun Sep 14, 2026
7bdd1b2
Merge pull request #4617 from lidge-jun/codex/260914-preview-2550
lidge-jun Sep 14, 2026
58c15b8
chore(release): promote the verified 2.55.0 product tree to main
lidge-jun Sep 14, 2026
f978400
release: promote the verified 2.55.0 product tree to main
lidge-jun Sep 14, 2026
1cc89cf
Merge pull request #4619 from lidge-jun/codex/260914-main-2550
lidge-jun Sep 14, 2026
e4a8539
Merge pull request #4694 from lidge-jun/codex/260915-main-2560-v2
lidge-jun Sep 15, 2026
44de45d
Merge pull request #4829 from lidge-jun/release/2.57.0
lidge-jun Sep 16, 2026
6fe4cd0
Merge pull request #4915 from lidge-jun/release/2.58.0
lidge-jun Sep 17, 2026
134c92a
Merge pull request #5074 from lidge-jun/release/2.59.0
lidge-jun Sep 18, 2026
7c625fc
Merge pull request #5249 from lidge-jun/release/2.60.0
lidge-jun Sep 20, 2026
e45692f
Merge pull request #5510 from lidge-jun/codex/native-tray-release-mai…
lidge-jun Sep 22, 2026
9bc8acb
ci(release): expose Linux bundler diagnostics for stable artifacts
lidge-jun Sep 22, 2026
b730157
Merge pull request #5524 from lidge-jun/codex/main-linux-package-diag…
lidge-jun Sep 22, 2026
5a7c48c
fix(release): prepare stable platform bundles
lidge-jun Sep 22, 2026
891674c
Merge pull request #5528 from lidge-jun/codex/main-release-platform-v…
lidge-jun Sep 22, 2026
5aa92e9
fix(desktop): carry native sidecar packaging repair to main (#5532)
lidge-jun Sep 22, 2026
9314146
chore(ci): refresh main release verification (#5534)
lidge-jun Sep 22, 2026
b007d33
fix(release): carry lipo argument fix to main (#5537)
lidge-jun Sep 22, 2026
b1ae178
fix(release): carry checksum and signature repair to main (#5546)
lidge-jun Sep 22, 2026
f1b2180
fix(release): carry Windows checksum record support to main (#5552)
lidge-jun Sep 22, 2026
2f82167
fix(release): publish the GitHub release only after its verified asse…
lidge-jun Sep 22, 2026
3c663e4
release: promote the verified 2.62.0 tree to main
lidge-jun Sep 22, 2026
fca5134
Merge pull request #5603 from lidge-jun/codex/260923-release-main-2.62.0
lidge-jun Sep 22, 2026
96b1406
release: prepare 2.63.0 version metadata (#5612)
lidge-jun Sep 22, 2026
839909a
release: promote the verified 2.64.0 tree to main
lidge-jun Sep 23, 2026
4cb43cb
Merge pull request #5671 from lidge-jun/codex/260923-release-main-2.64.0
lidge-jun Sep 23, 2026
2039e24
release: promote the verified 2.65.0 tree to main
lidge-jun Sep 24, 2026
87a78e5
Merge pull request #5784 from lidge-jun/codex/260925-release-main-2.65.0
lidge-jun Sep 24, 2026
cbae8a0
release: promote the verified 2.66.0 tree to main
lidge-jun Sep 25, 2026
e70b3d8
Merge pull request #5855 from lidge-jun/codex/260925-release-main-2.66.0
lidge-jun Sep 25, 2026
be872a7
release: promote the verified 2.67.0 tree to main
lidge-jun Sep 26, 2026
4bc9229
Merge pull request #5900 from lidge-jun/codex/260926-release-main-2.67.0
lidge-jun Sep 26, 2026
949e1df
release: promote the verified 2.68.0 tree to main
lidge-jun Sep 27, 2026
93f4231
Merge pull request #6055 from lidge-jun/codex/260927-release-main-2.68.0
lidge-jun Sep 27, 2026
c1f33b1
release: promote the verified 2.69.0 tree to main
lidge-jun Sep 27, 2026
cbea973
Merge pull request #6138 from lidge-jun/codex/260928-release-main-2.69.0
lidge-jun Sep 27, 2026
dd5dba8
release: promote the cleaned 2.69.0 tree to main
lidge-jun Sep 27, 2026
a32227b
release: prepare 2.69.0 version metadata
lidge-jun Sep 27, 2026
3cc34e1
Merge pull request #6142 from lidge-jun/codex/260928-release-main-2.6…
lidge-jun Sep 27, 2026
a11a789
Merge main into 2.70.0 promotion
lidge-jun Sep 28, 2026
53834ff
Merge pull request #6212 from lidge-jun/codex/promote-main-2.70.0
lidge-jun Sep 28, 2026
e272476
Merge main into 2.71.0 promotion
lidge-jun Sep 29, 2026
8a005dd
Merge pull request #6228 from lidge-jun/codex/promote-main-2.71.0
lidge-jun Sep 29, 2026
77cb005
Merge main into 2.72.0 promotion
lidge-jun Sep 29, 2026
5ab6d52
Merge pull request #6246 from lidge-jun/codex/promote-main-2.72.0
lidge-jun Sep 29, 2026
6be91b7
Merge main into 2.73.0 promotion
lidge-jun Sep 29, 2026
b825f4f
Merge pull request #6266 from lidge-jun/codex/promote-main-2.73.0
lidge-jun Sep 29, 2026
46c07c5
fix(release): sign the packaged macOS keyring addons before notarizat…
lidge-jun Sep 30, 2026
569e3e7
Merge pull request #6273 from lidge-jun/codex/promote-main-2.73.0-sig…
lidge-jun Sep 30, 2026
943d67b
Merge main into 2.74.0 promotion
lidge-jun Sep 30, 2026
de5c672
chore(release): 2.74.0
lidge-jun Sep 30, 2026
cae9b55
Merge pull request #6322 from lidge-jun/codex/promote-main-2.74.0
lidge-jun Sep 30, 2026
fae6fdd
Merge main into 2.75.0 promotion
lidge-jun Oct 1, 2026
ef0297f
Merge pull request #6353 from lidge-jun/codex/promote-main-2.75.0
lidge-jun Oct 1, 2026
d2f8fd3
Merge main into 2.76.0 promotion
lidge-jun Oct 2, 2026
249462b
Merge pull request #6468 from lidge-jun/codex/promote-main-2.76.0
lidge-jun Oct 2, 2026
ee89f59
Merge main into 2.77.0 promotion
lidge-jun Oct 4, 2026
0684116
Merge pull request #6550 from lidge-jun/codex/promote-main-2.77.0
lidge-jun Oct 4, 2026
e847a24
Merge main into 2.78.0 promotion
lidge-jun Oct 5, 2026
93cdffd
Merge pull request #6632 from lidge-jun/codex/promote-main-2.78.0
lidge-jun Oct 5, 2026
5735670
Merge main into 2.79.0 promotion
lidge-jun Oct 6, 2026
6457536
Merge pull request #6677 from lidge-jun/codex/promote-main-2.79.0
lidge-jun Oct 6, 2026
c1dc8e4
fix(deps): bump proxy-addr, fast-uri, ip-address and source-map-js fo…
lidge-jun Oct 6, 2026
beba8b7
Merge pull request #6688 from lidge-jun/codex/release-2.79.0-audit-fix
lidge-jun Oct 6, 2026
5257b9f
Merge main into 2.80.0 promotion
lidge-jun Oct 7, 2026
f8806d6
Merge pull request #6706 from lidge-jun/codex/promote-main-2.80.0
lidge-jun Oct 7, 2026
0cd2169
fix(deps): bump @modelcontextprotocol/sdk to 1.31.0 for GHSA-6qxp-vcc…
lidge-jun Oct 7, 2026
250f17a
Merge pull request #6708 from lidge-jun/codex/release-2.80.0-audit-fix
lidge-jun Oct 7, 2026
54e6e26
Merge main into 2.81.0 promotion
lidge-jun Oct 8, 2026
19bd34a
Merge pull request #6771 from lidge-jun/codex/promote-main-2.81.0
lidge-jun Oct 8, 2026
87e93b7
Merge main into 2.82.0 promotion
lidge-jun Oct 10, 2026
848ec37
Merge pull request #6878 from lidge-jun/codex/promote-main-2.82.0
lidge-jun Oct 10, 2026
eb06a2c
Merge main into 2.83.0 promotion
lidge-jun Oct 10, 2026
33b3218
Merge pull request #6910 from lidge-jun/codex/promote-main-2.83.0-r2
lidge-jun Oct 10, 2026
6def866
release: promote dev 3bb7a5612c to main as 2.84.0
lidge-jun Oct 12, 2026
6955343
release: 2.84.0 (#7016)
lidge-jun Oct 13, 2026
faa8572
release: promote dev ba865da725 to main as 2.85.0
lidge-jun Oct 14, 2026
732fba6
Merge pull request #7094 from lidge-jun/release/promote-main-2.85.0
lidge-jun Oct 14, 2026
38301b7
release: promote dev 494c50d02f to main as 2.86.0
lidge-jun Oct 14, 2026
409026b
Merge pull request #7110 from lidge-jun/release/promote-main-2.86.0
lidge-jun Oct 14, 2026
110a13f
fix(gui): include hidden models in combo selectors
xianhongtao Oct 15, 2026
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 docs-site/src/content/docs/fr/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ flux de travail des tâches.
### Tableau de bord

Ouvrez le tableau de bord local et choisissez **Modèles → Combos**. L'espace de travail crée, modifie, renomme et supprime
combos, et son sélecteur de cible exclut les modèles désactivés et les combos imbriqués.
les combos. Les sélecteurs de modèles incluent les modèles masqués : la visibilité ne concerne que les listes externes, pas la sélection interne des combos. Sélectionner un modèle masqué ne le rend pas visible. Le sélecteur de cible exclut toujours les fournisseurs désactivés, les combos imbriqués et les fournisseurs JEV réservés au service de décision.

Chaque cible affiche aussi un badge de quota en direct : **Disponible**, **Quota épuisé** ou **Quota inconnu**.
L’éditeur bloque Enregistrer et Créer pour une raison de quota uniquement lorsque chaque cible utilisable dispose d’une confirmation serveur encore valide indiquant que la limite d’inférence liée à ses identifiants configurés est épuisée. Les quotas de compte, de modèle, de recherche et de MCP fournis uniquement à titre d’affichage, ainsi que les informations de routage absentes ou expirées, ne déclenchent pas ce blocage. Le blocage expire à la réinitialisation applicable ou à l’expiration de la validité des données et fait l’objet d’une nouvelle vérification lorsque la page devient active ou visible ; Actualiser recharge à la fois les données des combos et les quotas.
Expand Down
5 changes: 3 additions & 2 deletions docs-site/src/content/docs/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -739,8 +739,9 @@ task workflow.
### Dashboard

Open the local dashboard and choose **Models → Combos**. The workspace creates, edits, renames, and removes
combos, and its target picker excludes disabled models, nested combos, and the credential-only JEV
provider. **Create JEV Auto** opens the same Combo editor with an editable decision target template;
combos. Its model selectors include hidden models: catalog visibility only controls external model
lists, not internal Combo selection, and selecting a hidden model does not make it visible externally.
The target picker still excludes disabled providers, nested combos, and the credential-only JEV provider. **Create JEV Auto** opens the same Combo editor with an editable decision target template;
an existing `jev-auto` id or alias is reported instead of creating a duplicate. A JEV Combo also shows
**Decision service** (TypeSafe JEV or a configured `jev-decision` provider) and **Decision timeout
(ms)**, and the Combos overview lists each JEV Combo's decision service, endpoint, and timeout.
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/ja/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ v1/base/v2 モードと完全な暗号化タスクのワークフローについ

### ダッシュボード

ローカル ダッシュボードを開き、**Models → コンボ**を選択します。ワークスペースはコンボを作成、編集、名前変更、削除し、そのターゲット ピッカーは無効なモデルとネストされたコンボを除外します。
ローカル ダッシュボードを開き、**Models → コンボ**を選択します。ワークスペースではコンボの作成、編集、名前変更、削除ができます。モデル選択には非表示モデルも含まれます。表示設定は外部のモデル一覧にのみ適用され、コンボ内部の選択には影響しません。非表示モデルを選択しても外部には表示されません。ターゲット選択では、無効なプロバイダー、ネストされたコンボ、決定サービス専用の JEV プロバイダーは引き続き除外されます。

各ターゲットには **利用可能**、**クォータを使い切りました**、**クォータ不明** のライブバッジも表示されます。
エディターがクォータを理由に保存と作成をブロックするのは、使用可能なすべてのターゲットについて、設定された認証情報の推論上限に達したことを示す、サーバーによる確認が現在も有効な場合だけです。表示専用のアカウント・モデル・検索・MCP クォータや、ルーティングの根拠情報の欠落・期限切れによって、このブロックが発生することはありません。ブロックは該当するリセット時刻またはデータの有効期限に解除され、ページがアクティブになるか表示状態になると再確認されます。「更新」はコンボデータとクォータの両方を再読み込みします。ダッシュボードのエディターではまだ `cooldownMs` と `waitForCooldownMs` を設定できません。後続の UI 作業が完了するまでは、構成ファイルまたは管理 API を使用してください。
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/ko/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ v1/base/v2 모드와 암호화된 작업의 전체 흐름은 [Sub-agent Surface]

### 대시보드

로컬 대시보드를 열고 **Models → Combos**를 선택합니다. 워크스페이스는 콤보를 만들고, 편집하고, 이름을 바꾸고, 제거할 수 있으며, 대상 선택기에서는 비활성 모델과 중첩 콤보를 제외합니다.
로컬 대시보드를 열고 **Models → Combos**를 선택합니다. 워크스페이스에서 콤보를 만들고, 편집하고, 이름을 바꾸고, 제거할 수 있습니다. 모델 선택기에는 숨겨진 모델도 포함됩니다. 표시 설정은 외부 모델 목록에만 적용되며 콤보 내부 선택에는 영향을 주지 않습니다. 숨겨진 모델을 선택해도 외부에 표시되지 않습니다. 대상 선택기에서는 비활성 공급자, 중첩 콤보, 결정 서비스 전용 JEV 공급자를 계속 제외합니다.

각 대상에는 **사용 가능**, **할당량 소진**, **할당량 알 수 없음** 실시간 배지도 표시됩니다. 편집기는 사용 가능한 모든 대상에 대해 설정된 인증 정보의 추론 한도가 소진되었다는 서버 확인이 현재 유효할 때만 할당량을 이유로 저장과 만들기를 차단합니다. 표시 전용 계정·모델·검색·MCP 할당량이나 누락되거나 만료된 라우팅 근거 정보는 이 차단을 일으키지 않습니다. 차단은 해당 한도의 초기화 시점이나 데이터 유효기간이 끝나면 해제되며 페이지가 활성화되거나 표시될 때 다시 확인됩니다. 새로 고침은 콤보 데이터와 할당량을 모두 다시 불러옵니다. 대시보드 편집기에서는 아직 `cooldownMs`나 `waitForCooldownMs`를 설정할 수 없습니다. 후속 UI 작업이 완료될 때까지 구성 파일이나 관리 API를 사용하세요.

Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/ru/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ Failover намеренно ограничен. Он помогает при п
### Дашборд

Откройте локальный дашборд и выберите **Models → Combos**. Рабочая область умеет создавать, редактировать,
переименовывать и удалять combo, а селектор целей исключает отключённые модели и вложенные combo.
переименовывать и удалять combo. Селекторы моделей включают скрытые модели: видимость влияет только на внешние списки, а не на внутренний выбор в combo. Выбор скрытой модели не делает её видимой снаружи. Селектор целей по-прежнему исключает отключённых провайдеров, вложенные combo и провайдеров JEV, предназначенных только для сервиса принятия решений.

У каждой цели также отображается актуальный значок квоты: **Доступно**, **Квота исчерпана** или **Квота неизвестна**.
Редактор блокирует сохранение и создание из-за квоты только тогда, когда для каждой пригодной к использованию цели есть действующее подтверждение сервера об исчерпании лимита инференса для настроенных учётных данных. Квоты аккаунта, модели, поиска и MCP, предназначенные только для отображения, а также отсутствующие или просроченные данные для принятия решения о маршрутизации не вызывают эту блокировку. Блокировка истекает при соответствующем сбросе квоты или окончании срока актуальности данных и проверяется повторно, когда страница становится активной или видимой; «Обновить» повторно загружает и данные combo, и квоты. Редактор дашборда пока не предоставляет `cooldownMs` и `waitForCooldownMs`; до появления соответствующего UI используйте файл конфигурации или Management API.
Expand Down
5 changes: 3 additions & 2 deletions docs-site/src/content/docs/tr/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,8 +305,9 @@ Arayüzü](/tr/guides/sub-agent-surface/) sayfasına bakın.

Yerel kontrol panelini açın ve **Modeller → Kombolar** seçeneğini belirleyin.
Çalışma alanı komboları oluşturur, düzenler, yeniden adlandırır ve kaldırır;
hedef seçicisi ise devre dışı bırakılmış modelleri ve iç içe geçmiş komboları
hariç tutar.
model seçicileri gizli modelleri de içerir. Görünürlük yalnızca dış model listelerini etkiler,
kombo içindeki seçimi etkilemez; gizli bir modeli seçmek onu dışarıda görünür yapmaz.
Hedef seçicisi devre dışı sağlayıcıları, iç içe komboları ve yalnızca karar hizmeti sunan JEV sağlayıcılarını hariç tutar.

Her hedef ayrıca canlı bir kota rozeti gösterir: **Kullanılabilir**, **Kota tükendi** veya **Kota bilinmiyor**.
Düzenleyici, kota nedeniyle Kaydet ve Oluştur işlemlerini yalnızca kullanılabilir hedeflerin tümü için yapılandırılmış kimlik bilgisine ait çıkarım sınırının tükendiğini doğrulayan geçerli sunucu bilgisi varsa engeller. Yalnızca görüntüleme amaçlı hesap, model, arama ve MCP kotaları ya da eksik veya süresi dolmuş yönlendirme kanıtları bu engellemeye neden olmaz. Engelleme, ilgili sıfırlama zamanında veya verinin güncellik süresi dolduğunda sona erer ve sayfa etkin ya da görünür olduğunda yeniden kontrol edilir; Yenile, hem kombo verilerini hem de kotaları yeniden yükler.
Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/zh-cn/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ combo 失败分为 **跳转** 失败和 **终止** 失败。

### Dashboard

打开本地 dashboard 并选择 **Models → Combos**。该工作区可以创建、编辑、重命名和删除 combo,其目标选择器会排除已禁用的模型和嵌套 combo。
打开本地 dashboard 并选择 **Models → Combos**。该工作区可以创建、编辑、重命名和删除 combo。模型选择器使用包含隐藏模型的完整目录:显示/隐藏设置只影响对外模型列表,不影响 Combo 内部选择,选中隐藏模型也不会将其对外显示。目标选择器仍排除已禁用的提供方、嵌套 combo 和仅用于决策服务的 JEV 提供方。

每个目标还会显示实时额度徽章:**可用**、**额度已用尽**或**额度未知**。只有当每个可用目标均有当前有效的服务器确认,表明其所配置凭据的推理限额已耗尽时,编辑器才会因额度而禁止保存和创建。仅供显示的账户、模型、搜索和 MCP 额度,以及缺失或已过期的路由依据,都不会触发此限制。此限制会在适用的重置时间或数据有效期结束时解除,并在页面变为活动或可见状态时重新检查;刷新会同时重新加载 Combo 数据和额度。dashboard 编辑器目前还不能设置 `cooldownMs` 或 `waitForCooldownMs`;在后续 UI 完成前,请使用配置文件或管理 API。

Expand Down
2 changes: 1 addition & 1 deletion docs-site/src/content/docs/zh-tw/guides/combos.md
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ Codex v2 子代理有一個重要限制([issue #92](https://github.com/lidge-j

### 儀表板

開啟本機儀表板並選擇 **Combos**。該工作區可建立、編輯、重新命名與移除 combo,且其目標 picker 會排除已停用的模型與巢狀 combo。
開啟本機儀表板並選擇 **Combos**。該工作區可建立、編輯、重新命名與移除 combo。模型選擇器包含隱藏模型;顯示/隱藏設定僅影響對外模型清單,不影響 Combo 內部選擇,選取隱藏模型也不會將其對外顯示。目標選擇器仍排除已停用的供應商、巢狀 combo 與僅提供決策服務的 JEV 供應商。

每個目標也會顯示即時額度徽章:**可用**、**額度已用盡**或**額度未知**。只有當每個可用目標均有目前有效的伺服器確認,顯示其所設定憑證的推論限額已耗盡時,編輯器才會因配額而停用儲存與建立。僅供顯示的帳戶、模型、搜尋與 MCP 配額,以及缺失或已過期的路由依據,都不會觸發此限制。此限制會在適用的重設時間或資料有效期限結束時解除,並在頁面變為作用中或可見狀態時重新檢查;重新整理會同時重新載入 Combo 資料與配額。

Expand Down
4 changes: 2 additions & 2 deletions gui/src/pages/Combos.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ export default function Combos({
onCountChange?: (count: number) => void;
}) {
const t = useT();
const cacheKey = `ocx.combos.workspace.v1:${apiBase}`;
const cacheKey = `ocx.combos.workspace.v2:${apiBase}`;
const cached = useMemo(() => seedCombos(cacheKey), [cacheKey]);

/*
Expand Down Expand Up @@ -207,7 +207,7 @@ export default function Combos({
...(inputModalities && inputModalities.length > 0 ? { inputModalities } : {}),
};
capabilityModels.push(option);
if (model.disabled !== true) models.push(option);
models.push(option); // Catalog visibility does not restrict internal Combo selection.
}

// Add a default placeholder only when the catalog has no row, including disabled rows.
Expand Down
69 changes: 64 additions & 5 deletions gui/tests/combo-capability-hidden-targets.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import { readSessionListCacheEntry, writeSessionListCacheEntry } from "../src/se
import { parseComboList } from "../src/combo-workspace-data";

const API_BASE = "http://localhost";
const CACHE_KEY = `ocx.combos.workspace.v1:${API_BASE}`;
const CACHE_KEY = `ocx.combos.workspace.v2:${API_BASE}`;
const globals = ["document", "window", "navigator", "localStorage", "sessionStorage", "IS_REACT_ACT_ENVIRONMENT"] as const;
let previousGlobals: Record<(typeof globals)[number], unknown>;
let testWindow: Window;
Expand Down Expand Up @@ -190,7 +190,7 @@ test("JEV selected-target effort controls use the disabled row's advertised ladd
expect(container.textContent).not.toContain("Reasoning efforts unknown");
});

test("a disabled provider default never returns in the new-member picker", async () => {
test("hidden models including the provider default appear once in new and existing member pickers", async () => {
mockCatalog([hiddenImage, { ...hiddenImage, id: "visible", disabled: false }], [target(hiddenImage)], {}, { vision: "hidden" });
await mount();
await openDetail();
Expand All @@ -199,8 +199,67 @@ test("a disabled provider default never returns in the new-member picker", async
const dialog = container.querySelector("dialog")!;
await chooseProvider("vision", dialog);
const options = [...dialog.querySelector<HTMLSelectElement>('select[aria-label="Model"]')!.options].map(option => option.value);
expect(options).toEqual(["", "visible"]);
expect(options).not.toContain("hidden");
expect(options).toEqual(["", "hidden", "visible"]);
const model = dialog.querySelector<HTMLSelectElement>('select[aria-label="Model"]')!;
await act(async () => {
model.value = "hidden";
model.dispatchEvent(new testWindow.Event("change", { bubbles: true }));
});
expect(model.value).toBe("hidden");
expectImages(true, dialog);
});

test("all-hidden catalogs remain selectable and old filtered caches are ignored", async () => {
writeSessionListCacheEntry(`ocx.combos.workspace.v1:${API_BASE}`, {
combos: parseComboList({ combos: [combo([target(hiddenImage)])] }),
providers: [{ name: "vision" }], models: [], cataloguedComboIds: ["hidden-test"],
});
const api = mockCatalog([hiddenImage, { ...hiddenImage, id: "other" }], [target(hiddenImage)]);
await mount();
expect(api.requests()).toBe(1);
await act(async () => { container.querySelector<HTMLButtonElement>('button[aria-label="Add combo"]')!.click(); });
const dialog = container.querySelector("dialog")!;
await chooseProvider("vision", dialog);
expect([...dialog.querySelector<HTMLSelectElement>('select[aria-label="Model"]')!.options].map(option => option.value))
.toEqual(["", "hidden", "other"]);
});

test("editing can select and save a hidden model without changing its visibility", async () => {
const visible = { ...hiddenImage, id: "visible", disabled: false };
mockCatalog([hiddenImage, visible], [target(visible)]);
const fetchCatalog = globalThis.fetch;
const writes: { path: string; body: Record<string, unknown> }[] = [];
globalThis.fetch = (async (input: RequestInfo | URL, init?: RequestInit) => {
if (init?.method === "PUT") {
writes.push({ path: new URL(String(input)).pathname, body: JSON.parse(String(init.body)) });
return Response.json({ success: true });
}
return fetchCatalog(input, init);
}) as typeof fetch;
await mount();
await openDetail();
const model = container.querySelector<HTMLSelectElement>('select[aria-label="Model"]')!;
expect([...model.options].map(option => option.value)).toEqual(["", "hidden", "visible"]);
await act(async () => {
model.value = "hidden";
model.dispatchEvent(new testWindow.Event("change", { bubbles: true }));
});
const save = container.querySelector<HTMLButtonElement>("#cwi-edit-save")!;
expect(save.disabled).toBe(false);
await act(async () => { save.click(); });
expect(writes).toHaveLength(1);
expect(writes[0]).toMatchObject({ path: "/api/combos", body: { combo: { targets: [target(hiddenImage)] } } });
expect(hiddenImage.disabled).toBe(true);
});

test("JEV decision model suggestions include hidden models but exclude the JEV combo itself", async () => {
mockCatalog([hiddenImage], [target(hiddenImage)], { strategy: "jev", decisionModel: "vision/hidden" });
await mount();
await openDetail();
const routes = [...container.querySelectorAll<HTMLOptionElement>('datalist[id$="-decision-model-options"] option')]
.map(option => option.value);
expect(routes).toContain("vision/hidden");
expect(routes).not.toContain("combo/hidden-test");
});

test("a default missing from the catalog still gets a picker placeholder", async () => {
Expand All @@ -222,7 +281,7 @@ test("cache remount and live revalidation preserve hidden-target capabilities",
expect(cached.data.capabilityModels).toEqual([{
provider: "vision", id: "hidden", inputModalities: ["text", "image"], reasoningEfforts: ["low", "high"],
}]);
expect(cached.data.models).toEqual([]);
expect(cached.data.models).toEqual(cached.data.capabilityModels);
await act(async () => { root!.unmount(); });
root = undefined;
clearClientResourceStoresForTests();
Expand Down
2 changes: 1 addition & 1 deletion gui/tests/page-loading-contract.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ let testWindow: Window;
const originalFetch = globalThis.fetch;

const API_BASE = "http://localhost";
const CACHE_KEY = `ocx.combos.workspace.v1:${API_BASE}`;
const CACHE_KEY = `ocx.combos.workspace.v2:${API_BASE}`;
const CACHED_PAGE = {
combos: [],
providers: [{ name: "openai", disabled: false, hiddenFromPicker: false, authMode: "forward", adapter: "openai", baseUrl: "https://api.openai.com/v1", defaultModel: "gpt-5" }],
Expand Down
Loading
Loading