From 84b2b0670ddc92329ff3f8e9daa88887208ffd6c Mon Sep 17 00:00:00 2001 From: g1nation Date: Sat, 16 May 2026 22:51:15 +0900 Subject: [PATCH] v2.2.17: Google Service Control & Astra Office Flow Layer --- .astra-office-preview.html | 75 ++++- .astra/project-context/architecture.md | 18 +- .astra/project-context/scan-cache.json | 28 +- ...d46d2ca2057b05c488be1dcf439166ac5a9a1.json | 2 +- ...9f4f39d2bc368f77456c37b5eef9a94a66b5c.json | 2 +- ...5c7a44d7661af673b24e3f49551a7a2e50280.json | 2 +- ...adc543795e4b427b64540a49c9ab27c7fe213.json | 4 +- ...son => stress_conflict_1778938100739.json} | 22 +- PATCHNOTES.md | 12 + .../derived/office-backdrop-astra-v2.png | Bin 0 -> 529221 bytes docs/records/ConnectAI/chronicle.config.json | 2 +- media/settings-panel.html | 80 +++++ media/settings-panel.js | 68 +++++ package.json | 2 +- src/extension.ts | 1 + src/features/astraOffice/view/officeBody.ts | 1 + src/features/astraOffice/view/officeStyles.ts | 65 +++- src/features/astraOffice/view/runtime.ts | 278 +++++++++++++++++- .../settings/settingsPanelProvider.ts | 107 +++++++ 19 files changed, 700 insertions(+), 69 deletions(-) rename .astra/tests/stress/.astra/missions/{stress_conflict_1778937508187.json => stress_conflict_1778938100739.json} (80%) create mode 100644 assets/pixelOffice/derived/office-backdrop-astra-v2.png diff --git a/.astra-office-preview.html b/.astra-office-preview.html index ff22698..8ec47ad 100644 --- a/.astra-office-preview.html +++ b/.astra-office-preview.html @@ -155,7 +155,9 @@ button,input,select{font:inherit} background:rgba(255,255,255,.035); transition:border-color .16s ease,background .16s ease,transform .16s ease; } +.roster-item[data-agent]{cursor:pointer} .roster-item.active{border-color:rgba(138,124,255,.48);background:linear-gradient(180deg,rgba(138,124,255,.16),rgba(138,124,255,.08));transform:translateX(2px)} +.roster-item.preview{border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.07)} .roster-avatar{ width:33px;height:33px;border-radius:12px; display:grid;place-items:center; @@ -170,6 +172,12 @@ button,input,select{font:inherit} .roster-status{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.28)} .roster-item.active .roster-status{background:var(--role-color,var(--accent));box-shadow:0 0 12px var(--role-color,var(--accent))} .office-shell{min-width:0;display:grid;grid-template-rows:auto auto minmax(0,1fr);overflow:hidden} +.office-shell[data-roster-empty="true"] .office{filter:saturate(.72) brightness(.9)} +.office-shell[data-roster-empty="true"] .stage{opacity:.86} +.office-shell[data-status="executing"] .office{box-shadow:inset 0 0 0 1px rgba(138,124,255,.12),0 0 0 1px rgba(138,124,255,.08)} +.office-shell[data-status="reviewing"] .office{box-shadow:inset 0 0 0 1px rgba(70,216,255,.14),0 0 0 1px rgba(70,216,255,.08)} +.office-shell[data-status="waiting_approval"] .office{box-shadow:inset 0 0 0 1px rgba(245,196,90,.16),0 0 0 1px rgba(245,196,90,.08)} +.office-shell[data-status="error"] .office{box-shadow:inset 0 0 0 1px rgba(255,107,122,.18),0 0 0 1px rgba(255,107,122,.08)} .mission-strip{ min-height:72px; display:flex; @@ -209,11 +217,18 @@ button,input,select{font:inherit} radial-gradient(circle at 18% 100%,rgba(70,216,255,.12),transparent 28%), linear-gradient(135deg,#31283A,#201A29 72%); } -.office:before{content:'';position:absolute;left:0;right:0;top:16%;bottom:0;background-image:linear-gradient(rgba(255,255,255,.032) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.032) 1px,transparent 1px);background-size:48px 48px} -.office:after{content:'';position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,transparent 0 40%,rgba(0,0,0,.18) 100%);pointer-events:none} +.office.has-art{ + background: + linear-gradient(180deg,rgba(6,10,18,.06),rgba(6,10,18,.12)), + var(--office-backdrop) center center / cover no-repeat; +} +.office:before{content:'';position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.018) 1px,transparent 1px);background-size:48px 48px;opacity:.28} +.office.has-art:before{background:linear-gradient(180deg,rgba(4,7,14,.06),transparent 28%,rgba(4,7,14,.1));opacity:1} +.office:after{content:'';position:absolute;inset:0;background:radial-gradient(circle at 50% 50%,transparent 0 42%,rgba(0,0,0,.2) 100%);pointer-events:none} .stage{position:relative;width:720px;height:585px;margin:0;z-index:2} .wall-window{position:absolute;top:16px;width:86px;height:42px;border:2px solid rgba(215,228,255,.35);border-radius:8px;background:linear-gradient(180deg,rgba(160,208,255,.34),rgba(110,150,210,.08));box-shadow:inset 0 0 0 1px rgba(15,20,31,.55)} .wall-window.w1{left:84px}.wall-window.w2{left:550px} +.office.has-art .wall-window{display:none} .obj,.desk,.char{position:absolute;image-rendering:pixelated} .obj{filter:drop-shadow(3px 5px 0 rgba(0,0,0,.28));z-index:4} .desk{width:112px;z-index:5;filter:drop-shadow(4px 7px 0 rgba(0,0,0,.28))} @@ -237,6 +252,8 @@ button,input,select{font:inherit} .char[data-agent="support"],.desk[data-agent="support"],.roster-item[data-agent="support"]{--role-color:#94A3B8} .char[data-agent="writer"],.desk[data-agent="writer"],.roster-item[data-agent="writer"]{--role-color:#FBBF24} .desk::after{content:'';position:absolute;inset:-4px;border-radius:10px;border:1px solid transparent;pointer-events:none;transition:border-color .2s ease,box-shadow .2s ease} +.desk.preview::after{border-color:rgba(255,255,255,.28);box-shadow:0 0 0 1px rgba(255,255,255,.04),0 0 18px rgba(255,255,255,.16)} +.char.preview::before{content:'';position:absolute;left:18px;top:-14px;width:20px;height:20px;border-radius:50%;border:1px solid rgba(255,255,255,.42);box-shadow:0 0 18px rgba(255,255,255,.18)} .stage:has(.char.active[data-agent="ceo"]) .desk[data-agent="ceo"]::after, .stage:has(.char.active[data-agent="planner"]) .desk[data-agent="planner"]::after, .stage:has(.char.active[data-agent="researcher"]) .desk[data-agent="researcher"]::after, @@ -247,7 +264,7 @@ button,input,select{font:inherit} .stage:has(.char.active[data-agent="support"]) .desk[data-agent="support"]::after, .stage:has(.char.active[data-agent="writer"]) .desk[data-agent="writer"]::after{border-color:var(--role-color);box-shadow:0 0 0 1px rgba(255,255,255,.06),0 0 18px color-mix(in srgb,var(--role-color) 35%,transparent)} .shadow{position:absolute;left:12px;bottom:0;width:28px;height:7px;background:radial-gradient(ellipse,rgba(0,0,0,.55),transparent 70%)} -.bubble{position:absolute;z-index:20;transform:translate(-50%,-100%);max-width:180px;padding:7px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.14);background:rgba(10,14,24,.92);color:var(--text);font-size:11px;line-height:1.2;box-shadow:0 10px 24px rgba(0,0,0,.28);white-space:nowrap} +.bubble{position:absolute;z-index:20;transform:translate(-50%,-100%);max-width:180px;padding:7px 10px;border-radius:14px;border:1px solid rgba(255,255,255,.14);background:rgba(10,14,24,.92);color:var(--text);font-size:11px;line-height:1.35;box-shadow:0 10px 24px rgba(0,0,0,.28);white-space:normal} .brief-grid{display:flex;flex-direction:column;gap:10px} .brief-card{ padding:14px; @@ -453,6 +470,23 @@ body[data-edit-mode="true"] .char .shadow{display:none}