@cartanova/qgrid-cli 2.4.4 → 2.4.6

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 (56) hide show
  1. package/bundle/dist/application/monit/log-buffer.js +76 -0
  2. package/bundle/dist/application/monit/monit.frame.js +86 -0
  3. package/bundle/dist/application/monit/monit.types.js +42 -0
  4. package/bundle/dist/application/qgrid/oauth.js +1 -1
  5. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +3 -3
  6. package/bundle/dist/application/qgrid/qgrid.frame.js +14 -12
  7. package/bundle/dist/application/qgrid/qgrid.types.js +3 -2
  8. package/bundle/dist/application/queries.generated.js +7 -2
  9. package/bundle/dist/application/request-log/request-log.model.js +1 -1
  10. package/bundle/dist/sonamu.config.js +14 -10
  11. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +5 -2
  12. package/bundle/dist/utils/providers/anthropic/claude-session.js +3 -3
  13. package/bundle/dist/utils/providers/openai/codex-worker.js +5 -3
  14. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +179 -15
  15. package/bundle/src/application/monit/log-buffer.test.ts +121 -0
  16. package/bundle/src/application/monit/log-buffer.ts +121 -0
  17. package/bundle/src/application/monit/monit.frame.test.ts +176 -0
  18. package/bundle/src/application/monit/monit.frame.ts +77 -0
  19. package/bundle/src/application/monit/monit.types.ts +54 -0
  20. package/bundle/src/application/qgrid/qgrid.frame.test.ts +24 -0
  21. package/bundle/src/application/qgrid/qgrid.frame.ts +2 -0
  22. package/bundle/src/application/qgrid/qgrid.types.ts +1 -0
  23. package/bundle/src/application/queries.generated.ts +8 -0
  24. package/bundle/src/application/sonamu.generated.http +12 -0
  25. package/bundle/src/sonamu.config.ts +5 -2
  26. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +5 -0
  27. package/bundle/src/utils/providers/openai/codex-worker.test.ts +26 -0
  28. package/bundle/src/utils/providers/openai/codex-worker.ts +3 -1
  29. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +212 -7
  30. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +297 -17
  31. package/bundle/web-dist/client/assets/index-BOXhNo0k.js +78 -0
  32. package/bundle/web-dist/client/assets/index-yZcjDoV0.css +1 -0
  33. package/bundle/web-dist/client/assets/{logs-vuI-Zgnq.js → logs-BShH_sut.js} +1 -1
  34. package/bundle/web-dist/client/assets/monit-CoEAp5S0.js +1 -0
  35. package/bundle/web-dist/client/assets/{routes-0Fki0JEi.js → routes-Dr3cGnV3.js} +2 -2
  36. package/bundle/web-dist/client/assets/{sd.generated-WA5SGJYZ.js → sd.generated-D2Y9QeiN.js} +1 -1
  37. package/bundle/web-dist/client/assets/{services.generated-DzZLnb7S.js → services.generated-CmxXl220.js} +1 -1
  38. package/bundle/web-dist/client/assets/{show-BreAgaFH.js → show-CXII6Iy7.js} +3 -3
  39. package/bundle/web-dist/client/assets/{tokens-4VgHQtXd.js → tokens-hP1NecIg.js} +1 -1
  40. package/bundle/web-dist/client/assets/use-update-token-mutation-6J1T9U2-.js +1 -0
  41. package/bundle/web-dist/client/index.html +3 -3
  42. package/bundle/web-dist/server/assets/{lazyRouteComponent-BrPAFtBA.js → lazyRouteComponent-BlfOh9S3.js} +1 -1
  43. package/bundle/web-dist/server/assets/{logs-CKM6W3W6.js → logs-DYly4ipQ.js} +3 -3
  44. package/bundle/web-dist/server/assets/monit-CYyY2S2f.js +1577 -0
  45. package/bundle/web-dist/server/assets/{routes-DhIpPgXz.js → routes-Dqu3osXt.js} +14 -6
  46. package/bundle/web-dist/server/assets/{sd.generated-Cwg2f53z.js → sd.generated-CE6D5clm.js} +1 -1
  47. package/bundle/web-dist/server/assets/{services.generated-CsotZP44.js → services.generated-DyZUzXiq.js} +39 -2
  48. package/bundle/web-dist/server/assets/{show-CV2UFjaH.js → show-BDul8xLb.js} +3 -3
  49. package/bundle/web-dist/server/assets/{tokens-DfGj1y2v.js → tokens-fzMW4G74.js} +4 -4
  50. package/bundle/web-dist/server/assets/{use-update-token-mutation-BL96w-Pg.js → use-update-token-mutation-BejUW5sw.js} +1 -1
  51. package/bundle/web-dist/server/entry-server.generated.js +71 -27
  52. package/package.json +1 -1
  53. package/skills/qgrid/references/ai-sdk-provider-contract.md +25 -0
  54. package/bundle/web-dist/client/assets/index-D1ExP77_.js +0 -78
  55. package/bundle/web-dist/client/assets/index-Dc-qeEPm.css +0 -1
  56. package/bundle/web-dist/client/assets/use-update-token-mutation-BV6msjuy.js +0 -1
@@ -1,8 +1,8 @@
1
- import { X as __toESM, _ as require_react, f as require_react_dom, g as require_jsx_runtime, h as useQueryClient } from "./sd.generated-Cwg2f53z.js";
2
- import { i as TokenService, t as QgridService } from "./services.generated-CsotZP44.js";
3
- import { r as Q } from "../entry-server.generated.js";
1
+ import { Z as __toESM, _ as require_jsx_runtime, g as useQueryClient, p as require_react_dom, v as require_react } from "./sd.generated-CE6D5clm.js";
2
+ import { a as TokenService, n as QgridService } from "./services.generated-DyZUzXiq.js";
3
+ import { i as Q } from "../entry-server.generated.js";
4
4
  import { r as formatUsd } from "./cost-CSH_t17I.js";
5
- import { t as useUpdateTokenMutation } from "./use-update-token-mutation-BL96w-Pg.js";
5
+ import { t as useUpdateTokenMutation } from "./use-update-token-mutation-BejUW5sw.js";
6
6
  //#region ../../node_modules/.pnpm/@dnd-kit+utilities@3.2.2_react@19.2.4/node_modules/@dnd-kit/utilities/dist/utilities.esm.js
7
7
  var import_react_dom = /* @__PURE__ */ __toESM(require_react_dom());
8
8
  var import_react = /* @__PURE__ */ __toESM(require_react());
@@ -2377,7 +2377,13 @@ function formatResets(iso) {
2377
2377
  const m = Math.floor(diff % 36e5 / 6e4);
2378
2378
  return h > 0 ? `resets ${h}h ${m}m` : `resets ${m}m`;
2379
2379
  }
2380
- function UsageRow({ label, utilization, resetsAt, theme, threshold }) {
2380
+ function formatWindowLabel(fallback, windowDurationMins) {
2381
+ if (!windowDurationMins || windowDurationMins <= 0) return fallback;
2382
+ const hours = windowDurationMins / 60;
2383
+ if (hours >= 24) return `${Math.round(hours / 24)}d`;
2384
+ return `${Math.round(hours)}h`;
2385
+ }
2386
+ function UsageRow({ label, utilization, resetsAt, windowDurationMins, theme, threshold }) {
2381
2387
  const pct = utilization ?? 0;
2382
2388
  const hasThreshold = threshold !== void 0 && threshold !== null;
2383
2389
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -2385,7 +2391,7 @@ function UsageRow({ label, utilization, resetsAt, theme, threshold }) {
2385
2391
  children: [
2386
2392
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
2387
2393
  className: "text-xs text-sand-600 w-20 shrink-0",
2388
- children: label
2394
+ children: formatWindowLabel(label, windowDurationMins)
2389
2395
  }),
2390
2396
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
2391
2397
  className: "relative flex-1 h-2 bg-sand-200 rounded-full overflow-hidden",
@@ -2438,12 +2444,14 @@ function TokenUsage({ token, theme }) {
2438
2444
  label: "5h",
2439
2445
  utilization: data.fiveHour.utilization,
2440
2446
  resetsAt: data.fiveHour.resetsAt,
2447
+ windowDurationMins: data.fiveHour.windowDurationMins,
2441
2448
  theme,
2442
2449
  threshold: thresholdForPrimary
2443
2450
  }), data.sevenDay && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UsageRow, {
2444
2451
  label: "7d",
2445
2452
  utilization: data.sevenDay.utilization,
2446
2453
  resetsAt: data.sevenDay.resetsAt,
2454
+ windowDurationMins: data.sevenDay.windowDurationMins,
2447
2455
  theme
2448
2456
  })]
2449
2457
  });
@@ -22660,4 +22660,4 @@ SD.enumLabels = (enumName) => {
22660
22660
  } });
22661
22661
  };
22662
22662
  //#endregion
22663
- export { hashKey as A, shallowEqualObjects as B, Query as C, pendingThenable as D, notifyManager as E, noop$2 as F, focusManager as G, skipToken as H, partialMatchKey as I, __exportAll as J, Subscribable as K, replaceData as L, isValidTimeout as M, matchMutation as N, environmentManager as O, matchQuery as P, resolveEnabled as R, infiniteQueryBehavior as S, onlineManager as T, timeUntilStale as U, shouldThrowError as V, timeoutManager as W, __toESM as X, __require as Y, require_react as _, fetch$1 as a, hasNextPage as b, number as c, require_lib as d, require_react_dom as f, require_jsx_runtime as g, useQueryClient as h, dedupeAndFlatten as i, hashQueryKeyByOptions as j, functionalUpdate as k, object as l, QueryClientProvider as m, SUPPORTED_LOCALES as n, useRefreshable as o, require_shim as p, __commonJSMin as q, setLocale as r, useSSEStream as s, SD as t, string as u, Mutation as v, fetchState as w, hasPreviousPage as x, getDefaultState as y, resolveStaleTime as z };
22663
+ export { functionalUpdate as A, resolveStaleTime as B, infiniteQueryBehavior as C, notifyManager as D, onlineManager as E, matchQuery as F, timeoutManager as G, shouldThrowError as H, noop$2 as I, __commonJSMin as J, focusManager as K, partialMatchKey as L, hashQueryKeyByOptions as M, isValidTimeout as N, pendingThenable as O, matchMutation as P, replaceData as R, hasPreviousPage as S, fetchState as T, skipToken as U, shallowEqualObjects as V, timeUntilStale as W, __require as X, __exportAll as Y, __toESM as Z, require_jsx_runtime as _, fetch$1 as a, getDefaultState as b, _enum as c, string as d, require_lib as f, useQueryClient as g, QueryClientProvider as h, dedupeAndFlatten as i, hashKey as j, environmentManager as k, number as l, require_shim as m, SUPPORTED_LOCALES as n, useRefreshable as o, require_react_dom as p, Subscribable as q, setLocale as r, useSSEStream as s, SD as t, object as u, require_react as v, Query as w, hasNextPage as x, Mutation as y, resolveEnabled as z };
@@ -1,4 +1,4 @@
1
- import { A as hashKey, B as shallowEqualObjects, D as pendingThenable, E as notifyManager, F as noop, G as focusManager, K as Subscribable, L as replaceData, M as isValidTimeout, O as environmentManager, R as resolveEnabled, S as infiniteQueryBehavior, U as timeUntilStale, V as shouldThrowError, W as timeoutManager, X as __toESM, _ as require_react, a as fetch, b as hasNextPage, d as require_lib, g as require_jsx_runtime, h as useQueryClient, i as dedupeAndFlatten, o as useRefreshable, s as useSSEStream, w as fetchState, x as hasPreviousPage, y as getDefaultState, z as resolveStaleTime } from "./sd.generated-Cwg2f53z.js";
1
+ import { B as resolveStaleTime, C as infiniteQueryBehavior, D as notifyManager, G as timeoutManager, H as shouldThrowError, I as noop, K as focusManager, N as isValidTimeout, O as pendingThenable, R as replaceData, S as hasPreviousPage, T as fetchState, V as shallowEqualObjects, W as timeUntilStale, Z as __toESM, _ as require_jsx_runtime, a as fetch, b as getDefaultState, f as require_lib, g as useQueryClient, i as dedupeAndFlatten, j as hashKey, k as environmentManager, o as useRefreshable, q as Subscribable, s as useSSEStream, v as require_react, x as hasNextPage, z as resolveEnabled } from "./sd.generated-CE6D5clm.js";
2
2
  //#region ../../node_modules/.pnpm/@tanstack+query-core@5.95.2/node_modules/@tanstack/query-core/build/modern/queryObserver.js
3
3
  var QueryObserver = class extends Subscribable {
4
4
  constructor(client, options) {
@@ -1120,8 +1120,45 @@ var QgridService;
1120
1120
  ...options
1121
1121
  }));
1122
1122
  })(QgridService || (QgridService = {}));
1123
+ var MonitService;
1124
+ (function(_MonitService) {
1125
+ async function monitLogs(cursor) {
1126
+ return fetch({
1127
+ method: "GET",
1128
+ url: `/api/monit/monitLogs?${import_lib.default.stringify({ cursor })}`
1129
+ });
1130
+ }
1131
+ _MonitService.monitLogs = monitLogs;
1132
+ const monitLogsQueryOptions = _MonitService.monitLogsQueryOptions = (cursor) => queryOptions({
1133
+ queryKey: [
1134
+ "Monit",
1135
+ "monitLogs",
1136
+ cursor
1137
+ ],
1138
+ queryFn: () => monitLogs(cursor)
1139
+ });
1140
+ _MonitService.useMonitLogs = (cursor, options) => useRefreshable(useQuery({
1141
+ ...monitLogsQueryOptions(cursor),
1142
+ ...options
1143
+ }));
1144
+ async function monitInfo() {
1145
+ return fetch({
1146
+ method: "GET",
1147
+ url: `/api/monit/monitInfo`
1148
+ });
1149
+ }
1150
+ _MonitService.monitInfo = monitInfo;
1151
+ const monitInfoQueryOptions = _MonitService.monitInfoQueryOptions = () => queryOptions({
1152
+ queryKey: ["Monit", "monitInfo"],
1153
+ queryFn: () => monitInfo()
1154
+ });
1155
+ _MonitService.useMonitInfo = (options) => useRefreshable(useQuery({
1156
+ ...monitInfoQueryOptions(),
1157
+ ...options
1158
+ }));
1159
+ })(MonitService || (MonitService = {}));
1123
1160
  RequestLogService.useRequestLogs, RequestLogService.useRequestLogsInfinite;
1124
1161
  RequestLogStepService.useRequestLogSteps, RequestLogStepService.useRequestLogStepsInfinite;
1125
1162
  TokenService.useTokens, TokenService.useTokensInfinite;
1126
1163
  //#endregion
1127
- export { useMutation as a, TokenService as i, RequestLogService as n, RequestLogStepService as r, QgridService as t };
1164
+ export { TokenService as a, RequestLogStepService as i, QgridService as n, useMutation as o, RequestLogService as r, useQuery as s, MonitService as t };
@@ -1,6 +1,6 @@
1
- import { J as __exportAll, X as __toESM, _ as require_react, g as require_jsx_runtime, q as __commonJSMin } from "./sd.generated-Cwg2f53z.js";
2
- import { n as RequestLogService, r as RequestLogStepService } from "./services.generated-CsotZP44.js";
3
- import { a as Link } from "./lazyRouteComponent-BrPAFtBA.js";
1
+ import { J as __commonJSMin, Y as __exportAll, Z as __toESM, _ as require_jsx_runtime, v as require_react } from "./sd.generated-CE6D5clm.js";
2
+ import { i as RequestLogStepService, r as RequestLogService } from "./services.generated-DyZUzXiq.js";
3
+ import { a as Link } from "./lazyRouteComponent-BlfOh9S3.js";
4
4
  import { t as Route } from "../entry-server.generated.js";
5
5
  import { n as formatMicroUsd, t as cacheHitRate } from "./cost-CSH_t17I.js";
6
6
  import minpath from "node:path";
@@ -1,7 +1,7 @@
1
- import { X as __toESM, _ as require_react, g as require_jsx_runtime, h as useQueryClient } from "./sd.generated-Cwg2f53z.js";
2
- import { i as TokenService, t as QgridService } from "./services.generated-CsotZP44.js";
3
- import { i as lucideKeyRound, r as Q } from "../entry-server.generated.js";
4
- import { t as useUpdateTokenMutation } from "./use-update-token-mutation-BL96w-Pg.js";
1
+ import { Z as __toESM, _ as require_jsx_runtime, g as useQueryClient, v as require_react } from "./sd.generated-CE6D5clm.js";
2
+ import { a as TokenService, n as QgridService } from "./services.generated-DyZUzXiq.js";
3
+ import { i as Q, o as lucideKeyRound } from "../entry-server.generated.js";
4
+ import { t as useUpdateTokenMutation } from "./use-update-token-mutation-BejUW5sw.js";
5
5
  //#region ~icons/lucide/plus.jsx
6
6
  var import_react = /* @__PURE__ */ __toESM(require_react());
7
7
  var import_jsx_runtime = require_jsx_runtime();
@@ -1,4 +1,4 @@
1
- import { a as useMutation, t as QgridService } from "./services.generated-CsotZP44.js";
1
+ import { n as QgridService, o as useMutation } from "./services.generated-DyZUzXiq.js";
2
2
  //#region src/services/token/use-update-token-mutation.ts
3
3
  function useUpdateTokenMutation() {
4
4
  return useMutation({ mutationFn: ({ id, name, quotaThreshold, weight }) => QgridService.updateToken(id, name, quotaThreshold, weight) });
@@ -1,5 +1,5 @@
1
- import { A as hashKey, C as Query, E as notifyManager, F as noop$1, G as focusManager, H as skipToken, I as partialMatchKey, K as Subscribable, N as matchMutation, P as matchQuery, S as infiniteQueryBehavior, T as onlineManager, X as __toESM, Y as __require, _ as require_react, c as number, f as require_react_dom, g as require_jsx_runtime, j as hashQueryKeyByOptions, k as functionalUpdate, l as object, m as QueryClientProvider, n as SUPPORTED_LOCALES, p as require_shim, q as __commonJSMin, r as setLocale, t as SD, u as string, v as Mutation, z as resolveStaleTime } from "./assets/sd.generated-Cwg2f53z.js";
2
- import { A as decodePath, C as findRouteMatch, D as createLRUCache, E as processRouteTree, F as last, I as replaceEqualDeep, M as findLast, N as functionalUpdate$1, O as invariant, P as isPromise, S as findFlatMatch, T as processRouteMasks, _ as interpolatePath, a as Link$1, b as trimPath, c as usePrevious$1, d as useRouter, f as getRouterContext, g as cleanPath, h as isNotFound, i as createRootRouteWithContext, j as deepEqual$2, k as createControlledPromise, l as matchContext, m as rootRouteId, n as createFileRoute, p as warning, r as createLazyFileRoute, s as useLayoutEffect$3, t as lazyRouteComponent, u as useRouterState, v as joinPaths, w as findSingleMatch, x as trimPathRight, y as resolvePath } from "./assets/lazyRouteComponent-BrPAFtBA.js";
1
+ import { A as functionalUpdate, B as resolveStaleTime, C as infiniteQueryBehavior, D as notifyManager, E as onlineManager, F as matchQuery, I as noop$1, J as __commonJSMin, K as focusManager, L as partialMatchKey, M as hashQueryKeyByOptions, P as matchMutation, U as skipToken, X as __require, Z as __toESM, _ as require_jsx_runtime, c as _enum, d as string, h as QueryClientProvider, j as hashKey, l as number, m as require_shim, n as SUPPORTED_LOCALES, p as require_react_dom, q as Subscribable, r as setLocale, t as SD, u as object, v as require_react, w as Query, y as Mutation } from "./assets/sd.generated-CE6D5clm.js";
2
+ import { A as decodePath, C as findRouteMatch, D as createLRUCache, E as processRouteTree, F as last, I as replaceEqualDeep, M as findLast, N as functionalUpdate$1, O as invariant, P as isPromise, S as findFlatMatch, T as processRouteMasks, _ as interpolatePath, a as Link$1, b as trimPath, c as usePrevious$1, d as useRouter, f as getRouterContext, g as cleanPath, h as isNotFound, i as createRootRouteWithContext, j as deepEqual$2, k as createControlledPromise, l as matchContext, m as rootRouteId, n as createFileRoute, p as warning, r as createLazyFileRoute, s as useLayoutEffect$3, t as lazyRouteComponent, u as useRouterState, v as joinPaths, w as findSingleMatch, x as trimPathRight, y as resolvePath } from "./assets/lazyRouteComponent-BlfOh9S3.js";
3
3
  //#region ../../node_modules/.pnpm/@tanstack+query-core@5.95.2/node_modules/@tanstack/query-core/build/modern/hydration.js
4
4
  function defaultTransformerFn(data) {
5
5
  return data;
@@ -22659,6 +22659,22 @@ var lucideKeyRound = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg
22659
22659
  })
22660
22660
  });
22661
22661
  //#endregion
22662
+ //#region ~icons/lucide/terminal.jsx
22663
+ var lucideTerminal = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
22664
+ viewBox: "0 0 24 24",
22665
+ width: "1.2em",
22666
+ height: "1.2em",
22667
+ ...props,
22668
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", {
22669
+ fill: "none",
22670
+ stroke: "currentColor",
22671
+ strokeLinecap: "round",
22672
+ strokeLinejoin: "round",
22673
+ strokeWidth: 2,
22674
+ d: "M12 19h8M4 17l6-6l-6-6"
22675
+ })
22676
+ });
22677
+ //#endregion
22662
22678
  //#region src/components/Sidebar.tsx
22663
22679
  var sections = [{
22664
22680
  label: "Overview",
@@ -22669,17 +22685,25 @@ var sections = [{
22669
22685
  }]
22670
22686
  }, {
22671
22687
  label: "Manage",
22672
- items: [{
22673
- title: "Tokens",
22674
- path: "/tokens",
22675
- icon: lucideKeyRound
22676
- }, {
22677
- title: "Request Logs",
22678
- path: "/logs",
22679
- icon: lucideFileText
22680
- }]
22688
+ items: [
22689
+ {
22690
+ title: "Tokens",
22691
+ path: "/tokens",
22692
+ icon: lucideKeyRound
22693
+ },
22694
+ {
22695
+ title: "Request Logs",
22696
+ path: "/logs",
22697
+ icon: lucideFileText
22698
+ },
22699
+ {
22700
+ title: "Server Logs",
22701
+ path: "/monit",
22702
+ icon: lucideTerminal
22703
+ }
22704
+ ]
22681
22705
  }];
22682
- var qgridVersion = "2.4.4";
22706
+ var qgridVersion = "2.4.6";
22683
22707
  function Sidebar({ className }) {
22684
22708
  const pathname = useRouterState({ select: (s) => s.location.pathname });
22685
22709
  const isActive = (path) => {
@@ -22735,7 +22759,8 @@ function Sidebar({ className }) {
22735
22759
  var ROUTE_TITLES = {
22736
22760
  "/": "Dashboard",
22737
22761
  "/tokens": "Tokens",
22738
- "/logs": "Request Logs"
22762
+ "/logs": "Request Logs",
22763
+ "/monit": "Server Logs"
22739
22764
  };
22740
22765
  function getBreadcrumb(pathname) {
22741
22766
  if (pathname.startsWith("/requests/show")) return {
@@ -44513,7 +44538,7 @@ function SonamuProvider({ children }) {
44513
44538
  }
44514
44539
  //#endregion
44515
44540
  //#region src/routes/__root.tsx
44516
- var Route$4 = createRootRouteWithContext()({
44541
+ var Route$5 = createRootRouteWithContext()({
44517
44542
  head: () => ({ meta: [
44518
44543
  { charSet: "utf-8" },
44519
44544
  {
@@ -44525,7 +44550,7 @@ var Route$4 = createRootRouteWithContext()({
44525
44550
  component: RootComponent
44526
44551
  });
44527
44552
  function RootComponent() {
44528
- const { queryClient } = Route$4.useRouteContext();
44553
+ const { queryClient } = Route$5.useRouteContext();
44529
44554
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("html", {
44530
44555
  lang: "en",
44531
44556
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("head", { children: [
@@ -44559,11 +44584,24 @@ function RootComponent() {
44559
44584
  }
44560
44585
  //#endregion
44561
44586
  //#region src/routes/tokens.tsx
44562
- var $$splitComponentImporter$3 = () => import("./assets/tokens-DfGj1y2v.js");
44563
- var Route$3 = createFileRoute("/tokens")({ component: lazyRouteComponent($$splitComponentImporter$3, "component") });
44587
+ var $$splitComponentImporter$4 = () => import("./assets/tokens-fzMW4G74.js");
44588
+ var Route$4 = createFileRoute("/tokens")({ component: lazyRouteComponent($$splitComponentImporter$4, "component") });
44589
+ //#endregion
44590
+ //#region src/routes/monit.tsx
44591
+ var $$splitComponentImporter$3 = () => import("./assets/monit-CYyY2S2f.js");
44592
+ var monitSearchSchema = object({ level: _enum([
44593
+ "all",
44594
+ "scaling",
44595
+ "warn",
44596
+ "error"
44597
+ ]).optional().default("all") });
44598
+ var Route$3 = createFileRoute("/monit")({
44599
+ validateSearch: monitSearchSchema,
44600
+ component: lazyRouteComponent($$splitComponentImporter$3, "component")
44601
+ });
44564
44602
  //#endregion
44565
44603
  //#region src/routes/logs.tsx
44566
- var $$splitComponentImporter$2 = () => import("./assets/logs-CKM6W3W6.js");
44604
+ var $$splitComponentImporter$2 = () => import("./assets/logs-DYly4ipQ.js");
44567
44605
  var logsSearchSchema = object({
44568
44606
  token: string().optional(),
44569
44607
  project: string().optional(),
@@ -44575,11 +44613,11 @@ var Route$2 = createFileRoute("/logs")({
44575
44613
  });
44576
44614
  //#endregion
44577
44615
  //#region src/routes/index.tsx
44578
- var $$splitComponentImporter$1 = () => import("./assets/routes-DhIpPgXz.js");
44616
+ var $$splitComponentImporter$1 = () => import("./assets/routes-Dqu3osXt.js");
44579
44617
  var Route$1 = createFileRoute("/")({ component: lazyRouteComponent($$splitComponentImporter$1, "component") });
44580
44618
  //#endregion
44581
44619
  //#region src/routes/requests/show.tsx
44582
- var $$splitComponentImporter = () => import("./assets/show-CV2UFjaH.js");
44620
+ var $$splitComponentImporter = () => import("./assets/show-BDul8xLb.js");
44583
44621
  var showSearchSchema = object({ id: number() });
44584
44622
  var Route = createFileRoute("/requests/show")({
44585
44623
  validateSearch: showSearchSchema,
@@ -44587,31 +44625,37 @@ var Route = createFileRoute("/requests/show")({
44587
44625
  });
44588
44626
  //#endregion
44589
44627
  //#region src/routeTree.gen.ts
44590
- var TokensRoute = Route$3.update({
44628
+ var TokensRoute = Route$4.update({
44591
44629
  id: "/tokens",
44592
44630
  path: "/tokens",
44593
- getParentRoute: () => Route$4
44631
+ getParentRoute: () => Route$5
44632
+ });
44633
+ var MonitRoute = Route$3.update({
44634
+ id: "/monit",
44635
+ path: "/monit",
44636
+ getParentRoute: () => Route$5
44594
44637
  });
44595
44638
  var LogsRoute = Route$2.update({
44596
44639
  id: "/logs",
44597
44640
  path: "/logs",
44598
- getParentRoute: () => Route$4
44641
+ getParentRoute: () => Route$5
44599
44642
  });
44600
44643
  var rootRouteChildren = {
44601
44644
  IndexRoute: Route$1.update({
44602
44645
  id: "/",
44603
44646
  path: "/",
44604
- getParentRoute: () => Route$4
44647
+ getParentRoute: () => Route$5
44605
44648
  }),
44606
44649
  LogsRoute,
44650
+ MonitRoute,
44607
44651
  TokensRoute,
44608
44652
  RequestsShowRoute: Route.update({
44609
44653
  id: "/requests/show",
44610
44654
  path: "/requests/show",
44611
- getParentRoute: () => Route$4
44655
+ getParentRoute: () => Route$5
44612
44656
  })
44613
44657
  };
44614
- var routeTree = Route$4._addFileChildren(rootRouteChildren)._addFileTypes();
44658
+ var routeTree = Route$5._addFileChildren(rootRouteChildren)._addFileTypes();
44615
44659
  //#endregion
44616
44660
  //#region src/entry-server.generated.tsx
44617
44661
  /**
@@ -44642,4 +44686,4 @@ async function render(url, preloadedData = []) {
44642
44686
  };
44643
44687
  }
44644
44688
  //#endregion
44645
- export { lucideKeyRound as i, Route$2 as n, Q as r, render, Route as t };
44689
+ export { clsx as a, Q as i, Route$2 as n, lucideKeyRound as o, Route$3 as r, render, Route as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cartanova/qgrid-cli",
3
- "version": "2.4.4",
3
+ "version": "2.4.6",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/cartanova-ai/qgrid"
@@ -49,6 +49,31 @@ qgrid-specific behavior is controlled through `providerOptions.qgrid`. Explain t
49
49
 
50
50
  `providerOptions.qgrid` does not currently support `projectName` or `project_name`. Prefer `QGRID_PROJECT_NAME` for the default project label; use config `projectName` only when a caller needs to override that default.
51
51
 
52
+ ## OpenAI/Codex Fast mode
53
+
54
+ qgrid supports Codex Fast mode per request through `providerOptions.qgrid.serviceTier`. Pass `"fast"`; qgrid forwards it through the OpenAI route to Codex `turn/start`, and Codex normalizes the legacy `fast` value to the upstream `priority` service tier.
55
+
56
+ ```ts
57
+ const result = await generateText({
58
+ model: qgrid("openai/gpt-5.6-terra"),
59
+ prompt,
60
+ providerOptions: {
61
+ qgrid: {
62
+ serviceTier: "fast",
63
+ },
64
+ },
65
+ });
66
+ ```
67
+
68
+ Fast mode contract:
69
+
70
+ - It is OpenAI/Codex-only. Do not send it to `anthropic/*` models.
71
+ - It works on both `generateText` and `streamText`; image generation remains non-stream for unrelated reasons.
72
+ - Omit `serviceTier` for normal/default routing. qgrid's current API accepts `"fast"` and `"flex"`; callers should not send Codex's normalized `"priority"` value directly.
73
+ - qgrid is a pass-through for this selection. Codex applies the tier only when its Fast mode feature is enabled and the selected model advertises support; otherwise Codex can omit the unsupported tier.
74
+ - Fast mode changes upstream service-tier routing, not qgrid worker capacity. It does not change WPT, client concurrency, queue behavior, or worker autoscaling.
75
+ - Do not promise a fixed latency improvement. Verify TTFT, duration, throughput, and quota consumption with a workload-specific A/B test.
76
+
52
77
  ## Request construction
53
78
 
54
79
  The provider sends `POST /api/qgrid/query` for generate and `prepareStream` plus SSE for stream.