cursor-local-remote 0.1.11 → 0.1.13

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 (117) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-build-manifest.json +63 -42
  3. package/.next/app-path-routes-manifest.json +8 -5
  4. package/.next/build-manifest.json +5 -5
  5. package/.next/prerender-manifest.json +22 -22
  6. package/.next/react-loadable-manifest.json +18 -0
  7. package/.next/server/app/_not-found/page.js +2 -2
  8. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  9. package/.next/server/app/_not-found.html +2 -2
  10. package/.next/server/app/_not-found.rsc +2 -2
  11. package/.next/server/app/api/chat/route.js +1 -1
  12. package/.next/server/app/api/chat/route.js.nft.json +1 -1
  13. package/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
  14. package/.next/server/app/api/git/route.js +2 -2
  15. package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  16. package/.next/server/app/api/info/route.js +1 -1
  17. package/.next/server/app/api/info/route_client-reference-manifest.js +1 -1
  18. package/.next/server/app/api/models/route.js +2 -2
  19. package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
  20. package/.next/server/app/api/notifications/test/route.js +1 -1
  21. package/.next/server/app/api/notifications/test/route.js.nft.json +1 -1
  22. package/.next/server/app/api/notifications/test/route_client-reference-manifest.js +1 -1
  23. package/.next/server/app/api/projects/route.js +2 -2
  24. package/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  25. package/.next/server/app/api/sessions/active/route_client-reference-manifest.js +1 -1
  26. package/.next/server/app/api/sessions/history/route.js +1 -1
  27. package/.next/server/app/api/sessions/history/route_client-reference-manifest.js +1 -1
  28. package/.next/server/app/api/sessions/route.js +2 -2
  29. package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
  30. package/.next/server/app/api/sessions/watch/route.js +2 -2
  31. package/.next/server/app/api/sessions/watch/route_client-reference-manifest.js +1 -1
  32. package/.next/server/app/api/settings/route.js +2 -2
  33. package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
  34. package/.next/server/app/api/terminal/input/route.js +3 -0
  35. package/.next/server/app/api/terminal/input/route.js.nft.json +1 -0
  36. package/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -0
  37. package/.next/server/app/api/terminal/route.js +3 -0
  38. package/.next/server/app/api/terminal/route.js.nft.json +1 -0
  39. package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -0
  40. package/.next/server/app/api/terminal/stream/route.js +6 -0
  41. package/.next/server/app/api/terminal/stream/route.js.nft.json +1 -0
  42. package/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -0
  43. package/.next/server/app/api/upload/route.js +1 -1
  44. package/.next/server/app/api/upload/route_client-reference-manifest.js +1 -1
  45. package/.next/server/app/index.html +2 -2
  46. package/.next/server/app/index.rsc +5 -5
  47. package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
  48. package/.next/server/app/page.js +3 -3
  49. package/.next/server/app/page.js.nft.json +1 -1
  50. package/.next/server/app/page_client-reference-manifest.js +1 -1
  51. package/.next/server/app-paths-manifest.json +8 -5
  52. package/.next/server/chunks/184.js +18 -0
  53. package/.next/server/chunks/267.js +6 -6
  54. package/.next/server/chunks/565.js +1 -0
  55. package/.next/server/chunks/61.js +18 -0
  56. package/.next/server/chunks/611.js +1 -1
  57. package/.next/server/chunks/781.js +1 -0
  58. package/.next/server/chunks/957.js +1 -0
  59. package/.next/server/instrumentation.js +1 -1
  60. package/.next/server/instrumentation.js.nft.json +1 -1
  61. package/.next/server/middleware-build-manifest.js +1 -1
  62. package/.next/server/middleware-manifest.json +1 -1
  63. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  64. package/.next/server/pages/404.html +2 -2
  65. package/.next/server/pages/500.html +1 -1
  66. package/.next/server/pages/_document.js +1 -1
  67. package/.next/server/pages/_error.js +2 -2
  68. package/.next/static/XMu8K85CP5u5_cZgrtqTv/_buildManifest.js +1 -0
  69. package/.next/static/chunks/581.6f70e48cd8cd239c.js +1 -0
  70. package/.next/static/chunks/687-b390283af2e3452f.js +1 -0
  71. package/.next/static/chunks/877.c9578aaf7d3c8f27.js +1 -0
  72. package/.next/static/chunks/app/api/chat/route-d3038ca0da9c5380.js +1 -0
  73. package/.next/static/chunks/app/api/git/route-d3038ca0da9c5380.js +1 -0
  74. package/.next/static/chunks/app/api/info/route-d3038ca0da9c5380.js +1 -0
  75. package/.next/static/chunks/app/api/models/route-d3038ca0da9c5380.js +1 -0
  76. package/.next/static/chunks/app/api/notifications/test/route-d3038ca0da9c5380.js +1 -0
  77. package/.next/static/chunks/app/api/projects/route-d3038ca0da9c5380.js +1 -0
  78. package/.next/static/chunks/app/api/sessions/active/route-d3038ca0da9c5380.js +1 -0
  79. package/.next/static/chunks/app/api/sessions/history/route-d3038ca0da9c5380.js +1 -0
  80. package/.next/static/chunks/app/api/sessions/route-d3038ca0da9c5380.js +1 -0
  81. package/.next/static/chunks/app/api/sessions/watch/route-d3038ca0da9c5380.js +1 -0
  82. package/.next/static/chunks/app/api/settings/route-d3038ca0da9c5380.js +1 -0
  83. package/.next/static/chunks/app/api/terminal/input/route-d3038ca0da9c5380.js +1 -0
  84. package/.next/static/chunks/app/api/terminal/route-d3038ca0da9c5380.js +1 -0
  85. package/.next/static/chunks/app/api/terminal/stream/route-d3038ca0da9c5380.js +1 -0
  86. package/.next/static/chunks/app/api/upload/route-d3038ca0da9c5380.js +1 -0
  87. package/.next/static/chunks/app/manifest.webmanifest/route-d3038ca0da9c5380.js +1 -0
  88. package/.next/static/chunks/app/page-15e319bd13e0cc7c.js +1 -0
  89. package/.next/static/chunks/e868780c.80b1d92b07cbfce1.js +18 -0
  90. package/.next/static/chunks/webpack-b7a7ce1923e86513.js +1 -0
  91. package/.next/static/css/30da1f7eab9bf366.css +11 -0
  92. package/.next/static/css/4e3b3a779665aaeb.css +1 -0
  93. package/README.md +20 -0
  94. package/bin/cursor-remote.mjs +143 -14
  95. package/package.json +4 -1
  96. package/.next/server/chunks/545.js +0 -18
  97. package/.next/server/chunks/819.js +0 -1
  98. package/.next/static/JHNi3dquD5OcV7Sclue9U/_buildManifest.js +0 -1
  99. package/.next/static/chunks/391-727d95bcfba987c2.js +0 -1
  100. package/.next/static/chunks/app/api/chat/route-b00b337e85e306b9.js +0 -1
  101. package/.next/static/chunks/app/api/git/route-b00b337e85e306b9.js +0 -1
  102. package/.next/static/chunks/app/api/info/route-b00b337e85e306b9.js +0 -1
  103. package/.next/static/chunks/app/api/models/route-b00b337e85e306b9.js +0 -1
  104. package/.next/static/chunks/app/api/notifications/test/route-b00b337e85e306b9.js +0 -1
  105. package/.next/static/chunks/app/api/projects/route-b00b337e85e306b9.js +0 -1
  106. package/.next/static/chunks/app/api/sessions/active/route-b00b337e85e306b9.js +0 -1
  107. package/.next/static/chunks/app/api/sessions/history/route-b00b337e85e306b9.js +0 -1
  108. package/.next/static/chunks/app/api/sessions/route-b00b337e85e306b9.js +0 -1
  109. package/.next/static/chunks/app/api/sessions/watch/route-b00b337e85e306b9.js +0 -1
  110. package/.next/static/chunks/app/api/settings/route-b00b337e85e306b9.js +0 -1
  111. package/.next/static/chunks/app/api/upload/route-b00b337e85e306b9.js +0 -1
  112. package/.next/static/chunks/app/manifest.webmanifest/route-b00b337e85e306b9.js +0 -1
  113. package/.next/static/chunks/app/page-bdc004bf68daf19c.js +0 -1
  114. package/.next/static/chunks/webpack-d434b6449a9cd8f3.js +0 -1
  115. package/.next/static/css/5eacd01f773eed7f.css +0 -11
  116. package/.next/static/css/62c80997800f1b21.css +0 -1
  117. /package/.next/static/{JHNi3dquD5OcV7Sclue9U → XMu8K85CP5u5_cZgrtqTv}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ (()=>{"use strict";var e={},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}},i=!0;try{e[o].call(a.exports,a,a.exports,r),i=!1}finally{i&&delete t[o]}return a.exports}r.m=e,(()=>{var e=[];r.O=(t,o,n,a)=>{if(o){a=a||0;for(var i=e.length;i>0&&e[i-1][2]>a;i--)e[i]=e[i-1];e[i]=[o,n,a];return}for(var u=1/0,i=0;i<e.length;i++){for(var[o,n,a]=e[i],c=!0,l=0;l<o.length;l++)(!1&a||u>=a)&&Object.keys(r.O).every(e=>r.O[e](o[l]))?o.splice(l--,1):(c=!1,a<u&&(u=a));if(c){e.splice(i--,1);var s=n();void 0!==s&&(t=s)}}return t}})(),(()=>{var e,t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__;r.t=function(o,n){if(1&n&&(o=this(o)),8&n||"object"==typeof o&&o&&(4&n&&o.__esModule||16&n&&"function"==typeof o.then))return o;var a=Object.create(null);r.r(a);var i={};e=e||[null,t({}),t([]),t(t)];for(var u=2&n&&o;"object"==typeof u&&!~e.indexOf(u);u=t(u))Object.getOwnPropertyNames(u).forEach(e=>i[e]=()=>o[e]);return i.default=()=>o,r.d(a,i),a}})(),r.d=(e,t)=>{for(var o in t)r.o(t,o)&&!r.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:t[o]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce((t,o)=>(r.f[o](e,t),t),[])),r.u=e=>"static/chunks/"+(888===e?"e868780c":e)+"."+({561:"0dd3adbeaf3ef161",581:"6f70e48cd8cd239c",877:"c9578aaf7d3c8f27",888:"80b1d92b07cbfce1"})[e]+".js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e={},t="_N_E:";r.l=(o,n,a,i)=>{if(e[o])return void e[o].push(n);if(void 0!==a)for(var u,c,l=document.getElementsByTagName("script"),s=0;s<l.length;s++){var d=l[s];if(d.getAttribute("src")==o||d.getAttribute("data-webpack")==t+a){u=d;break}}u||(c=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,r.nc&&u.setAttribute("nonce",r.nc),u.setAttribute("data-webpack",t+a),u.src=r.tu(o)),e[o]=[n];var f=(t,r)=>{u.onerror=u.onload=null,clearTimeout(p);var n=e[o];if(delete e[o],u.parentNode&&u.parentNode.removeChild(u),n&&n.forEach(e=>e(r)),t)return t(r)},p=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),c&&document.head.appendChild(u)}})(),r.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;r.tt=()=>(void 0===e&&(e={createScriptURL:e=>e},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(e=trustedTypes.createPolicy("nextjs#bundler",e))),e)})(),r.tu=e=>r.tt().createScriptURL(e),r.p="/_next/",(()=>{var e={68:0,978:0,32:0};r.f.j=(t,o)=>{var n=r.o(e,t)?e[t]:void 0;if(0!==n)if(n)o.push(n[2]);else if(/^(32|68|978)$/.test(t))e[t]=0;else{var a=new Promise((r,o)=>n=e[t]=[r,o]);o.push(n[2]=a);var i=r.p+r.u(t),u=Error();r.l(i,o=>{if(r.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=o&&("load"===o.type?"missing":o.type),i=o&&o.target&&o.target.src;u.message="Loading chunk "+t+" failed.\n("+a+": "+i+")",u.name="ChunkLoadError",u.type=a,u.request=i,n[1](u)}},"chunk-"+t,t)}},r.O.j=t=>0===e[t];var t=(t,o)=>{var n,a,[i,u,c]=o,l=0;if(i.some(t=>0!==e[t])){for(n in u)r.o(u,n)&&(r.m[n]=u[n]);if(c)var s=c(r)}for(t&&t(o);l<i.length;l++)a=i[l],r.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return r.O(s)},o=self.webpackChunk_N_E=self.webpackChunk_N_E||[];o.forEach(t.bind(null,0)),o.push=t.bind(null,o.push.bind(o))})()})();
@@ -0,0 +1,11 @@
1
+ pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}
2
+ /*!
3
+ Theme: GitHub Dark
4
+ Description: Dark theme as seen on github.com
5
+ Author: github.com
6
+ Maintainer: @Hirse
7
+ Updated: 2021-05-15
8
+
9
+ Outdated base version: https://github.com/primer/github-syntax-dark
10
+ Current colors taken from GitHub's CSS
11
+ */.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}.xterm{cursor:text;position:relative;user-select:none;-ms-user-select:none;-webkit-user-select:none}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{position:absolute;top:0;z-index:5}.xterm .xterm-helper-textarea{padding:0;border:0;margin:0;position:absolute;opacity:0;left:-9999em;top:0;width:0;height:0;z-index:-5;white-space:nowrap;overflow:hidden;resize:none}.xterm .composition-view{background:#000;color:#FFF;display:none;position:absolute;white-space:nowrap;z-index:1}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{background-color:#000;overflow-y:scroll;cursor:default;position:absolute;right:0;left:0;top:0;bottom:0}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;left:0;top:0}.xterm-char-measure-element{display:inline-block;visibility:hidden;position:absolute;top:0;left:-9999em;line-height:normal}.xterm.enable-mouse-events{cursor:default}.xterm .xterm-cursor-pointer,.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{position:absolute;left:0;top:0;bottom:0;right:0;z-index:10;color:transparent;pointer-events:none}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:transparent}.xterm .xterm-accessibility-tree{font-family:monospace;user-select:text;white-space:pre}.xterm .xterm-accessibility-tree>div{transform-origin:left;width:fit-content}.xterm .live-region{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{text-decoration:double underline}.xterm-underline-3{text-decoration:wavy underline}.xterm-underline-4{text-decoration:dotted underline}.xterm-underline-5{text-decoration:dashed underline}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:overline underline}.xterm-overline.xterm-underline-2{text-decoration:overline double underline}.xterm-overline.xterm-underline-3{text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;position:absolute;top:0;right:0;pointer-events:none}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;background:rgba(0,0,0,0);transition:opacity .1s linear;z-index:11}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{position:absolute;display:none}.xterm .xterm-scrollable-element>.shadow.top{display:block;top:0;left:3px;height:3px;width:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.left{display:block;top:3px;left:0;height:100%;width:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}.xterm .xterm-scrollable-element>.shadow.top-left-corner{display:block;top:0;left:0;height:3px;width:3px}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-duration:initial}}}@layer theme{:host,:root{--font-sans:"Inter",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;--font-mono:"SF Mono","Fira Code","Fira Mono",Menlo,Consolas,monospace;--color-red-400:oklch(70.4% .191 22.216);--color-green-400:oklch(79.2% .209 151.711);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-3xl:48rem;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-bg:#000;--color-bg-elevated:#0a0a0a;--color-bg-surface:#111;--color-bg-hover:#1a1a1a;--color-bg-active:#222;--color-border:#1e1e1e;--color-text:#e8e8e8;--color-text-secondary:#999;--color-text-muted:#555;--color-accent:#e8e8e8;--color-success:#3dd68c;--color-warning:#f5a623;--color-error:#ef4444}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1{top:calc(var(--spacing) * 1)}.top-2{top:calc(var(--spacing) * 2)}.top-\[2px\]{top:2px}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-3{right:calc(var(--spacing) * 3)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-full{bottom:100%}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[100\]{z-index:100}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3{margin-inline:calc(var(--spacing) * 3)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.-mt-1\.5{margin-top:calc(var(--spacing) * -1.5)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-px{margin-bottom:1px}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-5{margin-left:calc(var(--spacing) * 5)}.ml-auto{margin-left:auto}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.table{display:table}.h-0{height:calc(var(--spacing) * 0)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-11{height:calc(var(--spacing) * 11)}.h-14{height:calc(var(--spacing) * 14)}.h-\[14px\]{height:14px}.h-\[18px\]{height:18px}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.max-h-60{max-height:calc(var(--spacing) * 60)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[280px\]{max-height:280px}.max-h-\[300px\]{max-height:300px}.w-0{width:calc(var(--spacing) * 0)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-8{width:calc(var(--spacing) * 8)}.w-14{width:calc(var(--spacing) * 14)}.w-56{width:calc(var(--spacing) * 56)}.w-\[14px\]{width:14px}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[80px\]{max-width:80px}.max-w-\[120px\]{max-width:120px}.max-w-\[150px\]{max-width:150px}.max-w-\[240px\]{max-width:240px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1)}.-translate-x-1\/2,.-translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%}.translate-x-0{--tw-translate-x:calc(var(--spacing) * 0)}.translate-x-0,.translate-x-\[2px\]{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-\[2px\]{--tw-translate-x:2px}.translate-x-\[16px\]{--tw-translate-x:16px}.translate-x-\[16px\],.translate-x-full{translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-full{--tw-translate-x:100%}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border\/50>:not(:last-child)){border-color:#1e1e1e80}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/50>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 50%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e+38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-x-\[5px\]{border-inline-style:var(--tw-border-style);border-inline-width:5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-t-\[5px\]{border-top-style:var(--tw-border-style);border-top-width:5px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[\#2a2a2a\]{border-color:#2a2a2a}.border-accent\/60{border-color:#e8e8e899}@supports (color:color-mix(in lab,red,red)){.border-accent\/60{border-color:color-mix(in oklab,var(--color-accent) 60%,transparent)}}.border-border{border-color:var(--color-border)}.border-border\/50{border-color:#1e1e1e80}@supports (color:color-mix(in lab,red,red)){.border-border\/50{border-color:color-mix(in oklab,var(--color-border) 50%,transparent)}}.border-error\/20{border-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.border-error\/20{border-color:color-mix(in oklab,var(--color-error) 20%,transparent)}}.border-success{border-color:var(--color-success)}.border-success\/20{border-color:#3dd68c33}@supports (color:color-mix(in lab,red,red)){.border-success\/20{border-color:color-mix(in oklab,var(--color-success) 20%,transparent)}}.border-text-muted{border-color:var(--color-text-muted)}.border-text-muted\/25{border-color:#55555540}@supports (color:color-mix(in lab,red,red)){.border-text-muted\/25{border-color:color-mix(in oklab,var(--color-text-muted) 25%,transparent)}}.border-x-transparent{border-inline-color:#0000}.border-t-border{border-top-color:var(--color-border)}.border-t-transparent{border-top-color:#0000}.bg-\[\#0a0a0b\]{background-color:#0a0a0b}.bg-\[\#0d0d0d\]{background-color:#0d0d0d}.bg-\[\#1c1c1c\]{background-color:#1c1c1c}.bg-accent\/5{background-color:#e8e8e80d}@supports (color:color-mix(in lab,red,red)){.bg-accent\/5{background-color:color-mix(in oklab,var(--color-accent) 5%,transparent)}}.bg-bg{background-color:var(--color-bg)}.bg-bg-active{background-color:var(--color-bg-active)}.bg-bg-elevated{background-color:var(--color-bg-elevated)}.bg-bg-hover{background-color:var(--color-bg-hover)}.bg-bg-hover\/50{background-color:#1a1a1a80}@supports (color:color-mix(in lab,red,red)){.bg-bg-hover\/50{background-color:color-mix(in oklab,var(--color-bg-hover) 50%,transparent)}}.bg-bg-surface{background-color:var(--color-bg-surface)}.bg-bg-surface\/50{background-color:#11111180}@supports (color:color-mix(in lab,red,red)){.bg-bg-surface\/50{background-color:color-mix(in oklab,var(--color-bg-surface) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab,red,red)){.bg-black\/80{background-color:color-mix(in oklab,var(--color-black) 80%,transparent)}}.bg-border{background-color:var(--color-border)}.bg-error\/5{background-color:#ef44440d}@supports (color:color-mix(in lab,red,red)){.bg-error\/5{background-color:color-mix(in oklab,var(--color-error) 5%,transparent)}}.bg-error\/8{background-color:#ef444414}@supports (color:color-mix(in lab,red,red)){.bg-error\/8{background-color:color-mix(in oklab,var(--color-error) 8%,transparent)}}.bg-error\/10{background-color:#ef44441a}@supports (color:color-mix(in lab,red,red)){.bg-error\/10{background-color:color-mix(in oklab,var(--color-error) 10%,transparent)}}.bg-error\/15{background-color:#ef444426}@supports (color:color-mix(in lab,red,red)){.bg-error\/15{background-color:color-mix(in oklab,var(--color-error) 15%,transparent)}}.bg-error\/60{background-color:#ef444499}@supports (color:color-mix(in lab,red,red)){.bg-error\/60{background-color:color-mix(in oklab,var(--color-error) 60%,transparent)}}.bg-success{background-color:var(--color-success)}.bg-success\/5{background-color:#3dd68c0d}@supports (color:color-mix(in lab,red,red)){.bg-success\/5{background-color:color-mix(in oklab,var(--color-success) 5%,transparent)}}.bg-success\/8{background-color:#3dd68c14}@supports (color:color-mix(in lab,red,red)){.bg-success\/8{background-color:color-mix(in oklab,var(--color-success) 8%,transparent)}}.bg-success\/15{background-color:#3dd68c26}@supports (color:color-mix(in lab,red,red)){.bg-success\/15{background-color:color-mix(in oklab,var(--color-success) 15%,transparent)}}.bg-text-muted\/30{background-color:#5555554d}@supports (color:color-mix(in lab,red,red)){.bg-text-muted\/30{background-color:color-mix(in oklab,var(--color-text-muted) 30%,transparent)}}.bg-text-muted\/40{background-color:#5556}@supports (color:color-mix(in lab,red,red)){.bg-text-muted\/40{background-color:color-mix(in oklab,var(--color-text-muted) 40%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.object-cover{object-fit:cover}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-6{padding:calc(var(--spacing) * 6)}.px-0\.5{padding-inline:calc(var(--spacing) * .5)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-px{padding-block:1px}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-10{padding-right:calc(var(--spacing) * 10)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.leading-\[1\.6\]{--tw-leading:1.6;line-height:1.6}.leading-\[1\.7\]{--tw-leading:1.7;line-height:1.7}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.text-ellipsis{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#888\]{color:#888}.text-\[\#c9d1d9\]{color:#c9d1d9}.text-\[\#d4d4d4\]{color:#d4d4d4}.text-\[\#e8e8e8\]{color:#e8e8e8}.text-accent{color:var(--color-accent)}.text-error{color:var(--color-error)}.text-error\/50{color:#ef444480}@supports (color:color-mix(in lab,red,red)){.text-error\/50{color:color-mix(in oklab,var(--color-error) 50%,transparent)}}.text-error\/60{color:#ef444499}@supports (color:color-mix(in lab,red,red)){.text-error\/60{color:color-mix(in oklab,var(--color-error) 60%,transparent)}}.text-green-400\/70{color:#05df72b3}@supports (color:color-mix(in lab,red,red)){.text-green-400\/70{color:color-mix(in oklab,var(--color-green-400) 70%,transparent)}}.text-red-400\/70{color:#ff6568b3}@supports (color:color-mix(in lab,red,red)){.text-red-400\/70{color:color-mix(in oklab,var(--color-red-400) 70%,transparent)}}.text-success{color:var(--color-success)}.text-text{color:var(--color-text)}.text-text-muted{color:var(--color-text-muted)}.text-text-muted\/30{color:#5555554d}@supports (color:color-mix(in lab,red,red)){.text-text-muted\/30{color:color-mix(in oklab,var(--color-text-muted) 30%,transparent)}}.text-text-muted\/40{color:#5556}@supports (color:color-mix(in lab,red,red)){.text-text-muted\/40{color:color-mix(in oklab,var(--color-text-muted) 40%,transparent)}}.text-text-muted\/50{color:#55555580}@supports (color:color-mix(in lab,red,red)){.text-text-muted\/50{color:color-mix(in oklab,var(--color-text-muted) 50%,transparent)}}.text-text-muted\/60{color:#5559}@supports (color:color-mix(in lab,red,red)){.text-text-muted\/60{color:color-mix(in oklab,var(--color-text-muted) 60%,transparent)}}.text-text-secondary{color:var(--color-text-secondary)}.text-warning{color:var(--color-warning)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.decoration-text-muted\/40{text-decoration-color:#5556}@supports (color:color-mix(in lab,red,red)){.decoration-text-muted\/40{-webkit-text-decoration-color:color-mix(in oklab,var(--color-text-muted) 40%,transparent);text-decoration-color:color-mix(in oklab,var(--color-text-muted) 40%,transparent)}}.underline-offset-2{text-underline-offset:2px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:text-text:is(:where(.group):hover *){color:var(--color-text)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-text-muted::placeholder{color:var(--color-text-muted)}.placeholder\:text-text-muted\/50::placeholder{color:#55555580}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-text-muted\/50::placeholder{color:color-mix(in oklab,var(--color-text-muted) 50%,transparent)}}.focus-within\:border-text-muted\/40:focus-within{border-color:#5556}@supports (color:color-mix(in lab,red,red)){.focus-within\:border-text-muted\/40:focus-within{border-color:color-mix(in oklab,var(--color-text-muted) 40%,transparent)}}@media (hover:hover){.hover\:bg-\[\#252525\]:hover{background-color:#252525}.hover\:bg-bg-active:hover{background-color:var(--color-bg-active)}.hover\:bg-bg-hover:hover{background-color:var(--color-bg-hover)}.hover\:bg-bg-surface:hover{background-color:var(--color-bg-surface)}.hover\:bg-error\/5:hover{background-color:#ef44440d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/5:hover{background-color:color-mix(in oklab,var(--color-error) 5%,transparent)}}.hover\:bg-error\/10:hover{background-color:#ef44441a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/10:hover{background-color:color-mix(in oklab,var(--color-error) 10%,transparent)}}.hover\:bg-error\/25:hover{background-color:#ef444440}@supports (color:color-mix(in lab,red,red)){.hover\:bg-error\/25:hover{background-color:color-mix(in oklab,var(--color-error) 25%,transparent)}}.hover\:text-error:hover{color:var(--color-error)}.hover\:text-error\/80:hover{color:#ef4444cc}@supports (color:color-mix(in lab,red,red)){.hover\:text-error\/80:hover{color:color-mix(in oklab,var(--color-error) 80%,transparent)}}.hover\:text-text:hover{color:var(--color-text)}.hover\:text-text-muted:hover{color:var(--color-text-muted)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\:decoration-accent:hover{-webkit-text-decoration-color:var(--color-accent);text-decoration-color:var(--color-accent)}.hover\:opacity-100:hover{opacity:1}}.focus\:border-text-muted:focus{border-color:var(--color-text-muted)}.focus\:border-text-muted\/40:focus{border-color:#5556}@supports (color:color-mix(in lab,red,red)){.focus\:border-text-muted\/40:focus{border-color:color-mix(in oklab,var(--color-text-muted) 40%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:opacity-100:active{opacity:1}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-20:disabled{opacity:.2}.disabled\:opacity-40:disabled{opacity:.4}@media (min-width:40rem){.sm\:inset-auto{inset:auto}.sm\:top-0{top:calc(var(--spacing) * 0)}.sm\:right-0{right:calc(var(--spacing) * 0)}.sm\:left-0{left:calc(var(--spacing) * 0)}.sm\:inline{display:inline}.sm\:h-full{height:100%}.sm\:w-\[280px\]{width:280px}.sm\:w-\[300px\]{width:300px}.sm\:w-\[380px\]{width:380px}.sm\:max-w-\[150px\]{max-width:150px}.sm\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.sm\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.sm\:border-border{border-color:var(--color-border)}}}html{color-scheme:dark}body{background:var(--color-bg);color:var(--color-text);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:2px}.safe-bottom{padding-bottom:max(12px,env(safe-area-inset-bottom))}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(1turn)}}@keyframes pulse{50%{opacity:.5}}
package/README.md CHANGED
@@ -31,6 +31,16 @@ clr
31
31
 
32
32
  A QR code pops up in your terminal — scan it from your phone and you're connected.
33
33
 
34
+ ## Updating
35
+
36
+ ```bash
37
+ clr --update
38
+ ```
39
+
40
+ Or the same command as install: `npm install -g cursor-local-remote`
41
+
42
+ I'm actively using this myself on a daily basis, so bugs get noticed and fixed quickly.
43
+
34
44
  ## Features
35
45
 
36
46
  - **QR connect** — scan to connect your phone instantly and continue with phone coding session
@@ -82,15 +92,25 @@ clr [workspace] [options]
82
92
  | --- | --- |
83
93
  | `workspace` | Path to your project folder (defaults to cwd) |
84
94
  | `-p, --port` | Port to run on (default: `3100`) |
95
+ | `-t, --token` | Set auth token (otherwise random or `AUTH_TOKEN` env) |
96
+ | `--host` | Bind to specific host/IP (default: `0.0.0.0`) |
85
97
  | `--no-open` | Don't auto-open the browser |
86
98
  | `--no-qr` | Don't show QR code in terminal |
87
99
  | `--no-trust` | Disable workspace trust (agent will ask before actions) |
88
100
  | `-v, --verbose` | Show all server and agent output |
101
+ | `-l, --list` | List discovered Cursor projects |
102
+ | `--status` | Check if CLR is already running |
103
+ | `-u, --update` | Update to the latest version |
104
+ | `-V, --version` | Show version number |
89
105
 
90
106
  ```bash
91
107
  clr # current folder
92
108
  clr ~/projects/my-app # specific project
93
109
  clr --port 8080 # different port
110
+ clr --token my-secret # fixed auth token
111
+ clr --host 127.0.0.1 # localhost only
112
+ clr --status # check for running instances
113
+ clr --list # show all known projects
94
114
  clr --no-open --no-qr # headless-friendly
95
115
  ```
96
116
 
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { spawn, execFileSync } from "child_process";
4
- import { resolve, dirname } from "path";
4
+ import { resolve, dirname, join, sep } from "path";
5
5
  import { fileURLToPath } from "url";
6
- import { networkInterfaces } from "os";
7
- import { existsSync } from "fs";
6
+ import { networkInterfaces, homedir } from "os";
7
+ import { existsSync, readFileSync, readdirSync, statSync } from "fs";
8
8
  import { randomInt } from "crypto";
9
9
  import { createServer } from "net";
10
+ import http from "http";
10
11
  import qrcode from "qrcode-terminal";
11
12
 
12
13
  const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -44,8 +45,118 @@ function generateToken() {
44
45
  return `${a}-${b}`;
45
46
  }
46
47
 
48
+ const MAX_STATUS_SCAN = 20;
49
+
50
+ function probeClr(port) {
51
+ return new Promise((resolve) => {
52
+ const req = http.get(`http://127.0.0.1:${port}/api/info`, { timeout: 800 }, (res) => {
53
+ let body = "";
54
+ res.on("data", (d) => (body += d));
55
+ res.on("end", () => {
56
+ try {
57
+ const data = JSON.parse(body);
58
+ resolve({ port, workspace: data.workspace || "unknown", url: `http://127.0.0.1:${port}` });
59
+ } catch {
60
+ resolve(null);
61
+ }
62
+ });
63
+ });
64
+ req.on("error", () => resolve(null));
65
+ req.on("timeout", () => { req.destroy(); resolve(null); });
66
+ });
67
+ }
68
+
69
+ function projectKeyToWorkspace(key) {
70
+ const parts = key.split("-");
71
+ let path = sep + parts[0];
72
+ for (let i = 1; i < parts.length; i++) {
73
+ const withSlash = path + sep + parts[i];
74
+ if (existsSync(withSlash) && statSync(withSlash).isDirectory()) {
75
+ path = withSlash;
76
+ } else {
77
+ path = path + "-" + parts[i];
78
+ }
79
+ }
80
+ return existsSync(path) ? path : null;
81
+ }
82
+
83
+ function discoverProjects() {
84
+ const cursorDir = join(homedir(), ".cursor", "projects");
85
+ const projects = [];
86
+ try {
87
+ const entries = readdirSync(cursorDir);
88
+ for (const entry of entries) {
89
+ if (!/^[A-Z]/.test(entry)) continue;
90
+ const transcripts = join(cursorDir, entry, "agent-transcripts");
91
+ if (!existsSync(transcripts)) continue;
92
+ const ws = projectKeyToWorkspace(entry);
93
+ if (!ws) continue;
94
+ const name = ws.split(sep).pop() || ws;
95
+ projects.push({ name, path: ws });
96
+ }
97
+ } catch {
98
+ // cursor projects dir doesn't exist
99
+ }
100
+ return projects.sort((a, b) => a.name.localeCompare(b.name));
101
+ }
102
+
47
103
  const args = process.argv.slice(2);
48
104
 
105
+ if (args.includes("--version") || args.includes("-V")) {
106
+ const pkg = JSON.parse(readFileSync(resolve(projectRoot, "package.json"), "utf8"));
107
+ console.log(pkg.version);
108
+ process.exit(0);
109
+ }
110
+
111
+ if (args.includes("--status")) {
112
+ const portStart = parseInt(process.env.PORT || "3100", 10);
113
+ const portEnd = portStart + MAX_STATUS_SCAN;
114
+ console.log(`\n Checking ports ${portStart}-${portEnd - 1} for running CLR instances...\n`);
115
+ let found = 0;
116
+ const checks = [];
117
+ for (let p = portStart; p < portEnd; p++) {
118
+ checks.push(probeClr(p));
119
+ }
120
+ const results = await Promise.all(checks);
121
+ for (const r of results) {
122
+ if (!r) continue;
123
+ found++;
124
+ console.log(` \x1b[32m●\x1b[0m Port ${r.port} \x1b[2m→\x1b[0m ${r.workspace}`);
125
+ console.log(` \x1b[2m${r.url}\x1b[0m`);
126
+ }
127
+ if (found === 0) {
128
+ console.log(" \x1b[2mNo running CLR instances found\x1b[0m");
129
+ }
130
+ console.log("");
131
+ process.exit(0);
132
+ }
133
+
134
+ if (args.includes("--list") || args.includes("-l")) {
135
+ const projects = discoverProjects();
136
+ if (projects.length === 0) {
137
+ console.log("\n \x1b[2mNo Cursor projects found\x1b[0m\n");
138
+ } else {
139
+ console.log(`\n Found ${projects.length} project${projects.length === 1 ? "" : "s"}:\n`);
140
+ for (const p of projects) {
141
+ console.log(` \x1b[2m•\x1b[0m ${p.name} \x1b[2m→\x1b[0m ${p.path}`);
142
+ }
143
+ console.log("");
144
+ }
145
+ process.exit(0);
146
+ }
147
+
148
+ if (args.includes("--update") || args.includes("-u")) {
149
+ console.log(" Updating cursor-local-remote...\n");
150
+ try {
151
+ execFileSync("npm", ["install", "-g", "cursor-local-remote@latest"], { stdio: "inherit" });
152
+ console.log("\n \x1b[32m✓ Updated successfully\x1b[0m");
153
+ } catch {
154
+ console.error("\n \x1b[31m✗ Update failed\x1b[0m");
155
+ process.exit(1);
156
+ }
157
+ process.exit(0);
158
+ }
159
+
49
160
  if (args.includes("--help") || args.includes("-h")) {
50
161
  console.log(`
51
162
  Cursor Local Remote - Control Cursor IDE from any device on your network
@@ -57,19 +168,30 @@ if (args.includes("--help") || args.includes("-h")) {
57
168
  workspace Path to your project folder (defaults to current directory)
58
169
 
59
170
  Options:
60
- -p, --port Port to run on (default: 3100)
61
- --no-open Don't auto-open the browser
62
- --no-qr Don't show QR code in terminal
63
- --no-trust Disable workspace trust (agent will ask before actions)
171
+ -p, --port Port to run on (default: 3100)
172
+ -t, --token Set auth token (otherwise random or AUTH_TOKEN env)
173
+ --host Bind to specific host/IP (default: 0.0.0.0)
174
+ --no-open Don't auto-open the browser
175
+ --no-qr Don't show QR code in terminal
176
+ --no-trust Disable workspace trust (agent will ask before actions)
64
177
  -v, --verbose Show all server and agent output
65
- -h, --help Show this help
178
+
179
+ Commands:
180
+ -l, --list List discovered Cursor projects
181
+ --status Check if CLR is already running
182
+ -u, --update Update to the latest version
183
+ -V, --version Show version number
184
+ -h, --help Show this help
66
185
 
67
186
  Examples:
68
187
  clr # Start in current folder
69
188
  clr ~/projects/my-app # Start for a specific project
70
189
  clr . --port 8080 # Use a different port
190
+ clr --token my-secret # Use a fixed auth token
191
+ clr --host 127.0.0.1 # Bind to localhost only
71
192
  clr --no-trust # Require agent to ask before actions
72
- clr -v # Verbose output for debugging
193
+ clr --status # Check for running instances
194
+ clr --list # Show all known projects
73
195
  `);
74
196
  process.exit(0);
75
197
  }
@@ -80,11 +202,17 @@ let noOpen = false;
80
202
  let noQr = false;
81
203
  let verbose = false;
82
204
  let trust = process.env.CURSOR_TRUST !== "0";
205
+ let customToken = null;
206
+ let hostname = "0.0.0.0";
83
207
 
84
208
  for (let i = 0; i < args.length; i++) {
85
209
  const a = args[i];
86
210
  if (a === "--port" || a === "-p") {
87
211
  rawPort = args[++i] || rawPort;
212
+ } else if (a === "--token" || a === "-t") {
213
+ customToken = args[++i] || null;
214
+ } else if (a === "--host") {
215
+ hostname = args[++i] || hostname;
88
216
  } else if (a === "--no-open") {
89
217
  noOpen = true;
90
218
  } else if (a === "--no-qr") {
@@ -118,7 +246,7 @@ function isPortAvailable(port) {
118
246
  return new Promise((resolve) => {
119
247
  const srv = createServer();
120
248
  srv.once("error", () => resolve(false));
121
- srv.listen(port, "0.0.0.0", () => {
249
+ srv.listen(port, hostname, () => {
122
250
  srv.close(() => resolve(true));
123
251
  });
124
252
  });
@@ -156,10 +284,11 @@ if (availablePort !== portNum) {
156
284
  const port = String(availablePort);
157
285
 
158
286
  const lanIp = getLanIp();
287
+ const isLocalOnly = hostname === "127.0.0.1" || hostname === "localhost";
159
288
  const localUrl = `http://localhost:${port}`;
160
- const networkUrl = lanIp ? `http://${lanIp}:${port}` : null;
289
+ const networkUrl = !isLocalOnly && lanIp ? `http://${lanIp}:${port}` : null;
161
290
 
162
- const authToken = process.env.AUTH_TOKEN || generateToken();
291
+ const authToken = customToken || process.env.AUTH_TOKEN || generateToken();
163
292
 
164
293
  const authUrl = `${localUrl}?token=${authToken}`;
165
294
 
@@ -214,8 +343,8 @@ const nextBin = resolve(projectRoot, "node_modules", ".bin", "next");
214
343
  const isBuilt = existsSync(resolve(projectRoot, ".next", "BUILD_ID"));
215
344
 
216
345
  const nextArgs = isBuilt
217
- ? ["start", "--hostname", "0.0.0.0", "--port", port]
218
- : ["dev", "--hostname", "0.0.0.0", "--port", port];
346
+ ? ["start", "--hostname", hostname, "--port", port]
347
+ : ["dev", "--hostname", hostname, "--port", port];
219
348
 
220
349
  const child = spawn(nextBin, nextArgs, {
221
350
  cwd: projectRoot,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursor-local-remote",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
4
4
  "type": "module",
5
5
  "description": "Control Cursor IDE from any device on your local network",
6
6
  "license": "MIT",
@@ -43,6 +43,9 @@
43
43
  },
44
44
  "dependencies": {
45
45
  "@khmyznikov/pwa-install": "^0.6.3",
46
+ "@xterm/addon-fit": "^0.11.0",
47
+ "@xterm/addon-web-links": "^0.12.0",
48
+ "@xterm/xterm": "^6.0.0",
46
49
  "highlight.js": "^11.11.1",
47
50
  "next": "^15.5.12",
48
51
  "qrcode-terminal": "^0.12.0",
@@ -1,18 +0,0 @@
1
- exports.id=545,exports.ids=[545],exports.modules={401:(a,b,c)=>{"use strict";c.d(b,{Mf:()=>k,QO:()=>i,UH:()=>g,Wf:()=>d,Wg:()=>l,ZU:()=>j,c1:()=>e,jf:()=>f,wS:()=>h});let d=6e4,e=12e4,f=150,g=15e3,h=800,i=3e5,j=3e4,k=300,l=3100},1849:(a,b,c)=>{"use strict";c.d(b,{F2:()=>h,O9:()=>k,ae:()=>i});var d=c(6492),e=c(5514),f=c(6362),g=c(401);async function h(){return await (0,d.zj)("webhook_url")||""}async function i(a,b){let c;if(!a)return;c=a.includes("discord.com/api/webhooks")?function(a){let b="test"===a.event?5793266:5763719,c=[a.message];return a.url&&c.push(`
2
- [Open in CLR](${a.url})`),{embeds:[{title:a.title,description:c.join("\n"),color:b,timestamp:new Date(a.timestamp).toISOString()}]}}(b):a.includes("hooks.slack.com")?function(a){let b=a.url?`
3
- <${a.url}|Open in CLR>`:"";return{text:`*${a.title}*
4
- ${a.message}${b}`}}(b):{...b};let d=await fetch(a,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(c)});if(!d.ok)throw Error(`Webhook returned ${d.status}`)}async function j(a,b){try{let{toolCalls:c}=await (0,e.Nr)(a,b),d=[...c].reverse().find(a=>"todo"===a.type&&a.todos?.length);return d?.todos??[]}catch{return[]}}async function k(a,b){try{let c=await h();if(!c)return;let e=b.split("/").filter(Boolean).pop()||b,k=await (0,d.Pn)(a),l=await j(b,a),m=[];k&&m.push(`"${k}"`),l.length>0&&m.push(l.map(a=>{var b;return`${(b=a.status).includes("COMPLETED")?"✅":b.includes("PROGRESS")?"⏳":"⬜"} ${a.content}`}).join("\n")),0===m.length&&m.push(`Session ${a.slice(0,8)} completed`),await i(c,{event:"agent_complete",title:`Done - ${e}`,message:m.join("\n\n"),url:function(a){try{let b=parseInt(process.env.PORT||String(g.Wg),10),c=(0,f.z)(b),d=process.env.AUTH_TOKEN,e=d?`${c.url}?token=${d}`:c.url;return`${e}#session=${a}`}catch{return}}(a),sessionId:a,workspace:b,timestamp:Date.now()})}catch{}}},5514:(a,b,c)=>{"use strict";c.d(b,{Bz:()=>r,Nr:()=>v,Oe:()=>q,UQ:()=>o,b0:()=>u,hF:()=>i});var d=c(9748),e=c(3873),f=c(1820),g=c(9021);let h=(0,e.join)((0,f.homedir)(),".cursor","projects");async function i(){let a=[];try{for(let b of(await (0,d.readdir)(h))){if(!/^[A-Z]/.test(b))continue;let c=(0,e.join)(h,b,"agent-transcripts");try{await (0,d.access)(c)}catch{continue}let f=function(a){let b=a.split("-"),c=e.sep+b[0];for(let a=1;a<b.length;a++){let d=c+e.sep+b[a];c=(0,g.existsSync)(d)&&(0,g.statSync)(d).isDirectory()?d:c+"-"+b[a]}return(0,g.existsSync)(c)?c:null}(b);if(!f)continue;let i=f.split(e.sep).pop()||f;a.push({name:i,path:f,key:b})}}catch{}return a.sort((a,b)=>a.name.localeCompare(b.name))}async function j(a){let b=(0,e.resolve)(a).replace(/^\//,"").replace(/\//g,"-"),c=(0,e.join)(h,b,"agent-transcripts");try{return await (0,d.access)(c),c}catch{return null}}async function k(a){try{let b=await (0,d.readFile)(a,"utf-8"),c=[];for(let a of b.split("\n"))if(a.trim())try{c.push(JSON.parse(a))}catch{continue}return c}catch{return[]}}async function l(a){for(let b of(await k(a)))if("user"===b.role){let a=b.message,c=a?.content;return(c?.[0]?.text||"").replace(/<[^>]+>/g,"").trim().slice(0,120)}return""}async function m(a){try{return await (0,d.access)(a),!0}catch{return!1}}async function n(a,b){let c=await (0,d.stat)(a);if(c.isFile()&&b.endsWith(".jsonl"))return a;if(c.isDirectory()){let c=(0,e.join)(a,b+".jsonl");if(await m(c))return c;try{let b=(await (0,d.readdir)(a)).filter(a=>a.endsWith(".jsonl"));if(b.length>0)return(0,e.join)(a,b[0])}catch{}}return null}async function o(a){let b=await j(a);if(!b)return[];let c=[];try{for(let f of(await (0,d.readdir)(b))){let g=(0,e.join)(b,f),h=await n(g,f.replace(".jsonl",""));if(!h)continue;let i=await (0,d.stat)(h),j=f.replace(".jsonl",""),k=await l(h);k&&c.push({id:j,title:k.slice(0,60),workspace:a,preview:k,createdAt:i.birthtimeMs,updatedAt:i.mtimeMs})}}catch{}return c.sort((a,b)=>b.updatedAt-a.updatedAt)}function p(a){return a.replace(/<user_query>\n?/g,"").replace(/<\/user_query>\n?/g,"").replace(/<[^>]+>/g,"").trim()}async function q(a,b){let c=await j(a);if(!c)return null;let f=(0,e.resolve)(c),g=(0,e.resolve)(c,b);if(!g.startsWith(f+"/"))return null;let h=(0,e.join)(c,b+".jsonl");return await m(g)&&(await (0,d.stat)(g)).isDirectory()?n(g,b):await m(h)?h:null}async function r(a,b){let c=await q(a,b);if(!c)return 0;try{return(await (0,d.stat)(c)).mtimeMs}catch{return 0}}let s={Read:"read",Write:"write",Edit:"edit",StrReplace:"edit",Shell:"shell",Grep:"search",Glob:"search",List:"read",TodoWrite:"todo"};function t(a,b,c,d){let e=[];for(let f of a){let a,g,h;if("object"!=typeof f||null===f||"tool_use"!==f.type)continue;let i=f.name||"Tool",j=f.input||{},k=s[i]||"other";"TodoWrite"===i&&Array.isArray(j.todos)&&(a=j.todos.map(a=>({id:a.id,content:a.content,status:a.status?.toUpperCase().includes("COMPLETED")?"TODO_STATUS_COMPLETED":a.status?.toUpperCase().includes("PROGRESS")?"TODO_STATUS_IN_PROGRESS":"TODO_STATUS_PENDING"})));let l=a?.filter(a=>a.status.includes("COMPLETED")).length??0,m=a?.length??0;if("edit"===k&&"string"==typeof j.old_string&&"string"==typeof j.new_string)g=[...j.old_string.split("\n").map(a=>`-${a}`),...j.new_string.split("\n").map(a=>`+${a}`)].join("\n");else if("write"===k&&"string"==typeof j.contents){let a=j.contents.split("\n");g=a.map(a=>`+${a}`).join("\n"),a.length>30&&(g=a.slice(0,30).map(a=>`+${a}`).join("\n")+"\n+... ("+(a.length-30)+" more lines)")}"number"==typeof j.start_line&&(h=j.start_line),e.push({id:`${b}-tc-${c.n++}`,callId:`${b}-tc-${c.n}`,type:k,name:i,path:j.path||j.file_path,command:"shell"===k?j.command:"search"===k?j.pattern:void 0,status:"completed",diff:g,diffStartLine:h,result:"todo"===k&&m>0?`${m} items \xb7 ${l} done`:void 0,todos:a,timestamp:d+c.n})}return e}function u(a,b){let c=[],d=[],e={n:0},f=Date.now()-6e4;for(let g of a){let a=g.type;if("user"!==a&&"assistant"!==a)continue;let h=g.message?.content;if(!Array.isArray(h))continue;let i=[];for(let a of h)"text"===a.type&&a.text&&i.push(a.text);let j=i.join("");"user"===a&&(j=p(j)),j.trim()&&c.push({id:`${b}-live-${e.n++}`,role:a,content:j,timestamp:f+e.n}),"assistant"===a&&d.push(...t(h,b,e,f))}return{messages:c,toolCalls:d}}async function v(a,b){let c=await q(a,b);if(!c)return{messages:[],toolCalls:[],modifiedAt:0};let e=0;try{e=(await (0,d.stat)(c)).mtimeMs}catch{return{messages:[],toolCalls:[],modifiedAt:0}}let f=[],g=[],h={n:0},i=e-6e4;for(let a of(await k(c))){let c=a.role;if("user"!==c&&"assistant"!==c)continue;let d=a.message?.content;if(!Array.isArray(d))continue;let e=[];for(let a of d)"text"===a.type&&a.text&&e.push(a.text);let j=e.join("");"user"===c&&(j=p(j)),j.trim()&&f.push({id:`${b}-${h.n++}`,role:c,content:j,timestamp:i+h.n}),"assistant"===c&&g.push(...t(d,b,h,i))}return{messages:f,toolCalls:g,modifiedAt:e}}},6362:(a,b,c)=>{"use strict";c.d(b,{z:()=>e});var d=c(1820);function e(a=3100){let b=function(){let a=(0,d.networkInterfaces)();for(let b of Object.keys(a)){let c=a[b];if(c){for(let a of c)if("IPv4"===a.family&&!a.internal)return a.address}}return null}();return{lanIp:b||"localhost",port:a,url:b?`http://${b}:${a}`:`http://localhost:${a}`}}},6487:()=>{},6492:(a,b,c)=>{"use strict";c.d(b,{FF:()=>A,GW:()=>t,JZ:()=>u,ME:()=>x,Nk:()=>z,Pn:()=>r,Q$:()=>v,ag:()=>B,ih:()=>s,jl:()=>w,zj:()=>y});var d=c(6293),e=c.n(d),f=c(3873),g=c(1820),h=c(9021);let i=(0,f.join)((0,g.homedir)(),".cursor-local-remote"),j=(0,f.join)(i,"sessions.db"),k=null,l=null;function m(){k&&(0,h.writeFileSync)(j,Buffer.from(k.export()))}async function n(){if(k)return k;let{Database:a}=await (!l&&(l=e()()),l);(0,h.mkdirSync)(i,{recursive:!0}),(k=(0,h.existsSync)(j)?new a((0,h.readFileSync)(j)):new a).run(`
5
- CREATE TABLE IF NOT EXISTS sessions (
6
- id TEXT PRIMARY KEY,
7
- title TEXT NOT NULL,
8
- workspace TEXT NOT NULL,
9
- preview TEXT NOT NULL DEFAULT '',
10
- created_at INTEGER NOT NULL,
11
- updated_at INTEGER NOT NULL
12
- )
13
- `);try{k.run("ALTER TABLE sessions ADD COLUMN archived INTEGER NOT NULL DEFAULT 0")}catch{}return k.run(`
14
- CREATE TABLE IF NOT EXISTS config (
15
- key TEXT PRIMARY KEY,
16
- value TEXT NOT NULL
17
- )
18
- `),m(),k}function o(a,b,c){let d=a.prepare(b);try{if(d.bind(c),d.step())return d.getAsObject();return}finally{d.free()}}function p(a,b,c=[]){let d=a.prepare(b);try{d.bind(c);let a=[];for(;d.step();)a.push(d.getAsObject());return a}finally{d.free()}}function q(a){return{id:a.id,title:a.title,workspace:a.workspace,preview:a.preview,createdAt:a.created_at,updatedAt:a.updated_at}}async function r(a){let b=o(await n(),"SELECT title FROM sessions WHERE id = ?",[a]);return b?b.title:null}async function s(a,b,c){let d=await n(),e=Date.now(),f=o(d,"SELECT * FROM sessions WHERE id = ?",[a]);if(f){let b=c?c.slice(0,120):f.preview;return d.run("UPDATE sessions SET updated_at = ?, preview = ? WHERE id = ?",[e,b,a]),m(),q({...f,updated_at:e,preview:b})}let g=c.slice(0,60)||"New session",h=c.slice(0,120);return d.run("INSERT INTO sessions (id, title, workspace, preview, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?)",[a,g,b,h,e,e]),m(),{id:a,title:g,workspace:b,preview:h,createdAt:e,updatedAt:e}}async function t(a,b=!1){let c=await n(),d=b?" archived = 1":" archived = 0";return(a?p(c,"SELECT * FROM sessions WHERE workspace = ? AND"+d+" ORDER BY updated_at DESC",[a]):p(c,"SELECT * FROM sessions WHERE"+d+" ORDER BY updated_at DESC")).map(q)}async function u(a){(await n()).run("UPDATE sessions SET archived = 1 WHERE id = ?",[a]),m()}async function v(a){(await n()).run("UPDATE sessions SET archived = 0 WHERE id = ?",[a]),m()}async function w(a){let b=await n();a?b.run("UPDATE sessions SET archived = 1 WHERE workspace = ? AND archived = 0",[a]):b.run("UPDATE sessions SET archived = 1 WHERE archived = 0"),m()}async function x(a){(await n()).run("DELETE FROM sessions WHERE id = ?",[a]),m()}async function y(a){let b=o(await n(),"SELECT value FROM config WHERE key = ?",[a]);return b?.value}async function z(a,b){(await n()).run("INSERT OR REPLACE INTO config (key, value) VALUES (?, ?)",[a,b]),m()}async function A(){return p(await n(),"SELECT DISTINCT workspace FROM sessions ORDER BY workspace").map(a=>a.workspace)}async function B(){let a=p(await n(),"SELECT key, value FROM config WHERE key NOT LIKE 'vapid%'"),b={};for(let c of a)b[c.key]=c.value;return b}},7093:(a,b,c)=>{"use strict";function d(a,b){return Response.json({error:a},{status:b})}function e(a){return d(a,400)}function f(a){return d(a,404)}function g(a="Internal server error"){return d(a,500)}function h(a,b){return a instanceof Error&&console.error(a),b}async function i(a){try{return await a.json()}catch{return e("Invalid JSON body")}}c.d(b,{Jo:()=>h,Y2:()=>i,ig:()=>g,li:()=>e,mX:()=>f})},8335:()=>{}};
@@ -1 +0,0 @@
1
- "use strict";exports.id=819,exports.ids=[819],exports.modules={4819:(a,b,c)=>{c.d(b,{registerShutdownHandler:()=>f});let d=new Map,e=!1;function f(){if(e)return;e=!0;let a=()=>{for(let a of d.values())try{a.child.kill("SIGTERM")}catch{}process.exit(0)};process.on("SIGTERM",a),process.on("SIGINT",a)}}};
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST=function(e,r,t){return{__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:17,errorRate:1e-4,numBits:326,numHashes:14,bitArray:[0,1,0,1,e,r,r,e,e,r,r,r,r,r,r,e,r,r,e,r,e,e,e,r,e,e,r,e,r,r,r,e,r,e,r,e,e,e,e,e,e,r,r,r,r,e,e,e,r,e,e,r,r,e,r,e,r,e,e,e,r,r,e,r,e,e,r,r,e,e,r,r,r,e,r,r,r,e,e,e,r,e,e,e,e,r,r,r,r,e,r,e,r,r,e,r,e,e,r,r,e,e,e,r,e,e,e,e,r,r,e,r,r,e,e,r,e,e,e,r,r,r,r,e,r,e,r,e,r,r,r,r,r,r,e,e,r,r,e,r,r,r,r,r,r,r,e,e,e,e,r,e,e,e,r,r,e,e,e,e,e,e,r,r,r,e,e,e,r,r,r,e,e,r,r,r,r,r,r,r,e,e,r,r,e,e,r,r,e,r,e,r,e,e,r,e,r,r,r,r,e,e,e,r,r,r,e,r,r,r,e,r,r,r,r,e,e,r,e,r,r,r,r,e,r,e,e,r,r,e,r,e,e,r,e,r,r,e,e,r,r,r,r,r,e,e,e,r,e,r,e,e,e,e,e,e,e,r,r,e,r,e,e,r,e,r,r,e,r,r,e,r,e,e,e,e,e,r,e,e,e,r,e,e,e,r,r,r,r,e,e,r,r,e,e,e,r,e,e,e,e,r,r,r,e,e,e,r,e,r,r,r,e,r,r,e,e,r,e,r,e,e,r,e,e,e]},__routerFilterDynamic:{numItems:e,errorRate:1e-4,numBits:e,numHashes:null,bitArray:[]},"/_error":["static/chunks/pages/_error-89cd7530328c75d9.js"],sortedPages:["/_app","/_error"]}}(0,1,1e-4),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();