chore(collab): moved the public relay and share endpoints to my.omp.sh
- Changed `DEFAULT_RELAY_URL` in `@oh-my-pi/pi-wire` from `wss://relay.omp.sh` to `wss://my.omp.sh` and updated the constants, collab-link, and join-command tests asserting the old origin. - Added `DEFAULT_SHARE_URL` (`https://my.omp.sh/s`) to pi-wire with its changelog entry; it shares a changed run with the relay constant and is consumed by the upcoming /share work. - Updated collab-web canonical/OG/twitter URLs in `index.html`, `robots.txt`, `sitemap.xml`, README, and the `local-relay.ts` doc comment to the new domain. - Refreshed the `/collab` entry in the coding-agent changelog to reference the new relay origin.
This commit is contained in:
@@ -27,7 +27,7 @@
|
||||
|
||||
- Updated collab link handling to accept compact `roomId#key` links and relay hosts without explicit scheme when joining or starting sessions
|
||||
- Added `/collab stop` and `/collab status` options to control and inspect active shared sessions
|
||||
- Added `/collab`, `/join`, and `/leave` for live session sharing: the host shares an end-to-end encrypted link (AES-256-GCM key only in the link fragment; the relay sees opaque bytes) and guests render the session natively in their own TUI — streaming text, tool cards, footer state, ctrl+o expansion, `/dump` — and can prompt or interrupt the host's agent. Guest prompts render with an author badge; session-mutating commands stay host-only. Defaults to the public `relay.omp.sh` relay (`collab.relayUrl`); a self-hostable Go relay lives in the pi-www repo as `omp-collab-relay`
|
||||
- Added `/collab`, `/join`, and `/leave` for live session sharing: the host shares an end-to-end encrypted link (AES-256-GCM key only in the link fragment; the relay sees opaque bytes) and guests render the session natively in their own TUI — streaming text, tool cards, footer state, ctrl+o expansion, `/dump` — and can prompt or interrupt the host's agent. Guest prompts render with an author badge; session-mutating commands stay host-only. Defaults to the public `my.omp.sh` relay (`collab.relayUrl`); a self-hostable Go relay lives in the pi-www repo as `omp-collab-relay`
|
||||
- Added `collab.relayUrl` and `collab.displayName` settings plus a `collab` status-line segment showing the participant count (host) or guest role. Guests mirror the host's real model/thinking state into their replica agent and the host's subagent ecosystem end-to-end: the live subagent HUD, the Agent Hub table with live progress, hub chat/kill/revive (routed to the host), and on-demand subagent transcript viewing
|
||||
- Added `omp join <link>` subcommand that launches the interactive TUI and immediately runs `/join <link>`
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ describe("collab link format", () => {
|
||||
});
|
||||
|
||||
it("parses the scheme-less display form of web deep links", () => {
|
||||
const parsed = parseCollabLink(`relay.omp.sh/#${formatCollabLink(DEFAULT_RELAY_URL, roomId, key)}`);
|
||||
const parsed = parseCollabLink(`my.omp.sh/#${formatCollabLink(DEFAULT_RELAY_URL, roomId, key)}`);
|
||||
if ("error" in parsed) throw new Error(parsed.error);
|
||||
expect(parsed.wsUrl).toBe(`${DEFAULT_RELAY_URL}/r/${roomId}`);
|
||||
expect(Buffer.from(parsed.key)).toEqual(Buffer.from(key));
|
||||
@@ -137,7 +137,7 @@ describe("collab link format", () => {
|
||||
it("keeps the key out of web-link path and query", () => {
|
||||
const webLink = formatCollabWebLink(DEFAULT_RELAY_URL, roomId, key);
|
||||
const url = new URL(webLink);
|
||||
expect(url.origin).toBe("https://relay.omp.sh");
|
||||
expect(url.origin).toBe("https://my.omp.sh");
|
||||
expect(url.pathname).toBe("/");
|
||||
expect(url.search).toBe("");
|
||||
expect(url.hash).toBe(`#${roomId}#${Buffer.from(key).toString("base64url")}`);
|
||||
|
||||
@@ -9,8 +9,8 @@ import { isSubcommand, resolveCliArgv } from "@oh-my-pi/pi-coding-agent/cli-comm
|
||||
describe("join command is registered as a top-level subcommand", () => {
|
||||
test("CLI runner routes `join <link>` to the join command, not launch", () => {
|
||||
expect(isSubcommand("join")).toBe(true);
|
||||
expect(resolveCliArgv(["join", "wss://relay.omp.sh/s/abc#key"])).toEqual({
|
||||
argv: ["join", "wss://relay.omp.sh/s/abc#key"],
|
||||
expect(resolveCliArgv(["join", "wss://my.omp.sh/s/abc#key"])).toEqual({
|
||||
argv: ["join", "wss://my.omp.sh/s/abc#key"],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -20,10 +20,10 @@ Host a session from any omp instance (`/collab`, or `/collab ws://localhost:7466
|
||||
bun run build # static site in dist/
|
||||
```
|
||||
|
||||
`dist/` is a fully static SPA — host it anywhere. JS/CSS bundles are content-hashed; favicons, `manifest.webmanifest`, `robots.txt`, `sitemap.xml`, and `og-image.png` come from `public/` and are emitted at the site root under stable names (canonical URL: `https://relay.omp.sh/`). Two runtime requirements:
|
||||
`dist/` is a fully static SPA — host it anywhere. JS/CSS bundles are content-hashed; favicons, `manifest.webmanifest`, `robots.txt`, `sitemap.xml`, and `og-image.png` come from `public/` and are emitted at the site root under stable names (canonical URL: `https://my.omp.sh/`). Two runtime requirements:
|
||||
|
||||
- **Secure context**: room keys are unwrapped with WebCrypto (`crypto.subtle`), which browsers expose only on `https://` or `localhost`.
|
||||
- **Relay reachability**: the client connects straight to the relay over WebSocket (`wss://` for anything that isn't localhost). The default relay is `wss://relay.omp.sh`; bare `<roomId>#<key>` links resolve against it.
|
||||
- **Relay reachability**: the client connects straight to the relay over WebSocket (`wss://` for anything that isn't localhost). The default relay is `wss://my.omp.sh`; bare `<roomId>#<key>` links resolve against it.
|
||||
|
||||
The room key never leaves the URL fragment — it is not sent to the relay or any server.
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
content="Guest client for omp collab sessions: watch a live coding-agent session — streaming transcript, tool calls, subagents — and prompt the host agent from any browser. End-to-end encrypted; the room key never leaves the URL fragment."
|
||||
/>
|
||||
<meta name="author" content="can1357" />
|
||||
<link rel="canonical" href="https://relay.omp.sh/" />
|
||||
<link rel="canonical" href="https://my.omp.sh/" />
|
||||
<meta name="robots" content="index, follow, max-image-preview:large" />
|
||||
|
||||
<link rel="icon" type="image/svg+xml" href="./public/favicon.svg" />
|
||||
@@ -26,13 +26,13 @@
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:site_name" content="omp" />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://relay.omp.sh/" />
|
||||
<meta property="og:url" content="https://my.omp.sh/" />
|
||||
<meta property="og:title" content="omp collab — live agent session in your browser" />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="Watch a live omp session and prompt the host agent from any browser. End-to-end encrypted; the key stays in the URL fragment."
|
||||
/>
|
||||
<meta property="og:image" content="https://relay.omp.sh/og-image.png" />
|
||||
<meta property="og:image" content="https://my.omp.sh/og-image.png" />
|
||||
<meta property="og:image:type" content="image/png" />
|
||||
<meta property="og:image:width" content="1200" />
|
||||
<meta property="og:image:height" content="630" />
|
||||
@@ -41,13 +41,13 @@
|
||||
|
||||
<!-- Twitter / X -->
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:url" content="https://relay.omp.sh/" />
|
||||
<meta name="twitter:url" content="https://my.omp.sh/" />
|
||||
<meta name="twitter:title" content="omp collab — live agent session in your browser" />
|
||||
<meta
|
||||
name="twitter:description"
|
||||
content="Watch a live omp session and prompt the host agent from any browser. End-to-end encrypted; the key stays in the URL fragment."
|
||||
/>
|
||||
<meta name="twitter:image" content="https://relay.omp.sh/og-image.png" />
|
||||
<meta name="twitter:image" content="https://my.omp.sh/og-image.png" />
|
||||
<meta name="twitter:image:alt" content="omp collab — your agent, live in any browser" />
|
||||
|
||||
<!-- Structured data: WebApplication -->
|
||||
@@ -56,7 +56,7 @@
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebApplication",
|
||||
"name": "omp collab",
|
||||
"url": "https://relay.omp.sh/",
|
||||
"url": "https://my.omp.sh/",
|
||||
"applicationCategory": "DeveloperApplication",
|
||||
"operatingSystem": "Any",
|
||||
"description": "Browser guest client for omp collab live sessions: streaming transcript, tool calls, subagent panel, and a composer that prompts the host agent. End-to-end encrypted.",
|
||||
|
||||
@@ -2,4 +2,4 @@ User-agent: *
|
||||
Allow: /
|
||||
Disallow: /r/
|
||||
|
||||
Sitemap: https://relay.omp.sh/sitemap.xml
|
||||
Sitemap: https://my.omp.sh/sitemap.xml
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://relay.omp.sh/</loc>
|
||||
<loc>https://my.omp.sh/</loc>
|
||||
<changefreq>monthly</changefreq>
|
||||
<priority>1.0</priority>
|
||||
</url>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Offline stand-in for the public collab relay (`wss://relay.omp.sh`).
|
||||
* Offline stand-in for the public collab relay (`wss://my.omp.sh`).
|
||||
*
|
||||
* Speaks the exact relay contract the real clients expect:
|
||||
* - `GET /r/<roomId>?role=host|guest` upgrades to a WebSocket.
|
||||
|
||||
@@ -60,7 +60,7 @@ describe("collab link parsing", () => {
|
||||
});
|
||||
|
||||
it("parses web deep links (https://<relay>/#<link>)", () => {
|
||||
const bare = parseCollabLink(`https://relay.omp.sh/#${ROOM}#${KEY_TEXT}`);
|
||||
const bare = parseCollabLink(`https://my.omp.sh/#${ROOM}#${KEY_TEXT}`);
|
||||
if ("error" in bare) throw new Error(bare.error);
|
||||
expect(bare.wsUrl).toBe(`${DEFAULT_RELAY_URL}/r/${ROOM}`);
|
||||
expect(bare.key).toEqual(KEY);
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
- Added `readOnly` flags to participant and session payload types to indicate when a guest is connected via a read-only (view) link
|
||||
- Added `writeToken` to `GuestFrame` hello payloads and parsed collaboration links so full-access links can carry and expose a write-capability token
|
||||
- Added `ROOM_KEY_BYTES` and `WRITE_TOKEN_BYTES` constants for room key and write-token sizing in the wire protocol
|
||||
- Added `DEFAULT_SHARE_URL` (`https://my.omp.sh/s`), the default share viewer/upload base for `/share` links
|
||||
|
||||
## [15.11.8] - 2026-06-12
|
||||
|
||||
|
||||
@@ -364,7 +364,10 @@ export const ROOM_KEY_BYTES = 32;
|
||||
export const WRITE_TOKEN_BYTES = 16;
|
||||
|
||||
/** Default public relay; bare `<roomId>#<key>` links resolve against it. */
|
||||
export const DEFAULT_RELAY_URL = "wss://relay.omp.sh";
|
||||
export const DEFAULT_RELAY_URL = "wss://my.omp.sh";
|
||||
|
||||
/** Default share viewer/upload base; `/share` links resolve against `<base>/<id>#<key>`. */
|
||||
export const DEFAULT_SHARE_URL = "https://my.omp.sh/s";
|
||||
|
||||
export interface ParsedCollabLink {
|
||||
/** wss://host[:port]/r/<roomId> — no query, no fragment. */
|
||||
|
||||
@@ -13,6 +13,6 @@ describe("collab wire constants", () => {
|
||||
expect(COLLAB_PROMPT_MESSAGE_TYPE).toBe("collab-prompt");
|
||||
expect(ENVELOPE_HEADER_LENGTH).toBe(4);
|
||||
expect(ROOM_ID_BYTES).toBe(16);
|
||||
expect(DEFAULT_RELAY_URL).toBe("wss://relay.omp.sh");
|
||||
expect(DEFAULT_RELAY_URL).toBe("wss://my.omp.sh");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user