Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
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
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
  •  
  •  
  •  
89 changes: 31 additions & 58 deletions .macroscope/check-run-agents/effect-service-conventions.md

Large diffs are not rendered by default.

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
10 changes: 10 additions & 0 deletions apps/desktop/src/ipc/methods/sshEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,16 @@ export const discoverSshHosts = DesktopIpc.makeIpcMethod({
}),
});

export const resolveSshHost = DesktopIpc.makeIpcMethod({
channel: IpcChannels.RESOLVE_SSH_HOST_CHANNEL,
payload: Schema.String,
result: DesktopSshEnvironmentTargetSchema,
handler: Effect.fn("desktop.ipc.sshEnvironment.resolveHost")(function* (alias) {
const sshEnvironment = yield* DesktopSshEnvironment.DesktopSshEnvironment;
return yield* sshEnvironment.resolveHost(alias);
}),
});

export const ensureSshEnvironment = DesktopIpc.makeIpcMethod({
channel: IpcChannels.ENSURE_SSH_ENVIRONMENT_CHANNEL,
payload: DesktopSshEnvironmentEnsureInputSchema,
Expand Down
1 change: 1 addition & 0 deletions apps/desktop/src/preload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ contextBridge.exposeInMainWorld("desktopBridge", {
ipcRenderer.invoke(IpcChannels.SET_CONNECTION_CATALOG_CHANNEL, catalog),
clearConnectionCatalog: () => ipcRenderer.invoke(IpcChannels.CLEAR_CONNECTION_CATALOG_CHANNEL),
discoverSshHosts: () => ipcRenderer.invoke(IpcChannels.DISCOVER_SSH_HOSTS_CHANNEL),
resolveSshHost: (alias) => ipcRenderer.invoke(IpcChannels.RESOLVE_SSH_HOST_CHANNEL, alias),
ensureSshEnvironment: async (target, options) =>
unwrapEnsureSshEnvironmentResult(
await ipcRenderer.invoke(IpcChannels.ENSURE_SSH_ENVIRONMENT_CHANNEL, {
Expand Down
1 change: 0 additions & 1 deletion apps/desktop/src/preview-pip-preload.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// @effect-diagnostics globalDate:off - This isolated Electron preload does not run inside an Effect runtime.
import type { DesktopPreviewRecordingFrame } from "@t3tools/contracts";
import { contextBridge, ipcRenderer } from "electron";

Expand Down
2 changes: 2 additions & 0 deletions apps/desktop/src/settings/DesktopClientSettings.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ const clientSettings: ClientSettings = {
browserDefaultZoomFactor: 1.25,
browserDefaultAppearance: "dark",
browserRecordingFrameRate: 60,
browserLinkTarget: "app",
browserAutoShowFloatingPreview: false,
browserProfiles: [{ id: "work", name: "Work", kind: "persistent" }],
browserDefaultProfileId: "work",
Expand All @@ -29,6 +30,7 @@ const clientSettings: ClientSettings = {
contextWindowMeterEnabled: false,
dismissedProviderUpdateNotificationKeys: [],
diffIgnoreWhitespace: true,
diffLayout: "stacked",
environmentIdentificationMode: "artwork",
favorites: [],
fontFamilyCode: "",
Expand Down
9 changes: 9 additions & 0 deletions apps/desktop/src/ssh/DesktopSshEnvironment.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import type {
} from "@t3tools/contracts";
import * as NetService from "@t3tools/shared/Net";
import * as SshAuth from "@t3tools/ssh/auth";
import { resolveSshTarget } from "@t3tools/ssh/command";
import { discoverSshHosts } from "@t3tools/ssh/config";
import {
SshCommandError,
Expand Down Expand Up @@ -54,6 +55,9 @@ export class DesktopSshEnvironment extends Context.Service<
readonly discoverHosts: (input?: {
readonly homeDir?: string;
}) => Effect.Effect<readonly DesktopDiscoveredSshHost[], DesktopSshEnvironmentDiscoverError>;
readonly resolveHost: (
alias: string,
) => Effect.Effect<DesktopSshEnvironmentTarget, SshCommandError | SshInvalidTargetError>;
readonly ensureEnvironment: (
target: DesktopSshEnvironmentTarget,
options?: { readonly issuePairingToken?: boolean },
Expand Down Expand Up @@ -136,6 +140,11 @@ export const make = Effect.gen(function* () {
Effect.provide(runtimeContext),
Effect.withSpan("desktop.ssh.discoverHosts"),
),
resolveHost: (alias) =>
resolveSshTarget(alias.trim()).pipe(
Effect.provide(runtimeContext),
Effect.withSpan("desktop.ssh.resolveHost"),
),
ensureEnvironment: (target, ensureOptions) =>
manager
.ensureEnvironment(target, ensureOptions)
Expand Down
Loading
Loading