pi-webapp 0.1.18 → 0.1.20
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 +8 -0
- package/README.zh-CN.md +8 -0
- package/bin/pi-webapp.mjs +9 -5
- package/dist/extension.js +11 -11
- package/docs/desktop.md +228 -0
- package/package.json +14 -3
- package/web/dist/.vite/manifest.json +19 -19
- package/web/dist/assets/{WorkspaceTerminal-BCq77BLP.js → WorkspaceTerminal-DF87HK0D.js} +1 -1
- package/web/dist/assets/{app-grSRYeEE.js → app-4px1DWHV.js} +69 -69
- package/web/dist/assets/app.js +2 -2
- package/web/dist/assets/{graphql-CLuiQLXf.js → graphql-Bz9lYT3E.js} +1 -1
- package/web/dist/assets/{http-JHeTzO2o.js → http-oJQxPuUz.js} +1 -1
- package/web/dist/assets/{php-DX4AdxY7.js → php-C_eP8QT0.js} +1 -1
- package/web/dist/assets/{rst-DVdeQzC2.js → rst-D71MTZLw.js} +1 -1
- package/web/dist/assets/{ruby-CwqnXjsB.js → ruby-DVYYFOy_.js} +1 -1
- package/web/dist/assets/style.css +1 -1
- package/web/dist/assets/{svelte-YsqFMt71.js → svelte-uHeUtAW3.js} +1 -1
- package/web/dist/assets/{vue-D6Eizkci.js → vue-C1Yqc5Ux.js} +1 -1
package/docs/desktop.md
ADDED
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
# Desktop application
|
|
2
|
+
|
|
3
|
+
The desktop application **pi** is an optional Electron host for the existing Web UI.
|
|
4
|
+
The `npx pi-webapp` and Pi `/web` entry points remain available. There is no
|
|
5
|
+
second implementation of chat, files, terminals, Git or session storage.
|
|
6
|
+
|
|
7
|
+
## Build and run
|
|
8
|
+
|
|
9
|
+
Build on the target OS and architecture (macOS/Linux/Windows, x64 or arm64):
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm ci
|
|
13
|
+
npm run check
|
|
14
|
+
npm test
|
|
15
|
+
npm run desktop:prepare
|
|
16
|
+
npm run desktop:start
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`desktop:prepare` builds the UI/extension, downloads **Node 22.23.3** from
|
|
20
|
+
nodejs.org, verifies the archive against the official HTTPS SHA-256 manifest,
|
|
21
|
+
and installs the pinned production dependencies from
|
|
22
|
+
`desktop/runtime-manifest/package-lock.json`. It verifies the bundled Pi version
|
|
23
|
+
and actually starts a PTY before declaring success. Internet is required while
|
|
24
|
+
building, not to install Node/Pi on the end user's machine. Model calls,
|
|
25
|
+
authorization and package installation can still require internet.
|
|
26
|
+
|
|
27
|
+
The staging directory is `.desktop/runtime/`:
|
|
28
|
+
|
|
29
|
+
- `node/`: standalone Node and npm, including their upstream license.
|
|
30
|
+
- `backend/`: pi-webapp assets, extension, launcher and locked dependencies,
|
|
31
|
+
including Pi. It is outside ASAR, so Node and native PTY helpers run normally.
|
|
32
|
+
- `build-info.json`: app/runtime versions, platform, architecture and Node checksum.
|
|
33
|
+
|
|
34
|
+
Electron's renderer has no Node integration or preload bridge. It loads the same
|
|
35
|
+
loopback HTTP page as a browser, with sandboxing, context isolation, normal CSP,
|
|
36
|
+
and the existing bearer-token authentication. External HTTP(S) links require a
|
|
37
|
+
native confirmation and open in the default browser. Other OS protocols, webviews,
|
|
38
|
+
page-created windows, permission requests and downloads are not enabled.
|
|
39
|
+
|
|
40
|
+
## Create an installer
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm run desktop:package # DMG / NSIS installer / AppImage on this host
|
|
44
|
+
npm run desktop:package -- --dir # unpacked application for QA
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Output is in `desktop-release/`. The macOS bundle is **pi.app**, the native menu
|
|
48
|
+
and window name are **pi**, and installer names include a desktop build number,
|
|
49
|
+
e.g. `pi-0.1.19-desktop.4-mac-arm64.dmg`. “pi → 关于 pi” shows the build number
|
|
50
|
+
and executable location, so different desktop rebuilds are distinguishable even
|
|
51
|
+
when their shared backend stays at the same npm version. `desktop/release.json`
|
|
52
|
+
is the single source for the desktop name/build; increment its build number for
|
|
53
|
+
each delivered rebuild. The CFBundleVersion / Windows file version also changes.
|
|
54
|
+
|
|
55
|
+
Cross-platform/architecture flags are
|
|
56
|
+
intentionally rejected by the wrapper: using the current machine's Node/native
|
|
57
|
+
modules in another platform's installer would create a broken application. Use
|
|
58
|
+
native runners for each target. A manual GitHub Actions workflow is provided;
|
|
59
|
+
it never publishes a release automatically.
|
|
60
|
+
|
|
61
|
+
The application embeds Node and Pi. Git, SSH, project compilers and other system
|
|
62
|
+
tools are **not** bundled. Missing tools must be installed by the user. Model
|
|
63
|
+
accounts/API credentials must still be configured in the existing settings UI.
|
|
64
|
+
|
|
65
|
+
### Signing and updates / “签名更新”
|
|
66
|
+
|
|
67
|
+
These are two separate release responsibilities:
|
|
68
|
+
|
|
69
|
+
- **Code signing** identifies the publisher and protects the application from
|
|
70
|
+
undetected modification. macOS public distribution normally also needs Apple
|
|
71
|
+
notarization. Windows signing reduces unknown-publisher warnings. These require
|
|
72
|
+
the publisher's own credentials/certificates and, potentially, paid accounts.
|
|
73
|
+
- **Safe updates** verify an update's publisher/integrity and replace a compatible
|
|
74
|
+
application/runtime without destroying user data.
|
|
75
|
+
|
|
76
|
+
This first implementation creates **unsigned local/test installers**, with no
|
|
77
|
+
certificate discovery, notarization, public release, or automatic desktop updater.
|
|
78
|
+
macOS Gatekeeper / Windows SmartScreen may warn or block an unsigned download.
|
|
79
|
+
Do not disable OS security globally to use it. Public distribution needs a
|
|
80
|
+
separately configured, authorized signing/notarization workflow; local successful
|
|
81
|
+
packaging is not proof of public-distribution readiness.
|
|
82
|
+
|
|
83
|
+
For now, install a newer desktop package to upgrade; if replacing a running
|
|
84
|
+
desktop-owned runtime, first finish tasks and stop that owned service. A desktop
|
|
85
|
+
attached to an external Web service can simply close without stopping the service. Desktop-managed backends reject the Web/npm update and restart paths,
|
|
86
|
+
so the UI cannot overwrite the bundled runtime. A desktop window attached to an
|
|
87
|
+
existing npm-managed backend preserves that backend's original update behavior.
|
|
88
|
+
|
|
89
|
+
### Upgrading from the former “Pi Webapp” app
|
|
90
|
+
|
|
91
|
+
1. Quit the old desktop process first. A running old instance cannot be replaced
|
|
92
|
+
in memory by dragging a new app into Applications. Keep an external Web
|
|
93
|
+
backend running; an attached desktop's exit never stops it.
|
|
94
|
+
2. Open the **new build-numbered** DMG and drag **pi.app** into Applications.
|
|
95
|
+
If pi.app already exists, confirm Replace. The formerly named Pi Webapp.app
|
|
96
|
+
is a separate Finder item and is not silently deleted or overwritten.
|
|
97
|
+
3. Explicitly open `/Applications/pi.app`, not the old Dock shortcut, an older
|
|
98
|
+
mounted disk image, or Pi Webapp.app. Verify **pi → 关于 pi → 桌面构建 4**.
|
|
99
|
+
4. Remove the old pinned Dock shortcut and pin the new pi.app. Once verified,
|
|
100
|
+
the old Pi Webapp.app may be removed manually; do not delete `~/.pi`.
|
|
101
|
+
|
|
102
|
+
The bundle ID remains `dev.pi.webapp`. The old Electron profile/instance-lock
|
|
103
|
+
location (`appData/Pi Webapp`) is retained so the rename does not reset UI
|
|
104
|
+
preferences or allow a second independent desktop instance. Explicit
|
|
105
|
+
`--user-data-dir` overrides are respected for testing. Pi configuration and
|
|
106
|
+
sessions still live in their existing directory. The shared Web document/CLI
|
|
107
|
+
keeps its existing name; this rename is for the native desktop application.
|
|
108
|
+
|
|
109
|
+
## Application icon
|
|
110
|
+
|
|
111
|
+
The desktop uses an original deep-teal rounded tile with an ivory **π** monogram
|
|
112
|
+
and a mint **>_** terminal prompt. Editable artwork lives in
|
|
113
|
+
`desktop/icons/icon.svg`; the checked-in `icon.png` (1024px, transparent),
|
|
114
|
+
`icon.icns` (standard/Retina macOS sizes), and `icon.ico` (16–256px Windows sizes)
|
|
115
|
+
are generated from it. Packaging explicitly selects an icon for each platform;
|
|
116
|
+
the window and macOS development Dock also use this artwork instead of Electron's.
|
|
117
|
+
|
|
118
|
+
To regenerate after editing the SVG:
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
npx playwright install chromium # only needed to regenerate artwork
|
|
122
|
+
npm run desktop:icons
|
|
123
|
+
# Or use installed Google Chrome: PI_WEB_TEST_CHROME=true npm run desktop:icons
|
|
124
|
+
npm run test:desktop
|
|
125
|
+
npm run desktop:package
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Normal packaging uses the committed images and does not need a browser or an
|
|
129
|
+
image-conversion dependency. Installing a rebuilt app replaces its icon; quit
|
|
130
|
+
the old app first and replace it in Applications. A stale pinned Dock shortcut
|
|
131
|
+
may need to be removed and re-added. Do not modify an installed application's
|
|
132
|
+
bundle to change its icon, and do not delete Pi user data to refresh an icon.
|
|
133
|
+
|
|
134
|
+
## Service ownership and shared state
|
|
135
|
+
|
|
136
|
+
The existing launcher state directory and exclusive lock are reused under
|
|
137
|
+
`~/.pi/agent/pi-web/` (or `PI_CODING_AGENT_DIR`). Model credentials and Pi sessions
|
|
138
|
+
stay in Pi's existing data directory, not inside the application bundle.
|
|
139
|
+
|
|
140
|
+
- The desktop checks a live launcher's bridge version, exact app version, token
|
|
141
|
+
and authenticated version endpoint before attaching. The released **0.1.19**
|
|
142
|
+
Web launcher predates these metadata fields: when they are absent, the desktop
|
|
143
|
+
also checks the authenticated session schema (v1) and the initial NDJSON
|
|
144
|
+
snapshot event before attaching. This is a narrow, tested legacy allowlist,
|
|
145
|
+
not cross-version compatibility or unconditional acceptance of missing fields.
|
|
146
|
+
- Legacy detection uses only GET requests, cancels its temporary event stream,
|
|
147
|
+
bounds response size/time, and never rewrites launcher state or claims service
|
|
148
|
+
ownership. A service replaced during a handshake is rechecked.
|
|
149
|
+
- Explicit incompatible protocols/versions, bad authentication, and failed health
|
|
150
|
+
checks remain errors with distinct messages. A native dialog offers retry,
|
|
151
|
+
opening the authenticated existing service in a browser when safe, or exiting.
|
|
152
|
+
It never stops, upgrades, or migrates an external service automatically. A truly
|
|
153
|
+
incompatible backend must be switched from its original entry point after
|
|
154
|
+
finishing tasks; a compatible old Web backend does **not** need to be stopped.
|
|
155
|
+
- If there is no running service, the desktop starts the shared launcher with its
|
|
156
|
+
bundled Node/Pi. A racing launcher still has to acquire the same exclusive lock.
|
|
157
|
+
- A desktop application is single-instance. Launching it again focuses its window.
|
|
158
|
+
- Closing the window or choosing Quit asks whether to stop the owned service or
|
|
159
|
+
leave it running. Stopping ends **all** sessions and terminals on that service,
|
|
160
|
+
including those used by a browser. Cancel leaves the application open.
|
|
161
|
+
- An attached service is never stopped by closing the desktop window.
|
|
162
|
+
- “Window → Open in browser” opens the same backend, not another Pi process.
|
|
163
|
+
- After choosing to leave the service running, reopening the desktop attaches to
|
|
164
|
+
it. To stop it later, use the Web launcher's `pi-webapp stop` command (or
|
|
165
|
+
`npm run stop` from this checkout); a new attached desktop does not claim ownership.
|
|
166
|
+
|
|
167
|
+
The initial workspace is the user's home directory; add/select project workspaces
|
|
168
|
+
using the existing UI. No shell login scripts are executed merely to construct a
|
|
169
|
+
PATH. The bundled Node directory is prepended to the GUI process's environment;
|
|
170
|
+
Git/SSH/toolchain PATH differences on desktop launch should be checked explicitly.
|
|
171
|
+
|
|
172
|
+
## Tests
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npm run test:desktop
|
|
176
|
+
npm run desktop:smoke
|
|
177
|
+
npm run desktop:smoke -- --packaged
|
|
178
|
+
# Reproduce the original bug against an installed, pre-desktop 0.1.19 npm release:
|
|
179
|
+
npm run desktop:smoke:legacy -- --packaged --legacy-package /path/to/node_modules/pi-webapp
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Smoke testing requires a graphical session (Linux can use Xvfb) and Playwright
|
|
183
|
+
Chromium (`npx playwright install chromium`). Set `PI_WEB_TEST_CHROME=true` to
|
|
184
|
+
use an installed Chrome instead. Build the unpacked application before the
|
|
185
|
+
`--packaged` test. The smoke test uses a temporary HOME/Pi directory and a PATH
|
|
186
|
+
without global Node/Pi. It tests renderer isolation, real PTY interaction,
|
|
187
|
+
authentication, file listing, desktop update protection, a browser connected to
|
|
188
|
+
the same service, and confirmed shutdown/process cleanup. It does **not** submit
|
|
189
|
+
a paid model request, log in to a provider, or use the user's saved credentials.
|
|
190
|
+
Screenshots/results are written to `artifacts/desktop/`.
|
|
191
|
+
|
|
192
|
+
The legacy smoke uses a temporary HOME/agent directory and copies the old package
|
|
193
|
+
without changing its launcher or extension JavaScript. It prepares node-pty's
|
|
194
|
+
macOS helper executable bit **only in its fixture copy** (as normal installation
|
|
195
|
+
would), leaving the original installed release and live service untouched. It
|
|
196
|
+
starts the genuine old Web backend first, opens a working browser PTY, attaches
|
|
197
|
+
the desktop to the same chat, and verifies that the same PTY and backend survive
|
|
198
|
+
both attachment and desktop exit. The complementary regular smoke covers the
|
|
199
|
+
opposite order: desktop first, then browser. No model request is sent.
|
|
200
|
+
|
|
201
|
+
If the local harness wraps Git with a forced author, the existing Git history test
|
|
202
|
+
may observe that author instead of its fixture author. Run tests with the normal
|
|
203
|
+
system Git in PATH in an isolated test environment; do not change global Git
|
|
204
|
+
configuration to make a fixture pass.
|
|
205
|
+
|
|
206
|
+
## Updating runtime dependencies
|
|
207
|
+
|
|
208
|
+
When production dependencies or pinned Pi versions in the root manifest change:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
npm run desktop:sync-runtime
|
|
212
|
+
# Review and commit desktop/runtime-manifest/package{,-lock}.json.
|
|
213
|
+
npm run desktop:prepare
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
The sync command seeds resolutions from the main lockfile and generates a separate
|
|
217
|
+
production-only lockfile. Preparation refuses to proceed when these dependencies
|
|
218
|
+
are out of sync. Electron and electron-builder are development dependencies only;
|
|
219
|
+
they do not enter the published npm package's runtime dependencies.
|
|
220
|
+
|
|
221
|
+
## Verification scope of the initial delivery
|
|
222
|
+
|
|
223
|
+
macOS arm64 is the local implementation/QA target. Windows/Linux installer
|
|
224
|
+
configuration is provided but must be tested on their own runners before promising
|
|
225
|
+
support. Custom icons are configured for all platforms; the icon replacement
|
|
226
|
+
has only been verified in a packaged macOS arm64 app.
|
|
227
|
+
Formal signing, automatic desktop updates, tray integration, completion
|
|
228
|
+
notifications and cross-platform end-to-end QA are not included in this delivery.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-webapp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.20",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A browser interface for Pi with live chat, workspaces, models, and attachments",
|
|
6
6
|
"repository": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"pi-webapp": "./bin/pi-webapp.mjs"
|
|
16
16
|
},
|
|
17
17
|
"pi": {
|
|
18
|
-
"image": "https://cdn.jsdelivr.net/npm/pi-webapp@0.1.
|
|
18
|
+
"image": "https://cdn.jsdelivr.net/npm/pi-webapp@0.1.20/assets/cover-webapp.png",
|
|
19
19
|
"extensions": [
|
|
20
20
|
"./dist/extension.js"
|
|
21
21
|
]
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"web/src/ui/shared/LICENSE.txt",
|
|
32
32
|
"docs/sentry.md",
|
|
33
33
|
"docs/sentry-triage.md",
|
|
34
|
+
"docs/desktop.md",
|
|
34
35
|
"scripts/prepare-terminal.mjs"
|
|
35
36
|
],
|
|
36
37
|
"scripts": {
|
|
@@ -38,7 +39,15 @@
|
|
|
38
39
|
"status": "node bin/pi-webapp.mjs status",
|
|
39
40
|
"stop": "node bin/pi-webapp.mjs stop",
|
|
40
41
|
"check": "tsc --noEmit && tsc -p web/tsconfig.json",
|
|
41
|
-
"test": "node --import ./test/setup-env.mjs --experimental-strip-types --test test/*.test.ts",
|
|
42
|
+
"test": "node --import ./test/setup-env.mjs --experimental-strip-types --test test/*.test.ts && npm run test:desktop",
|
|
43
|
+
"test:desktop": "node --test desktop/test/*.test.mjs",
|
|
44
|
+
"desktop:icons": "node scripts/generate-desktop-icons.mjs",
|
|
45
|
+
"desktop:sync-runtime": "node scripts/sync-desktop-runtime.mjs",
|
|
46
|
+
"desktop:prepare": "npm run build && node scripts/prepare-desktop.mjs",
|
|
47
|
+
"desktop:start": "electron desktop",
|
|
48
|
+
"desktop:smoke": "node scripts/smoke-desktop.mjs",
|
|
49
|
+
"desktop:smoke:legacy": "node scripts/smoke-desktop-legacy.mjs",
|
|
50
|
+
"desktop:package": "node scripts/package-desktop.mjs",
|
|
42
51
|
"build": "node scripts/build.mjs",
|
|
43
52
|
"build:web": "node scripts/build.mjs browser",
|
|
44
53
|
"build:extension": "node scripts/build.mjs node",
|
|
@@ -70,6 +79,8 @@
|
|
|
70
79
|
"@types/node": "22.19.19",
|
|
71
80
|
"@types/react": "^18.3.1",
|
|
72
81
|
"@types/react-dom": "^18.3.0",
|
|
82
|
+
"electron": "44.9.0",
|
|
83
|
+
"electron-builder": "26.15.3",
|
|
73
84
|
"esbuild": "^0.28.2",
|
|
74
85
|
"micromark-util-types": "^2.0.2",
|
|
75
86
|
"typescript": "7.0.2",
|
|
@@ -122,13 +122,13 @@
|
|
|
122
122
|
"isDynamicEntry": true
|
|
123
123
|
},
|
|
124
124
|
"../../node_modules/@shikijs/langs/dist/graphql.mjs": {
|
|
125
|
-
"file": "assets/graphql-
|
|
125
|
+
"file": "assets/graphql-Bz9lYT3E.js",
|
|
126
126
|
"name": "graphql",
|
|
127
127
|
"src": "../../node_modules/@shikijs/langs/dist/graphql.mjs",
|
|
128
128
|
"isDynamicEntry": true,
|
|
129
129
|
"imports": [
|
|
130
130
|
"_javascript-D_ijBMSX.js",
|
|
131
|
-
"_app-
|
|
131
|
+
"_app-4px1DWHV.js",
|
|
132
132
|
"index.html"
|
|
133
133
|
]
|
|
134
134
|
},
|
|
@@ -161,12 +161,12 @@
|
|
|
161
161
|
]
|
|
162
162
|
},
|
|
163
163
|
"../../node_modules/@shikijs/langs/dist/http.mjs": {
|
|
164
|
-
"file": "assets/http-
|
|
164
|
+
"file": "assets/http-oJQxPuUz.js",
|
|
165
165
|
"name": "http",
|
|
166
166
|
"src": "../../node_modules/@shikijs/langs/dist/http.mjs",
|
|
167
167
|
"isDynamicEntry": true,
|
|
168
168
|
"imports": [
|
|
169
|
-
"_app-
|
|
169
|
+
"_app-4px1DWHV.js",
|
|
170
170
|
"../../node_modules/@shikijs/langs/dist/xml.mjs",
|
|
171
171
|
"../../node_modules/@shikijs/langs/dist/graphql.mjs",
|
|
172
172
|
"index.html",
|
|
@@ -275,7 +275,7 @@
|
|
|
275
275
|
]
|
|
276
276
|
},
|
|
277
277
|
"../../node_modules/@shikijs/langs/dist/php.mjs": {
|
|
278
|
-
"file": "assets/php-
|
|
278
|
+
"file": "assets/php-C_eP8QT0.js",
|
|
279
279
|
"name": "php",
|
|
280
280
|
"src": "../../node_modules/@shikijs/langs/dist/php.mjs",
|
|
281
281
|
"isDynamicEntry": true,
|
|
@@ -284,7 +284,7 @@
|
|
|
284
284
|
"../../node_modules/@shikijs/langs/dist/xml.mjs",
|
|
285
285
|
"../../node_modules/@shikijs/langs/dist/sql.mjs",
|
|
286
286
|
"_javascript-D_ijBMSX.js",
|
|
287
|
-
"_app-
|
|
287
|
+
"_app-4px1DWHV.js",
|
|
288
288
|
"../../node_modules/@shikijs/langs/dist/css.mjs",
|
|
289
289
|
"../../node_modules/@shikijs/langs/dist/java.mjs",
|
|
290
290
|
"index.html"
|
|
@@ -315,7 +315,7 @@
|
|
|
315
315
|
"isDynamicEntry": true
|
|
316
316
|
},
|
|
317
317
|
"../../node_modules/@shikijs/langs/dist/rst.mjs": {
|
|
318
|
-
"file": "assets/rst-
|
|
318
|
+
"file": "assets/rst-D71MTZLw.js",
|
|
319
319
|
"name": "rst",
|
|
320
320
|
"src": "../../node_modules/@shikijs/langs/dist/rst.mjs",
|
|
321
321
|
"isDynamicEntry": true,
|
|
@@ -324,7 +324,7 @@
|
|
|
324
324
|
"../../node_modules/@shikijs/langs/dist/cpp.mjs",
|
|
325
325
|
"../../node_modules/@shikijs/langs/dist/python.mjs",
|
|
326
326
|
"_javascript-D_ijBMSX.js",
|
|
327
|
-
"_app-
|
|
327
|
+
"_app-4px1DWHV.js",
|
|
328
328
|
"../../node_modules/@shikijs/langs/dist/yaml.mjs",
|
|
329
329
|
"../../node_modules/@shikijs/langs/dist/cmake.mjs",
|
|
330
330
|
"../../node_modules/@shikijs/langs/dist/ruby.mjs",
|
|
@@ -340,7 +340,7 @@
|
|
|
340
340
|
]
|
|
341
341
|
},
|
|
342
342
|
"../../node_modules/@shikijs/langs/dist/ruby.mjs": {
|
|
343
|
-
"file": "assets/ruby-
|
|
343
|
+
"file": "assets/ruby-DVYYFOy_.js",
|
|
344
344
|
"name": "ruby",
|
|
345
345
|
"src": "../../node_modules/@shikijs/langs/dist/ruby.mjs",
|
|
346
346
|
"isDynamicEntry": true,
|
|
@@ -353,7 +353,7 @@
|
|
|
353
353
|
"../../node_modules/@shikijs/langs/dist/graphql.mjs",
|
|
354
354
|
"../../node_modules/@shikijs/langs/dist/cpp.mjs",
|
|
355
355
|
"../../node_modules/@shikijs/langs/dist/c.mjs",
|
|
356
|
-
"_app-
|
|
356
|
+
"_app-4px1DWHV.js",
|
|
357
357
|
"../../node_modules/@shikijs/langs/dist/lua.mjs",
|
|
358
358
|
"../../node_modules/@shikijs/langs/dist/yaml.mjs",
|
|
359
359
|
"../../node_modules/@shikijs/langs/dist/java.mjs",
|
|
@@ -388,13 +388,13 @@
|
|
|
388
388
|
"isDynamicEntry": true
|
|
389
389
|
},
|
|
390
390
|
"../../node_modules/@shikijs/langs/dist/svelte.mjs": {
|
|
391
|
-
"file": "assets/svelte-
|
|
391
|
+
"file": "assets/svelte-uHeUtAW3.js",
|
|
392
392
|
"name": "svelte",
|
|
393
393
|
"src": "../../node_modules/@shikijs/langs/dist/svelte.mjs",
|
|
394
394
|
"isDynamicEntry": true,
|
|
395
395
|
"imports": [
|
|
396
396
|
"_javascript-D_ijBMSX.js",
|
|
397
|
-
"_app-
|
|
397
|
+
"_app-4px1DWHV.js",
|
|
398
398
|
"../../node_modules/@shikijs/langs/dist/css.mjs",
|
|
399
399
|
"index.html"
|
|
400
400
|
]
|
|
@@ -430,14 +430,14 @@
|
|
|
430
430
|
"isDynamicEntry": true
|
|
431
431
|
},
|
|
432
432
|
"../../node_modules/@shikijs/langs/dist/vue.mjs": {
|
|
433
|
-
"file": "assets/vue-
|
|
433
|
+
"file": "assets/vue-C1Yqc5Ux.js",
|
|
434
434
|
"name": "vue",
|
|
435
435
|
"src": "../../node_modules/@shikijs/langs/dist/vue.mjs",
|
|
436
436
|
"isDynamicEntry": true,
|
|
437
437
|
"imports": [
|
|
438
438
|
"../../node_modules/@shikijs/langs/dist/css.mjs",
|
|
439
439
|
"_javascript-D_ijBMSX.js",
|
|
440
|
-
"_app-
|
|
440
|
+
"_app-4px1DWHV.js",
|
|
441
441
|
"../../node_modules/@shikijs/langs/dist/html.mjs",
|
|
442
442
|
"_html-derivative-BaRuZAr6.js",
|
|
443
443
|
"index.html"
|
|
@@ -695,17 +695,17 @@
|
|
|
695
695
|
"src": "../../node_modules/katex/dist/fonts/KaTeX_Typewriter-Regular.woff2"
|
|
696
696
|
},
|
|
697
697
|
"WorkspaceTerminal.tsx": {
|
|
698
|
-
"file": "assets/WorkspaceTerminal-
|
|
698
|
+
"file": "assets/WorkspaceTerminal-DF87HK0D.js",
|
|
699
699
|
"name": "WorkspaceTerminal",
|
|
700
700
|
"src": "WorkspaceTerminal.tsx",
|
|
701
701
|
"isDynamicEntry": true,
|
|
702
702
|
"imports": [
|
|
703
|
-
"_app-
|
|
703
|
+
"_app-4px1DWHV.js",
|
|
704
704
|
"index.html"
|
|
705
705
|
]
|
|
706
706
|
},
|
|
707
|
-
"_app-
|
|
708
|
-
"file": "assets/app-
|
|
707
|
+
"_app-4px1DWHV.js": {
|
|
708
|
+
"file": "assets/app-4px1DWHV.js",
|
|
709
709
|
"name": "app",
|
|
710
710
|
"isDynamicEntry": true,
|
|
711
711
|
"imports": [
|
|
@@ -851,7 +851,7 @@
|
|
|
851
851
|
"isEntry": true,
|
|
852
852
|
"dynamicImports": [
|
|
853
853
|
"telemetry-client.ts",
|
|
854
|
-
"_app-
|
|
854
|
+
"_app-4px1DWHV.js"
|
|
855
855
|
]
|
|
856
856
|
},
|
|
857
857
|
"style.css": {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Zr=Object.defineProperty;var Qr=(e,t,i)=>t in e?Zr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var V=(e,t,i)=>Qr(e,typeof t!="symbol"?t+"":t,i);import{b as en,a as Lt,H as cs,r as Pt,j as lt,l as tt,B as tn}from"./app-
|
|
1
|
+
var Zr=Object.defineProperty;var Qr=(e,t,i)=>t in e?Zr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var V=(e,t,i)=>Qr(e,typeof t!="symbol"?t+"":t,i);import{b as en,a as Lt,H as cs,r as Pt,j as lt,l as tt,B as tn}from"./app-4px1DWHV.js";import{d as sn}from"./app.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="94e921c5-5f1b-46d8-97a2-921f61ed502e",e._sentryDebugIdIdentifier="sentry-dbid-94e921c5-5f1b-46d8-97a2-921f61ed502e")}catch{}})();/**
|
|
2
2
|
* Copyright (c) 2014-2024 The xterm.js authors. All rights reserved.
|
|
3
3
|
* @license MIT
|
|
4
4
|
*
|