Skip to content

feat(web): add authenticated localhost client - #386

Open
VishnuM049 wants to merge 26 commits into
mainfrom
feat/web-client
Open

feat(web): add authenticated localhost client#386
VishnuM049 wants to merge 26 commits into
mainfrom
feat/web-client

Conversation

@VishnuM049

@VishnuM049 VishnuM049 commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Purpose

Add the localhost web client described by Slice 5C. The branch gives users a browser interface for daemon-owned sessions, conversation state, workspace review, configuration, and session management while preserving the existing SDK and security boundaries.

It also makes workspace selection practical by accepting safe path shorthand, showing recent workspaces, and adding session filters for workspace and Chat or Code mode.

Fixes

Fixes #99, #100, #101, #108, #109, #110, #111, #112, and #117.

Addresses #98, #113, #114, #115, #116, #118, #119, #120, #121, #122, #126, and #127. These broader issues retain acceptance criteria outside this branch.

Approach

  • Add an authenticated loopback web gateway, one-use launch flow, strict CSP, bounded WebSocket transport, verified static assets, and release-package integration.
  • Add the React client with responsive conversation, activity, workspace, session, settings, theme, and slash-command views over the public SDK.
  • Keep canonical state and mutations in the daemon. Browser-local commands and presentation state do not simulate daemon operations.
  • Resolve absolute, tilde, home-relative, and unique shorthand workspace paths in the daemon. Resolution checks a bounded candidate set, canonicalizes existing directories, and rejects ambiguous input.
  • Rank recent workspace suggestions locally from synchronized session metadata. Filter loaded recent sessions by workspace and Chat or Code mode without extra RPC traffic.
  • Update the README, setup guide, and changelog for the shipped browser workflow.

The branch updates the wire protocol to version 10. Older clients fail the existing compatibility handshake instead of receiving partial behavior.

Workspace selection

New session workspace selection

Recent-session filters

Recent session filters

How was this tested?

  • pnpm --filter @axl/daemon test: passed, 60 tests.
  • pnpm --filter @axl/web test: passed, 62 tests; 2 real-browser cases skipped by the unit runner.
  • pnpm --filter @axl/web test:browser: passed, 2 tests in Chromium against production and development gateways.
  • node --test scripts/build-web-assets.test.ts: passed.
  • node --test scripts/installed-web.test.ts: passed against a packed CLI outside the repository.
  • pnpm typecheck: passed.
  • pnpm lint: passed.
  • pnpm format:check: passed.
  • pnpm check:boundaries: passed.
  • pnpm check:generated: passed.
  • reuse lint: passed, 365 files compliant.
  • pnpm audit --audit-level high: passed with no known vulnerabilities.
  • git diff --check origin/main...HEAD: passed.

A full pnpm check was attempted during branch validation but did not complete within 20 minutes. Nine host-dependent sandbox checks reported unavailable Bubblewrap, Podman or Docker resources, or macOS Seatbelt behavior. The focused web, daemon, packaging, and static checks above passed.

Learning

Path convenience does not need browser filesystem access. Bounded daemon-side resolution supports useful shorthand while preserving canonical paths and failing closed on ambiguity.

Checklist

  • I reviewed the complete diff.
  • I added or updated the smallest relevant test for behavior changes.
  • I ran the relevant formatting, lint, type-check, test, boundary, and license checks.
  • Every new file has SPDX metadata, directly or through REUSE.toml.
  • Every commit has a matching DCO Signed-off-by trailer.
  • User-visible changes update CHANGELOG.md.
  • UI changes include screenshots attached to the pull request, not committed to the repository.

Licenses

Resource Source and version License Use
Inter Inter project, vendored Latin WOFF2 OFL-1.1 Browser interface text
IBM Plex Mono IBM Plex, vendored Latin WOFF2 OFL-1.1 Code and data text

AI assistance

  • Generative AI materially assisted this change. Tool and model/version: OpenAI ChatGPT through pi; the harness did not expose an exact model version.
  • I manually reviewed, understood, and tested the generated work. Human confirmation is required before merge.

Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM449 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Signed-off-by: VishnuM049 <vishnu.muthiah04@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Enforce loopback launch authentication and HTTP security

1 participant