cli-jaw 2.17.30 → 2.17.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/dist/src/agent/codex-app-client.js +69 -1
- package/dist/src/agent/codex-app-client.js.map +1 -1
- package/dist/src/agent/cursor-runtime.js +9 -0
- package/dist/src/agent/cursor-runtime.js.map +1 -1
- package/dist/src/agent/pi-runtime.js +1 -1
- package/dist/src/agent/pi-runtime.js.map +1 -1
- package/dist/src/agent/prompt-context.js +39 -0
- package/dist/src/agent/prompt-context.js.map +1 -1
- package/dist/src/agent/spawn.js +138 -20
- package/dist/src/agent/spawn.js.map +1 -1
- package/dist/src/browser/web-ai/capability-observation-presets.js +4 -0
- package/dist/src/browser/web-ai/capability-observation-presets.js.map +1 -1
- package/dist/src/browser/web-ai/chatgpt-model.js +9 -5
- package/dist/src/browser/web-ai/chatgpt-model.js.map +1 -1
- package/dist/src/browser/web-ai/grok-model.js +18 -5
- package/dist/src/browser/web-ai/grok-model.js.map +1 -1
- package/dist/src/cli/claude-models.js +6 -0
- package/dist/src/cli/claude-models.js.map +1 -1
- package/dist/src/cli/handlers-runtime.js +29 -4
- package/dist/src/cli/handlers-runtime.js.map +1 -1
- package/dist/src/cli/registry.js +56 -15
- package/dist/src/cli/registry.js.map +1 -1
- package/dist/src/code-mode/model-options.js +4 -4
- package/dist/src/code-mode/model-options.js.map +1 -1
- package/dist/src/core/config.js +1 -1
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/db.js +19 -0
- package/dist/src/core/db.js.map +1 -1
- package/dist/src/core/runtime-settings.js +11 -2
- package/dist/src/core/runtime-settings.js.map +1 -1
- package/dist/src/orchestrator/attestation.js +66 -0
- package/dist/src/orchestrator/attestation.js.map +1 -1
- package/dist/src/orchestrator/gateway.js +11 -3
- package/dist/src/orchestrator/gateway.js.map +1 -1
- package/dist/src/orchestrator/pipeline.js +5 -0
- package/dist/src/orchestrator/pipeline.js.map +1 -1
- package/dist/src/routes/command.js +4 -1
- package/dist/src/routes/command.js.map +1 -1
- package/dist/src/routes/orchestrate.js +14 -2
- package/dist/src/routes/orchestrate.js.map +1 -1
- package/dist/src/slack/commands.js +1 -0
- package/dist/src/slack/commands.js.map +1 -1
- package/dist/src/telegram/bot.js +3 -2
- package/dist/src/telegram/bot.js.map +1 -1
- package/package.json +5 -1
- package/public/dist/assets/{Agent-BjxJRsKG.js → Agent-kyyjcnqC.js} +1 -1
- package/public/dist/assets/BrowserPanel-0b3deLGR.js +3 -0
- package/public/dist/assets/BrowserPanel-D7SnTts8.css +1 -0
- package/public/dist/assets/{Heartbeat-Ca8DmJcw.js → Heartbeat-CD1R95Kv.js} +1 -1
- package/public/dist/assets/{Memory-BY88ur_h.js → Memory-CpZIdE1o.js} +1 -1
- package/public/dist/assets/{ModelProvider-mtAtYLmW.js → ModelProvider-tL42E5dy.js} +1 -1
- package/public/dist/assets/agent-meta-KPnVam9G.js +1 -0
- package/public/dist/assets/{app-CYayckBa.js → app-BvRV-aEt.js} +4 -4
- package/public/dist/assets/bgtask-badge-DLqpImpn.js +1 -0
- package/public/dist/assets/{bgtask-badge-CT6s6rND.js → bgtask-badge-FiEB3FJm.js} +1 -1
- package/public/dist/assets/constants-BfYYzHNr.js +1 -0
- package/public/dist/assets/{employees-DCju7V1x.js → employees-86F_D_Ce.js} +1 -1
- package/public/dist/assets/iframe-renderer-C_swzquc.js +1 -0
- package/public/dist/assets/{iframe-renderer-LZp7Nqm1.js → iframe-renderer-eozJpgjk.js} +2 -2
- package/public/dist/assets/manager-BnmWx9xL.js +13 -0
- package/public/dist/assets/manager-Cmu0aKPb.css +1 -0
- package/public/dist/assets/{memory-V5caYbpS.js → memory-DX7U3WV_.js} +1 -1
- package/public/dist/assets/memory-DfPbqPTD.js +1 -0
- package/public/dist/assets/{message-history-Bp_sUDSx.js → message-history-B_fIGorC.js} +1 -1
- package/public/dist/assets/message-history-BhSsLjis.js +1 -0
- package/public/dist/assets/{render-Cd4frZ2U.js → render-fKAuISeM.js} +1 -1
- package/public/dist/assets/settings-BNqSR9Zr.js +1 -0
- package/public/dist/assets/{settings-a0blK1fr.js → settings-CH6exiZf.js} +1 -1
- package/public/dist/assets/{settings-core-C5qo8giT.js → settings-core-DqKyyxbQ.js} +1 -1
- package/public/dist/assets/settings-core-x7CmBZq1.js +1 -0
- package/public/dist/assets/{sidebar-FbI4udzs.js → sidebar-qyLy9Og8.js} +3 -3
- package/public/dist/assets/skills-C7Yi3LIq.js +1 -0
- package/public/dist/assets/{skills-DeG9lWF2.js → skills-DAhOtbfP.js} +1 -1
- package/public/dist/assets/{slash-commands-FoQuZXga.js → slash-commands-BYH6YVS4.js} +1 -1
- package/public/dist/assets/slash-commands-DEbJk3sj.js +1 -0
- package/public/dist/assets/{trace-drawer-CWs8ydMO.js → trace-drawer-nyAJ3Bm_.js} +1 -1
- package/public/dist/assets/{ui-Cd8etFwN.js → ui-C62w6bJS.js} +1 -1
- package/public/dist/assets/ui-CBErZPBp.js +1 -0
- package/public/dist/index.html +1 -1
- package/public/dist/manager/index.html +2 -2
- package/public/js/constants.ts +22 -5
- package/public/js/features/settings-types.ts +5 -0
- package/public/manager/src/App.tsx +1 -1
- package/public/manager/src/AppChrome.tsx +18 -3
- package/public/manager/src/SidebarRailRouter.tsx +47 -1
- package/public/manager/src/browser-panel/BrowserPanel.tsx +151 -57
- package/public/manager/src/browser-panel/browser-address-bar.tsx +53 -0
- package/public/manager/src/browser-panel/browser-address-state.ts +41 -0
- package/public/manager/src/browser-panel/browser-favicon.ts +18 -0
- package/public/manager/src/browser-panel/browser-history-store.ts +80 -0
- package/public/manager/src/browser-panel/browser-panel.css +141 -24
- package/public/manager/src/components/CommandBar.tsx +17 -5
- package/public/manager/src/components/InstanceGroups.tsx +143 -23
- package/public/manager/src/components/InstanceNavigator.tsx +55 -2
- package/public/manager/src/components/InstanceRow.tsx +51 -3
- package/public/manager/src/components/SidebarRail.tsx +10 -10
- package/public/manager/src/components/SidebarResizeHandle.tsx +22 -0
- package/public/manager/src/components/WorkspaceLayout.tsx +22 -8
- package/public/manager/src/components/instance-row-status.ts +48 -0
- package/public/manager/src/components/sidebar-keyboard.ts +129 -0
- package/public/manager/src/dashboard-settings/DashboardSettingsWorkspace.tsx +42 -0
- package/public/manager/src/help/helpContent.tsx +1 -0
- package/public/manager/src/hooks/useSidebarGroupCollapse.ts +46 -0
- package/public/manager/src/hooks/useSidebarWidth.ts +88 -0
- package/public/manager/src/hooks/useWindowFullscreen.ts +23 -0
- package/public/manager/src/manager-components.css +206 -31
- package/public/manager/src/manager-layout.css +30 -19
- package/public/manager/src/manager-p0-1-1.css +72 -36
- package/public/manager/src/manager-polish.css +6 -45
- package/public/manager/src/manager-shortcut-runner.ts +37 -1
- package/public/manager/src/manager-shortcuts.ts +21 -0
- package/public/manager/src/manager-tokens.css +190 -127
- package/public/manager/src/panels/PanelResizer.tsx +18 -2
- package/public/manager/src/panels/desktop-bridge.ts +12 -1
- package/public/manager/src/panels/panels.css +32 -32
- package/public/manager/src/settings/pages/Agent.tsx +26 -0
- package/public/manager/src/settings/pages/components/agent/agent-meta.ts +6 -5
- package/public/manager/src/styles.css +15 -7
- package/public/manager/src/types.ts +5 -1
- package/public/dist/assets/BrowserPanel-CsYKexNf.js +0 -3
- package/public/dist/assets/BrowserPanel-DpntR8EJ.css +0 -1
- package/public/dist/assets/agent-meta-_Idad3qq.js +0 -1
- package/public/dist/assets/bgtask-badge-CidVvjWb.js +0 -1
- package/public/dist/assets/constants-DK-21dMG.js +0 -1
- package/public/dist/assets/iframe-renderer-aFXUtTXX.js +0 -1
- package/public/dist/assets/manager-CwqrZ2MH.js +0 -13
- package/public/dist/assets/manager-LkGs6qEJ.css +0 -1
- package/public/dist/assets/memory-BcZdf_oz.js +0 -1
- package/public/dist/assets/message-history-DrEPUdTy.js +0 -1
- package/public/dist/assets/settings-core-Cm-CmVLA.js +0 -1
- package/public/dist/assets/settings-mbGEtP5B.js +0 -1
- package/public/dist/assets/skills-G8KUeHBV.js +0 -1
- package/public/dist/assets/slash-commands-BYv3yboz.js +0 -1
- package/public/dist/assets/ui-yrn3s72A.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-render-kIxHrxDV.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./state-DxpgDKMO.js";import{t}from"./preload-helper-DFYRRz9w.js";import{N as n,T as r,j as i,k as a,t as o}from"./render-Cd4frZ2U.js";import{A as s,C as c,D as l,N as u,O as d,S as f,_ as ee,b as te,k as p,m,t as ne,v as h,w as g,x as re}from"./iframe-renderer-LZp7Nqm1.js";import{C as _,D as v,E as y,S as b,_ as x,b as S,f as ie,g as C,h as w,l as T,m as E,p as D,u as ae,v as oe,w as se,x as O,y as k}from"./message-history-Bp_sUDSx.js";import{s as ce}from"./idb-cache-lOntwU3S.js";var A=2e3,j=80,le=400;function ue(e){if(e<=A)return j;let t=e/A*j;return Math.min(le,Math.round(t))}function M(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function N(e,t=``){let n=M(e);return t?(n.chunks=[t],n.fullText=t,n.textDirty=!1,n.element.innerHTML=o(t,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`):n.element.innerHTML=`<span class="stream-cursor" aria-hidden="true"></span>`,n}function P(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function F(e,t){e.chunks.push(t),e.textDirty=!0,!e.pendingRAF&&!e.isFinalized&&(e.pendingRAF=requestAnimationFrame(()=>{if(e.pendingRAF=null,e.isFinalized)return;let t=performance.now(),n=P(e);n.length<A||t-e.lastRenderTime>ue(n.length)?(e.element.innerHTML=o(n,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=t):e.pendingRAF=requestAnimationFrame(()=>{e.pendingRAF=null,!e.isFinalized&&(e.element.innerHTML=o(P(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function I(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=P(e);return t||(e.element.innerHTML=o(n)),n}function L(e){return typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function R(e,t){return!!t.traceRunId&&!!e.traceRunId&&t.traceRunId===e.traceRunId&&L(t)&&L(e)&&t.traceSeq===e.traceSeq&&t.type===e.type&&t.label===e.label&&!!t.isEmployee==!!e.isEmployee}function z(e,t){return t.stepRef&&e.stepRef===t.stepRef?!0:R(e,t)}function B(e,t,n={}){return[...e].reverse().filter(e=>n.includeDone||e.status===`running`).find(e=>z(e,t))??null}function V(e,t){let n=e.filter(e=>e.status===`running`&&!e.stepRef&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee);return n.length===1?n[0]:null}function H(e,t){let n=[...e].reverse().filter(e=>e.status===`running`);return B(n,t)||V(n,t)}function U(){e.currentProcessBlock&&l(e.currentProcessBlock),e.currentAgentDiv instanceof HTMLElement&&l(e.currentAgentDiv),v(),s(),e.currentAgentDiv=null,e.currentProcessBlock=null,q=null}var W=0;function de(){W=Date.now()}function fe(){W=0}function pe(){return Date.now()-W<8e3}function G(e){for(let t of document.querySelectorAll(`.msg-user`))if(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)return!0;return!1}function K(){let t=e.currentAgentDiv&&e.currentAgentDiv.isConnected?e.currentAgentDiv:null;return t?G(t)?(e.currentAgentDiv=null,e.currentProcessBlock=null,q=null,null):t:null}function me(){let e=Array.from(document.querySelectorAll(`.msg-agent`)).at(-1)??null;return!e||G(e)?null:e}function he(t,n){k();let r=K();if(r||(r=x(`agent`,``),e.currentAgentDiv=r,e.currentProcessBlock=null),b(r),!e.currentProcessBlock){let t=r.querySelector(`.agent-body`);t&&(e.currentProcessBlock=S(r)),!e.currentProcessBlock&&t&&(_(r),e.currentProcessBlock=f(t))}if(n&&e.currentProcessBlock&&!e.currentProcessBlock.startedAt&&(e.currentProcessBlock.startedAt=n),e.currentProcessBlock){let n=t.rawIcon||t.icon,r=t.status||a(t.icon)||`running`;if(r===`done`||r===`error`){let a=H(e.currentProcessBlock.steps,t);if(a){t.icon=i(t.icon);let o=t.type===`thinking`?p(a.id,t.detail):g(a.id,t.detail);d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,detail:o,detailPreview:o,label:t.label||a.label,status:r,startTime:a.startTime}),m();return}if(t.stepRef&&(r===`done`||r===`error`)){let a=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&(e.status===`done`||e.status===`error`));if(a){t.icon=i(t.icon);let o=t.type===`thinking`?p(a.id,t.detail):g(a.id,t.detail);d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,status:r,detail:o,detailPreview:o,startTime:a.startTime}),m();return}}}if(t.stepRef&&r===`running`){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&e.status===`running`);if(r){t.rawIcon=n,t.icon=i(t.icon);let a=p(r.id,t.detail);d(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:`running`,detail:a,detailPreview:a,label:t.label||r.label,startTime:r.startTime}),m();return}}let o=B(e.currentProcessBlock.steps,t,{includeDone:!0});if(o){t.rawIcon=n,t.icon=i(t.icon);let a=t.detail||``,s=c(o.id)||o.detail||o.detailPreview||``,l=a.length>=s.length?a:s,u=p(o.id,l),f=(o.status===`done`||o.status===`error`)&&r===`running`?o.status:r;d(e.currentProcessBlock,o.id,{...o,...t,id:o.id,rawIcon:n,status:f,detail:u,detailPreview:u,label:t.label||o.label,startTime:o.startTime}),m();return}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee&&!e.detail);if(n){d(e.currentProcessBlock,n.id,t),m();return}}t.rawIcon=n,t.icon=i(t.icon),h(e.currentProcessBlock,t)}m()}var q=null,J=`data-active-run-hydrated`;function Y(e){document.querySelectorAll(`[${J}="true"]`).forEach(t=>{e&&t===e||t.remove()})}function ge(e){let t=K()??me();Y(t);let n=t||x(`agent`,``,e||null);return n.setAttribute(J,`true`),n}function _e(e,t){let n=c(e.id)||e.detail||e.detailPreview||``,r=t.detail||t.detailPreview||``;return r.length>=n.length?r:n}function X(e){return e.stepRef?!0:!!e.traceRunId&&typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function ve(e,t){let n=e.steps.filter(e=>!X(e)),r=0,i=!0;for(let a of t){let t=e.steps.find(e=>z(e,a))??null;if(!t&&!X(a)&&i){let e=n[r]??null;e?e.type===a.type&&!!e.isEmployee==!!a.isEmployee?(t=e,r++):i=!1:r++}if(!t){let n=e.steps.filter(e=>e.label===a.label&&e.type===a.type&&!!e.isEmployee==!!a.isEmployee);t=n.length===1?n[0]:null}if(!t){if(h(e,a),!X(a)&&i){let t=e.steps[e.steps.length-1];t&&n.push(t)}continue}let o=p(t.id,_e(t,a));d(e,t.id,{...t,...a,id:t.id,detail:o,detailPreview:o,label:a.label||t.label})}}function ye(e=[]){document.querySelectorAll(`[data-queued-overlay="true"]`).forEach(e=>e.remove())}var Z=``;function be(e){let t=Array.isArray(e.toolLog)?e.toolLog:[],n=t.map(e=>`${e.stepRef||``}~${e.traceRunId||``}~${e.traceSeq??``}~${e.status||``}~${e.label||``}~${(e.detail||``).length}`).join(`|`);return`${e.traceRunId||``}:${e.cli||``}:${(e.text||``).length}:${t.length}:${n}`}function xe(t){if(!t?.running){Z=``,Y();return}let n=be(t);if(n===Z&&K())return;v(),k(),e.currentAgentDiv=ge(t.cli||null);let r=e.currentAgentDiv.querySelector(`.agent-body`),i=E(t.toolLog||[]);b(e.currentAgentDiv),e.currentProcessBlock=S(e.currentAgentDiv),r&&i.length?(e.currentProcessBlock||=(_(e.currentAgentDiv),f(r)),t.startedAt&&(e.currentProcessBlock.startedAt=t.startedAt),ve(e.currentProcessBlock,C(i,t.startedAt))):e.currentProcessBlock=S(e.currentAgentDiv);let a=e.currentAgentDiv.querySelector(`.msg-content`);a&&(q=N(a,t.text||``)),Z=n}function Q(t){if(!t)return;k(),K()||(e.currentAgentDiv=x(`agent`,``),q=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(q||=M(n),F(q,t)),m()}var $=0;function Se(e){e.querySelectorAll(`.mermaid-pending`).forEach(e=>{delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt})}function Ce(t,i){let a=Date.now();if(!e.currentAgentDiv&&a-$<500)return;Z=``,v(),k(),e.currentAgentDiv&&b(e.currentAgentDiv);let s=se(e.currentProcessBlock??e.currentAgentDiv,!0),c=E(D(Array.isArray(i)?i:[],s)),d=w(c),f=!!e.currentProcessBlock||!!(e.currentAgentDiv&&O(e.currentAgentDiv));e.currentProcessBlock&&=(re(e.currentProcessBlock),null);let p=c.length>0;if(t||p){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=x(`agent`,``)),e.currentAgentDiv.removeAttribute(J);let i=e.currentAgentDiv?.querySelector(`.msg-content`),a=q?I(q,!0):``,s=t||a;if(q=null,i&&(i.innerHTML=o(s)),p&&e.currentAgentDiv&&!f&&!O(e.currentAgentDiv)){let t=e.currentAgentDiv.querySelector(`.msg-content`);t&&t.insertAdjacentHTML(`beforebegin`,te(C(c),!0))}e.currentAgentDiv&&b(e.currentAgentDiv),i&&i.setAttribute(`data-raw`,n(s)),i&&ne(i);let m=ee(),h=!!(m.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected);if(i&&!h&&r(i,{immediate:!0}),h){let t=e.currentAgentDiv;Se(t),t.querySelectorAll(`.diagram-widget`).forEach(e=>{let t=e,n=t.dataset.widgetHtml,r=t.dataset.widgetId;if(!n&&!r)return;let i=document.createElement(`div`);i.className=`diagram-widget-pending`,r?i.dataset.widgetId=r:n&&(i.dataset.diagramHtml=n),e.replaceWith(i)}),d?(m.appendItem(ie({role:`assistant`,content:s,cli:null,tool_log:d},m.count)),l(t),m.scrollToBottom()):(t.dataset.turnIndex=String(m.count),t.dataset.messageId||(t.dataset.messageId=u()),m.appendLiveItem(t)),t.remove()}s&&ce({role:`assistant`,content:s,tool_log:d,timestamp:Date.now()}).catch(()=>{})}q=null,e.currentAgentDiv=null,$=Date.now(),ae(`idle`),T()}function we(e,n){document.querySelectorAll(`.tab-btn`).forEach(e=>{e.classList.remove(`active`),e.setAttribute(`aria-selected`,`false`)}),document.querySelectorAll(`.tab-content`).forEach(e=>e.classList.remove(`active`)),document.getElementById({agents:`tabAgents`,settings:`tabSettings`,skills:`tabSkills`}[e])?.classList.add(`active`),n&&(n.classList.add(`active`),n.setAttribute(`aria-selected`,`true`)),e===`settings`&&t(()=>import(`./settings-mbGEtP5B.js`).then(e=>e.loadSettings()),__vite__mapDeps([0])),e===`agents`&&t(()=>import(`./employees-DCju7V1x.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&t(()=>import(`./skills-G8KUeHBV.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function Te(){let e=document.getElementById(`tabSettings`)?.classList.contains(`active`);t(()=>import(`./settings-mbGEtP5B.js`).then(t=>e?t.savePerCli():t.updateSettings()),__vite__mapDeps([0]))}function Ee(){y({onStatus:oe})}export{Ce as a,Ee as c,he as d,we as f,fe as i,pe as l,ye as n,Te as o,U as r,xe as s,Q as t,de as u};
|
|
2
|
+
import{t as e}from"./state-DxpgDKMO.js";import{t}from"./preload-helper-DFYRRz9w.js";import{N as n,T as r,j as i,k as a,t as o}from"./render-fKAuISeM.js";import{A as s,C as c,D as l,N as u,O as d,S as f,_ as ee,b as te,k as p,m,t as ne,v as h,w as g,x as re}from"./iframe-renderer-eozJpgjk.js";import{C as _,D as v,E as y,S as b,_ as x,b as S,f as ie,g as C,h as w,l as T,m as E,p as D,u as ae,v as oe,w as se,x as O,y as k}from"./message-history-B_fIGorC.js";import{s as ce}from"./idb-cache-lOntwU3S.js";var A=2e3,j=80,le=400;function ue(e){if(e<=A)return j;let t=e/A*j;return Math.min(le,Math.round(t))}function M(e){return{chunks:[],fullText:``,textDirty:!1,element:e,pendingRAF:null,isFinalized:!1,lastRenderTime:0}}function N(e,t=``){let n=M(e);return t?(n.chunks=[t],n.fullText=t,n.textDirty=!1,n.element.innerHTML=o(t,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`):n.element.innerHTML=`<span class="stream-cursor" aria-hidden="true"></span>`,n}function P(e){return e.textDirty&&=(e.fullText=e.chunks.join(``),!1),e.fullText}function F(e,t){e.chunks.push(t),e.textDirty=!0,!e.pendingRAF&&!e.isFinalized&&(e.pendingRAF=requestAnimationFrame(()=>{if(e.pendingRAF=null,e.isFinalized)return;let t=performance.now(),n=P(e);n.length<A||t-e.lastRenderTime>ue(n.length)?(e.element.innerHTML=o(n,!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=t):e.pendingRAF=requestAnimationFrame(()=>{e.pendingRAF=null,!e.isFinalized&&(e.element.innerHTML=o(P(e),!0)+`<span class="stream-cursor" aria-hidden="true"></span>`,e.lastRenderTime=performance.now())})}))}function I(e,t=!1){e.isFinalized=!0,e.pendingRAF&&=(cancelAnimationFrame(e.pendingRAF),null);let n=P(e);return t||(e.element.innerHTML=o(n)),n}function L(e){return typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function R(e,t){return!!t.traceRunId&&!!e.traceRunId&&t.traceRunId===e.traceRunId&&L(t)&&L(e)&&t.traceSeq===e.traceSeq&&t.type===e.type&&t.label===e.label&&!!t.isEmployee==!!e.isEmployee}function z(e,t){return t.stepRef&&e.stepRef===t.stepRef?!0:R(e,t)}function B(e,t,n={}){return[...e].reverse().filter(e=>n.includeDone||e.status===`running`).find(e=>z(e,t))??null}function V(e,t){let n=e.filter(e=>e.status===`running`&&!e.stepRef&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee);return n.length===1?n[0]:null}function H(e,t){let n=[...e].reverse().filter(e=>e.status===`running`);return B(n,t)||V(n,t)}function U(){e.currentProcessBlock&&l(e.currentProcessBlock),e.currentAgentDiv instanceof HTMLElement&&l(e.currentAgentDiv),v(),s(),e.currentAgentDiv=null,e.currentProcessBlock=null,q=null}var W=0;function de(){W=Date.now()}function fe(){W=0}function pe(){return Date.now()-W<8e3}function G(e){for(let t of document.querySelectorAll(`.msg-user`))if(e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING)return!0;return!1}function K(){let t=e.currentAgentDiv&&e.currentAgentDiv.isConnected?e.currentAgentDiv:null;return t?G(t)?(e.currentAgentDiv=null,e.currentProcessBlock=null,q=null,null):t:null}function me(){let e=Array.from(document.querySelectorAll(`.msg-agent`)).at(-1)??null;return!e||G(e)?null:e}function he(t,n){k();let r=K();if(r||(r=x(`agent`,``),e.currentAgentDiv=r,e.currentProcessBlock=null),b(r),!e.currentProcessBlock){let t=r.querySelector(`.agent-body`);t&&(e.currentProcessBlock=S(r)),!e.currentProcessBlock&&t&&(_(r),e.currentProcessBlock=f(t))}if(n&&e.currentProcessBlock&&!e.currentProcessBlock.startedAt&&(e.currentProcessBlock.startedAt=n),e.currentProcessBlock){let n=t.rawIcon||t.icon,r=t.status||a(t.icon)||`running`;if(r===`done`||r===`error`){let a=H(e.currentProcessBlock.steps,t);if(a){t.icon=i(t.icon);let o=t.type===`thinking`?p(a.id,t.detail):g(a.id,t.detail);d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,detail:o,detailPreview:o,label:t.label||a.label,status:r,startTime:a.startTime}),m();return}if(t.stepRef&&(r===`done`||r===`error`)){let a=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&(e.status===`done`||e.status===`error`));if(a){t.icon=i(t.icon);let o=t.type===`thinking`?p(a.id,t.detail):g(a.id,t.detail);d(e.currentProcessBlock,a.id,{...a,...t,id:a.id,rawIcon:n,status:r,detail:o,detailPreview:o,startTime:a.startTime}),m();return}}}if(t.stepRef&&r===`running`){let r=[...e.currentProcessBlock.steps].reverse().find(e=>e.stepRef===t.stepRef&&e.status===`running`);if(r){t.rawIcon=n,t.icon=i(t.icon);let a=p(r.id,t.detail);d(e.currentProcessBlock,r.id,{...r,...t,id:r.id,rawIcon:n,status:`running`,detail:a,detailPreview:a,label:t.label||r.label,startTime:r.startTime}),m();return}}let o=B(e.currentProcessBlock.steps,t,{includeDone:!0});if(o){t.rawIcon=n,t.icon=i(t.icon);let a=t.detail||``,s=c(o.id)||o.detail||o.detailPreview||``,l=a.length>=s.length?a:s,u=p(o.id,l),f=(o.status===`done`||o.status===`error`)&&r===`running`?o.status:r;d(e.currentProcessBlock,o.id,{...o,...t,id:o.id,rawIcon:n,status:f,detail:u,detailPreview:u,label:t.label||o.label,startTime:o.startTime}),m();return}if(t.detail){let n=[...e.currentProcessBlock.steps].reverse().find(e=>e.status===`running`&&e.label===t.label&&e.type===t.type&&!!e.isEmployee==!!t.isEmployee&&!e.detail);if(n){d(e.currentProcessBlock,n.id,t),m();return}}t.rawIcon=n,t.icon=i(t.icon),h(e.currentProcessBlock,t)}m()}var q=null,J=`data-active-run-hydrated`;function Y(e){document.querySelectorAll(`[${J}="true"]`).forEach(t=>{e&&t===e||t.remove()})}function ge(e){let t=K()??me();Y(t);let n=t||x(`agent`,``,e||null);return n.setAttribute(J,`true`),n}function _e(e,t){let n=c(e.id)||e.detail||e.detailPreview||``,r=t.detail||t.detailPreview||``;return r.length>=n.length?r:n}function X(e){return e.stepRef?!0:!!e.traceRunId&&typeof e.traceSeq==`number`&&Number.isFinite(e.traceSeq)&&e.traceSeq>0}function ve(e,t){let n=e.steps.filter(e=>!X(e)),r=0,i=!0;for(let a of t){let t=e.steps.find(e=>z(e,a))??null;if(!t&&!X(a)&&i){let e=n[r]??null;e?e.type===a.type&&!!e.isEmployee==!!a.isEmployee?(t=e,r++):i=!1:r++}if(!t){let n=e.steps.filter(e=>e.label===a.label&&e.type===a.type&&!!e.isEmployee==!!a.isEmployee);t=n.length===1?n[0]:null}if(!t){if(h(e,a),!X(a)&&i){let t=e.steps[e.steps.length-1];t&&n.push(t)}continue}let o=p(t.id,_e(t,a));d(e,t.id,{...t,...a,id:t.id,detail:o,detailPreview:o,label:a.label||t.label})}}function ye(e=[]){document.querySelectorAll(`[data-queued-overlay="true"]`).forEach(e=>e.remove())}var Z=``;function be(e){let t=Array.isArray(e.toolLog)?e.toolLog:[],n=t.map(e=>`${e.stepRef||``}~${e.traceRunId||``}~${e.traceSeq??``}~${e.status||``}~${e.label||``}~${(e.detail||``).length}`).join(`|`);return`${e.traceRunId||``}:${e.cli||``}:${(e.text||``).length}:${t.length}:${n}`}function xe(t){if(!t?.running){Z=``,Y();return}let n=be(t);if(n===Z&&K())return;v(),k(),e.currentAgentDiv=ge(t.cli||null);let r=e.currentAgentDiv.querySelector(`.agent-body`),i=E(t.toolLog||[]);b(e.currentAgentDiv),e.currentProcessBlock=S(e.currentAgentDiv),r&&i.length?(e.currentProcessBlock||=(_(e.currentAgentDiv),f(r)),t.startedAt&&(e.currentProcessBlock.startedAt=t.startedAt),ve(e.currentProcessBlock,C(i,t.startedAt))):e.currentProcessBlock=S(e.currentAgentDiv);let a=e.currentAgentDiv.querySelector(`.msg-content`);a&&(q=N(a,t.text||``)),Z=n}function Q(t){if(!t)return;k(),K()||(e.currentAgentDiv=x(`agent`,``),q=null);let n=e.currentAgentDiv?.querySelector(`.msg-content`);n&&(q||=M(n),F(q,t)),m()}var $=0;function Se(e){e.querySelectorAll(`.mermaid-pending`).forEach(e=>{delete e.dataset.mermaidQueued,delete e.dataset.mermaidQueuedAt})}function Ce(t,i){let a=Date.now();if(!e.currentAgentDiv&&a-$<500)return;Z=``,v(),k(),e.currentAgentDiv&&b(e.currentAgentDiv);let s=se(e.currentProcessBlock??e.currentAgentDiv,!0),c=E(D(Array.isArray(i)?i:[],s)),d=w(c),f=!!e.currentProcessBlock||!!(e.currentAgentDiv&&O(e.currentAgentDiv));e.currentProcessBlock&&=(re(e.currentProcessBlock),null);let p=c.length>0;if(t||p){(!e.currentAgentDiv||!e.currentAgentDiv.isConnected)&&(e.currentAgentDiv=x(`agent`,``)),e.currentAgentDiv.removeAttribute(J);let i=e.currentAgentDiv?.querySelector(`.msg-content`),a=q?I(q,!0):``,s=t||a;if(q=null,i&&(i.innerHTML=o(s)),p&&e.currentAgentDiv&&!f&&!O(e.currentAgentDiv)){let t=e.currentAgentDiv.querySelector(`.msg-content`);t&&t.insertAdjacentHTML(`beforebegin`,te(C(c),!0))}e.currentAgentDiv&&b(e.currentAgentDiv),i&&i.setAttribute(`data-raw`,n(s)),i&&ne(i);let m=ee(),h=!!(m.active&&e.currentAgentDiv&&e.currentAgentDiv.isConnected);if(i&&!h&&r(i,{immediate:!0}),h){let t=e.currentAgentDiv;Se(t),t.querySelectorAll(`.diagram-widget`).forEach(e=>{let t=e,n=t.dataset.widgetHtml,r=t.dataset.widgetId;if(!n&&!r)return;let i=document.createElement(`div`);i.className=`diagram-widget-pending`,r?i.dataset.widgetId=r:n&&(i.dataset.diagramHtml=n),e.replaceWith(i)}),d?(m.appendItem(ie({role:`assistant`,content:s,cli:null,tool_log:d},m.count)),l(t),m.scrollToBottom()):(t.dataset.turnIndex=String(m.count),t.dataset.messageId||(t.dataset.messageId=u()),m.appendLiveItem(t)),t.remove()}s&&ce({role:`assistant`,content:s,tool_log:d,timestamp:Date.now()}).catch(()=>{})}q=null,e.currentAgentDiv=null,$=Date.now(),ae(`idle`),T()}function we(e,n){document.querySelectorAll(`.tab-btn`).forEach(e=>{e.classList.remove(`active`),e.setAttribute(`aria-selected`,`false`)}),document.querySelectorAll(`.tab-content`).forEach(e=>e.classList.remove(`active`)),document.getElementById({agents:`tabAgents`,settings:`tabSettings`,skills:`tabSkills`}[e])?.classList.add(`active`),n&&(n.classList.add(`active`),n.setAttribute(`aria-selected`,`true`)),e===`settings`&&t(()=>import(`./settings-BNqSR9Zr.js`).then(e=>e.loadSettings()),__vite__mapDeps([0])),e===`agents`&&t(()=>import(`./employees-86F_D_Ce.js`).then(e=>e.loadEmployees()),__vite__mapDeps([0])),e===`skills`&&t(()=>import(`./skills-C7Yi3LIq.js`).then(e=>e.loadSkills()),__vite__mapDeps([0]))}function Te(){let e=document.getElementById(`tabSettings`)?.classList.contains(`active`);t(()=>import(`./settings-BNqSR9Zr.js`).then(t=>e?t.savePerCli():t.updateSettings()),__vite__mapDeps([0]))}function Ee(){y({onStatus:oe})}export{Ce as a,Ee as c,he as d,we as f,fe as i,pe as l,ye as n,Te as o,U as r,xe as s,Q as t,de as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{p as e}from"./iframe-renderer-eozJpgjk.js";import{d as t,o as n}from"./message-history-B_fIGorC.js";import{r}from"./ui-C62w6bJS.js";export{r as cleanupToolActivity,n as loadMessages,e as reconcileChatBottomAfterRestore,t as updateQueueBadge};
|
package/public/dist/index.html
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
href="https://fonts.googleapis.com/css2?family=Chakra+Petch:wght@400;500;600;700&family=Outfit:wght@400;500;600;700&display=swap"
|
|
32
32
|
rel="stylesheet">
|
|
33
33
|
<!-- Vite handles module bundling in dev (HMR) and production (build) -->
|
|
34
|
-
<script type="module" crossorigin src="/dist/assets/app-
|
|
34
|
+
<script type="module" crossorigin src="/dist/assets/app-BvRV-aEt.js"></script>
|
|
35
35
|
<link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-kIxHrxDV.css">
|
|
36
36
|
<link rel="stylesheet" crossorigin href="/dist/assets/app-DuyLYRC6.css">
|
|
37
37
|
</head>
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
<link rel="icon" type="image/png" href="/dist/assets/icon-192-CwXPIYF5.png">
|
|
7
7
|
<title>Jaw Manager</title>
|
|
8
8
|
<script src="/manager/theme-boot.js"></script>
|
|
9
|
-
<script type="module" crossorigin src="/dist/assets/manager-
|
|
9
|
+
<script type="module" crossorigin src="/dist/assets/manager-BnmWx9xL.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="/dist/assets/vendor-render-kIxHrxDV.css">
|
|
11
|
-
<link rel="stylesheet" crossorigin href="/dist/assets/manager-
|
|
11
|
+
<link rel="stylesheet" crossorigin href="/dist/assets/manager-Cmu0aKPb.css">
|
|
12
12
|
</head>
|
|
13
13
|
<body>
|
|
14
14
|
<div id="manager-root"></div>
|
package/public/js/constants.ts
CHANGED
|
@@ -46,8 +46,8 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
|
|
|
46
46
|
// renderCliSettings appends an absent selected value as a custom option
|
|
47
47
|
// (public/js/features/settings-core.ts).
|
|
48
48
|
models: [
|
|
49
|
+
'Gemini 3.7 Flash (Medium)',
|
|
49
50
|
'Gemini 3.6 Flash (Medium)',
|
|
50
|
-
'Gemini 3.5 Flash (Medium)',
|
|
51
51
|
],
|
|
52
52
|
},
|
|
53
53
|
'ai-e': {
|
|
@@ -91,6 +91,7 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
|
|
|
91
91
|
'sonnet',
|
|
92
92
|
'sonnet[1m]',
|
|
93
93
|
'haiku',
|
|
94
|
+
'claude-fable-5-1',
|
|
94
95
|
'claude-fable-5',
|
|
95
96
|
'claude-fable-5[1m]',
|
|
96
97
|
'claude-sonnet-5',
|
|
@@ -150,7 +151,7 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
|
|
|
150
151
|
'claude-4.6-opus', 'claude-4.6-sonnet',
|
|
151
152
|
'claude-4.5-opus-high', 'claude-4.5-sonnet', 'claude-4-sonnet',
|
|
152
153
|
'gemini-3.1-pro', 'gemini-3-flash', 'gemini-3-pro', 'gemini-3.5-flash',
|
|
153
|
-
'grok-4.6', 'grok-4.5', 'gpt-5-mini', 'glm-5.2', 'kimi-k2.7-code', 'kimi-k3',
|
|
154
|
+
'grok-4.6', 'grok-4.5', 'gpt-5-mini', 'glm-5.2', 'glm-5.3', 'gpt-5.5-extra', 'kimi-k2.7-code', 'kimi-k3',
|
|
154
155
|
'gemini-3.6-flash', 'gemini-3.7-flash',
|
|
155
156
|
],
|
|
156
157
|
},
|
|
@@ -197,16 +198,29 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
|
|
|
197
198
|
efforts: ['minimal', 'low', 'high', 'max'],
|
|
198
199
|
models: [
|
|
199
200
|
'opencode-go/kimi-k2.7-code',
|
|
201
|
+
'opencode-go/kimi-k3',
|
|
202
|
+
'opencode-go/kimi-k2.6',
|
|
203
|
+
'opencode-go/kimi-k2.5',
|
|
204
|
+
'opencode-go/glm-5.3',
|
|
200
205
|
'opencode-go/glm-5.2',
|
|
201
206
|
'opencode-go/glm-5.1',
|
|
202
|
-
'opencode-go/
|
|
203
|
-
'opencode-go/
|
|
204
|
-
'opencode-go/
|
|
207
|
+
'opencode-go/glm-5',
|
|
208
|
+
'opencode-go/grok-4.6',
|
|
209
|
+
'opencode-go/grok-4.5',
|
|
210
|
+
'opencode-go/minimax-m3',
|
|
205
211
|
'opencode-go/minimax-m2.7',
|
|
212
|
+
'opencode-go/minimax-m2.5',
|
|
213
|
+
'opencode-go/qwen3.7-max',
|
|
206
214
|
'opencode-go/qwen3.7-plus',
|
|
207
215
|
'opencode-go/qwen3.6-plus',
|
|
216
|
+
'opencode-go/qwen3.5-plus',
|
|
217
|
+
'opencode-go/mimo-v2.5-pro',
|
|
218
|
+
'opencode-go/mimo-v2.5',
|
|
219
|
+
'opencode-go/mimo-v2-pro',
|
|
220
|
+
'opencode-go/mimo-v2-omni',
|
|
208
221
|
'opencode-go/deepseek-v4-pro',
|
|
209
222
|
'opencode-go/deepseek-v4-flash',
|
|
223
|
+
'opencode-go/hy3',
|
|
210
224
|
],
|
|
211
225
|
},
|
|
212
226
|
copilot: {
|
|
@@ -214,6 +228,9 @@ const FALLBACK_CLI_REGISTRY: CliRegistry = {
|
|
|
214
228
|
efforts: ['low', 'medium', 'high'],
|
|
215
229
|
effortNote: '-> ~/.copilot/config.json',
|
|
216
230
|
models: [
|
|
231
|
+
'gpt-5.6-sol',
|
|
232
|
+
'gpt-5.6-terra',
|
|
233
|
+
'gpt-5.6-luna',
|
|
217
234
|
'gpt-5.5',
|
|
218
235
|
'claude-fable-5',
|
|
219
236
|
'claude-opus-4.8',
|
|
@@ -139,4 +139,9 @@ export interface SettingsData {
|
|
|
139
139
|
settingsSchemaVersion?: number;
|
|
140
140
|
runtimeDefaultMigration?: RuntimeDefaultMigration | null;
|
|
141
141
|
multiSessionDefaultMigration?: MultiSessionDefaultMigration | null;
|
|
142
|
+
multiSession?: {
|
|
143
|
+
enabled?: boolean;
|
|
144
|
+
/** Mid-run message policy; server normalizes every invalid value to 'steer'. */
|
|
145
|
+
midRunPolicy?: 'steer' | 'followup' | 'collect' | 'interrupt';
|
|
146
|
+
};
|
|
142
147
|
}
|
|
@@ -495,5 +495,5 @@ export function App() { if (readTrayRemindersMode(window.location.search) && REM
|
|
|
495
495
|
/>
|
|
496
496
|
);
|
|
497
497
|
|
|
498
|
-
return <AppChrome view={view} palette={palette} theme={theme} query={query} loading={loading} showHidden={showHidden} instances={instances} selectedInstance={selectedInstance} data={data} summary={summary} scheduleGroup={scheduleGroup} boardView={boardView} notesModel={notesModel} notesSelectedNote={notesSelectedNote} notesDirtyPath={notesDirtyPath} notesHighlightedPath={notesHighlightedPath} notesSidebarMode={notesSidebarMode} notesSearchFocusToken={notesSearchFocusToken} settingsSection={dashboardSettingsSection} dashboardSettingsUi={dashboardSettingsUi} titleSupport={titleSupport} activityEvents={activityEvents} busyPorts={messageActivity.busyPorts} titlesByPort={messageActivity.titlesByPort} lifecycleMessage={lifecycleMessage} error={error} registryMessage={registry.error || labelEditor.error || managerEvents.error} workbenchHeader={workbenchHeader} detailContent={detailContent} instanceListContent={instanceListContent} drawerProfileFilters={profileChipStrip(profiles)} jawCeoWorkbenchButton={jawCeoBridge.workbenchButton} jawCeoVoiceOverlay={jawCeoBridge.voiceOverlay} jawCeo={jawCeoBridge.ceo} jawCeoVoice={jawCeoBridge.voice} jawCeoOpen={jawCeoBridge.open} jawCeoSelectedPort={activeJawCeoPort} onJawCeoOpenChange={jawCeoBridge.setOpen} onJawCeoOpenWorker={handleOpenJawCeoWorker} previewEnabled={previewEnabled} previewRefreshKey={previewRefreshKey} autoUnloadNotice={autoUnloadNotice} helpOpen={helpOpen} helpTopic={helpTopic} setQuery={setQuery} setShowHidden={setShowHidden} setPreviewEnabled={setPreviewEnabled} setAutoUnloadNotice={setAutoUnloadNotice} setHelpOpen={setHelpOpen} setHelpTopic={setHelpTopic} onOpenHelpTopic={openHelpTopic} setNotesSidebarMode={setNotesSidebarMode} setBoardView={setBoardView} setScheduleGroup={setScheduleGroup} setDashboardSettingsSection={setDashboardSettingsSection} load={load} cycleTheme={cycleTheme} openSelectedInBrowser={openSelectedInBrowser} handleSelectInstance={handleSelectInstance} handleSidebarModeChange={handleSidebarModeChange} handleSidebarToggle={handleSidebarToggle} handleNotesSelectedPathChange={handleNotesSelectedPathChange} openNotesFromPreview={openNotesFromPreview} handleNotesViewModeChange={handleNotesViewModeChange} handleNotesAuthoringModeChange={handleNotesAuthoringModeChange} handleNotesWordWrapChange={handleNotesWordWrapChange} handleNotesVimModeChange={handleNotesVimModeChange} handleNotesTreeWidthChange={handleNotesTreeWidthChange} handleNotesGraphSettingsChange={handleNotesGraphSettingsChange} openNotesSidebarSearch={openNotesSidebarSearch} setNotesDirtyPath={setNotesDirtyPath} handleTabChange={handleTabChange} handleActivityToggle={handleActivityToggle} handleActivityHeight={handleActivityHeight} onDismissLifecycleMessage={() => setLifecycleMessage(null)} handleDashboardSettingsPatch={handleDashboardSettingsPatch} activityUnreadOpenAndMarkSeen={activityUnread.openAndMarkSeen} panelInitialState={panelInitialState} onPanelStateChange={handlePanelStateChange} />;
|
|
498
|
+
return <AppChrome view={view} palette={palette} theme={theme} query={query} loading={loading} showHidden={showHidden} instances={instances} selectedInstance={selectedInstance} data={data} summary={summary} scheduleGroup={scheduleGroup} boardView={boardView} notesModel={notesModel} notesSelectedNote={notesSelectedNote} notesDirtyPath={notesDirtyPath} notesHighlightedPath={notesHighlightedPath} notesSidebarMode={notesSidebarMode} notesSearchFocusToken={notesSearchFocusToken} settingsSection={dashboardSettingsSection} dashboardSettingsUi={dashboardSettingsUi} titleSupport={titleSupport} activityEvents={activityEvents} busyPorts={messageActivity.busyPorts} titlesByPort={messageActivity.titlesByPort} lifecycleMessage={lifecycleMessage} error={error} registryMessage={registry.error || labelEditor.error || managerEvents.error} workbenchHeader={workbenchHeader} detailContent={detailContent} instanceListContent={instanceListContent} drawerProfileFilters={profileChipStrip(profiles)} jawCeoWorkbenchButton={jawCeoBridge.workbenchButton} jawCeoVoiceOverlay={jawCeoBridge.voiceOverlay} jawCeo={jawCeoBridge.ceo} jawCeoVoice={jawCeoBridge.voice} jawCeoOpen={jawCeoBridge.open} jawCeoSelectedPort={activeJawCeoPort} onJawCeoOpenChange={jawCeoBridge.setOpen} onJawCeoOpenWorker={handleOpenJawCeoWorker} previewEnabled={previewEnabled} previewRefreshKey={previewRefreshKey} autoUnloadNotice={autoUnloadNotice} helpOpen={helpOpen} helpTopic={helpTopic} setQuery={setQuery} setShowHidden={setShowHidden} setPreviewEnabled={setPreviewEnabled} setAutoUnloadNotice={setAutoUnloadNotice} setHelpOpen={setHelpOpen} setHelpTopic={setHelpTopic} onOpenHelpTopic={openHelpTopic} setNotesSidebarMode={setNotesSidebarMode} setBoardView={setBoardView} setScheduleGroup={setScheduleGroup} setDashboardSettingsSection={setDashboardSettingsSection} load={load} cycleTheme={cycleTheme} openSelectedInBrowser={openSelectedInBrowser} handleSelectInstance={handleSelectInstance} handleSidebarModeChange={handleSidebarModeChange} handleSidebarToggle={handleSidebarToggle} handleNotesSelectedPathChange={handleNotesSelectedPathChange} openNotesFromPreview={openNotesFromPreview} handleNotesViewModeChange={handleNotesViewModeChange} handleNotesAuthoringModeChange={handleNotesAuthoringModeChange} handleNotesWordWrapChange={handleNotesWordWrapChange} handleNotesVimModeChange={handleNotesVimModeChange} handleNotesTreeWidthChange={handleNotesTreeWidthChange} handleNotesGraphSettingsChange={handleNotesGraphSettingsChange} openNotesSidebarSearch={openNotesSidebarSearch} setNotesDirtyPath={setNotesDirtyPath} handleTabChange={handleTabChange} handleActivityToggle={handleActivityToggle} handleActivityHeight={handleActivityHeight} onDismissLifecycleMessage={() => setLifecycleMessage(null)} handleDashboardSettingsPatch={handleDashboardSettingsPatch} activityUnreadOpenAndMarkSeen={activityUnread.openAndMarkSeen} panelInitialState={panelInitialState} onPanelStateChange={handlePanelStateChange} onShortcutAction={runManagerShortcut} />;
|
|
499
499
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { useEffect, type Dispatch, type ReactNode, type SetStateAction } from 'react';
|
|
2
2
|
import { CommandBar } from './components/CommandBar';
|
|
3
3
|
import { CommandPalette } from './components/CommandPalette';
|
|
4
4
|
import { ManagerShell } from './components/ManagerShell';
|
|
@@ -17,8 +17,10 @@ import type { NotesModelState } from './notes/useNotesModel';
|
|
|
17
17
|
import type { NotesSidebarMode } from './notes/NotesSidebar';
|
|
18
18
|
import type { CommandPaletteApi } from './hooks/useCommandPalette';
|
|
19
19
|
import type { ThemeApi } from './hooks/useTheme';
|
|
20
|
+
import { useWindowFullscreen } from './hooks/useWindowFullscreen';
|
|
20
21
|
import type { useDashboardView } from './hooks/useDashboardView';
|
|
21
|
-
import type { DashboardDetailTab, DashboardInstance, DashboardNotesAuthoringMode, DashboardNotesGraphSettings, DashboardNotesViewMode, DashboardScanResult, ManagerEvent, NoteMetadata } from './types';
|
|
22
|
+
import type { DashboardDetailTab, DashboardInstance, DashboardNotesAuthoringMode, DashboardNotesGraphSettings, DashboardNotesViewMode, DashboardScanResult, DashboardShortcutAction, ManagerEvent, NoteMetadata } from './types';
|
|
23
|
+
import { createManagerCaptureKeydownHandler } from './manager-shortcut-runner';
|
|
22
24
|
|
|
23
25
|
type AppChromeProps = {
|
|
24
26
|
view: ReturnType<typeof useDashboardView>;
|
|
@@ -100,9 +102,21 @@ type AppChromeProps = {
|
|
|
100
102
|
activityUnreadOpenAndMarkSeen: () => void;
|
|
101
103
|
panelInitialState?: Partial<PanelLayoutState> | undefined;
|
|
102
104
|
onPanelStateChange?: ((state: PanelLayoutState) => void) | undefined;
|
|
105
|
+
onShortcutAction: (action: DashboardShortcutAction) => void;
|
|
103
106
|
};
|
|
104
107
|
|
|
105
108
|
export function AppChrome(props: AppChromeProps) {
|
|
109
|
+
useWindowFullscreen();
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
if (!props.view.dashboardShortcutsEnabled) return undefined;
|
|
112
|
+
const handler = createManagerCaptureKeydownHandler(
|
|
113
|
+
() => props.view.dashboardShortcutKeymap,
|
|
114
|
+
props.onShortcutAction,
|
|
115
|
+
);
|
|
116
|
+
window.addEventListener('keydown', handler, true);
|
|
117
|
+
return () => window.removeEventListener('keydown', handler, true);
|
|
118
|
+
}, [props.view.dashboardShortcutsEnabled, props.view.dashboardShortcutKeymap, props.onShortcutAction]);
|
|
119
|
+
|
|
106
120
|
return (
|
|
107
121
|
<>
|
|
108
122
|
<IframeBridge />
|
|
@@ -139,7 +153,8 @@ export function AppChrome(props: AppChromeProps) {
|
|
|
139
153
|
onSelectTab={props.handleTabChange} onToggleActivityFromMobile={props.activityUnreadOpenAndMarkSeen} drawerProfileFilters={props.drawerProfileFilters}
|
|
140
154
|
dashboardSettingsUi={props.dashboardSettingsUi} titleSupport={props.titleSupport} onDashboardSettingsPatch={props.handleDashboardSettingsPatch}
|
|
141
155
|
viewMode={props.view.viewMode} onViewModeChange={props.view.setViewMode}
|
|
142
|
-
port={Number(window.location.port) || 3457} workingDir={props.view.rightFolderRootPath || ''}
|
|
156
|
+
port={Number(window.location.port) || 3457} workingDir={props.view.rightFolderRootPath || ''}
|
|
157
|
+
query={props.query} onQueryChange={props.setQuery} onSelectInstance={props.handleSelectInstance} />
|
|
143
158
|
)}
|
|
144
159
|
activityHeight={props.view.activityDockCollapsed ? 48 : props.view.activityDockHeight}
|
|
145
160
|
/>
|
|
@@ -61,13 +61,16 @@ import type {
|
|
|
61
61
|
DashboardLocale,
|
|
62
62
|
ManagerEvent,
|
|
63
63
|
DashboardRegistryUi,
|
|
64
|
+
DashboardShortcutAction,
|
|
64
65
|
} from './types';
|
|
66
|
+
import { useSidebarWidth } from './hooks/useSidebarWidth';
|
|
65
67
|
import { JawCeoConsole } from './jaw-ceo/JawCeoConsole';
|
|
66
68
|
import type { JawCeoController } from './jaw-ceo/useJawCeo';
|
|
67
69
|
import type { JawCeoVoiceController } from './jaw-ceo/useJawCeoVoice';
|
|
68
70
|
import { ModeSwitch } from './code/ModeSwitch';
|
|
69
71
|
const CodeCanvas = lazy(() => import('./code/CodeCanvas').then(m => ({ default: m.CodeCanvas })));
|
|
70
72
|
import './code/code.css';
|
|
73
|
+
import { registerInstanceJumpSelector } from './components/sidebar-keyboard';
|
|
71
74
|
|
|
72
75
|
type WorkspaceSurfaceProps = {
|
|
73
76
|
active: boolean;
|
|
@@ -170,6 +173,9 @@ type Props = {
|
|
|
170
173
|
onViewModeChange: (mode: DashboardViewMode) => void;
|
|
171
174
|
port: number;
|
|
172
175
|
workingDir: string;
|
|
176
|
+
query: string;
|
|
177
|
+
onQueryChange: (value: string) => void;
|
|
178
|
+
onSelectInstance: (instance: DashboardInstance) => void;
|
|
173
179
|
};
|
|
174
180
|
|
|
175
181
|
type RightPanelRenderContext = {
|
|
@@ -346,6 +352,17 @@ export function SidebarRailRouter(props: Props) {
|
|
|
346
352
|
&& props.notesSelectedNote
|
|
347
353
|
&& !props.notesSelectedNote.tags?.includes(props.notesModel.tagFilter),
|
|
348
354
|
);
|
|
355
|
+
|
|
356
|
+
useEffect(() => {
|
|
357
|
+
registerInstanceJumpSelector(port => {
|
|
358
|
+
const instance = props.instances.find(row => row.port === port)
|
|
359
|
+
?? (props.selectedInstance?.port === port ? props.selectedInstance : null);
|
|
360
|
+
if (instance) props.onSelectInstance(instance);
|
|
361
|
+
});
|
|
362
|
+
return () => {
|
|
363
|
+
registerInstanceJumpSelector(null);
|
|
364
|
+
};
|
|
365
|
+
}, [props.instances, props.selectedInstance, props.onSelectInstance]);
|
|
349
366
|
// External file open: focus/create a Files tab and assign the file to it.
|
|
350
367
|
// Stable identity matters: this is passed as `onLocalFileOpen` into
|
|
351
368
|
// MarkdownRenderer (via CodeCanvas/DocPanel), and a fresh function each
|
|
@@ -432,12 +449,30 @@ export function SidebarRailRouter(props: Props) {
|
|
|
432
449
|
props.onDashboardSettingsPatch({ rightFolderRootPath: primaryProjectDir });
|
|
433
450
|
}, [panelLayout, primaryProjectDir, props.onDashboardSettingsPatch]);
|
|
434
451
|
|
|
452
|
+
const sidebar = useSidebarWidth({
|
|
453
|
+
rightPanelOpen,
|
|
454
|
+
rightPanelWidth: panelLayout.state.rightPanel.width,
|
|
455
|
+
});
|
|
456
|
+
|
|
457
|
+
useEffect(() => {
|
|
458
|
+
function onShortcutAction(event: Event) {
|
|
459
|
+
const detail = (event as CustomEvent<DashboardShortcutAction>).detail;
|
|
460
|
+
if (detail === 'resetSidebarWidth') sidebar.reset();
|
|
461
|
+
}
|
|
462
|
+
document.addEventListener('jaw:shortcut-action', onShortcutAction);
|
|
463
|
+
return () => document.removeEventListener('jaw:shortcut-action', onShortcutAction);
|
|
464
|
+
}, [sidebar.reset]);
|
|
465
|
+
|
|
435
466
|
return (
|
|
436
467
|
<NotesCommandProvider>
|
|
437
468
|
{props.jawCeoVoiceOverlay}
|
|
438
469
|
<WorkspaceLayout
|
|
439
470
|
navigatorLabel={props.viewMode === 'code' && props.sidebarMode === 'instances' ? 'Code sessions' : undefined}
|
|
440
471
|
sidebarCollapsed={props.sidebarCollapsed}
|
|
472
|
+
sidebarWidth={sidebar.width}
|
|
473
|
+
onSidebarWidthDelta={sidebar.addDelta}
|
|
474
|
+
onSidebarWidthEnd={sidebar.persist}
|
|
475
|
+
onSidebarWidthReset={sidebar.reset}
|
|
441
476
|
inspectorCollapsed={props.activityDockCollapsed}
|
|
442
477
|
inspectorHeight={props.activityDockCollapsed ? 48 : props.activityDockHeight}
|
|
443
478
|
drawerOpen={props.drawerOpen}
|
|
@@ -499,7 +534,18 @@ export function SidebarRailRouter(props: Props) {
|
|
|
499
534
|
<div id="code-session-sidebar-host" className="code-session-sidebar-host" />
|
|
500
535
|
</section>
|
|
501
536
|
) : (
|
|
502
|
-
<InstanceNavigator
|
|
537
|
+
<InstanceNavigator
|
|
538
|
+
active={props.selectedInstance}
|
|
539
|
+
hiddenCount={props.instances.filter(instance => instance.hidden).length}
|
|
540
|
+
collapsed={props.sidebarCollapsed}
|
|
541
|
+
query={props.query}
|
|
542
|
+
onQueryChange={props.onQueryChange}
|
|
543
|
+
onSelectPort={port => {
|
|
544
|
+
const instance = props.instances.find(row => row.port === port)
|
|
545
|
+
?? (props.selectedInstance?.port === port ? props.selectedInstance : null);
|
|
546
|
+
if (instance) props.onSelectInstance(instance);
|
|
547
|
+
}}
|
|
548
|
+
>
|
|
503
549
|
{props.instanceListContent}
|
|
504
550
|
</InstanceNavigator>
|
|
505
551
|
)}
|