aidevops 3.31.34 → 3.31.36

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.34-blue.svg)](https://github.com/marcusquinn/aidevops/releases)
61
+ [![Version](https://img.shields.io/badge/Version-3.31.36-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.34
1
+ 3.31.36
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.34
8
+ # Version: 3.31.36
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.34",
3
+ "version": "3.31.36",
4
4
  "description": "AI DevOps Framework - AI-assisted development workflows, code quality, and deployment automation",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -64,7 +64,6 @@ gui_dependencies_present() {
64
64
  node_modules/vite/bin/vite.js
65
65
  node_modules/react
66
66
  node_modules/react-icons
67
- node_modules/@fontsource/cal-sans
68
67
  node_modules/@fontsource/courier-prime
69
68
  node_modules/@fontsource/dm-mono
70
69
  node_modules/@fontsource/dm-sans
@@ -127,10 +126,25 @@ write_icon_assets() {
127
126
  local iconset_dir="${resources_dir}/aidevops.iconset"
128
127
 
129
128
  cat > "$svg_path" <<'SVG'
130
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
131
- <rect width="512" height="512" rx="64" fill="#0a0a0a"/>
132
- <g transform="translate(36 36) scale(0.86)">
133
- <path fill="#B2E969" d="M73.4 150.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l160 160c12.5 12.5 12.5 32.8 0 45.3l-160 160c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L210.7 288 73.4 150.6zM240 400h192c17.7 0 32 14.3 32 32s-14.3 32-32 32H240c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/>
129
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" role="img" aria-labelledby="title desc">
130
+ <title id="title">AI DevOps prompt icon</title>
131
+ <desc id="desc">A rounded black app icon with the cyan terminal prompt mark used in the website logo.</desc>
132
+ <defs>
133
+ <linearGradient id="bg" x1="0" y1="0" x2="1" y2="1">
134
+ <stop offset="0" stop-color="#000000"/>
135
+ <stop offset="1" stop-color="#030707"/>
136
+ </linearGradient>
137
+ <radialGradient id="glow" cx="50%" cy="50%" r="62%">
138
+ <stop offset="0" stop-color="#66d9f2" stop-opacity="0.22"/>
139
+ <stop offset="1" stop-color="#66d9f2" stop-opacity="0"/>
140
+ </radialGradient>
141
+ </defs>
142
+ <rect width="1024" height="1024" fill="none"/>
143
+ <rect x="88" y="88" width="848" height="848" rx="188" fill="url(#bg)"/>
144
+ <rect x="88" y="88" width="848" height="848" rx="188" fill="url(#glow)"/>
145
+ <rect x="116" y="116" width="792" height="792" rx="160" fill="none" stroke="#66d9f2" stroke-opacity="0.36" stroke-width="18"/>
146
+ <g transform="translate(512 522) scale(0.94) translate(-288 -256)">
147
+ <path fill="#8ce8ff" d="M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/>
134
148
  </g>
135
149
  </svg>
136
150
  SVG
@@ -443,7 +457,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, WKNavigationDelegate,
443
457
  private var webView: WKWebView!
444
458
  private let apiPort = ProcessInfo.processInfo.environment["AIDEVOPS_GUI_API_PORT"] ?? "8787"
445
459
  private let webPort = ProcessInfo.processInfo.environment["AIDEVOPS_GUI_WEB_PORT"] ?? "5173"
446
- private let defaultAccentHue: CGFloat = 123
460
+ private let defaultAccentHue: CGFloat = 191
447
461
  private let mainWindowFrameAutosaveName = "aidevops-main-window"
448
462
  private let titlebarHeight: CGFloat = 24
449
463
  private let serviceQueue = DispatchQueue(label: "sh.aidevops.gui.services")
@@ -453,7 +467,6 @@ final class AppDelegate: NSObject, NSApplicationDelegate, WKNavigationDelegate,
453
467
  func applicationDidFinishLaunching(_ notification: Notification) {
454
468
  configureMenu()
455
469
  configureWindow()
456
- loadStatusHTML(title: "Starting aidevops", detail: "Preparing the local read-only GUI services…")
457
470
  startServicesAndLoadApp()
458
471
  }
459
472
 
@@ -1276,7 +1289,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, WKNavigationDelegate,
1276
1289
  if title == "Starting aidevops" {
1277
1290
  contentHTML = """
1278
1291
  <main class="shell" aria-busy="true" aria-label="Loading aidevops interface">
1279
- <section class="brand" aria-label="Starting aidevops"><strong><span>aidevops</span><b>&gt;</b><em>_</em></strong><small>Preparing local GUI</small></section>
1292
+ <section class="brand" aria-label="Starting aidevops"><strong><svg viewBox="0 0 1024 1024" aria-hidden="true"><rect x="88" y="88" width="848" height="848" rx="188" fill="#000000"/><rect x="88" y="88" width="848" height="848" rx="188" fill="#66d9f2" opacity="0.22"/><rect x="116" y="116" width="792" height="792" rx="160" fill="none" stroke="#66d9f2" stroke-opacity="0.36" stroke-width="18"/><g transform="translate(512 522) scale(0.94) translate(-288 -256)"><path fill="#8ce8ff" d="M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z"/></g></svg><span>aidevops</span><b>&gt;</b><em>_</em></strong><small>Preparing local GUI</small></section>
1280
1293
  <aside class="rail panel"><i></i><i></i><i></i><i></i><i></i><i></i></aside>
1281
1294
  <aside class="sidebar panel"><header><b></b><span></span></header><nav><i></i><i></i><i></i><i></i><i></i><i></i><i></i><i></i></nav><footer><i></i><i></i></footer></aside>
1282
1295
  <section class="workspace panel"><header><b></b><span></span><i></i><i></i></header><article><h1>\(escapedTitle)</h1><p>\(escapedDetail)</p><div class="cards"><i></i><i></i><i></i><i></i><i></i><i></i></div><div class="block"></div></article></section>
@@ -1293,16 +1306,17 @@ final class AppDelegate: NSObject, NSApplicationDelegate, WKNavigationDelegate,
1293
1306
  <meta charset="utf-8">
1294
1307
  <meta name="viewport" content="width=device-width, initial-scale=1">
1295
1308
  <style>
1296
- :root { --accent: hsl(123 74% 66%); --border: rgb(255 255 255 / 11%); --panel: #151515; --muted: rgb(255 255 255 / 70%); }
1309
+ :root { --accent: #66d9f2; --border: rgb(255 255 255 / 11%); --panel: #151515; --muted: rgb(255 255 255 / 70%); }
1297
1310
  * { box-sizing: border-box; }
1298
- body { background: radial-gradient(ellipse at top left, hsl(123 74% 66% / 16%), transparent 36%), #111; color: #fff; font: 15px -apple-system, BlinkMacSystemFont, sans-serif; height: 100vh; margin: 0; }
1311
+ body { background: radial-gradient(ellipse at top left, rgb(102 217 242 / 16%), transparent 36%), #111; color: #fff; font: 15px -apple-system, BlinkMacSystemFont, sans-serif; height: 100vh; margin: 0; }
1299
1312
  .message { background: var(--panel); border: 1px solid var(--border); border-radius: 18px; left: 50%; max-width: 560px; padding: 28px; position: fixed; top: 50%; transform: translate(-50%, -50%); }
1300
1313
  h1 { font-size: 22px; margin: 0 0 10px; }
1301
1314
  p { color: #b9c3b0; line-height: 1.5; margin: 0; }
1302
1315
  code { color: var(--accent); }
1303
1316
  .shell { display: grid; gap: 8px; grid-template-columns: 72px 302px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) 30px; height: 100vh; padding: 30px 8px 8px; }
1304
- .brand { align-items: center; backdrop-filter: blur(18px); background: rgb(10 10 10 / 78%); border: 1px solid hsl(123 74% 66% / 34%); border-radius: 24px; box-shadow: 0 24px 90px hsl(123 74% 66% / 14%), 0 24px 80px rgb(0 0 0 / 40%); display: grid; gap: 10px; justify-items: center; left: 50%; padding: 26px 30px; position: fixed; top: 50%; transform: translate(-50%, -50%); width: min(360px, calc(100vw - 48px)); z-index: 20; }
1305
- .brand strong { align-items: baseline; display: inline-flex; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: clamp(34px, 7vw, 64px); font-weight: 900; letter-spacing: -0.08em; line-height: .9; }
1317
+ .brand { align-items: center; backdrop-filter: blur(18px); background: rgb(10 10 10 / 78%); border: 1px solid rgb(102 217 242 / 34%); border-radius: 24px; box-shadow: 0 24px 90px rgb(102 217 242 / 14%), 0 24px 80px rgb(0 0 0 / 40%); display: grid; gap: 10px; justify-items: center; left: 50%; padding: 26px 30px; position: fixed; top: 50%; transform: translate(-50%, -50%); width: min(360px, calc(100vw - 48px)); z-index: 20; }
1318
+ .brand strong { align-items: center; display: inline-flex; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: clamp(34px, 7vw, 64px); font-weight: 900; gap: .18em; letter-spacing: -0.08em; line-height: .9; }
1319
+ .brand svg { display: block; height: .96em; width: .96em; }
1306
1320
  .brand span { color: #f6f7f2; font-size: .48em; letter-spacing: -0.04em; margin-right: .18em; }
1307
1321
  .brand b, .brand em { color: var(--accent); font-style: normal; }
1308
1322
  .brand em { animation: cursor 0.95s steps(1, end) infinite; }
@@ -1327,7 +1341,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate, WKNavigationDelegate,
1327
1341
  .status { align-items: center; display: flex; gap: 10px; grid-column: 1 / -1; justify-content: center; padding: 0 12px; }
1328
1342
  .status i { border-radius: 999px; height: 8px; width: 8px; }
1329
1343
  .status span { height: 10px; width: 96px; }
1330
- .rail i, .sidebar b, .sidebar span, .sidebar i, .workspace b, .workspace span, .workspace i, .cards i, .block, .status i, .status span { animation: pulse 1.35s ease-in-out infinite; background: linear-gradient(90deg, #202020, hsl(123 74% 66% / 16%), #202020); background-size: 220% 100%; border: 1px solid var(--border); border-radius: 999px; display: block; }
1344
+ .rail i, .sidebar b, .sidebar span, .sidebar i, .workspace b, .workspace span, .workspace i, .cards i, .block, .status i, .status span { animation: pulse 1.35s ease-in-out infinite; background: linear-gradient(90deg, #202020, rgb(102 217 242 / 16%), #202020); background-size: 220% 100%; border: 1px solid var(--border); border-radius: 999px; display: block; }
1331
1345
  .block, .cards i { border-radius: 18px; }
1332
1346
  @keyframes pulse { 0% { background-position: 120% 0; opacity: .52; } 50% { opacity: .95; } 100% { background-position: -120% 0; opacity: .52; } }
1333
1347
  @keyframes cursor { 0%, 48% { opacity: 1; } 49%, 100% { opacity: 0; } }
@@ -1381,6 +1395,7 @@ write_app_bundle() {
1381
1395
  version="$(app_version "$root")"
1382
1396
 
1383
1397
  mkdir -p "$macos_dir" "$resources_dir"
1398
+ rm -f "${resources_dir}/aidevops.icns" "${resources_dir}/aidevops.svg"
1384
1399
  cat > "${contents_dir}/Info.plist" <<PLIST
1385
1400
  <?xml version="1.0" encoding="UTF-8"?>
1386
1401
  <plist version="1.0">
@@ -1405,6 +1420,8 @@ PLIST
1405
1420
  write_service_helper "$root" "$resources_dir"
1406
1421
  write_webview_source "$resources_dir"
1407
1422
  compile_webview_app "$resources_dir" "$macos_dir"
1423
+ touch "${resources_dir}/aidevops.icns" "${contents_dir}/Info.plist" "$app_path"
1424
+ qlmanage -r cache >/dev/null 2>&1 || true
1408
1425
  printf 'Installed %s\n' "$app_path"
1409
1426
  return 0
1410
1427
  }
@@ -26,7 +26,8 @@
26
26
  body { background: radial-gradient(ellipse at top left, color-mix(in srgb, var(--accent) 16%, transparent) 0%, transparent 36%), var(--bg-secondary); color: var(--text-primary); font: 16px Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; margin: 0; }
27
27
  .app-shell { display: grid; gap: 8px; grid-template-columns: 72px 302px minmax(0, 1fr); grid-template-rows: minmax(0, 1fr) 30px; height: 100vh; padding: 30px 8px 8px; }
28
28
  .loading-brand-overlay { align-items: center; backdrop-filter: blur(18px); background: color-mix(in srgb, var(--surface) 78%, transparent); border: 1px solid color-mix(in srgb, var(--accent) 34%, var(--border)); border-radius: 24px; box-shadow: 0 24px 90px color-mix(in srgb, var(--accent) 14%, transparent), 0 24px 80px rgb(0 0 0 / 40%); display: grid; gap: 10px; justify-items: center; left: 50%; padding: 26px 30px; position: fixed; top: 50%; transform: translate(-50%, -50%); width: min(360px, calc(100vw - 48px)); z-index: 20; }
29
- .loading-brand-mark { align-items: baseline; display: inline-flex; font-size: clamp(2.1rem, 7vw, 4rem); font-weight: 900; letter-spacing: -0.08em; line-height: 0.9; }
29
+ .loading-brand-mark { align-items: center; display: inline-flex; font-size: clamp(2.1rem, 7vw, 4rem); font-weight: 900; gap: 0.18em; letter-spacing: -0.08em; line-height: 0.9; }
30
+ .loading-brand-icon { display: block; height: 0.96em; width: 0.96em; }
30
31
  .loading-brand-word { color: color-mix(in srgb, var(--text-primary) 86%, var(--accent)); font-size: 0.48em; letter-spacing: -0.04em; margin-right: 0.18em; }
31
32
  .loading-brand-chevron, .loading-brand-cursor { color: var(--accent); }
32
33
  .loading-brand-cursor { animation: loading-cursor-blink 0.95s steps(1, end) infinite; }
@@ -52,7 +53,7 @@
52
53
  <body>
53
54
  <div id="root">
54
55
  <main class="app-shell app-loading-shell" aria-busy="true" aria-label="Loading aidevops interface">
55
- <section class="loading-brand-overlay" aria-label="Starting aidevops"><span class="loading-brand-mark" aria-hidden="true"><span class="loading-brand-word">aidevops</span><span class="loading-brand-chevron">&gt;</span><span class="loading-brand-cursor">_</span></span><span class="loading-brand-status">Preparing local GUI</span></section>
56
+ <section class="loading-brand-overlay" aria-label="Starting aidevops"><span class="loading-brand-mark" aria-hidden="true"><svg class="loading-brand-icon" viewBox="0 0 1024 1024"><rect x="88" y="88" width="848" height="848" rx="188" fill="#000000" /><rect x="88" y="88" width="848" height="848" rx="188" fill="#66d9f2" opacity="0.22" /><rect x="116" y="116" width="792" height="792" rx="160" fill="none" stroke="#66d9f2" stroke-opacity="0.36" stroke-width="18" /><g transform="translate(512 522) scale(0.94) translate(-288 -256)"><path fill="#8ce8ff" d="M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z" /></g></svg><span class="loading-brand-word">aidevops</span><span class="loading-brand-chevron">&gt;</span><span class="loading-brand-cursor">_</span></span><span class="loading-brand-status">Preparing local GUI</span></section>
56
57
  <aside class="machine-rail loading-panel" aria-label="machine rail"><span class="loading-orb"></span><span class="loading-orb"></span><span class="loading-orb"></span><span class="loading-orb"></span><span class="loading-orb"></span><span class="loading-orb"></span></aside>
57
58
  <aside class="app-sidebar loading-panel" aria-label="sidebar">
58
59
  <div class="loading-sidebar-header"><span class="loading-logo"></span><span class="loading-line loading-line-wide"></span></div>
@@ -35,11 +35,24 @@ export const appearanceStorageKeys = {
35
35
  theme: "aidevops-gui-theme",
36
36
  } as const;
37
37
 
38
+ function AidevopsLoadingIcon(): ReactElement {
39
+ return (
40
+ <svg className="loading-brand-icon" viewBox="0 0 1024 1024" role="img" aria-label="AI DevOps prompt icon">
41
+ <rect x="88" y="88" width="848" height="848" rx="188" fill="#000000" />
42
+ <rect x="88" y="88" width="848" height="848" rx="188" fill="#66d9f2" opacity="0.22" />
43
+ <rect x="116" y="116" width="792" height="792" rx="160" fill="none" stroke="#66d9f2" strokeOpacity="0.36" strokeWidth="18" />
44
+ <g transform="translate(512 522) scale(0.94) translate(-288 -256)">
45
+ <path fill="#8ce8ff" d="M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z" />
46
+ </g>
47
+ </svg>
48
+ );
49
+ }
50
+
38
51
  const defaultSidebarWidth = 302;
39
52
  const minSidebarWidth = 300;
40
53
  const maxSidebarWidth = 520;
41
54
  export const loadingSkeletonPanelLabels = ["machine rail", "sidebar", "workspace", "status bar"] as const;
42
- export const loadingBrandGlyph = ">_";
55
+ export const loadingBrandGlyph = "AI DevOps prompt icon";
43
56
  const loadingMachineOrbKeys = ["machine-orb-a", "machine-orb-b", "machine-orb-c", "machine-orb-d", "machine-orb-e", "machine-orb-f"] as const;
44
57
  const loadingListRows = [
45
58
  { key: "loading-list-a", variant: "short" },
@@ -323,6 +336,7 @@ function LoadingBrandOverlay(): ReactElement {
323
336
  return (
324
337
  <div className="loading-brand-overlay" aria-label="Starting aidevops" role="status">
325
338
  <span className="loading-brand-mark" aria-hidden="true">
339
+ <AidevopsLoadingIcon />
326
340
  <span className="loading-brand-word">aidevops</span>
327
341
  <span className="loading-brand-chevron">&gt;</span>
328
342
  <span className="loading-brand-cursor">_</span>
@@ -39,6 +39,19 @@ import { dashboardNavItem, navGroups, sidebarModeForSurface, surfaceRecordCounts
39
39
  import { SidebarFooter, wrappedOptionIndex } from "./AppearanceControls";
40
40
  import { VaultPadlock, vaultCollectionForSurface } from "./VaultBadges";
41
41
 
42
+ function AidevopsPromptIcon() {
43
+ return (
44
+ <svg className="brand-icon" viewBox="0 0 1024 1024" role="img" aria-label="AI DevOps prompt icon">
45
+ <rect className="brand-icon-bg" x="88" y="88" width="848" height="848" rx="188" />
46
+ <rect className="brand-icon-glow" x="88" y="88" width="848" height="848" rx="188" />
47
+ <rect className="brand-icon-ring" x="116" y="116" width="792" height="792" rx="160" />
48
+ <g transform="translate(512 522) scale(0.94) translate(-288 -256)">
49
+ <path className="brand-icon-glyph" d="M9.4 86.6C-3.1 74.1-3.1 53.9 9.4 41.4s32.8-12.5 45.3 0l192 192c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L178.7 256 9.4 86.6zM256 416H544c17.7 0 32 14.3 32 32s-14.3 32-32 32H256c-17.7 0-32-14.3-32-32s14.3-32 32-32z" />
50
+ </g>
51
+ </svg>
52
+ );
53
+ }
54
+
42
55
  export { hueFromInputValue } from "./AppearanceControls";
43
56
 
44
57
  const surfaceIcons: Record<SurfaceIconName, IconType> = {
@@ -362,7 +375,7 @@ function SidebarHeader({ setActiveSurface, setShellMode, shellMode }: {
362
375
  <header className="sidebar-header">
363
376
  <div className="sidebar-titlebar">
364
377
  <button className="brand-lockup" onClick={() => { setShellMode("devices"); setActiveSurface(dashboardNavItem.id); }} title="Return to dashboard" type="button">
365
- <span className="terminal-mark" aria-hidden="true">›_</span>
378
+ <AidevopsPromptIcon />
366
379
  <strong>{text.aidevops}</strong>
367
380
  </button>
368
381
  <IconSwitch
@@ -579,6 +579,7 @@ code {
579
579
  letter-spacing: -0.05em;
580
580
  }
581
581
 
582
+ .brand-icon,
582
583
  .terminal-mark {
583
584
  align-items: center;
584
585
  background: color-mix(in srgb, var(--accent) 15%, #0a0a0a);
@@ -594,6 +595,33 @@ code {
594
595
  width: 44px;
595
596
  }
596
597
 
598
+ .brand-icon {
599
+ background: transparent;
600
+ border: 0;
601
+ display: block;
602
+ flex: 0 0 auto;
603
+ filter: drop-shadow(0 8px 18px rgb(0 0 0 / 24%));
604
+ }
605
+
606
+ .brand-icon-bg {
607
+ fill: #000000;
608
+ }
609
+
610
+ .brand-icon-glow {
611
+ fill: color-mix(in srgb, #66d9f2 22%, transparent);
612
+ }
613
+
614
+ .brand-icon-ring {
615
+ fill: none;
616
+ stroke: #66d9f2;
617
+ stroke-opacity: 0.36;
618
+ stroke-width: 18;
619
+ }
620
+
621
+ .brand-icon-glyph {
622
+ fill: #8ce8ff;
623
+ }
624
+
597
625
  .sidebar-history-controls {
598
626
  background: color-mix(in srgb, var(--surface-muted) 72%, transparent);
599
627
  border: 1px solid var(--border);
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.34
15
+ # Version: 3.31.36
16
16
  #
17
17
  # Quick Install:
18
18
  # npm install -g aidevops && aidevops update (recommended)