Thanks to visit codestin.com
Credit goes to github.com

Skip to content

feat: add slash command suggestions for provider configuration - #8

Closed
ThomasK33 wants to merge 5 commits into
thomask33/10-02-add_type_imports_and_array_syntaxfrom
thomask33/10-01-add_slash_command_suggestions
Closed

ThomasK33 wants to merge 5 commits into
thomask33/10-02-add_type_imports_and_array_syntaxfrom
thomask33/10-01-add_slash_command_suggestions

Conversation

@ThomasK33

Copy link
Copy Markdown
Member

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.

@ammario ammario left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems to be a lot of formatting changes - can you include the configuration file for the formatter in this change?

Base automatically changed from thomask33/10-01-add_nix_dev_env to main October 1, 2025 18:56
@ThomasK33
ThomasK33 changed the base branch from main to thomask33/10-02-add_type_imports_and_array_syntax October 2, 2025 10:50
@ThomasK33
ThomasK33 force-pushed the thomask33/10-01-add_slash_command_suggestions branch from b6b8ac5 to e836e61 Compare October 2, 2025 10:50
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
ThomasK33 force-pushed the thomask33/10-02-add_type_imports_and_array_syntax branch from 186ad8f to 0de911c Compare October 2, 2025 10:53
@ThomasK33
ThomasK33 force-pushed the thomask33/10-01-add_slash_command_suggestions branch from e836e61 to f0d0513 Compare October 2, 2025 10:53
@ThomasK33

Copy link
Copy Markdown
Member Author

seems to be a lot of formatting changes - can you include the configuration file for the formatter in this change?

Included them in #10 for easier reviewing and to not colocate formatting changes with this one.

ammario and others added 4 commits October 2, 2025 10:34
- 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]>
@ammario

ammario commented Oct 2, 2025

Copy link
Copy Markdown
Member

Nice little UX improvement -- my code around here needs a bunch of cleanup but ill tackle that soon

@ammario

ammario commented Oct 2, 2025

Copy link
Copy Markdown
Member

(merged in 6ebd8de)

@ammario ammario closed this Oct 2, 2025
@ThomasK33
ThomasK33 deleted the thomask33/10-01-add_slash_command_suggestions branch October 2, 2025 20:59
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`.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants