Skip to content

slash: unified preset+model picker, grouped suggestions, kill 11 commands + harvest/branch#453

Merged
esengine merged 2 commits into
mainfrom
slash-cleanup
May 8, 2026
Merged

slash: unified preset+model picker, grouped suggestions, kill 11 commands + harvest/branch#453
esengine merged 2 commits into
mainfrom
slash-cleanup

Conversation

@esengine

@esengine esengine commented May 8, 2026

Copy link
Copy Markdown
Owner

Summary

Slash surface had 58 commands with no organization, two confusable "fresh start" commands (/clear vs /new), separate preset/model commands solving the same user question, and two heavy features almost nobody opted into. Pulled all of that apart.

Picker

ModelPicker now shows the 3 presets at the top with cost/headline copy and the model catalog below. Auto-detects which preset the loop currently matches (model + effort + autoEscalate) so the cursor lands on the active row. Both /preset (no arg) and /model (no arg) open it.

Grouped suggestions

SlashCommandSpec gains a group field (chat / setup / info / session / extend / code / jobs / advanced). Suggestion palette renders section headers on a bare /; advanced rows hide behind a + N advanced · type to search footer until the user types a letter. /help walks the same registry, so there's one source of truth.

Telemetry

New ~/.reasonix/slash-usage.json counter (read-modify-write, atomic rename) feeds suggestSlashCommands so frequent commands sort first within a prefix. emitSlashInvoked wired to the events.jsonl sidecar for cross-session usage analysis.

Removals — 11 commands

Command Reason
/models Picker covers it
/keys Folded into /help
/resume /sessions picker has switch action
/semantic Folded into /doctor
/clear Merged into /new (alias) — was the most common confusion source
/effort Preset locks effort; independent toggle near-zero use
/rename /sessions picker has rename action
/forget /sessions picker has delete action
/apply-plan Self-described as "fallback" — plan picker handles it
/think Reasoner-only debug; events.jsonl records reasoning
/tool Debug; events.jsonl records all tool calls
/mcp browse Just a suggestion-only entry; /mcp handler still routes ["browse"]

Removals — features

  • Pillar-2 plan-state extraction (/harvest, src/harvest.ts)
  • Parallel-sample selector (/branch, src/consistency.ts, src/loop/branch.ts)
  • Streaming/branching coupling, BranchCard, branch_start/progress/done events, transcript planState / harvestedTurns, --harvest / --branch CLI flags
  • benchmarks/harvest/ deleted
  • ARCHITECTURE.md collapsed from four pillars to three; README + zh-CN + dashboard/PARITY.md updated

i18n cleanup

Cleared dead keys for every removed command/handler: handlers.basic.{helpHelp..helpExit, keys*}, handlers.{semantic, sessions.resume*, model.{models*,harvest*,branch*,effort*}, observability.{think*,tool*}, edits.applyPlan*}, slash.{harvest, branch, effort, rename, forget, apply-plan, think, tool, models}, ui.{harvest*, branch*}.

Public API breaking changes

src/index.ts drops these exports (consumers using them break intentionally):

  • harvest, runBranches, aggregateBranchUsage, defaultSelector
  • emptyPlanState, isPlanStateEmpty
  • TypedPlanState, HarvestOptions, BranchSample, BranchSummary, BranchProgress, BranchOptions, BranchResult, BranchSelector

Test plan

  • npm run verify passes (build + biome + tsc + 2192 tests across 138 files)
  • Unified picker renders presets + models, marks active preset
  • /preset and /model (bare) open the picker; arg form still works
  • Bare / shows grouped suggestion palette with advanced collapsed
  • /help renders by group
  • /clear routes to /new handler (full reset, not screen-only)
  • events.jsonl records slash.invoked per turn
  • ~/.reasonix/slash-usage.json increments + sorts prefix matches
  • Removed commands ⇒ "unknown command" hint
  • No harvest/branch references remain in code paths or i18n

…ands + harvest/branch

The slash surface was 58 commands deep with no organization, two confusable
options for "fresh start" (/clear vs /new), separate preset and model commands
that solved the same user question ("what AI am I using"), and two heavy
features that almost nobody opted into. Pulled all of that apart.

Picker

* ModelPicker now shows the 3 presets at the top with cost/headline copy and
  the model catalog below; auto-detects which preset the loop currently matches
  (model + effort + autoEscalate) so the cursor lands on the active row. Both
  /preset (no arg) and /model (no arg) open it.

SlashSuggestions

* SlashCommandSpec gains a `group` field (chat / setup / info / session /
  extend / code / jobs / advanced). Suggestion palette renders section headers
  on a bare /; advanced rows hide behind a "+ N advanced · type to search"
  footer until the user types a letter. /help walks the same registry, so
  there's one source of truth.

Telemetry

* New ~/.reasonix/slash-usage.json counter (read-modify-write, atomic rename)
  feeds suggestSlashCommands so frequent commands sort first within a prefix.
  emitSlashInvoked is now wired to the events.jsonl sidecar.

Removals (commands)

* /models, /keys, /resume, /semantic — redundant with picker / /help / /doctor.
* /clear merged into /new (now an alias) — the visual-only clear was the most
  common confusion source ("why does /clear keep my context?").
* /effort, /rename, /forget, /apply-plan, /think, /tool, /mcp browse — second
  pass; either covered by other UI (sessions picker has rename/delete; preset
  locks effort) or self-described as fallback / debug.

Removals (features)

* /harvest and the Pillar-2 plan-state extractor (src/harvest.ts).
* /branch and the parallel-sample selector (src/consistency.ts,
  src/loop/branch.ts). Streaming/branching coupling, BranchCard,
  branch_start/progress/done events, transcript planState/harvestedTurns,
  --harvest/--branch CLI flags, all gone.
* benchmarks/harvest/ deleted; ARCHITECTURE.md collapsed from four pillars
  to three; README + zh-CN + dashboard/PARITY updated.

i18n

* Cleared dead keys for every removed command (handlers.basic.helpHelp..helpExit,
  keys*, semantic, resume*, models*, harvest*, branch*, effort*, think*, tool*,
  apply-plan*, slash.harvest, slash.branch, ui.harvest*, ui.branch*).

Tests: 138 files / 2192 tests pass. Public API drops harvest, runBranches,
TypedPlanState, BranchSummary, etc.; consumers using those break intentionally.
Follows the harvest feature removal — benchmarks/harvest/ no longer exists,
so the CI step was breaking on ERR_MODULE_NOT_FOUND. τ-bench dry-run stays.
@esengine esengine merged commit 76e42ac into main May 8, 2026
3 checks passed
@esengine esengine deleted the slash-cleanup branch May 8, 2026 14:31
esengine added a commit that referenced this pull request May 8, 2026
…or session lifetime (#465) (#471)

The /tool slash command was removed in #453 but its supporting
plumbing was left behind: every tool result was still being pushed
into a useRef array, with no consumer ever reading it. Long-running
sessions accumulated full Read/Grep/Bash output indefinitely and ran
out of heap.

#465 reports a JS heap OOM after ~2.6 hours on v0.31.0; this leak
matches the failure shape (mark-compacts ineffective, 4GB ceiling).
esengine pushed a commit that referenced this pull request May 9, 2026
Closes #449

- Theme runtime via useColor() hook + ThemeProvider context
- Built-in themes: default, dark, light, tokyo-night, github-dark, github-light, plus auto/high-contrast
- Persisted via config: theme.name, with auto resolving against terminal background
- /theme slash command (advanced group) with arg completer

Merged through #453 slash refactor (theme placed in advanced group) and #424 semantic config additions.
ChasLui pushed a commit to ChasLui/DeepSeek-Reasonix that referenced this pull request May 23, 2026
…ands + harvest/branch (esengine#453)

* slash: unified preset+model picker, grouped suggestions, kill 11 commands + harvest/branch

The slash surface was 58 commands deep with no organization, two confusable
options for "fresh start" (/clear vs /new), separate preset and model commands
that solved the same user question ("what AI am I using"), and two heavy
features that almost nobody opted into. Pulled all of that apart.

Picker

* ModelPicker now shows the 3 presets at the top with cost/headline copy and
  the model catalog below; auto-detects which preset the loop currently matches
  (model + effort + autoEscalate) so the cursor lands on the active row. Both
  /preset (no arg) and /model (no arg) open it.

SlashSuggestions

* SlashCommandSpec gains a `group` field (chat / setup / info / session /
  extend / code / jobs / advanced). Suggestion palette renders section headers
  on a bare /; advanced rows hide behind a "+ N advanced · type to search"
  footer until the user types a letter. /help walks the same registry, so
  there's one source of truth.

Telemetry

* New ~/.reasonix/slash-usage.json counter (read-modify-write, atomic rename)
  feeds suggestSlashCommands so frequent commands sort first within a prefix.
  emitSlashInvoked is now wired to the events.jsonl sidecar.

Removals (commands)

* /models, /keys, /resume, /semantic — redundant with picker / /help / /doctor.
* /clear merged into /new (now an alias) — the visual-only clear was the most
  common confusion source ("why does /clear keep my context?").
* /effort, /rename, /forget, /apply-plan, /think, /tool, /mcp browse — second
  pass; either covered by other UI (sessions picker has rename/delete; preset
  locks effort) or self-described as fallback / debug.

Removals (features)

* /harvest and the Pillar-2 plan-state extractor (src/harvest.ts).
* /branch and the parallel-sample selector (src/consistency.ts,
  src/loop/branch.ts). Streaming/branching coupling, BranchCard,
  branch_start/progress/done events, transcript planState/harvestedTurns,
  --harvest/--branch CLI flags, all gone.
* benchmarks/harvest/ deleted; ARCHITECTURE.md collapsed from four pillars
  to three; README + zh-CN + dashboard/PARITY updated.

i18n

* Cleared dead keys for every removed command (handlers.basic.helpHelp..helpExit,
  keys*, semantic, resume*, models*, harvest*, branch*, effort*, think*, tool*,
  apply-plan*, slash.harvest, slash.branch, ui.harvest*, ui.branch*).

Tests: 138 files / 2192 tests pass. Public API drops harvest, runBranches,
TypedPlanState, BranchSummary, etc.; consumers using those break intentionally.

* ci: drop harvest-bench dry-run step

Follows the harvest feature removal — benchmarks/harvest/ no longer exists,
so the CI step was breaking on ERR_MODULE_NOT_FOUND. τ-bench dry-run stays.
ChasLui pushed a commit to ChasLui/DeepSeek-Reasonix that referenced this pull request May 23, 2026
…or session lifetime (esengine#465) (esengine#471)

The /tool slash command was removed in esengine#453 but its supporting
plumbing was left behind: every tool result was still being pushed
into a useRef array, with no consumer ever reading it. Long-running
sessions accumulated full Read/Grep/Bash output indefinitely and ran
out of heap.

esengine#465 reports a JS heap OOM after ~2.6 hours on v0.31.0; this leak
matches the failure shape (mark-compacts ineffective, 4GB ceiling).
ChasLui pushed a commit to ChasLui/DeepSeek-Reasonix that referenced this pull request May 23, 2026
Closes esengine#449

- Theme runtime via useColor() hook + ThemeProvider context
- Built-in themes: default, dark, light, tokyo-night, github-dark, github-light, plus auto/high-contrast
- Persisted via config: theme.name, with auto resolving against terminal background
- /theme slash command (advanced group) with arg completer

Merged through esengine#453 slash refactor (theme placed in advanced group) and esengine#424 semantic config additions.
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.

1 participant