🤖 feat: share workspace transcript to mux.md as chat.jsonl#2110
🤖 feat: share workspace transcript to mux.md as chat.jsonl#2110ibetitsmike merged 11 commits intomainfrom
Conversation
|
@codex review Please focus on:
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 24fda2cbb6
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
|
@codex review Addressed the P2 about cross-workspace leakage by resetting share state on workspaceId changes and guarding in-flight uploads. |
|
Codex Review: Didn't find any major issues. More of your lovely PRs please. ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
0990f48 to
9b835a8
Compare
Adds a workspace header action that uploads chat.jsonl to mux.md, with an “Include tool output” toggle and Cmd/Ctrl+Shift+L keybind.
9b835a8 to
d5bf186
Compare
Support mux.md base URL override for staging/local deployments. - Add getMuxMdBaseUrl/getMuxMdAllowedHosts helpers and route upload/download/delete through them. - Expose MUX_MD_URL_OVERRIDE to the renderer via preload as window.api.muxMdUrlOverride. - Harden web_fetch mux.md handling to only decrypt allowed hosts and download from the link origin.
Inject MUX_MD_URL_OVERRIDE into the Vite client bundle and have muxMd.ts read it when running in a plain browser (no Electron preload).
When building a transcript for sharing, inline the provided plan snapshot into every completed\npropose_plan tool call that has a planPath and is missing planContent. This avoids fragile\nplanPath vs snapshot path normalization.\n\nAlso warn (but continue) if plan content can't be loaded while generating a share link.\n\n---\n\n_Generated with `mux` • Model: `openai:gpt-5.2` • Thinking: `xhigh` • Cost: ``_\n\n<!-- mux-attribution: model=openai:gpt-5.2 thinking=xhigh costs=unknown -->
Summary
Adds a workspace-level "Share transcript" action in the header that uploads the full conversation to mux.md as
chat.jsonl.Background
chat.jsonl.api.workspace.getPlanContent(), sopropose_planfile contents must be inlined into the shared transcript for plans to render.Implementation
buildChatJsonlForSharing()insrc/common/utils/messages/transcriptShare.ts(JSONL serialization + optional tool-output stripping).text/reasoningdelta parts during export to keep shared transcripts small (older history can contain thousands of streaming deltas).planContentinto allpropose_plantool outputs during export (so shares are portable). Path matching was removed — thepropose_planhandler stores~/.mux/...while the backend resolves to an absolute path, and matching across platforms was fragile. Since all propose_plan calls in a workspace reference the same canonical plan file, the latest content is always correct.propose_plantool output even when "Include tool output" is disabled; other tool outputs are stripped.ShareTranscriptPopoverand wired intoWorkspaceHeaderwith keybindCmd/Ctrl+Shift+L.model+thinkingin theFileInfopassed touploadToMuxMd().@coder/mux-md-clientto^0.1.0-main.27.MUX_MD_URL_OVERRIDEhandling so uploads/downloads/deletes/expiration can target staging/local mux.md.Validation
make static-checkbun test --bail src/common/utils/messages/transcriptShare.test.ts— 13/13 passRisks
propose_plan) are converted fromstate: "output-available"→"input-available". Viewers that renderinput-availableas "pending" may show a tool call without results.Generated with
mux• Model:anthropic:claude-opus-4-6• Thinking:high• Cost:$34.06