feat(workspace): `/integrations` opens the integration status directly

Merged
RA
1d ago
+313-32

Issue for this PR

Closes #1463

Type of change

  • New feature

What does this PR do?

/workspace → Status (#1312) already shows, per integration, what the last session got from the workspace and why anything is missing. This adds /integrations, which opens the same view directly, and points the attach toast and the boot box there. Nothing moves: /workspace → Status is unchanged, and both read the same snapshot.

When there's nothing current to show, /integrations says why instead:

  • Not linked: a "Link to a workspace" row, which opens the link picker.
  • Engine missing or too old: the install offer (it says which), not the last attach, which describes an engine this machine no longer has. Asked for, it shows even within a "Not now" week; an install still running is reported instead.
  • Linked, usable engine: the Status view, including its "No session has attached yet" state.

/workspace and /integrations share one readLink helper, so the check that keeps Status from showing another account's attach lives in one place.

Claims

  • C1 For the same link, /integrations and /workspace → Status show the same view: same rows, counts and reasons.
  • C2 /integrations never shows an attach for a workspace the project isn't linked to now, or one read under another account.
  • C3 With the engine missing or too old, /integrations opens the install offer, not the last attach, even within a "Not now" week, and never starts a second install while one is running.
  • C4 Everywhere else, the offer's 7-day "Not now" latch behaves as before.

Residuals

  • R1 With ALTIMATE_DISABLE_WORKSPACE set, /integrations doesn't exist, like /workspace: the plugin that registers both isn't loaded.
  • R2 An installed engine that failed to start isn't detected: the TUI can't see the server's engine state, so Status shows the last attach, with its age.
  • R3 The connection each integration uses isn't shown yet; it comes with the connection picker.
  • R4 The boot box's commands line (90-character limit) still lists only /workspace and /skills; its integrations line points here.
  • R5 A relink or account switch in the instant between /integrations' last link read and the Status view's own reads isn't caught, the same window /workspace → Status has.
  • R6 Under attach <url> with the path absent on the client, the offer's guard applies: a toast says to install on the server.
  • R7 Under organisation-managed config that sets mcp.datamate, the engine overlay is off, but /integrations still offers the local install: the TUI process doesn't read that config.
  • R8 While an automatic offer waits for the store to hydrate, /integrations shows the last attach until that offer opens over it.

How did you verify your code works?

  • A test per /integrations path: unlinked → the link (closed before the picker starts); engine missing or too old → the install offer, even after "Not now"; no offer after all (install running, engine just installed) → the Status view; usable engine → the Status view; a relink during the engine check, and a dialog opened during the reads, are respected.
  • Plugin and workspace suites pass (1138); typecheck clean.
  • Live against a test workspace (E2E): unlinked → the link offer; no engine → the install offer, again after "Not now"; after attach the boot box points here and /integrations shows the Status rows (GitHub 0 of 40 · no usable connection, Altimate 7 of 7, Jira 8 of 8).

Codex rounds against these claims: review log.

Screenshots / recordings

Terminal captures in the E2E comment.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

🤖 Generated with Claude Code

https://claude.ai/code/session_01HRUhVhg6XwxSKJs1iTufiA


Summary by cubic

Adds a /integrations command that opens the workspace integration status view directly, so users no longer need to drill into /workspace → Status. The attach toast and boot box now point to /integrations for the reasons. Also fixes the race where an automatic install offer still waiting for the store to hydrate was suppressed by the "Not now" latch when /integrations asked; the pending offer now skips the latch. Closes #1463.

Behavior when there's nothing to show

  • Unlinked projects get a link offer instead of the status view.
  • A missing or too-old engine opens the install offer — even within a "Not now" week — and says which; an install already running is reported instead of re-offered.
  • The link is re-read after the engine check, so a relink or an account switch mid-check cannot show a stale attach.
  • The command claims its dialog before reading, so a dialog the user opens meanwhile is left alone; if the install offer doesn't open after all, the Status view shows instead of nothing.
  • Link closes the dialog before the picker starts, so repeated Enter cannot start a second picker.

Summary by CodeRabbit

  • New Features
    • Added an /integrations command to link a project, install a required engine, or view workspace status.
    • Integration-related prompts and messages now direct you to /integrations.
    • On-demand install requests are handled during pending or active install offers.