Conversation
ammario
requested changes
Oct 1, 2025
ammario
left a comment
Member
There was a problem hiding this comment.
seems to be a lot of formatting changes - can you include the configuration file for the formatter in this change?
ThomasK33
changed the base branch from
main
to
thomask33/10-02-add_type_imports_and_array_syntax
October 2, 2025 10:50
ThomasK33
force-pushed
the
thomask33/10-01-add_slash_command_suggestions
branch
from
October 2, 2025 10:50
b6b8ac5 to
e836e61
Compare
Implement slash command suggestion infrastructure to power provider configuration UX. Replace command parser with definition driven structure and surface new provider list IPC channel to populate dynamic suggestions. Add unit tests covering heuristics.
ThomasK33
force-pushed
the
thomask33/10-02-add_type_imports_and_array_syntax
branch
from
October 2, 2025 10:53
186ad8f to
0de911c
Compare
ThomasK33
force-pushed
the
thomask33/10-01-add_slash_command_suggestions
branch
from
October 2, 2025 10:53
e836e61 to
f0d0513
Compare
Member
Author
Included them in #10 for easier reviewing and to not colocate formatting changes with this one. |
- Introduced Config class for test isolation
Resolves merge conflicts from PR #10 which adds: - Type imports for better code organization - Array<T> syntax for complex array types - Prettier schema configuration - ESLint rules for type imports and array syntax - Shell formatting script and configuration 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
Member
|
Nice little UX improvement -- my code around here needs a bunch of cleanup but ill tackle that soon |
Member
|
(merged in 6ebd8de) |
duynguyen020304
pushed a commit
to duynguyen020304/mux
that referenced
this pull request
May 10, 2026
…RY, tests Batch 1 — Compile Errors & Correctness: - Add TOGGLE_KANBAN to KEYBIND_LABELS and KEYBIND_GROUPS (coder#1) - Fix Ctrl+K conflict → Ctrl+Shift+K to avoid PREV_WORKSPACE collision (coder#2) - Add TOGGLE_KANBAN dispatch handler in App.tsx (coder#3) - Fix dirty-cache in promoteQueuedTask: move flag clearing after moveTask (coder#5) - Wrap 4 IPC helpers in KanbanBoard with try/catch (coder#4) Batch 2 — Consistency & DRY: - Deduplicate KanbanColumnSchema: import from canonical orpc/schemas (coder#6) - Remove unused KanbanBoardData import from kanbanStorage.test (coder#7) - Remove dead KANBAN_STORAGE_KEYS constant (coder#8) - Replace console.warn with log helper in kanbanStorage (coder#9) - Replace useEffect form reset with key prop in TaskDetailModal (coder#10) - Remove unsafe {} as KanbanTask cast, use EMPTY_FORM pattern (coder#11) - Add loading state + error logging to KanbanView (coder#12, coder#13) - Add KANBAN_STATUS_LABELS helper, use in TaskDetailModal (coder#14) - Validate column membership in reorderTasks (coder#15) - Use KanbanTaskPriority type import in TaskCreateModal (coder#16) Batch 3 — Tests: - Add 4 tests for updateColumn (coder#17) - Add 3 tests for promoteQueuedTask (coder#18) - Rename misleading test 'rejects empty title' → 'accepts empty title' (coder#19) 43 tests pass (was 36). No typecheck or lint regressions.
yermakoffivan
pushed a commit
to yermakoffivan/mux
that referenced
this pull request
Aug 31, 2026
…ming aggregation (coder#4016) ## Summary Splits src/browser/stores/WorkspaceStore.ts's three responsibilities at two seams: the IPC subscription transport (reconnect loops, exponential backoff, stall watchdogs, attempt-scoped aborts) moves into a new pure `subscriptionTransport.ts` module, and high-frequency streaming deltas (`stream-delta`, `reasoning-delta`, `tool-call-delta`, advisor live output) move off whole-workspace state bumps onto a display-row-keyed channel consumed by the leaf message renderer. WorkspaceStore becomes a reactive cache; during streaming, only the row a delta changes re-renders, not ChatPane and not sibling rows. **Net LOC: production −100, tests −551 (total −651).** ## Background Refactor coder#8 from the 2026-08-29 architecture review (evidence at main @ f04e0f8). The transport skeleton was copy-pasted across the onChat, activity, and terminalActivity loops and only testable through mock router harnesses. Every token delta called `states.bump(workspaceId)`, re-rendering ChatPaneContent (1,991 lines) and re-running its 10 heavy useMemos per delta, exactly what the repo's colocate-subscriptions rule forbids. ## Implementation - `runSubscriptionLoop` owns the generic attempt lifecycle (backoff schedule + reset-on-event, stall watchdog with start-after-connect semantics, attempt-scoped AbortController bound to the client generation captured before the client await). It has no WorkspaceStore or React knowledge and is fully driven by fake async iterators in tests. Per-stream semantics (since-cursors, caught-up snapshots, replay reconciliation, the single-active-onChat assertion) stay in WorkspaceStore's callbacks. - `subscribeToStats` / `subscribeToTimeline` intentionally stay as-is: single-shot streams with a genuinely different lifecycle; forcing them through the coordinator would add a shallow layer for no deletion win. - Streaming deltas bump a channel keyed by the active message's trailing displayed row, and `MessageRenderer` subscribes per row via `useStreamingMessageDelta`, so exactly one subscriber wakes per delta even for tool-heavy responses split into many rows. A delta that adds a part creates a new display row, which no leaf has mounted yet, so that case escalates to a workspace bump (plus a streaming-stats invalidation); structural events (stream start/end, tool lifecycle, init/caught-up) keep bumping whole WorkspaceState, preserving metadata and hydration behavior. - The live lookup only overrides the actively streaming message, so completed rows keep transcript-level transforms (e.g. merged stream-error counts). Channel keys are tracked per workspace and released on terminal events, background activity stops, replay clears (advisor), and workspace removal, so MapStore version maps do not grow unbounded. - At stream end the published final message and the live-read content come from the same aggregator, so completion causes no visible content swap. ## Irreducible additions (per-item) - `subscriptionTransport.ts` (+151): the extracted seam itself; replaces ~480 lines of triplicated loop code. - `subscriptionTransport.test.ts` (+279): table-driven scenarios over fake iterators/timers (backoff, watchdog, abort ordering, client-generation swap race); replaces ~1,180 lines of deleted mock-router retry/watchdog tests in WorkspaceStore.test.ts. - Behavioral tests in WorkspaceStore.test.ts: row-keyed delta routing without whole-state bumps, row-creation escalation, text accumulation equality, key release on terminal/background-stop paths, delta vs stale bootstrap race. ## Validation - Remote dogfood UAT (regression-focused, adversarial): long streaming turns with tool calls, backend kill/restart mid-stream, window reload mid-stream, workspace switch mid-stream, Escape interrupt, metadata time-series vs baseline. A render-count probe confirmed the streaming row updates without whole-pane re-renders. - Reconnect forensics compared the branch against its fork-point baseline with identical methodology (chat.jsonl + DOM message-id inspection on both): behavior is structurally identical. Two pre-existing main behaviors were documented and intentionally not "fixed" here (resume-after-restart persists a partial + continuation message pair, splitting one logical response across two rows; first-turn aggregate stats populate late). Both reproduce identically at f04e0f8; changing them would be behavior changes outside this refactor's scope. - Five Codex review rounds hardened the delta channels (row mounting for part-creating deltas, stats invalidation, key lifecycle across background stops and replay clears, client-generation race, merged-error row preservation); every fix landed with a discriminating test, most red-green verified. - `make static-check` green; whole-file `bun test` green for every touched test file. ## Risks Medium-sensitivity area: chat streaming and reconnect. The transport extraction is structure-preserving (same backoff constants, watchdog timings, and abort ordering, now asserted by deterministic unit tests), and delta isolation only narrows which subscribers re-render; it does not change event application. Highest residual risk is a subtle re-render dependency on per-delta content outside the leaf path; UAT's smoothness and metadata time-series probes targeted exactly that and found parity with baseline. --- _Generated with `xum` on Mike's behalf • Model: `anthropic:claude-fable-5` • Thinking: `xhigh` • Cost: `$61.13`_ <!-- xum-attribution: model=anthropic:claude-fable-5 thinking=xhigh costs=61.13 --> ## Stack Layer 9/10 of the architecture refactor stack (net -5,101 LOC overall). This PR's diff is only this layer, against `mike/arch-composer-hooks`.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implement slash command suggestion infrastructure to power provider configuration UX.
Replace the command parser with a definition-driven structure and surface a new provider list IPC channel to populate dynamic suggestions.
Add unit tests covering heuristics.