ompchamber 1.2.0 → 2.0.0
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 +131 -147
- package/dist/client/index.html +4 -2
- package/dist/client/static/css/index.5f630421b7.css +2 -0
- package/dist/client/static/js/77.0d81c74cf0.js +139 -0
- package/dist/client/static/js/async/1k.973e8e21fc.js +2 -0
- package/dist/client/static/js/async/{3y.3186ecdd63.js → 3y.3530b824ad.js} +6 -6
- package/dist/client/static/js/async/{q.b453193538.js → 4m.928a1dde85.js} +10 -10
- package/dist/client/static/js/async/66.5dfa29f957.js +93 -0
- package/dist/client/static/js/async/7g.a7814350c3.js +1 -0
- package/dist/client/static/js/async/ar.9303e5f2e8.js +2 -0
- package/dist/client/static/js/async/{cx.9c8268d542.js → cx.3cb0242a3a.js} +1 -1
- package/dist/client/static/js/async/e.93214d622b.js +79 -0
- package/dist/client/static/js/async/g.74ff36419f.js +2 -0
- package/dist/client/static/js/async/{m.2e1ea3db9e.js.LICENSE.txt → g.74ff36419f.js.LICENSE.txt} +5 -0
- package/dist/client/static/js/async/h1.393f066d09.js +1 -0
- package/dist/client/static/js/async/jl.874d352278.js +1 -0
- package/dist/client/static/js/async/{k.d16cd09ae7.js → k.3210286401.js} +1 -1
- package/dist/client/static/js/async/{m.2e1ea3db9e.js → m.eb2e6752e2.js} +3 -3
- package/dist/client/static/js/async/m.eb2e6752e2.js.LICENSE.txt +11 -0
- package/dist/client/static/js/async/mt.0352e976d8.js +1 -0
- package/dist/client/static/js/async/{oc.eb22093f05.js → oc.b73042e8bd.js} +1 -1
- package/dist/client/static/js/async/{og.53f068804c.js → og.8eb577893a.js} +1 -1
- package/dist/client/static/js/async/px.fc6877924b.js +1 -0
- package/dist/client/static/js/async/q.33d6779f98.js +21 -0
- package/dist/client/static/js/async/{q5.88b50ffa95.js → q5.97dc1481b6.js} +1 -1
- package/dist/client/static/js/async/s.0f395cdda5.js +94 -0
- package/dist/client/static/js/async/{tr.2a0d2b7600.js → tr.e878658140.js} +1 -1
- package/dist/client/static/js/async/vt.42416b707d.js +1 -0
- package/dist/client/static/js/async/x1.da8687159b.js +90 -0
- package/dist/client/static/js/async/xe.da8dcc2015.js +2 -0
- package/dist/client/static/js/async/xe.da8dcc2015.js.LICENSE.txt +11 -0
- package/dist/client/static/js/async/{xn.6360379f71.js → xn.6510c0abe2.js} +2 -2
- package/dist/client/static/js/async/yg.35bebd6d0c.js +149 -0
- package/dist/client/static/js/async/yv.d99d829136.js +1 -0
- package/dist/client/static/js/index.c05535dbde.js +38 -0
- package/package.json +3 -3
- package/src/client/components/common/ComposerTextarea.tsx +9 -1
- package/src/client/components/common/MarkdownRenderer.tsx +50 -12
- package/src/client/components/mobile/mobile-right-sidebar/FullEditor.tsx +9 -3
- package/src/client/components/settings/Modal.tsx +11 -2
- package/src/client/components/settings/categories/AppearanceSettings.tsx +7 -30
- package/src/client/components/settings/categories/ProviderSettings.tsx +2 -0
- package/src/client/components/settings/categories/appearance-settings/ThemeCard.tsx +61 -0
- package/src/client/components/settings/categories/appearance-settings/ThemeGrid.tsx +80 -0
- package/src/client/components/settings/categories/chat-settings/TitleSection.tsx +1 -1
- package/src/client/components/settings/categories/provider-settings/AddProviderModal.tsx +43 -6
- package/src/client/components/settings/categories/provider-settings/ModelConfigModal.tsx +54 -54
- package/src/client/components/workspace/SearchPanel.tsx +16 -3
- package/src/client/components/workspace/btw-panel/AskCard.tsx +11 -6
- package/src/client/components/workspace/btw-panel/Messages.tsx +105 -51
- package/src/client/components/workspace/btw-panel/index.tsx +129 -45
- package/src/client/components/workspace/chat-timeline/AiMessageFooter.tsx +30 -14
- package/src/client/components/workspace/chat-timeline/ComposerDock.tsx +10 -1
- package/src/client/components/workspace/chat-timeline/GeneratingIndicator.tsx +8 -2
- package/src/client/components/workspace/chat-timeline/MessageItem.tsx +27 -16
- package/src/client/components/workspace/chat-timeline/MessageList.tsx +11 -0
- package/src/client/components/workspace/chat-timeline/RunFooter.tsx +8 -0
- package/src/client/components/workspace/chat-timeline/chat-input/index.tsx +12 -1
- package/src/client/components/workspace/chat-timeline/index.tsx +7 -2
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/QuestionBlock.tsx +42 -15
- package/src/client/components/workspace/chat-timeline/tool-renderers/ask-panel/index.tsx +13 -1
- package/src/client/components/workspace/chat-timeline/tool-renderers/extension-dialog/index.tsx +13 -4
- package/src/client/components/workspace/editor/index.tsx +11 -2
- package/src/client/components/workspace/file-explorer/GitRepoDropdown.tsx +15 -41
- package/src/client/components/workspace/file-explorer/index.tsx +86 -16
- package/src/client/components/workspace/git-panel/index.tsx +60 -78
- package/src/client/components/workspace/terminal-panel/Header.tsx +16 -1
- package/src/client/components/workspace/terminal-panel/RealtimeXtermView.tsx +5 -5
- package/src/client/components/workspace/terminal-panel/index.tsx +6 -2
- package/src/client/components/workspace/terminal-panel/mount.ts +2 -2
- package/src/client/data/theme/terminal.ts +50 -52
- package/src/client/hooks/chat/btw/index.ts +139 -18
- package/src/client/hooks/chat/btw/intercept.ts +8 -8
- package/src/client/hooks/chat/btw/mode.ts +111 -16
- package/src/client/hooks/chat/composer/index.ts +10 -4
- package/src/client/hooks/chat/timeline/access-mode.ts +41 -0
- package/src/client/hooks/chat/timeline/ask-frames.test.ts +87 -0
- package/src/client/hooks/chat/timeline/ask-frames.ts +20 -1
- package/src/client/hooks/chat/timeline/auto-scroll.ts +13 -4
- package/src/client/hooks/chat/timeline/index.ts +8 -20
- package/src/client/hooks/chat/timeline/queue.ts +66 -9
- package/src/client/hooks/chat/timeline/scroll.test.ts +260 -0
- package/src/client/hooks/chat/timeline/scroll.ts +93 -20
- package/src/client/hooks/chat/timeline/session-load.ts +7 -1
- package/src/client/hooks/chat/timeline/session-pagination.test.ts +167 -0
- package/src/client/hooks/chat/timeline/session-pagination.ts +37 -11
- package/src/client/hooks/settings/providers.ts +34 -3
- package/src/client/hooks/ui/open-file.ts +7 -1
- package/src/client/hooks/ui/theme.ts +82 -57
- package/src/client/hooks/workspace/file-tabs.ts +5 -1
- package/src/client/hooks/workspace/repo-scope/index.ts +119 -0
- package/src/client/hooks/workspace/repo-scope/store.test.ts +161 -0
- package/src/client/hooks/workspace/repo-scope/store.ts +201 -0
- package/src/client/hooks/workspace/search-stream.ts +24 -5
- package/src/client/main.tsx +6 -0
- package/src/client/tailwind.css +19 -56
- package/src/server/lib/btw/child.server.ts +41 -0
- package/src/server/lib/btw/lifecycle.server.ts +254 -0
- package/src/server/lib/btw/prompt.ts +13 -5
- package/src/server/lib/btw/registry.server.ts +13 -4
- package/src/server/lib/btw/runtime.server.ts +149 -156
- package/src/server/lib/btw/schema.server.ts +27 -0
- package/src/server/lib/btw/service.server.ts +106 -5
- package/src/server/lib/btw/store.server.ts +57 -6
- package/src/server/lib/db/schema.ts +4 -0
- package/src/server/lib/db/settings-store.test.ts +65 -0
- package/src/server/lib/db/settings-store.ts +25 -0
- package/src/server/lib/fs/atomic-write.ts +42 -4
- package/src/server/lib/fs/config-lock.ts +74 -0
- package/src/server/lib/fs/git-ignore.ts +55 -5
- package/src/server/lib/fs/ripgrep.ts +119 -0
- package/src/server/lib/lifecycle/identity.ts +10 -64
- package/src/server/lib/lifecycle/proc/darwin.ts +238 -0
- package/src/server/lib/lifecycle/proc/index.ts +38 -0
- package/src/server/lib/lifecycle/proc/linux.ts +80 -0
- package/src/server/lib/lifecycle/proc/ps.ts +86 -0
- package/src/server/lib/lifecycle/proc/types.ts +33 -0
- package/src/server/lib/lifecycle/proc/win32.ts +53 -0
- package/src/server/lib/models/provider-registry.server.ts +2 -2
- package/src/server/lib/models/registry.server.ts +1 -1
- package/src/server/lib/omp/config/behavior.ts +17 -17
- package/src/server/lib/omp/config/disabled-providers.ts +84 -35
- package/src/server/lib/omp/config/document.ts +128 -0
- package/src/server/lib/omp/config/extensions.ts +11 -10
- package/src/server/lib/omp/config/mcp.ts +4 -57
- package/src/server/lib/omp/config/model-overrides.ts +123 -0
- package/src/server/lib/omp/config/models-config.ts +92 -0
- package/src/server/lib/omp/config/models-validation.ts +159 -0
- package/src/server/lib/omp/config/path-scoped.ts +74 -0
- package/src/server/lib/omp/config/providers.ts +241 -211
- package/src/server/lib/omp/config/roles.ts +6 -14
- package/src/server/lib/omp/core/auth-credentials.ts +1 -1
- package/src/server/lib/omp/rpc/frame-fold.test.ts +124 -0
- package/src/server/lib/omp/rpc/frame-fold.ts +43 -24
- package/src/server/lib/omp/rpc/lifecycle.test.ts +41 -0
- package/src/server/lib/omp/rpc/manager.ts +21 -21
- package/src/server/lib/omp/rpc/pending-ui-dialogs.ts +11 -7
- package/src/server/lib/omp/rpc/session-commands.ts +17 -29
- package/src/server/lib/omp/rpc/session-registry.ts +5 -66
- package/src/server/lib/omp/rpc/web-state.ts +0 -6
- package/src/server/lib/omp/session/auto-title.server.test.ts +109 -11
- package/src/server/lib/omp/session/auto-title.server.ts +95 -20
- package/src/server/lib/omp/session/sidebar-data.server.ts +11 -6
- package/src/server/lib/queue/delivery-dispatch.server.test.ts +162 -0
- package/src/server/lib/queue/delivery-harness.ts +88 -0
- package/src/server/lib/queue/delivery.server.test.ts +78 -149
- package/src/server/lib/queue/delivery.server.ts +105 -13
- package/src/server/lib/queue/store.server.ts +30 -5
- package/src/server/lib/terminal/foreground.test.ts +164 -0
- package/src/server/lib/terminal/foreground.ts +34 -6
- package/src/server/lib/terminal/history.ts +8 -7
- package/src/server/plugins/compress.ts +33 -5
- package/src/server/plugins/ssr.ts +14 -7
- package/src/server/routes/btw/topics.ts +89 -2
- package/src/server/routes/fs/git.ts +5 -6
- package/src/server/routes/fs/search.ts +17 -26
- package/src/server/routes/sessions/queue.ts +17 -4
- package/src/server/routes/settings/index.ts +2 -0
- package/src/server/routes/settings/model-override.ts +69 -0
- package/src/server/routes/settings/provider-models.ts +35 -12
- package/src/server/routes/settings/providers.ts +31 -1
- package/src/server/routes/settings/root.ts +8 -3
- package/src/shared/lib/chat/btw/client.ts +34 -0
- package/src/shared/lib/chat/timeline/tool-phrases.ts +7 -0
- package/src/shared/lib/code/shiki-themes.ts +9 -5
- package/src/shared/lib/fs/file-tree.ts +17 -12
- package/src/shared/lib/markdown/autolink.test.ts +32 -0
- package/src/shared/lib/markdown/autolink.ts +50 -0
- package/src/shared/lib/markdown/document-urls.test.ts +68 -0
- package/src/shared/lib/markdown/document-urls.ts +118 -0
- package/src/shared/lib/markdown/marked.ts +27 -15
- package/src/shared/lib/markdown/mermaid.ts +2 -2
- package/src/shared/lib/models/catalog.ts +1 -1
- package/src/shared/lib/omp/session/schema-migrations.ts +30 -0
- package/src/shared/lib/omp/session/stream-state.server.test.ts +54 -0
- package/src/shared/lib/omp/session/stream-state.server.ts +70 -21
- package/src/shared/lib/settings/client.ts +10 -4
- package/src/shared/lib/settings/diff.test.ts +31 -0
- package/src/shared/lib/settings/diff.ts +37 -0
- package/src/shared/lib/theme/catalog.test.ts +168 -0
- package/src/shared/lib/theme/catalog.ts +98 -0
- package/src/shared/lib/theme/color.ts +88 -0
- package/src/shared/lib/theme/css.ts +70 -0
- package/src/shared/lib/theme/palettes/chamber.ts +61 -0
- package/src/shared/lib/theme/palettes/dark.ts +313 -0
- package/src/shared/lib/theme/palettes/light.ts +313 -0
- package/src/shared/types/btw.ts +83 -4
- package/src/shared/types/index.ts +1 -0
- package/src/shared/types/settings/provider.ts +8 -1
- package/src/shared/types/settings/state.ts +10 -4
- package/src/shared/types/theme.ts +48 -0
- package/dist/client/static/css/index.b938f4a693.css +0 -2
- package/dist/client/static/js/77.8022a800b5.js +0 -139
- package/dist/client/static/js/async/1k.a411fe5b43.js +0 -2
- package/dist/client/static/js/async/66.86544ad741.js +0 -93
- package/dist/client/static/js/async/7g.db82aca7ba.js +0 -1
- package/dist/client/static/js/async/ar.ad5c8822a8.js +0 -2
- package/dist/client/static/js/async/e.6443e739a2.js +0 -79
- package/dist/client/static/js/async/g.ee41bfed7f.js +0 -2
- package/dist/client/static/js/async/h1.d7091cef78.js +0 -1
- package/dist/client/static/js/async/jl.4911fa3383.js +0 -1
- package/dist/client/static/js/async/mt.853be2b5aa.js +0 -1
- package/dist/client/static/js/async/ot.84c71b308f.js +0 -2
- package/dist/client/static/js/async/px.783b6f91f2.js +0 -1
- package/dist/client/static/js/async/q8.7f1b48e9cd.js +0 -21
- package/dist/client/static/js/async/q8.7f1b48e9cd.js.LICENSE.txt +0 -6
- package/dist/client/static/js/async/s.aad2ecebc6.js +0 -94
- package/dist/client/static/js/async/vt.20406a5604.js +0 -1
- package/dist/client/static/js/async/x1.fe8af17016.js +0 -90
- package/dist/client/static/js/async/xn.6360379f71.js.LICENSE.txt +0 -6
- package/dist/client/static/js/async/yg.5a94e1fc8a.js +0 -149
- package/dist/client/static/js/async/yv.2fa22f009a.js +0 -1
- package/dist/client/static/js/index.57b39ffa7f.js +0 -34
- package/src/client/components/workspace/btw-panel/Composer.tsx +0 -181
- package/src/client/components/workspace/btw-panel/attachments.ts +0 -80
- /package/dist/client/static/js/{77.8022a800b5.js.LICENSE.txt → 77.0d81c74cf0.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/async/{g.ee41bfed7f.js.LICENSE.txt → 1k.973e8e21fc.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/async/{3y.3186ecdd63.js.LICENSE.txt → 3y.3530b824ad.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/async/{ot.84c71b308f.js.LICENSE.txt → 4m.928a1dde85.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/async/{q.b453193538.js.LICENSE.txt → ar.9303e5f2e8.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/async/{1k.a411fe5b43.js.LICENSE.txt → q.33d6779f98.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/async/{ar.ad5c8822a8.js.LICENSE.txt → xn.6510c0abe2.js.LICENSE.txt} +0 -0
- /package/dist/client/static/js/{index.57b39ffa7f.js.LICENSE.txt → index.c05535dbde.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/*! LICENSE: 1k.973e8e21fc.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.rspackChunkompchamber=self.rspackChunkompchamber||[]).push([["1k"],{X8(e,t,n){n.d(t,{SearchPanel:()=>Y});var r=n("j"),l=n("H"),i=n("Sj"),a=n("z"),s=n("t3"),c=n("y");let o=(0,c.A)({name:"case-sensitive",size:24,node:[["path",{d:"m2 16 4.039-9.69a.5.5 0 0 1 .923 0L11 16",key:"d5nyq2"}],["path",{d:"M22 9v7",key:"pvm9v3"}],["path",{d:"M3.304 13h6.392",key:"1q3zxz"}],["circle",{cx:"18.5",cy:"12.5",r:"3.5",key:"z97x68"}]]}),d=(0,c.A)({name:"whole-word",size:24,node:[["circle",{cx:"7",cy:"12",r:"3",key:"12clwm"}],["path",{d:"M10 9v6",key:"17i7lo"}],["circle",{cx:"17",cy:"12",r:"3",key:"gl7c2s"}],["path",{d:"M14 7v8",key:"dl84cr"}],["path",{d:"M22 17v1c0 .5-.5 1-1 1H3c-.5 0-1-.5-1-1v-1",key:"lt2kga"}]]}),p=(0,c.A)({name:"regex",size:24,node:[["path",{d:"M17 3v10",key:"15fgeh"}],["path",{d:"m12.67 5.5 8.66 5",key:"1gpheq"}],["path",{d:"m12.67 10.5 8.66-5",key:"1dkfa6"}],["path",{d:"M9 17a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v2a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2v-2z",key:"swwfx4"}]]}),h=(0,c.A)({name:"replace-all",size:24,node:[["path",{d:"M14 14a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1",key:"zg1ipl"}],["path",{d:"M14 4a1 1 0 0 1 1-1",key:"dhj8ez"}],["path",{d:"M15 10a1 1 0 0 1-1-1",key:"1mnyi5"}],["path",{d:"M19 14a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1",key:"txt6k4"}],["path",{d:"M21 4a1 1 0 0 0-1-1",key:"sfs9ap"}],["path",{d:"M21 9a1 1 0 0 1-1 1",key:"mp6qeo"}],["path",{d:"m3 7 3 3 3-3",key:"x25e72"}],["path",{d:"M6 10V5a2 2 0 0 1 2-2h2",key:"15xut4"}],["rect",{x:"3",y:"14",width:"7",height:"7",rx:"1",key:"1bkyp8"}]]}),u=(0,c.A)({name:"replace",size:24,node:[["path",{d:"M14 4a1 1 0 0 1 1-1",key:"dhj8ez"}],["path",{d:"M15 10a1 1 0 0 1-1-1",key:"1mnyi5"}],["path",{d:"M21 4a1 1 0 0 0-1-1",key:"sfs9ap"}],["path",{d:"M21 9a1 1 0 0 1-1 1",key:"mp6qeo"}],["path",{d:"m3 7 3 3 3-3",key:"x25e72"}],["path",{d:"M6 10V5a2 2 0 0 1 2-2h2",key:"15xut4"}],["rect",{x:"3",y:"14",width:"7",height:"7",rx:"1",key:"1bkyp8"}]]});var x=n("pX"),k=n("X"),m=n("wA"),f=n("jo"),b=n("FL"),g=n("SW"),y=n("G1"),v=n("oj"),N=n("DU"),w=n("Po");function Y(e){let{className:t="",enabled:n=!0,rootPath:c}=e;(0,w.w)();let[Y,z]=(0,b.bL)("search.query",""),[S,F]=(0,b.bL)("search.replaceQuery",""),[M,C]=(0,b.bL)("search.matchCase",!1),[A,R]=(0,b.bL)("search.wholeWord",!1),[j,D]=(0,b.bL)("search.useRegex",!1),[L,T]=(0,b.bL)("search.includeFiles",""),[J,O]=(0,l.J0)(!1),[W,$]=(0,b.bL)("search.showIncludeField",!1),{activeRepo:P,setActiveRepo:q}=(0,g.Og)(c,"search.activeRepo"),{repos:H,scanning:I,rescan:U}=(0,g.Ml)(c,n),G=(0,l.li)(null),{isScrolling:V,handleScroll:X}=(0,f.K)(),Q=(0,k.L)(),{results:_,isSearching:B,start:E}=function(e){let[t,n]=(0,l.J0)({scope:e,results:[]}),[r,i]=(0,l.J0)(!1),a=(0,l.li)(null),s=(0,l.li)(!0),c=(0,l.li)(e);c.current=e,(0,l.vJ)(()=>(s.current=!0,()=>{s.current=!1,a.current?.abort(),a.current=null}),[]);let o=(0,l.hb)(async e=>{a.current?.abort();let t=new AbortController;a.current=t;let r=c.current;n({scope:r,results:[]}),i(!0);try{let l=await fetch("/api/fs/search",{method:"POST",headers:{"content-type":"application/x-www-form-urlencoded"},body:new URLSearchParams(e),signal:t.signal});await (0,y.o)(l,(e,t)=>{if("matches"===e&&c.current===r)try{let e=JSON.parse(t);Array.isArray(e)&&n(t=>t.scope===r?{scope:r,results:[...t.results,...e]}:t)}catch{}},t.signal)}catch{}finally{s.current&&a.current===t&&(a.current=null,i(!1))}},[]);return{results:t.scope===e?t.results:[],isSearching:r&&t.scope===e,start:o}}(`${c??""}\0${P}`);(0,v.W)(G,()=>O(!1));let K=()=>{if(n&&Y.trim().length>2)return E({q:Y,matchCase:String(M),wholeWord:String(A),useRegex:String(j),includeFiles:W?L:"",...c?{root:c}:{},..."."!==P?{repo:P}:{}})};(0,l.vJ)(()=>{let e=setTimeout(()=>{K()},300);return()=>clearTimeout(e)},[Y,M,A,j,L,W,c,n,P]);let Z=e=>{if(!Y)return;let t=e?[e]:Object.keys(ee);0!==t.length&&Q.submit({q:Y,replaceWith:S,matchCase:String(M),wholeWord:String(A),useRegex:String(j),files:JSON.stringify(t),...c?{root:c}:{},..."."!==P?{repo:P}:{}},{method:"POST",action:"/api/fs/replace"})};if((0,l.vJ)(()=>{"idle"===Q.state&&Q.data?.success&&K()},[Q.state,Q.data]),!n)return(0,r.Y)("div",{className:`flex flex-col h-full bg-paper items-center justify-center text-ink/40 ${t}`,children:(0,r.Y)("span",{className:"text-xs font-mono",children:"No session selected"})});let ee=_.reduce((e,t)=>(e[t.file]||(e[t.file]=[]),e[t.file].push(t),e),{});return(0,r.FD)("div",{className:`flex flex-col h-full bg-paper ${t}`,children:[(0,r.FD)("div",{className:"p-3 border-b border-ink/10 flex items-center justify-between",children:[(0,r.FD)("div",{className:"flex items-center space-x-2 min-w-0",children:[(0,r.Y)("h2",{className:"text-xs font-semibold text-ink uppercase tracking-wider",children:"Search"}),(0,r.Y)(m.I,{rootPath:c,activeRepo:P,onSelectRepo:q,repos:H,scanning:I,onRefreshRepos:U})]}),(0,r.FD)("div",{className:"relative",ref:G,children:[(0,r.Y)("button",{onClick:()=>O(!J),className:`p-1 rounded hover:bg-ink/5 transition-colors ${J||W?"text-ink":"text-ink/40"}`,title:"Search Options",children:(0,r.Y)(i.A,{size:14})}),J&&(0,r.Y)("div",{className:"absolute right-0 top-full mt-1 w-48 bg-paper border border-ink/10 rounded shadow-lg z-10 py-1",children:(0,r.FD)("button",{onClick:()=>{$(!W),W&&T(""),O(!1)},className:"w-full px-3 py-1.5 text-left text-xs text-ink hover:bg-ink/5 flex items-center justify-between",children:[(0,r.Y)("span",{children:"Files to include"}),W&&(0,r.Y)(a.A,{size:12,className:"text-ink/60"})]})})]})]}),(0,r.FD)("div",{className:"p-3 flex flex-col gap-2.5 border-b border-ink/10",children:[(0,r.Y)("div",{className:"relative",children:(0,r.FD)("div",{className:"flex items-center border border-ink/20 rounded bg-paper focus-within:border-ink/40 focus-within:ring-1 focus-within:ring-ink/10 transition-all",children:[(0,r.Y)(s.A,{size:14,className:"ml-2 text-ink/40 flex-shrink-0"}),(0,r.Y)("input",{type:"text",placeholder:"Search",value:Y,onChange:e=>z(e.currentTarget.value),className:"w-full bg-transparent border-none text-xs px-2 py-1.5 focus:outline-none text-ink placeholder-ink/30 min-w-0"}),(0,r.FD)("div",{className:"flex items-center space-x-0.5 pr-1 text-ink/40 flex-shrink-0",children:[(0,r.Y)("button",{onClick:()=>C(!M),className:`p-1 rounded hover:text-ink ${M?"bg-ink/10 text-ink":"hover:bg-ink/5"}`,title:"Match Case",children:(0,r.Y)(o,{size:14})}),(0,r.Y)("button",{onClick:()=>R(!A),className:`p-1 rounded hover:text-ink ${A?"bg-ink/10 text-ink":"hover:bg-ink/5"}`,title:"Match Whole Word",children:(0,r.Y)(d,{size:14})}),(0,r.Y)("button",{onClick:()=>D(!j),className:`p-1 rounded hover:text-ink ${j?"bg-ink/10 text-ink":"hover:bg-ink/5"}`,title:"Use Regular Expression",children:(0,r.Y)(p,{size:14})})]})]})}),(0,r.FD)("div",{className:"relative flex items-center space-x-1",children:[(0,r.Y)("input",{type:"text",placeholder:"Replace",value:S,onChange:e=>F(e.currentTarget.value),className:"flex-1 min-w-0 bg-paper border border-ink/20 rounded text-xs px-2 py-1.5 focus:outline-none focus:border-ink/40 focus:ring-1 focus:ring-ink/10 transition-all text-ink placeholder-ink/30"}),(0,r.Y)("button",{onClick:()=>Z(),disabled:0===_.length||"idle"!==Q.state,className:"p-1.5 rounded border border-ink/20 text-ink/60 hover:text-ink hover:bg-ink/5 disabled:opacity-50 disabled:cursor-not-allowed bg-paper",title:"Replace All",children:(0,r.Y)(h,{size:14})})]}),W&&(0,r.Y)("div",{className:"relative",children:(0,r.Y)("input",{type:"text",value:L,onChange:e=>T(e.currentTarget.value),placeholder:"Files to include (e.g. *.js, src/*)",className:"w-full bg-paper border border-ink/20 rounded text-xs px-2 py-1.5 focus:outline-none focus:border-ink/40 focus:ring-1 focus:ring-ink/10 transition-all text-ink placeholder-ink/40"})})]}),(0,r.Y)("div",{onScroll:X,className:`flex-1 scrollbar-overlay-container px-3 py-2 text-xs ${(0,f.p)(V)}`,children:B&&0===_.length?(0,r.Y)("div",{className:"text-ink/40 italic text-center py-4",children:"Searching..."}):Y.trim().length<=2?(0,r.Y)("div",{className:"text-ink/40 italic text-center py-4",children:"Type at least 3 characters to search."}):0===_.length?(0,r.Y)("div",{className:"text-ink/40 italic text-center py-4",children:"No results found."}):(0,r.FD)("div",{className:"space-y-4",children:[B&&(0,r.Y)("div",{className:"text-ink/40 italic",children:"Searching…"}),Object.entries(ee).map(e=>{let[t,n]=e;return(0,r.FD)("div",{children:[(0,r.FD)("div",{className:"font-semibold text-ink/80 flex items-center justify-between mb-1 group",children:[(0,r.FD)("div",{className:"flex items-center min-w-0",children:[(0,r.Y)(x.o,{name:t,size:12,className:"mr-1.5 flex-shrink-0"}),(0,r.Y)("span",{className:"truncate",children:t}),(0,r.Y)("span",{className:"ml-2 bg-ink/10 text-[9px] px-1.5 py-0.5 rounded-full flex-shrink-0",children:n.length})]}),(0,r.Y)("button",{onClick:()=>Z(t),disabled:"idle"!==Q.state,className:"opacity-0 group-hover:opacity-100 p-1 text-ink/40 hover:text-ink rounded hover:bg-ink/5 disabled:opacity-50 flex-shrink-0",title:"Replace in this file",children:(0,r.Y)(u,{size:12})})]}),(0,r.Y)("div",{className:"space-y-1",children:n.map((e,n)=>(0,r.FD)("div",{className:"flex hover:bg-ink/5 cursor-pointer rounded px-1 py-0.5",children:[(0,r.Y)("span",{className:"text-ink/40 w-6 flex-shrink-0 text-right mr-2",children:e.line}),(0,r.Y)("span",{className:"truncate text-ink",dangerouslySetInnerHTML:{__html:(0,N.wY)(e.content.trim(),(0,N.sQ)(t))}})]},n))})]},t)})]})})]})}},wA(e,t,n){var r=n("j"),l=n("H"),i=n("rm"),a=n("Go"),s=n("t3"),c=n("Ir"),o=n("z"),d=n("oj");function p(e){let{rootPath:t,activeRepo:n,onSelectRepo:p,repos:h,scanning:u,onRefreshRepos:x}=e,[k,m]=(0,l.J0)(!1),[f,b]=(0,l.J0)(""),g=(0,l.li)(null),y=function(e){if(!e)return"workspace root";let t=e.replace(/\\/g,"/").split("/").filter(Boolean);return t.length>0?t[t.length-1]:"workspace root"}(t),v=e=>"."===e?y:e;(0,d.W)(g,()=>m(!1));let N=h.filter(e=>!f.trim()||v(e).toLowerCase().includes(f.toLowerCase()));return(0,r.FD)("div",{className:"relative",ref:g,children:[(0,r.FD)("button",{type:"button",onClick:()=>m(!k),title:"Switch git project",className:"flex items-center space-x-1.5 hover:bg-ink/5 px-2 py-1 rounded transition-colors text-xs text-ink/80 font-medium",children:[(0,r.Y)(i.A,{size:12,className:"text-ink/60"}),(0,r.Y)("span",{className:"truncate max-w-[110px]",children:"."===n?y:n.split("/").pop()}),(0,r.Y)(a.A,{size:12,className:"text-ink/40"})]}),k&&(0,r.FD)("div",{className:"absolute top-full left-0 mt-1 w-52 bg-paper border border-ink/20 rounded-md shadow-lg z-50 flex flex-col overflow-hidden text-xs",children:[(0,r.FD)("div",{className:"px-2 py-1.5 border-b border-ink/10 flex items-center space-x-1.5",children:[(0,r.Y)(s.A,{size:11,className:"text-ink/40 flex-shrink-0"}),(0,r.Y)("input",{type:"text",value:f,onChange:e=>b(e.currentTarget.value),placeholder:"Search repos...",title:"Search repositories",className:"w-full bg-transparent outline-none text-xs text-ink placeholder-ink/40",autoFocus:!0}),f&&(0,r.Y)("button",{type:"button",onClick:()=>b(""),title:"Clear search",className:"text-ink/40 hover:text-ink flex-shrink-0",children:"×"}),(0,r.Y)("button",{type:"button",onClick:x,title:"Refresh nested repos",disabled:u,className:"text-ink/40 hover:text-ink flex-shrink-0 transition-colors disabled:opacity-40 disabled:hover:text-ink/40",children:(0,r.Y)(c.A,{size:11,className:u?"animate-spin":""})})]}),(0,r.Y)("div",{className:"max-h-48 scrollbar-overlay-container scrollbar-overlay-static py-1",children:0===N.length?(0,r.Y)("div",{className:"px-3 py-2 text-ink/40 italic",children:"No repos found"}):N.map(e=>(0,r.FD)("button",{type:"button",onClick:()=>{p(e),m(!1),b("")},title:v(e),className:"w-full text-left px-3 py-2 hover:bg-ink/5 flex items-center justify-between transition-colors",children:[(0,r.Y)("span",{className:"truncate",children:v(e)}),n===e&&(0,r.Y)(o.A,{size:12,className:"text-ink"})]},e))})]})]})}n.d(t,{I:()=>p})},SW(e,t,n){n.d(t,{gv:()=>o,Ml:()=>p,Og:()=>d});var r=n("G"),l=n("FL"),i=n("oS");let a={repos:["."],scanning:!1},s=(e,t)=>{let n=setTimeout(e,t);return()=>clearTimeout(n)},c=function(e){let{fetch:t,scheduler:n=s}=e,r=new Map;function l(e){let t=r.get(e);return t||(t={snapshot:a,loaded:!1,listeners:new Set,controller:null,cancelRetry:null,pending:null},r.set(e,t)),t}function c(e,t){let n=r.get(e);if(!n)return;let l={...n.snapshot,...t};if(l.repos!==n.snapshot.repos||l.scanning!==n.snapshot.scanning)for(let e of(n.snapshot=l,n.listeners))e()}function o(e){e.cancelRetry?.(),e.cancelRetry=null}function d(e,r){let a=l(e);a.controller?.abort();let s=new AbortController;a.controller=s,c(e,{scanning:!0});let p=new URLSearchParams({reposOnly:"1"});e&&p.set("root",e),r&&p.set("rescan","1"),p.set("t",String(Date.now()));let h=(async()=>{let r=await t(`/api/fs/git?${p.toString()}`).catch(()=>null);if(a.controller!==s)return;a.controller=null;let l=(0,i.u)(r)&&Array.isArray(r.repos)?r.repos:null;if(!l)return void c(e,{scanning:!1});let h=(0,i.u)(r)&&!0===r.reposPending;a.loaded=!0,c(e,{repos:l.filter(e=>"string"==typeof e),scanning:h}),h?(o(a),a.cancelRetry=n(()=>{a.cancelRetry=null,0!==a.listeners.size&&d(e,!1)},1500)):o(a)})();return a.pending=h,h}return{snapshot:e=>r.get(e)?.snapshot??a,settled:e=>r.get(e)?.pending??Promise.resolve(),subscribe:function(e,t){let n=l(e);return n.listeners.add(t),null===n.controller&&null===n.cancelRetry&&(!n.loaded||n.snapshot.scanning)&&d(e,!1),()=>{n.listeners.delete(t),n.listeners.size>0||(n.controller?.abort(),n.controller=null,o(n))}},rescan:e=>void d(e,!0)}}({fetch:async e=>(await fetch(e)).json()});function o(e,t){return"."!==e||t.includes(".")?e:t[0]??"."}function d(e,t){let[n,i,a]=(0,l.bL)(t,null),s=e??"",c=(0,r.li)(s);c.current=s;let o=(0,r.li)(i);o.current=i;let d=(0,r.hb)(e=>{o.current({root:c.current,repo:e})},[]);return{activeRepo:n&&"object"==typeof n&&n.root===s&&"string"==typeof n.repo&&n.repo?n.repo:".",setActiveRepo:d,ready:a}}function p(e,t){let n=e??"",l=(0,r.hb)(e=>t?c.subscribe(n,e):()=>{},[n,t]),i=(0,r.hb)(()=>t?c.snapshot(n):a,[n,t]),s=(0,r.rz)(l,i),o=(0,r.hb)(()=>{t&&c.rescan(n)},[n,t]);return{repos:s.repos,scanning:s.scanning,rescan:o}}},rm(e,t,n){let r=(0,n("y").A)({name:"folder-git-2",size:24,node:[["path",{d:"M18 19a5 5 0 0 1-5-5v8",key:"sz5oeg"}],["path",{d:"M9 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v5",key:"1w6njk"}],["circle",{cx:"13",cy:"12",r:"2",key:"1j92g6"}],["circle",{cx:"20",cy:"19",r:"2",key:"1obnsp"}]]});n.d(t,{},{A:r})}}]);
|