Tags: munimtechnologies/mtcode
Tags
merge(upstream): sync 30 commits from pingdotgg/t3code main Compact sidebar rail and compact thread rows, connections organized by environment, in-app thread notifications, pull request routing across matching accounts, streaming paragraph flush, and a reusable dev-worktree auth token. Conflicts resolved in upstream's favor wherever both sides implemented the same behavior; fork-only features were kept and re-grafted onto upstream's structure: - useResizableWidth: took upstream's extracted useResizeDrag verbatim, dropping the fork's cross-window useLocalStorage variant of the same hook. - SettingsSidebarNav: upstream's collapsible footer layout; the fork's settings routes and shrink-0 avatar box stay. - ConnectionsSettings: upstream's flattened environments list and Version row; the environment rename (upstream PR pingdotgg#7267, not yet landed there) is re-grafted through a new EnvironmentRow labelSlot, and the accounts section keeps its place at the top. - Sidebar: upstream's compact thread rows, with GoalActiveMarker alongside the title and hidden in the icon rail, where it would print "Active". - contracts/settings, rpc, ws, PullRequestService: additive on both sides. Typecheck clean, web builds, contracts 453/453 and web 5186/5186 pass. The 28 server-suite failures reproduce unchanged on the pre-merge commit. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
merge(upstream): sync 3 commits, adopt upstream's Forgejo and Gitea Upstream implemented Forgejo and Gitea over the `fj` and `tea` CLIs (pingdotgg#11436). This fork had already added its own Forgejo support, so the merge arrived with two providers for the same host — the shape that has crash-looped this backend before, when contracts and server disagreed about one model. Upstream's wins, by the standing rule and because it is a superset: it covers Gitea as well, and neither host is in use here. The fork's implementation is dropped, not kept alongside — ForgejoApi, ForgejoKeyStore and their tests are gone, and `server.ts` and `ws.ts` no longer wire `ForgejoApi.layer`. Dropping it left dangling and duplicate references in files that merged without conflicting, each of which would have been silent breakage: a duplicate `"forgejo"` in `SourceControlProviderKind`, duplicate keys in `PROVIDER_REQUIREMENT` and the PR link menu, a duplicate `ForgejoIcon` export and a duplicate import specifier in SourceControlSettings, three duplicated `case "forgejo"` arms in the palette, duplicated branches in two mobile screens, and a dead `case "forgejo": return null` shadowing upstream's real `fj` checkout command. Unrelated fork features kept where they shared a file: the Goals palette action, the Grok adapter's desktop-MCP wiring, the PR code tab's review-next-step, and `CHANGE_REQUEST_URL_PATTERNS` in shared sourceControl, which CheckpointReactor uses. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
fix(web): drop the MT wordmark onto the cap line A single pixel was not enough. The mark is top-heavy — its ink centroid sits 45% of the way down rather than 50% — so centring its bounding box still leaves it reading high next to the label. Offsetting 2px puts the top of the mark on the cap line of "Code" and lets it hang slightly below the baseline, which is how the lockup is meant to sit. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
fix(web): centre the MT wordmark instead of shrinking it The previous fix treated an alignment problem as a size problem and dropped the mark to 10px, which read as too small next to the label. The row is baseline-aligned, so an inline SVG rests its bottom edge on the text baseline. The mark is 12px and the `text-sm` label's caps are 10px in SF Pro, so the whole 2px difference sat above the label. Moving the mark down a pixel centres it on the cap block and keeps its size. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
build(web): declare notices for the fork's math dependencies Upstream's new third-party-licenses plugin (pingdotgg#8962) refuses to build when a bundled package ships no license or notice file. `rehype-katex` and `remark-math` are the fork's math-rendering dependencies, so upstream's config never had to cover them, and the first release build after the sync failed on exactly those two. Both are MIT by Junyoung Choi — stated in each package's own readme and author field. They carry no license file because the text lives at the root of the remarkjs/remark-math monorepo rather than in the published sub-packages. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
fix(chat): name a generated picture where the desktop client reads it Four generated sky options still rendered as four bodiless "Image view" rows on desktop, after both the server projection and the client learned to read `item.savedPath`. Reading the client's own work-log entries out of React in the running app shows why: on desktop `viewedImagePath` is never set, even for activities whose payload plainly carries `data.imagePath`. Every picture that does render there renders off the top-level `detail` field instead, which `imageView` items arrive with and `imageGeneration` items do not. The projection now names the file in `detail` as well, when the item does not describe itself. That is where the rows that work get their path, it survives to the client on desktop, and because the projection runs on read it applies to threads that were recorded months ago. Why `data.imagePath` is dropped on desktop and only there — a browser against the same server reads it, from the same bundle — is still unexplained and worth chasing; this stops the pictures being invisible in the meantime. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
feat(chat): lay a run of generated pictures out as one strip Four generated options rendered as four full-width rows, each a screen apart, with the message that asks the reader to pick between them below the last one. Choosing between pictures means seeing them together. A run of adjacent picture rows now collapses into one `image-batch` row: a wrapping strip of equal-height thumbnails, free widths so nothing is cropped, each one click-to-expand. A lone picture keeps its own row with its path heading, the generate-then-read-back dedupe carries over, and a failed call or a subagent CTA keeps the row it needs to say so. Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
fix(web): render LaTeX properly in chat
Two causes made math in MT Code look worse than in Codex. The KaTeX
stylesheet was never imported, so the MathML branch KaTeX emits for
accessibility showed as duplicate plain text after every formula and the
math fell back to the page font. And bracket display blocks were only
paired within a single Markdown text node, so any \[...\] whose body
split the paragraph (an = line reads as a setext heading, _{...} as
emphasis) was left unrendered as raw TeX inside a heading.
Load katex.min.css from the web entry, and pair \(..\) / \[..\]
across text nodes in source order, refusing pairs that span a blank line.
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MPJSLhra3wugX8GEXAVz5h
merge: sync upstream t3code (4 commits, 20e2e89..3e6f856) Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_015rH8S45QU61ELNfez4sM6J
PreviousNext