openportal 0.1.2 → 0.1.4
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/README.md +113 -0
- package/dist/cli.js +7 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +1 -0
- package/package.json +1 -1
- package/web/apps/web/.next/BUILD_ID +1 -1
- package/web/apps/web/.next/build-manifest.json +2 -2
- package/web/apps/web/.next/server/pages/404.html +1 -1
- package/web/apps/web/.next/server/pages/500.html +1 -1
- package/web/apps/web/.next/server/pages/index.html +1 -1
- package/web/apps/web/.next/server/pages/session/[id].html +1 -1
- package/web/apps/web/.next/server/pages/settings.html +1 -1
- /package/web/.next/static/{XI6khKkj1If5Kb4-eJQ2z → 2AHkk-zsVTx40cm88r7SY}/_buildManifest.js +0 -0
- /package/web/.next/static/{XI6khKkj1If5Kb4-eJQ2z → 2AHkk-zsVTx40cm88r7SY}/_clientMiddlewareManifest.json +0 -0
- /package/web/.next/static/{XI6khKkj1If5Kb4-eJQ2z → 2AHkk-zsVTx40cm88r7SY}/_ssgManifest.js +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# OpenCode Portal
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
> **Disclaimer**: This is a **personal project** and is **not related** to [https://github.com/sst/opencode](https://github.com/sst/opencode) or the SST team. This portal is a personal-built interface for interacting with OpenCode instances.
|
|
6
|
+
|
|
7
|
+
A web-based UI for [OpenCode](https://opencode.ai), the AI coding agent. This portal provides a browser interface to interact with OpenCode sessions, view messages, and chat with the AI assistant.
|
|
8
|
+
|
|
9
|
+
## Quick Start
|
|
10
|
+
|
|
11
|
+
### Using npx (Recommended)
|
|
12
|
+
|
|
13
|
+
The easiest way to run OpenCode Portal is using npx:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Navigate to your project directory
|
|
17
|
+
cd /path/to/your/project
|
|
18
|
+
|
|
19
|
+
# Run OpenCode Portal
|
|
20
|
+
npx openportal
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
This will:
|
|
24
|
+
|
|
25
|
+
- Start the OpenCode server on port 4000
|
|
26
|
+
- Start the web UI on port 3000
|
|
27
|
+
- Open your browser automatically
|
|
28
|
+
|
|
29
|
+
### Installation
|
|
30
|
+
|
|
31
|
+
You can also install globally:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
npm install -g openportal
|
|
35
|
+
|
|
36
|
+
# Then run in any project directory
|
|
37
|
+
openportal
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## CLI Options
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
openportal [options]
|
|
44
|
+
|
|
45
|
+
Options:
|
|
46
|
+
-V, --version output the version number
|
|
47
|
+
-p, --port <port> Port for web UI (default: "3000")
|
|
48
|
+
--opencode-port <port> Port for OpenCode server (default: "4000")
|
|
49
|
+
-d, --directory <path> Working directory for OpenCode
|
|
50
|
+
--no-browser Do not open browser automatically
|
|
51
|
+
--skip-opencode-check Skip OpenCode installation check
|
|
52
|
+
-h, --help display help for command
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Examples
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
# Use custom ports
|
|
59
|
+
openportal --port 8080 --opencode-port 5000
|
|
60
|
+
|
|
61
|
+
# Don't open browser
|
|
62
|
+
openportal --no-browser
|
|
63
|
+
|
|
64
|
+
# Specify a different project directory
|
|
65
|
+
openportal -d /path/to/other/project
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Prerequisites
|
|
69
|
+
|
|
70
|
+
OpenCode must be installed on your system. Install it using one of these methods:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Using curl (macOS/Linux)
|
|
74
|
+
curl -fsSL https://opencode.ai/install | bash
|
|
75
|
+
|
|
76
|
+
# Using npm
|
|
77
|
+
npm install -g opencode
|
|
78
|
+
|
|
79
|
+
# Using Homebrew (macOS)
|
|
80
|
+
brew install sst/tap/opencode
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Features
|
|
84
|
+
|
|
85
|
+
OpenCode Portal provides:
|
|
86
|
+
|
|
87
|
+
- Session management (create, view, delete sessions)
|
|
88
|
+
- Real-time chat interface with the AI assistant
|
|
89
|
+
- File mention support (`@filename` to reference files)
|
|
90
|
+
- Model selection
|
|
91
|
+
- Dark/light theme support
|
|
92
|
+
- Mobile-first responsive design
|
|
93
|
+
|
|
94
|
+
## Why This Project?
|
|
95
|
+
|
|
96
|
+
OpenCode comes with its own official web UI, but it has some limitations:
|
|
97
|
+
|
|
98
|
+
- Not mobile responsive
|
|
99
|
+
- Limited mobile experience
|
|
100
|
+
|
|
101
|
+
This project provides a mobile-first, responsive interface for interacting with OpenCode instances remotely.
|
|
102
|
+
|
|
103
|
+
## Use Case
|
|
104
|
+
|
|
105
|
+
This portal is designed for remote access to your OpenCode instance. Deploy it on a VPS alongside OpenCode, then use [Tailscale](https://tailscale.com) (or similar VPN) to securely connect from your mobile device or any other machine.
|
|
106
|
+
|
|
107
|
+
```
|
|
108
|
+
[Your Phone] ---(Tailscale)---> [VPS running Portal + OpenCode]
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## License
|
|
112
|
+
|
|
113
|
+
MIT
|
package/dist/cli.js
CHANGED
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
|
-
import { resolve } from "node:path";
|
|
3
|
+
import { resolve, dirname } from "node:path";
|
|
4
4
|
import { cwd } from "node:process";
|
|
5
|
+
import { readFileSync } from "node:fs";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
5
7
|
import { logSuccess, logError, logInfo, setupShutdownHandlers, killAllProcesses, openBrowser, isPortAvailable, colors, } from "./utils.js";
|
|
6
8
|
import { checkOpencodeInstalled, startOpencodeServer, stopOpencodeServer, printInstallInstructions, } from "./opencode.js";
|
|
7
9
|
import { startWebServer, stopWebServer } from "./server.js";
|
|
8
|
-
const
|
|
10
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
+
const __dirname = dirname(__filename);
|
|
12
|
+
const packageJson = JSON.parse(readFileSync(resolve(__dirname, "..", "package.json"), "utf-8"));
|
|
13
|
+
const version = packageJson.version;
|
|
9
14
|
async function main() {
|
|
10
15
|
const program = new Command();
|
|
11
16
|
program
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiB9D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAiB9D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB;AAmBD,wBAAsB,cAAc,CAClC,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAiE9B;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAKtD"}
|
package/dist/server.js
CHANGED
|
@@ -7,6 +7,7 @@ const __filename = fileURLToPath(import.meta.url);
|
|
|
7
7
|
const __dirname = dirname(__filename);
|
|
8
8
|
function findWebDirectory() {
|
|
9
9
|
const possiblePaths = [
|
|
10
|
+
resolve(__dirname, "..", "web", "apps", "web"),
|
|
10
11
|
resolve(__dirname, "..", "web"),
|
|
11
12
|
resolve(__dirname, "..", "..", "web"),
|
|
12
13
|
resolve(__dirname, "..", "..", "..", "apps", "web", ".next", "standalone"),
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2AHkk-zsVTx40cm88r7SY
|
|
@@ -48,8 +48,8 @@
|
|
|
48
48
|
"devFiles": [],
|
|
49
49
|
"polyfillFiles": [],
|
|
50
50
|
"lowPriorityFiles": [
|
|
51
|
-
"static/
|
|
52
|
-
"static/
|
|
51
|
+
"static/2AHkk-zsVTx40cm88r7SY/_ssgManifest.js",
|
|
52
|
+
"static/2AHkk-zsVTx40cm88r7SY/_buildManifest.js"
|
|
53
53
|
],
|
|
54
54
|
"rootMainFiles": []
|
|
55
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/3f78b6f3f4b66f36.js" defer=""></script><script src="/_next/static/chunks/turbopack-92c911b9efda2756.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/3f78b6f3f4b66f36.js" defer=""></script><script src="/_next/static/chunks/turbopack-92c911b9efda2756.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_ssgManifest.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_buildManifest.js" defer=""></script></head><body class="antialiased"><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","intentui-theme","system",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"2AHkk-zsVTx40cm88r7SY","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/3f78b6f3f4b66f36.js" defer=""></script><script src="/_next/static/chunks/turbopack-92c911b9efda2756.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/3f78b6f3f4b66f36.js" defer=""></script><script src="/_next/static/chunks/turbopack-92c911b9efda2756.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_ssgManifest.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_buildManifest.js" defer=""></script></head><body class="antialiased"><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","intentui-theme","system",null,["light","dark"],null,true,true)</script><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"2AHkk-zsVTx40cm88r7SY","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="preload" href="/_next/static/chunks/f9cf9aa757605a0d.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/f9cf9aa757605a0d.css" data-n-p=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/665a1ec483189124.js" defer=""></script><script src="/_next/static/chunks/d8f0ad36e12f0fbf.js" defer=""></script><script src="/_next/static/chunks/9865709466b09f79.js" defer=""></script><script src="/_next/static/chunks/turbopack-d5098189d63fd7b8.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="preload" href="/_next/static/chunks/f9cf9aa757605a0d.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/f9cf9aa757605a0d.css" data-n-p=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/665a1ec483189124.js" defer=""></script><script src="/_next/static/chunks/d8f0ad36e12f0fbf.js" defer=""></script><script src="/_next/static/chunks/9865709466b09f79.js" defer=""></script><script src="/_next/static/chunks/turbopack-d5098189d63fd7b8.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_ssgManifest.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_buildManifest.js" defer=""></script></head><body class="antialiased"><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","intentui-theme","system",null,["light","dark"],null,true,true)</script><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"2AHkk-zsVTx40cm88r7SY","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="preload" href="/_next/static/chunks/f9cf9aa757605a0d.css" as="style"/><link rel="preload" href="/_next/static/chunks/17cfb1b2ce0f096d.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/f9cf9aa757605a0d.css" data-n-p=""/><link rel="stylesheet" href="/_next/static/chunks/17cfb1b2ce0f096d.css" data-n-p=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/c59e89dc54c3cae8.js" defer=""></script><script src="/_next/static/chunks/d8f0ad36e12f0fbf.js" defer=""></script><script src="/_next/static/chunks/3ffbbca8f4333a24.js" defer=""></script><script src="/_next/static/chunks/9865709466b09f79.js" defer=""></script><script src="/_next/static/chunks/turbopack-26af71e419c11487.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="preload" href="/_next/static/chunks/f9cf9aa757605a0d.css" as="style"/><link rel="preload" href="/_next/static/chunks/17cfb1b2ce0f096d.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/f9cf9aa757605a0d.css" data-n-p=""/><link rel="stylesheet" href="/_next/static/chunks/17cfb1b2ce0f096d.css" data-n-p=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/c59e89dc54c3cae8.js" defer=""></script><script src="/_next/static/chunks/d8f0ad36e12f0fbf.js" defer=""></script><script src="/_next/static/chunks/3ffbbca8f4333a24.js" defer=""></script><script src="/_next/static/chunks/9865709466b09f79.js" defer=""></script><script src="/_next/static/chunks/turbopack-26af71e419c11487.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_buildManifest.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_ssgManifest.js" defer=""></script></head><body class="antialiased"><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","intentui-theme","system",null,["light","dark"],null,true,true)</script><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/session/[id]","query":{},"buildId":"2AHkk-zsVTx40cm88r7SY","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="preload" href="/_next/static/chunks/f9cf9aa757605a0d.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/f9cf9aa757605a0d.css" data-n-p=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/9bd4272b69f6c6f2.js" defer=""></script><script src="/_next/static/chunks/52b90bc1740162c2.js" defer=""></script><script src="/_next/static/chunks/turbopack-8e653f3ad3a8ed18.js" defer=""></script><script src="/_next/static/
|
|
1
|
+
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><link rel="preload" href="/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2" as="font" type="font/woff2" crossorigin="anonymous" data-next-font="size-adjust"/><link rel="preload" href="/_next/static/chunks/4147ffc67a7b837c.css" as="style"/><link rel="preload" href="/_next/static/chunks/f9cf9aa757605a0d.css" as="style"/><link rel="stylesheet" href="/_next/static/chunks/4147ffc67a7b837c.css" data-n-g=""/><link rel="stylesheet" href="/_next/static/chunks/f9cf9aa757605a0d.css" data-n-p=""/><noscript data-n-css=""></noscript><script src="/_next/static/chunks/b107f5f34a4187e4.js" defer=""></script><script src="/_next/static/chunks/bd15146d1618bdbf.js" defer=""></script><script src="/_next/static/chunks/8f80b41262ef70b6.js" defer=""></script><script src="/_next/static/chunks/fee6d0ada00c967a.js" defer=""></script><script src="/_next/static/chunks/57a81fb69ac0c6be.js" defer=""></script><script src="/_next/static/chunks/turbopack-4ad0df7330c00c8d.js" defer=""></script><script src="/_next/static/chunks/9bd4272b69f6c6f2.js" defer=""></script><script src="/_next/static/chunks/52b90bc1740162c2.js" defer=""></script><script src="/_next/static/chunks/turbopack-8e653f3ad3a8ed18.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_ssgManifest.js" defer=""></script><script src="/_next/static/2AHkk-zsVTx40cm88r7SY/_buildManifest.js" defer=""></script></head><body class="antialiased"><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","intentui-theme","system",null,["light","dark"],null,true,true)</script><section aria-label="Notifications alt+T" tabindex="-1" aria-live="polite" aria-relevant="additions text" aria-atomic="false"></section></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/settings","query":{},"buildId":"2AHkk-zsVTx40cm88r7SY","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
File without changes
|
|
File without changes
|
|
File without changes
|