@bendyline/gezel-service 1.1.1 → 1.1.2
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/NOTICE.md +3 -3
- package/dist/bin/gezeld.js +8471 -5311
- package/dist/handboek-content/technical/building-connected-apps-with-gezel-app-sdk.md +78 -0
- package/dist/handboek-content/whats-new/{1.26250.md → 1.26251.md} +5 -5
- package/dist/index-store/static-index-worker.js +160 -51
- package/dist/index.d.ts +416 -71
- package/dist/index.js +8465 -5305
- package/dist/memory/embed-worker.js +132 -4
- package/dist/memory/image-embed-worker.js +14 -5
- package/dist/providers/mlx/python/cache_persist.py +52 -8
- package/dist/providers/mlx/python/gezel_mlx_server.py +44 -1
- package/dist/providers/mlx/python/qwen4_ple.py +159 -0
- package/dist/providers/mlx/python/spec_decode.py +73 -31
- package/dist/providers/mlx/python/tool_call_stream.py +10 -2
- package/dist/providers/mlx/python/tool_grammar.py +16 -0
- package/dist/ui/assets/{AmbientDashboardCard-DcVHxEdC.js → AmbientDashboardCard-_xnAQGnk.js} +1 -1
- package/dist/ui/assets/{AudioEngineSettings-BFM2S1mm.js → AudioEngineSettings-CgXgbX0i.js} +1 -1
- package/dist/ui/assets/{BenchmarksView-84-YeULA.js → BenchmarksView-BlExZpYA.js} +1 -1
- package/dist/ui/assets/CatalogBrowser-DYXUZQ_t.js +1 -0
- package/dist/ui/assets/{ChannelsSettings-7NAVUk4k.js → ChannelsSettings-EH27HcqZ.js} +1 -1
- package/dist/ui/assets/ChatTimelineView-Dn1TNyVn.js +7 -0
- package/dist/ui/assets/{ConnectedAppsPanel-CIgF4Q3R.js → ConnectedAppsPanel-BROry-Y0.js} +1 -1
- package/dist/ui/assets/CraftbookEditor-B2RNJnFf.js +1 -0
- package/dist/ui/assets/{CraftbookScriptEditorView-Ck5tzj3Y.js → CraftbookScriptEditorView-B-vySmHP.js} +1 -1
- package/dist/ui/assets/{CraftbookTabContent-BWg7FhK_.js → CraftbookTabContent-BW_2KC89.js} +1 -1
- package/dist/ui/assets/{CraftbookToolsetSetup-EuFOiUzR.js → CraftbookToolsetSetup-J7rEa835.js} +1 -1
- package/dist/ui/assets/{CraftbooksView-BIzQ1VVn.js → CraftbooksView-BjBUWPGF.js} +1 -1
- package/dist/ui/assets/DiffpackReviewView-CD4qJmgT.js +1 -0
- package/dist/ui/assets/DocumentDetail-SYozruTJ.js +1 -0
- package/dist/ui/assets/DocumentsView-DE7eL49Z.js +1 -0
- package/dist/ui/assets/{Ds4Settings-9soZCSeO.js → Ds4Settings-DGzc7JcD.js} +1 -1
- package/dist/ui/assets/{EmbeddedChat-Cce7nxXT.js → EmbeddedChat-D92TaJQ8.js} +1 -1
- package/dist/ui/assets/{FaceRecognitionCard-BVZyOwB8.js → FaceRecognitionCard-CB1Dt9X4.js} +1 -1
- package/dist/ui/assets/FileMapView-kVBG22FU.js +1 -0
- package/dist/ui/assets/FoldersSettings-BWFQU5B4.js +1 -0
- package/dist/ui/assets/GezelDetail-Br4v42Nv.js +1 -0
- package/dist/ui/assets/{GezelJsonEditor-DXXt165-.js → GezelJsonEditor-B9XEiW5Y.js} +1 -1
- package/dist/ui/assets/GezellenView-DheEBAy4.js +1 -0
- package/dist/ui/assets/{GildeUpdatesCard-CtY8mUTA.js → GildeUpdatesCard-BeIYv09f.js} +1 -1
- package/dist/ui/assets/{GithubSignInChip-DT3l6E0Q.js → GithubSignInChip-eEGCe9ar.js} +1 -1
- package/dist/ui/assets/{HandboekMediaProvider-ByJ4NAzz.js → HandboekMediaProvider-D0zcbbpf.js} +1 -1
- package/dist/ui/assets/HandboekView-p0BZT1rH.js +1 -0
- package/dist/ui/assets/{HistoryView-CkinzFEC.js → HistoryView-CKWcWW-Y.js} +1 -1
- package/dist/ui/assets/{HomeView-DNBrQnwy.js → HomeView-b_TT5oV3.js} +1 -1
- package/dist/ui/assets/{ImageEngineSettings-BfM9HSd_.js → ImageEngineSettings-CJfk4OJ4.js} +1 -1
- package/dist/ui/assets/{ImageRecognitionSettings-CaSQu5Br.js → ImageRecognitionSettings-DzbvZk5S.js} +1 -1
- package/dist/ui/assets/{IncompleteDownloads-C36lTCMG.js → IncompleteDownloads-C8_XyP8O.js} +1 -1
- package/dist/ui/assets/{KnowledgeCatalogsCard-CK9bqdf6.js → KnowledgeCatalogsCard-CHopG_j-.js} +1 -1
- package/dist/ui/assets/KnowledgeView-CXNKZUJq.js +1 -0
- package/dist/ui/assets/{LlamaCppSettings-CdNMHBbp.js → LlamaCppSettings-ohcM7kes.js} +1 -1
- package/dist/ui/assets/{MarkdownField-Dugmfr_e.js → MarkdownField-BX0qsaFq.js} +1 -1
- package/dist/ui/assets/{MemoriesTree-CgFqUNEr.js → MemoriesTree-BPj5Rod8.js} +1 -1
- package/dist/ui/assets/{MicrophoneSettings-DzDe9y1q.js → MicrophoneSettings-CWjeYnfI.js} +1 -1
- package/dist/ui/assets/MlxSettings-Dq6dRpcl.js +1 -0
- package/dist/ui/assets/{ModelPicker-BVkJhNAH.js → ModelPicker-0Ue-eEKj.js} +1 -1
- package/dist/ui/assets/NewPathDialog-BhAZm9dp.js +1 -0
- package/dist/ui/assets/{NewScriptDialog-TEAd0KLl.js → NewScriptDialog-DuryIe50.js} +1 -1
- package/dist/ui/assets/NewTaskDialog-BX24flMY.js +2 -0
- package/dist/ui/assets/{OllamaSettings-CPy2vxyZ.js → OllamaSettings-Boj8Nd1G.js} +1 -1
- package/dist/ui/assets/ProjectChat-Dhw_M5bq.js +5 -0
- package/dist/ui/assets/ProjectConnectionsTab-BwpMQNrg.js +1 -0
- package/dist/ui/assets/{ProjectGitStatusBar-BgHZ2ijN.js → ProjectGitStatusBar-BORGYx5l.js} +1 -1
- package/dist/ui/assets/{ProjectGithubView-BV2uTNU0.js → ProjectGithubView-CTP1BOMv.js} +1 -1
- package/dist/ui/assets/{ProjectMailTab-DLtJdXSL.js → ProjectMailTab-qFmAeV3M.js} +1 -1
- package/dist/ui/assets/{ProjectOverviewView-ZMs9nL5N.js → ProjectOverviewView-Cq1FsoaT.js} +1 -1
- package/dist/ui/assets/{ProjectTimeline-CTPcn4Kc.js → ProjectTimeline-Cqae2Z92.js} +1 -1
- package/dist/ui/assets/ProjectsView-D0uJjUB-.js +7 -0
- package/dist/ui/assets/{RecommendedBadge-iUoisQBi.js → RecommendedBadge-CN1jEmSn.js} +1 -1
- package/dist/ui/assets/{RemoteServersPanel-CTVJ0IRh.js → RemoteServersPanel-CMakvCCM.js} +1 -1
- package/dist/ui/assets/{ScriptEditorTabs-CCDFZjdC.js → ScriptEditorTabs-st6dJePd.js} +2 -2
- package/dist/ui/assets/{ScriptEditorView-CergLqKj.js → ScriptEditorView-BkySh57_.js} +2 -2
- package/dist/ui/assets/{ScriptsView-v7ckdhDi.js → ScriptsView-7uPKwjDB.js} +1 -1
- package/dist/ui/assets/{SecurityComplianceSettings-Bd0-66Gs.js → SecurityComplianceSettings-Tsv_pXfy.js} +1 -1
- package/dist/ui/assets/SessionSwitcher-D0fSeeHO.js +1 -0
- package/dist/ui/assets/SettingsView-cli_z8ZW.js +3 -0
- package/dist/ui/assets/{SquisqIntegration-C5l_OPvD.js → SquisqIntegration-BTZ1kBlg.js} +1 -1
- package/dist/ui/assets/{StorageCleanupDialog-3kv9-2mT.js → StorageCleanupDialog-CDBjl8JQ.js} +1 -1
- package/dist/ui/assets/{StorageUsageCard-7sWTrZFa.js → StorageUsageCard-DXY1j0dZ.js} +1 -1
- package/dist/ui/assets/TaskTabContent-C0P681SL.js +1 -0
- package/dist/ui/assets/TasksView-Ddwz10ri.js +1 -0
- package/dist/ui/assets/{TerminalCodeEditor-ChmdzmCz.js → TerminalCodeEditor-BkNQ6QoQ.js} +2 -2
- package/dist/ui/assets/ToolsetsEditor-KVigemfL.js +8 -0
- package/dist/ui/assets/{TransformToolbarButton-gzIxUBH7.js → TransformToolbarButton-8wfJR1bO.js} +2 -2
- package/dist/ui/assets/{UnrecognizedModels-0hptopv6.js → UnrecognizedModels-BzdU1clO.js} +1 -1
- package/dist/ui/assets/{VideoEngineSettings-BdNzCEdR.js → VideoEngineSettings-f79ff57u.js} +1 -1
- package/dist/ui/assets/{WorkspaceIndexPane-DnsOO916.js → WorkspaceIndexPane-fu5V6o1W.js} +1 -1
- package/dist/ui/assets/{api-C0I7spBl.js → api-CmrgM5Rf.js} +1 -1
- package/dist/ui/assets/chat-thread-memory-8MCtb17Q.js +1 -0
- package/dist/ui/assets/{chunk-6ECMNUIP-BvCy0HUI.js → chunk-6ECMNUIP-D5AA6ozp.js} +1 -1
- package/dist/ui/assets/{chunk-A6N6IN3I-ofeM4l8g.js → chunk-A6N6IN3I-BpxihS5H.js} +1 -1
- package/dist/ui/assets/{chunk-ATWVNF7D-CYuW1Yc6.js → chunk-ATWVNF7D-CKIWh7bN.js} +1 -1
- package/dist/ui/assets/{chunk-UBFT2CDQ-FexGDigd.js → chunk-CW24CH7I-BD0FIooX.js} +1 -1
- package/dist/ui/assets/{chunk-DXYWKZ52-zxe8pjH4.js → chunk-DXYWKZ52-DMKPZnpo.js} +1 -1
- package/dist/ui/assets/chunk-IIQYS2YH-BtDJt4Xr.js +1 -0
- package/dist/ui/assets/{chunk-KGWT454C-v5-l6U5m.js → chunk-KGWT454C-DsQOBuLg.js} +1 -1
- package/dist/ui/assets/{chunk-Q77KNJIN-BLuPdsQF.js → chunk-Q77KNJIN-BdWizq9s.js} +1 -1
- package/dist/ui/assets/{chunk-USU6HTKB-B_p-YcDp.js → chunk-USU6HTKB-DyGZplh4.js} +1 -1
- package/dist/ui/assets/{chunk-UXEANVBI-Bt0kX-0Z.js → chunk-UXEANVBI-BUBXvqyE.js} +1 -1
- package/dist/ui/assets/{chunk-O7JILDEF-CqcO1qaI.js → chunk-X7BNDUNI-D14WIvlD.js} +2 -2
- package/dist/ui/assets/{chunk-AE3IUKMM-mZjzzO8Z.js → chunk-ZSU5DJLX-CrjQf-vs.js} +1 -1
- package/dist/ui/assets/{container-BI8hxN1N.js → container-iFj1r6Hk.js} +1 -1
- package/dist/ui/assets/csv-Di411Mv-.js +1 -0
- package/dist/ui/assets/data-Q05qqAp4.js +1 -0
- package/dist/ui/assets/{dist-APSIK7H3.js → dist-1FNFiksd.js} +3 -3
- package/dist/ui/assets/dist-BMZhqfv7.js +2 -0
- package/dist/ui/assets/dist-CE5CbmDb.js +225 -0
- package/dist/ui/assets/doc-BHcGsJZd.js +587 -0
- package/dist/ui/assets/{document-import-DPK4r8Am.js → document-import-B2Ya6sbf.js} +1 -1
- package/dist/ui/assets/{docx-DRLuCTaC.js → docx-B8Pwz5Ih.js} +1 -1
- package/dist/ui/assets/{epub-a0p2Xb1b.js → epub-BQ4g8Q9j.js} +1 -1
- package/dist/ui/assets/{export-options-BqYFyzWx.js → export-options-Dylv69b3.js} +1 -1
- package/dist/ui/assets/file-browser-BLOPfnS0.js +5 -0
- package/dist/ui/assets/{html-BbQNmJ5X.js → html-BnA7qFwq.js} +1 -1
- package/dist/ui/assets/icons-CyM7Cg4E.js +1 -0
- package/dist/ui/assets/index-DW6qHqhU.css +1 -0
- package/dist/ui/assets/index-DivKnJyx.js +36 -0
- package/dist/ui/assets/{mail-link-CWfsP5Aq.js → mail-link-NtlcX5OE.js} +1 -1
- package/dist/ui/assets/{markdown-ryKA_OmY.js → markdown-CLKH_zzl.js} +1 -1
- package/dist/ui/assets/markdown-baseline-0dqv9qbV.js +1 -0
- package/dist/ui/assets/materialize-G4WC5UG3-xq2dcwS8.js +1 -0
- package/dist/ui/assets/{monaco-base-C0VTMpv-.js → monaco-base-BSvdAweA.js} +1 -1
- package/dist/ui/assets/{monaco-setup-CX8q88c5.js → monaco-setup-CT7LZ0o_.js} +1 -1
- package/dist/ui/assets/{new-project-meta-ZmDPGYzC.js → new-project-meta-5Y9Blozr.js} +1 -1
- package/dist/ui/assets/outside-in-Msmhxf_U.js +3 -0
- package/dist/ui/assets/{pdf-BHrygJa5.js → pdf-C4BhW3zg.js} +1 -1
- package/dist/ui/assets/{pending-drafts-27ujtQxX.js → pending-drafts-BD227X9H.js} +1 -1
- package/dist/ui/assets/{poppetje-CfaAvFkE.js → poppetje-DvCJO36y.js} +3 -3
- package/dist/ui/assets/{pptx-nDW64jAN.js → pptx-B6uaM2s7.js} +3 -3
- package/dist/ui/assets/{run-export-86KzLZ7R.js → run-export-TscWwR6y.js} +2 -2
- package/dist/ui/assets/{standalone-source-7QdiNsDW.js → standalone-source-Cw9SF7Zk.js} +1 -1
- package/dist/ui/assets/storage-Cmhlwx70.js +1 -0
- package/dist/ui/assets/styles-BjDaWeMA.css +1 -0
- package/dist/ui/assets/styles-CqO-rmOt.js +554 -0
- package/dist/ui/assets/{terminal-monaco-setup-Bar-sYKd.js → terminal-monaco-setup-me523-j-.js} +1 -1
- package/dist/ui/assets/{transform-CmAXy0Ck.js → transform-DxJCwK68.js} +1 -1
- package/dist/ui/assets/{use-local-model-manager-D1yiurrC.js → use-local-model-manager-8wvk-I-y.js} +1 -1
- package/dist/ui/assets/{useCompactLayout-BDtPQcDh.js → useCompactLayout-cm4E9Vja.js} +0 -0
- package/dist/ui/assets/{useCopilotAvailability-BHOfHrfT.js → useCopilotAvailability-D9hglSH_.js} +1 -1
- package/dist/ui/assets/{useDiffpacks-B0kYhlWQ.js → useDiffpacks-1BN2XJWg.js} +1 -1
- package/dist/ui/assets/{useGitSync-DOt-ODiw.js → useGitSync-7m9YA7h5.js} +1 -1
- package/dist/ui/assets/{useShowWorkInProgressFeatures-BtpredG7.js → useShowWorkInProgressFeatures-D6QOaTUT.js} +1 -1
- package/dist/ui/assets/{useTotalRamBytes-B8NFM27w.js → useTotalRamBytes-Durk383U.js} +1 -1
- package/dist/ui/assets/{xlsx-B_pu1ZvY.js → xlsx-BbHA9bxA.js} +1 -1
- package/dist/ui/index.html +15 -15
- package/package.json +12 -11
- package/dist/ui/assets/CatalogBrowser-7_jHy5Q3.js +0 -1
- package/dist/ui/assets/ChatTimelineView-Cg_kLK_U.js +0 -7
- package/dist/ui/assets/CraftbookEditor-BKAIsnXv.js +0 -1
- package/dist/ui/assets/DiffpackReviewView-B2a3zgE-.js +0 -1
- package/dist/ui/assets/DocumentDetail-GCYhwQqV.js +0 -1
- package/dist/ui/assets/DocumentsView-Cm3RaQ5N.js +0 -1
- package/dist/ui/assets/FileMapView-BKJovLcL.js +0 -1
- package/dist/ui/assets/FoldersSettings-CuJd2JdE.js +0 -1
- package/dist/ui/assets/GezelDetail-D_KIPDhQ.js +0 -1
- package/dist/ui/assets/GezellenView-BOOW1QQU.js +0 -1
- package/dist/ui/assets/HandboekView-gRzJcIbJ.js +0 -1
- package/dist/ui/assets/KnowledgeView-DJ3cJVHA.js +0 -1
- package/dist/ui/assets/MlxSettings-45mBFHbA.js +0 -1
- package/dist/ui/assets/NewTaskDialog-CIXVunZn.js +0 -2
- package/dist/ui/assets/ProjectChat-BiJRweob.js +0 -5
- package/dist/ui/assets/ProjectConnectionsTab-CQgaIzuv.js +0 -1
- package/dist/ui/assets/ProjectsView-BUdR76n6.js +0 -7
- package/dist/ui/assets/SessionSwitcher-BgZqyiRn.js +0 -1
- package/dist/ui/assets/SettingsView-DLhOYiR5.js +0 -3
- package/dist/ui/assets/TaskTabContent-CG2KmfwV.js +0 -1
- package/dist/ui/assets/TasksView-Dy5Ue4zS.js +0 -1
- package/dist/ui/assets/ToolsetsEditor-J9XxQ5Ms.js +0 -8
- package/dist/ui/assets/chat-thread-memory-CI2-giEq.js +0 -1
- package/dist/ui/assets/chunk-IIQYS2YH-DEkyBlHg.js +0 -1
- package/dist/ui/assets/csv-B0D9jJG2.js +0 -1
- package/dist/ui/assets/data-BIL84EaT.js +0 -1
- package/dist/ui/assets/dist-CJqyWK6E.js +0 -2
- package/dist/ui/assets/dist-DOqbRmFj.js +0 -225
- package/dist/ui/assets/doc-C2Ph2FWI.js +0 -584
- package/dist/ui/assets/document-companion-aDThLOwl.js +0 -1
- package/dist/ui/assets/file-browser-DVyWN0LD.js +0 -5
- package/dist/ui/assets/icons-DWaUNQbT.js +0 -1
- package/dist/ui/assets/index-DDu8nyO6.js +0 -34
- package/dist/ui/assets/index-DEDUSiCx.css +0 -1
- package/dist/ui/assets/markdown-baseline-9B52XlX2.js +0 -1
- package/dist/ui/assets/materialize-G4WC5UG3-BlZQe-88.js +0 -1
- package/dist/ui/assets/outside-in-BmIIeMid.js +0 -3
- package/dist/ui/assets/storage-B-vhjyV2.js +0 -1
- package/dist/ui/assets/styles-BvkZd-EV.js +0 -550
- package/dist/ui/assets/styles-IQ4adxWr.css +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/dist-CJqyWK6E.js","assets/rolldown-runtime-aKtaBQYM.js","assets/dist-DOqbRmFj.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-CEpd2cAX.js";import{J as r,Lt as i,Rt as a,St as o,U as s,W as c,an as l,dn as u,in as d,ot as f,q as p,st as m,vn as h}from"./dist-DOqbRmFj.js";import{a as g}from"./dist-CJqyWK6E.js";import{t as _}from"./api-C0I7spBl.js";import{_ as v,g as y,o as ee,v as b}from"./primitives-CWrGZpPI.js";import{n as x,t as S}from"./relative-time-B2kBaekd.js";import{t as C}from"./preload-helper-Czpn1I53.js";import{c as w,i as T,l as E,n as te,o as D,s as ne}from"./styles-BvkZd-EV.js";import{C as O,Ct as re,D as k,E as A,It as j,O as ie,St as M,T as ae,bt as oe,ft as se,ht as ce,i as le,k as ue,p as de,vt as fe,w as pe,xt as me,y as he,yt as ge,zt as _e}from"./index-DDu8nyO6.js";import{c as N,o as P,r as ve}from"./SquisqIntegration-C5l_OPvD.js";import{n as F,t as ye}from"./microphone-input-5gqW_NKf.js";import{r as be,t as xe}from"./composer-prefill-CbG_i1Rx.js";var I=e(t(),1),L=n();function R(e){return e.replace(/\.[^.]+$/,``).replace(/[-_]/g,` `)}function Se(e){return e.replace(/([\\\[\]])/g,`\\$1`)}function Ce(){return(0,L.jsxs)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:[(0,L.jsx)(`rect`,{x:`2`,y:`2.5`,width:`12`,height:`11`,rx:`1.5`,stroke:`currentColor`,strokeWidth:`1.35`}),(0,L.jsx)(`circle`,{cx:`5.25`,cy:`5.75`,r:`1.1`,stroke:`currentColor`,strokeWidth:`1.2`}),(0,L.jsx)(`path`,{d:`m3.5 12 3.1-3.25 2.05 1.9 1.55-1.55 2.3 2.9`,stroke:`currentColor`,strokeWidth:`1.35`,strokeLinecap:`round`,strokeLinejoin:`round`})]})}function we(){return(0,L.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,L.jsx)(`path`,{d:`m5.25 8.7 4.2-4.2a2.1 2.1 0 0 1 2.97 2.97l-5.1 5.1a3.2 3.2 0 0 1-4.53-4.52l5-5`,stroke:`currentColor`,strokeWidth:`1.4`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function Te({mediaProvider:e,onError:t}){let{bumpMediaRevision:n,insertAtCursor:r}=T(),i=(0,I.useRef)(null),a=(0,I.useRef)(null),[o,s]=(0,I.useState)(null),c=(0,I.useCallback)(async(i,a)=>{s(a),t(null);try{let t=i.type||`application/octet-stream`,o=await e.addMedia(i.name,await i.arrayBuffer(),t);n();let s=Se(R(i.name));r(a===`image`?``:`[${s}](${o})`)}catch(e){t(e instanceof Error?e.message:`Could not attach that file.`)}finally{s(null)}},[n,r,e,t]),l=(0,I.useCallback)((e,t)=>{let n=e.target.files?.[0];e.target.value=``,n&&c(n,t)},[c]);return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`div`,{className:`chat-composer-attachment-actions`,children:[(0,L.jsx)(`input`,{ref:i,type:`file`,accept:`image/*`,hidden:!0,onChange:e=>l(e,`image`)}),(0,L.jsx)(`input`,{ref:a,type:`file`,hidden:!0,onChange:e=>l(e,`file`)}),(0,L.jsx)(`button`,{type:`button`,className:`squisq-toolbar-button`,onClick:()=>i.current?.click(),disabled:o!==null,"aria-label":o===`image`?`Inserting image…`:`Insert image`,"aria-busy":o===`image`,title:`Insert image`,"data-tooltip":`Insert image`,children:(0,L.jsx)(Ce,{})}),(0,L.jsx)(`button`,{type:`button`,className:`squisq-toolbar-button`,onClick:()=>a.current?.click(),disabled:o!==null,"aria-label":o===`file`?`Attaching file…`:`Attach file`,"aria-busy":o===`file`,title:`Attach file`,"data-tooltip":`Attach file`,children:(0,L.jsx)(we,{})})]}),(0,L.jsx)(`span`,{className:`chat-composer-toolbar-spacer`,"aria-hidden":`true`})]})}var z=50;function Ee(e){return typeof AudioContext>`u`?null:new De(e)}var De=class{stream;context=null;source=null;analyser=null;timer=null;samples=null;noiseFloor=.004;speaking=!1;constructor(e){this.stream=e}start(e){if(this.timer!==null)return;let t=new AudioContext;this.context=t;try{let e=t.createMediaStreamSource(this.stream),n=t.createAnalyser();n.fftSize=1024,n.smoothingTimeConstant=.15,e.connect(n),this.source=e,this.analyser=n,this.samples=new Float32Array(n.fftSize),t.resume().catch(()=>void 0)}catch(e){throw this.stop(),e}this.timer=setInterval(()=>{if(!this.analyser||!this.samples)return;this.analyser.getFloatTimeDomainData(this.samples);let t=B(this.samples),n=Math.max(.012,this.noiseFloor*2.8),r=Math.max(.008,this.noiseFloor*1.8);this.speaking=t>=(this.speaking?r:n),this.speaking||(this.noiseFloor=Math.min(.03,this.noiseFloor*.95+t*.05)),e(this.speaking,t)},z)}stop(){this.timer!==null&&(clearInterval(this.timer),this.timer=null),this.source?.disconnect(),this.analyser?.disconnect(),this.source=null,this.analyser=null,this.samples=null;let e=this.context;this.context=null,e&&e.close().catch(()=>void 0)}};function B(e){if(e.length===0)return 0;let t=0;for(let n of e)t+=n*n;return Math.sqrt(t/e.length)}var Oe=2500,ke=350,Ae=650,je=1e4,Me=1e3,Ne=class{stream;mimeType;segmentMs;speechPauseMs;minSegmentMs;longPauseMs;transcribe;onTranscript;onError;onLongPause;onAudioLevel;abortController=new AbortController;activityMonitor;activityMonitorStarted=!1;recorder=null;chunks=[];segmentTimer=null;transcriptionQueue=Promise.resolve();stopPromise=null;resolveStop=null;finalSegmentRequested=!1;segmentStartedAt=0;segmentHasSpeech=!1;currentlySpeaking=!1;lastSpeechAt=null;confirmedSilenceMs=0;recognitionPrompt=``;hasTranscript=!1;longPauseNotified=!1;disposed=!1;constructor(e){this.stream=e.stream,this.mimeType=e.mimeType??``,this.segmentMs=e.segmentMs??Oe,this.speechPauseMs=e.speechPauseMs??ke,this.minSegmentMs=e.minSegmentMs??Ae,this.longPauseMs=e.longPauseMs??je,this.activityMonitor=e.activityMonitor===void 0?Ee(e.stream):e.activityMonitor,this.transcribe=e.transcribe,this.onTranscript=e.onTranscript,this.onError=e.onError,this.onLongPause=e.onLongPause,this.onAudioLevel=e.onAudioLevel}start(){this.disposed||this.recorder||(this.startSegment(),this.startActivityMonitor())}stop(){if(this.stopPromise)return this.stopPromise;this.finalSegmentRequested=!0,this.stopActivityMonitor(),this.clearSegmentTimer(),this.stopPromise=new Promise(e=>{this.resolveStop=e});let e=this.recorder;return e?.state===`recording`?e.stop():e||this.finish(),this.stopPromise}cancel(){if(this.disposed)return;this.disposed=!0,this.abortController.abort(),this.stopActivityMonitor(),this.clearSegmentTimer();let e=this.recorder;if(this.recorder=null,e&&(e.ondataavailable=null,e.onstop=null,e.onerror=null,e.state!==`inactive`))try{e.stop()}catch{}this.releaseStream(),this.resolveStop?.(),this.resolveStop=null}startSegment(){if(this.disposed||this.finalSegmentRequested)return;let e=this.mimeType?{mimeType:this.mimeType}:void 0,t=new MediaRecorder(this.stream,e);this.recorder=t,this.chunks=[],this.segmentStartedAt=Date.now(),this.segmentHasSpeech=this.currentlySpeaking,t.ondataavailable=e=>{!this.disposed&&e.data.size>0&&this.chunks.push(e.data)},t.onerror=e=>{let t=e.error;this.onError(t??Error(`Microphone recording failed.`)),this.finalSegmentRequested=!0,this.clearSegmentTimer()},t.onstop=()=>{if(this.disposed||this.recorder!==t)return;this.recorder=null;let e=t.mimeType||this.mimeType||`audio/webm`,n=new Blob(this.chunks,{type:e}),r=Math.max(0,Date.now()-this.segmentStartedAt);this.chunks=[],this.finalSegmentRequested||this.startSegment(),n.size>0&&this.enqueueTranscription(n,e,r),this.finalSegmentRequested&&this.finish()},t.start(),this.segmentTimer=setTimeout(()=>{this.segmentTimer=null,!this.disposed&&!this.finalSegmentRequested&&t.state===`recording`&&t.stop()},this.segmentMs)}startActivityMonitor(){if(!(!this.activityMonitor||this.activityMonitorStarted))try{this.activityMonitor.start((e,t)=>{this.onAudioLevel?.(t),this.onSpeechActivity(e)}),this.activityMonitorStarted=!0}catch{this.activityMonitor.stop(),this.activityMonitor=null}}stopActivityMonitor(){this.activityMonitor?.stop()}onSpeechActivity(e){if(this.disposed||this.finalSegmentRequested)return;let t=Date.now();if(this.currentlySpeaking=e,e){this.segmentHasSpeech=!0,this.lastSpeechAt=t,this.longPauseNotified=!1;return}if(this.lastSpeechAt===null)return;let n=t-this.lastSpeechAt;this.segmentHasSpeech&&t-this.segmentStartedAt>=this.minSegmentMs&&n>=this.speechPauseMs&&this.flushCurrentSegment()}flushCurrentSegment(){let e=this.recorder;!e||e.state!==`recording`||(this.clearSegmentTimer(),e.stop())}enqueueTranscription(e,t,n){this.transcriptionQueue=this.transcriptionQueue.then(async()=>{if(!this.disposed)try{let r=V(await this.transcribe(e,t,this.abortController.signal,this.recognitionPrompt));if(this.disposed)return;if(r){this.confirmedSilenceMs=0,this.hasTranscript=!0,this.longPauseNotified=!1,this.recognitionPrompt=Pe(this.recognitionPrompt,r),this.onTranscript(r);return}this.confirmedSilenceMs+=n,!this.longPauseNotified&&this.onLongPause&&this.confirmedSilenceMs>=this.longPauseMs&&(this.longPauseNotified=!0,this.onLongPause(this.hasTranscript))}catch(e){if(this.disposed||this.abortController.signal.aborted)return;this.onError(e instanceof Error?e:Error(String(e)))}})}async finish(){this.clearSegmentTimer(),this.stopActivityMonitor(),this.releaseStream(),await this.transcriptionQueue,!this.disposed&&(this.disposed=!0,this.resolveStop?.(),this.resolveStop=null)}clearSegmentTimer(){this.segmentTimer!==null&&(clearTimeout(this.segmentTimer),this.segmentTimer=null)}releaseStream(){for(let e of this.stream.getTracks())e.stop()}};function V(e){let t=e.trim();return/^\[\s*BLANK_AUDIO\s*\]$/i.test(t)?``:t}function Pe(e,t){let n=`${e.trim()} ${t.trim()}`.trim();if(n.length<=Me)return n;let r=n.slice(-1e3),i=r.search(/\s/);return(i>=0?r.slice(i+1):r).trim()}async function Fe(e){if(/^audio\/(?:wav|wave|x-wav)(?:;|$)/i.test(e.type))return e;if(typeof AudioContext>`u`)throw Error(`This recording could not be prepared for speech-to-text.`);let t=new AudioContext;try{let n=await t.decodeAudioData(await e.arrayBuffer()),r=Ie(Array.from({length:n.numberOfChannels},(e,t)=>n.getChannelData(t)),n.sampleRate);return new Blob([r.buffer],{type:`audio/wav`})}catch(e){let t=e instanceof Error&&e.message?` (${e.message})`:``;throw Error(`This recording could not be prepared for speech-to-text${t}`)}finally{await t.close().catch(()=>void 0)}}function Ie(e,t){let n=e[0]?.length??0;if(e.length===0||n===0)throw Error(`The microphone recording was empty.`);if(!Number.isFinite(t)||t<=0)throw Error(`The microphone recording has an invalid sample rate.`);if(e.some(e=>e.length!==n))throw Error(`The microphone recording channels have different lengths.`);let r=n*2,i=new ArrayBuffer(44+r),a=new DataView(i);Le(a,0,`RIFF`),a.setUint32(4,36+r,!0),Le(a,8,`WAVE`),Le(a,12,`fmt `),a.setUint32(16,16,!0),a.setUint16(20,1,!0),a.setUint16(22,1,!0),a.setUint32(24,Math.round(t),!0),a.setUint32(28,Math.round(t)*2,!0),a.setUint16(32,2,!0),a.setUint16(34,16,!0),Le(a,36,`data`),a.setUint32(40,r,!0);for(let t=0;t<n;t+=1){let n=0;for(let r of e)n+=r[t]??0;n=Math.max(-1,Math.min(1,n/e.length));let r=Math.round(n<0?n*32768:n*32767);a.setInt16(44+t*2,r,!0)}return new Uint8Array(i)}function Le(e,t,n){for(let r=0;r<n.length;r+=1)e.setUint8(t+r,n.charCodeAt(r))}var Re=12;function ze({projectId:e,disabled:t=!1,onTranscript:n,onError:r}){let[i,a]=(0,I.useState)(`idle`),[o,s]=(0,I.useState)(()=>Be()),c=(0,I.useRef)(null),l=(0,I.useRef)(!0),u=(0,I.useRef)(!1),d=(0,I.useRef)(0),f=(0,I.useRef)(e),p=E()&&w();(0,I.useEffect)(()=>(l.current=!0,()=>{l.current=!1,d.current+=1,c.current?.cancel(),c.current=null}),[]),(0,I.useEffect)(()=>{f.current!==e&&(f.current=e,d.current+=1,c.current?.cancel(),c.current=null,u.current=!1,a(`idle`),s(Be()))},[e]);let m=(0,I.useCallback)(async()=>{let e=c.current;if(e){a(`transcribing`);try{await e.stop()}finally{c.current===e&&(c.current=null),l.current&&a(`idle`)}}},[]),h=(0,I.useCallback)(async()=>{if(!p||t||u.current||c.current)return;u.current=!0;let i=d.current;a(`requesting`),s(Be()),r(null);let o=null;try{let t=await _.getConfig().catch(()=>void 0),u={...t?.microphoneDeviceId?{deviceId:t.microphoneDeviceId}:{},...t?.microphoneDeviceLabel?{label:t.microphoneDeviceLabel}:{}},f=F(u.deviceId||u.label?await ye().catch(()=>[]):[],u),p=f?.deviceId??u.deviceId;if(o=await D({echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,...p?{deviceId:{exact:p}}:{}}),!l.current||i!==d.current){for(let e of o.getTracks())e.stop();return}let h=o.getAudioTracks?.()[0]?.label?.trim()||f?.label||u.label,g=ne(`audio`),v=new Ne({stream:o,...g.mimeType?{mimeType:g.mimeType}:{},transcribe:async(t,n,i,a)=>{let o=await Fe(t),s=V((await _.transcribeAudio({audio:{data:await H(o),mimeType:o.type||n},projectId:e,signal:i,...a?{prompt:a}:{}})).text);return s?(r(null),s):``},onTranscript:n,onAudioLevel:e=>{if(!l.current||i!==d.current)return;let t=Ve(e);s(e=>[...e.slice(1),t])},onLongPause:e=>{e||r(`No speech detected${h?` from ${h}`:``}. Choose the microphone in Settings → Device Integration if this isn't the expected input.`),m()},onError:e=>{v.cancel(),c.current===v&&(c.current=null,l.current&&i===d.current&&(a(`idle`),r(U(e))))}});c.current=v,v.start(),o=null,a(`recording`)}catch(e){if(o)for(let e of o.getTracks())e.stop();l.current&&i===d.current&&(a(`idle`),r(U(e)))}finally{i===d.current&&(u.current=!1)}},[t,r,n,e,m,p]),g=i===`recording`,v=!p;return(0,L.jsxs)(`button`,{type:`button`,className:`chat-narrate-btn${g?` chat-narrate-btn-recording`:``}`,"data-testid":`chat-narrate`,onClick:g?()=>void m():()=>void h(),disabled:i===`requesting`||i===`transcribing`||i===`idle`&&(t||v),"aria-label":i===`requesting`?`Starting microphone…`:g?`Stop narrating`:i===`transcribing`?`Finishing transcription…`:`Narrate prompt`,"aria-pressed":g,"aria-busy":i===`requesting`||i===`transcribing`,title:v?`Voice input is unavailable in this browser`:g?`Listening — short pauses add speech; click to finish now`:i===`transcribing`?`Adding the remaining speech to this prompt`:`Narrate this prompt with your microphone`,children:[(0,L.jsx)(We,{}),g&&(0,L.jsx)(He,{levels:o}),g&&(0,L.jsx)(`span`,{className:`chat-narrate-live-dot`,"aria-hidden":`true`})]})}function Be(){return Array.from({length:Re},()=>0)}function Ve(e){return Math.min(1,Math.max(0,e*14))}function He({levels:e}){return(0,L.jsx)(`span`,{className:`chat-narrate-waveform`,"data-testid":`microphone-waveform`,"aria-hidden":`true`,children:e.map((e,t)=>(0,L.jsx)(`span`,{className:`chat-narrate-waveform-bar`,style:{height:`${2+e*14}px`}},t))})}async function H(e){let t=new Uint8Array(await e.arrayBuffer()),n=``,r=32768;for(let e=0;e<t.length;e+=r)n+=String.fromCharCode(...t.subarray(e,e+r));return btoa(n)}function U(e){let t=e instanceof Error?e:Error(String(e)),n=Ue(t)??t.message;return t.name===`NotAllowedError`||/permission|not allowed|denied/i.test(n)?`Microphone access was not granted. Allow it in your system settings, then try again.`:t.name===`OverconstrainedError`||/constraint|selected microphone/i.test(n)?`The selected microphone is unavailable. Choose another in Settings → Device Integration.`:t.name===`NotFoundError`||/requested device not found|no microphone/i.test(n)?`No microphone is available.`:/speech_to_text_not_ready|no stt model|download one from settings|speech-to-text model/i.test(n)?`Speech-to-text is not ready. Download a model in Settings → Audio, then try again.`:/speech_to_text_failed/i.test(n)?`Speech-to-text could not transcribe this recording. Check Settings → Audio, then try again.`:`Could not narrate this prompt: ${n}`}function Ue(e){let t=e.details;if(t&&typeof t==`object`&&`error`in t){let e=t.error;if(typeof e==`string`&&e.trim())return e.trim()}return typeof t==`string`&&t.trim()?t.trim():null}function We(){return(0,L.jsxs)(`svg`,{viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,focusable:`false`,children:[(0,L.jsx)(`rect`,{x:`5.25`,y:`1.5`,width:`5.5`,height:`8`,rx:`2.75`,stroke:`currentColor`}),(0,L.jsx)(`path`,{d:`M3.5 7.5a4.5 4.5 0 0 0 9 0M8 12v2.5M5.75 14.5h4.5`,stroke:`currentColor`})]})}function Ge({gezels:e,primaryGezelId:t,additionalRecipientIds:n,roleBasedNameOnlyMode:r,onSelectPrimary:i,onAddRecipient:a}){let[o,s]=(0,I.useState)(!1),[l,u]=(0,I.useState)(``),d=(0,I.useMemo)(()=>{let t=new Set;return e.filter(e=>t.has(e.id)?!1:(t.add(e.id),!0)).map(e=>({gezel:e,rendered:c({name:e.name,roleBasedName:e.roleBasedName},r)}))},[e,r]),f=d.length>8,p=l.trim().toLowerCase(),m=f&&p?d.filter(({gezel:e,rendered:t})=>t.toLowerCase().includes(p)||(e.role??``).toLowerCase().includes(p)):d,h=new Set(n);return(0,L.jsxs)(v,{open:o,onOpenChange:e=>{s(e),e||u(``)},children:[(0,L.jsx)(b,{asChild:!0,children:(0,L.jsx)(`button`,{type:`button`,className:`chat-composer-recipient-trigger`,"aria-label":`Choose recipients`,title:`Add or change recipients`,children:(0,L.jsx)(`span`,{className:`chat-recipient-plus-glyph`,"aria-hidden":`true`,children:`+`})})}),(0,L.jsxs)(y,{className:`chat-recipient-popover`,align:`end`,side:`top`,"aria-label":`Choose a gezel`,children:[(0,L.jsx)(`span`,{className:`chat-recipient-popover-label`,children:`Choose a gezel`}),f&&(0,L.jsx)(`input`,{className:`chat-recipient-search`,type:`search`,value:l,placeholder:`Search by name or role`,"aria-label":`Search gezels`,onChange:e=>u(e.target.value)}),(0,L.jsxs)(`div`,{className:`chat-recipient-list`,children:[m.map(({gezel:e,rendered:n})=>{let r=e.id===t,o=h.has(e.id);return(0,L.jsxs)(`div`,{className:`chat-recipient-option${r?` chat-recipient-option-primary`:``}`,children:[(0,L.jsxs)(`button`,{type:`button`,className:`chat-recipient-select`,"aria-current":r?`true`:void 0,"aria-label":`Talk to ${n}`,onClick:()=>{i(e.id),s(!1)},children:[(0,L.jsx)(j,{svg:e.icon??null,poppetje:e.poppetje,iconOverride:e.iconOverride,name:n,size:26}),(0,L.jsxs)(`span`,{className:`chat-recipient-option-text`,children:[(0,L.jsx)(`span`,{className:`chat-recipient-option-name`,children:n}),e.role&&(0,L.jsx)(`span`,{className:`chat-recipient-option-role`,children:e.role})]})]}),r||o?(0,L.jsx)(`span`,{className:`chat-recipient-option-state`,children:r?`To`:`Added`}):(0,L.jsx)(`button`,{type:`button`,className:`chat-recipient-add`,"aria-label":`Add ${n} to recipients`,title:`Add ${n}`,onClick:()=>a(e.id),children:(0,L.jsx)(`span`,{className:`chat-recipient-plus-glyph`,"aria-hidden":`true`,children:`+`})})]},e.id)}),m.length===0&&(0,L.jsx)(`p`,{className:`muted small chat-recipient-empty`,children:`No matches.`})]})]})]})}var Ke=new Map,qe=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`;function Je(e){let t=e.trim();return/^(?:data|blob):/i.test(t)?!1:t.startsWith(`//`)||/^[a-z][a-z0-9+.-]*:/i.test(t)}function Ye(e,t){let n=`${e}:${t}`,r=Ke.get(n);return r||(r=W({projectId:e,legacySessionId:t}),Ke.set(n,r)),r}function W(e){let t=new Map,n=new Map,r=async(e,t)=>{if(e instanceof Blob)return e;let n=e instanceof Uint8Array?e:new Uint8Array(e),r=new Uint8Array(n.byteLength);return r.set(n),new Blob([r.buffer],{type:t})},i=e=>{let t=/^attachments\/([^/]+)$/.exec(e);if(t)return{scope:`attachments`,filename:t[1]};let n=/^images\/([^/]+)$/.exec(e);if(n)return{scope:`images`,filename:n[1]};let r=/^artifacts\/(.+)$/.exec(e);return r?{scope:`artifact`,path:r[1]}:/^generated\/[^/].*\.(png|jpe?g|gif|webp|svg)$/i.test(e)?{scope:`artifact`,path:e}:null};return{async addMedia(n,i,a){let o=await r(i,a),s=await _.uploadProjectAttachment(e.projectId,o,a,n);return t.set(s.relativePath,URL.createObjectURL(o)),s.relativePath},async resolveUrl(r){if(Je(r))return qe;if(/^(?:data|blob):/i.test(r.trim()))return r;let a=t.get(r);if(a)return a;let o=n.get(r);if(o)return o;let s=i(r);if(!s)return r;let c=(async()=>{try{let n;if(s.scope===`attachments`)n=await _.fetchProjectAttachment(e.projectId,s.filename);else if(s.scope===`artifact`)n=await _.fetchProjectArtifactBlob(e.projectId,s.path);else{if(!e.legacySessionId)return r;n=await _.fetchSessionImage(e.projectId,e.legacySessionId,s.filename)}let i=URL.createObjectURL(n);return t.set(r,i),i}finally{n.delete(r)}})();return n.set(r,c),c},async listMedia(){return(await _.listProjectAttachments(e.projectId)).attachments.map(e=>({name:`attachments/${e.filename}`,mimeType:e.mimeType,size:e.size}))},async removeMedia(n){let r=i(n);if(!r)return;r.scope===`attachments`?await _.deleteProjectAttachment(e.projectId,r.filename):r.scope===`images`&&e.legacySessionId&&await _.deleteSessionImage(e.projectId,e.legacySessionId,r.filename);let a=t.get(n);a&&(URL.revokeObjectURL(a),t.delete(n))},dispose(){for(let e of t.values())URL.revokeObjectURL(e);t.clear(),n.clear()}}}function Xe(e){let t=e.trim();return/^(?:data|blob):/i.test(t)?!1:t.startsWith(`//`)||/^[a-z][a-z0-9+.-]*:/i.test(t)}function Ze(e){let t=new Map,n=null,r=n=>{let r=t.get(n);return r||(r=P(ve({projectId:e.projectId,root:`prompts/${n}/message_files`,client:_,referencePrefix:`message_files`}),`message_files`),t.set(n,r)),r},i=()=>(n??=W({projectId:e.projectId}),n);return{async addMedia(t,n,i){let a=await e.ensureDraftId();return r(a).addMedia(t,n,i)},async resolveUrl(t){if(Xe(t))return qe;if(/^(?:data|blob):/i.test(t.trim()))return t;let n=e.getDraftId(),a=t.replace(/^\.\//,``).replace(/^\/+/,``);return n&&a.startsWith(`message_files/`)?r(n).resolveUrl(t):i().resolveUrl(t)},async listMedia(){let t=e.getDraftId();return t?r(t).listMedia():[]},async removeMedia(t){let n=e.getDraftId(),a=t.replace(/^\.\//,``).replace(/^\/+/,``);if(n&&a.startsWith(`message_files/`)){await r(n).removeMedia(t);return}await i().removeMedia(t)},dispose(){for(let e of t.values())e.dispose();t.clear(),n?.dispose(),n=null}}}function Qe(e){if(e.includes(`
|
|
3
|
-
`)||e.includes(`\r`))return null;let t=e.trim().match(/^\/open(?:[ \t]+(.*))?$/i);return t?(t[1]??``).trim():null}function $e(e,t,n=8){let r=G(e),i=[`workspace`,`artifacts`].map(e=>({key:`folder:${e}`,label:e,description:`Open the project ${e} folder`,target:{type:`folder`,folder:e}})).filter(e=>tt(r,e.label)),a=new Set,o=[];for(let e of t){let t=`${e.projectId??``}:${e.kind}:${G(e.path)}`;if(!a.has(t)&&(a.add(t),!(!tt(r,e.path)&&!tt(r,nt(e.path)))&&(o.push({key:`reference:${e.key}`,label:e.path,description:`Open recent ${e.kind}`,target:{type:`reference`,reference:e}}),o.length>=n)))break}return[...i,...o]}function et(e,t){let n=G(e);if(n===`workspace`||n===`artifacts`)return{type:`folder`,folder:n};if(!n)return null;let r=t.find(e=>G(e.path)===n);if(r)return{type:`reference`,reference:r};let i=t.filter(e=>G(nt(e.path))===n);return i.length===1?{type:`reference`,reference:i[0]}:null}function G(e){return e.trim().replaceAll(`\\`,`/`).toLowerCase()}function tt(e,t){return!e||G(t).includes(e)}function nt(e){let t=e.replaceAll(`\\`,`/`);return t.slice(t.lastIndexOf(`/`)+1)}var rt=new Set;function it(e){for(let t of rt)t(e)}function at(e){return rt.add(e),()=>{rt.delete(e)}}var ot=64,K=new Map,q=new Map;function st(e){return[e.scope??`chat`,e.projectId,e.gezelId,e.taskRef??``,e.craftbookRef??``].join(`|`)}function ct(e){return`${st(e)}|${e.sessionId??`new`}`}function lt(e){return K.get(e)}function J(e,t){if(!t){K.delete(e);return}for(K.delete(e),K.set(e,t);K.size>ot;){let e=K.keys().next();if(e.done)break;K.delete(e.value)}}var ut=new Set;function dt(e){return ut.add(e),()=>{ut.delete(e)}}function Y(){for(let e of ut)e()}function X(e){return q.get(e)}function Z(e,t){for(q.delete(e),q.set(e,t);q.size>ot;){let e=q.keys().next();if(e.done)break;q.delete(e.value)}Y()}function Q(e){q.delete(e);for(let[t,n]of K)n===e&&K.delete(t);Y()}var ft=1e3;function pt(e){let{address:t,sessionId:n,draftId:r,onDraftIdChange:i,getText:a,onLoaded:o}=e,{scope:s,projectId:c,gezelId:l,taskRef:u,craftbookRef:d}=t,f=(0,I.useMemo)(()=>ct({...s?{scope:s}:{},projectId:c,gezelId:l,...u?{taskRef:u}:{},...d?{craftbookRef:d}:{},sessionId:n??null}),[s,c,l,u,d,n]),[p,m]=(0,I.useState)(()=>r??lt(f)??null),[h,g]=(0,I.useState)(null),[v,y]=(0,I.useState)({phase:`idle`,dirty:!1,error:null}),ee=(0,I.useRef)(p),b=(0,I.useRef)(f),x=(0,I.useRef)(!1),S=(0,I.useRef)(n===void 0),C=(0,I.useRef)(!1),w=(0,I.useRef)(null),T=(0,I.useRef)(!1),E=(0,I.useRef)(0),te=(0,I.useRef)(a);te.current=a;let D=(0,I.useRef)(o);D.current=o;let ne=(0,I.useRef)(i);ne.current=i;let O=(0,I.useRef)(t);O.current=t;let re=(0,I.useRef)(n);re.current=n;let k=(0,I.useCallback)(e=>{ee.current=e,m(e)},[]),A=(0,I.useRef)(null),j=(0,I.useRef)(null),ie=(0,I.useCallback)(async e=>{let t=ee.current;if(!t)return;let n=O.current.projectId;if(!e.trim()&&!x.current){await _.deletePromptDraft(n,t).catch(()=>{}),Q(t),J(b.current,void 0),A.current=null,j.current=null,k(null),g(null),ne.current?.(void 0);return}try{let r=await _.writePromptDraftContent(n,t,e);if(r.deleted){Q(t),J(b.current,void 0),k(null),g(null),ne.current?.(void 0);return}r.draft&&(g(r.draft),x.current=r.draft.hasFiles),Z(t,e)}catch(e){if(mt(e)){Q(t),J(b.current,void 0),k(null),g(null),ne.current?.(void 0);return}throw e}},[k]),M=(0,I.useCallback)(e=>{if(A.current&&j.current===e)return A.current.configure(ie),A.current;let t=new he({resourceKey:`prompt-draft:${O.current.projectId}:${e}`,initialValue:X(e)??``,save:ie,debounceMs:ft});return t.subscribe(e=>y(e)),A.current=t,j.current=e,t},[ie]),ae=(0,I.useCallback)(async()=>{let e=ee.current;if(e)return e;if(w.current)return w.current;let t=O.current.projectId,n=(async()=>{let e=await _.createPromptDraft(t,{gezelId:O.current.gezelId,sessionId:re.current??null,content:te.current(),...O.current.taskRef?{taskRef:O.current.taskRef}:{},...O.current.craftbookRef?{craftbookRef:O.current.craftbookRef}:{},...O.current.scope?{scope:O.current.scope}:{}});if(T.current)throw await _.deletePromptDraft(t,e.id).catch(()=>{}),Error(`draft discarded while it was being created`);S.current=re.current===void 0,x.current=e.hasFiles,J(b.current,e.id),k(e.id),g(e),ne.current?.(e.id),Z(e.id,e.content);let n=M(e.id),r=te.current();return r!==e.content&&(Z(e.id,r),n.update(r)),e.id})();w.current=n;try{return await n}finally{w.current===n&&(w.current=null)}},[M,k]),oe=(0,I.useCallback)(e=>{let t=ee.current;if(t){let n=M(t);Z(t,e),n.update(e);return}e.trim()&&(T.current=!1,ae().catch(()=>{}))},[ae,M]),se=(0,I.useCallback)(async()=>{w.current&&await w.current.catch(()=>{});let e=ee.current;!e||j.current!==e||await A.current?.flush().catch(()=>{})},[]),ce=(0,I.useCallback)(()=>{let e=ee.current;e&&(A.current=null,j.current=null,Q(e),J(b.current,void 0),x.current=!1,C.current=!1,k(null),g(null),y({phase:`idle`,dirty:!1,error:null}),ne.current?.(void 0))},[k]),le=(0,I.useCallback)(async()=>{T.current=!0,w.current&&await w.current.catch(()=>{});let e=ee.current;A.current=null,j.current=null,x.current=!1,C.current=!1,k(null),g(null),y({phase:`idle`,dirty:!1,error:null}),ne.current?.(void 0),e&&(Q(e),J(b.current,void 0),await _.deletePromptDraft(O.current.projectId,e).catch(()=>{}))},[k]),ue=(0,I.useCallback)(()=>{x.current=!0},[]),de=(0,I.useCallback)(async()=>{await A.current?.retry().catch(()=>{})},[]),fe=(0,I.useCallback)(async(e,t)=>{let n=X(e);n!==void 0&&!te.current().trim()&&n!==te.current()&&D.current(n,{id:e});try{let n=await _.getPromptDraft(O.current.projectId,e);if(E.current!==t)return;x.current=n.hasFiles,C.current=n.sessionId===null,Z(e,n.content),g(n);let r=M(e);if(r.getSnapshot().dirty)return;let i=r.hydrate(n.content);i!==te.current()&&D.current(i,n)}catch(n){if(E.current!==t)return;mt(n)&&(Q(e),J(b.current,void 0),k(null),g(null),ne.current?.(void 0))}},[M,k]),pe=(0,I.useRef)(f),me=(0,I.useRef)(t.gezelId),ge=(0,I.useRef)(t.projectId),_e=(0,I.useRef)(n),N=(0,I.useRef)(r),P=(0,I.useRef)(!1);(0,I.useEffect)(()=>{let e=pe.current,i=me.current!==t.gezelId,a=ge.current!==t.projectId,o=_e.current===void 0&&n!==void 0,s=N.current!==r,c=!P.current,l=!c&&N.current!==void 0&&r===void 0;b.current=f,pe.current=f,me.current=t.gezelId,ge.current=t.projectId,_e.current=n,N.current=r,P.current=!0;let u=ee.current;if(!c&&u&&i&&!a&&!s){J(e,void 0),J(f,u),_.patchPromptDraft(t.projectId,u,{gezelId:t.gezelId,sessionId:n??null}).then(e=>g(e)).catch(()=>{});return}if(!c&&u&&o&&S.current&&!C.current&&!s){S.current=!1,J(e,void 0),J(f,u),_.patchPromptDraft(t.projectId,u,{sessionId:n??null}).then(e=>g(e)).catch(()=>{});return}if(!c&&!s&&e===f)return;l&&J(f,void 0);let d=r??lt(f);if(d&&d===u){J(f,d);return}let p=++E.current;if(A.current=null,j.current=null,T.current=!1,S.current=n===void 0,y({phase:`idle`,dirty:!1,error:null}),d){J(f,d),k(d),fe(d,p);return}let m=u?``:te.current();k(null),g(null),x.current=!1,C.current=!1,!c&&!m.trim()&&D.current(``,{id:``}),n!==void 0&&(async()=>{try{let{drafts:e}=await _.listPromptDrafts(t.projectId,{gezelId:t.gezelId,sessionId:n,status:`draft`});if(E.current!==p)return;let r=e[0];if(!r)return;J(f,r.id),k(r.id),await fe(r.id,p)}catch{}})()},[f,r]),(0,I.useEffect)(()=>{let e=()=>{A.current?.flush().catch(()=>{})},t=()=>{document.visibilityState===`hidden`&&e()};return window.addEventListener(`pagehide`,e),document.addEventListener(`visibilitychange`,t),()=>{window.removeEventListener(`pagehide`,e),document.removeEventListener(`visibilitychange`,t),e()}},[]);let ve=(0,I.useMemo)(()=>({...v,retry:de}),[v,de]);return{draftId:p,meta:h,isFreshThread:C.current||h?.sessionId===null&&n===void 0,autosave:ve,update:oe,ensureDraft:ae,flush:se,markSent:ce,discard:le,noteFileAdded:ue}}function mt(e){let t=e instanceof Error?e.message:String(e);return/\b404\b/.test(t)||/not found/i.test(t)}function ht(){return(0,L.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,L.jsx)(`path`,{d:`M5 6.4 8 3.4l3 3M11 9.6l-3 3-3-3`,stroke:`currentColor`,strokeWidth:`1.4`,strokeLinecap:`round`,strokeLinejoin:`round`})})}function gt(){return(0,L.jsx)(`svg`,{width:`16`,height:`16`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,children:(0,L.jsx)(`path`,{d:`M5 3.4l3 3 3-3M11 12.6l-3-3-3 3`,stroke:`currentColor`,strokeWidth:`1.4`,strokeLinecap:`round`,strokeLinejoin:`round`})})}var _t={showFilesWhenNotEmpty:!0};function vt({projectId:e,disabled:t,onAppendTranscript:n,onError:r}){let{replaceAll:i}=T();return(0,L.jsx)(ze,{projectId:e,disabled:t,onTranscript:(0,I.useCallback)(e=>{let t=n(e);t!==null&&i(t)},[n,i]),onError:r})}function yt({gezelId:e,gezelName:t,gezelRoleBasedName:n,gezelRole:i,gezelIcon:o,gezelPoppetje:s,gezelIconOverride:l,focusRequestKey:d,recipientGezels:f,onPrimaryRecipientChange:m,projectId:h,sessionId:v,onSessionCreated:y,onToolActivity:b,recentReferences:x=[],onOpenReference:S,craftbookRef:C,onTurnStateChange:w,placeholder:T,taskRef:E,stepId:D,belowAddressLine:ne,addressLineTrailing:re,onPivotToMention:k,passiveCcGezelIds:A,onPassiveCcConsumed:ie,onTerminalEscape:M,draftScope:ae,draftId:oe,onDraftIdChange:se}){let le=(0,I.useRef)(null);(0,I.useEffect)(()=>{if(!d)return;let e=window.requestAnimationFrame(()=>{le.current?.querySelector(`.squisq-wysiwyg-editor`)?.focus({preventScroll:!0})});return()=>window.cancelAnimationFrame(e)},[d]);let ue=ce(),de=O(),fe=c({name:t,roleBasedName:n},de),[pe,me]=(0,I.useState)(!1),[he,ge]=(0,I.useState)(!1),[_e,P]=(0,I.useState)(!1),[ve,F]=(0,I.useState)(null),ye=(0,I.useRef)(!1),[R,Se]=(0,I.useState)(!1),[Ce,we]=(0,I.useState)(null),[z,Ee]=(0,I.useState)(null),De=(0,I.useMemo)(()=>({...ae?{scope:ae}:{},projectId:h,gezelId:e,...E?{taskRef:E}:{},...C?{craftbookRef:C}:{}}),[C,ae,e,h,E]),B=(0,I.useRef)((()=>{let e=ct({...De,sessionId:v??null}),t=oe??lt(e);return(t?X(t):void 0)??``})()),Oe=(0,I.useRef)(0),ke=(0,I.useRef)(()=>{}),Ae=(0,I.useRef)(async()=>{}),je=(0,I.useRef)(async()=>``),Me=(0,I.useRef)(()=>{}),Ne=(0,I.useRef)(!1),V=(0,I.useRef)(B.current.length),[Pe,Fe]=(0,I.useState)(()=>B.current.trim().length>0),[Ie,Le]=(0,I.useState)(()=>Qe(B.current)),[Re,ze]=(0,I.useState)(0),Be=(0,I.useCallback)(()=>{let e=be(h);if(!e)return;let t=B.current.trim(),n=t?`${t}\n\n${e}`:e;B.current=n,ke.current(n),Oe.current+=1,V.current=n.length,Fe(n.trim().length>0),Le(Qe(n)),ze(e=>e+1)},[h]);(0,I.useEffect)(()=>{Be();let e=e=>{e.detail?.projectId===h&&Be()};return window.addEventListener(xe,e),()=>window.removeEventListener(xe,e)},[Be,h]);let[Ve,He]=(0,I.useState)(()=>p(B.current)),H=pt({address:De,sessionId:v,draftId:oe,onDraftIdChange:se,getText:()=>B.current,onLoaded:e=>{B.current=e,V.current=e.length,Oe.current+=1,Fe(e.trim().length>0),Le(Qe(e)),He(p(e)),ze(e=>e+1)}}),U=(0,I.useRef)(H.draftId);U.current=H.draftId,ke.current=H.update,Ae.current=H.discard,je.current=H.ensureDraft,Me.current=H.noteFileAdded,Ne.current=H.isFreshThread;let[Ue,We]=(0,I.useState)([]);(0,I.useEffect)(()=>{We([])},[e,h]);let Ke=(0,I.useMemo)(()=>{let e=new Map((f??[]).map(e=>[e.id,e]));return Ue.flatMap(t=>{let n=e.get(t);return n?[n]:[]})},[Ue,f]),[qe,Je]=(0,I.useState)(`proactive`);(0,I.useEffect)(()=>{_.getConfig().then(e=>Je(e.aiEngagementMode??`proactive`)).catch(()=>{});let e=e=>{let t=e.detail;t?.aiEngagementMode&&Je(t.aiEngagementMode)};return window.addEventListener(`gezel:config-updated`,e),()=>window.removeEventListener(`gezel:config-updated`,e)},[]);let Ye=qe===`off`,W=(0,I.useRef)(null),Xe=(0,I.useRef)(0),G=(0,I.useRef)(v??null),[tt,nt]=(0,I.useState)(v??null);(0,I.useEffect)(()=>{G.current=v??null,nt(v??null)},[v]);let rt=(0,I.useCallback)(async()=>{let t=await _.createChatSession({gezelId:e,projectId:h,...E?{taskRef:E}:{},...D?{stepId:D}:{},...C?{craftbookRef:C}:{}});return G.current=t.id,nt(t.id),y?.(t.id),t.id},[e,h,E,D,C,y]),at=(0,I.useCallback)(async()=>{if(G.current)return G.current;if(Ne.current)return rt();try{if(E){let t=a(E);if(t){let n=(await _.listTaskSessions(t.projectId,t.num)).sessions.find(t=>!t.archived&&t.gezelId===e);if(n)return G.current=n.id,nt(n.id),y?.(n.id),n.id}}else{let t=(await _.listChatSessions({gezelId:e,projectId:h})).sessions.find(e=>!e.archived&&!e.taskRef);if(t)return G.current=t.id,nt(t.id),y?.(t.id),t.id}}catch{}return rt()},[e,h,E,rt,y]),ot=(0,I.useMemo)(()=>Ze({projectId:h,getDraftId:()=>U.current,ensureDraftId:async()=>{let e=await je.current();return Me.current(),e}}),[h]);(0,I.useEffect)(()=>()=>{W.current?.controller.abort(),W.current=null,ot.dispose()},[ot]);let K=(0,I.useCallback)((e,t={})=>{let n=W.current;!n||n.id!==e||(W.current=null,t.abort&&n.controller.abort(),me(!1),we(null),t.serverIdle&&P(!1))},[]),q=(0,I.useCallback)(async(e,t)=>{let n=W.current,r=n?.sessionId===e&&n.accepted?n.id:null,i=await _.getChatSessionInflight(e);if(t&&!t()||G.current!==e||r!==null&&W.current?.id!==r)return;let a=i.inflight!==null;P(a),!a&&r!==null&&K(r,{abort:!0,serverIdle:!0})},[K]);(0,I.useEffect)(()=>{if(!tt){P(!1);return}let e=!1,t=async()=>{try{e||await q(tt,()=>!e)}catch{}};t();let n=window.setInterval(()=>void t(),2e3);return()=>{e=!0,window.clearInterval(n)}},[tt,q]);let st=pe||_e,J=(0,I.useRef)(st);J.current=st;let ut=(0,I.useCallback)(async e=>{try{return(await _.listMentionCandidates({projectId:h,query:e})).candidates.map(e=>({id:e.id,label:de&&e.roleBasedName?e.roleBasedName:e.label,scheme:`gezel`,...e.description?{description:e.description}:{},...e.group?{group:e.group}:{}}))}catch{return[]}},[h,de]);(0,I.useEffect)(()=>{w?.(ve?`error`:Ce===null?st?`streaming`:`idle`:`queued`,ve??void 0)},[st,Ce,ve,w]);let dt=(0,I.useCallback)(e=>{let t=V.current;V.current=e.length;let n=B.current!==e;if(B.current=e,ke.current(e),n&&(Oe.current+=1),Fe(e.trim().length>0),Le(Qe(e)),M&&t<=2){let t=e.trimStart().match(/^>\s+([^\n]*)/);if(t){Ae.current(),M((t[1]??``).trim());return}}let r=p(e);He(e=>bt(e,r)?e:r)},[M]),Y=(0,I.useCallback)(e=>{let t=e.trim();if(!t)return null;let n=B.current,r=`${n}${n&&!/\s$/.test(n)?` `:``}${t}`;B.current=r,ke.current(r),Oe.current+=1,V.current=r.length,Fe(!0),Le(Qe(r));let i=p(r);return He(e=>bt(e,i)?e:i),r},[]),Z=(0,I.useCallback)(()=>{if(ye.current)return null;let e=B.current;return e.trim()?(ye.current=!0,Se(!0),{source:e,editVersion:Oe.current}):null},[]),Q=(0,I.useCallback)(()=>{ye.current=!1,Se(!1)},[]),ft=(0,I.useCallback)(e=>{Oe.current!==e.editVersion||B.current!==e.source||(B.current=``,V.current=0,Fe(!1),Le(null),ze(e=>e+1),He([]))},[]),mt=(0,I.useMemo)(()=>Ie===null?[]:$e(Ie,x),[Ie,x]),yt=(0,I.useCallback)(async e=>{let t=Z();if(!t)return;let n=Qe(t.source),r=e??(n===null?null:et(n,x));if(!r){F(n?`No recent file matches “${n}”. Choose a suggestion or use workspace or artifacts.`:`Choose workspace, artifacts, or a recent file.`),Q();return}F(null);try{if(r.type===`folder`)await _.revealProject(h,r.folder);else if(S)S(r.reference);else throw Error(`Recent file opening is unavailable in this chat.`);Ae.current(),ft(t)}catch(e){F(`Open failed: ${e instanceof Error?e.message:String(e)}`)}finally{Q()}},[Z,ft,Q,S,h,x]),St=(0,I.useRef)(null);(0,I.useEffect)(()=>{if(!k){St.current=null;return}let t=Ve.find(t=>t.id!==e&&(!t.projectId||t.projectId===h));if(!t){St.current=null;return}St.current!==t.id&&(St.current=t.id,k(t.id))},[Ve,e,h,k]);let wt=(0,I.useCallback)(async()=>{if(Qe(B.current)!==null){await yt();return}if(!e||st||Ye)return;let t=Z();if(!t)return;let n=t.source.trim();F(null),we(null);let i;try{await H.flush(),i=await H.ensureDraft()??void 0}catch{i=void 0}let a;try{a=await at()}catch(e){F(Ct(e.message)),Q();return}let o=++Xe.current,s=new AbortController;W.current={id:o,sessionId:a,controller:s,accepted:!1};let c=(async()=>{let e=0,t=0;for(;;){let n=0;try{for await(let e of g({url:_.sessionEventsUrl(a),headers:_.authHeader(),signal:s.signal,fetch:_.getFetch(),keepaliveTimeoutMs:1e4})){if(W.current?.id!==o)return;if(e.type===`tool`){if(n+=1,n<=t)continue;t=n;let r={name:e.name,durationMs:e.durationMs,success:e.success,...e.errorMessage?{errorMessage:e.errorMessage}:{},...e.path?{path:e.path}:{},...e.paths&&e.paths.length>0?{paths:e.paths}:{},...e.argsSummary?{argsSummary:e.argsSummary}:{},...e.argsFull?{argsFull:e.argsFull}:{},...e.resultText?{resultText:e.resultText}:{},...e.resultTruncated?{resultTruncated:!0}:{},...e.diff===void 0?{}:{diff:e.diff},...e.addedLines===void 0?{}:{addedLines:e.addedLines},...e.removedLines===void 0?{}:{removedLines:e.removedLines},...e.card?{card:e.card}:{},projectId:h};b?.(r)}else if(e.type===`error`)F($(e.error)),we(null);else if(e.type===`done`){K(o,{serverIdle:!0});return}else e.type===`queued`?we(e.aheadOf):e.type===`delta`&&we(null)}return}catch(t){if(t.name===`AbortError`){K(o);return}if(W.current?.id!==o)return;if(e+=1,e>5){console.warn(`[ChatComposer] chat event stream lost, giving up:`,t),F(Ct(t.message)),K(o);return}let n=Math.min(500*2**(e-1),5e3);if(console.warn(`[ChatComposer] chat event stream lost (reconnect ${e}/5 in ${n}ms):`,t),await new Promise(e=>setTimeout(e,n)),s.signal.aborted||W.current?.id!==o)return}}})();try{let s=[...new Set([...r(n),...Ue])].filter(t=>t!==e),c=(A??[]).filter(t=>t&&t!==e),l={message:n};s.length>0&&(l.mentions=s),c.length>0&&(l.passiveCcGezelIds=c),i&&(l.draftId=i),await _.sendToChatSession(a,l);let d=W.current;d?.id===o&&(d.accepted=!0,me(!0),q(a).catch(()=>{})),i&&H.markSent(),ft(t),it({sessionId:a,gezelId:e,projectId:h,content:i?u(n,i):n,at:new Date().toISOString()}),c.length>0&&ie?.()}catch(e){s.abort(),K(o);let t=e.message??String(e);if(/already in flight/i.test(t))try{let{inflight:e}=await _.getChatSessionInflight(a);e?(Ee({userText:e.userText,elapsedMs:e.elapsedMs,sessionId:a}),F(null)):F($(t))}catch{F($(t))}else F(Ct(t))}finally{Q()}await c},[e,h,st,Ye,Z,ft,at,Q,K,q,b,Ue,A,ie,yt,H]),Tt=(0,I.useCallback)(async()=>{if(z){try{await _.cancelChatSessionTurn(z.sessionId)}catch(e){F(`Cancel failed: ${e.message}`);return}Ee(null),F(null)}},[z]),Et=(0,I.useCallback)(async()=>{let e=G.current,t=W.current;if(t?(t.controller.abort(),K(t.id)):(me(!1),we(null)),!e){P(!1);return}try{await _.cancelChatSessionTurn(e),P(!1),F(null)}catch(e){F(`Cancel failed: ${e.message}`)}},[K]);(0,I.useEffect)(()=>{let e=e=>{!J.current||ye.current||e.key!==`Escape`||e.defaultPrevented||(e.preventDefault(),Et())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Et]);let Dt=(0,I.useCallback)(async()=>{let t=G.current;if(!e||!t||Ye)return;let n=Z();if(!n)return;let r=n.source.trim();F(null);let i;try{await H.flush(),i=await H.ensureDraft()??void 0}catch{i=void 0}try{await _.sendToChatSession(t,{message:r,nudge:!0,...i?{draftId:i}:{}}),i&&H.markSent(),ft(n)}catch(e){F($(e.message??String(e)))}finally{Q()}},[e,Ye,Z,ft,Q,H]),Ot=(0,I.useCallback)(async()=>{let t=G.current;if(!e||!t||Ye)return;let n=Z();if(!n)return;let r=n.source.trim();F(null),P(!0);let i;try{await H.flush(),i=await H.ensureDraft()??void 0}catch{i=void 0}try{await _.interruptChatSession(t,{message:r,...i?{draftId:i}:{}}),i&&H.markSent(),ft(n),q(t).catch(()=>{})}catch(e){F($(e.message??String(e)))}finally{Q()}},[e,Ye,Z,ft,Q,q,H]),kt=(0,I.useRef)(()=>{});return kt.current=R?()=>{}:Ie===null?st?()=>void Dt():()=>void wt():()=>void yt(),(0,L.jsxs)(`div`,{ref:le,className:`chat-composer`,"data-testid":`chat-composer`,"data-composer-expanded":he?`true`:void 0,children:[Ye&&(0,L.jsxs)(`div`,{className:`chat-composer-disabled-banner`,role:`alert`,children:[(0,L.jsx)(`span`,{children:`AI disabled in Settings → General. Chat is paused.`}),(0,L.jsx)(`button`,{type:`button`,onClick:()=>window.dispatchEvent(new CustomEvent(`gezel:navigate`,{detail:{view:`settings`}})),children:`Open Settings`})]}),z&&(0,L.jsxs)(`div`,{className:`chat-composer-wedged`,children:[(0,L.jsxs)(`div`,{className:`chat-composer-wedged-head`,children:[(0,L.jsx)(`strong`,{children:`Previous turn still running`}),(0,L.jsxs)(`span`,{className:`muted`,children:[` · `,xt(z.elapsedMs)]})]}),(0,L.jsx)(`div`,{className:`chat-composer-wedged-preview`,children:z.userText.length>180?`${z.userText.slice(0,177)}…`:z.userText}),(0,L.jsxs)(`div`,{className:`chat-composer-wedged-actions`,children:[(0,L.jsx)(`button`,{type:`button`,onClick:()=>void Tt(),children:`Cancel stuck turn`}),(0,L.jsx)(`button`,{type:`button`,className:`subtle`,onClick:()=>Ee(null),children:`Dismiss`})]})]}),ve&&(0,L.jsxs)(`div`,{className:`chat-composer-error`,role:`alert`,children:[(0,L.jsx)(`span`,{className:`chat-composer-error-mark`,"aria-hidden":`true`,children:`✗`}),(0,L.jsx)(`span`,{className:`chat-composer-error-text`,children:ve})]}),(0,L.jsxs)(`div`,{className:`chat-composer-to`,children:[(0,L.jsx)(`span`,{className:`chat-composer-to-label muted`,children:`To:`}),(0,L.jsx)(j,{svg:o??null,poppetje:s,iconOverride:l,name:fe,size:18}),(0,L.jsxs)(`span`,{className:`chat-composer-to-text`,children:[(0,L.jsx)(`span`,{className:`chat-composer-to-name`,children:fe}),!de&&i&&(0,L.jsx)(`span`,{className:`chat-composer-to-role`,children:i})]}),Ke.map(e=>{let t=c({name:e.name,roleBasedName:e.roleBasedName},de);return(0,L.jsxs)(`span`,{className:`chat-composer-to-recipient`,children:[(0,L.jsx)(j,{svg:e.icon??null,poppetje:e.poppetje,iconOverride:e.iconOverride,name:t,size:18}),(0,L.jsxs)(`span`,{className:`chat-composer-to-text`,children:[(0,L.jsx)(`span`,{className:`chat-composer-to-name`,children:t}),!de&&e.role&&(0,L.jsx)(`span`,{className:`chat-composer-to-role`,children:e.role})]}),(0,L.jsx)(`button`,{type:`button`,className:`chat-composer-recipient-remove`,"aria-label":`Remove ${t} from recipients`,title:`Remove ${t}`,onClick:()=>We(t=>t.filter(t=>t!==e.id)),children:`×`})]},e.id)}),Ve.filter(t=>(t.id!==e||t.projectId!==void 0)&&!Ue.includes(t.id)).map(e=>(0,L.jsxs)(`span`,{className:`chat-composer-to-mention`,title:e.projectId?`@${e.label} re: ${e.projectId}`:`@${e.label}`,children:[`@`,e.label]},e.rawId)),f&&m&&f.length>0&&(0,L.jsx)(Ge,{gezels:f,primaryGezelId:e,additionalRecipientIds:Ue,roleBasedNameOnlyMode:de,onSelectPrimary:e=>{We([]),m(e)},onAddRecipient:t=>We(n=>t===e||n.includes(t)?n:[...n,t])}),(0,L.jsx)(`button`,{type:`button`,className:`chat-composer-expand-btn`,"data-testid":`chat-composer-expand`,onClick:()=>ge(e=>!e),"aria-pressed":he,"aria-label":he?`Collapse the draft`:`Expand the draft`,title:he?`Collapse the draft back to a few lines`:`Expand the draft to fill the chat window`,children:he?(0,L.jsx)(gt,{}):(0,L.jsx)(ht,{})}),re]}),ne,(0,L.jsxs)(`div`,{className:`chat-editor-wrap`,children:[Ie!==null&&(0,L.jsxs)(`div`,{className:`chat-open-command-menu`,role:`menu`,"aria-label":`Open targets`,children:[(0,L.jsxs)(`div`,{className:`chat-open-command-heading`,children:[(0,L.jsx)(`code`,{children:`/open`}),(0,L.jsx)(`span`,{children:`Project folders and recent chat files`})]}),mt.length>0?(0,L.jsx)(`div`,{className:`chat-open-command-items`,children:mt.map(e=>(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`chat-open-command-item`,"aria-label":e.target.type===`folder`?`Open ${e.target.folder} folder`:`Open ${e.label}`,onMouseDown:e=>e.preventDefault(),onClick:()=>void yt(e.target),children:[(0,L.jsx)(`code`,{children:e.label}),(0,L.jsx)(`span`,{children:e.description})]},e.key))}):(0,L.jsx)(`p`,{className:`chat-open-command-empty`,children:`No matching recent files.`})]}),(0,L.jsx)(te,{initialMarkdown:B.current,hostMode:`chat`,mediaProvider:ot,mentionProvider:ut,...T?{placeholder:T}:{},imageDisplayMode:`thumbnail`,onChange:dt,submitOnEnter:()=>kt.current(),minHeight:he?`100%`:`120px`,maxHeight:he?`100%`:`50vh`,colorScheme:ue,uxFont:`var(--font-ui)`,showPlayTab:!1,showStatusBar:!1,showFilesToggle:!0,..._t,fullWidth:!0,thinMargins:!0,toolbarSlotAfterActions:(0,L.jsx)(Te,{mediaProvider:ot,onError:F}),toolbarSlotRight:(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(N,{autosave:H.autosave,failuresOnly:!0}),(0,L.jsx)(vt,{projectId:h,disabled:!e||Ye||R,onAppendTranscript:Y,onError:F}),Ie===null?st?(0,L.jsxs)(L.Fragment,{children:[Pe&&!Ye&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`button`,{type:`button`,className:`chat-send-btn chat-nudge-btn`,"data-testid":`chat-nudge`,onClick:()=>void Dt(),disabled:R,title:`Queue for after this turn (Enter)`,children:`Nudge`}),(0,L.jsx)(`button`,{type:`button`,className:`chat-interrupt-btn`,"data-testid":`chat-interrupt`,onClick:()=>void Ot(),disabled:R,title:`Stop this turn and send now`,children:`Interrupt`})]}),(0,L.jsx)(`button`,{type:`button`,className:`chat-stop-btn`,onClick:()=>void Et(),disabled:R,title:`Stop generating (Escape)`,children:`■ Stop`})]}):(0,L.jsx)(`button`,{type:`button`,className:`chat-send-btn chat-send-btn-icon`,"data-testid":`chat-send`,onClick:wt,disabled:!e||Ye||R,"aria-label":R?`Sending…`:`Send`,"aria-busy":R,title:Ye?`AI is disabled in Settings → General`:`Enter to send, Shift+Enter for newline`,children:(0,L.jsx)(ee,{})}):(0,L.jsx)(`button`,{type:`button`,className:`chat-send-btn`,"data-testid":`chat-open`,onClick:()=>void yt(),disabled:R,title:`Open this folder or recent file (Enter)`,children:R?`Opening…`:`Open`})]})},`${Re}:${e}:${T??``}`)]})]})}function bt(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++){let r=e[n],i=t[n];if(!r||!i||r.rawId!==i.rawId||r.label!==i.label)return!1}return!0}function xt(e){let t=Math.floor(e/1e3);return t<60?`${t}s elapsed`:`${Math.floor(t/60)}m ${t%60}s elapsed`}function St(e){let t=/"error"\s*:\s*"model_not_loaded"/.test(e)||/model_not_loaded/.test(e),n=/is not available locally for provider/i.test(e),r=/"error"\s*:\s*"model_not_found"/.test(e);if(!t&&!n&&!r)return;let i=/"model"\s*:\s*"([^"]+)"/.exec(e)?.[1],a=/Model\s+"([^"]+)"/i.exec(e)?.[1],o=i??a??``,s=o.indexOf(`:`);return s===-1?o:o.slice(s+1)}function $(e){if(!e)return e;let t=St(e);return t===void 0?/Timeout\s+after\s+\d+ms\s+waiting\s+for\s+session\.idle/i.test(e)?`Copilot stalled without streaming a reply — this usually means the SDK lost its connection. Your message is saved; try Send again, or pick a different model in Settings → Defaults.`:/timed out after \d+s/i.test(e)?`The model didn't respond in time. Your message is saved — try Send again.`:e:`The model ${t?`"${t}" `:``}isn't available on this device — it may never have finished downloading. Pick a model that is installed, or download this one, in Settings → Artificial Intelligence.`}function Ct(e){return/network\s?error/i.test(e)||/failed to fetch/i.test(e)||/load failed/i.test(e)||/transport unavailable/i.test(e)||/SSE stream (stale|failed)/i.test(e)||/ended before a terminal event/i.test(e)?`Lost the connection to the gezel service and could not reconnect. Your message is saved — if no reply appears, check that the service is running and try Send again.`:$(e)}function wt(e){let t=Et(e);return t===``?`/`:t.startsWith(`/`)||/^[A-Za-z]:[\\/]/.test(t)?t:`/${t}`}var Tt=/\x1b\[[0-9;?]*[ -/]*[@-~]|\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)|\x1b[@-_]|\uFFFD\[[0-9;?]*[ -/]*[@-~]/g;function Et(e){let t=``;for(let n of e.replace(Tt,``)){let e=n.charCodeAt(0);e>=32&&e!==127&&(t+=n)}return t.trim()}function Dt(e){return e.replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/@\[([^\]]+)\]\([^)]+\)/g,`@$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/\*\*([^*]+)\*\*/g,`$1`).replace(/__([^_]+)__/g,`$1`).replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,`$1`).replace(/(?<!_)_([^_]+)_(?!_)/g,`$1`).replace(/~~([^~]+)~~/g,`$1`).replace(/`+([^`]+)`+/g,`$1`).replace(/^\s*#+\s+/gm,``).replace(/^\s*>\s+/gm,``).replace(/^\s*[-*+]\s+/gm,``).replace(/^\s*\d+\.\s+/gm,``).replace(/\s+/g,` `).trim()}function Ot({payload:e,gezels:t}){let{userMsg:n,assistantInfo:r}=e,a=r.kind===`live`,o=a?r.slot:null,s=ue(a?o?.startedAt??null:null),l=a?r.sessionId:r.msg.gezelId,u=t.get(a?o?.gezelId??``:r.msg.gezelId),d=O(),p=u?c({name:u.name,roleBasedName:u.roleBasedName},d):`Gezel`,h=n.origin===`system`?i(n.content):null,g=h?f(h,p):Dt(n.content);return(0,L.jsxs)(`div`,{className:`chat-sticky-header`,"aria-live":`polite`,children:[(0,L.jsxs)(`div`,{className:`chat-sticky-header-user`,title:n.content,children:[(0,L.jsx)(`span`,{className:`chat-sticky-header-author`,children:h?m(h).toUpperCase():n.origin===`system`?`SYSTEM`:`YOU`}),(0,L.jsx)(`span`,{className:`chat-sticky-header-preview`,children:g})]}),(0,L.jsxs)(`div`,{className:`chat-sticky-header-assistant`,children:[(0,L.jsx)(j,{svg:u?.icon??null,poppetje:u?.poppetje,iconOverride:u?.iconOverride,name:p,size:18}),(0,L.jsx)(`span`,{className:`chat-sticky-header-author`,children:p}),!d&&u?.role&&(0,L.jsx)(A,{role:u.role}),a&&o&&(0,L.jsx)(ie,{failed:!!o.error,queued:o.queueAhead!==void 0&&me(o.queuedAt,Date.now())&&!M(o.segments),queueAhead:o.queueAhead,elapsedSeconds:s,toolCount:fe(o.segments),wirePulseCount:o.wirePulseCount,...oe(o)?{thinkingLabel:oe(o)}:{},...o.thinkingProgress===void 0?{}:{thinkingProgress:o.thinkingProgress},...o.thinkingDetail?{thinkingDetail:o.thinkingDetail}:{},...o.awaitingGezelName?{awaitingGezelName:o.awaitingGezelName}:{}})]},l)]})}var kt=`gezel:timeline:indexing-receipts:v1:`;function At(e){return`${kt}${e}`}function jt(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&typeof t.gezelId==`string`&&typeof t.projectId==`string`&&typeof t.startedAt==`string`&&typeof t.completedAt==`string`&&Array.isArray(t.files)&&t.files.every(e=>typeof e==`string`&&e.length>0)}function Mt(e){if(typeof window>`u`)return[];try{let t=JSON.parse(window.localStorage.getItem(At(e))??`[]`);return Array.isArray(t)?t.filter(jt).slice(-20):[]}catch{return[]}}function Nt(e,t){if(!(typeof window>`u`))try{window.localStorage.setItem(At(e),JSON.stringify(t.slice(-20)))}catch{}}function Pt(e){return/^Indexing\s+(.+)$/i.exec(e?.trim()??``)?.[1]?.trim()||null}function Ft(e,t){let n=Date.parse(t.completedAt),r=-1;for(let i=e.length-1;i>=0;i--){let a=e[i];if(a.gezelId!==t.gezelId||a.projectId!==t.projectId)continue;let o=Date.parse(a.completedAt);Number.isFinite(n)&&Number.isFinite(o)&&n-o<=3e5&&(r=i);break}if(r<0)return[...e,{id:`indexing:${t.sessionId}`,gezelId:t.gezelId,projectId:t.projectId,startedAt:t.startedAt,completedAt:t.completedAt,files:[t.path]}].slice(-20);let i=[...e],a=i[r];return a.files.includes(t.path)?e:(i[r]={...a,completedAt:t.completedAt,files:[...a.files,t.path]},i)}function It({receipt:e,gezels:t,projects:n,showProjectName:r,roleBasedNameOnlyMode:i,onOpenWorkspaceFile:a}){let[o,s]=(0,I.useState)(!1),l=t.get(e.gezelId),u=l?c({name:l.name,roleBasedName:l.roleBasedName},i):`Boekwachter`,d=r&&e.projectId!=="default"?n.get(e.projectId):void 0,f=e.files.length;return(0,L.jsxs)(`details`,{className:`timeline-indexing-receipt`,onToggle:e=>s(e.currentTarget.open),children:[(0,L.jsxs)(`summary`,{title:S(e.completedAt),children:[(0,L.jsx)(j,{svg:l?.icon??null,poppetje:l?.poppetje,iconOverride:l?.iconOverride,name:u,size:16}),(0,L.jsxs)(`span`,{className:`timeline-indexing-receipt-label`,children:[(0,L.jsx)(`strong`,{children:u}),` has indexed `,(0,L.jsx)(`strong`,{children:f}),` `,f===1?`file`:`files`,d&&(0,L.jsxs)(L.Fragment,{children:[` in `,d.name]}),` · `,x(e.completedAt)]})]}),o&&(0,L.jsx)(`ul`,{className:`timeline-indexing-file-list`,children:e.files.map(t=>(0,L.jsx)(`li`,{children:a?(0,L.jsx)(`button`,{type:`button`,className:`timeline-indexing-file-link`,title:`Open ${t}`,"aria-label":`Open ${t}`,onClick:()=>a(t,e.projectId),children:t}):(0,L.jsx)(`span`,{className:`timeline-indexing-file-path`,children:t})},t))})]})}function Lt(e){return e===`dispatching`?`Starting`:e===`night-shift`||e===`night-quota`?`Scheduled`:e===`engagement-off`||e===`engagement-paused`?`On hold`:`In the queue`}function Rt(e,t){switch(e){case`dispatching`:return`${t} is picking it up now.`;case`provider-busy`:return`Waiting for a free slot — other work is using the model right now.`;case`night-shift`:return`Parked for Night Shift — it starts when tonight's window opens.`;case`night-quota`:return`Held back by the cloud quota reserve — it starts once the quota frees up.`;case`engagement-off`:return`Held because AI engagement is off. Turn it back on in Settings to let it start.`;case`engagement-paused`:return`Held because AI work is paused. Resume to let it start.`;default:return`Waiting its turn — it starts as soon as ${t} is free.`}}function zt({task:e,wait:t,gezel:n,onTaskReference:r}){let i=O(),a=n?c({name:n.name,roleBasedName:n.roleBasedName},i):`the assigned gezel`,o=x(t.since,{style:`long`,fallback:t.since});return(0,L.jsx)(`div`,{className:`msg msg-user msg-system msg-queued-task`,"data-task-ref":e.ref,children:(0,L.jsxs)(`div`,{className:`msg-queued-task-card`,children:[(0,L.jsxs)(`div`,{className:`msg-queued-task-head`,children:[(0,L.jsx)(de,{area:`tasks`,size:12,className:`msg-queued-task-icon`}),(0,L.jsx)(`span`,{className:`msg-queued-task-kind`,children:Lt(t.reason)}),(0,L.jsxs)(`span`,{className:`msg-role-time`,title:S(t.since),children:[`· `,o]})]}),(0,L.jsxs)(`p`,{className:`msg-queued-task-headline`,children:[(0,L.jsxs)(`span`,{className:`msg-queued-task-number`,children:[`#`,e.num]}),` `,e.title]}),(0,L.jsxs)(`p`,{className:`msg-queued-task-context`,children:[n&&(0,L.jsx)(j,{svg:n.icon??null,poppetje:n.poppetje,iconOverride:n.iconOverride,name:a,size:14}),Rt(t.reason,a)]}),(0,L.jsx)(`div`,{className:`msg-queued-task-actions`,children:r?(0,L.jsxs)(`button`,{type:`button`,className:`msg-ref-chip`,onClick:()=>r(e.ref),title:`Open this task`,children:[`Task `,e.ref]}):(0,L.jsxs)(`span`,{className:`msg-queued-task-ref`,children:[`Task `,e.ref]})})]})})}var Bt=[`black`,`red`,`green`,`yellow`,`blue`,`magenta`,`cyan`,`white`,`bright-black`,`bright-red`,`bright-green`,`bright-yellow`,`bright-blue`,`bright-magenta`,`bright-cyan`,`bright-white`];function Vt(){return{fg:null,bg:null,bold:!1,dim:!1,italic:!1,underline:!1,reverse:!1,hidden:!1}}function Ht(e){let t=[],n=e.reverse?e.bg:e.fg,r=e.reverse?e.fg:e.bg;return n!==null&&t.push(`ansi-fg-${Bt[n]}`),r!==null&&t.push(`ansi-bg-${Bt[r]}`),e.bold&&t.push(`ansi-bold`),e.dim&&t.push(`ansi-dim`),e.italic&&t.push(`ansi-italic`),e.underline&&t.push(`ansi-underline`),e.reverse&&t.push(`ansi-reverse`),e.hidden&&t.push(`ansi-hidden`),t.join(` `)}function Ut(e,t){if(t+1>=e.length)return null;let n=e[t+1];if(n===`[`){let n=t+2;for(;n<e.length;){let t=e.charCodeAt(n);if(t>=48&&t<=63)n++;else break}for(;n<e.length;){let t=e.charCodeAt(n);if(t>=32&&t<=47)n++;else break}if(n>=e.length)return null;let r=e.charCodeAt(n);if(r<64||r>126)return{end:t+1};if(e[n]===`m`){let r=e.slice(t+2,n),i=r===``?[0]:r.split(`;`).map(e=>{let t=Number.parseInt(e,10);return Number.isFinite(t)?t:0});return{end:n+1,sgrParams:i}}if(e[n]===`H`||e[n]===`f`){let r=e.slice(t+2,n).split(`;`).map(e=>Number.parseInt(e,10)),i=Number.isFinite(r[0])&&r[0]>0?r[0]:1,a=Number.isFinite(r[1])&&r[1]>0?r[1]:1;return{end:n+1,transcriptLineBreak:i>1&&a===1}}return{end:n+1}}if(n===`]`){let n=t+2;for(;n<e.length;){let t=e[n];if(t===`\x07`)return{end:n+1};if(t===`\x1B`&&n+1<e.length&&e[n+1]===`\\`)return{end:n+2};n++}return null}return{end:t+2}}function Wt(e,t){let n={...e},r=0;for(;r<t.length;){let e=t[r];e===0?(n.fg=null,n.bg=null,n.bold=!1,n.dim=!1,n.italic=!1,n.underline=!1,n.reverse=!1,n.hidden=!1):e===1?n.bold=!0:e===2?n.dim=!0:e===3?n.italic=!0:e===4?n.underline=!0:e===7?n.reverse=!0:e===8?n.hidden=!0:e===22?(n.bold=!1,n.dim=!1):e===23?n.italic=!1:e===24?n.underline=!1:e===27?n.reverse=!1:e===28?n.hidden=!1:e>=30&&e<=37?n.fg=e-30:e===38?t[r+1]===5?r+=2:t[r+1]===2&&(r+=4):e===39?n.fg=null:e>=40&&e<=47?n.bg=e-40:e===48?t[r+1]===5?r+=2:t[r+1]===2&&(r+=4):e===49?n.bg=null:e>=90&&e<=97?n.fg=e-90+8:e>=100&&e<=107&&(n.bg=e-100+8),r++}return n}function Gt(e){let t=Vt(),n=``,r=!1,i=0;return{feed(a){let o=n+a;n=``;let s=[],c=0,l=0,u=n=>{if(n<=l)return;let a=o.slice(l,n);if(a===``)return;r&&/\S/.test(a)&&(s.push(`
|
|
4
|
-
|
|
5
|
-
`),r=!1);let c=e?e(a):a,u=Ht(t);u===``?s.push(c):s.push((0,L.jsx)(`span`,{className:u,children:c},i++))};for(;c<o.length;){if(o.charCodeAt(c)!==27){c++;continue}let e=Ut(o,c);if(e===null)return u(c),n=o.slice(c),s;u(c),e.sgrParams&&(t=Wt(t,e.sgrParams)),e.transcriptLineBreak&&Kt(o,e.end)?(s.push(`
|
|
6
|
-
|
|
7
|
-
`),r=!1):e.transcriptLineBreak&&(r=!0),c=e.end,l=c}return u(o.length),s}}}function Kt(e,t){let n=t;for(;n<e.length;){if(e.charCodeAt(n)===27){let t=Ut(e,n);if(t===null)return!1;n=t.end;continue}if(!/\s/.test(e[n]))return!0;n++}return!1}function qt({text:e,renderText:t}){return(0,L.jsx)(L.Fragment,{children:(0,I.useMemo)(()=>Gt(t).feed(e),[e,t])})}var Jt={tabIndex:0};function Yt({entry:e,onOpenWorkspaceFile:t}){let n=wt(e.cwd===void 0?e.workingDir:e.cwd);if(e.msgKind===`command`)return(0,L.jsxs)(`div`,{className:`msg msg-user terminal-group terminal-group-command`,"data-terminal-message-id":e.messageId,"data-terminal-thread-id":e.threadId,children:[(0,L.jsxs)(`div`,{className:`msg-header terminal-group-header`,children:[(0,L.jsx)(`span`,{className:`terminal-folder-pill`,title:`Working folder`,children:n}),(0,L.jsx)(`span`,{className:`msg-author`,children:`You · terminal`})]}),(0,L.jsxs)(`div`,{className:`msg-body terminal-cmd-body`,children:[(0,L.jsx)(`span`,{className:`terminal-prompt-sigil`,children:`>`}),` `,(0,L.jsx)(`code`,{className:`terminal-cmd-code`,children:e.content})]}),e.resolvedFrom&&e.resolvedFrom!==e.content&&(0,L.jsxs)(`div`,{className:`terminal-resolved-hint`,children:[`from: `,e.resolvedFrom]})]});let r=e.exitCode!==void 0&&e.exitCode!==0,i=e.exitCode===void 0?null:e.exitCode===0?`exit 0`:`exit ${e.exitCode}`,a=n=>Xt(n,e.fileReferences??[],t);return(0,L.jsxs)(`div`,{className:`msg msg-assistant terminal-group terminal-group-output`,"data-terminal-message-id":e.messageId,"data-terminal-thread-id":e.threadId,children:[(0,L.jsxs)(`div`,{className:`msg-header terminal-group-header`,children:[(0,L.jsx)(`span`,{className:`terminal-folder-pill`,title:`Working folder`,children:n}),(0,L.jsx)(`span`,{className:`msg-author`,children:`Terminal output`}),i&&(0,L.jsx)(`span`,{className:`terminal-exit-pill ${r?`terminal-exit-fail`:`terminal-exit-ok`}`,children:i}),typeof e.durationMs==`number`&&(0,L.jsx)(`span`,{className:`terminal-duration`,children:Qt(e.durationMs)}),e.truncated&&(0,L.jsx)(`span`,{className:`terminal-truncated-pill`,title:`200KB output cap reached`,children:`truncated`})]}),e.errorMessage&&e.exitCode===-1&&(0,L.jsx)(`div`,{className:`terminal-error-banner`,children:e.errorMessage}),(0,L.jsx)(`section`,{className:`terminal-output-viewport`,"aria-label":`Terminal output`,...Jt,children:(0,L.jsx)(`pre`,{className:`terminal-output-body`,children:e.content?(0,L.jsx)(qt,{text:e.content,renderText:a}):r?`(no output)`:``})})]})}function Xt(e,t,n){if(!n||t.length===0||!e)return e;let r=[...t].sort((e,t)=>t.label.length-e.label.length),i=e.toLowerCase(),a=[],o=0,s=0;for(;o<e.length;){let t=null;for(let n of r){let r=n.label.toLowerCase(),a=i.indexOf(r,o);for(;a>=0&&!Zt(e,a,n.label.length);)a=i.indexOf(r,a+Math.max(1,r.length));a>=0&&(!t||a<t.at)&&(t={at:a,reference:n})}if(!t)break;t.at>o&&a.push(e.slice(o,t.at));let c=e.slice(t.at,t.at+t.reference.label.length);a.push((0,L.jsx)(`button`,{type:`button`,className:`terminal-file-link`,title:`Preview ${t.reference.path}`,onClick:()=>n(t.reference.path),children:c},`${t.reference.path}:${s++}`)),o=t.at+t.reference.label.length}return o===0?e:(o<e.length&&a.push(e.slice(o)),a)}function Zt(e,t,n){let r=t===0?``:e[t-1],i=t+n,a=i>=e.length?``:e[i];return(r===``||/[\s"'([{<]/.test(r))&&(a===``||/[\s"')\]}>:,;]/.test(a))}function Qt(e){if(e<1e3)return`${e}ms`;let t=e/1e3;if(t<60)return`${t.toFixed(1)}s`;let n=Math.floor(t/60);return`${n}m${Math.round(t-n*60).toString().padStart(2,`0`)}s`}var $t=24,en={tabIndex:0};function tn({content:e,cwd:t,startedAt:n,onCancel:r,awaitingInput:i,onSendInput:a}){let o=wt(t),s=(0,I.useRef)(null),c=(0,I.useRef)(!0);(0,I.useLayoutEffect)(()=>{let e=s.current;!e||!c.current||(e.scrollTop=e.scrollHeight)},[e]);let l=()=>{let e=s.current;if(!e)return;let t=e.scrollHeight-e.clientHeight-e.scrollTop;c.current=t<=$t};return(0,L.jsxs)(`div`,{className:`msg msg-assistant terminal-group terminal-group-output terminal-group-streaming`,children:[(0,L.jsxs)(`div`,{className:`msg-header terminal-group-header`,children:[(0,L.jsx)(`span`,{className:`terminal-folder-pill`,title:`Working folder`,children:o}),(0,L.jsx)(`span`,{className:`msg-author`,children:`Terminal output`}),(0,L.jsx)(rn,{startedAt:n}),r&&(0,L.jsx)(`button`,{type:`button`,className:`terminal-cancel-btn`,onClick:r,title:`Stop the running command (Ctrl+C)`,children:`■ Stop`})]}),(0,L.jsx)(`section`,{ref:s,className:`terminal-output-viewport`,"aria-label":`Live terminal output`,"aria-busy":`true`,...en,onScroll:l,children:(0,L.jsx)(`pre`,{className:`terminal-output-body`,children:(0,L.jsx)(qt,{text:e})})}),i&&a&&(0,L.jsx)(nn,{awaitingInput:i,onSubmit:a})]})}function nn({awaitingInput:e,onSubmit:t}){let[n,r]=(0,I.useState)(``),i=e=>{t(e),r(``)},a=e=>{e.key===`Enter`&&(e.preventDefault(),i(n))};if(e.mode===`yes-no`)return(0,L.jsxs)(`div`,{className:`terminal-input-prompt`,children:[(0,L.jsx)(`div`,{className:`terminal-input-prompt-line`,children:e.promptLine}),(0,L.jsxs)(`div`,{className:`terminal-input-prompt-row`,children:[(0,L.jsx)(`button`,{type:`button`,className:`terminal-input-yesno-btn`,onClick:()=>i(`y`),children:`Yes`}),(0,L.jsx)(`button`,{type:`button`,className:`terminal-input-yesno-btn`,onClick:()=>i(`n`),children:`No`}),(0,L.jsx)(`input`,{type:`text`,className:`terminal-input-reply`,value:n,onChange:e=>r(e.target.value),onKeyDown:a,placeholder:`or type a custom reply`,autoCapitalize:`off`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1})]})]});let o=e.mode===`password`;return(0,L.jsxs)(`div`,{className:`terminal-input-prompt`,children:[(0,L.jsx)(`div`,{className:`terminal-input-prompt-line`,children:e.promptLine}),(0,L.jsxs)(`div`,{className:`terminal-input-prompt-row`,children:[(0,L.jsx)(`input`,{type:o?`password`:`text`,className:`terminal-input-reply`,value:n,onChange:e=>r(e.target.value),onKeyDown:a,placeholder:o?`password (not echoed or saved)`:`reply…`,autoFocus:!0,autoCapitalize:`off`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1}),(0,L.jsx)(`button`,{type:`button`,className:`terminal-input-send-btn`,onClick:()=>i(n),children:`Send`})]}),o&&(0,L.jsx)(`div`,{className:`terminal-input-hint`,children:`Your input is hidden and isn't kept in the timeline.`})]})}function rn({startedAt:e}){let[,t]=(0,I.useState)(0);(0,I.useEffect)(()=>{let e=setInterval(()=>t(e=>e+1),1e3);return()=>clearInterval(e)},[]);let n=(0,I.useMemo)(()=>new Date(e).getTime(),[e]);return(0,L.jsxs)(`span`,{className:`terminal-running-pill`,title:`Running…`,children:[`running `,an(Math.max(0,Date.now()-n))]})}function an(e){if(e<1e3)return`${e}ms`;let t=Math.floor(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m${(t%60).toString().padStart(2,`0`)}s`}var on=1440*60*1e3;function sn(e,t){if(!e)return!1;let n=Date.parse(e);return Number.isFinite(n)&&t-n<=864e5}var cn=300*1e3;function ln(e){let t=Date.parse(e);return Number.isFinite(t)?t+cn:void 0}function un(e,t){let n;for(let r of e){let e=ln(r.at);e===void 0||e<t||(n===void 0||e<n)&&(n=e)}return n}function dn(e,t){if(e.kind===`terminal-streaming`)return!0;if(e.kind!==`terminal`)return!1;let n=ln(e.at);return n!==void 0&&t<=n}function fn(e,t){return dn(e,t)?2:+(e.kind===`streaming`)}function pn(e,t,n){let r=fn(e,n)-fn(t,n);return r===0?e.at<t.at?-1:+(e.at>t.at):r}function mn(e){let t=-1/0,n=e.root?[e.root,...e.replies]:e.replies;for(let e of n){let n=Date.parse(e.at);Number.isFinite(n)&&n>t&&(t=n)}return t}function hn(e,t,n){if(!t)return e;let r=-1;for(let n=e.length-1;n>=0;n--){let i=e[n];if(i?.kind===`thread`&&i.sessionId===t){r=n;break}}if(r===-1)return e;let i=e[r],a=mn(i);if(!Number.isFinite(a)||n-a>864e5)return e;let o=e.length;for(;o>0;){let t=e[o-1];if(!t||!dn(t,n))break;o--}let s=o-1;if(s<=r)return e;let c=[...e];return c.splice(r,1),c.splice(s,0,i),c}var gn=280;function _n(e,t){t?.current&&(t.current.abort(),t.current=null);let n=e.current;if(n){try{n.pause(),n.removeAttribute(`src`),n.load()}catch{}e.current=null}}function vn(e){let t=e.trim();if(t.length<=gn)return t;let n=t.slice(0,gn),r=Math.max(n.lastIndexOf(`. `),n.lastIndexOf(`! `),n.lastIndexOf(`? `));return r>=gn/2?n.slice(0,r+1).trim():`${n.trim()}…`}async function yn(e,t,n,r,i){_n(r,i);let a=new AbortController;i.current=a;let o=vn(e);console.debug(`[narrate] synth start chars=${o.length} (of ${e.length}) gezelId=${t}`);let s;try{s=await _.synthesizeSpeech({text:o,gezelId:t,projectId:n,inline:!0,signal:a.signal})}catch(e){if(a.signal.aborted){console.debug(`[narrate] synth aborted (superseded by newer turn)`);return}console.warn(`[narrate] synth failed:`,e);return}if(a.signal.aborted){console.debug(`[narrate] synth resolved but aborted — dropping`);return}if(console.debug(`[narrate] synth ok b64Len=${s.b64Wav?.length??0} meta=`,s.meta),!s.b64Wav){console.warn(`[narrate] synth returned no b64Wav — narration skipped`);return}let c=new Audio(`data:audio/wav;base64,${s.b64Wav}`);r.current=c,c.addEventListener(`ended`,()=>{console.debug(`[narrate] playback ended`),r.current===c&&(r.current=null),i.current===a&&(i.current=null)});try{await c.play(),console.debug(`[narrate] playback started`)}catch(e){console.warn(`[narrate] playback rejected:`,e),r.current===c&&(r.current=null),i.current===a&&(i.current=null)}}function bn(e){let{branch:t,phase:n}=e,r=t.ancestorContinuationLevels.filter(e=>e>=2&&e<=4);return(0,L.jsxs)(L.Fragment,{children:[(n===`thread`&&t.hasFollowingSibling?[1,...r]:r).map(e=>(0,L.jsx)(`span`,{className:`timeline-tree-guide timeline-tree-guide-${n} timeline-tree-guide-up-${e}`,"aria-hidden":`true`},`${n}:${e}`)),n===`divider`&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`span`,{className:`timeline-tree-parent-line timeline-tree-guide-up-1${t.hasFollowingSibling?` timeline-tree-parent-line-continues`:``}`,"aria-hidden":`true`}),(0,L.jsx)(`span`,{className:`timeline-tree-elbow timeline-tree-guide-up-1`,"aria-hidden":`true`})]})]})}function xn(e){let{row:t,gezels:n,projects:r,showProjectName:i,activeSessionId:a,onFocusSession:o,continuing:s,depth:l=0,treeBranch:u,key:d,roleBasedNameOnlyMode:f}=e,p=t.kind===`streaming`?t.sessionId:t.msg.sessionId,m=t.kind===`streaming`?t.slot.gezelId:t.msg.gezelId,h=t.kind===`streaming`?t.slot.projectId:t.msg.projectId,g=n.get(m),_=i&&h!=="default"?r.get(h):void 0,v=p===a,y=t.kind===`message`?t.msg.sessionCreatedAt:t.slot.sessionCreatedAt??new Date(t.slot.startedAt).toISOString(),ee=t.kind===`message`?t.msg.taskRef:t.slot.taskRef,b=t.kind===`message`?t.msg.sessionSource:t.slot.sessionSource,C=t.kind===`message`?t.msg.parentSession:t.slot.parentSession,w=t.kind===`message`?t.msg.handoffFrom:t.slot.handoffFrom,T=C??(w?{...w,kind:`task-handoff`}:void 0),E=T?(()=>{let e=n.get(T.gezelId);return e?c({name:e.name,roleBasedName:e.roleBasedName},f):void 0})():void 0,te=w?(()=>{let e=n.get(w.gezelId);return e?c({name:e.name,roleBasedName:e.roleBasedName},f):void 0})():void 0,D=g?c({name:g.name,roleBasedName:g.roleBasedName},f):`Gezel`;if(t.kind===`streaming`&&p.startsWith(`one-shot:`)){let e=t.slot.activity?.trim()||`Background work`;return(0,L.jsxs)(`output`,{className:`timeline-session-divider timeline-session-divider-activity`,children:[(0,L.jsx)(j,{svg:g?.icon??null,poppetje:g?.poppetje,iconOverride:g?.iconOverride,name:D,size:16}),(0,L.jsxs)(`span`,{className:`timeline-divider-meta`,title:S(y),children:[D,` · `,e,_&&(0,L.jsxs)(L.Fragment,{children:[` · in `,_.name]}),` · `,`started `,x(y)]})]},d)}return(0,L.jsxs)(`button`,{type:`button`,className:`timeline-session-divider${v?` timeline-session-divider-active`:``}${s?` timeline-session-divider-continuing`:``}${l>0?` timeline-session-divider-child timeline-session-depth-${Math.min(l,4)}`:``}`,onClick:()=>o?.(p,m,h),title:b?`View this read-only thread from ${b.appName}`:`Focus this thread — composer will post here`,children:[l>0&&u&&(0,L.jsx)(bn,{branch:u,phase:`divider`}),(0,L.jsx)(j,{svg:g?.icon??null,poppetje:g?.poppetje,iconOverride:g?.iconOverride,name:D,size:16}),(0,L.jsxs)(`span`,{className:`timeline-divider-meta`,title:S(y),children:[s?(0,L.jsxs)(L.Fragment,{children:[`↩ continuing with `,D,_&&(0,L.jsxs)(L.Fragment,{children:[` · in `,_.name]}),b&&(0,L.jsxs)(L.Fragment,{children:[` · from `,b.appName,` · read-only`]})]}):b?(0,L.jsxs)(L.Fragment,{children:[`external thread with `,D,` · from `,b.appName,` · read-only`,_&&(0,L.jsxs)(L.Fragment,{children:[` · in `,_.name]}),` · `,`started `,x(y)]}):T?(0,L.jsxs)(L.Fragment,{children:[T.kind===`consultation`?`consultation with ${D}`:T.kind===`task-handoff`?`task hand-off to ${D}`:`delegated to ${D}`,_&&(0,L.jsxs)(L.Fragment,{children:[` · in `,_.name]}),` · `,`started `,x(y)]}):(0,L.jsxs)(L.Fragment,{children:[`new thread with `,D,_&&(0,L.jsxs)(L.Fragment,{children:[` · in `,_.name]}),` · `,`started `,x(y)]}),ee&&(0,L.jsxs)(L.Fragment,{children:[` · task `,ee]})]}),T&&(T.kind===`task-handoff`?te??E:E)&&(0,L.jsxs)(`span`,{className:`timeline-divider-handoff`,children:[(0,L.jsxs)(`svg`,{className:`timeline-divider-handoff-icon`,viewBox:`0 0 16 16`,fill:`none`,"aria-hidden":`true`,focusable:`false`,children:[(0,L.jsx)(`path`,{d:`M2.5 4.25v2.1a4.4 4.4 0 0 0 4.4 4.4H13`}),(0,L.jsx)(`path`,{d:`m10.5 8.25 2.75 2.5-2.75 2.5`})]}),T.kind===`task-handoff`?`from`:`by`,` `,T.kind===`task-handoff`?te??E:E]})]},d)}function Sn(e){let{entry:t,key:n}=e;return(0,L.jsxs)(`div`,{className:`timeline-session-divider timeline-terminal-session-divider`,children:[(0,L.jsx)(`span`,{className:`terminal-folder-pill`,title:`Working folder`,children:t.workingDir===``?`/`:t.workingDir}),(0,L.jsxs)(`span`,{className:`timeline-divider-meta`,title:S(t.at),children:[`terminal session · started `,x(t.at)]})]},n)}function Cn(e){return e.replace(/["\\]/g,`\\$&`)}function wn(e,t){let n=new Map((e??[]).map(e=>[e.messageId,e]));for(let e of t)n.set(e.messageId,e);return[...n.values()].sort((e,t)=>e.at<t.at?-1:+(e.at>t.at))}function Tn(e,t){let n=t.filter(e=>e.role===`user`),r=e.filter(e=>{if(!e.optimistic)return!0;let t=Date.parse(e.at);return!n.some(n=>{if(n.sessionId!==e.sessionId||n.content!==e.content)return!1;let r=Date.parse(n.at);return Number.isFinite(t)&&Number.isFinite(r)?Math.abs(r-t)<2*6e4:!0})}),i=new Set,a=[];for(let e of[...t,...r]){let t=`${e.sessionId}:${e.at}:${e.role}`;i.has(t)||(i.add(t),a.push(e))}return a.sort((e,t)=>e.at<t.at?-1:+(e.at>t.at)),a}function En(e,t){for(let n=e.length-1;n>=0;n--)if(e[n].sessionId===t)return e[n];return null}function Dn(e){return/model\s+.*\bnot available\b/i.test(e)||/\bunknown model\b/i.test(e)}function On(e){return e?.code===`capacity-denied`||e?.code===`engine-busy`}function kn(e,t){return o(e)||Dn(e)||/\bdo not retry\b|\bcannot run on this machine\b/i.test(e)?!1:t?.code===`engine-busy`||t?.code===`capacity-denied`||t?.code===`native-engine-crash`||/\bretry the turn\b|\bsend (?:the )?message again\b|\bretry \(the cache is warm now\)|\btry a shorter prompt, retry\b/i.test(e)}var An=[];function jn(e){return e.referencedFiles?.length?e.referencedFiles:e.referencedArtifacts?.length?e.referencedArtifacts.map(e=>({kind:`artifact`,path:e})):An}function Mn(e,t){if(!e)return!1;try{let n=new Date(e).getTime();return Date.now()-n<=t}catch{return!1}}function Nn(e){switch(e){case`copilot`:return`Copilot`;case`openai`:return`OpenAI`;case`anthropic`:return`Claude`;case`anthropic-cli`:return`Claude CLI`;case`codex-cli`:return`Codex CLI`;case`ollama`:return`Ollama`;case`llama-cpp`:return`On-device`;case`mlx`:return`MLX`;case`ds4`:return`DwarfStar`;case`remote`:return`Remote`}}function Pn({store:e,itemKey:t,render:n,onRendered:r}){let i=(0,I.useCallback)(n=>e.subscribeItem(t,n),[e,t]),a=(0,I.useCallback)(()=>e.getItemSnapshot(t),[e,t]),o=(0,I.useSyncExternalStore)(i,a,a),s=e.items.get(t);return(0,I.useLayoutEffect)(()=>{s&&r?.()},[s,r,o]),s?(0,L.jsx)(L.Fragment,{children:n(s)}):null}function Fn({store:e,sessionId:t,userMsg:n,gezels:r}){return(0,L.jsx)(Pn,{store:e,itemKey:t,render:e=>(0,L.jsx)(Ot,{payload:{userMsg:n,assistantInfo:{kind:`live`,sessionId:t,slot:e}},gezels:r})})}var In={request(e){return typeof requestAnimationFrame==`function`?requestAnimationFrame(e):window.setTimeout(()=>e(performance.now()),16)},cancel(e){typeof cancelAnimationFrame==`function`?cancelAnimationFrame(e):window.clearTimeout(e)}},Ln=class{scheduler;items=new Map;structureVersion=0;itemVersions=new Map;structureListeners=new Set;itemListeners=new Map;pendingItems=new Set;pendingStructure=!1;frameHandle=null;constructor(e=In){this.scheduler=e}getStructureSnapshot=()=>this.structureVersion;subscribeStructure=e=>(this.structureListeners.add(e),()=>this.structureListeners.delete(e));getItemSnapshot(e){return this.itemVersions.get(e)??0}subscribeItem(e,t){let n=this.itemListeners.get(e);return n||(n=new Set,this.itemListeners.set(e,n)),n.add(t),()=>{n?.delete(t),n?.size===0&&this.itemListeners.delete(e)}}markItemChanged(e){this.pendingItems.add(e),this.scheduleFlush()}markStructureChanged(){this.pendingStructure=!0,this.scheduleFlush()}scheduleFlush(){this.frameHandle===null&&(this.frameHandle=this.scheduler.request(()=>this.flush()))}flush(){this.frameHandle=null;let e=this.pendingStructure,t=[...this.pendingItems];if(this.pendingStructure=!1,this.pendingItems.clear(),e){this.structureVersion+=1;for(let e of this.structureListeners)e()}for(let e of t){this.itemVersions.set(e,(this.itemVersions.get(e)??0)+1);for(let t of this.itemListeners.get(e)??[])t()}}dispose(){this.frameHandle!==null&&this.scheduler.cancel(this.frameHandle),this.frameHandle=null,this.pendingStructure=!1,this.pendingItems.clear(),this.structureListeners.clear(),this.itemListeners.clear()}};function Rn(e){let t=e.root?[e.root,...e.replies]:e.replies;for(let e of t)if(e.kind===`message`&&e.msg.parentSession?.sessionId)return e.msg.parentSession.sessionId}function zn(e){let t=new Map,n=new Map,r=new Map;for(let i=0;i<e.length;i++){let a=e[i];if(!a||a.kind!==`thread`)continue;let o=t.get(a.sessionId)??[];o.push(a),t.set(a.sessionId,o),n.has(a.sessionId)||n.set(a.sessionId,i);let s=Rn(a);s&&s!==a.sessionId&&r.set(a.sessionId,s)}let i=new Set(t.keys()),a=new Map;for(let[e,t]of r){if(!i.has(t))continue;let n=a.get(t)??[];n.push(e),a.set(t,n)}for(let e of a.values())e.sort((e,t)=>(n.get(e)??0)-(n.get(t)??0));let o=new Map;for(let e of a.values())for(let t=0;t<e.length;t++){let n=e[t];n&&o.set(n,t<e.length-1)}let s=new Map,c=(e,t=new Set)=>{let n=s.get(e);if(n!==void 0)return n;if(t.has(e))return 0;let a=r.get(e);if(!a||!i.has(a))return s.set(e,0),0;let o=new Set(t);o.add(e);let l=Math.min(4,c(a,o)+1);return s.set(e,l),l};for(let e of i)c(e);let l=new Map;for(let e of i){let t=[];if((s.get(e)??0)>0){let n=r.get(e),i=2;for(;n&&r.has(n);)o.get(n)===!0&&t.push(i),n=r.get(n),i+=1}l.set(e,{hasChildren:(a.get(e)?.length??0)>0,hasFollowingSibling:o.get(e)===!0,ancestorContinuationLevels:t})}let u=new Set;for(let[e,t]of r)i.has(t)&&(s.get(e)??0)>0&&u.add(e);let d=[],f=new Set,p=(e,n=new Set)=>{if(f.has(e)||n.has(e))return;f.add(e);for(let n of t.get(e)??[])d.push(n);let r=new Set(n);r.add(e);for(let t of a.get(e)??[])p(t,r)},m=new Map;for(let t=0;t<e.length;t++){let n=e[t];n?.kind===`thread`&&!u.has(n.sessionId)&&m.set(n.sessionId,t)}for(let t=0;t<e.length;t++){let n=e[t];if(n){if(n.kind!==`thread`){d.push(n);continue}if(!u.has(n.sessionId)&&(d.push(n),m.get(n.sessionId)===t)){f.add(n.sessionId);for(let e of a.get(n.sessionId)??[])p(e)}}}for(let e of i)f.has(e)||p(e);return{items:d,depthBySession:s,branchBySession:l}}function Bn(e){let t=new Map,n=new Map;for(let r of e){if(r.role!==`user`)continue;let e=r.content.trim(),i=Date.parse(r.at),a=t.get(e);if(a&&a.sessionId!==r.sessionId&&i-a.atMs<=5e3){n.set(r,a.row);continue}t.set(e,{atMs:i,sessionId:r.sessionId,row:r})}return n}function Vn(e){let t=Bn(e.flatMap(e=>e.kind===`message`&&e.msg.role===`user`?[{at:e.msg.at,role:e.msg.role,content:e.msg.content,sessionId:e.msg.sessionId,ref:e}]:[])),n=new Map;for(let[e,r]of t)n.set(e.ref,r.ref);let r=[],i=new Map,a=new Map;for(let t of e){if(t.kind===`indexing`||t.kind===`terminal`||t.kind===`terminal-streaming`){r.push(t);continue}if(t.kind===`message`&&t.msg.role===`user`){let e=n.get(t);if(e){let n=a.get(e);if(n){i.set(t.msg.sessionId,n);continue}}let o={kind:`thread`,sessionId:t.msg.sessionId,at:t.at,root:t,replies:[]};r.push(o),i.set(t.msg.sessionId,o),a.set(t,o);continue}let e=t.kind===`message`?t.msg.sessionId:t.sessionId,o=i.get(e);o||(o={kind:`thread`,sessionId:e,at:t.kind===`streaming`?t.threadAt??t.at:t.at,replies:[]},r.push(o),i.set(e,o)),o.replies.push(t);let s=r.indexOf(o);s>=0&&s!==r.length-1&&(r.splice(s,1),r.push(o))}return r}function Hn(){let[e,t]=(0,I.useState)(!1);return(0,I.useEffect)(()=>{let e=!1;_.getConfig().then(n=>{e||t(n.narrateAssistantReplies??!1)}).catch(()=>{});let n=e=>{let n=e.detail;n&&typeof n.narrateAssistantReplies==`boolean`&&t(n.narrateAssistantReplies)};return window.addEventListener(`gezel:config-updated`,n),()=>{e=!0,window.removeEventListener(`gezel:config-updated`,n)}},[]),e}var Un=100,Wn=new Set([`ollama`,`llama-cpp`,`mlx`,`ds4`]),Gn=180*1e3,Kn=80,qn=80,Jn=700,Yn=300,Xn=2e3,Zn=7200*1e3,Qn=4,$n=1e4;function er(e){return e.role===`assistant`&&e.toolCalls?.some(e=>e.success&&h(e.name).replace(/^gezel-/,``)===`ask_user_question`)===!0}var tr={starting:`Starting engine`,loading_model:`Loading model`,prefill:`Thinking it through`,generating:`Generating`,ready:`Ready`};function nr({scopeKey:e,activeSessionId:t,onFocusSession:n,onToolActivity:r,onArtifactReference:i,onArtifactSeen:a,onWorkspaceReference:u,onWorkspaceSeen:f,onOpenReference:p,onTaskReference:m,queuedTasks:h,emptyPlaceholder:g,emptyContent:v,loadTimeline:y,streamUrl:ee,terminalStreamUrl:b,terminalRefreshKey:S,terminalSubmission:w,terminalFocusRequest:T,sessionFocusRequest:E,onTerminalWorkingDirChanged:te,showProjectName:D,inflightScope:ne,scopedSessionIds:A,onUnknownSession:j}){let ie=O(),M=(0,I.useRef)(A);M.current=A;let ce=(0,I.useRef)(j);ce.current=j;let ue=Hn(),de=(0,I.useRef)(ue);de.current=ue;let fe=(0,I.useRef)(null),me=(0,I.useRef)(null),he=(0,I.useRef)(new Map);(0,I.useEffect)(()=>()=>{_n(fe,me)},[]);let[N,P]=(0,I.useState)([]),ve=(0,I.useRef)([]),F=(0,I.useRef)(new Set);(0,I.useEffect)(()=>{ve.current=N},[N]),(0,I.useEffect)(()=>{if(m)for(let e of N){if(e.taskRef){let n=!!t&&e.sessionId===t;m(e.taskRef,{scoped:n})}if(e.referencedTasks)for(let t of e.referencedTasks)m(t)}},[N,t,m]),(0,I.useEffect)(()=>{if(!(!a&&!f))for(let e of N){let t=`${e.sessionId}\u0000${e.at}\u0000${e.role}`,n=(n,r)=>{let i=n===`workspace`?f:a;if(!i)return;let o=`${t}\u0000${n}\u0000${r}`;F.current.has(o)||(F.current.add(o),i(r,e.projectId))};for(let t of jn(e))n(t.kind,t.path);for(let t of e.toolCalls??[]){if(!t.success)continue;for(let e of[...t.images??[],...t.audios??[],...t.videos??[]])n(`artifact`,e.path);let e=t.paths?.length?t.paths:t.path?[t.path]:[];for(let r of e)t.name===`read_artifact`||t.name===`write_artifact`?n(`artifact`,r):(t.name===`read_file`||t.name===`read_files`||t.name===`write_file`)&&n(`workspace`,r)}}},[N,a,f]);let[ye,be]=(0,I.useState)([]),[xe,R]=(0,I.useState)([]),[Se,Ce]=(0,I.useState)(0),[we,Te]=(0,I.useState)(!1),[z,Ee]=(0,I.useState)();(0,I.useEffect)(()=>{let e=un(ye,Date.now());if(e===void 0)return;let t=window.setTimeout(()=>Ce(e=>e+1),Math.max(0,e-Date.now()+1));return()=>window.clearTimeout(t)},[ye,Se]),(0,I.useEffect)(()=>{t&&_.warmSessionCache(t).catch(()=>{})},[t]);let[De,B]=(0,I.useState)(!0),[Oe,ke]=(0,I.useState)(null),[Ae,je]=(0,I.useState)(new Map),[Me,Ne]=(0,I.useState)(new Set),[V,Pe]=(0,I.useState)(new Map),Fe=(0,I.useRef)(V);Fe.current=V;let[Ie,Le]=(0,I.useState)(new Map),[Re,ze]=(0,I.useState)(new Map),Be=(0,I.useRef)(new Set),Ve=(0,I.useRef)(e);Ve.current=e;let He=(0,I.useRef)(null);He.current||=new Ln;let H=He.current,U=(0,I.useRef)(H.items),Ue=(0,I.useSyncExternalStore)(H.subscribeStructure,H.getStructureSnapshot,H.getStructureSnapshot),We=(0,I.useRef)(null);We.current||=new Ln;let Ge=We.current;(0,I.useEffect)(()=>{let e=e=>{let t=e.detail?.projectId;if(typeof t!=`string`||t.length===0)return;Ne(e=>{let n=new Set(e);return n.add(t),n}),P(e=>e.map(e=>e.projectId===t?{...e,sessionLastTurnError:void 0,sessionLastTurnErrorDetail:void 0}:e));let n=!1;for(let[e,r]of U.current)r.projectId!==t||!r.error||(U.current.delete(e),n=!0);n&&H.markStructureChanged(),je(e=>{let n=new Map(e);for(let e of ve.current)e.projectId===t&&n.delete(e.sessionId);return n})};return window.addEventListener(`gezel:session-error-cleared`,e),()=>window.removeEventListener(`gezel:session-error-cleared`,e)},[H]);let Ke=(0,I.useRef)(Ge.items),qe=(0,I.useSyncExternalStore)(Ge.subscribeStructure,Ge.getStructureSnapshot,Ge.getStructureSnapshot),Je=(0,I.useRef)(new Map),W=(0,I.useRef)(null),Xe=(0,I.useRef)(null),Ze=(0,I.useRef)(null),[Qe,$e]=(0,I.useState)(!0),et=(0,I.useRef)(!0);et.current=Qe;let[G,tt]=(0,I.useState)(null),[nt,rt]=(0,I.useState)(null),it=(0,I.useRef)(null),ot=(0,I.useRef)(null),K=(0,I.useRef)(!1),[q,st]=(0,I.useState)(null),ct=(0,I.useRef)(null),lt=(0,I.useRef)(60),J=(0,I.useRef)(0),ut=(0,I.useRef)(0),dt=(0,I.useRef)(null),Y=ne?.projectId,X=ne?.gezelId;(0,I.useEffect)(()=>{let t=!1;return B(!0),ke(null),je(new Map),P([]),be([]),R(Mt(e)),Te(!1),Ee(void 0),Ne(new Set),F.current.clear(),Be.current.clear(),U.current.clear(),H.markStructureChanged(),Ke.current.clear(),Ge.markStructureChanged(),Je.current.clear(),et.current=!0,$e(!0),tt(null),rt(null),J.current=0,ut.current=0,(async()=>{try{let e=await y({limit:Un});if(t)return;P(e.messages),Te(e.hasMore),Ee(e.nextCursor),be(t=>wn(e.terminalEntries,t));try{let n=await _.listInflightTurns({...Y===void 0?{}:{projectId:Y},...X===void 0?{}:{gezelId:X}});if(t)return;for(let t of n.inflight){if(U.current.has(t.sessionId)||M.current&&!M.current.has(t.sessionId))continue;let n=En(e.messages,t.sessionId);U.current.set(t.sessionId,{gezelId:t.gezelId,projectId:t.projectId,segments:[],startedAt:t.startedAt,lastActivityAt:t.lastProgressAgoMs==null?t.startedAt:Date.now()-t.lastProgressAgoMs,hasProgress:t.lastProgressAgoMs!=null,...n?{sessionTitle:n.sessionTitle,sessionCreatedAt:n.sessionCreatedAt,sessionProviderName:n.sessionProviderName,...n.sessionModel?{sessionModel:n.sessionModel}:{},...n.taskRef?{taskRef:n.taskRef}:{}}:{}})}n.inflight.length>0&&H.markStructureChanged()}catch{}try{let e=await _.getQueueStatus();if(t)return;for(let t of e.sessions)M.current&&!M.current.has(t.sessionId)||Je.current.set(t.sessionId,t.entries.map(e=>({id:e.queueId,preview:e.preview,enqueuedAt:e.enqueuedAt,...e.nudge?{nudge:!0}:{}})));e.sessions.length>0&&H.markStructureChanged()}catch{}try{let e=await y({limit:Un});if(t)return;P(t=>Tn(t,e.messages)),be(t=>wn(e.terminalEntries,t))}catch{}}catch(e){t||ke(e.message)}finally{t||B(!1)}})(),()=>{t=!0}},[e,y,Y,X]);let[Z,Q]=(0,I.useState)(`copilot`),[ft,pt]=(0,I.useState)({}),[mt,ht]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await _.getConfig();if(e)return;Q(t.provider),pt(t.defaultModel??{}),ht(t.debugMode===!0)}catch{}})(),()=>{e=!0}},[]);let gt=(0,I.useCallback)((e,t,n=!1)=>{let r=En(e,t.sessionId);return{sessionId:t.sessionId,gezelId:t.gezelId,projectId:t.projectId,sessionTitle:r?.sessionTitle??s(t.content),sessionCreatedAt:r?.sessionCreatedAt??t.at,sessionLastActivityAt:t.at,sessionProviderName:r?.sessionProviderName??Z,...r?.sessionModel?{sessionModel:r.sessionModel}:{},...r?.taskRef?{taskRef:r.taskRef}:{},...r?.stepId?{stepId:r.stepId}:{},role:`user`,content:t.content,at:t.at,...t.from?{from:t.from}:{},...n?{optimistic:!0}:{}}},[Z]),_t=(0,I.useCallback)(e=>V.get(e)?.provider??Z,[V,Z]),vt=(0,I.useCallback)(e=>{let t=V.get(e),n=_t(e),r=t?.model;return r?`Provider: ${Nn(n)} (${r})`:`Provider: ${Nn(n)}`},[V,_t]),yt=(0,I.useCallback)((e,t)=>{let n=ft[Z],r=Wn.has(e);if(e!==Z)return t&&!r?`${Nn(e)} · ${t}`:Nn(e);if(!r&&t&&n&&t!==n)return t},[Z,ft]),bt=(0,I.useRef)(null),xt=(0,I.useCallback)(()=>{if(bt.current)return bt.current;let e=(async()=>{try{let e=await _.listGezels(),t=new Map;for(let n of e.gezels)t.set(n.id,n);Pe(t)}catch{}finally{bt.current=null}})();return bt.current=e,e},[]);(0,I.useEffect)(()=>{xt()},[xt]),(0,I.useEffect)(()=>{let e=e=>{let t=e.detail;t?.id&&Pe(e=>{let n=new Map(e);return n.set(t.id,{...n.get(t.id),...t}),n})};return window.addEventListener(`gezel:gezel-updated`,e),()=>window.removeEventListener(`gezel:gezel-updated`,e)},[]),(0,I.useEffect)(()=>{if(!D)return;let e=!1;return(async()=>{try{let t=await _.listProjects();if(e)return;let n=new Map;for(let e of t.projects)n.set(e.id,e);Le(n)}catch{}})(),()=>{e=!0}},[D]);let St=(0,I.useCallback)(async()=>{try{let e=await _.listQuestions({pending:!0});ze(t=>{let n=new Map(t);for(let[e,t]of n)t.answer||n.delete(e);for(let t of e.questions)n.set(t.id,t);return n})}catch{}},[]);(0,I.useEffect)(()=>{St()},[e,St]),(0,I.useEffect)(()=>{let t=new Set;for(let e of N)!e.pendingQuestionId&&!er(e)||Be.current.has(e.projectId)||t.add(e.projectId);if(t.size===0)return;let n=[...t],r=e;for(let e of n)Be.current.add(e);Promise.allSettled(n.map(e=>_.listQuestions({projectId:e}))).then(e=>{if(Ve.current!==r)return;let t=[];e.forEach((e,r)=>{e.status===`fulfilled`?t.push(...e.value.questions):Be.current.delete(n[r])}),t.length!==0&&ze(e=>{let n=new Map(e);for(let e of t)n.set(e.id,e);return n})})},[N,e]),(0,I.useEffect)(()=>{let e=new AbortController,t=!1,n=250;return(async()=>{for(;!t;){try{let r={url:ee(),headers:_.authHeader(),signal:e.signal,fetch:_.getFetch()};for await(let e of _e(r)){if(t)return;Ct(e),n=250}}catch(e){if(t||e.name===`AbortError`)return;console.warn(`[ChatTimelineView] envelope stream error (reconnecting in ${n}ms):`,e)}if(t)return;await new Promise(e=>setTimeout(e,n)),n=Math.min(n*2,5e3)}})(),()=>{t=!0,e.abort()}},[e,ee]),(0,I.useEffect)(()=>{if(!b)return;let e=new AbortController,t=!1,n=250;return(async()=>{let{streamTerminalEvents:r}=await C(async()=>{let{streamTerminalEvents:e}=await import(`./dist-CJqyWK6E.js`).then(e=>e.r);return{streamTerminalEvents:e}},__vite__mapDeps([0,1,2]));for(;!t;){try{for await(let i of r({url:b(),headers:_.authHeader(),signal:e.signal,fetch:_.getFetch()})){if(t)return;if(i.kind===`workingDirChanged`){te?.(i.threadId,i.newWorkingDir),n=250;continue}if(i.kind===`openFile`){u?.(i.path,i.projectId),n=250;continue}if(i.kind===`runStarted`){Ke.current.set(i.runId,{projectId:i.projectId,threadId:i.threadId,commandMessageId:i.commandMessageId,startedAt:i.at,cwd:i.cwd,content:``}),Ge.markStructureChanged(),n=250;continue}if(i.kind===`outputChunk`){let e=Ke.current.get(i.runId);e&&(e.content+=i.chunk,e.awaitingInput&&delete e.awaitingInput,Ge.markItemChanged(i.runId)),n=250;continue}if(i.kind===`inputRequested`){let e=Ke.current.get(i.runId);e&&(e.awaitingInput={promptLine:i.promptLine,mode:i.mode},Ge.markItemChanged(i.runId)),n=250;continue}i.runId&&(Ke.current.delete(i.runId),Ge.markStructureChanged()),be(e=>{if(e.some(e=>e.messageId===i.message.id))return e;let t={threadId:i.threadId,projectId:i.projectId,workingDir:i.workingDir,threadCreatedAt:i.message.at,threadLastActivityAt:i.message.at,messageId:i.message.id,msgKind:i.message.kind,content:i.message.content,at:i.message.at,...i.message.resolvedFrom?{resolvedFrom:i.message.resolvedFrom}:{},...i.message.stdout===void 0?{}:{stdout:i.message.stdout},...i.message.stderr===void 0?{}:{stderr:i.message.stderr},...i.message.exitCode===void 0?{}:{exitCode:i.message.exitCode},...i.message.durationMs===void 0?{}:{durationMs:i.message.durationMs},...i.message.truncated?{truncated:!0}:{},...i.message.errorMessage?{errorMessage:i.message.errorMessage}:{},...i.message.fileReferences?{fileReferences:i.message.fileReferences}:{},...i.message.cwd===void 0?{}:{cwd:i.message.cwd}},n=[...e,t];return n.sort((e,t)=>e.at<t.at?-1:+(e.at>t.at)),n}),n=250}}catch(e){if(t||e.name===`AbortError`)return;console.warn(`[ChatTimelineView] terminal stream error (reconnecting in ${n}ms):`,e)}if(t)return;await new Promise(e=>setTimeout(e,n)),n=Math.min(n*2,5e3)}})(),()=>{t=!0,e.abort()}},[e,b,u]),(0,I.useEffect)(()=>{if(!S)return;let e=!1;return y({limit:Un}).then(t=>{e||be(e=>wn(t.terminalEntries,e))}).catch(()=>{}),()=>{e=!0}},[S,y]),(0,I.useEffect)(()=>{w&&(tt({kind:`terminal`,key:`terminal:${w.runId}`,runId:w.runId,threadId:w.threadId,input:w.input}),rt(null))},[w]);let $=(0,I.useCallback)(async()=>{try{let e=await y({limit:Un});P(t=>Tn(t,e.messages));let t=ge(U.current,e.messages);for(let e of t)U.current.delete(e);t.length>0&&H.markStructureChanged()}catch{}},[y,H.markStructureChanged]);(0,I.useEffect)(()=>{let e=!1,t=!1,n=async()=>{if(t||U.current.size===0)return;t=!0;let n=new Map(U.current);try{let t=await _.listInflightTurns({...Y===void 0?{}:{projectId:Y},...X===void 0?{}:{gezelId:X}});if(e)return;let r=new Set(t.inflight.map(e=>e.sessionId)),i=re(U.current,n,r);if(i.length===0)return;for(let e of i)U.current.delete(e),he.current.delete(e);H.markStructureChanged(),$()}catch{}finally{t=!1}},r=window.setInterval(()=>{n()},5e3);return()=>{e=!0,window.clearInterval(r)}},[Y,X,$,H.markStructureChanged]),(0,I.useEffect)(()=>at(e=>{if(Y!==void 0&&e.projectId!==Y||X!==void 0&&e.gezelId!==X||M.current&&!M.current.has(e.sessionId))return;let t=Date.parse(e.at);if(P(n=>{if(n.some(n=>{if(n.sessionId!==e.sessionId||n.role!==`user`||n.content!==e.content)return!1;let r=Date.parse(n.at);return Number.isFinite(t)&&Number.isFinite(r)?Math.abs(r-t)<2*6e4:!0}))return n;let r=[...n,gt(n,e,!0)];return r.sort((e,t)=>e.at<t.at?-1:+(e.at>t.at)),r}),!U.current.has(e.sessionId)){let n=En(ve.current,e.sessionId),r=Number.isFinite(t)?t:Date.now();U.current.set(e.sessionId,{gezelId:e.gezelId,projectId:e.projectId,segments:[],startedAt:r,lastActivityAt:r,hasProgress:!1,...n?{sessionTitle:n.sessionTitle}:{sessionTitle:s(e.content)},...n?{sessionCreatedAt:n.sessionCreatedAt}:{sessionCreatedAt:e.at},...n?{sessionProviderName:n.sessionProviderName,...n.sessionModel?{sessionModel:n.sessionModel}:{}}:{},...n?.taskRef?{taskRef:n.taskRef}:{},...n?.stepId?{stepId:n.stepId}:{}}),H.markStructureChanged()}tt({kind:`chat`,key:`chat:${e.sessionId}:${e.at}`,sessionId:e.sessionId,content:e.content,at:e.at}),rt(null)}),[Y,X,gt,H.markStructureChanged]);let Ct=(0,I.useCallback)(t=>{let{sessionId:n,gezelId:i,projectId:a,event:o}=t;if(Y!==void 0&&a!==Y||X!==void 0&&i!==X)return;let c=M.current;if(c&&!c.has(n)){ce.current?.(n);return}if(Fe.current.has(i)||xt(),o.type===`user_message`){!o.message.hidden&&!o.message.from&&(_n(fe,me),he.current.delete(n));let e=En(N,n),r={sessionId:n,gezelId:i,projectId:a,sessionTitle:e?.sessionTitle??s(o.message.content),sessionCreatedAt:e?.sessionCreatedAt??o.message.at,sessionLastActivityAt:o.message.at,sessionProviderName:e?.sessionProviderName??Z,...e?.sessionSource?{sessionSource:e.sessionSource}:t.sessionSource?{sessionSource:t.sessionSource}:{},...e?.sessionModel?{sessionModel:e.sessionModel}:{},...e?.taskRef?{taskRef:e.taskRef}:{},...e?.stepId?{stepId:e.stepId}:{},...e?.parentSession?{parentSession:e.parentSession}:t.parentSession?{parentSession:t.parentSession}:{},...e?.handoffFrom?{handoffFrom:e.handoffFrom}:t.handoffFrom?{handoffFrom:t.handoffFrom}:{},role:o.message.role,content:o.message.content,at:o.message.at,...o.message.from?{from:o.message.from}:{},...o.message.nudge?{nudge:!0}:{},...o.message.origin===`system`?{origin:`system`}:{}},c=`${n}:${o.message.at}:${o.message.role}`;if(P(e=>{if(o.message.hidden)return e;let t=e.filter(e=>!e.optimistic||!(e.sessionId===n&&e.role===o.message.role&&e.content===o.message.content));if(t.some(e=>`${e.sessionId}:${e.at}:${e.role}`===c))return t;let i=[...t,r];return i.sort((e,t)=>e.at<t.at?-1:+(e.at>t.at)),i}),o.message.role===`user`&&U.current.get(n)?.error&&U.current.delete(n),o.message.role===`user`&&!U.current.has(n)){let s=Date.parse(o.message.at),c=Number.isFinite(s)?s:Date.now();U.current.set(n,{gezelId:i,projectId:a,segments:[],startedAt:c,lastActivityAt:c,hasProgress:!1,...e?{sessionTitle:e.sessionTitle}:{sessionTitle:r.sessionTitle},...e?{sessionCreatedAt:e.sessionCreatedAt}:{sessionCreatedAt:r.sessionCreatedAt},...e?{sessionProviderName:e.sessionProviderName,...e.sessionModel?{sessionModel:e.sessionModel}:{}}:{},...e?.sessionSource?{sessionSource:e.sessionSource}:t.sessionSource?{sessionSource:t.sessionSource}:{},...e?.taskRef?{taskRef:e.taskRef}:{},...e?.parentSession?{parentSession:e.parentSession}:t.parentSession?{parentSession:t.parentSession}:{},...e?.handoffFrom?{handoffFrom:e.handoffFrom}:t.handoffFrom?{handoffFrom:t.handoffFrom}:{}}),H.markStructureChanged()}}else if(o.type===`delta`){let e=U.current.get(n)??l(i,a,n),t=e.segments[e.segments.length-1],r=Date.now(),s=r-e.lastActivityAt<5e3;t?.kind===`text`&&s?t.content+=o.content:e.segments.push({kind:`text`,content:o.content}),e.lastActivityAt=r,e.hasProgress=!0,delete e.queueAhead,delete e.queuedAt,e.wirePulseCount=0,e.thinkingLabel=void 0,delete e.thinkingProgress,delete e.thinkingDetail,delete e.liveToolArgs,U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`reasoning_delta`){let e=U.current.get(n)??l(i,a,n),t=e.segments[e.segments.length-1];t?.kind===`reasoning`?t.content+=o.content:e.segments.push({kind:`reasoning`,content:o.content}),e.lastActivityAt=Date.now(),e.hasProgress=!0,delete e.queueAhead,delete e.queuedAt,e.wirePulseCount=0,delete e.thinkingProgress,delete e.thinkingDetail,U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`tool_args_delta`){let e=U.current.get(n)??l(i,a,n),t=e.liveToolArgs,r=o.name.length>0?o.name:t?.name??``,s=((t?.head??``)+o.content).slice(0,400),c=((t?.tail??``)+o.content).slice(-2e3);e.liveToolArgs={name:r,chars:(t?.chars??0)+o.content.length,head:s,tail:c},e.lastActivityAt=Date.now(),e.hasProgress=!0,delete e.queueAhead,delete e.queuedAt,U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`wire_pulse`){let e=U.current.get(n)??l(i,a,n);e.wirePulseCount=(e.wirePulseCount??0)+1,e.lastActivityAt=Date.now(),e.hasProgress=!0,U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`intent`){let e=U.current.get(n)??l(i,a,n);e.segments.push({kind:`intent`,label:o.label}),e.lastActivityAt=Date.now(),e.hasProgress=!0,e.wirePulseCount=0,delete e.queueAhead,delete e.queuedAt,U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`heartbeat`){let e=U.current.get(n)??l(i,a,n);e.lastActivityAt=Date.now(),e.hasProgress=!0,e.wirePulseCount=0,e.thinkingLabel=o.label,U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`warning`){let e=U.current.get(n)??l(i,a,n);e.warnings=[...e.warnings??[],o],U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`queued`){let e=U.current.get(n)??l(i,a,n);e.queueAhead=o.aheadOf,e.queuedAt=Date.now(),U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`queue_enqueued`){let e=Je.current.get(n)??[],t={id:o.queueId,preview:o.preview,enqueuedAt:o.enqueuedAt,...o.nudge?{nudge:!0}:{}},r=e.findIndex(e=>e.id===o.queueId);r>=0?e[r]=t:e.push(t),Je.current.set(n,e),H.markStructureChanged()}else if(o.type===`queue_removed`){let e=Je.current.get(n);if(e){let t=e.filter(e=>e.id!==o.queueId);t.length===0?Je.current.delete(n):Je.current.set(n,t),H.markStructureChanged()}}else if(o.type===`tool`){let e=U.current.get(n)??l(i,a,n),t={name:o.name,durationMs:o.durationMs,success:o.success,...o.errorMessage?{errorMessage:o.errorMessage}:{},...o.path?{path:o.path}:{},...o.paths&&o.paths.length>0?{paths:o.paths}:{},...o.argsSummary?{argsSummary:o.argsSummary}:{},...o.argsFull?{argsFull:o.argsFull}:{},...o.resultText?{resultText:o.resultText}:{},...o.resultTruncated?{resultTruncated:!0}:{},...o.images&&o.images.length>0?{images:o.images}:{},...o.diff===void 0?{}:{diff:o.diff},...o.addedLines===void 0?{}:{addedLines:o.addedLines},...o.removedLines===void 0?{}:{removedLines:o.removedLines},...o.card?{card:o.card}:{},projectId:a};e.segments.push({kind:`tool`,tool:t}),e.lastActivityAt=Date.now(),e.hasProgress=!0,e.wirePulseCount=0,delete e.liveToolArgs,delete e.queueAhead,delete e.queuedAt,U.current.set(n,e),H.markItemChanged(n),r?.(t)}else if(o.type===`complete`){P(e=>e.map(e=>e.sessionId===n?{...e,sessionLastTurnError:void 0,sessionLastTurnErrorDetail:void 0}:e)),je(e=>{if(!e.has(n))return e;let t=new Map(e);return t.delete(n),t});let e=U.current.get(n);e&&(e.segments=[],e.lastActivityAt=Date.now(),e.hasProgress=!0,e.wirePulseCount=0,delete e.liveToolArgs,delete e.queueAhead,delete e.error,U.current.set(n,e)),H.markItemChanged(n),$();let t=o.message.content.trim().length;console.debug(`[narrate] complete event — contentLen=${t} gezelId=${i} projectId=${a} sessionId=${n} (buffering for done)`),t>0&&he.current.set(n,{content:o.message.content,gezelId:i,projectId:a})}else if(o.type===`error`){Ne(e=>{if(!e.has(a))return e;let t=new Set(e);return t.delete(a),t}),P(e=>e.map(e=>e.sessionId===n?{...e,sessionLastTurnError:o.error,sessionLastTurnErrorDetail:o.errorDetail}:e)),je(e=>{if(!e.has(n))return e;let t=new Map(e);return t.delete(n),t});let e=U.current.get(n);e&&(e.error=o.error,e.errorDetail=o.errorDetail,U.current.set(n,e),H.markItemChanged(n))}else if(o.type===`cancelled`)U.current.delete(n)&&H.markStructureChanged(),$();else if(o.type===`done`){let t=U.current.get(n),r=Pt(t?.activity);if(t&&!t.error&&r){let i=new Date().toISOString();R(a=>{let o=Ft(a,{sessionId:n,gezelId:t.gezelId,projectId:t.projectId,path:r,startedAt:new Date(t.startedAt).toISOString(),completedAt:i});return o===a?a:(Nt(e,o),o)})}t&&!t.error&&(U.current.delete(n),H.markStructureChanged());let i=he.current.get(n);i&&(he.current.delete(n),de.current&&(console.debug(`[narrate] done event — playing buffered narration chars=${i.content.length} sessionId=${n}`),yn(i.content,i.gezelId,i.projectId,fe,me))),$()}else if(o.type===`engine_phase`){let t=U.current.get(n)??l(i,a,n);if(t.lastActivityAt=Date.now(),t.hasProgress=!0,o.activity?.trim()&&(t.activity=o.activity.trim()),o.phase===`ready`)delete t.thinkingLabel,delete t.thinkingProgress,delete t.thinkingDetail,delete t.thinkingPhase;else{let e=tr[o.phase];o.progress===void 0?(t.thinkingLabel=o.detail??e,t.thinkingPhase!==o.phase&&(delete t.thinkingProgress,delete t.thinkingDetail)):(t.thinkingLabel=e,t.thinkingProgress=o.progress,o.detail?t.thinkingDetail=o.detail:delete t.thinkingDetail),t.thinkingPhase=o.phase}U.current.set(n,t),H.markItemChanged(n);let r=Pt(o.activity);if(r){let i=new Date().toISOString();R(a=>{let o=Ft(a,{sessionId:n,gezelId:t.gezelId,projectId:t.projectId,path:r,startedAt:new Date(t.startedAt).toISOString(),completedAt:i});return o===a?a:(Nt(e,o),o)})}}else if(o.type===`gpu_swap`){let e=U.current.get(n)??l(i,a,n);e.lastActivityAt=Date.now(),o.state===`ended`?(delete e.gpuSwapTask,delete e.gpuSwapDetail,delete e.gpuSwapPrompt,delete e.gpuSwapProgress,delete e.gpuSwapStep,delete e.gpuSwapTotalSteps,delete e.gpuSwapSecondsPerStep):(e.gpuSwapTask=o.task,o.detail?e.gpuSwapDetail=o.detail:o.state===`started`&&delete e.gpuSwapDetail,o.prompt&&(e.gpuSwapPrompt=o.prompt),typeof o.progress==`number`&&(e.gpuSwapProgress=o.progress),typeof o.step==`number`&&(e.gpuSwapStep=o.step),typeof o.totalSteps==`number`&&(e.gpuSwapTotalSteps=o.totalSteps),typeof o.secondsPerStep==`number`&&(e.gpuSwapSecondsPerStep=o.secondsPerStep)),U.current.set(n,e),H.markItemChanged(n)}else if(o.type===`awaiting_gezel`){let e=U.current.get(n)??l(i,a,n);e.lastActivityAt=Date.now(),o.state===`ended`?delete e.awaitingGezelName:e.awaitingGezelName=o.targetGezelName,U.current.set(n,e),H.markItemChanged(n)}else o.type===`context_compacted`?(o.mode!==`mid-turn`&&$(),H.markStructureChanged()):(o.type===`question_asked`||o.type===`question_answered`)&&(ze(e=>{let t=new Map(e);return o.type===`question_answered`&&!o.question.answer?t.delete(o.question.id):t.set(o.question.id,o.question),t}),o.type===`question_asked`&&$());function l(e,n,r){let i=En(N,r);H.markStructureChanged();let a=Date.now();return{gezelId:e,projectId:n,segments:[],startedAt:a,lastActivityAt:a,hasProgress:!1,...i?{sessionTitle:i.sessionTitle}:{},...i?{sessionCreatedAt:i.sessionCreatedAt}:{},...i?.taskRef?{taskRef:i.taskRef}:{},...i?.parentSession?{parentSession:i.parentSession}:t.parentSession?{parentSession:t.parentSession}:{},...i?.handoffFrom?{handoffFrom:i.handoffFrom}:t.handoffFrom?{handoffFrom:t.handoffFrom}:{},...i?.sessionSource?{sessionSource:i.sessionSource}:t.sessionSource?{sessionSource:t.sessionSource}:{}}}},[N,r,$,xt,Z,Y,X,e,H.markItemChanged,H.markStructureChanged]),wt=(0,I.useMemo)(()=>{let e=[];for(let[t,n]of U.current.entries())e.push({kind:`streaming`,sessionId:t,slot:n});let t=N.map(e=>({kind:`message`,msg:e,at:e.at})),n=e.map(e=>({kind:`streaming`,sessionId:e.sessionId,slot:e.slot,at:new Date(e.slot.lastActivityAt).toISOString(),threadAt:new Date(e.slot.startedAt).toISOString()})),r=ye.map(e=>({kind:`terminal`,entry:e,at:e.at})),i=[];for(let[e,t]of Ke.current.entries())i.push({kind:`terminal-streaming`,runId:e,slot:t,at:t.startedAt});let a=xe.map(e=>({kind:`indexing`,entry:e,at:e.completedAt})),o=[...t,...n,...a,...r,...i],s=Date.now();return o.sort((e,t)=>pn(e,t,s)),o},[N,xe,ye,Ue,qe,Se]),Tt=(0,I.useMemo)(()=>zn(hn(Vn(wt),t,Date.now())),[wt,t,Se]),Et=Tt.items,Dt=Tt.depthBySession,kt=Tt.branchBySession,At=(0,I.useMemo)(()=>{if(!h?.length)return[];let e=new Set;for(let[t,n]of U.current.entries()){let r=n.taskRef??En(N,t)?.taskRef;r&&e.add(r)}return h.filter(t=>{if(e.has(t.task.ref))return!1;let n=t.wait.sessionId;return!n||!U.current.has(n)&&!N.some(e=>e.sessionId===n)})},[h,N,Ue]);(0,I.useEffect)(()=>{let e=W.current;if(!e)return;let t=wt.length>J.current,n=e.scrollHeight>ut.current;J.current=wt.length,ut.current=e.scrollHeight,!(!t&&!n)&&Qe&&e.scrollTo({top:e.scrollHeight,behavior:`instant`})},[wt,Qe]);let jt=(0,I.useCallback)(()=>{dt.current===null&&(dt.current=requestAnimationFrame(()=>{dt.current=null;let e=W.current;if(!e)return;let t=e.scrollHeight,n=t>ut.current;ut.current=t,!(!n||!et.current)&&e.scrollTo({top:t,behavior:`instant`})}))},[]);(0,I.useLayoutEffect)(()=>{let e=W.current,t=Xe.current;if(!e||!t)return;let n=()=>{let n=Number.parseFloat(getComputedStyle(e).rowGap)||0,r=0,i=new Set,a=e.querySelectorAll(`[data-msg-id^="live:"], .terminal-group-streaming`);for(let e of a){if(i.has(e))continue;i.add(e),r+=e.getBoundingClientRect().height;let t=e.closest(`.timeline-thread-rootless`)?.previousElementSibling;t?.classList.contains(`timeline-session-divider-activity`)&&(r+=t.getBoundingClientRect().height+n);let a=e.closest(`.timeline-thread-replies`),o=a&&Number.parseFloat(getComputedStyle(a).rowGap)||n;r+=o}t.style.blockSize=`${Math.max(0,Yn-r)}px`};if(n(),typeof ResizeObserver>`u`)return;let r=new ResizeObserver(n);for(let t of e.querySelectorAll(`[data-msg-id^="live:"], .terminal-group-streaming`))r.observe(t);return()=>r.disconnect()},[Ue,qe]),(0,I.useEffect)(()=>{let e=W.current;if(!e||!G||nt===G.key)return;let t=null;if(G.kind===`chat`){let n=Date.parse(G.at),r=N.filter(e=>e.sessionId===G.sessionId&&e.role===`user`&&e.content===G.content).sort((e,t)=>Math.abs(Date.parse(e.at)-n)-Math.abs(Date.parse(t.at)-n))[0];if(r){let n=Cn(`msg:${r.sessionId}:${r.at}:${r.role}`);t=e.querySelector(`[data-msg-id="${n}"]`)}}else{let n=[...ye].reverse().find(e=>e.threadId===G.threadId&&e.msgKind===`command`&&(e.content===G.input||e.resolvedFrom===G.input));if(n){let r=Cn(n.messageId);t=e.querySelector(`[data-terminal-message-id="${r}"]`)}}if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=Math.max(0,e.scrollTop+r.top-n.top-12);et.current=!0,$e(!0),e.scrollTo({top:i}),rt(G.key)},[N,ye,G,nt]),(0,I.useEffect)(()=>{if(!T||it.current===T.requestKey)return;let e=W.current;if(!e)return;let t=Cn(T.threadId),n=e.querySelectorAll(`[data-terminal-thread-id="${t}"]`),r=n[n.length-1];r&&(it.current=T.requestKey,et.current=!1,$e(!1),typeof r.scrollIntoView==`function`&&r.scrollIntoView({block:`center`}),r.classList.add(`timeline-focus-flash`),window.setTimeout(()=>r.classList.remove(`timeline-focus-flash`),Xn))},[T,ye]);let Lt=(0,I.useCallback)((e,t)=>{let r=W.current;if(!r)return!1;let i=Cn(e),a=r.querySelector(`[data-session-error="${i}"]`),o=r.querySelectorAll(`[data-session-id="${i}"]`),s=null;if(t?.messageIndex!==void 0){let n=ve.current.filter(t=>t.sessionId===e),i=n[Math.max(0,Math.min(t.messageIndex-1,n.length-1))];i&&(s=r.querySelector(`[data-msg-id="${Cn(`msg:${i.sessionId}:${i.at}:${i.role}`)}"]`))}let c=s??a??o[o.length-1]??null;if(!c)return!1;if(et.current=!1,$e(!1),typeof c.scrollIntoView==`function`&&c.scrollIntoView({block:`center`}),c.classList.add(`timeline-focus-flash`),window.setTimeout(()=>c.classList.remove(`timeline-focus-flash`),Xn),t?.notifyParent!==!1){let t=ve.current.find(t=>t.sessionId===e);t&&n?.(e,t.gezelId,t.projectId)}return!0},[n]),Rt=(0,I.useRef)(null),[Bt,Vt]=(0,I.useState)(0),Ht=(0,I.useCallback)((e,t)=>{Rt.current={sessionId:e,notifyParent:t?.notifyParent!==!1,...t?.messageIndex===void 0?{}:{messageIndex:t.messageIndex}},Vt(e=>e+1)},[]);(0,I.useEffect)(()=>{let e=Rt.current;if(e){if(Lt(e.sessionId,{notifyParent:e.notifyParent,...e.messageIndex===void 0?{}:{messageIndex:e.messageIndex}})){Rt.current=null;return}if(!(De||K.current)){if(!we||!z){Rt.current=null;return}K.current=!0,(async()=>{try{let t=await y({limit:Un,before:z});if(Rt.current!==e)return;P(e=>[...t.messages,...e]),Te(t.hasMore),Ee(t.nextCursor)}catch{Rt.current===e&&(Rt.current=null)}finally{K.current=!1,Vt(e=>e+1)}})()}}},[wt,Bt,Lt,De,we,z,y]),(0,I.useEffect)(()=>{let e=e=>{let t=e.detail;t?.sessionId&&t.projectId===Y&&(Y&&le(Y),Ht(t.sessionId))};return window.addEventListener(`gezel:focus-session-error`,e),()=>window.removeEventListener(`gezel:focus-session-error`,e)},[Y,Ht]);let Ut=(0,I.useRef)(void 0);(0,I.useEffect)(()=>{if(Ut.current!==Y&&(Ut.current=Y,Rt.current=null),!Y)return;let e=le(Y);e&&Ht(e.sessionId)},[Y,Ht]),(0,I.useEffect)(()=>{E&&ot.current!==E.requestKey&&(ot.current=E.requestKey,Ht(E.sessionId,{notifyParent:!1,...E.messageIndex===void 0?{}:{messageIndex:E.messageIndex}}))},[E,Ht]);let Wt=(0,I.useCallback)(()=>{let e=W.current;if(!e){st(e=>e===null?e:null);return}let t=e.getBoundingClientRect(),n=e.parentElement;if(n){let t=e.offsetWidth-e.clientWidth;n.style.setProperty(`--chat-timeline-sb-width`,`${t}px`)}let r=e.parentElement?.querySelector(`.chat-sticky-header`);if(r){let e=r.getBoundingClientRect().height;e>0&&(lt.current=e)}let i=lt.current,a=t.top,o=t.top+i,s=null,c=0,l=null,u=null,d=null,f=e.querySelectorAll(`[data-msg-id]`);for(let e of f){let t=e.dataset.msgId,n=e.dataset.sessionId;if(!t)continue;let r=e.getBoundingClientRect(),i=r.top<a&&r.bottom>o,d=e.classList.contains(`msg-assistant`)||e.classList.contains(`msg-from-gezel`);i&&d&&(s=t,c=r.top,l=n??null,u=r)}if(n&&u){let e=n.getBoundingClientRect(),t=u.left-e.left;n.style.setProperty(`--chat-sticky-left`,`${t}px`),n.style.setProperty(`--chat-sticky-width`,`${u.width}px`)}if(s&&l)for(let e of f){let t=e.dataset.msgId,n=e.dataset.sessionId;!t||n!==l||e.classList.contains(`msg-user`)&&e.getBoundingClientRect().bottom<=c&&(d=t)}let p=s&&d?{userMessageId:d,assistantMessageId:s}:null;st(e=>e===p||e&&p&&e.userMessageId===p.userMessageId&&e.assistantMessageId===p.assistantMessageId?e:p)},[]),Gt=(0,I.useCallback)(()=>{ct.current===null&&(ct.current=requestAnimationFrame(()=>{ct.current=null,Wt()}))},[Wt]);(0,I.useEffect)(()=>{Gt()},[wt,Gt]),(0,I.useEffect)(()=>{let e=W.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(Gt);return t.observe(e),()=>t.disconnect()},[Gt]),(0,I.useEffect)(()=>()=>{ct.current!==null&&(cancelAnimationFrame(ct.current),ct.current=null),dt.current!==null&&(cancelAnimationFrame(dt.current),dt.current=null),Ze.current!==null&&(window.clearTimeout(Ze.current),Ze.current=null)},[]);let Kt=(0,I.useCallback)(()=>{Gt();let e=W.current;if(!e)return;e.classList.add(`chat-timeline-scrolling`),Ze.current!==null&&window.clearTimeout(Ze.current),Ze.current=window.setTimeout(()=>{W.current?.classList.remove(`chat-timeline-scrolling`),Ze.current=null},Jn);let t=e.scrollHeight-(e.scrollTop+e.clientHeight)<=Kn;if(et.current=t,$e(e=>e===t?e:t),e.scrollTop<=qn&&we&&!De&&!K.current&&z){K.current=!0;let t=e.scrollHeight,n=e.scrollTop;(async()=>{try{let e=await y({limit:Un,before:z});P(t=>[...e.messages,...t]),Te(e.hasMore),Ee(e.nextCursor),requestAnimationFrame(()=>{let e=W.current;e&&e.scrollTo({top:e.scrollHeight-t+n,behavior:`instant`}),K.current=!1,Rt.current&&Vt(e=>e+1)})}catch{K.current=!1,Rt.current&&Vt(e=>e+1)}})()}},[we,De,z,y,Gt]),qt=(0,I.useCallback)(()=>{$e(e=>{let t=!e;if(et.current=t,t){let e=W.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`instant`})}return t})},[]),Jt=(0,I.useMemo)(()=>{if(!q)return null;let e=N.find(e=>`msg:${e.sessionId}:${e.at}:${e.role}`===q.userMessageId);if(!e)return null;let t=null;if(q.assistantMessageId.startsWith(`live:`)){let e=q.assistantMessageId.slice(5);U.current.has(e)&&(t={kind:`live`,sessionId:e})}else{let e=N.find(e=>`msg:${e.sessionId}:${e.at}:${e.role}`===q.assistantMessageId);e&&(t={kind:`message`,msg:e})}return t?{userMsg:e,assistantInfo:t}:null},[q,N,Ue]),Xt=At.slice(0,Qn),Zt=At.length-Xt.length,Qt=(0,L.jsxs)(L.Fragment,{children:[Xt.map(e=>(0,L.jsx)(zt,{task:e.task,wait:e.wait,gezel:V.get(e.wait.gezelId),onTaskReference:e=>window.dispatchEvent(new CustomEvent(`gezel:open-tab`,{detail:{kind:`task`,ref:e}}))},`queued-task:${e.task.ref}`)),Zt>0&&(0,L.jsxs)(`p`,{className:`msg-queued-task-overflow muted small`,children:[`+ `,Zt,` more task`,Zt===1?``:`s`,` waiting in the queue.`]})]}),$t=(e,t)=>{je(n=>{let r=new Map(n);return t?r.set(e,t):r.delete(e),r})},en=async(e,t)=>{$t(e,{busy:`acknowledge`});let n=new AbortController,r=window.setTimeout(()=>n.abort(),$n);try{await _.clearProjectErrors(t,n.signal),window.dispatchEvent(new CustomEvent(`gezel:session-error-cleared`,{detail:{projectId:t}}))}catch{$t(e,{error:n.signal.aborted?`Clearing the alert took too long. Check the connection and try again.`:`Could not clear the alert. Check the connection and try again.`})}finally{window.clearTimeout(r)}},nn=async e=>{$t(e,{busy:`retry`});try{await _.retryChatSessionTurn(e)}catch{$t(e,{error:`Retry could not start. Check the connection or settings, then try again.`})}},rn=(e,t,n,r,i)=>{let a=Ae.get(e),s=a?.busy;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`div`,{className:`timeline-session-error-actions`,"aria-label":`Failed turn actions`,children:[kn(t,n)&&(0,L.jsx)(`button`,{type:`button`,className:`timeline-session-error-action timeline-session-error-action-primary`,disabled:s!==void 0,onClick:()=>void nn(e),children:s===`retry`?`Retrying…`:`Retry`}),Dn(t)&&(0,L.jsx)(`button`,{type:`button`,className:`timeline-session-error-action secondary`,disabled:s!==void 0,onClick:()=>window.dispatchEvent(new CustomEvent(`gezel:navigate`,{detail:{view:`settings`,section:`defaults`}})),children:`Open Settings`}),r&&(0,L.jsx)(`button`,{type:`button`,className:`timeline-session-error-action secondary`,title:`Clear this project's failed-turn alerts without rerunning the work`,disabled:s!==void 0,onClick:()=>void en(e,r),children:s===`acknowledge`?`Acknowledging…`:`Acknowledge`}),!o(t)&&!On(n)&&(0,L.jsx)(se,{className:`timeline-session-error-link`,report:{surface:i,message:t,detail:n}})]}),a?.error&&(0,L.jsx)(`p`,{className:`timeline-session-error-action-error`,role:`alert`,children:a.error})]})};if(De&&N.length===0)return(0,L.jsx)(`div`,{className:`chat-timeline chat-timeline-loading`,children:(0,L.jsx)(`p`,{className:`muted small`,children:`Loading…`})});if(Oe)return(0,L.jsx)(`div`,{className:`chat-timeline chat-timeline-error`,children:(0,L.jsx)(`p`,{className:`error`,children:Oe})});if(wt.length===0)return(0,L.jsxs)(`div`,{className:`chat-timeline`,ref:W,"data-testid":`chat-timeline`,children:[v??(g?(0,L.jsx)(`p`,{className:`placeholder`,children:g}):null),Qt]});let an=null,sn=null,cn,ln=null,dn=new Set,fn=new Map,mn=new Set;for(let e of N)e.pendingQuestionId&&mn.add(e.pendingQuestionId);let gn=new Map;for(let e of Re.values()){if(mn.has(e.id))continue;let t=gn.get(e.sessionId);(!t||e.createdAt>t.createdAt)&&gn.set(e.sessionId,e)}let vn=new Map;for(let e of N){if(e.role!==`assistant`||e.pendingQuestionId||!er(e))continue;let t=`${e.sessionId}\u0000${e.at}\u0000${e.role}`,n=vn.get(e.sessionId);(!n||e.at>n.at)&&vn.set(e.sessionId,{key:t,at:e.at})}let An=new Map,In=new Map;for(let[e,t]of gn){let n=vn.get(e);n?An.set(n.key,t):t.answer||In.set(e,t)}let Rn=[],Bn=(e,t,n,r)=>{Rn.push((0,L.jsxs)(`div`,{className:`timeline-session-error-banner`,"data-session-error":e,role:`alert`,children:[(0,L.jsxs)(`div`,{className:`timeline-session-error-body`,children:[(0,L.jsx)(`span`,{"aria-hidden":`true`,children:`✗`}),(0,L.jsxs)(`span`,{children:[(0,L.jsx)(`strong`,{children:`Last turn failed.`}),` `,t]})]}),rn(e,t,n,r,`session-error`)]},`session-error:${e}`))},nr=e=>{m?m(e,{focus:!0}):window.dispatchEvent(new CustomEvent(`gezel:open-tab`,{detail:{kind:`task`,ref:e}}))},rr=(e,n)=>{let r=V.get(e.gezelId),a=e.sessionId===t,o=Mn(e.sessionLastActivityAt,on),s=!a&&!o,f=D&&e.projectId!=="default"?Ie.get(e.projectId):void 0,m=e.from?e.from.gezelId:e.gezelId,h=V.get(m)?.font,g=d(h),_=l(h),v=jn(e),y=(e.pendingQuestionId?Re.get(e.pendingQuestionId):void 0)??An.get(`${e.sessionId}\u0000${e.at}\u0000${e.role}`);return(0,L.jsx)(ae,{dataMsgId:`msg:${e.sessionId}:${e.at}:${e.role}`,dataSessionId:e.sessionId,debugMode:mt,sessionId:e.sessionId,messageAt:e.at,role:e.role,content:e.content,authorLabel:r?c({name:r.name,roleBasedName:r.roleBasedName},ie):`Gezel`,authorIcon:r?.icon??null,...r?.poppetje?{authorPoppetje:r.poppetje}:{},...r?.iconOverride?{authorIconOverride:!0}:{},authorTooltip:vt(e.gezelId),...(()=>{let t=yt(e.sessionProviderName,e.sessionModel);return t?{driftLabel:t}:{}})(),...!ie&&r?.role?{authorRole:r.role}:{},...e.from?{from:e.from}:{},...e.nudge?{nudge:!0}:{},...e.origin===`system`?{origin:`system`}:{},receiverLabel:r?c({name:r.name,roleBasedName:r.roleBasedName},ie):`Gezel`,...g?{fontFamily:g}:{},..._===1?{}:{fontScale:_},...f?{projectLabel:f.name}:{},extraClass:s?`timeline-msg-faded`:void 0,mediaProvider:Ye(e.projectId,e.sessionId),...v.length>0?{referencedFiles:v}:{},...e.retrieval&&e.retrieval.hits.length>0?{retrieval:e.retrieval}:{},...e.referencedTasks?{referencedTasks:e.referencedTasks}:{},...e.toolCalls&&e.toolCalls.length>0?{toolCalls:e.toolCalls,projectId:e.projectId}:{},...p?{onOpenReference:p}:{},...e.reasoning?{reasoning:e.reasoning}:{},...e.reasoningDurationMs===void 0?{}:{reasoningDurationMs:e.reasoningDurationMs},...e.attemptedToolCalls&&e.attemptedToolCalls.length>0?{attemptedToolCalls:e.attemptedToolCalls}:{},...n?.recoveredInNextTurn?{recoveredInNextTurn:!0}:{},...n?.suppressHeader?{suppressHeader:!0}:{},...n?.timestampLabel?{timestampLabel:n.timestampLabel}:{},...e.intents&&e.intents.length>0?{intents:e.intents}:{},...e.warnings&&e.warnings.length>0?{warnings:e.warnings}:{},...e.synthetic?{synthetic:e.synthetic}:{},...e.contextCompaction?{contextCompaction:e.contextCompaction}:{},...y?{question:y,onQuestionAnswered:e=>ze(t=>{let n=new Map(t);return n.set(e.id,e),n})}:{},...i||u?{onFileReference:t=>{t.kind===`workspace`?u?.(t.path,e.projectId):i?.(t.path,e.projectId)}}:{},onTaskReference:e=>window.dispatchEvent(new CustomEvent(`gezel:open-tab`,{detail:{kind:`task`,ref:e}})),onFocusTask:nr},`msg:${e.sessionId}:${e.at}:${e.role}`)},ir=(e,t)=>{let n=[],r=V.get(t.gezelId),i=d(r?.font),a=l(r?.font);n.push((0,L.jsx)(k,{dataMsgId:`live:${e}`,dataSessionId:e,authorLabel:r?c({name:r.name,roleBasedName:r.roleBasedName},ie):`Gezel`,authorIcon:r?.icon??null,...r?.poppetje?{authorPoppetje:r.poppetje}:{},...r?.iconOverride?{authorIconOverride:!0}:{},authorTooltip:vt(t.gezelId),...(()=>{if(!t.sessionProviderName)return{};let e=yt(t.sessionProviderName,t.sessionModel);return e?{driftLabel:e}:{}})(),...!ie&&r?.role?{authorRole:r.role}:{},segments:t.segments,...p?{onOpenReference:p}:{},onFocusTask:nr,startedAt:t.startedAt,lastActivityAt:t.lastActivityAt,hasProgress:t.hasProgress,..._t(t.gezelId)===`ollama`?{onProbeOllama:()=>_.ollamaProbe()}:{},..._t(t.gezelId)===`ollama`?{localEngine:`ollama`}:_t(t.gezelId)===`llama-cpp`?{localEngine:`llama-cpp`}:_t(t.gezelId)===`ds4`?{localEngine:`ds4`}:{},...t.sessionSource||e.startsWith(`one-shot:`)?{}:{onCancel:async()=>{try{await _.cancelChatSessionTurn(e)}catch(e){console.warn(`[timeline] failed to cancel turn:`,e)}},onReEngage:async()=>{try{await _.cancelChatSessionTurn(e)}catch(e){console.warn(`[timeline] re-engage: cancel failed:`,e)}try{await _.sendToChatSession(e,{message:`Please continue where you left off and finish the work you started.`})}catch(e){console.warn(`[timeline] re-engage: send failed:`,e)}}},...i?{fontFamily:i}:{},...a===1?{}:{fontScale:a},...t.error?{error:t.error}:{},...t.errorDetail?{errorDetail:t.errorDetail}:{},...t.error?{errorActions:rn(e,t.error,t.errorDetail,t.projectId,`chat-turn`)}:{},...t.queueAhead===void 0?{}:{queueAhead:t.queueAhead},...t.queuedAt===void 0?{}:{queuedAt:t.queuedAt},...t.wirePulseCount&&t.wirePulseCount>0?{wirePulseCount:t.wirePulseCount}:{},...oe(t)?{thinkingLabel:oe(t)}:{},...t.thinkingProgress===void 0?{}:{thinkingProgress:t.thinkingProgress},...t.thinkingDetail?{thinkingDetail:t.thinkingDetail}:{},...t.liveToolArgs?{liveToolArgs:t.liveToolArgs}:{},...t.gpuSwapTask?{gpuSwapTask:t.gpuSwapTask}:{},...t.gpuSwapDetail?{gpuSwapDetail:t.gpuSwapDetail}:{},...t.gpuSwapPrompt?{gpuSwapPrompt:t.gpuSwapPrompt}:{},...t.gpuSwapProgress===void 0?{}:{gpuSwapProgress:t.gpuSwapProgress},...t.gpuSwapStep===void 0?{}:{gpuSwapStep:t.gpuSwapStep},...t.gpuSwapTotalSteps===void 0?{}:{gpuSwapTotalSteps:t.gpuSwapTotalSteps},...t.gpuSwapSecondsPerStep===void 0?{}:{gpuSwapSecondsPerStep:t.gpuSwapSecondsPerStep},...t.awaitingGezelName?{awaitingGezelName:t.awaitingGezelName}:{},...t.warnings&&t.warnings.length>0?{warnings:t.warnings}:{},...In.get(e)?{question:In.get(e),onQuestionAnswered:e=>ze(t=>{let n=new Map(t);return n.set(e.id,e),n})}:{},debugMode:mt,sessionId:e},`live:${e}`));let o=Je.current.get(e);if(o&&o.length>0)for(let r of o)n.push((0,L.jsx)(pe,{sessionId:e,queueId:r.id,preview:r.preview,enqueuedAt:r.enqueuedAt,mediaProvider:Ye(t.projectId,e),...r.nudge?{nudge:!0}:{},onDiscard:async()=>{try{await _.cancelQueuedMessage(e,r.id)}catch(e){console.warn(`[timeline] failed to discard queued message:`,e)}},onCancelCurrent:async()=>{try{await _.cancelChatSessionTurn(e)}catch(e){console.warn(`[timeline] failed to cancel current turn:`,e)}},onLoadText:async()=>{try{return(await _.listSessionQueue(e)).entries.find(e=>e.queueId===r.id)?.text??null}catch{return null}},onSaveEdit:async t=>{try{return await _.updateQueuedMessage(e,r.id,{message:t}),!0}catch(e){if(/not found/i.test(e.message??``))return!1;throw e}}},`ghost:${r.id}`));return n};for(let e of Et){if(e.kind===`indexing`){Rn.push((0,L.jsx)(It,{receipt:e.entry,gezels:V,projects:Ie,showProjectName:D,roleBasedNameOnlyMode:ie,...u?{onOpenWorkspaceFile:u}:{}},e.entry.id));continue}if(e.kind===`terminal`){let t=e.entry,n=fn.get(t.threadId),r=!n,i=n?Math.max(0,new Date(t.at).getTime()-new Date(n.at).getTime()):0;(r||i>Zn)&&Rn.push(Sn({entry:t,key:`terminal-divider:${t.threadId}:${t.messageId}`})),Rn.push((0,L.jsx)(Yt,{entry:t,...u?{onOpenWorkspaceFile:e=>u(e,t.projectId)}:{}},`terminal:${t.threadId}:${t.messageId}`)),fn.set(t.threadId,t);continue}if(e.kind===`terminal-streaming`){let t=e.slot.projectId,n=e.runId;Rn.push((0,L.jsx)(Pn,{store:Ge,itemKey:n,onRendered:jt,render:e=>(0,L.jsx)(tn,{content:e.content,cwd:e.cwd,startedAt:e.startedAt,...e.awaitingInput?{awaitingInput:e.awaitingInput}:{},onCancel:()=>{_.cancelTerminalRun(t,n).catch(()=>{})},onSendInput:e=>{let r=Ke.current.get(n);r&&(delete r.awaitingInput,Ge.markItemChanged(n)),_.sendTerminalInput(t,n,e).catch(e=>{console.warn(`[ChatTimelineView] sendTerminalInput failed`,e)})}})},`terminal-streaming:${n}`));continue}let r=e.sessionId,i=Dt.get(r)??0,a=kt.get(r),o=e.root??e.replies[0];if(!o)continue;if(r!==an){an&&sn&&!U.current.has(an)&&Bn(an,sn,cn,ln);let s=dn.has(r);Rn.push(xn({row:o,gezels:V,projects:Ie,showProjectName:D,activeSessionId:t,onFocusSession:n,continuing:s,depth:i,...a?{treeBranch:a}:{},key:`divider:${r}:${e.at}`,roleBasedNameOnlyMode:ie})),dn.add(r),an=r,sn=null,cn=void 0,ln=null}let s=e.root??e.replies.find(e=>e.kind===`message`);s&&s.kind===`message`&&s.msg.sessionLastTurnError&&!Me.has(s.msg.projectId)&&(sn=s.msg.sessionLastTurnError,cn=s.msg.sessionLastTurnErrorDetail,ln=s.msg.projectId);let c=[];if(e.root&&c.push(rr(e.root.msg,{timestampLabel:x(e.root.at)})),e.replies.length>0){let t=[];for(let n=0;n<e.replies.length;n++){let r=e.replies[n];if(r.kind===`streaming`){t.push((0,L.jsx)(Pn,{store:H,itemKey:r.sessionId,onRendered:jt,render:e=>ir(r.sessionId,e)},`live-slot:${r.sessionId}`));continue}let i=r.msg,a=n>0?e.replies[n-1]:void 0,o=a?a.at:e.root?.at,s=(o?Math.max(0,Date.parse(i.at)-Date.parse(o)):0)>Gn,c=a?.kind===`message`&&a.msg.gezelId===i.gezelId,l=e.replies[n+1],u=i.role===`assistant`&&i.content.trim().length===0&&!!i.toolCalls&&i.toolCalls.length>0&&l!==void 0&&l.kind===`message`&&l.msg.sessionId===i.sessionId&&l.msg.role===`assistant`&&l.msg.content.trim().length>0;t.push(rr(i,{...c&&!s?{suppressHeader:!0}:{},...s?{timestampLabel:x(i.at)}:{},...u?{recoveredInNextTurn:!0}:{}}))}c.push((0,L.jsx)(`div`,{className:`timeline-thread-replies`,children:t},`replies`))}let l=a?.hasChildren===!0||i===0&&e.replies.length>0&&(!e.root||!e.root.msg.from);Rn.push((0,L.jsxs)(`div`,{className:`timeline-thread${i>0?` timeline-session-subthread timeline-session-depth-${Math.min(i,4)}`:``}${a?.hasChildren?` timeline-session-parent`:``}${e.root?``:` timeline-thread-rootless`}${l?` timeline-thread-railed`:``}`,children:[i>0&&a&&(0,L.jsx)(bn,{branch:a,phase:`thread`}),c]},`thread:${r}:${e.at}`))}return an&&sn&&!U.current.has(an)&&Bn(an,sn,cn,ln),(0,L.jsxs)(`div`,{className:`chat-timeline-viewport`,children:[Jt&&(Jt.assistantInfo.kind===`live`?(0,L.jsx)(Fn,{store:H,sessionId:Jt.assistantInfo.sessionId,userMsg:Jt.userMsg,gezels:V}):(0,L.jsx)(Ot,{payload:{userMsg:Jt.userMsg,assistantInfo:{kind:`message`,msg:Jt.assistantInfo.msg}},gezels:V})),(0,L.jsxs)(`div`,{className:`chat-timeline`,ref:W,onScroll:Kt,"data-testid":`chat-timeline`,children:[we&&(0,L.jsx)(`div`,{className:`timeline-loading-pill muted small`,children:K.current?`Loading older messages…`:`Scroll up for older messages`}),Rn.length===0?v??(g?(0,L.jsx)(`p`,{className:`placeholder`,children:g}):null):Rn,Qt,(0,L.jsx)(`div`,{ref:Xe,className:`timeline-response-runway`,"aria-hidden":`true`})]}),!Qe&&(0,L.jsx)(`button`,{type:`button`,className:`chat-timeline-pin-toggle`,onClick:qt,title:`Jump to newest and follow`,"aria-label":`Jump to newest and follow`,children:(0,L.jsxs)(`svg`,{className:`chat-timeline-pin-glyph`,width:`16`,height:`16`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`,role:`img`,"aria-hidden":!0,children:[(0,L.jsx)(`title`,{children:`Jump to newest`}),(0,L.jsx)(`line`,{x1:`12`,y1:`4`,x2:`12`,y2:`15`}),(0,L.jsx)(`polyline`,{points:`6 10 12 16 18 10`}),(0,L.jsx)(`line`,{x1:`5`,y1:`20`,x2:`19`,y2:`20`})]})})]})}export{X as a,yt as i,sn as n,dt as o,wt as r,nr as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-CEpd2cAX.js";import{$t as r,M as i,Mt as a,W as o,bn as s,jt as c,tn as l}from"./dist-DOqbRmFj.js";import{t as u}from"./api-C0I7spBl.js";import{i as d,n as f,r as p}from"./Tabs-jE0Z5Tzd.js";import{d as m,l as h,m as g,p as _,s as v}from"./primitives-CWrGZpPI.js";import{C as y,X as b}from"./index-DDu8nyO6.js";import{i as x}from"./ChatTimelineView-Cg_kLK_U.js";import{t as S}from"./ProjectTimeline-CTPcn4Kc.js";import{t as C}from"./MarkdownField-Dugmfr_e.js";var w=e(t(),1),T=n(),E=`default`;function D({craftbookId:e,craftbookName:t,readOnly:n}){let r=y(),[i,a]=(0,w.useState)([]),[s,c]=(0,w.useState)(``);(0,w.useEffect)(()=>{u.listGezels().then(e=>a(e.gezels)).catch(()=>{})},[]),(0,w.useEffect)(()=>{c(``)},[e]);let l=(0,w.useMemo)(()=>i.find(e=>e.role===`voorman`)??i.find(e=>e.role===`meester`)??i[0],[i]),d=t=>{t?.startsWith(`craftbook_`)&&window.dispatchEvent(new CustomEvent(`gezel:craftbook-edited`,{detail:{id:e}}))};if(n)return(0,T.jsx)(`div`,{className:`craftbook-chat-pane muted small`,children:`This craftbook is read-only — fork it to a local copy to edit it with AI.`});if(!l)return(0,T.jsx)(`div`,{className:`craftbook-chat-pane muted small`,children:`No gezel available yet. Create a voorman or the Meester first, then come back.`});let f=o(l,r);return(0,T.jsxs)(`div`,{className:`craftbook-chat-pane task-detail-chat`,children:[(0,T.jsx)(S,{projectId:E,activeSessionId:s||void 0,onFocusSession:(e,t)=>{t===l.id&&c(e)},onToolActivity:e=>d(e.name)}),(0,T.jsx)(x,{gezelId:l.id,gezelName:l.name,gezelRoleBasedName:l.roleBasedName,gezelRole:l.role,gezelIcon:l.icon??null,...l.poppetje?{gezelPoppetje:l.poppetje}:{},...l.iconOverride?{gezelIconOverride:l.iconOverride}:{},projectId:E,sessionId:s||void 0,onSessionCreated:e=>c(e),onToolActivity:e=>d(e.name),craftbookRef:e,placeholder:`Ask ${f} to shape “${t}” — add steps, set roles, wire gates…`})]})}function O(e){window.dispatchEvent(new CustomEvent(`gezel:open-tab`,{detail:e}))}function k({craftbookId:e,steps:t,stepId:n,entryStepId:r,gezels:i,readOnly:o,busy:s,onPatch:l,onRemove:u,onSetEntry:d}){let f=n?t.find(e=>e.id===n)??null:null,[p,y]=(0,w.useState)(n),b=(0,w.useRef)(f?.name??``),x=(0,w.useRef)(f?.description??``),S=(0,w.useRef)(f?.prompt??``),E=(0,w.useRef)(f?.suggestedRole??``);if((0,w.useEffect)(()=>{b.current=f?.name??``,x.current=f?.description??``,S.current=f?.prompt??``,E.current=f?.suggestedRole??``,y(f?.id??null)},[f?.id,f?.name,f?.description,f?.prompt,f?.suggestedRole]),!f)return(0,T.jsx)(`section`,{className:`task-step-panel empty`,children:(0,T.jsx)(`p`,{className:`muted small`,children:t.length===0?`No steps yet — add one with the + button to begin.`:`Select a step above to view and edit it.`})});let D=f.id===r,k=e=>{o||l(f.id,e)},A=()=>{let e=b.current.trim();!e||e===f.name||k({name:e})},j=()=>{x.current!==(f.description??``)&&k({description:x.current})},M=()=>{S.current!==(f.prompt??``)&&k({prompt:S.current})},N=()=>{let e=E.current.trim();e!==(f.suggestedRole??``)&&k({suggestedRole:e||null})},P=f.assignee?f.assignee.kind===`user`?`__user`:f.assignee.gezelId:f.suggestedGezelId?f.suggestedGezelId:`__none`,F=e=>{k(e===`__user`?{assignee:{kind:`user`},suggestedGezelId:null}:e===`__none`?{assignee:null,suggestedGezelId:null}:{assignee:null,suggestedGezelId:e})},I=f.terminal?`__terminal`:f.next??`__linear`,L=e=>{k(e===`__terminal`?{terminal:!0,next:null}:e===`__linear`?{terminal:!1,next:null}:{terminal:!1,next:e})},R=t=>{let n=c(t===`enter`?f.onEnter:f.onExit),r=t===`enter`?`onEnter`:`onExit`,i=e=>k({[r]:e.length>0?e:null});return(0,T.jsxs)(`div`,{className:`step-script-row`,children:[(0,T.jsx)(`span`,{className:`step-script-moment muted small`,children:t===`enter`?`when it starts`:`when it finishes`}),n.length===0&&o&&(0,T.jsx)(`span`,{className:`muted small`,children:`—`}),n.map((t,r)=>(0,T.jsxs)(`span`,{className:`step-script-chip`,children:[(0,T.jsxs)(`button`,{type:`button`,className:`link-button`,onClick:()=>{(t.scope===void 0||t.scope===`craftbook`)&&O({kind:`craftbook-script`,craftbookId:e,name:t.name})},title:t.scope?`${t.scope} script`:`Open this script in the editor`,children:[`⚙ `,t.name,t.scope&&t.scope!==`craftbook`?` (${t.scope})`:``]}),!o&&(0,T.jsx)(`button`,{type:`button`,className:`link-button muted`,onClick:()=>i(n.filter((e,t)=>t!==r)),children:`detach`})]},`${t.scope??`craftbook`}:${t.name}:${r}`)),!o&&(0,T.jsx)(`button`,{type:`button`,className:`link-button`,onClick:()=>{let r=`${f.id}-${t}${n.length>0?`-${n.length+1}`:``}`;i([...n,{name:r}]),O({kind:`craftbook-script`,craftbookId:e,name:r})},children:`+ attach script`})]})},z=[];if(f.gate){let e=a(f.gate),t=[...e.checks.length>0?[`${e.checks.length} check(s)`]:[],...e.scripts.length>0?[`${e.scripts.length} script(s)`]:[]];z.push(`gate at ${e.at}: ${t.join(` + `)||`empty`}`)}return f.advanceWhen&&z.push(`auto-advance on ${f.advanceWhen.file}`),f.branches&&f.branches.length>0&&z.push(`${f.branches.length} branch(es)`),(0,T.jsxs)(`section`,{className:`task-step-panel`,children:[(0,T.jsxs)(`header`,{className:`task-step-panel-header`,children:[(0,T.jsxs)(`div`,{className:`task-step-panel-title`,children:[(0,T.jsx)(`h4`,{children:f.name}),D&&(0,T.jsx)(`span`,{className:`step-status-pill status-active`,children:`Entry`})]}),!o&&(0,T.jsxs)(`div`,{className:`task-step-panel-actions`,children:[(0,T.jsx)(`button`,{type:`button`,className:`secondary`,onClick:()=>void d(f.id),disabled:s||D,title:`Make this the craftbook's entry step`,children:`Set as entry`}),(0,T.jsx)(`button`,{type:`button`,className:`danger`,onClick:()=>void u(f.id),disabled:s||t.length<=1,title:t.length<=1?`A craftbook needs at least one step`:`Delete this step`,children:`Delete`})]})]}),(0,T.jsxs)(`div`,{className:`task-step-panel-grid`,children:[(0,T.jsxs)(`label`,{className:`task-step-field`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Name`}),(0,T.jsx)(`input`,{defaultValue:f.name,disabled:o,onChange:e=>{b.current=e.target.value},onBlur:A},`name-${p}`)]}),(0,T.jsxs)(`label`,{className:`task-step-field`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Indexed context`}),(0,T.jsxs)(m,{value:f.retrieval?.mode??`__inherit`,disabled:o||s,onValueChange:e=>k(e===`__inherit`?{retrieval:null}:{retrieval:{mode:e,...f.retrieval?.maxTokens?{maxTokens:f.retrieval.maxTokens}:{},...f.retrieval?.sources?{sources:f.retrieval.sources}:{}}}),children:[(0,T.jsx)(_,{children:(0,T.jsx)(g,{})}),(0,T.jsxs)(v,{children:[(0,T.jsx)(h,{value:`__inherit`,children:`Inherit from gezel`}),(0,T.jsx)(h,{value:`off`,children:`Off — tools only`}),(0,T.jsx)(h,{value:`lean`,children:`Lean — paths and hints`}),(0,T.jsx)(h,{value:`balanced`,children:`Balanced — a few excerpts`}),(0,T.jsx)(h,{value:`deep`,children:`Deep — broad evidence`})]})]})]}),(0,T.jsxs)(`label`,{className:`task-step-field`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Context token cap`}),(0,T.jsx)(`input`,{type:`number`,min:0,max:16e3,defaultValue:f.retrieval?.maxTokens??``,disabled:o||s||!f.retrieval||f.retrieval.mode===`off`,placeholder:`Mode default`,onBlur:e=>{if(!f.retrieval)return;let t=e.currentTarget.value.trim(),n=t?Number.parseInt(t,10):void 0;if(n!==void 0&&!Number.isFinite(n)||n===f.retrieval.maxTokens)return;let{maxTokens:r,...i}=f.retrieval;k({retrieval:n===void 0?i:{...i,maxTokens:n}})}},`retrieval-budget-${p}`)]}),(0,T.jsxs)(`label`,{className:`task-step-field`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Suggested role`}),(0,T.jsx)(`input`,{defaultValue:f.suggestedRole??``,disabled:o,placeholder:`developer, reviewer, designer…`,onChange:e=>{E.current=e.target.value},onBlur:N},`role-${p}`)]}),(0,T.jsxs)(`label`,{className:`task-step-field`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Assignee (override)`}),(0,T.jsxs)(m,{value:P,disabled:o||s,onValueChange:F,children:[(0,T.jsx)(_,{children:(0,T.jsx)(g,{})}),(0,T.jsxs)(v,{children:[(0,T.jsx)(h,{value:`__none`,children:`— by role —`}),(0,T.jsx)(h,{value:`__user`,children:`→ You`}),i.map(e=>(0,T.jsxs)(h,{value:e.id,children:[`→ `,e.name]},e.id))]})]})]}),(0,T.jsxs)(`label`,{className:`task-step-field`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Next step`}),(0,T.jsxs)(m,{value:I,disabled:o||s,onValueChange:L,children:[(0,T.jsx)(_,{children:(0,T.jsx)(g,{})}),(0,T.jsxs)(v,{children:[(0,T.jsx)(h,{value:`__linear`,children:`→ next in order`}),(0,T.jsx)(h,{value:`__terminal`,children:`■ terminal (ends here)`}),t.filter(e=>e.id!==f.id).map(e=>(0,T.jsxs)(h,{value:e.id,children:[`→ `,e.name]},e.id))]})]})]}),(0,T.jsxs)(`div`,{className:`task-step-field full-width`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Description`}),(0,T.jsx)(C,{value:f.description??``,readOnly:o,placeholder:`What this step produces, who it's for, what 'done' looks like.`,onCommit:e=>{x.current=e,j()}},`desc-${p}`)]}),(0,T.jsxs)(`div`,{className:`task-step-field full-width`,children:[(0,T.jsxs)(`span`,{className:`task-step-field-label`,children:[`Prompt `,(0,T.jsx)(`span`,{className:`muted small`,children:`— step-specific guidance for the assignee`})]}),(0,T.jsx)(C,{value:f.prompt??``,readOnly:o,placeholder:`Instructions the assignee can lean on for this step.`,onCommit:e=>{S.current=e,M()}},`prompt-${p}`)]}),(0,T.jsxs)(`div`,{className:`task-step-field full-width`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Scripts`}),(0,T.jsxs)(`div`,{className:`step-scripts`,children:[R(`enter`),R(`exit`)]})]}),z.length>0&&(0,T.jsxs)(`div`,{className:`task-step-field full-width`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Routing`}),(0,T.jsxs)(`p`,{className:`muted small`,children:[z.join(` · `),` — edit gates/branches/auto-advance via the AI assist.`]})]})]})]})}function A(e){window.dispatchEvent(new CustomEvent(`gezel:open-tab`,{detail:e}))}function j(e){return{name:e.name,description:e.description??null,plan:e.plan??null,defaultAssignee:e.defaultAssignee??null,steps:e.steps,entryStepId:e.entryStepId}}function M({craftbookId:e,source:t,onChanged:n}){let[a,o]=(0,w.useState)(null),[c,m]=(0,w.useState)(t??`local`),[h,g]=(0,w.useState)([]),[_,v]=(0,w.useState)(null),[y,x]=(0,w.useState)(`editor`),[S,E]=(0,w.useState)(!1),[O,M]=(0,w.useState)(null),N=(0,w.useRef)(``),P=(0,w.useRef)(``),F=c!==`local`,I=(0,w.useCallback)(async()=>{try{let n=await u.getCraftbook(e,t?{source:t}:{});o(n.craftbook),N.current=n.craftbook.name,P.current=n.craftbook.description??``,v(e=>e&&n.craftbook.steps.some(t=>t.id===e)?e:n.craftbook.entryStepId??n.craftbook.steps[0]?.id??null)}catch(e){M(e.message)}},[e,t]);(0,w.useEffect)(()=>{I()},[I]),(0,w.useEffect)(()=>{u.listGezels().then(e=>g(e.gezels)).catch(()=>{})},[]),(0,w.useEffect)(()=>{if(t){m(t);return}u.listCraftbooks({source:`all`}).then(t=>{let n=t.craftbooks.find(t=>t.id===e);n&&m(n.source)}).catch(()=>{})},[e,t]),(0,w.useEffect)(()=>{let t=t=>{let n=t.detail;(!n?.id||n.id===e)&&I()};return window.addEventListener(`gezel:craftbook-edited`,t),()=>window.removeEventListener(`gezel:craftbook-edited`,t)},[e,I]);let L=(0,w.useCallback)(async e=>{if(o(e),!F){E(!0),M(null);try{let t=await u.updateCraftbook(e.id,j(e));o(t.craftbook),n?.()}catch(e){M(e.message),await I()}finally{E(!1)}}},[F,n,I]);if(O&&!a)return(0,T.jsx)(`p`,{className:`error`,children:O});if(!a)return(0,T.jsx)(`p`,{className:`placeholder`,children:`Loading…`});let R=(e,t)=>{L({...a,steps:a.steps.map(n=>n.id===e?i(n,t):n)})},z=e=>{L({...a,steps:l(a.steps,e)})},B=e=>{try{let t=r(a.steps,e),n=a.entryStepId===e?t[0].id:a.entryStepId;_===e&&v(n),L({...a,steps:t,entryStepId:n})}catch(e){M(e.message)}},V=e=>{L({...a,entryStepId:e})},H=()=>{let e=s(a.steps,`New step`),t={id:e,name:`New step`};v(e),L({...a,steps:[...a.steps,t]})},U=()=>{let e=N.current.trim();!e||e===a.name||L({...a,name:e})},W=()=>{P.current!==(a.description??``)&&L({...a,description:P.current||void 0})},G=async()=>{E(!0),M(null);try{A({kind:`craftbook`,id:(await u.createCraftbook({name:`${a.name} (copy)`,...a.description?{description:a.description}:{},...a.plan?{plan:a.plan}:{},steps:a.steps,entryStepId:a.entryStepId})).craftbook.id,source:`local`})}catch(e){M(e.message)}finally{E(!1)}};return(0,T.jsxs)(`div`,{className:`craftbook-editor`,"data-testid":`craftbook-editor`,children:[(0,T.jsxs)(`header`,{className:`craftbook-editor-header`,children:[(0,T.jsxs)(`div`,{className:`craftbook-editor-title`,children:[F?(0,T.jsx)(`h3`,{children:a.name}):(0,T.jsx)(`input`,{className:`craftbook-name-input`,defaultValue:a.name,onChange:e=>{N.current=e.target.value},onBlur:U,"aria-label":`Craftbook name`}),(0,T.jsx)(`span`,{className:`task-ref`,children:a.id}),(0,T.jsx)(`span`,{className:`task-badge task-badge-${c}`,children:c}),F&&(0,T.jsx)(`button`,{type:`button`,className:`primary`,onClick:()=>void G(),disabled:S,children:`Copy to edit`})]}),O&&(0,T.jsx)(`p`,{className:`error small`,children:O})]}),(0,T.jsx)(`div`,{className:`task-bench-row craftbook-bench-row${_===null?``:` has-docked-panel has-selected-step`}`,children:(0,T.jsx)(b,{steps:a.steps,selectedStepId:_,onSelect:v,entryStepId:a.entryStepId,busy:S,ariaLabel:`Craftbook steps`,addLabel:`Add step`,variant:`bench`,...F?{}:{onAddStep:H,onReorder:z}})}),(0,T.jsx)(k,{craftbookId:a.id,steps:a.steps,stepId:_,entryStepId:a.entryStepId,gezels:h,readOnly:F,busy:S,onPatch:R,onRemove:B,onSetEntry:V}),(0,T.jsx)(`div`,{className:`craftbook-editor-tabs`,children:(0,T.jsx)(p,{value:y,onValueChange:e=>x(e),children:(0,T.jsxs)(f,{children:[(0,T.jsx)(d,{value:`editor`,children:`Overview`}),(0,T.jsx)(d,{value:`chat`,children:`AI assist`})]})})}),y===`editor`&&(0,T.jsxs)(`div`,{className:`craftbook-overview`,children:[(0,T.jsxs)(`div`,{className:`task-step-field full-width`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Description`}),(0,T.jsx)(C,{value:a.description??``,readOnly:F,placeholder:`What this craftbook is for and when to reach for it.`,onCommit:e=>{P.current=e,W()}},`cbdesc-${a.id}`)]}),a.plan&&(0,T.jsxs)(`div`,{className:`task-step-field full-width`,children:[(0,T.jsx)(`span`,{className:`task-step-field-label`,children:`Plan`}),(0,T.jsx)(`p`,{className:`muted small`,children:a.plan})]})]}),y===`chat`&&(0,T.jsx)(D,{craftbookId:a.id,craftbookName:a.name,readOnly:F})]})}export{M as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-CEpd2cAX.js";import{$ as r}from"./dist-DOqbRmFj.js";import{t as i}from"./api-C0I7spBl.js";import{t as a}from"./relative-time-B2kBaekd.js";import{t as o}from"./ConfirmDialog-Dt1ed4Fh.js";import{t as s}from"./GitDiffView-DrDrSeBb.js";import{a as c}from"./gitCopy-Dcjz17cJ.js";import{t as l}from"./MarkdownField-Dugmfr_e.js";import{n as u}from"./useDiffpacks-B0kYhlWQ.js";var d=e(t(),1),f=n();function p({paths:e,onConfirm:t,onCancel:n}){return(0,f.jsx)(o,{open:!0,danger:!0,title:`These files changed since the proposal was written`,confirmLabel:`Apply anyway`,message:(0,f.jsxs)(f.Fragment,{children:[(0,f.jsx)(`p`,{children:e.length===1?`This file has been edited since the gezel drafted its change:`:`These files have been edited since the gezel drafted its change:`}),(0,f.jsx)(`ul`,{children:e.map(e=>(0,f.jsx)(`li`,{children:(0,f.jsx)(`code`,{children:e})},e))}),(0,f.jsx)(`p`,{children:`The change may no longer do what was intended. Anything that plainly doesn’t fit will still be refused.`})]}),onConfirm:t,onCancel:n})}var m=()=>{};function h(e){switch(e.status){case`drafting`:return`Being written`;case`ready`:return`Ready to review`;case`applied`:return`Applied`;case`partially-applied`:return`Partly applied`;case`dismissed`:return`Dismissed`;case`failed`:return`Didn’t work out`}}function g(e){return e.change===`add`?`New file`:e.change===`delete`?`Delete`:`Edit`}function _({projectId:e}){let{diffpacks:t,loaded:n,busy:o,apply:_,dismiss:v}=u(e),[y,b]=(0,d.useState)(null),[x,S]=(0,d.useState)(null),[C,w]=(0,d.useState)({}),[T,E]=(0,d.useState)(null),[D,O]=(0,d.useState)(null),k=(0,d.useMemo)(()=>t.find(e=>e.packId===y)??t[0]??null,[t,y]);(0,d.useEffect)(()=>{if(!k)return;let t=!1;S(null),w({}),i.getDiffpack(e,k.packId).then(e=>{t||S({packId:k.packId,text:e.notes})}).catch(()=>{t||S({packId:k.packId,text:``})});for(let n of k.files)n.diffArtifact&&i.readProjectArtifact(e,n.diffArtifact).then(e=>{t||w(t=>({...t,[n.path]:e.content}))}).catch(()=>{});return()=>{t=!0}},[e,k]);let A=async(e={})=>{if(!k)return;let t=await _(k.packId,e);if(!t.ok&&t.drifted.length>0&&!e.allowDrifted){O({paths:t.drifted,...e.paths?{subset:e.paths}:{}});return}E(t.message)},j=async()=>{if(k)try{let t=await i.exportDiffpack(e,k.packId),n=URL.createObjectURL(t),a=document.createElement(`a`);a.href=n,a.download=`${r(k.packId)}.zip`,a.click(),URL.revokeObjectURL(n)}catch(e){E(e instanceof Error?e.message:String(e))}};return n&&t.length===0?(0,f.jsx)(`div`,{className:`dp-empty`,children:(0,f.jsx)(`p`,{className:`placeholder`,children:`No change proposals yet. When a gezel fixes something here, the change lands as a proposal you read and apply — your files aren’t touched until you say so.`})}):(0,f.jsxs)(`div`,{className:`dp-layout`,children:[(0,f.jsx)(`div`,{className:`dp-list`,children:t.map(e=>(0,f.jsxs)(`button`,{type:`button`,className:`dp-list-item${e.packId===k?.packId?` dp-list-item-active`:``}`,onClick:()=>b(e.packId),children:[(0,f.jsxs)(`span`,{className:`dp-list-head`,children:[(0,f.jsx)(`code`,{className:`dp-ref`,children:r(e.packId)}),(0,f.jsx)(`span`,{className:`dp-status dp-status-${e.status}`,children:h(e)})]}),(0,f.jsx)(`span`,{className:`dp-list-title`,children:e.title}),(0,f.jsxs)(`span`,{className:`muted small`,children:[c(e.files.length,`file`),` · +`,e.additions,` −`,e.deletions,e.origin.kind===`boekwachter-issue`?` · ${e.origin.issueRefs.join(`, `)}`:``]}),(e.drifted.length>0||e.overlaps.length>0)&&(0,f.jsxs)(`span`,{className:`dp-list-flags`,children:[e.drifted.length>0&&(0,f.jsx)(`span`,{className:`dp-flag dp-flag-drift`,children:`Out of date`}),e.overlaps.length>0&&(0,f.jsxs)(`span`,{className:`dp-flag`,children:[`Overlaps`,` `,[...new Set(e.overlaps.flatMap(e=>e.packIds))].map(r).join(`, `)]})]})]},e.packId))}),(0,f.jsx)(`div`,{className:`dp-detail`,children:k?(0,f.jsxs)(f.Fragment,{children:[(0,f.jsxs)(`div`,{className:`dp-detail-head`,children:[(0,f.jsx)(`h3`,{children:k.title}),(0,f.jsxs)(`p`,{className:`muted small`,children:[k.gezelName?`Drafted by ${k.gezelName}`:`Drafted`,k.sealedAt?` · ${a(k.sealedAt)}`:``]})]}),k.drifted.length>0&&(0,f.jsxs)(`output`,{className:`dp-notice`,children:[k.drifted.join(`, `),` changed since this was written, so the proposal may no longer fit. Read the diff before applying.`]}),k.overlaps.length>0&&(0,f.jsxs)(`output`,{className:`dp-notice`,children:[`Another proposal touches`,` `,[...new Set(k.overlaps.map(e=>e.path))].join(`, `),`. Applying one will put the other out of date.`]}),x?.packId===k.packId&&x.text?(0,f.jsx)(l,{value:x.text,readOnly:!0,onCommit:m},k.packId):k.status===`drafting`?(0,f.jsx)(`p`,{className:`muted`,children:`Still being written…`}):null,(0,f.jsx)(`div`,{className:`dp-files`,children:k.files.map(e=>(0,f.jsxs)(`section`,{className:`dp-file`,children:[(0,f.jsxs)(`header`,{className:`dp-file-head`,children:[(0,f.jsx)(`code`,{className:`dp-file-path`,title:e.path,children:e.path}),(0,f.jsxs)(`span`,{className:`muted small`,children:[g(e),` · +`,e.additions,` −`,e.deletions]}),k.status===`ready`&&e.change!==`delete`&&(0,f.jsx)(`button`,{type:`button`,className:`small`,disabled:o===k.packId,onClick:()=>void A({paths:[e.path]}),children:`Apply this file`})]}),e.change===`delete`?(0,f.jsx)(`p`,{className:`git-diff-placeholder muted`,children:`This proposal suggests deleting the file.`}):(0,f.jsx)(s,{diff:C[e.path]})]},e.path))}),T&&(0,f.jsx)(`output`,{className:`dp-toast`,children:T}),(0,f.jsxs)(`div`,{className:`gz-tray dp-actions`,role:`toolbar`,"aria-label":`Actions for ${r(k.packId)}`,children:[(0,f.jsx)(`button`,{type:`button`,className:`gz-key dp-key-apply`,disabled:k.status!==`ready`||o===k.packId,onClick:()=>void A(),children:o===k.packId?`Applying…`:`Apply all`}),(0,f.jsx)(`button`,{type:`button`,className:`gz-key`,onClick:()=>void j(),children:`Export`}),(0,f.jsx)(`button`,{type:`button`,className:`gz-key`,disabled:o===k.packId,onClick:()=>{v(k.packId).then(e=>e&&E(e))},children:`Dismiss`})]})]}):(0,f.jsx)(`p`,{className:`placeholder`,children:`Pick a proposal to read it.`})}),D&&k&&(0,f.jsx)(p,{paths:D.paths,onCancel:()=>O(null),onConfirm:()=>{let e=D.subset;O(null),A({allowDrifted:!0,...e?{paths:e}:{}})}})]})}export{_ as DiffpackReviewView};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e,n as t}from"./rolldown-runtime-aKtaBQYM.js";import{n,t as r}from"./jsx-runtime-CEpd2cAX.js";import{t as i}from"./api-C0I7spBl.js";import{n as a,t as o}from"./document-companion-aDThLOwl.js";import{t as s}from"./preload-helper-Czpn1I53.js";import{n as c}from"./styles-BvkZd-EV.js";import{ht as l,o as u,x as d,z as f}from"./index-DDu8nyO6.js";import"./storage-B-vhjyV2.js";import{a as p,c as m,n as h,o as g,s as _,t as v}from"./SquisqIntegration-C5l_OPvD.js";import{c as y,d as b,f as x,h as S,i as C,m as w,p as T,s as E}from"./file-browser-DVyWN0LD.js";import{a as D,c as O,d as k,l as A,n as j,o as M,r as N,s as P,t as F,u as I}from"./outside-in-BmIIeMid.js";import{t as L}from"./markdown-baseline-9B52XlX2.js";import{t as R}from"./TransformToolbarButton-gzIxUBH7.js";var z=e(n(),1),B=r();function V(e){let t=e.lastIndexOf(`/`);return t<0?e:e.slice(t+1)}async function H(e,t){let n=F(t,(await i.listDocuments(``,!0)).files.filter(e=>!e.isDirectory).map(e=>e.path)),r;if(n)r=(await i.readDocument(n)).content;else{let a=await j(await(await i.fetchDocumentBlob(e)).arrayBuffer(),t),o=_({root:t.companionDirectory,client:i,primaryDocumentFilename:t.markdownFilename});for(let t of await a.container.listFiles()){if(/\.md$/i.test(t.path)||!t.path.includes(`/`)&&V(t.path).toLocaleLowerCase(`en-US`)===V(e).toLocaleLowerCase(`en-US`))continue;let n=await a.container.readFile(t.path);n&&await o.writeFile(t.path,n,t.mimeType)}r=k(a.markdown,t),await o.writeDocument(r,t.markdownFilename),n=t.markdownPath}let a=k(r,t);return a!==r&&(await i.writeDocument(n,a),r=a),{sourcePath:n,content:r,editingEnabled:A(t.format)&&N(r)}}function U({path:e,layout:t}){let[n,r]=(0,z.useState)(null),[a,o]=(0,z.useState)(null),[s,c]=(0,z.useState)(null),[l,u]=(0,z.useState)(!1);(0,z.useEffect)(()=>{let n=!1;return r(null),o(null),c(null),H(e,t).then(e=>{n||r(e)}).catch(e=>{n||o(e instanceof Error?e.message:String(e))}),()=>{n=!0}},[t,e]);let d=(0,z.useCallback)(async()=>{if(!(!n||l)){if(!A(t.format)){c(`CSV data previews are read-only.`);return}u(!0),c(null);try{if(!(await i.listDocuments(``,!0)).files.some(e=>e.path===t.backupPath)){let e=await i.fetchDocumentBlob(t.targetPath);await i.writeDocumentBinary(t.backupPath,e,e.type||`application/octet-stream`)}let e=I(n.content,t);await i.writeDocument(n.sourcePath,e),r({...n,content:e,editingEnabled:!0})}catch(e){c(e instanceof Error?e.message:String(e))}finally{u(!1)}}},[l,t,n]);return a?(0,B.jsx)(`div`,{className:`placeholder`,children:(0,B.jsxs)(`p`,{children:[`Couldn't open `,(0,B.jsx)(`code`,{children:e}),`: `,a]})}):n?(0,B.jsx)(W,{path:e,layout:t,prepared:n,enabling:l,enableError:s,onEnableEditing:d},`${n.sourcePath}:${n.editingEnabled?`editable`:`readonly`}`):(0,B.jsxs)(`p`,{className:`placeholder`,children:[`Importing `,e,` for viewing…`]})}function W({path:e,layout:t,prepared:n,enabling:r,enableError:o,onEnableEditing:g}){let y=l(),x=v(),C=(0,z.useMemo)(()=>_({root:t.companionDirectory,client:i,primaryDocumentFilename:V(n.sourcePath)}),[t.companionDirectory,n.sourcePath]),E=(0,z.useMemo)(()=>S(C),[C]),j=(0,z.useMemo)(()=>w({client:i,currentDocumentPath:n.sourcePath}),[n.sourcePath]),N=(0,z.useMemo)(()=>a(n.sourcePath),[n.sourcePath]),P=(0,z.useMemo)(()=>p(E,N),[E,N]),F=(0,z.useMemo)(()=>f(E),[E]),I=(0,z.useCallback)(async r=>{let a=k(r,t),o=await i.listDocuments(``,!0),c=t.format===`html`?O(t.targetPath,new Set(o.files.filter(e=>e.isDirectory).map(e=>e.path.replace(/^\/+/,``)))):void 0,l=await M(a,t,E,c?D(t.parentDirectory,c):void 0);if(await i.writeDocument(n.sourcePath,a),c){let{PLAYER_BUNDLE:e}=await s(async()=>{let{PLAYER_BUNDLE:e}=await import(`./standalone-source-7QdiNsDW.js`);return{PLAYER_BUNDLE:e}},[]);await i.writeDocument(c,e)}await i.writeDocumentBinary(t.targetPath,l.bytes,l.mimeType),u(e)},[E,t,e,n.sourcePath]),H=(0,z.useMemo)(()=>L(n.content),[n.content]),U=d({resourceKey:`outside-in:documents:${n.sourcePath}`,initialValue:H,save:I});(0,z.useEffect)(()=>()=>F.dispose(),[F]);let W=(0,z.useCallback)(e=>{U.update(e)},[U.update]);return(0,B.jsxs)(`section`,{className:`document-detail`,"data-testid":`document-detail`,children:[!n.editingEnabled&&(0,B.jsxs)(`output`,{className:`outside-in-readonly-banner`,children:[A(t.format)?(0,B.jsxs)(`span`,{children:[(0,B.jsxs)(`strong`,{children:[t.format.toUpperCase(),` preview · read-only.`]}),` If you enable editing via markdown, the structure of your `,t.format.toUpperCase(),` will not be fully preserved.`]}):(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:`CSV data preview · source preserved.`}),` Large datasets stay in a sidecar and open as a virtualized grid.`]}),o&&(0,B.jsxs)(`span`,{className:`error`,children:[`Could not enable editing: `,o]}),A(t.format)&&(0,B.jsx)(`button`,{type:`button`,disabled:r,onClick:()=>void g(),children:r?`Preparing…`:`Enable editing`})]}),(0,B.jsx)(`div`,{className:`editor-wrap`,children:(0,B.jsx)(c,{initialMarkdown:U.desiredValue(),fileName:n.sourcePath,initialView:`wysiwyg`,readOnly:!n.editingEnabled,onChange:n.editingEnabled?W:void 0,height:`100%`,colorScheme:y,fullWidth:!0,workspaceContainer:P,mediaProvider:F,documentLinkProvider:j,calcEngineFactory:n.editingEnabled?T:void 0,proofing:x,proofingIgnoreStore:h,allowVersioning:n.editingEnabled,versionBasename:N,toolbarSlotAfterActions:(0,B.jsxs)(B.Fragment,{children:[n.editingEnabled&&(0,B.jsx)(R,{context:`generic`}),(0,B.jsx)(b,{fileName:e})]}),statusBarSlotRight:n.editingEnabled?(0,B.jsx)(m,{autosave:U}):void 0})})]})}var G=t({DocumentDetail:()=>q});function K(e){let t=e.slice(e.lastIndexOf(`/`)+1);return!t.includes(`.`)||/\.(md|markdown|mdx)$/i.test(t)}function q({path:e}){let t=(0,z.useMemo)(()=>P(e),[e]);return t?(0,B.jsx)(U,{path:e,layout:t}):(0,B.jsx)(Y,{path:e})}var J=e=>i.fetchDocumentBlob(e);function Y({path:e}){let t=l(),n=v(),[r,s]=(0,z.useState)(null),[f,S]=(0,z.useState)(void 0),[D,O]=(0,z.useState)(null),k=(0,z.useCallback)(async t=>{await i.writeDocument(e,t),u(e)},[e]),A=d({resourceKey:`document:${e}`,initialValue:r??``,save:k}),{root:j,parentDirectory:M,companionName:N,primaryDocumentFilename:P}=(0,z.useMemo)(()=>o(e),[e]),F=(0,z.useMemo)(()=>_({root:j,client:i,referencePrefix:N}),[N,j]),I=(0,z.useMemo)(()=>_({root:M,client:i,primaryDocumentFilename:P}),[M,P]),V=(0,z.useMemo)(()=>g(F,N,I),[N,F,I]),H=(0,z.useMemo)(()=>a(e),[e]),U=(0,z.useMemo)(()=>p(F,H,[{container:I,basenames:[P,H]}],I),[F,I,P,H]),W=(0,z.useMemo)(()=>w({client:i,currentDocumentPath:e}),[e]);(0,z.useEffect)(()=>()=>V.dispose(),[V]),(0,z.useEffect)(()=>{let t=!1;return s(null),S(void 0),O(null),(async()=>{try{let n=await i.readDocument(e);if(t)return;S(n.size);let r=K(e)?L(n.content):n.content;s(A.hydrate(r))}catch(e){t||O(e.message)}})(),()=>{t=!0}},[e,A.hydrate]);let G=(0,z.useCallback)(e=>{A.update(e)},[A.update]);if(D)return(0,B.jsx)(`div`,{className:`placeholder`,children:(0,B.jsxs)(`p`,{children:[`Couldn't open `,(0,B.jsx)(`code`,{children:e}),`: `,D]})});if(r===null)return(0,B.jsxs)(`p`,{className:`placeholder`,children:[`Loading `,e,`…`]});if(y(r))return(0,B.jsx)(E,{content:C,path:e,fetchBlob:J,...f===void 0?{}:{sizeBytes:f}});let q=K(e);return(0,B.jsx)(`section`,{className:`document-detail`,"data-testid":`document-detail`,children:(0,B.jsx)(`div`,{className:`editor-wrap`,children:(0,B.jsx)(c,{initialMarkdown:r,fileName:e,onChange:G,height:`100%`,colorScheme:t,fullWidth:!0,workspaceContainer:q?U:null,mediaProvider:q?V:null,documentLinkProvider:q?W:null,calcEngineFactory:q?T:void 0,proofing:q?n:null,proofingIgnoreStore:h,allowVersioning:q,versionBasename:H,toolbarSlotAfterActions:q?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(R,{context:`generic`}),(0,B.jsx)(b,{fileName:e})]}):void 0,toolbarSlotRight:q?(0,B.jsx)(x,{selectedFile:e,mediaContainer:I,mediaSource:{kind:`documents`}}):void 0,statusBarSlotRight:(0,B.jsx)(m,{autosave:A})})})})}export{G as n,q as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{n as t,t as n}from"./jsx-runtime-CEpd2cAX.js";import{vt as r,xt as i}from"./dist-DOqbRmFj.js";import{t as a}from"./api-C0I7spBl.js";import{d as o,f as s,h as c,u as l}from"./document-companion-aDThLOwl.js";import"./schemas-BvLZUsGm.js";import{S as u,c as d,ht as ee,s as f}from"./index-DDu8nyO6.js";import"./SquisqIntegration-C5l_OPvD.js";import{l as p,n as m,s as h,t as g,u as _}from"./file-browser-DVyWN0LD.js";import{t as te}from"./ProjectGitStatusBar-BgHZ2ijN.js";import{t as v}from"./DocumentDetail-GCYhwQqV.js";var y=n(),b=e(t(),1);function x({name:e,entries:t,onOpenFile:n,onOpenFolder:r,onNewDocument:i,onNewFolder:a,theme:o=`light`,height:s=`100%`,iconFor:c=C}){let l=[...t].sort((e,t)=>e.isDirectory===t.isDirectory?e.name.localeCompare(t.name,void 0,{sensitivity:`base`}):e.isDirectory?-1:1);return(0,y.jsxs)(`div`,{className:`squisq-folder-view`,"data-theme":o,style:{height:s},children:[(0,y.jsxs)(`div`,{className:`squisq-folder-view-header`,children:[(0,y.jsx)(`i`,{className:`fa-regular fa-folder-open squisq-folder-view-header-icon`,"aria-hidden":`true`}),(0,y.jsx)(`span`,{className:`squisq-folder-view-title`,children:e}),(0,y.jsxs)(`span`,{className:`squisq-folder-view-count`,children:[t.length,` `,t.length===1?`item`:`items`]})]}),(0,y.jsx)(`div`,{className:`squisq-folder-view-body`,children:l.length===0?(0,y.jsx)(`p`,{className:`squisq-folder-view-empty`,children:`This folder is empty.`}):(0,y.jsx)(`ul`,{className:`squisq-folder-view-list`,children:l.map(e=>(0,y.jsx)(`li`,{children:(0,y.jsxs)(`button`,{type:`button`,className:`squisq-folder-view-item`,onClick:()=>e.isDirectory?r(e):n(e),children:[(0,y.jsx)(`span`,{className:`squisq-folder-view-item-icon`,children:c(e)}),(0,y.jsx)(`span`,{className:`squisq-folder-view-item-name`,children:e.name}),e.isDirectory&&(0,y.jsx)(`i`,{className:`fa-solid fa-chevron-right squisq-folder-view-item-chevron`,"aria-hidden":`true`})]})},e.path))})}),(0,y.jsxs)(`div`,{className:`squisq-folder-view-actions`,children:[(0,y.jsxs)(`button`,{type:`button`,className:`squisq-folder-view-new`,onClick:i,children:[(0,y.jsx)(`i`,{className:`fa-solid fa-plus`,"aria-hidden":`true`}),` New document`]}),a&&(0,y.jsxs)(`button`,{type:`button`,className:`squisq-folder-view-new-folder`,onClick:a,children:[(0,y.jsx)(`i`,{className:`fa-regular fa-folder`,"aria-hidden":`true`}),` New folder`]})]})]})}var S=/\.(png|jpe?g|gif|svg|webp|bmp|avif)$/i;function C(e){return e.isDirectory?(0,y.jsx)(`i`,{className:`fa-regular fa-folder fa-fw`,"aria-hidden":`true`}):S.test(e.name)?(0,y.jsx)(`i`,{className:`fa-regular fa-file-image fa-fw`,"aria-hidden":`true`}):(0,y.jsx)(`i`,{className:`fa-regular fa-file-lines fa-fw`,"aria-hidden":`true`})}var w=2,T=200;function ne(){let[e,t]=(0,b.useState)(``),[n,r]=(0,b.useState)(null),[i,o]=(0,b.useState)(``),[s,c]=(0,b.useState)(!1),[l,u]=(0,b.useState)(!1);return(0,b.useEffect)(()=>{let t=e.trim();if(t.length<w){r(null),o(``),c(!1),u(!1);return}let n=!1;c(!0);let i=window.setTimeout(()=>{a.searchDocuments({q:t}).then(e=>{n||(u(e.engine===`unavailable`),o(t),r(e.results.map(e=>({entry:{name:e.path.split(`/`).pop()??e.path,path:e.path,isDirectory:!1},snippet:e.snippet,line:e.lineStart,related:e.source===`vector`}))))}).catch(()=>{n||(o(t),r([]))}).finally(()=>{n||c(!1)})},T);return()=>{n=!0,window.clearTimeout(i)}},[e]),{query:e,setQuery:t,hits:n,matchedQuery:i,searching:s,unavailable:l,clear:()=>t(``)}}var E=`gezel:documents:selectedPath`;function D(){try{return window.localStorage.getItem(E)}catch{return null}}function O(e){try{e?window.localStorage.setItem(E,e):window.localStorage.removeItem(E)}catch{}}function k(e){try{return window.localStorage.getItem(e)}catch{return null}}function A(e,t){try{window.localStorage.setItem(e,t)}catch{}}function j(){let e=ee(),t=(0,b.useMemo)(()=>m(),[]),n=ne(),[S,C]=(0,b.useState)([]),[w,T]=(0,b.useState)(!1),[E,j]=(0,b.useState)(!1),[M,N]=(0,b.useState)(null),[P,F]=(0,b.useState)(()=>c(k(o),`documents`)),[I,L]=(0,b.useState)(()=>k(l)===`1`),R=f(),[z,B]=(0,b.useState)(()=>D()),[V,H]=(0,b.useState)(null);(0,b.useEffect)(()=>{let e=!1;return a.listProjects().then(t=>{if(e)return;let n=t.projects.find(e=>i(e));H(n?.id??null)}).catch(()=>{}),()=>{e=!0}},[]);let U=(0,b.useCallback)(e=>{B(e),O(e),e&&R.noteUsed(e)},[R.noteUsed]),W=(0,b.useCallback)(e=>{F(e),A(o,e)},[]),G=(0,b.useCallback)(e=>{L(e),A(l,e?`1`:`0`)},[]),K=(0,b.useCallback)(async()=>{try{let e=await t.list({hidden:I});C(e.files),T(e.truncated===!0),j(!0)}catch(e){N(e.message)}},[I,t]);(0,b.useEffect)(()=>{K()},[K]);let q=(0,b.useMemo)(()=>I?S:S.filter(e=>!r(e.path)),[S,I]),J=g({source:t,entries:S,selectedPath:z,onSelectPath:U,refresh:K}),Y=(0,b.useCallback)(e=>{if(e.isDirectory)return[];let t=R.pinnedPaths.has(e.path);return[{label:t?`Unpin from Documents list`:`Pin to Documents list`,onSelect:()=>t?R.unpin(e.path):R.pin(e.path)}]},[R.pin,R.pinnedPaths,R.unpin]);(0,b.useEffect)(()=>{if(q.length===0)return;let e=q.find(e=>!e.isDirectory)??q[0];e&&B(t=>t&&q.some(e=>e.path===t)?t:e.path)},[q]);let X=(0,b.useMemo)(()=>z?q.find(e=>e.path===z)??null:null,[q,z]),Z=X?.isDirectory??!1,re=z?z.slice(z.lastIndexOf(`/`)+1):``,ie=(0,b.useMemo)(()=>{if(!z||!Z)return[];let e=`${z}/`;return q.filter(t=>t.path.startsWith(e)&&!t.path.slice(e.length).includes(`/`))},[q,z,Z]),Q=z&&!Z?p(z):null,$;$=z?Z?(0,y.jsx)(x,{name:re,entries:ie,theme:e,onOpenFile:e=>U(e.path),onOpenFolder:e=>U(e.path),onNewDocument:()=>J.newFile?.(z),onNewFolder:()=>J.newFolder?.(`${z}/`)}):Q?(0,y.jsx)(h,{content:Q,path:z,fetchBlob:t.fetchBlob}):X?(0,y.jsx)(v,{path:z},z):E?(0,y.jsx)(`p`,{className:`placeholder`,children:`Select a document or folder on the left to view it.`}):(0,y.jsx)(`p`,{className:`placeholder`,children:`Loading…`}):(0,y.jsx)(`p`,{className:`placeholder`,children:`Select a document or folder on the left to view it.`});let ae=n.hits?{entries:n.hits.map(e=>e.entry),emptyMessage:n.unavailable?`The library is still being indexed — search will work shortly.`:`Nothing in the library mentions “${n.query.trim()}”.`,detailForEntry:e=>{let t=n.hits?.find(t=>t.entry.path===e.path);return t?(0,y.jsxs)(`span`,{className:`documents-search-snippet`,children:[t.related&&(0,y.jsx)(`span`,{className:`documents-search-related`,children:`related`}),u(t.snippet,n.matchedQuery)]}):null}}:null;return(0,y.jsxs)(`div`,{className:`documents-listing`,"data-testid":`documents-view`,children:[(0,y.jsx)(_,{source:t,titleReplacement:(0,y.jsxs)(`div`,{className:`documents-search`,children:[(0,y.jsx)(`input`,{type:`search`,className:`documents-search-input`,placeholder:`${t.title} - search`,"aria-label":`Search document contents`,value:n.query,onChange:e=>n.setQuery(e.target.value),onKeyDown:e=>{e.key===`Escape`&&n.clear()}}),n.searching&&(0,y.jsx)(`span`,{className:`muted documents-search-status`,children:`searching…`})]}),customList:ae,layoutClassName:`project-files-layout-documents`,entries:q,truncated:w,viewMode:P,modes:s,onViewModeChange:W,showHidden:I,onShowHiddenChange:G,selectedPath:z??void 0,onSelect:e=>U(e.path),selectableFolders:!0,labelFor:e=>d(e.name),trailingForEntry:e=>R.pinnedPaths.has(e.path)?(0,y.jsx)(`span`,{className:`document-pin-marker`,title:`Pinned`,"aria-label":`Pinned`,children:(0,y.jsx)(`i`,{className:`fa-solid fa-thumbtack`})}):null,actionsForEntry:Y,emptyMessage:`No documents yet. Create a mission statement, coding guidelines, or any shared reference.`,mutations:J,viewer:$}),M&&(0,y.jsx)(`p`,{className:`error`,children:M}),V?(0,y.jsx)(te,{projectId:V}):null]})}export{j as DocumentsView};
|