92 lines
2.9 KiB
TypeScript
92 lines
2.9 KiB
TypeScript
// Mirror of `maestro-protocol::routes`. Keep in sync with
|
|
// crates/maestro-protocol/src/routes.rs.
|
|
|
|
import type { Uuid } from "./types.js";
|
|
|
|
export const API_PREFIX = "/api";
|
|
|
|
export const SESSIONS = "/api/sessions";
|
|
export const INFO = "/api/info";
|
|
export const DIRS = "/api/dirs";
|
|
export const RECENT_DIRS = "/api/recent-dirs";
|
|
export const PROJECTS = "/api/projects";
|
|
export const GITROOT = "/api/gitroot";
|
|
export const NAMES = "/api/names";
|
|
export const BRANCHES = "/api/branches";
|
|
export const EVENTS = "/api/events";
|
|
|
|
/** Name of the query parameter `DIRS` and `GITROOT` both take. */
|
|
export const PATH_QUERY = "path";
|
|
|
|
/** Name of the query parameter `DELETE /api/sessions/:id` takes (#81):
|
|
* `force=true` overrides the kill refusal over a guarded worktree. */
|
|
export const FORCE_QUERY = "force";
|
|
|
|
/** Name of the query parameter `NAMES` takes. */
|
|
export const COUNT_QUERY = "count";
|
|
|
|
export function session(id: Uuid): string {
|
|
return `${SESSIONS}/${encodeURIComponent(id)}`;
|
|
}
|
|
|
|
export function attach(id: Uuid): string {
|
|
return `${API_PREFIX}/attach/${encodeURIComponent(id)}`;
|
|
}
|
|
|
|
export function sessionFocus(id: Uuid): string {
|
|
return `${session(id)}/focus`;
|
|
}
|
|
|
|
/** `WS /api/structured/:id` — transcript/state snapshots and live deltas. */
|
|
export function structured(id: Uuid): string {
|
|
return `${API_PREFIX}/structured/${encodeURIComponent(id)}`;
|
|
}
|
|
|
|
/** `POST /api/sessions/:id/structured/prompt` — send an ACP prompt. */
|
|
export function structuredPrompt(id: Uuid): string {
|
|
return `${session(id)}/structured/prompt`;
|
|
}
|
|
|
|
export function structuredAttachment(id: Uuid): string {
|
|
return `${session(id)}/structured/attachments`;
|
|
}
|
|
|
|
/** `POST /api/sessions/:id/structured/cancel` — cancel an ACP turn. */
|
|
export function structuredCancel(id: Uuid): string {
|
|
return `${session(id)}/structured/cancel`;
|
|
}
|
|
|
|
/** `POST /api/sessions/:id/structured/config` — change an ACP session option. */
|
|
export function structuredConfig(id: Uuid): string {
|
|
return `${session(id)}/structured/config`;
|
|
}
|
|
|
|
/** `POST /api/sessions/:id/structured/approvals/:nonce` — answer a permission
|
|
* request. */
|
|
export function structuredApproval(id: Uuid, nonce: string): string {
|
|
return `${session(id)}/structured/approvals/${encodeURIComponent(nonce)}`;
|
|
}
|
|
|
|
/** Append the `path` query parameter `DIRS` and `GITROOT` accept. */
|
|
export function withPathQuery(route: string, value: string): string {
|
|
return `${route}?${PATH_QUERY}=${encodeURIComponent(value)}`;
|
|
}
|
|
|
|
/** Same-origin WebSocket base — `wss:` under TLS, `ws:` otherwise. */
|
|
export function wsBase(): string {
|
|
const proto = location.protocol === "https:" ? "wss:" : "ws:";
|
|
return `${proto}//${location.host}`;
|
|
}
|
|
|
|
export function eventsWsUrl(): string {
|
|
return `${wsBase()}${EVENTS}`;
|
|
}
|
|
|
|
export function attachWsUrl(id: Uuid): string {
|
|
return `${wsBase()}${attach(id)}`;
|
|
}
|
|
|
|
export function structuredWsUrl(id: Uuid): string {
|
|
return `${wsBase()}${structured(id)}`;
|
|
}
|