@dotobokuri/fleet-console 1.51.0 → 1.52.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 (71) hide show
  1. package/AGENTS.md +10 -5
  2. package/README.md +10 -8
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.mjs +8473 -8345
  5. package/dist/client/assets/{_baseUniq-DFtleNrY.js → _baseUniq-CYpcPDgB.js} +1 -1
  6. package/dist/client/assets/{arc-CZWcxz4p.js → arc-BuehZLUz.js} +1 -1
  7. package/dist/client/assets/{architectureDiagram-Q4EWVU46-CoLGMUbn.js → architectureDiagram-Q4EWVU46-Bqn18zpp.js} +1 -1
  8. package/dist/client/assets/{blockDiagram-DXYQGD6D-d4tcUrvS.js → blockDiagram-DXYQGD6D-DmtLdC53.js} +1 -1
  9. package/dist/client/assets/{c4Diagram-AHTNJAMY-CcDJVtsE.js → c4Diagram-AHTNJAMY-BEBhZ5GG.js} +1 -1
  10. package/dist/client/assets/channel-BQlgz3sc.js +1 -0
  11. package/dist/client/assets/{chunk-4BX2VUAB-BxQcCCSB.js → chunk-4BX2VUAB-B8PizWjA.js} +1 -1
  12. package/dist/client/assets/{chunk-4TB4RGXK-C1iJwPC-.js → chunk-4TB4RGXK-C1ofR8zt.js} +1 -1
  13. package/dist/client/assets/{chunk-55IACEB6-Du7lkUwv.js → chunk-55IACEB6-CbKQ3d6C.js} +1 -1
  14. package/dist/client/assets/{chunk-EDXVE4YY-Chblko53.js → chunk-EDXVE4YY-DU-bru4J.js} +1 -1
  15. package/dist/client/assets/{chunk-FMBD7UC4-B4fgWiDf.js → chunk-FMBD7UC4-DD9GbN05.js} +1 -1
  16. package/dist/client/assets/{chunk-OYMX7WX6-BXyyJDJI.js → chunk-OYMX7WX6-DZKa6Wtf.js} +1 -1
  17. package/dist/client/assets/{chunk-QZHKN3VN-BXAPpxgc.js → chunk-QZHKN3VN-fK2o17Jf.js} +1 -1
  18. package/dist/client/assets/{chunk-YZCP3GAM-BuEMjN4I.js → chunk-YZCP3GAM-z-7p86Bc.js} +1 -1
  19. package/dist/client/assets/classDiagram-6PBFFD2Q-CQs4cWly.js +1 -0
  20. package/dist/client/assets/classDiagram-v2-HSJHXN6E-CQs4cWly.js +1 -0
  21. package/dist/client/assets/clone-B5bOHdOg.js +1 -0
  22. package/dist/client/assets/{cose-bilkent-S5V4N54A-Bk4ys4DX.js → cose-bilkent-S5V4N54A-x5L9kNFv.js} +1 -1
  23. package/dist/client/assets/{dagre-KV5264BT-8e2uOIAZ.js → dagre-KV5264BT-944maqqT.js} +1 -1
  24. package/dist/client/assets/{diagram-5BDNPKRD-BUaee6EH.js → diagram-5BDNPKRD-PV4GQ8C6.js} +1 -1
  25. package/dist/client/assets/{diagram-G4DWMVQ6-Y0F_eev2.js → diagram-G4DWMVQ6-GcoFZYg0.js} +1 -1
  26. package/dist/client/assets/{diagram-MMDJMWI5-DeqlMgQv.js → diagram-MMDJMWI5-8cIlnSEJ.js} +1 -1
  27. package/dist/client/assets/{diagram-TYMM5635-DqtnAuqr.js → diagram-TYMM5635-BlIMSlQ5.js} +1 -1
  28. package/dist/client/assets/{erDiagram-SMLLAGMA-BBGN7fOL.js → erDiagram-SMLLAGMA-KjlbhDy3.js} +1 -1
  29. package/dist/client/assets/{flowDiagram-DWJPFMVM-C0WwXtcb.js → flowDiagram-DWJPFMVM-DqYNn08z.js} +1 -1
  30. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-D00_-gLK.js → ganttDiagram-T4ZO3ILL-BplrlRlU.js} +1 -1
  31. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-D9-J9LVn.js → gitGraphDiagram-UUTBAWPF-CISgtHAu.js} +1 -1
  32. package/dist/client/assets/{graph-DbpxB806.js → graph-DaTRgbvC.js} +1 -1
  33. package/dist/client/assets/index-DVQ5EO_a.css +1 -0
  34. package/dist/client/assets/index-alR6ElCr.js +479 -0
  35. package/dist/client/assets/{infoDiagram-42DDH7IO-CoV_lg2_.js → infoDiagram-42DDH7IO-BbFeDUi-.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DV9-YHTX.js → ishikawaDiagram-UXIWVN3A-BQTo9ri4.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-VCZTEJTY-CFY3HNeL.js → journeyDiagram-VCZTEJTY-CiRkOhp8.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-6JOO6SKY-BsN5X8OC.js → kanban-definition-6JOO6SKY-IIn_MSzy.js} +1 -1
  39. package/dist/client/assets/{layout-EvZfc466.js → layout-Cr58D4FS.js} +1 -1
  40. package/dist/client/assets/{linear-ConFN_kQ.js → linear-DNaIPcgl.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-q1Rp6XrX.js → mermaid.core-Dq_ukAsT.js} +4 -4
  42. package/dist/client/assets/{min-CgGOD4w3.js → min-DpLyTgPW.js} +1 -1
  43. package/dist/client/assets/{mindmap-definition-QFDTVHPH-CLvM_zrO.js → mindmap-definition-QFDTVHPH-C2DLYGq2.js} +1 -1
  44. package/dist/client/assets/{pieDiagram-DEJITSTG-Bw7QTbiY.js → pieDiagram-DEJITSTG-C3Cxmz-n.js} +1 -1
  45. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-CJZW6aCq.js → quadrantDiagram-34T5L4WZ-CEdmiODY.js} +1 -1
  46. package/dist/client/assets/{requirementDiagram-MS252O5E-CMUb9ODK.js → requirementDiagram-MS252O5E-B-Vj0Wyw.js} +1 -1
  47. package/dist/client/assets/{sankeyDiagram-XADWPNL6-DnjQJPPQ.js → sankeyDiagram-XADWPNL6-CyvEd7TA.js} +1 -1
  48. package/dist/client/assets/{sequenceDiagram-FGHM5R23-BQLWPMCP.js → sequenceDiagram-FGHM5R23-B2MiPHOT.js} +1 -1
  49. package/dist/client/assets/{stateDiagram-FHFEXIEX-CYUxN4zL.js → stateDiagram-FHFEXIEX-Dsa-VSCx.js} +1 -1
  50. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BKHWSGsO.js +1 -0
  51. package/dist/client/assets/{timeline-definition-GMOUNBTQ-DakKVVdc.js → timeline-definition-GMOUNBTQ-B9p0xkPR.js} +1 -1
  52. package/dist/client/assets/{vennDiagram-DHZGUBPP-CjJALOSl.js → vennDiagram-DHZGUBPP-DeU4CNd8.js} +1 -1
  53. package/dist/client/assets/{wardley-RL74JXVD-DNN6iyI_.js → wardley-RL74JXVD-BQyG38I_.js} +1 -1
  54. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-CuoFFC8W.js → wardleyDiagram-NUSXRM2D-DjrdDkEs.js} +1 -1
  55. package/dist/client/assets/{xychartDiagram-5P7HB3ND-CLeb77Ra.js → xychartDiagram-5P7HB3ND-CG0KUfn_.js} +1 -1
  56. package/dist/client/index.html +2 -2
  57. package/dist/fleet-plugins/ledger/routes.mjs +40 -16487
  58. package/dist/fleet-plugins/quota/routes.mjs +352 -95
  59. package/dist/fleet-plugins/repository/routes.mjs +63 -7
  60. package/dist/fleet-plugins/scuttlebutt/routes.mjs +4954 -6895
  61. package/dist/fleet-plugins/skills/routes.mjs +58 -16505
  62. package/dist/fleet-plugins/terminal/routes.mjs +22555 -33426
  63. package/dist/fleet.mjs +54671 -0
  64. package/package.json +6 -4
  65. package/dist/client/assets/channel-BkjngaUP.js +0 -1
  66. package/dist/client/assets/classDiagram-6PBFFD2Q-Bcn4Byd0.js +0 -1
  67. package/dist/client/assets/classDiagram-v2-HSJHXN6E-Bcn4Byd0.js +0 -1
  68. package/dist/client/assets/clone-HJ2xLTt3.js +0 -1
  69. package/dist/client/assets/index-BhOzl99v.css +0 -1
  70. package/dist/client/assets/index-Bnx3O7Op.js +0 -482
  71. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BqJUiDHN.js +0 -1
@@ -17447,8 +17447,12 @@ function fileDesc(b64, imports) {
17447
17447
  return reg.getFile(root.name);
17448
17448
  }
17449
17449
  var FLEET_DATA_DIR_NAME = ".fleet";
17450
- function getFleetDataDir() {
17451
- return path32.join(os3.homedir(), FLEET_DATA_DIR_NAME);
17450
+ var FLEET_DATA_DIR_ENV = "FLEET_DATA_DIR";
17451
+ function getFleetDataDir(env = process.env) {
17452
+ const override = env[FLEET_DATA_DIR_ENV];
17453
+ if (override === void 0 || override.trim().length === 0) return path32.join(os3.homedir(), FLEET_DATA_DIR_NAME);
17454
+ if (!path32.isAbsolute(override)) throw new Error(`${FLEET_DATA_DIR_ENV} must be an absolute path, received: ${override}`);
17455
+ return override;
17452
17456
  }
17453
17457
  var SECURE_DIR_MODE = 448;
17454
17458
  var SECURE_FILE_MODE = 384;
@@ -17806,9 +17810,103 @@ var REASONING_EFFORTS = [
17806
17810
  new Map(
17807
17811
  REASONING_EFFORTS.map((effort, index) => [effort, index])
17808
17812
  );
17813
+ var benchmarks_default = {
17814
+ version: 2,
17815
+ sources: {
17816
+ cursorbench: {
17817
+ name: "CursorBench",
17818
+ benchVersion: "3.2",
17819
+ observedAt: "2026-07-30T00:00:00Z",
17820
+ url: "https://cursor.com/cursorbench",
17821
+ method: "Third-party agentic-coding benchmark: ambiguous multi-file tasks from real Cursor sessions, run in Cursor's own harness. Scores are evidence about the vendor model and transfer across gateway providers serving it; token and step figures are harness-relative efficiency signals, not billing facts.",
17822
+ routingTieBandPoints: 2
17823
+ }
17824
+ },
17825
+ models: {
17826
+ "gpt-5.6-sol": {
17827
+ source: "cursorbench",
17828
+ rungs: {
17829
+ low: { score: 52.6, tokensPerTask: 5104, stepsPerTask: 19 },
17830
+ medium: { score: 60, tokensPerTask: 9747, stepsPerTask: 27 },
17831
+ high: { score: 63.5, tokensPerTask: 13867, stepsPerTask: 32 },
17832
+ xhigh: { score: 64.5, tokensPerTask: 19699, stepsPerTask: 38 },
17833
+ max: { score: 67.2, tokensPerTask: 28320, stepsPerTask: 48 }
17834
+ }
17835
+ },
17836
+ "gpt-5.6-terra": {
17837
+ source: "cursorbench",
17838
+ rungs: {
17839
+ low: { score: 46.9, tokensPerTask: 5312, stepsPerTask: 19 },
17840
+ medium: { score: 50.3, tokensPerTask: 6222, stepsPerTask: 20 },
17841
+ high: { score: 54.2, tokensPerTask: 9468, stepsPerTask: 23 },
17842
+ xhigh: { score: 59.2, tokensPerTask: 16089, stepsPerTask: 29 },
17843
+ max: { score: 64.9, tokensPerTask: 32969, stepsPerTask: 47 }
17844
+ }
17845
+ },
17846
+ "gpt-5.6-luna": {
17847
+ source: "cursorbench",
17848
+ rungs: {
17849
+ low: { score: 37.6, tokensPerTask: 3209, stepsPerTask: 17 },
17850
+ medium: { score: 47.7, tokensPerTask: 7095, stepsPerTask: 28 },
17851
+ high: { score: 56.8, tokensPerTask: 15141, stepsPerTask: 40 },
17852
+ xhigh: { score: 57.7, tokensPerTask: 22480, stepsPerTask: 48 },
17853
+ max: { score: 61.1, tokensPerTask: 87973, stepsPerTask: 61 }
17854
+ }
17855
+ },
17856
+ "grok-4.5": {
17857
+ source: "cursorbench",
17858
+ rungs: {
17859
+ low: { score: 63.5, tokensPerTask: 15841, stepsPerTask: 31 },
17860
+ medium: { score: 65.4, tokensPerTask: 18914, stepsPerTask: 34 },
17861
+ high: { score: 66.7, tokensPerTask: 19521, stepsPerTask: 33 }
17862
+ },
17863
+ caveat: "Bench footnote: an earlier snapshot of Cursor's codebase was unintentionally present in this model's training data, inflating scores by an unknown amount; the advantage does not transfer to other repositories."
17864
+ },
17865
+ "kimi-k3": {
17866
+ source: "cursorbench",
17867
+ rungs: {
17868
+ low: { score: 50.5, tokensPerTask: 13007, stepsPerTask: 33 },
17869
+ high: { score: 59.7, tokensPerTask: 26846, stepsPerTask: 47 },
17870
+ max: { score: 60.8, tokensPerTask: 38428, stepsPerTask: 57 }
17871
+ }
17872
+ },
17873
+ "composer-2.5": {
17874
+ source: "cursorbench",
17875
+ overall: { score: 56.1, tokensPerTask: 14286, stepsPerTask: 33 }
17876
+ },
17877
+ "glm-5.2": {
17878
+ source: "cursorbench",
17879
+ rungs: {
17880
+ high: { score: 51.5, tokensPerTask: 21829, stepsPerTask: 49 },
17881
+ max: { score: 55, tokensPerTask: 35946, stepsPerTask: 58 }
17882
+ },
17883
+ caveat: "Measured per reasoning rung, but the gateway serves this model without effort control; which rung the serving path reaches is unknown."
17884
+ },
17885
+ "claude-opus-5": {
17886
+ source: "cursorbench",
17887
+ rungs: {
17888
+ low: { score: 62.8, tokensPerTask: 18529, stepsPerTask: 37 },
17889
+ medium: { score: 64.3, tokensPerTask: 23612, stepsPerTask: 44 },
17890
+ high: { score: 66.7, tokensPerTask: 27932, stepsPerTask: 48 },
17891
+ xhigh: { score: 69.3, tokensPerTask: 54239, stepsPerTask: 72 },
17892
+ max: { score: 70, tokensPerTask: 61838, stepsPerTask: 78 }
17893
+ }
17894
+ },
17895
+ "claude-fable-5": {
17896
+ source: "cursorbench",
17897
+ rungs: {
17898
+ low: { score: 62.1, tokensPerTask: 18182, stepsPerTask: 31 },
17899
+ medium: { score: 65.2, tokensPerTask: 30366, stepsPerTask: 41 },
17900
+ high: { score: 66.5, tokensPerTask: 43747, stepsPerTask: 48 },
17901
+ xhigh: { score: 68.4, tokensPerTask: 64971, stepsPerTask: 56 },
17902
+ max: { score: 70.5, tokensPerTask: 103525, stepsPerTask: 72 }
17903
+ }
17904
+ }
17905
+ }
17906
+ };
17809
17907
  var models_default = {
17810
17908
  version: 1,
17811
- updatedAt: "2026-08-06T00:00:00Z",
17909
+ updatedAt: "2026-08-08T00:00:00Z",
17812
17910
  providers: {
17813
17911
  codex: {
17814
17912
  name: "Codex",
@@ -17833,7 +17931,8 @@ var models_default = {
17833
17931
  },
17834
17932
  aliases: [
17835
17933
  "gpt-5.6-sol"
17836
- ]
17934
+ ],
17935
+ benchmarkKey: "gpt-5.6-sol"
17837
17936
  },
17838
17937
  {
17839
17938
  modelId: "gpt-5.6-sol-fast",
@@ -17855,7 +17954,8 @@ var models_default = {
17855
17954
  },
17856
17955
  aliases: [
17857
17956
  "gpt-5.6-sol-fast"
17858
- ]
17957
+ ],
17958
+ benchmarkKey: "gpt-5.6-sol"
17859
17959
  },
17860
17960
  {
17861
17961
  modelId: "gpt-5.6-terra",
@@ -17875,7 +17975,8 @@ var models_default = {
17875
17975
  },
17876
17976
  aliases: [
17877
17977
  "gpt-5.6-terra"
17878
- ]
17978
+ ],
17979
+ benchmarkKey: "gpt-5.6-terra"
17879
17980
  },
17880
17981
  {
17881
17982
  modelId: "gpt-5.6-terra-fast",
@@ -17897,7 +17998,8 @@ var models_default = {
17897
17998
  },
17898
17999
  aliases: [
17899
18000
  "gpt-5.6-terra-fast"
17900
- ]
18001
+ ],
18002
+ benchmarkKey: "gpt-5.6-terra"
17901
18003
  },
17902
18004
  {
17903
18005
  modelId: "gpt-5.6-luna",
@@ -17916,7 +18018,8 @@ var models_default = {
17916
18018
  },
17917
18019
  aliases: [
17918
18020
  "gpt-5.6-luna"
17919
- ]
18021
+ ],
18022
+ benchmarkKey: "gpt-5.6-luna"
17920
18023
  },
17921
18024
  {
17922
18025
  modelId: "gpt-5.6-luna-fast",
@@ -17937,7 +18040,8 @@ var models_default = {
17937
18040
  },
17938
18041
  aliases: [
17939
18042
  "gpt-5.6-luna-fast"
17940
- ]
18043
+ ],
18044
+ benchmarkKey: "gpt-5.6-luna"
17941
18045
  }
17942
18046
  ]
17943
18047
  },
@@ -17961,7 +18065,8 @@ var models_default = {
17961
18065
  name: "Composer-2.5",
17962
18066
  capabilityClass: "flagship",
17963
18067
  quotaScope: "auto",
17964
- contextWindow: 2e5
18068
+ contextWindow: 2e5,
18069
+ benchmarkKey: "composer-2.5"
17965
18070
  },
17966
18071
  {
17967
18072
  modelId: "composer-2.5-fast",
@@ -17984,7 +18089,8 @@ var models_default = {
17984
18089
  "high"
17985
18090
  ],
17986
18091
  upstreamModelIdTemplate: "cursor-grok-4.5-{effort}"
17987
- }
18092
+ },
18093
+ benchmarkKey: "grok-4.5"
17988
18094
  },
17989
18095
  {
17990
18096
  modelId: "grok-4.5-fast",
@@ -18018,7 +18124,8 @@ var models_default = {
18018
18124
  "max"
18019
18125
  ],
18020
18126
  upstreamModelIdTemplate: "gpt-5.6-sol-{effort}"
18021
- }
18127
+ },
18128
+ benchmarkKey: "gpt-5.6-sol"
18022
18129
  },
18023
18130
  {
18024
18131
  modelId: "claude-opus-5",
@@ -18040,7 +18147,8 @@ var models_default = {
18040
18147
  xhigh: "claude-opus-5-thinking-xhigh",
18041
18148
  max: "claude-opus-5-thinking-max"
18042
18149
  }
18043
- }
18150
+ },
18151
+ benchmarkKey: "claude-opus-5"
18044
18152
  },
18045
18153
  {
18046
18154
  modelId: "claude-fable-5",
@@ -18059,7 +18167,8 @@ var models_default = {
18059
18167
  "max"
18060
18168
  ],
18061
18169
  upstreamModelIdTemplate: "claude-fable-5-{effort}"
18062
- }
18170
+ },
18171
+ benchmarkKey: "claude-fable-5"
18063
18172
  },
18064
18173
  {
18065
18174
  modelId: "kimi-k3-1m",
@@ -18068,7 +18177,8 @@ var models_default = {
18068
18177
  quotaScope: "api",
18069
18178
  providerModelId: "kimi-k3-max",
18070
18179
  contextWindow: 1048576,
18071
- cursorMaxMode: true
18180
+ cursorMaxMode: true,
18181
+ benchmarkKey: "kimi-k3"
18072
18182
  },
18073
18183
  {
18074
18184
  modelId: "kimi-k3",
@@ -18083,7 +18193,8 @@ var models_default = {
18083
18193
  "high"
18084
18194
  ],
18085
18195
  upstreamModelIdTemplate: "kimi-k3-{effort}"
18086
- }
18196
+ },
18197
+ benchmarkKey: "kimi-k3"
18087
18198
  }
18088
18199
  ]
18089
18200
  },
@@ -18107,7 +18218,8 @@ var models_default = {
18107
18218
  },
18108
18219
  aliases: [
18109
18220
  "k3"
18110
- ]
18221
+ ],
18222
+ benchmarkKey: "kimi-k3"
18111
18223
  },
18112
18224
  {
18113
18225
  modelId: "k3-256k",
@@ -18124,14 +18236,15 @@ var models_default = {
18124
18236
  },
18125
18237
  aliases: [
18126
18238
  "k3-256k"
18127
- ]
18239
+ ],
18240
+ benchmarkKey: "kimi-k3"
18128
18241
  }
18129
18242
  ]
18130
18243
  },
18131
18244
  opencode: {
18132
18245
  name: "OpenCode",
18133
18246
  defaultModel: "minimax-m3",
18134
- source: "live GET https://opencode.ai/zen/go/v1/models + per-model wire probes on /messages, /responses, /chat/completions (2026-08-03); contextWindow cross-checked against models.dev api.json opencode-go entries and oh-my-pi packages/catalog/src/models.json (2026-08-03, both agree). Excluded: mimo-v2-pro/mimo-v2-omni (upstream server_error), hy3-preview (listed but Router.ModelNotFound)",
18247
+ source: "live GET https://opencode.ai/zen/go/v1/models + per-model wire probes on /messages, /responses, /chat/completions (2026-08-03); contextWindow cross-checked against models.dev api.json opencode-go entries and oh-my-pi packages/catalog/src/models.json (2026-08-03, both agree). Excluded: mimo-v2-pro/mimo-v2-omni (upstream server_error), hy3-preview (listed but Router.ModelNotFound); superseded generations removed 2026-08-08 \u2014 the catalog keeps each lineup's current generation only",
18135
18248
  models: [
18136
18249
  {
18137
18250
  modelId: "minimax-m3",
@@ -18139,48 +18252,12 @@ var models_default = {
18139
18252
  capabilityClass: "flagship",
18140
18253
  contextWindow: 1e6
18141
18254
  },
18142
- {
18143
- modelId: "minimax-m2.7",
18144
- name: "MiniMax-M2.7",
18145
- capabilityClass: "standard",
18146
- contextWindow: 204800
18147
- },
18148
- {
18149
- modelId: "minimax-m2.5",
18150
- name: "MiniMax-M2.5",
18151
- capabilityClass: "standard",
18152
- contextWindow: 204800
18153
- },
18154
18255
  {
18155
18256
  modelId: "qwen3.8-max",
18156
18257
  name: "Qwen3.8-Max",
18157
18258
  capabilityClass: "flagship",
18158
18259
  contextWindow: 1e6
18159
18260
  },
18160
- {
18161
- modelId: "qwen3.7-max",
18162
- name: "Qwen3.7-Max",
18163
- capabilityClass: "standard",
18164
- contextWindow: 1e6
18165
- },
18166
- {
18167
- modelId: "qwen3.7-plus",
18168
- name: "Qwen3.7-Plus",
18169
- capabilityClass: "standard",
18170
- contextWindow: 1e6
18171
- },
18172
- {
18173
- modelId: "qwen3.6-plus",
18174
- name: "Qwen3.6-Plus",
18175
- capabilityClass: "standard",
18176
- contextWindow: 1e6
18177
- },
18178
- {
18179
- modelId: "qwen3.5-plus",
18180
- name: "Qwen3.5-Plus",
18181
- capabilityClass: "standard",
18182
- contextWindow: 262144
18183
- },
18184
18261
  {
18185
18262
  modelId: "gpt-5.6-luna",
18186
18263
  name: "GPT-5.6-Luna",
@@ -18196,7 +18273,8 @@ var models_default = {
18196
18273
  "xhigh",
18197
18274
  "max"
18198
18275
  ]
18199
- }
18276
+ },
18277
+ benchmarkKey: "gpt-5.6-luna"
18200
18278
  },
18201
18279
  {
18202
18280
  modelId: "grok-4.5",
@@ -18211,7 +18289,8 @@ var models_default = {
18211
18289
  "medium",
18212
18290
  "high"
18213
18291
  ]
18214
- }
18292
+ },
18293
+ benchmarkKey: "grok-4.5"
18215
18294
  },
18216
18295
  {
18217
18296
  modelId: "deepseek-v4-flash",
@@ -18232,49 +18311,16 @@ var models_default = {
18232
18311
  name: "GLM-5.2",
18233
18312
  capabilityClass: "flagship",
18234
18313
  wire: "chat-completions",
18235
- contextWindow: 1e6
18236
- },
18237
- {
18238
- modelId: "glm-5.1",
18239
- name: "GLM-5.1",
18240
- capabilityClass: "standard",
18241
- wire: "chat-completions",
18242
- contextWindow: 202752
18243
- },
18244
- {
18245
- modelId: "glm-5",
18246
- name: "GLM-5",
18247
- capabilityClass: "standard",
18248
- wire: "chat-completions",
18249
- contextWindow: 202752
18314
+ contextWindow: 1e6,
18315
+ benchmarkKey: "glm-5.2"
18250
18316
  },
18251
18317
  {
18252
18318
  modelId: "kimi-k3",
18253
18319
  name: "Kimi-K3",
18254
18320
  capabilityClass: "flagship",
18255
18321
  wire: "chat-completions",
18256
- contextWindow: 1048576
18257
- },
18258
- {
18259
- modelId: "kimi-k2.7-code",
18260
- name: "Kimi-K2.7-Code",
18261
- capabilityClass: "standard",
18262
- wire: "chat-completions",
18263
- contextWindow: 262144
18264
- },
18265
- {
18266
- modelId: "kimi-k2.6",
18267
- name: "Kimi-K2.6",
18268
- capabilityClass: "standard",
18269
- wire: "chat-completions",
18270
- contextWindow: 262144
18271
- },
18272
- {
18273
- modelId: "kimi-k2.5",
18274
- name: "Kimi-K2.5",
18275
- capabilityClass: "standard",
18276
- wire: "chat-completions",
18277
- contextWindow: 262144
18322
+ contextWindow: 1048576,
18323
+ benchmarkKey: "kimi-k3"
18278
18324
  },
18279
18325
  {
18280
18326
  modelId: "mimo-v2.5-pro",
@@ -18330,10 +18376,44 @@ var GatewayModelEffortSchema = external_exports.discriminatedUnion("supported",
18330
18376
  ]);
18331
18377
  var GATEWAY_QUOTA_SCOPES = ["auto", "api"];
18332
18378
  var GATEWAY_CAPABILITY_CLASSES = ["flagship", "standard", "light"];
18379
+ var GatewayBenchmarkFiguresSchema = external_exports.object({
18380
+ score: external_exports.number().positive().max(100),
18381
+ tokensPerTask: external_exports.number().int().positive(),
18382
+ stepsPerTask: external_exports.number().int().positive().optional()
18383
+ }).strict();
18384
+ var GatewayBenchmarkSourceSchema = external_exports.object({
18385
+ name: external_exports.string().min(1),
18386
+ benchVersion: external_exports.string().min(1),
18387
+ observedAt: external_exports.iso.datetime(),
18388
+ url: external_exports.string().min(1),
18389
+ method: external_exports.string().min(1),
18390
+ /**
18391
+ * Fleet가 라우팅상 동률로 취급하는 점수 폭. **소스가 발표한 통계값이 아니라 Fleet의
18392
+ * 보수적 라우팅 정책이다** — CursorBench는 동률 임계값을 발표하지 않는다. 그래서 이
18393
+ * 값은 소스를 서술하는 `method`가 아니라 여기에 있고, 이름도 소스 쪽 사실처럼 읽히지
18394
+ * 않게 둔다 — 호스트에는 소스 이름 바로 옆에 실려 나가므로, 이름이 근거 등급을
18395
+ * 그대로 말해 버린다.
18396
+ */
18397
+ routingTieBandPoints: external_exports.number().positive()
18398
+ }).strict();
18399
+ var GatewayBenchmarkModelEntrySchema = external_exports.object({
18400
+ source: external_exports.string().min(1),
18401
+ rungs: external_exports.partialRecord(external_exports.enum(GATEWAY_REASONING_EFFORTS), GatewayBenchmarkFiguresSchema).optional(),
18402
+ overall: GatewayBenchmarkFiguresSchema.optional(),
18403
+ caveat: external_exports.string().min(1).optional()
18404
+ }).strict().refine((entry) => entry.rungs !== void 0 || entry.overall !== void 0, {
18405
+ message: "Gateway benchmark model entry requires rungs or overall"
18406
+ });
18407
+ var GatewayBenchmarksRegistrySchema = external_exports.object({
18408
+ version: external_exports.number().int().positive(),
18409
+ sources: external_exports.record(external_exports.string().min(1), GatewayBenchmarkSourceSchema),
18410
+ models: external_exports.record(external_exports.string().min(1), GatewayBenchmarkModelEntrySchema)
18411
+ }).strict();
18333
18412
  var GatewayModelEntrySchema = external_exports.object({
18334
18413
  modelId: external_exports.string().min(1),
18335
18414
  name: external_exports.string().min(1),
18336
18415
  capabilityClass: external_exports.enum(GATEWAY_CAPABILITY_CLASSES).optional(),
18416
+ benchmarkKey: external_exports.string().min(1).optional(),
18337
18417
  description: external_exports.string().min(1).optional(),
18338
18418
  providerModelId: external_exports.string().min(1).optional(),
18339
18419
  serviceTier: external_exports.literal("priority").optional(),
@@ -18361,13 +18441,28 @@ var GatewayModelsRegistrySchema = external_exports.object({
18361
18441
  }).strict()
18362
18442
  }).strict();
18363
18443
  var UNSUPPORTED_GATEWAY_MODEL_EFFORT = Object.freeze({ supported: false });
18364
- var registry2 = parseGatewayModelsRegistry(models_default);
18444
+ var benchmarksRegistry = parseGatewayBenchmarksRegistry(benchmarks_default);
18445
+ function parseGatewayBenchmarksRegistry(value) {
18446
+ const parsed = GatewayBenchmarksRegistrySchema.parse(value);
18447
+ for (const [modelKey, entry] of Object.entries(parsed.models)) {
18448
+ if (!parsed.sources[entry.source]) {
18449
+ throw new Error(`Gateway benchmark model entry names an unknown source: ${modelKey} -> ${entry.source}`);
18450
+ }
18451
+ }
18452
+ return parsed;
18453
+ }
18365
18454
  function parseGatewayModelsRegistry(value) {
18366
18455
  const parsed = GatewayModelsRegistrySchema.parse(value);
18367
18456
  validateRegistry(parsed);
18368
18457
  return parsed;
18369
18458
  }
18459
+ var registry2 = (() => {
18460
+ const parsed = parseGatewayModelsRegistry(models_default);
18461
+ validateBenchmarkCoverage(parsed);
18462
+ return parsed;
18463
+ })();
18370
18464
  registry2.updatedAt;
18465
+ Object.entries(benchmarksRegistry.sources).map(([sourceId, source]) => `${sourceId}:${source.observedAt}`).sort().join("|");
18371
18466
  Object.freeze(
18372
18467
  Object.fromEntries(
18373
18468
  GATEWAY_PROVIDERS.map((provider) => [provider, registry2.providers[provider].name])
@@ -18399,7 +18494,45 @@ function gatewayProviderDefault(provider) {
18399
18494
  function scopedModelId(provider, modelId) {
18400
18495
  return `${provider}--${modelId}`;
18401
18496
  }
18497
+ function freezeBenchmarkFigures(figures) {
18498
+ return Object.freeze({ ...figures });
18499
+ }
18500
+ function resolveGatewayModelBenchmark(entry, effort) {
18501
+ if (!entry.benchmarkKey) return void 0;
18502
+ const benchEntry = benchmarksRegistry.models[entry.benchmarkKey];
18503
+ if (!benchEntry) return void 0;
18504
+ const source = benchmarksRegistry.sources[benchEntry.source];
18505
+ if (!source) return void 0;
18506
+ let rungs;
18507
+ if (benchEntry.rungs) {
18508
+ if (effort.supported) {
18509
+ const narrowed = effort.levels.filter((level) => benchEntry.rungs?.[level] !== void 0).map((level) => [level, freezeBenchmarkFigures(benchEntry.rungs[level])]);
18510
+ rungs = narrowed.length > 0 ? Object.freeze(Object.fromEntries(narrowed)) : void 0;
18511
+ } else {
18512
+ rungs = Object.freeze(
18513
+ Object.fromEntries(
18514
+ Object.entries(benchEntry.rungs).map(([level, figures]) => [
18515
+ level,
18516
+ freezeBenchmarkFigures(figures)
18517
+ ])
18518
+ )
18519
+ );
18520
+ }
18521
+ }
18522
+ const overall = benchEntry.overall ? freezeBenchmarkFigures(benchEntry.overall) : void 0;
18523
+ const benchmark = Object.freeze({
18524
+ source: `${source.name} ${source.benchVersion}`,
18525
+ observedAt: source.observedAt,
18526
+ routingTieBandPoints: source.routingTieBandPoints,
18527
+ ...rungs ? { rungs } : {},
18528
+ ...overall ? { overall } : {},
18529
+ ...benchEntry.caveat ? { caveat: benchEntry.caveat } : {}
18530
+ });
18531
+ if (!benchmark.rungs && !benchmark.overall) return void 0;
18532
+ return benchmark;
18533
+ }
18402
18534
  function toGatewayModel(provider, providerName, entry) {
18535
+ const benchmark = resolveGatewayModelBenchmark(entry, freezeGatewayModelEffort(entry.effort));
18403
18536
  return {
18404
18537
  id: scopedModelId(provider, entry.modelId),
18405
18538
  displayName: `${providerName}-${entry.name}`,
@@ -18410,6 +18543,7 @@ function toGatewayModel(provider, providerName, entry) {
18410
18543
  ...entry.quotaScope ? { quotaScope: entry.quotaScope } : {},
18411
18544
  ...entry.wire ? { wire: entry.wire } : {},
18412
18545
  ...entry.capabilityClass ? { capabilityClass: entry.capabilityClass } : {},
18546
+ ...benchmark ? { benchmark } : {},
18413
18547
  ...entry.description ? { description: entry.description } : {},
18414
18548
  ...entry.contextWindow ? { contextWindow: entry.contextWindow } : {},
18415
18549
  effort: freezeGatewayModelEffort(entry.effort),
@@ -18419,7 +18553,37 @@ function toGatewayModel(provider, providerName, entry) {
18419
18553
  function providerModels(provider) {
18420
18554
  return Object.freeze(GATEWAY_MODELS.filter((model) => model.provider === provider));
18421
18555
  }
18556
+ function validateBenchmarkCoverage(value, benchmarks = benchmarksRegistry) {
18557
+ const referencedBenchmarkKeys = /* @__PURE__ */ new Set();
18558
+ for (const provider of GATEWAY_PROVIDERS) {
18559
+ for (const model of value.providers[provider].models) {
18560
+ if (model.benchmarkKey) referencedBenchmarkKeys.add(model.benchmarkKey);
18561
+ }
18562
+ }
18563
+ for (const key of Object.keys(benchmarks.models)) {
18564
+ if (!referencedBenchmarkKeys.has(key)) {
18565
+ throw new Error(`Gateway benchmark entry is orphaned: ${key}`);
18566
+ }
18567
+ }
18568
+ }
18422
18569
  function validateRegistry(value) {
18570
+ for (const provider of GATEWAY_PROVIDERS) {
18571
+ const definition = value.providers[provider];
18572
+ for (const model of definition.models) {
18573
+ if (model.benchmarkKey) {
18574
+ if (!benchmarksRegistry.models[model.benchmarkKey]) {
18575
+ throw new Error(`Gateway benchmark key is unknown: ${provider}/${model.modelId} -> ${model.benchmarkKey}`);
18576
+ }
18577
+ if (model.providerModelId === "default") {
18578
+ throw new Error(`Gateway routing alias cannot carry a benchmark key: ${provider}/${model.modelId}`);
18579
+ }
18580
+ const resolved = resolveGatewayModelBenchmark(model, freezeGatewayModelEffort(model.effort));
18581
+ if (!resolved) {
18582
+ throw new Error(`Gateway benchmark resolves to no rungs or overall: ${provider}/${model.modelId}`);
18583
+ }
18584
+ }
18585
+ }
18586
+ }
18423
18587
  const lookupIds = /* @__PURE__ */ new Set();
18424
18588
  for (const provider of GATEWAY_PROVIDERS) {
18425
18589
  const definition = value.providers[provider];
@@ -18444,6 +18608,9 @@ function validateRegistry(value) {
18444
18608
  if (base && base.capabilityClass !== model.capabilityClass) {
18445
18609
  throw new Error(`Gateway service-tier sibling class differs from its base: ${provider}/${model.modelId}`);
18446
18610
  }
18611
+ if (base && base.benchmarkKey !== model.benchmarkKey) {
18612
+ throw new Error(`Gateway service-tier sibling benchmark key differs from its base: ${provider}/${model.modelId}`);
18613
+ }
18447
18614
  }
18448
18615
  if (model.serviceTier && !model.providerModelId) {
18449
18616
  throw new Error(`Gateway service tier requires providerModelId: ${provider}/${model.modelId}`);
@@ -19480,6 +19647,96 @@ function createQuotaService(deps) {
19480
19647
  }
19481
19648
  };
19482
19649
  }
19650
+ var CURSOR_GREP_RECEIPT_PREFIX = "FLEET_CURSOR_GREP_V1:";
19651
+ String.raw`
19652
+ const {spawn}=require("node:child_process");
19653
+ const {TextDecoder}=require("node:util");
19654
+ const emit=(value)=>process.stdout.write("${CURSOR_GREP_RECEIPT_PREFIX}"+Buffer.from(JSON.stringify(value)).toString("base64url"));
19655
+ (async()=>{try {
19656
+ const input=JSON.parse(Buffer.from(process.argv[1],"base64url").toString("utf8"));
19657
+ const matchSeparator=30;
19658
+ const contextSeparator=31;
19659
+ const maxContentBytes=2000;
19660
+ const args=["--color=never","--line-number","--with-filename","--null","--sort","path","--max-columns",String(maxContentBytes),"--max-columns-preview","--field-match-separator",String.fromCharCode(matchSeparator),"--field-context-separator",String.fromCharCode(contextSeparator),"--no-context-separator"];
19661
+ if(input.caseInsensitive)args.push("--ignore-case");
19662
+ if(input.glob)args.push("--glob",input.glob);
19663
+ if(input.type)args.push("--type",input.type);
19664
+ if(input.contextBefore)args.push("--before-context",String(input.contextBefore));
19665
+ if(input.contextAfter)args.push("--after-context",String(input.contextAfter));
19666
+ if(input.context)args.push("--context",String(input.context));
19667
+ args.push("--regexp",input.pattern,"--",input.path);
19668
+ const child=spawn("rg",args,{stdio:["ignore","pipe","pipe"]});
19669
+ let stderr="";
19670
+ child.stderr.setEncoding("utf8");
19671
+ child.stderr.on("data",(chunk)=>{if(stderr.length<16384)stderr+=chunk.slice(0,16384-stderr.length);});
19672
+ const completion=new Promise((resolve,reject)=>{
19673
+ child.once("error",reject);
19674
+ child.once("close",(code,signal)=>signal?reject(new Error("rg terminated by signal "+signal)):resolve(code));
19675
+ });
19676
+ const byteBudget=12*1024;
19677
+ const maxRecordBytes=64*1024;
19678
+ const truncatedSuffix=" [... omitted end of long line]";
19679
+ const decoder=new TextDecoder("utf-8",{fatal:true});
19680
+ let retainedBytes=0;
19681
+ let clientTruncated=false;
19682
+ let totalFiles=0;
19683
+ let totalLines=0;
19684
+ let totalMatchedLines=0;
19685
+ let previousFile;
19686
+ const files=[];
19687
+ const counts=[];
19688
+ const matches=[];
19689
+ const retain=(target,value)=>{
19690
+ const bytes=Buffer.byteLength(JSON.stringify(value));
19691
+ if(retainedBytes+bytes>byteBudget){clientTruncated=true;return;}
19692
+ retainedBytes+=bytes;target.push(value);
19693
+ };
19694
+ let buffered=Buffer.alloc(0);
19695
+ const consume=(record,nul)=>{
19696
+ const fields=record.subarray(nul+1);
19697
+ const matchIndex=fields.indexOf(matchSeparator);
19698
+ const contextIndex=fields.indexOf(contextSeparator);
19699
+ const separator=matchIndex>=0&&contextIndex>=0?Math.min(matchIndex,contextIndex):Math.max(matchIndex,contextIndex);
19700
+ if(separator<1)throw new Error("rg returned an invalid bounded search record");
19701
+ const lineText=fields.subarray(0,separator).toString("ascii");
19702
+ if(!/^\d+$/.test(lineText))throw new Error("rg returned an invalid search line number");
19703
+ const lineNumber=Number(lineText);
19704
+ if(!Number.isSafeInteger(lineNumber)||lineNumber<1)throw new Error("rg returned an invalid search line number");
19705
+ const file=decoder.decode(record.subarray(0,nul));
19706
+ let content=decoder.decode(fields.subarray(separator+1));
19707
+ if(content.endsWith("\r"))content=content.slice(0,-1);
19708
+ const contentTruncated=Buffer.byteLength(content)>maxContentBytes&&content.endsWith(truncatedSuffix);
19709
+ if(contentTruncated)content=content.slice(0,-truncatedSuffix.length);
19710
+ const isContextLine=fields[separator]===contextSeparator;
19711
+ if(file!==previousFile){
19712
+ totalFiles+=1;
19713
+ previousFile=file;
19714
+ }
19715
+ totalLines+=1;
19716
+ if(!isContextLine)totalMatchedLines+=1;
19717
+ retain(matches,{file,lineNumber,content,contentTruncated,isContextLine});
19718
+ };
19719
+ try {
19720
+ for await(const chunk of child.stdout){
19721
+ buffered=buffered.length===0?chunk:Buffer.concat([buffered,chunk]);
19722
+ while(true){
19723
+ const nul=buffered.indexOf(0);
19724
+ if(nul<0)break;
19725
+ const newline=buffered.indexOf(10,nul+1);
19726
+ if(newline<0)break;
19727
+ if(newline>maxRecordBytes)throw new Error("rg exceeded the bounded search record limit");
19728
+ consume(buffered.subarray(0,newline),nul);
19729
+ buffered=buffered.subarray(newline+1);
19730
+ }
19731
+ if(buffered.length>maxRecordBytes)throw new Error("rg exceeded the bounded search record limit");
19732
+ }
19733
+ if(buffered.length!==0)throw new Error("rg returned an incomplete bounded search record");
19734
+ }catch(error){child.kill();await completion.catch(()=>undefined);throw error;}
19735
+ const code=await completion;
19736
+ if(code!==0&&code!==1)throw new Error((stderr||"rg failed with exit "+code).trim());
19737
+ emit({ok:true,outputMode:input.outputMode,files,counts,matches,totalFiles,totalLines,totalMatchedLines,clientTruncated});
19738
+ }catch(error){emit({ok:false,error:error instanceof Error?error.message:String(error)});}})();
19739
+ `.trim();
19483
19740
  var cursorAgentDescriptor = [
19484
19741
  "CgthZ2VudC5wcm90bxIIYWdlbnQudjEicgoOR2xvYlRvb2xSZXN1bHQSLAoHc3VjY2VzcxgBIAEoCzIZLmFnZW50LnYxLkdsb2JUb29sU3VjY2Vzc0gAEigK",
19485
19742
  "BWVycm9yGAIgASgLMhcuYWdlbnQudjEuR2xvYlRvb2xFcnJvckgAQggKBnJlc3VsdCIeCg1HbG9iVG9vbEVycm9yEg0KBWVycm9yGAEgASgJIokBCg9HbG9i",