Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
0.20.0 - 2026-10-09
Added
-
Mermaid in replies draws complete supported diagrams with theme-aware terminal characters. Settings switches between Auto and Source; unsupported, incomplete, truncated or oversized diagrams retain Mermaid code. Copy and export keep the original Markdown.
-
Math in replies supports terminal text layouts for fractions, roots, scripts, limits, matrices, cases and aligned equations. Settings switches between automatic formatting and LaTeX source; unsupported or oversized formulas retain their complete source.
-
Source readers toggle wrapping with
Wand pan horizontally withAlt+Left/Alt+Right, retaining line numbers, syntax colors and reading positions across actions. -
Image preview pages for composer drafts (
Alt+M), workspace files, deliverables and stored attachments, with Kitty/iTerm2 graphics on supported direct terminals, original-file opening and a text fallback elsewhere. PNG, JPEG, WebP and GIF previews fit the viewport without changing attachment bytes. -
/terminalsearches retained output, navigates matching lines, and loads older history in bounded pages. Pausing freezes the reading snapshot; console actions retain position and search, and End resumes following the latest output. -
/queueand configurableAlt+Qmanage individual guidance, follow-ups, and waiting submissions with live previews, text editing, deletion, and reordering. Edits retain attachments and the composer draft; tool questions take priority, and raced edits return as unsent drafts. -
Unsent composer drafts survive session switches and restarts, retaining cursor positions, folded pastes, images, and file references. Sending or clearing input removes its saved draft; question answers and queued messages stay separate.
-
File and Diff source readers show line numbers, search loaded text, jump to file lines or diff hunks, retain reading positions across navigation and editor actions, and load text previews beyond 128 KiB up to 4 MiB. Markdown previews switch between source and rendered views.
-
Session Tree supports searchable local labels and a marked-node view that preserves ancestor paths. Session Library archives and restores sessions without deleting their logs or attachments; archived sessions stay available through direct resume and content search.
-
Long text pastes fold into editable blocks with original content retained through copying, undo, questions, and queued-message editing. Paste protection prevents embedded Enter keys from submitting recognized unmarked pastes.
-
Alt+Ssends text guidance to the active Turn’s next model step, keeps rejected drafts, and distinguishes guidance from next-turn follow-ups.Alt+Iexpands pasted blocks; both shortcuts are configurable. -
Notifications can be limited to unfocused terminals, coalesce event bursts, and prioritize requests for input and failures over completion.
-
Mouse text selection works alongside transcript scrolling in folded and expanded views, with word/line selection and optional copying on release. Settings controls mouse ownership and automatic copying; Auto respects tmux mouse off.
-
Context style in Settings selects percentage, an occupancy bar, used/window tokens, or detailed values. Context occupancy defaults to percentage only.
-
Double Escape and
/treeopen a searchable Session Tree with forks at their conversation boundaries, current-branch markers, and responsive content previews. Enter prepares a branch from a historical Turn or continues a branch;Alt+Entercontinues the selected node’s branch. Browsing and cancellation preserve the active conversation and draft. -
Settings includes a persistent Editor choice shared by file previews and
Ctrl+X, with automatic detection of installed editors and compatibility with existing$VISUALor$EDITORpreferences. -
Timed questions show a countdown, pause while editing or with
Ctrl+T, and remain answerable through/questionsafter the wait ends.Ctrl+Sskips one question;Escleaves a finite timed question pending, andCtrl+Cinterrupts. Resumed sessions retain pending questions and display late answers in the transcript. -
/pluginsmanages running-profile entries and bundles, with installation progress, cancellation, diagnostic logs, and explicit dependency-script approval. Configuration patches are watched; replacing installed package code still requires a restart. -
/settingsincludes a Plugins section for live configuration, inheritance, resetting overrides, and rejecting stale writes. Enter opens the selected plugin; Esc returns to Settings. API keys with a credential-reference field use the Harness credential store. -
Subagent model selection can be enabled with an exact provider/model allowlist for new sessions. It defaults off; forked delegation continues to inherit its parent route.
-
Cordis includes the published Harness authoring Skills and permission-gated
plugin_managertool./agentshows unavailable presets, and/agent inspect [preset-id]reports declarations, failures, and the composition retained by the current session. -
Interactive
/diffreviews staged, unstaged, untracked, and retained Turn changes with per-file navigation, previews, and external opening;Alt+Vopens the current Turn’s review. -
/terminallists session-owned persistent shells with live output, line input, interruption, and confirmed closure. Leaving the console keeps the shell running. -
/attachstages general files in the composer;/attachmentspreviews stored originals and/filesbrowses the workspace and session deliverables. -
Agent Hub displays recent Workflow runs, recorded phases, member outcomes, and links to available child transcripts, including after resume.
-
Settings offers opt-in Codex or Claude Code command hooks with a configurable JSON path. Hook failures and blocking decisions appear in the transcript.
-
/export archive [path]writes a ZIP containing logical session logs, descendant sessions, and verified original attachments without overwriting existing files.
Changed
-
Compatibility: Upgrade the published DeepSeek Harness runtime to
0.2.1-alpha.1with its matching Cordis, loader, timer, and schemastery releases. Plugin consumers must upgrade to Cordis~4.0.5-alpha.1. Goal cancellation withdraws queued follow-up messages so subsequent input can proceed. -
Tables that cannot fit useful columns on narrow terminals show labelled records.
-
Completed Turn summaries show the configured expansion shortcut when space allows, keeping duration and failures visible at narrow widths.
-
Searchable choice lists prioritize exact names and prefixes and support multiword queries and short word abbreviations. Command and project-path completion favor compact matches at word boundaries.
-
File-edit tool previews highlight changed identifiers, punctuation, and spacing more precisely, preserve emoji and combining sequences, and retain context in large hunks with small edits.
-
Code previews, fenced replies, and tool diff context use Prism syntax grammars with theme-aware colors, including multiline comments and strings, TSX, configuration files, and PowerShell. Diff documents color added and removed lines.
-
The default PTC execution budget is 180 seconds, leaving time for the default 120-second question wait and its result. Taking time on a question does not pause the outer program deadline.
-
CLI and runtime plugin operations share the profile write lock. Feature toggles apply after the running profile reloads its patch; existing sessions retain their Agent preset revision.
Fixed
-
Returning from file previews and other full-screen pages repaints the live transcript and composer, preventing stale borders and displaced input rows.
-
Markdown code retains literal HTML tags, entities and emphasis characters. Incomplete formulas remain readable while streaming, and compound exponents no longer convert only their first digit.
-
Herdr status follows the root Agent during session updates and subagent inspection, retries failed reports, and waits briefly for release on exit. Background runs and smoke-test terminals no longer claim their caller’s Herdr pane.
-
Pasting a search term into a source reader updates matching lines immediately.
-
Themes pair prompt and tool-card text with their fixed backgrounds, improve tool output, code, and hint contrast, and keep error text visible in 16-color terminals. Nested color resets preserve the surrounding card colors.
-
Returning from transcript browsing keeps floating controls out of tmux scrollback even when
scroll-on-clearis enabled. -
Clipboard copying forwards to tmux clients and remote terminals when needed, distinguishing confirmed local copies from unacknowledged terminal requests.
-
Status line settings accurately name the telemetry toggle and context label; disabling telemetry keeps model and workspace metadata visible in the preview.
-
Folding a completed Turn or returning from expanded tool details no longer leaves a large blank gap above the reply when the prompt has entered terminal scrollback.
-
Markdown tables honor left, center, and right alignment, keep wide characters within column budgets, and isolate wrapped cell styles and hyperlinks from neighboring cells and borders. Views narrower than eight display cells retain the original Markdown table syntax.
-
File browsing reviews sibling files, accepts uppercase document shortcuts, keeps all action buttons visible at narrow widths, and shows external-open and editor results in the preview. User-initiated file navigation no longer emits attention notifications.
-
Wrapped code preserves indentation, repeated spaces, and syntax colors across continuation rows.
-
Interactive
/diffresolves listed changes from the Git repository root when launched in a subdirectory, keeping patches, previews, and external file actions on the same file. -
Persistent terminal tools use PowerShell on Windows and Bash on POSIX.
-
Enabling the Ralph loop in
/settingsnow persists across launches. Feature overrides support both enabling a default-off tool and disabling a default-on feature.
0.19.0 - 2026-10-03
Added
Alt+Otoggles complete tool inputs and results for the turn being read, including running turns and PTC sub-calls. New calls in an inspected live turn inherit the setting.Ctrl+Oor returning to the live tail resets tool details; the shortcut is configurable astoggle-tool-details.- Scroll the transcript with the mouse wheel in both folded and expanded views. A clickable
Jump to latest message · Endcontrol returns to the live tail, and the user prompt stays pinned at the top while its reply is being read. - Each completed turn reports its changed files and added/removed line counts, including untracked files. Lists fold after eight files;
Ctrl+Oopens the turn and its file list. Empty, binary, and oversized changes are labelled. Restored sessions retain the turn record but do not recover its file list. - Five read-only session-history tools let the model find and inspect earlier work in the same workspace. Cross-session access requires exactly matching working directories; a session without one can inspect only itself.
/settingsincludes a Features section for changed-file summaries, session-history tools, the Ralph loop, and repeat-tool reminders. Changes apply on the next launch and preserve hand-written configuration around the managed block in the Profile patch.
Changed
- Running turns show thinking text, Markdown replies, and tool previews with theme-aware backgrounds and padding. Completed work folds to a duration summary such as
Worked for 16s, followed by the complete final answer; failures remain visible. Ctrl+Orestores the completed turn under the viewport to its process preview and toggles back to the folded live tail. Running turns keep their process presentation;Alt+Oindependently opens their tool details.- Transcript replacement preserves native terminal history.
/clear, session switches, resume, and forks append a labelled boundary;/newadds one after substantive transcript content. Startup and projection refreshes omit it. Previously printed rows remain immutable snapshots, while the live view reflects current folding and results. - Searches show both the query and scope, such as
Search code · toolArgSubject in packages. Code blocks use a rail instead of displaying Markdown fences, including on wrapped lines. - Upgraded the published DeepSeek Harness runtime from
0.1.7-rc.1to0.2.0-rc.2. The API-key route usesdsh-llm-deepseek-api-keyunder the existingllm-deepseekconfiguration row, preserving current Profile patches and login/model commands. Cordis, loader, timer, and schemastery versions are unchanged. Questions retain the blockinglegacymode; the experimental timed mode is not supported by this TUI. - Updated the third-party model catalog and adapters to pi-ai
0.87.1; saved selections using removed model IDs may need to be selected again. Bash and PowerShell guidance now asks the model to verify resolved paths before deleting or moving files. - Pinned turn prompts show only the message text, without a leading chevron.
- Tool definition updates for
deepseek-flashare appended to model history (toolUpdate: addition-only);deepseek-v4-proretains in-history updates.
Removed
- The four transcript density settings and default tool-expansion preference. Legacy
foldDensityandexpandToolsvalues are accepted but ignored in favor of the unified turn presentation.
Fixed
- Persistent PowerShell recognizes completion status lines with trailing spaces, preserving exit codes and hiding internal markers.
- Opening and closing a completed turn, refreshing the transcript, and returning from overlays preserve the live viewport without blank screens or duplicated history.
- Terminal resizing preserves rows pulled back from native history and avoids resending committed rows, including consecutive height increases while an overlay is open.
- Command results and errors become visible immediately after transcript browsing; background notices preserve the reading position.
- PTC tool calls appear as individual sub-calls under
run_code, including calls recovered during replay and completed-turn inspection.
0.18.0 - 2026-09-24
Added
- A request that a route rejects as over its image budget now sheds its oldest images locally and retries, instead of failing the turn. The session log keeps every image, so a resumed or forked session still knows what was omitted.
/feedback <text>records a private note about the current session: the harness stores a log-only event, the model never sees it, and nothing leaves the machine. The command acknowledges the session and anonymous user ids.- MCP servers that publish resources now reach the model: when
mcp.jsonconfigures at least one server, the harness’s shared resource tools let the model list and read its resources on demand. - The model can search the web through DeepSeek’s hosted search (
web_search), using the same credential as the conversation route. A search is a complete auxiliary model request, bounded to five server-tool uses per request by default, and the endpoint, model, and token cap of the provider are tunable in its settings section; a deployment without the DeepSeek credential gets a structured error when the tool is called. - The first launch of a new session format upgrades the stored sessions in the background: each log an earlier release wrote gets a current-format successor beside it, the predecessor file stays byte-identical, and one notice reports how many sessions were upgraded. Until that pass runs, every listing and content search has to decode the historical logs.
Fixed
- Opening
/resumeno longer reads every stored session log on each launch. Session Library rows are memoized in$OMDSH_HOME/omdsh/recent-sessions.jsonand reused while the stored revision is unchanged, so a launch costs one listing plus a read only for sessions that are new or changed. On a 206-session store the first launch of this release spends about 9 seconds reading the historical logs once, and later launches cost about 50 ms.
Changed
- Session content search (
/sessions <query>) keeps its derived index in$OMDSH_HOME/sessions-query.sqliteinstead of rebuilding it in memory on every launch, so a search reconciles only new and changed logs after the first one. The file is disposable: deleting it makes the next search rebuild from the stored logs. - Updated the DeepSeek Harness runtime cohort from
0.1.6-alpha.2to the published0.1.7-rc.1release, with the vendored Cordis runtime at4.0.4, the Cordis loader at1.0.5, the timer at1.1.6, and schemastery at3.18.4. The DeepSeek adapter now speaks the Messages wire only, soprotocolis refused rather than honored: a custom gateway must expose a Messages-compatible endpoint and the official endpoint is selected by base URL. - TUI and Agent settings are live plugin configuration persisted in the Profile patch (
$OMDSH_HOME/profiles/omdsh/cordis.patch.yml) instead of asettings.yamldocument. Asettings.yamlwritten by an earlier release is imported once at startup into the profile rows of the same id and renamed tosettings.yaml.imported; a section whose row no longer exists stays only in the renamed file, so a hand-writtenagent-presetsoromdsh-tuisection should be re-applied as a Profile patch. - Agent presets are ordinary plugin rows now: the
agent-preset-registryrow owns the roster and each preset is an@deepseek-ai/dsh-agent-presetrow shipped in the product bundle’sconfig/presets/<id>.patch.yml. A user preset, or an override of a shipped one, is a Profile patch keyed by that row’s id; the.agent-presetsdirectory scan and the copy-only authoring flow that came with it are gone. - Module resolution is one immutable runtime resolution derived at launch from the omdsh installation and the Profile’s bundle dependency graph, installed through Node’s resolvers instead of materializing fallback links.
@deepseek-ai/*and@agi-fans/dsh-tuistill resolve from the installation first and user bundles from the Profilenode_modules, and a package Node cannot resolve still fails loud at boot. - The oversized-result spill budget is configured in estimated tokens (
maxInlineTokens: 50000) instead of bytes, keeping the same headroom over the upstream default. - Session logs are written in Harness session format V4. A session recorded by an earlier release is migrated when it is opened and its original generation is kept beside the new one, but a V4 log cannot be read by an older omdsh, so downgrading after a session has been opened loses access to that session’s new content.
- Updated the DeepSeek Harness runtime cohort from
0.1.5-rc.2to the published0.1.6-alpha.1release. The DeepSeek route now speaks the Messages protocol by default and reuses uploaded images through the Files API. PTC execution and the workflow engine move to their renamed packages, mounted asptc-runtimeandworkflow-ptc. ralphis off by default, matching the upstream base bundle: the tool description already restricted it to runs the human explicitly asked for, and completion is a worker self-report rather than an independent evaluation. A home overlay restores it withdisabled: false.- The
code(PTC) preset now declares its own presentation and hidesworkflow_run, matching the upstreamptcpreset: a PTC session has exactly one model-authored orchestration surface (run_code) instead of a second one beside it, and other presets keep the native catalog. The presentation is fixed when the preset mounts rather than switched by the TUI per session. web_searchis now exposed by default beside the existing anonymousweb_fetch; previously the composition mounted fetch only, so a model that needed current information had to be pointed at a URL. A deployment that wants no search turns it back off intool-webthrough its own overlay.- Updated the DeepSeek Harness runtime cohort from
0.1.6-alpha.1to the published0.1.6-alpha.2release. - Delegation is shallower and capped, matching the new upstream host defaults: a spawned subagent no longer delegates further by default (delegation depth resolves to 1 instead of the tool rows’ previous 3), and at most eight continuable subagent sessions may run at once — a call past the cap is refused with
ACTIVATION_LIMIT_REACHED. Both limits are tunable in the host’ssubagentsettings section. - The default DeepSeek catalog dropped
deepseek-v4-flashanddeepseek-v4-flash-vision-exp;deepseek-flashanddeepseek-v4-proremain. A deployment that referenced a removed id must pick another model or declare its own catalog entries. - The
cordispreset now exposes read-only runtime inspection (cordis_inspect_list,cordis_inspect_query); upstream removed thecordis_define/cordis_run/cordis_stop/cordis_undefinemutation tools in favor of its plugin-manager flow. @-mentioning a subagent session now inserts its durable creation label when the runtime provides one, instead of the log title or session id.- A
sandbox_permissionsretry that repeats the call’s current mode runs without an approval prompt; a narrower target still fails before anything executes.
0.17.0 - 2026-09-12
Added
- Sessions now get a summarized title from the first prompt via the harness’s LLM title provider, replacing the deterministic fallback (first words or the directory name) on the recent-session list and in the harness web sidebar.
- Sessions are claimed into a durable cwd workspace at activation, so they appear grouped under their project in the harness web instead of under ungrouped — the same membership the web’s own session creation performs.
- Cold sessions now checkpoint their projections durably, so the
@session menu and the session library can label them by title instead of falling back to the raw session id. - Running inside a Herdr pane now registers omdsh as a first-class agent there: the sidebar follows its
working,idle, andblockedstate (a block names the pending approval or question), the resumable session id is reported, and the pane is released when omdsh exits. The integration stays inert outside Herdr.
Changed
- Streaming tool-call previews now recognize
description, so a delegation call shows its task description while its arguments arrive instead of the raw JSON fragment. - Durable settlement events no longer repaint the screen one frame per event while a turn is running: step, tool, and assistant settlements share the stream-render timer like status updates already did, so bursts from parallel tool calls or in-process subagents cost one frame per interval instead of one per event. Control events such as command lifecycle and inbox splices still paint immediately.
- Live tool-result presentation resolves its matching call through a streamed index instead of rescanning the whole session log, keeping per-event cost flat as sessions grow.
- The agent is now told when to pick the process-isolated
subagent_isolatedtransport: the shipped persona suffix routes heavyweight or parallel self-contained delegations there, keeping in-processsubagent/subagent_forkfor work that needs steering or continuation. The isolated transport already shipped in 0.16.0; it previously had no routing guidance, so the model had no reason to choose it.
0.16.0 - 2026-09-11
Added
- Approval prompts now show what they are asking about: the tool card the session already streamed supplies the command, path, or diff summary for the pending call, so a decision no longer requires scrolling back through the transcript to find it. The asker’s own reason still follows, after the action.
Changed
- The main-screen Agents list shows task names and lifecycle states instead of thinking and tool activity. Waiting agents are counted separately from completed runs; detailed tool activity remains in the Agent Hub and full output in each agent’s transcript.
/trajectorysearch no longer rescans the ledger for every step and every frame: the match list is derived once per ledger revision and reused, son/NandCtrl+N/Ctrl+Pnavigation and the ledger’s own rendering stop costing time proportional to the session length. On a 10,000-record session, 200 navigation steps went from 5.1 s to well under a millisecond.- A streaming answer is now counted at the cost of the text that just arrived instead of the whole reply, so the reveal animation no longer re-segments the full answer on every frame. A 121,000-character answer measured 2.9 ms per frame before and 0.26 ms after.
- Streaming tool arguments preview as they arrive: a half-written
{"command":"ls -la /tmreads asls -la /tmpinstead of raw JSON, so the seconds before a call is dispatched show what the call will do. A value that cannot be recovered falls back to the raw fragment.
Fixed
- Background subagent streams no longer redraw the parent interface for every chunk. Status updates are coalesced, child activity is folded incrementally, and failed states survive idle notifications; opening an agent still restores its in-progress output.
- Truncating a plain label no longer inserts an ANSI color reset into colorless output.
- A turn that ends in failure keeps a fixed row above the composer until the next submission. The transcript still records the error in place, but that row scrolls into native history while the composer stays put, so a failed turn used to leave an apparently idle screen behind.
- Editing a minified single-line file no longer stalls the interface while the tool card is running: intra-line diff highlighting is skipped above 400 tokens on either side, where the quadratic alignment table cost 63 ms and about 18 MB of temporary storage per re-render. The line still shows as removed and added, with only the token-level highlighting inside it dropped.
- Terminal cell widths now match what terminals actually draw for multi-code-point graphemes. Zero-width joiners, skin-tone modifiers, emoji presentation selectors, and regional-indicator flags are measured as the single glyph they render as, so box borders, right padding, and the composer cursor no longer drift on emoji-bearing lines. Transport and map symbols such as 🚀 and 🛸 span two cells instead of one, which previously measured a line one column short of what the terminal drew and let the right edge be clipped.
- Fenced code blocks, table cells,
/copypreviews, and other wrapped panel text expand tabs against a tab stop before measuring, so content containing a tab wraps at its real width instead of losing its right side to the terminal’s disabled automatic wrap. NO_COLORandFORCE_COLOR=0are now honored: an unconfigured session stops emitting color at all instead of only dropping to the 16-color fallback, while an explicit color preference (plugin config or a value chosen in/settings) still wins, so the environment cannot lock anyone out of color. Turning color on in/settingsalso takes effect immediately; it previously stayed on the 16-color fallback until restart./helpnow lists every configurable action, including the transcript search added in 0.15.0, and names the bindings actually in effect: the high-frequency subset spelled outCtrl+R,PgUp/PgDnandCtrl+Oliterally, so rebinding any of them left the help text naming dead keys.- Overlay panels now document their keys once and render them twice:
/helpgained an Overlays section built from each panel’s own key catalog, and each panel’s bottom hint is generated from that same catalog, so the two can no longer disagree. The catalogs also cover keys that until now existed only in code, such asShift+Tab,Home/End,Space,PgUp/PgDn, the editing bindings inside history search, andCtrl+Cinside every panel. - Browsing history no longer hides the terminal’s own scrollback. A scroll frame was treated as if it were a full-screen overlay, so outside a multiplexer — the common case — PgUp switched to the alternate buffer, where the terminal’s scrollbar, search, and history selection are unavailable, while the same key behaved differently inside tmux. Frames now declare which of the two they are, and only a real overlay borrows the alternate buffer. An alternate-screen overlay also stops repainting itself on every frame after a resize.
- Installing
@agi-fans/oh-my-dshno longer resolves a mixed Harness cohort. Publishing0.1.5-rc.2re-created the mix that 0.15.0 fixed: direct dependencies were pinned, but the dependency and peer ranges reached transitively still accepted the newer prerelease, so a fresh npm install pulled both prereleases and the packed application failed to boot withprompt section "deployment:persona-prefix" is already registered. Every pin now names0.1.5-rc.2, including the root dev dependency and theexamples/hellofixture that the first pass missed. - The status line no longer wastes columns or leaves fragments on a narrow terminal: a telemetry group that does not fit is skipped so a narrower later group can use the space, and a metadata item with less than eight cells left is dropped whole instead of becoming
m…. Token counts and durations also carry into the next unit (1Minstead of1000K,1minstead of1m0s).
0.15.0 - 2026-09-10
Changed
- The session goal bar now renders below the
Deep Drivingactivity row instead of above it, so the rows docked below the transcript share one order, and its phase label no longer carries the◈icon. - Updated the DeepSeek Harness runtime cohort from
0.1.5-alpha.2to the published0.1.5-rc.1release. This corridor changes no plugin contract: the only host-facing difference is thatdsh-llm-deepseeknow pre-registersdeepseek-flash(DeepSeek-V41-Flash, text and image input, in-history system prompt updates) in its default catalog, so/modellists one more route. New sessions now start ondeepseek-flash, matching the upstream base bundle;deepseek-v4-flash,deepseek-v4-pro, anddeepseek-v4-flash-vision-expremain available, andOMDSH_MODELstill overrides the default. The adapter registers the route without probing gateway availability, so a gateway that has not enabled the model id answersINVALID_REQUEST. - Updated the DeepSeek Harness runtime cohort from
0.1.3-alpha.2to the published0.1.5-alpha.2release (no0.1.4line was ever published)./trajectoryreads the renamedtool/ptc-dispatchandtool/ptc-dispatch-startevents instead oftool/code-dispatch, agents are now created through asetup(agentCtx, agent)callback instead of reading the agent off the Cordis context, and resumed older sessions migrate through the new v2→v3 edge, which promotes each system head into asystem/messageevent — a resumed log therefore gains two events before itssession/end-seedboundary and persists assession.v3.jsonl. - Updated the DeepSeek Harness runtime cohort to the published
0.1.3-alpha.2release (the0.1.3-alpha.1tag was never published to npm). Custom persona overrides must moveconfig.texttoconfig.prefix(optionalconfig.suffix,completeandincludeRuntimeContextunchanged). Live assistant streaming no longer publishesassistant/chunksession events: the TUI now subscribes to the agent-scopedagent/assistant-streamframes for incremental presentation, and durable settlements arrive asassistant/message(now embedding the exact timed stream) or the newassistant/attempt./trajectoryand session stats derive first-token times from the embedded stream. - Session persistence moved to the handle-based seam: recent-session and subagent transcript reads use
open(id, 'read')through the newreadColdSessionLoghelper. Existing sessions are migrated read-through to the session-format v2 log (session.v2.jsonl, predecessor files retained unchanged). Command submission attachments now declaretype(image), and file/content blocks render as[file name · N bytes]. /clearis now presentation-only: it empties the visible transcript while the running turn, status, todos, and queued follow-ups keep their state, so a later Ctrl-C still interrupts the active work instead of looking like an idle clear of the input. Git workspace metadata (branch and dirty counters in the status footer) now refreshes at each turn end with a short TTL instead of freezing at startup.- A human approval (or other modal prompt) now displaces an open overlay such as
/trajectoryor the Agent Hub and restores it when settled, so a confirmation can never be accepted behind a stale screen. Large session switching and tool-card replay are faster: tool presentation indexes call IDs in one pass, the recent-session list reuses unchanged rows and coalesces concurrent refreshes, and settled row sanitization plus live reveal segmentation are cached. - A tool result larger than 200 KB now spills to a private file instead of entering context whole: the model and the transcript both see a bounded preview plus the file path, and expanding that card shows the same preview rather than the full text. The original stays in the spill file for
readorgrep.
Fixed
- Installing
@agi-fans/oh-my-dshwith npm no longer resolves a mixed Harness cohort. The previous release pinned0.1.5-alpha.2directly while downstream packages declared^0.1.5-alpha.2peer ranges, and prerelease ranges accept a later prerelease in the same version tuple, so a fresh install mixed alpha.2 and rc.1 copies of eight shared packages and the packed application failed to boot withprompt section "deployment:persona-prefix" is already registered. Every dependency now pins0.1.5-rc.1, which installs as a single cohort. - Input is now Unicode-safe end to end: the editor moves and deletes by grapheme boundaries (an emoji can no longer be split into a lone surrogate, and vertical motion snaps out of a surrogate pair), and terminal bytes are decoded across stream chunks so a multi-byte character split between data events is no longer corrupted.
- Pipe mode no longer drops submitted lines when two lines arrive in one stream chunk; buffered lines drain before EOF.
- File writes and edits now honor the session’s Access preset:
write,edit, andstr_replace_editorpreviously ignored Read only and Workspace write and could modify any path the process could reach. A mutation outside the workspace now returns the shared sandbox denial, and the model may retry it once at a wider mode after approval. - The composer’s Access badge now reports the sandbox mode actually in force, so an approved widening is visible instead of showing only the standing preset.
- Tool cards no longer repeat the raw argument JSON in their Input section when the tool already supplied a semantic title, removing redundant lines from
readand similar cards. - Terminal rendering no longer dies on pathologically nested markdown. Deeply nested blockquotes, deeply indented lists, and long
*/_runs used to overflow the call stack inside the markdown lexer and take the whole process down withRangeError: Maximum call stack size exceeded. Nesting is now clamped before lexing, and rendering stops descending past a fixed depth, so such content still shows its text.
Added
/trajectorysearch gained match navigation: matching scans the full ledger, so collapsed turns and hidden subtools still count, andn/N(result state) orCtrl+N/Ctrl+P(while editing) step across matches;Enterlocates a hidden match and expands its collapsed turn or subtool call. Matching rows show a×Nbadge, the snippet follows the focused occurrence, and the toolbar reports(3/10)plusEnd: follow · +N newwhile detached. The query editor is grapheme-safe and/inside it is a literal character (path queries likesrc/footype correctly)./model <query>resolves a provider/model or fuzzy model name against the installed catalog: exact matches switch immediately and printDefault model: …, ambiguous matches open the picker, and the three closest entries are shown on no match./model --session <query>switches the active session without writing the saved default (fresh starts still use the saved default) and reportsSession model: …; the flag cannot combine with a subcommand.- Oversized tool results are trimmed to an 8192-character budget (4096 head, 1024 tail) before conversation compaction runs; the full original stays in the session log.
- Repeated identical tool calls now draw an advisory reminder at 3, 5, and 8 consecutive repeats, and tools that declare a limit now receive a cooperative per-call deadline that reports
tool call timed out after <ms>ms. - An active session goal now renders as a bar above the composer with its phase, objective, and admitted-round counter, and clears itself when the goal completes.
/jobslists the session’s background jobs with status and elapsed time,/jobs kill <id>stops one, and a finished background job posts one completion notice. - The model can now fetch public web pages with
web_fetch. Web search stays disabled because DeepSeek’s native search spends a whole model turn per query. - Delegation gained
subagent_fork, which seeds a child with the parent’s completed turns so the inherited prefix stays eligible for cache reuse./toolsnow lists bothsubagentandsubagent_fork. - The model can now orchestrate many subagents at once:
workflow_runtakes a JavaScript script that fans work out across delegated children with phases and structured results, andralphiterates fresh agents toward one objective until a worker reports completion or a blocker. Both come from the Harness base composition and were previously unreachable. The orchestration script runs on a worker thread rather than the host event loop, so a large fan-out does not stall the interface.workflow_runis named apart from the existing/workflowslash command, which still switches the Default/Plan workflow. - Delegation also gained
subagent_isolated, which runs a child in its own process rather than on the TUI’s event loop. Both currently mounted backends run the child on that loop, so several concurrent audits can pin a core and stall rendering, scrolling, and theDeep Drivinganimation; the isolated backend keeps that work off the TUI thread. It trades features for isolation: an isolated child cannot be steered or followed up after dispatch (usesubagentfor that), cannot inherit the parent’s conversation (usesubagent_fork), accepts no model, persona, or tool filter, and carries no parent-enforced recursion cap.subagentandsubagent_forkare unchanged. The child boots its own Harness profile from an isolated home, so it needs adshonPATHthat can serve theacpprofile;OMDSH_ACP_COMMANDandOMDSH_ACP_ARGSoverride the launcher. - Automatic context compaction now shows the same live
Compactingactivity as/compactand records what the model’s view lost when it finishes:Context compacted · 3 events · 12.4K tokens condensed, orContext trimmed · 2 resultswhen the model-free prune pass was enough. A failed compaction reports the error instead of staying silent. - omdsh can now drive local language servers: add
lsp.jsonbesidemcp.json(user$DSH_HOME/lsp.jsonand project.dsh/lsp.json, project wins) and the agent gains a read-onlylsptool for definitions, references, implementations, and hover. No server is configured by default, and nolsptool appears until one is. - omdsh now runs on Windows. Every session gets exactly one confined shell —
pwshon Windows,bashelsewhere — and the Minimal preset’s persistent shell follows the same rule, so the agent never carries a shell tool whose interpreter is missing. CI gained awindows-latestjob covering install, typecheck, build, and a boot smoke. /sessions <query>searches durable session content through the mounted full-text index (SQLite FTS5, opened lazily on the first search so startup still avoidsnode:sqlite) and resumes the chosen hit; a bare/sessionskeeps the Session Library.- The active session title is written to the terminal window/tab title and can be shown on the status line’s first row through the new
Sessionitem, off by default and configurable in/settings. - The model can now keep persistent terminal sessions:
terminal_open,terminal_send,terminal_read,terminal_signal,terminal_close, andterminal_listretain cwd, environment, and interactive children across calls. The one-shotbash/pwshtools remain the default for bounded commands. - Application keybindings now cover transcript scrolling, tool expansion, history search, and transcript search through
keybindings.json(scroll-page-up,scroll-page-down,scroll-fast-up,scroll-fast-down,toggle-tools,search-history,search-transcript); defaults are unchanged. Ctrl+Fon an empty composer searches the current transcript: matching rows paint inverse,n/NorCtrl+N/Ctrl+Pstep across matches, andEnterconfirms the query. A non-empty draft keeps the editor’s ownCtrl+F./diffsummarizes the workspace changes as a per-file table with added and removed line counts and lists untracked files;/diff <path>prints one file’s patch. It only reads git state and never stages or commits.- The model can declare finished deliverables with
present, which records the workspace files it produced so they stay findable after the turn. The card lists their source paths and descriptions instead of the raw call arguments, and/trajectoryrecords each declaration as aDELIVERABLErow. Files are referenced where they already live, never copied or preserved. - Resuming a session now restores the subagents it dispatched. The parent’s durable
subagent/catalogdirectory puts each direct child back on the roster as a completed run, so the Agent Hub still lists it and its transcript stays openable from disk; previously a resumed parent showed no subagents at all, because its children are neither loaded nor replayed./trajectoryrecords each catalogued child as aSUBAGENTrow.
0.14.0 - 2026-09-04
Changed
- Updated the published DeepSeek Harness runtime cohort from
0.1.2-alpha.2to0.1.2-rc.1(Cordis foundation versions unchanged). Sessions persisted by the 0.1.2-alpha.3 and 0.1.2-alpha.4 cohorts still resume, including fork-seeded subagent logs and legacy relay frames. The subagentsend_messagetool now takesagent_idinstead ofsubagent_id(old transcripts still render), delivers as a bidirectional adjacent-agent steer rather than a queued next turn, and continuable subagents are now guided to report back throughsend_message. - Replaced the removed
@deepseek-ai/dsh-agent-spine-demospine row with explicit plugin rows in the product composition (system prompt, tools, skills, goals, jobs, invariants, shell env, workspace instructions, and agent loop). Usercordis.patch.ymllayers that target thespinerow id no longer apply and must be migrated:workspaceContexttoagent-instructions,toolstotools,dshHometoskill-filesystemandshell-env,skills*toskill/skill-filesystem/tool-skill,goals*togoal/tool-goal/goal-round-driver,toolBashtotool-bash(falsealso suppressesshell-env),toolJobstotool-jobs,agentsandmaxParallelToolCallstoagent-loop, and system-prompt/session-title fields to their owning rows. A spine-targeted patch is skipped silently at boot (no stderr warning), so check your home or profile patches.
0.13.0 - 2026-08-30
Added
- Added an Agent language preference to
/settings, allowing new and resumed turns to default to Simplified Chinese or English without translating code, commands, or logs. - Added grapheme-safe smooth streaming, a
Motionpreference for full, reduced, or static presentation, color-reactive context-pressure text, and opt-in native terminal activity while omdsh is working.
Fixed
- Returning from a subagent inspector now fences repeated Escape input, preventing the same exit gesture from interrupting the parent agent and stranding follow-up messages in the queue.
- Output-token truncation and other non-successful turn endings now settle partial previews and unfinished dispatched tools, remain visible in the transcript and
/trajectory, and use plain-language terminal notifications instead of appearing to stop silently. - DeepSeek requests now inherit the published 384K output limit without replacing the adapter-owned model catalog or its exact per-model overrides.
- Corrected the documentation for private session-event compatibility and legacy session portability, and linked the guided issue forms from both READMEs.
0.12.0 - 2026-08-28
Changed
- Agent presets now own their model-facing tool exposure: PTC uses the generated TypeScript tools SDK, while Standard, Minimal, and Cordis expose native functions.
- npm package pages for
@agi-fans/oh-my-dshand@agi-fans/dsh-tuinow treat https://omdsh.agi.fans/ as the homepage, with keywords that nameomdsh,oh-my-dsh,dsh,plugin,dsh-plugin, and the DeepSeek Harness lineage. The documentation site publishes the same names in page keywords and structured data. - The documentation homepage no longer hydrates Vue for the terminal demo, defers Google Analytics until the browser is idle, ships only Latin variable fonts, and inlines stylesheets so the first visit does not wait on extra CSS round trips.
Removed
- Removed the independent
/tool-modeselector and Tools status; choose an Agent preset to select the corresponding tool composition and exposure.
Fixed
- Newly created omdsh sessions no longer contain the private
omdsh/tools-selectedevent, so unmodified DeepSeek Harness readers can open them. - Documentation pages now publish unique titles and descriptions, canonical URLs match GitHub Pages trailing slashes, crawlers receive a reachable sitemap at
/sitemap.xml, and the 404 page is markednoindex. - The homepage terminal demo renders the DeepSeek logo in fixed-width character cells again, so browsers that fall back to a wider font for braille glyphs no longer stretch the logo apart.
0.11.0 - 2026-08-27
Added
- Published the official documentation site at https://omdsh.agi.fans/, a bilingual Astro build deployed to GitHub Pages. The site wears the product’s terminal aesthetic: a two-line TUI status footer with a live
Ctxreadout, a keyboard-first Ctrl+K command palette for search, and a homepage that replays a terminal session, alongside canonical language links, social metadata, structured data, a sitemap, and crawler guidance.
Changed
- Moved the documentation sources from
docs/intoapps/site/content/, so the site content tree is the single source of truth with no build-time sync step; in-source links between pages stay relative Markdown paths, and references beyond the documentation set are full GitHub URLs. - Rewrote the bilingual tutorials for clarity: each walkthrough now opens with the goal it delivers, dense reference-style paragraphs are split into steps and lists, the Skills and MCP page walks through adding one Skill and one MCP server, and the stale
/permissionalias note is gone.
Fixed
- Kept composer input and Ctrl-C responsive during long thinking streams by coalescing footer updates with streamed transcript rendering.
0.10.0 - 2026-08-26
Added
omdsh completions bash|zsh|fishprints an instant, network-free completion script generated from the canonical CLI metadata./export html [path]creates a standalone, CSP-locked HTML transcript alongside the existing complete Markdown export./contextprints a projection-backed context diagnostics report into the transcript with occupancy, provider usage, and heuristic prompt composition./sessionsopens a searchable Session Library where durable sessions can be pinned or renamed with the keyboard before resuming.- Optional terminal notifications can report completed long-running turns and prompts that need human input; they are disabled by default and configurable in
/settings. - Added
/trajectory, a keyboard-driven full-screen session event ledger with Turn/Step grouping, live following, search, folding, timing and token details, and tool payload, result, and schema inspection. - Models can now be favorited through
/model favoriteand cycled withCtrl+PorAlt+P;Ctrl+Tcycles the active model’s supported reasoning efforts. - Agent Hub now opens as a keyboard-driven roster and inspector with responsive split-pane details, hierarchy, elapsed time, recent activity, and direct transcript access.
Fixed
- The first startup header now includes durable recent sessions instead of rendering before persistence discovery completes.
- Terminal layouts now count common emoji symbols such as
✅at their actual two-cell width, preventing Trajectory and other vertical dividers from shifting on emoji-containing rows. - Long Trajectory payload, result, schema, timing, and summary details can now be paged with
PgUpandPgDninstead of being clipped to the visible pane.
0.9.0 - 2026-08-26
Added
- Edit-card context lines are now syntax-highlighted from the changed file’s language, while added and deleted lines keep their green and red colors with inverse intra-line highlighting. Unknown file types keep the previous dim context.
/loginlists registered Harness authorization flows and their methods when a mounted provider offers them. The terminal renders notices and keyboard-selectable prompts; the provider plugin owns the protocol. DeepSeek API-key login remains available when no flow claims that route.
Changed
- Composer image submissions now admit every attached image in one ordered batch. A failed member keeps the composer text and image drafts instead of saving a partial set.
Removed
- Removed the duplicate
/accessalias. Use/permissionto choose Read only, Workspace write, or Full access through the same keyboard selector and Full access confirmation.
Fixed
- The startup Header now moves its column divider to fit longer model names when terminal space is available, while preserving the Tips and recent-session column at narrower widths.
/loginnow keeps the official DeepSeek route first, orders signed-in authorization flows before unconfigured providers, and distinguishes environment, local-store, external, in-progress, and signed-in credential ownership with badges. It hides the dormant pi-ai DeepSeek flow, retains an explicitly configured compatibility route, and capitalizes the custom-provider option./logoutomits an environment-owned or already-inactive official route when a removable stored sign-in is available and consistently labels every removable provider as signed in.- A retried model request replaces the live retry notice, drops stale live mutable assistant and partial-tool rows from the failed attempt, and keeps one final terminal error after retries are exhausted. Output that already reached native terminal scrollback is not rewritten.
/logoutof a provider authorization record deletes only that credential record. Independent settings profiles, environment credentials, and credential records owned by other plugins stay in place, while a stored pi-ai DeepSeek compatibility credential remains removable even when its login flow is hidden by default.
0.8.0 - 2026-08-20
Changed
- TUI input is now keyboard-only: mouse tracking sequences are no longer emitted and SGR mouse reports are consumed and discarded instead of being typed into the composer or driving state.
- Finalized transcript rows now flow into native terminal scrollback while the live viewport remains keyboard-driven and mouse tracking stays disabled. Production startup waits for the initial session projection, idle replacement replays the complete Header, transcript, and composer, and running replacement pins its mutable tail until settlement. Direct terminals can clear stale scrollback and borrow the alternate screen for transient full-screen surfaces; multiplexers and ConPTY preserve host scrollback, and multiplexer resize bursts are coalesced. Large resumed transcripts replay completely rather than being truncated, while ordinary paints remain one DEC 2026 synchronized write.
- Long sessions now reuse the settled transcript as a stable render prefix, avoiding full-history display-width measurement on every streaming, status, or composer frame.
- Append-only assistant reasoning and text now scroll naturally with the Header and user messages, while mutable running-tool previews remain pinned to the live viewport.
- Dense assistant streaming deltas are now coalesced into short render windows, reducing redundant formatting and terminal writes while preserving immediate interaction, tool, and settlement updates.
Fixed
- The live Agents roster now exposes a Down-to-focus task launcher plus its Alt+A direct shortcut. Enter opens a searchable fullscreen Agent Hub for arrow-key selection and Enter-to-inspect after mouse interaction was removed.
Removed
- Removed all mouse-driven interactions, including click-to-caret in the composer, wheel-based transcript and overlay scrolling, and click-to-select in overlays and the subagent roster. Use the existing keyboard shortcuts (arrow keys, PgUp/PgDn, Shift+Up/Down, Tab, Enter, Esc) for the same actions.
- Removed
Mouse wheelfrom the help/hotkeys surface.
0.7.0 - 2026-08-20
Added
- Mention other sessions from the composer
@menu. Unquoted@lists project files first, then session titles;Tabinserts a session mention, and sending the prompt captures a read-only snapshot for the model. Quoted@"…tokens stay file-only. File rows come from Harnessfile-referencediscovery and still insert a path without uploading contents. - Send composer images with
/goaland/plan. Commands that do not accept attachments return an error and keep the original image draft in the composer. - Mark an assistant reply cut off by an interrupt with a dim
· interruptedsuffix instead of presenting it as a complete reply. A turn interrupted before any visible content still prints the plaininterruptednotice.
Changed
- Upgraded every direct DeepSeek Harness dependency to the coherent
0.1.0-rc.8release. Failed model requests now retry up to five times by default (previously two), and an inapplicable or valuelesscompatswitch in a hand-editedllm-pi-aisettings section fails startup with an error naming the offending key. - Refuse attached images over 3.5 MiB or larger than 2000px per side, matching the new Harness admission defaults. The composer checks admission when an image is pasted: a refused image shows an immediate error notice and stays out of the prompt instead of failing the completed submission on send.
Fixed
- Route
/goaland/planafter dropping TUI image placeholders that match attached drafts, leave handwritten[Image #N]text unchanged when nothing is attached, pass command whitespace through to Harness, and keep the original image draft when those commands fail. - Keep
@file rows on Harnessfile-referenceresults when that service is composed, including empty matches; local path search remains only when it is not.
0.6.1 - 2026-08-19
Fixed
- Load user-installed DSH bundles from the omdsh Profile when running the published npm package.
0.6.0 - 2026-08-19
Added
- Add Write a plugin, a walkthrough for writing, installing, and publishing an omdsh plugin bundle.
- Ship
examples/hello, an installable bundle that registers/hellothroughdsh-commands. - Install user DSH bundles into
$OMDSH_HOME/profiles/omdshwithomdsh plugin addandomdsh plugin remove, and compose them after the shipped@agi-fans/oh-my-dshlayer at boot. - Apply
$OMDSH_HOME/cordis.patch.ymlover the shipped composition at boot, and print the composed plugin tree withomdsh --dump-config. - Show live descendant subagents above the composer, with each child’s label, run state, and current tool, and present
subagent,send_message,interrupt_agent, andlist_agentscards by their task description instead of raw JSON. - Open a subagent’s own transcript from the Agents roster by clicking a row or pressing Alt+A, and return to the parent with Escape.
- Steer a continuable subagent from its inspect view: the composer delivers a follow-up to that child, while one-shot runs stay read-only.
- Acknowledge Pi among the project’s design influences.
- Add catalog and custom model providers through the published Harness pi-ai adapter.
/logincan store a catalog key or add a custom route (id, base URL, protocol, optional key, and model ids),/logoutcan drop that route, and/modellists every live provider.
Changed
- Split the tutorials into one page per walkthrough, with the tutorials index as the index.
- Highlight leading
/commandtokens in the composer, and paint slash-command names in the completion list, so those lines read as commands rather than ordinary prompt text. - Use monochrome Unicode marks for pending, warning, todos, and settings instead of emoji-presentation glyphs.
Fixed
- Fail loud when
omdsh plugin addis given a missing filesystem path, instead of installing a broken link, and resolve./examples/hellofrom a subdirectory of a checkout. - Keep ↑/↓ inside the current
/settingstab instead of crossing into the other section. - Hide the blinking composer cursor while a read-only subagent transcript is open.
- Paint idle subagents with a check instead of the hourglass pending glyph.
0.5.1 - 2026-08-18
Fixed
- Resume sessions that recorded the omdsh tool-presentation event instead of refusing the log as an unknown harness type.
0.5.0 - 2026-08-18
Added
- Added four independent, Harness-backed session controls: Agent presets (Standard, PTC, Minimal, and Cordis), Workflow (Default or Plan), tool presentation (Native, Code, or Both), and Access (Read only, Workspace write, or Full access).
- Added
/settingsStatus line items that match the preview: each of Model, Effort, Path, Git, and the telemetry groups has its own color, left/right column, show/hide, and order. - Show the session permission mode on the top-right of the composer, opposite the whale label.
- Add catppuccin, dracula, nord, gruvbox, and rose-pine palettes from the oh-my-pi coding themes.
Changed
- Upgraded every direct DeepSeek Harness dependency to the coherent
0.1.0-rc.7release and adopted its published Agent preset and Code runtime packages. - Keep the lowercase Agent mode visible in the fixed footer, reveal Workflow only while Plan is active, show non-default tool presentation without category labels, keep lowercase Access on the composer boundary, and report all four separately in
/session. - Reset SGR attributes independently so nested color, bold, italic, and underline no longer wipe each other.
- Paint thinking traces in a quieter gray italic so they stay distinct from assistant body text, including after inline Markdown.
- Let the terminal own body ink across every palette while keeping thinking traces explicitly muted, so themes respect the user’s foreground and background pairing.
- Paint thinking traces as readable comment-gray italic on dark palettes, including code, links, and headings inside those traces, so they recede from body text without collapsing into the background or being boosted to white.
- Use a quieter muted border for idle frames, quotes, rules, and tables, and complete the midnight and solarized palettes.
Fixed
- Refresh the footer’s Agent and tool-presentation labels immediately after
/agentchanges a blank session’s composition. - Restore distinct Header title, body, metadata, and frame tones across every palette, including monochrome and 16-color terminals.
- Keep the welcome card on the visible dim frame so Tips, Recent sessions, and the slogan do not sit on a near-invisible border.
- Paint fenced-code keywords with a dedicated syntax color instead of the UI accent.
- Soften inline Markdown code so codespans use a muted gray instead of accent-like orange or lavender; fenced blocks keep a separate, slightly stronger color.
- Render transcript Markdown through a GFM lexer so paragraphs reflow, nested emphasis and escapes stay intact, list items keep their continuations, and reference links resolve.
- Paint file-edit tool cards as aligned diffs: unchanged context stays dim, deletions are red, additions are green, one-line replacements mark the changed tokens, and the header shows
+N/-M. - Generate the CLI package README from the repository overview during packing, with npm-safe GitHub links, so npm documentation stays synchronized with the project homepage.
- Clarify that
@agi-fans/dsh-tuiis a non-executable integration library, direct end users to@agi-fans/oh-my-dsh, and enforce that distinction during package checks.
0.4.0 - 2026-08-16
Added
- Added an oh-my-pi-inspired
/loop [count|duration] [prompt]plugin with atomic next-prompt capture, actionable waiting guidance, explicit repeat progress, duration countdown, Ctrl-C pause and resume guidance, transient completion feedback, active-session isolation, and no routine control-message transcript noise. - Added one-time startup release summaries,
/changelog [full], and cached non-blocking npm update notifications with controls in/settings. - Added repository-local Skills for change validation, architecture and UX review, simplification audits, prose maintenance, bilingual documentation synchronization, and reproducible TUI demonstrations.
Changed
- Made
/helpa compact command directory with essential shortcuts by default, added/help fullfor the complete key catalog, and limited the default/changelogview to the latest release. - Adapted model selectors to use compact prompt cards for short lists and searchable full-screen pages only when the option set is large.
- Clarified that
/steeraffects the active turn’s next model step, rejected idle steering, and normalized/sessionpermission and token labels with the fixed footer. - Made the repository release Skill hand npm publication to the user for interactive OTP completion, then resume registry verification and GitHub finalization without repeating completed work.
- Separated tool-call input from output in a single framed card, preserving long inputs after settlement and giving terminal output its own labeled, tail-focused preview.
- Consolidated architecture guidance into one current-state reference covering plugin ownership, runtime composition, data flow, terminal guarantees, public exports, and verification boundaries.
Fixed
- Made the startup header read the current TUI package version instead of retaining the original
0.1.0placeholder after releases.
Removed
- Removed completed implementation plans, a stale oh-my-pi feature-gap snapshot, and the superseded plugin-migration review after preserving their durable constraints in the architecture reference.
0.3.0 - 2026-08-16
Changed
- Replaced
/modewith an agent-scoped/permissionselector that offers fixed Harness permission presets and requires confirmation before enabling full access. - Refined the composer Todo HUD into a bounded tree preview with completion progress, active-work visibility, completed-item strikethrough, and overflow summaries.
Fixed
- Restored the latest Harness Todo projection above the composer, including live updates, replay restoration, and turn-boundary clearing.
- Prevented stale transcript viewport indicators from stacking after terminal cursor drift by absolutely reanchoring changed paints and filtering content-owned cursor controls.
0.2.0 - 2026-08-16
Added
- Repository-local
publish-oh-my-dshSkill for preparing, publishing, recovering, and verifying synchronized npm and GitHub releases. - Double-Escape conversation rewind with an interactive human-turn selector, non-destructive session forks, and editable restoration of the selected text and images.
Changed
- Replaced
/queueand/dequeuewith a composer-level view of the durable Harness inbox; repeated↑presses walk backward through follow-ups for editing without changing their send order. - Merged the keyboard-shortcut catalog into
/helpso commands and controls live in one discoverable surface. - Manual
/compactnow enters a visibleCompactingstate, locks composer actions until settlement, and remains cancellable withCtrl+C.
Fixed
- Prevented exact-width terminal paints from triggering pending-wrap phantom rows, including duplicate
Deep Drivingindicators. - Removed long-session input and activity lag by caching transcript layout per immutable message block and recomputing only animated or changed blocks.
- Reduced large-session resume work from quadratic to linear by using a private mutable replay builder with indexed tool-call lookup while preserving immutable live updates.
- Avoided rescanning the complete event log for every streaming update when durable Harness statistics, token usage, and context projections are available.
Removed
- Removed the redundant
/pwdand/dirscommands because the fixed status footer already shows workspace, model, and Git context. - Removed
/searchand its SQLite session index; prompt-history search remains available throughCtrl+R.
0.1.1 - 2026-08-15
Added
- DeepSeek
/loginand/logoutflows with masked input, API-key validation, persistent Harness credentials, user-selected credential priority, and environment fallback.
Changed
- Made the model selector skip a sole provider, use compact option rows, and preserve the current model and reasoning choices.
- Made ordinary notices unframed by default while retaining explicit frames for real component and interaction boundaries.
Fixed
- Isolated settings and credentials under
OMDSH_HOMEso tests and alternate profiles do not read the user’s default Harness state.
0.1.0 - 2026-08-15
Added
- Plugin-first
omdshterminal application built on the published DeepSeek Harness runtime. - Durable conversations with resume, search, retry, compaction, Markdown export, prompt history, and queued follow-up messages.
- Interactive model, reasoning-effort, access-mode, settings, tools, hotkeys, Skills, and MCP surfaces.
- Project-aware
@file search, highlighted path mentions, and clipboard image paste. - Fixed two-line status footer with model, reasoning, workspace, Git, context, token, latency, cache, timing, turn, and step information.
Changed
- Split the TUI into Cordis plugins for presentation, session runtime, human interaction, tool presentation, commands, and the runner.
- Redesigned the startup header, composer, status footer, command output, tools, hotkeys, settings, resume, and model-selection experiences around compact terminal interaction.
Fixed
- Preserved terminal-cell alignment and right padding for long commands, CJK text, emoji, ANSI styling, and narrow viewports.
- Stabilized incremental rendering, transcript scrolling, cursor placement, tool-output folding, and queued input during active turns.