@iaforged/context-code 2.3.1 → 2.3.5
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/context-bootstrap.js +7 -5
- package/dist/src/QueryEngine.js +1 -1
- package/dist/src/cli/handlers/auth.js +1 -1
- package/dist/src/cli/handlers/modelList.js +1 -1
- package/dist/src/cli/structuredIO.js +1 -1
- package/dist/src/commands/branch/index.js +1 -1
- package/dist/src/commands/login/login.js +1 -1
- package/dist/src/commands/profile/index.js +1 -1
- package/dist/src/commands/profile/profile.js +1 -1
- package/dist/src/commands/provider/index.js +1 -1
- package/dist/src/commands/provider/provider.js +1 -1
- package/dist/src/components/BaseTextInput.js +1 -1
- package/dist/src/components/ConsoleOAuthFlow.js +1 -1
- package/dist/src/components/LogoV2/AnimatedClawd.js +1 -1
- package/dist/src/components/LogoV2/Clawd.js +1 -1
- package/dist/src/components/LogoV2/LogoV2.js +1 -1
- package/dist/src/components/LogoV2/Opus1mMergeNotice.js +1 -1
- package/dist/src/components/LogoV2/WelcomeV2.js +1 -1
- package/dist/src/components/ModelPicker.js +1 -1
- package/dist/src/components/PromptInput/PromptInputFooterLeftSide.js +1 -1
- package/dist/src/components/SessionTokenFooter.js +1 -0
- package/dist/src/components/Spinner.js +1 -1
- package/dist/src/components/Stats.js +1 -1
- package/dist/src/components/TeleportProgress.js +1 -1
- package/dist/src/components/TextInput.js +1 -1
- package/dist/src/components/design-system/ThemeProvider.js +1 -1
- package/dist/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +1 -1
- package/dist/src/constants/oauth.js +1 -1
- package/dist/src/core/providers/providerCore.js +1 -1
- package/dist/src/hooks/useTypeahead.js +1 -1
- package/dist/src/main.js +1 -1
- package/dist/src/query/stopHooks.js +1 -1
- package/dist/src/screens/REPL.js +1 -1
- package/dist/src/services/PromptSuggestion/promptSuggestion.js +1 -1
- package/dist/src/services/analytics/config.js +1 -1
- package/dist/src/services/analytics/datadog.js +1 -1
- package/dist/src/services/api/openai.js +1 -1
- package/dist/src/services/mcp/config.js +1 -1
- package/dist/src/services/oauth/auth-code-listener.js +1 -1
- package/dist/src/services/oauth/client.js +1 -1
- package/dist/src/services/oauth/geminiCli.js +1 -1
- package/dist/src/services/tips/tipRegistry.js +1 -1
- package/dist/src/services/toolUseSummary/toolUseSummaryGenerator.js +1 -1
- package/dist/src/tools/BriefTool/UI.js +1 -1
- package/dist/src/utils/auth.js +1 -1
- package/dist/src/utils/claudeInChrome/setup.js +1 -1
- package/dist/src/utils/computerControlMcp/mcpServer.js +1 -1
- package/dist/src/utils/computerControlMcp/server/.gitattributes +18 -0
- package/dist/src/utils/computerControlMcp/server/Dockerfile +25 -0
- package/dist/src/utils/computerControlMcp/server/LICENSE +21 -0
- package/dist/src/utils/computerControlMcp/server/MANIFEST.in +10 -0
- package/dist/src/utils/computerControlMcp/server/README.md +193 -0
- package/dist/src/utils/computerControlMcp/server/demonstration.gif +0 -0
- package/dist/src/utils/computerControlMcp/server/icon.png +0 -0
- package/dist/src/utils/computerControlMcp/server/pyproject.toml +52 -0
- package/dist/src/utils/computerControlMcp/server/smithery.yaml +13 -0
- package/dist/src/utils/computerControlMcp/server/src/README.md +12 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/FZYTK.TTF +0 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/__init__.py +11 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/__main__.py +21 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/cli.py +128 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/core.py +1008 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/gui.py +126 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/server.py +15 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/test.py +346 -0
- package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/test_image.png +0 -0
- package/dist/src/utils/computerControlMcp/server/tests/README.md +22 -0
- package/dist/src/utils/computerControlMcp/server/tests/conftest.py +10 -0
- package/dist/src/utils/computerControlMcp/server/tests/rapidocr_test.py +21 -0
- package/dist/src/utils/computerControlMcp/server/tests/run_cli.py +9 -0
- package/dist/src/utils/computerControlMcp/server/tests/run_server.py +15 -0
- package/dist/src/utils/computerControlMcp/server/tests/setup.py +16 -0
- package/dist/src/utils/computerControlMcp/server/tests/test_computer_control.py +161 -0
- package/dist/src/utils/computerControlMcp/server/tests/test_screenshot.py +14 -0
- package/dist/src/utils/computerControlMcp/server/tests/test_wgc_env_var.py +42 -0
- package/dist/src/utils/computerControlMcp/server/tests/test_wgc_screenshot.py +67 -0
- package/dist/src/utils/computerControlMcp/server/uv.lock +4986 -0
- package/dist/src/utils/computerControlMcp/setup.js +1 -1
- package/dist/src/utils/envUtils.js +1 -1
- package/dist/src/utils/git.js +1 -1
- package/dist/src/utils/localInstaller.js +1 -1
- package/dist/src/utils/logoV2Utils.js +1 -1
- package/dist/src/utils/model/configs.js +1 -1
- package/dist/src/utils/model/model.js +1 -1
- package/dist/src/utils/model/modelAllowlist.js +1 -1
- package/dist/src/utils/model/modelOptions.js +1 -1
- package/dist/src/utils/model/providerBaseUrls.js +1 -1
- package/dist/src/utils/model/providerCatalog.js +1 -1
- package/dist/src/utils/model/providerModels.js +1 -1
- package/dist/src/utils/model/providerProfiles.js +1 -1
- package/dist/src/utils/model/providerProfilesDb.js +1 -1
- package/dist/src/utils/model/providers.js +1 -1
- package/dist/src/utils/model/validateModel.js +1 -1
- package/dist/src/utils/ripgrep.js +1 -1
- package/dist/src/utils/sembleMcp/setup.js +1 -1
- package/dist/src/utils/theme.js +1 -1
- package/dist/src/utils/themes/bootstrap.js +1 -1
- package/dist/src/utils/themes/opencodeMapper.js +1 -1
- package/dist/webapp/chunk-VAB2VXFI.js +1 -1
- package/dist/webapp/main-MTQLKGXD.js +1 -1
- package/dist/webapp/ngsw.json +1 -1
- package/dist/webapp/polyfills-7R4CRVNH.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{feature as e}from"../../recovery/bunBundleShim.js";import{jsx as t}from"react/jsx-runtime";import{c as r}from"react/compiler-runtime";import{createContext as
|
|
1
|
+
import{feature as e}from"../../recovery/bunBundleShim.js";import{jsx as t}from"react/jsx-runtime";import{c as r}from"react/compiler-runtime";import{createContext as n,useContext as i,useEffect as m,useMemo as o,useState as u}from"react";import s from"../../ink/hooks/use-stdin.js";import{getGlobalConfig as a,saveGlobalConfig as c}from"../../utils/config.js";import{getSystemThemeName as h}from"../../utils/systemTheme.js";import{bootstrapDynamicThemes as l}from"../../utils/themes/bootstrap.js";l();const f="dark",v=n({themeSetting:f,setThemeSetting:()=>{},setPreviewTheme:()=>{},savePreview:()=>{},cancelPreview:()=>{},currentTheme:f});function defaultInitialTheme(){return a().theme}function defaultSaveTheme(e){c(t=>({...t,theme:e}))}export function ThemeProvider({children:r,initialState:n,onThemeSave:i=defaultSaveTheme}){const[a,c]=u(n??defaultInitialTheme),[l,f]=u(null),[T,p]=u(()=>"auto"===(n??a)?h():"dark"),P=l??a,{internal_querier:w}=s();m(()=>{if(e("AUTO_THEME")){if("auto"!==P||!w)return;let e,t=!1;return import("../../utils/systemThemeWatcher.js").then(r=>{if(t)return;const n=r.watchSystemTheme;"function"==typeof n&&(e=n(w,p))}).catch(()=>{}),()=>{t=!0,e?.()}}},[P,w]);const S="auto"===P?T:P,d=o(()=>({themeSetting:a,setThemeSetting:e=>{c(e),f(null),"auto"===e&&p(h()),i?.(e)},setPreviewTheme:e=>{f(e),"auto"===e&&p(h())},savePreview:()=>{null!==l&&(c(l),f(null),i?.(l))},cancelPreview:()=>{null!==l&&f(null)},currentTheme:S}),[a,l,S,i]);return t(v.Provider,{value:d,children:r})}export function useTheme(){const e=r(3),{currentTheme:t,setThemeSetting:n}=i(v);let m;return e[0]!==t||e[1]!==n?(m=[t,n],e[0]=t,e[1]=n,e[2]=m):m=e[2],m}export function useThemeSetting(){return i(v).themeSetting}export function usePreviewTheme(){const e=r(4),{setPreviewTheme:t,savePreview:n,cancelPreview:m}=i(v);let o;return e[0]!==m||e[1]!==n||e[2]!==t?(o={setPreviewTheme:t,savePreview:n,cancelPreview:m},e[0]=m,e[1]=n,e[2]=t,e[3]=o):o=e[3],o}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as e,Fragment as t}from"react/jsx-runtime";import{c as n}from"react/compiler-runtime";import{Suspense as s,use as o,useRef as i,useState as a}from"react";import{useSettings as r}from"../../../hooks/useSettings.js";import{useTerminalSize as u}from"../../../hooks/useTerminalSize.js";import{stringWidth as l}from"../../../ink/stringWidth.js";import{useTheme as c}from"../../../ink.js";import{useKeybindings as m}from"../../../keybindings/useKeybinding.js";import{logEvent as p}from"../../../services/analytics/index.js";import{useAppState as h}from"../../../state/AppState.js";import{AskUserQuestionTool as g}from"../../../tools/AskUserQuestionTool/AskUserQuestionTool.js";import{getCliHighlightPromise as d}from"../../../utils/cliHighlight.js";import{maybeResizeAndDownsampleImageBlock as f}from"../../../utils/imageResizer.js";import{cacheImagePath as _,storeImage as q}from"../../../utils/imageStore.js";import{logError as j}from"../../../utils/log.js";import{applyMarkdown as v}from"../../../utils/markdown.js";import{isPlanModeInterviewPhaseEnabled as b}from"../../../utils/planModeV2.js";import{getPlanFilePath as y}from"../../../utils/plans.js";import{QuestionView as w}from"./QuestionView.js";import{SubmitQuestionsView as x}from"./SubmitQuestionsView.js";import{useMultipleChoiceState as k}from"./use-multiple-choice-state.js";export function AskUserQuestionPermissionRequest(t){const o=n(4);if(r().syntaxHighlightingDisabled){let n;return o[0]!==t?(n=e(AskUserQuestionPermissionRequestBody,{...t,highlight:null}),o[0]=t,o[1]=n):n=o[1],n}let i;return o[2]!==t?(i=e(s,{fallback:e(AskUserQuestionPermissionRequestBody,{...t,highlight:null}),children:e(AskUserQuestionWithHighlight,{...t})}),o[2]=t,o[3]=i):i=o[3],i}function AskUserQuestionWithHighlight(t){const s=n(4);let i;s[0]===Symbol.for("react.memo_cache_sentinel")?(i=d(),s[0]=i):i=s[0];const a=o(i);let r;return s[1]!==a||s[2]!==t?(r=e(AskUserQuestionPermissionRequestBody,{...t,highlight:a}),s[1]=a,s[2]=t,s[3]=r):r=s[3],r}function AskUserQuestionPermissionRequestBody(s){const o=n(115),{toolUseConfirm:r,onDone:d,onReject:f,highlight:I}=s;let P;o[0]!==r.input?(P=g.inputSchema.safeParse(r.input),o[0]=r.input,o[1]=P):P=o[1];const R=P;let C;o[2]!==R.data||o[3]!==R.success?(C=R.success&&R.data.questions||[],o[2]=R.data,o[3]=R.success,o[4]=C):C=o[4];const Q=C,{rows:T}=u(),[A]=c();let M=0,S=0;const U=Math.max(12,T-15);if(o[5]!==I||o[6]!==U||o[7]!==M||o[8]!==S||o[9]!==Q||o[10]!==A){for(const e of Q){if(e.options.some(_temp)){const t=Math.max(1,U-11);let n=0;for(const s of e.options)if(s.preview){const e=v(s.preview,A,I).split("\n"),o=e.length>t,i=o?t:e.length;n=Math.max(n,i+(o?1:0)+2);for(const t of e)S=Math.max(S,l(t))}const s=n+2,o=e.options.length+2,i=Math.max(o,s);M=Math.max(M,i+7)}else M=Math.max(M,e.options.length+3+7)}o[5]=I,o[6]=U,o[7]=M,o[8]=S,o[9]=Q,o[10]=A,o[11]=M}else M=o[11];const $=Math.min(Math.max(M,12),U),B=Math.max(S,40);let H;o[12]!==$||o[13]!==B?(H={globalContentHeight:$,globalContentWidth:B},o[12]=$,o[13]=B,o[14]=H):H=o[14];const{globalContentHeight:E,globalContentWidth:z}=H,O=R.success?R.data.metadata?.source:void 0;let W;o[15]===Symbol.for("react.memo_cache_sentinel")?(W={},o[15]=W):W=o[15];const[F,V]=a(W),D=i(0);let N;o[16]===Symbol.for("react.memo_cache_sentinel")?(N=function(e,t,n,s,o,i){D.current=D.current+1;const a=D.current,r={id:a,type:"image",content:t,mediaType:n||"image/png",filename:s||"Imagen pegada",dimensions:o};_(r),q(r),V(t=>({...t,[e]:{...t[e]??{},[a]:r}}))},o[16]=N):N=o[16];const K=N;let G;o[17]===Symbol.for("react.memo_cache_sentinel")?(G=(e,t)=>{V(n=>{const s={...n[e]??{}};return delete s[t],{...n,[e]:s}})},o[17]=G):G=o[17];const J=G;let L;o[18]!==F?(L=Object.values(F).flatMap(_temp2).filter(_temp3),o[18]=F,o[19]=L):L=o[19];const X=L,Y="plan"===h(_temp4);let Z;o[20]!==Y?(Z=Y?y():void 0,o[20]=Y,o[21]=Z):Z=o[21];const ee=Z,te=k(),{currentQuestionIndex:ne,answers:se,questionStates:oe,isInTextInput:ie,nextQuestion:ae,prevQuestion:re,updateQuestionState:ue,setAnswer:le,setTextInputMode:ce}=te,me=ne<(Q?.length||0)?Q?.[ne]:null,pe=ne===(Q?.length||0);let he;o[22]!==se||o[23]!==Q?(he=Q?.every(e=>e?.question&&!!se[e.question])??!1,o[22]=se,o[23]=Q,o[24]=he):he=o[24];const ge=he,de=1===Q.length&&!Q[0]?.multiSelect;let fe;o[25]!==Y||o[26]!==O||o[27]!==d||o[28]!==f||o[29]!==Q.length||o[30]!==r?(fe=()=>{O&&p("tengu_ask_user_question_rejected",{source:O,questionCount:Q.length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()}),d(),f(),r.onReject()},o[25]=Y,o[26]=O,o[27]=d,o[28]=f,o[29]=Q.length,o[30]=r,o[31]=fe):fe=o[31];const _e=fe;let qe;o[32]!==X||o[33]!==se||o[34]!==Y||o[35]!==O||o[36]!==d||o[37]!==Q||o[38]!==r?(qe=async()=>{const e=`El usuario desea aclarar estas preguntas.\n Esto significa que pueden tener información adicional, contexto o preguntas para ti.\n Ten en cuenta su respuesta y reformula las preguntas si es apropiado.\n Comienza preguntándoles qué desearían aclarar.\n\n Preguntas realizadas:\n${Q.map(e=>{const t=se[e.question];return t?`- "${e.question}"\n Respuesta: ${t}`:`- "${e.question}"\n (No se proporcionó respuesta)`}).join("\n")}`;O&&p("tengu_ask_user_question_respond_to_claude",{source:O,questionCount:Q.length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()});const t=await convertImagesToBlocks(X);d(),r.onReject(e,t&&t.length>0?t:void 0)},o[32]=X,o[33]=se,o[34]=Y,o[35]=O,o[36]=d,o[37]=Q,o[38]=r,o[39]=qe):qe=o[39];const je=qe;let ve;o[40]!==X||o[41]!==se||o[42]!==Y||o[43]!==O||o[44]!==d||o[45]!==Q||o[46]!==r?(ve=async()=>{const e=`El usuario ha indicado que ha proporcionado suficientes respuestas para la entrevista del plan.\nDeja de hacer preguntas aclaratorias y procede a finalizar el plan con la información que tienes.\n\nPreguntas realizadas y respuestas proporcionadas:\n${Q.map(e=>{const t=se[e.question];return t?`- "${e.question}"\n Respuesta: ${t}`:`- "${e.question}"\n (No se proporcionó respuesta)`}).join("\n")}`;O&&p("tengu_ask_user_question_finish_plan_interview",{source:O,questionCount:Q.length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()});const t=await convertImagesToBlocks(X);d(),r.onReject(e,t&&t.length>0?t:void 0)},o[40]=X,o[41]=se,o[42]=Y,o[43]=O,o[44]=d,o[45]=Q,o[46]=r,o[47]=ve):ve=o[47];const be=ve;let ye;o[48]!==X||o[49]!==Y||o[50]!==O||o[51]!==d||o[52]!==oe||o[53]!==Q||o[54]!==r?(ye=async e=>{O&&p("tengu_ask_user_question_accepted",{source:O,questionCount:Q.length,answerCount:Object.keys(e).length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()});const t={};for(const n of Q){const s=e[n.question],o=oe[n.question]?.textInputValue,i=s?n.options.find(e=>e.label===s):void 0,a=i?.preview;(a||o?.trim())&&(t[n.question]={...a&&{preview:a},...o?.trim()&&{notes:o.trim()}})}const n={...r.input,answers:e,...Object.keys(t).length>0&&{annotations:t}},s=await convertImagesToBlocks(X);d(),r.onAllow(n,[],void 0,s&&s.length>0?s:void 0)},o[48]=X,o[49]=Y,o[50]=O,o[51]=d,o[52]=oe,o[53]=Q,o[54]=r,o[55]=ye):ye=o[55];const we=ye;let xe;o[56]!==se||o[57]!==F||o[58]!==Q.length||o[59]!==le||o[60]!==we?(xe=(e,t,n,s)=>{const o=void 0===s||s;let i;const a=Array.isArray(t);if(a)i=t.join(", ");else if(n){i=Object.values(F[e]??{}).filter(_temp5).length>0?`${n} (Imagen adjunta)`:n}else if("__other__"===t){i=Object.values(F[e]??{}).filter(_temp6).length>0?"(Imagen adjunta)":t}else i=t;const r=1===Q.length;if(!a&&r&&o){const t={...se,[e]:i};return void we(t).catch(j)}le(e,i,o)},o[56]=se,o[57]=F,o[58]=Q.length,o[59]=le,o[60]=we,o[61]=xe):xe=o[61];const ke=xe;let Ie;o[62]!==se||o[63]!==_e||o[64]!==we?(Ie=function(e){"cancel"!==e?"submit"===e&&we(se).catch(j):_e()},o[62]=se,o[63]=_e,o[64]=we,o[65]=Ie):Ie=o[65];const Pe=Ie,Re=de?(Q?.length||1)-1:Q?.length||0;let Ce;o[66]!==ne||o[67]!==re?(Ce=()=>{ne>0&&re()},o[66]=ne,o[67]=re,o[68]=Ce):Ce=o[68];const Qe=Ce;let Te;o[69]!==ne||o[70]!==Re||o[71]!==ae?(Te=()=>{ne<Re&&ae()},o[69]=ne,o[70]=Re,o[71]=ae,o[72]=Te):Te=o[72];const Ae=Te;let Me;o[73]!==Ae||o[74]!==Qe?(Me={"tabs:previous":Qe,"tabs:next":Ae},o[73]=Ae,o[74]=Qe,o[75]=Me):Me=o[75];const Se=!(ie&&!pe);let Ue;if(o[76]!==Se?(Ue={context:"Tabs",isActive:Se},o[76]=Se,o[77]=Ue):Ue=o[77],m(Me,Ue),me){let n,s,i,a;return o[78]!==me.question?(n=(e,t,n,s,o)=>K(me.question,e,t,n,s,o),o[78]=me.question,o[79]=n):n=o[79],o[80]!==me.question||o[81]!==F?(s=F[me.question]??{},o[80]=me.question,o[81]=F,o[82]=s):s=o[82],o[83]!==me.question?(i=e=>J(me.question,e),o[83]=me.question,o[84]=i):i=o[84],o[85]!==se||o[86]!==me||o[87]!==ne||o[88]!==E||o[89]!==z||o[90]!==_e||o[91]!==be||o[92]!==ke||o[93]!==je||o[94]!==Ae||o[95]!==Qe||o[96]!==de||o[97]!==ae||o[98]!==ee||o[99]!==oe||o[100]!==Q||o[101]!==ce||o[102]!==n||o[103]!==s||o[104]!==i||o[105]!==ue?(a=e(t,{children:e(w,{question:me,questions:Q,currentQuestionIndex:ne,answers:se,questionStates:oe,hideSubmitTab:de,minContentHeight:E,minContentWidth:z,planFilePath:ee,onUpdateQuestionState:ue,onAnswer:ke,onTextInputFocus:ce,onCancel:_e,onSubmit:ae,onTabPrev:Qe,onTabNext:Ae,onRespondToContext:je,onFinishPlanInterview:be,onImagePaste:n,pastedContents:s,onRemoveImage:i})}),o[85]=se,o[86]=me,o[87]=ne,o[88]=E,o[89]=z,o[90]=_e,o[91]=be,o[92]=ke,o[93]=handleRespondToClaude,o[94]=Ae,o[95]=Qe,o[96]=de,o[97]=ae,o[98]=ee,o[99]=oe,o[100]=Q,o[101]=ce,o[102]=n,o[103]=s,o[104]=i,o[105]=ue,o[106]=a):a=o[106],a}if(pe){let n;return o[107]!==ge||o[108]!==se||o[109]!==ne||o[110]!==E||o[111]!==Pe||o[112]!==Q||o[113]!==r.permissionResult?(n=e(t,{children:e(x,{questions:Q,currentQuestionIndex:ne,answers:se,allQuestionsAnswered:ge,permissionResult:r.permissionResult,minContentHeight:E,onFinalResponse:Pe})}),o[107]=ge,o[108]=se,o[109]=ne,o[110]=E,o[111]=Pe,o[112]=Q,o[113]=r.permissionResult,o[114]=n):n=o[114],n}return null}function _temp6(e){return"image"===e.type}function _temp5(e){return"image"===e.type}function _temp4(e){return e.toolPermissionContext.mode}function _temp3(e){return"image"===e.type}function _temp2(e){return Object.values(e)}function _temp(e){return e.preview}async function convertImagesToBlocks(e){if(0!==e.length)return Promise.all(e.map(async e=>{const t={type:"image",source:{type:"base64",media_type:e.mediaType||"image/png",data:e.content}};return(await f(t)).block}))}
|
|
1
|
+
import{jsx as e,Fragment as t}from"react/jsx-runtime";import{c as n}from"react/compiler-runtime";import{Suspense as s,use as o,useRef as i,useState as a}from"react";import{useSettings as r}from"../../../hooks/useSettings.js";import{useTerminalSize as u}from"../../../hooks/useTerminalSize.js";import{stringWidth as l}from"../../../ink/stringWidth.js";import{useTheme as c}from"../../../ink.js";import{useKeybindings as m}from"../../../keybindings/useKeybinding.js";import{logEvent as p}from"../../../services/analytics/index.js";import{useAppState as h}from"../../../state/AppState.js";import{AskUserQuestionTool as g}from"../../../tools/AskUserQuestionTool/AskUserQuestionTool.js";import{getCliHighlightPromise as d}from"../../../utils/cliHighlight.js";import{maybeResizeAndDownsampleImageBlock as f}from"../../../utils/imageResizer.js";import{cacheImagePath as _,storeImage as q}from"../../../utils/imageStore.js";import{logError as j}from"../../../utils/log.js";import{applyMarkdown as v}from"../../../utils/markdown.js";import{isPlanModeInterviewPhaseEnabled as b}from"../../../utils/planModeV2.js";import{getPlanFilePath as y}from"../../../utils/plans.js";import{QuestionView as w}from"./QuestionView.js";import{SubmitQuestionsView as x}from"./SubmitQuestionsView.js";import{useMultipleChoiceState as k}from"./use-multiple-choice-state.js";export function AskUserQuestionPermissionRequest(t){const o=n(4);if(r().syntaxHighlightingDisabled){let n;return o[0]!==t?(n=e(AskUserQuestionPermissionRequestBody,{...t,highlight:null}),o[0]=t,o[1]=n):n=o[1],n}let i;return o[2]!==t?(i=e(s,{fallback:e(AskUserQuestionPermissionRequestBody,{...t,highlight:null}),children:e(AskUserQuestionWithHighlight,{...t})}),o[2]=t,o[3]=i):i=o[3],i}function AskUserQuestionWithHighlight(t){const s=n(4);let i;s[0]===Symbol.for("react.memo_cache_sentinel")?(i=d(),s[0]=i):i=s[0];const a=o(i);let r;return s[1]!==a||s[2]!==t?(r=e(AskUserQuestionPermissionRequestBody,{...t,highlight:a}),s[1]=a,s[2]=t,s[3]=r):r=s[3],r}function AskUserQuestionPermissionRequestBody(s){const o=n(115),{toolUseConfirm:r,onDone:d,onReject:f,highlight:I}=s;let P;o[0]!==r.input?(P=g.inputSchema.safeParse(r.input),o[0]=r.input,o[1]=P):P=o[1];const Q=P;let R;o[2]!==Q.data||o[3]!==Q.success?(R=Q.success&&Q.data.questions||[],o[2]=Q.data,o[3]=Q.success,o[4]=R):R=o[4];const C=R,{rows:T}=u(),[A]=c();let M=0,S=0;const U=Math.max(12,T-15);if(o[5]!==I||o[6]!==U||o[7]!==M||o[8]!==S||o[9]!==C||o[10]!==A){for(const e of C){if(e.options.some(_temp)){const t=Math.max(1,U-11);let n=0;for(const s of e.options)if(s.preview){const e=v(s.preview,A,I).split("\n"),o=e.length>t,i=o?t:e.length;n=Math.max(n,i+(o?1:0)+2);for(const t of e)S=Math.max(S,l(t))}const s=n+2,o=e.options.length+2,i=Math.max(o,s);M=Math.max(M,i+7)}else M=Math.max(M,e.options.length+3+7)}o[5]=I,o[6]=U,o[7]=M,o[8]=S,o[9]=C,o[10]=A,o[11]=M}else M=o[11];const $=Math.min(Math.max(M,12),U),B=Math.max(S,40);let H;o[12]!==$||o[13]!==B?(H={globalContentHeight:$,globalContentWidth:B},o[12]=$,o[13]=B,o[14]=H):H=o[14];const{globalContentHeight:E,globalContentWidth:z}=H,O=Q.success?Q.data.metadata?.source:void 0;let W;o[15]===Symbol.for("react.memo_cache_sentinel")?(W={},o[15]=W):W=o[15];const[F,V]=a(W),D=i(0);let N;o[16]===Symbol.for("react.memo_cache_sentinel")?(N=function(e,t,n,s,o,i){D.current=D.current+1;const a=D.current,r={id:a,type:"image",content:t,mediaType:n||"image/png",filename:s||"Imagen pegada",dimensions:o};_(r),q(r),V(t=>({...t,[e]:{...t[e]??{},[a]:r}}))},o[16]=N):N=o[16];const K=N;let G;o[17]===Symbol.for("react.memo_cache_sentinel")?(G=(e,t)=>{V(n=>{const s={...n[e]??{}};return delete s[t],{...n,[e]:s}})},o[17]=G):G=o[17];const J=G;let L;o[18]!==F?(L=Object.values(F).flatMap(_temp2).filter(_temp3),o[18]=F,o[19]=L):L=o[19];const X=L,Y="plan"===h(_temp4);let Z;o[20]!==Y?(Z=Y?y():void 0,o[20]=Y,o[21]=Z):Z=o[21];const ee=Z,te=k(),{currentQuestionIndex:ne,answers:se,questionStates:oe,isInTextInput:ie,nextQuestion:ae,prevQuestion:re,updateQuestionState:ue,setAnswer:le,setTextInputMode:ce}=te,me=ne<(C?.length||0)?C?.[ne]:null,pe=ne===(C?.length||0);let he;o[22]!==se||o[23]!==C?(he=C?.every(e=>e?.question&&!!se[e.question])??!1,o[22]=se,o[23]=C,o[24]=he):he=o[24];const ge=he,de=1===C.length&&!C[0]?.multiSelect;let fe;o[25]!==Y||o[26]!==O||o[27]!==d||o[28]!==f||o[29]!==C.length||o[30]!==r?(fe=()=>{O&&p("tengu_ask_user_question_rejected",{source:O,questionCount:C.length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()}),d(),f(),r.onReject()},o[25]=Y,o[26]=O,o[27]=d,o[28]=f,o[29]=C.length,o[30]=r,o[31]=fe):fe=o[31];const _e=fe;let qe;o[32]!==X||o[33]!==se||o[34]!==Y||o[35]!==O||o[36]!==d||o[37]!==C||o[38]!==r?(qe=async()=>{const e=`El usuario desea aclarar estas preguntas.\n Esto significa que pueden tener información adicional, contexto o preguntas para ti.\n Ten en cuenta su respuesta y reformula las preguntas si es apropiado.\n Comienza preguntándoles qué desearían aclarar.\n\n Preguntas realizadas:\n${C.map(e=>{const t=se[e.question];return t?`- "${e.question}"\n Respuesta: ${t}`:`- "${e.question}"\n (No se proporcionó respuesta)`}).join("\n")}`;O&&p("tengu_ask_user_question_respond_to_claude",{source:O,questionCount:C.length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()});const t=await convertImagesToBlocks(X);d(),r.onReject(e,t&&t.length>0?t:void 0)},o[32]=X,o[33]=se,o[34]=Y,o[35]=O,o[36]=d,o[37]=C,o[38]=r,o[39]=qe):qe=o[39];const je=qe;let ve;o[40]!==X||o[41]!==se||o[42]!==Y||o[43]!==O||o[44]!==d||o[45]!==C||o[46]!==r?(ve=async()=>{const e=`El usuario ha indicado que ha proporcionado suficientes respuestas para la entrevista del plan.\nDeja de hacer preguntas aclaratorias y procede a finalizar el plan con la información que tienes.\n\nPreguntas realizadas y respuestas proporcionadas:\n${C.map(e=>{const t=se[e.question];return t?`- "${e.question}"\n Respuesta: ${t}`:`- "${e.question}"\n (No se proporcionó respuesta)`}).join("\n")}`;O&&p("tengu_ask_user_question_finish_plan_interview",{source:O,questionCount:C.length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()});const t=await convertImagesToBlocks(X);d(),r.onReject(e,t&&t.length>0?t:void 0)},o[40]=X,o[41]=se,o[42]=Y,o[43]=O,o[44]=d,o[45]=C,o[46]=r,o[47]=ve):ve=o[47];const be=ve;let ye;o[48]!==X||o[49]!==Y||o[50]!==O||o[51]!==d||o[52]!==oe||o[53]!==C||o[54]!==r?(ye=async e=>{O&&p("tengu_ask_user_question_accepted",{source:O,questionCount:C.length,answerCount:Object.keys(e).length,isInPlanMode:Y,interviewPhaseEnabled:Y&&b()});const t={};for(const n of C){const s=e[n.question],o=oe[n.question]?.textInputValue,i=s?n.options.find(e=>e.label===s):void 0,a=i?.preview;(a||o?.trim())&&(t[n.question]={...a&&{preview:a},...o?.trim()&&{notes:o.trim()}})}const n={...r.input,answers:e,...Object.keys(t).length>0&&{annotations:t}},s=await convertImagesToBlocks(X);d(),r.onAllow(n,[],void 0,s&&s.length>0?s:void 0)},o[48]=X,o[49]=Y,o[50]=O,o[51]=d,o[52]=oe,o[53]=C,o[54]=r,o[55]=ye):ye=o[55];const we=ye;let xe;o[56]!==se||o[57]!==F||o[58]!==C.length||o[59]!==le||o[60]!==we?(xe=(e,t,n,s)=>{const o=void 0===s||s;let i;const a=Array.isArray(t);if(a)i=t.join(", ");else if(n){i=Object.values(F[e]??{}).filter(_temp5).length>0?`${n} (Imagen adjunta)`:n}else if("__other__"===t){i=Object.values(F[e]??{}).filter(_temp6).length>0?"(Imagen adjunta)":t}else i=t;const r=1===C.length;if(!a&&r&&o){const t={...se,[e]:i};return void we(t).catch(j)}le(e,i,o)},o[56]=se,o[57]=F,o[58]=C.length,o[59]=le,o[60]=we,o[61]=xe):xe=o[61];const ke=xe;let Ie;o[62]!==se||o[63]!==_e||o[64]!==we?(Ie=function(e){"cancel"!==e?"submit"===e&&we(se).catch(j):_e()},o[62]=se,o[63]=_e,o[64]=we,o[65]=Ie):Ie=o[65];const Pe=Ie,Qe=de?(C?.length||1)-1:C?.length||0;let Re;o[66]!==ne||o[67]!==re?(Re=()=>{ne>0&&re()},o[66]=ne,o[67]=re,o[68]=Re):Re=o[68];const Ce=Re;let Te;o[69]!==ne||o[70]!==Qe||o[71]!==ae?(Te=()=>{ne<Qe&&ae()},o[69]=ne,o[70]=Qe,o[71]=ae,o[72]=Te):Te=o[72];const Ae=Te;let Me;o[73]!==Ae||o[74]!==Ce?(Me={"tabs:previous":Ce,"tabs:next":Ae},o[73]=Ae,o[74]=Ce,o[75]=Me):Me=o[75];const Se=!(ie&&!pe);let Ue;if(o[76]!==Se?(Ue={context:"Tabs",isActive:Se},o[76]=Se,o[77]=Ue):Ue=o[77],m(Me,Ue),me){let n,s,i,a;return o[78]!==me.question?(n=(e,t,n,s,o)=>K(me.question,e,t,n,s,o),o[78]=me.question,o[79]=n):n=o[79],o[80]!==me.question||o[81]!==F?(s=F[me.question]??{},o[80]=me.question,o[81]=F,o[82]=s):s=o[82],o[83]!==me.question?(i=e=>J(me.question,e),o[83]=me.question,o[84]=i):i=o[84],o[85]!==se||o[86]!==me||o[87]!==ne||o[88]!==E||o[89]!==z||o[90]!==_e||o[91]!==be||o[92]!==ke||o[93]!==je||o[94]!==Ae||o[95]!==Ce||o[96]!==de||o[97]!==ae||o[98]!==ee||o[99]!==oe||o[100]!==C||o[101]!==ce||o[102]!==n||o[103]!==s||o[104]!==i||o[105]!==ue?(a=e(t,{children:e(w,{question:me,questions:C,currentQuestionIndex:ne,answers:se,questionStates:oe,hideSubmitTab:de,minContentHeight:E,minContentWidth:z,planFilePath:ee,onUpdateQuestionState:ue,onAnswer:ke,onTextInputFocus:ce,onCancel:_e,onSubmit:ae,onTabPrev:Ce,onTabNext:Ae,onRespondToContext:je,onFinishPlanInterview:be,onImagePaste:n,pastedContents:s,onRemoveImage:i})}),o[85]=se,o[86]=me,o[87]=ne,o[88]=E,o[89]=z,o[90]=_e,o[91]=be,o[92]=ke,o[93]=je,o[94]=Ae,o[95]=Ce,o[96]=de,o[97]=ae,o[98]=ee,o[99]=oe,o[100]=C,o[101]=ce,o[102]=n,o[103]=s,o[104]=i,o[105]=ue,o[106]=a):a=o[106],a}if(pe){let n;return o[107]!==ge||o[108]!==se||o[109]!==ne||o[110]!==E||o[111]!==Pe||o[112]!==C||o[113]!==r.permissionResult?(n=e(t,{children:e(x,{questions:C,currentQuestionIndex:ne,answers:se,allQuestionsAnswered:ge,permissionResult:r.permissionResult,minContentHeight:E,onFinalResponse:Pe})}),o[107]=ge,o[108]=se,o[109]=ne,o[110]=E,o[111]=Pe,o[112]=C,o[113]=r.permissionResult,o[114]=n):n=o[114],n}return null}function _temp6(e){return"image"===e.type}function _temp5(e){return"image"===e.type}function _temp4(e){return e.toolPermissionContext.mode}function _temp3(e){return"image"===e.type}function _temp2(e){return Object.values(e)}function _temp(e){return e.preview}async function convertImagesToBlocks(e){if(0!==e.length)return Promise.all(e.map(async e=>{const t={type:"image",source:{type:"base64",media_type:e.mediaType||"image/png",data:e.content}};return(await f(t)).block}))}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isEnvTruthy as e}from"../utils/envUtils.js";function getOauthConfigType(){if("ant"===process.env.USER_TYPE){if(e(process.env.USE_LOCAL_OAUTH))return"local";if(e(process.env.USE_STAGING_OAUTH))return"staging"}return"prod"}export function fileSuffixForOauthConfig(){if(process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL||process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL)return"-custom-oauth";switch(getOauthConfigType()){case"local":return"-local-oauth";case"staging":return"-staging-oauth";case"prod":return""}}function parseSpaceSeparatedList(e){return e?.split(/\s+/).filter(Boolean)??[]}const t="/auth/callback",_=`http://localhost:1455${t}`,o=["openid","profile","email","offline_access"];export const CLAUDE_AI_INFERENCE_SCOPE="user:inference";export const CLAUDE_AI_PROFILE_SCOPE="user:profile";export const OAUTH_BETA_HEADER="oauth-2025-04-20";export const CONSOLE_OAUTH_SCOPES=["org:create_api_key","user:profile"];export const CLAUDE_AI_OAUTH_SCOPES=["user:profile","user:inference","user:sessions:claude_code","user:mcp_servers","user:file_upload"];export const ALL_OAUTH_SCOPES=Array.from(new Set([...CONSOLE_OAUTH_SCOPES,...CLAUDE_AI_OAUTH_SCOPES]));const a={BASE_API_URL:"https://api.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.claude.com/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude.com/cai/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude.ai",TOKEN_URL:"https://platform.claude.com/v1/oauth/token",API_KEY_URL:"https://api.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.claude.com/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.claude.com/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.claude.com/oauth/code/callback",CLIENT_ID:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",OAUTH_FILE_SUFFIX:"",MCP_PROXY_URL:"https://mcp-proxy.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"};export const MCP_CLIENT_METADATA_URL="https://claude.ai/oauth/claude-code-client-metadata";const c="ant"===process.env.USER_TYPE?{BASE_API_URL:"https://api-staging.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.staging.ant.dev/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude-ai.staging.ant.dev/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude-ai.staging.ant.dev",TOKEN_URL:"https://platform.staging.ant.dev/v1/oauth/token",API_KEY_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.staging.ant.dev/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.staging.ant.dev/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.staging.ant.dev/oauth/code/callback",CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-staging-oauth",MCP_PROXY_URL:"https://mcp-proxy-staging.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"}:void 0;const s=["https://beacon.claude-ai.staging.ant.dev","https://claude.fedstart.com","https://claude-staging.fedstart.com"];export function getOauthConfig(){let e=(()=>{switch(getOauthConfigType()){case"local":return function(){const e=(process.env.CONTEXT_LOCAL_OAUTH_API_BASE??process.env.CLAUDE_LOCAL_OAUTH_API_BASE)?.replace(/\/$/,"")??"http://localhost:8000",t=(process.env.CONTEXT_LOCAL_OAUTH_APPS_BASE??process.env.CLAUDE_LOCAL_OAUTH_APPS_BASE)?.replace(/\/$/,"")??"http://localhost:4000",_=(process.env.CONTEXT_LOCAL_OAUTH_CONSOLE_BASE??process.env.CLAUDE_LOCAL_OAUTH_CONSOLE_BASE)?.replace(/\/$/,"")??"http://localhost:3000";return{BASE_API_URL:e,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${t}/oauth/authorize`,CLAUDE_AI_ORIGIN:t,TOKEN_URL:`${e}/v1/oauth/token`,API_KEY_URL:`${e}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${e}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-local-oauth",MCP_PROXY_URL:"http://localhost:8205",MCP_PROXY_PATH:"/v1/toolbox/shttp/mcp/{server_id}"}}();case"staging":return c??a;case"prod":return a}})();const t=process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL??process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL;if(t){const _=t.replace(/\/$/,"");if(!s.includes(_)){const e=void 0!==process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL?"CONTEXT_CODE_CUSTOM_OAUTH_URL":"CLAUDE_CODE_CUSTOM_OAUTH_URL";throw new Error(`${e} is not an approved endpoint.`)}e={...e,BASE_API_URL:_,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_ORIGIN:_,TOKEN_URL:`${_}/v1/oauth/token`,API_KEY_URL:`${_}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${_}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,OAUTH_FILE_SUFFIX:"-custom-oauth"}}const _=process.env.CONTEXT_CODE_OAUTH_CLIENT_ID??process.env.CLAUDE_CODE_OAUTH_CLIENT_ID;return _&&(e={...e,CLIENT_ID:_}),e}export function getOpenAIOAuthConfig(){const e=process.env.OPENAI_OAUTH_BASE_URL?.replace(/\/$/,"")??process.env.OPENAI_OAUTH_ENDPOINT_BASE?.replace(/\/$/,"")??"https://auth.openai.com";return{AUTHORIZE_URL:process.env.OPENAI_OAUTH_AUTHORIZE_URL??`${e}/oauth/authorize`,TOKEN_URL:process.env.OPENAI_OAUTH_TOKEN_URL??`${e}/oauth/token`,CLIENT_ID:process.env.OPENAI_OAUTH_CLIENT_ID??"app_EMoamEEZ73f0CkXaXp7hrann",MANUAL_REDIRECT_URL:process.env.OPENAI_OAUTH_MANUAL_REDIRECT_URL??process.env.OPENAI_OAUTH_REDIRECT_URL??_,LOCAL_REDIRECT_URL:process.env.OPENAI_OAUTH_LOCAL_REDIRECT_URL??_,CALLBACK_PATH:process.env.OPENAI_OAUTH_CALLBACK_PATH??t,CALLBACK_PORT:parseInt(process.env.OPENAI_OAUTH_CALLBACK_PORT||String(1455),10),SUCCESS_URL:process.env.OPENAI_OAUTH_SUCCESS_URL??(e?`${e}/oauth/code/success?app=codex`:void 0),FILE_SUFFIX:"-openai-oauth",BASE_API_URL:e,PROFILE_URL:process.env.OPENAI_OAUTH_PROFILE_URL??(e?`${e}/api/oauth/profile`:void 0),SCOPES:parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES).length>0?parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES):[...o]}}
|
|
1
|
+
import{isEnvTruthy as e}from"../utils/envUtils.js";function getOauthConfigType(){if("ant"===process.env.USER_TYPE){if(e(process.env.USE_LOCAL_OAUTH))return"local";if(e(process.env.USE_STAGING_OAUTH))return"staging"}return"prod"}export function fileSuffixForOauthConfig(){if(process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL||process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL)return"-custom-oauth";switch(getOauthConfigType()){case"local":return"-local-oauth";case"staging":return"-staging-oauth";case"prod":return""}}function parseSpaceSeparatedList(e){return e?.split(/\s+/).filter(Boolean)??[]}export function getOpenAIOriginator(){return process.env.OPENAI_OAUTH_ORIGINATOR?.trim()||"codex_cli_rs"}const t="/auth/callback",_=`http://localhost:1455${t}`,o=["openid","profile","email","offline_access"];export const CLAUDE_AI_INFERENCE_SCOPE="user:inference";export const CLAUDE_AI_PROFILE_SCOPE="user:profile";export const OAUTH_BETA_HEADER="oauth-2025-04-20";export const CONSOLE_OAUTH_SCOPES=["org:create_api_key","user:profile"];export const CLAUDE_AI_OAUTH_SCOPES=["user:profile","user:inference","user:sessions:claude_code","user:mcp_servers","user:file_upload"];export const ALL_OAUTH_SCOPES=Array.from(new Set([...CONSOLE_OAUTH_SCOPES,...CLAUDE_AI_OAUTH_SCOPES]));const a={BASE_API_URL:"https://api.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.claude.com/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude.com/cai/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude.ai",TOKEN_URL:"https://platform.claude.com/v1/oauth/token",API_KEY_URL:"https://api.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.claude.com/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.claude.com/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.claude.com/oauth/code/callback",CLIENT_ID:"9d1c250a-e61b-44d9-88ed-5944d1962f5e",OAUTH_FILE_SUFFIX:"",MCP_PROXY_URL:"https://mcp-proxy.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"};export const MCP_CLIENT_METADATA_URL="https://claude.ai/oauth/claude-code-client-metadata";const c="ant"===process.env.USER_TYPE?{BASE_API_URL:"https://api-staging.anthropic.com",CONSOLE_AUTHORIZE_URL:"https://platform.staging.ant.dev/oauth/authorize",CLAUDE_AI_AUTHORIZE_URL:"https://claude-ai.staging.ant.dev/oauth/authorize",CLAUDE_AI_ORIGIN:"https://claude-ai.staging.ant.dev",TOKEN_URL:"https://platform.staging.ant.dev/v1/oauth/token",API_KEY_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/create_api_key",ROLES_URL:"https://api-staging.anthropic.com/api/oauth/claude_cli/roles",CONSOLE_SUCCESS_URL:"https://platform.staging.ant.dev/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code",CLAUDEAI_SUCCESS_URL:"https://platform.staging.ant.dev/oauth/code/success?app=claude-code",MANUAL_REDIRECT_URL:"https://platform.staging.ant.dev/oauth/code/callback",CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-staging-oauth",MCP_PROXY_URL:"https://mcp-proxy-staging.anthropic.com",MCP_PROXY_PATH:"/v1/mcp/{server_id}"}:void 0;const s=["https://beacon.claude-ai.staging.ant.dev","https://claude.fedstart.com","https://claude-staging.fedstart.com"];export function getOauthConfig(){let e=(()=>{switch(getOauthConfigType()){case"local":return function(){const e=(process.env.CONTEXT_LOCAL_OAUTH_API_BASE??process.env.CLAUDE_LOCAL_OAUTH_API_BASE)?.replace(/\/$/,"")??"http://localhost:8000",t=(process.env.CONTEXT_LOCAL_OAUTH_APPS_BASE??process.env.CLAUDE_LOCAL_OAUTH_APPS_BASE)?.replace(/\/$/,"")??"http://localhost:4000",_=(process.env.CONTEXT_LOCAL_OAUTH_CONSOLE_BASE??process.env.CLAUDE_LOCAL_OAUTH_CONSOLE_BASE)?.replace(/\/$/,"")??"http://localhost:3000";return{BASE_API_URL:e,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${t}/oauth/authorize`,CLAUDE_AI_ORIGIN:t,TOKEN_URL:`${e}/v1/oauth/token`,API_KEY_URL:`${e}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${e}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/buy_credits?returnUrl=/oauth/code/success%3Fapp%3Dclaude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,CLIENT_ID:"22422756-60c9-4084-8eb7-27705fd5cf9a",OAUTH_FILE_SUFFIX:"-local-oauth",MCP_PROXY_URL:"http://localhost:8205",MCP_PROXY_PATH:"/v1/toolbox/shttp/mcp/{server_id}"}}();case"staging":return c??a;case"prod":return a}})();const t=process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL??process.env.CLAUDE_CODE_CUSTOM_OAUTH_URL;if(t){const _=t.replace(/\/$/,"");if(!s.includes(_)){const e=void 0!==process.env.CONTEXT_CODE_CUSTOM_OAUTH_URL?"CONTEXT_CODE_CUSTOM_OAUTH_URL":"CLAUDE_CODE_CUSTOM_OAUTH_URL";throw new Error(`${e} is not an approved endpoint.`)}e={...e,BASE_API_URL:_,CONSOLE_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_AUTHORIZE_URL:`${_}/oauth/authorize`,CLAUDE_AI_ORIGIN:_,TOKEN_URL:`${_}/v1/oauth/token`,API_KEY_URL:`${_}/api/oauth/claude_cli/create_api_key`,ROLES_URL:`${_}/api/oauth/claude_cli/roles`,CONSOLE_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,CLAUDEAI_SUCCESS_URL:`${_}/oauth/code/success?app=claude-code`,MANUAL_REDIRECT_URL:`${_}/oauth/code/callback`,OAUTH_FILE_SUFFIX:"-custom-oauth"}}const _=process.env.CONTEXT_CODE_OAUTH_CLIENT_ID??process.env.CLAUDE_CODE_OAUTH_CLIENT_ID;return _&&(e={...e,CLIENT_ID:_}),e}export function getOpenAIOAuthConfig(){const e=process.env.OPENAI_OAUTH_BASE_URL?.replace(/\/$/,"")??process.env.OPENAI_OAUTH_ENDPOINT_BASE?.replace(/\/$/,"")??"https://auth.openai.com";return{AUTHORIZE_URL:process.env.OPENAI_OAUTH_AUTHORIZE_URL??`${e}/oauth/authorize`,TOKEN_URL:process.env.OPENAI_OAUTH_TOKEN_URL??`${e}/oauth/token`,CLIENT_ID:process.env.OPENAI_OAUTH_CLIENT_ID??"app_EMoamEEZ73f0CkXaXp7hrann",MANUAL_REDIRECT_URL:process.env.OPENAI_OAUTH_MANUAL_REDIRECT_URL??process.env.OPENAI_OAUTH_REDIRECT_URL??_,LOCAL_REDIRECT_URL:process.env.OPENAI_OAUTH_LOCAL_REDIRECT_URL??_,CALLBACK_PATH:process.env.OPENAI_OAUTH_CALLBACK_PATH??t,CALLBACK_PORT:parseInt(process.env.OPENAI_OAUTH_CALLBACK_PORT||String(1455),10),SUCCESS_URL:process.env.OPENAI_OAUTH_SUCCESS_URL??(e?`${e}/oauth/code/success?app=codex`:void 0),FILE_SUFFIX:"-openai-oauth",BASE_API_URL:e,PROFILE_URL:process.env.OPENAI_OAUTH_PROFILE_URL??(e?`${e}/api/oauth/profile`:void 0),SCOPES:parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES).length>0?parseSpaceSeparatedList(process.env.OPENAI_OAUTH_SCOPES):[...o]}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getVisibleProvider as e,VISIBLE_PROVIDERS as r}from"../../utils/model/providerCatalog.js";import{getActiveProviderProfile as i,getLastUsedProviderProfile as o,isProfiledProvider as t,listProviderProfiles as a,setActiveProfileForProvider as n}from"../../utils/model/providerProfiles.js";import{switchProviderPreference as l}from"../../utils/model/providerSwitch.js";import{hasStoredProviderApiKey as d,hasStoredProviderOAuthTokens as u}from"../../utils/auth.js";export function isCoreProviderEnabled(){return"0"!==process.env.CORE_PROVIDER_ENABLED}export function listCoreProviders(){return r.map(e=>({id:e.id,label:e.label,implemented:e.implemented}))}export function normalizeCoreProviderInput(e){if(e)switch(e.trim().toLowerCase()){case"z.ai":case"z-ai":return"zai";case"open-router":return"openrouter";case"ollama-cloud":case"ollama_cloud":case"ollamacloud":return"ollama-cloud";case"gemini":case"gemini-api-key":case"google-ai":case"google-ai-studio":return"gemini-api";case"gemini-google":case"google":case"google-oauth":return"gemini-google";default:return e.trim().toLowerCase()}}export function getCoreProviderLabel(r){return e(r).label}export function listCoreProviderProfiles(){const e=a(),r=i(),o=e.reduce((e,i)=>{const o=i.provider;return e[o]||(e[o]=[]),e[o].push({id:i.id,name:i.name,provider:o,baseUrl:i.baseUrl,isActive:i.id===r?.id,isAuthenticated:isProviderProfileAuthenticated(o,i.id)}),e},{});return{activeProfile:r?{id:r.id,name:r.name,provider:r.provider,baseUrl:r.baseUrl}:null,providers:o}}export function getCoreCurrentProviderProfile(){const e=i();return e?{activeProfile:{id:e.id,name:e.name,provider:e.provider,baseUrl:e.baseUrl}}:{activeProfile:null}}export function setCoreActiveProfile(e,r){t(e)&&n(e,r)}export function isCoreSelectedProfileReady(e,r){if(!r||!t(e))return!0;const i=o(e);return!!i&&isProviderProfileAuthenticated(e,i.id)}export function switchCoreProvider(e){const r=l({currentModel:e.currentModel,currentProvider:e.currentProvider,targetProvider:e.targetProvider,targetProfileName:e.targetProfileName}),i=t(e.targetProvider)?o(e.targetProvider):null;return{restoredModel:r,activeProfileName:i?.name}}function isProviderProfileAuthenticated(e,r){return"claude"===e?u("claude",r):"openai"===e?u("openai",r):"openrouter"!==e&&"gemini-api"!==e&&"zai"!==e&&"minimax"!==e&&"nvidia"!==e||d(e,r)}
|
|
1
|
+
import{getVisibleProvider as e,VISIBLE_PROVIDERS as r}from"../../utils/model/providerCatalog.js";import{getActiveProviderProfile as i,getLastUsedProviderProfile as o,isProfiledProvider as t,listProviderProfiles as a,setActiveProfileForProvider as n}from"../../utils/model/providerProfiles.js";import{switchProviderPreference as l}from"../../utils/model/providerSwitch.js";import{hasStoredProviderApiKey as d,hasStoredProviderOAuthTokens as u}from"../../utils/auth.js";export function isCoreProviderEnabled(){return"0"!==process.env.CORE_PROVIDER_ENABLED}export function listCoreProviders(){return r.map(e=>({id:e.id,label:e.label,implemented:e.implemented}))}export function normalizeCoreProviderInput(e){if(e)switch(e.trim().toLowerCase()){case"z.ai":case"z-ai":return"zai";case"open-router":return"openrouter";case"ollama-cloud":case"ollama_cloud":case"ollamacloud":return"ollama-cloud";case"gemini":case"gemini-api-key":case"google-ai":case"google-ai-studio":return"gemini-api";case"gemini-google":case"google":case"google-oauth":return"gemini-google";default:return e.trim().toLowerCase()}}export function getCoreProviderLabel(r){return e(r).label}export function listCoreProviderProfiles(){const e=a(),r=i(),o=e.reduce((e,i)=>{const o=i.provider;return e[o]||(e[o]=[]),e[o].push({id:i.id,name:i.name,provider:o,baseUrl:i.baseUrl,isActive:i.id===r?.id,isAuthenticated:isProviderProfileAuthenticated(o,i.id)}),e},{});return{activeProfile:r?{id:r.id,name:r.name,provider:r.provider,baseUrl:r.baseUrl}:null,providers:o}}export function getCoreCurrentProviderProfile(){const e=i();return e?{activeProfile:{id:e.id,name:e.name,provider:e.provider,baseUrl:e.baseUrl}}:{activeProfile:null}}export function setCoreActiveProfile(e,r){t(e)&&n(e,r)}export function isCoreSelectedProfileReady(e,r){if(!r||!t(e))return!0;const i=o(e);return!!i&&isProviderProfileAuthenticated(e,i.id)}export function switchCoreProvider(e){const r=l({currentModel:e.currentModel,currentProvider:e.currentProvider,targetProvider:e.targetProvider,targetProfileName:e.targetProfileName}),i=t(e.targetProvider)?o(e.targetProvider):null;return{restoredModel:r,activeProfileName:i?.name}}function isProviderProfileAuthenticated(e,r){return"claude"===e?u("claude",r):"openai"===e?u("openai",r):"openrouter"!==e&&"gemini-api"!==e&&"zai"!==e&&"minimax"!==e&&"nvidia"!==e&&"deepseek"!==e&&"xai"!==e&&"gmi"!==e&&"novita"!==e&&"stepfun"!==e&&"huggingface"!==e&&"opencode-zen"!==e&&"arcee"!==e&&"alibaba"!==e&&"kimi"!==e||d(e,r)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsxs as e}from"react/jsx-runtime";import{useCallback as t,useEffect as n,useMemo as o,useRef as s,useState as r}from"react";import{useNotifications as i}from"../context/notifications.js";import{Text as a}from"../ink.js";import{logEvent as l}from"../services/analytics/index.js";import{useDebounceCallback as m}from"usehooks-ts";import{getCommandName as g}from"../commands.js";import{getModeFromInput as c,getValueFromInput as u}from"../components/PromptInput/inputModes.js";import{useIsModalOverlayActive as d,useRegisterOverlay as p}from"../context/overlayContext.js";import{KeyboardEvent as f}from"../ink/events/keyboard-event.js";import{useInput as h}from"../ink.js";import{useOptionalKeybindingContext as v,useRegisterKeybindingContext as A}from"../keybindings/KeybindingContext.js";import{useKeybindings as b}from"../keybindings/useKeybinding.js";import{useShortcutDisplay as S}from"../keybindings/useShortcutDisplay.js";import{useAppState as w,useAppStateStore as $}from"../state/AppState.js";import{isAgentSwarmsEnabled as y}from"../utils/agentSwarmsEnabled.js";import{getShellCompletions as C}from"../utils/bash/shellCompletion.js";import{formatLogMetadata as x}from"../utils/format.js";import{getSessionIdFromLog as k,searchSessionsByCustomTitle as H}from"../utils/sessionStorage.js";import{applyCommandSuggestion as P,findMidInputSlashCommand as T,getBestCommandMatch as W,isCommandInput as L}from"../utils/suggestions/commandSuggestions.js";import{getDirectoryCompletions as j}from"../utils/suggestions/directoryCompletion.js";import{getShellHistoryCompletion as N}from"../utils/suggestions/shellHistoryCompletion.js";import{getSlackChannelSuggestions as I,hasSlackMcpServer as M}from"../utils/suggestions/slackChannelSuggestions.js";import{TEAM_LEAD_NAME as q}from"../utils/swarm/constants.js";import{listProviderProfiles as Q}from"../utils/model/providerProfiles.js";import{applyFileSuggestion as D,findLongestCommonPrefix as R,onIndexBuildComplete as V,startBackgroundCacheRefresh as O}from"./fileSuggestions.js";import{generateUnifiedSuggestions as E}from"./unifiedSuggestions.js";const _=/^@[\p{L}\p{N}\p{M}_\-./\\()[\]~:]*/u,z=/^[\p{L}\p{N}\p{M}_\-./\\()[\]~:]+/u,G=/(@[\p{L}\p{N}\p{M}_\-./\\()[\]~:]*|[\p{L}\p{N}\p{M}_\-./\\()[\]~:]+)$/u,F=/[\p{L}\p{N}\p{M}_\-./\\()[\]~:]+$/u,K=/(^|\s)@([\p{L}\p{N}\p{M}_\-./\\()[\]~:]*|"[^"]*"?)$/u,B=/(^|\s)#([a-z0-9][a-z0-9_-]*)$/,U=["list","current","use","rename","remove","model","agent"],Z=["list","show","enable","disable","setup","orchestrator"],J=["list","create","show","orchestrator","equipo","add-member"],X=["frontend","backend","docs","tests","review","database","devops"],Y=[{provider:"claude",label:"Context"},{provider:"openai",label:"OpenAI"},{provider:"openrouter",label:"OpenRouter"},{provider:"ollama",label:"Ollama"},{provider:"ollama-cloud",label:"Ollama Cloud"},{provider:"gemini-api",label:"Gemini API"},{provider:"gemini-google",label:"Gemini Google OAuth"},{provider:"zai",label:"Z.AI"},{provider:"minimax",label:"MiniMax"},{provider:"nvidia",label:"NVIDIA API"},{provider:"deepseek",label:"DeepSeek"},{provider:"custom-openai",label:"Custom OpenAI"},{provider:"custom-anthropic",label:"Custom Anthropic"}];function isPathMetadata(e){return"object"==typeof e&&null!==e&&"type"in e&&("directory"===e.type||"file"===e.type)}function getPreservedSelection(e,t,n){if(0===n.length)return-1;if(t<0)return 0;const o=e[t];if(!o)return 0;const s=n.findIndex(e=>e.id===o.id);return s>=0?s:0}function replaceProfileArgs(e,t){const n="/profile";return t.length>0?`${n} ${t}`:n}function buildProfileArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}function replaceWorkspaceArgs(e){const t="/workspace";return e.length>0?`${t} ${e}`:t}function buildWorkspaceArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}function replaceTeamArgs(e){const t="/team";return e.length>0?`${t} ${e}`:t}function buildTeamArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}function getProviderCommandSuggestions(e){const t=extractCommandNameAndArgs(e);if(!t||"provider"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=r[1]??"",makeProviderSuggestions=e=>Y.filter(t=>t.provider.startsWith(e.toLowerCase())).map(e=>buildProfileArgSuggestion(`provider-choice-${e.provider}`,e.provider,`/provider ${e.provider} `,e.label));if(r.length<=1){const e=i.toLowerCase();return{suggestions:[...["list","current","reset"].filter(t=>t.startsWith(e)).map(e=>buildProfileArgSuggestion(`provider-subcommand-${e}`,e,`/provider ${e} `,"list"===e?"Listar proveedores":"current"===e?"Ver proveedor actual":"Resetear configuración")),...makeProviderSuggestions(e)],commandArgumentHint:"<proveedor|list|current>"}}if(["list","current","reset"].includes(i.toLowerCase()))return{suggestions:[],commandArgumentHint:void 0};if(Y.some(e=>e.provider===i.toLowerCase())&&r.length<=2){const e=a.toLowerCase(),t=((e,t)=>Q(e).filter(e=>e.name.toLowerCase().startsWith(t.toLowerCase())).map(t=>buildProfileArgSuggestion(`provider-profile-${t.id}`,t.name,`/provider ${e} ${t.name} `,`${t.agentName}${t.lastModel?` · ${t.lastModel}`:""}`)))(i.toLowerCase(),e);return{suggestions:[...t,...["reset","set","url","clear"].filter(t=>t.startsWith(e)).map(e=>buildProfileArgSuggestion(`provider-keyword-${e}`,e,`/provider ${i} ${e} `,`Acción: ${e}`))],commandArgumentHint:"<perfil|url|reset>"}}return{suggestions:[],commandArgumentHint:void 0}}function buildSlashArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}const ee=[{name:"status",description:"Ver configuración actual"},{name:"browser",description:"Cambiar navegador",valueAfter:"<chromium|chrome|firefox|webkit|msedge>"},{name:"visible",description:"Modo visible (headed)"},{name:"headless",description:"Modo oculto (headless)"},{name:"executable",description:'Ruta a binario custom o "clear"'},{name:"device",description:'Dispositivo a emular o "clear"'},{name:"viewport",description:'Tamaño viewport (ej 1280x720) o "clear"'},{name:"reset",description:"Borrar config y volver a defaults"},{name:"help",description:"Ver ayuda detallada"}],te=[{name:"chromium",description:"Chromium (default, Playwright lo descarga)"},{name:"chrome",description:"Google Chrome del sistema"},{name:"msedge",description:"Microsoft Edge del sistema (Windows)"},{name:"firefox",description:"Firefox (Playwright lo descarga)"},{name:"webkit",description:"WebKit (Playwright lo descarga)"}];const ne=[{name:"status",description:"Ver estado del bridge y números autorizados"},{name:"permitidos",description:"Listar/configurar números autorizados"},{name:"start",description:"Iniciar bridge (requiere cuenta vinculada)"},{name:"stop",description:"Detener bridge"},{name:"help",description:"Ver ayuda detallada"},{name:"global",description:"Subcomandos del canal global (status/start/stop)"}],oe=[{name:"status",description:"Estado del daemon global"},{name:"start",description:"Iniciar daemon global"},{name:"stop",description:"Detener daemon global"}];const se=[{name:"status",description:"Ver estado del bot y usuarios permitidos"},{name:"permitidos",description:"Listar usuarios autorizados"},{name:"help",description:"Ver ayuda detallada"},{name:"global",description:"Subcomandos del canal global (status/start/stop)"}];const re=[{name:"start",description:"Iniciar servidor y abrir en navegador"},{name:"stop",description:"Detener servidor web"},{name:"status",description:"Ver estado del servidor y conexiones"},{name:"open",description:"Abrir la WebApp en el navegador"},{name:"token",description:"Ver token de autenticación actual"},{name:"port",description:"Cambiar puerto del servidor"},{name:"autostart",description:"Activar/desactivar inicio automático"},{name:"help",description:"Ver ayuda detallada"}];function getProviderAgentRefSuggestions(e,t,n=!0){const o=e.toLowerCase(),s=[];for(const e of Y)for(const r of Q(e.provider)){const i=`${e.provider}/${r.agentName||`${r.name}-lead`}`;i.toLowerCase().startsWith(o)&&s.push(buildTeamArgSuggestion(`team-agent-${r.id}`,i,replaceTeamArgs([...t,i].join(" ")+(n?" ":"")),r.lastModel?`${e.label} - ${r.lastModel}`:e.label))}return s}function applyCommandArgSuggestion(e,t,n){const o=e.metadata,s=o?.replacement??e.displayText;t(s),n(s.length)}function buildResumeInputFromSuggestion(e){const t=e.metadata;return t?.sessionId?`/resume ${t.sessionId}`:`/resume ${e.displayText}`}export function extractSearchToken(e){return e.isQuoted?e.token.slice(2).replace(/"$/,""):e.token.startsWith("@")?e.token.substring(1):e.token}export function formatReplacementValue(e){const{displayText:t,mode:n,hasAtPrefix:o,needsQuotes:s,isQuoted:r,isComplete:i}=e,a=i?" ":"";return r||s?"bash"===n?`"${t}"${a}`:`@"${t}"${a}`:o?"bash"===n?`${t}${a}`:`@${t}${a}`:t}export function applyShellSuggestion(e,t,n,o,s,r){const i=t.slice(0,n).lastIndexOf(" ")+1;let a;a="variable"===r?"$"+e.displayText+" ":"command"===r?e.displayText+" ":e.displayText;o(t.slice(0,i)+a+t.slice(n)),s(i+a.length)}const ie=/(^|\s)@[\w-]*$/;function applyTriggerSuggestion(e,t,n,o,s,r){const i=t.slice(0,n).match(o);if(!i||void 0===i.index)return;const a=i.index+(i[1]?.length??0),l=t.slice(0,a);s(l+e.displayText+" "+t.slice(n)),r(l.length+e.displayText.length+1)}let ae=null;export function applyDirectorySuggestion(e,t,n,o,s){const r=s?"/":" ",i=e.slice(0,n),a="@"+t+r;return{newInput:i+a+e.slice(n+o),cursorPos:i.length+a.length}}export function extractCompletionToken(e,t,n=!1){if(!e)return null;const o=e.substring(0,t);if(n){const n=/@"([^"]*)"?$/,s=o.match(n);if(s&&void 0!==s.index){const n=e.substring(t).match(/^[^"]*"?/),o=n?n[0]:"";return{token:s[0]+o,startPos:s.index,isQuoted:!0}}}if(n){const n=o.lastIndexOf("@");if(n>=0&&(0===n||/\s/.test(o[n-1]))){const s=o.substring(n),r=s.match(_);if(r&&r[0].length===s.length){const o=e.substring(t).match(z),s=o?o[0]:"";return{token:r[0]+s,startPos:n,isQuoted:!1}}}}const s=n?G:F,r=o.match(s);if(!r||void 0===r.index)return null;const i=e.substring(t).match(z),a=i?i[0]:"";return{token:r[0]+a,startPos:r.index,isQuoted:!1}}function extractCommandNameAndArgs(e){if(L(e)){const t=e.indexOf(" ");return-1===t?{commandName:e.slice(1),args:""}:{commandName:e.slice(1,t),args:e.slice(t+1)}}return null}export function useTypeahead({commands:_,onInputChange:z,onSubmit:G,setCursorOffset:F,input:le,cursorOffset:me,mode:ge,agents:ce,setSuggestionsState:ue,suggestionsState:{suggestions:de,selectedSuggestion:pe,commandArgumentHint:fe},suppressSuggestions:he=!1,markAccepted:ve,onModeChange:Ae}){const{addNotification:be}=i(),Se=S("chat:thinkingToggle","Chat","alt+t"),[we,$e]=r("none"),ye=o(()=>{const e=_.filter(e=>!e.isHidden);if(0===e.length)return;return Math.max(...e.map(e=>g(e).length))+6},[_]),[Ce,xe]=r(void 0),ke=w(e=>e.mcp.resources),He=$(),Pe=w(e=>e.promptSuggestion),Te=w(e=>!!e.viewingAgentTaskId),We=v(),[Le,je]=r(void 0),Ne=o(()=>{if("prompt"!==ge||he)return;const e=T(le,me);if(!e)return;const t=W(e.partialCommand,_);return t?{text:t.suffix,fullCommand:t.fullCommand,insertPosition:e.startPos+1+e.partialCommand.length}:void 0},[le,me,ge,_,he]),Ie=he?void 0:"prompt"===ge?Ne:Le,Me=s(me);Me.current=me;const qe=s(null),Qe=s(""),De=(s(""),s("")),Re=s("");s(de).current=de;const Ve=s(null),Oe=t(()=>{ue(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),$e("none"),xe(void 0),je(void 0)},[ue]),Ee=t(async(e,t=!1)=>{qe.current=e;const n=await E(e,ke,ce,t);if(qe.current===e){if(0===n.length)return ue(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),$e("none"),void xe(void 0);ue(e=>({commandArgumentHint:void 0,suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n)})),$e(n.length>0?"file":"none"),xe(void 0)}},[ke,ue,$e,xe,ce]);n(()=>(O(),V(()=>{const e=qe.current;null!==e&&(qe.current=null,Ee(e,""===e))})),[Ee]);const _e=m(Ee,50),ze=t(async e=>{Re.current=e;const t=await I(He.getState().mcp.clients,e);Re.current===e&&(ue(e=>({commandArgumentHint:void 0,suggestions:t,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,t)})),$e(t.length>0?"slack-channel":"none"),xe(void 0))},[ue]),Ge=m(ze,150),Fe=t(async(e,t)=>{const n=t??Me.current;if(he)return _e.cancel(),void Oe();if("prompt"===ge){const t=T(e,n);if(t){if(W(t.partialCommand,_))return ue(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),$e("none"),void xe(void 0)}}if("bash"===ge&&e.trim()){De.current=e;const t=await N(e);if(De.current!==e)return;if(t)return je({text:t.suffix,fullCommand:t.fullCommand,insertPosition:e.length}),ue(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),$e("none"),void xe(void 0);je(void 0)}const o="bash"!==ge?e.substring(0,n).match(/(^|\s)@([\w-]*)$/):null;if(o){const e=(o[2]??"").toLowerCase(),t=He.getState(),n=[],s=new Set;if(y()&&t.teamContext)for(const o of Object.values(t.teamContext.teammates??{}))o.name!==q&&o.name.toLowerCase().startsWith(e)&&(s.add(o.name),n.push({id:`dm-${o.name}`,displayText:`@${o.name}`,description:"send message"}));for(const[o,r]of t.agentNameRegistry){if(s.has(o))continue;if(!o.toLowerCase().startsWith(e))continue;const i=t.tasks[r]?.status;n.push({id:`dm-${o}`,displayText:`@${o}`,description:i?`send message · ${i}`:"send message"})}if(n.length>0)return _e.cancel(),ue(e=>({commandArgumentHint:void 0,suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n)})),$e("agent"),void xe(void 0)}if("prompt"===ge){const t=e.substring(0,n).match(B);if(t&&M(He.getState().mcp.clients))return void Ge(t[2]);"slack-channel"===we&&(Ge.cancel(),Oe())}const s=e.substring(0,n).match(K),r=n===e.length&&n>0&&e.length>0&&" "===e[n-1];if("prompt"===ge&&L(e)&&n>0){const t=extractCommandNameAndArgs(e);if(t&&"add-dir"===t.commandName&&t.args){const{args:e}=t;if(e.match(/\s+$/))return _e.cancel(),void Oe();const n=await j(e);return n.length>0?(ue(e=>({suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n),commandArgumentHint:void 0})),void $e("directory")):(_e.cancel(),void Oe())}if(t&&"resume"===t.commandName&&void 0!==t.args&&e.includes(" ")){const{args:e}=t,n=(await H(e,{limit:10})).map(e=>{const t=k(e);return{id:`resume-title-${t}`,displayText:e.customTitle,description:x(e),metadata:{sessionId:t}}});return n.length>0?(ue(e=>({suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n),commandArgumentHint:void 0})),void $e("custom-title")):void Oe()}}const i="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t||"team"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=i.toLowerCase();if(r.length<=1){const e=i.toLowerCase();return{suggestions:J.filter(t=>t.startsWith(e)).map(e=>buildTeamArgSuggestion(`team-subcommand-${e}`,e,replaceTeamArgs(`${e} `))),commandArgumentHint:"<subcomando>"}}if("list"===a)return{suggestions:[],commandArgumentHint:void 0};if("create"===a)return{suggestions:[],commandArgumentHint:"<nombre-equipo>"};if("show"===a)return{suggestions:[],commandArgumentHint:"<equipo>"};if("orchestrator"===a)return r.length<=2?{suggestions:[],commandArgumentHint:"<equipo>"}:{suggestions:getProviderAgentRefSuggestions(r[r.length-1]??"",r.slice(0,r.length-1),!1),commandArgumentHint:"<provider/agent>"};if("equipo"===a){if(r.length<=2)return{suggestions:[],commandArgumentHint:"<equipo>"};if(r.length<=3){const e=r[1]??"",t=(r[2]??"").toLowerCase();return{suggestions:X.filter(e=>e.startsWith(t)).map(t=>buildTeamArgSuggestion(`team-equipo-${t}`,t,replaceTeamArgs(["equipo",e,t,""].join(" ").trimEnd()+" "),`equipo ${t}`)),commandArgumentHint:"<area>"}}return{suggestions:getProviderAgentRefSuggestions(r[r.length-1]??"",r.slice(0,r.length-1),!1),commandArgumentHint:"<provider/agent>"}}if("add-member"===a){if(r.length<=2)return{suggestions:[],commandArgumentHint:"<equipo>"};if(r.length<=3){const e=r[1]??"",t=(r[2]??"").toLowerCase();return{suggestions:X.filter(e=>e.startsWith(t)).map(t=>buildTeamArgSuggestion(`team-member-equipo-${t}`,t,replaceTeamArgs(["add-member",e,t,""].join(" ").trimEnd()+" "),`equipo ${t}`)),commandArgumentHint:"<area>"}}return r.length<=4?{suggestions:getProviderAgentRefSuggestions(r[3]??"",r.slice(0,3)),commandArgumentHint:"<provider/agent>"}:{suggestions:[],commandArgumentHint:"[duty]"}}return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(i){const{suggestions:e,commandArgumentHint:t}=i;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const a="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t||"workspace"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=i.toLowerCase();if(r.length<=1){const e=i.toLowerCase();return{suggestions:Z.filter(t=>t.startsWith(e)).map(e=>buildWorkspaceArgSuggestion(`workspace-subcommand-${e}`,e,replaceWorkspaceArgs(`${e} `))),commandArgumentHint:"<subcomando>"}}if(["show","enable","disable"].includes(a)&&r.length<=2){const e=(r[1]??"").toLowerCase();return{suggestions:Y.filter(t=>t.provider.startsWith(e)).map(e=>buildWorkspaceArgSuggestion(`workspace-provider-${e.provider}`,e.provider,replaceWorkspaceArgs(`${a} ${e.provider}`),e.label)),commandArgumentHint:"<proveedor>"}}if("orchestrator"===a)return{suggestions:[],commandArgumentHint:"[equipo] [provider/agent]"};if("setup"!==a)return{suggestions:[],commandArgumentHint:void 0};if(r.length<=2)return{suggestions:[],commandArgumentHint:"<equipo> [orchestrator=<area|provider/agent>]"};const l=r.length-1,m=r[l]??"",g=r.slice(0,l);if(!g.some(e=>e.toLowerCase().startsWith("orchestrator="))&&"orchestrator=".startsWith(m.toLowerCase()))return{suggestions:[buildWorkspaceArgSuggestion("workspace-orchestrator","orchestrator=",replaceWorkspaceArgs([...g,"orchestrator="].join(" ")),"escoger coordinador principal")],commandArgumentHint:"orchestrator=<area|provider/agent>"};if(m.toLowerCase().startsWith("orchestrator=")){const e=m.slice(13).toLowerCase(),t=X.filter(t=>t.startsWith(e)).map(e=>buildWorkspaceArgSuggestion(`workspace-orchestrator-equipo-${e}`,e,replaceWorkspaceArgs([...g,`orchestrator=${e} `].join(" ").trimEnd()),`usar el equipo ${e} como orquestador`)),n=[];for(const t of Y)for(const o of Q(t.provider)){const s=`${t.provider}/${o.agentName||`${o.name}-lead`}`;s.toLowerCase().startsWith(e)&&n.push(buildWorkspaceArgSuggestion(`workspace-orchestrator-agent-${o.id}`,s,replaceWorkspaceArgs([...g,`orchestrator=${s} `].join(" ").trimEnd()),`agente de ${t.label}`))}return{suggestions:[...t,...n],commandArgumentHint:"orchestrator=<area|provider/agent>"}}const c=m.indexOf(":");if(c>=0){const e=m.slice(0,c),t=m.slice(c+1).toLowerCase();return{suggestions:X.filter(e=>e.startsWith(t)).map(t=>buildWorkspaceArgSuggestion(`workspace-equipo-${e}-${t}`,t,replaceWorkspaceArgs([...g,`${e}:${t} `].join(" ").trimEnd()),`equipo ${t}`)),commandArgumentHint:"<proveedor/perfil:area>"}}const u=m.toLowerCase(),d=[];for(const e of Y)for(const t of Q(e.provider)){const n=`${e.provider}/${t.name}`;n.toLowerCase().startsWith(u)&&d.push(buildWorkspaceArgSuggestion(`workspace-profile-${t.id}`,`${n}:`,replaceWorkspaceArgs([...g,`${n}:`].join(" ")),t.lastModel?`${e.label} - ${t.lastModel}`:e.label))}return{suggestions:d,commandArgumentHint:"<proveedor/perfil:area>"}}(e):null;if(a){const{suggestions:e,commandArgumentHint:t}=a;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const l="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t||"profile"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=r[1]??"",l=r[2]??"",m=i.toLowerCase(),makeProviderSuggestions=(e,t)=>Y.filter(t=>t.provider.startsWith(e.toLowerCase())).map(e=>buildProfileArgSuggestion(`profile-provider-${e.provider}`,e.provider,replaceProfileArgs(0,[...t,e.provider,""].join(" ").trimEnd()+" "),e.label)),makeProfileSuggestions=(e,t,n)=>e&&Y.some(t=>t.provider===e)?Q(e).filter(e=>e.name.toLowerCase().startsWith(t.toLowerCase())).map(e=>buildProfileArgSuggestion(`profile-name-${e.id}`,e.name,replaceProfileArgs(0,[...n,e.name,""].join(" ").trimEnd()+" "),`${e.agentName}${e.lastModel?` · ${e.lastModel}`:""}`)):[];if(r.length<=1){const e=i.toLowerCase();return{suggestions:U.filter(t=>t.startsWith(e)).map(e=>buildProfileArgSuggestion(`profile-subcommand-${e}`,e,replaceProfileArgs(0,`${e} `))),commandArgumentHint:"<subcomando>"}}if("list"===m||"current"===m)return{suggestions:[],commandArgumentHint:void 0};if("remove"===m&&r.length<=2){const e=a.toLowerCase();return{suggestions:[buildProfileArgSuggestion("profile-remove-all","all",replaceProfileArgs(0,"remove all"),"Eliminar todos los perfiles"),...makeProviderSuggestions(e,["remove"])].filter(t=>t.displayText.toLowerCase().startsWith(e)),commandArgumentHint:"<proveedor|all>"}}return["use","rename","remove","model","agent"].includes(m)&&r.length<=2?{suggestions:makeProviderSuggestions(a,[m]),commandArgumentHint:"<proveedor>"}:["use","remove","model","agent"].includes(m)&&r.length<=3?{suggestions:makeProfileSuggestions(a,l,[m,a]),commandArgumentHint:"<perfil>"}:"rename"===m&&r.length<=3?{suggestions:makeProfileSuggestions(a,l,[m,a]),commandArgumentHint:"<perfil-actual>"}:{suggestions:[],commandArgumentHint:void 0}}(e):null;if(l){const{suggestions:e,commandArgumentHint:t}=l;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const m="prompt"===ge?getProviderCommandSuggestions(e):null;if(m){const{suggestions:e,commandArgumentHint:t}=m;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const c="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("playwright"!==n&&"pw"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:ee.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`playwright-sub-${e.name}`,e.name,`/playwright ${e.name} `,e.description)),commandArgumentHint:"[status|browser|visible|headless|reset|help]"};if("browser"===a&&i.length<=2)return{suggestions:te.filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`playwright-browser-${e.name}`,e.name,`/playwright browser ${e.name} `,e.description)),commandArgumentHint:"<chromium|chrome|firefox|webkit|msedge>"};return("executable"===a||"device"===a||"viewport"===a)&&i.length<=2&&"clear".startsWith(l)?{suggestions:[buildSlashArgSuggestion(`playwright-${a}-clear`,"clear",`/playwright ${a} clear`,`Quitar ${a} custom`)],commandArgumentHint:"<valor|clear>"}:{suggestions:[],commandArgumentHint:void 0}}(e):null;if(c){const{suggestions:e,commandArgumentHint:t}=c;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const u="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("whatsapp"!==n&&"wa"!==n&&"whats"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:ne.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`whatsapp-sub-${e.name}`,e.name,`/whatsapp ${e.name} `,e.description)),commandArgumentHint:"[status|permitidos|start|stop|global|help]"};if("global"===a&&i.length<=2)return{suggestions:oe.filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`whatsapp-global-${e.name}`,e.name,`/whatsapp global ${e.name} `,e.description)),commandArgumentHint:"<status|start|stop>"};return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(u){const{suggestions:e,commandArgumentHint:t}=u;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const d="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("telegram"!==n&&"tg"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:se.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`telegram-sub-${e.name}`,e.name,`/telegram ${e.name} `,e.description)),commandArgumentHint:"[status|permitidos|global|help]"};if("global"===a&&i.length<=2)return{suggestions:oe.filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`telegram-global-${e.name}`,e.name,`/telegram global ${e.name} `,e.description)),commandArgumentHint:"<status|start|stop>"};return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(d){const{suggestions:e,commandArgumentHint:t}=d;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}const p="prompt"===ge?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("webapp"!==n&&"app"!==n&&"pwa"!==n&&"aplicacion-web"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:re.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`webapp-sub-${e.name}`,e.name,`/webapp ${e.name} `,e.description)),commandArgumentHint:"[start|stop|status|open|token|port|autostart|help]"};if("token"===a&&i.length<=2)return{suggestions:[{name:"reset",description:"Regenerar token (invalida el anterior)"}].filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`webapp-token-${e.name}`,e.name,`/webapp token ${e.name} `,e.description)),commandArgumentHint:"[reset]"};return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(p){const{suggestions:e,commandArgumentHint:t}=p;return ue(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),$e(e.length>0?"command-arg":"none"),void xe(void 0)}if("bash"!==ge&&L(e)&&n>0&&!r){const t=e.slice(1).toLowerCase();if(!function(e,t){return!e&&t.includes(" ")&&!t.endsWith(" ")}(r,e)){const e=_.filter(e=>!e.isHidden).filter(e=>g(e).startsWith(t)||(e.aliases??[]).some(e=>e.startsWith(t))).map(e=>({id:g(e),displayText:`/${g(e)}`,description:e.description??"",metadata:e}));return ue(t=>({commandArgumentHint:void 0,suggestions:e,selectedSuggestion:getPreservedSelection(t.suggestions,t.selectedSuggestion,e)})),$e(e.length>0?"command":"none"),void xe(e.length>0?ye:void 0)}}if(s){const t=extractCompletionToken(e,n,!0);if(t){const e=t.token.startsWith("@"),n=e?t.token.substring(1):t.token;return void _e(n,e)}}_e.cancel(),Oe()},[ge,he,_,Oe,_e,ue,ye,Ge,we]);n(()=>{Ve.current!==le&&(Qe.current!==le&&(Qe.current=le,qe.current=null),Ve.current=null,Fe(le))},[le,Fe]);const Ke=t(async()=>{if(Ie){if("bash"===ge)return z(Ie.fullCommand),F(Ie.fullCommand.length),void je(void 0);const e=T(le,me);if(e){const t=le.slice(0,e.startPos),n=le.slice(e.startPos+e.token.length),o=t+"/"+Ie.fullCommand+" "+n,s=e.startPos+1+Ie.fullCommand.length+1;return z(o),void F(s)}}if(de.length>0){_e.cancel(),Ge.cancel();const e=-1===pe?0:pe,t=de[e];if("command"===we&&e<de.length)t&&(P(t,!1,_,z,F,G),Oe());else if("command-arg"===we&&e<de.length)t&&(applyCommandArgSuggestion(t,z,F),Oe());else if("custom-title"===we&&de.length>0){if(t){const e=buildResumeInputFromSuggestion(t);z(e),F(e.length),Oe()}}else if("directory"===we&&de.length>0){const t=de[e];if(t){let e;if(L(le)){const n=le.indexOf(" "),o=le.slice(0,n+1),s=isPathMetadata(t.metadata)&&"directory"===t.metadata.type?"/":" ";e=o+t.id+s,z(e),F(e.length),isPathMetadata(t.metadata)&&"directory"===t.metadata.type?(ue(e=>({...e,commandArgumentHint:void 0})),Fe(e,e.length)):Oe()}else{const n=extractCompletionToken(le,me,!0)??extractCompletionToken(le,me,!1);if(n){const o=isPathMetadata(t.metadata)&&"directory"===t.metadata.type,s=applyDirectorySuggestion(le,t.id,n.startPos,n.token.length,o);e=s.newInput,z(e),F(s.cursorPos),o?(ue(e=>({...e,commandArgumentHint:void 0})),Fe(e,s.cursorPos)):Oe()}else Oe()}}}else if("shell"===we&&de.length>0){const t=de[e];if(t){const e=t.metadata;applyShellSuggestion(t,le,me,z,F,e?.completionType),Oe()}}else if("agent"===we&&de.length>0&&de[e]?.id?.startsWith("dm-")){const t=de[e];t&&(applyTriggerSuggestion(t,le,me,ie,z,F),Oe())}else if("slack-channel"===we&&de.length>0){const t=de[e];t&&(applyTriggerSuggestion(t,le,me,B,z,F),Oe())}else if("file"===we&&de.length>0){const t=extractCompletionToken(le,me,!0);if(!t)return void Oe();const n=R(de),o=t.token.startsWith("@");let s;if(s=t.isQuoted?t.token.slice(2).replace(/"$/,"").length:o?t.token.length-1:t.token.length,n.length>s){const e=formatReplacementValue({displayText:n,mode:ge,hasAtPrefix:o,needsQuotes:!1,isQuoted:t.isQuoted,isComplete:!1});D(e,le,t.token,t.startPos,z,F),Fe(le.replace(t.token,e),me)}else if(e<de.length){const n=de[e];if(n){const e=n.displayText.includes(" "),s=formatReplacementValue({displayText:n.displayText,mode:ge,hasAtPrefix:o,needsQuotes:e,isQuoted:t.isQuoted,isComplete:!0});D(s,le,t.token,t.startPos,z,F),Oe()}}}}else if(""!==le.trim()){let e,t;if("bash"===ge){e="shell";const n=await async function(e,t){try{return ae&&ae.abort(),ae=new AbortController,await C(e,t,ae.signal)}catch{return l("tengu_shell_completion_failed",{}),[]}}(le,me);if(1===n.length){const e=n[0];if(e){const t=e.metadata;applyShellSuggestion(e,le,me,z,F,t?.completionType)}t=[]}else t=n}else{e="file";const n=extractCompletionToken(le,me,!0);if(n){const e=n.token.startsWith("@"),o=e?n.token.substring(1):n.token;t=await E(o,ke,ce,e)}else t=[]}t.length>0&&(ue(e=>({commandArgumentHint:void 0,suggestions:t,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,t)})),$e(e),xe(void 0))}},[de,pe,le,we,_,ge,z,F,G,Oe,me,Fe,ke,ue,ce,_e,Ge,Ie]),Be=t(()=>{if(pe<0||0===de.length)return;const e=de[pe];if("command"===we&&pe<de.length)e&&(P(e,!0,_,z,F,G),_e.cancel(),Oe());else if("command-arg"===we&&pe<de.length){if(e){const t=e.metadata;if((t?.replacement??e.displayText).trim()===le.trim())return _e.cancel(),Oe(),void G(le,!0);applyCommandArgSuggestion(e,z,F),_e.cancel(),Oe()}}else if("custom-title"===we&&pe<de.length){if(e){const t=buildResumeInputFromSuggestion(e);z(t),F(t.length),G(t,!0),_e.cancel(),Oe()}}else if("shell"===we&&pe<de.length){const e=de[pe];if(e){const t=e.metadata;applyShellSuggestion(e,le,me,z,F,t?.completionType),_e.cancel(),Oe()}}else if("agent"===we&&pe<de.length&&e?.id?.startsWith("dm-"))applyTriggerSuggestion(e,le,me,ie,z,F),_e.cancel(),Oe();else if("slack-channel"===we&&pe<de.length)e&&(applyTriggerSuggestion(e,le,me,B,z,F),Ge.cancel(),Oe());else if("file"===we&&pe<de.length){const t=extractCompletionToken(le,me,!0);if(t&&e){const n=t.token.startsWith("@"),o=e.displayText.includes(" "),s=formatReplacementValue({displayText:e.displayText,mode:ge,hasAtPrefix:n,needsQuotes:o,isQuoted:t.isQuoted,isComplete:!0});D(s,le,t.token,t.startPos,z,F),_e.cancel(),Oe()}}else if("directory"===we&&pe<de.length&&e){if(L(le))return _e.cancel(),void Oe();const t=extractCompletionToken(le,me,!0)??extractCompletionToken(le,me,!1);if(t){const n=isPathMetadata(e.metadata)&&"directory"===e.metadata.type,o=applyDirectorySuggestion(le,e.id,t.startPos,t.token.length,n);z(o.newInput),F(o.cursorPos)}_e.cancel(),Oe()}},[de,pe,we,_,le,me,ge,z,F,G,Oe,_e,Ge]),Ue=t(()=>{Ke()},[Ke]),Ze=t(()=>{_e.cancel(),Ge.cancel(),Oe(),Ve.current=le},[_e,Ge,Oe,le]),Je=t(()=>{ue(e=>({...e,selectedSuggestion:e.selectedSuggestion<=0?de.length-1:e.selectedSuggestion-1}))},[de.length,ue]),Xe=t(()=>{ue(e=>({...e,selectedSuggestion:e.selectedSuggestion>=de.length-1?0:e.selectedSuggestion+1}))},[de.length,ue]),Ye=o(()=>({"autocomplete:accept":Ue,"autocomplete:dismiss":Ze,"autocomplete:previous":Je,"autocomplete:next":Xe}),[Ue,Ze,Je,Xe]),et=de.length>0||!!Ie,tt=d();function acceptSuggestionText(e){const t=c(e);if("prompt"!==t&&Ae){Ae(t);const n=u(e);z(n),F(n.length)}else z(e),F(e.length)}p("autocomplete",et),A("Autocomplete",et),b(Ye,{context:"Autocomplete",isActive:et&&!tt});const handleKeyDown=t=>{if("right"===t.key&&!Te){const e=Pe.text,n=Pe.shownAt;if(e&&n>0&&""===le)return ve(),acceptSuggestionText(e),void t.stopImmediatePropagation()}if("tab"===t.key&&!t.shift){if(de.length>0||Ie)return;const n=Pe.text,o=Pe.shownAt;return n&&o>0&&""===le&&!Te?(t.preventDefault(),ve(),void acceptSuggestionText(n)):void(""===le.trim()&&(t.preventDefault(),be({key:"thinking-toggle-hint",jsx:e(a,{dimColor:!0,children:["Usa ",Se," para alternar el modo de razonamiento"]}),priority:"immediate",timeoutMs:3e3})))}if(0===de.length)return;const n=null!=We?.pendingChord;return t.ctrl&&"n"===t.key&&!n?(t.preventDefault(),void Xe()):t.ctrl&&"p"===t.key&&!n?(t.preventDefault(),void Je()):void("return"!==t.key||t.shift||t.meta||(t.preventDefault(),Be()))};return h((e,t,n)=>{const o=new f(n.keypress);handleKeyDown(o),o.didStopImmediatePropagation()&&n.stopImmediatePropagation()}),{suggestions:de,selectedSuggestion:pe,suggestionType:we,maxColumnWidth:Ce,commandArgumentHint:fe,inlineGhostText:Ie,handleKeyDown}}
|
|
1
|
+
import{jsxs as e}from"react/jsx-runtime";import{useCallback as t,useEffect as n,useMemo as o,useRef as s,useState as r}from"react";import{useNotifications as i}from"../context/notifications.js";import{Text as a}from"../ink.js";import{logEvent as l}from"../services/analytics/index.js";import{useDebounceCallback as g}from"usehooks-ts";import{getCommandName as m}from"../commands.js";import{getModeFromInput as c,getValueFromInput as u}from"../components/PromptInput/inputModes.js";import{useIsModalOverlayActive as d,useRegisterOverlay as p}from"../context/overlayContext.js";import{KeyboardEvent as f}from"../ink/events/keyboard-event.js";import{useInput as h}from"../ink.js";import{useOptionalKeybindingContext as v,useRegisterKeybindingContext as A}from"../keybindings/KeybindingContext.js";import{useKeybindings as b}from"../keybindings/useKeybinding.js";import{useShortcutDisplay as S}from"../keybindings/useShortcutDisplay.js";import{useAppState as w,useAppStateStore as $}from"../state/AppState.js";import{isAgentSwarmsEnabled as y}from"../utils/agentSwarmsEnabled.js";import{getShellCompletions as C}from"../utils/bash/shellCompletion.js";import{formatLogMetadata as x}from"../utils/format.js";import{getSessionIdFromLog as k,searchSessionsByCustomTitle as H}from"../utils/sessionStorage.js";import{applyCommandSuggestion as P,findMidInputSlashCommand as T,getBestCommandMatch as W,isCommandInput as L}from"../utils/suggestions/commandSuggestions.js";import{getDirectoryCompletions as j}from"../utils/suggestions/directoryCompletion.js";import{getShellHistoryCompletion as N}from"../utils/suggestions/shellHistoryCompletion.js";import{getSlackChannelSuggestions as I,hasSlackMcpServer as M}from"../utils/suggestions/slackChannelSuggestions.js";import{TEAM_LEAD_NAME as q}from"../utils/swarm/constants.js";import{listProviderProfiles as Q}from"../utils/model/providerProfiles.js";import{applyFileSuggestion as D,findLongestCommonPrefix as R,onIndexBuildComplete as V,startBackgroundCacheRefresh as O}from"./fileSuggestions.js";import{generateUnifiedSuggestions as E}from"./unifiedSuggestions.js";const _=/^@[\p{L}\p{N}\p{M}_\-./\\()[\]~:]*/u,z=/^[\p{L}\p{N}\p{M}_\-./\\()[\]~:]+/u,G=/(@[\p{L}\p{N}\p{M}_\-./\\()[\]~:]*|[\p{L}\p{N}\p{M}_\-./\\()[\]~:]+)$/u,F=/[\p{L}\p{N}\p{M}_\-./\\()[\]~:]+$/u,K=/(^|\s)@([\p{L}\p{N}\p{M}_\-./\\()[\]~:]*|"[^"]*"?)$/u,B=/(^|\s)#([a-z0-9][a-z0-9_-]*)$/,U=["list","current","create","use","rename","remove","model","agent","migrate","clear","clear-all"],Z=new Set(["perfil","perfiles","profile","profiles"]),J=["list","show","enable","disable","setup","orchestrator"],X=["list","create","show","orchestrator","equipo","add-member"],Y=["frontend","backend","docs","tests","review","database","devops"],ee=[{provider:"claude",label:"Context"},{provider:"openai",label:"OpenAI"},{provider:"openrouter",label:"OpenRouter"},{provider:"ollama",label:"Ollama"},{provider:"ollama-cloud",label:"Ollama Cloud"},{provider:"gemini-api",label:"Gemini API"},{provider:"gemini-google",label:"Gemini Google OAuth"},{provider:"zai",label:"Z.AI"},{provider:"minimax",label:"MiniMax"},{provider:"nvidia",label:"NVIDIA API"},{provider:"deepseek",label:"DeepSeek"},{provider:"custom-openai",label:"Custom OpenAI"},{provider:"custom-anthropic",label:"Custom Anthropic"}];function isPathMetadata(e){return"object"==typeof e&&null!==e&&"type"in e&&("directory"===e.type||"file"===e.type)}function getPreservedSelection(e,t,n){if(0===n.length)return-1;if(t<0)return 0;const o=e[t];if(!o)return 0;const s=n.findIndex(e=>e.id===o.id);return s>=0?s:0}function replaceProfileArgs(e,t){const n=/^\/([^\s]+)/.exec(e),o=n?`/${n[1]}`:"/perfil";return t.length>0?`${o} ${t}`:o}function buildProfileArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}function replaceWorkspaceArgs(e){const t="/workspace";return e.length>0?`${t} ${e}`:t}function buildWorkspaceArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}function replaceTeamArgs(e){const t="/team";return e.length>0?`${t} ${e}`:t}function buildTeamArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}function getProviderCommandSuggestions(e){const t=extractCommandNameAndArgs(e);if(!t||"provider"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=r[1]??"",makeProviderSuggestions=e=>ee.filter(t=>t.provider.startsWith(e.toLowerCase())).map(e=>buildProfileArgSuggestion(`provider-choice-${e.provider}`,e.provider,`/provider ${e.provider} `,e.label));if(r.length<=1){const e=i.toLowerCase();return{suggestions:[...["list","current","reset","clear","clear-all"].filter(t=>t.startsWith(e)).map(e=>buildProfileArgSuggestion(`provider-subcommand-${e}`,e,`/provider ${e} `,"list"===e?"Listar proveedores":"current"===e?"Ver proveedor actual":"clear"===e||"clear-all"===e?"Eliminar todos los perfiles y credenciales":"Resetear configuración")),...makeProviderSuggestions(e)],commandArgumentHint:"<proveedor|list|current|clear>"}}if("clear"===i.toLowerCase()&&r.length<=2){const e=a.toLowerCase();if("all".startsWith(e))return{suggestions:[buildProfileArgSuggestion("provider-clear-all","all","/provider clear all","Eliminar todos los perfiles y credenciales")],commandArgumentHint:"[all]"}}if(["list","current","reset","clear","clear-all"].includes(i.toLowerCase()))return{suggestions:[],commandArgumentHint:void 0};if(ee.some(e=>e.provider===i.toLowerCase())&&r.length<=2){const e=a.toLowerCase(),t=((e,t)=>Q(e).filter(e=>e.name.toLowerCase().startsWith(t.toLowerCase())).map(t=>buildProfileArgSuggestion(`provider-profile-${t.id}`,t.name,`/provider ${e} ${t.name} `,`${t.agentName}${t.lastModel?` · ${t.lastModel}`:""}`)))(i.toLowerCase(),e);return{suggestions:[...t,...["reset","set","url","clear"].filter(t=>t.startsWith(e)).map(e=>buildProfileArgSuggestion(`provider-keyword-${e}`,e,`/provider ${i} ${e} `,`Acción: ${e}`))],commandArgumentHint:"<perfil|url|reset>"}}return{suggestions:[],commandArgumentHint:void 0}}function buildSlashArgSuggestion(e,t,n,o){return{id:e,displayText:t,description:o,metadata:{replacement:n}}}const te=[{name:"status",description:"Ver configuración actual"},{name:"browser",description:"Cambiar navegador",valueAfter:"<chromium|chrome|firefox|webkit|msedge>"},{name:"visible",description:"Modo visible (headed)"},{name:"headless",description:"Modo oculto (headless)"},{name:"executable",description:'Ruta a binario custom o "clear"'},{name:"device",description:'Dispositivo a emular o "clear"'},{name:"viewport",description:'Tamaño viewport (ej 1280x720) o "clear"'},{name:"reset",description:"Borrar config y volver a defaults"},{name:"help",description:"Ver ayuda detallada"}],ne=[{name:"chromium",description:"Chromium (default, Playwright lo descarga)"},{name:"chrome",description:"Google Chrome del sistema"},{name:"msedge",description:"Microsoft Edge del sistema (Windows)"},{name:"firefox",description:"Firefox (Playwright lo descarga)"},{name:"webkit",description:"WebKit (Playwright lo descarga)"}];const oe=[{name:"status",description:"Ver estado del bridge y números autorizados"},{name:"permitidos",description:"Listar/configurar números autorizados"},{name:"start",description:"Iniciar bridge (requiere cuenta vinculada)"},{name:"stop",description:"Detener bridge"},{name:"help",description:"Ver ayuda detallada"},{name:"global",description:"Subcomandos del canal global (status/start/stop)"}],se=[{name:"status",description:"Estado del daemon global"},{name:"start",description:"Iniciar daemon global"},{name:"stop",description:"Detener daemon global"}];const re=[{name:"status",description:"Ver estado del bot y usuarios permitidos"},{name:"permitidos",description:"Listar usuarios autorizados"},{name:"help",description:"Ver ayuda detallada"},{name:"global",description:"Subcomandos del canal global (status/start/stop)"}];const ie=[{name:"start",description:"Iniciar servidor y abrir en navegador"},{name:"stop",description:"Detener servidor web"},{name:"status",description:"Ver estado del servidor y conexiones"},{name:"open",description:"Abrir la WebApp en el navegador"},{name:"token",description:"Ver token de autenticación actual"},{name:"port",description:"Cambiar puerto del servidor"},{name:"autostart",description:"Activar/desactivar inicio automático"},{name:"help",description:"Ver ayuda detallada"}];function getProviderAgentRefSuggestions(e,t,n=!0){const o=e.toLowerCase(),s=[];for(const e of ee)for(const r of Q(e.provider)){const i=`${e.provider}/${r.agentName||`${r.name}-lead`}`;i.toLowerCase().startsWith(o)&&s.push(buildTeamArgSuggestion(`team-agent-${r.id}`,i,replaceTeamArgs([...t,i].join(" ")+(n?" ":"")),r.lastModel?`${e.label} - ${r.lastModel}`:e.label))}return s}function applyCommandArgSuggestion(e,t,n){const o=e.metadata,s=o?.replacement??e.displayText;t(s),n(s.length)}function buildResumeInputFromSuggestion(e){const t=e.metadata;return t?.sessionId?`/resume ${t.sessionId}`:`/resume ${e.displayText}`}export function extractSearchToken(e){return e.isQuoted?e.token.slice(2).replace(/"$/,""):e.token.startsWith("@")?e.token.substring(1):e.token}export function formatReplacementValue(e){const{displayText:t,mode:n,hasAtPrefix:o,needsQuotes:s,isQuoted:r,isComplete:i}=e,a=i?" ":"";return r||s?"bash"===n?`"${t}"${a}`:`@"${t}"${a}`:o?"bash"===n?`${t}${a}`:`@${t}${a}`:t}export function applyShellSuggestion(e,t,n,o,s,r){const i=t.slice(0,n).lastIndexOf(" ")+1;let a;a="variable"===r?"$"+e.displayText+" ":"command"===r?e.displayText+" ":e.displayText;o(t.slice(0,i)+a+t.slice(n)),s(i+a.length)}const ae=/(^|\s)@[\w-]*$/;function applyTriggerSuggestion(e,t,n,o,s,r){const i=t.slice(0,n).match(o);if(!i||void 0===i.index)return;const a=i.index+(i[1]?.length??0),l=t.slice(0,a);s(l+e.displayText+" "+t.slice(n)),r(l.length+e.displayText.length+1)}let le=null;export function applyDirectorySuggestion(e,t,n,o,s){const r=s?"/":" ",i=e.slice(0,n),a="@"+t+r;return{newInput:i+a+e.slice(n+o),cursorPos:i.length+a.length}}export function extractCompletionToken(e,t,n=!1){if(!e)return null;const o=e.substring(0,t);if(n){const n=/@"([^"]*)"?$/,s=o.match(n);if(s&&void 0!==s.index){const n=e.substring(t).match(/^[^"]*"?/),o=n?n[0]:"";return{token:s[0]+o,startPos:s.index,isQuoted:!0}}}if(n){const n=o.lastIndexOf("@");if(n>=0&&(0===n||/\s/.test(o[n-1]))){const s=o.substring(n),r=s.match(_);if(r&&r[0].length===s.length){const o=e.substring(t).match(z),s=o?o[0]:"";return{token:r[0]+s,startPos:n,isQuoted:!1}}}}const s=n?G:F,r=o.match(s);if(!r||void 0===r.index)return null;const i=e.substring(t).match(z),a=i?i[0]:"";return{token:r[0]+a,startPos:r.index,isQuoted:!1}}function extractCommandNameAndArgs(e){if(L(e)){const t=e.indexOf(" ");return-1===t?{commandName:e.slice(1),args:""}:{commandName:e.slice(1,t),args:e.slice(t+1)}}return null}export function useTypeahead({commands:_,onInputChange:z,onSubmit:G,setCursorOffset:F,input:ge,cursorOffset:me,mode:ce,agents:ue,setSuggestionsState:de,suggestionsState:{suggestions:pe,selectedSuggestion:fe,commandArgumentHint:he},suppressSuggestions:ve=!1,markAccepted:Ae,onModeChange:be}){const{addNotification:Se}=i(),we=S("chat:thinkingToggle","Chat","alt+t"),[$e,ye]=r("none"),Ce=o(()=>{const e=_.filter(e=>!e.isHidden);if(0===e.length)return;return Math.max(...e.map(e=>m(e).length))+6},[_]),[xe,ke]=r(void 0),He=w(e=>e.mcp.resources),Pe=$(),Te=w(e=>e.promptSuggestion),We=w(e=>!!e.viewingAgentTaskId),Le=v(),[je,Ne]=r(void 0),Ie=o(()=>{if("prompt"!==ce||ve)return;const e=T(ge,me);if(!e)return;const t=W(e.partialCommand,_);return t?{text:t.suffix,fullCommand:t.fullCommand,insertPosition:e.startPos+1+e.partialCommand.length}:void 0},[ge,me,ce,_,ve]),Me=ve?void 0:"prompt"===ce?Ie:je,qe=s(me);qe.current=me;const Qe=s(null),De=s(""),Re=(s(""),s("")),Ve=s("");s(pe).current=pe;const Oe=s(null),Ee=t(()=>{de(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),ye("none"),ke(void 0),Ne(void 0)},[de]),_e=t(async(e,t=!1)=>{Qe.current=e;const n=await E(e,He,ue,t);if(Qe.current===e){if(0===n.length)return de(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),ye("none"),void ke(void 0);de(e=>({commandArgumentHint:void 0,suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n)})),ye(n.length>0?"file":"none"),ke(void 0)}},[He,de,ye,ke,ue]);n(()=>(O(),V(()=>{const e=Qe.current;null!==e&&(Qe.current=null,_e(e,""===e))})),[_e]);const ze=g(_e,50),Ge=t(async e=>{Ve.current=e;const t=await I(Pe.getState().mcp.clients,e);Ve.current===e&&(de(e=>({commandArgumentHint:void 0,suggestions:t,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,t)})),ye(t.length>0?"slack-channel":"none"),ke(void 0))},[de]),Fe=g(Ge,150),Ke=t(async(e,t)=>{const n=t??qe.current;if(ve)return ze.cancel(),void Ee();if("prompt"===ce){const t=T(e,n);if(t){if(W(t.partialCommand,_))return de(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),ye("none"),void ke(void 0)}}if("bash"===ce&&e.trim()){Re.current=e;const t=await N(e);if(Re.current!==e)return;if(t)return Ne({text:t.suffix,fullCommand:t.fullCommand,insertPosition:e.length}),de(()=>({commandArgumentHint:void 0,suggestions:[],selectedSuggestion:-1})),ye("none"),void ke(void 0);Ne(void 0)}const o="bash"!==ce?e.substring(0,n).match(/(^|\s)@([\w-]*)$/):null;if(o){const e=(o[2]??"").toLowerCase(),t=Pe.getState(),n=[],s=new Set;if(y()&&t.teamContext)for(const o of Object.values(t.teamContext.teammates??{}))o.name!==q&&o.name.toLowerCase().startsWith(e)&&(s.add(o.name),n.push({id:`dm-${o.name}`,displayText:`@${o.name}`,description:"send message"}));for(const[o,r]of t.agentNameRegistry){if(s.has(o))continue;if(!o.toLowerCase().startsWith(e))continue;const i=t.tasks[r]?.status;n.push({id:`dm-${o}`,displayText:`@${o}`,description:i?`send message · ${i}`:"send message"})}if(n.length>0)return ze.cancel(),de(e=>({commandArgumentHint:void 0,suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n)})),ye("agent"),void ke(void 0)}if("prompt"===ce){const t=e.substring(0,n).match(B);if(t&&M(Pe.getState().mcp.clients))return void Fe(t[2]);"slack-channel"===$e&&(Fe.cancel(),Ee())}const s=e.substring(0,n).match(K),r=n===e.length&&n>0&&e.length>0&&" "===e[n-1];if("prompt"===ce&&L(e)&&n>0){const t=extractCommandNameAndArgs(e);if(t&&"add-dir"===t.commandName&&t.args){const{args:e}=t;if(e.match(/\s+$/))return ze.cancel(),void Ee();const n=await j(e);return n.length>0?(de(e=>({suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n),commandArgumentHint:void 0})),void ye("directory")):(ze.cancel(),void Ee())}if(t&&"resume"===t.commandName&&void 0!==t.args&&e.includes(" ")){const{args:e}=t,n=(await H(e,{limit:10})).map(e=>{const t=k(e);return{id:`resume-title-${t}`,displayText:e.customTitle,description:x(e),metadata:{sessionId:t}}});return n.length>0?(de(e=>({suggestions:n,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,n),commandArgumentHint:void 0})),void ye("custom-title")):void Ee()}}const i="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t||"team"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=i.toLowerCase();if(r.length<=1){const e=i.toLowerCase();return{suggestions:X.filter(t=>t.startsWith(e)).map(e=>buildTeamArgSuggestion(`team-subcommand-${e}`,e,replaceTeamArgs(`${e} `))),commandArgumentHint:"<subcomando>"}}if("list"===a)return{suggestions:[],commandArgumentHint:void 0};if("create"===a)return{suggestions:[],commandArgumentHint:"<nombre-equipo>"};if("show"===a)return{suggestions:[],commandArgumentHint:"<equipo>"};if("orchestrator"===a)return r.length<=2?{suggestions:[],commandArgumentHint:"<equipo>"}:{suggestions:getProviderAgentRefSuggestions(r[r.length-1]??"",r.slice(0,r.length-1),!1),commandArgumentHint:"<provider/agent>"};if("equipo"===a){if(r.length<=2)return{suggestions:[],commandArgumentHint:"<equipo>"};if(r.length<=3){const e=r[1]??"",t=(r[2]??"").toLowerCase();return{suggestions:Y.filter(e=>e.startsWith(t)).map(t=>buildTeamArgSuggestion(`team-equipo-${t}`,t,replaceTeamArgs(["equipo",e,t,""].join(" ").trimEnd()+" "),`equipo ${t}`)),commandArgumentHint:"<area>"}}return{suggestions:getProviderAgentRefSuggestions(r[r.length-1]??"",r.slice(0,r.length-1),!1),commandArgumentHint:"<provider/agent>"}}if("add-member"===a){if(r.length<=2)return{suggestions:[],commandArgumentHint:"<equipo>"};if(r.length<=3){const e=r[1]??"",t=(r[2]??"").toLowerCase();return{suggestions:Y.filter(e=>e.startsWith(t)).map(t=>buildTeamArgSuggestion(`team-member-equipo-${t}`,t,replaceTeamArgs(["add-member",e,t,""].join(" ").trimEnd()+" "),`equipo ${t}`)),commandArgumentHint:"<area>"}}return r.length<=4?{suggestions:getProviderAgentRefSuggestions(r[3]??"",r.slice(0,3)),commandArgumentHint:"<provider/agent>"}:{suggestions:[],commandArgumentHint:"[duty]"}}return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(i){const{suggestions:e,commandArgumentHint:t}=i;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const a="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t||"workspace"!==t.commandName)return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=i.toLowerCase();if(r.length<=1){const e=i.toLowerCase();return{suggestions:J.filter(t=>t.startsWith(e)).map(e=>buildWorkspaceArgSuggestion(`workspace-subcommand-${e}`,e,replaceWorkspaceArgs(`${e} `))),commandArgumentHint:"<subcomando>"}}if(["show","enable","disable"].includes(a)&&r.length<=2){const e=(r[1]??"").toLowerCase();return{suggestions:ee.filter(t=>t.provider.startsWith(e)).map(e=>buildWorkspaceArgSuggestion(`workspace-provider-${e.provider}`,e.provider,replaceWorkspaceArgs(`${a} ${e.provider}`),e.label)),commandArgumentHint:"<proveedor>"}}if("orchestrator"===a)return{suggestions:[],commandArgumentHint:"[equipo] [provider/agent]"};if("setup"!==a)return{suggestions:[],commandArgumentHint:void 0};if(r.length<=2)return{suggestions:[],commandArgumentHint:"<equipo> [orchestrator=<area|provider/agent>]"};const l=r.length-1,g=r[l]??"",m=r.slice(0,l);if(!m.some(e=>e.toLowerCase().startsWith("orchestrator="))&&"orchestrator=".startsWith(g.toLowerCase()))return{suggestions:[buildWorkspaceArgSuggestion("workspace-orchestrator","orchestrator=",replaceWorkspaceArgs([...m,"orchestrator="].join(" ")),"escoger coordinador principal")],commandArgumentHint:"orchestrator=<area|provider/agent>"};if(g.toLowerCase().startsWith("orchestrator=")){const e=g.slice(13).toLowerCase(),t=Y.filter(t=>t.startsWith(e)).map(e=>buildWorkspaceArgSuggestion(`workspace-orchestrator-equipo-${e}`,e,replaceWorkspaceArgs([...m,`orchestrator=${e} `].join(" ").trimEnd()),`usar el equipo ${e} como orquestador`)),n=[];for(const t of ee)for(const o of Q(t.provider)){const s=`${t.provider}/${o.agentName||`${o.name}-lead`}`;s.toLowerCase().startsWith(e)&&n.push(buildWorkspaceArgSuggestion(`workspace-orchestrator-agent-${o.id}`,s,replaceWorkspaceArgs([...m,`orchestrator=${s} `].join(" ").trimEnd()),`agente de ${t.label}`))}return{suggestions:[...t,...n],commandArgumentHint:"orchestrator=<area|provider/agent>"}}const c=g.indexOf(":");if(c>=0){const e=g.slice(0,c),t=g.slice(c+1).toLowerCase();return{suggestions:Y.filter(e=>e.startsWith(t)).map(t=>buildWorkspaceArgSuggestion(`workspace-equipo-${e}-${t}`,t,replaceWorkspaceArgs([...m,`${e}:${t} `].join(" ").trimEnd()),`equipo ${t}`)),commandArgumentHint:"<proveedor/perfil:area>"}}const u=g.toLowerCase(),d=[];for(const e of ee)for(const t of Q(e.provider)){const n=`${e.provider}/${t.name}`;n.toLowerCase().startsWith(u)&&d.push(buildWorkspaceArgSuggestion(`workspace-profile-${t.id}`,`${n}:`,replaceWorkspaceArgs([...m,`${n}:`].join(" ")),t.lastModel?`${e.label} - ${t.lastModel}`:e.label))}return{suggestions:d,commandArgumentHint:"<proveedor/perfil:area>"}}(e):null;if(a){const{suggestions:e,commandArgumentHint:t}=a;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const l="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t||!Z.has(t.commandName.toLowerCase()))return null;const n=t.args??"",o=/\s$/.test(n),s=n.trim().length>0?n.trim().split(/\s+/):[],r=o?[...s,""]:s,i=r[0]??"",a=r[1]??"",l=r[2]??"",g=i.toLowerCase(),makeProviderSuggestions=(t,n)=>ee.filter(e=>e.provider.startsWith(t.toLowerCase())).map(t=>buildProfileArgSuggestion(`profile-provider-${t.provider}`,t.provider,replaceProfileArgs(e,[...n,t.provider,""].join(" ").trimEnd()+" "),t.label)),makeProfileSuggestions=(t,n,o)=>t&&ee.some(e=>e.provider===t)?Q(t).filter(e=>e.name.toLowerCase().startsWith(n.toLowerCase())).map(t=>buildProfileArgSuggestion(`profile-name-${t.id}`,t.name,replaceProfileArgs(e,[...o,t.name,""].join(" ").trimEnd()+" "),`${t.agentName}${t.lastModel?` · ${t.lastModel}`:""}`)):[];if(r.length<=1){const t=i.toLowerCase();return{suggestions:U.filter(e=>e.startsWith(t)).map(t=>buildProfileArgSuggestion(`profile-subcommand-${t}`,t,replaceProfileArgs(e,`${t} `))),commandArgumentHint:"<subcomando>"}}if("list"===g||"current"===g||"migrate"===g||"clear"===g||"clear-all"===g)return{suggestions:[],commandArgumentHint:void 0};if(("remove"===g||"clear"===g)&&r.length<=2){const t=a.toLowerCase();return{suggestions:[buildProfileArgSuggestion("profile-remove-all","all",replaceProfileArgs(e,`${g} all`),"Eliminar todos los perfiles"),...makeProviderSuggestions(t,[g])].filter(e=>e.displayText.toLowerCase().startsWith(t)),commandArgumentHint:"<proveedor|all>"}}return["create","use","rename","remove","model","agent"].includes(g)&&r.length<=2?{suggestions:makeProviderSuggestions(a,[g]),commandArgumentHint:"<proveedor>"}:["use","remove","model","agent"].includes(g)&&r.length<=3?{suggestions:makeProfileSuggestions(a,l,[g,a]),commandArgumentHint:"<perfil>"}:"rename"===g&&r.length<=3?{suggestions:makeProfileSuggestions(a,l,[g,a]),commandArgumentHint:"<perfil-actual>"}:{suggestions:[],commandArgumentHint:void 0}}(e):null;if(l){const{suggestions:e,commandArgumentHint:t}=l;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const g="prompt"===ce?getProviderCommandSuggestions(e):null;if(g){const{suggestions:e,commandArgumentHint:t}=g;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const c="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("playwright"!==n&&"pw"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:te.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`playwright-sub-${e.name}`,e.name,`/playwright ${e.name} `,e.description)),commandArgumentHint:"[status|browser|visible|headless|reset|help]"};if("browser"===a&&i.length<=2)return{suggestions:ne.filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`playwright-browser-${e.name}`,e.name,`/playwright browser ${e.name} `,e.description)),commandArgumentHint:"<chromium|chrome|firefox|webkit|msedge>"};return("executable"===a||"device"===a||"viewport"===a)&&i.length<=2&&"clear".startsWith(l)?{suggestions:[buildSlashArgSuggestion(`playwright-${a}-clear`,"clear",`/playwright ${a} clear`,`Quitar ${a} custom`)],commandArgumentHint:"<valor|clear>"}:{suggestions:[],commandArgumentHint:void 0}}(e):null;if(c){const{suggestions:e,commandArgumentHint:t}=c;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const u="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("whatsapp"!==n&&"wa"!==n&&"whats"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:oe.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`whatsapp-sub-${e.name}`,e.name,`/whatsapp ${e.name} `,e.description)),commandArgumentHint:"[status|permitidos|start|stop|global|help]"};if("global"===a&&i.length<=2)return{suggestions:se.filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`whatsapp-global-${e.name}`,e.name,`/whatsapp global ${e.name} `,e.description)),commandArgumentHint:"<status|start|stop>"};return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(u){const{suggestions:e,commandArgumentHint:t}=u;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const d="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("telegram"!==n&&"tg"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:re.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`telegram-sub-${e.name}`,e.name,`/telegram ${e.name} `,e.description)),commandArgumentHint:"[status|permitidos|global|help]"};if("global"===a&&i.length<=2)return{suggestions:se.filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`telegram-global-${e.name}`,e.name,`/telegram global ${e.name} `,e.description)),commandArgumentHint:"<status|start|stop>"};return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(d){const{suggestions:e,commandArgumentHint:t}=d;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}const p="prompt"===ce?function(e){const t=extractCommandNameAndArgs(e);if(!t)return null;const n=t.commandName.toLowerCase();if("webapp"!==n&&"app"!==n&&"pwa"!==n&&"aplicacion-web"!==n)return null;const o=t.args??"",s=/\s$/.test(o),r=o.trim().length>0?o.trim().split(/\s+/):[],i=s?[...r,""]:r,a=(i[0]??"").toLowerCase(),l=(i[1]??"").toLowerCase();if(i.length<=1)return{suggestions:ie.filter(e=>e.name.startsWith(a)).map(e=>buildSlashArgSuggestion(`webapp-sub-${e.name}`,e.name,`/webapp ${e.name} `,e.description)),commandArgumentHint:"[start|stop|status|open|token|port|autostart|help]"};if("token"===a&&i.length<=2)return{suggestions:[{name:"reset",description:"Regenerar token (invalida el anterior)"}].filter(e=>e.name.startsWith(l)).map(e=>buildSlashArgSuggestion(`webapp-token-${e.name}`,e.name,`/webapp token ${e.name} `,e.description)),commandArgumentHint:"[reset]"};return{suggestions:[],commandArgumentHint:void 0}}(e):null;if(p){const{suggestions:e,commandArgumentHint:t}=p;return de(()=>({commandArgumentHint:t,suggestions:e,selectedSuggestion:e.length>0?0:-1})),ye(e.length>0?"command-arg":"none"),void ke(void 0)}if("bash"!==ce&&L(e)&&n>0&&!r){const t=e.slice(1).toLowerCase();if(!function(e,t){return!e&&t.includes(" ")&&!t.endsWith(" ")}(r,e)){const e=_.filter(e=>!e.isHidden).filter(e=>m(e).startsWith(t)||(e.aliases??[]).some(e=>e.startsWith(t))).map(e=>({id:m(e),displayText:`/${m(e)}`,description:e.description??"",metadata:e}));return de(t=>({commandArgumentHint:void 0,suggestions:e,selectedSuggestion:getPreservedSelection(t.suggestions,t.selectedSuggestion,e)})),ye(e.length>0?"command":"none"),void ke(e.length>0?Ce:void 0)}}if(s){const t=extractCompletionToken(e,n,!0);if(t){const e=t.token.startsWith("@"),n=e?t.token.substring(1):t.token;return void ze(n,e)}}ze.cancel(),Ee()},[ce,ve,_,Ee,ze,de,Ce,Fe,$e]);n(()=>{Oe.current!==ge&&(De.current!==ge&&(De.current=ge,Qe.current=null),Oe.current=null,Ke(ge))},[ge,Ke]);const Be=t(async()=>{if(Me){if("bash"===ce)return z(Me.fullCommand),F(Me.fullCommand.length),void Ne(void 0);const e=T(ge,me);if(e){const t=ge.slice(0,e.startPos),n=ge.slice(e.startPos+e.token.length),o=t+"/"+Me.fullCommand+" "+n,s=e.startPos+1+Me.fullCommand.length+1;return z(o),void F(s)}}if(pe.length>0){ze.cancel(),Fe.cancel();const e=-1===fe?0:fe,t=pe[e];if("command"===$e&&e<pe.length)t&&(P(t,!1,_,z,F,G),Ee());else if("command-arg"===$e&&e<pe.length)t&&(applyCommandArgSuggestion(t,z,F),Ee());else if("custom-title"===$e&&pe.length>0){if(t){const e=buildResumeInputFromSuggestion(t);z(e),F(e.length),Ee()}}else if("directory"===$e&&pe.length>0){const t=pe[e];if(t){let e;if(L(ge)){const n=ge.indexOf(" "),o=ge.slice(0,n+1),s=isPathMetadata(t.metadata)&&"directory"===t.metadata.type?"/":" ";e=o+t.id+s,z(e),F(e.length),isPathMetadata(t.metadata)&&"directory"===t.metadata.type?(de(e=>({...e,commandArgumentHint:void 0})),Ke(e,e.length)):Ee()}else{const n=extractCompletionToken(ge,me,!0)??extractCompletionToken(ge,me,!1);if(n){const o=isPathMetadata(t.metadata)&&"directory"===t.metadata.type,s=applyDirectorySuggestion(ge,t.id,n.startPos,n.token.length,o);e=s.newInput,z(e),F(s.cursorPos),o?(de(e=>({...e,commandArgumentHint:void 0})),Ke(e,s.cursorPos)):Ee()}else Ee()}}}else if("shell"===$e&&pe.length>0){const t=pe[e];if(t){const e=t.metadata;applyShellSuggestion(t,ge,me,z,F,e?.completionType),Ee()}}else if("agent"===$e&&pe.length>0&&pe[e]?.id?.startsWith("dm-")){const t=pe[e];t&&(applyTriggerSuggestion(t,ge,me,ae,z,F),Ee())}else if("slack-channel"===$e&&pe.length>0){const t=pe[e];t&&(applyTriggerSuggestion(t,ge,me,B,z,F),Ee())}else if("file"===$e&&pe.length>0){const t=extractCompletionToken(ge,me,!0);if(!t)return void Ee();const n=R(pe),o=t.token.startsWith("@");let s;if(s=t.isQuoted?t.token.slice(2).replace(/"$/,"").length:o?t.token.length-1:t.token.length,n.length>s){const e=formatReplacementValue({displayText:n,mode:ce,hasAtPrefix:o,needsQuotes:!1,isQuoted:t.isQuoted,isComplete:!1});D(e,ge,t.token,t.startPos,z,F),Ke(ge.replace(t.token,e),me)}else if(e<pe.length){const n=pe[e];if(n){const e=n.displayText.includes(" "),s=formatReplacementValue({displayText:n.displayText,mode:ce,hasAtPrefix:o,needsQuotes:e,isQuoted:t.isQuoted,isComplete:!0});D(s,ge,t.token,t.startPos,z,F),Ee()}}}}else if(""!==ge.trim()){let e,t;if("bash"===ce){e="shell";const n=await async function(e,t){try{return le&&le.abort(),le=new AbortController,await C(e,t,le.signal)}catch{return l("tengu_shell_completion_failed",{}),[]}}(ge,me);if(1===n.length){const e=n[0];if(e){const t=e.metadata;applyShellSuggestion(e,ge,me,z,F,t?.completionType)}t=[]}else t=n}else{e="file";const n=extractCompletionToken(ge,me,!0);if(n){const e=n.token.startsWith("@"),o=e?n.token.substring(1):n.token;t=await E(o,He,ue,e)}else t=[]}t.length>0&&(de(e=>({commandArgumentHint:void 0,suggestions:t,selectedSuggestion:getPreservedSelection(e.suggestions,e.selectedSuggestion,t)})),ye(e),ke(void 0))}},[pe,fe,ge,$e,_,ce,z,F,G,Ee,me,Ke,He,de,ue,ze,Fe,Me]),Ue=t(()=>{if(fe<0||0===pe.length)return;const e=pe[fe];if("command"===$e&&fe<pe.length)e&&(P(e,!0,_,z,F,G),ze.cancel(),Ee());else if("command-arg"===$e&&fe<pe.length){if(e){const t=e.metadata;if((t?.replacement??e.displayText).trim()===ge.trim())return ze.cancel(),Ee(),void G(ge,!0);applyCommandArgSuggestion(e,z,F),ze.cancel(),Ee()}}else if("custom-title"===$e&&fe<pe.length){if(e){const t=buildResumeInputFromSuggestion(e);z(t),F(t.length),G(t,!0),ze.cancel(),Ee()}}else if("shell"===$e&&fe<pe.length){const e=pe[fe];if(e){const t=e.metadata;applyShellSuggestion(e,ge,me,z,F,t?.completionType),ze.cancel(),Ee()}}else if("agent"===$e&&fe<pe.length&&e?.id?.startsWith("dm-"))applyTriggerSuggestion(e,ge,me,ae,z,F),ze.cancel(),Ee();else if("slack-channel"===$e&&fe<pe.length)e&&(applyTriggerSuggestion(e,ge,me,B,z,F),Fe.cancel(),Ee());else if("file"===$e&&fe<pe.length){const t=extractCompletionToken(ge,me,!0);if(t&&e){const n=t.token.startsWith("@"),o=e.displayText.includes(" "),s=formatReplacementValue({displayText:e.displayText,mode:ce,hasAtPrefix:n,needsQuotes:o,isQuoted:t.isQuoted,isComplete:!0});D(s,ge,t.token,t.startPos,z,F),ze.cancel(),Ee()}}else if("directory"===$e&&fe<pe.length&&e){if(L(ge))return ze.cancel(),void Ee();const t=extractCompletionToken(ge,me,!0)??extractCompletionToken(ge,me,!1);if(t){const n=isPathMetadata(e.metadata)&&"directory"===e.metadata.type,o=applyDirectorySuggestion(ge,e.id,t.startPos,t.token.length,n);z(o.newInput),F(o.cursorPos)}ze.cancel(),Ee()}},[pe,fe,$e,_,ge,me,ce,z,F,G,Ee,ze,Fe]),Ze=t(()=>{Be()},[Be]),Je=t(()=>{ze.cancel(),Fe.cancel(),Ee(),Oe.current=ge},[ze,Fe,Ee,ge]),Xe=t(()=>{de(e=>({...e,selectedSuggestion:e.selectedSuggestion<=0?pe.length-1:e.selectedSuggestion-1}))},[pe.length,de]),Ye=t(()=>{de(e=>({...e,selectedSuggestion:e.selectedSuggestion>=pe.length-1?0:e.selectedSuggestion+1}))},[pe.length,de]),et=o(()=>({"autocomplete:accept":Ze,"autocomplete:dismiss":Je,"autocomplete:previous":Xe,"autocomplete:next":Ye}),[Ze,Je,Xe,Ye]),tt=pe.length>0||!!Me,nt=d();function acceptSuggestionText(e){const t=c(e);if("prompt"!==t&&be){be(t);const n=u(e);z(n),F(n.length)}else z(e),F(e.length)}p("autocomplete",tt),A("Autocomplete",tt),b(et,{context:"Autocomplete",isActive:tt&&!nt});const handleKeyDown=t=>{if("right"===t.key&&!We){const e=Te.text,n=Te.shownAt;if(e&&n>0&&""===ge)return Ae(),acceptSuggestionText(e),void t.stopImmediatePropagation()}if("tab"===t.key&&!t.shift){if(pe.length>0||Me)return;const n=Te.text,o=Te.shownAt;return n&&o>0&&""===ge&&!We?(t.preventDefault(),Ae(),void acceptSuggestionText(n)):void(""===ge.trim()&&(t.preventDefault(),Se({key:"thinking-toggle-hint",jsx:e(a,{dimColor:!0,children:["Usa ",we," para alternar el modo de razonamiento"]}),priority:"immediate",timeoutMs:3e3})))}if(0===pe.length)return;const n=null!=Le?.pendingChord;return t.ctrl&&"n"===t.key&&!n?(t.preventDefault(),void Ye()):t.ctrl&&"p"===t.key&&!n?(t.preventDefault(),void Xe()):void("return"!==t.key||t.shift||t.meta||(t.preventDefault(),Ue()))};return h((e,t,n)=>{const o=new f(n.keypress);handleKeyDown(o),o.didStopImmediatePropagation()&&n.stopImmediatePropagation()}),{suggestions:pe,selectedSuggestion:fe,suggestionType:$e,maxColumnWidth:xe,commandArgumentHint:he,inlineGhostText:Me,handleKeyDown}}
|