Archived
docs: use extensionless canonical URLs
This commit is contained in:
@@ -108,7 +108,7 @@ PI WEB keeps its own state intentionally small:
|
|||||||
|
|
||||||
## Machine federation
|
## Machine federation
|
||||||
|
|
||||||
The Machines section lets one PI WEB instance act as a gateway to other PI WEB runtimes. Register a remote machine from **Actions → Add Machine** with the remote PI WEB base URL, for example a URL reachable over NetBird, Tailscale, WireGuard, an SSH tunnel, or a trusted reverse proxy. The browser continues talking to the local PI WEB origin; project, workspace, file, git, session, activity, and terminal HTTP/WebSocket traffic is proxied server-to-server. See the [Fleet guide](https://pi-web.dev/machines.html) for setup, trust model, and troubleshooting details.
|
The Machines section lets one PI WEB instance act as a gateway to other PI WEB runtimes. Register a remote machine from **Actions → Add Machine** with the remote PI WEB base URL, for example a URL reachable over NetBird, Tailscale, WireGuard, an SSH tunnel, or a trusted reverse proxy. The browser continues talking to the local PI WEB origin; project, workspace, file, git, session, activity, and terminal HTTP/WebSocket traffic is proxied server-to-server. See the [Fleet guide](https://pi-web.dev/machines) for setup, trust model, and troubleshooting details.
|
||||||
|
|
||||||
Remote model-provider credentials and OAuth state stay on the target machine. API-key provider configuration can be proxied, but OAuth login should be completed by opening the remote PI WEB directly. Register remote machines only when you trust the endpoint and the network path: adding a machine gives this PI WEB server permission to contact that URL with the optional bearer token you configured.
|
Remote model-provider credentials and OAuth state stay on the target machine. API-key provider configuration can be proxied, but OAuth login should be completed by opening the remote PI WEB directly. Register remote machines only when you trust the endpoint and the network path: adding a machine gives this PI WEB server permission to contact that URL with the optional bearer token you configured.
|
||||||
|
|
||||||
@@ -122,7 +122,7 @@ A useful prompt for AI agents:
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
Build a PI WEB plugin for this project. Goal: <describe the UI behavior>.
|
Build a PI WEB plugin for this project. Goal: <describe the UI behavior>.
|
||||||
Before coding, read https://pi-web.dev/plugins.html and https://pi-web.dev/plugins.md.
|
Before coding, read https://pi-web.dev/plugins and https://pi-web.dev/plugins.md.
|
||||||
Create it under ~/.pi-web/plugins/<plugin-id> using the documented PI WEB v1 plugin API.
|
Create it under ~/.pi-web/plugins/<plugin-id> using the documented PI WEB v1 plugin API.
|
||||||
Validate with /pi-web-plugins/manifest.json and explain reload/debug steps.
|
Validate with /pi-web-plugins/manifest.json and explain reload/debug steps.
|
||||||
Do not modify PI WEB itself.
|
Do not modify PI WEB itself.
|
||||||
|
|||||||
+10
-10
@@ -9,7 +9,7 @@
|
|||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="PI WEB" />
|
<meta property="og:site_name" content="PI WEB" />
|
||||||
<meta property="og:title" content="Page not found — PI WEB" />
|
<meta property="og:title" content="Page not found — PI WEB" />
|
||||||
<meta property="og:url" content="https://pi-web.dev/404.html" />
|
<meta property="og:url" content="https://pi-web.dev/404" />
|
||||||
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
||||||
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
@@ -37,11 +37,11 @@
|
|||||||
<a class="brand" href="/" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="/" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="/remote-first.html">Remote-first</a>
|
<a href="/remote-first">Remote-first</a>
|
||||||
<a href="/machines.html">Fleet</a>
|
<a href="/machines">Fleet</a>
|
||||||
<a href="/install.html">Install</a>
|
<a href="/install">Install</a>
|
||||||
<a href="/plugins.html">Plugins</a>
|
<a href="/plugins">Plugins</a>
|
||||||
<a href="/faq.html">FAQ</a>
|
<a href="/faq">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -88,10 +88,10 @@
|
|||||||
<div class="container footer-inner">
|
<div class="container footer-inner">
|
||||||
<span>PI WEB · remote control for persistent Pi Coding Agent sessions.</span>
|
<span>PI WEB · remote control for persistent Pi Coding Agent sessions.</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="/machines.html">Fleet</a>
|
<a href="/machines">Fleet</a>
|
||||||
<a href="/install.html">Install</a>
|
<a href="/install">Install</a>
|
||||||
<a href="/plugins.html">Plugins</a>
|
<a href="/plugins">Plugins</a>
|
||||||
<a href="/faq.html">FAQ</a>
|
<a href="/faq">FAQ</a>
|
||||||
<a href="https://www.npmjs.com/package/@jmfederico/pi-web">npm</a>
|
<a href="https://www.npmjs.com/package/@jmfederico/pi-web">npm</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+13
-13
@@ -8,7 +8,7 @@
|
|||||||
name="description"
|
name="description"
|
||||||
content="Troubleshoot PI WEB, the web UI for Pi Coding Agent, including install, PATH, services, remote access, and runtime issues."
|
content="Troubleshoot PI WEB, the web UI for Pi Coding Agent, including install, PATH, services, remote access, and runtime issues."
|
||||||
/>
|
/>
|
||||||
<link rel="canonical" href="https://pi-web.dev/faq.html" />
|
<link rel="canonical" href="https://pi-web.dev/faq" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="PI WEB" />
|
<meta property="og:site_name" content="PI WEB" />
|
||||||
<meta property="og:title" content="PI WEB FAQ — Pi web UI troubleshooting" />
|
<meta property="og:title" content="PI WEB FAQ — Pi web UI troubleshooting" />
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
property="og:description"
|
property="og:description"
|
||||||
content="Fix common PI WEB install, service, PATH, remote access, and session issues."
|
content="Fix common PI WEB install, service, PATH, remote access, and session issues."
|
||||||
/>
|
/>
|
||||||
<meta property="og:url" content="https://pi-web.dev/faq.html" />
|
<meta property="og:url" content="https://pi-web.dev/faq" />
|
||||||
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
||||||
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html" aria-current="page">FAQ</a>
|
<a href="faq" aria-current="page">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -238,7 +238,7 @@
|
|||||||
<li>Remote plugins are trusted browser code and only appear while that machine is selected.</li>
|
<li>Remote plugins are trusted browser code and only appear while that machine is selected.</li>
|
||||||
<li>If the remote reports offline, check that the gateway server can reach the remote URL and try <strong>Actions → Refresh Selected Machine</strong>.</li>
|
<li>If the remote reports offline, check that the gateway server can reach the remote URL and try <strong>Actions → Refresh Selected Machine</strong>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p><a href="machines.html">Read the fleet guide →</a></p>
|
<p><a href="machines">Read the fleet guide →</a></p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article id="laptop-or-server" class="faq-item">
|
<article id="laptop-or-server" class="faq-item">
|
||||||
@@ -262,7 +262,7 @@
|
|||||||
development folder there. Reload the browser tab after edits. If <code>PI_WEB_DATA_DIR</code> is set, use
|
development folder there. Reload the browser tab after edits. If <code>PI_WEB_DATA_DIR</code> is set, use
|
||||||
<code>$PI_WEB_DATA_DIR/plugins</code> instead.
|
<code>$PI_WEB_DATA_DIR/plugins</code> instead.
|
||||||
</p>
|
</p>
|
||||||
<p><a href="plugins.html">Read the plugin guide →</a></p>
|
<p><a href="plugins">Read the plugin guide →</a></p>
|
||||||
</article>
|
</article>
|
||||||
|
|
||||||
<article id="sessions-stop" class="faq-item">
|
<article id="sessions-stop" class="faq-item">
|
||||||
@@ -302,10 +302,10 @@
|
|||||||
<span>PI WEB FAQ</span>
|
<span>PI WEB FAQ</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="./">Home</a>
|
<a href="./">Home</a>
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="https://github.com/jmfederico/pi-web/issues">Issues</a>
|
<a href="https://github.com/jmfederico/pi-web/issues">Issues</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+17
-17
@@ -63,11 +63,11 @@
|
|||||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
</p>
|
</p>
|
||||||
<div class="hero-actions">
|
<div class="hero-actions">
|
||||||
<a class="button primary" href="#quick-install">Install in minutes</a>
|
<a class="button primary" href="#quick-install">Install in minutes</a>
|
||||||
<a class="button" href="install.html">Read the docs</a>
|
<a class="button" href="install">Read the docs</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="hero-stats" aria-label="Highlights">
|
<div class="hero-stats" aria-label="Highlights">
|
||||||
<div class="stat"><strong>Persistent</strong><span>sessions survive browser disconnects</span></div>
|
<div class="stat"><strong>Persistent</strong><span>sessions survive browser disconnects</span></div>
|
||||||
@@ -217,7 +217,7 @@
|
|||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
<div class="doc-actions">
|
<div class="doc-actions">
|
||||||
<a class="button" href="remote-first.html">Read the remote-first philosophy</a>
|
<a class="button" href="remote-first">Read the remote-first philosophy</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -280,8 +280,8 @@
|
|||||||
<li>Open the local URL, or tunnel it from a remote machine.</li>
|
<li>Open the local URL, or tunnel it from a remote machine.</li>
|
||||||
</ol>
|
</ol>
|
||||||
<div class="doc-actions">
|
<div class="doc-actions">
|
||||||
<a class="button primary" href="install.html">Complete installation guide</a>
|
<a class="button primary" href="install">Complete installation guide</a>
|
||||||
<a class="button" href="faq.html">Troubleshooting FAQ</a>
|
<a class="button" href="faq">Troubleshooting FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -307,7 +307,7 @@
|
|||||||
Use <code>pi-web install</code> where a supported per-user service manager is available. WSL works with the
|
Use <code>pi-web install</code> where a supported per-user service manager is available. WSL works with the
|
||||||
installer when systemd is enabled; otherwise use the manual run path.
|
installer when systemd is enabled; otherwise use the manual run path.
|
||||||
</p>
|
</p>
|
||||||
<a href="faq.html#is-this-linux-only">Read compatibility notes →</a>
|
<a href="faq#is-this-linux-only">Read compatibility notes →</a>
|
||||||
</article>
|
</article>
|
||||||
<article class="doc-card">
|
<article class="doc-card">
|
||||||
<h3>Local UI plugins?</h3>
|
<h3>Local UI plugins?</h3>
|
||||||
@@ -315,7 +315,7 @@
|
|||||||
Ask AI agents to add trusted local UI plugins from <code>~/.pi-web/plugins</code> without rebuilding or
|
Ask AI agents to add trusted local UI plugins from <code>~/.pi-web/plugins</code> without rebuilding or
|
||||||
restarting the session daemon.
|
restarting the session daemon.
|
||||||
</p>
|
</p>
|
||||||
<a href="plugins.html">Build a plugin →</a>
|
<a href="plugins">Build a plugin →</a>
|
||||||
</article>
|
</article>
|
||||||
<article class="doc-card">
|
<article class="doc-card">
|
||||||
<h3>Node or tools not found?</h3>
|
<h3>Node or tools not found?</h3>
|
||||||
@@ -323,7 +323,7 @@
|
|||||||
Services run login shells. If tools work in your interactive terminal but not in PI WEB, fix PATH in your
|
Services run login shells. If tools work in your interactive terminal but not in PI WEB, fix PATH in your
|
||||||
login shell startup files and run the doctor command.
|
login shell startup files and run the doctor command.
|
||||||
</p>
|
</p>
|
||||||
<a href="faq.html#tools-are-not-found">Fix PATH issues →</a>
|
<a href="faq#tools-are-not-found">Fix PATH issues →</a>
|
||||||
</article>
|
</article>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
@@ -333,11 +333,11 @@
|
|||||||
<div class="container footer-inner">
|
<div class="container footer-inner">
|
||||||
<span>PI WEB · web UI for persistent Pi Coding Agent sessions.</span>
|
<span>PI WEB · web UI for persistent Pi Coding Agent sessions.</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
<a href="https://www.npmjs.com/package/@jmfederico/pi-web">npm</a>
|
<a href="https://www.npmjs.com/package/@jmfederico/pi-web">npm</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+12
-12
@@ -8,7 +8,7 @@
|
|||||||
name="description"
|
name="description"
|
||||||
content="Install PI WEB, the web UI for Pi Coding Agent, on Linux, macOS, or Windows WSL with persistent user services."
|
content="Install PI WEB, the web UI for Pi Coding Agent, on Linux, macOS, or Windows WSL with persistent user services."
|
||||||
/>
|
/>
|
||||||
<link rel="canonical" href="https://pi-web.dev/install.html" />
|
<link rel="canonical" href="https://pi-web.dev/install" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="PI WEB" />
|
<meta property="og:site_name" content="PI WEB" />
|
||||||
<meta property="og:title" content="Install PI WEB — web UI for Pi Coding Agent" />
|
<meta property="og:title" content="Install PI WEB — web UI for Pi Coding Agent" />
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
property="og:description"
|
property="og:description"
|
||||||
content="Install PI WEB with npm, Pi, or manual service commands and keep Pi Coding Agent sessions running."
|
content="Install PI WEB with npm, Pi, or manual service commands and keep Pi Coding Agent sessions running."
|
||||||
/>
|
/>
|
||||||
<meta property="og:url" content="https://pi-web.dev/install.html" />
|
<meta property="og:url" content="https://pi-web.dev/install" />
|
||||||
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
||||||
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html" aria-current="page">Install</a>
|
<a href="install" aria-current="page">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -232,7 +232,7 @@
|
|||||||
remote runtime.
|
remote runtime.
|
||||||
</p>
|
</p>
|
||||||
<div class="doc-actions">
|
<div class="doc-actions">
|
||||||
<a class="button" href="machines.html">Read the fleet guide</a>
|
<a class="button" href="machines">Read the fleet guide</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
@@ -332,10 +332,10 @@
|
|||||||
<span>PI WEB docs</span>
|
<span>PI WEB docs</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="./">Home</a>
|
<a href="./">Home</a>
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+14
-14
@@ -8,7 +8,7 @@
|
|||||||
name="description"
|
name="description"
|
||||||
content="Connect trusted PI WEB runtimes through machine federation so one web UI can supervise local and remote projects, sessions, files, git state, terminals, and plugins."
|
content="Connect trusted PI WEB runtimes through machine federation so one web UI can supervise local and remote projects, sessions, files, git state, terminals, and plugins."
|
||||||
/>
|
/>
|
||||||
<link rel="canonical" href="https://pi-web.dev/machines.html" />
|
<link rel="canonical" href="https://pi-web.dev/machines" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="PI WEB" />
|
<meta property="og:site_name" content="PI WEB" />
|
||||||
<meta property="og:title" content="PI WEB fleet — remote Pi web UI machines" />
|
<meta property="og:title" content="PI WEB fleet — remote Pi web UI machines" />
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
property="og:description"
|
property="og:description"
|
||||||
content="Use one PI WEB instance to reach trusted local and remote Pi Coding Agent machines."
|
content="Use one PI WEB instance to reach trusted local and remote Pi Coding Agent machines."
|
||||||
/>
|
/>
|
||||||
<meta property="og:url" content="https://pi-web.dev/machines.html" />
|
<meta property="og:url" content="https://pi-web.dev/machines" />
|
||||||
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
||||||
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html" aria-current="page">Fleet</a>
|
<a href="machines" aria-current="page">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -244,7 +244,7 @@ PI WEB gateway you opened
|
|||||||
Remote plugins are still trusted browser-side code. Only federate machines whose PI WEB plugins you are
|
Remote plugins are still trusted browser-side code. Only federate machines whose PI WEB plugins you are
|
||||||
comfortable loading in the browser.
|
comfortable loading in the browser.
|
||||||
</p>
|
</p>
|
||||||
<p><a href="plugins.html#remote-machine-plugins">Read the remote machine plugin notes →</a></p>
|
<p><a href="plugins#remote-machine-plugins">Read the remote machine plugin notes →</a></p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="trust-model">
|
<section id="trust-model">
|
||||||
@@ -273,8 +273,8 @@ PI WEB gateway you opened
|
|||||||
<li>Check gateway logs with <code>pi-web logs</code> for proxy timeouts or upstream errors.</li>
|
<li>Check gateway logs with <code>pi-web logs</code> for proxy timeouts or upstream errors.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="doc-actions">
|
<div class="doc-actions">
|
||||||
<a class="button primary" href="install.html#remote-access">Review remote access setup</a>
|
<a class="button primary" href="install#remote-access">Review remote access setup</a>
|
||||||
<a class="button" href="faq.html#remote-machines">Read remote machine FAQ</a>
|
<a class="button" href="faq#remote-machines">Read remote machine FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@@ -287,10 +287,10 @@ PI WEB gateway you opened
|
|||||||
<span>PI WEB fleet</span>
|
<span>PI WEB fleet</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="./">Home</a>
|
<a href="./">Home</a>
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+14
-14
@@ -8,7 +8,7 @@
|
|||||||
name="description"
|
name="description"
|
||||||
content="Use built-in PI WEB plugins and develop trusted local UI plugins for the Pi Coding Agent web UI."
|
content="Use built-in PI WEB plugins and develop trusted local UI plugins for the Pi Coding Agent web UI."
|
||||||
/>
|
/>
|
||||||
<link rel="canonical" href="https://pi-web.dev/plugins.html" />
|
<link rel="canonical" href="https://pi-web.dev/plugins" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="PI WEB" />
|
<meta property="og:site_name" content="PI WEB" />
|
||||||
<meta property="og:title" content="PI WEB plugins — extend the Pi web UI" />
|
<meta property="og:title" content="PI WEB plugins — extend the Pi web UI" />
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
property="og:description"
|
property="og:description"
|
||||||
content="Customize PI WEB with trusted browser-side plugins for actions, workspace panels, labels, terminals, and files."
|
content="Customize PI WEB with trusted browser-side plugins for actions, workspace panels, labels, terminals, and files."
|
||||||
/>
|
/>
|
||||||
<meta property="og:url" content="https://pi-web.dev/plugins.html" />
|
<meta property="og:url" content="https://pi-web.dev/plugins" />
|
||||||
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
||||||
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html" aria-current="page">Plugins</a>
|
<a href="plugins" aria-current="page">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -144,7 +144,7 @@
|
|||||||
<pre id="plugin-create-prompt"><code>Build a PI WEB plugin for this project.
|
<pre id="plugin-create-prompt"><code>Build a PI WEB plugin for this project.
|
||||||
Goal: <describe the UI behavior>.
|
Goal: <describe the UI behavior>.
|
||||||
Before coding, read the PI WEB plugin docs:
|
Before coding, read the PI WEB plugin docs:
|
||||||
https://pi-web.dev/plugins.html
|
https://pi-web.dev/plugins
|
||||||
Full API reference:
|
Full API reference:
|
||||||
https://pi-web.dev/plugins.md
|
https://pi-web.dev/plugins.md
|
||||||
Create it as a local plugin under ~/.pi-web/plugins/<plugin-id>.
|
Create it as a local plugin under ~/.pi-web/plugins/<plugin-id>.
|
||||||
@@ -159,7 +159,7 @@ Do not modify PI WEB itself.</code></pre>
|
|||||||
</div>
|
</div>
|
||||||
<pre id="plugin-improve-prompt"><code>Improve the PI WEB plugin at <path>.
|
<pre id="plugin-improve-prompt"><code>Improve the PI WEB plugin at <path>.
|
||||||
Before coding, read the PI WEB plugin docs:
|
Before coding, read the PI WEB plugin docs:
|
||||||
https://pi-web.dev/plugins.html
|
https://pi-web.dev/plugins
|
||||||
Full API reference:
|
Full API reference:
|
||||||
https://pi-web.dev/plugins.md
|
https://pi-web.dev/plugins.md
|
||||||
Keep the plugin compatible with the documented v1 API.
|
Keep the plugin compatible with the documented v1 API.
|
||||||
@@ -322,7 +322,7 @@ After editing, check the manifest endpoint and browser-console failure cases.</c
|
|||||||
<section id="remote-machine-plugins">
|
<section id="remote-machine-plugins">
|
||||||
<h2>Remote machine plugins</h2>
|
<h2>Remote machine plugins</h2>
|
||||||
<p>
|
<p>
|
||||||
With <a href="machines.html">machine federation</a>, PI WEB also loads discovered plugins from the selected
|
With <a href="machines">machine federation</a>, PI WEB also loads discovered plugins from the selected
|
||||||
remote machine. Remote plugins are trusted browser-side code like local plugins, but their actions,
|
remote machine. Remote plugins are trusted browser-side code like local plugins, but their actions,
|
||||||
workspace panels, and workspace labels only appear while that machine is selected.
|
workspace panels, and workspace labels only appear while that machine is selected.
|
||||||
</p>
|
</p>
|
||||||
@@ -427,10 +427,10 @@ After editing, check the manifest endpoint and browser-console failure cases.</c
|
|||||||
<span>PI WEB plugin docs</span>
|
<span>PI WEB plugin docs</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="./">Home</a>
|
<a href="./">Home</a>
|
||||||
<a href="remote-first.html">Remote-first</a>
|
<a href="remote-first">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+3
-3
@@ -42,7 +42,7 @@ Copy-paste prompt for creating a plugin:
|
|||||||
Build a PI WEB plugin for this project.
|
Build a PI WEB plugin for this project.
|
||||||
Goal: <describe the UI behavior>.
|
Goal: <describe the UI behavior>.
|
||||||
Before coding, read the PI WEB plugin docs:
|
Before coding, read the PI WEB plugin docs:
|
||||||
https://pi-web.dev/plugins.html
|
https://pi-web.dev/plugins
|
||||||
Full API reference:
|
Full API reference:
|
||||||
https://pi-web.dev/plugins.md
|
https://pi-web.dev/plugins.md
|
||||||
Create it as a local plugin under ~/.pi-web/plugins/<plugin-id>.
|
Create it as a local plugin under ~/.pi-web/plugins/<plugin-id>.
|
||||||
@@ -56,7 +56,7 @@ Copy-paste prompt for modifying a plugin:
|
|||||||
```text
|
```text
|
||||||
Improve the PI WEB plugin at <path>.
|
Improve the PI WEB plugin at <path>.
|
||||||
Before coding, read the PI WEB plugin docs:
|
Before coding, read the PI WEB plugin docs:
|
||||||
https://pi-web.dev/plugins.html
|
https://pi-web.dev/plugins
|
||||||
Full API reference:
|
Full API reference:
|
||||||
https://pi-web.dev/plugins.md
|
https://pi-web.dev/plugins.md
|
||||||
Keep the plugin compatible with the documented v1 API.
|
Keep the plugin compatible with the documented v1 API.
|
||||||
@@ -131,7 +131,7 @@ Reload the PI WEB browser tab. PI WEB serves plugin modules with an mtime-based
|
|||||||
|
|
||||||
## Remote machine plugins
|
## Remote machine plugins
|
||||||
|
|
||||||
When [machine federation](https://pi-web.dev/machines.html) is enabled, PI WEB also loads discovered plugins from the selected remote machine. Remote plugins are trusted browser-side code like local plugins, but their contributions are machine-scoped:
|
When [machine federation](https://pi-web.dev/machines) is enabled, PI WEB also loads discovered plugins from the selected remote machine. Remote plugins are trusted browser-side code like local plugins, but their contributions are machine-scoped:
|
||||||
|
|
||||||
- actions, workspace panels, and workspace labels only appear while that machine is selected;
|
- actions, workspace panels, and workspace labels only appear while that machine is selected;
|
||||||
- plugin file and terminal helpers run against that machine;
|
- plugin file and terminal helpers run against that machine;
|
||||||
|
|||||||
+13
-13
@@ -8,7 +8,7 @@
|
|||||||
name="description"
|
name="description"
|
||||||
content="Why PI WEB keeps Pi Coding Agent sessions running outside your device while any browser becomes a web UI for supervision and review."
|
content="Why PI WEB keeps Pi Coding Agent sessions running outside your device while any browser becomes a web UI for supervision and review."
|
||||||
/>
|
/>
|
||||||
<link rel="canonical" href="https://pi-web.dev/remote-first.html" />
|
<link rel="canonical" href="https://pi-web.dev/remote-first" />
|
||||||
<meta property="og:type" content="website" />
|
<meta property="og:type" content="website" />
|
||||||
<meta property="og:site_name" content="PI WEB" />
|
<meta property="og:site_name" content="PI WEB" />
|
||||||
<meta property="og:title" content="Remote-first Pi web UI — PI WEB" />
|
<meta property="og:title" content="Remote-first Pi web UI — PI WEB" />
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
property="og:description"
|
property="og:description"
|
||||||
content="Run Pi Coding Agent where work can persist, then supervise sessions from any device with PI WEB."
|
content="Run Pi Coding Agent where work can persist, then supervise sessions from any device with PI WEB."
|
||||||
/>
|
/>
|
||||||
<meta property="og:url" content="https://pi-web.dev/remote-first.html" />
|
<meta property="og:url" content="https://pi-web.dev/remote-first" />
|
||||||
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
<meta property="og:image" content="https://pi-web.dev/assets/pi-web-banner.png" />
|
||||||
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
<meta property="og:image:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||||
<meta name="twitter:card" content="summary_large_image" />
|
<meta name="twitter:card" content="summary_large_image" />
|
||||||
@@ -47,11 +47,11 @@
|
|||||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||||
<div class="nav-links">
|
<div class="nav-links">
|
||||||
<div class="nav-pages">
|
<div class="nav-pages">
|
||||||
<a href="remote-first.html" aria-current="page">Remote-first</a>
|
<a href="remote-first" aria-current="page">Remote-first</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="nav-actions">
|
<div class="nav-actions">
|
||||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||||
@@ -190,8 +190,8 @@
|
|||||||
keep working even when the laptop is gone.
|
keep working even when the laptop is gone.
|
||||||
</div>
|
</div>
|
||||||
<div class="doc-actions">
|
<div class="doc-actions">
|
||||||
<a class="button primary" href="install.html">Install PI WEB</a>
|
<a class="button primary" href="install">Install PI WEB</a>
|
||||||
<a class="button" href="faq.html#laptop-or-server">Laptop or server FAQ</a>
|
<a class="button" href="faq#laptop-or-server">Laptop or server FAQ</a>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
@@ -204,10 +204,10 @@
|
|||||||
<span>PI WEB · remote-first control for persistent AI agents.</span>
|
<span>PI WEB · remote-first control for persistent AI agents.</span>
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="./">Home</a>
|
<a href="./">Home</a>
|
||||||
<a href="machines.html">Fleet</a>
|
<a href="machines">Fleet</a>
|
||||||
<a href="install.html">Install</a>
|
<a href="install">Install</a>
|
||||||
<a href="plugins.html">Plugins</a>
|
<a href="plugins">Plugins</a>
|
||||||
<a href="faq.html">FAQ</a>
|
<a href="faq">FAQ</a>
|
||||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
+5
-5
@@ -1,9 +1,9 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
<url><loc>https://pi-web.dev/</loc></url>
|
<url><loc>https://pi-web.dev/</loc></url>
|
||||||
<url><loc>https://pi-web.dev/remote-first.html</loc></url>
|
<url><loc>https://pi-web.dev/remote-first</loc></url>
|
||||||
<url><loc>https://pi-web.dev/machines.html</loc></url>
|
<url><loc>https://pi-web.dev/machines</loc></url>
|
||||||
<url><loc>https://pi-web.dev/install.html</loc></url>
|
<url><loc>https://pi-web.dev/install</loc></url>
|
||||||
<url><loc>https://pi-web.dev/plugins.html</loc></url>
|
<url><loc>https://pi-web.dev/plugins</loc></url>
|
||||||
<url><loc>https://pi-web.dev/faq.html</loc></url>
|
<url><loc>https://pi-web.dev/faq</loc></url>
|
||||||
</urlset>
|
</urlset>
|
||||||
|
|||||||
+14
-10
@@ -19,7 +19,9 @@ const contentTypes: Record<string, string> = {
|
|||||||
".md": "text/markdown; charset=utf-8",
|
".md": "text/markdown; charset=utf-8",
|
||||||
".png": "image/png",
|
".png": "image/png",
|
||||||
".svg": "image/svg+xml",
|
".svg": "image/svg+xml",
|
||||||
|
".txt": "text/plain; charset=utf-8",
|
||||||
".webm": "video/webm",
|
".webm": "video/webm",
|
||||||
|
".xml": "application/xml; charset=utf-8",
|
||||||
};
|
};
|
||||||
|
|
||||||
type MiddlewareNext = (error?: unknown) => void;
|
type MiddlewareNext = (error?: unknown) => void;
|
||||||
@@ -45,7 +47,10 @@ async function serveDevDocs(request: IncomingMessage, response: ServerResponse,
|
|||||||
|
|
||||||
const relativePath = decodeURIComponent(url.pathname.slice(docsPrefix.length + 1)) || "index.html";
|
const relativePath = decodeURIComponent(url.pathname.slice(docsPrefix.length + 1)) || "index.html";
|
||||||
const requestedPath = relativePath.endsWith("/") ? join(relativePath, "index.html") : relativePath;
|
const requestedPath = relativePath.endsWith("/") ? join(relativePath, "index.html") : relativePath;
|
||||||
const filePath = resolve(docsRoot, requestedPath);
|
const candidatePaths = extname(requestedPath) === "" ? [requestedPath, `${requestedPath}.html`] : [requestedPath];
|
||||||
|
|
||||||
|
for (const candidatePath of candidatePaths) {
|
||||||
|
const filePath = resolve(docsRoot, candidatePath);
|
||||||
if (filePath !== docsRoot && !filePath.startsWith(`${docsRoot}${sep}`)) {
|
if (filePath !== docsRoot && !filePath.startsWith(`${docsRoot}${sep}`)) {
|
||||||
response.statusCode = 403;
|
response.statusCode = 403;
|
||||||
response.end("Forbidden");
|
response.end("Forbidden");
|
||||||
@@ -54,24 +59,23 @@ async function serveDevDocs(request: IncomingMessage, response: ServerResponse,
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const fileStat = await stat(filePath);
|
const fileStat = await stat(filePath);
|
||||||
if (!fileStat.isFile()) {
|
if (!fileStat.isFile()) continue;
|
||||||
response.statusCode = 404;
|
|
||||||
response.end("Not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
response.statusCode = 200;
|
response.statusCode = 200;
|
||||||
response.setHeader("Content-Type", contentTypes[extname(filePath)] ?? "application/octet-stream");
|
response.setHeader("Content-Type", contentTypes[extname(filePath)] ?? "application/octet-stream");
|
||||||
response.setHeader("Cache-Control", "no-store");
|
response.setHeader("Cache-Control", "no-store");
|
||||||
createReadStream(filePath).pipe(response);
|
createReadStream(filePath).pipe(response);
|
||||||
|
return;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const code = error instanceof Error && "code" in error ? error.code : undefined;
|
const code = error instanceof Error && "code" in error ? error.code : undefined;
|
||||||
if (code === "ENOENT") {
|
if (code === "ENOENT") continue;
|
||||||
response.statusCode = 404;
|
next(error);
|
||||||
response.end("Not found");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
next(error);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response.statusCode = 404;
|
||||||
|
response.end("Not found");
|
||||||
}
|
}
|
||||||
|
|
||||||
function devDocsPlugin(): Plugin {
|
function devDocsPlugin(): Plugin {
|
||||||
|
|||||||
Reference in New Issue
Block a user