@aiworker/web 1.23.2 → 1.23.3
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/dist/assets/{CodeMirrorCommentWidgets-COGJG0Iv.js → CodeMirrorCommentWidgets-pFeKzADY.js} +1 -1
- package/dist/assets/{DiffView-BviYY3zL.js → DiffView-BYwAHIlW.js} +3 -3
- package/dist/assets/{DirtyBranchSwitchDialog-C26DvfVJ.js → DirtyBranchSwitchDialog-BeyJczAi.js} +1 -1
- package/dist/assets/{FilesView-D0ZU_nCt.js → FilesView-lrP5OlzK.js} +6 -6
- package/dist/assets/{GitView-CYgiDRH-.js → GitView-CCUK73JL.js} +4 -4
- package/dist/assets/{JsonTreeView-GsV9UScz.js → JsonTreeView-CqUi8Ytj.js} +1 -1
- package/dist/assets/{LinearIssuesView-shqUS8nl.js → LinearIssuesView-C0WwIDQN.js} +1 -1
- package/dist/assets/{MarkdownImageGallery-CQSTFp6m.js → MarkdownImageGallery-0NXPad4K.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-DJWP3A8X.js → MarkdownRendererImpl-q-rUxBkU.js} +4 -4
- package/dist/assets/{OnboardingScreen-CTuu4lgo.js → OnboardingScreen-Cy6xZ-IQ.js} +1 -1
- package/dist/assets/{PatchDiff-Dp53v2pl.js → PatchDiff-DuYWs-7m.js} +1 -1
- package/dist/assets/{PierreDiffViewer-B5l0djPS.js → PierreDiffViewer-C51SEtjJ.js} +1 -1
- package/dist/assets/{PlanView-CLUWkGiG.js → PlanView-k63mHfFF.js} +1 -1
- package/dist/assets/SettingsView-DNJXHPYC.js +28 -0
- package/dist/assets/{SettingsWindow-DbgEnZ6T.js → SettingsWindow-DFMJqIkx.js} +1 -1
- package/dist/assets/{ToolOutputDialog-Du-RZj-a.js → ToolOutputDialog-B4kBDjLK.js} +4 -4
- package/dist/assets/{ToolPartDiffPreview-HBLSokoe.js → ToolPartDiffPreview-DhVBmwis.js} +2 -2
- package/dist/assets/{VirtualizedFileDiff-Bzp3hClU.js → VirtualizedFileDiff-C-MFNoKo.js} +1 -1
- package/dist/assets/{WalkthroughView-CpgA4s9w.js → WalkthroughView-hmnM70S9.js} +1 -1
- package/dist/assets/{computeVirtualFileMetrics-CI1PC_z2.js → computeVirtualFileMetrics-Bv64vrxY.js} +1 -1
- package/dist/assets/{de-BX8b4hDD.js → de-i-51iOMQ.js} +2 -2
- package/dist/assets/{es-e98cS-yM.js → es-CNkqJISC.js} +3 -3
- package/dist/assets/{fr-BOiqxJAs.js → fr-a9t4bHWo.js} +3 -3
- package/dist/assets/index-BvwlOZOg.js +40 -0
- package/dist/assets/{index-Cmn74sw-.js → index-C-KjDH6t.js} +1 -1
- package/dist/assets/index-n5p3SnES.css +1 -0
- package/dist/assets/{isDiffPlainText-DVralkU-.js → isDiffPlainText-B0pMS3gs.js} +1 -1
- package/dist/assets/{isFilePlainText-CgTREsRX.js → isFilePlainText-IXDeiXmH.js} +1 -1
- package/dist/assets/{ja-aoO55hGu.js → ja-C2HQKC-_.js} +3 -3
- package/dist/assets/{ko-BGzFLogk.js → ko-CvVt6P_Q.js} +3 -3
- package/dist/assets/main-6ZT1mvpO.js +930 -0
- package/dist/assets/{main-BgfXQ-4g.js → main-BeWvA5d9.js} +2 -2
- package/dist/assets/markdownCore-DTW1POUM.js +5 -0
- package/dist/assets/{miniChat-DHKXp-_I.js → miniChat-DzMGD1Hv.js} +2 -2
- package/dist/assets/{mobile-lXQ08VnX.js → mobile-CrDSF4dQ.js} +2 -2
- package/dist/assets/{patchFileDiff-i1lTtNbn.js → patchFileDiff-DHG-znZQ.js} +3 -3
- package/dist/assets/{pl-B5x19laq.js → pl-CQi2SXLP.js} +3 -3
- package/dist/assets/{pt-BR-C3oU51Il.js → pt-BR-FdnmJOe8.js} +3 -3
- package/dist/assets/{renderElectronMiniChatApp-CuO4ue6B.js → renderElectronMiniChatApp-BuaS0XYk.js} +2 -2
- package/dist/assets/renderMobileApp-hxXJf_Db.js +25 -0
- package/dist/assets/runtimeEndpointReset-DB4KI-ED.js +41 -0
- package/dist/assets/{scheduledTasksApi-BEuUF_cj.js → scheduledTasksApi-DZaxQ19y.js} +1 -1
- package/dist/assets/{shikiHighlight-ctlcPvvx.js → shikiHighlight-B1goMnV6.js} +1 -1
- package/dist/assets/{tr-C0QQa7et.js → tr-BwD9HLzh.js} +2 -2
- package/dist/assets/{uk-CqLSe9wT.js → uk-BWNCwGJO.js} +3 -3
- package/dist/assets/{useAppFontEffects-B6OfEypo.js → useAppFontEffects-cYK1WODe.js} +130 -130
- package/dist/assets/useGitComparison-DIetwQtj.js +1 -0
- package/dist/assets/{useInlineCommentController-CgbrpEWu.js → useInlineCommentController-DscFZWyI.js} +2 -2
- package/dist/assets/{useRootScrollLock-Me41OjBT.js → useRootScrollLock-CE3HJBOu.js} +1 -1
- package/dist/assets/{vendor-codemirror-language-data-SJuFp0a0.js → vendor-codemirror-language-data-CsvoASYk.js} +2 -2
- package/dist/assets/{vendor-remixicon-react-Dil0zKKT.js → vendor-remixicon-react-BDmGmFCA.js} +1 -1
- package/dist/assets/{web-components-D8GS8Ork.js → web-components-HM6S8xyb.js} +1 -1
- package/dist/assets/{zh-CN-iJEie4d6.js → zh-CN-CH6L_7cX.js} +3 -3
- package/dist/assets/{zh-TW-CyslEwlK.js → zh-TW--py9VFnc.js} +3 -3
- package/dist/index.html +3 -3
- package/dist/mini-chat.html +3 -3
- package/dist/mobile.html +3 -3
- package/package.json +2 -2
- package/server/lib/opencode/DOCUMENTATION.md +14 -0
- package/server/lib/opencode/openchamber-routes.js +72 -14
- package/server/lib/opencode/openchamber-routes.test.js +71 -3
- package/server/lib/opencode/settings-helpers.js +5 -0
- package/server/lib/opencode/settings-helpers.test.js +13 -1
- package/server/lib/opencode/settings-registry.json +3 -0
- package/dist/assets/SettingsView-CojPQVHx.js +0 -28
- package/dist/assets/index-BD8ILbxF.js +0 -40
- package/dist/assets/index-zhgg-SDz.css +0 -1
- package/dist/assets/main-DGYUWmIt.js +0 -930
- package/dist/assets/markdownCore-BesaNs_G.js +0 -5
- package/dist/assets/renderMobileApp-B3zFlHy4.js +0 -25
- package/dist/assets/runtimeEndpointReset-BLzrtrmj.js +0 -41
- package/dist/assets/useGitComparison-BXZXEAW6.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{R as I,j as M,c as ye,r as l}from"./vendor-react-BUCujlKS.js";import{a as Ke}from"./web-components-
|
|
1
|
+
import{R as I,j as M,c as ye,r as l}from"./vendor-react-BUCujlKS.js";import{a as Ke}from"./web-components-HM6S8xyb.js";import{f as Ie}from"./computeVirtualFileMetrics-Bv64vrxY.js";import{V as Ye,F as Xe}from"./VirtualizedFileDiff-C-MFNoKo.js";import{V as Je}from"./Virtualizer-D_a8gKmg.js";import{en as Qe,eo as ze,be as Ze,bU as et,h as Ne}from"./useAppFontEffects-cYK1WODe.js";import{I as He,a as tt,u as nt}from"./useInlineCommentController-DscFZWyI.js";import"./index-BvwlOZOg.js";import{af as rt}from"./runtimeEndpointReset-DB4KI-ED.js";import{ensurePierreThemeRegistered as $e,getResolvedShikiTheme as qe}from"./appThemeRegistry-BK0dHKa6.js";const ve=i=>{if(i.type==="new"){const n=Math.min(i.selection.start,i.selection.end),r=Math.max(i.selection.start,i.selection.end);return`new-comment-${i.selection.side??"additions"}-${n}-${r}`}return`draft-${i.draft.id}`},it=i=>{const{drafts:n,editingDraftId:r,selection:a}=i,d=[];for(const w of n){if(!Number.isFinite(w.endLine))continue;const L=Math.max(1,Math.floor(w.endLine)),C=w.side==="original"?"deletions":"additions";d.push({lineNumber:L,side:C,metadata:{type:w.id===r?"edit":"saved",draft:w}})}return a&&!r&&d.push({lineNumber:Math.max(a.start,a.end),side:a.side??"additions",metadata:{type:"new",selection:a}}),d};function ot(i){const n=i.trim();if(!n)return null;if(/^-?\d+(\.\d+)?$/.test(n)){const r=Number.parseFloat(n);return Number.isFinite(r)?r:null}if(n.endsWith("px")){const r=Number.parseFloat(n.slice(0,-2));return Number.isFinite(r)?r:null}return null}function Be(i){if(!(!i||i<=0))return Math.max(200,Math.floor(i))}function st(i){const{diffRootRef:n,drafts:r,selection:a,editingDraftId:d,commentText:w,onTextChange:L,fileLabel:C,onSave:u,onCancel:$,onEdit:z,onDelete:N}=i,[V,O]=I.useState(0),[ee,P]=I.useState(null),H=I.useMemo(()=>!a||d?null:ve({type:"new",selection:a}),[d,a]),te=I.useMemo(()=>{const o=r.map(b=>ve({type:b.id===d?"edit":"saved",draft:b}));return H&&o.push(H),o},[r,d,H]),K=I.useCallback(o=>{const b=n.current;if(!b)return null;const S=b.querySelector("diffs-container");if(!(S instanceof HTMLElement))return null;const k=S.querySelector(`[data-annotation-id="${o}"]`);if(k instanceof HTMLElement)return k;const T=S.shadowRoot;return T?T.querySelector(`[data-annotation-id="${o}"]`):null},[n]);I.useEffect(()=>{if(te.length===0)return;let o=!1,b=0;const S=12,k=()=>{o||te.every(F=>!!K(F))||b>=S||(b+=1,requestAnimationFrame(()=>{o||(O(F=>F+1),k())}))};return k(),()=>{o=!0}},[te,K]),I.useEffect(()=>{const o=n.current;if(!o)return;const b=()=>{const k=getComputedStyle(o),T=ot(k.getPropertyValue("--oc-context-panel-width")),F=o.getBoundingClientRect(),W=T??F.width;P(W>0?W:null)};b();const S=new ResizeObserver(()=>{b()});return S.observe(o),window.addEventListener("resize",b),()=>{S.disconnect(),window.removeEventListener("resize",b)}},[n]);const Y=I.useCallback(o=>{const S=n.current?.getBoundingClientRect(),k=o.closest("[data-annotation-content]"),T=k instanceof HTMLElement?k.getBoundingClientRect():o.getBoundingClientRect(),F=[T.width];S&&F.push(S.right-T.left);const W=F.filter(ce=>Number.isFinite(ce)&&ce>0);return W.length>0?Be(Math.min(...W)):Be(ee)},[n,ee]);return M.jsxs(M.Fragment,{children:[r.map(o=>{const b=ve({type:o.id===d?"edit":"saved",draft:o}),S=K(b);if(!S)return null;const k=Y(S);return o.id===d?ye.createPortal(M.jsx(He,{initialText:w,onTextChange:L,fileLabel:C,lineRange:{start:o.startLine,end:o.endLine,side:o.side==="original"?"deletions":"additions"},isEditing:!0,onSave:u,onCancel:$,maxWidth:k}),S,`draft-edit-${o.id}`):ye.createPortal(M.jsx(tt,{draft:o,onEdit:()=>z(o),onDelete:()=>N(o),maxWidth:k}),S,`draft-card-${o.id}`)}),a&&!d&&H&&(()=>{const o=K(H);if(!o)return null;const b=Y(o);return ye.createPortal(M.jsx(He,{initialText:w,onTextChange:L,fileLabel:C,lineRange:a,isEditing:!1,onSave:u,onCancel:$,maxWidth:b}),o,H)})()]})}const De=[],at=`
|
|
2
2
|
[data-gutter-buffer="annotation"] { min-height: 0; }
|
|
3
3
|
[data-code] { min-height: 2.5rem; align-content: start; }
|
|
4
4
|
`,Oe=5e5,lt=`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{R as t,j as n}from"./vendor-react-BUCujlKS.js";import{n as jt,u as qe,a as he,
|
|
1
|
+
import{R as t,j as n}from"./vendor-react-BUCujlKS.js";import{n as jt,u as qe,a as he,x as Xe,h as Ze,A as bt}from"./index-BvwlOZOg.js";import{c as Ct,s as Rt,P as Pt,C as kt}from"./shikiHighlight-B1goMnV6.js";import{f as Mt,y as H,ck as Tt,aE as Nt,b as et,J as Et,ae as It,Y as Dt,be as Vt,R as Ft,fq as At,$ as Lt,hi as Wt,l as tt,fp as $t,au as nt,gy as Kt,fn as zt,d4 as rt,fs as Ot,ft as _t,m as Bt,hj as Gt,ao as st,a9 as ge,aa as we,ap as it,B as ne,I as z,ab as ve,ar as ot,bc as re,g as Jt,bU as Ut,ax as Ht,c9 as Yt,hk as Qt}from"./useAppFontEffects-cYK1WODe.js";import{u as qt,n as Xt}from"./useInlineCommentController-DscFZWyI.js";import{b as Zt}from"./CodeMirrorCommentWidgets-pFeKzADY.js";import{getResolvedShikiTheme as en}from"./appThemeRegistry-BK0dHKa6.js";import{E as tn}from"./vendor-codemirror-view-CiLROUVV.js";import{ae as nn}from"./runtimeEndpointReset-DB4KI-ED.js";import"./vendor-scheduler-7OC5HNn7.js";import"./vendor-zod-B6551dwG.js";import"./vendor-vite-runtime-DD1OZmLC.js";import"./vendor-zustand-BAGL70zf.js";import"./vendor-opencode-sdk-BJ73u-bH.js";import"./vendor-codemirror-state-C9awkmn-.js";import"./vendor-marijn-find-cluster-break-DXwl3gUT.js";import"./vendor-codemirror-commands-B7H_j0iU.js";import"./vendor-codemirror-language-BgPj_McA.js";import"./vendor-lezer-common-B3-cUCR_.js";import"./vendor-lezer-highlight-CDMHUZ74.js";import"./vendor-style-mod-NZ5MEPvj.js";import"./vendor-codemirror-search-BmS-GmcX.js";import"./vendor-crelt-C8TCjufn.js";import"./vendor-replit-codemirror-vim-B2DJlAhT.js";import"./vendor-replit-codemirror-vim-core-FHzKdNUS.js";import"./vendor-simplewebauthn-browser-VDA66rT_.js";import"./vendor-base-ui-BY_5qla_.js";import"./vendor-floating-ui-utils-D6FqdtJt.js";import"./vendor-floating-ui-react-dom-DxYCWdHj.js";import"./vendor-floating-ui-dom-BTvzWks8.js";import"./vendor-floating-ui-core-PuGzNPnN.js";import"./vendor-use-sync-external-store-D6wYuSt-.js";import"./vendor-class-variance-authority-5VPnzWs2.js";import"./vendor-clsx-B-dksMZM.js";import"./vendor-dnd-kit-core-BZknOX2w.js";import"./vendor-dnd-kit-utilities-B_MdXhJC.js";import"./vendor-dnd-kit-accessibility-BHxJPORy.js";import"./vendor-dnd-kit-sortable-CsEagZ81.js";import"./vendor-framer-motion-livSKyyV.js";import"./vendor-motion-dom-D_o3BTI3.js";import"./vendor-motion-utils-BGh8QBgx.js";import"./vendor-tanstack-react-virtual-g05Cx3z9.js";import"./vendor-tanstack-virtual-core-Dubg10g5.js";import"./contextPanelEmbeddedChat-BdA6bdky.js";import"./vendor-sonner-DFyL3AvE.js";import"./vendor-cmdk-DgLInKvT.js";import"./vendor-radix-ui-react-dialog-B94Bt2qq.js";import"./vendor-radix-ui-primitive-Dc_FVRD7.js";import"./vendor-radix-ui-react-compose-refs-DcAh5WdT.js";import"./vendor-radix-ui-react-context-Czxm7Z62.js";import"./vendor-radix-ui-react-id-f5BLKEVw.js";import"./vendor-radix-ui-react-use-layout-effect-D_3IhJdJ.js";import"./vendor-radix-ui-react-use-controllable-state-BFT5YmkA.js";import"./vendor-radix-ui-react-dismissable-layer-D7kXcwgJ.js";import"./vendor-radix-ui-react-primitive-DhVoX9SD.js";import"./vendor-radix-ui-react-slot-BQgQOasS.js";import"./vendor-radix-ui-react-use-callback-ref-BZPnuXAC.js";import"./vendor-radix-ui-react-use-escape-keydown-oph88g-F.js";import"./vendor-radix-ui-react-focus-scope-CiaxW4dD.js";import"./vendor-radix-ui-react-portal-BMJYHWck.js";import"./vendor-radix-ui-react-presence-CNxf-uq4.js";import"./vendor-radix-ui-react-focus-guards-B6qJXYua.js";import"./vendor-react-remove-scroll-DO7dCTnK.js";import"./vendor-tslib-De9GV7Vy.js";import"./vendor-react-remove-scroll-bar-BcFYyj3E.js";import"./vendor-react-style-singleton-q6EMHnwf.js";import"./vendor-get-nonce-C-Z93AgS.js";import"./vendor-use-sidecar-zDC0RhA3.js";import"./vendor-use-callback-ref-D3RC8gqK.js";import"./vendor-aria-hidden-DvXkyWUv.js";import"./vendor-codemirror-lang-javascript-Cc2ZYbgX.js";import"./vendor-lezer-javascript-D7Tj24ot.js";import"./vendor-lezer-lr-bhwg1HMg.js";import"./vendor-codemirror-autocomplete-DzPz9Wgq.js";import"./vendor-w3c-keyname-Vcq4gwWv.js";import"./vendor-codemirror-lang-json-CMBS2tG9.js";import"./vendor-lezer-json-Iaex0UN-.js";import"./vendor-codemirror-lang-css-O0cZX78y.js";import"./vendor-lezer-css-C5xB6jxd.js";import"./vendor-codemirror-lang-html-CfgK872x.js";import"./vendor-lezer-html-C0I1p52t.js";import"./vendor-codemirror-lang-markdown-BPGOH9ye.js";import"./vendor-lezer-markdown-C6g-d6P3.js";import"./vendor-codemirror-language-data-CsvoASYk.js";import"./vendor-codemirror-lang-python-HahnQaAS.js";import"./vendor-lezer-python-CvuFxeZl.js";import"./vendor-legendapp-list-BuBPBC3R.js";import"./vendor-tailwind-merge-CPcsbTWB.js";import"./vendor-fuse.js-Dw8P0qyA.js";import"./registerCustomTheme-BBXUCRnG.js";import"./themeResolver-BmJyTmjJ.js";import"./vendor-pierre-theming-C6Z4M5_u.js";import"./vendor-shikijs-core-CGM_jqPK.js";import"./vendor-shikijs-types-CPSbSeK6.js";import"./vendor-shikijs-vscode-textmate-BgLrS_2D.js";import"./vendor-hast-util-to-html-BKBhbTDb.js";import"./vendor-html-void-elements-CkdplsNl.js";import"./vendor-property-information-rJCbAzvX.js";import"./vendor-zwitch-C2o2j-tx.js";import"./vendor-stringify-entities-CsH1VEn9.js";import"./vendor-character-entities-legacy-BpoLgcEt.js";import"./vendor-character-entities-html4-D7taRCQ7.js";import"./vendor-ccount-c2V3InAJ.js";import"./vendor-comma-separated-tokens-D8TqSuIK.js";import"./vendor-space-separated-tokens-DD3iYX1K.js";import"./vendor-hast-util-whitespace-D4Wp6AEg.js";const rn=()=>{const l=new Map,c=new Map;return{schedule:(o,s,f)=>{if(s<=(c.get(o)??Number.NEGATIVE_INFINITY))return l.get(o)??Promise.resolve();c.set(o,s);const g=(l.get(o)??Promise.resolve()).then(f,f);return l.set(o,g.catch(()=>{c.get(o)===s&&c.delete(o)})),g},pendingFor:async o=>{await l.get(o)},reset:o=>{c.delete(o)}}},x=l=>{if(!l)return"";const c=l.replace(/\\/g,"/");return c==="/"?"/":c.replace(/\/+$/,"")},Se=(l,c)=>{const o=x(l),s=c.replace(/\\/g,"/").replace(/^\/+/,"").replace(/\/+$/,"");return!o||o==="/"?`/${s}`:`${o}/${s}`},sn=(l,c,o)=>Se(Se(Se(l,".opencode"),"plans"),`${c}-${o}.md`),on=(l,c)=>`~/.opencode/plans/${l}-${c}.md`,an=(l,c)=>{const o=l.trim();return o.startsWith("~")?o==="~"?c||o:(o.startsWith("~/")||o.startsWith("~\\"))&&c?`${c}${o.slice(1)}`:o:o},ln=(l,c)=>{const o=x(c.currentDirectory),s=x(c.homeDirectory),f=x(l);return o&&f.startsWith(o+"/")?f.slice(o.length+1):s&&f===s?"~":s&&f.startsWith(s+"/")?`~${f.slice(s.length)}`:f},cn=(l,c,o)=>{const s=x(l.trim());if(!s)return null;const f=o?c.find(g=>g.id===o)??null:null;if(f?.path){const g=x(f.path);if(s===g||s.startsWith(`${g}/`))return{id:f.id,path:f.path}}const N=c.filter(g=>{const E=x(g.path);return s===E||s.startsWith(`${E}/`)}).sort((g,E)=>x(E.path).length-x(g.path).length)[0];return N?{id:N.id,path:N.path}:null},un=l=>bt(()=>l()),cs=({targetPath:l=null,savedProjectPlan:c=null,onNavigatedToChat:o})=>{const{t:s}=Mt(),f=H(e=>e.currentSessionId),N=H(e=>e.createSession),g=H(e=>e.initializeNewAiWorkerSession),E=H(e=>e.sendMessage),ye=H(e=>e.setCurrentSession),xe=Tt(),O=jt(e=>e.homeDirectory),je=Nt(e=>e.planModeEnabled),be=et(e=>e.projects),Ce=et(e=>e.activeProjectId),Re=Et(e=>e.directories),Pe=It()??"",ke=qe(e=>e.setSessionSwitcherOpen),_=Dt(),I=t.useSyncExternalStore(un,he,he),{isMobile:Me}=Vt(),{currentTheme:Y}=Ft(),S=t.useMemo(()=>f?xe.find(e=>e.id===f)??null:null,[f,xe]),R=t.useMemo(()=>{const e=typeof S?.directory=="string"?S.directory:"";return x(e||"")},[S?.directory]),Te=t.useMemo(()=>x(Pe||R),[Pe,R]),B=t.useMemo(()=>cn(Te,be,Ce),[Ce,Te,be]),se=c?.projectRef.id??null,ie=c?.projectRef.path??null,v=t.useMemo(()=>se&&ie?{id:se,path:ie}:null,[se,ie]),P=c?.planId??null,G=v&&P?JSON.stringify(["saved-plan",I,At(v),P]):null,A=v?.id===Lt,Q=t.useMemo(()=>{const e=v??B;return e?Re.get(e.path)?.isGitRepo===!0:!1},[B,Re,v]),[D,L]=t.useState(null),[Ne,Ee]=t.useState(!1),[p,k]=t.useState(null),[oe,ae]=t.useState(null),at=!!p||!!oe,le=t.useMemo(()=>!p||!R||!O?p:ln(p,{currentDirectory:R,homeDirectory:O}),[p,R,O]),[h,j]=t.useState(""),{isPlaying:q,play:lt,stop:ct}=Wt(),ut=tt(e=>e.showMessageTTSButtons),[Ie,ce]=t.useState(null),[De,ue]=t.useState(null),de=t.useMemo(()=>le&&le.split("/").pop()||s("planView.file.defaultName"),[le,s]),me=t.useMemo(()=>h.trim()?$t(h,s("planView.title.default")).title:s("planView.title.default"),[h,s]),X=t.useMemo(()=>me.trim()||s("planView.title.default"),[me,s]),[dt,V]=t.useState(!1),[mt,Ve]=t.useState(!1),[Z,Fe]=t.useState("edit"),J=t.useRef(null),[u,y]=t.useState(null),Ae=t.useRef(null),pt=t.useRef(null),Le="aiworker:plan:md-viewer-mode";t.useEffect(()=>{try{const e=localStorage.getItem(Le);if(!e)return;const i=JSON.parse(e);(i==="preview"||i==="edit")&&Fe(i)}catch{}},[]);const ft=t.useCallback(e=>{Fe(e);try{localStorage.setItem(Le,JSON.stringify(e))}catch{}},[]),W=t.useRef(!1),M=t.useRef(null),[We,$]=t.useState(!1);t.useEffect(()=>{const e=()=>{W.current=!1,M.current=null,$(!1)};return document.addEventListener("mouseup",e),()=>document.removeEventListener("mouseup",e)},[]);const ht=t.useCallback((e,i)=>{const a=e.split(`
|
|
2
2
|
`),r=Math.max(1,i.start),d=Math.min(a.length,i.end);return r>d?"":a.slice(r-1,d).join(`
|
|
3
3
|
`)},[]),gt=qt({source:"plan",fileLabel:de,language:p&&nt(p)||"markdown",getCodeForRange:e=>ht(h,Xt(e)),toStoreRange:e=>({startLine:e.start,endLine:e.end}),fromDraftRange:e=>({start:e.startLine,end:e.endLine})}),{drafts:$e,commentText:ee,setCommentText:Ke,editingDraftId:pe,setSelection:ze,saveComment:Oe,cancel:U,reset:_e,startEdit:Be,deleteDraft:Ge}=gt;t.useEffect(()=>{y(null),_e()},[h,_e]),t.useEffect(()=>{ze(u)},[u,ze]);const Je=t.useCallback(()=>{y(null),U()},[U]),Ue=t.useCallback((e,i)=>{i&&y(i),Oe(e,i??u??void 0),y(null)},[u,Oe]);t.useEffect(()=>{if(!u)return;const e=a=>{const r=a.target;r.closest('[data-comment-card="true"]')||r.closest('[data-comment-input="true"]')||r.closest(".oc-block-widget")||r.closest(".cm-gutterElement")||r.closest("[data-sonner-toast]")||r.closest("[data-sonner-toaster]")||ee.trim()||(y(null),U())},i=window.setTimeout(()=>{document.addEventListener("click",e)},100);return()=>{window.clearTimeout(i),document.removeEventListener("click",e)}},[U,ee,pe,Me,u]);const fe=qe(e=>e.editorFontSize),wt=t.useMemo(()=>{const e=p?nt(p):null,i=!!e&&e!=="markdown",a=[Ct(Y,i?{syntaxColors:!1,fontSize:fe}:{fontSize:fe})],r=Kt(p||"plan.md");return r&&a.push(r),i&&e&&a.push(Rt({language:e,themeName:Y.metadata.id,theme:en(Y)})),a.push(tn.lineWrapping),a},[Y,p,fe]),b=t.useRef({key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""}),C=t.useState(rn)[0],He=t.useCallback(async(e,i)=>{if("filePath"in e){const r=_.files??Xe()?.files;if(r?.writeFile){if(!(await r.writeFile(e.filePath,i))?.success)throw new Error("Plan file write failed");return}const d=await Ze("/api/fs/write",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({path:e.filePath,content:i})});if(!d.ok)throw new Error(`Failed to write plan file (${d.status})`);return}if(!await zt.getState().savePlan(e.projectRef,e.planId,i))throw new Error("Plan save rejected: the plan no longer exists")},[_.files]),Ye=t.useRef(He);Ye.current=He;const F=t.useCallback(()=>{const e=b.current;if(!e.key||!e.target||e.editRevision<=e.savedRevision)return;const i={key:e.key,target:e.target,content:e.content,revision:e.editRevision,runtimeKey:e.runtimeKey,write:Ye.current};C.schedule(i.key,i.revision,async()=>{if(he()!==i.runtimeKey)return;await i.write(i.target,i.content);const a=b.current;a.key===i.key&&(a.savedRevision=Math.max(a.savedRevision,i.revision),ce(null))}).catch(a=>{b.current.key===i.key&&ce(a instanceof Error?a.message:"Plan save failed")})},[C]);t.useEffect(()=>{if(!je&&!l&&!P){F(),b.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},k(null),ae(null),j(""),V(!1);return}let e=!1;const i=async r=>{if(_.files?.readFile)return(await _.files.readFile(r))?.content??"";const d=Xe()?.files;if(d?.readFile)return(await d.readFile(r,{optional:!0}))?.content??"";const m=await Ze(`/api/fs/read?path=${encodeURIComponent(r)}&optional=true`,{cache:"no-store"});if(!m.ok)throw new Error(`Failed to read plan file (${m.status})`);return m.text()};return(async()=>{if(F(),b.current={key:null,target:null,content:"",editRevision:0,savedRevision:0,runtimeKey:""},k(null),ae(null),j(""),ce(null),ue(null),P&&v&&G){if(await C.pendingFor(G),e)return;C.reset(G),V(!0);try{const r=await Qt(v,P);if(e)return;if(!r){ue("Plan not found");return}b.current={key:G,target:{projectRef:v,planId:P},content:r.raw,editRevision:0,savedRevision:0,runtimeKey:I},j(r.raw),ae(P)}catch(r){if(e)return;ue(r instanceof Error?r.message:"Plan load failed")}finally{e||V(!1)}return}if(l){const r=JSON.stringify(["plan-file",I,l]);if(await C.pendingFor(r),e)return;C.reset(r),V(!0);try{const d=await i(l);if(e)return;b.current={key:r,target:{filePath:l},content:d,editRevision:0,savedRevision:0,runtimeKey:I},k(l),j(d)}catch{if(e)return;k(null),j("")}finally{e||V(!1)}return}if(!S?.slug||!S?.time?.created||!R){k(null),j("");return}V(!0);try{const r=sn(R,S.time.created,S.slug),d=an(on(S.time.created,S.slug),O||null);let m=null;try{await i(r),m=r}catch{}if(!m)try{await i(d),m=d}catch{}if(e)return;if(!m){k(null),j("");return}const w=JSON.stringify(["plan-file",I,m]);if(await C.pendingFor(w),e)return;const K=await i(m);if(e)return;C.reset(w),b.current={key:w,target:{filePath:m},content:K,editRevision:0,savedRevision:0,runtimeKey:I},k(m),j(K)}catch{if(e)return;k(null),j("")}finally{e||V(!1)}})(),()=>{e=!0}},[I,O,je,_.files,P,G,v,C,F,S?.slug,S?.time?.created,R,l]);const vt=t.useCallback(e=>{b.current.content=e,b.current.editRevision+=1,j(e)},[]);t.useEffect(()=>{if(!p&&!oe)return;const e=window.setTimeout(()=>{F()},350);return()=>{window.clearTimeout(e)}},[h,oe,p,F]),t.useEffect(()=>()=>{F()},[F]),t.useEffect(()=>()=>{J.current!==null&&window.clearTimeout(J.current)},[]);const Qe=t.useCallback(()=>{ke(!1),o?.()},[o,ke]),St=t.useCallback(async e=>{const i=v??B;if(!i||!D||A)return;const a=await rt(D.action==="improve"?"plan.improve.visible":"plan.implement.visible",{plan_title:X}),r=await rt(D.action==="improve"?"plan.improve.instructions":"plan.implement.instructions",{plan_title:X,plan_path:p??""}),m=[{synthetic:!0,text:p?r:[r,"","The plan is not stored as a file in the repository and has no file path. Its full current contents follow below this note and are the source of truth for the plan. Where the instructions above refer to the plan file, treat the plan as stored in AiWorker project knowledge (it is edited through the AiWorker UI): propose plan revisions as plan text in the chat rather than editing a file.","",h].join(`
|
|
4
4
|
`)}];Ee(!0);try{Qe();let w=null,K=i.path;if(D.target==="worktree"){if(!Q)return;const T=await Ot(i.path,_t());if(!T?.id)return;w=T.id,K=T.path}else{const T=await N(void 0,i.path,null);if(!T?.id)return;w=T.id,K=T.directory??i.path,g(T.id,tt.getState().agents??[])}if(!w)return;const te=Bt.getState();te.saveSessionModelSelection(w,e.providerID,e.modelID),e.agent.trim()&&(te.saveSessionAgentSelection(w,e.agent),te.saveAgentModelForSession(w,e.agent,e.providerID,e.modelID),te.saveAgentModelVariantForSession(w,e.agent,e.providerID,e.modelID,e.variant||void 0)),ye(w,K);const xt=e.runAsGoal===!0?[`Implement the plan "${X}" end-to-end${p?` (plan file: ${p})`:" (the full plan follows)"}.`,p?"Re-read that file for full details — it is the source of truth.":"The full plan follows in this message and is the source of truth.","",h].join(`
|