@dotobokuri/fleet-console 1.68.0 → 1.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist/cli.mjs +92 -2
  2. package/dist/client/assets/{_baseUniq-BPBd-J9P.js → _baseUniq-81Y5kFtp.js} +1 -1
  3. package/dist/client/assets/{arc-spHqy4X3.js → arc-d96Fgk-5.js} +1 -1
  4. package/dist/client/assets/{architectureDiagram-Q4EWVU46-7CHqKfxu.js → architectureDiagram-Q4EWVU46-BBgIklLp.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-DXYQGD6D-YasFDgl_.js → blockDiagram-DXYQGD6D-BCjY9dJk.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AHTNJAMY-CcoPJq56.js → c4Diagram-AHTNJAMY-BVJRdf8q.js} +1 -1
  7. package/dist/client/assets/channel-CiSQi5S5.js +1 -0
  8. package/dist/client/assets/{chunk-4BX2VUAB-MYBJn9BE.js → chunk-4BX2VUAB-CT7BCzBg.js} +1 -1
  9. package/dist/client/assets/{chunk-4TB4RGXK-C1wg6GR_.js → chunk-4TB4RGXK-DUbDaHiY.js} +1 -1
  10. package/dist/client/assets/{chunk-55IACEB6-BoufMT1O.js → chunk-55IACEB6-C7HDwq0R.js} +1 -1
  11. package/dist/client/assets/{chunk-EDXVE4YY-BzAhAIl3.js → chunk-EDXVE4YY-Mh16Bf7t.js} +1 -1
  12. package/dist/client/assets/{chunk-FMBD7UC4-yVrLsKzP.js → chunk-FMBD7UC4-D3BjqAun.js} +1 -1
  13. package/dist/client/assets/{chunk-OYMX7WX6-YiiKaqRQ.js → chunk-OYMX7WX6-DmzxPT1k.js} +1 -1
  14. package/dist/client/assets/{chunk-QZHKN3VN-CqWQlGHT.js → chunk-QZHKN3VN-CaZdQK6Z.js} +1 -1
  15. package/dist/client/assets/{chunk-YZCP3GAM-9yLOmU5k.js → chunk-YZCP3GAM-Q2hrlgLY.js} +1 -1
  16. package/dist/client/assets/classDiagram-6PBFFD2Q-Cy-ZC6xF.js +1 -0
  17. package/dist/client/assets/classDiagram-v2-HSJHXN6E-Cy-ZC6xF.js +1 -0
  18. package/dist/client/assets/clone-BAhE6Fq8.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-S5V4N54A-XkTuSq7v.js → cose-bilkent-S5V4N54A-CPdIsNiQ.js} +1 -1
  20. package/dist/client/assets/{dagre-KV5264BT-DyzXIEAe.js → dagre-KV5264BT-BYWdUXO0.js} +1 -1
  21. package/dist/client/assets/{diagram-5BDNPKRD-DF24YlCa.js → diagram-5BDNPKRD-BC8rqmOK.js} +1 -1
  22. package/dist/client/assets/{diagram-G4DWMVQ6-CVhcj9RK.js → diagram-G4DWMVQ6-CES6iBQQ.js} +1 -1
  23. package/dist/client/assets/{diagram-MMDJMWI5-C-kGKk4K.js → diagram-MMDJMWI5-BfhQrSaN.js} +1 -1
  24. package/dist/client/assets/{diagram-TYMM5635-mr285WbR.js → diagram-TYMM5635-C2FgHNxP.js} +1 -1
  25. package/dist/client/assets/{erDiagram-SMLLAGMA-BtEx-XlU.js → erDiagram-SMLLAGMA-KQgKZTcf.js} +1 -1
  26. package/dist/client/assets/{flowDiagram-DWJPFMVM-DuWy3xzN.js → flowDiagram-DWJPFMVM-7Ytk1sX_.js} +1 -1
  27. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-B2-xEikU.js → ganttDiagram-T4ZO3ILL-C4yl6vGV.js} +1 -1
  28. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-EM17u_t7.js → gitGraphDiagram-UUTBAWPF-DyN7iLk4.js} +1 -1
  29. package/dist/client/assets/{graph-xuE12FIq.js → graph-BsOHL3Ty.js} +1 -1
  30. package/dist/client/assets/index-2049WCXu.css +1 -0
  31. package/dist/client/assets/index-DJcpFTNB.js +466 -0
  32. package/dist/client/assets/{infoDiagram-42DDH7IO-B3MF4XtW.js → infoDiagram-42DDH7IO-BIOEjyDP.js} +1 -1
  33. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DoQ2mGyh.js → ishikawaDiagram-UXIWVN3A-C18t-DEH.js} +1 -1
  34. package/dist/client/assets/{journeyDiagram-VCZTEJTY-GeR9sFH-.js → journeyDiagram-VCZTEJTY-BysZXCkq.js} +1 -1
  35. package/dist/client/assets/{kanban-definition-6JOO6SKY-DrrYMuvL.js → kanban-definition-6JOO6SKY-Zdulrt1W.js} +1 -1
  36. package/dist/client/assets/{layout-DH63A-3u.js → layout-DhT9CiMw.js} +1 -1
  37. package/dist/client/assets/{linear-BIjE6zB1.js → linear-DQna1rOZ.js} +1 -1
  38. package/dist/client/assets/{mermaid.core-yrrC2Lqo.js → mermaid.core-C0sjt4NJ.js} +4 -4
  39. package/dist/client/assets/{min-CR-H8E6U.js → min-Dyx0ykEh.js} +1 -1
  40. package/dist/client/assets/{mindmap-definition-QFDTVHPH-BzSC43J-.js → mindmap-definition-QFDTVHPH-BzEvAUNd.js} +1 -1
  41. package/dist/client/assets/{pieDiagram-DEJITSTG-BdghNtCc.js → pieDiagram-DEJITSTG-Cd4ORVnw.js} +1 -1
  42. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-s_zN2epw.js → quadrantDiagram-34T5L4WZ-CvNxhBIm.js} +1 -1
  43. package/dist/client/assets/{requirementDiagram-MS252O5E-DuiGG6Tx.js → requirementDiagram-MS252O5E-CuGuie-o.js} +1 -1
  44. package/dist/client/assets/{sankeyDiagram-XADWPNL6-Bp0JBk2g.js → sankeyDiagram-XADWPNL6-zn7buHsU.js} +1 -1
  45. package/dist/client/assets/{sequenceDiagram-FGHM5R23-AzQ3M31V.js → sequenceDiagram-FGHM5R23-BxDReh8o.js} +1 -1
  46. package/dist/client/assets/{stateDiagram-FHFEXIEX-BGgm44ev.js → stateDiagram-FHFEXIEX-DtZ0UE1G.js} +1 -1
  47. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-aYct9Owm.js +1 -0
  48. package/dist/client/assets/{timeline-definition-GMOUNBTQ-UqfsiBJY.js → timeline-definition-GMOUNBTQ-DfKveVha.js} +1 -1
  49. package/dist/client/assets/{vennDiagram-DHZGUBPP-PsCGF9nR.js → vennDiagram-DHZGUBPP-CZe6StT_.js} +1 -1
  50. package/dist/client/assets/{wardley-RL74JXVD-BDQbnh-d.js → wardley-RL74JXVD-B10WfMsc.js} +1 -1
  51. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-CtVA1JMs.js → wardleyDiagram-NUSXRM2D-DzN04fy9.js} +1 -1
  52. package/dist/client/assets/{xychartDiagram-5P7HB3ND-BsLlZWbc.js → xychartDiagram-5P7HB3ND-CIgNRRNp.js} +1 -1
  53. package/dist/client/index.html +2 -2
  54. package/dist/fleet-plugins/ledger/routes.mjs +92 -2
  55. package/dist/fleet-plugins/quota/routes.mjs +92 -2
  56. package/dist/fleet-plugins/repository/routes.mjs +41 -5
  57. package/dist/fleet-plugins/scuttlebutt/routes.mjs +92 -2
  58. package/dist/fleet-plugins/terminal/routes.mjs +672 -412
  59. package/dist/fleet.mjs +582 -260
  60. package/package.json +1 -1
  61. package/dist/client/assets/channel-DfEjadrw.js +0 -1
  62. package/dist/client/assets/classDiagram-6PBFFD2Q-D9vQdv0q.js +0 -1
  63. package/dist/client/assets/classDiagram-v2-HSJHXN6E-D9vQdv0q.js +0 -1
  64. package/dist/client/assets/clone-Ck2x5JX2.js +0 -1
  65. package/dist/client/assets/index-C5EOZGlC.js +0 -466
  66. package/dist/client/assets/index-CHHE3nPw.css +0 -1
  67. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-CZDbnuN-.js +0 -1
@@ -18032,7 +18032,7 @@ var benchmarks_default = {
18032
18032
  };
18033
18033
  var models_default = {
18034
18034
  version: 1,
18035
- updatedAt: "2026-08-19T00:00:00Z",
18035
+ updatedAt: "2026-08-20T00:00:00Z",
18036
18036
  providers: {
18037
18037
  codex: {
18038
18038
  name: "Codex",
@@ -18428,7 +18428,7 @@ var models_default = {
18428
18428
  cursor: {
18429
18429
  name: "Cursor",
18430
18430
  defaultModel: "auto",
18431
- source: "Cursor GetUsableModels + Run conversationCheckpointUpdate.token_details.max_tokens (cli-2026.07.08-0c04a8a; auto, composer-2.5, and grok-4.5 families observed 2026-08-01); cursor-agent 2026.08.11-e8db854 observed 2026-08-13 for grok-4.6; claude-opus-5 and claude-fable-5 standard/Max Mode windows observed 2026-08-10; quotaScope from DashboardService/GetCurrentPeriodUsage autoBucketModels (2026-08-05)",
18431
+ source: "Cursor GetUsableModels + Run conversationCheckpointUpdate.token_details.max_tokens (cli-2026.07.08-0c04a8a; auto, composer-2.5, and grok-4.5 families observed 2026-08-01); cursor-agent 2026.08.11-e8db854 observed 2026-08-13 for grok-4.6; claude-opus-5 and claude-fable-5 standard/Max Mode windows observed 2026-08-10; quotaScope from DashboardService/GetCurrentPeriodUsage autoBucketModels (2026-08-05); gpt-5.6-sol/terra/luna, gemini-3.7-flash, and kimi-k3 ids, effort rungs, and api quotaScope observed 2026-08-20 from live GetUsableModels (cursor-agent 2026.08.11-e8db854) and GetCurrentPeriodUsage autoBucketModels. Their windows are unmeasured because Cursor answers a first-turn Run with an empty token_details, so each carries the conservative cross-provider figure (272000 from the Codex catalog for the GPT-5.6 lineup, 256000 elsewhere); no Max Mode or -fast sibling is published for them",
18432
18432
  models: [
18433
18433
  {
18434
18434
  modelId: "auto",
@@ -18610,6 +18610,96 @@ var models_default = {
18610
18610
  upstreamModelIdTemplate: "claude-fable-5-{effort}"
18611
18611
  },
18612
18612
  benchmarkKey: "claude-fable-5"
18613
+ },
18614
+ {
18615
+ modelId: "gpt-5.6-sol",
18616
+ name: "GPT-5.6-Sol",
18617
+ capabilityClass: "flagship",
18618
+ quotaScope: "api",
18619
+ contextWindow: 272e3,
18620
+ effort: {
18621
+ supported: true,
18622
+ levels: [
18623
+ "low",
18624
+ "medium",
18625
+ "high",
18626
+ "xhigh",
18627
+ "max"
18628
+ ],
18629
+ upstreamModelIdTemplate: "gpt-5.6-sol-{effort}"
18630
+ },
18631
+ benchmarkKey: "gpt-5.6-sol"
18632
+ },
18633
+ {
18634
+ modelId: "gpt-5.6-terra",
18635
+ name: "GPT-5.6-Terra",
18636
+ capabilityClass: "standard",
18637
+ quotaScope: "api",
18638
+ contextWindow: 272e3,
18639
+ effort: {
18640
+ supported: true,
18641
+ levels: [
18642
+ "low",
18643
+ "medium",
18644
+ "high",
18645
+ "xhigh",
18646
+ "max"
18647
+ ],
18648
+ upstreamModelIdTemplate: "gpt-5.6-terra-{effort}"
18649
+ },
18650
+ benchmarkKey: "gpt-5.6-terra"
18651
+ },
18652
+ {
18653
+ modelId: "gpt-5.6-luna",
18654
+ name: "GPT-5.6-Luna",
18655
+ capabilityClass: "light",
18656
+ quotaScope: "api",
18657
+ contextWindow: 272e3,
18658
+ effort: {
18659
+ supported: true,
18660
+ levels: [
18661
+ "low",
18662
+ "medium",
18663
+ "high",
18664
+ "xhigh",
18665
+ "max"
18666
+ ],
18667
+ upstreamModelIdTemplate: "gpt-5.6-luna-{effort}"
18668
+ },
18669
+ benchmarkKey: "gpt-5.6-luna"
18670
+ },
18671
+ {
18672
+ modelId: "gemini-3.7-flash",
18673
+ name: "Gemini-3.7-Flash",
18674
+ capabilityClass: "light",
18675
+ quotaScope: "api",
18676
+ contextWindow: 256e3,
18677
+ effort: {
18678
+ supported: true,
18679
+ levels: [
18680
+ "low",
18681
+ "medium",
18682
+ "high"
18683
+ ],
18684
+ upstreamModelIdTemplate: "gemini-3.7-flash-{effort}"
18685
+ }
18686
+ },
18687
+ {
18688
+ modelId: "kimi-k3",
18689
+ name: "Kimi-K3",
18690
+ capabilityClass: "flagship",
18691
+ quotaScope: "api",
18692
+ contextWindow: 256e3,
18693
+ effort: {
18694
+ supported: true,
18695
+ levels: [
18696
+ "low",
18697
+ "high",
18698
+ "max"
18699
+ ],
18700
+ upstreamModelIdTemplate: "kimi-k3-{effort}"
18701
+ },
18702
+ benchmarkKey: "kimi-k3"
18613
18703
  }
18614
18704
  ]
18615
18705
  },
@@ -1671,6 +1671,37 @@ function writeRemoteFailure(res, ctx, error, classify) {
1671
1671
  }
1672
1672
  throw error;
1673
1673
  }
1674
+ async function countCommits(gitCwd, range) {
1675
+ try {
1676
+ const raw = (await runGit(["rev-list", "--count", range], { cwd: gitCwd })).stdout.trim();
1677
+ const count = Number.parseInt(raw, 10);
1678
+ return Number.isInteger(count) && count >= 0 ? count : null;
1679
+ } catch {
1680
+ return null;
1681
+ }
1682
+ }
1683
+ function parsePushOutcome(stdout, branch) {
1684
+ for (const line of stdout.split("\n")) {
1685
+ const fields = line.split(" ");
1686
+ if (fields.length < 3) continue;
1687
+ const [, refPair, summary] = fields;
1688
+ if (!refPair || !summary) continue;
1689
+ if (refPair.split(":")[1] !== `refs/heads/${branch}`) continue;
1690
+ const trimmed = summary.trim();
1691
+ const moved = /^([0-9a-f]{7,40})\.\.([0-9a-f]{7,40})$/.exec(trimmed);
1692
+ if (moved) return { kind: "moved", from: moved[1], to: moved[2] };
1693
+ return trimmed === "[up to date]" ? { kind: "up_to_date" } : null;
1694
+ }
1695
+ return null;
1696
+ }
1697
+ async function headSha(gitCwd) {
1698
+ try {
1699
+ const sha = (await runGit(["rev-parse", "HEAD"], { cwd: gitCwd })).stdout.trim();
1700
+ return /^[0-9a-f]{40}$/.test(sha) ? sha : null;
1701
+ } catch {
1702
+ return null;
1703
+ }
1704
+ }
1674
1705
  async function handleRepositoryPush(req, res, ctx) {
1675
1706
  const remoteCtx = await resolveRemoteContext(req, res, ctx);
1676
1707
  if (!remoteCtx) return;
@@ -1680,10 +1711,11 @@ async function handleRepositoryPush(req, res, ctx) {
1680
1711
  const remote = upstreamRemote && upstreamRemote !== "." ? upstreamRemote : await resolveDefaultRemote(gitCwd);
1681
1712
  if (!remote) throw new NoRemoteError();
1682
1713
  const credentialArgs = await resolveCredentialHelperArgs(gitCwd);
1683
- await runGit([
1714
+ const pushed = await runGit([
1684
1715
  ...NETWORK_HARDENING_ARGS,
1685
1716
  ...credentialArgs,
1686
1717
  "push",
1718
+ "--porcelain",
1687
1719
  // repo config의 remote.<name>.receivepack이 로컬 transport에서 명령 실행되므로 표준 명령을 강제한다.
1688
1720
  "--receive-pack=git-receive-pack",
1689
1721
  "--no-recurse-submodules",
@@ -1691,7 +1723,9 @@ async function handleRepositoryPush(req, res, ctx) {
1691
1723
  remote,
1692
1724
  `refs/heads/${branch}:refs/heads/${branch}`
1693
1725
  ], { cwd: gitCwd, timeoutMs: REMOTE_TIMEOUT_MS });
1694
- ctx.host.http.writeJson(res, 200, { ok: true, remote, branch });
1726
+ const outcome = parsePushOutcome(pushed.stdout, branch);
1727
+ const sent = outcome === null ? null : outcome.kind === "up_to_date" ? 0 : await countCommits(gitCwd, `${outcome.from}..${outcome.to}`);
1728
+ ctx.host.http.writeJson(res, 200, { ok: true, remote, branch, ...sent === null ? {} : { sent } });
1695
1729
  } catch (error) {
1696
1730
  writeRemoteFailure(res, ctx, error, classifyPushError);
1697
1731
  }
@@ -1707,6 +1741,7 @@ async function handleRepositoryPull(req, res, ctx) {
1707
1741
  return;
1708
1742
  }
1709
1743
  const credentialArgs = await resolveCredentialHelperArgs(gitCwd);
1744
+ const before = await headSha(gitCwd);
1710
1745
  await runGit([
1711
1746
  ...NETWORK_HARDENING_ARGS,
1712
1747
  ...credentialArgs,
@@ -1716,7 +1751,8 @@ async function handleRepositoryPull(req, res, ctx) {
1716
1751
  "--upload-pack=git-upload-pack",
1717
1752
  "--no-recurse-submodules"
1718
1753
  ], { cwd: gitCwd, timeoutMs: REMOTE_TIMEOUT_MS });
1719
- ctx.host.http.writeJson(res, 200, { ok: true, remote: upstreamRemote, branch });
1754
+ const received = before === null ? null : await countCommits(gitCwd, `${before}..HEAD`);
1755
+ ctx.host.http.writeJson(res, 200, { ok: true, remote: upstreamRemote, branch, ...received === null ? {} : { received } });
1720
1756
  } catch (error) {
1721
1757
  writeRemoteFailure(res, ctx, error, classifyPullError);
1722
1758
  }
@@ -2435,7 +2471,7 @@ async function handleRepositoryWorkstate(req, res, ctx) {
2435
2471
  ]);
2436
2472
  const gitDir = path3.resolve(gitCwd, gitDirResult.stdout.trim());
2437
2473
  const headBranch = headResult.stdout.trim() || null;
2438
- const headSha = headShaResult.stdout.trim() || null;
2474
+ const headSha2 = headShaResult.stdout.trim() || null;
2439
2475
  const [indexLock, merge, rebaseMerge, rebaseApply, cherryPick] = await Promise.all([
2440
2476
  fileExists(path3.join(gitDir, "index.lock")),
2441
2477
  fileExists(path3.join(gitDir, "MERGE_HEAD")),
@@ -2476,7 +2512,7 @@ async function handleRepositoryWorkstate(req, res, ctx) {
2476
2512
  }
2477
2513
  if (isPathContained(realGitCwd, realCwd)) stationedOperations.push({ id: operation.id, title: operation.title });
2478
2514
  }
2479
- const payload = { indexLock, inProgress, headBranch, headSha, upstream, ahead, behind, stationedOperations };
2515
+ const payload = { indexLock, inProgress, headBranch, headSha: headSha2, upstream, ahead, behind, stationedOperations };
2480
2516
  ctx.host.http.writeJson(res, 200, payload);
2481
2517
  } catch (error) {
2482
2518
  if (error instanceof GitExecutorError) {
@@ -17709,7 +17709,7 @@ var benchmarks_default = {
17709
17709
  };
17710
17710
  var models_default = {
17711
17711
  version: 1,
17712
- updatedAt: "2026-08-19T00:00:00Z",
17712
+ updatedAt: "2026-08-20T00:00:00Z",
17713
17713
  providers: {
17714
17714
  codex: {
17715
17715
  name: "Codex",
@@ -18105,7 +18105,7 @@ var models_default = {
18105
18105
  cursor: {
18106
18106
  name: "Cursor",
18107
18107
  defaultModel: "auto",
18108
- source: "Cursor GetUsableModels + Run conversationCheckpointUpdate.token_details.max_tokens (cli-2026.07.08-0c04a8a; auto, composer-2.5, and grok-4.5 families observed 2026-08-01); cursor-agent 2026.08.11-e8db854 observed 2026-08-13 for grok-4.6; claude-opus-5 and claude-fable-5 standard/Max Mode windows observed 2026-08-10; quotaScope from DashboardService/GetCurrentPeriodUsage autoBucketModels (2026-08-05)",
18108
+ source: "Cursor GetUsableModels + Run conversationCheckpointUpdate.token_details.max_tokens (cli-2026.07.08-0c04a8a; auto, composer-2.5, and grok-4.5 families observed 2026-08-01); cursor-agent 2026.08.11-e8db854 observed 2026-08-13 for grok-4.6; claude-opus-5 and claude-fable-5 standard/Max Mode windows observed 2026-08-10; quotaScope from DashboardService/GetCurrentPeriodUsage autoBucketModels (2026-08-05); gpt-5.6-sol/terra/luna, gemini-3.7-flash, and kimi-k3 ids, effort rungs, and api quotaScope observed 2026-08-20 from live GetUsableModels (cursor-agent 2026.08.11-e8db854) and GetCurrentPeriodUsage autoBucketModels. Their windows are unmeasured because Cursor answers a first-turn Run with an empty token_details, so each carries the conservative cross-provider figure (272000 from the Codex catalog for the GPT-5.6 lineup, 256000 elsewhere); no Max Mode or -fast sibling is published for them",
18109
18109
  models: [
18110
18110
  {
18111
18111
  modelId: "auto",
@@ -18287,6 +18287,96 @@ var models_default = {
18287
18287
  upstreamModelIdTemplate: "claude-fable-5-{effort}"
18288
18288
  },
18289
18289
  benchmarkKey: "claude-fable-5"
18290
+ },
18291
+ {
18292
+ modelId: "gpt-5.6-sol",
18293
+ name: "GPT-5.6-Sol",
18294
+ capabilityClass: "flagship",
18295
+ quotaScope: "api",
18296
+ contextWindow: 272e3,
18297
+ effort: {
18298
+ supported: true,
18299
+ levels: [
18300
+ "low",
18301
+ "medium",
18302
+ "high",
18303
+ "xhigh",
18304
+ "max"
18305
+ ],
18306
+ upstreamModelIdTemplate: "gpt-5.6-sol-{effort}"
18307
+ },
18308
+ benchmarkKey: "gpt-5.6-sol"
18309
+ },
18310
+ {
18311
+ modelId: "gpt-5.6-terra",
18312
+ name: "GPT-5.6-Terra",
18313
+ capabilityClass: "standard",
18314
+ quotaScope: "api",
18315
+ contextWindow: 272e3,
18316
+ effort: {
18317
+ supported: true,
18318
+ levels: [
18319
+ "low",
18320
+ "medium",
18321
+ "high",
18322
+ "xhigh",
18323
+ "max"
18324
+ ],
18325
+ upstreamModelIdTemplate: "gpt-5.6-terra-{effort}"
18326
+ },
18327
+ benchmarkKey: "gpt-5.6-terra"
18328
+ },
18329
+ {
18330
+ modelId: "gpt-5.6-luna",
18331
+ name: "GPT-5.6-Luna",
18332
+ capabilityClass: "light",
18333
+ quotaScope: "api",
18334
+ contextWindow: 272e3,
18335
+ effort: {
18336
+ supported: true,
18337
+ levels: [
18338
+ "low",
18339
+ "medium",
18340
+ "high",
18341
+ "xhigh",
18342
+ "max"
18343
+ ],
18344
+ upstreamModelIdTemplate: "gpt-5.6-luna-{effort}"
18345
+ },
18346
+ benchmarkKey: "gpt-5.6-luna"
18347
+ },
18348
+ {
18349
+ modelId: "gemini-3.7-flash",
18350
+ name: "Gemini-3.7-Flash",
18351
+ capabilityClass: "light",
18352
+ quotaScope: "api",
18353
+ contextWindow: 256e3,
18354
+ effort: {
18355
+ supported: true,
18356
+ levels: [
18357
+ "low",
18358
+ "medium",
18359
+ "high"
18360
+ ],
18361
+ upstreamModelIdTemplate: "gemini-3.7-flash-{effort}"
18362
+ }
18363
+ },
18364
+ {
18365
+ modelId: "kimi-k3",
18366
+ name: "Kimi-K3",
18367
+ capabilityClass: "flagship",
18368
+ quotaScope: "api",
18369
+ contextWindow: 256e3,
18370
+ effort: {
18371
+ supported: true,
18372
+ levels: [
18373
+ "low",
18374
+ "high",
18375
+ "max"
18376
+ ],
18377
+ upstreamModelIdTemplate: "kimi-k3-{effort}"
18378
+ },
18379
+ benchmarkKey: "kimi-k3"
18290
18380
  }
18291
18381
  ]
18292
18382
  },