@dotobokuri/fleet-console 1.53.0 → 1.54.1

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 (65) hide show
  1. package/dist/cli.mjs +134 -152
  2. package/dist/client/assets/{_baseUniq-DMy581Oi.js → _baseUniq-B2XggV1b.js} +1 -1
  3. package/dist/client/assets/{arc-um-0g15v.js → arc-CPqvR_Wl.js} +1 -1
  4. package/dist/client/assets/{architectureDiagram-Q4EWVU46-D1iQoHug.js → architectureDiagram-Q4EWVU46-BczXSpod.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-DXYQGD6D-GjdNsEg6.js → blockDiagram-DXYQGD6D-BPtW_zZR.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AHTNJAMY-DfYsOj1d.js → c4Diagram-AHTNJAMY-Cry2oyLL.js} +1 -1
  7. package/dist/client/assets/channel-D5C5uwWd.js +1 -0
  8. package/dist/client/assets/{chunk-4BX2VUAB-LfU1EX7c.js → chunk-4BX2VUAB-DKkKt4m0.js} +1 -1
  9. package/dist/client/assets/{chunk-4TB4RGXK-B_1LgegZ.js → chunk-4TB4RGXK-DKGkDbqm.js} +1 -1
  10. package/dist/client/assets/{chunk-55IACEB6-D-BnTl_k.js → chunk-55IACEB6-DawsVr8O.js} +1 -1
  11. package/dist/client/assets/{chunk-EDXVE4YY-DeCWXUI3.js → chunk-EDXVE4YY-tS8vRy63.js} +1 -1
  12. package/dist/client/assets/{chunk-FMBD7UC4-CNAzUQNN.js → chunk-FMBD7UC4-B0jQQkjI.js} +1 -1
  13. package/dist/client/assets/{chunk-OYMX7WX6-BuwqFRl7.js → chunk-OYMX7WX6-FZQSRkEo.js} +1 -1
  14. package/dist/client/assets/{chunk-QZHKN3VN-XLU6CkR1.js → chunk-QZHKN3VN-Bq1WBmr8.js} +1 -1
  15. package/dist/client/assets/{chunk-YZCP3GAM-XbJQYAu4.js → chunk-YZCP3GAM-CNWIYKHc.js} +1 -1
  16. package/dist/client/assets/classDiagram-6PBFFD2Q-Cv4Bxw_r.js +1 -0
  17. package/dist/client/assets/classDiagram-v2-HSJHXN6E-Cv4Bxw_r.js +1 -0
  18. package/dist/client/assets/clone-C7dthYDe.js +1 -0
  19. package/dist/client/assets/{cose-bilkent-S5V4N54A-r4zTL6DU.js → cose-bilkent-S5V4N54A-CmOaWS4P.js} +1 -1
  20. package/dist/client/assets/{dagre-KV5264BT-DaLp1uAb.js → dagre-KV5264BT-D2gJaf1o.js} +1 -1
  21. package/dist/client/assets/{diagram-5BDNPKRD-D24H3xF8.js → diagram-5BDNPKRD-DH-M3VUk.js} +1 -1
  22. package/dist/client/assets/{diagram-G4DWMVQ6-DDUmzMbU.js → diagram-G4DWMVQ6-169IB8uN.js} +1 -1
  23. package/dist/client/assets/{diagram-MMDJMWI5-Bu1kdLKQ.js → diagram-MMDJMWI5-D1OVxCyQ.js} +1 -1
  24. package/dist/client/assets/{diagram-TYMM5635-BBej-3ZQ.js → diagram-TYMM5635-CkiS1glz.js} +1 -1
  25. package/dist/client/assets/{erDiagram-SMLLAGMA-AoZda5NJ.js → erDiagram-SMLLAGMA-CZUp7ncJ.js} +1 -1
  26. package/dist/client/assets/{flowDiagram-DWJPFMVM-CvB3-gM7.js → flowDiagram-DWJPFMVM-9SIhR3aC.js} +1 -1
  27. package/dist/client/assets/{ganttDiagram-T4ZO3ILL-Cz9oeYSi.js → ganttDiagram-T4ZO3ILL-CA4smcv3.js} +1 -1
  28. package/dist/client/assets/{gitGraphDiagram-UUTBAWPF-CcyHaI1m.js → gitGraphDiagram-UUTBAWPF-DF8CSmoM.js} +1 -1
  29. package/dist/client/assets/{graph-BgYpZY7g.js → graph-Bc_ceTI8.js} +1 -1
  30. package/dist/client/assets/index-NNL49IzO.css +1 -0
  31. package/dist/client/assets/index-kTAFpDLu.js +479 -0
  32. package/dist/client/assets/{infoDiagram-42DDH7IO-BlaWQCd9.js → infoDiagram-42DDH7IO-BC5KSucM.js} +1 -1
  33. package/dist/client/assets/{ishikawaDiagram-UXIWVN3A-DiLI-7yL.js → ishikawaDiagram-UXIWVN3A-JJIJclQD.js} +1 -1
  34. package/dist/client/assets/{journeyDiagram-VCZTEJTY-BPxJIngA.js → journeyDiagram-VCZTEJTY-ERzBaHVf.js} +1 -1
  35. package/dist/client/assets/{kanban-definition-6JOO6SKY-CXb7JOT-.js → kanban-definition-6JOO6SKY-KvnzNd3g.js} +1 -1
  36. package/dist/client/assets/{layout-BadELPx7.js → layout-DJbQbTix.js} +1 -1
  37. package/dist/client/assets/{linear-D62pksKQ.js → linear-BzBkH5Aq.js} +1 -1
  38. package/dist/client/assets/{mermaid.core-Dbdvwdxy.js → mermaid.core-CAqwSbV2.js} +4 -4
  39. package/dist/client/assets/{min-tcb-gpC-.js → min-giSfwdiX.js} +1 -1
  40. package/dist/client/assets/{mindmap-definition-QFDTVHPH-Bt4LM1HT.js → mindmap-definition-QFDTVHPH-BH0wnMRm.js} +1 -1
  41. package/dist/client/assets/{pieDiagram-DEJITSTG-BjYXAffy.js → pieDiagram-DEJITSTG-WOHMlPDe.js} +1 -1
  42. package/dist/client/assets/{quadrantDiagram-34T5L4WZ-FFsb5y79.js → quadrantDiagram-34T5L4WZ-DcIpvIOj.js} +1 -1
  43. package/dist/client/assets/{requirementDiagram-MS252O5E-B3oCkug_.js → requirementDiagram-MS252O5E-C99uWiwG.js} +1 -1
  44. package/dist/client/assets/{sankeyDiagram-XADWPNL6-CVHyWX5j.js → sankeyDiagram-XADWPNL6-czWBcwBu.js} +1 -1
  45. package/dist/client/assets/{sequenceDiagram-FGHM5R23-DlZAQRfJ.js → sequenceDiagram-FGHM5R23-CjtCPppG.js} +1 -1
  46. package/dist/client/assets/{stateDiagram-FHFEXIEX--vOc8Wz0.js → stateDiagram-FHFEXIEX-D0UKF8ze.js} +1 -1
  47. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2-BdRUP2Pp.js +1 -0
  48. package/dist/client/assets/{timeline-definition-GMOUNBTQ-hwIImaFf.js → timeline-definition-GMOUNBTQ-3isWQZNU.js} +1 -1
  49. package/dist/client/assets/{vennDiagram-DHZGUBPP-Cf-iaXAU.js → vennDiagram-DHZGUBPP-C_LF2g8l.js} +1 -1
  50. package/dist/client/assets/{wardley-RL74JXVD-CxdejqWj.js → wardley-RL74JXVD-Bw0Y4M6p.js} +1 -1
  51. package/dist/client/assets/{wardleyDiagram-NUSXRM2D-DMobb4Y0.js → wardleyDiagram-NUSXRM2D-B6e3mxQI.js} +1 -1
  52. package/dist/client/assets/{xychartDiagram-5P7HB3ND-CHdDRmS8.js → xychartDiagram-5P7HB3ND-DjlZXnLg.js} +1 -1
  53. package/dist/client/index.html +2 -2
  54. package/dist/fleet-plugins/quota/routes.mjs +196 -136
  55. package/dist/fleet-plugins/scuttlebutt/routes.mjs +128 -149
  56. package/dist/fleet-plugins/terminal/routes.mjs +511 -280
  57. package/dist/fleet.mjs +478 -248
  58. package/package.json +1 -1
  59. package/dist/client/assets/channel-DkymfdVr.js +0 -1
  60. package/dist/client/assets/classDiagram-6PBFFD2Q-B8ppIyIU.js +0 -1
  61. package/dist/client/assets/classDiagram-v2-HSJHXN6E-B8ppIyIU.js +0 -1
  62. package/dist/client/assets/clone-BfW9sA2u.js +0 -1
  63. package/dist/client/assets/index-CgfF0JA9.js +0 -479
  64. package/dist/client/assets/index-f2lIzUnA.css +0 -1
  65. package/dist/client/assets/stateDiagram-v2-QKLJ7IA2--18u3P53.js +0 -1
@@ -17826,92 +17826,168 @@ var benchmarks_default = {
17826
17826
  "gpt-5.6-sol": {
17827
17827
  source: "cursorbench",
17828
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 }
17829
+ low: {
17830
+ score: 52.6,
17831
+ tokensPerTask: 5104,
17832
+ stepsPerTask: 19
17833
+ },
17834
+ medium: {
17835
+ score: 60,
17836
+ tokensPerTask: 9747,
17837
+ stepsPerTask: 27
17838
+ },
17839
+ high: {
17840
+ score: 63.5,
17841
+ tokensPerTask: 13867,
17842
+ stepsPerTask: 32
17843
+ },
17844
+ xhigh: {
17845
+ score: 64.5,
17846
+ tokensPerTask: 19699,
17847
+ stepsPerTask: 38
17848
+ },
17849
+ max: {
17850
+ score: 67.2,
17851
+ tokensPerTask: 28320,
17852
+ stepsPerTask: 48
17853
+ }
17834
17854
  }
17835
17855
  },
17836
17856
  "gpt-5.6-terra": {
17837
17857
  source: "cursorbench",
17838
17858
  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 }
17859
+ low: {
17860
+ score: 46.9,
17861
+ tokensPerTask: 5312,
17862
+ stepsPerTask: 19
17863
+ },
17864
+ medium: {
17865
+ score: 50.3,
17866
+ tokensPerTask: 6222,
17867
+ stepsPerTask: 20
17868
+ },
17869
+ high: {
17870
+ score: 54.2,
17871
+ tokensPerTask: 9468,
17872
+ stepsPerTask: 23
17873
+ },
17874
+ xhigh: {
17875
+ score: 59.2,
17876
+ tokensPerTask: 16089,
17877
+ stepsPerTask: 29
17878
+ },
17879
+ max: {
17880
+ score: 64.9,
17881
+ tokensPerTask: 32969,
17882
+ stepsPerTask: 47
17883
+ }
17844
17884
  }
17845
17885
  },
17846
17886
  "gpt-5.6-luna": {
17847
17887
  source: "cursorbench",
17848
17888
  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 }
17889
+ low: {
17890
+ score: 37.6,
17891
+ tokensPerTask: 3209,
17892
+ stepsPerTask: 17
17893
+ },
17894
+ medium: {
17895
+ score: 47.7,
17896
+ tokensPerTask: 7095,
17897
+ stepsPerTask: 28
17898
+ },
17899
+ high: {
17900
+ score: 56.8,
17901
+ tokensPerTask: 15141,
17902
+ stepsPerTask: 40
17903
+ },
17904
+ xhigh: {
17905
+ score: 57.7,
17906
+ tokensPerTask: 22480,
17907
+ stepsPerTask: 48
17908
+ },
17909
+ max: {
17910
+ score: 61.1,
17911
+ tokensPerTask: 87973,
17912
+ stepsPerTask: 61
17913
+ }
17854
17914
  }
17855
17915
  },
17856
17916
  "grok-4.5": {
17857
17917
  source: "cursorbench",
17858
17918
  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 }
17919
+ low: {
17920
+ score: 63.5,
17921
+ tokensPerTask: 15841,
17922
+ stepsPerTask: 31
17923
+ },
17924
+ medium: {
17925
+ score: 65.4,
17926
+ tokensPerTask: 18914,
17927
+ stepsPerTask: 34
17928
+ },
17929
+ high: {
17930
+ score: 66.7,
17931
+ tokensPerTask: 19521,
17932
+ stepsPerTask: 33
17933
+ }
17862
17934
  },
17863
17935
  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
17936
  },
17865
17937
  "kimi-k3": {
17866
17938
  source: "cursorbench",
17867
17939
  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 }
17940
+ low: {
17941
+ score: 50.5,
17942
+ tokensPerTask: 13007,
17943
+ stepsPerTask: 33
17944
+ },
17945
+ high: {
17946
+ score: 59.7,
17947
+ tokensPerTask: 26846,
17948
+ stepsPerTask: 47
17949
+ },
17950
+ max: {
17951
+ score: 60.8,
17952
+ tokensPerTask: 38428,
17953
+ stepsPerTask: 57
17954
+ }
17871
17955
  }
17872
17956
  },
17873
17957
  "composer-2.5": {
17874
17958
  source: "cursorbench",
17875
- overall: { score: 56.1, tokensPerTask: 14286, stepsPerTask: 33 }
17959
+ overall: {
17960
+ score: 56.1,
17961
+ tokensPerTask: 14286,
17962
+ stepsPerTask: 33
17963
+ }
17876
17964
  },
17877
17965
  "glm-5.2": {
17878
17966
  source: "cursorbench",
17879
17967
  rungs: {
17880
- high: { score: 51.5, tokensPerTask: 21829, stepsPerTask: 49 },
17881
- max: { score: 55, tokensPerTask: 35946, stepsPerTask: 58 }
17968
+ high: {
17969
+ score: 51.5,
17970
+ tokensPerTask: 21829,
17971
+ stepsPerTask: 49
17972
+ },
17973
+ max: {
17974
+ score: 55,
17975
+ tokensPerTask: 35946,
17976
+ stepsPerTask: 58
17977
+ }
17882
17978
  },
17883
17979
  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
17980
  }
17905
17981
  }
17906
17982
  };
17907
17983
  var models_default = {
17908
17984
  version: 1,
17909
- updatedAt: "2026-08-08T00:00:00Z",
17985
+ updatedAt: "2026-08-11T00:00:00Z",
17910
17986
  providers: {
17911
17987
  codex: {
17912
17988
  name: "Codex",
17913
17989
  defaultModel: "gpt-5.6-sol",
17914
- source: "codex app-server model/list (codex-cli 0.146.0, 2026-08-01) for model/effort/service-tier; contextWindow=272000 is codex debug models context_window/max_context_window (codex-cli 0.146.0, 2026-08-02)",
17990
+ source: "codex app-server model/list (codex-cli 0.147.0, 2026-08-11 \u2014 ultra advertised for sol/sol-wm/terra, luna stops at max) for model/effort/service-tier; contextWindow=272000 is codex debug models context_window/max_context_window (codex-cli 0.146.0, 2026-08-02)",
17915
17991
  models: [
17916
17992
  {
17917
17993
  modelId: "gpt-5.6-sol",
@@ -18048,7 +18124,7 @@ var models_default = {
18048
18124
  cursor: {
18049
18125
  name: "Cursor",
18050
18126
  defaultModel: "auto",
18051
- source: "Cursor GetUsableModels + Run conversationCheckpointUpdate.token_details.max_tokens (cli-2026.07.08-0c04a8a; standard and Max Mode observed 2026-08-01, gpt-5.6-sol observed 2026-08-05 on cursor-agent 2026.07.23-e383d2b); quotaScope from DashboardService/GetCurrentPeriodUsage autoBucketModels (2026-08-05)",
18127
+ 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); quotaScope from DashboardService/GetCurrentPeriodUsage autoBucketModels (2026-08-05)",
18052
18128
  models: [
18053
18129
  {
18054
18130
  modelId: "auto",
@@ -18107,94 +18183,6 @@ var models_default = {
18107
18183
  ],
18108
18184
  upstreamModelIdTemplate: "cursor-grok-4.5-{effort}-fast"
18109
18185
  }
18110
- },
18111
- {
18112
- modelId: "gpt-5.6-sol",
18113
- name: "GPT-5.6-Sol",
18114
- capabilityClass: "flagship",
18115
- quotaScope: "api",
18116
- contextWindow: 272e3,
18117
- effort: {
18118
- supported: true,
18119
- levels: [
18120
- "low",
18121
- "medium",
18122
- "high",
18123
- "xhigh",
18124
- "max"
18125
- ],
18126
- upstreamModelIdTemplate: "gpt-5.6-sol-{effort}"
18127
- },
18128
- benchmarkKey: "gpt-5.6-sol"
18129
- },
18130
- {
18131
- modelId: "claude-opus-5",
18132
- name: "Opus-5",
18133
- capabilityClass: "flagship",
18134
- quotaScope: "api",
18135
- contextWindow: 3e5,
18136
- effort: {
18137
- supported: true,
18138
- levels: [
18139
- "low",
18140
- "medium",
18141
- "high",
18142
- "xhigh",
18143
- "max"
18144
- ],
18145
- upstreamModelIdTemplate: "claude-opus-5-{effort}",
18146
- upstreamModelIds: {
18147
- xhigh: "claude-opus-5-thinking-xhigh",
18148
- max: "claude-opus-5-thinking-max"
18149
- }
18150
- },
18151
- benchmarkKey: "claude-opus-5"
18152
- },
18153
- {
18154
- modelId: "claude-fable-5",
18155
- name: "Fable-5",
18156
- capabilityClass: "flagship",
18157
- quotaScope: "api",
18158
- description: "NO ZDR",
18159
- contextWindow: 3e5,
18160
- effort: {
18161
- supported: true,
18162
- levels: [
18163
- "low",
18164
- "medium",
18165
- "high",
18166
- "xhigh",
18167
- "max"
18168
- ],
18169
- upstreamModelIdTemplate: "claude-fable-5-{effort}"
18170
- },
18171
- benchmarkKey: "claude-fable-5"
18172
- },
18173
- {
18174
- modelId: "kimi-k3-1m",
18175
- name: "Kimi-K3-1M",
18176
- capabilityClass: "flagship",
18177
- quotaScope: "api",
18178
- providerModelId: "kimi-k3-max",
18179
- contextWindow: 1048576,
18180
- cursorMaxMode: true,
18181
- benchmarkKey: "kimi-k3"
18182
- },
18183
- {
18184
- modelId: "kimi-k3",
18185
- name: "Kimi-K3",
18186
- capabilityClass: "flagship",
18187
- quotaScope: "api",
18188
- contextWindow: 2e5,
18189
- effort: {
18190
- supported: true,
18191
- levels: [
18192
- "low",
18193
- "high"
18194
- ],
18195
- upstreamModelIdTemplate: "kimi-k3-{effort}"
18196
- },
18197
- benchmarkKey: "kimi-k3"
18198
18186
  }
18199
18187
  ]
18200
18188
  },
@@ -18690,6 +18678,62 @@ function freezeGatewayModelEffort(effort) {
18690
18678
  upstreamModelId(gatewayProviderDefault("codex"));
18691
18679
  new Set(REASONING_EFFORTS);
18692
18680
  new TextEncoder().encode(": keep-alive\n\n");
18681
+ var MS_PER_HOUR = 36e5;
18682
+ var CADENCE_SESSION_MAX_MS = 20 * MS_PER_HOUR;
18683
+ var CADENCE_DAILY_MAX_MS = 3 * 24 * MS_PER_HOUR;
18684
+ var CADENCE_WEEKLY_MAX_MS = 20 * 24 * MS_PER_HOUR;
18685
+ var MIN_ELAPSED_FRACTION = 0.05;
18686
+ var PACE_CRITICAL = 1.5;
18687
+ var PACE_ELEVATED = 1.1;
18688
+ var USED_CRITICAL_PERCENT = 95;
18689
+ var USED_ELEVATED_PERCENT = 80;
18690
+ function quotaWindowCadence(durationMs) {
18691
+ if (durationMs <= CADENCE_SESSION_MAX_MS) return "session";
18692
+ if (durationMs <= CADENCE_DAILY_MAX_MS) return "daily";
18693
+ if (durationMs <= CADENCE_WEEKLY_MAX_MS) return "weekly";
18694
+ return "monthly";
18695
+ }
18696
+ function windowPressure(usedPercent, paceRatio) {
18697
+ if (usedPercent >= USED_CRITICAL_PERCENT || paceRatio !== void 0 && paceRatio >= PACE_CRITICAL) {
18698
+ return "critical";
18699
+ }
18700
+ if (usedPercent >= USED_ELEVATED_PERCENT || paceRatio !== void 0 && paceRatio >= PACE_ELEVATED) {
18701
+ return "elevated";
18702
+ }
18703
+ return "ok";
18704
+ }
18705
+ function deriveQuotaWindowRisk(window, at) {
18706
+ const durationMs = window.period?.durationMs;
18707
+ if (typeof durationMs !== "number" || !Number.isFinite(durationMs) || durationMs <= 0) {
18708
+ return { pressure: windowPressure(window.usedPercent, void 0) };
18709
+ }
18710
+ const startsAt = window.period?.startsAt ?? (window.resetsAt !== void 0 && window.resetsAt > durationMs ? window.resetsAt - durationMs : void 0);
18711
+ const resetBoundary = window.resetsAt ?? (startsAt !== void 0 ? startsAt + durationMs : void 0);
18712
+ const stale = resetBoundary !== void 0 && at > resetBoundary;
18713
+ let elapsedFraction;
18714
+ let paceRatio;
18715
+ let projectedExhaustionAt;
18716
+ if (startsAt !== void 0 && resetBoundary !== void 0 && !stale && at > startsAt) {
18717
+ const elapsed = Math.min(1, (at - startsAt) / durationMs);
18718
+ elapsedFraction = Math.round(elapsed * 100) / 100;
18719
+ if (elapsed >= MIN_ELAPSED_FRACTION) {
18720
+ const used = Math.min(1, Math.max(0, window.usedPercent / 100));
18721
+ paceRatio = Math.round(used / elapsed * 100) / 100;
18722
+ if (used > 0 && used < 1) {
18723
+ const exhaustionAt = startsAt + Math.round((at - startsAt) / used);
18724
+ if (exhaustionAt < resetBoundary) projectedExhaustionAt = exhaustionAt;
18725
+ }
18726
+ }
18727
+ }
18728
+ return {
18729
+ cadence: quotaWindowCadence(durationMs),
18730
+ ...elapsedFraction !== void 0 ? { elapsedFraction } : {},
18731
+ ...paceRatio !== void 0 ? { paceRatio } : {},
18732
+ ...projectedExhaustionAt !== void 0 ? { projectedExhaustionAt } : {},
18733
+ recoveryHalfLifeMs: Math.round(durationMs / 2),
18734
+ pressure: windowPressure(window.usedPercent, paceRatio)
18735
+ };
18736
+ }
18693
18737
  var REQUEST_TIMEOUT_MS = 1e4;
18694
18738
  var MAX_RESPONSE_BYTES = 262144;
18695
18739
  var MAX_WINDOWS = 8;
@@ -19634,6 +19678,14 @@ function createQuotaService(deps) {
19634
19678
  inFlight.set(id, task);
19635
19679
  return task;
19636
19680
  }
19681
+ function withRisk(provider) {
19682
+ if (!provider.windows || provider.windows.length === 0) return provider;
19683
+ const at = typeof provider.fetchedAt === "number" && Number.isFinite(provider.fetchedAt) ? provider.fetchedAt : now();
19684
+ return {
19685
+ ...provider,
19686
+ windows: provider.windows.map((window) => ({ ...window, risk: deriveQuotaWindowRisk(window, at) }))
19687
+ };
19688
+ }
19637
19689
  return {
19638
19690
  async getSummary(options = {}) {
19639
19691
  const [claude, codex, cursor, kimi, opencode] = await Promise.all([
@@ -19643,7 +19695,15 @@ function createQuotaService(deps) {
19643
19695
  load("kimi", options.force === true || options.forceProvider === "kimi"),
19644
19696
  load("opencode", options.force === true || options.forceProvider === "opencode")
19645
19697
  ]);
19646
- return { providers: { claude, codex, cursor, kimi, opencode } };
19698
+ return {
19699
+ providers: {
19700
+ claude: withRisk(claude),
19701
+ codex: withRisk(codex),
19702
+ cursor: withRisk(cursor),
19703
+ kimi: withRisk(kimi),
19704
+ opencode: withRisk(opencode)
19705
+ }
19706
+ };
19647
19707
  }
19648
19708
  };
19649
19709
  }