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
|
||||
|
||||
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.
|
||||
|
||||
@@ -122,7 +122,7 @@ A useful prompt for AI agents:
|
||||
|
||||
```text
|
||||
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.
|
||||
Validate with /pi-web-plugins/manifest.json and explain reload/debug steps.
|
||||
Do not modify PI WEB itself.
|
||||
|
||||
+10
-10
@@ -9,7 +9,7 @@
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:site_name" content="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:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
@@ -37,11 +37,11 @@
|
||||
<a class="brand" href="/" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="/remote-first.html">Remote-first</a>
|
||||
<a href="/machines.html">Fleet</a>
|
||||
<a href="/install.html">Install</a>
|
||||
<a href="/plugins.html">Plugins</a>
|
||||
<a href="/faq.html">FAQ</a>
|
||||
<a href="/remote-first">Remote-first</a>
|
||||
<a href="/machines">Fleet</a>
|
||||
<a href="/install">Install</a>
|
||||
<a href="/plugins">Plugins</a>
|
||||
<a href="/faq">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<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">
|
||||
<span>PI WEB · remote control for persistent Pi Coding Agent sessions.</span>
|
||||
<div class="footer-links">
|
||||
<a href="/machines.html">Fleet</a>
|
||||
<a href="/install.html">Install</a>
|
||||
<a href="/plugins.html">Plugins</a>
|
||||
<a href="/faq.html">FAQ</a>
|
||||
<a href="/machines">Fleet</a>
|
||||
<a href="/install">Install</a>
|
||||
<a href="/plugins">Plugins</a>
|
||||
<a href="/faq">FAQ</a>
|
||||
<a href="https://www.npmjs.com/package/@jmfederico/pi-web">npm</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+13
-13
@@ -8,7 +8,7 @@
|
||||
name="description"
|
||||
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:site_name" content="PI WEB" />
|
||||
<meta property="og:title" content="PI WEB FAQ — Pi web UI troubleshooting" />
|
||||
@@ -16,7 +16,7 @@
|
||||
property="og:description"
|
||||
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:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
@@ -47,11 +47,11 @@
|
||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html" aria-current="page">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq" aria-current="page">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<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>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>
|
||||
<p><a href="machines.html">Read the fleet guide →</a></p>
|
||||
<p><a href="machines">Read the fleet guide →</a></p>
|
||||
</article>
|
||||
|
||||
<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
|
||||
<code>$PI_WEB_DATA_DIR/plugins</code> instead.
|
||||
</p>
|
||||
<p><a href="plugins.html">Read the plugin guide →</a></p>
|
||||
<p><a href="plugins">Read the plugin guide →</a></p>
|
||||
</article>
|
||||
|
||||
<article id="sessions-stop" class="faq-item">
|
||||
@@ -302,10 +302,10 @@
|
||||
<span>PI WEB FAQ</span>
|
||||
<div class="footer-links">
|
||||
<a href="./">Home</a>
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="https://github.com/jmfederico/pi-web/issues">Issues</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+17
-17
@@ -63,11 +63,11 @@
|
||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||
@@ -115,7 +115,7 @@
|
||||
</p>
|
||||
<div class="hero-actions">
|
||||
<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 class="hero-stats" aria-label="Highlights">
|
||||
<div class="stat"><strong>Persistent</strong><span>sessions survive browser disconnects</span></div>
|
||||
@@ -217,7 +217,7 @@
|
||||
</article>
|
||||
</div>
|
||||
<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>
|
||||
</section>
|
||||
@@ -280,8 +280,8 @@
|
||||
<li>Open the local URL, or tunnel it from a remote machine.</li>
|
||||
</ol>
|
||||
<div class="doc-actions">
|
||||
<a class="button primary" href="install.html">Complete installation guide</a>
|
||||
<a class="button" href="faq.html">Troubleshooting FAQ</a>
|
||||
<a class="button primary" href="install">Complete installation guide</a>
|
||||
<a class="button" href="faq">Troubleshooting FAQ</a>
|
||||
</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
|
||||
installer when systemd is enabled; otherwise use the manual run path.
|
||||
</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 class="doc-card">
|
||||
<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
|
||||
restarting the session daemon.
|
||||
</p>
|
||||
<a href="plugins.html">Build a plugin →</a>
|
||||
<a href="plugins">Build a plugin →</a>
|
||||
</article>
|
||||
<article class="doc-card">
|
||||
<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
|
||||
login shell startup files and run the doctor command.
|
||||
</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>
|
||||
</div>
|
||||
</section>
|
||||
@@ -333,11 +333,11 @@
|
||||
<div class="container footer-inner">
|
||||
<span>PI WEB · web UI for persistent Pi Coding Agent sessions.</span>
|
||||
<div class="footer-links">
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
<a href="https://www.npmjs.com/package/@jmfederico/pi-web">npm</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+12
-12
@@ -8,7 +8,7 @@
|
||||
name="description"
|
||||
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:site_name" content="PI WEB" />
|
||||
<meta property="og:title" content="Install PI WEB — web UI for Pi Coding Agent" />
|
||||
@@ -16,7 +16,7 @@
|
||||
property="og:description"
|
||||
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:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
@@ -47,11 +47,11 @@
|
||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html" aria-current="page">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install" aria-current="page">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<a class="github-link" href="https://github.com/jmfederico/pi-web" aria-label="PI WEB on GitHub">
|
||||
@@ -232,7 +232,7 @@
|
||||
remote runtime.
|
||||
</p>
|
||||
<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>
|
||||
</section>
|
||||
|
||||
@@ -332,10 +332,10 @@
|
||||
<span>PI WEB docs</span>
|
||||
<div class="footer-links">
|
||||
<a href="./">Home</a>
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+14
-14
@@ -8,7 +8,7 @@
|
||||
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."
|
||||
/>
|
||||
<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:site_name" content="PI WEB" />
|
||||
<meta property="og:title" content="PI WEB fleet — remote Pi web UI machines" />
|
||||
@@ -16,7 +16,7 @@
|
||||
property="og:description"
|
||||
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:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
@@ -47,11 +47,11 @@
|
||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html" aria-current="page">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines" aria-current="page">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<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
|
||||
comfortable loading in the browser.
|
||||
</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 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>
|
||||
</ul>
|
||||
<div class="doc-actions">
|
||||
<a class="button primary" href="install.html#remote-access">Review remote access setup</a>
|
||||
<a class="button" href="faq.html#remote-machines">Read remote machine FAQ</a>
|
||||
<a class="button primary" href="install#remote-access">Review remote access setup</a>
|
||||
<a class="button" href="faq#remote-machines">Read remote machine FAQ</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@@ -287,10 +287,10 @@ PI WEB gateway you opened
|
||||
<span>PI WEB fleet</span>
|
||||
<div class="footer-links">
|
||||
<a href="./">Home</a>
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+14
-14
@@ -8,7 +8,7 @@
|
||||
name="description"
|
||||
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:site_name" content="PI WEB" />
|
||||
<meta property="og:title" content="PI WEB plugins — extend the Pi web UI" />
|
||||
@@ -16,7 +16,7 @@
|
||||
property="og:description"
|
||||
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:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
@@ -47,11 +47,11 @@
|
||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html" aria-current="page">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins" aria-current="page">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<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.
|
||||
Goal: <describe the UI behavior>.
|
||||
Before coding, read the PI WEB plugin docs:
|
||||
https://pi-web.dev/plugins.html
|
||||
https://pi-web.dev/plugins
|
||||
Full API reference:
|
||||
https://pi-web.dev/plugins.md
|
||||
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>
|
||||
<pre id="plugin-improve-prompt"><code>Improve the PI WEB plugin at <path>.
|
||||
Before coding, read the PI WEB plugin docs:
|
||||
https://pi-web.dev/plugins.html
|
||||
https://pi-web.dev/plugins
|
||||
Full API reference:
|
||||
https://pi-web.dev/plugins.md
|
||||
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">
|
||||
<h2>Remote machine plugins</h2>
|
||||
<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,
|
||||
workspace panels, and workspace labels only appear while that machine is selected.
|
||||
</p>
|
||||
@@ -427,10 +427,10 @@ After editing, check the manifest endpoint and browser-console failure cases.</c
|
||||
<span>PI WEB plugin docs</span>
|
||||
<div class="footer-links">
|
||||
<a href="./">Home</a>
|
||||
<a href="remote-first.html">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="faq">FAQ</a>
|
||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+3
-3
@@ -42,7 +42,7 @@ Copy-paste prompt for creating a plugin:
|
||||
Build a PI WEB plugin for this project.
|
||||
Goal: <describe the UI behavior>.
|
||||
Before coding, read the PI WEB plugin docs:
|
||||
https://pi-web.dev/plugins.html
|
||||
https://pi-web.dev/plugins
|
||||
Full API reference:
|
||||
https://pi-web.dev/plugins.md
|
||||
Create it as a local plugin under ~/.pi-web/plugins/<plugin-id>.
|
||||
@@ -56,7 +56,7 @@ Copy-paste prompt for modifying a plugin:
|
||||
```text
|
||||
Improve the PI WEB plugin at <path>.
|
||||
Before coding, read the PI WEB plugin docs:
|
||||
https://pi-web.dev/plugins.html
|
||||
https://pi-web.dev/plugins
|
||||
Full API reference:
|
||||
https://pi-web.dev/plugins.md
|
||||
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
|
||||
|
||||
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;
|
||||
- plugin file and terminal helpers run against that machine;
|
||||
|
||||
+13
-13
@@ -8,7 +8,7 @@
|
||||
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."
|
||||
/>
|
||||
<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:site_name" content="PI WEB" />
|
||||
<meta property="og:title" content="Remote-first Pi web UI — PI WEB" />
|
||||
@@ -16,7 +16,7 @@
|
||||
property="og:description"
|
||||
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:alt" content="PI WEB browser UI for persistent Pi Coding Agent sessions" />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
@@ -47,11 +47,11 @@
|
||||
<a class="brand" href="./" aria-label="PI WEB home">PI WEB</a>
|
||||
<div class="nav-links">
|
||||
<div class="nav-pages">
|
||||
<a href="remote-first.html" aria-current="page">Remote-first</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="remote-first" aria-current="page">Remote-first</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
</div>
|
||||
<div class="nav-actions">
|
||||
<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.
|
||||
</div>
|
||||
<div class="doc-actions">
|
||||
<a class="button primary" href="install.html">Install PI WEB</a>
|
||||
<a class="button" href="faq.html#laptop-or-server">Laptop or server FAQ</a>
|
||||
<a class="button primary" href="install">Install PI WEB</a>
|
||||
<a class="button" href="faq#laptop-or-server">Laptop or server FAQ</a>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
@@ -204,10 +204,10 @@
|
||||
<span>PI WEB · remote-first control for persistent AI agents.</span>
|
||||
<div class="footer-links">
|
||||
<a href="./">Home</a>
|
||||
<a href="machines.html">Fleet</a>
|
||||
<a href="install.html">Install</a>
|
||||
<a href="plugins.html">Plugins</a>
|
||||
<a href="faq.html">FAQ</a>
|
||||
<a href="machines">Fleet</a>
|
||||
<a href="install">Install</a>
|
||||
<a href="plugins">Plugins</a>
|
||||
<a href="faq">FAQ</a>
|
||||
<a href="https://github.com/jmfederico/pi-web">GitHub</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+5
-5
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<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/machines.html</loc></url>
|
||||
<url><loc>https://pi-web.dev/install.html</loc></url>
|
||||
<url><loc>https://pi-web.dev/plugins.html</loc></url>
|
||||
<url><loc>https://pi-web.dev/faq.html</loc></url>
|
||||
<url><loc>https://pi-web.dev/remote-first</loc></url>
|
||||
<url><loc>https://pi-web.dev/machines</loc></url>
|
||||
<url><loc>https://pi-web.dev/install</loc></url>
|
||||
<url><loc>https://pi-web.dev/plugins</loc></url>
|
||||
<url><loc>https://pi-web.dev/faq</loc></url>
|
||||
</urlset>
|
||||
|
||||
+29
-25
@@ -19,7 +19,9 @@ const contentTypes: Record<string, string> = {
|
||||
".md": "text/markdown; charset=utf-8",
|
||||
".png": "image/png",
|
||||
".svg": "image/svg+xml",
|
||||
".txt": "text/plain; charset=utf-8",
|
||||
".webm": "video/webm",
|
||||
".xml": "application/xml; charset=utf-8",
|
||||
};
|
||||
|
||||
type MiddlewareNext = (error?: unknown) => void;
|
||||
@@ -45,33 +47,35 @@ async function serveDevDocs(request: IncomingMessage, response: ServerResponse,
|
||||
|
||||
const relativePath = decodeURIComponent(url.pathname.slice(docsPrefix.length + 1)) || "index.html";
|
||||
const requestedPath = relativePath.endsWith("/") ? join(relativePath, "index.html") : relativePath;
|
||||
const filePath = resolve(docsRoot, requestedPath);
|
||||
if (filePath !== docsRoot && !filePath.startsWith(`${docsRoot}${sep}`)) {
|
||||
response.statusCode = 403;
|
||||
response.end("Forbidden");
|
||||
return;
|
||||
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}`)) {
|
||||
response.statusCode = 403;
|
||||
response.end("Forbidden");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
const fileStat = await stat(filePath);
|
||||
if (!fileStat.isFile()) continue;
|
||||
|
||||
response.statusCode = 200;
|
||||
response.setHeader("Content-Type", contentTypes[extname(filePath)] ?? "application/octet-stream");
|
||||
response.setHeader("Cache-Control", "no-store");
|
||||
createReadStream(filePath).pipe(response);
|
||||
return;
|
||||
} catch (error) {
|
||||
const code = error instanceof Error && "code" in error ? error.code : undefined;
|
||||
if (code === "ENOENT") continue;
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
const fileStat = await stat(filePath);
|
||||
if (!fileStat.isFile()) {
|
||||
response.statusCode = 404;
|
||||
response.end("Not found");
|
||||
return;
|
||||
}
|
||||
response.statusCode = 200;
|
||||
response.setHeader("Content-Type", contentTypes[extname(filePath)] ?? "application/octet-stream");
|
||||
response.setHeader("Cache-Control", "no-store");
|
||||
createReadStream(filePath).pipe(response);
|
||||
} catch (error) {
|
||||
const code = error instanceof Error && "code" in error ? error.code : undefined;
|
||||
if (code === "ENOENT") {
|
||||
response.statusCode = 404;
|
||||
response.end("Not found");
|
||||
return;
|
||||
}
|
||||
next(error);
|
||||
}
|
||||
response.statusCode = 404;
|
||||
response.end("Not found");
|
||||
}
|
||||
|
||||
function devDocsPlugin(): Plugin {
|
||||
|
||||
Reference in New Issue
Block a user