@beastmode-develeap/beastmode 0.1.276 → 0.1.278
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.
- package/dist/web/board.html +27 -5
- package/dist/web/build-commit.txt +1 -1
- package/dist/web/build-stamp.txt +1 -1
- package/package.json +1 -1
package/dist/web/board.html
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
}
|
|
16
16
|
</script>
|
|
17
17
|
<!--BOARD_DATA-->
|
|
18
|
-
<script>window.__BUILD_STAMP__ = "20260516-
|
|
18
|
+
<script>window.__BUILD_STAMP__ = "20260516-141637-ce6d7e2";</script>
|
|
19
19
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
20
20
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
21
21
|
<link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap" rel="stylesheet">
|
|
@@ -1259,6 +1259,11 @@ input[type="range"]::-webkit-slider-thumb {
|
|
|
1259
1259
|
.card-status-age.status-age-info { color: var(--accent); background: var(--accent-subtle); }
|
|
1260
1260
|
.card-status-age.status-age-warn { color: #fb923c; background: rgba(249, 115, 22, 0.15); }
|
|
1261
1261
|
.card-status-age.status-age-stale { color: #f87171; background: rgba(239, 68, 68, 0.15); }
|
|
1262
|
+
.card-badge-wrap {
|
|
1263
|
+
/* Flex child wrapper: blockified by parent flex, but sized to content.
|
|
1264
|
+
The inner .card-badge is NOT a direct flex item, so it keeps display:inline-block. */
|
|
1265
|
+
line-height: 0;
|
|
1266
|
+
}
|
|
1262
1267
|
.card-badge {
|
|
1263
1268
|
display: inline-block;
|
|
1264
1269
|
padding: 2px 8px;
|
|
@@ -6319,7 +6324,7 @@ function PipelineView({
|
|
|
6319
6324
|
${(() => {
|
|
6320
6325
|
const cost = costsByItem && costsByItem[String(item.id)];
|
|
6321
6326
|
const label = cost ? formatCost(cost.total_cost_usd) : null;
|
|
6322
|
-
return label ? html`<span class="card-badge badge-cost" title=${'Total cost: ' + label}>${label}</span>` : null;
|
|
6327
|
+
return label ? html`<span class="card-badge-wrap"><span class="card-badge badge-cost" title=${'Total cost: ' + label}>${label}</span></span>` : null;
|
|
6323
6328
|
})()}
|
|
6324
6329
|
${(() => {
|
|
6325
6330
|
const env = item.extra && item.extra.current_env;
|
|
@@ -6736,8 +6741,7 @@ function BoardPage({ selectedProject }) {
|
|
|
6736
6741
|
// append ?board=<proj> here. Errors are swallowed: if the cost
|
|
6737
6742
|
// batch endpoint is unreachable, cards render without badges.
|
|
6738
6743
|
const fetchCosts = useCallback(() => {
|
|
6739
|
-
const
|
|
6740
|
-
const boardParam = (proj && proj !== 'all') ? '?board=' + encodeURIComponent(proj) : '';
|
|
6744
|
+
const boardParam = (selectedProject && selectedProject !== 'all') ? '?board=' + encodeURIComponent(selectedProject) : '';
|
|
6741
6745
|
fetch('/api/costs/by-items' + boardParam)
|
|
6742
6746
|
.then(r => r.ok ? r.json() : {})
|
|
6743
6747
|
.then(data => setCostsByItem(data || {}))
|
|
@@ -7531,7 +7535,7 @@ function BoardPage({ selectedProject }) {
|
|
|
7531
7535
|
${(() => {
|
|
7532
7536
|
const cost = costsByItem && costsByItem[String(item.id)];
|
|
7533
7537
|
const label = cost ? formatCost(cost.total_cost_usd) : null;
|
|
7534
|
-
return label ? html`<span class="card-badge badge-cost" title=${'Total cost: ' + label}>${label}</span>` : null;
|
|
7538
|
+
return label ? html`<span class="card-badge-wrap"><span class="card-badge badge-cost" title=${'Total cost: ' + label}>${label}</span></span>` : null;
|
|
7535
7539
|
})()}
|
|
7536
7540
|
${(() => {
|
|
7537
7541
|
const env = item.extra && item.extra.current_env;
|
|
@@ -11740,6 +11744,24 @@ function App() {
|
|
|
11740
11744
|
setSelectedProjectRaw(value);
|
|
11741
11745
|
}, []);
|
|
11742
11746
|
|
|
11747
|
+
// Auto-select the first registered project when localStorage has no prior
|
|
11748
|
+
// choice. Without this, items and costs both route to the default board
|
|
11749
|
+
// (board.db) which doesn't match project board data — no badges render in
|
|
11750
|
+
// a fresh Playwright or incognito session. Multi-project factories default
|
|
11751
|
+
// to the first registered project; users can override via the sidebar.
|
|
11752
|
+
useEffect(() => {
|
|
11753
|
+
if (localStorage.getItem('beastmode-selected-project')) return;
|
|
11754
|
+
fetch('/api/projects')
|
|
11755
|
+
.then(r => r.ok ? r.json() : null)
|
|
11756
|
+
.then(data => {
|
|
11757
|
+
const projects = data && data.projects;
|
|
11758
|
+
if (Array.isArray(projects) && projects.length > 0) {
|
|
11759
|
+
setSelectedProject(projects[0].name);
|
|
11760
|
+
}
|
|
11761
|
+
})
|
|
11762
|
+
.catch(() => {});
|
|
11763
|
+
}, []);
|
|
11764
|
+
|
|
11743
11765
|
// If ?view=pipeline or ?view=board is in the URL but no hash route is
|
|
11744
11766
|
// set, the router would default to Dashboard. Redirect to #/board so
|
|
11745
11767
|
// the board page renders (and BoardPage can read the ?view= param).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
ce6d7e276739e5c17a98d18b9389d76eacab4db0
|
package/dist/web/build-stamp.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
20260516-
|
|
1
|
+
20260516-141637-ce6d7e2
|