Files
openclaw/ui/package.json
Peter Steinberger cca5b14785 feat(ui): path-based session and dashboard URLs (#113883)
* feat(ui): path-based session and dashboard URLs

* docs(ui): document control UI URLs

* fix(ui): finalize session path routing

* feat(ui): anchor session URLs on stable keys

* docs(ui): clarify stable session URL identity

* fix(ui): resolve session prefixes with full prefix and pagination

Query sessions.list with the full supplied prefix instead of an eight-char
truncation, and paginate up to a bounded page count so longer disambiguation
links resolve instead of being reported ambiguous. Zero strict-prefix matches
now fall through to literal-key resolution rather than rendering an empty
ambiguity view.

Also document the ~dot/~dotdot segment escape: peer ids reach session keys
trimmed and lowercased only (src/routing/session-key.ts), so a literal '.' or
'..' segment is reachable and browsers would normalize it away.

* fix(ui): synchronize committed session routes

* test(ui): split native shell host coverage

* fix(ui): thread configured mainKey through session URL builders

Reserved-set disambiguation needs the operator-configured mainKey at runtime, so
thread it from agentsList through every session path builder and the ClickClack
control URL. Unambiguous non-hex single-segment rests now resolve literally while
short-id-shaped rests still fail closed, which restores ClickClack channel
compatibility detection and control-link reconciliation.

Also bound prefix-resolution retries, preserve catalog thread identity, and keep
draft state on ambiguous candidate links.

* fix(ui): repair session URL CI integration

* perf(ui): lazy-load session route resolution

* perf(ui): isolate session prefix resolution

* perf(ui): defer session path parsing

* perf(ui): defer session navigation startup

* fix(ui): preserve first-run and literal session navigation

* fix(ui): satisfy session routing type and export gates

* fix(clickclack): preserve unscoped control link agent

* style(ui): satisfy chat page line limit

* refactor(ui): move chat page helpers to owning modules

* fix(ui): preserve destination session route identity

* fix(ui): preserve agent identity in session routes

* fix(ui): escape dots in literal session path segments

encodeURIComponent leaves periods intact, so a literal key segment like
channel:release.js produced /chat/main/channel/release.js. In-app navigation is
intercepted by the SPA, but a refresh, an external link, or a ClickClack link
would be served as a static asset request and never reach the app.

pathForWorkboardBoard already escapes dots for this reason; mirror it in both the
session URL contract and the ClickClack encoder, route the agent id through the
same segment encoder, and pin the case in both shared vector tables.

* fix(ui): stop bootstrap after teardown race

* refactor(ui): centralize session navigation targets

* fix(ui): consume bootstrap teardown abort

* fix(ui): canonicalize configured main session routes

* fix(ui): preserve distinct session references

* fix(ui): redirect released session query links

* fix(ui): make bootstrap teardown abort-safe
2026-07-26 12:46:04 -04:00

54 lines
1.6 KiB
JSON

{
"name": "openclaw-control-ui",
"private": true,
"type": "module",
"scripts": {
"build": "vite build",
"dev": "vite",
"preview": "vite preview",
"test": "vitest run --config vitest.config.ts"
},
"dependencies": {
"@awesome.me/webawesome": "3.10.0",
"@codemirror/commands": "6.10.4",
"@codemirror/language": "6.12.4",
"@codemirror/language-data": "6.5.2",
"@codemirror/state": "6.7.1",
"@codemirror/view": "6.43.6",
"@create-markdown/preview": "2.0.3",
"@lezer/highlight": "1.2.3",
"@lit/context": "1.1.6",
"@modelcontextprotocol/ext-apps": "1.7.4",
"@modelcontextprotocol/sdk": "1.29.0",
"@noble/ed25519": "3.1.0",
"@openclaw/gateway-client": "workspace:*",
"@openclaw/libterminal": "0.3.2",
"@openclaw/media-core": "workspace:*",
"@openclaw/normalization-core": "workspace:*",
"@openclaw/session-url-contract": "workspace:*",
"@openclaw/uirouter": "0.1.0",
"@openclaw/workboard-contract": "workspace:*",
"@tanstack/lit-virtual": "3.13.33",
"@tanstack/virtual-core": "3.17.4",
"dompurify": "3.4.12",
"ghostty-web": "0.4.0",
"highlight.js": "11.11.1",
"json5": "2.2.3",
"lit": "3.3.3",
"markdown-it": "14.3.0",
"markdown-it-task-lists": "2.1.1",
"marked": "18.0.6",
"remend": "1.3.0"
},
"devDependencies": {
"@types/markdown-it": "14.1.2",
"@vitest/browser": "4.1.10",
"@vitest/browser-playwright": "4.1.10",
"jsdom": "29.1.1",
"openclaw": "workspace:*",
"playwright": "1.61.1",
"vite": "8.1.5",
"vitest": "4.1.10"
}
}