Replace the standalone "GPUStack" brand word with a target brand
(default MesaStack) across user-facing text. Word-boundary + case-
sensitive matching deliberately skips functional references: lowercase
gpustack (npm pkg/URLs/paths/k8s ns), ALL-CAPS GPUSTACK_ constants,
JS identifiers (getGPUStackPlugin etc.), and X-* HTTP headers. A
line-level skip list protects backend-contract strings matched at
runtime (e.g. the model-file-not-found startsWith check).
Re-run on each new v<version>-lofyer branch after syncing upstream.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Describe the upstream->private mirror chain, the v<version>-lofyer branch
naming for appearance customizations, and how to run scripts/sync-github.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Fetch all branches and tags from upstream GitHub and force-push them to
the 192.168.0.23 private origin (full mirror). Supports DRY_RUN and an
opt-in PRUNE_BRANCHES for true mirroring.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add the plugin-fed billing price-badge slots to the model cards and the
gpu-instance-type / storage cards so the enterprise plugin can surface
charge / pay indicators inline.
Reserve a stable block for the empty/loading state (matching the NoResult
height) and fade the empty state in, so entering a list page no longer jumps
between spinner, empty result, and rows. Apply scroll-table to the antd main
lists and pass emptyMinHeight to the SealTable-based lists.
Managers start in a loading state and gate the empty state on the
cluster/worker fetch, so the 'no clusters/workers' guidance no longer
flashes before the real infra data lands.
My Models empty state now guides managers to create a cluster/worker or
deploy a model (queries gated to canSeeAdmin/canSeeOrgAdmin); plain users
keep the consumer copy. Add an Experimental badge to the GPU-instance
cluster type card.
Remove the cluster-detail route and the name-link navigation; the
cluster name is now plain text. Mount the plugin-provided
clusterDetail.AccessDrawer so the enterprise row action can open it.
The GPU Instances / Storage tabs built the filter object inline (in
baseRequest and again in the extra tab's props), duplicating the
conditional-spread logic and handing the enterprise Organization tab a fresh
object every render — which refired its fetch effect on any state change.
Hoist it into one memoized ``breakdownFilters`` shared by the chart request
and the extra tab, mirroring the Tokens tab's stable-filters shape.
- change the breakdown extra-tab contract from a `useVisible()` hook to a plain
`isVisible(ctx)` function so the host no longer calls hooks inside a loop
(token breakdown-tabs + resource GPU/Storage tabs)
- resource export: drop the time portion of the date bucket by slicing the ISO
string instead of re-parsing with dayjs (avoids a timezone day-shift)
- token & resource filter bars render a plugin slot (UsageFilterBar /
ResourceUsageFilterBar) for the organization / user-group filters
- breakdown tabs read plugin-provided extra sub-tabs (breakdownExtraTabs /
resourceBreakdownExtraTabs) so the enterprise plugin can inject the
Organization sub-tab
- thread the org / user-group filter state through the token filter hook and
the resource tabs / breakdown tables / summary / export dialog
- standardize the organization label on the principal name; resource export
date formatted to date-only
The basic form seeds a default cluster on open, which fired the full cluster-change handler and triggered an evaluate request before any model was picked. Split off a seed callback that refreshes scoped options without evaluating, and guard the evaluate handler with a model-selected check as a backstop.
Read creator_id / creator_name / creator_deleted from the breakdown item
root into the flat user_* fields, so the GPU Instances / Storage chart
export marks a deleted owner independently of the grouped instance/volume.
Deleted users / models / API keys / instances / volumes now sink below the
live entries in each usage tab's filter, while the current account stays on
top and live entries keep their order (stable sort).
Group the GPU Instances and Storage chart exports by date+instance /
date+volume, add Instance/Storage and (org-admin only) User columns, and
mark deleted instances/volumes and their owner user independently in both
the preview and the exported sheet.