Skip to content

feat(web): add workspace-wide project chat dock - #259

Merged
kinqsradio merged 5 commits into
feat/web-rebuildfrom
feat/project-chat-dock
Nov 6, 2026
Merged

kinqsradio merged 5 commits into
feat/web-rebuildfrom
feat/project-chat-dock

Conversation

@luannn010

Copy link
Copy Markdown
Collaborator

Change

Project chat was only reachable inside an individual project. Add one persistent bottom dock across the authenticated workspace, including the Projects list, with an explicit project picker and retained conversations/drafts for each visited project.

Reuse the existing Assistant transcript, composer, saved chats, cancellation and proposal controls. Route project chat entry points into the shared dock. Add shell-owned exit guards so workspace navigation retains drafts while reload/sign-out checks them. Hide cached conversation presentation when the selected project becomes unavailable.

The published diff contains web client code, frontend contract tests, and the collaboration-directory ignore rule. Backend code, schemas and provider configuration have an empty diff.

Related follow-up #258 is assigned to kinqsradio and requests project grounding plus chat interactions with views/workspaces. This PR supplies the frontend foundation. It does not close that integration issue.

Checks and limits

  • npm run typecheck -w web and npm run build -w web passed.
  • node --import tsx --test backend/tests/web-workspace.unit.test.ts web/tests/workspace-chat-guards.test.ts passed all 28 tests. The backend test file was executed as an existing pure web-controller contract suite and was not modified.
  • Changed-file Prettier check and git diff --check passed.
  • python -X utf8 scripts/check-code-organization.py passed.
  • Browser verification covered Projects-list visibility, project selection, separate drafts across project changes and Calendar/Projects navigation, collapse/reopen, cancellation of sign-out with hidden drafts, and a 390px viewport in light/dark themes.
  • The build reports chunk-size and notifications static/dynamic import warnings. The workspace-boundary helper fails in the unchanged clone on this Windows host too. Direct Git ignore probes for both required research directories pass.
  • Live active-run transitions, long approval states, access-revocation presentation and split panes were source-reviewed or left for follow-up verification. The existing Matilda project-context defect remains tracked in Wire workspace dock chat to project context, views, and workspace actions #258.
  • GitHub CI is pending. Full application suites were not run locally.

Workspace

  • Used the outer Orbyn Engineering workspace with this target nested under repo/, and read the relevant project guides.

Project knowledge was not traced because the local project key was unregistered. Task handoffs, configuration, screenshots, logs and credentials are excluded from this PR.

Agent disclosure

  • Tools used were Codex desktop, native implementation/review agents, PowerShell, Git, GitHub CLI, Node/TypeScript/Vite/Prettier, Python source checks, and the in-app browser. The GitHub connector returned an integration-permission error before any issue write, so the verified CLI account published the issue and PR.
  • The host identifies the assistant as GPT-6-based Codex. The exact model identifier and reasoning effort are not exposed by this session. Native agents inherited the session configuration. A Claude CLI handoff was blocked by its usage quota and produced no source edits.
  • The human selected the Bottom dock mock, requested the project picker/workspace-wide placement, constrained work to the frontend, and authorized the branch push, PR and issue. Human review is pending.
  • A separate native agent implemented the workspace extension and another performed read-only source review. The primary agent implemented the initial dock, added contract tests, reviewed repairs and performed browser/build verification. Review limitations are listed above.
  • UI design guidance was consulted from ui-ux-pro-max 2.15.0, commit dd9a1b4cf9f67ca2e326f646d93e101b2778db30, MIT. No implementation code or text was copied. Source
  • Engineering workflow guidance was consulted from Orbyn Engineering, commit 23ca8e299fafdc88b0beebc5e41cf331bf12f5bd, MIT. Source

@kinqsradio kinqsradio left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works well in the browser. One fix is needed before merge, and one load issue is worth addressing.

Must fix

  • CI fails at npm run format:check: web/src/app/workspace/controller.ts splits PrepareReason across lines, and this repo's Prettier rejects that. npx prettier --write web/src/app/workspace/controller.ts fixes it. Nothing else in CI failed.

Should fix

  • Extra API load. A cold Today load goes from 37 to 39 requests and from 1 to 3 fetches of /projects. The list is also re-fetched on every window focus and on project/organize news. Each project opened in the dock mounts a full AssistantWorkspace with its own projects, prefs and capabilities reads. The API limit is 180 requests a minute per address. Suggest fetching the list only when the dock opens, and passing shared data into the embedded Assistant.
  • useProjectChat() throws without its provider, so projects/Detail.tsx would crash on the plain Shell fallback in App.tsx. It can't happen today because RETENTION_ADMISSION_READY is true, but falling back to the old /app/assistant?project= link would remove the risk.

For the UI review

  • The dock collapses on every page change. The draft is kept and returns on reopen.
  • The open dock covers the bottom-right of the page on desktop, and about half the screen on phone with no scrim.
  • Sessions are never pruned, so each visited project keeps a mounted Assistant until reload.

Verified locally on 92900ca8

  • typecheck, web build, code organization, project docs, .github/tests and week-scene pass, and your 28 tests pass
  • In Chrome against the real local API:
    • drafts stay per project across a project switch and a real move to Calendar
    • reload and sign-out still check dock drafts through prepareAll
    • Escape collapses the dock and returns focus to the launcher
    • no page errors, and no horizontal overflow at 390 px

Review prepared with Claude Code (Opus 5.5) and checked by me.

kinqsradio and others added 4 commits November 6, 2026 11:03
Format the PrepareReason union so CI passes. Read the projects list only
after the dock is first opened, skip the embedded Assistant's own projects
read, and let useProjectChat fall back to the Assistant links outside the
workspace dock instead of throwing.

Co-authored-by: Luan Nguyen <luannn010@gmail.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s load

Collapse on focus only for controls the panel hides, not frame bodies. Add a phone scrim and bottom sheet and reserve scroll space on desktop. Cap mounted chat sessions at 3 without dropping drafts or running chats. Read planner prefs, AI capabilities and agent settings once for all embedded chats.
…d share its reads

Collapse only for focus that follows a Tab, never for frame containers. Count an unconfirmed project draft as unsent. Share one assistant controls instance and refresh identity when the dock opens. Skip scroll reserve on short desktops and keep focus inside the phone sheet.
@kinqsradio
kinqsradio marked this pull request as ready for review November 6, 2026 08:50
@kinqsradio
kinqsradio merged commit 0845d6c into feat/web-rebuild Nov 6, 2026
7 checks passed
@kinqsradio
kinqsradio deleted the feat/project-chat-dock branch November 7, 2026 04:46
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.

2 participants