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.
- package/.next/BUILD_ID +1 -1
- package/.next/app-build-manifest.json +63 -42
- package/.next/app-path-routes-manifest.json +8 -5
- package/.next/build-manifest.json +5 -5
- package/.next/prerender-manifest.json +22 -22
- package/.next/react-loadable-manifest.json +18 -0
- package/.next/server/app/_not-found/page.js +2 -2
- package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/.next/server/app/_not-found.html +2 -2
- package/.next/server/app/_not-found.rsc +2 -2
- package/.next/server/app/api/chat/route.js +1 -1
- package/.next/server/app/api/chat/route.js.nft.json +1 -1
- package/.next/server/app/api/chat/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/git/route.js +2 -2
- package/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/info/route.js +1 -1
- package/.next/server/app/api/info/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/models/route.js +2 -2
- package/.next/server/app/api/models/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/notifications/test/route.js +1 -1
- package/.next/server/app/api/notifications/test/route.js.nft.json +1 -1
- package/.next/server/app/api/notifications/test/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/projects/route.js +2 -2
- package/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/active/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/history/route.js +1 -1
- package/.next/server/app/api/sessions/history/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/route.js +2 -2
- package/.next/server/app/api/sessions/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/sessions/watch/route.js +2 -2
- package/.next/server/app/api/sessions/watch/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/settings/route.js +2 -2
- package/.next/server/app/api/settings/route_client-reference-manifest.js +1 -1
- package/.next/server/app/api/terminal/input/route.js +3 -0
- package/.next/server/app/api/terminal/input/route.js.nft.json +1 -0
- package/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/terminal/route.js +3 -0
- package/.next/server/app/api/terminal/route.js.nft.json +1 -0
- package/.next/server/app/api/terminal/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/terminal/stream/route.js +6 -0
- package/.next/server/app/api/terminal/stream/route.js.nft.json +1 -0
- package/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -0
- package/.next/server/app/api/upload/route.js +1 -1
- package/.next/server/app/api/upload/route_client-reference-manifest.js +1 -1
- package/.next/server/app/index.html +2 -2
- package/.next/server/app/index.rsc +5 -5
- package/.next/server/app/manifest.webmanifest/route_client-reference-manifest.js +1 -1
- package/.next/server/app/page.js +3 -3
- package/.next/server/app/page.js.nft.json +1 -1
- package/.next/server/app/page_client-reference-manifest.js +1 -1
- package/.next/server/app-paths-manifest.json +8 -5
- package/.next/server/chunks/184.js +18 -0
- package/.next/server/chunks/267.js +6 -6
- package/.next/server/chunks/565.js +1 -0
- package/.next/server/chunks/61.js +18 -0
- package/.next/server/chunks/611.js +1 -1
- package/.next/server/chunks/781.js +1 -0
- package/.next/server/chunks/957.js +1 -0
- package/.next/server/instrumentation.js +1 -1
- package/.next/server/instrumentation.js.nft.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +1 -1
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/404.html +2 -2
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/_document.js +1 -1
- package/.next/server/pages/_error.js +2 -2
- package/.next/static/XMu8K85CP5u5_cZgrtqTv/_buildManifest.js +1 -0
- package/.next/static/chunks/581.6f70e48cd8cd239c.js +1 -0
- package/.next/static/chunks/687-b390283af2e3452f.js +1 -0
- package/.next/static/chunks/877.c9578aaf7d3c8f27.js +1 -0
- package/.next/static/chunks/app/api/chat/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/git/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/info/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/models/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/notifications/test/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/projects/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/sessions/active/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/sessions/history/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/sessions/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/sessions/watch/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/settings/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/terminal/input/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/terminal/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/terminal/stream/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/api/upload/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/manifest.webmanifest/route-d3038ca0da9c5380.js +1 -0
- package/.next/static/chunks/app/page-15e319bd13e0cc7c.js +1 -0
- package/.next/static/chunks/e868780c.80b1d92b07cbfce1.js +18 -0
- package/.next/static/chunks/webpack-b7a7ce1923e86513.js +1 -0
- package/.next/static/css/30da1f7eab9bf366.css +11 -0
- package/.next/static/css/4e3b3a779665aaeb.css +1 -0
- package/README.md +20 -0
- package/bin/cursor-remote.mjs +143 -14
- package/package.json +4 -1
- package/.next/server/chunks/545.js +0 -18
- package/.next/server/chunks/819.js +0 -1
- package/.next/static/JHNi3dquD5OcV7Sclue9U/_buildManifest.js +0 -1
- package/.next/static/chunks/391-727d95bcfba987c2.js +0 -1
- package/.next/static/chunks/app/api/chat/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/git/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/info/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/models/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/notifications/test/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/projects/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/sessions/active/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/sessions/history/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/sessions/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/sessions/watch/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/settings/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/api/upload/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/manifest.webmanifest/route-b00b337e85e306b9.js +0 -1
- package/.next/static/chunks/app/page-bdc004bf68daf19c.js +0 -1
- package/.next/static/chunks/webpack-d434b6449a9cd8f3.js +0 -1
- package/.next/static/css/5eacd01f773eed7f.css +0 -11
- package/.next/static/css/62c80997800f1b21.css +0 -1
- /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
|
|
package/bin/cursor-remote.mjs
CHANGED
|
@@ -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
|
|
61
|
-
|
|
62
|
-
--
|
|
63
|
-
--no-
|
|
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
|
-
|
|
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
|
|
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,
|
|
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",
|
|
218
|
-
: ["dev", "--hostname",
|
|
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.
|
|
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();
|