Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
95 commits
Select commit Hold shift + click to select a range
0681d85
fix(pull-requests): expand code tab diffs by default (#9174)
maria-rcks Sep 2, 2026
f9d1c65
chore: bump vendored GhosttyKit and update terminal integration (#9155)
Yash-Singh1 Sep 2, 2026
535c83d
fix(web): copying a code block no longer copies triple backticks (#8448)
ipanasenko Sep 2, 2026
5392c9b
fix(models): restore sticky new-thread selections (#9164)
maria-rcks Sep 2, 2026
827345a
fix(web): model info button opens its details on click (#9177)
StiensWout Sep 2, 2026
7a8df33
fix(desktop): skip cached monitor compiler check (#9184)
juliusmarminge Sep 2, 2026
d2042d2
fix(web): avoid stale file writes on close (#8630)
yashranaway Sep 2, 2026
4116db9
fix(server): bound OpenCode version probes (#8750)
yashranaway Sep 2, 2026
a56b0cd
fix(server): allow large Azure DevOps PR lists (#8572)
Lucenx9 Sep 2, 2026
a81a52a
fix(server): allow local-only worktree bases (#8751)
yashranaway Sep 2, 2026
6ff537f
fix(web): remove projects with archived threads (#8798)
none23 Sep 2, 2026
a19f01f
feat(web): make context window indicator opt-in (#9190)
maria-rcks Sep 2, 2026
9e646ad
fix(connect): refresh relay credentials before expiry (#9178)
maria-rcks Sep 2, 2026
dd6879f
fix(pull-requests): reuse github api reads (#9176)
maria-rcks Sep 2, 2026
14f15cf
fix(server): stop titling linked PR threads from local git history (#…
t3dotgg Sep 2, 2026
5b7d72a
feat(updates): continue active threads across server restarts (#9167)
maria-rcks Sep 2, 2026
7e9d5a7
fix(mobile): prevent message and composer overlap (#9195)
juliusmarminge Sep 2, 2026
f14f41b
fix(web): preserve composer draft during worktree setup (#9197)
maria-rcks Sep 2, 2026
70cd258
fix(web): prevent two-digit list markers from being clipped (#9101)
G-R3 Sep 2, 2026
bc918e7
fix(server): discover project skills for Claude (#9210)
anirudhsama Sep 2, 2026
6effe0a
feat(web): redesign provider editor and models list (#8508)
StiensWout Sep 2, 2026
6e3bac3
fix(web): prevent connection rows from wrapping during removal (#8706)
MatthewFeroz Sep 2, 2026
57a6660
fix(pull-requests): align checkout control with author (#9196)
maria-rcks Sep 2, 2026
b5a09e1
fix(release): pin patched expo-sharing version (#9250)
willsheldon Sep 2, 2026
aab4049
fix(ci): keep Expo Sharing patch applied (#9248)
StiensWout Sep 2, 2026
2a7a449
fix(web): hide deleted providers with prototype keys (#8337)
Lucenx9 Sep 2, 2026
9159b80
feat(mobile): long-press file references for path and open actions (#…
juliusmarminge Sep 2, 2026
8d5b712
fix(desktop): exclude opposite macOS pty prebuilds (#9240)
extoci Sep 2, 2026
b57726c
feat(web): add copy path button to diff headers (#2403)
ipanasenko Sep 2, 2026
f90e2f2
fix(server): subscribe before provider settings watcher (#9271)
t3-code[bot] Sep 2, 2026
62c68dc
fix(mobile): show filled filter icon on Android when filters are acti…
none23 Sep 2, 2026
46b5c66
fix(chat): show single tool calls without summaries (#9267)
maria-rcks Sep 2, 2026
5a9b562
fix(web): warn when shared settings have no target environment (#9207)
imabdulazeez Sep 2, 2026
28ddaf7
fix(web): confirm closing agent-controlled browsers (#9272)
maria-rcks Sep 2, 2026
134d510
feat(desktop): browser profiles for the preview browser (#7254)
juliusmarminge Sep 2, 2026
ca63d42
refactor(shared): move the node:sqlite Effect SQL client into shared …
juliusmarminge Sep 2, 2026
91c8d47
feat(web): add opt-in panel animations (#8830)
maria-rcks Sep 2, 2026
ba3cb07
feat(projects): automatically pull clean default branches (#9277)
maria-rcks Sep 2, 2026
1eb36b4
fix(web): show pull request state icons in tabs (#9112)
flamboh Sep 2, 2026
535557b
feat(providers): add context compaction across harnesses (#8808)
maria-rcks Sep 2, 2026
fb93902
feat(web): add proactive panels (#9276)
maria-rcks Sep 2, 2026
b59b7d0
fix(web): unify control sizing across settings pages (#9281)
juliusmarminge Sep 2, 2026
064392f
fix(web): offer browser profiles from the empty-panel launcher (#9279)
juliusmarminge Sep 2, 2026
63f334b
Revert "feat(providers): add context compaction across harnesses" (#9…
maria-rcks Sep 2, 2026
c742edd
fix(web): show scroll-to-end as soon as the last message slips under …
juliusmarminge Sep 2, 2026
994bd73
fix(cursor): honor auto and full access modes (#9283)
maria-rcks Sep 2, 2026
4ba39a6
fix(desktop): detect installed Spectre libs for Windows builds
juliusmarminge Sep 2, 2026
443b4eb
fix(pull-requests): missing features & better behaviour (#9188)
maria-rcks Sep 3, 2026
15fea6c
fix(providers): discover workspace skills everywhere (#9180)
maria-rcks Sep 3, 2026
2971ec3
fix(server): preserve automatic settlement timestamps (#9254)
eimexdev Sep 3, 2026
dbc7bfa
fix(opencode): show Reasoning selector for OpenCode models (#9287)
maria-rcks Sep 3, 2026
7751299
feat(web): preview document attachments in the file viewer (#9292)
juliusmarminge Sep 3, 2026
e94603a
chore(ci): narrow the UI consistency check-run agent (#9297)
juliusmarminge Sep 3, 2026
ef6cc0b
chore(ci): only run check-run agents on vouched contributors (#9298)
juliusmarminge Sep 3, 2026
355fbd9
fix(web): stop remounting markdown on every activity delta (#9306)
juliusmarminge Sep 3, 2026
d897641
fix(pull-requests): keep cached PR chrome on reopen (#9294)
maria-rcks Sep 3, 2026
0fbb942
feat(environments): draw each environment as the machine it runs on (…
juliusmarminge Sep 3, 2026
9ebbeda
feat(web): apply and remove labels from the pull request tab (#9313)
juliusmarminge Sep 3, 2026
31eeb44
fix(sidebar): collapse settled and snoozed shelves by default (#9314)
maria-rcks Sep 3, 2026
922bd69
refactor(media): unify file and media previews across clients (#9253)
juliusmarminge Sep 3, 2026
ec44bc5
fix(chat): keep live tool labels in present tense (#9316)
maria-rcks Sep 3, 2026
194f838
chore: audit lint directives and move plugin allowlists into config (…
juliusmarminge Sep 3, 2026
b9b1b8f
chore(ci): narrow the Effect conventions check-run agent (#9321)
juliusmarminge Sep 3, 2026
85f2479
refactor(mobile): style plain views with Uniwind classes instead of t…
juliusmarminge Sep 3, 2026
66419a1
fix(dev): share dev servers on the loopback Vite actually binds (#9324)
juliusmarminge Sep 3, 2026
12f1fc4
fix(web): line up the titlebar wordmark label and version pill (#9255)
tristanmanchester Sep 3, 2026
9409dd2
fix(web): make the diff layout toggle a persisted setting (#9326)
juliusmarminge Sep 3, 2026
3b2de9d
chore: dedupe lightningcss and tailwind node bindings (#9331)
juliusmarminge Sep 3, 2026
f5fbb1b
chore: upgrade vite-plus to 0.3.0 (#9327)
juliusmarminge Sep 3, 2026
1aa44a0
feat(web): add a file tree to the diff panel and pull request code ta…
juliusmarminge Sep 3, 2026
5f84efa
feat(web): add PageUp/PageDown chat navigation (#9315)
Yash-Singh1 Sep 3, 2026
2a3cfe4
fix(web): collapse PR header actions to icons when narrow (#9334)
maria-rcks Sep 3, 2026
d42254d
fix(web): resolve Vite sourcemap and supports warnings (#9343)
juliusmarminge Sep 3, 2026
18062da
feat(web): choose whether links open in the default browser or in T3 …
juliusmarminge Sep 3, 2026
6a5a18c
fix(web): add press feedback to buttons (#9349)
maria-rcks Sep 3, 2026
f6c04c5
feat(web): add customizable project icons (#9137)
saphid Sep 3, 2026
1575ada
fix(mobile): stop indented code overflowing Android chat bubbles (#9347)
Adamulek123 Sep 3, 2026
0bc59bb
fix(web): let the pull request list use wide screens (#9351)
juliusmarminge Sep 3, 2026
6cf0c6e
feat: display native app and browser icons in work logs (#9093)
Yash-Singh1 Sep 3, 2026
48ba76b
fix(web): collapse oldest pull request comments (#9323)
maria-rcks Sep 3, 2026
854541a
fix(pull-requests): shared state + not settling? (#9332)
maria-rcks Sep 3, 2026
9f9359b
fix(web): stop usage summary requests reporting slow RPCs (#9358)
juliusmarminge Sep 3, 2026
b5f4e81
feat(web): suggest ssh hosts in a dropdown under the host field (#9171)
flamboh Sep 3, 2026
d4bd892
feat(web): mod+w closes the active right panel tab before the window …
juliusmarminge Sep 3, 2026
5eb4f45
test(web): remove static markup-only component tests (#9364)
t3-code[bot] Sep 3, 2026
829c3db
fix(environments): draw the machine icon everywhere an environment is…
juliusmarminge Sep 3, 2026
c89e3e1
fix(web): settled sidebar rows use the project fallback icon (#9366)
juliusmarminge Sep 3, 2026
cf0bb4c
fix(web): match project icon chooser button sizes (#9368)
Yash-Singh1 Sep 3, 2026
1f7a3c1
fix(mobile): pressed and disabled styles no longer apply unconditiona…
juliusmarminge Sep 3, 2026
24799de
fix(mobile): size expanded tool groups correctly (#9359)
juliusmarminge Sep 3, 2026
5b8445b
fix(web): collapse the resting composer (#7855)
chrisdeeming Sep 3, 2026
88e2007
chore(sync): merge upstream main
kingaintech94 Sep 3, 2026
ec7c2bb
fix(web): update composer context strip condition in ChatView
kingaintech94 Sep 3, 2026
275ea85
fix(sync): preserve fork behavior across upstream changes
Dryec Sep 4, 2026
f8a9f6d
chore(release): bump 2code to 1.0.116
Dryec Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
94 changes: 36 additions & 58 deletions .macroscope/check-run-agents/effect-service-conventions.md

Large diffs are not rendered by default.

93 changes: 31 additions & 62 deletions .macroscope/check-run-agents/ui-consistency.md
Original file line number Diff line number Diff line change
@@ -1,92 +1,61 @@
---
title: UI Consistency
model: claude-opus-5
effort: high
effort: medium
input: full_diff
tools:
- browse_code
- git_tools
- github_api_read_only
- modify_pr
include:
- "apps/web/src/**/*.ts"
- "apps/web/src/**/*.tsx"
- "apps/web/src/**/*.css"
exclude:
- "apps/web/src/**/*.test.tsx"
labels:
- vouch:trusted
requires:
- Check
maxBudgetPerPR: 25
conclusion: failure
showToolCalls: true
maxBudgetPerRun: 10
---

# UI consistency review

Review changed web UI code and directly affected call sites for consistency with the shared component system, Tailwind ownership, and the behavioral constraints below. Apply these rules when a pull request creates, moves, or modifies controls or styling. Do not demand unrelated repository-wide cleanup.
This is a styling guard for `apps/web`, not a general review. Review only the changed lines in the diff and answer three questions. Do not build the project, inspect emitted CSS, trace selector consumers across the codebase, or ask for screenshots. If the diff does not make a violation obvious, there is no finding.

The goal is not to minimize CSS or class counts at any cost. The goal is to put each behavior in the smallest correct owner while preserving interaction, theming, accessibility, layout, and browser behavior.
## 1. Shared primitives over custom controls

## Shared controls and variants
Product UI must use the primitives in `apps/web/src/components/ui` (`Button`, `Input`, `InputGroup`, `Select`, `Toggle`, `Menu`, `Dialog`, `Tooltip`, `ScrollArea`, and the rest of that directory) instead of rebuilding them.

- Prefer the core UI primitives in `apps/web/src/components/ui` over native controls or locally reconstructed primitives. In ordinary product UI, a raw `<button>` that recreates `Button`, a raw input that recreates `Input` or `InputGroup`, or a local trigger that recreates `Select`, `Toggle`, or `Menu` is a concrete finding.
- Do not flag raw elements that intentionally implement a semantic row, tab, resize handle, swatch, image target, editor surface, or another interaction whose behavior or geometry differs from the core primitive.
- When multiple call sites repeat the same durable geometry or treatment, prefer a named primitive size or variant. Examples include compact controls, micro icon actions, muted ghost actions, and glass actions. Keep contextual layout, width, and color at the call site.
- Flag large call-site class strings that override a primitive's core height, radius, padding, focus ring, cursor, hit target, or base state colors. Prefer extending the primitive contract when the same pattern is genuinely shared.
- Preserve accessibility and interaction semantics during migrations: focus-visible rings, disabled behavior, loading state, keyboard behavior, pointer cursor, `aria-*`, Base UI or Radix render/close props, and coarse-pointer hit targets.
- Do not require tests for a tiny visual-only class migration. Require focused tests when primitive composition changes behavior, prop forwarding, state transitions, keyboard handling, or width/defaulting logic.
- Flag a raw `<button>`, `<input>`, `<select>`, or `<textarea>` styled to look like a control when the matching primitive exists.
- Flag a call site that overrides a primitive's height, radius, padding, focus ring, or base colors with its own class string. If the same look is needed in several places, the fix is a new size or variant on the primitive.
- Do not flag raw elements that are intentionally not a primitive: semantic rows, tabs, resize handles, swatches, editor surfaces, or anything whose behavior or geometry is different by design.

## CSS and Tailwind ownership
## 2. Tailwind in the owning component, not global CSS

- Ordinary one-owner presentation belongs in the owning TS or TSX module as static Tailwind classes or owner-level CSS variables. Examples include local geometry, spacing, typography, backgrounds, borders, simple vendor pseudo-elements, and component-only positioning.
- Keep global CSS when it is genuinely reusable or behaviorally complex: generated markdown or imperative DOM, custom elements and shadow roots, masks, shared or complex pseudo-elements, animations, glass composition, runtime theme variables, safe-area calculations, scrollbar-lane preservation, Electron drag regions, and browser/vendor integration. Simple owner-local pseudo-elements may still belong in the owning module.
- Before calling a selector dead, trace literal, dynamic, generated, imperative, test, custom-element, and shadow-root consumers. Search both the emitted class string and any class-valued field names through their final DOM sink. A helper returning a class is not proof that it is rendered, and a missed downstream property read can make a deletion unsafe.
- Flag duplicate declarations only after comparing cascade layer, selector specificity, inheritance, runtime theme scope, media/variant scope, and the final owning element. Textually identical declarations are not necessarily behaviorally redundant.
- When moving CSS into Tailwind, preserve selector scope and cascade ownership. A utility at the owner is preferable to a fragile global override that depends on stylesheet order.
- Do not request moving complex global behavior into arbitrary Tailwind merely to reduce `index.css`. Do not preserve ordinary one-owner CSS merely because it already exists globally.
Styling lives as Tailwind classes in the component that renders the element.

## Themes and generated CSS
- Flag new rules added to `apps/web/src/index.css` or any other `.css` file when the same styling could be Tailwind classes on the owning component. New global CSS is acceptable only for things Tailwind cannot express at the owner: generated markdown or imperative DOM, custom elements and shadow roots, animations, runtime theme variables, and browser or Electron integration.
- Flag new `style={{ ... }}` objects or inline `<style>` blocks that carry static values a Tailwind class already covers. Dynamic values computed at runtime are fine.
- Flag theme-only declarations that use raw `.dark` selectors instead of `@variant dark` / `@variant light`.

- Use the project variants for theme-only declarations:
- dark-only declarations use `@variant dark`;
- light-only declarations use `@variant light`;
- raw `.dark` should remain only in the `dark` and `light` custom-variant definitions.
- Preserve custom themes and runtime token bridges. Removing a variable or selector is safe only when all runtime, inspector, generated, and theme-palette consumers are accounted for.
- Contrast and accessibility settings that target app chrome must derive from semantic color tokens. Do not apply `filter` to `html`, `body`, or the app root: it also changes user media, previews, terminals, glass backdrop ownership, and view-transition snapshots.
- Preserve alpha and surface ownership when deriving contrast tokens. Soften translucent borders and inputs toward transparent rather than an opaque canvas, use a modest semantic-foreground mix for stronger borders, and adjust card, popover, accent, secondary, and message foregrounds against their own surfaces when the base foreground changes.
- Runtime-adjusted roles must be ordinary custom properties shared by the Tailwind bridge, global CSS, imperative style strings, and bridge snapshots sent to other renderers. Audit literal `var(--foreground)`, `var(--border)`, and related role reads so headings, markdown chrome, menus, previews, and utilities do not split into adjusted and unadjusted colors.
- Inspect emitted production CSS after unusual variants, arbitrary selectors, nested pseudo-elements, or attribute matching. Source syntax that looks valid is insufficient.
- Flag malformed or empty emitted selectors such as empty `:is()` or `:not(:is())`, selector branches that can never match their own class attribute, and transformations that silently drop the intended rule.
- Prefer source-level logic over clever selectors when behavior depends on consumer-provided class strings. Preserve `MenuPopup`'s current defaulting contract: a string `className` containing a `w-*`, `min-w-*`, or `max-w-*` utility after variant prefixes are stripped suppresses `min-w-32`; a string without one and a functional/non-string `className` keep the default. Arbitrary width values count as width utilities, and the consumer class must be merged last so it retains control. Do not replace this with a raw class-attribute substring selector.
- Do not fail solely because a valid emitted selector is verbose or because a source rule uses an intentional custom property.
## 3. Composable components

## Scroll and virtualized lists
The reference for how this codebase wants UI built is the composer banner system in `apps/web/src/components/chat/`:

- `ScrollArea` owns and masks its Base UI viewport. A virtualized list usually owns a native scrolling element and cannot automatically reuse viewport-specific `ScrollArea` behavior.
- Repeated native or virtualized overflow fades should use the shared virtualized-scroll-fade contract rather than component-named mask selectors.
- Preserve runtime top and bottom overflow state. Do not replace dynamic fades with an always-on static mask.
- Preserve fade geometry and keep the native scrollbar lane opaque so the track and thumb stay visible and usable. A visually similar mask that fades the scrollbar is a regression.
- Verify actual scroll behavior when changing virtualizers, masks, overflow ownership, or scrollbar selectors. Source-level class comparison is not enough.
- `ComposerBanner.tsx` exports one object of small slot components (`Root`, `Row`, `Icon`, `Content`, `Actions`, `Dismiss`, `Children`, and so on). Each slot owns its own Tailwind classes, exposes a `data-slot` attribute, takes `className` and spreads the rest of its props, and uses `cn` so callers can adjust without overriding. Variants and density are props on `Root`, not ad hoc class strings at call sites. Where a slot needs a real control it renders `Button` from `ui/` rather than a styled `<button>`.
- `ComposerBannerStack.tsx` composes those slots into the ordered stack and owns only stack behavior (priority, expand and collapse, dismiss transitions).
- Consumers such as `ComposerActivityStatus.tsx`, `ComposerStashBadge.tsx`, and `ComposerPlanFollowUpBanner.tsx` are a few lines of `<ComposerBanner.Row><ComposerBanner.Icon/><ComposerBanner.Content>…` with no styling of their own.

## Visual and layout preservation
Hold new and changed UI to that shape:

- Preserve responsive geometry, titlebar insets, panel and inline-preview modes, desktop Electron layout, light and dark contrast, clipping, radius, and composable shadows.
- For meaningful visual changes, prefer available real-app evidence using the actual component and state. A mock recreation does not validate the real component. Light and dark evidence is useful when theme-sensitive styles change, but missing or inaccessible evidence alone is not a finding; report only a concrete regression supported by the diff, code, or available artifacts.
- Do not treat a screenshot as proof of keyboard, overflow, scrollbar, responsive, or runtime-theme behavior. Pair visual evidence with source, computed-style, emitted-CSS, or interaction checks as appropriate.
- Be alert to shared primitive color indirection. When a primitive routes icon color through a CSS variable, ensure migrated contextual icons retain their intended tone, including pressed and disabled states.

## Environment routing in shared renderers

- A shared renderer that performs an environment-scoped action — a server RPC such as opening or revealing a file, an environment-gated capability check, or an OS-derived label — must resolve its target environment from explicit scope: the bound thread's `environmentId`, or an `environmentId` prop threaded from the owning surface. Never let it silently fall back to the globally active environment. Multi-environment surfaces (pull request panels, review annotations, cross-environment listings) can render content from environment B while environment A is active; a silent fallback sends B's paths to A's server and presents A's platform wording.
- When a call site cannot supply an explicit environment scope, suppress the environment-scoped actions at that call site rather than guessing. A hidden menu item is correct; an item that targets the wrong server is a concrete finding.
- Capability gating, action dispatch, and user-facing labels must all read from the same environment's server config that the action will execute against. Flag a renderer whose label derives from one environment while its RPC targets another.
- Flag new call sites of shared markdown, chip, or menu renderers that trigger environment actions without passing explicit scope, and flag new environment-action props whose default reintroduces an active-environment fallback.

## Change discipline

- Review the pull request's changed scope and directly affected consumers. Do not turn a focused PR into a demand for unrelated legacy cleanup.
- Prefer the smallest durable contract over a component-specific workaround or a broad abstraction with one consumer.
- Preserve intentional exceptions and comments that explain browser, virtualizer, theme, or Electron constraints.
- If a proposed cleanup cannot prove ownership or semantic equivalence, ask for evidence or leave it unchanged rather than guessing.
- Select verification gates according to the changed behavior: typecheck or focused tests for typing and interaction contracts, production build and emitted-CSS inspection for Tailwind or selector transformations, and real-app evidence for meaningful visual behavior when available. These gates are complementary when applicable, but do not require every gate for tiny visual-only migrations or fail solely because an artifact the configured tools cannot produce is absent.
- Flag a new component that copies a chunk of an existing primitive's markup and classes instead of composing or extending it.
- Flag a large one-off class string on a shared component when it is clearly the same treatment another call site already uses. The fix is a variant or a new slot on the shared component.
- Flag a new composer banner or notice that bypasses `ComposerBanner` slots and hand-builds its row, icon column, or actions.

## Reporting

Report only concrete violations introduced by changed lines or behavior, plus pre-existing behavior that the patch directly makes relevant or worsens. Touching a large file does not make unrelated retained issues reportable. Prefer precise inline comments on the smallest relevant line range. Explain the broken behavior or ownership rule, not merely the preferred syntax, and state the smallest expected fix. A clear consistency or regression risk may fail the check. Do not fail for optional aesthetic preferences, harmless class ordering, or unrelated legacy code.
Report only violations introduced by changed lines. Post each as a brief inline comment on the relevant line: name the rule, name the primitive or location the code should use instead, and stop. Do not comment on class ordering, aesthetic preference, or untouched legacy code, and do not demand cleanup outside the PR's scope.

This check defaults to failure. When there are no findings, stop immediately and make the entire final response exactly `All clear` on one line. Do not add a title, explanation, punctuation, Markdown, JSON, or trailing analysis, and do not continue reasoning after deciding the review is clean.
When there are no findings, make the entire final response exactly `All clear` on one line with nothing else.
16 changes: 7 additions & 9 deletions apps/desktop/src/backend/DesktopBackendManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -663,15 +663,13 @@ export const makeBackendInstance = Effect.fn("makeBackendInstance")(function* (
Ref.update(state, withActiveRun(runId, f));

const snapshot = Ref.get(state).pipe(
Effect.map(
(current): DesktopBackendSnapshot => ({
desiredRunning: current.desiredRunning,
ready: current.ready,
activePid: activePid(current.active),
restartAttempt: current.restartAttempt,
restartScheduled: Option.isSome(current.restartFiber),
}),
),
Effect.map((current): DesktopBackendSnapshot => ({
desiredRunning: current.desiredRunning,
ready: current.ready,
activePid: activePid(current.active),
restartAttempt: current.restartAttempt,
restartScheduled: Option.isSome(current.restartFiber),
})),
);
const currentConfig = Ref.get(state).pipe(Effect.map((current) => current.config));

Expand Down
2 changes: 2 additions & 0 deletions apps/desktop/src/ipc/DesktopIpcHandlers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
fetchSshEnvironmentDescriptor,
fetchSshSessionState,
issueSshWebSocketTicket,
resolveSshHost,
resolveSshPasswordPrompt,
} from "./methods/sshEnvironment.ts";
import {
Expand Down Expand Up @@ -68,6 +69,7 @@ export const installDesktopIpcHandlers = Effect.fn("desktop.ipc.installHandlers"
yield* ipc.handle(clearConnectionCatalog);

yield* ipc.handle(discoverSshHosts);
yield* ipc.handle(resolveSshHost);
yield* ipc.handle(ensureSshEnvironment);
yield* ipc.handle(disconnectSshEnvironment);
yield* ipc.handle(fetchSshEnvironmentDescriptor);
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/src/ipc/channels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ export const GET_CONNECTION_CATALOG_CHANNEL = "desktop:get-connection-catalog";
export const SET_CONNECTION_CATALOG_CHANNEL = "desktop:set-connection-catalog";
export const CLEAR_CONNECTION_CATALOG_CHANNEL = "desktop:clear-connection-catalog";
export const DISCOVER_SSH_HOSTS_CHANNEL = "desktop:discover-ssh-hosts";
export const RESOLVE_SSH_HOST_CHANNEL = "desktop:resolve-ssh-host";
export const ENSURE_SSH_ENVIRONMENT_CHANNEL = "desktop:ensure-ssh-environment";
export const DISCONNECT_SSH_ENVIRONMENT_CHANNEL = "desktop:disconnect-ssh-environment";
export const FETCH_SSH_ENVIRONMENT_DESCRIPTOR_CHANNEL = "desktop:fetch-ssh-environment-descriptor";
Expand Down
Loading
Loading