@piagent/platform 1.48.5 → 1.49.1
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/CHANGELOG.md +29 -0
- package/docs/command-reference-vietnamese.md +2 -2
- package/docs/distribution-standard.md +6 -6
- package/docs/harness-conformance.md +3 -3
- package/docs/operator-manual-vietnamese.md +7 -7
- package/docs/publishing-for-teams.md +2 -0
- package/docs/release-install-policy.md +2 -2
- package/docs/team-onboarding.md +2 -2
- package/docs-site/architecture.html +1 -1
- package/docs-site/assets/search-en.json +1 -1
- package/docs-site/assets/search-vi.json +1 -1
- package/docs-site/benchmark.html +1 -1
- package/docs-site/commands.html +1 -1
- package/docs-site/context-engine.html +1 -1
- package/docs-site/ecosystem.html +1 -1
- package/docs-site/en/architecture.html +1 -1
- package/docs-site/en/benchmark.html +1 -1
- package/docs-site/en/commands.html +1 -1
- package/docs-site/en/context-engine.html +1 -1
- package/docs-site/en/ecosystem.html +1 -1
- package/docs-site/en/index.html +15 -15
- package/docs-site/en/mcp-approval.html +1 -1
- package/docs-site/en/mcp-auth.html +1 -1
- package/docs-site/en/mcp-servers.html +1 -1
- package/docs-site/en/mcp.html +1 -1
- package/docs-site/en/permissions.html +1 -1
- package/docs-site/en/profiles.html +1 -1
- package/docs-site/en/quickstart.html +1 -1
- package/docs-site/en/runtime.html +1 -1
- package/docs-site/en/scope.html +1 -1
- package/docs-site/en/security.html +1 -1
- package/docs-site/en/team.html +1 -1
- package/docs-site/en/update.html +3 -3
- package/docs-site/en/whats-new.html +55 -30
- package/docs-site/en/windows.html +1 -1
- package/docs-site/en/workflows.html +1 -1
- package/docs-site/index.html +15 -15
- package/docs-site/mcp-approval.html +1 -1
- package/docs-site/mcp-auth.html +1 -1
- package/docs-site/mcp-servers.html +1 -1
- package/docs-site/mcp.html +1 -1
- package/docs-site/permissions.html +1 -1
- package/docs-site/profiles.html +1 -1
- package/docs-site/quickstart.html +1 -1
- package/docs-site/releases.json +77 -0
- package/docs-site/runtime.html +1 -1
- package/docs-site/scope.html +1 -1
- package/docs-site/security.html +1 -1
- package/docs-site/team.html +1 -1
- package/docs-site/update.html +3 -3
- package/docs-site/whats-new.html +55 -30
- package/docs-site/windows.html +1 -1
- package/docs-site/workflows.html +1 -1
- package/evals/private-holdout-v1/public-exposure.v2.json +2 -2
- package/package.json +1 -1
- package/packages/piagent-core/managed/check-questions.mjs +133 -0
- package/packages/piagent-core/managed/command-tools.mjs +2 -0
- package/packages/piagent-core/managed/fast-mode.mjs +19 -16
- package/packages/piagent-core/managed/helper-run.mjs +20 -3
- package/packages/piagent-core/managed/repository-checks.mjs +80 -0
- package/packages/piagent-core/managed/request-stream.mjs +2 -2
- package/packages/piagent-core/managed/session.mjs +2 -2
- package/packages/piagent-core/managed/workflow.mjs +41 -88
- package/packages/piagent-core/package.json +1 -1
- package/packages/piagent-webui/dist/client/assets/ActivityPanel-CmjxPmNT.js +1 -0
- package/packages/piagent-webui/dist/client/assets/{App-DqN7B1JR.js → App-JrRb7jgn.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/GatewayApp-BmkqeXih.js +63 -0
- package/packages/piagent-webui/dist/client/assets/{InspectionApp-BKQiA0Ce.js → InspectionApp-9jBsgkVJ.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{SessionAgentWorkspace-ZAdRbxVA.js → SessionAgentWorkspace-RQ0N65d9.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{SessionInspectorDrawer-B2e4-1FG.js → SessionInspectorDrawer-BWyEN4bf.js} +2 -2
- package/packages/piagent-webui/dist/client/assets/{SettingsNavigation-C3MC0X4P.js → SettingsNavigation-Wx-q5QQk.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{SettingsPage-D4os5vHj.js → SettingsPage-xAt6kSyZ.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{TerminalPanel-CVYUiDkn.js → TerminalPanel-DzHdSjpN.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{WorkspaceCodeEditor-E0Zopcke.js → WorkspaceCodeEditor-CEuPTTBd.js} +1 -1
- package/packages/piagent-webui/dist/client/assets/{WorkspaceExplorer-DldLoJyf.js → WorkspaceExplorer-B_NwYf4S.js} +3 -3
- package/packages/piagent-webui/dist/client/assets/{index-CjM70M7D.css → index-De7bIeMc.css} +1 -1
- package/packages/piagent-webui/dist/client/assets/{index-DcrpSyBK.js → index-fUpioGMZ.js} +2 -2
- package/packages/piagent-webui/dist/client/index.html +2 -2
- package/packages/piagent-webui/gateway/gateway-session-stream.ts +28 -0
- package/packages/piagent-webui/gateway/managed-projection.ts +8 -1
- package/packages/piagent-webui/gateway/session-catalog.ts +2 -2
- package/packages/piagent-webui/server/tool-call-summary.ts +13 -0
- package/packages/piagent-webui/server/transcript-projection.ts +13 -5
- package/packages/piagent-webui/shared/process-copy.ts +3 -2
- package/schemas/piagent-webui/gateway-protocol-v1.schema.json +2 -0
- package/schemas/piagent-webui/session-catalog-v1.schema.json +1 -1
- package/schemas/piagent-webui/transcript-v1.schema.json +18 -1
- package/scripts/company-terminal.mjs +2 -2
- package/scripts/runtime-advisory-exceptions.json +8 -0
- package/packages/piagent-webui/dist/client/assets/ActivityPanel-Bv-jc1s3.js +0 -1
- package/packages/piagent-webui/dist/client/assets/GatewayApp-B3--WjSd.js +0 -63
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TerminalView-C3upxbKw.js","assets/rolldown-runtime-hePW80VL.js","assets/vendor-DNZbaWhT.js","assets/ui-preferences-OfS30-ZV.js","assets/terminal-transport-Dk5pYNX5.js","assets/bootstrap-CedkNtRG.js","assets/TerminalView-kHJ-D0s7.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{An as t,Bt as n,Gt as r,Ht as i,Kt as a,Rn as o,Ut as s,Vt as c,Wt as l,qt as u,t as d}from"./vendor-DNZbaWhT.js";import{i as f,n as p}from"./ui-preferences-OfS30-ZV.js";import{t as m}from"./index-
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{An as t,Bt as n,Gt as r,Ht as i,Kt as a,Rn as o,Ut as s,Vt as c,Wt as l,qt as u,t as d}from"./vendor-DNZbaWhT.js";import{i as f,n as p}from"./ui-preferences-OfS30-ZV.js";import{t as m}from"./index-fUpioGMZ.js";import{t as h}from"./terminal-transport-Dk5pYNX5.js";import{t as g}from"./tab-close-BwkkhMH7.js";var _=e(o(),1);function v(e){return Array.isArray(e)?`[${e.map(v).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${v(t)}`).join(`,`)}}`:JSON.stringify(e)}async function y(e,t){let n=Date.now(),r=`terminal.command`,i={...e.identity},a={...e.revisions},o=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(v({action:r,identity:i,expectedRevisions:a,payload:t})));return{schemaVersion:1,version:`piagent-terminal-v1`,messageType:`command`,action:r,identity:i,expectedRevisions:a,payload:t,commandId:crypto.randomUUID(),idempotencyKey:crypto.randomUUID(),requestedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),actionDigest:`sha256:${[...new Uint8Array(o)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}}var b=e=>e.phase===`rejected`&&e.reasonCode===`terminal-stale-revision`,x=class{#e;#t=new Set;#n;sessionRef;#r=null;#i=null;#a=Promise.resolve();#o=0;#s=0;#c=0;#l=null;constructor(e,t=h){this.sessionRef=e,this.#n=t,this.#e={state:null,connected:t.ready,error:null,pending:null,busy:!1}}snapshot=()=>this.#e;get disposable(){return!this.#t.size&&!this.#s&&!this.#e.pending&&!this.#e.busy}#u(e){this.#e={...this.#e,...e};for(let e of this.#t)e()}subscribe=e=>(this.#t.add(e),this.#r||(this.#r=this.#n.subscribe(e=>{e.messageType===`state`&&e.identity.sessionRef===this.sessionRef&&this.#u({state:e})}),this.#i=this.#n.connection(e=>{e||this.#o++,this.#u({connected:e}),e&&this.refresh()}),this.#u({connected:this.#n.ready}),this.#n.ready&&this.refresh()),()=>{this.#t.delete(e),this.#t.size||(this.#r?.(),this.#i?.(),this.#r=null,this.#i=null)});refresh=()=>(this.#l||=this.#n.state(this.sessionRef).then(e=>this.#u({state:e}),e=>{this.#u({error:e instanceof Error?e.message:`terminal-unavailable`})}).finally(()=>{this.#l=null}),this.#l);error=e=>this.#u({error:e});acknowledge=()=>{this.#e.busy||(this.#o++,this.#u({pending:null,error:null}))};async#d(e){this.#u({pending:e});let t=await this.#n.execute(e),n=this.#e.state;return n&&n.identity.runtimeInstanceRef===t.identity.runtimeInstanceRef&&n.identity.gatewayInstanceRef===t.identity.gatewayInstanceRef&&this.#u({state:{...n,revisions:t.observedRevisions}}),t.phase!==`settled`&&!b(t)&&this.#o++,t.phase===`uncertain`?(this.#u({error:t.reasonCode??`terminal-effect-uncertain`}),t):(this.#u({pending:null,error:t.phase===`rejected`?t.reasonCode??`terminal-command-rejected`:null}),t)}execute(e){let t=e.kind===`input`?new TextEncoder().encode(e.data).length:0;if(t>16384||this.#c+t>65536||this.#s>=64)return this.error(`terminal-input-limit`),Promise.resolve();if(!this.#e.connected||this.#e.pending&&!this.#e.busy)return this.error(`terminal-command-unconfirmed`),Promise.resolve();let n=this.#o;this.#c+=t,this.#s++;let r=this.#a.then(async()=>{if(n!==this.#o||this.#e.pending||!this.#e.connected)return;let t=this.#e.state;if(t?.available){if(e.kind===`resize`){let n=t.terminals.find(t=>t.terminalRef===e.terminalRef);if(!n||n.cols===e.cols&&n.rows===e.rows)return}this.#u({busy:!0});try{if(b(await this.#d(await y(t,e)))){await this.refresh();let t=this.#e.state;t?.available&&(this.#u({error:null}),await this.#d(await y(t,e)))}}catch(e){this.#o++,this.error(e instanceof Error?e.message:`terminal-effect-uncertain`)}finally{this.#u({busy:!1})}}}).finally(()=>{this.#c-=t,this.#s--});return this.#a=r.catch(()=>{}),r}retry=async()=>{let e=this.#e.pending;if(!(!e||this.#e.busy||!this.#e.connected)){this.#u({busy:!0});try{await this.#d(e)}catch(e){this.#o++,this.error(e instanceof Error?e.message:`terminal-effect-uncertain`)}finally{this.#u({busy:!1})}}}},S=new Map;function C(e){let t=S.get(e);if(!t){if(S.size>=64){let e=[...S].find(([,e])=>e.disposable);if(!e)throw Error(`terminal-client-capacity`);S.delete(e[0])}t=new x(e),S.set(e,t)}return t}var w=t(),T=(0,_.lazy)(()=>m(()=>import(`./TerminalView-C3upxbKw.js`),__vite__mapDeps([0,1,2,3,4,5,6])));function E({sessionRef:e,onHide:t}){let{locale:o}=f(),m=(0,_.useMemo)(()=>C(e),[e]),h=(0,_.useSyncExternalStore)(m.subscribe,m.snapshot),v=h.state,[y,b]=(0,_.useState)(null),[x,S]=(0,_.useState)(280),E=(0,_.useRef)(null),D=v?.terminals.find(e=>e.terminalRef===y)?.terminalRef??v?.terminals[0]?.terminalRef??null,O=!h.connected||!v?.available||!!(h.pending&&!h.busy);return(0,w.jsxs)(l,{component:`section`,"aria-label":p(o,`Terminal`,`Terminal`),sx:{borderTop:1,borderColor:`divider`,minWidth:0},children:[(0,w.jsx)(l,{role:`separator`,tabIndex:0,"aria-label":p(o,`Chiều cao terminal`,`Terminal height`),"aria-orientation":`horizontal`,"aria-valuenow":x,"aria-valuemin":160,"aria-valuemax":700,onKeyDown:e=>{[`ArrowUp`,`ArrowDown`].includes(e.key)&&(e.preventDefault(),S(t=>Math.max(160,Math.min(700,t+(e.key===`ArrowUp`?20:-20)))))},onPointerDown:e=>{E.current={y:e.clientY,height:x},e.currentTarget.setPointerCapture(e.pointerId)},onPointerMove:e=>{E.current&&S(Math.max(160,Math.min(700,E.current.height+E.current.y-e.clientY)))},onPointerUp:()=>{E.current=null},onPointerCancel:()=>{E.current=null},sx:{height:8,cursor:`row-resize`,touchAction:`none`,bgcolor:`action.hover`}}),(0,w.jsxs)(l,{sx:{display:`flex`,alignItems:`center`,gap:1},children:[(0,w.jsx)(c,{value:D??!1,onChange:(e,t)=>b(t),variant:`scrollable`,sx:{flex:1,minWidth:0},children:v?.terminals.map(e=>(0,w.jsx)(i,{value:e.terminalRef,"aria-label":`Terminal ${e.number}${e.state===`exited`?p(o,` · đã thoát`,` · exited`):``}`,label:g(`Terminal ${e.number}${e.state===`exited`?p(o,` · đã thoát`,` · exited`):``}`,p(o,`Đóng Terminal ${e.number}`,`Close Terminal ${e.number}`),()=>{h.busy||m.execute({kind:`close`,terminalRef:e.terminalRef})})},e.terminalRef))}),(0,w.jsx)(s,{disabled:O||h.busy||(v?.terminals.length??0)>=4,"aria-label":p(o,`Mở terminal`,`Open terminal`),onClick:()=>void m.execute({kind:`open`,cols:80,rows:24}),children:`+`}),D&&(0,w.jsx)(s,{disabled:O||h.busy,onClick:()=>void m.execute({kind:`close`,terminalRef:D}),children:p(o,`Đóng terminal`,`Close terminal`)}),t&&(0,w.jsx)(a,{size:`small`,"aria-label":p(o,`Ẩn khung terminal`,`Hide terminal panel`),title:p(o,`Ẩn khung terminal (terminal vẫn chạy)`,`Hide terminal panel (terminals keep running)`),onClick:t,children:(0,w.jsx)(d,{fontSize:`small`})})]}),!h.connected&&(0,w.jsx)(r,{severity:`info`,children:p(o,`Đang nối lại terminal…`,`Reconnecting terminal…`)}),v&&!v.available&&(0,w.jsx)(r,{severity:`info`,children:v.reasonCode===`managed-terminal-seatbelt-unavailable`?p(o,`Sandbox hiện tại trên macOS không hỗ trợ terminal công ty.`,`The current macOS sandbox does not support company terminals.`):v.reasonCode===`company-terminal-disconnected`?p(o,`Mất kết nối với terminal công ty. Đang kết nối lại…`,`Company terminal disconnected. Reconnecting…`):(0,w.jsxs)(w.Fragment,{children:[p(o,`Terminal chưa khả dụng trên môi trường này.`,`Terminal is unavailable in this environment.`),` `,v.reasonCode]})}),h.error&&(0,w.jsxs)(r,{severity:`warning`,children:[p(o,`Thao tác terminal chưa hoàn tất.`,`The terminal action did not complete.`),` `,h.error,h.pending?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(n,{variant:`body2`,children:p(o,`Kiểm tra output trước khi tiếp tục. Lệnh có thể đã chạy.`,`Check the output before continuing. The command may have run.`)}),(0,w.jsx)(s,{disabled:h.busy||!h.connected,onClick:()=>void m.retry(),children:p(o,`Kiểm tra lại lệnh`,`Check command again`)}),(0,w.jsx)(s,{disabled:h.busy,onClick:m.acknowledge,children:p(o,`Đã kiểm tra, tiếp tục`,`Checked, continue`)})]}):(0,w.jsx)(s,{onClick:()=>void m.refresh(),children:p(o,`Tải lại`,`Refresh`)})]}),!v&&!h.error&&(0,w.jsx)(u,{size:24}),v?.available&&!v.terminals.length&&(0,w.jsx)(n,{sx:{p:2},children:p(o,`Nhấn + để mở terminal trong project.`,`Press + to open a terminal in the project.`)}),(0,w.jsx)(n,{variant:`caption`,sx:{px:1},children:p(o,`Gõ @terminal hoặc @terminal:2 trong tin nhắn để đính output đã che secret khi gửi.`,`Use @terminal or @terminal:2 in your message to attach redacted output when you send.`)}),(0,w.jsx)(l,{sx:{height:x,minWidth:0},children:(0,w.jsx)(_.Suspense,{fallback:(0,w.jsx)(u,{size:24}),children:v?.terminals.map(e=>(0,w.jsx)(T,{identity:v.identity,terminalRef:e.terminalRef,active:D===e.terminalRef,onReady:()=>void m.refresh(),onError:m.error,onInput:t=>{!O&&e.state===`running`&&m.execute({kind:`input`,terminalRef:e.terminalRef,data:t})},onResize:(t,n)=>{!O&&e.state===`running`&&m.execute({kind:`resize`,terminalRef:e.terminalRef,cols:t,rows:n})}},`${v.identity.runtimeInstanceRef}:${e.terminalRef}`))})})]})}export{E as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-C2TMLUTo.js","assets/rolldown-runtime-hePW80VL.js","assets/dist-D6i5SpQu.js","assets/dist-IRUjhd1P.js","assets/dist-sNhoSseW.js","assets/dist-BM_LL1o9.js","assets/dist-DfjUS8LS.js","assets/dist-CqL3udNu.js","assets/dist-D4df0jLQ.js","assets/dist-B5MCHZv5.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{An as t,Rn as n,Sn as r,Ut as i,Wt as a,fn as o}from"./vendor-DNZbaWhT.js";import{i as s,n as c,r as l}from"./ui-preferences-OfS30-ZV.js";import{t as u}from"./index-
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{An as t,Rn as n,Sn as r,Ut as i,Wt as a,fn as o}from"./vendor-DNZbaWhT.js";import{i as s,n as c,r as l}from"./ui-preferences-OfS30-ZV.js";import{t as u}from"./index-fUpioGMZ.js";import{C as d,D as f,E as p,G as m,N as h,O as g,S as _,T as v,j as y,k as b,t as x,w as S,x as C,y as w,z as T}from"./dist-D6i5SpQu.js";var E=class extends S{lines;label;comment;constructor(e,t,n){super(),this.lines=e,this.label=t,this.comment=n}toDOM(){let e=document.createElement(`div`);e.className=`cm-agent-deleted`;for(let t of this.lines){let n=document.createElement(`div`),r=document.createElement(`span`);if(r.textContent=`− ${t.text}`,n.append(r),this.comment){let e=document.createElement(`button`);e.type=`button`,e.textContent=this.label,e.setAttribute(`aria-label`,`${this.label} ${t.line}`),e.addEventListener(`click`,()=>this.comment?.(t.line,t.text,`old`)),n.append(e)}e.append(n)}return e}},D=class extends S{ref;label;keep;revertLabel;revert;constructor(e,t,n,r,i){super(),this.ref=e,this.label=t,this.keep=n,this.revertLabel=r,this.revert=i}toDOM(){let e=document.createElement(`div`);e.className=`cm-agent-actions`;let t=document.createElement(`button`);if(t.type=`button`,t.textContent=this.label,t.addEventListener(`click`,()=>this.keep(this.ref)),e.append(t),this.revert){let t=document.createElement(`button`);t.type=`button`,t.textContent=this.revertLabel,t.addEventListener(`click`,()=>this.revert?.(this.ref)),e.append(t)}return e}},O=new class extends d{toDOM(){let e=document.createElement(`span`);return e.textContent=`▎`,e.className=`cm-agent-marker`,e}};function k(e,t,n,r,i,a,o=``,s){let c=e.state.doc.toString(),l=[],u=[],d=t=>e.state.doc.line(Math.max(1,Math.min(e.state.doc.lines,t))).from;for(let e of t){let t=d(e.newStart+ +(e.newLineCount===0));u.push(t),l.push(C.widget({widget:new D(e.hunkRef,n,r,i,a),block:!0,side:-1}).range(t));let c=e.newStart+ +(e.newLineCount===0),f=[],p=()=>{f.length&&(l.push(C.widget({widget:new E(f,o,s),block:!0,side:-1}).range(d(c))),f=[])};for(let t of e.lines){if(t.kind===`deleted`){t.oldLineNumber!==null&&f.push({line:t.oldLineNumber,text:t.text});continue}p(),t.newLineNumber!==null&&(c=t.newLineNumber+1,t.kind===`added`&&l.push(C.line({class:`cm-agent-added`}).range(d(t.newLineNumber))))}p()}let f=T.define({create:()=>C.set(l,!0),update:(e,t)=>t.docChanged?C.none:e,provide:e=>_.decorations.from(e)}),p=e=>t=>{if(!u.length||t.state.doc.toString()!==c)return!1;let n=t.state.selection.main.head,r=e>0?u.find(e=>e>n)??u[0]:[...u].reverse().find(e=>e<n)??u.at(-1);return t.dispatch({selection:{anchor:r},effects:_.scrollIntoView(r,{y:`center`})}),!0};return[f,t.length?v({class:`cm-agent-gutter`,lineMarker:(e,t)=>e.state.field(f).size&&u.includes(t.from)?O:null}):[],g.of([{key:`Alt-ArrowDown`,run:p(1)},{key:`Alt-ArrowUp`,run:p(-1)}]),_.theme({".cm-agent-added":{backgroundColor:`color-mix(in srgb, #2e9d55 15%, transparent)`},".cm-agent-deleted":{margin:`0`,padding:`2px 8px`,whiteSpace:`pre-wrap`,backgroundColor:`color-mix(in srgb, #df4545 15%, transparent)`,fontFamily:`monospace`},".cm-agent-marker":{color:`#2e9d55`},".cm-agent-actions":{padding:`2px 8px`},".cm-agent-actions button":{color:`inherit`,background:`transparent`,border:`1px solid currentColor`,borderRadius:`4px`,cursor:`pointer`}})]}var A=e(n(),1),j=t();function M({syntax:e}){return x.define([{tag:[m.keyword,m.controlKeyword,m.moduleKeyword,m.definitionKeyword,m.modifier,m.self,m.null,m.bool,m.atom],color:e.keyword},{tag:[m.string,m.special(m.string),m.regexp,m.character],color:e.string},{tag:[m.number,m.integer,m.float,m.unit],color:e.number},{tag:[m.comment,m.lineComment,m.blockComment,m.docComment,m.meta],color:e.comment,fontStyle:`italic`},{tag:[m.function(m.variableName),m.function(m.propertyName),m.macroName],color:e.function},{tag:[m.typeName,m.className,m.namespace,m.tagName,m.standard(m.tagName)],color:e.type},{tag:[m.propertyName,m.attributeName,m.labelName],color:e.property},{tag:[m.operator,m.punctuation,m.bracket,m.derefOperator],color:e.operator},{tag:[m.heading,m.heading1,m.heading2,m.heading3],color:e.heading,fontWeight:`600`},{tag:[m.link,m.url],color:e.link,textDecoration:`underline`},{tag:m.emphasis,fontStyle:`italic`},{tag:m.strong,fontWeight:`600`},{tag:m.invalid,color:e.keyword,textDecoration:`underline wavy`}])}async function N(e){let t=e.split(`.`).at(-1)?.toLowerCase();switch(t){case`js`:case`mjs`:case`cjs`:case`jsx`:case`ts`:case`tsx`:return(await u(async()=>{let{javascript:e}=await import(`./dist-C2TMLUTo.js`).then(e=>e.t);return{javascript:e}},__vite__mapDeps([0,1,2,3,4]))).javascript({typescript:t===`ts`||t===`tsx`,jsx:t===`jsx`||t===`tsx`});case`json`:return(await u(async()=>{let{json:e}=await import(`./dist-BM_LL1o9.js`);return{json:e}},__vite__mapDeps([5,2,3]))).json();case`md`:return(await u(async()=>{let{markdown:e}=await import(`./dist-DfjUS8LS.js`);return{markdown:e}},__vite__mapDeps([6,2,4,7,3,8,1,0]))).markdown();case`py`:return(await u(async()=>{let{python:e}=await import(`./dist-B5MCHZv5.js`);return{python:e}},__vite__mapDeps([9,2,3,4]))).python();case`html`:return(await u(async()=>{let{html:e}=await import(`./dist-CqL3udNu.js`);return{html:e}},__vite__mapDeps([7,2,3,8,1,0,4]))).html();case`css`:return(await u(async()=>{let{css:e}=await import(`./dist-D4df0jLQ.js`).then(e=>e.r);return{css:e}},__vite__mapDeps([8,1,2,3]))).css();default:return[]}}var P=[],F=e=>{};function I({content:e,path:t,line:n=1,readOnly:u=!0,onChange:d,onSave:m,hunks:v=P,onKeep:x=F,onRevert:S,onComment:C}){let T=(0,A.useRef)(null),E=(0,A.useRef)(null),D=o(),O=(0,A.useRef)({onChange:d,onSave:m,onComment:C});O.current={onChange:d,onSave:m,onComment:C};let I=(0,A.useRef)(e);I.current=e;let L=(0,A.useRef)(new y),R=(0,A.useRef)(new y),{locale:z}=s(),B=l();return(0,A.useEffect)(()=>{if(!T.current)return;let e=document.querySelector(`meta[name="csp-nonce"]`)?.content,n=new y,i=!1,a=new _({parent:T.current,state:h.create({doc:I.current,extensions:[R.current.of([]),_.cspNonce.of(e??``),L.current.of([h.readOnly.of(u),_.editable.of(!u)]),g.of([{key:`Mod-Shift-m`,run:e=>{let t=e.state.doc.lineAt(e.state.selection.main.head);return O.current.onComment?.(t.number,t.text),!!O.current.onComment}}]),g.of([`Ctrl-s`,`Meta-s`].map(e=>({key:e,run:()=>(O.current.onSave?.(),!0)}))),_.updateListener.of(e=>{e.docChanged&&O.current.onChange?.(e.state.doc.toString())}),b(),p(),f(),w(M(B)),n.of([]),_.contentAttributes.of({"aria-label":t,tabindex:`0`}),_.theme({"&":{height:`100%`,color:D.palette.text.primary,backgroundColor:D.palette.background.paper},".cm-scroller":{overflow:`auto`,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Consolas, monospace`,fontSize:`13px`,lineHeight:1.55},".cm-content":{caretColor:D.palette.primary.main},".cm-cursor, .cm-dropCursor":{borderLeftColor:D.palette.primary.main},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, ::selection":{backgroundColor:r(D.palette.primary.main,.25)},".cm-activeLine":{backgroundColor:r(D.palette.text.primary,.04)},".cm-gutters":{backgroundColor:D.palette.background.paper,color:D.palette.text.secondary,borderRight:`1px solid ${D.palette.divider}`},".cm-activeLineGutter":{backgroundColor:r(D.palette.text.primary,.06),color:D.palette.text.primary}},{dark:D.palette.mode===`dark`})]})});return E.current=a,N(t).then(e=>{i||a.dispatch({effects:n.reconfigure(e)})}).catch(()=>{}),()=>{i=!0,E.current=null,a.destroy()}},[t,D]),(0,A.useEffect)(()=>{let t=E.current;t&&t.state.doc.toString()!==e&&t.dispatch({changes:{from:0,to:t.state.doc.length,insert:e}})},[e,t,D]),(0,A.useEffect)(()=>{let e=E.current;e&&e.dispatch({effects:R.current.reconfigure(k(e,v,c(z,`Giữ`,`Keep`),x,c(z,`Hoàn tác`,`Revert`),S,c(z,`Comment dòng đã xóa`,`Comment on removed line`),C))})},[v,x,S,C,e,t,D,z]),(0,A.useEffect)(()=>{E.current?.dispatch({effects:L.current.reconfigure([h.readOnly.of(u),_.editable.of(!u)])})},[u,t,D]),(0,A.useEffect)(()=>{let e=E.current;if(!e)return;let t=e.state.doc.line(Math.max(1,Math.min(e.state.doc.lines,n))).from;e.dispatch({selection:{anchor:t},effects:_.scrollIntoView(t,{y:`center`})})},[n,t,D]),(0,j.jsxs)(a,{sx:{height:`100%`,display:`flex`,flexDirection:`column`},children:[C&&(0,j.jsx)(i,{size:`small`,onClick:()=>{let e=E.current;if(!e)return;let t=e.state.doc.lineAt(e.state.selection.main.head);C(t.number,t.text)},children:c(z,`Comment dòng hiện tại`,`Comment on current line`)}),(0,j.jsx)(a,{ref:T,sx:{flex:1,minHeight:240,overflow:`hidden`}})]})}export{I as default};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/WorkspaceCodeEditor-
|
|
2
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{An as t,Bt as n,Et as r,G as i,Gt as a,Ht as o,K as s,Kt as c,Ln as l,Lt as u,R as d,Rn as f,Tt as p,Ut as m,Vt as h,W as g,Wt as _,Xt as v,bt as y,qt as b,t as ee}from"./vendor-DNZbaWhT.js";import{i as x,n as S}from"./ui-preferences-OfS30-ZV.js";import{t as C}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/WorkspaceCodeEditor-CEuPTTBd.js","assets/rolldown-runtime-hePW80VL.js","assets/vendor-DNZbaWhT.js","assets/ui-preferences-OfS30-ZV.js","assets/index-fUpioGMZ.js","assets/index-De7bIeMc.css","assets/dist-D6i5SpQu.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{An as t,Bt as n,Et as r,G as i,Gt as a,Ht as o,K as s,Kt as c,Ln as l,Lt as u,R as d,Rn as f,Tt as p,Ut as m,Vt as h,W as g,Wt as _,Xt as v,bt as y,qt as b,t as ee}from"./vendor-DNZbaWhT.js";import{i as x,n as S}from"./ui-preferences-OfS30-ZV.js";import{t as C}from"./index-fUpioGMZ.js";import{i as w,n as T,o as E}from"./bootstrap-CedkNtRG.js";import{G as D,lt as te}from"./api-BQS4Dtrr.js";import{l as O}from"./workspace-navigation-DW8zhH6U.js";import{r as k}from"./composer-drafts-BtMaVw8W.js";import{a as A,c as j,d as M,f as N,i as P,l as F,o as I,s as L,t as ne,u as re}from"./LineReview-CB3mQe7m.js";import{a as ie,i as ae,o as oe,t as R}from"./workspace-api-CFBR73lU.js";import{n as se,t as ce}from"./WorkspaceFilePreview-CvIBYige.js";import{t as le}from"./tab-close-BwkkhMH7.js";var z=e(f(),1),B=t();function ue(e,t,n,a=[]){let{locale:o}=x(),[s,c]=(0,z.useState)(()=>j(e)),[l,u]=(0,z.useState)();(0,z.useEffect)(()=>{c(j(e)),u(void 0);let t=t=>{t.detail===e&&c(j(e))};return window.addEventListener(I,t),()=>window.removeEventListener(I,t)},[e]),(0,z.useEffect)(()=>u(void 0),[t]);let d=t=>{c(t),M(e,t)},f={locale:o,comments:s,editing:l?L(l.path,l.side,l.line):null,open:(e,t,n,r)=>u({path:e,line:n,code:r,side:t}),cancel:()=>u(void 0),save:t=>{l&&d(re(j(e),{...l,text:t})),u(void 0)},remove:t=>d(j(e).filter(e=>L(e.path,e.side,e.line)!==t))},p=new Map(n.split(`
|
|
3
3
|
`).map((e,n)=>[L(t??``,`new`,n+1),e.slice(0,400)]));for(let e of a)for(let n of e.lines)n.oldLineNumber!==null&&p.set(L(t??``,`old`,n.oldLineNumber),n.text.slice(0,400));return{open:(e,n,r=`new`)=>{t&&u({path:t,line:e,code:n,side:r})},dialog:(0,B.jsxs)(r,{open:!!l,onClose:()=>u(void 0),fullWidth:!0,children:[(0,B.jsxs)(g,{children:[S(o,`Comment theo dòng`,`Line comment`),` · `,l?.path,`:`,l?.line]}),(0,B.jsx)(i,{children:(0,B.jsx)(A.Provider,{value:f,children:l&&(0,B.jsx)(P,{path:l.path,side:l.side,line:l.line})})})]}),bar:(0,B.jsx)(ne,{comments:s,lines:p,linesPath:t,locale:o,onClear:()=>d([]),onSend:()=>{let t=j(e);t.length&&k(e,F(t,o===`en`)),d([])}})}}var V=new Map;function de(e,t,o,c,l){let{locale:u}=x(),d=`${e}\0${t??``}`,f=`${d}\0${o}\0${c}`,p=(0,z.useRef)(f);p.current=f;let h=(0,z.useRef)(d);h.current=d;let v=(0,z.useRef)(!1),[y,b]=(0,z.useState)(!1),[ee,C]=(0,z.useState)(!1),[w,T]=(0,z.useState)(),[E,O]=(0,z.useState)(),[k,A]=(0,z.useState)(!1);(0,z.useEffect)(()=>{C(!1),T(void 0),O(void 0),A(V.has(d))},[d]);let j=async n=>{if(!(v.current||!c||!l||l.file.path!==t||l.file.currentDigest!==`sha256:${o}`)&&(C(!0),O(void 0),T(void 0),A(V.has(d)),!V.has(d))){v.current=!0,b(!0);try{let r=await D(e,l.file.fileRef,n);if(p.current!==f)return;if(r.state!==`ready`||!r.target||r.target.path!==t||r.target.fileRef!==l.file.fileRef||r.target.fileRevision!==l.file.fileRevision||!r.target.hunkRefs.some(e=>e===n))throw Error(`preview-unavailable`);T({value:r,scope:f})}catch{p.current===f&&O(S(u,`Chưa thể hoàn tác an toàn. Tải lại diff và thử lại.`,`Safe revert is unavailable. Refresh the diff and try again.`))}finally{v.current=!1,b(!1)}}},M=async()=>{if(!(v.current||!c||!V.has(d)&&(!w||w.scope!==f))){v.current=!0,b(!0),O(void 0);try{let t=V.get(d)??await N(w.value);if(p.current!==f)return;if(!V.has(d)&&V.size>=128){O(S(u,`Có quá nhiều lệnh chưa rõ kết quả. Kiểm tra lại các lệnh trước trước khi hoàn tác thêm.`,`Too many commands still need their results checked. Check earlier commands before reverting more.`));return}V.set(d,t),A(!0);let n=await te(t,void 0,e);if(n.phase!==`uncertain`&&V.delete(d),h.current===d&&A(V.has(d)),window.dispatchEvent(new CustomEvent(`piagent-workspace-changed`,{detail:{sessionRef:e}})),p.current!==f)return;A(V.has(d)),n.phase===`settled`?(C(!1),T(void 0)):(n.phase===`rejected`&&T(void 0),O(n.phase===`uncertain`?S(u,`Chưa xác định được kết quả. Kiểm tra tệp; kiểm tra lại sẽ dùng đúng lệnh cũ.`,`The result is uncertain. Inspect the file; checking again uses the same command.`):S(u,`Tệp hoặc quyền đã thay đổi. Hãy đóng và xem preview mới.`,`The file or permission changed. Close this dialog and request a new preview.`)))}catch{p.current===f&&O(S(u,`Chưa nhận được kết quả. Kiểm tra lại dùng cùng lệnh, không tạo lần hoàn tác mới.`,`No result received. Checking again reuses the same command.`))}finally{v.current=!1,b(!1)}}},P=w&&w.scope!==f;return{request:j,dialog:(0,B.jsxs)(r,{open:ee,onClose:()=>{y||C(!1)},fullWidth:!0,maxWidth:`md`,children:[(0,B.jsx)(g,{children:S(u,`Hoàn tác thay đổi của agent`,`Revert agent changes`)}),(0,B.jsxs)(i,{children:[(0,B.jsx)(n,{children:t}),(0,B.jsx)(n,{children:S(u,`Các dòng dưới đây sẽ được hoàn tác. Git index được giữ nguyên.`,`The changes below will be reverted. The Git index is preserved.`)}),E&&(0,B.jsx)(a,{severity:`warning`,children:E}),P&&(0,B.jsx)(a,{severity:`warning`,children:S(u,`Nội dung editor đã đổi. Mở lại preview trước khi hoàn tác.`,`Editor contents changed. Open a new preview before reverting.`)}),k&&!w&&(0,B.jsx)(a,{severity:`info`,children:S(u,`Có lệnh chưa xác nhận kết quả cho tệp này.`,`A command for this file still needs its result confirmed.`)}),w?.value.preview?.hunks.map(e=>(0,B.jsxs)(_,{component:`pre`,sx:{whiteSpace:`pre-wrap`,overflowWrap:`anywhere`},children:[e.header,`
|
|
4
4
|
`,e.lines.map(e=>`${e.marker}${e.text}`).join(`
|
|
5
|
-
`)]},e.hunkRef))]}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{disabled:y,onClick:()=>C(!1),children:S(u,`Đóng`,`Close`)}),(0,B.jsx)(m,{color:`error`,disabled:y||!c||!k&&(!w||!!P),onClick:()=>void M(),children:k?S(u,`Kiểm tra lại`,`Check again`):S(u,`Xác nhận hoàn tác`,`Confirm revert`)})]})]}),hasPending:k,checkPending:()=>{A(V.has(d)),C(!0)}}}async function H(e,t,n){let r=await fetch(`/api/v1/sessions/${encodeURIComponent(e)}/source-review${t?`/${encodeURIComponent(t)}`:``}`,{credentials:`same-origin`,headers:{Accept:`application/json`},signal:n});if(r.status===401&&E(),!r.ok)throw Error(`source-review-unavailable`);return r.json()}var U=(e,t)=>H(e,void 0,t),fe=(e,t,n)=>H(e,t,n);function pe(e,t,n,r,i){if(!e||!r||!n||e.file.path!==t||e.file.currentDigest!==`sha256:${n}`||e.availability.state!==`current`||e.truncation.truncated||e.redaction.applied)return[];let a=new Set(e.agentHunkRefs??[]);return e.hunks.filter(e=>a.has(e.hunkRef)&&!i.has(`${t}:${n}:${e.hunkRef}`))}var W=new Set,G=new Map,K=new Set,q=`piagent.kept-hunks.`,J=`piagent.kept-hunks`;function Y(e){try{let t=JSON.parse(localStorage.getItem(q+e)??`[]`);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`).slice(-4096)):W}catch{return W}}function me(e,t){try{let n=[...JSON.parse(localStorage.getItem(J)??`[]`).filter(t=>t!==e),e];for(let e of n.splice(0,Math.max(0,n.length-64)))localStorage.removeItem(q+e);localStorage.setItem(q+e,JSON.stringify([...t])),localStorage.setItem(J,JSON.stringify(n))}catch{}}var he=e=>(G.has(e)||G.set(e,Y(e)),G.get(e)??W);function ge(e,t,n,r){let i=new Set([...he(e),`${t}:${n}:${r}`].slice(-4096));for(G.delete(e),G.set(e,i);G.size>64;)G.delete(G.keys().next().value);me(e,i);for(let e of K)e()}function X(e){return(0,z.useSyncExternalStore)(e=>(K.add(e),()=>{K.delete(e)}),()=>he(e))}function _e(e,t,n){let[r,i]=(0,z.useState)(),a=X(e),o=JSON.stringify(t.map(e=>e.file.path).sort());(0,z.useEffect)(()=>{let t=JSON.parse(o);if(!t.length){i(void 0);return}let n=new AbortController,r=!1,a=!1,s=async()=>{if(!n.signal.aborted){if(r){a=!0;return}r=!0;try{let r=await U(e,n.signal),a=new Map;for(let i of t){if(n.signal.aborted)return;let t=r.files.find(e=>e.path===i&&e.pathDisplay===`exact-safe`);if(t)try{a.set(i,await fe(e,t.fileRef,n.signal))}catch{}}n.signal.aborted||i({session:e,diffs:a})}catch{n.signal.aborted||i(void 0)}finally{r=!1,a&&!n.signal.aborted&&(a=!1,s())}}};s();let c=window.setInterval(()=>void s(),3e3),l=t=>{t.detail?.sessionRef===e&&s()};return window.addEventListener(`piagent-workspace-saved`,l),window.addEventListener(`piagent-workspace-changed`,l),()=>{n.abort(),clearInterval(c),window.removeEventListener(`piagent-workspace-saved`,l),window.removeEventListener(`piagent-workspace-changed`,l)}},[e,o]);let s=r?.session===e?r.diffs:void 0,c=e=>pe(s?.get(e.file.path),e.file.path,e.file.digest,!e.fresh&&!e.pending&&e.draft===(e.file.content??``),a),l=t.find(e=>e.file.path===n),u=l?c(l):[];return{diff:n?s?.get(n):void 0,hunks:u,counts:new Map(t.map(e=>[e.file.path,c(e).length])),keep:t=>{l?.file.digest&&u.some(e=>e.hunkRef===t)&&ge(e,l.file.path,l.file.digest,t)}}}var Z=new Map,ve=new Set,ye={tabs:[]},Q=e=>e.fresh||e.draft!==(e.file.content??``);window.addEventListener(`beforeunload`,e=>{[...Z.values()].some(e=>e.tabs.some(Q))&&(e.preventDefault(),e.returnValue=``)});var be=e=>Z.get(e)??ye;function xe(e){let t=(0,z.useSyncExternalStore)(e=>(ve.add(e),()=>{ve.delete(e)}),()=>Z.get(e)??ye),n=t=>{Z.set(e,t(Z.get(e)??ye));for(let e of ve)e()};return{...t,update:n}}function Se(e,t,n){return e.file!==t||e.file.path!==n.path||e.pending||e.fresh||e.file.digest===n.digest&&e.file.protected===n.protected&&e.file.readOnly===n.readOnly?{tab:e}:e.draft===(e.file.content??``)?{tab:{...e,file:n,draft:n.content??``}}:{tab:e,conflict:n}}function Ce(e,t,n){let{update:r}=xe(e),i=(0,z.useRef)({update:r,conflict:n});i.current={update:r,conflict:n},(0,z.useEffect)(()=>{let n=new AbortController,r=new Map,a=!1,o=!1,s,c=async()=>{if(!(n.signal.aborted||t.current)){if(a){o=!0;return}a=!0;try{for(let a of be(e).tabs)if(!(a.fresh||a.pending||t.current))try{let o=await R(e,a.file.path,n.signal);if(n.signal.aborted||t.current)return;let s;if(i.current.update(e=>({...e,tabs:e.tabs.map(t=>{if(t.file.path!==a.file.path)return t;let n=Se(t,a.file,o);return n.conflict&&e.active===t.file.path&&(s=n.conflict),n.tab})})),s){let e=`${s.digest}:${s.protected}:${s.readOnly}`;r.get(s.path)!==e&&(r.set(s.path,e),i.current.conflict(s))}}catch{}}finally{a=!1,o&&!n.signal.aborted&&(o=!1,l())}}},l=()=>{s||=setTimeout(()=>{s=void 0,c()},100)},u=t=>{t.detail?.sessionRef===e&&l()};window.addEventListener(`piagent-workspace-changed`,u),window.addEventListener(`piagent-workspace-saved`,u);let d=setInterval(l,5e3);return l(),()=>{n.abort(),clearTimeout(s),clearInterval(d),window.removeEventListener(`piagent-workspace-changed`,u),window.removeEventListener(`piagent-workspace-saved`,u)}},[e,t])}var we=e=>`/api/v1/sessions/${encodeURIComponent(e)}/workspace/write`;function $(e){return Array.isArray(e)?`[${e.map($).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${$(t)}`).join(`,`)}}`:JSON.stringify(e)}async function Te(e,t){let n=await fetch(we(e),{credentials:`same-origin`,signal:t,headers:{Accept:`application/json`}});if(n.status===401&&E(),!n.ok)throw Error(`workspace-write-unavailable`);return await n.json()}async function Ee(e,t){let n=Date.now(),r=`workspace.write`,i=e.identity,a=e.revisions,o=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode($({action:r,identity:i,expectedRevisions:a,payload:t})));return{schemaVersion:1,version:`piagent-webui-workspace-write-v1`,messageType:`command`,action:r,identity:i,expectedRevisions:a,payload:t,commandId:crypto.randomUUID(),idempotencyKey:crypto.randomUUID(),requestedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),actionDigest:`sha256:${[...new Uint8Array(o)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}}async function De(e,t){let n=T();if(!n)throw Error(`workspace-write-unavailable`);let r=await w(we(e),{method:`POST`,credentials:`same-origin`,headers:{Accept:`application/json`,"Content-Type":`application/json`,"X-Piagent-CSRF":n},body:JSON.stringify(t)});if(r.status===401&&E(),!r.ok)throw Error(`workspace-write-unavailable`);let i=await r.json(),a=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t.idempotencyKey)),o=`sha256:${[...new Uint8Array(a)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`;if(i.schemaVersion!==1||i.version!==t.version||i.messageType!==`receipt`||i.path!==t.payload.path||i.commandId!==t.commandId||i.action!==t.action||i.actionDigest!==t.actionDigest||i.idempotencyKeyDigest!==o||$(i.identity)!==$(t.identity)||![`settled`,`rejected`,`uncertain`].includes(i.phase)||i.phase===`settled`&&(i.resultCode!==`saved`||!/^[a-f0-9]{64}$/.test(i.digest??``)))throw Error(`workspace-write-receipt-invalid`);return i}function Oe(e){let{locale:t}=x(),n=xe(e),[r,i]=(0,z.useState)(),[a,o]=(0,z.useState)(!1),s=(0,z.useRef)(!1),[c,l]=(0,z.useState)(),[u,d]=(0,z.useState)();Ce(e,s,d),(0,z.useEffect)(()=>{let t=new AbortController,n=!1,r=()=>{n||(n=!0,Te(e,t.signal).then(i).catch(()=>{t.signal.aborted||i(void 0)}).finally(()=>{n=!1}))};r();let a=window.setInterval(r,5e3);return()=>{t.abort(),clearInterval(a)}},[e]);let f=(e,t=1,r=!1)=>n.update(n=>({active:e.path,tabs:[...n.tabs.filter(t=>t.file.path!==e.path),{file:e,line:t,fresh:r,draft:e.content??``}]})),p=(e,t)=>n.update(n=>({...n,active:e,tabs:n.tabs.map(n=>n.file.path===e&&t!==void 0?{...n,line:t}:n)})),m=(e,t)=>n.update(n=>({...n,tabs:n.tabs.map(n=>n.file.path===e?{...n,draft:t}:n)})),h=r=>{let i=be(e).tabs.find(e=>e.file.path===r);i&&(Q(i)||i.pending)&&!window.confirm(S(t,`Bỏ thay đổi chưa lưu và đóng tệp?`,`Discard unsaved changes and close this file?`))||n.update(e=>({tabs:e.tabs.filter(e=>e.file.path!==r),active:e.active===r?e.tabs.find(e=>e.file.path!==r)?.file.path:e.active}))},g=async n=>{try{f(await R(e,n)),d(void 0),l(void 0)}catch{l(S(t,`Chưa tải lại được tệp. Bản sửa của bạn vẫn được giữ.`,`Could not reload the file. Your draft is preserved.`))}},_=async(r,a)=>{let c=be(e).tabs.find(e=>e.file.path===r);if(!(!c||s.current||!Q(c)&&!c.pending||c.file.protected||c.file.readOnly)&&!(a&&!window.confirm(S(t,`Ghi đè phiên bản trên đĩa bằng bản sửa của bạn?`,`Replace the version on disk with your draft?`)))){s.current=!0,o(!0),l(void 0);try{let o=await Te(e);if(i(o),!o.writable)throw Error(`read-only`);let s=a?.digest??(c.fresh?`absent`:c.file.digest);if(!s)throw Error(`unavailable`);let u=c.pending??await Ee(o,{path:r,content:c.draft,expectedDigest:s});n.update(e=>({...e,tabs:e.tabs.map(e=>e.file.path===r?{...e,pending:u}:e)}));let f=await De(e,u);if(f.phase===`uncertain`){l(S(t,`Chưa xác định được kết quả lưu. Tải lại để kiểm tra trước khi lưu tiếp.`,`The save result is uncertain. Reload to check before saving again.`));return}n.update(e=>({...e,tabs:e.tabs.map(e=>e.file.path===r?{...e,pending:void 0}:e)})),f.phase===`settled`&&f.resultCode===`saved`?(n.update(e=>({...e,tabs:e.tabs.map(e=>e.file.path===r?{...e,fresh:!1,file:{...e.file,content:u.payload.content,digest:f.digest,revision:f.observedRevisionsAfter.workspaceRevision}}:e)})),d(void 0),window.dispatchEvent(new CustomEvent(`piagent-workspace-saved`,{detail:{sessionRef:e,path:r}}))):f.resultCode===`stale-content`||f.resultCode===`stale-revision`?d(await R(e,r)):l(S(t,`Chưa lưu được tệp. Kiểm tra quyền ghi và thử lại.`,`Could not save the file. Check write access and try again.`))}catch{l(S(t,`Chưa lưu được tệp. Bản sửa vẫn được giữ; thử lưu lại hoặc tải lại để kiểm tra.`,`Could not confirm the save. Your draft is preserved; retry the save or reload to check.`))}finally{s.current=!1,o(!1)}}},v=async(r,a)=>{let c=be(e).tabs.find(e=>e.file.path===r);if(s.current||c&&(Q(c)||c.pending))return l(S(t,`Lưu hoặc bỏ thay đổi trước khi đổi tên hay xóa tệp.`,`Save or discard your changes before renaming or deleting the file.`)),!1;s.current=!0,o(!0),l(void 0);try{let o=await Te(e);i(o);let s=c?.file.digest??(await R(e,r)).digest;if(!o.writable||!s)throw Error(`unavailable`);let u=await De(e,await Ee(o,a?{path:r,content:``,expectedDigest:s,operation:`rename`,destination:a}:{path:r,content:``,expectedDigest:s,operation:`delete`}));return u.phase===`settled`&&u.resultCode===`saved`?(n.update(e=>({tabs:e.tabs.filter(e=>e.file.path!==r),active:e.active===r?void 0:e.active})),a&&f(await R(e,a)),window.dispatchEvent(new CustomEvent(`piagent-workspace-saved`,{detail:{sessionRef:e,path:r}})),!0):(l(u.phase===`uncertain`?S(t,`Chưa xác định được kết quả. Tải lại danh sách tệp để kiểm tra.`,`The result is uncertain. Reload the file list to check.`):u.resultCode===`stale-content`?S(t,`Tệp đã thay đổi trên đĩa hoặc tên mới đã có. Tải lại rồi thử lại.`,`The file changed on disk or the new name exists. Reload and try again.`):S(t,`Không thực hiện được. Kiểm tra quyền ghi và tên tệp.`,`This could not be done. Check write access and the file name.`)),!1)}catch{return l(S(t,`Chưa xác nhận được thao tác. Tải lại danh sách tệp để kiểm tra.`,`Could not confirm the action. Reload the file list to check.`)),!1}finally{s.current=!1,o(!1)}};return{...n,authority:r,saving:a,message:c,conflict:u,setConflict:d,load:f,select:p,change:m,close:h,reload:g,save:_,move:v}}var ke=e(l(),1);function Ae({sessionRef:e,onOpen:t}){let{locale:r}=x(),[i,o]=(0,z.useState)(``),[s,c]=(0,z.useState)(),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)(!1);return(0,z.useEffect)(()=>{let t=new AbortController;if(c(void 0),f(!1),u(!1),!i.trim())return()=>t.abort();u(!0);let n=setTimeout(()=>{oe(e,i,t.signal).then(e=>{t.signal.aborted||c(e)}).catch(()=>{t.signal.aborted||f(!0)}).finally(()=>{t.signal.aborted||u(!1)})},250);return()=>{clearTimeout(n),t.abort()}},[i,e]),(0,B.jsxs)(p,{spacing:1,sx:{p:1},children:[(0,B.jsx)(y,{size:`small`,label:S(r,`Tìm nội dung`,`Search contents`),value:i,onChange:e=>o(e.target.value),slotProps:{htmlInput:{maxLength:512}}}),l&&(0,B.jsx)(b,{size:18}),(d||s?.available===!1)&&(0,B.jsx)(a,{severity:`warning`,children:S(r,`Chưa tìm được nội dung trong project này.`,`Content search is unavailable for this project.`)}),s?.available&&s.backend===`fts`&&(0,B.jsx)(n,{variant:`caption`,children:S(r,`Tìm trong các tệp đã lập chỉ mục.`,`Searching indexed files.`)}),s?.matches.map(e=>(0,B.jsxs)(m,{onClick:()=>t(e.path,e.line),sx:{textTransform:`none`,display:`block`,textAlign:`left`,overflowWrap:`anywhere`},children:[(0,B.jsxs)(n,{variant:`caption`,component:`span`,children:[e.path,`:`,e.line,`:`,e.column]}),(0,B.jsx)(n,{variant:`body2`,component:`span`,sx:{display:`block`},children:e.preview})]},`${e.path}:${e.line}:${e.column}`)),s?.truncated&&(0,B.jsx)(n,{variant:`caption`,children:S(r,`Đã giới hạn kết quả. Hãy tìm cụ thể hơn.`,`Results were limited. Refine your search.`)}),s?.available&&!s.matches.length&&!s.truncated&&(0,B.jsx)(n,{variant:`caption`,children:S(r,`Không tìm thấy.`,`No matches.`)})]})}var je=v((0,B.jsx)(`path`,{d:`M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z`}),`ChevronRight`),Me=v((0,B.jsx)(`path`,{d:`M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z`}),`ExpandMore`),Ne=v((0,B.jsx)(`path`,{d:`M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zM6 20V4h7v5h5v11z`}),`InsertDriveFileOutlined`),Pe=e=>e.split(`/`).slice(0,-1).map((e,t,n)=>n.slice(0,t+1).join(`/`));function Fe({sessionRef:e,refresh:t,active:r,onOpen:i,onFolder:a}){let{locale:o}=x(),[s,c]=(0,z.useState)(()=>new Set([``])),[l,f]=(0,z.useState)(()=>new Map),[p,h]=(0,z.useState)(),g=(t,n)=>{f(e=>new Map(e).set(t,e.get(t)??`loading`)),ae(e,t,n).then(e=>{n?.aborted||f(n=>new Map(n).set(t,e))}).catch(()=>{n?.aborted||f(e=>new Map(e).set(t,`error`))})};(0,z.useEffect)(()=>{f(new Map),c(new Set([``]))},[e]),(0,z.useEffect)(()=>{let e=new AbortController;for(let t of s)g(t,e.signal);return()=>e.abort()},[e,t]),(0,z.useEffect)(()=>{if(!r)return;let e=Pe(r).filter(e=>!s.has(e));if(e.length){c(t=>new Set([...t,...e]));for(let t of e)l.has(t)||g(t)}},[r]);let v=e=>{if(h(e),a(e),s.has(e)){c(t=>{let n=new Set(t);return n.delete(e),n});return}c(t=>new Set(t).add(e)),(!l.has(e)||l.get(e)===`error`)&&g(e)},y=(e,t)=>{let a=l.get(e);return!a||a===`loading`?(0,B.jsx)(b,{size:14,sx:{ml:1.5+t*1.5,my:.5}}):a===`error`?(0,B.jsx)(n,{variant:`caption`,color:`warning.main`,sx:{pl:1.5+t*1.5},children:S(o,`Chưa đọc được thư mục này.`,`This folder could not be read.`)}):(0,B.jsxs)(B.Fragment,{children:[a.entries.map(e=>{let n=e.kind===`directory`,a=n&&s.has(e.path),c=n?p===e.path:r===e.path,l=n?(0,B.jsxs)(B.Fragment,{children:[a?(0,B.jsx)(Me,{sx:{fontSize:16}}):(0,B.jsx)(je,{sx:{fontSize:16}}),a?(0,B.jsx)(d,{sx:{fontSize:16}}):(0,B.jsx)(u,{sx:{fontSize:16}})]}):(0,B.jsx)(Ne,{sx:{fontSize:16,ml:`16px`}});return(0,B.jsxs)(_,{children:[(0,B.jsxs)(m,{fullWidth:!0,size:`small`,disabled:e.protected||e.kind===`symlink`||e.kind===`other`,"aria-label":e.protected?`${e.name} (${S(o,`được bảo vệ`,`protected`)})`:e.name,"aria-expanded":n?a:void 0,"aria-current":!n&&r===e.path?`true`:void 0,onClick:()=>n?v(e.path):(h(void 0),i(e.path)),sx:{justifyContent:`flex-start`,textTransform:`none`,gap:.5,minHeight:24,py:0,pl:.5+t*1.5,pr:1,color:`text.primary`,fontWeight:400,whiteSpace:`nowrap`,bgcolor:c?`action.selected`:void 0},children:[l,(0,B.jsxs)(_,{component:`span`,sx:{overflow:`hidden`,textOverflow:`ellipsis`},children:[e.name,e.protected?` 🔒`:``]})]}),a&&y(e.path,t+1)]},e.path)}),a.truncated&&(0,B.jsx)(n,{variant:`caption`,sx:{pl:1.5+t*1.5},children:S(o,`Danh sách đã được giới hạn.`,`Listing limit reached.`)})]})};return(0,B.jsx)(_,{role:`group`,"aria-label":S(o,`Cây thư mục`,`Folder tree`),sx:{py:.5},children:y(``,0)})}var Ie=(0,z.lazy)(()=>C(()=>import(`./WorkspaceCodeEditor-E0Zopcke.js`),__vite__mapDeps([0,1,2,3,4,5,6])));function Le({sessionRef:e,target:t,navigationHost:l,sidebarMode:u,onHide:d,fill:f}){let{locale:v}=x(),[C,w]=(0,z.useState)(`files`),[T,E]=(0,z.useState)(!1),[D,te]=(0,z.useState)(``),[k,A]=(0,z.useState)(!1),[j,M]=(0,z.useState)(),[N,P]=(0,z.useState)(``),F=Oe(e),{tabs:I,active:L}=F,[ne,re]=(0,z.useState)(``),[ae,oe]=(0,z.useState)(!1),[V,H]=(0,z.useState)(!1),U=(0,z.useRef)(null),[fe,pe]=(0,z.useState)(0);(0,z.useEffect)(()=>{let t=t=>{t.detail?.sessionRef===e&&pe(e=>e+1)};return window.addEventListener(`piagent-workspace-saved`,t),()=>window.removeEventListener(`piagent-workspace-saved`,t)},[e]),(0,z.useEffect)(()=>()=>U.current?.abort(),[]);let W=async(t,n=1)=>{if(U.current?.abort(),H(!1),I.find(e=>e.file.path===t)){F.select(t,n);return}U.current?.abort();let r=new AbortController;U.current=r,H(!0),oe(!1);try{let i=await R(e,t,r.signal);if(r.signal.aborted)return;if(i.protected){oe(!0);return}F.load(i,n)}catch{r.signal.aborted||oe(!0)}finally{r.signal.aborted||H(!1)}};(0,z.useEffect)(()=>{t&&W(t.path,t.line??1)},[t]),(0,z.useEffect)(()=>{u&&u!==`sessions`&&w(u)},[u]);let G=I.find(e=>e.file.path===L),K=G?.file,q=_e(e,I,L),J=de(e,K?.path,K?.digest??null,!!G&&!Q(G),q.diff),Y=ue(e,K?.path,G?.draft??``,q.hunks),[me,he]=(0,z.useState)(new Set),ge=!!K&&!K.binary&&!K.oversized&&se(K.path)===`image`&&!me.has(K.path),X=I.find(e=>e.file.path===F.conflict?.path),Z=(0,B.jsxs)(_,{component:`nav`,"aria-label":S(v,`Tệp dự án`,`Project files`),sx:{width:l?`100%`:{xs:136,sm:200},flexShrink:0,overflow:`auto`,borderRight:1,borderColor:`divider`},children:[!l&&(0,B.jsxs)(h,{value:C,onChange:(e,t)=>w(t),"aria-label":S(v,`Khám phá project`,`Explore project`),children:[(0,B.jsx)(o,{value:`files`,label:S(v,`Tệp`,`Files`)}),(0,B.jsx)(o,{value:`search`,label:S(v,`Tìm kiếm`,`Search`)})]}),C===`search`?(0,B.jsx)(Ae,{sessionRef:e,onOpen:(e,t)=>void W(e,t)}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(m,{disabled:!F.authority?.writable,onClick:()=>{te(ne?`${ne}/`:``),E(!0)},children:S(v,`Tệp mới`,`New file`)}),(0,B.jsx)(Fe,{sessionRef:e,refresh:fe,active:L,onOpen:e=>{re(e.split(`/`).slice(0,-1).join(`/`)),W(e)},onFolder:re})]})]});return(0,B.jsxs)(B.Fragment,{children:[J.dialog,Y.dialog,(0,B.jsxs)(p,{direction:`row`,sx:{height:f?`100%`:`calc(100vh - 150px)`,minHeight:f?160:320},children:[l?(0,ke.createPortal)(Z,l):Z,(0,B.jsxs)(_,{sx:{minWidth:0,flex:1,display:`flex`,flexDirection:`column`},children:[ae&&(0,B.jsx)(a,{severity:`warning`,children:S(v,`Chưa đọc được tệp hoặc thư mục này.`,`This file or folder could not be read.`)}),Y.bar,F.message&&(0,B.jsx)(a,{severity:`warning`,children:F.message}),F.authority?.agentRunning&&(0,B.jsx)(a,{severity:`info`,children:S(v,`Agent đang chạy và có thể sửa tệp này.`,`The agent is running and may change this file.`)}),(0,B.jsxs)(p,{direction:`row`,sx:{alignItems:`center`,borderBottom:1,borderColor:`divider`,minHeight:36},children:[(0,B.jsx)(h,{value:L??!1,onChange:(e,t)=>F.select(t),variant:`scrollable`,scrollButtons:`auto`,"aria-label":S(v,`Các tệp đang mở`,`Open files`),sx:{flex:1,minWidth:0,minHeight:36},children:I.map(e=>(0,B.jsx)(o,{value:e.file.path,sx:{minHeight:36,py:0},"aria-label":`${e.file.path}${Q(e)?` ●`:``}${q.counts.get(e.file.path)?` (${q.counts.get(e.file.path)})`:``}`,label:le(`${e.file.path}${Q(e)?` ●`:``}${q.counts.get(e.file.path)?` (${q.counts.get(e.file.path)})`:``}`,S(v,`Đóng ${e.file.path}`,`Close ${e.file.path}`),()=>F.close(e.file.path))},e.file.path))}),d&&(0,B.jsx)(c,{size:`small`,"aria-label":S(v,`Ẩn khung tệp`,`Hide files panel`),title:S(v,`Ẩn khung tệp (tệp đang mở vẫn giữ)`,`Hide files panel (open files are kept)`),onClick:d,children:(0,B.jsx)(ee,{fontSize:`small`})})]}),V&&(0,B.jsx)(b,{size:20}),K&&(0,B.jsxs)(p,{direction:`row`,sx:{flexShrink:0,overflowX:`auto`,"& .MuiButton-root":{whiteSpace:`nowrap`,flexShrink:0}},children:[!K.binary&&!K.oversized&&se(K.path)===`image`&&(0,B.jsx)(m,{size:`small`,onClick:()=>he(e=>{let t=new Set(e);return t.has(K.path)?t.delete(K.path):t.add(K.path),t}),children:ge?S(v,`Xem mã`,`View code`):S(v,`Xem hình`,`View picture`)}),(0,B.jsx)(m,{size:`small`,onClick:()=>void ie(e,K.path),children:S(v,`Tải về`,`Download`)}),J.hasPending&&(0,B.jsx)(m,{onClick:J.checkPending,children:S(v,`Kiểm tra hoàn tác`,`Check revert`)}),(0,B.jsx)(m,{size:`small`,disabled:!F.authority?.writable||K.readOnly||!G||!Q(G)&&!G.pending||F.saving,onClick:()=>void F.save(K.path),children:S(v,`Lưu`,`Save`)}),(0,B.jsx)(m,{size:`small`,onClick:()=>F.close(K.path),children:S(v,`Đóng tệp`,`Close file`)}),(0,B.jsx)(m,{size:`small`,disabled:!F.authority?.writable||K.readOnly||!K.digest||F.saving,onClick:()=>{P(K.path),M(K.path)},children:S(v,`Đổi tên`,`Rename`)}),(0,B.jsx)(m,{size:`small`,color:`error`,disabled:!F.authority?.writable||K.readOnly||!K.digest||F.saving,onClick:()=>{window.confirm(S(v,`Xóa ${K.path}? Có thể khôi phục bằng Git nếu tệp đã commit.`,`Delete ${K.path}? Git can restore it if it was committed.`))&&F.move(K.path)},children:S(v,`Xóa`,`Delete`)}),(0,B.jsx)(m,{size:`small`,onClick:()=>{(!G||!Q(G)||window.confirm(S(v,`Bỏ thay đổi chưa lưu và tải lại?`,`Discard unsaved changes and reload?`)))&&F.reload(K.path)},children:S(v,`Tải lại`,`Reload`)})]}),K?.binary||K?.oversized||ge?(0,B.jsx)(ce,{sessionRef:e,path:K.path}):K?.content!==null&&K?.content!==void 0?(0,B.jsx)(_,{sx:{flex:1,minHeight:0},children:(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(b,{size:20}),children:(0,B.jsx)(Ie,{onComment:Y.open,hunks:q.hunks,onKeep:q.keep,onRevert:F.authority?.writable?e=>void J.request(e):void 0,content:G?.draft??K.content,path:K.path,line:G?.line??1,readOnly:!F.authority?.writable||K.readOnly,onChange:e=>F.change(K.path,e),onSave:()=>void F.save(K.path)})})}):(0,B.jsx)(n,{sx:{p:2},children:S(v,`Chọn một tệp để mở.`,`Select a file to open.`)})]})]}),(0,B.jsxs)(r,{open:T,onClose:()=>E(!1),fullWidth:!0,children:[(0,B.jsx)(g,{children:S(v,`Tạo tệp mới`,`Create a new file`)}),(0,B.jsx)(i,{children:(0,B.jsx)(y,{autoFocus:!0,fullWidth:!0,label:S(v,`Đường dẫn trong project`,`Path in project`),value:D,onChange:e=>te(e.target.value)})}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{onClick:()=>E(!1),children:S(v,`Hủy`,`Cancel`)}),(0,B.jsx)(m,{disabled:!O(D)||!F.authority?.writable,onClick:()=>{let e=O(D);!e||!F.authority||(I.some(t=>t.file.path===e.path)?F.select(e.path):F.load({schemaVersion:1,version:`piagent-webui-workspace-file-v1`,generatedAt:new Date().toISOString(),identity:F.authority.identity,path:e.path,language:`text`,protected:!1,readOnly:!1,binary:!1,oversized:!1,content:``,digest:null,revision:null},1,!0),E(!1))},children:S(v,`Tạo`,`Create`)})]})]}),(0,B.jsxs)(r,{open:!!j,onClose:()=>M(void 0),fullWidth:!0,children:[(0,B.jsx)(g,{children:S(v,`Đổi tên tệp`,`Rename file`)}),(0,B.jsx)(i,{children:(0,B.jsx)(y,{autoFocus:!0,fullWidth:!0,label:S(v,`Đường dẫn mới trong project`,`New path in project`),value:N,onChange:e=>P(e.target.value)})}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{onClick:()=>M(void 0),children:S(v,`Hủy`,`Cancel`)}),(0,B.jsx)(m,{disabled:!O(N)||O(N)?.path===j||F.saving,onClick:()=>{let e=O(N);!e||!j||F.move(j,e.path).then(e=>{e&&M(void 0)})},children:S(v,`Đổi tên`,`Rename`)})]})]}),(0,B.jsxs)(r,{open:!!F.conflict,onClose:()=>{F.setConflict(void 0),A(!1)},fullWidth:!0,maxWidth:k?`lg`:`sm`,children:[(0,B.jsx)(g,{children:S(v,`Tệp đã thay đổi trên đĩa`,`The file changed on disk`)}),(0,B.jsxs)(i,{children:[(0,B.jsx)(n,{children:F.conflict?.path}),(0,B.jsx)(n,{children:S(v,`Bản sửa của bạn vẫn được giữ. Chọn cách xử lý xung đột.`,`Your draft is preserved. Choose how to resolve the conflict.`)}),k&&F.conflict&&X&&(0,B.jsxs)(p,{direction:`row`,spacing:1,children:[(0,B.jsxs)(_,{sx:{width:`50%`,height:360},children:[(0,B.jsx)(n,{children:S(v,`Trên đĩa`,`On disk`)}),(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(b,{size:20}),children:(0,B.jsx)(Ie,{path:F.conflict.path,content:F.conflict.content??``})})]}),(0,B.jsxs)(_,{sx:{width:`50%`,height:360},children:[(0,B.jsx)(n,{children:S(v,`Bản sửa của bạn`,`Your draft`)}),(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(b,{size:20}),children:(0,B.jsx)(Ie,{path:X.file.path,content:X.draft})})]})]})]}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{onClick:()=>{F.setConflict(void 0),A(!1)},children:S(v,`Để sau`,`Later`)}),(0,B.jsx)(m,{onClick:()=>{F.conflict&&(F.load(F.conflict),F.setConflict(void 0),A(!1))},children:S(v,`Tải lại`,`Reload`)}),(0,B.jsx)(m,{onClick:()=>A(!0),children:S(v,`Xem khác biệt`,`Compare`)}),(0,B.jsx)(m,{disabled:F.saving||!F.conflict?.digest||F.conflict.protected||F.conflict.readOnly,onClick:()=>{F.conflict&&F.save(F.conflict.path,F.conflict)},children:S(v,`Ghi đè`,`Overwrite`)})]})]})]})}export{Le as default};
|
|
5
|
+
`)]},e.hunkRef))]}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{disabled:y,onClick:()=>C(!1),children:S(u,`Đóng`,`Close`)}),(0,B.jsx)(m,{color:`error`,disabled:y||!c||!k&&(!w||!!P),onClick:()=>void M(),children:k?S(u,`Kiểm tra lại`,`Check again`):S(u,`Xác nhận hoàn tác`,`Confirm revert`)})]})]}),hasPending:k,checkPending:()=>{A(V.has(d)),C(!0)}}}async function H(e,t,n){let r=await fetch(`/api/v1/sessions/${encodeURIComponent(e)}/source-review${t?`/${encodeURIComponent(t)}`:``}`,{credentials:`same-origin`,headers:{Accept:`application/json`},signal:n});if(r.status===401&&E(),!r.ok)throw Error(`source-review-unavailable`);return r.json()}var U=(e,t)=>H(e,void 0,t),fe=(e,t,n)=>H(e,t,n);function pe(e,t,n,r,i){if(!e||!r||!n||e.file.path!==t||e.file.currentDigest!==`sha256:${n}`||e.availability.state!==`current`||e.truncation.truncated||e.redaction.applied)return[];let a=new Set(e.agentHunkRefs??[]);return e.hunks.filter(e=>a.has(e.hunkRef)&&!i.has(`${t}:${n}:${e.hunkRef}`))}var W=new Set,G=new Map,K=new Set,q=`piagent.kept-hunks.`,J=`piagent.kept-hunks`;function Y(e){try{let t=JSON.parse(localStorage.getItem(q+e)??`[]`);return Array.isArray(t)?new Set(t.filter(e=>typeof e==`string`).slice(-4096)):W}catch{return W}}function me(e,t){try{let n=[...JSON.parse(localStorage.getItem(J)??`[]`).filter(t=>t!==e),e];for(let e of n.splice(0,Math.max(0,n.length-64)))localStorage.removeItem(q+e);localStorage.setItem(q+e,JSON.stringify([...t])),localStorage.setItem(J,JSON.stringify(n))}catch{}}var he=e=>(G.has(e)||G.set(e,Y(e)),G.get(e)??W);function ge(e,t,n,r){let i=new Set([...he(e),`${t}:${n}:${r}`].slice(-4096));for(G.delete(e),G.set(e,i);G.size>64;)G.delete(G.keys().next().value);me(e,i);for(let e of K)e()}function X(e){return(0,z.useSyncExternalStore)(e=>(K.add(e),()=>{K.delete(e)}),()=>he(e))}function _e(e,t,n){let[r,i]=(0,z.useState)(),a=X(e),o=JSON.stringify(t.map(e=>e.file.path).sort());(0,z.useEffect)(()=>{let t=JSON.parse(o);if(!t.length){i(void 0);return}let n=new AbortController,r=!1,a=!1,s=async()=>{if(!n.signal.aborted){if(r){a=!0;return}r=!0;try{let r=await U(e,n.signal),a=new Map;for(let i of t){if(n.signal.aborted)return;let t=r.files.find(e=>e.path===i&&e.pathDisplay===`exact-safe`);if(t)try{a.set(i,await fe(e,t.fileRef,n.signal))}catch{}}n.signal.aborted||i({session:e,diffs:a})}catch{n.signal.aborted||i(void 0)}finally{r=!1,a&&!n.signal.aborted&&(a=!1,s())}}};s();let c=window.setInterval(()=>void s(),3e3),l=t=>{t.detail?.sessionRef===e&&s()};return window.addEventListener(`piagent-workspace-saved`,l),window.addEventListener(`piagent-workspace-changed`,l),()=>{n.abort(),clearInterval(c),window.removeEventListener(`piagent-workspace-saved`,l),window.removeEventListener(`piagent-workspace-changed`,l)}},[e,o]);let s=r?.session===e?r.diffs:void 0,c=e=>pe(s?.get(e.file.path),e.file.path,e.file.digest,!e.fresh&&!e.pending&&e.draft===(e.file.content??``),a),l=t.find(e=>e.file.path===n),u=l?c(l):[];return{diff:n?s?.get(n):void 0,hunks:u,counts:new Map(t.map(e=>[e.file.path,c(e).length])),keep:t=>{l?.file.digest&&u.some(e=>e.hunkRef===t)&&ge(e,l.file.path,l.file.digest,t)}}}var Z=new Map,ve=new Set,ye={tabs:[]},Q=e=>e.fresh||e.draft!==(e.file.content??``);window.addEventListener(`beforeunload`,e=>{[...Z.values()].some(e=>e.tabs.some(Q))&&(e.preventDefault(),e.returnValue=``)});var be=e=>Z.get(e)??ye;function xe(e){let t=(0,z.useSyncExternalStore)(e=>(ve.add(e),()=>{ve.delete(e)}),()=>Z.get(e)??ye),n=t=>{Z.set(e,t(Z.get(e)??ye));for(let e of ve)e()};return{...t,update:n}}function Se(e,t,n){return e.file!==t||e.file.path!==n.path||e.pending||e.fresh||e.file.digest===n.digest&&e.file.protected===n.protected&&e.file.readOnly===n.readOnly?{tab:e}:e.draft===(e.file.content??``)?{tab:{...e,file:n,draft:n.content??``}}:{tab:e,conflict:n}}function Ce(e,t,n){let{update:r}=xe(e),i=(0,z.useRef)({update:r,conflict:n});i.current={update:r,conflict:n},(0,z.useEffect)(()=>{let n=new AbortController,r=new Map,a=!1,o=!1,s,c=async()=>{if(!(n.signal.aborted||t.current)){if(a){o=!0;return}a=!0;try{for(let a of be(e).tabs)if(!(a.fresh||a.pending||t.current))try{let o=await R(e,a.file.path,n.signal);if(n.signal.aborted||t.current)return;let s;if(i.current.update(e=>({...e,tabs:e.tabs.map(t=>{if(t.file.path!==a.file.path)return t;let n=Se(t,a.file,o);return n.conflict&&e.active===t.file.path&&(s=n.conflict),n.tab})})),s){let e=`${s.digest}:${s.protected}:${s.readOnly}`;r.get(s.path)!==e&&(r.set(s.path,e),i.current.conflict(s))}}catch{}}finally{a=!1,o&&!n.signal.aborted&&(o=!1,l())}}},l=()=>{s||=setTimeout(()=>{s=void 0,c()},100)},u=t=>{t.detail?.sessionRef===e&&l()};window.addEventListener(`piagent-workspace-changed`,u),window.addEventListener(`piagent-workspace-saved`,u);let d=setInterval(l,5e3);return l(),()=>{n.abort(),clearTimeout(s),clearInterval(d),window.removeEventListener(`piagent-workspace-changed`,u),window.removeEventListener(`piagent-workspace-saved`,u)}},[e,t])}var we=e=>`/api/v1/sessions/${encodeURIComponent(e)}/workspace/write`;function $(e){return Array.isArray(e)?`[${e.map($).join(`,`)}]`:e&&typeof e==`object`?`{${Object.entries(e).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>`${JSON.stringify(e)}:${$(t)}`).join(`,`)}}`:JSON.stringify(e)}async function Te(e,t){let n=await fetch(we(e),{credentials:`same-origin`,signal:t,headers:{Accept:`application/json`}});if(n.status===401&&E(),!n.ok)throw Error(`workspace-write-unavailable`);return await n.json()}async function Ee(e,t){let n=Date.now(),r=`workspace.write`,i=e.identity,a=e.revisions,o=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode($({action:r,identity:i,expectedRevisions:a,payload:t})));return{schemaVersion:1,version:`piagent-webui-workspace-write-v1`,messageType:`command`,action:r,identity:i,expectedRevisions:a,payload:t,commandId:crypto.randomUUID(),idempotencyKey:crypto.randomUUID(),requestedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),actionDigest:`sha256:${[...new Uint8Array(o)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`}}async function De(e,t){let n=T();if(!n)throw Error(`workspace-write-unavailable`);let r=await w(we(e),{method:`POST`,credentials:`same-origin`,headers:{Accept:`application/json`,"Content-Type":`application/json`,"X-Piagent-CSRF":n},body:JSON.stringify(t)});if(r.status===401&&E(),!r.ok)throw Error(`workspace-write-unavailable`);let i=await r.json(),a=await crypto.subtle.digest(`SHA-256`,new TextEncoder().encode(t.idempotencyKey)),o=`sha256:${[...new Uint8Array(a)].map(e=>e.toString(16).padStart(2,`0`)).join(``)}`;if(i.schemaVersion!==1||i.version!==t.version||i.messageType!==`receipt`||i.path!==t.payload.path||i.commandId!==t.commandId||i.action!==t.action||i.actionDigest!==t.actionDigest||i.idempotencyKeyDigest!==o||$(i.identity)!==$(t.identity)||![`settled`,`rejected`,`uncertain`].includes(i.phase)||i.phase===`settled`&&(i.resultCode!==`saved`||!/^[a-f0-9]{64}$/.test(i.digest??``)))throw Error(`workspace-write-receipt-invalid`);return i}function Oe(e){let{locale:t}=x(),n=xe(e),[r,i]=(0,z.useState)(),[a,o]=(0,z.useState)(!1),s=(0,z.useRef)(!1),[c,l]=(0,z.useState)(),[u,d]=(0,z.useState)();Ce(e,s,d),(0,z.useEffect)(()=>{let t=new AbortController,n=!1,r=()=>{n||(n=!0,Te(e,t.signal).then(i).catch(()=>{t.signal.aborted||i(void 0)}).finally(()=>{n=!1}))};r();let a=window.setInterval(r,5e3);return()=>{t.abort(),clearInterval(a)}},[e]);let f=(e,t=1,r=!1)=>n.update(n=>({active:e.path,tabs:[...n.tabs.filter(t=>t.file.path!==e.path),{file:e,line:t,fresh:r,draft:e.content??``}]})),p=(e,t)=>n.update(n=>({...n,active:e,tabs:n.tabs.map(n=>n.file.path===e&&t!==void 0?{...n,line:t}:n)})),m=(e,t)=>n.update(n=>({...n,tabs:n.tabs.map(n=>n.file.path===e?{...n,draft:t}:n)})),h=r=>{let i=be(e).tabs.find(e=>e.file.path===r);i&&(Q(i)||i.pending)&&!window.confirm(S(t,`Bỏ thay đổi chưa lưu và đóng tệp?`,`Discard unsaved changes and close this file?`))||n.update(e=>({tabs:e.tabs.filter(e=>e.file.path!==r),active:e.active===r?e.tabs.find(e=>e.file.path!==r)?.file.path:e.active}))},g=async n=>{try{f(await R(e,n)),d(void 0),l(void 0)}catch{l(S(t,`Chưa tải lại được tệp. Bản sửa của bạn vẫn được giữ.`,`Could not reload the file. Your draft is preserved.`))}},_=async(r,a)=>{let c=be(e).tabs.find(e=>e.file.path===r);if(!(!c||s.current||!Q(c)&&!c.pending||c.file.protected||c.file.readOnly)&&!(a&&!window.confirm(S(t,`Ghi đè phiên bản trên đĩa bằng bản sửa của bạn?`,`Replace the version on disk with your draft?`)))){s.current=!0,o(!0),l(void 0);try{let o=await Te(e);if(i(o),!o.writable)throw Error(`read-only`);let s=a?.digest??(c.fresh?`absent`:c.file.digest);if(!s)throw Error(`unavailable`);let u=c.pending??await Ee(o,{path:r,content:c.draft,expectedDigest:s});n.update(e=>({...e,tabs:e.tabs.map(e=>e.file.path===r?{...e,pending:u}:e)}));let f=await De(e,u);if(f.phase===`uncertain`){l(S(t,`Chưa xác định được kết quả lưu. Tải lại để kiểm tra trước khi lưu tiếp.`,`The save result is uncertain. Reload to check before saving again.`));return}n.update(e=>({...e,tabs:e.tabs.map(e=>e.file.path===r?{...e,pending:void 0}:e)})),f.phase===`settled`&&f.resultCode===`saved`?(n.update(e=>({...e,tabs:e.tabs.map(e=>e.file.path===r?{...e,fresh:!1,file:{...e.file,content:u.payload.content,digest:f.digest,revision:f.observedRevisionsAfter.workspaceRevision}}:e)})),d(void 0),window.dispatchEvent(new CustomEvent(`piagent-workspace-saved`,{detail:{sessionRef:e,path:r}}))):f.resultCode===`stale-content`||f.resultCode===`stale-revision`?d(await R(e,r)):l(S(t,`Chưa lưu được tệp. Kiểm tra quyền ghi và thử lại.`,`Could not save the file. Check write access and try again.`))}catch{l(S(t,`Chưa lưu được tệp. Bản sửa vẫn được giữ; thử lưu lại hoặc tải lại để kiểm tra.`,`Could not confirm the save. Your draft is preserved; retry the save or reload to check.`))}finally{s.current=!1,o(!1)}}},v=async(r,a)=>{let c=be(e).tabs.find(e=>e.file.path===r);if(s.current||c&&(Q(c)||c.pending))return l(S(t,`Lưu hoặc bỏ thay đổi trước khi đổi tên hay xóa tệp.`,`Save or discard your changes before renaming or deleting the file.`)),!1;s.current=!0,o(!0),l(void 0);try{let o=await Te(e);i(o);let s=c?.file.digest??(await R(e,r)).digest;if(!o.writable||!s)throw Error(`unavailable`);let u=await De(e,await Ee(o,a?{path:r,content:``,expectedDigest:s,operation:`rename`,destination:a}:{path:r,content:``,expectedDigest:s,operation:`delete`}));return u.phase===`settled`&&u.resultCode===`saved`?(n.update(e=>({tabs:e.tabs.filter(e=>e.file.path!==r),active:e.active===r?void 0:e.active})),a&&f(await R(e,a)),window.dispatchEvent(new CustomEvent(`piagent-workspace-saved`,{detail:{sessionRef:e,path:r}})),!0):(l(u.phase===`uncertain`?S(t,`Chưa xác định được kết quả. Tải lại danh sách tệp để kiểm tra.`,`The result is uncertain. Reload the file list to check.`):u.resultCode===`stale-content`?S(t,`Tệp đã thay đổi trên đĩa hoặc tên mới đã có. Tải lại rồi thử lại.`,`The file changed on disk or the new name exists. Reload and try again.`):S(t,`Không thực hiện được. Kiểm tra quyền ghi và tên tệp.`,`This could not be done. Check write access and the file name.`)),!1)}catch{return l(S(t,`Chưa xác nhận được thao tác. Tải lại danh sách tệp để kiểm tra.`,`Could not confirm the action. Reload the file list to check.`)),!1}finally{s.current=!1,o(!1)}};return{...n,authority:r,saving:a,message:c,conflict:u,setConflict:d,load:f,select:p,change:m,close:h,reload:g,save:_,move:v}}var ke=e(l(),1);function Ae({sessionRef:e,onOpen:t}){let{locale:r}=x(),[i,o]=(0,z.useState)(``),[s,c]=(0,z.useState)(),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)(!1);return(0,z.useEffect)(()=>{let t=new AbortController;if(c(void 0),f(!1),u(!1),!i.trim())return()=>t.abort();u(!0);let n=setTimeout(()=>{oe(e,i,t.signal).then(e=>{t.signal.aborted||c(e)}).catch(()=>{t.signal.aborted||f(!0)}).finally(()=>{t.signal.aborted||u(!1)})},250);return()=>{clearTimeout(n),t.abort()}},[i,e]),(0,B.jsxs)(p,{spacing:1,sx:{p:1},children:[(0,B.jsx)(y,{size:`small`,label:S(r,`Tìm nội dung`,`Search contents`),value:i,onChange:e=>o(e.target.value),slotProps:{htmlInput:{maxLength:512}}}),l&&(0,B.jsx)(b,{size:18}),(d||s?.available===!1)&&(0,B.jsx)(a,{severity:`warning`,children:S(r,`Chưa tìm được nội dung trong project này.`,`Content search is unavailable for this project.`)}),s?.available&&s.backend===`fts`&&(0,B.jsx)(n,{variant:`caption`,children:S(r,`Tìm trong các tệp đã lập chỉ mục.`,`Searching indexed files.`)}),s?.matches.map(e=>(0,B.jsxs)(m,{onClick:()=>t(e.path,e.line),sx:{textTransform:`none`,display:`block`,textAlign:`left`,overflowWrap:`anywhere`},children:[(0,B.jsxs)(n,{variant:`caption`,component:`span`,children:[e.path,`:`,e.line,`:`,e.column]}),(0,B.jsx)(n,{variant:`body2`,component:`span`,sx:{display:`block`},children:e.preview})]},`${e.path}:${e.line}:${e.column}`)),s?.truncated&&(0,B.jsx)(n,{variant:`caption`,children:S(r,`Đã giới hạn kết quả. Hãy tìm cụ thể hơn.`,`Results were limited. Refine your search.`)}),s?.available&&!s.matches.length&&!s.truncated&&(0,B.jsx)(n,{variant:`caption`,children:S(r,`Không tìm thấy.`,`No matches.`)})]})}var je=v((0,B.jsx)(`path`,{d:`M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z`}),`ChevronRight`),Me=v((0,B.jsx)(`path`,{d:`M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z`}),`ExpandMore`),Ne=v((0,B.jsx)(`path`,{d:`M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8zM6 20V4h7v5h5v11z`}),`InsertDriveFileOutlined`),Pe=e=>e.split(`/`).slice(0,-1).map((e,t,n)=>n.slice(0,t+1).join(`/`));function Fe({sessionRef:e,refresh:t,active:r,onOpen:i,onFolder:a}){let{locale:o}=x(),[s,c]=(0,z.useState)(()=>new Set([``])),[l,f]=(0,z.useState)(()=>new Map),[p,h]=(0,z.useState)(),g=(t,n)=>{f(e=>new Map(e).set(t,e.get(t)??`loading`)),ae(e,t,n).then(e=>{n?.aborted||f(n=>new Map(n).set(t,e))}).catch(()=>{n?.aborted||f(e=>new Map(e).set(t,`error`))})};(0,z.useEffect)(()=>{f(new Map),c(new Set([``]))},[e]),(0,z.useEffect)(()=>{let e=new AbortController;for(let t of s)g(t,e.signal);return()=>e.abort()},[e,t]),(0,z.useEffect)(()=>{if(!r)return;let e=Pe(r).filter(e=>!s.has(e));if(e.length){c(t=>new Set([...t,...e]));for(let t of e)l.has(t)||g(t)}},[r]);let v=e=>{if(h(e),a(e),s.has(e)){c(t=>{let n=new Set(t);return n.delete(e),n});return}c(t=>new Set(t).add(e)),(!l.has(e)||l.get(e)===`error`)&&g(e)},y=(e,t)=>{let a=l.get(e);return!a||a===`loading`?(0,B.jsx)(b,{size:14,sx:{ml:1.5+t*1.5,my:.5}}):a===`error`?(0,B.jsx)(n,{variant:`caption`,color:`warning.main`,sx:{pl:1.5+t*1.5},children:S(o,`Chưa đọc được thư mục này.`,`This folder could not be read.`)}):(0,B.jsxs)(B.Fragment,{children:[a.entries.map(e=>{let n=e.kind===`directory`,a=n&&s.has(e.path),c=n?p===e.path:r===e.path,l=n?(0,B.jsxs)(B.Fragment,{children:[a?(0,B.jsx)(Me,{sx:{fontSize:16}}):(0,B.jsx)(je,{sx:{fontSize:16}}),a?(0,B.jsx)(d,{sx:{fontSize:16}}):(0,B.jsx)(u,{sx:{fontSize:16}})]}):(0,B.jsx)(Ne,{sx:{fontSize:16,ml:`16px`}});return(0,B.jsxs)(_,{children:[(0,B.jsxs)(m,{fullWidth:!0,size:`small`,disabled:e.protected||e.kind===`symlink`||e.kind===`other`,"aria-label":e.protected?`${e.name} (${S(o,`được bảo vệ`,`protected`)})`:e.name,"aria-expanded":n?a:void 0,"aria-current":!n&&r===e.path?`true`:void 0,onClick:()=>n?v(e.path):(h(void 0),i(e.path)),sx:{justifyContent:`flex-start`,textTransform:`none`,gap:.5,minHeight:24,py:0,pl:.5+t*1.5,pr:1,color:`text.primary`,fontWeight:400,whiteSpace:`nowrap`,bgcolor:c?`action.selected`:void 0},children:[l,(0,B.jsxs)(_,{component:`span`,sx:{overflow:`hidden`,textOverflow:`ellipsis`},children:[e.name,e.protected?` 🔒`:``]})]}),a&&y(e.path,t+1)]},e.path)}),a.truncated&&(0,B.jsx)(n,{variant:`caption`,sx:{pl:1.5+t*1.5},children:S(o,`Danh sách đã được giới hạn.`,`Listing limit reached.`)})]})};return(0,B.jsx)(_,{role:`group`,"aria-label":S(o,`Cây thư mục`,`Folder tree`),sx:{py:.5},children:y(``,0)})}var Ie=(0,z.lazy)(()=>C(()=>import(`./WorkspaceCodeEditor-CEuPTTBd.js`),__vite__mapDeps([0,1,2,3,4,5,6])));function Le({sessionRef:e,target:t,navigationHost:l,sidebarMode:u,onHide:d,fill:f}){let{locale:v}=x(),[C,w]=(0,z.useState)(`files`),[T,E]=(0,z.useState)(!1),[D,te]=(0,z.useState)(``),[k,A]=(0,z.useState)(!1),[j,M]=(0,z.useState)(),[N,P]=(0,z.useState)(``),F=Oe(e),{tabs:I,active:L}=F,[ne,re]=(0,z.useState)(``),[ae,oe]=(0,z.useState)(!1),[V,H]=(0,z.useState)(!1),U=(0,z.useRef)(null),[fe,pe]=(0,z.useState)(0);(0,z.useEffect)(()=>{let t=t=>{t.detail?.sessionRef===e&&pe(e=>e+1)};return window.addEventListener(`piagent-workspace-saved`,t),()=>window.removeEventListener(`piagent-workspace-saved`,t)},[e]),(0,z.useEffect)(()=>()=>U.current?.abort(),[]);let W=async(t,n=1)=>{if(U.current?.abort(),H(!1),I.find(e=>e.file.path===t)){F.select(t,n);return}U.current?.abort();let r=new AbortController;U.current=r,H(!0),oe(!1);try{let i=await R(e,t,r.signal);if(r.signal.aborted)return;if(i.protected){oe(!0);return}F.load(i,n)}catch{r.signal.aborted||oe(!0)}finally{r.signal.aborted||H(!1)}};(0,z.useEffect)(()=>{t&&W(t.path,t.line??1)},[t]),(0,z.useEffect)(()=>{u&&u!==`sessions`&&w(u)},[u]);let G=I.find(e=>e.file.path===L),K=G?.file,q=_e(e,I,L),J=de(e,K?.path,K?.digest??null,!!G&&!Q(G),q.diff),Y=ue(e,K?.path,G?.draft??``,q.hunks),[me,he]=(0,z.useState)(new Set),ge=!!K&&!K.binary&&!K.oversized&&se(K.path)===`image`&&!me.has(K.path),X=I.find(e=>e.file.path===F.conflict?.path),Z=(0,B.jsxs)(_,{component:`nav`,"aria-label":S(v,`Tệp dự án`,`Project files`),sx:{width:l?`100%`:{xs:136,sm:200},flexShrink:0,overflow:`auto`,borderRight:1,borderColor:`divider`},children:[!l&&(0,B.jsxs)(h,{value:C,onChange:(e,t)=>w(t),"aria-label":S(v,`Khám phá project`,`Explore project`),children:[(0,B.jsx)(o,{value:`files`,label:S(v,`Tệp`,`Files`)}),(0,B.jsx)(o,{value:`search`,label:S(v,`Tìm kiếm`,`Search`)})]}),C===`search`?(0,B.jsx)(Ae,{sessionRef:e,onOpen:(e,t)=>void W(e,t)}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(m,{disabled:!F.authority?.writable,onClick:()=>{te(ne?`${ne}/`:``),E(!0)},children:S(v,`Tệp mới`,`New file`)}),(0,B.jsx)(Fe,{sessionRef:e,refresh:fe,active:L,onOpen:e=>{re(e.split(`/`).slice(0,-1).join(`/`)),W(e)},onFolder:re})]})]});return(0,B.jsxs)(B.Fragment,{children:[J.dialog,Y.dialog,(0,B.jsxs)(p,{direction:`row`,sx:{height:f?`100%`:`calc(100vh - 150px)`,minHeight:f?160:320},children:[l?(0,ke.createPortal)(Z,l):Z,(0,B.jsxs)(_,{sx:{minWidth:0,flex:1,display:`flex`,flexDirection:`column`},children:[ae&&(0,B.jsx)(a,{severity:`warning`,children:S(v,`Chưa đọc được tệp hoặc thư mục này.`,`This file or folder could not be read.`)}),Y.bar,F.message&&(0,B.jsx)(a,{severity:`warning`,children:F.message}),F.authority?.agentRunning&&(0,B.jsx)(a,{severity:`info`,children:S(v,`Agent đang chạy và có thể sửa tệp này.`,`The agent is running and may change this file.`)}),(0,B.jsxs)(p,{direction:`row`,sx:{alignItems:`center`,borderBottom:1,borderColor:`divider`,minHeight:36},children:[(0,B.jsx)(h,{value:L??!1,onChange:(e,t)=>F.select(t),variant:`scrollable`,scrollButtons:`auto`,"aria-label":S(v,`Các tệp đang mở`,`Open files`),sx:{flex:1,minWidth:0,minHeight:36},children:I.map(e=>(0,B.jsx)(o,{value:e.file.path,sx:{minHeight:36,py:0},"aria-label":`${e.file.path}${Q(e)?` ●`:``}${q.counts.get(e.file.path)?` (${q.counts.get(e.file.path)})`:``}`,label:le(`${e.file.path}${Q(e)?` ●`:``}${q.counts.get(e.file.path)?` (${q.counts.get(e.file.path)})`:``}`,S(v,`Đóng ${e.file.path}`,`Close ${e.file.path}`),()=>F.close(e.file.path))},e.file.path))}),d&&(0,B.jsx)(c,{size:`small`,"aria-label":S(v,`Ẩn khung tệp`,`Hide files panel`),title:S(v,`Ẩn khung tệp (tệp đang mở vẫn giữ)`,`Hide files panel (open files are kept)`),onClick:d,children:(0,B.jsx)(ee,{fontSize:`small`})})]}),V&&(0,B.jsx)(b,{size:20}),K&&(0,B.jsxs)(p,{direction:`row`,sx:{flexShrink:0,overflowX:`auto`,"& .MuiButton-root":{whiteSpace:`nowrap`,flexShrink:0}},children:[!K.binary&&!K.oversized&&se(K.path)===`image`&&(0,B.jsx)(m,{size:`small`,onClick:()=>he(e=>{let t=new Set(e);return t.has(K.path)?t.delete(K.path):t.add(K.path),t}),children:ge?S(v,`Xem mã`,`View code`):S(v,`Xem hình`,`View picture`)}),(0,B.jsx)(m,{size:`small`,onClick:()=>void ie(e,K.path),children:S(v,`Tải về`,`Download`)}),J.hasPending&&(0,B.jsx)(m,{onClick:J.checkPending,children:S(v,`Kiểm tra hoàn tác`,`Check revert`)}),(0,B.jsx)(m,{size:`small`,disabled:!F.authority?.writable||K.readOnly||!G||!Q(G)&&!G.pending||F.saving,onClick:()=>void F.save(K.path),children:S(v,`Lưu`,`Save`)}),(0,B.jsx)(m,{size:`small`,onClick:()=>F.close(K.path),children:S(v,`Đóng tệp`,`Close file`)}),(0,B.jsx)(m,{size:`small`,disabled:!F.authority?.writable||K.readOnly||!K.digest||F.saving,onClick:()=>{P(K.path),M(K.path)},children:S(v,`Đổi tên`,`Rename`)}),(0,B.jsx)(m,{size:`small`,color:`error`,disabled:!F.authority?.writable||K.readOnly||!K.digest||F.saving,onClick:()=>{window.confirm(S(v,`Xóa ${K.path}? Có thể khôi phục bằng Git nếu tệp đã commit.`,`Delete ${K.path}? Git can restore it if it was committed.`))&&F.move(K.path)},children:S(v,`Xóa`,`Delete`)}),(0,B.jsx)(m,{size:`small`,onClick:()=>{(!G||!Q(G)||window.confirm(S(v,`Bỏ thay đổi chưa lưu và tải lại?`,`Discard unsaved changes and reload?`)))&&F.reload(K.path)},children:S(v,`Tải lại`,`Reload`)})]}),K?.binary||K?.oversized||ge?(0,B.jsx)(ce,{sessionRef:e,path:K.path}):K?.content!==null&&K?.content!==void 0?(0,B.jsx)(_,{sx:{flex:1,minHeight:0},children:(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(b,{size:20}),children:(0,B.jsx)(Ie,{onComment:Y.open,hunks:q.hunks,onKeep:q.keep,onRevert:F.authority?.writable?e=>void J.request(e):void 0,content:G?.draft??K.content,path:K.path,line:G?.line??1,readOnly:!F.authority?.writable||K.readOnly,onChange:e=>F.change(K.path,e),onSave:()=>void F.save(K.path)})})}):(0,B.jsx)(n,{sx:{p:2},children:S(v,`Chọn một tệp để mở.`,`Select a file to open.`)})]})]}),(0,B.jsxs)(r,{open:T,onClose:()=>E(!1),fullWidth:!0,children:[(0,B.jsx)(g,{children:S(v,`Tạo tệp mới`,`Create a new file`)}),(0,B.jsx)(i,{children:(0,B.jsx)(y,{autoFocus:!0,fullWidth:!0,label:S(v,`Đường dẫn trong project`,`Path in project`),value:D,onChange:e=>te(e.target.value)})}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{onClick:()=>E(!1),children:S(v,`Hủy`,`Cancel`)}),(0,B.jsx)(m,{disabled:!O(D)||!F.authority?.writable,onClick:()=>{let e=O(D);!e||!F.authority||(I.some(t=>t.file.path===e.path)?F.select(e.path):F.load({schemaVersion:1,version:`piagent-webui-workspace-file-v1`,generatedAt:new Date().toISOString(),identity:F.authority.identity,path:e.path,language:`text`,protected:!1,readOnly:!1,binary:!1,oversized:!1,content:``,digest:null,revision:null},1,!0),E(!1))},children:S(v,`Tạo`,`Create`)})]})]}),(0,B.jsxs)(r,{open:!!j,onClose:()=>M(void 0),fullWidth:!0,children:[(0,B.jsx)(g,{children:S(v,`Đổi tên tệp`,`Rename file`)}),(0,B.jsx)(i,{children:(0,B.jsx)(y,{autoFocus:!0,fullWidth:!0,label:S(v,`Đường dẫn mới trong project`,`New path in project`),value:N,onChange:e=>P(e.target.value)})}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{onClick:()=>M(void 0),children:S(v,`Hủy`,`Cancel`)}),(0,B.jsx)(m,{disabled:!O(N)||O(N)?.path===j||F.saving,onClick:()=>{let e=O(N);!e||!j||F.move(j,e.path).then(e=>{e&&M(void 0)})},children:S(v,`Đổi tên`,`Rename`)})]})]}),(0,B.jsxs)(r,{open:!!F.conflict,onClose:()=>{F.setConflict(void 0),A(!1)},fullWidth:!0,maxWidth:k?`lg`:`sm`,children:[(0,B.jsx)(g,{children:S(v,`Tệp đã thay đổi trên đĩa`,`The file changed on disk`)}),(0,B.jsxs)(i,{children:[(0,B.jsx)(n,{children:F.conflict?.path}),(0,B.jsx)(n,{children:S(v,`Bản sửa của bạn vẫn được giữ. Chọn cách xử lý xung đột.`,`Your draft is preserved. Choose how to resolve the conflict.`)}),k&&F.conflict&&X&&(0,B.jsxs)(p,{direction:`row`,spacing:1,children:[(0,B.jsxs)(_,{sx:{width:`50%`,height:360},children:[(0,B.jsx)(n,{children:S(v,`Trên đĩa`,`On disk`)}),(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(b,{size:20}),children:(0,B.jsx)(Ie,{path:F.conflict.path,content:F.conflict.content??``})})]}),(0,B.jsxs)(_,{sx:{width:`50%`,height:360},children:[(0,B.jsx)(n,{children:S(v,`Bản sửa của bạn`,`Your draft`)}),(0,B.jsx)(z.Suspense,{fallback:(0,B.jsx)(b,{size:20}),children:(0,B.jsx)(Ie,{path:X.file.path,content:X.draft})})]})]})]}),(0,B.jsxs)(s,{children:[(0,B.jsx)(m,{onClick:()=>{F.setConflict(void 0),A(!1)},children:S(v,`Để sau`,`Later`)}),(0,B.jsx)(m,{onClick:()=>{F.conflict&&(F.load(F.conflict),F.setConflict(void 0),A(!1))},children:S(v,`Tải lại`,`Reload`)}),(0,B.jsx)(m,{onClick:()=>A(!0),children:S(v,`Xem khác biệt`,`Compare`)}),(0,B.jsx)(m,{disabled:F.saving||!F.conflict?.digest||F.conflict.protected||F.conflict.readOnly,onClick:()=>{F.conflict&&F.save(F.conflict.path,F.conflict)},children:S(v,`Ghi đè`,`Overwrite`)})]})]})]})}export{Le as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--bg:var(--piagent-palette-background-default,#09090b);--surface:var(--piagent-palette-background-paper,#111114);--text:var(--piagent-palette-text-primary,#ededf0);--muted:var(--piagent-palette-text-secondary,#a3a3ad);--line:var(--piagent-palette-divider,#26262c);--accent:var(--piagent-palette-primary-main,#d8ff7a);--on-accent:var(--piagent-palette-primary-contrastText,#111300);--positive:var(--piagent-palette-secondary-main,#8be9c8);--warning:var(--piagent-palette-warning-main,#efba63);--danger:var(--piagent-palette-error-main,#ff7f86);--surface-strong:color-mix(in srgb, var(--text) 5%, var(--surface));--surface-2:color-mix(in srgb, var(--text) 4%, var(--surface));--line-strong:color-mix(in srgb, var(--text) 18%, var(--surface));--quiet:var(--muted);--accent-soft:color-mix(in srgb, var(--accent) 12%, transparent);--blue:color-mix(in srgb, #7aa2f7 38%, var(--text));--amber:var(--warning);--red:var(--danger);--page-glow:transparent;--radius:8px;--radius-sm:6px;font-family:system-ui,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html{background:var(--bg)}body{min-width:320px;min-height:100vh;color:var(--text);background:radial-gradient(circle at 62% -20%, var(--page-glow) 0, transparent 36rem), var(--bg);margin:0}button,input,select,textarea{font:inherit}strong,h1,h2,h3,p{overflow-wrap:anywhere}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.skip-link{z-index:100;border-radius:var(--radius-sm);color:#08130f;background:var(--accent);padding:9px 12px;font-size:11px;font-weight:650;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.app-shell{min-height:100vh}.topbar{z-index:10;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#090c12db;border-bottom:1px solid #354052b8;grid-template-columns:1fr minmax(220px,auto) 1fr;align-items:center;gap:24px;min-height:68px;padding:0 28px;display:grid;position:sticky;top:0}.brand,.session-title,.topbar-actions,.runtime-strip>div,.task-meta,.health-line{align-items:center;display:flex}.brand{gap:11px}.brand>div,.session-title{flex-direction:column;display:flex}.brand strong{letter-spacing:.01em;font-size:15px}.brand small,.session-title small{color:var(--quiet);letter-spacing:.04em;font-size:11px}.brand-mark{border-radius:var(--radius-sm);width:34px;height:34px;color:var(--accent);background:var(--accent-soft);border:1px solid #64e0b56b;place-items:center;font-family:Georgia,serif;font-size:21px;display:grid}.session-title{text-align:center;min-width:0}.session-title strong{text-overflow:ellipsis;white-space:nowrap;max-width:360px;font-size:13px;overflow:hidden}.topbar-actions{justify-content:flex-end;gap:10px}.read-only-badge{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;padding:5px 9px;font-size:11px;font-weight:600}.workspace{width:min(1460px,100% - 48px);margin:0 auto;padding:28px 0 64px}.runtime-strip{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);grid-template-columns:repeat(6,minmax(0,1fr));display:grid;overflow:hidden}.runtime-strip>div{border-right:1px solid var(--line);flex-direction:column;justify-content:center;align-items:flex-start;gap:7px;min-width:0;min-height:70px;padding:13px 16px}.runtime-strip>div:last-child{border-right:0}.runtime-strip span:first-child{color:var(--quiet);letter-spacing:.1em;text-transform:uppercase;font-size:11px;font-weight:650}.runtime-strip strong{max-width:100%;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.content-grid{grid-template-columns:minmax(0,1fr) 290px;align-items:start;gap:18px;margin-top:18px;display:grid}.surface{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);box-shadow:0 22px 60px #0000001f}.task-dashboard{padding:clamp(20px,3vw,34px)}.task-heading{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:24px;display:grid}.section-kicker{color:var(--accent);letter-spacing:.14em;text-transform:uppercase;margin:0 0 7px;font-size:11px;font-weight:650}.task-heading h2,.task-empty h2{max-width:900px;color:var(--text);letter-spacing:-.035em;margin:0;font-size:clamp(23px,3vw,38px);font-weight:650;line-height:1.18}.task-meta{color:var(--muted);flex-wrap:wrap;gap:12px;margin-top:15px;font-size:12px}.task-meta>span:not(.status-pill){border-left:1px solid var(--line-strong);padding-left:12px}.progress-number{text-align:right;min-width:116px}.progress-number strong{color:var(--accent);letter-spacing:-.05em;font-size:32px;font-weight:650;display:block}.progress-number span{color:var(--muted);font-size:11px}.progress-track{border-radius:var(--radius-sm);background:#242b36;height:5px;margin:26px 0 30px;overflow:hidden}.progress-track span{border-radius:inherit;background:linear-gradient(90deg,#45c89b,#7ee6bd);height:100%;transition:width .25s;display:block;box-shadow:0 0 20px #64e0b552}.status-pill{width:-moz-fit-content;width:fit-content;min-width:0;color:var(--text);white-space:nowrap;align-items:center;gap:6px;font-size:11px;font-weight:600;line-height:1.2;display:inline-flex}.status-dot{width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, currentColor 13%, transparent);background:currentColor;border-radius:50%;flex:none}.tone-positive{color:var(--accent)}.tone-warning{color:var(--amber)}.tone-danger{color:var(--red)}.tone-info{color:var(--blue)}.tone-neutral{color:var(--muted)}.criteria-heading{justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:12px;display:flex}.criteria-heading h2{letter-spacing:.01em;margin:0;font-size:13px}.criteria-heading>span{color:var(--quiet);font-size:11px}.criteria-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.criterion-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:14px;min-height:72px;padding:12px 15px;display:grid}.criterion-index{border:1px solid color-mix(in srgb, currentColor 28%, transparent);border-radius:var(--radius-sm);background:color-mix(in srgb, currentColor 7%, transparent);place-items:center;width:32px;height:32px;font-size:11px;font-weight:650;display:grid}.criterion-copy{min-width:0}.criterion-copy>div{align-items:center;gap:9px;display:flex}.criterion-copy p{color:var(--text);margin:0;font-size:13px;line-height:1.45}.criterion-copy small{color:var(--quiet);margin-top:4px;font-size:11px;display:block}.critical-tag{border-radius:var(--radius-sm);color:var(--amber);letter-spacing:.08em;text-transform:uppercase;border:1px solid #efba633d;flex:none;padding:3px 6px;font-size:10px;font-weight:650}.blocker{border-radius:var(--radius-sm);background:#ff7f8612;border:1px solid #ff7f8640;grid-template-columns:auto 1fr;gap:14px;margin:-9px 0 24px;padding:12px 14px;display:grid}.blocker span{color:var(--red);text-transform:uppercase;font-size:11px;font-weight:650}.blocker p{color:var(--text);margin:0;font-size:12px}.work-plan{border-top:1px solid var(--line);color:var(--muted);margin-top:16px;padding-top:15px}.work-plan summary{cursor:pointer;font-size:12px;font-weight:600}.work-plan ol{gap:9px;margin:14px 0 0;padding:0;list-style:none;display:grid}.work-plan li{grid-template-columns:100px 1fr;align-items:center;gap:12px;font-size:12px;display:grid}.context-rail{gap:18px;display:grid}.compact-panel{padding:18px}.compact-panel dl{margin:0}.compact-panel dl>div{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;min-height:39px;display:flex}.compact-panel dl>div:last-child{border-bottom:0}.compact-panel dt{color:var(--muted);font-size:11px}.compact-panel dd{max-width:170px;color:var(--text);text-overflow:ellipsis;white-space:nowrap;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.health-line{justify-content:space-between;gap:12px}.health-line>span{color:var(--quiet);font-size:11px}.health-issue{border-top:1px solid var(--line);color:var(--muted);margin:13px 0 0;padding-top:12px;font-size:11px;line-height:1.5}.task-empty{grid-template-columns:auto minmax(0,620px);place-content:center;gap:24px;min-height:420px;padding:48px;display:grid}.task-empty .empty-mark{border-radius:var(--radius-sm);width:64px;height:64px;color:var(--accent);background:var(--accent-soft);border:1px solid #64e0b547;place-items:center;font-family:Georgia,serif;font-size:38px;display:grid}.task-empty p:last-child{color:var(--muted);margin:13px 0 0;font-size:13px;line-height:1.6}.chat-panel{margin-top:18px;position:relative;overflow:hidden}.chat-panel[data-dragging]{outline:2px dashed var(--accent);outline-offset:-4px}.chat-drop-overlay{z-index:4;border-radius:var(--radius-sm);background:color-mix(in srgb, var(--surface-strong) 88%, transparent);pointer-events:none;text-align:center;align-content:center;justify-items:center;gap:6px;padding:16px;display:grid;position:absolute;inset:0}.chat-drop-overlay strong{color:var(--accent);font-size:13px}.chat-drop-overlay small{color:var(--quiet);font-size:11px}@media (prefers-reduced-motion:no-preference){.chat-drop-overlay{animation:.12s ease-out chat-drop-in}}@keyframes chat-drop-in{0%{opacity:0}to{opacity:1}}.chat-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:20px;min-height:78px;padding:17px 22px;display:flex}.chat-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.chat-heading>div:last-child{color:var(--quiet);align-items:center;gap:12px;font-size:11px;display:flex}.chat-read-state{border-radius:var(--radius-sm);color:var(--amber);background:#efba630f;border:1px solid #efba633b;padding:5px 8px}.chat-body{background:var(--surface-2);overscroll-behavior:contain;gap:11px;max-height:620px;padding:18px 20px;display:grid;overflow:auto}.chat-empty{color:var(--quiet);text-align:center;margin:0;padding:28px;font-size:11px}.load-older{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface);cursor:pointer;justify-self:center;padding:6px 10px;font-size:11px}.chat-message{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);width:min(82%,900px);padding:12px 14px}.chat-message>div{justify-content:space-between;align-items:center;gap:12px;display:flex}.chat-message strong{color:var(--text);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.chat-message time,.chat-message small{color:var(--quiet);font-size:10.5px}.chat-message p{color:var(--text);white-space:pre-wrap;margin:7px 0 0;font-size:12px;line-height:1.6}.chat-message small{color:var(--amber);margin-top:7px;display:block}.chat-user{background:#75a7ff12;border-color:#75a7ff38;justify-self:end}.chat-assistant{justify-self:start}.chat-streaming{box-shadow:inset 2px 0 var(--accent);border-color:#64e0b542}.stream-indicator{color:var(--accent);font-size:10.5px}.chat-tool-live,.chat-tool-result{border:1px solid var(--line);border-radius:var(--radius-sm);width:-moz-fit-content;width:fit-content;max-width:82%;color:var(--quiet);background:var(--surface-2);align-items:center;gap:9px;padding:8px 11px;font-size:10.5px;display:flex}.chat-tool-live strong,.chat-tool-result strong{color:var(--text);font-family:ui-monospace,monospace;font-size:11px}.tool-spinner{border:1px solid var(--blue);border-right-color:#0000;border-radius:50%;width:7px;height:7px;animation:.8s linear infinite spin}.held-queue{border-top:1px solid var(--line);background:#efba6309;padding:12px 16px}.held-queue-heading{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.held-queue-heading strong{color:var(--text);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.held-queue-heading span{color:var(--amber);font-size:10.5px}.held-queue ol{gap:7px;max-height:260px;margin:0;padding:0;list-style:none;display:grid;overflow:auto}.held-queue li{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);grid-template-columns:minmax(0,1fr) auto;gap:7px 12px;padding:9px 10px;display:grid}.held-queue li[data-state=quarantined]{border-color:#efba6340}.held-queue p{color:var(--text);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:11px;line-height:1.45;overflow:hidden}.held-queue textarea{resize:vertical;border:1px solid var(--line);border-radius:var(--radius-sm);min-width:0;color:var(--text);background:var(--surface-2);padding:8px 9px;font-size:11px}.held-queue li>div{align-items:start;gap:5px;display:flex}.held-queue button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface);cursor:pointer;padding:4px 7px;font-size:10.5px}.held-queue button:disabled{cursor:not-allowed;opacity:.45}.held-queue small{color:var(--amber);grid-column:1/-1;font-size:10px}.chat-composer-preview{border-top:1px solid var(--line);background:var(--surface-2);grid-template-columns:minmax(0,1fr) auto;gap:10px;padding:14px 16px;display:grid}.attachment-list{flex-wrap:wrap;grid-column:1/-1;gap:7px;margin:0;padding:0;list-style:none;display:flex}.attachment-list li{border-radius:var(--radius-sm);background:#75a7ff0f;border:1px solid #75a7ff38;align-items:center;gap:8px;max-width:260px;padding:7px 8px;display:flex}.attachment-list span{flex-direction:column;min-width:0;display:flex}.attachment-list strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.attachment-list small{color:var(--quiet);font-size:10px}.attachment-list button{min-width:0;padding:3px 6px;font-size:10px}.chat-composer-preview textarea{resize:none;border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--quiet);background:var(--surface-2);padding:10px 12px;font-size:11px}.chat-composer-preview button{border:1px solid var(--line);border-radius:var(--radius-sm);min-width:76px;color:var(--quiet);background:var(--surface-strong)}.composer-actions{grid-template-columns:repeat(2,minmax(76px,auto));gap:6px;display:grid}.composer-actions .interrupt-send{color:var(--amber);grid-column:1/-1}.attachment-list li[data-kind=document]{background:#7ee7b212;border-color:#7ee7b24d}.attachment-picker{border:1px solid var(--line);border-radius:var(--radius-sm);width:-moz-fit-content;width:fit-content;color:var(--blue);cursor:pointer;align-items:center;padding:6px 9px;font-size:10.5px;display:inline-flex}.attachment-picker.disabled{cursor:not-allowed;opacity:.45}.attachment-picker input{opacity:0;width:1px;height:1px;position:absolute;overflow:hidden}.chat-composer-preview>small{color:var(--muted);grid-column:1/-1;font-size:10.5px}@keyframes spin{to{transform:rotate(360deg)}}.document-workspace{margin-top:0;overflow:hidden}.document-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:82px;padding:18px 22px;display:flex}.document-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.document-heading>span{color:var(--quiet);letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:600}.document-body{grid-template-columns:minmax(248px,320px) minmax(0,1fr);min-height:520px;display:grid}.document-list{border-right:1px solid var(--line);overscroll-behavior:contain;flex-direction:column;gap:10px;min-width:0;max-height:720px;padding:14px;display:flex;overflow:auto}.document-group{flex-direction:column;gap:2px;min-width:0;display:flex}.document-group-heading{flex-direction:column;padding:8px 6px 4px;display:flex}.document-group-heading strong{color:var(--quiet);letter-spacing:.08em;text-transform:uppercase;font-size:10.5px;font-weight:650}.document-group-heading span{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.document-row{border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:9px;min-width:0;padding:7px 8px;display:flex}.document-row-copy{flex-direction:column;flex:1;min-width:0;display:flex}.document-row-copy strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.document-row-copy small{color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;font-size:10.5px;overflow:hidden}.document-row-meta{color:var(--muted);flex-shrink:0;font-size:10.5px}.document-viewer{overscroll-behavior:contain;flex-direction:column;min-width:0;max-height:720px;display:flex;overflow:auto}.document-toolbar{z-index:2;border-bottom:1px solid var(--line);background:var(--surface-strong);justify-content:space-between;align-items:center;gap:14px;padding:12px 18px;display:flex;position:sticky;top:0}.document-toolbar strong{font-size:12px;display:block}.document-toolbar small{color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;display:block;overflow:hidden}.document-badges{flex-shrink:0;gap:6px;display:flex}.document-content{min-width:0;color:var(--text);padding:18px 22px;font-size:12px}.document-plain{font-family:var(--mono,ui-monospace, SFMono-Regular, Menlo, monospace);white-space:pre-wrap;word-break:break-word;margin:0;font-size:11px;line-height:1.7;overflow-x:auto}.document-table{border-collapse:collapse;width:100%;font-size:11px}.document-table th,.document-table td{border:1px solid var(--line);text-overflow:ellipsis;white-space:nowrap;max-width:320px;padding:5px 9px;overflow:hidden}.document-table th{background:var(--surface-strong);text-align:left;font-weight:650;position:sticky;top:0}.document-placeholder{height:100%;color:var(--muted);text-align:center;align-content:center;justify-items:center;gap:8px;padding:48px 24px;display:grid}.document-placeholder .MuiSvgIcon-root{opacity:.5;font-size:30px}.document-empty{color:var(--muted);padding:14px;font-size:11px}.change-report{--report-mark:#ff5a5f;gap:22px;display:grid}.change-report-actions{justify-content:flex-end;margin-bottom:8px;display:flex}.change-report-full{min-height:100%;color:var(--text);background:var(--bg);padding:28px max(16px,4vw) 48px;font-size:13px;position:relative}.change-report-full .change-report{max-width:1400px;margin:0 auto}.change-report-close{z-index:3;top:12px;right:16px;background:var(--surface-strong)!important;position:fixed!important}.change-report h2{margin:0 0 4px;font-size:18px}.change-report h3{margin:0 0 10px;font-size:14px}.change-report h4{margin:0 0 4px;font-size:13px}.change-report h5{color:var(--quiet);letter-spacing:.08em;text-transform:uppercase;margin:16px 0 8px;font-size:10.5px;font-weight:650}.change-report ul{margin:0;padding-left:18px}.change-report-note{color:var(--muted);margin:0 0 10px}.change-report-chips{flex-wrap:wrap;gap:6px;display:flex}.change-report-chips span{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:2px 9px;font-size:11px}.change-report-card{border:1px solid var(--line);background:var(--surface-strong);border-radius:4px;margin-bottom:14px;padding:14px}.change-report-pair{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:12px;display:grid}.change-report-pair.narrow{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),300px));margin-top:10px}.change-report-figure{min-width:0;margin:0}.change-report-figure figcaption{margin-bottom:5px;font-weight:600}.change-report-shot{border:1px solid var(--line);border-radius:4px;line-height:0;position:relative}.change-report-shot img{border-radius:3px;width:100%;display:block}.change-report-box{box-sizing:border-box;border:3px solid var(--report-mark);border-radius:3px;position:absolute}.change-report-box b,.change-report-number{width:20px;height:20px;color:var(--text);background:var(--report-mark);border-radius:50%;flex:none;place-items:center;font-size:11px;line-height:1;display:inline-grid}.change-report-box b{box-shadow:0 0 0 2px var(--surface-strong);position:absolute;top:-11px;left:-11px}.change-report-zoom-row{gap:6px;margin-bottom:12px;display:grid}.change-report-zoom-row p{align-items:center;gap:8px;margin:0;display:flex}.change-report-zoom{min-width:0}.change-report-zoom span{color:var(--quiet);font-size:11px}.change-report-crop{box-sizing:border-box;border:3px solid var(--report-mark);background-repeat:no-repeat;border-radius:4px;width:100%}.change-report-missing{border:1px dashed var(--line);color:var(--muted);text-align:center;border-radius:4px;padding:22px}.change-report details{margin-top:12px}.change-report summary{cursor:pointer;font-weight:600}.change-report-scroll{overflow-x:auto}.change-report-table{border-collapse:collapse;width:100%;font-size:11px}.change-report-table th,.change-report-table td{border:1px solid var(--line);text-align:left;vertical-align:top;padding:6px 9px}.change-report-table th{color:var(--quiet);font-weight:650}.change-report-table code{word-break:break-all;display:block}.change-report-result{font-weight:650}.change-report-result.passed{color:var(--accent)}.change-report-result.failed{color:var(--muted)}.change-report-result.skipped{color:var(--text)}@media (max-width:900px){.document-body{grid-template-columns:1fr}.document-list{border-right:0;border-bottom:1px solid var(--line);max-height:300px}}:root[data-piagent-color-mode=light] .document-row-copy strong,:root[data-piagent-color-mode=light] .document-content{color:var(--text)}.source-workspace{margin-top:0;overflow:hidden}.source-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:82px;padding:18px 22px;display:flex}.source-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.source-heading>span{color:var(--quiet);letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:600}.source-tabs{border-bottom:1px solid var(--line);background:var(--surface-2);min-width:0;padding:0 14px;display:flex}.source-tabs button{min-width:0;color:var(--muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:9px;padding:14px 15px 12px;font-size:11px;display:flex}.source-tabs button:hover{color:var(--text)}.source-tabs button[aria-selected=true]{border-bottom-color:var(--accent);color:var(--accent)}.source-tabs button b{border-radius:var(--radius-sm);min-width:20px;color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);text-align:center;padding:2px 6px;font-size:10.5px}.source-body{grid-template-columns:minmax(248px,304px) minmax(0,1fr);min-height:480px;display:grid}.file-panel{border-right:1px solid var(--line);background:color-mix(in srgb, var(--bg) 72%, var(--surface));min-width:0}.file-panel-meta{border-bottom:1px solid var(--line);min-height:42px;color:var(--muted);justify-content:space-between;align-items:center;gap:14px;padding:0 14px;font-size:11px;display:flex}.file-panel-meta small{color:var(--quiet);letter-spacing:.08em;text-transform:uppercase;font-weight:650}.source-list-retry{border-radius:var(--radius-sm);color:var(--accent);font:inherit;background:0 0;border:1px solid;padding:4px 8px;font-weight:650}.file-list{overscroll-behavior:contain;max-height:620px;overflow:auto}.file-group-label{min-height:28px;color:var(--quiet);align-items:center;gap:6px;padding:5px 10px 3px}.file-group-label svg{width:14px;height:14px}.file-group-label span{min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:600}.file-row{border-radius:var(--radius-sm);width:100%;min-height:54px;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:26px minmax(0,1fr) auto;align-items:center;gap:9px;margin:0;padding:8px 9px;display:grid}.file-row:hover{background:#75a7ff0d}.file-row[data-selected=true]{box-shadow:inset 2px 0 var(--accent);background:#64e0b513}.file-status{border:1px solid var(--line-strong);border-radius:var(--radius-sm);width:23px;height:23px;color:var(--muted);place-items:center;font-family:ui-monospace,monospace;font-size:11px;font-weight:650;display:grid}.status-A,.status-U{color:var(--accent);border-color:#64e0b54d}.status-M,.status-R{color:var(--blue);border-color:#75a7ff4d}.status-D,.status-C{color:var(--red);border-color:#ff7f864d}.file-name{flex-direction:column;min-width:0;display:flex}.file-name strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;overflow:hidden}.file-name small,.file-provenance,.file-evidence{color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.file-provenance,.file-evidence{display:none}.file-stats{color:var(--muted);white-space:nowrap;font-family:ui-monospace,monospace;font-size:10.5px}.files-empty,.diff-empty{min-height:220px;color:var(--quiet);text-align:center;place-items:center;padding:28px;font-size:12px;display:grid}.diff-empty{background:repeating-linear-gradient(-45deg,#0000,#0000 13px,#ffffff03 13px 14px);min-height:100%}.error-state{color:var(--red)}.diff-viewer{background:var(--surface);min-width:0;overflow:auto}.diff-toolbar{border-bottom:1px solid var(--line);background:var(--surface);justify-content:space-between;align-items:center;gap:15px;min-height:55px;padding:9px 13px;display:flex}.diff-toolbar>div:first-child{align-items:center;gap:10px;min-width:0;display:flex}.diff-actions{align-items:center;gap:10px;display:flex}.review-state{color:var(--quiet);align-items:center;gap:8px;font-size:10.5px;display:flex}.review-state>span{white-space:nowrap}.review-state button{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#18202b;padding:0 9px;font-size:10.5px}.review-state button:disabled{cursor:not-allowed;opacity:.45}.review-reviewed>span{color:var(--accent)}.review-stale>span{color:var(--amber)}.source-mutation-preview{max-width:290px;color:var(--text);align-items:center;gap:8px;font-size:10.5px;display:flex}.source-mutation-preview>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.source-mutation-preview button{border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#42c2921a;border:1px solid #42c29266;flex:none;padding:0 10px;font-size:10.5px;font-weight:650}.source-mutation-preview button:disabled{cursor:not-allowed;opacity:.45}.source-revert-preview{max-width:290px;color:var(--text);align-items:center;gap:8px;font-size:10.5px;display:flex}.source-revert-preview>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.source-revert-preview button,.hunk-header .revert-action{border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#ff7f8617;border:1px solid #ff7f8661;flex:none;padding:0 10px;font-size:10.5px;font-weight:650}.source-revert-preview button:disabled{cursor:not-allowed;opacity:.45}.source-open-action button{border-radius:var(--radius-sm);min-height:28px;color:var(--text);white-space:nowrap;background:#75a7ff1a;border:1px solid #75a7ff61;padding:0 10px;font-size:10.5px;font-weight:650}.source-open-action button:disabled{cursor:wait;opacity:.55}.source-open-status{color:var(--text);background:#75a7ff14;border-bottom:1px solid #75a7ff38;padding:8px 14px;font-size:11px}.commit-summary-panel{border-bottom:1px solid var(--line);background:linear-gradient(120deg,#42c29214,#75a7ff0d);grid-template-columns:minmax(230px,.8fr) minmax(300px,1.5fr);align-items:start;gap:18px;padding:14px 16px;display:grid}.commit-summary-panel h3{color:var(--text);margin:1px 0 4px;font-size:14px}.commit-summary-panel>div>span{color:var(--quiet);font-size:10.5px}.commit-summary-panel>button{border-radius:var(--radius-sm);min-height:32px;color:var(--text);background:#42c2921a;border:1px solid #42c29266;justify-self:start;padding:0 12px;font-size:11px;font-weight:650}.commit-summary-output{border-radius:var(--radius-sm);background:#070a0f8c;border:1px solid #75a7ff33;gap:5px;padding:10px 12px;display:grid}.commit-summary-output>strong{color:var(--text);font:700 12px ui-monospace,monospace}.commit-summary-output>code{color:var(--text);white-space:pre-wrap;font-size:10.5px}.commit-summary-output>div{flex-wrap:wrap;gap:7px;margin-top:4px;display:flex}.commit-summary-output button{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#18202b;padding:0 10px;font-size:10.5px}.commit-summary-output button:last-child{color:var(--text);background:#ecb35b17;border-color:#ecb35b59}.commit-summary-status{color:var(--text);grid-column:1/-1;margin:0;font-size:11px}.model-summary-dialog{border-color:#ecb35b57}.review-error{color:var(--text);background:#ff687414;border-bottom:1px solid #ff68743d;padding:8px 14px;font-size:11px}.source-revert-error{color:var(--text);background:#ff687414;border-top:1px solid #ff68743d;padding:9px 14px;font-size:11px}.source-action-warning{color:var(--text);background:#f6be5214;border-top:1px solid #f6be523d;padding:9px 14px;font-size:11px}.detail-reconciliation-warning{color:var(--text);background:#f6be5214;border-bottom:1px solid #f6be523d;justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;font-size:11px;display:flex}.detail-reconciliation-warning button{border-radius:var(--radius-sm);color:inherit;background:0 0;border:1px solid;padding:4px 8px}.diff-toolbar strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,monospace;font-size:11px;overflow:hidden}.access-badge{text-transform:uppercase;font-size:10.5px;font-weight:650}.mode-switch{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg);padding:2px;display:flex}.mode-switch button{border-radius:var(--radius-sm);color:var(--quiet);cursor:pointer;background:0 0;border:0;padding:5px 8px;font-size:10.5px}.mode-switch button[aria-pressed=true]{color:var(--text);background:var(--surface-strong)}.mode-switch .MuiToggleButton-root.Mui-selected{color:var(--text);background:#293241;box-shadow:inset 0 0 0 1px #75a7ff4d}.diff-context{border-bottom:1px solid var(--line);min-height:37px;color:var(--quiet);align-items:center;gap:14px;padding:0 14px;font-size:10.5px;display:flex}.diff-context .additions{color:var(--accent);margin-left:auto}.diff-context .deletions{color:var(--red)}.diff-hunk{min-width:0;overflow:auto}.hunk-header{color:var(--blue);background:#75a7ff12;border-bottom:1px solid #75a7ff24;justify-content:space-between;align-items:center;gap:12px;padding:6px 12px;font-family:ui-monospace,monospace;font-size:10.5px;display:flex;position:sticky;left:0}.hunk-header button{border-radius:var(--radius-sm);min-height:25px;color:var(--text);background:#75a7ff1a;border:1px solid #75a7ff57;padding:0 9px;font:700 9px Inter,sans-serif}.hunk-header button:disabled{cursor:not-allowed;opacity:.45}.hunk-actions{align-items:center;gap:6px;display:inline-flex}.dialog-backdrop{z-index:80;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#030508c2;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.confirm-dialog{border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid #ff7f8652;width:min(520px,100%);padding:24px;box-shadow:0 30px 100px #00000094}.confirm-dialog h3{color:var(--text);margin:0;font-size:21px}.confirm-dialog>p:not(.section-kicker){color:var(--text);margin:14px 0;font-size:12px;line-height:1.65}.confirm-dialog code{color:var(--text)}.revert-diff{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);max-height:min(300px,42vh);margin:14px 0;overflow:auto}.revert-diff section>div{color:var(--text);background:#182130;padding:6px 9px;font:9px ui-monospace,monospace;position:sticky;top:0}.revert-line{white-space:pre-wrap;min-height:19px;padding:2px 9px;font:10px/1.5 ui-monospace,monospace;display:block;color:var(--text)!important}.revert-line b{width:14px;color:inherit;display:inline-block}.revert-added{background:#42c29214;color:var(--text)!important}.revert-deleted{background:#ff687414;color:var(--text)!important}.revert-meta{color:var(--muted)!important}.revert-safety{border-radius:var(--radius-sm);background:#efba630f;border:1px solid #efba6338;gap:5px;padding:12px;display:grid}.revert-safety strong{color:var(--text);font-size:11px}.revert-safety span{color:var(--muted);font-size:11px}.confirm-actions{justify-content:flex-end;gap:9px;margin-top:20px;display:flex}.confirm-actions button{border:1px solid var(--line-strong);border-radius:var(--radius-sm);min-height:34px;color:var(--text);background:#1b222d;padding:0 14px;font-size:11px;font-weight:650}.confirm-actions .danger-action{color:var(--text);background:#ff7f8621;border-color:#ff7f866b}.confirm-actions button:disabled{cursor:not-allowed;opacity:.48}.diff-line{grid-template-columns:42px 42px 18px minmax(500px,1fr);min-width:max-content;min-height:21px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:21px;display:grid}.diff-line>span{color:#566173;text-align:right;-webkit-user-select:none;user-select:none;padding:0 7px}.diff-line b{color:var(--quiet);text-align:center;-webkit-user-select:none;user-select:none}.diff-line code,.split-line code{color:var(--text);white-space:pre;padding:0 8px}.syntax-keyword{color:var(--text);font-weight:650}.syntax-string,.syntax-number{color:var(--text)}.syntax-comment{color:var(--muted);font-style:italic}.syntax-literal,.syntax-property{color:var(--text)}.diff-added{background:#42c2921a}.diff-added code,.diff-added b{color:var(--text)}.diff-deleted{background:#ff68741a}.diff-deleted code,.diff-deleted b{color:var(--text)}.split-line{border-bottom:1px solid #242c394d;grid-template-columns:42px minmax(350px,1fr) 42px minmax(350px,1fr);min-width:860px;min-height:21px;font-family:ui-monospace,monospace;font-size:11px;line-height:21px;display:grid}.split-line>span{color:#566173;text-align:right;border-right:1px solid #242c39b3;padding:0 7px}.split-line code:nth-child(2){border-right:1px solid var(--line)}.unchanged-region{border-block:1px solid var(--line);color:var(--quiet);background:var(--surface-2);text-align:center;padding:7px 12px;font-size:10.5px}.diff-fallback{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface);gap:6px;margin:18px;padding:16px;font-size:11px;display:grid}.diff-fallback strong{color:var(--amber);text-transform:uppercase;font-size:11px}.activity-panel{margin-top:18px;overflow:hidden}.panel-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:82px;padding:18px 22px;display:flex}.panel-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.panel-heading>div:last-child{color:var(--quiet);align-items:center;gap:14px;font-size:11px;display:flex}.running-count{color:var(--blue)}.activity-list{display:grid}.activity-row{border-bottom:1px solid var(--line);background:var(--surface-2);grid-template-columns:10px minmax(0,1fr) 150px;align-items:start;gap:14px;padding:15px 18px;display:grid}.activity-row:last-child{border-bottom:0}.activity-state{width:7px;height:7px;box-shadow:0 0 0 4px color-mix(in srgb, currentColor 10%, transparent);background:currentColor;border-radius:50%;margin-top:5px}.activity-copy{min-width:0}.activity-copy>div{align-items:center;gap:9px;display:flex}.activity-copy strong{color:var(--text);font-size:12px}.activity-copy>div>span{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--quiet);letter-spacing:.06em;text-transform:uppercase;padding:2px 5px;font-size:10px;font-weight:650}.activity-copy>p{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin:4px 0 0;font-family:ui-monospace,monospace;font-size:11px;line-height:1.45;overflow:hidden}.activity-result{text-align:right;grid-template-columns:1fr auto;align-items:center;gap:4px 9px;display:grid}.activity-result strong{color:var(--text);font-size:11px}.activity-result>span{color:var(--quiet);font-family:ui-monospace,monospace;font-size:10.5px}.activity-result button{color:var(--blue);cursor:pointer;background:0 0;border:0;grid-column:1/-1;justify-self:end;padding:2px 0;font-size:10.5px}.log-preview{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);background:var(--surface-2);white-space:pre-wrap;margin-top:10px;padding:10px 12px;font-family:ui-monospace,monospace;font-size:10.5px;line-height:1.55}.log-preview small{color:var(--amber);margin-top:5px;display:block}.activity-empty{min-height:150px;color:var(--quiet);place-items:center;padding:24px;font-size:11px;display:grid}.panel-footnote{border-top:1px solid var(--line);color:var(--quiet);text-align:center;padding:9px 18px;font-size:10.5px}.evidence-section{margin-top:34px}.section-title-row{justify-content:space-between;align-items:end;gap:24px;margin-bottom:14px;padding:0 3px;display:flex}.section-title-row h2{letter-spacing:-.025em;margin:0;font-size:20px}.section-title-row>span{max-width:440px;color:var(--muted);text-align:right;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.evidence-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.evidence-card{min-width:0;min-height:250px;padding:18px}.evidence-card h3{min-height:38px;color:var(--text);margin:0 0 16px;font-size:14px;line-height:1.35}.evidence-list{margin:0}.evidence-list>div{border-bottom:1px solid var(--line);grid-template-columns:88px minmax(0,1fr);align-items:center;gap:8px;min-height:38px;display:grid}.evidence-list>div:last-child{border-bottom:0}.evidence-list dt,.budget-grid dt{color:var(--quiet);font-size:10.5px}.evidence-list dd{color:var(--muted);text-align:right;text-overflow:ellipsis;white-space:nowrap;margin:0;font-family:ui-monospace,monospace;font-size:10.5px;overflow:hidden}.context-meter{border-radius:var(--radius-sm);background:#28303c;height:4px;margin:-3px 0 12px;overflow:hidden}.context-meter span{border-radius:inherit;background:linear-gradient(90deg, var(--blue), var(--accent));height:100%;display:block}.budget-grid{grid-template-columns:repeat(3,1fr);gap:7px;margin:0;display:grid}.budget-grid>div{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);padding:12px 8px}.budget-grid dt{margin-bottom:5px}.budget-grid dd{color:var(--text);margin:0;font-family:ui-monospace,monospace;font-size:12px}.card-note,.card-empty{color:var(--quiet);margin:14px 0 0;font-size:11px;line-height:1.5}.handoff-copy>p{color:var(--muted);margin:0 0 13px;font-size:11px;line-height:1.55}.handoff-blocker,.next-action{border-radius:var(--radius-sm);background:#ff7f860d;border:1px solid #ff7f8638;gap:4px;margin-top:9px;padding:9px 10px;display:grid}.next-action{background:#64e0b50d;border-color:#64e0b533}.handoff-blocker strong,.next-action strong{color:var(--red);letter-spacing:.08em;text-transform:uppercase;font-size:10px}.next-action strong{color:var(--accent)}.handoff-blocker span,.next-action span{color:var(--text);font-size:11px;line-height:1.4}.loading-shell{width:min(560px,100% - 40px);margin:0 auto;padding-top:22vh}.loading-shell .brand-mark{border-radius:var(--radius-sm);width:48px;height:48px;margin-bottom:25px;font-size:29px}.loading-shell h1{color:var(--text);letter-spacing:-.045em;margin:0;font-size:clamp(30px,6vw,50px);line-height:1.05}.loading-shell>p:not(.section-kicker){max-width:460px;color:var(--muted);margin:18px 0 22px;font-size:14px;line-height:1.6}.session-options{grid-template-columns:minmax(220px,.75fr) minmax(420px,1.25fr);gap:22px;padding:20px;display:grid}.session-options-copy h2{color:var(--text);margin:2px 0 8px;font-size:16px}.session-options-copy>p:last-child{max-width:520px;color:var(--quiet);margin:0;font-size:11px;line-height:1.55}.session-options-controls{grid-template-columns:minmax(0,1.4fr) minmax(130px,.6fr);align-items:end;gap:10px;display:grid}.session-options-controls>label:not(.effect-ack){color:var(--quiet);gap:5px;font-size:10.5px;display:grid}.session-options-controls select{border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;min-height:36px;color:var(--text);background:var(--surface-2);padding:0 10px}.effect-ack{color:var(--text);grid-column:1/-1;align-items:flex-start;gap:8px;font-size:11px;line-height:1.4;display:flex}.effect-ack input{accent-color:var(--accent);margin-top:1px}.session-option-actions{grid-column:1/-1;gap:8px;display:flex}.session-option-actions button{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:34px;color:var(--text);background:#1a222d;padding:0 13px}.session-option-actions button:disabled{opacity:.42}.session-options-controls>small{color:var(--quiet);grid-column:1/-1;font-size:10.5px}.session-options-unavailable{color:var(--quiet);flex-direction:column;justify-content:center;gap:5px;font-size:11px;display:flex}.session-options-unavailable strong{color:var(--text);font-size:12px}.lifecycle-panel{grid-template-columns:minmax(260px,1fr) minmax(150px,auto) minmax(360px,auto);align-items:center;gap:20px;margin-top:18px;padding:18px 20px;display:grid}.lifecycle-copy h2{color:var(--text);margin:2px 0 7px;font-size:16px}.lifecycle-copy>p:last-child{max-width:620px;color:var(--quiet);margin:0;font-size:11px;line-height:1.55}.lifecycle-state{border-left:1px solid var(--line);gap:4px;min-width:150px;padding-left:18px;display:grid}.lifecycle-state>span{color:var(--quiet);text-transform:uppercase;font-size:10.5px;font-weight:650}.lifecycle-state strong{color:var(--text);font-size:12px}.lifecycle-state small{color:var(--quiet);font-size:10.5px}.lifecycle-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.lifecycle-actions button{border-radius:var(--radius-sm);cursor:pointer;min-height:36px;padding:0 13px;font-size:11px;font-weight:650}.lifecycle-actions button:disabled{cursor:not-allowed;opacity:.4}.primary-action{color:#07130f;background:var(--accent);border:1px solid #3cae88}.lifecycle-result{border-radius:var(--radius-sm);grid-column:1/-1;margin:-6px 0 0;padding:9px 11px;font-size:11px;line-height:1.45}.lifecycle-result.result-ok{color:var(--text);background:#64e0b512}.lifecycle-result.result-warning{color:var(--text);background:#efba6314}.approval-stack{gap:12px;display:grid}.approval-card{border-radius:var(--radius-sm);background:linear-gradient(135deg,#412518eb,#19181bf5);border:1px solid #70462e;padding:20px;overflow:hidden;box-shadow:0 16px 42px #00000038}.approval-card.risk-critical,.approval-card.risk-high{border-color:#9d4d3f}.approval-card>header,.approval-card>footer{justify-content:space-between;align-items:center;gap:12px;display:flex}.approval-card h2{color:var(--text);margin:2px 0 0;font-size:18px}.approval-risk{border-radius:var(--radius-sm);color:var(--text);text-transform:uppercase;border:1px solid #ffad7c59;padding:5px 9px;font-size:11px;font-weight:650}.approval-reason{color:var(--text);margin:13px 0;font-size:12px;line-height:1.55}.approval-preview{border-radius:var(--radius-sm);max-height:180px;color:var(--text);background:var(--surface-2);white-space:pre-wrap;word-break:break-word;border:1px solid #ffffff17;margin:0 0 14px;padding:12px;font:11px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.approval-facts{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0 0 13px;display:grid}.approval-facts>div{border-radius:var(--radius-sm);background:#ffffff09;min-width:0;padding:9px}.approval-facts dt{color:var(--text);text-transform:uppercase;font-size:10.5px;font-weight:650}.approval-facts dd{color:var(--text);text-overflow:ellipsis;margin:4px 0 0;font-size:11px;overflow:hidden}.approval-targets,.approval-consequences{color:var(--text);font-size:11px;line-height:1.55}.approval-targets ul{margin:6px 0 12px;padding-left:18px}.approval-consequences{grid-template-columns:1fr 1fr;gap:10px;margin:12px 0;display:grid}.approval-consequences p{border-radius:var(--radius-sm);background:#ffffff09;margin:0;padding:10px}.approval-card>footer{justify-content:flex-end;padding-top:4px}.approval-card button{border-radius:var(--radius-sm);min-height:36px;padding:0 14px;font-weight:650}.secondary-action{border:1px solid var(--line);color:var(--text);background:#1a222d}.danger-action{color:var(--text);background:#8f3e31;border:1px solid #c56b52}.approval-card button:disabled{cursor:wait;opacity:.48}.question-stack{gap:12px;display:grid}.question-card{border-radius:var(--radius-sm);background:linear-gradient(135deg,#162e3af0,#16181ef7);border:1px solid #2f5f73;padding:20px;overflow:hidden;box-shadow:0 16px 42px #00000038}.question-card>header,.question-card>footer{justify-content:space-between;align-items:center;gap:12px;display:flex}.question-card h2{color:var(--text);margin:2px 0 0;font-size:18px}.question-hint{color:var(--text);font-size:11px;font-weight:600}.question-block{border:0;min-width:0;margin:14px 0 0;padding:0}.question-block legend{color:var(--text);flex-wrap:wrap;align-items:baseline;gap:6px;padding:0;font-size:15px;font-weight:600;line-height:1.5;display:flex}.question-number{color:var(--text)}.question-chip{border-radius:var(--radius-sm);color:var(--text);border:1px solid #7cc4e459;padding:2px 8px;font-size:11px;font-weight:650}.question-text{overflow-wrap:anywhere;min-width:0}.question-multi{color:var(--text);margin:4px 0 0;font-size:12px}.question-card:focus-visible,.question-block:focus-visible{outline-offset:3px;border-radius:var(--radius-sm);outline:2px solid #4fa3c7}.question-block.active .question-number{color:var(--text)}.question-options{gap:6px;margin:10px 0 0;padding:0;list-style:none;display:grid}.question-options label{border-radius:var(--radius-sm);cursor:pointer;background:#ffffff08;border:1px solid #ffffff14;align-items:flex-start;gap:10px;padding:10px 12px;display:flex}.question-options label:hover{border-color:#7cc4e459}.question-options label.selected{background:#4fa3c724;border-color:#4fa3c7}.question-options input[type=radio],.question-options input[type=checkbox]{opacity:0;pointer-events:none;position:absolute}.question-options label:focus-within{outline-offset:2px;outline:2px solid #4fa3c7}.option-number{border-radius:var(--radius-sm);color:#0d1d25;background:#8fc9e2;flex:none;place-items:center;width:24px;height:24px;font-size:12px;font-weight:650;display:inline-grid}.option-body{min-width:0;color:var(--text);gap:3px;font-size:14px;line-height:1.45;display:grid}.option-body small{color:var(--text);font-size:12.5px}.question-other input[type=text]{box-sizing:border-box;border-radius:var(--radius-sm);width:100%;color:var(--text);background:var(--surface-2);font:inherit;border:1px solid #4fa3c7;margin-top:6px;padding:9px 11px;font-size:14px}.question-card>footer{justify-content:flex-end;padding-top:14px}.question-card button{border-radius:var(--radius-sm);min-height:36px;padding:0 14px;font-weight:650}.question-card button:disabled{cursor:not-allowed;opacity:.48}.task-run-index,.release-monitor{margin-top:18px;overflow:hidden}.release-monitor .source-heading button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);background:var(--surface-2);padding:8px 12px}.release-monitor .source-heading button:disabled{opacity:.55}.release-monitor-grid{border-top:1px solid var(--line);grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);display:grid}.release-monitor-column+.release-monitor-column{border-left:1px solid var(--line)}.release-monitor-column>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:14px;padding:16px 20px;display:flex}.release-monitor-column h3{margin:2px 0 0}.benchmark-run-card{border-bottom:1px solid var(--line);padding:14px 20px}.benchmark-run-card>div:first-child{justify-content:space-between;align-items:center;gap:12px;display:flex}.benchmark-run-card small{color:var(--muted);margin-top:4px;display:block}.benchmark-run-facts{color:var(--muted);flex-wrap:wrap;gap:8px 18px;margin-top:9px;font-size:12px;display:flex}.release-readiness-facts{margin:0;padding:4px 20px 12px}.release-readiness-facts>div{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:10px 0;display:flex}.release-readiness-facts dt{color:var(--muted)}.release-readiness-facts dd{text-align:right;margin:0}.release-blockers{border:1px solid color-mix(in srgb, var(--warning) 35%, var(--line));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--warning) 7%, transparent);margin:0 20px 14px;padding:12px 14px}.release-blockers ul{color:var(--muted);margin:8px 0 0;padding-left:18px}.release-blockers li+li{margin-top:5px}.task-index-controls{border-bottom:1px solid var(--line);gap:8px;padding:0 20px 16px;display:flex}.task-index-controls button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface-2);padding:7px 12px}.task-index-controls button[aria-pressed=true]{color:var(--text);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 15%, var(--surface-2))}.task-run-list{display:grid}.task-run-card{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;padding:15px 20px;display:grid}.task-run-card[data-active=true]{box-shadow:inset 3px 0 var(--accent);background:color-mix(in srgb, var(--accent) 5%, transparent)}.task-run-card[data-selected=true]{outline:1px solid var(--accent);outline-offset:-1px}.task-run-main{min-width:0}.task-run-main>div{align-items:center;gap:9px;display:flex}.task-run-main strong,.task-run-main small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.task-run-main small,.task-run-meta{color:var(--muted)}.active-run-tag{border:1px solid var(--accent);border-radius:var(--radius-sm);color:var(--accent);padding:2px 7px;font-size:11px}.task-run-meta{justify-content:flex-end;align-items:center;gap:12px;font-size:12px;display:flex}.task-index-empty,.task-index-warning{color:var(--muted);margin:0;padding:18px 20px}.task-index-warning{border-top:1px solid var(--line);color:var(--warning)}.task-run-meta button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);background:var(--surface-2);padding:6px 9px}.task-run-meta button[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.task-timeline{border-top:1px solid var(--line)}.task-timeline>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;display:flex}.task-timeline h3{margin:2px 0 0}.timeline-continuity{color:var(--muted);border-bottom:1px solid var(--line);flex-wrap:wrap;gap:10px 24px;padding:12px 20px;display:flex}.timeline-events{margin:0;padding:0;list-style:none}.timeline-events li{border-bottom:1px solid var(--line);grid-template-columns:12px minmax(0,1fr) auto;align-items:start;gap:12px;padding:13px 20px;display:grid}.timeline-events small,.timeline-events p{color:var(--muted);margin:3px 0 0;display:block}.timeline-dot{border-radius:var(--radius-sm);background:var(--muted);width:9px;height:9px;margin-top:5px}.timeline-dot.tone-positive{background:var(--positive)}.timeline-dot.tone-warning{background:var(--warning)}.timeline-dot.tone-danger{background:var(--danger)}.timeline-dot.tone-info{background:var(--accent)}.recovery-summary{grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.retained-content-note{color:var(--muted);border-bottom:1px solid var(--line);margin:0;padding:10px 20px;font-size:12px}.next-action-card{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--accent) 7%, transparent);grid-template-columns:minmax(180px,.45fr) 1fr auto;align-items:center;gap:18px;padding:16px 20px;display:grid}.next-action-card span,.next-action-card strong{display:block}.next-action-card span,.next-action-card p,.next-action-card small{color:var(--muted)}.next-action-card p{margin:0}.handoff-summary{grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.workspace-stack>.surface,.workspace-view>.surface,.workspace-stack>.evidence-section,.workspace-view>.evidence-section{margin-top:0}:root[data-piagent-color-mode=light] .task-heading h2,:root[data-piagent-color-mode=light] .task-empty h2,:root[data-piagent-color-mode=light] .criterion-copy p,:root[data-piagent-color-mode=light] .compact-panel dd,:root[data-piagent-color-mode=light] .chat-heading h2,:root[data-piagent-color-mode=light] .chat-message strong,:root[data-piagent-color-mode=light] .chat-message p,:root[data-piagent-color-mode=light] .attachment-list strong,:root[data-piagent-color-mode=light] .diff-toolbar strong,:root[data-piagent-color-mode=light] .activity-copy strong,:root[data-piagent-color-mode=light] .activity-result strong,:root[data-piagent-color-mode=light] .evidence-card h3,:root[data-piagent-color-mode=light] .budget-grid dd,:root[data-piagent-color-mode=light] .session-options-copy h2,:root[data-piagent-color-mode=light] .session-options-unavailable strong,:root[data-piagent-color-mode=light] .lifecycle-copy h2,:root[data-piagent-color-mode=light] .lifecycle-state strong{color:var(--text)}:root[data-piagent-color-mode=light] .chat-body,:root[data-piagent-color-mode=light] .activity-row{background:#62740006}:root[data-piagent-color-mode=light] .source-tabs{background:var(--surface)}:root[data-piagent-color-mode=light] .source-tabs button:hover{color:var(--text)}:root[data-piagent-color-mode=light] .source-action-warning,:root[data-piagent-color-mode=light] .detail-reconciliation-warning{color:var(--muted);background:#ab740014}:root[data-piagent-color-mode=light] .chat-message,:root[data-piagent-color-mode=light] .chat-tool-live,:root[data-piagent-color-mode=light] .chat-tool-result,:root[data-piagent-color-mode=light] .held-queue li,:root[data-piagent-color-mode=light] .log-preview{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .chat-user{background:#506db712}:root[data-piagent-color-mode=light] .chat-composer-preview,:root[data-piagent-color-mode=light] .unchanged-region{background:var(--surface)}:root[data-piagent-color-mode=light] .chat-composer-preview textarea,:root[data-piagent-color-mode=light] .session-options-controls select{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .review-state button,:root[data-piagent-color-mode=light] .commit-summary-output button,:root[data-piagent-color-mode=light] .confirm-actions button,:root[data-piagent-color-mode=light] .session-option-actions button{color:var(--text);background:var(--surface-strong)}:root[data-piagent-color-mode=light] .commit-summary-panel h3,:root[data-piagent-color-mode=light] .commit-summary-output>strong{color:var(--text)}:root[data-piagent-color-mode=light] .commit-summary-output{background:#ffffffbf}:root[data-piagent-color-mode=light] .diff-line code,:root[data-piagent-color-mode=light] .split-line code{color:var(--muted)}:root[data-piagent-color-mode=light] .diff-line>span,:root[data-piagent-color-mode=light] .split-line>span{color:#92988d}:root[data-piagent-color-mode=light] .syntax-keyword,:root[data-piagent-color-mode=light] .syntax-string,:root[data-piagent-color-mode=light] .syntax-number,:root[data-piagent-color-mode=light] .syntax-comment,:root[data-piagent-color-mode=light] .syntax-literal,:root[data-piagent-color-mode=light] .syntax-property{color:var(--muted)}:root[data-piagent-color-mode=light] .mode-switch .MuiToggleButton-root.Mui-selected{color:var(--text);background:var(--surface-2)}:root[data-piagent-color-mode=light] .diff-added{background:#14775f1a}:root[data-piagent-color-mode=light] .diff-added code,:root[data-piagent-color-mode=light] .diff-added b{color:var(--muted)}:root[data-piagent-color-mode=light] .diff-deleted{background:#c43f4c1a}:root[data-piagent-color-mode=light] .diff-deleted code,:root[data-piagent-color-mode=light] .diff-deleted b{color:var(--muted)}:root[data-piagent-color-mode=light] .confirm-dialog{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .confirm-dialog h3,:root[data-piagent-color-mode=light] .confirm-dialog>p:not(.section-kicker){color:var(--text)}:root[data-piagent-color-mode=light] .revert-diff{background:var(--surface)}:root[data-piagent-color-mode=light] .approval-card{color:var(--text);background:linear-gradient(135deg,#fff7ef,#fff);border-color:#d7b18f}:root[data-piagent-color-mode=light] .question-card{color:var(--text);background:linear-gradient(135deg,#f1f9fc,#fff);border-color:#9cc8da}:root[data-piagent-color-mode=light] .question-card h2,:root[data-piagent-color-mode=light] .question-block legend,:root[data-piagent-color-mode=light] .option-body{color:var(--text)}:root[data-piagent-color-mode=light] .question-hint,:root[data-piagent-color-mode=light] .question-number,:root[data-piagent-color-mode=light] .question-multi,:root[data-piagent-color-mode=light] .option-body small{color:var(--muted)}:root[data-piagent-color-mode=light] .question-chip{color:var(--muted);border-color:#9cc8da}:root[data-piagent-color-mode=light] .question-options label{background:var(--surface);border-color:#d6e6ed}:root[data-piagent-color-mode=light] .question-options label.selected{background:var(--surface-2);border-color:#3b8fb3}:root[data-piagent-color-mode=light] .question-other input[type=text]{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .question-options label.selected .option-number{color:#fff;background:#1e6f92}:root[data-piagent-color-mode=light] .question-card .secondary-action{color:var(--text);background:var(--surface);border-color:#b9d3de}:root[data-piagent-color-mode=light] .question-card .secondary-action:hover:not(:disabled){background:var(--surface);border-color:#3b8fb3}:root[data-piagent-color-mode=light] .approval-card h2,:root[data-piagent-color-mode=light] .approval-preview,:root[data-piagent-color-mode=light] .approval-facts dd{color:var(--text)}:root[data-piagent-color-mode=light] .approval-preview{background:var(--surface)}:root[data-piagent-color-mode=light] .approval-reason,:root[data-piagent-color-mode=light] .approval-targets,:root[data-piagent-color-mode=light] .approval-consequences{color:var(--muted)}@media (max-width:1080px){.lifecycle-panel{grid-template-columns:1fr auto}.lifecycle-actions{grid-column:1/-1;justify-content:flex-start}.lifecycle-result{grid-column:1/-1}.runtime-strip{grid-template-columns:repeat(3,1fr)}.runtime-strip>div:nth-child(3){border-right:0}.runtime-strip>div:nth-child(-n+3){border-bottom:1px solid var(--line)}.content-grid{grid-template-columns:1fr}.context-rail,.evidence-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:899px){.source-body{grid-template-columns:1fr}.file-panel{border-right:0;border-bottom:1px solid var(--line)}.file-list{max-height:300px}.diff-empty{min-height:300px}}@media (max-width:720px){.release-monitor-grid{grid-template-columns:1fr}.release-monitor-column+.release-monitor-column{border-left:0;border-top:1px solid var(--line)}.recovery-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.handoff-summary,.next-action-card,.commit-summary-panel,.approval-facts,.approval-consequences{grid-template-columns:1fr}.approval-card>header,.approval-card>footer{flex-direction:column;align-items:flex-start}.approval-card>footer button{width:100%}.question-card{padding:16px}.question-card>header,.question-card>footer{flex-direction:column;align-items:stretch}.question-card>footer{flex-direction:column-reverse}.question-card>footer button{width:100%}.session-options,.session-options-controls{grid-template-columns:1fr}.effect-ack,.session-option-actions,.session-options-controls>small{grid-column:1}.lifecycle-panel{grid-template-columns:1fr;align-items:stretch}.lifecycle-state{border-left:0;padding:0}.lifecycle-actions{grid-column:1}.lifecycle-actions button{flex:150px}.lifecycle-result{grid-column:1}.topbar{grid-template-columns:1fr auto;min-height:60px;padding:0 16px}.session-title,.read-only-badge{display:none}.workspace{width:min(100% - 24px,1460px);padding-top:12px}.runtime-strip{grid-template-columns:repeat(2,1fr)}.runtime-strip>div{border-bottom:1px solid var(--line);min-height:62px;padding:11px}.runtime-strip>div:nth-child(2n){border-right:0}.runtime-strip>div:nth-last-child(-n+2){border-bottom:0}.task-dashboard{padding:19px 14px}.chat-heading{flex-direction:column;align-items:flex-start;padding:15px}.chat-heading>div:last-child{flex-direction:column;align-items:flex-start}.chat-body{padding:13px}.chat-message{width:94%}.chat-composer-preview,.task-heading{grid-template-columns:1fr}.progress-number{text-align:left;align-items:baseline;gap:10px;display:flex}.progress-number strong{font-size:25px}.progress-track{margin:18px 0 24px}.criterion-card{grid-template-columns:32px minmax(0,1fr);gap:10px}.criterion-card>.status-pill{grid-column:2}.criterion-copy>div{flex-direction:column;align-items:flex-start;gap:5px}.context-rail{grid-template-columns:1fr}.task-empty{grid-template-columns:1fr;min-height:340px;padding:28px 22px}.source-tabs{padding:0 8px;overflow-x:auto}.source-tabs button{flex:none}.source-heading{padding:16px}.source-heading>span,.file-provenance,.file-evidence{display:none}.file-row{grid-template-columns:26px minmax(0,1fr) auto}.diff-toolbar{flex-direction:column;align-items:flex-start}.panel-heading{flex-direction:column;align-items:flex-start;padding:16px}.activity-row{grid-template-columns:10px minmax(0,1fr)}.activity-result{text-align:left;grid-column:2;grid-template-columns:auto auto 1fr}.activity-result button{grid-column:auto;justify-self:end}.section-title-row{flex-direction:column;align-items:flex-start;gap:8px}.section-title-row>span{text-align:left;max-width:100%}.evidence-grid{grid-template-columns:1fr}.evidence-card{min-height:auto}.task-run-card{grid-template-columns:1fr;gap:9px}.task-run-meta{flex-wrap:wrap;justify-content:flex-start}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media (forced-colors:active){.status-dot,.activity-state,.progress-track span,.context-meter span{forced-color-adjust:none;background:highlight}.file-row[data-selected=true],.source-tabs button[aria-selected=true]{outline:2px solid highlight}}@keyframes piagent-pulse{0%,to{opacity:1}50%{opacity:.3}}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important}}.decision-queue{gap:10px;display:grid}.decision-steps{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);gap:8px;padding:10px 12px;display:grid}.decision-steps>strong{color:var(--warning);font-size:12px}.decision-steps ol{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.decision-steps li{min-width:0;max-width:100%}.decision-step{border:1px solid var(--line);border-radius:var(--radius-sm);max-width:100%;min-height:32px;color:var(--muted);background:var(--surface-2);font:inherit;cursor:pointer;align-items:center;gap:6px;padding:4px 10px 4px 5px;font-size:11px;display:inline-flex}.decision-step:hover{border-color:var(--line-strong);color:var(--text)}.decision-step.current{border-color:var(--warning);color:var(--text);background:color-mix(in srgb, var(--warning) 12%, var(--surface-2))}.decision-step:focus-visible{outline:2px solid var(--warning);outline-offset:2px}.decision-step-number{width:20px;height:20px;color:var(--bg);background:var(--muted);border-radius:50%;flex:none;place-items:center;font-size:11px;font-weight:650;display:inline-grid}.decision-step.current .decision-step-number{background:var(--warning)}.decision-step-kind{flex:none;font-weight:650}.decision-step-role{color:var(--quiet);flex:none}.decision-step-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:260px;overflow:hidden}.attention-toasts{z-index:1400;pointer-events:none;gap:8px;width:min(360px,100vw - 32px);display:grid;position:fixed;bottom:44px;right:16px}.attention-toast{border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--text);background:var(--surface);pointer-events:auto;align-items:flex-start;gap:10px;padding:11px 10px 11px 12px;animation:.22s ease-out attention-in;display:flex;box-shadow:0 14px 36px #00000047}.attention-toast-mark{background:var(--positive);border-radius:50%;flex:none;width:10px;height:10px;margin-top:4px}.attention-toast.tone-error .attention-toast-mark{background:var(--danger)}.attention-toast.tone-neutral .attention-toast-mark{background:var(--muted)}.attention-toast.tone-warning{border-color:var(--warning)}.attention-toast.tone-warning .attention-toast-mark{background:var(--warning);animation:1.4s ease-in-out infinite piagent-pulse}.attention-toast-body{flex:1;gap:3px;min-width:0;display:grid}.attention-toast-body strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;overflow:hidden}.attention-toast-title{font-weight:600}.attention-toast-body small{color:var(--muted);font-size:11.5px;line-height:1.4}.attention-toast-actions{flex:none;align-items:center;gap:2px;display:flex}.attention-open{border:1px solid var(--line-strong);border-radius:var(--radius-sm);min-height:30px;color:var(--text);background:var(--surface-2);font:inherit;cursor:pointer;padding:0 11px;font-size:11.5px;font-weight:600}.attention-close{border-radius:var(--radius-sm);width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border:0;font-size:18px;line-height:1}.attention-open:focus-visible,.attention-close:focus-visible{outline:2px solid var(--warning);outline-offset:2px}.attention-more{color:var(--muted);text-align:right;margin:0;padding:0 4px;font-size:11px}@keyframes attention-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}.session-item.attention{box-shadow:inset 3px 0 0 var(--warning);animation:2.4s ease-in-out infinite attention-glow}.session-item.fresh{box-shadow:inset 3px 0 0 var(--positive)}@keyframes attention-glow{0%,to{background:0 0}50%{background:color-mix(in srgb, var(--warning) 9%, transparent)}}@media (prefers-reduced-motion:reduce){.attention-toast,.session-item.attention,.attention-toast.tone-warning .attention-toast-mark{animation:none}}@media (max-width:600px){.attention-toasts{width:calc(100vw - 16px);top:68px;right:8px}.decision-step-label{max-width:150px}}.line-comment-anchor{width:100%;color:inherit;font:inherit;text-align:right;cursor:pointer;background:0 0;border:0;padding:0}.line-comment-anchor:hover,.line-comment-anchor:focus-visible{color:var(--amber);text-decoration:underline}.line-notes{border-block:1px solid var(--line);background:var(--surface);gap:6px;min-width:max-content;max-width:100%;padding:7px 12px 8px 102px;font-size:11px;line-height:1.5;display:grid}.split-code .line-notes{padding-left:54px}.file-findings{margin:10px 0;padding-left:12px}.line-finding{border-radius:var(--radius-sm);white-space:normal;background:#e3a33f17;border-left:3px solid #e3a33f;gap:2px;max-width:760px;padding:6px 9px;display:grid}.line-finding.severity-blocking{background:#ff68741a;border-left-color:#ff6874}.line-finding.severity-minor{background:#6f9fe017;border-left-color:#6f9fe0}.line-finding strong{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:11px}.line-comment{border-left:3px solid var(--amber);border-radius:var(--radius-sm);white-space:pre-wrap;background:#efbd7814;align-items:baseline;gap:10px;max-width:760px;padding:6px 9px;display:flex}.line-comment span{flex:1}.line-comment button,.line-comment-editor button,.line-comment-actions button{border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:inherit;cursor:pointer;background:0 0;padding:3px 9px;font-size:11px}.line-comment-editor{gap:6px;max-width:760px;display:grid}.line-comment-editor textarea{border:1px solid var(--line-strong);border-radius:var(--radius-sm);width:100%;min-width:320px;color:inherit;background:var(--background,transparent);font:inherit;resize:vertical;padding:7px 9px}.line-comment-editor>div,.line-comment-actions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.line-comment-editor button[type=submit],.line-comment-actions .primary{border-color:var(--amber);color:#1b1408;background:var(--amber);font-weight:650}.line-comment-editor button:disabled{opacity:.5;cursor:not-allowed}.line-comment-bar{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);gap:8px;margin:10px 0;padding:10px 12px;font-size:12px;display:grid}.line-comment-bar>div:first-child{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.line-comment-bar small{color:var(--amber)}.line-comment-bar ul{gap:3px;max-height:160px;margin:0;padding:0;list-style:none;display:grid;overflow:auto}.line-comment-bar li{min-width:0;color:var(--muted);gap:8px;display:flex}.line-comment-bar li code{color:inherit;flex-shrink:0}.line-comment-bar li span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.line-comment-bar li.changed{opacity:.7}.line-comment-bar li em{color:var(--amber);font-style:normal}.streaming-answer .markdown-message:last-child>:last-child:after{content:"";vertical-align:-.15em;background:var(--accent);border-radius:1px;width:.5em;height:1.05em;margin-left:3px;animation:1s step-end infinite piagent-caret;display:inline-block}@keyframes piagent-caret{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.streaming-answer .markdown-message:last-child>:last-child:after{animation:none}}.attention-toast{animation:.2s cubic-bezier(.2,.7,.2,1) piagent-toast-in}@keyframes piagent-toast-in{0%{opacity:0;transform:translateY(8px)}}@media (max-width:720px){.attention-toasts{top:60px;bottom:auto}}@media (prefers-reduced-motion:reduce){.attention-toast{animation:none}}
|
|
1
|
+
:root{color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;--bg:var(--piagent-palette-background-default,#09090b);--surface:var(--piagent-palette-background-paper,#111114);--text:var(--piagent-palette-text-primary,#ededf0);--muted:var(--piagent-palette-text-secondary,#a3a3ad);--line:var(--piagent-palette-divider,#26262c);--accent:var(--piagent-palette-primary-main,#d8ff7a);--on-accent:var(--piagent-palette-primary-contrastText,#111300);--positive:var(--piagent-palette-secondary-main,#8be9c8);--warning:var(--piagent-palette-warning-main,#efba63);--danger:var(--piagent-palette-error-main,#ff7f86);--surface-strong:color-mix(in srgb, var(--text) 5%, var(--surface));--surface-2:color-mix(in srgb, var(--text) 4%, var(--surface));--line-strong:color-mix(in srgb, var(--text) 18%, var(--surface));--quiet:var(--muted);--accent-soft:color-mix(in srgb, var(--accent) 12%, transparent);--blue:color-mix(in srgb, #7aa2f7 38%, var(--text));--amber:var(--warning);--red:var(--danger);--page-glow:transparent;--radius:8px;--radius-sm:6px;font-family:system-ui,-apple-system,BlinkMacSystemFont,SF Pro Text,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}html{background:var(--bg)}body{min-width:320px;min-height:100vh;color:var(--text);background:radial-gradient(circle at 62% -20%, var(--page-glow) 0, transparent 36rem), var(--bg);margin:0}button,input,select,textarea{font:inherit}strong,h1,h2,h3,p{overflow-wrap:anywhere}button:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.skip-link{z-index:100;border-radius:var(--radius-sm);color:#08130f;background:var(--accent);padding:9px 12px;font-size:11px;font-weight:650;position:fixed;top:8px;left:8px;transform:translateY(-160%)}.skip-link:focus{transform:translateY(0)}.app-shell{min-height:100vh}.topbar{z-index:10;-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);background:#090c12db;border-bottom:1px solid #354052b8;grid-template-columns:1fr minmax(220px,auto) 1fr;align-items:center;gap:24px;min-height:68px;padding:0 28px;display:grid;position:sticky;top:0}.brand,.session-title,.topbar-actions,.runtime-strip>div,.task-meta,.health-line{align-items:center;display:flex}.brand{gap:11px}.brand>div,.session-title{flex-direction:column;display:flex}.brand strong{letter-spacing:.01em;font-size:15px}.brand small,.session-title small{color:var(--quiet);letter-spacing:.04em;font-size:11px}.brand-mark{border-radius:var(--radius-sm);width:34px;height:34px;color:var(--accent);background:var(--accent-soft);border:1px solid #64e0b56b;place-items:center;font-family:Georgia,serif;font-size:21px;display:grid}.session-title{text-align:center;min-width:0}.session-title strong{text-overflow:ellipsis;white-space:nowrap;max-width:360px;font-size:13px;overflow:hidden}.topbar-actions{justify-content:flex-end;gap:10px}.read-only-badge{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;padding:5px 9px;font-size:11px;font-weight:600}.workspace{width:min(1460px,100% - 48px);margin:0 auto;padding:28px 0 64px}.runtime-strip{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);grid-template-columns:repeat(6,minmax(0,1fr));display:grid;overflow:hidden}.runtime-strip>div{border-right:1px solid var(--line);flex-direction:column;justify-content:center;align-items:flex-start;gap:7px;min-width:0;min-height:70px;padding:13px 16px}.runtime-strip>div:last-child{border-right:0}.runtime-strip span:first-child{color:var(--quiet);letter-spacing:.1em;text-transform:uppercase;font-size:11px;font-weight:650}.runtime-strip strong{max-width:100%;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.content-grid{grid-template-columns:minmax(0,1fr) 290px;align-items:start;gap:18px;margin-top:18px;display:grid}.surface{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);box-shadow:0 22px 60px #0000001f}.task-dashboard{padding:clamp(20px,3vw,34px)}.task-heading{grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:24px;display:grid}.section-kicker{color:var(--accent);letter-spacing:.14em;text-transform:uppercase;margin:0 0 7px;font-size:11px;font-weight:650}.task-heading h2,.task-empty h2{max-width:900px;color:var(--text);letter-spacing:-.035em;margin:0;font-size:clamp(23px,3vw,38px);font-weight:650;line-height:1.18}.task-meta{color:var(--muted);flex-wrap:wrap;gap:12px;margin-top:15px;font-size:12px}.task-meta>span:not(.status-pill){border-left:1px solid var(--line-strong);padding-left:12px}.progress-number{text-align:right;min-width:116px}.progress-number strong{color:var(--accent);letter-spacing:-.05em;font-size:32px;font-weight:650;display:block}.progress-number span{color:var(--muted);font-size:11px}.progress-track{border-radius:var(--radius-sm);background:#242b36;height:5px;margin:26px 0 30px;overflow:hidden}.progress-track span{border-radius:inherit;background:linear-gradient(90deg,#45c89b,#7ee6bd);height:100%;transition:width .25s;display:block;box-shadow:0 0 20px #64e0b552}.status-pill{width:-moz-fit-content;width:fit-content;min-width:0;color:var(--text);white-space:nowrap;align-items:center;gap:6px;font-size:11px;font-weight:600;line-height:1.2;display:inline-flex}.status-dot{width:6px;height:6px;box-shadow:0 0 0 3px color-mix(in srgb, currentColor 13%, transparent);background:currentColor;border-radius:50%;flex:none}.tone-positive{color:var(--accent)}.tone-warning{color:var(--amber)}.tone-danger{color:var(--red)}.tone-info{color:var(--blue)}.tone-neutral{color:var(--muted)}.criteria-heading{justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:12px;display:flex}.criteria-heading h2{letter-spacing:.01em;margin:0;font-size:13px}.criteria-heading>span{color:var(--quiet);font-size:11px}.criteria-list{gap:8px;margin:0;padding:0;list-style:none;display:grid}.criterion-card{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:14px;min-height:72px;padding:12px 15px;display:grid}.criterion-index{border:1px solid color-mix(in srgb, currentColor 28%, transparent);border-radius:var(--radius-sm);background:color-mix(in srgb, currentColor 7%, transparent);place-items:center;width:32px;height:32px;font-size:11px;font-weight:650;display:grid}.criterion-copy{min-width:0}.criterion-copy>div{align-items:center;gap:9px;display:flex}.criterion-copy p{color:var(--text);margin:0;font-size:13px;line-height:1.45}.criterion-copy small{color:var(--quiet);margin-top:4px;font-size:11px;display:block}.critical-tag{border-radius:var(--radius-sm);color:var(--amber);letter-spacing:.08em;text-transform:uppercase;border:1px solid #efba633d;flex:none;padding:3px 6px;font-size:10px;font-weight:650}.blocker{border-radius:var(--radius-sm);background:#ff7f8612;border:1px solid #ff7f8640;grid-template-columns:auto 1fr;gap:14px;margin:-9px 0 24px;padding:12px 14px;display:grid}.blocker span{color:var(--red);text-transform:uppercase;font-size:11px;font-weight:650}.blocker p{color:var(--text);margin:0;font-size:12px}.work-plan{border-top:1px solid var(--line);color:var(--muted);margin-top:16px;padding-top:15px}.work-plan summary{cursor:pointer;font-size:12px;font-weight:600}.work-plan ol{gap:9px;margin:14px 0 0;padding:0;list-style:none;display:grid}.work-plan li{grid-template-columns:100px 1fr;align-items:center;gap:12px;font-size:12px;display:grid}.context-rail{gap:18px;display:grid}.compact-panel{padding:18px}.compact-panel dl{margin:0}.compact-panel dl>div{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;min-height:39px;display:flex}.compact-panel dl>div:last-child{border-bottom:0}.compact-panel dt{color:var(--muted);font-size:11px}.compact-panel dd{max-width:170px;color:var(--text);text-overflow:ellipsis;white-space:nowrap;margin:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;overflow:hidden}.health-line{justify-content:space-between;gap:12px}.health-line>span{color:var(--quiet);font-size:11px}.health-issue{border-top:1px solid var(--line);color:var(--muted);margin:13px 0 0;padding-top:12px;font-size:11px;line-height:1.5}.task-empty{grid-template-columns:auto minmax(0,620px);place-content:center;gap:24px;min-height:420px;padding:48px;display:grid}.task-empty .empty-mark{border-radius:var(--radius-sm);width:64px;height:64px;color:var(--accent);background:var(--accent-soft);border:1px solid #64e0b547;place-items:center;font-family:Georgia,serif;font-size:38px;display:grid}.task-empty p:last-child{color:var(--muted);margin:13px 0 0;font-size:13px;line-height:1.6}.chat-panel{margin-top:18px;position:relative;overflow:hidden}.chat-panel[data-dragging]{outline:2px dashed var(--accent);outline-offset:-4px}.chat-drop-overlay{z-index:4;border-radius:var(--radius-sm);background:color-mix(in srgb, var(--surface-strong) 88%, transparent);pointer-events:none;text-align:center;align-content:center;justify-items:center;gap:6px;padding:16px;display:grid;position:absolute;inset:0}.chat-drop-overlay strong{color:var(--accent);font-size:13px}.chat-drop-overlay small{color:var(--quiet);font-size:11px}@media (prefers-reduced-motion:no-preference){.chat-drop-overlay{animation:.12s ease-out chat-drop-in}}@keyframes chat-drop-in{0%{opacity:0}to{opacity:1}}.chat-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:20px;min-height:78px;padding:17px 22px;display:flex}.chat-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.chat-heading>div:last-child{color:var(--quiet);align-items:center;gap:12px;font-size:11px;display:flex}.chat-read-state{border-radius:var(--radius-sm);color:var(--amber);background:#efba630f;border:1px solid #efba633b;padding:5px 8px}.chat-body{background:var(--surface-2);overscroll-behavior:contain;gap:11px;max-height:620px;padding:18px 20px;display:grid;overflow:auto}.chat-empty{color:var(--quiet);text-align:center;margin:0;padding:28px;font-size:11px}.load-older{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface);cursor:pointer;justify-self:center;padding:6px 10px;font-size:11px}.chat-message{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);width:min(82%,900px);padding:12px 14px}.chat-message>div{justify-content:space-between;align-items:center;gap:12px;display:flex}.chat-message strong{color:var(--text);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.chat-message time,.chat-message small{color:var(--quiet);font-size:10.5px}.chat-message p{color:var(--text);white-space:pre-wrap;margin:7px 0 0;font-size:12px;line-height:1.6}.chat-message small{color:var(--amber);margin-top:7px;display:block}.chat-user{background:#75a7ff12;border-color:#75a7ff38;justify-self:end}.chat-assistant{justify-self:start}.chat-streaming{box-shadow:inset 2px 0 var(--accent);border-color:#64e0b542}.stream-indicator{color:var(--accent);font-size:10.5px}.chat-tool-live,.chat-tool-result{border:1px solid var(--line);border-radius:var(--radius-sm);width:-moz-fit-content;width:fit-content;max-width:82%;color:var(--quiet);background:var(--surface-2);align-items:center;gap:9px;padding:8px 11px;font-size:10.5px;display:flex}.chat-tool-live strong,.chat-tool-result strong{color:var(--text);font-family:ui-monospace,monospace;font-size:11px}.tool-spinner{border:1px solid var(--blue);border-right-color:#0000;border-radius:50%;width:7px;height:7px;animation:.8s linear infinite spin}.held-queue{border-top:1px solid var(--line);background:#efba6309;padding:12px 16px}.held-queue-heading{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.held-queue-heading strong{color:var(--text);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.held-queue-heading span{color:var(--amber);font-size:10.5px}.held-queue ol{gap:7px;max-height:260px;margin:0;padding:0;list-style:none;display:grid;overflow:auto}.held-queue li{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);grid-template-columns:minmax(0,1fr) auto;gap:7px 12px;padding:9px 10px;display:grid}.held-queue li[data-state=quarantined]{border-color:#efba6340}.held-queue p{color:var(--text);text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:11px;line-height:1.45;overflow:hidden}.held-queue textarea{resize:vertical;border:1px solid var(--line);border-radius:var(--radius-sm);min-width:0;color:var(--text);background:var(--surface-2);padding:8px 9px;font-size:11px}.held-queue li>div{align-items:start;gap:5px;display:flex}.held-queue button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface);cursor:pointer;padding:4px 7px;font-size:10.5px}.held-queue button:disabled{cursor:not-allowed;opacity:.45}.held-queue small{color:var(--amber);grid-column:1/-1;font-size:10px}.chat-composer-preview{border-top:1px solid var(--line);background:var(--surface-2);grid-template-columns:minmax(0,1fr) auto;gap:10px;padding:14px 16px;display:grid}.attachment-list{flex-wrap:wrap;grid-column:1/-1;gap:7px;margin:0;padding:0;list-style:none;display:flex}.attachment-list li{border-radius:var(--radius-sm);background:#75a7ff0f;border:1px solid #75a7ff38;align-items:center;gap:8px;max-width:260px;padding:7px 8px;display:flex}.attachment-list span{flex-direction:column;min-width:0;display:flex}.attachment-list strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.attachment-list small{color:var(--quiet);font-size:10px}.attachment-list button{min-width:0;padding:3px 6px;font-size:10px}.chat-composer-preview textarea{resize:none;border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--quiet);background:var(--surface-2);padding:10px 12px;font-size:11px}.chat-composer-preview button{border:1px solid var(--line);border-radius:var(--radius-sm);min-width:76px;color:var(--quiet);background:var(--surface-strong)}.composer-actions{grid-template-columns:repeat(2,minmax(76px,auto));gap:6px;display:grid}.composer-actions .interrupt-send{color:var(--amber);grid-column:1/-1}.attachment-list li[data-kind=document]{background:#7ee7b212;border-color:#7ee7b24d}.attachment-picker{border:1px solid var(--line);border-radius:var(--radius-sm);width:-moz-fit-content;width:fit-content;color:var(--blue);cursor:pointer;align-items:center;padding:6px 9px;font-size:10.5px;display:inline-flex}.attachment-picker.disabled{cursor:not-allowed;opacity:.45}.attachment-picker input{opacity:0;width:1px;height:1px;position:absolute;overflow:hidden}.chat-composer-preview>small{color:var(--muted);grid-column:1/-1;font-size:10.5px}@keyframes spin{to{transform:rotate(360deg)}}.document-workspace{margin-top:0;overflow:hidden}.document-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:82px;padding:18px 22px;display:flex}.document-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.document-heading>span{color:var(--quiet);letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:600}.document-body{grid-template-columns:minmax(248px,320px) minmax(0,1fr);min-height:520px;display:grid}.document-list{border-right:1px solid var(--line);overscroll-behavior:contain;flex-direction:column;gap:10px;min-width:0;max-height:720px;padding:14px;display:flex;overflow:auto}.document-group{flex-direction:column;gap:2px;min-width:0;display:flex}.document-group-heading{flex-direction:column;padding:8px 6px 4px;display:flex}.document-group-heading strong{color:var(--quiet);letter-spacing:.08em;text-transform:uppercase;font-size:10.5px;font-weight:650}.document-group-heading span{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.document-row{border-radius:var(--radius-sm);cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:9px;min-width:0;padding:7px 8px;display:flex}.document-row-copy{flex-direction:column;flex:1;min-width:0;display:flex}.document-row-copy strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.document-row-copy small{color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;font-size:10.5px;overflow:hidden}.document-row-meta{color:var(--muted);flex-shrink:0;font-size:10.5px}.document-viewer{overscroll-behavior:contain;flex-direction:column;min-width:0;max-height:720px;display:flex;overflow:auto}.document-toolbar{z-index:2;border-bottom:1px solid var(--line);background:var(--surface-strong);justify-content:space-between;align-items:center;gap:14px;padding:12px 18px;display:flex;position:sticky;top:0}.document-toolbar strong{font-size:12px;display:block}.document-toolbar small{color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;display:block;overflow:hidden}.document-badges{flex-shrink:0;gap:6px;display:flex}.document-content{min-width:0;color:var(--text);padding:18px 22px;font-size:12px}.document-plain{font-family:var(--mono,ui-monospace, SFMono-Regular, Menlo, monospace);white-space:pre-wrap;word-break:break-word;margin:0;font-size:11px;line-height:1.7;overflow-x:auto}.document-table{border-collapse:collapse;width:100%;font-size:11px}.document-table th,.document-table td{border:1px solid var(--line);text-overflow:ellipsis;white-space:nowrap;max-width:320px;padding:5px 9px;overflow:hidden}.document-table th{background:var(--surface-strong);text-align:left;font-weight:650;position:sticky;top:0}.document-placeholder{height:100%;color:var(--muted);text-align:center;align-content:center;justify-items:center;gap:8px;padding:48px 24px;display:grid}.document-placeholder .MuiSvgIcon-root{opacity:.5;font-size:30px}.document-empty{color:var(--muted);padding:14px;font-size:11px}.change-report{--report-mark:#ff5a5f;gap:22px;display:grid}.change-report-actions{justify-content:flex-end;margin-bottom:8px;display:flex}.change-report-full{min-height:100%;color:var(--text);background:var(--bg);padding:28px max(16px,4vw) 48px;font-size:13px;position:relative}.change-report-full .change-report{max-width:1400px;margin:0 auto}.change-report-close{z-index:3;top:12px;right:16px;background:var(--surface-strong)!important;position:fixed!important}.change-report h2{margin:0 0 4px;font-size:18px}.change-report h3{margin:0 0 10px;font-size:14px}.change-report h4{margin:0 0 4px;font-size:13px}.change-report h5{color:var(--quiet);letter-spacing:.08em;text-transform:uppercase;margin:16px 0 8px;font-size:10.5px;font-weight:650}.change-report ul{margin:0;padding-left:18px}.change-report-note{color:var(--muted);margin:0 0 10px}.change-report-chips{flex-wrap:wrap;gap:6px;display:flex}.change-report-chips span{border:1px solid var(--line);color:var(--muted);border-radius:999px;padding:2px 9px;font-size:11px}.change-report-card{border:1px solid var(--line);background:var(--surface-strong);border-radius:4px;margin-bottom:14px;padding:14px}.change-report-pair{grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:12px;display:grid}.change-report-pair.narrow{grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),300px));margin-top:10px}.change-report-figure{min-width:0;margin:0}.change-report-figure figcaption{margin-bottom:5px;font-weight:600}.change-report-shot{border:1px solid var(--line);border-radius:4px;line-height:0;position:relative}.change-report-shot img{border-radius:3px;width:100%;display:block}.change-report-box{box-sizing:border-box;border:3px solid var(--report-mark);border-radius:3px;position:absolute}.change-report-box b,.change-report-number{width:20px;height:20px;color:var(--text);background:var(--report-mark);border-radius:50%;flex:none;place-items:center;font-size:11px;line-height:1;display:inline-grid}.change-report-box b{box-shadow:0 0 0 2px var(--surface-strong);position:absolute;top:-11px;left:-11px}.change-report-zoom-row{gap:6px;margin-bottom:12px;display:grid}.change-report-zoom-row p{align-items:center;gap:8px;margin:0;display:flex}.change-report-zoom{min-width:0}.change-report-zoom span{color:var(--quiet);font-size:11px}.change-report-crop{box-sizing:border-box;border:3px solid var(--report-mark);background-repeat:no-repeat;border-radius:4px;width:100%}.change-report-missing{border:1px dashed var(--line);color:var(--muted);text-align:center;border-radius:4px;padding:22px}.change-report details{margin-top:12px}.change-report summary{cursor:pointer;font-weight:600}.change-report-scroll{overflow-x:auto}.change-report-table{border-collapse:collapse;width:100%;font-size:11px}.change-report-table th,.change-report-table td{border:1px solid var(--line);text-align:left;vertical-align:top;padding:6px 9px}.change-report-table th{color:var(--quiet);font-weight:650}.change-report-table code{word-break:break-all;display:block}.change-report-result{font-weight:650}.change-report-result.passed{color:var(--accent)}.change-report-result.failed{color:var(--muted)}.change-report-result.skipped{color:var(--text)}@media (max-width:900px){.document-body{grid-template-columns:1fr}.document-list{border-right:0;border-bottom:1px solid var(--line);max-height:300px}}:root[data-piagent-color-mode=light] .document-row-copy strong,:root[data-piagent-color-mode=light] .document-content{color:var(--text)}.source-workspace{margin-top:0;overflow:hidden}.source-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:82px;padding:18px 22px;display:flex}.source-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.source-heading>span{color:var(--quiet);letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:600}.source-tabs{border-bottom:1px solid var(--line);background:var(--surface-2);min-width:0;padding:0 14px;display:flex}.source-tabs button{min-width:0;color:var(--muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:9px;padding:14px 15px 12px;font-size:11px;display:flex}.source-tabs button:hover{color:var(--text)}.source-tabs button[aria-selected=true]{border-bottom-color:var(--accent);color:var(--accent)}.source-tabs button b{border-radius:var(--radius-sm);min-width:20px;color:inherit;background:color-mix(in srgb, currentColor 10%, transparent);text-align:center;padding:2px 6px;font-size:10.5px}.source-body{grid-template-columns:minmax(248px,304px) minmax(0,1fr);min-height:480px;display:grid}.file-panel{border-right:1px solid var(--line);background:color-mix(in srgb, var(--bg) 72%, var(--surface));min-width:0}.file-panel-meta{border-bottom:1px solid var(--line);min-height:42px;color:var(--muted);justify-content:space-between;align-items:center;gap:14px;padding:0 14px;font-size:11px;display:flex}.file-panel-meta small{color:var(--quiet);letter-spacing:.08em;text-transform:uppercase;font-weight:650}.source-list-retry{border-radius:var(--radius-sm);color:var(--accent);font:inherit;background:0 0;border:1px solid;padding:4px 8px;font-weight:650}.file-list{overscroll-behavior:contain;max-height:620px;overflow:auto}.file-group-label{min-height:28px;color:var(--quiet);align-items:center;gap:6px;padding:5px 10px 3px}.file-group-label svg{width:14px;height:14px}.file-group-label span{min-width:0;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;font-weight:600}.file-row{border-radius:var(--radius-sm);width:100%;min-height:54px;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:26px minmax(0,1fr) auto;align-items:center;gap:9px;margin:0;padding:8px 9px;display:grid}.file-row:hover{background:#75a7ff0d}.file-row[data-selected=true]{box-shadow:inset 2px 0 var(--accent);background:#64e0b513}.file-status{border:1px solid var(--line-strong);border-radius:var(--radius-sm);width:23px;height:23px;color:var(--muted);place-items:center;font-family:ui-monospace,monospace;font-size:11px;font-weight:650;display:grid}.status-A,.status-U{color:var(--accent);border-color:#64e0b54d}.status-M,.status-R{color:var(--blue);border-color:#75a7ff4d}.status-D,.status-C{color:var(--red);border-color:#ff7f864d}.file-name{flex-direction:column;min-width:0;display:flex}.file-name strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;overflow:hidden}.file-name small,.file-provenance,.file-evidence{color:var(--quiet);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.file-provenance,.file-evidence{display:none}.file-stats{color:var(--muted);white-space:nowrap;font-family:ui-monospace,monospace;font-size:10.5px}.files-empty,.diff-empty{min-height:220px;color:var(--quiet);text-align:center;place-items:center;padding:28px;font-size:12px;display:grid}.diff-empty{background:repeating-linear-gradient(-45deg,#0000,#0000 13px,#ffffff03 13px 14px);min-height:100%}.error-state{color:var(--red)}.diff-viewer{background:var(--surface);min-width:0;overflow:auto}.diff-toolbar{border-bottom:1px solid var(--line);background:var(--surface);justify-content:space-between;align-items:center;gap:15px;min-height:55px;padding:9px 13px;display:flex}.diff-toolbar>div:first-child{align-items:center;gap:10px;min-width:0;display:flex}.diff-actions{align-items:center;gap:10px;display:flex}.review-state{color:var(--quiet);align-items:center;gap:8px;font-size:10.5px;display:flex}.review-state>span{white-space:nowrap}.review-state button{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#18202b;padding:0 9px;font-size:10.5px}.review-state button:disabled{cursor:not-allowed;opacity:.45}.review-reviewed>span{color:var(--accent)}.review-stale>span{color:var(--amber)}.source-mutation-preview{max-width:290px;color:var(--text);align-items:center;gap:8px;font-size:10.5px;display:flex}.source-mutation-preview>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.source-mutation-preview button{border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#42c2921a;border:1px solid #42c29266;flex:none;padding:0 10px;font-size:10.5px;font-weight:650}.source-mutation-preview button:disabled{cursor:not-allowed;opacity:.45}.source-revert-preview{max-width:290px;color:var(--text);align-items:center;gap:8px;font-size:10.5px;display:flex}.source-revert-preview>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.source-revert-preview button,.hunk-header .revert-action{border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#ff7f8617;border:1px solid #ff7f8661;flex:none;padding:0 10px;font-size:10.5px;font-weight:650}.source-revert-preview button:disabled{cursor:not-allowed;opacity:.45}.source-open-action button{border-radius:var(--radius-sm);min-height:28px;color:var(--text);white-space:nowrap;background:#75a7ff1a;border:1px solid #75a7ff61;padding:0 10px;font-size:10.5px;font-weight:650}.source-open-action button:disabled{cursor:wait;opacity:.55}.source-open-status{color:var(--text);background:#75a7ff14;border-bottom:1px solid #75a7ff38;padding:8px 14px;font-size:11px}.commit-summary-panel{border-bottom:1px solid var(--line);background:linear-gradient(120deg,#42c29214,#75a7ff0d);grid-template-columns:minmax(230px,.8fr) minmax(300px,1.5fr);align-items:start;gap:18px;padding:14px 16px;display:grid}.commit-summary-panel h3{color:var(--text);margin:1px 0 4px;font-size:14px}.commit-summary-panel>div>span{color:var(--quiet);font-size:10.5px}.commit-summary-panel>button{border-radius:var(--radius-sm);min-height:32px;color:var(--text);background:#42c2921a;border:1px solid #42c29266;justify-self:start;padding:0 12px;font-size:11px;font-weight:650}.commit-summary-output{border-radius:var(--radius-sm);background:#070a0f8c;border:1px solid #75a7ff33;gap:5px;padding:10px 12px;display:grid}.commit-summary-output>strong{color:var(--text);font:700 12px ui-monospace,monospace}.commit-summary-output>code{color:var(--text);white-space:pre-wrap;font-size:10.5px}.commit-summary-output>div{flex-wrap:wrap;gap:7px;margin-top:4px;display:flex}.commit-summary-output button{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:28px;color:var(--text);background:#18202b;padding:0 10px;font-size:10.5px}.commit-summary-output button:last-child{color:var(--text);background:#ecb35b17;border-color:#ecb35b59}.commit-summary-status{color:var(--text);grid-column:1/-1;margin:0;font-size:11px}.model-summary-dialog{border-color:#ecb35b57}.review-error{color:var(--text);background:#ff687414;border-bottom:1px solid #ff68743d;padding:8px 14px;font-size:11px}.source-revert-error{color:var(--text);background:#ff687414;border-top:1px solid #ff68743d;padding:9px 14px;font-size:11px}.source-action-warning{color:var(--text);background:#f6be5214;border-top:1px solid #f6be523d;padding:9px 14px;font-size:11px}.detail-reconciliation-warning{color:var(--text);background:#f6be5214;border-bottom:1px solid #f6be523d;justify-content:space-between;align-items:center;gap:12px;padding:8px 14px;font-size:11px;display:flex}.detail-reconciliation-warning button{border-radius:var(--radius-sm);color:inherit;background:0 0;border:1px solid;padding:4px 8px}.diff-toolbar strong{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-family:ui-monospace,monospace;font-size:11px;overflow:hidden}.access-badge{text-transform:uppercase;font-size:10.5px;font-weight:650}.mode-switch{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--bg);padding:2px;display:flex}.mode-switch button{border-radius:var(--radius-sm);color:var(--quiet);cursor:pointer;background:0 0;border:0;padding:5px 8px;font-size:10.5px}.mode-switch button[aria-pressed=true]{color:var(--text);background:var(--surface-strong)}.mode-switch .MuiToggleButton-root.Mui-selected{color:var(--text);background:#293241;box-shadow:inset 0 0 0 1px #75a7ff4d}.diff-context{border-bottom:1px solid var(--line);min-height:37px;color:var(--quiet);align-items:center;gap:14px;padding:0 14px;font-size:10.5px;display:flex}.diff-context .additions{color:var(--accent);margin-left:auto}.diff-context .deletions{color:var(--red)}.diff-hunk{min-width:0;overflow:auto}.hunk-header{color:var(--blue);background:#75a7ff12;border-bottom:1px solid #75a7ff24;justify-content:space-between;align-items:center;gap:12px;padding:6px 12px;font-family:ui-monospace,monospace;font-size:10.5px;display:flex;position:sticky;left:0}.hunk-header button{border-radius:var(--radius-sm);min-height:25px;color:var(--text);background:#75a7ff1a;border:1px solid #75a7ff57;padding:0 9px;font:700 9px Inter,sans-serif}.hunk-header button:disabled{cursor:not-allowed;opacity:.45}.hunk-actions{align-items:center;gap:6px;display:inline-flex}.dialog-backdrop{z-index:80;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#030508c2;place-items:center;padding:20px;display:grid;position:fixed;inset:0}.confirm-dialog{border-radius:var(--radius-sm);background:var(--surface-2);border:1px solid #ff7f8652;width:min(520px,100%);padding:24px;box-shadow:0 30px 100px #00000094}.confirm-dialog h3{color:var(--text);margin:0;font-size:21px}.confirm-dialog>p:not(.section-kicker){color:var(--text);margin:14px 0;font-size:12px;line-height:1.65}.confirm-dialog code{color:var(--text)}.revert-diff{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);max-height:min(300px,42vh);margin:14px 0;overflow:auto}.revert-diff section>div{color:var(--text);background:#182130;padding:6px 9px;font:9px ui-monospace,monospace;position:sticky;top:0}.revert-line{white-space:pre-wrap;min-height:19px;padding:2px 9px;font:10px/1.5 ui-monospace,monospace;display:block;color:var(--text)!important}.revert-line b{width:14px;color:inherit;display:inline-block}.revert-added{background:#42c29214;color:var(--text)!important}.revert-deleted{background:#ff687414;color:var(--text)!important}.revert-meta{color:var(--muted)!important}.revert-safety{border-radius:var(--radius-sm);background:#efba630f;border:1px solid #efba6338;gap:5px;padding:12px;display:grid}.revert-safety strong{color:var(--text);font-size:11px}.revert-safety span{color:var(--muted);font-size:11px}.confirm-actions{justify-content:flex-end;gap:9px;margin-top:20px;display:flex}.confirm-actions button{border:1px solid var(--line-strong);border-radius:var(--radius-sm);min-height:34px;color:var(--text);background:#1b222d;padding:0 14px;font-size:11px;font-weight:650}.confirm-actions .danger-action{color:var(--text);background:#ff7f8621;border-color:#ff7f866b}.confirm-actions button:disabled{cursor:not-allowed;opacity:.48}.diff-line{grid-template-columns:42px 42px 18px minmax(500px,1fr);min-width:max-content;min-height:21px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:21px;display:grid}.diff-line>span{color:#566173;text-align:right;-webkit-user-select:none;user-select:none;padding:0 7px}.diff-line b{color:var(--quiet);text-align:center;-webkit-user-select:none;user-select:none}.diff-line code,.split-line code{color:var(--text);white-space:pre;padding:0 8px}.syntax-keyword{color:var(--text);font-weight:650}.syntax-string,.syntax-number{color:var(--text)}.syntax-comment{color:var(--muted);font-style:italic}.syntax-literal,.syntax-property{color:var(--text)}.diff-added{background:#42c2921a}.diff-added code,.diff-added b{color:var(--text)}.diff-deleted{background:#ff68741a}.diff-deleted code,.diff-deleted b{color:var(--text)}.split-line{border-bottom:1px solid #242c394d;grid-template-columns:42px minmax(350px,1fr) 42px minmax(350px,1fr);min-width:860px;min-height:21px;font-family:ui-monospace,monospace;font-size:11px;line-height:21px;display:grid}.split-line>span{color:#566173;text-align:right;border-right:1px solid #242c39b3;padding:0 7px}.split-line code:nth-child(2){border-right:1px solid var(--line)}.unchanged-region{border-block:1px solid var(--line);color:var(--quiet);background:var(--surface-2);text-align:center;padding:7px 12px;font-size:10.5px}.diff-fallback{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface);gap:6px;margin:18px;padding:16px;font-size:11px;display:grid}.diff-fallback strong{color:var(--amber);text-transform:uppercase;font-size:11px}.activity-panel{margin-top:18px;overflow:hidden}.panel-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:18px;min-height:82px;padding:18px 22px;display:flex}.panel-heading h2{letter-spacing:-.02em;margin:0;font-size:18px}.panel-heading>div:last-child{color:var(--quiet);align-items:center;gap:14px;font-size:11px;display:flex}.running-count{color:var(--blue)}.activity-list{display:grid}.agent-activity-group>summary{cursor:pointer;color:var(--muted);padding:10px 16px}.agent-activity-group>summary strong{color:var(--text,inherit)}.activity-row{border-bottom:1px solid var(--line);background:var(--surface-2);grid-template-columns:10px minmax(0,1fr) 150px;align-items:start;gap:14px;padding:15px 18px;display:grid}.activity-row:last-child{border-bottom:0}.activity-state{width:7px;height:7px;box-shadow:0 0 0 4px color-mix(in srgb, currentColor 10%, transparent);background:currentColor;border-radius:50%;margin-top:5px}.activity-copy{min-width:0}.activity-copy>div{align-items:center;gap:9px;display:flex}.activity-copy strong{color:var(--text);font-size:12px}.activity-copy>div>span{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--quiet);letter-spacing:.06em;text-transform:uppercase;padding:2px 5px;font-size:10px;font-weight:650}.activity-copy>p{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;margin:4px 0 0;font-family:ui-monospace,monospace;font-size:11px;line-height:1.45;overflow:hidden}.activity-result{text-align:right;grid-template-columns:1fr auto;align-items:center;gap:4px 9px;display:grid}.activity-result strong{color:var(--text);font-size:11px}.activity-result>span{color:var(--quiet);font-family:ui-monospace,monospace;font-size:10.5px}.activity-result button{color:var(--blue);cursor:pointer;background:0 0;border:0;grid-column:1/-1;justify-self:end;padding:2px 0;font-size:10.5px}.log-preview{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);background:var(--surface-2);white-space:pre-wrap;margin-top:10px;padding:10px 12px;font-family:ui-monospace,monospace;font-size:10.5px;line-height:1.55}.log-preview small{color:var(--amber);margin-top:5px;display:block}.activity-empty{min-height:150px;color:var(--quiet);place-items:center;padding:24px;font-size:11px;display:grid}.panel-footnote{border-top:1px solid var(--line);color:var(--quiet);text-align:center;padding:9px 18px;font-size:10.5px}.evidence-section{margin-top:34px}.section-title-row{justify-content:space-between;align-items:end;gap:24px;margin-bottom:14px;padding:0 3px;display:flex}.section-title-row h2{letter-spacing:-.025em;margin:0;font-size:20px}.section-title-row>span{max-width:440px;color:var(--muted);text-align:right;text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.evidence-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;display:grid}.evidence-card{min-width:0;min-height:250px;padding:18px}.evidence-card h3{min-height:38px;color:var(--text);margin:0 0 16px;font-size:14px;line-height:1.35}.evidence-list{margin:0}.evidence-list>div{border-bottom:1px solid var(--line);grid-template-columns:88px minmax(0,1fr);align-items:center;gap:8px;min-height:38px;display:grid}.evidence-list>div:last-child{border-bottom:0}.evidence-list dt,.budget-grid dt{color:var(--quiet);font-size:10.5px}.evidence-list dd{color:var(--muted);text-align:right;text-overflow:ellipsis;white-space:nowrap;margin:0;font-family:ui-monospace,monospace;font-size:10.5px;overflow:hidden}.context-meter{border-radius:var(--radius-sm);background:#28303c;height:4px;margin:-3px 0 12px;overflow:hidden}.context-meter span{border-radius:inherit;background:linear-gradient(90deg, var(--blue), var(--accent));height:100%;display:block}.budget-grid{grid-template-columns:repeat(3,1fr);gap:7px;margin:0;display:grid}.budget-grid>div{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface-2);padding:12px 8px}.budget-grid dt{margin-bottom:5px}.budget-grid dd{color:var(--text);margin:0;font-family:ui-monospace,monospace;font-size:12px}.card-note,.card-empty{color:var(--quiet);margin:14px 0 0;font-size:11px;line-height:1.5}.handoff-copy>p{color:var(--muted);margin:0 0 13px;font-size:11px;line-height:1.55}.handoff-blocker,.next-action{border-radius:var(--radius-sm);background:#ff7f860d;border:1px solid #ff7f8638;gap:4px;margin-top:9px;padding:9px 10px;display:grid}.next-action{background:#64e0b50d;border-color:#64e0b533}.handoff-blocker strong,.next-action strong{color:var(--red);letter-spacing:.08em;text-transform:uppercase;font-size:10px}.next-action strong{color:var(--accent)}.handoff-blocker span,.next-action span{color:var(--text);font-size:11px;line-height:1.4}.loading-shell{width:min(560px,100% - 40px);margin:0 auto;padding-top:22vh}.loading-shell .brand-mark{border-radius:var(--radius-sm);width:48px;height:48px;margin-bottom:25px;font-size:29px}.loading-shell h1{color:var(--text);letter-spacing:-.045em;margin:0;font-size:clamp(30px,6vw,50px);line-height:1.05}.loading-shell>p:not(.section-kicker){max-width:460px;color:var(--muted);margin:18px 0 22px;font-size:14px;line-height:1.6}.session-options{grid-template-columns:minmax(220px,.75fr) minmax(420px,1.25fr);gap:22px;padding:20px;display:grid}.session-options-copy h2{color:var(--text);margin:2px 0 8px;font-size:16px}.session-options-copy>p:last-child{max-width:520px;color:var(--quiet);margin:0;font-size:11px;line-height:1.55}.session-options-controls{grid-template-columns:minmax(0,1.4fr) minmax(130px,.6fr);align-items:end;gap:10px;display:grid}.session-options-controls>label:not(.effect-ack){color:var(--quiet);gap:5px;font-size:10.5px;display:grid}.session-options-controls select{border:1px solid var(--line);border-radius:var(--radius-sm);width:100%;min-height:36px;color:var(--text);background:var(--surface-2);padding:0 10px}.effect-ack{color:var(--text);grid-column:1/-1;align-items:flex-start;gap:8px;font-size:11px;line-height:1.4;display:flex}.effect-ack input{accent-color:var(--accent);margin-top:1px}.session-option-actions{grid-column:1/-1;gap:8px;display:flex}.session-option-actions button{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:34px;color:var(--text);background:#1a222d;padding:0 13px}.session-option-actions button:disabled{opacity:.42}.session-options-controls>small{color:var(--quiet);grid-column:1/-1;font-size:10.5px}.session-options-unavailable{color:var(--quiet);flex-direction:column;justify-content:center;gap:5px;font-size:11px;display:flex}.session-options-unavailable strong{color:var(--text);font-size:12px}.lifecycle-panel{grid-template-columns:minmax(260px,1fr) minmax(150px,auto) minmax(360px,auto);align-items:center;gap:20px;margin-top:18px;padding:18px 20px;display:grid}.lifecycle-copy h2{color:var(--text);margin:2px 0 7px;font-size:16px}.lifecycle-copy>p:last-child{max-width:620px;color:var(--quiet);margin:0;font-size:11px;line-height:1.55}.lifecycle-state{border-left:1px solid var(--line);gap:4px;min-width:150px;padding-left:18px;display:grid}.lifecycle-state>span{color:var(--quiet);text-transform:uppercase;font-size:10.5px;font-weight:650}.lifecycle-state strong{color:var(--text);font-size:12px}.lifecycle-state small{color:var(--quiet);font-size:10.5px}.lifecycle-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.lifecycle-actions button{border-radius:var(--radius-sm);cursor:pointer;min-height:36px;padding:0 13px;font-size:11px;font-weight:650}.lifecycle-actions button:disabled{cursor:not-allowed;opacity:.4}.primary-action{color:#07130f;background:var(--accent);border:1px solid #3cae88}.lifecycle-result{border-radius:var(--radius-sm);grid-column:1/-1;margin:-6px 0 0;padding:9px 11px;font-size:11px;line-height:1.45}.lifecycle-result.result-ok{color:var(--text);background:#64e0b512}.lifecycle-result.result-warning{color:var(--text);background:#efba6314}.approval-stack{gap:12px;display:grid}.approval-card{border-radius:var(--radius-sm);background:linear-gradient(135deg,#412518eb,#19181bf5);border:1px solid #70462e;padding:20px;overflow:hidden;box-shadow:0 16px 42px #00000038}.approval-card.risk-critical,.approval-card.risk-high{border-color:#9d4d3f}.approval-card>header,.approval-card>footer{justify-content:space-between;align-items:center;gap:12px;display:flex}.approval-card h2{color:var(--text);margin:2px 0 0;font-size:18px}.approval-risk{border-radius:var(--radius-sm);color:var(--text);text-transform:uppercase;border:1px solid #ffad7c59;padding:5px 9px;font-size:11px;font-weight:650}.approval-reason{color:var(--text);margin:13px 0;font-size:12px;line-height:1.55}.approval-preview{border-radius:var(--radius-sm);max-height:180px;color:var(--text);background:var(--surface-2);white-space:pre-wrap;word-break:break-word;border:1px solid #ffffff17;margin:0 0 14px;padding:12px;font:11px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.approval-facts{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0 0 13px;display:grid}.approval-facts>div{border-radius:var(--radius-sm);background:#ffffff09;min-width:0;padding:9px}.approval-facts dt{color:var(--text);text-transform:uppercase;font-size:10.5px;font-weight:650}.approval-facts dd{color:var(--text);text-overflow:ellipsis;margin:4px 0 0;font-size:11px;overflow:hidden}.approval-targets,.approval-consequences{color:var(--text);font-size:11px;line-height:1.55}.approval-targets ul{margin:6px 0 12px;padding-left:18px}.approval-consequences{grid-template-columns:1fr 1fr;gap:10px;margin:12px 0;display:grid}.approval-consequences p{border-radius:var(--radius-sm);background:#ffffff09;margin:0;padding:10px}.approval-card>footer{justify-content:flex-end;padding-top:4px}.approval-card button{border-radius:var(--radius-sm);min-height:36px;padding:0 14px;font-weight:650}.secondary-action{border:1px solid var(--line);color:var(--text);background:#1a222d}.danger-action{color:var(--text);background:#8f3e31;border:1px solid #c56b52}.approval-card button:disabled{cursor:wait;opacity:.48}.question-stack{gap:12px;display:grid}.question-card{border-radius:var(--radius-sm);background:linear-gradient(135deg,#162e3af0,#16181ef7);border:1px solid #2f5f73;padding:20px;overflow:hidden;box-shadow:0 16px 42px #00000038}.question-card>header,.question-card>footer{justify-content:space-between;align-items:center;gap:12px;display:flex}.question-card h2{color:var(--text);margin:2px 0 0;font-size:18px}.question-hint{color:var(--text);font-size:11px;font-weight:600}.question-block{border:0;min-width:0;margin:14px 0 0;padding:0}.question-block legend{color:var(--text);flex-wrap:wrap;align-items:baseline;gap:6px;padding:0;font-size:15px;font-weight:600;line-height:1.5;display:flex}.question-number{color:var(--text)}.question-chip{border-radius:var(--radius-sm);color:var(--text);border:1px solid #7cc4e459;padding:2px 8px;font-size:11px;font-weight:650}.question-text{overflow-wrap:anywhere;min-width:0}.question-multi{color:var(--text);margin:4px 0 0;font-size:12px}.question-card:focus-visible,.question-block:focus-visible{outline-offset:3px;border-radius:var(--radius-sm);outline:2px solid #4fa3c7}.question-block.active .question-number{color:var(--text)}.question-options{gap:6px;margin:10px 0 0;padding:0;list-style:none;display:grid}.question-options label{border-radius:var(--radius-sm);cursor:pointer;background:#ffffff08;border:1px solid #ffffff14;align-items:flex-start;gap:10px;padding:10px 12px;display:flex}.question-options label:hover{border-color:#7cc4e459}.question-options label.selected{background:#4fa3c724;border-color:#4fa3c7}.question-options input[type=radio],.question-options input[type=checkbox]{opacity:0;pointer-events:none;position:absolute}.question-options label:focus-within{outline-offset:2px;outline:2px solid #4fa3c7}.option-number{border-radius:var(--radius-sm);color:#0d1d25;background:#8fc9e2;flex:none;place-items:center;width:24px;height:24px;font-size:12px;font-weight:650;display:inline-grid}.option-body{min-width:0;color:var(--text);gap:3px;font-size:14px;line-height:1.45;display:grid}.option-body small{color:var(--text);font-size:12.5px}.question-other input[type=text]{box-sizing:border-box;border-radius:var(--radius-sm);width:100%;color:var(--text);background:var(--surface-2);font:inherit;border:1px solid #4fa3c7;margin-top:6px;padding:9px 11px;font-size:14px}.question-card>footer{justify-content:flex-end;padding-top:14px}.question-card button{border-radius:var(--radius-sm);min-height:36px;padding:0 14px;font-weight:650}.question-card button:disabled{cursor:not-allowed;opacity:.48}.task-run-index,.release-monitor{margin-top:18px;overflow:hidden}.release-monitor .source-heading button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);background:var(--surface-2);padding:8px 12px}.release-monitor .source-heading button:disabled{opacity:.55}.release-monitor-grid{border-top:1px solid var(--line);grid-template-columns:minmax(0,1.15fr) minmax(320px,.85fr);display:grid}.release-monitor-column+.release-monitor-column{border-left:1px solid var(--line)}.release-monitor-column>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:14px;padding:16px 20px;display:flex}.release-monitor-column h3{margin:2px 0 0}.benchmark-run-card{border-bottom:1px solid var(--line);padding:14px 20px}.benchmark-run-card>div:first-child{justify-content:space-between;align-items:center;gap:12px;display:flex}.benchmark-run-card small{color:var(--muted);margin-top:4px;display:block}.benchmark-run-facts{color:var(--muted);flex-wrap:wrap;gap:8px 18px;margin-top:9px;font-size:12px;display:flex}.release-readiness-facts{margin:0;padding:4px 20px 12px}.release-readiness-facts>div{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:10px 0;display:flex}.release-readiness-facts dt{color:var(--muted)}.release-readiness-facts dd{text-align:right;margin:0}.release-blockers{border:1px solid color-mix(in srgb, var(--warning) 35%, var(--line));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--warning) 7%, transparent);margin:0 20px 14px;padding:12px 14px}.release-blockers ul{color:var(--muted);margin:8px 0 0;padding-left:18px}.release-blockers li+li{margin-top:5px}.task-index-controls{border-bottom:1px solid var(--line);gap:8px;padding:0 20px 16px;display:flex}.task-index-controls button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);background:var(--surface-2);padding:7px 12px}.task-index-controls button[aria-pressed=true]{color:var(--text);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 15%, var(--surface-2))}.task-run-list{display:grid}.task-run-card{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:18px;padding:15px 20px;display:grid}.task-run-card[data-active=true]{box-shadow:inset 3px 0 var(--accent);background:color-mix(in srgb, var(--accent) 5%, transparent)}.task-run-card[data-selected=true]{outline:1px solid var(--accent);outline-offset:-1px}.task-run-main{min-width:0}.task-run-main>div{align-items:center;gap:9px;display:flex}.task-run-main strong,.task-run-main small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.task-run-main small,.task-run-meta{color:var(--muted)}.active-run-tag{border:1px solid var(--accent);border-radius:var(--radius-sm);color:var(--accent);padding:2px 7px;font-size:11px}.task-run-meta{justify-content:flex-end;align-items:center;gap:12px;font-size:12px;display:flex}.task-index-empty,.task-index-warning{color:var(--muted);margin:0;padding:18px 20px}.task-index-warning{border-top:1px solid var(--line);color:var(--warning)}.task-run-meta button{border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--text);background:var(--surface-2);padding:6px 9px}.task-run-meta button[aria-pressed=true]{border-color:var(--accent);color:var(--accent)}.task-timeline{border-top:1px solid var(--line)}.task-timeline>header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:18px 20px;display:flex}.task-timeline h3{margin:2px 0 0}.timeline-continuity{color:var(--muted);border-bottom:1px solid var(--line);flex-wrap:wrap;gap:10px 24px;padding:12px 20px;display:flex}.timeline-events{margin:0;padding:0;list-style:none}.timeline-events li{border-bottom:1px solid var(--line);grid-template-columns:12px minmax(0,1fr) auto;align-items:start;gap:12px;padding:13px 20px;display:grid}.timeline-events small,.timeline-events p{color:var(--muted);margin:3px 0 0;display:block}.timeline-dot{border-radius:var(--radius-sm);background:var(--muted);width:9px;height:9px;margin-top:5px}.timeline-dot.tone-positive{background:var(--positive)}.timeline-dot.tone-warning{background:var(--warning)}.timeline-dot.tone-danger{background:var(--danger)}.timeline-dot.tone-info{background:var(--accent)}.recovery-summary{grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.retained-content-note{color:var(--muted);border-bottom:1px solid var(--line);margin:0;padding:10px 20px;font-size:12px}.next-action-card{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--accent) 7%, transparent);grid-template-columns:minmax(180px,.45fr) 1fr auto;align-items:center;gap:18px;padding:16px 20px;display:grid}.next-action-card span,.next-action-card strong{display:block}.next-action-card span,.next-action-card p,.next-action-card small{color:var(--muted)}.next-action-card p{margin:0}.handoff-summary{grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.workspace-stack>.surface,.workspace-view>.surface,.workspace-stack>.evidence-section,.workspace-view>.evidence-section{margin-top:0}:root[data-piagent-color-mode=light] .task-heading h2,:root[data-piagent-color-mode=light] .task-empty h2,:root[data-piagent-color-mode=light] .criterion-copy p,:root[data-piagent-color-mode=light] .compact-panel dd,:root[data-piagent-color-mode=light] .chat-heading h2,:root[data-piagent-color-mode=light] .chat-message strong,:root[data-piagent-color-mode=light] .chat-message p,:root[data-piagent-color-mode=light] .attachment-list strong,:root[data-piagent-color-mode=light] .diff-toolbar strong,:root[data-piagent-color-mode=light] .activity-copy strong,:root[data-piagent-color-mode=light] .activity-result strong,:root[data-piagent-color-mode=light] .evidence-card h3,:root[data-piagent-color-mode=light] .budget-grid dd,:root[data-piagent-color-mode=light] .session-options-copy h2,:root[data-piagent-color-mode=light] .session-options-unavailable strong,:root[data-piagent-color-mode=light] .lifecycle-copy h2,:root[data-piagent-color-mode=light] .lifecycle-state strong{color:var(--text)}:root[data-piagent-color-mode=light] .chat-body,:root[data-piagent-color-mode=light] .activity-row{background:#62740006}:root[data-piagent-color-mode=light] .source-tabs{background:var(--surface)}:root[data-piagent-color-mode=light] .source-tabs button:hover{color:var(--text)}:root[data-piagent-color-mode=light] .source-action-warning,:root[data-piagent-color-mode=light] .detail-reconciliation-warning{color:var(--muted);background:#ab740014}:root[data-piagent-color-mode=light] .chat-message,:root[data-piagent-color-mode=light] .chat-tool-live,:root[data-piagent-color-mode=light] .chat-tool-result,:root[data-piagent-color-mode=light] .held-queue li,:root[data-piagent-color-mode=light] .log-preview{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .chat-user{background:#506db712}:root[data-piagent-color-mode=light] .chat-composer-preview,:root[data-piagent-color-mode=light] .unchanged-region{background:var(--surface)}:root[data-piagent-color-mode=light] .chat-composer-preview textarea,:root[data-piagent-color-mode=light] .session-options-controls select{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .review-state button,:root[data-piagent-color-mode=light] .commit-summary-output button,:root[data-piagent-color-mode=light] .confirm-actions button,:root[data-piagent-color-mode=light] .session-option-actions button{color:var(--text);background:var(--surface-strong)}:root[data-piagent-color-mode=light] .commit-summary-panel h3,:root[data-piagent-color-mode=light] .commit-summary-output>strong{color:var(--text)}:root[data-piagent-color-mode=light] .commit-summary-output{background:#ffffffbf}:root[data-piagent-color-mode=light] .diff-line code,:root[data-piagent-color-mode=light] .split-line code{color:var(--muted)}:root[data-piagent-color-mode=light] .diff-line>span,:root[data-piagent-color-mode=light] .split-line>span{color:#92988d}:root[data-piagent-color-mode=light] .syntax-keyword,:root[data-piagent-color-mode=light] .syntax-string,:root[data-piagent-color-mode=light] .syntax-number,:root[data-piagent-color-mode=light] .syntax-comment,:root[data-piagent-color-mode=light] .syntax-literal,:root[data-piagent-color-mode=light] .syntax-property{color:var(--muted)}:root[data-piagent-color-mode=light] .mode-switch .MuiToggleButton-root.Mui-selected{color:var(--text);background:var(--surface-2)}:root[data-piagent-color-mode=light] .diff-added{background:#14775f1a}:root[data-piagent-color-mode=light] .diff-added code,:root[data-piagent-color-mode=light] .diff-added b{color:var(--muted)}:root[data-piagent-color-mode=light] .diff-deleted{background:#c43f4c1a}:root[data-piagent-color-mode=light] .diff-deleted code,:root[data-piagent-color-mode=light] .diff-deleted b{color:var(--muted)}:root[data-piagent-color-mode=light] .confirm-dialog{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .confirm-dialog h3,:root[data-piagent-color-mode=light] .confirm-dialog>p:not(.section-kicker){color:var(--text)}:root[data-piagent-color-mode=light] .revert-diff{background:var(--surface)}:root[data-piagent-color-mode=light] .approval-card{color:var(--text);background:linear-gradient(135deg,#fff7ef,#fff);border-color:#d7b18f}:root[data-piagent-color-mode=light] .question-card{color:var(--text);background:linear-gradient(135deg,#f1f9fc,#fff);border-color:#9cc8da}:root[data-piagent-color-mode=light] .question-card h2,:root[data-piagent-color-mode=light] .question-block legend,:root[data-piagent-color-mode=light] .option-body{color:var(--text)}:root[data-piagent-color-mode=light] .question-hint,:root[data-piagent-color-mode=light] .question-number,:root[data-piagent-color-mode=light] .question-multi,:root[data-piagent-color-mode=light] .option-body small{color:var(--muted)}:root[data-piagent-color-mode=light] .question-chip{color:var(--muted);border-color:#9cc8da}:root[data-piagent-color-mode=light] .question-options label{background:var(--surface);border-color:#d6e6ed}:root[data-piagent-color-mode=light] .question-options label.selected{background:var(--surface-2);border-color:#3b8fb3}:root[data-piagent-color-mode=light] .question-other input[type=text]{color:var(--text);background:var(--surface)}:root[data-piagent-color-mode=light] .question-options label.selected .option-number{color:#fff;background:#1e6f92}:root[data-piagent-color-mode=light] .question-card .secondary-action{color:var(--text);background:var(--surface);border-color:#b9d3de}:root[data-piagent-color-mode=light] .question-card .secondary-action:hover:not(:disabled){background:var(--surface);border-color:#3b8fb3}:root[data-piagent-color-mode=light] .approval-card h2,:root[data-piagent-color-mode=light] .approval-preview,:root[data-piagent-color-mode=light] .approval-facts dd{color:var(--text)}:root[data-piagent-color-mode=light] .approval-preview{background:var(--surface)}:root[data-piagent-color-mode=light] .approval-reason,:root[data-piagent-color-mode=light] .approval-targets,:root[data-piagent-color-mode=light] .approval-consequences{color:var(--muted)}@media (max-width:1080px){.lifecycle-panel{grid-template-columns:1fr auto}.lifecycle-actions{grid-column:1/-1;justify-content:flex-start}.lifecycle-result{grid-column:1/-1}.runtime-strip{grid-template-columns:repeat(3,1fr)}.runtime-strip>div:nth-child(3){border-right:0}.runtime-strip>div:nth-child(-n+3){border-bottom:1px solid var(--line)}.content-grid{grid-template-columns:1fr}.context-rail,.evidence-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:899px){.source-body{grid-template-columns:1fr}.file-panel{border-right:0;border-bottom:1px solid var(--line)}.file-list{max-height:300px}.diff-empty{min-height:300px}}@media (max-width:720px){.release-monitor-grid{grid-template-columns:1fr}.release-monitor-column+.release-monitor-column{border-left:0;border-top:1px solid var(--line)}.recovery-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.handoff-summary,.next-action-card,.commit-summary-panel,.approval-facts,.approval-consequences{grid-template-columns:1fr}.approval-card>header,.approval-card>footer{flex-direction:column;align-items:flex-start}.approval-card>footer button{width:100%}.question-card{padding:16px}.question-card>header,.question-card>footer{flex-direction:column;align-items:stretch}.question-card>footer{flex-direction:column-reverse}.question-card>footer button{width:100%}.session-options,.session-options-controls{grid-template-columns:1fr}.effect-ack,.session-option-actions,.session-options-controls>small{grid-column:1}.lifecycle-panel{grid-template-columns:1fr;align-items:stretch}.lifecycle-state{border-left:0;padding:0}.lifecycle-actions{grid-column:1}.lifecycle-actions button{flex:150px}.lifecycle-result{grid-column:1}.topbar{grid-template-columns:1fr auto;min-height:60px;padding:0 16px}.session-title,.read-only-badge{display:none}.workspace{width:min(100% - 24px,1460px);padding-top:12px}.runtime-strip{grid-template-columns:repeat(2,1fr)}.runtime-strip>div{border-bottom:1px solid var(--line);min-height:62px;padding:11px}.runtime-strip>div:nth-child(2n){border-right:0}.runtime-strip>div:nth-last-child(-n+2){border-bottom:0}.task-dashboard{padding:19px 14px}.chat-heading{flex-direction:column;align-items:flex-start;padding:15px}.chat-heading>div:last-child{flex-direction:column;align-items:flex-start}.chat-body{padding:13px}.chat-message{width:94%}.chat-composer-preview,.task-heading{grid-template-columns:1fr}.progress-number{text-align:left;align-items:baseline;gap:10px;display:flex}.progress-number strong{font-size:25px}.progress-track{margin:18px 0 24px}.criterion-card{grid-template-columns:32px minmax(0,1fr);gap:10px}.criterion-card>.status-pill{grid-column:2}.criterion-copy>div{flex-direction:column;align-items:flex-start;gap:5px}.context-rail{grid-template-columns:1fr}.task-empty{grid-template-columns:1fr;min-height:340px;padding:28px 22px}.source-tabs{padding:0 8px;overflow-x:auto}.source-tabs button{flex:none}.source-heading{padding:16px}.source-heading>span,.file-provenance,.file-evidence{display:none}.file-row{grid-template-columns:26px minmax(0,1fr) auto}.diff-toolbar{flex-direction:column;align-items:flex-start}.panel-heading{flex-direction:column;align-items:flex-start;padding:16px}.activity-row{grid-template-columns:10px minmax(0,1fr)}.activity-result{text-align:left;grid-column:2;grid-template-columns:auto auto 1fr}.activity-result button{grid-column:auto;justify-self:end}.section-title-row{flex-direction:column;align-items:flex-start;gap:8px}.section-title-row>span{text-align:left;max-width:100%}.evidence-grid{grid-template-columns:1fr}.evidence-card{min-height:auto}.task-run-card{grid-template-columns:1fr;gap:9px}.task-run-meta{flex-wrap:wrap;justify-content:flex-start}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}@media (forced-colors:active){.status-dot,.activity-state,.progress-track span,.context-meter span{forced-color-adjust:none;background:highlight}.file-row[data-selected=true],.source-tabs button[aria-selected=true]{outline:2px solid highlight}}@keyframes piagent-pulse{0%,to{opacity:1}50%{opacity:.3}}@media (prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important}}.decision-queue{gap:10px;display:grid}.decision-steps{border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);gap:8px;padding:10px 12px;display:grid}.decision-steps>strong{color:var(--warning);font-size:12px}.decision-steps ol{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.decision-steps li{min-width:0;max-width:100%}.decision-step{border:1px solid var(--line);border-radius:var(--radius-sm);max-width:100%;min-height:32px;color:var(--muted);background:var(--surface-2);font:inherit;cursor:pointer;align-items:center;gap:6px;padding:4px 10px 4px 5px;font-size:11px;display:inline-flex}.decision-step:hover{border-color:var(--line-strong);color:var(--text)}.decision-step.current{border-color:var(--warning);color:var(--text);background:color-mix(in srgb, var(--warning) 12%, var(--surface-2))}.decision-step:focus-visible{outline:2px solid var(--warning);outline-offset:2px}.decision-step-number{width:20px;height:20px;color:var(--bg);background:var(--muted);border-radius:50%;flex:none;place-items:center;font-size:11px;font-weight:650;display:inline-grid}.decision-step.current .decision-step-number{background:var(--warning)}.decision-step-kind{flex:none;font-weight:650}.decision-step-role{color:var(--quiet);flex:none}.decision-step-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:260px;overflow:hidden}.attention-toasts{z-index:1400;pointer-events:none;gap:8px;width:min(360px,100vw - 32px);display:grid;position:fixed;bottom:44px;right:16px}.attention-toast{border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:var(--text);background:var(--surface);pointer-events:auto;align-items:flex-start;gap:10px;padding:11px 10px 11px 12px;animation:.22s ease-out attention-in;display:flex;box-shadow:0 14px 36px #00000047}.attention-toast-mark{background:var(--positive);border-radius:50%;flex:none;width:10px;height:10px;margin-top:4px}.attention-toast.tone-error .attention-toast-mark{background:var(--danger)}.attention-toast.tone-neutral .attention-toast-mark{background:var(--muted)}.attention-toast.tone-warning{border-color:var(--warning)}.attention-toast.tone-warning .attention-toast-mark{background:var(--warning);animation:1.4s ease-in-out infinite piagent-pulse}.attention-toast-body{flex:1;gap:3px;min-width:0;display:grid}.attention-toast-body strong{text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;overflow:hidden}.attention-toast-title{font-weight:600}.attention-toast-body small{color:var(--muted);font-size:11.5px;line-height:1.4}.attention-toast-actions{flex:none;align-items:center;gap:2px;display:flex}.attention-open{border:1px solid var(--line-strong);border-radius:var(--radius-sm);min-height:30px;color:var(--text);background:var(--surface-2);font:inherit;cursor:pointer;padding:0 11px;font-size:11.5px;font-weight:600}.attention-close{border-radius:var(--radius-sm);width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border:0;font-size:18px;line-height:1}.attention-open:focus-visible,.attention-close:focus-visible{outline:2px solid var(--warning);outline-offset:2px}.attention-more{color:var(--muted);text-align:right;margin:0;padding:0 4px;font-size:11px}@keyframes attention-in{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}.session-item.attention{box-shadow:inset 3px 0 0 var(--warning);animation:2.4s ease-in-out infinite attention-glow}.session-item.fresh{box-shadow:inset 3px 0 0 var(--positive)}@keyframes attention-glow{0%,to{background:0 0}50%{background:color-mix(in srgb, var(--warning) 9%, transparent)}}@media (prefers-reduced-motion:reduce){.attention-toast,.session-item.attention,.attention-toast.tone-warning .attention-toast-mark{animation:none}}@media (max-width:600px){.attention-toasts{width:calc(100vw - 16px);top:68px;right:8px}.decision-step-label{max-width:150px}}.line-comment-anchor{width:100%;color:inherit;font:inherit;text-align:right;cursor:pointer;background:0 0;border:0;padding:0}.line-comment-anchor:hover,.line-comment-anchor:focus-visible{color:var(--amber);text-decoration:underline}.line-notes{border-block:1px solid var(--line);background:var(--surface);gap:6px;min-width:max-content;max-width:100%;padding:7px 12px 8px 102px;font-size:11px;line-height:1.5;display:grid}.split-code .line-notes{padding-left:54px}.file-findings{margin:10px 0;padding-left:12px}.line-finding{border-radius:var(--radius-sm);white-space:normal;background:#e3a33f17;border-left:3px solid #e3a33f;gap:2px;max-width:760px;padding:6px 9px;display:grid}.line-finding.severity-blocking{background:#ff68741a;border-left-color:#ff6874}.line-finding.severity-minor{background:#6f9fe017;border-left-color:#6f9fe0}.line-finding strong{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-size:11px}.line-comment{border-left:3px solid var(--amber);border-radius:var(--radius-sm);white-space:pre-wrap;background:#efbd7814;align-items:baseline;gap:10px;max-width:760px;padding:6px 9px;display:flex}.line-comment span{flex:1}.line-comment button,.line-comment-editor button,.line-comment-actions button{border:1px solid var(--line-strong);border-radius:var(--radius-sm);color:inherit;cursor:pointer;background:0 0;padding:3px 9px;font-size:11px}.line-comment-editor{gap:6px;max-width:760px;display:grid}.line-comment-editor textarea{border:1px solid var(--line-strong);border-radius:var(--radius-sm);width:100%;min-width:320px;color:inherit;background:var(--background,transparent);font:inherit;resize:vertical;padding:7px 9px}.line-comment-editor>div,.line-comment-actions{justify-content:flex-end;align-items:center;gap:8px;display:flex}.line-comment-editor button[type=submit],.line-comment-actions .primary{border-color:var(--amber);color:#1b1408;background:var(--amber);font-weight:650}.line-comment-editor button:disabled{opacity:.5;cursor:not-allowed}.line-comment-bar{border:1px solid var(--line-strong);border-radius:var(--radius-sm);background:var(--surface);gap:8px;margin:10px 0;padding:10px 12px;font-size:12px;display:grid}.line-comment-bar>div:first-child{flex-wrap:wrap;align-items:baseline;gap:10px;display:flex}.line-comment-bar small{color:var(--amber)}.line-comment-bar ul{gap:3px;max-height:160px;margin:0;padding:0;list-style:none;display:grid;overflow:auto}.line-comment-bar li{min-width:0;color:var(--muted);gap:8px;display:flex}.line-comment-bar li code{color:inherit;flex-shrink:0}.line-comment-bar li span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.line-comment-bar li.changed{opacity:.7}.line-comment-bar li em{color:var(--amber);font-style:normal}.streaming-answer .markdown-message:last-child>:last-child:after{content:"";vertical-align:-.15em;background:var(--accent);border-radius:1px;width:.5em;height:1.05em;margin-left:3px;animation:1s step-end infinite piagent-caret;display:inline-block}@keyframes piagent-caret{50%{opacity:0}}@media (prefers-reduced-motion:reduce){.streaming-answer .markdown-message:last-child>:last-child:after{animation:none}}.attention-toast{animation:.2s cubic-bezier(.2,.7,.2,1) piagent-toast-in}@keyframes piagent-toast-in{0%{opacity:0;transform:translateY(8px)}}@media (max-width:720px){.attention-toasts{top:60px;bottom:auto}}@media (prefers-reduced-motion:reduce){.attention-toast{animation:none}}
|