aidevops 3.31.30 → 3.31.32

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/README.md CHANGED
@@ -58,7 +58,7 @@ The result: an AI operations platform that manages projects across every busines
58
58
  [![Copyright](https://img.shields.io/badge/Copyright-Marcus%20Quinn%202025--2026-blue.svg)](https://github.com/marcusquinn)
59
59
 
60
60
  <!-- Release & Version Info -->
61
- [![Version](https://img.shields.io/badge/Version-3.31.30-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
61
+ [![Version](https://img.shields.io/badge/Version-3.31.32-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
62
62
  [![npm version](https://img.shields.io/npm/v/aidevops)](https://www.npmjs.com/package/aidevops)
63
63
  [![Homebrew](https://img.shields.io/badge/homebrew-marcusquinn%2Ftap-orange)](https://github.com/marcusquinn/homebrew-tap)
64
64
  [![GitHub repository](https://img.shields.io/badge/github-repository-181717.svg?logo=github)](https://github.com/marcusquinn/aidevops)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 3.31.30
1
+ 3.31.32
package/aidevops.sh CHANGED
@@ -5,7 +5,7 @@
5
5
  # AI DevOps Framework CLI
6
6
  # Usage: aidevops <command> [options]
7
7
  #
8
- # Version: 3.31.30
8
+ # Version: 3.31.32
9
9
 
10
10
  set -euo pipefail
11
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aidevops",
3
- "version": "3.31.30",
3
+ "version": "3.31.32",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -94,10 +94,19 @@ export function PulseWorkersSurface({ status }: { status: GuiStatusData }): Reac
94
94
  </div>
95
95
  <button disabled={!actionById(pulse.actions, "create_systemic_fix")?.enabled} onClick={() => void runPulseWorkerAction(actionById(pulse.actions, "create_systemic_fix"), setJobs, setSelectedJobId, setDismissedJobIds)} title="Create a worker-ready systemic-fix task from selected evidence" type="button">Create systemic fix task</button>
96
96
  </article>
97
+ </section>
97
98
 
98
- <section className="pulse-chart-grid" aria-label="Pulse trend charts">
99
+ <section className="planned-card pulse-trends-panel" aria-label="Pulse trend charts">
100
+ <div className="split-heading">
101
+ <div>
102
+ <p className="eyebrow">Operational trends</p>
103
+ <h3>Key indicators</h3>
104
+ </div>
105
+ <span className="count-pill">single-column chart stack</span>
106
+ </div>
107
+ <div className="pulse-chart-grid pulse-chart-stack">
99
108
  {chartSeries.map((chart) => <PulseChartPanel chart={chart} key={chart.id} />)}
100
- </section>
109
+ </div>
101
110
  </section>
102
111
 
103
112
  <section className="planned-card pulse-filter-panel" aria-label="Pulse filters">
@@ -227,12 +236,14 @@ function PulseChartPanel({ chart }: { chart: GuiPulseWorkerChartSeries }): React
227
236
  const svgPaths = chartSvgPaths(values);
228
237
 
229
238
  return (
230
- <article className="planned-card pulse-chart-panel">
239
+ <article className="pulse-chart-panel">
231
240
  <p className="eyebrow">Trends · compact bars · day/week/month/year</p>
232
- <h3>{chart.label}</h3>
233
- <div className="pulse-chart-meta">
234
- <span><strong>{formatChartValue(latestValue, chart.unit)}</strong><small>Latest</small></span>
235
- <span><strong>{trendSummary(trend, chart.unit)}</strong><small>Δ period</small></span>
241
+ <div className="pulse-chart-heading">
242
+ <h4>{chart.label}</h4>
243
+ <div className="pulse-chart-meta">
244
+ <span><strong>{formatChartValue(latestValue, chart.unit)}</strong><small>Latest</small></span>
245
+ <span><strong>{trendSummary(trend, chart.unit)}</strong><small>Δ period</small></span>
246
+ </div>
236
247
  </div>
237
248
  <div className="pulse-chart-placeholder" aria-label={`${chart.label} chart for day week month year buckets`} role="img">
238
249
  <svg aria-hidden="true" className="pulse-chart-sparkline" focusable="false" preserveAspectRatio="none" viewBox="0 0 100 48">
@@ -2428,7 +2428,7 @@ code {
2428
2428
  }
2429
2429
 
2430
2430
  .pulse-overview-layout {
2431
- grid-template-columns: minmax(280px, 0.8fr) minmax(320px, 1.2fr);
2431
+ grid-template-columns: minmax(0, 1fr);
2432
2432
  }
2433
2433
 
2434
2434
  .pulse-kpi-card {
@@ -2450,24 +2450,36 @@ code {
2450
2450
  line-height: 1;
2451
2451
  }
2452
2452
 
2453
+ .pulse-chart-heading {
2454
+ align-items: start;
2455
+ display: grid;
2456
+ gap: 10px;
2457
+ grid-template-columns: minmax(0, 1fr) minmax(180px, 0.7fr);
2458
+ }
2459
+
2460
+ .pulse-chart-heading h4 {
2461
+ font-size: 1rem;
2462
+ margin: 0;
2463
+ }
2464
+
2453
2465
  .pulse-chart-meta {
2454
2466
  display: grid;
2455
- gap: 8px;
2467
+ gap: 6px;
2456
2468
  grid-template-columns: repeat(2, minmax(0, 1fr));
2457
2469
  }
2458
2470
 
2459
2471
  .pulse-chart-meta span {
2460
2472
  background: color-mix(in srgb, var(--accent) 9%, var(--surface-muted));
2461
2473
  border: 1px solid var(--border);
2462
- border-radius: 14px;
2474
+ border-radius: 10px;
2463
2475
  display: grid;
2464
2476
  gap: 2px;
2465
- padding: 10px;
2477
+ padding: 8px;
2466
2478
  }
2467
2479
 
2468
2480
  .pulse-chart-meta strong {
2469
2481
  color: var(--accent);
2470
- font-size: 1.08rem;
2482
+ font-size: 0.98rem;
2471
2483
  letter-spacing: -0.04em;
2472
2484
  line-height: 1;
2473
2485
  }
@@ -2485,11 +2497,19 @@ code {
2485
2497
  .pulse-activity-panel,
2486
2498
  .pulse-drilldown-panel,
2487
2499
  .pulse-actions-panel,
2488
- .pulse-filter-panel {
2500
+ .pulse-filter-panel,
2501
+ .pulse-trends-panel {
2489
2502
  display: grid;
2490
2503
  gap: 12px;
2491
2504
  }
2492
2505
 
2506
+ .pulse-chart-panel {
2507
+ background: var(--surface-muted);
2508
+ border: 1px solid var(--border);
2509
+ border-radius: 16px;
2510
+ padding: 14px;
2511
+ }
2512
+
2493
2513
  .pulse-attention-critical,
2494
2514
  .pulse-status-blocked strong,
2495
2515
  .pulse-status-failed strong {
@@ -2512,16 +2532,15 @@ code {
2512
2532
  align-items: end;
2513
2533
  background:
2514
2534
  linear-gradient(180deg, transparent 24%, color-mix(in srgb, var(--border) 42%, transparent) 24% 25%, transparent 25% 49%, color-mix(in srgb, var(--border) 34%, transparent) 49% 50%, transparent 50% 74%, color-mix(in srgb, var(--border) 28%, transparent) 74% 75%, transparent 75%),
2515
- radial-gradient(circle at 12% 18%, color-mix(in srgb, var(--accent) 20%, transparent), transparent 34%),
2516
- var(--surface-muted);
2535
+ var(--surface-elevated);
2517
2536
  border: 1px solid var(--border);
2518
- border-radius: 16px;
2537
+ border-radius: 12px;
2519
2538
  display: grid;
2520
- gap: 8px;
2521
- grid-template-columns: repeat(auto-fit, minmax(46px, 1fr));
2522
- min-height: 180px;
2539
+ gap: 10px;
2540
+ grid-template-columns: repeat(4, minmax(0, 1fr));
2541
+ min-height: 148px;
2523
2542
  overflow: hidden;
2524
- padding: 14px;
2543
+ padding: 28px 14px 12px;
2525
2544
  position: relative;
2526
2545
  }
2527
2546
 
@@ -2536,32 +2555,20 @@ code {
2536
2555
  font-size: 0.75rem;
2537
2556
  font-weight: 900;
2538
2557
  justify-content: center;
2539
- min-height: max(40px, var(--bar-height, calc(40px + var(--bar-index, 1) * 18px)));
2558
+ min-height: max(32px, var(--bar-height, calc(40px + var(--bar-index, 1) * 18px)));
2540
2559
  padding: 8px 4px;
2541
2560
  position: relative;
2542
2561
  text-transform: uppercase;
2543
2562
  z-index: 1;
2544
2563
  }
2545
2564
 
2546
- .pulse-chart-placeholder span::before {
2547
- color: var(--text-secondary);
2548
- content: attr(data-value);
2549
- font-size: 0.68rem;
2550
- font-weight: 800;
2551
- left: 50%;
2552
- position: absolute;
2553
- top: -20px;
2554
- transform: translateX(-50%);
2555
- white-space: nowrap;
2556
- }
2557
-
2558
2565
  .pulse-chart-sparkline {
2559
- height: 48%;
2560
- inset: 16px 12px auto;
2561
- opacity: 0.88;
2566
+ height: 44%;
2567
+ inset: 16px 14px auto;
2568
+ opacity: 0.72;
2562
2569
  pointer-events: none;
2563
2570
  position: absolute;
2564
- width: calc(100% - 24px);
2571
+ width: calc(100% - 28px);
2565
2572
  z-index: 2;
2566
2573
  }
2567
2574
 
@@ -2591,6 +2598,10 @@ code {
2591
2598
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
2592
2599
  }
2593
2600
 
2601
+ .pulse-chart-stack {
2602
+ grid-template-columns: minmax(0, 1fr);
2603
+ }
2604
+
2594
2605
  .pulse-filter-group {
2595
2606
  border: 1px solid var(--border);
2596
2607
  border-radius: 14px;
@@ -4187,6 +4198,15 @@ button.managed-toggle:focus-visible {
4187
4198
  grid-template-columns: 1fr;
4188
4199
  }
4189
4200
 
4201
+ .pulse-chart-heading,
4202
+ .pulse-chart-meta {
4203
+ grid-template-columns: 1fr;
4204
+ }
4205
+
4206
+ .pulse-chart-placeholder {
4207
+ min-height: 128px;
4208
+ }
4209
+
4190
4210
  .pulse-activity-table {
4191
4211
  display: none;
4192
4212
  }
package/setup.sh CHANGED
@@ -12,7 +12,7 @@ shopt -s inherit_errexit 2>/dev/null || true
12
12
  # AI Assistant Server Access Framework Setup Script
13
13
  # Helps developers set up the framework for their infrastructure
14
14
  #
15
- # Version: 3.31.30
15
+ # Version: 3.31.32
16
16
  #
17
17
  # Quick Install:
18
18
  # npm install -g aidevops && aidevops update (recommended)