@iaforged/context-code 2.3.3 → 2.3.6

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.
Files changed (89) hide show
  1. package/context-bootstrap.js +7 -5
  2. package/dist/src/cli/handlers/auth.js +1 -1
  3. package/dist/src/cli/handlers/modelList.js +1 -1
  4. package/dist/src/commands/agent/agent.js +1 -1
  5. package/dist/src/commands/login/login.js +1 -1
  6. package/dist/src/commands/profile/profile.js +1 -1
  7. package/dist/src/commands/provider/index.js +1 -1
  8. package/dist/src/commands/provider/provider.js +1 -1
  9. package/dist/src/components/BaseTextInput.js +1 -1
  10. package/dist/src/components/LogoV2/AnimatedClawd.js +1 -1
  11. package/dist/src/components/LogoV2/Clawd.js +1 -1
  12. package/dist/src/components/LogoV2/LogoV2.js +1 -1
  13. package/dist/src/components/LogoV2/WelcomeV2.js +1 -1
  14. package/dist/src/components/PromptInput/PromptInputFooterLeftSide.js +1 -1
  15. package/dist/src/components/SessionTokenFooter.js +1 -1
  16. package/dist/src/components/Spinner.js +1 -1
  17. package/dist/src/components/Stats.js +1 -1
  18. package/dist/src/components/TeleportProgress.js +1 -1
  19. package/dist/src/components/TextInput.js +1 -1
  20. package/dist/src/components/design-system/ThemeProvider.js +1 -1
  21. package/dist/src/components/permissions/AskUserQuestionPermissionRequest/AskUserQuestionPermissionRequest.js +1 -1
  22. package/dist/src/core/auth/loginCore.js +1 -1
  23. package/dist/src/core/providers/llmCore.js +1 -1
  24. package/dist/src/core/providers/providerModelCompatibility.js +1 -1
  25. package/dist/src/main.js +1 -1
  26. package/dist/src/query/stopHooks.js +1 -1
  27. package/dist/src/screens/REPL.js +1 -1
  28. package/dist/src/services/PromptSuggestion/promptSuggestion.js +1 -1
  29. package/dist/src/services/analytics/config.js +1 -1
  30. package/dist/src/services/analytics/datadog.js +1 -1
  31. package/dist/src/services/api/openai.js +1 -1
  32. package/dist/src/services/mcp/config.js +1 -1
  33. package/dist/src/services/orchestration/execution/AgentTaskExecutor.js +1 -1
  34. package/dist/src/services/tips/tipRegistry.js +1 -1
  35. package/dist/src/services/toolUseSummary/toolUseSummaryGenerator.js +1 -1
  36. package/dist/src/tools/BriefTool/UI.js +1 -1
  37. package/dist/src/utils/computerControlMcp/mcpServer.js +1 -1
  38. package/dist/src/utils/computerControlMcp/server/.gitattributes +18 -0
  39. package/dist/src/utils/computerControlMcp/server/Dockerfile +25 -0
  40. package/dist/src/utils/computerControlMcp/server/LICENSE +21 -0
  41. package/dist/src/utils/computerControlMcp/server/MANIFEST.in +10 -0
  42. package/dist/src/utils/computerControlMcp/server/README.md +193 -0
  43. package/dist/src/utils/computerControlMcp/server/demonstration.gif +0 -0
  44. package/dist/src/utils/computerControlMcp/server/icon.png +0 -0
  45. package/dist/src/utils/computerControlMcp/server/pyproject.toml +52 -0
  46. package/dist/src/utils/computerControlMcp/server/smithery.yaml +13 -0
  47. package/dist/src/utils/computerControlMcp/server/src/README.md +12 -0
  48. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/FZYTK.TTF +0 -0
  49. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/__init__.py +11 -0
  50. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/__main__.py +21 -0
  51. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/cli.py +128 -0
  52. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/core.py +1008 -0
  53. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/gui.py +126 -0
  54. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/server.py +15 -0
  55. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/test.py +346 -0
  56. package/dist/src/utils/computerControlMcp/server/src/computer_control_mcp/test_image.png +0 -0
  57. package/dist/src/utils/computerControlMcp/server/tests/README.md +22 -0
  58. package/dist/src/utils/computerControlMcp/server/tests/conftest.py +10 -0
  59. package/dist/src/utils/computerControlMcp/server/tests/rapidocr_test.py +21 -0
  60. package/dist/src/utils/computerControlMcp/server/tests/run_cli.py +9 -0
  61. package/dist/src/utils/computerControlMcp/server/tests/run_server.py +15 -0
  62. package/dist/src/utils/computerControlMcp/server/tests/setup.py +16 -0
  63. package/dist/src/utils/computerControlMcp/server/tests/test_computer_control.py +161 -0
  64. package/dist/src/utils/computerControlMcp/server/tests/test_screenshot.py +14 -0
  65. package/dist/src/utils/computerControlMcp/server/tests/test_wgc_env_var.py +42 -0
  66. package/dist/src/utils/computerControlMcp/server/tests/test_wgc_screenshot.py +67 -0
  67. package/dist/src/utils/computerControlMcp/server/uv.lock +4986 -0
  68. package/dist/src/utils/computerControlMcp/setup.js +1 -1
  69. package/dist/src/utils/logoV2Utils.js +1 -1
  70. package/dist/src/utils/model/configs.js +1 -1
  71. package/dist/src/utils/model/model.js +1 -1
  72. package/dist/src/utils/model/modelOptions.js +1 -1
  73. package/dist/src/utils/model/providerBaseUrls.js +1 -1
  74. package/dist/src/utils/model/providerCatalog.js +1 -1
  75. package/dist/src/utils/model/providerModels.js +1 -1
  76. package/dist/src/utils/model/providerProfiles.js +1 -1
  77. package/dist/src/utils/model/providerProfilesDb.js +1 -1
  78. package/dist/src/utils/sembleMcp/setup.js +1 -1
  79. package/dist/src/utils/status.js +1 -1
  80. package/dist/src/utils/theme.js +1 -1
  81. package/dist/src/utils/themes/bootstrap.js +1 -1
  82. package/dist/src/utils/themes/opencodeMapper.js +1 -1
  83. package/dist/webapp/chunk-OJZNEHPP.js +1 -1
  84. package/dist/webapp/chunk-VAB2VXFI.js +1 -1
  85. package/dist/webapp/main-MTQLKGXD.js +1 -1
  86. package/dist/webapp/ngsw-worker.js +1 -1
  87. package/dist/webapp/ngsw.json +1 -1
  88. package/dist/webapp/polyfills-7R4CRVNH.js +1 -1
  89. package/package.json +1 -1
@@ -1 +1 @@
1
- import{feature as e}from"../recovery/bunBundleShim.js";import{jsx as t,jsxs as n,Fragment as o}from"react/jsx-runtime";import{c as r}from"react/compiler-runtime";import{plot as s}from"asciichart";import i from"chalk";import a from"figures";import{Suspense as l,use as c,useEffect as u,useMemo as d,useState as m}from"react";import p from"strip-ansi";import{useTerminalSize as g}from"../hooks/useTerminalSize.js";import{applyColor as f}from"../ink/colorize.js";import{stringWidth as k}from"../ink/stringWidth.js";import{Ansi as b,Box as T,Text as y,useInput as w}from"../ink.js";import{useKeybinding as S}from"../keybindings/useKeybinding.js";import{getGlobalConfig as x}from"../utils/config.js";import{formatDuration as D,formatNumber as v}from"../utils/format.js";import{generateHeatmap as M}from"../utils/heatmap.js";import{renderModelName as j}from"../utils/model/model.js";import{copyAnsiToClipboard as $}from"../utils/screenshotClipboard.js";import{aggregateClaudeCodeStatsForRange as C}from"../utils/stats.js";import{resolveThemeSetting as _}from"../utils/systemTheme.js";import{getTheme as A,themeColorToAnsi as O}from"../utils/theme.js";import{Pane as F}from"./design-system/Pane.js";import{Tab as L,Tabs as R,useTabHeaderFocus as P}from"./design-system/Tabs.js";import{Spinner as B}from"./Spinner.js";const E={"7d":"Últimos 7 días","30d":"Últimos 30 días",all:"Todo el tiempo"},H=["all","7d","30d"];export function Stats(e){const o=r(4),{onClose:s}=e;let i;o[0]===Symbol.for("react.memo_cache_sentinel")?(i=C("all").then(e=>e&&0!==e.totalSessions?{type:"success",data:e}:{type:"empty"}).catch(e=>({type:"error",message:e instanceof Error?e.message:"Failed to load stats"})),o[0]=i):i=o[0];const a=i;let c,u;return o[1]===Symbol.for("react.memo_cache_sentinel")?(c=n(T,{marginTop:1,children:[t(B,{}),t(y,{children:" Cargando tus estadísticas de Context Code…"})]}),o[1]=c):c=o[1],o[2]!==s?(u=t(l,{fallback:c,children:t(StatsContent,{allTimePromise:a,onClose:s})}),o[2]=s,o[3]=u):u=o[3],u}function StatsContent(o){const s=r(34),{allTimePromise:l,onClose:d}=o,g=c(l),[b,O]=m("all");let P;s[0]===Symbol.for("react.memo_cache_sentinel")?(P={},s[0]=P):P=s[0];const[E,I]=m(P),[U,W]=m(!1),[N,z]=m("Overview"),[q,G]=m(null);let K,Q;s[1]!==b||s[2]!==E?(K=()=>{if("all"===b)return;if(E[b])return;let e=!1;return W(!0),C(b).then(t=>{e||(I(e=>({...e,[b]:t})),W(!1))}).catch(()=>{e||W(!1)}),()=>{e=!0}},Q=[b,E],s[1]=b,s[2]=E,s[3]=K,s[4]=Q):(K=s[3],Q=s[4]),u(K,Q);const J="all"===b?"success"===g.type?g.data:null:E[b]??("success"===g.type?g.data:null),V="success"===g.type?g.data:null;let X;s[5]!==d?(X=()=>{d("Stats dialog dismissed",{display:"system"})},s[5]=d,s[6]=X):X=s[6];const Y=X;let Z,ee,te,ne,oe;if(s[7]===Symbol.for("react.memo_cache_sentinel")?(Z={context:"Confirmation"},s[7]=Z):Z=s[7],S("confirm:no",Y,Z),s[8]!==N||s[9]!==b||s[10]!==J||s[11]!==d?(ee=(t,n)=>{!n.ctrl||"c"!==t&&"d"!==t||d("Stats dialog dismissed",{display:"system"}),n.tab&&z(_temp),"r"!==t||n.ctrl||n.meta||O(function(e){const t=H.indexOf(e);return H[(t+1)%H.length]}(b)),n.ctrl&&"s"===t&&J&&async function(t,n,o){o("copying…");const r=function(t,n){const o=[];"Overview"===n?o.push(...function(t){const n=[],o=A(_(x().theme)),h=e=>f(e,o.claude),r=18,s=40,a=18,row=(e,t,n,o)=>{const i=(e+":").padEnd(r),l=i.length+t.length,c=Math.max(2,s-l),u=(n+":").padEnd(a);return i+h(t)+" ".repeat(c)+u+h(o)};t.dailyActivity.length>0&&(n.push(M(t.dailyActivity,{terminalWidth:56})),n.push(""));const l=Object.entries(t.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens)),c=l[0],u=l.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0);c&&n.push(row("Favorite model",j(c[0]),"Total tokens",v(u)));n.push(""),n.push(row("Sessions",v(t.totalSessions),"Longest session",t.longestSession?D(t.longestSession.duration):"N/A"));const d=`${t.streaks.currentStreak} ${1===t.streaks.currentStreak?"day":"days"}`,m=`${t.streaks.longestStreak} ${1===t.streaks.longestStreak?"day":"days"}`;n.push(row("Current streak",d,"Longest streak",m));const p=`${t.activeDays}/${t.totalDays}`,g=null!==t.peakActivityHour?`${t.peakActivityHour}:00-${t.peakActivityHour+1}:00`:"N/A";n.push(row("Active days",p,"Peak hour",g)),!1;if(e("SHOT_STATS")&&t.shotDistribution){const e=t.shotDistribution,o=Object.values(e).reduce((e,t)=>e+t,0);if(o>0){const t=(Object.entries(e).reduce((e,[t,n])=>e+parseInt(t,10)*n,0)/o).toFixed(1),bucket=(t,n)=>Object.entries(e).filter(([e])=>{const o=parseInt(e,10);return o>=t&&(void 0===n||o<=n)}).reduce((e,[,t])=>e+t,0),pct=e=>Math.round(e/o*100),fmtBucket=(e,t)=>`${e} (${t}%)`,s=bucket(1,1),i=bucket(2,5),a=bucket(6,10),l=bucket(11);n.push(""),n.push("Shot distribution"),n.push(row("1-shot",fmtBucket(s,pct(s)),"2–5 shot",fmtBucket(i,pct(i)))),n.push(row("6–10 shot",fmtBucket(a,pct(a)),"11+ shot",fmtBucket(l,pct(l)))),n.push(`${"Avg/session:".padEnd(r)}${h(t)}`)}}n.push("");const k=generateFunFactoid(t,u);return n.push(h(k)),n.push(i.gray(`Stats from the last ${t.totalDays} days`)),n}(t)):o.push(...function(e){const t=[],n=Object.entries(e.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens));if(0===n.length)return t.push(i.gray("No model usage data available")),t;const o=n[0],r=n.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0),s=generateTokenChart(e.dailyModelTokens,n.map(([e])=>e),80);if(s){t.push(i.bold("Tokens per Day")),t.push(s.chart),t.push(i.gray(s.xAxisLabels));const e=s.legend.map(e=>`${e.coloredBullet} ${e.model}`).join(" · ");t.push(e),t.push("")}t.push(`${a.star} Favorite: ${i.magenta.bold(j(o?.[0]||""))} · ${a.circle} Total: ${i.magenta(v(r))} tokens`),t.push("");const l=n.slice(0,3);for(const[e,n]of l){const o=((n.inputTokens+n.outputTokens)/r*100).toFixed(1);t.push(`${a.bullet} ${i.bold(j(e))} ${i.gray(`(${o}%)`)}`),t.push(i.dim(` In: ${v(n.inputTokens)} · Out: ${v(n.outputTokens)}`))}return t}(t));for(;o.length>0&&""===p(o[o.length-1]).trim();)o.pop();if(o.length>0){const e=o[o.length-1],t=k(e),r="Overview"===n?70:80,s="/stats",a=Math.max(2,r-t-s.length);o[o.length-1]=e+" ".repeat(a)+i.gray(s)}return o.join("\n")}(t,n),s=await $(r);o(s.success?"copied!":"copy failed"),setTimeout(o,2e3,null)}(J,N,G)},s[8]=N,s[9]=b,s[10]=J,s[11]=d,s[12]=ee):ee=s[12],w(ee),"error"===g.type){let e;return s[13]!==g.message?(e=t(T,{marginTop:1,children:n(y,{color:"error",children:["Error al cargar estadísticas: ",g.message]})}),s[13]=g.message,s[14]=e):e=s[14],e}if("empty"===g.type){let e;return s[15]===Symbol.for("react.memo_cache_sentinel")?(e=t(T,{marginTop:1,children:t(y,{color:"warning",children:"Aún no hay estadísticas disponibles. ¡Comienza a usar Context Code!"})}),s[15]=e):e=s[15],e}if(!J||!V){let e;return s[16]===Symbol.for("react.memo_cache_sentinel")?(e=n(T,{marginTop:1,children:[t(B,{}),t(y,{children:" Cargando estadísticas…"})]}),s[16]=e):e=s[16],e}s[17]!==V||s[18]!==b||s[19]!==J||s[20]!==U?(te=t(L,{title:"Resumen",children:t(OverviewTab,{stats:J,allTimeStats:V,dateRange:b,isLoading:U})}),s[17]=V,s[18]=b,s[19]=J,s[20]=U,s[21]=te):te=s[21],s[22]!==b||s[23]!==J||s[24]!==U?(ne=t(L,{title:"Modelos",children:t(ModelsTab,{stats:J,dateRange:b,isLoading:U})}),s[22]=b,s[23]=J,s[24]=U,s[25]=ne):ne=s[25],s[26]!==te||s[27]!==ne?(oe=t(T,{flexDirection:"row",gap:1,marginBottom:1,children:n(R,{title:"",color:"claude",defaultTab:"Resumen",children:[te,ne]})}),s[26]=te,s[27]=ne,s[28]=oe):oe=s[28];const re=q?` · ${"copying…"===q?"copiando…":"copied!"===q?"¡copiado!":"copy failed"===q?"copia fallida":q}`:"";let se,ie;return s[29]!==re?(se=t(T,{paddingLeft:2,children:n(y,{dimColor:!0,children:["Esc para cancelar · r para recorrer fechas · ctrl+s para copiar",re]})}),s[29]=re,s[30]=se):se=s[30],s[31]!==se||s[32]!==oe?(ie=n(F,{color:"claude",children:[oe,se]}),s[31]=se,s[32]=oe,s[33]=ie):ie=s[33],ie}function _temp(e){return"Overview"===e?"Models":"Overview"}function DateRangeSelector(e){const o=r(9),{dateRange:s,isLoading:i}=e;let a,l,c,u;return o[0]!==s?(a=H.map((e,o)=>n(y,{children:[o>0&&t(y,{dimColor:!0,children:" · "}),t(y,e===s?{bold:!0,color:"claude",children:E[e]}:{dimColor:!0,children:E[e]})]},e)),o[0]=s,o[1]=a):a=o[1],o[2]!==a?(l=t(T,{children:a}),o[2]=a,o[3]=l):l=o[3],o[4]!==i?(c=i&&t(B,{}),o[4]=i,o[5]=c):c=o[5],o[6]!==l||o[7]!==c?(u=n(T,{marginBottom:1,gap:1,children:[l,c]}),o[6]=l,o[7]=c,o[8]=u):u=o[8],u}function OverviewTab({stats:r,allTimeStats:s,dateRange:i,isLoading:a}){const{columns:l}=g(),c=Object.entries(r.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens)),u=c[0],m=c.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0),p=d(()=>generateFunFactoid(r,m),[r,m]),f="7d"===i?7:"30d"===i?30:r.totalDays;let k=null;if(e("SHOT_STATS")&&r.shotDistribution){const e=r.shotDistribution,t=Object.values(e).reduce((e,t)=>e+t,0);if(t>0){const n=Object.entries(e).reduce((e,[t,n])=>e+parseInt(t,10)*n,0),bucket=(t,n)=>Object.entries(e).filter(([e])=>{const o=parseInt(e,10);return o>=t&&(void 0===n||o<=n)}).reduce((e,[,t])=>e+t,0),pct=e=>Math.round(e/t*100),o=bucket(1,1),r=bucket(2,5),s=bucket(6,10),i=bucket(11);k={avgShots:(n/t).toFixed(1),buckets:[{label:"1-shot",count:o,pct:pct(o)},{label:"2–5 shot",count:r,pct:pct(r)},{label:"6–10 shot",count:s,pct:pct(s)},{label:"11+ shot",count:i,pct:pct(i)}]}}}return n(T,{flexDirection:"column",marginTop:1,children:[s.dailyActivity.length>0&&t(T,{flexDirection:"column",marginBottom:1,children:t(b,{children:M(s.dailyActivity,{terminalWidth:l})})}),t(DateRangeSelector,{dateRange:i,isLoading:a}),n(T,{flexDirection:"row",gap:4,marginBottom:1,children:[t(T,{flexDirection:"column",width:28,children:u&&n(y,{wrap:"truncate",children:["Modelo favorito:"," ",t(y,{color:"claude",bold:!0,children:j(u[0])})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Tokens totales:"," ",t(y,{color:"claude",children:v(m)})]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Sesiones:"," ",t(y,{color:"claude",children:v(r.totalSessions)})]})}),t(T,{flexDirection:"column",width:28,children:r.longestSession&&n(y,{wrap:"truncate",children:["Sesión más larga:"," ",t(y,{color:"claude",children:D(r.longestSession.duration)})]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Días activos: ",t(y,{color:"claude",children:r.activeDays}),n(y,{color:"subtle",children:["/",f]})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Racha más larga:"," ",t(y,{color:"claude",bold:!0,children:r.streaks.longestStreak})," ",1===r.streaks.longestStreak?"día":"días"]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:r.peakActivityDay&&n(y,{wrap:"truncate",children:["Día más activo:"," ",t(y,{color:"claude",children:(w=r.peakActivityDay,new Date(w).toLocaleDateString("en-US",{month:"short",day:"numeric"}))})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Racha actual:"," ",t(y,{color:"claude",bold:!0,children:s.streaks.currentStreak})," ",1===s.streaks.currentStreak?"día":"días"]})})]}),!1,k&&n(o,{children:[t(T,{marginTop:1,children:t(y,{children:"Distribución de turnos (shots)"})}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[0].label,":"," ",t(y,{color:"claude",children:k.buckets[0].count}),n(y,{color:"subtle",children:[" (",k.buckets[0].pct,"%)"]})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[1].label,":"," ",t(y,{color:"claude",children:k.buckets[1].count}),n(y,{color:"subtle",children:[" (",k.buckets[1].pct,"%)"]})]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[2].label,":"," ",t(y,{color:"claude",children:k.buckets[2].count}),n(y,{color:"subtle",children:[" (",k.buckets[2].pct,"%)"]})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[3].label,":"," ",t(y,{color:"claude",children:k.buckets[3].count}),n(y,{color:"subtle",children:[" (",k.buckets[3].pct,"%)"]})]})})]}),t(T,{flexDirection:"row",gap:4,children:t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Promedio/sesión:"," ",t(y,{color:"claude",children:k.avgShots})]})})})]}),p&&t(T,{marginTop:1,children:t(y,{color:"suggestion",children:p})})]});var w}const I=[{name:"The Little Prince",tokens:22e3},{name:"The Old Man and the Sea",tokens:35e3},{name:"A Christmas Carol",tokens:37e3},{name:"Animal Farm",tokens:39e3},{name:"Fahrenheit 451",tokens:6e4},{name:"The Great Gatsby",tokens:62e3},{name:"Slaughterhouse-Five",tokens:64e3},{name:"Brave New World",tokens:83e3},{name:"The Catcher in the Rye",tokens:95e3},{name:"Harry Potter and the Philosopher's Stone",tokens:103e3},{name:"The Hobbit",tokens:123e3},{name:"1984",tokens:123e3},{name:"To Kill a Mockingbird",tokens:13e4},{name:"Pride and Prejudice",tokens:156e3},{name:"Dune",tokens:244e3},{name:"Moby-Dick",tokens:268e3},{name:"Crime and Punishment",tokens:274e3},{name:"A Game of Thrones",tokens:381e3},{name:"Anna Karenina",tokens:468e3},{name:"Don Quixote",tokens:52e4},{name:"The Lord of the Rings",tokens:576e3},{name:"The Count of Monte Cristo",tokens:603e3},{name:"Les Misérables",tokens:689e3},{name:"War and Peace",tokens:73e4}],U=[{name:"a TED talk",minutes:18},{name:"an episode of The Office",minutes:22},{name:"listening to Abbey Road",minutes:47},{name:"a yoga class",minutes:60},{name:"a World Cup soccer match",minutes:90},{name:"a half marathon (average time)",minutes:120},{name:"the movie Inception",minutes:148},{name:"watching Titanic",minutes:195},{name:"a transatlantic flight",minutes:420},{name:"a full night of sleep",minutes:480}];function generateFunFactoid(e,t){const n=[];if(t>0){const e=I.filter(e=>t>=e.tokens);for(const o of e){const e=t/o.tokens;e>=2?n.push(`Has usado ~${Math.floor(e)} veces más tokens que en ${o.name}`):n.push(`Has usado el mismo número de tokens que en ${o.name}`)}}if(e.longestSession){const t=e.longestSession.duration/6e4;for(const e of U){const o=t/e.minutes;o>=2&&n.push(`Tu sesión más larga es ~${Math.floor(o)} veces más larga que ${e.name}`)}}if(0===n.length)return"";return n[Math.floor(Math.random()*n.length)]}function ModelsTab(e){const o=r(15),{stats:s,dateRange:i,isLoading:l}=e,{headerFocused:c,focusHeader:u}=P(),[d,p]=m(0),{columns:f}=g(),k=Object.entries(s.modelUsage).sort(_temp7),S=!c;let x;if(o[0]!==S?(x={isActive:S},o[0]=S,o[1]=x):x=o[1],w((e,t)=>{t.downArrow&&d<k.length-4&&p(e=>Math.min(e+2,k.length-4)),t.upArrow&&(d>0?p(_temp8):u())},x),0===k.length){let e;return o[2]===Symbol.for("react.memo_cache_sentinel")?(e=t(T,{children:t(y,{color:"subtle",children:"No model usage data available"})}),o[2]=e):e=o[2],e}const D=k.reduce(_temp9,0),v=generateTokenChart(s.dailyModelTokens,k.map(_temp0),f),M=k.slice(d,d+4),j=Math.ceil(M.length/2),$=M.slice(0,j),C=M.slice(j),_=d>0,A=d<k.length-4,O=k.length>4;let F;o[3]!==i||o[4]!==l?(F=t(DateRangeSelector,{dateRange:i,isLoading:l}),o[3]=i,o[4]=l,o[5]=F):F=o[5];const L=T,R=C.map(e=>{const[n,o]=e;return t(ModelEntry,{model:n,usage:o,totalTokens:D},n)});let B,E;return o[6]!==L||o[7]!==R?(B=t(L,{flexDirection:"column",width:36,children:R}),o[6]=L,o[7]=R,o[8]=B):B=o[8],o[9]!==A||o[10]!==_||o[11]!==k||o[12]!==d||o[13]!==O?(E=O&&t(T,{marginTop:1,children:n(y,{color:"subtle",children:[_?a.arrowUp:" "," ",A?a.arrowDown:" "," ",d+1,"-",Math.min(d+4,k.length)," de"," ",k.length," modelos (↑↓ para desplazar)"]})}),o[9]=A,o[10]=_,o[11]=k,o[12]=d,o[13]=O,o[14]=E):E=o[14],n(T,{flexDirection:"column",marginTop:1,children:[v&&n(T,{flexDirection:"column",marginBottom:1,children:[t(y,{bold:!0,children:"Tokens por día"}),t(b,{children:v.chart}),t(y,{color:"subtle",children:v.xAxisLabels}),t(T,{children:v.legend.map(_temp1)})]}),F,n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:36,children:$.map(e=>{const[n,o]=e;return t(ModelEntry,{model:n,usage:o,totalTokens:D},n)})}),B]}),E]})}function _temp1(e,o){return n(y,{children:[o>0?" · ":"",t(b,{children:e.coloredBullet})," ",e.model]},e.model)}function _temp0(e){const[t]=e;return t}function _temp9(e,t){const[,n]=t;return e+n.inputTokens+n.outputTokens}function _temp8(e){return Math.max(e-2,0)}function _temp7(e,t){const[,n]=e,[,o]=t;return o.inputTokens+o.outputTokens-(n.inputTokens+n.outputTokens)}function ModelEntry(e){const o=r(21),{model:s,usage:i,totalTokens:l}=e,c=(i.inputTokens+i.outputTokens)/l*100;let u;o[0]!==c?(u=c.toFixed(1),o[0]=c,o[1]=u):u=o[1];const d=u;let m,p,g,f,k,b,w,S;return o[2]!==s?(m=j(s),o[2]=s,o[3]=m):m=o[3],o[4]!==m?(p=t(y,{bold:!0,children:m}),o[4]=m,o[5]=p):p=o[5],o[6]!==d?(g=n(y,{color:"subtle",children:["(",d,"%)"]}),o[6]=d,o[7]=g):g=o[7],o[8]!==p||o[9]!==g?(f=n(y,{children:[a.bullet," ",p," ",g]}),o[8]=p,o[9]=g,o[10]=f):f=o[10],o[11]!==i.inputTokens?(k=v(i.inputTokens),o[11]=i.inputTokens,o[12]=k):k=o[12],o[13]!==i.outputTokens?(b=v(i.outputTokens),o[13]=i.outputTokens,o[14]=b):b=o[14],o[15]!==k||o[16]!==b?(w=n(y,{color:"subtle",children:[" ","In: ",k," · Out:"," ",b]}),o[15]=k,o[16]=b,o[17]=w):w=o[17],o[18]!==f||o[19]!==w?(S=n(T,{flexDirection:"column",children:[f,w]}),o[18]=f,o[19]=w,o[20]=S):S=o[20],S}function generateTokenChart(e,t,n){if(e.length<2||0===t.length)return null;const o=n-7,r=Math.min(52,Math.max(20,o));let i;if(e.length>=r)i=e.slice(-r);else{const t=Math.floor(r/e.length);i=[];for(const n of e)for(let e=0;e<t;e++)i.push(n)}const l=A(_(x().theme)),c=[O(l.suggestion),O(l.success),O(l.warning)],u=[],d=[],m=t.slice(0,3);for(let e=0;e<m.length;e++){const t=m[e],n=i.map(e=>e.tokensByModel[t]||0);if(n.some(e=>e>0)){u.push(n);const o=[l.suggestion,l.success,l.warning];d.push({model:j(t),coloredBullet:f(a.bullet,o[e%o.length])})}}if(0===u.length)return null;return{chart:s(u,{height:8,colors:c.slice(0,u.length),format:e=>{let t;return t=e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(0)+"k":e.toFixed(0),t.padStart(6)}}),legend:d,xAxisLabels:function(e,t,n){if(0===e.length)return"";const o=Math.min(4,Math.max(2,Math.floor(e.length/8))),r=e.length-6,s=Math.floor(r/(o-1))||1,i=[];for(let t=0;t<o;t++){const n=Math.min(t*s,e.length-1),o=new Date(e[n].date).toLocaleDateString("en-US",{month:"short",day:"numeric"});i.push({pos:n,label:o})}let a=" ".repeat(n),l=0;for(const{pos:e,label:t}of i){const n=Math.max(1,e-l);a+=" ".repeat(n)+t,l=e+t.length}return a}(i,i.length,7)}}
1
+ import{feature as e}from"../recovery/bunBundleShim.js";import{jsx as t,jsxs as n,Fragment as o}from"react/jsx-runtime";import{c as r}from"react/compiler-runtime";import{plot as s}from"asciichart";import i from"chalk";import a from"figures";import{Suspense as l,use as c,useEffect as u,useMemo as d,useState as m}from"react";import p from"strip-ansi";import{useTerminalSize as g}from"../hooks/useTerminalSize.js";import{applyColor as f}from"../ink/colorize.js";import{stringWidth as k}from"../ink/stringWidth.js";import{Ansi as b,Box as T,Text as y,useInput as x}from"../ink.js";import{useKeybinding as w}from"../keybindings/useKeybinding.js";import{getGlobalConfig as S}from"../utils/config.js";import{formatDuration as D,formatNumber as v}from"../utils/format.js";import{generateHeatmap as M}from"../utils/heatmap.js";import{renderModelName as j}from"../utils/model/model.js";import{copyAnsiToClipboard as $}from"../utils/screenshotClipboard.js";import{aggregateClaudeCodeStatsForRange as C}from"../utils/stats.js";import{resolveThemeSetting as _}from"../utils/systemTheme.js";import{getTheme as A,themeColorToAnsi as O}from"../utils/theme.js";import{Pane as F}from"./design-system/Pane.js";import{Tab as L,Tabs as R,useTabHeaderFocus as P}from"./design-system/Tabs.js";import{Spinner as B}from"./Spinner.js";const E={"7d":"Últimos 7 días","30d":"Últimos 30 días",all:"Todo el tiempo"},H=["all","7d","30d"];export function Stats(e){const o=r(4),{onClose:s}=e;let i;o[0]===Symbol.for("react.memo_cache_sentinel")?(i=C("all").then(e=>e&&0!==e.totalSessions?{type:"success",data:e}:{type:"empty"}).catch(e=>({type:"error",message:e instanceof Error?e.message:"Failed to load stats"})),o[0]=i):i=o[0];const a=i;let c,u;return o[1]===Symbol.for("react.memo_cache_sentinel")?(c=n(T,{marginTop:1,children:[t(B,{}),t(y,{children:" Cargando tus estadísticas de Context Code…"})]}),o[1]=c):c=o[1],o[2]!==s?(u=t(l,{fallback:c,children:t(StatsContent,{allTimePromise:a,onClose:s})}),o[2]=s,o[3]=u):u=o[3],u}function StatsContent(o){const s=r(34),{allTimePromise:l,onClose:d}=o,g=c(l),[b,O]=m("all");let P;s[0]===Symbol.for("react.memo_cache_sentinel")?(P={},s[0]=P):P=s[0];const[E,I]=m(P),[U,W]=m(!1),[N,z]=m("Overview"),[q,G]=m(null);let K,Q;s[1]!==b||s[2]!==E?(K=()=>{if("all"===b)return;if(E[b])return;let e=!1;return W(!0),C(b).then(t=>{e||(I(e=>({...e,[b]:t})),W(!1))}).catch(()=>{e||W(!1)}),()=>{e=!0}},Q=[b,E],s[1]=b,s[2]=E,s[3]=K,s[4]=Q):(K=s[3],Q=s[4]),u(K,Q);const J="all"===b?"success"===g.type?g.data:null:E[b]??("success"===g.type?g.data:null),V="success"===g.type?g.data:null;let X;s[5]!==d?(X=()=>{d("Stats dialog dismissed",{display:"system"})},s[5]=d,s[6]=X):X=s[6];const Y=X;let Z,ee,te,ne,oe;if(s[7]===Symbol.for("react.memo_cache_sentinel")?(Z={context:"Confirmation"},s[7]=Z):Z=s[7],w("confirm:no",Y,Z),s[8]!==N||s[9]!==b||s[10]!==J||s[11]!==d?(ee=(t,n)=>{!n.ctrl||"c"!==t&&"d"!==t||d("Stats dialog dismissed",{display:"system"}),n.tab&&z(_temp),"r"!==t||n.ctrl||n.meta||O(function(e){const t=H.indexOf(e);return H[(t+1)%H.length]}(b)),n.ctrl&&"s"===t&&J&&async function(t,n,o){o("copying…");const r=function(t,n){const o=[];"Overview"===n?o.push(...function(t){const n=[],o=A(_(S().theme)),h=e=>f(e,o.context),r=18,s=40,a=18,row=(e,t,n,o)=>{const i=(e+":").padEnd(r),l=i.length+t.length,c=Math.max(2,s-l),u=(n+":").padEnd(a);return i+h(t)+" ".repeat(c)+u+h(o)};t.dailyActivity.length>0&&(n.push(M(t.dailyActivity,{terminalWidth:56})),n.push(""));const l=Object.entries(t.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens)),c=l[0],u=l.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0);c&&n.push(row("Favorite model",j(c[0]),"Total tokens",v(u)));n.push(""),n.push(row("Sessions",v(t.totalSessions),"Longest session",t.longestSession?D(t.longestSession.duration):"N/A"));const d=`${t.streaks.currentStreak} ${1===t.streaks.currentStreak?"day":"days"}`,m=`${t.streaks.longestStreak} ${1===t.streaks.longestStreak?"day":"days"}`;n.push(row("Current streak",d,"Longest streak",m));const p=`${t.activeDays}/${t.totalDays}`,g=null!==t.peakActivityHour?`${t.peakActivityHour}:00-${t.peakActivityHour+1}:00`:"N/A";n.push(row("Active days",p,"Peak hour",g)),!1;if(e("SHOT_STATS")&&t.shotDistribution){const e=t.shotDistribution,o=Object.values(e).reduce((e,t)=>e+t,0);if(o>0){const t=(Object.entries(e).reduce((e,[t,n])=>e+parseInt(t,10)*n,0)/o).toFixed(1),bucket=(t,n)=>Object.entries(e).filter(([e])=>{const o=parseInt(e,10);return o>=t&&(void 0===n||o<=n)}).reduce((e,[,t])=>e+t,0),pct=e=>Math.round(e/o*100),fmtBucket=(e,t)=>`${e} (${t}%)`,s=bucket(1,1),i=bucket(2,5),a=bucket(6,10),l=bucket(11);n.push(""),n.push("Shot distribution"),n.push(row("1-shot",fmtBucket(s,pct(s)),"2–5 shot",fmtBucket(i,pct(i)))),n.push(row("6–10 shot",fmtBucket(a,pct(a)),"11+ shot",fmtBucket(l,pct(l)))),n.push(`${"Avg/session:".padEnd(r)}${h(t)}`)}}n.push("");const k=generateFunFactoid(t,u);return n.push(h(k)),n.push(i.gray(`Stats from the last ${t.totalDays} days`)),n}(t)):o.push(...function(e){const t=[],n=Object.entries(e.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens));if(0===n.length)return t.push(i.gray("No model usage data available")),t;const o=n[0],r=n.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0),s=generateTokenChart(e.dailyModelTokens,n.map(([e])=>e),80);if(s){t.push(i.bold("Tokens per Day")),t.push(s.chart),t.push(i.gray(s.xAxisLabels));const e=s.legend.map(e=>`${e.coloredBullet} ${e.model}`).join(" · ");t.push(e),t.push("")}t.push(`${a.star} Favorite: ${i.magenta.bold(j(o?.[0]||""))} · ${a.circle} Total: ${i.magenta(v(r))} tokens`),t.push("");const l=n.slice(0,3);for(const[e,n]of l){const o=((n.inputTokens+n.outputTokens)/r*100).toFixed(1);t.push(`${a.bullet} ${i.bold(j(e))} ${i.gray(`(${o}%)`)}`),t.push(i.dim(` In: ${v(n.inputTokens)} · Out: ${v(n.outputTokens)}`))}return t}(t));for(;o.length>0&&""===p(o[o.length-1]).trim();)o.pop();if(o.length>0){const e=o[o.length-1],t=k(e),r="Overview"===n?70:80,s="/stats",a=Math.max(2,r-t-s.length);o[o.length-1]=e+" ".repeat(a)+i.gray(s)}return o.join("\n")}(t,n),s=await $(r);o(s.success?"copied!":"copy failed"),setTimeout(o,2e3,null)}(J,N,G)},s[8]=N,s[9]=b,s[10]=J,s[11]=d,s[12]=ee):ee=s[12],x(ee),"error"===g.type){let e;return s[13]!==g.message?(e=t(T,{marginTop:1,children:n(y,{color:"error",children:["Error al cargar estadísticas: ",g.message]})}),s[13]=g.message,s[14]=e):e=s[14],e}if("empty"===g.type){let e;return s[15]===Symbol.for("react.memo_cache_sentinel")?(e=t(T,{marginTop:1,children:t(y,{color:"warning",children:"Aún no hay estadísticas disponibles. ¡Comienza a usar Context Code!"})}),s[15]=e):e=s[15],e}if(!J||!V){let e;return s[16]===Symbol.for("react.memo_cache_sentinel")?(e=n(T,{marginTop:1,children:[t(B,{}),t(y,{children:" Cargando estadísticas…"})]}),s[16]=e):e=s[16],e}s[17]!==V||s[18]!==b||s[19]!==J||s[20]!==U?(te=t(L,{title:"Resumen",children:t(OverviewTab,{stats:J,allTimeStats:V,dateRange:b,isLoading:U})}),s[17]=V,s[18]=b,s[19]=J,s[20]=U,s[21]=te):te=s[21],s[22]!==b||s[23]!==J||s[24]!==U?(ne=t(L,{title:"Modelos",children:t(ModelsTab,{stats:J,dateRange:b,isLoading:U})}),s[22]=b,s[23]=J,s[24]=U,s[25]=ne):ne=s[25],s[26]!==te||s[27]!==ne?(oe=t(T,{flexDirection:"row",gap:1,marginBottom:1,children:n(R,{title:"",color:"context",defaultTab:"Resumen",children:[te,ne]})}),s[26]=te,s[27]=ne,s[28]=oe):oe=s[28];const re=q?` · ${"copying…"===q?"copiando…":"copied!"===q?"¡copiado!":"copy failed"===q?"copia fallida":q}`:"";let se,ie;return s[29]!==re?(se=t(T,{paddingLeft:2,children:n(y,{dimColor:!0,children:["Esc para cancelar · r para recorrer fechas · ctrl+s para copiar",re]})}),s[29]=re,s[30]=se):se=s[30],s[31]!==se||s[32]!==oe?(ie=n(F,{color:"context",children:[oe,se]}),s[31]=se,s[32]=oe,s[33]=ie):ie=s[33],ie}function _temp(e){return"Overview"===e?"Models":"Overview"}function DateRangeSelector(e){const o=r(9),{dateRange:s,isLoading:i}=e;let a,l,c,u;return o[0]!==s?(a=H.map((e,o)=>n(y,{children:[o>0&&t(y,{dimColor:!0,children:" · "}),t(y,e===s?{bold:!0,color:"context",children:E[e]}:{dimColor:!0,children:E[e]})]},e)),o[0]=s,o[1]=a):a=o[1],o[2]!==a?(l=t(T,{children:a}),o[2]=a,o[3]=l):l=o[3],o[4]!==i?(c=i&&t(B,{}),o[4]=i,o[5]=c):c=o[5],o[6]!==l||o[7]!==c?(u=n(T,{marginBottom:1,gap:1,children:[l,c]}),o[6]=l,o[7]=c,o[8]=u):u=o[8],u}function OverviewTab({stats:r,allTimeStats:s,dateRange:i,isLoading:a}){const{columns:l}=g(),c=Object.entries(r.modelUsage).sort(([,e],[,t])=>t.inputTokens+t.outputTokens-(e.inputTokens+e.outputTokens)),u=c[0],m=c.reduce((e,[,t])=>e+t.inputTokens+t.outputTokens,0),p=d(()=>generateFunFactoid(r,m),[r,m]),f="7d"===i?7:"30d"===i?30:r.totalDays;let k=null;if(e("SHOT_STATS")&&r.shotDistribution){const e=r.shotDistribution,t=Object.values(e).reduce((e,t)=>e+t,0);if(t>0){const n=Object.entries(e).reduce((e,[t,n])=>e+parseInt(t,10)*n,0),bucket=(t,n)=>Object.entries(e).filter(([e])=>{const o=parseInt(e,10);return o>=t&&(void 0===n||o<=n)}).reduce((e,[,t])=>e+t,0),pct=e=>Math.round(e/t*100),o=bucket(1,1),r=bucket(2,5),s=bucket(6,10),i=bucket(11);k={avgShots:(n/t).toFixed(1),buckets:[{label:"1-shot",count:o,pct:pct(o)},{label:"2–5 shot",count:r,pct:pct(r)},{label:"6–10 shot",count:s,pct:pct(s)},{label:"11+ shot",count:i,pct:pct(i)}]}}}return n(T,{flexDirection:"column",marginTop:1,children:[s.dailyActivity.length>0&&t(T,{flexDirection:"column",marginBottom:1,children:t(b,{children:M(s.dailyActivity,{terminalWidth:l})})}),t(DateRangeSelector,{dateRange:i,isLoading:a}),n(T,{flexDirection:"row",gap:4,marginBottom:1,children:[t(T,{flexDirection:"column",width:28,children:u&&n(y,{wrap:"truncate",children:["Modelo favorito:"," ",t(y,{color:"context",bold:!0,children:j(u[0])})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Tokens totales:"," ",t(y,{color:"context",children:v(m)})]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Sesiones:"," ",t(y,{color:"context",children:v(r.totalSessions)})]})}),t(T,{flexDirection:"column",width:28,children:r.longestSession&&n(y,{wrap:"truncate",children:["Sesión más larga:"," ",t(y,{color:"context",children:D(r.longestSession.duration)})]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Días activos: ",t(y,{color:"context",children:r.activeDays}),n(y,{color:"subtle",children:["/",f]})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Racha más larga:"," ",t(y,{color:"context",bold:!0,children:r.streaks.longestStreak})," ",1===r.streaks.longestStreak?"día":"días"]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:r.peakActivityDay&&n(y,{wrap:"truncate",children:["Día más activo:"," ",t(y,{color:"context",children:(x=r.peakActivityDay,new Date(x).toLocaleDateString("en-US",{month:"short",day:"numeric"}))})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Racha actual:"," ",t(y,{color:"context",bold:!0,children:s.streaks.currentStreak})," ",1===s.streaks.currentStreak?"día":"días"]})})]}),!1,k&&n(o,{children:[t(T,{marginTop:1,children:t(y,{children:"Distribución de turnos (shots)"})}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[0].label,":"," ",t(y,{color:"context",children:k.buckets[0].count}),n(y,{color:"subtle",children:[" (",k.buckets[0].pct,"%)"]})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[1].label,":"," ",t(y,{color:"context",children:k.buckets[1].count}),n(y,{color:"subtle",children:[" (",k.buckets[1].pct,"%)"]})]})})]}),n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[2].label,":"," ",t(y,{color:"context",children:k.buckets[2].count}),n(y,{color:"subtle",children:[" (",k.buckets[2].pct,"%)"]})]})}),t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:[k.buckets[3].label,":"," ",t(y,{color:"context",children:k.buckets[3].count}),n(y,{color:"subtle",children:[" (",k.buckets[3].pct,"%)"]})]})})]}),t(T,{flexDirection:"row",gap:4,children:t(T,{flexDirection:"column",width:28,children:n(y,{wrap:"truncate",children:["Promedio/sesión:"," ",t(y,{color:"context",children:k.avgShots})]})})})]}),p&&t(T,{marginTop:1,children:t(y,{color:"suggestion",children:p})})]});var x}const I=[{name:"The Little Prince",tokens:22e3},{name:"The Old Man and the Sea",tokens:35e3},{name:"A Christmas Carol",tokens:37e3},{name:"Animal Farm",tokens:39e3},{name:"Fahrenheit 451",tokens:6e4},{name:"The Great Gatsby",tokens:62e3},{name:"Slaughterhouse-Five",tokens:64e3},{name:"Brave New World",tokens:83e3},{name:"The Catcher in the Rye",tokens:95e3},{name:"Harry Potter and the Philosopher's Stone",tokens:103e3},{name:"The Hobbit",tokens:123e3},{name:"1984",tokens:123e3},{name:"To Kill a Mockingbird",tokens:13e4},{name:"Pride and Prejudice",tokens:156e3},{name:"Dune",tokens:244e3},{name:"Moby-Dick",tokens:268e3},{name:"Crime and Punishment",tokens:274e3},{name:"A Game of Thrones",tokens:381e3},{name:"Anna Karenina",tokens:468e3},{name:"Don Quixote",tokens:52e4},{name:"The Lord of the Rings",tokens:576e3},{name:"The Count of Monte Cristo",tokens:603e3},{name:"Les Misérables",tokens:689e3},{name:"War and Peace",tokens:73e4}],U=[{name:"a TED talk",minutes:18},{name:"an episode of The Office",minutes:22},{name:"listening to Abbey Road",minutes:47},{name:"a yoga class",minutes:60},{name:"a World Cup soccer match",minutes:90},{name:"a half marathon (average time)",minutes:120},{name:"the movie Inception",minutes:148},{name:"watching Titanic",minutes:195},{name:"a transatlantic flight",minutes:420},{name:"a full night of sleep",minutes:480}];function generateFunFactoid(e,t){const n=[];if(t>0){const e=I.filter(e=>t>=e.tokens);for(const o of e){const e=t/o.tokens;e>=2?n.push(`Has usado ~${Math.floor(e)} veces más tokens que en ${o.name}`):n.push(`Has usado el mismo número de tokens que en ${o.name}`)}}if(e.longestSession){const t=e.longestSession.duration/6e4;for(const e of U){const o=t/e.minutes;o>=2&&n.push(`Tu sesión más larga es ~${Math.floor(o)} veces más larga que ${e.name}`)}}if(0===n.length)return"";return n[Math.floor(Math.random()*n.length)]}function ModelsTab(e){const o=r(15),{stats:s,dateRange:i,isLoading:l}=e,{headerFocused:c,focusHeader:u}=P(),[d,p]=m(0),{columns:f}=g(),k=Object.entries(s.modelUsage).sort(_temp7),w=!c;let S;if(o[0]!==w?(S={isActive:w},o[0]=w,o[1]=S):S=o[1],x((e,t)=>{t.downArrow&&d<k.length-4&&p(e=>Math.min(e+2,k.length-4)),t.upArrow&&(d>0?p(_temp8):u())},S),0===k.length){let e;return o[2]===Symbol.for("react.memo_cache_sentinel")?(e=t(T,{children:t(y,{color:"subtle",children:"No model usage data available"})}),o[2]=e):e=o[2],e}const D=k.reduce(_temp9,0),v=generateTokenChart(s.dailyModelTokens,k.map(_temp0),f),M=k.slice(d,d+4),j=Math.ceil(M.length/2),$=M.slice(0,j),C=M.slice(j),_=d>0,A=d<k.length-4,O=k.length>4;let F;o[3]!==i||o[4]!==l?(F=t(DateRangeSelector,{dateRange:i,isLoading:l}),o[3]=i,o[4]=l,o[5]=F):F=o[5];const L=T,R=C.map(e=>{const[n,o]=e;return t(ModelEntry,{model:n,usage:o,totalTokens:D},n)});let B,E;return o[6]!==L||o[7]!==R?(B=t(L,{flexDirection:"column",width:36,children:R}),o[6]=L,o[7]=R,o[8]=B):B=o[8],o[9]!==A||o[10]!==_||o[11]!==k||o[12]!==d||o[13]!==O?(E=O&&t(T,{marginTop:1,children:n(y,{color:"subtle",children:[_?a.arrowUp:" "," ",A?a.arrowDown:" "," ",d+1,"-",Math.min(d+4,k.length)," de"," ",k.length," modelos (↑↓ para desplazar)"]})}),o[9]=A,o[10]=_,o[11]=k,o[12]=d,o[13]=O,o[14]=E):E=o[14],n(T,{flexDirection:"column",marginTop:1,children:[v&&n(T,{flexDirection:"column",marginBottom:1,children:[t(y,{bold:!0,children:"Tokens por día"}),t(b,{children:v.chart}),t(y,{color:"subtle",children:v.xAxisLabels}),t(T,{children:v.legend.map(_temp1)})]}),F,n(T,{flexDirection:"row",gap:4,children:[t(T,{flexDirection:"column",width:36,children:$.map(e=>{const[n,o]=e;return t(ModelEntry,{model:n,usage:o,totalTokens:D},n)})}),B]}),E]})}function _temp1(e,o){return n(y,{children:[o>0?" · ":"",t(b,{children:e.coloredBullet})," ",e.model]},e.model)}function _temp0(e){const[t]=e;return t}function _temp9(e,t){const[,n]=t;return e+n.inputTokens+n.outputTokens}function _temp8(e){return Math.max(e-2,0)}function _temp7(e,t){const[,n]=e,[,o]=t;return o.inputTokens+o.outputTokens-(n.inputTokens+n.outputTokens)}function ModelEntry(e){const o=r(21),{model:s,usage:i,totalTokens:l}=e,c=(i.inputTokens+i.outputTokens)/l*100;let u;o[0]!==c?(u=c.toFixed(1),o[0]=c,o[1]=u):u=o[1];const d=u;let m,p,g,f,k,b,x,w;return o[2]!==s?(m=j(s),o[2]=s,o[3]=m):m=o[3],o[4]!==m?(p=t(y,{bold:!0,children:m}),o[4]=m,o[5]=p):p=o[5],o[6]!==d?(g=n(y,{color:"subtle",children:["(",d,"%)"]}),o[6]=d,o[7]=g):g=o[7],o[8]!==p||o[9]!==g?(f=n(y,{children:[a.bullet," ",p," ",g]}),o[8]=p,o[9]=g,o[10]=f):f=o[10],o[11]!==i.inputTokens?(k=v(i.inputTokens),o[11]=i.inputTokens,o[12]=k):k=o[12],o[13]!==i.outputTokens?(b=v(i.outputTokens),o[13]=i.outputTokens,o[14]=b):b=o[14],o[15]!==k||o[16]!==b?(x=n(y,{color:"subtle",children:[" ","In: ",k," · Out:"," ",b]}),o[15]=k,o[16]=b,o[17]=x):x=o[17],o[18]!==f||o[19]!==x?(w=n(T,{flexDirection:"column",children:[f,x]}),o[18]=f,o[19]=x,o[20]=w):w=o[20],w}function generateTokenChart(e,t,n){if(e.length<2||0===t.length)return null;const o=n-7,r=Math.min(52,Math.max(20,o));let i;if(e.length>=r)i=e.slice(-r);else{const t=Math.floor(r/e.length);i=[];for(const n of e)for(let e=0;e<t;e++)i.push(n)}const l=A(_(S().theme)),c=[O(l.suggestion),O(l.success),O(l.warning)],u=[],d=[],m=t.slice(0,3);for(let e=0;e<m.length;e++){const t=m[e],n=i.map(e=>e.tokensByModel[t]||0);if(n.some(e=>e>0)){u.push(n);const o=[l.suggestion,l.success,l.warning];d.push({model:j(t),coloredBullet:f(a.bullet,o[e%o.length])})}}if(0===u.length)return null;return{chart:s(u,{height:8,colors:c.slice(0,u.length),format:e=>{let t;return t=e>=1e6?(e/1e6).toFixed(1)+"M":e>=1e3?(e/1e3).toFixed(0)+"k":e.toFixed(0),t.padStart(6)}}),legend:d,xAxisLabels:function(e,t,n){if(0===e.length)return"";const o=Math.min(4,Math.max(2,Math.floor(e.length/8))),r=e.length-6,s=Math.floor(r/(o-1))||1,i=[];for(let t=0;t<o;t++){const n=Math.min(t*s,e.length-1),o=new Date(e[n].date).toLocaleDateString("en-US",{month:"short",day:"numeric"});i.push({pos:n,label:o})}let a=" ".repeat(n),l=0;for(const{pos:e,label:t}of i){const n=Math.max(1,e-l);a+=" ".repeat(n)+t,l=e+t.length}return a}(i,i.length,7)}}
@@ -1 +1 @@
1
- import{jsxs as e,jsx as r}from"react/jsx-runtime";import{c as n}from"react/compiler-runtime";import o from"figures";import{useState as t}from"react";import{Box as i,Text as l,useAnimationFrame as a}from"../ink.js";import{AppStateProvider as c}from"../state/AppState.js";import{checkOutTeleportedSessionBranch as s,processMessagesForTeleportResume as d,teleportResumeCodeSession as m}from"../utils/teleport.js";const h=["◐","◓","◑","◒"],p=[{key:"validating",label:"Validando sesión"},{key:"fetching_logs",label:"Obteniendo registros de la sesión"},{key:"fetching_branch",label:"Obteniendo información de la rama"},{key:"checking_out",label:"Cambiando a la rama"}];export function TeleportProgress(t){const c=n(16),{currentStep:s,sessionId:d}=t,[m,f]=a(100),g=Math.floor(f/100)%h.length;let u;c[0]!==s?(u=e=>e.key===s,c[0]=s,c[1]=u):u=c[1];const b=p.findIndex(u),k=h[g];let x,y,j,w,C;return c[2]!==k?(x=r(i,{marginBottom:1,children:e(l,{bold:!0,color:"claude",children:[k," Teletransportando sesión…"]})}),c[2]=k,c[3]=x):x=c[3],c[4]!==d?(y=d&&r(i,{marginBottom:1,children:r(l,{dimColor:!0,children:d})}),c[4]=d,c[5]=y):y=c[5],c[6]!==b||c[7]!==g?(j=p.map((n,t)=>{const a=t===b,c=t>b;let s,d;return t<b?(s=o.tick,d="green"):a?(s=h[g],d="claude"):(s=o.circle,d=void 0),e(i,{flexDirection:"row",children:[r(i,{width:2,children:r(l,{color:d,dimColor:c,children:s})}),r(l,{dimColor:c,bold:a,children:n.label})]},n.key)}),c[6]=b,c[7]=g,c[8]=j):j=c[8],c[9]!==j?(w=r(i,{flexDirection:"column",marginLeft:2,children:j}),c[9]=j,c[10]=w):w=c[10],c[11]!==m||c[12]!==x||c[13]!==y||c[14]!==w?(C=e(i,{ref:m,flexDirection:"column",paddingX:1,paddingY:1,children:[x,y,w]}),c[11]=m,c[12]=x,c[13]=y,c[14]=w,c[15]=C):C=c[15],C}export async function teleportWithProgress(e,n){let setStep=()=>{};e.render(r(c,{children:r(function(){const[e,o]=t("validating");return setStep=o,r(TeleportProgress,{currentStep:e,sessionId:n})},{})}));const o=await m(n,setStep);setStep("checking_out");const{branchName:i,branchError:l}=await s(o.branch);return{messages:d(o.log,l),branchName:i}}
1
+ import{jsxs as e,jsx as r}from"react/jsx-runtime";import{c as n}from"react/compiler-runtime";import t from"figures";import{useState as o}from"react";import{Box as i,Text as l,useAnimationFrame as c}from"../ink.js";import{AppStateProvider as a}from"../state/AppState.js";import{checkOutTeleportedSessionBranch as s,processMessagesForTeleportResume as d,teleportResumeCodeSession as m}from"../utils/teleport.js";const h=["◐","◓","◑","◒"],p=[{key:"validating",label:"Validando sesión"},{key:"fetching_logs",label:"Obteniendo registros de la sesión"},{key:"fetching_branch",label:"Obteniendo información de la rama"},{key:"checking_out",label:"Cambiando a la rama"}];export function TeleportProgress(o){const a=n(16),{currentStep:s,sessionId:d}=o,[m,f]=c(100),g=Math.floor(f/100)%h.length;let u;a[0]!==s?(u=e=>e.key===s,a[0]=s,a[1]=u):u=a[1];const b=p.findIndex(u),x=h[g];let k,y,j,w,C;return a[2]!==x?(k=r(i,{marginBottom:1,children:e(l,{bold:!0,color:"context",children:[x," Teletransportando sesión…"]})}),a[2]=x,a[3]=k):k=a[3],a[4]!==d?(y=d&&r(i,{marginBottom:1,children:r(l,{dimColor:!0,children:d})}),a[4]=d,a[5]=y):y=a[5],a[6]!==b||a[7]!==g?(j=p.map((n,o)=>{const c=o===b,a=o>b;let s,d;return o<b?(s=t.tick,d="green"):c?(s=h[g],d="context"):(s=t.circle,d=void 0),e(i,{flexDirection:"row",children:[r(i,{width:2,children:r(l,{color:d,dimColor:a,children:s})}),r(l,{dimColor:a,bold:c,children:n.label})]},n.key)}),a[6]=b,a[7]=g,a[8]=j):j=a[8],a[9]!==j?(w=r(i,{flexDirection:"column",marginLeft:2,children:j}),a[9]=j,a[10]=w):w=a[10],a[11]!==m||a[12]!==k||a[13]!==y||a[14]!==w?(C=e(i,{ref:m,flexDirection:"column",paddingX:1,paddingY:1,children:[k,y,w]}),a[11]=m,a[12]=k,a[13]=y,a[14]=w,a[15]=C):C=a[15],C}export async function teleportWithProgress(e,n){let setStep=()=>{};e.render(r(a,{children:r(function(){const[e,t]=o("validating");return setStep=t,r(TeleportProgress,{currentStep:e,sessionId:n})},{})}));const t=await m(n,setStep);setStep("checking_out");const{branchName:i,branchError:l}=await s(t.branch);return{messages:d(t.log,l),branchName:i}}
@@ -1 +1 @@
1
- import{feature as e}from"../recovery/bunBundleShim.js";import{jsx as o,jsxs as r}from"react/jsx-runtime";import t from"chalk";import{useMemo as i,useRef as n,useState as s,useEffect as l}from"react";import{useVoiceState as a}from"../context/voice.js";import{useClipboardImageHint as c}from"../hooks/useClipboardImageHint.js";import{useSettings as u}from"../hooks/useSettings.js";import{useTextInput as d}from"../hooks/useTextInput.js";import{Box as m,color as p,useAnimationFrame as h,useTerminalFocus as f,useTheme as g,Text as v}from"../ink.js";import{isEnvTruthy as C}from"../utils/envUtils.js";import{BaseTextInput as x}from"./BaseTextInput.js";import{hueToRgb as b}from"./Spinner/utils.js";import{isWebappRunning as E,broadcastInteractiveInput as I,getWebappUrl as y}from"../webapp/server.js";const S=" ▁▂▃▄▅▆▇█";export default function TextInput(T){const[k,D]=s(!1),[j,M]=s(!1),[O,P]=s(null);l(()=>{if(E()&&!T.multiline){D(!0);const e=Math.random().toString(36).substring(2,9),{title:o,description:r,placeholder:t}=function(e){const o=(e.placeholder||e.value||"").toLowerCase();return e.mask||o.includes("api")||o.includes("key")||o.includes("token")||o.includes("password")||o.includes("contraseña")?{title:"Introducir Clave de API / Token Confidencial",description:"Por seguridad, introduce tu API Key o Token de acceso en este campo seguro y enmascarado.",placeholder:"sk-..."}:o.includes("host")||o.includes("url")||o.includes("puerto")||o.includes("port")?{title:"Configurar Dirección / Servidor",description:"Introduce la dirección URL, host o puerto del servicio que deseas configurar.",placeholder:"http://localhost:..."}:{title:"Entrada de Texto Requerida",description:"Por favor, introduce el valor solicitado para continuar con la operación en curso.",placeholder:"Escribe aquí..."}}(T),i=T.value?String(T.value):void 0;I(e,o,r,T.placeholder||t,T.mask,i).then(e=>{M(!0),T.onSubmit?.(e)}).catch(e=>{P(e.message||String(e)),T.onExit?.()})}},[T.multiline,T.value]);const[w]=g(),A=f();if(k&&!j)return r(m,{flexDirection:"column",padding:1,borderStyle:"round",borderColor:"cyan",children:[o(v,{color:"cyan",bold:!0,children:"✨ Interacción de Entrada Transferida a la WebApp"}),o(v,{color:"white",children:"Por favor, escribe el valor requerido en tu navegador:"}),o(v,{bold:!0,color:"cyan",children:y()}),O?r(v,{color:"red",children:["Error: ",O]}):o(v,{dimColor:!0,children:"Esperando respuesta del usuario..."})]});const L=i(()=>C(process.env.CONTEXT_CODE_ACCESSIBILITY)||C(process.env.CLAUDE_CODE_ACCESSIBILITY),[]),H=u().prefersReducedMotion??!1,U="recording"===(e("VOICE_MODE")?a(e=>e.voiceState):"idle"),_=e("VOICE_MODE")?a(e=>e.voiceAudioLevels):[],F=n(new Array(1).fill(0)),R=U&&!H,[V,q]=e("VOICE_MODE")?h(R?50:null):[()=>{},0];c(A,!!T.onImagePaste);let B;if(A&&!L)if(U&&!H){const e=F.current,o=_.length>0?_[_.length-1]??0:0,r=Math.min(1.8*o,1);e[0]=.7*(e[0]??0)+r*(1-.7);const i=e[0]??0,n=Math.max(1,Math.min(Math.round(8*i),8)),s=o<.15,l=q/1e3*90%360,{r:a,g:c,b:u}=s?{r:128,g:128,b:128}:b(l);B=()=>t.rgb(a,c,u)(S[n])}else B=t.inverse;else B=e=>e;const K=d({value:T.value,onChange:T.onChange,onSubmit:T.onSubmit,onExit:T.onExit,onExitMessage:T.onExitMessage,onHistoryReset:T.onHistoryReset,onHistoryUp:T.onHistoryUp,onHistoryDown:T.onHistoryDown,onClearInput:T.onClearInput,focus:T.focus,mask:T.mask,multiline:T.multiline,cursorChar:T.showCursor?" ":"",highlightPastedText:T.highlightPastedText,invert:B,themeText:p("text",w),columns:T.columns,maxVisibleLines:T.maxVisibleLines,onImagePaste:T.onImagePaste,disableCursorMovementForUpDownKeys:T.disableCursorMovementForUpDownKeys,disableEscapeDoublePress:T.disableEscapeDoublePress,externalOffset:T.cursorOffset,onOffsetChange:T.onChangeCursorOffset,inputFilter:T.inputFilter,inlineGhostText:T.inlineGhostText,dim:t.dim});return o(m,{ref:V,children:o(x,{inputState:K,terminalFocus:A,highlights:T.highlights,invert:B,hidePlaceholderText:U,...T})})}
1
+ import{feature as e}from"../recovery/bunBundleShim.js";import{jsx as o,jsxs as r}from"react/jsx-runtime";import t from"chalk";import{useMemo as i,useRef as n,useState as s,useEffect as l}from"react";import{useVoiceState as a}from"../context/voice.js";import{useClipboardImageHint as c}from"../hooks/useClipboardImageHint.js";import{useSettings as u}from"../hooks/useSettings.js";import{useTextInput as d}from"../hooks/useTextInput.js";import{Box as m,color as p,useAnimationFrame as h,useTerminalFocus as f,useTheme as g,Text as v}from"../ink.js";import{isEnvTruthy as C}from"../utils/envUtils.js";import{BaseTextInput as x}from"./BaseTextInput.js";import{hueToRgb as b}from"./Spinner/utils.js";import{isWebappRunning as E,broadcastInteractiveInput as I,getWebappUrl as y}from"../webapp/server.js";const S=" ▁▂▃▄▅▆▇█";export default function TextInput(T){const[k,D]=s(!1),[j,M]=s(!1),[O,P]=s(null);l(()=>{if(E()&&!T.multiline&&!T.mask){D(!0);const e=Math.random().toString(36).substring(2,9),{title:o,description:r,placeholder:t}=function(e){const o=(e.placeholder||e.value||"").toLowerCase();return e.mask||o.includes("api")||o.includes("key")||o.includes("token")||o.includes("password")||o.includes("contraseña")?{title:"Introducir Clave de API / Token Confidencial",description:"Por seguridad, introduce tu API Key o Token de acceso en este campo seguro y enmascarado.",placeholder:"sk-..."}:o.includes("host")||o.includes("url")||o.includes("puerto")||o.includes("port")?{title:"Configurar Dirección / Servidor",description:"Introduce la dirección URL, host o puerto del servicio que deseas configurar.",placeholder:"http://localhost:..."}:{title:"Entrada de Texto Requerida",description:"Por favor, introduce el valor solicitado para continuar con la operación en curso.",placeholder:"Escribe aquí..."}}(T),i=T.value?String(T.value):void 0;I(e,o,r,T.placeholder||t,T.mask,i).then(e=>{M(!0),T.onSubmit?.(e)}).catch(e=>{P(e.message||String(e)),T.onExit?.()})}},[T.multiline,T.value]);const[w]=g(),A=f();if(k&&!j)return r(m,{flexDirection:"column",padding:1,borderStyle:"round",borderColor:"cyan",children:[o(v,{color:"cyan",bold:!0,children:"✨ Interacción de Entrada Transferida a la WebApp"}),o(v,{color:"white",children:"Por favor, escribe el valor requerido en tu navegador:"}),o(v,{bold:!0,color:"cyan",children:y()}),O?r(v,{color:"red",children:["Error: ",O]}):o(v,{dimColor:!0,children:"Esperando respuesta del usuario..."})]});const L=i(()=>C(process.env.CONTEXT_CODE_ACCESSIBILITY)||C(process.env.CLAUDE_CODE_ACCESSIBILITY),[]),H=u().prefersReducedMotion??!1,U="recording"===(e("VOICE_MODE")?a(e=>e.voiceState):"idle"),_=e("VOICE_MODE")?a(e=>e.voiceAudioLevels):[],F=n(new Array(1).fill(0)),R=U&&!H,[V,q]=e("VOICE_MODE")?h(R?50:null):[()=>{},0];c(A,!!T.onImagePaste);let B;if(A&&!L)if(U&&!H){const e=F.current,o=_.length>0?_[_.length-1]??0:0,r=Math.min(1.8*o,1);e[0]=.7*(e[0]??0)+r*(1-.7);const i=e[0]??0,n=Math.max(1,Math.min(Math.round(8*i),8)),s=o<.15,l=q/1e3*90%360,{r:a,g:c,b:u}=s?{r:128,g:128,b:128}:b(l);B=()=>t.rgb(a,c,u)(S[n])}else B=t.inverse;else B=e=>e;const K=d({value:T.value,onChange:T.onChange,onSubmit:T.onSubmit,onExit:T.onExit,onExitMessage:T.onExitMessage,onHistoryReset:T.onHistoryReset,onHistoryUp:T.onHistoryUp,onHistoryDown:T.onHistoryDown,onClearInput:T.onClearInput,focus:T.focus,mask:T.mask,multiline:T.multiline,cursorChar:T.showCursor?" ":"",highlightPastedText:T.highlightPastedText,invert:B,themeText:p("text",w),columns:T.columns,maxVisibleLines:T.maxVisibleLines,onImagePaste:T.onImagePaste,disableCursorMovementForUpDownKeys:T.disableCursorMovementForUpDownKeys,disableEscapeDoublePress:T.disableEscapeDoublePress,externalOffset:T.cursorOffset,onOffsetChange:T.onChangeCursorOffset,inputFilter:T.inputFilter,inlineGhostText:T.inlineGhostText,dim:t.dim});return o(m,{ref:V,children:o(x,{inputState:K,terminalFocus:A,highlights:T.highlights,invert:B,hidePlaceholderText:U,...T})})}
@@ -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 i,useContext as n,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 l}from"../../utils/config.js";import{getSystemThemeName as h}from"../../utils/systemTheme.js";import{bootstrapDynamicThemes as c}from"../../utils/themes/bootstrap.js";c();const v="dark",T=i({themeSetting:v,setThemeSetting:()=>{},setPreviewTheme:()=>{},savePreview:()=>{},cancelPreview:()=>{},currentTheme:v});function defaultInitialTheme(){return a().theme}function defaultSaveTheme(e){l(t=>({...t,theme:e}))}export function ThemeProvider({children:r,initialState:i,onThemeSave:n=defaultSaveTheme}){const[a,l]=u(i??defaultInitialTheme),[c,v]=u(null),[f,p]=u(()=>"auto"===(i??a)?h():"dark"),P=c??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(({watchSystemTheme:r})=>{t||(e=r(w,p))}),()=>{t=!0,e?.()}}},[P,w]);const S="auto"===P?f:P,d=o(()=>({themeSetting:a,setThemeSetting:e=>{l(e),v(null),"auto"===e&&p(h()),n?.(e)},setPreviewTheme:e=>{v(e),"auto"===e&&p(h())},savePreview:()=>{null!==c&&(l(c),v(null),n?.(c))},cancelPreview:()=>{null!==c&&v(null)},currentTheme:S}),[a,c,S,n]);return t(T.Provider,{value:d,children:r})}export function useTheme(){const e=r(3),{currentTheme:t,setThemeSetting:i}=n(T);let m;return e[0]!==t||e[1]!==i?(m=[t,i],e[0]=t,e[1]=i,e[2]=m):m=e[2],m}export function useThemeSetting(){return n(T).themeSetting}export function usePreviewTheme(){const e=r(4),{setPreviewTheme:t,savePreview:i,cancelPreview:m}=n(T);let o;return e[0]!==m||e[1]!==i||e[2]!==t?(o={setPreviewTheme:t,savePreview:i,cancelPreview:m},e[0]=m,e[1]=i,e[2]=t,e[3]=o):o=e[3],o}
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{resetCostState as e}from"../../bootstrap/state.js";import{clearTrustedDeviceToken as o,enrollTrustedDevice as r}from"../../bridge/trustedDevice.js";import{refreshGrowthBookAfterAuthChange as t}from"../../services/analytics/growthbook.js";import{refreshPolicyLimits as s}from"../../services/policyLimits/index.js";import{refreshRemoteManagedSettings as i}from"../../services/remoteManagedSettings/index.js";import{stripSignatureBlocks as n}from"../../utils/messages.js";import{checkAndDisableAutoModeIfNeeded as a,checkAndDisableBypassPermissionsIfNeeded as l,resetAutoModeGateCheck as p,resetBypassPermissionsCheck as m}from"../../utils/permissions/bypassPermissionsKillswitch.js";import{switchProviderPreference as c}from"../../utils/model/providerSwitch.js";import{resetUserCache as d}from"../../utils/user.js";export function isCoreAuthEnabled(){return"0"!==process.env.CORE_AUTH_ENABLED}export function parseLoginProfileName(e){const o=e?.trim()??"";if(!o)return;const r=o.split(/\s+/).filter(Boolean),t=r.findIndex(e=>"--profile"===e||"-p"===e);return-1!==t&&r[t+1]?r[t+1]:r.length>0&&!r[0].startsWith("-")?r[0]:void 0}function resolveProvider(e){return e||"claude"}export function applySuccessfulLogin(f){const{context:u,profileName:v,previousModel:g,previousProvider:P,targetProvider:h,transcriptClassifierEnabled:x}=f;u.onChangeAPIKey(),u.setMessages(n);const S=c({currentModel:g,currentProvider:P,targetProvider:resolveProvider(h),targetProfileName:v});e(),i(),s(),d(),t(),o(),r(),m();const j=u.getAppState();l(j.toolPermissionContext,u.setAppState),x&&(p(),a(j.toolPermissionContext,u.setAppState,j.fastMode)),u.setAppState(e=>({...e,mainLoopModel:S,mainLoopModelForSession:S,authVersion:e.authVersion+1}));const M=!S;return{restoredModel:S,message:M?v?`Inicio de sesion exitoso en el perfil "${v}". Selecciona ahora el modelo para este perfil.`:"Inicio de sesion exitoso. Selecciona ahora el modelo para este perfil.":"Inicio de sesión exitoso",shouldOpenModelPicker:M}}
1
+ import{resetCostState as e}from"../../bootstrap/state.js";import{clearTrustedDeviceToken as o,enrollTrustedDevice as r}from"../../bridge/trustedDevice.js";import{refreshGrowthBookAfterAuthChange as t}from"../../services/analytics/growthbook.js";import{refreshPolicyLimits as s}from"../../services/policyLimits/index.js";import{refreshRemoteManagedSettings as i}from"../../services/remoteManagedSettings/index.js";import{stripSignatureBlocks as n}from"../../utils/messages.js";import{checkAndDisableAutoModeIfNeeded as a,checkAndDisableBypassPermissionsIfNeeded as p,resetAutoModeGateCheck as l,resetBypassPermissionsCheck as c}from"../../utils/permissions/bypassPermissionsKillswitch.js";import{switchProviderPreference as m}from"../../utils/model/providerSwitch.js";import{resetUserCache as d}from"../../utils/user.js";export function isCoreAuthEnabled(){return"0"!==process.env.CORE_AUTH_ENABLED}export function parseLoginProfileName(e){const o=e?.trim()??"";if(!o)return;const r=o.split(/\s+/).filter(Boolean),t=r.findIndex(e=>"--profile"===e||"-p"===e);return-1!==t&&r[t+1]?r[t+1]:r.length>0&&!r[0].startsWith("-")?r[0]:void 0}function resolveProvider(e){return e&&"anthropic"!==e?e:"claude"}export function applySuccessfulLogin(f){const{context:u,profileName:v,previousModel:g,previousProvider:h,targetProvider:P,transcriptClassifierEnabled:x}=f;u.onChangeAPIKey(),u.setMessages(n);const S=m({currentModel:g,currentProvider:h,targetProvider:resolveProvider(P),targetProfileName:v});e(),i(),s(),d(),t(),o(),r(),c();const j=u.getAppState();p(j.toolPermissionContext,u.setAppState),x&&(l(),a(j.toolPermissionContext,u.setAppState,j.fastMode)),u.setAppState(e=>({...e,mainLoopModel:S,mainLoopModelForSession:S,authVersion:e.authVersion+1}));const M=!S;return{restoredModel:S,message:M?v?`Inicio de sesion exitoso en el perfil "${v}". Selecciona ahora el modelo para este perfil.`:"Inicio de sesion exitoso. Selecciona ahora el modelo para este perfil.":"Inicio de sesión exitoso",shouldOpenModelPicker:M}}
@@ -1 +1 @@
1
- export class CoreLlmClient{credentialProvider;constructor(e){this.credentialProvider=e}async chat(e){const t=await this.credentialProvider(e.provider,e.profileId),o=t.baseUrl||this.resolveBaseUrl(e.provider,e.profileId);return"claude"===e.provider||o.toLowerCase().includes("anthropic")?this.callAnthropic(e,t,o):this.callOpenAICompatible(e,t,o)}async callOpenAICompatible(e,t){const o=this.resolveBaseUrl(e.provider),s={"Content-Type":"application/json"};t.token&&(s.Authorization=`Bearer ${t.token}`);const a=await fetch(`${o}/chat/completions`,{method:"POST",headers:s,body:JSON.stringify({model:e.model,messages:e.messages,tools:e.tools,temperature:e.temperature??.2})});if(!a.ok){const e=await a.text();throw new Error(`LLM Error (${a.status}): ${e}`)}const n=await a.json();return{content:n.choices?.[0]?.message?.content??null,toolCalls:n.choices?.[0]?.message?.tool_calls?.map(e=>({id:e.id,name:e.function.name,arguments:e.function.arguments})),usage:{promptTokens:n.usage?.prompt_tokens??0,completionTokens:n.usage?.completion_tokens??0}}}async callAnthropic(e,t,o){const s={"Content-Type":"application/json","x-api-key":t.token||""};"claude"===e.provider&&(s["anthropic-version"]="2023-06-01");const a=e.messages.find(e=>"system"===e.role)?.content,n=e.messages.filter(e=>"system"!==e.role).map(e=>({role:"assistant"===e.role?"assistant":"user",content:e.content})),i={model:e.model,max_tokens:e.maxTokens??4096,messages:n,system:a,tools:e.tools?.map(e=>({name:e.name,description:e.description,input_schema:e.parameters})),temperature:e.temperature??.2},r=o.endsWith("/messages")?o:`${o.replace(/\/+$/,"")}/v1/messages`,p=await fetch(r,{method:"POST",headers:s,body:JSON.stringify(i)});if(!p.ok){const e=await p.text();throw new Error(`Anthropic Error (${p.status}): ${e}`)}const l=await p.json(),c=l.content.find(e=>"text"===e.type)?.text??null,m=l.content.filter(e=>"tool_use"===e.type).map(e=>({id:e.id,name:e.name,arguments:JSON.stringify(e.input)}));return{content:c,toolCalls:m.length>0?m:void 0,usage:{promptTokens:l.usage?.input_tokens??0,completionTokens:l.usage?.output_tokens??0}}}resolveBaseUrl(e,t){this.credentialProvider;const o={claude:"https://api.anthropic.com",openai:"https://api.openai.com/v1",openrouter:"https://openrouter.ai/api/v1",ollama:"http://localhost:11434/v1","gemini-api":"https://generativelanguage.googleapis.com/v1beta/openai",zai:"https://api.z.ai/api/coding/paas/v4",minimax:"https://api.minimax.chat/v1"};return o[e]||o.openai}}
1
+ export class CoreLlmClient{credentialProvider;constructor(e){this.credentialProvider=e}async chat(e){const t=await this.credentialProvider(e.provider,e.profileId),o=t.baseUrl||this.resolveBaseUrl(e.provider,e.profileId);return"claude"===e.provider||o.toLowerCase().includes("anthropic")?this.callAnthropic(e,t,o):this.callOpenAICompatible(e,t,o)}async callOpenAICompatible(e,t){const o=this.resolveBaseUrl(e.provider),s={"Content-Type":"application/json"};t.token&&(s.Authorization=`Bearer ${t.token}`);const a=await fetch(`${o}/chat/completions`,{method:"POST",headers:s,body:JSON.stringify({model:e.model,messages:e.messages,tools:e.tools,temperature:e.temperature??.2})});if(!a.ok){const e=await a.text();throw new Error(`LLM Error (${a.status}): ${e}`)}const n=await a.json();return{content:n.choices?.[0]?.message?.content??null,toolCalls:n.choices?.[0]?.message?.tool_calls?.map(e=>({id:e.id,name:e.function.name,arguments:e.function.arguments})),usage:{promptTokens:n.usage?.prompt_tokens??0,completionTokens:n.usage?.completion_tokens??0}}}async callAnthropic(e,t,o){const s={"Content-Type":"application/json","x-api-key":t.token||""};"claude"===e.provider&&(s["anthropic-version"]="2023-06-01");const a=e.messages.find(e=>"system"===e.role)?.content,n=e.messages.filter(e=>"system"!==e.role).map(e=>({role:"assistant"===e.role?"assistant":"user",content:e.content})),i={model:e.model,max_tokens:e.maxTokens??4096,messages:n,system:a,tools:e.tools?.map(e=>({name:e.name,description:e.description,input_schema:e.parameters})),temperature:e.temperature??.2},r=o.endsWith("/messages")?o:`${o.replace(/\/+$/,"")}/v1/messages`,p=await fetch(r,{method:"POST",headers:s,body:JSON.stringify(i)});if(!p.ok){const e=await p.text();throw new Error(`Anthropic Error (${p.status}): ${e}`)}const l=await p.json(),c=l.content.find(e=>"text"===e.type)?.text??null,m=l.content.filter(e=>"tool_use"===e.type).map(e=>({id:e.id,name:e.name,arguments:JSON.stringify(e.input)}));return{content:c,toolCalls:m.length>0?m:void 0,usage:{promptTokens:l.usage?.input_tokens??0,completionTokens:l.usage?.output_tokens??0}}}resolveBaseUrl(e,t){this.credentialProvider;const o={claude:"https://api.anthropic.com",openai:"https://api.openai.com/v1",openrouter:"https://openrouter.ai/api/v1",ollama:"http://localhost:11434/v1",lmstudio:"http://localhost:1234/v1","gemini-api":"https://generativelanguage.googleapis.com/v1beta/openai",zai:"https://api.z.ai/api/coding/paas/v4",minimax:"https://api.minimax.chat/v1"};return o[e]||o.openai}}
@@ -1 +1 @@
1
- export const PROVIDER_COMPATIBILITY_SAMPLES={claude:{accepts:["claude-sonnet-4-5"],rejects:["gpt-4o"]},openai:{accepts:["gpt-4.1","o3","codex-mini-latest"],rejects:["claude-sonnet-4-5"]},"gemini-api":{accepts:["gemini-3.5-pro"],rejects:["gpt-4o"]},"gemini-google":{accepts:["gemini-3.5-flash"],rejects:["claude-sonnet-4-5"]},openrouter:{accepts:["anthropic/claude-sonnet-4"],rejects:[]},ollama:{accepts:["llama3.1:8b"],rejects:[]},"ollama-cloud":{accepts:["llama3.3:70b-instruct-q8_0"],rejects:[]},zai:{accepts:["glm-4.5"],rejects:[]},minimax:{accepts:["MiniMax-M2.7"],rejects:[]},nvidia:{accepts:["meta/llama-3.1-70b-instruct"],rejects:[]},deepseek:{accepts:["deepseek-chat","deepseek-reasoner"],rejects:["gpt-4o"]}};export function validateProviderModelCompatibility(e,t){const a=(t??"").trim();if(!a)return{provider:e,model:"",compatible:!1,reason:"empty-model"};const i=a.toLowerCase();if("claude"===e)return{provider:e,model:a,compatible:i.startsWith("claude-"),reason:"claude-prefix"};if("openai"===e){return{provider:e,model:a,compatible:i.startsWith("gpt-")||i.startsWith("o1")||i.startsWith("o3")||i.startsWith("o4")||i.startsWith("codex-"),reason:"openai-family"}}return"gemini-api"===e||"gemini-google"===e?{provider:e,model:a,compatible:i.startsWith("gemini-"),reason:"gemini-prefix"}:"deepseek"===e?{provider:e,model:a,compatible:i.startsWith("deepseek-"),reason:"deepseek-prefix"}:{provider:e,model:a,compatible:!0,reason:"dynamic-catalog"}}
1
+ export const PROVIDER_COMPATIBILITY_SAMPLES={claude:{accepts:["claude-sonnet-4-5"],rejects:["gpt-4o"]},openai:{accepts:["gpt-4.1","o3","codex-mini-latest"],rejects:["claude-sonnet-4-5"]},"gemini-api":{accepts:["gemini-3.5-pro"],rejects:["gpt-4o"]},"gemini-google":{accepts:["gemini-3.5-flash"],rejects:["claude-sonnet-4-5"]},openrouter:{accepts:["anthropic/claude-sonnet-4"],rejects:[]},ollama:{accepts:["llama3.1:8b"],rejects:[]},"ollama-cloud":{accepts:["llama3.3:70b-instruct-q8_0"],rejects:[]},lmstudio:{accepts:["*"],rejects:[]},zai:{accepts:["glm-4.5"],rejects:[]},minimax:{accepts:["MiniMax-M2.7"],rejects:[]},nvidia:{accepts:["meta/llama-3.1-70b-instruct"],rejects:[]},deepseek:{accepts:["deepseek-chat","deepseek-reasoner"],rejects:["gpt-4o"]}};export function validateProviderModelCompatibility(e,t){const a=(t??"").trim();if(!a)return{provider:e,model:"",compatible:!1,reason:"empty-model"};const i=a.toLowerCase();if("claude"===e)return{provider:e,model:a,compatible:i.startsWith("claude-"),reason:"claude-prefix"};if("openai"===e){return{provider:e,model:a,compatible:i.startsWith("gpt-")||i.startsWith("o1")||i.startsWith("o3")||i.startsWith("o4")||i.startsWith("codex-"),reason:"openai-family"}}return"gemini-api"===e||"gemini-google"===e?{provider:e,model:a,compatible:i.startsWith("gemini-"),reason:"gemini-prefix"}:"deepseek"===e?{provider:e,model:a,compatible:i.startsWith("deepseek-"),reason:"deepseek-prefix"}:{provider:e,model:a,compatible:!0,reason:"dynamic-catalog"}}