DeepSeekBot

DeepSeekBot

Changelog

What changed in each DeepSeekBot release. The plugin shows the same notes after an update.

v1.1.0

Latest19 changes

PersonaBots can run Bot Schedules and manage them themselves, every Session starts with the Bot's Soul and Core Memory, the Channel sidebar sections share one card design, WeChat accepts voice transcripts and images, each Bot's Memory keeps a .botharness/bot.json profile for the Bot Marketplace, the plugin sends anonymous usage statistics that can be turned off, and Bot settings can install a DeepSeekBot update and restart DSH with one click.

  • AddedAdded a candidate personal WeChat voice source path using platform-provided transcripts and explicit missing-transcript states in the Bot Inbox, without adding ASR or audio playback; a real native voice → model → original-DM reply was confirmed by the Human (#905).
  • AddedAdded a source-preview WeChat image path with automatic image preview inside the original Inbox message bubble, native model image input and own-identity native image replies, with the original-DM image receipt confirmed by the Human (#904, connection guide).
  • AddedPersonaBots gain Bot Schedules: the Channel sidebar's Schedules section lets the Human create, edit, pause and delete minute, hourly or daily tasks; each firing lands in the Bot Inbox and wakes the Orchestrator, and every schedule shows its last 20 firings with links to the handling session (#960, ADR-0133).
  • AddedDeepSeekBot now writes .botharness/bot.json into each Bot's Memory when the Bot is created, and updates it when its name, roles or avatar change. Existing Bots get the file on the next start. A shared Bot therefore shows the same name, roles and avatar in the Bot Marketplace as in the sidebar (#966, guide).
  • AddedDeepSeekBot sends anonymous usage statistics from the DSH Host, tied only to a random install ID: plugin_started (plugin and DSH version, OS, architecture), bot_created, bot_archived, bot_deleted, marketplace_bot_installed, connector_enabled (connector type only), avatar_edited, one daily_usage summary (counts of PersonaBots, Sessions and messages, and the window in hours), and unhandled BotHarness errors in the Host as $exception reports with the error type and a stack reduced to package-relative file names, never the message or a file path; Bot mode explains this once in a notice linking the privacy page and source. Turn it off with the Anonymous usage statistics switch in Bot settings, which applies at once without a restart and is remembered; telemetry: false in the core plugin config, DO_NOT_TRACK=1 or BOTHARNESS_TELEMETRY=0 force it off and lock the switch (#951, #952, ADR-0132, guide).
  • AddedPersonaBots can manage their own Bot Schedules: ask a Bot to do something every hour or every day and it creates the schedule itself, marked as Bot-created in the sidebar; it can also change or delete any schedule the Human has not locked. The Human locks a schedule from its row or editor, at most 20 schedules can be enabled per Bot, the sidebar updates as soon as the Bot changes a schedule, and DSH's own schedule_* tools are refused in the Orchestrator so a Bot keeps one schedule list (#961).
  • AddedBot Schedules can now run weekly on chosen days, once at a date and time (turning themselves off afterwards), or on a five-field cron expression, all in the schedule's own time zone; the editor previews the next three runs, the Bot's schedule tools accept the same cadences, and Run now on a row wakes the Orchestrator immediately without moving the next planned run. The new Schedules guide covers each cadence, Run now, pausing and locking (#962).
  • AddedBot settings can install a newer DeepSeekBot release with one click through DSH's Plugin Manager. On the web, Restart now then restarts dsh web in the same terminal and the page reconnects on its own; DSH Desktop shows how to quit and reopen. When the Plugin Manager is unavailable or the install fails, the reason and the manual update command are shown instead. The new Update DeepSeekBot guide covers each step (#986).
  • ChangedThe Channel sidebar's Sessions, Bot Inbox and Workspace Grants sections now use the same card rows as Schedules, with an icon, status chips and a meta line on every row; a Bot Inbox item from a Bot Schedule now opens that schedule (#972).
  • ChangedThe Channel sidebar's Computer and Browser sections now use the same card rows: a status card shows the target (local or Docker), a state chip such as Running, Needs setup or Paused, and its controls, and the Browser's open tabs are listed as card rows (#975).
  • ChangedThe Bot Profile avatar area is now one Avatar section with two side-by-side choices, Design a pixel avatar and Upload an image, and marks the one in use; the duplicate Change avatar button is gone and the divider under the profile header has whitespace around it (#985).
  • ChangedA PersonaBot's persona file is now SOUL.md, its Soul, and every Session also starts with its Core Memory, MEMORY.md, so a new conversation already knows what the Bot remembers. Both are frozen for the Session with a character usage header (5,000 and 3,000 by default), new Bots get a short MEMORY.md template, and an existing PERSONA.md is renamed to SOUL.md on the next start (#988, ADR-0134).
  • ChangedEach Bot's profile has a Standing memory limits section for the SOUL.md and MEMORY.md character limits, with their approximate size in Chinese characters and English words, applied from the next Session. The Memory panel pins both files at the top with a Standing badge and their current usage, highlighted when over the limit, and Memory search now covers them (#989, ADR-0134).
  • FixedLark user targets with an explicit private chat ID can receive unmentioned private messages into the same PersonaBot Inbox and reply through its bound identity; targets without that locator remain send-only (#996).
  • DocsDocumented the development-source Discord file candidate with actual model save/process/import/original-thread result, independent unchanged-input/output byte proof and temporary Workspace write cleanup (#1002, verification).
  • DocsNew guide Bot Soul and Core Memory: why SOUL.md and MEMORY.md start every Session frozen, what each file is for and why there is no USER.md, the character limits with their approximate size and token cost in Chinese and English, how to change them, what an over-limit file looks like, when edits take effect, and how to shape MEMORY.md together with the Bot (#990, ADR-0134).
  • DocsThe GitHub and npm READMEs cover Bot Schedules, the Bot Marketplace and update notes, add a Release highlights section drawn from this ledger, and replace the screenshots with a high-resolution gallery in which every avatar is a BotPixel pixel avatar (#984).
  • DocsDocumented the isolated Discord nearby context candidate: exact native source container, five-minute window, sparse Human-text minima and bounded continuation; real-model sparse pagination, canonical retention, original-thread reply and temporary permission restoration are verified independently of product promotion (#981, guide).
  • DocsDocumented final development-source Discord context acceptance with real model continuation, precise edited-source refusal, whole-page rollback and restored Message Content permissions (#937, verification).

v1.0.2

3 changes

Bot mode shows what changed after an install or update and checks npm for newer releases, context reads keep precise source-conflict refusals, and a Share a Bot guide explains publishing a Bot to the Bot Marketplace.

  • AddedBot mode shows the changelog of the installed version after the first install and every release since the last one you saw after an update, and Bot settings show the installed version, check npm for a newer release with its notes and the update command, and link the website changelog (#947).
  • FixedContext reads now retain the precise source-conflict refusal when native history disagrees with retained evidence, rolling back the conflicting page without replacing its original source (#937, verification).
  • DocsAdded the Share a Bot guide: check Memory before publishing, a copy-paste prompt that has the Bot publish itself to GitHub, listing in the Bot Marketplace, and the .botharness/bot.json reference (#958).

v1.0.1

393 changes

First stable DeepSeekBot release on npm: PersonaBots with their own identity, Git Memory, Groups, Assignments, pixel avatars, Lark, Slack, Discord and WeChat identities, and the first Bot Marketplace, installed into DSH as one plugin. Version 1.0.0 was not released as a product.

  • AddedAdded paired-owner WeChat file intake and original-DM file replies through the existing attachment and Bot Inbox workflow, with bounded private downloads and an authorization check after upload (#903, connection guide).
  • AddedAdded a personal WeChat paired-owner text path into the existing Bot Inbox and own-identity reply, with explicit DM authorization and private source continuations; source and locally installed product exchanges are verified and Human QA approved (#878, ADR-0129, connection guide).
  • AddedPersonaBot creation offers colleague, roleplay and blank starting points with editable PERSONA.md text; switching preserves drafts, while permissions and runtime capabilities stay the same (#325).
  • AddedAdded the candidate checked Discord Provider registration and existing Inbox/source presentation contract, preserving exact channel/public-thread routes; real channel/thread model replies and agent-operated UI acceptance passed, with remaining native qualification pending (#855, ADR-0128).
  • AddedPersonaBots can explicitly publish Slack reports without mirroring them into local chat, inspect the saved text and native receipt, and answer eligible Human follow-up in the original Slack topic (#863, IM integration guide).
  • AddedPersonaBots can explicitly follow or leave an authorized Slack native topic after real ordinary-reply delivery is verified, reusing count/time harvest and Human overrides; Profile retains topic management for migrated Channel connectors (#854, IM integration guide).
  • AddedWhen live activity sync drops, the sidebar says so, avatars keep the last observed state with greyed, paused activity indicators and no decorative motion, and everything resumes from a fresh Host baseline after reconnect or restart (#756).
  • AddedA PersonaBot whose saved Avatar uses an unavailable version no longer disappears: its original design is retained, the matching saved snapshot is shown with an explanation that editing and character animation are paused, activity and approval indicators keep working, and the design returns automatically once the version is available; mismatched or unsafe saved appearance data is ignored without losing the PersonaBot (#755).
  • AddedPixel-family Avatars can choose bangs, side hair and back hair separately and adjust eye spacing, feature height and hair length within bounds in the Profile editor; saved Avatars without these choices render unchanged (#752).
  • AddedPixel-family side poses and thinking head-turn frames now read as a real three-quarter turn: features shift toward the facing side, the far eye narrows, only the near ear shows and the chin tucks; side tails stay attached to the head and the mouth stays centred (#752).
  • AddedCompleted Assignment Reports and Host-confirmed native completion retain separate navigable Inbox sources linked by trusted Session/Turn identity, without a duplicate wake; late notices remain pending across restart until a real Turn handles them (#194, ADR-0077).
  • AddedAdded a resumable Lark / Feishu setup guide in PersonaBot Profile that locates real IM controls and checks current account, identity, group authorization and same-topic reply evidence without storing a separate onboarding workflow (#824, guide).
  • AddedAdded independently editable Slack intake, harvest and bound-identity defaults in Bot settings, with Profile inheritance and explicit overrides preserved (#843).
  • AddedHuman can explicitly collect ordinary text from an authorized Slack channel and choose existing count/time harvest or safely queued immediate wake in Profile; new connections remain mention-only, and overlapping mention subscriptions are deduplicated (#837).
  • AddedAdded a product-artifact build and isolated installation path composing Core, Client and an independently versioned qualified IM Provider, with disconnected initial accounts and product-managed Provider updates; public npm publication remains a separate release action (#823, packaging guide).
  • AddedLine-family PersonaBot avatars now morph into a stroke symbol bound to the current DSH tool (the same 16 as the pixel family: read, write, edit, bash, grep, web search/fetch, ask_user_question, todo, subagent, workflow, goal, present, approval and more), hold it at least 0.5s while the activity lasts, morph directly between tools and return to the face when the turn ends (#838).
  • AddedPersonaBots can read an explicitly mentioned Slack source file and return a processed file in the original native thread, using canonical attachment tools, current own-identity authorization and a pre-completion fence; source details retain safe file type/size metadata (#831).
  • AddedLine-family PersonaBot avatars gain more kaomoji-style eyes (big sparkly, hearts, rings, tall ovals, ^ ^, half-lidded, droopy), brows (thick, maro dots, thin) and mouths (▽, teeth, little fang, dot, pout, nervous zigzag, big laugh), and the Profile editor offers twelve face-only Line presets; Avatars no longer draw the corner !? attention mark or manga symbols, and the Profile preview, header title and pinned PersonaBots show the activity indicator and attention count beside the name instead of on the avatar (#833).
  • AddedHuman can change the Profile-wide Assignment concurrency limit (1–32, default 3) in Bot mode Settings; saves govern subsequent admission immediately and survive restart, while lowering the limit preserves running work (#825).
  • AddedChannel sidebar edit mode can hide or restore individual items, saving visibility and order together with Done, discarding both with Cancel, and recovering all items through Restore defaults (#809).
  • AddedPersonaBots can explicitly read bounded Slack channel, nearby and native-thread Human text from an authorized source, paginate dense five-minute windows and inspect context in source details without historical Inbox admission (#819).
  • AddedPixel-family PersonaBot avatars are redrawn as 32×32 chibi pixel art (bigger heads and eyes, layered hair and clothes shading, a solid tile in the hair colour family) with new hairstyles, outfits and headwear and twelve selectable presets, and while thinking or working the whole pixel Avatar morphs (0.8s) into a pixel symbol in its hair colour bound to the current DSH tool (read, write, edit, bash, grep, web search/fetch, ask_user_question, todo, subagent, workflow, goal, present, approval and more), holding at least 0.5s and returning to the face when the turn ends; sidebar contact rows show the activity indicator and attention count beside the name instead of on the avatar (#800).
  • AddedAdded a checked Slack text-mention path from an independently bound PersonaBot identity into its canonical Inbox and original native thread reply, reusing Profile identity/connector tables and source details; context, attachments and ordinary-message policies remain separate qualification slices (#802, ADR-0126).
  • AddedHost Plugins can subscribe to PersonaBot committed public output with trusted Session/Channel references; failed consumers cannot roll back messages or block other listeners, and restart does not replay notifications (#125).
  • AddedLine-family PersonaBot avatars briefly morph their face strokes into a symbol for the new activity (?, magnifier, </>, !, ♪, smiling face) and back, using morphicons spring stroke morphing; transitions retarget mid-way from the displayed shape and replace the corner activity marks, are shorter on small avatars and are skipped under reduced motion (#754).
  • AddedAdded an opt-in Container agent-browser driver using the existing Browser Viewer, takeover, uploads and persistent profile; Local and Container retain independent default drivers (#768).
  • AddedPersonaBot Profile can switch the avatar between the pixel family and a new original line family (bold strokes on a coloured tile) with its own eyes and mouths (including kaomoji such as > <, T T, ω and ▽), brows, nose, cheeks, glasses, manga symbols (sweat, anger vein, gloom lines, sparkle and more), background/line colors and bounded spacing, height and tilt; line avatars save, snapshot, animate, show independent approval attention and recover through the same path; large avatars of both families show a manga !? mark while action is needed (#753).
  • AddedBrowser observations now include bounded form values and control states; the optional Local agent-browser snapshot removes repeated scaffolding while retaining page/dialog content and exact action refs (#787).
  • AddedAdded an optional Local agent-browser trial driver behind the existing Browser permissions and Human controls; the current driver remains the default (#767, ADR-0124).
  • AddedGroup facepiles show at most three avatars, prioritizing active members with stable order and accurate overflow; Group header avatars now expose each member’s safe live status to hover and keyboard focus, and open up to three active-first avatar/name/state chips in the existing Group Profile popover (#124).
  • AddedGroup activity now names each active PersonaBot in the compact summary and expanded list, with keyboard-accessible avatars showing the same safe shared status (#124).
  • AddedPersonaBot Profile can preview, cancel and save an original pixel-art avatar from a Notion-Faces-style catalog of face, hair, eyes, brows, nose, mouth, cheeks, glasses, accessory, skin/hair/eye/shirt color, angle, outfit and backdrop; Bots without a saved or uploaded avatar get a name-seeded pixel default that the create dialog previews; the saved identity appears in sidebar and enlarged Profile, follows existing activity and independent approval attention, and survives restart (#751).
  • AddedAdded explicit Chrome Profile pairing for cross-tab discovery, navigation and ref-based webpage control, preserving Browser Access, Session approval and Pause (#774, guide, ADR-0123).
  • AddedShared Channel members can explicitly answer an external Lark source using their own independently authorized identity, with inspectable sender/source details and one durable reply per member/source (#637).
  • AddedCompleted Assignment reports now show a neutral information indicator across PersonaBot Activity views, separate from action-required badge counts; Inbox dismissal or ignore clears it without changing execution (#123).
  • AddedPending Workspace Grant requests now contribute to PersonaBot attention across the sidebar, composer and Overview; authorized replies or Inbox dismissal clear the indicator without changing execution (#123).
  • AddedOrchestrators can explicitly wait for an owned Assignment report or completion; shared Activity presents Assignment work during that bounded wait and restores Orchestrator selection on report, cancellation or timeout (#123).
  • AddedAdded explicit observe, type and click control of one Human-selected daily Chrome document through the official Playwright extension, with separate confirmation, Pause/Resume and automatic revocation (#766, guide, ADR-0121).
  • AddedAssignment reports awaiting a Human answer or blocked decision now share independent Activity badge counts with sidebar, composer and Overview; canonical responses, dismissal and stop clear the counts, and unresolved durable reports survive restart (#123).
  • AddedA Human can route multiple authorized Lark groups into shared Channels, explicit Bot DMs or Inbox-only targets, with independent connector switches, one canonical message and one processing unit per overlapping Bot; each receiving path retains its own policy evidence (#635, ADR-0120).
  • AddedPending native Bot questions now contribute to the shared attention badge alongside Tool approvals, with distinct hover counts and immediate clearing after answer or cancellation; execution motion remains independent (#123).
  • AddedAdded Lark platform behavior defaults in Bot settings, with explicit Profile inheritance, preserved custom settings, stale-save protection, and revisioned future-message intake/harvest and identity pause behavior. (#701)
  • AddedBots can send an authorized report only to Lark, inspect its canonical Outbox content and checked external message ID in Profile, then associate a genuine mentioned reply with that report and answer in its original external topic without a local DM/Channel mirror (#639).
  • AddedThinking and working PersonaBot avatars use a compact BotUI dot matrix instead of a static blue execution dot; idle avatars hide the marker and the shared reduced-motion preference keeps it still (#744).
  • AddedHumans can explicitly lend one daily Chrome tab read-only to a PersonaBot through a local extension, reuse its login state with browser_observe, and return it from the extension or Channel sidebar; navigation, lost connection and restart revoke the temporary lease (#741, guide, ADR-0116).
  • AddedPersonaBot avatars and the composer show live native Tool approval counts independently of execution; the existing revisioned Host snapshot/live stream clears accepted, rejected and cancelled requests without replaying stale approvals (#123).
  • AddedBots can explicitly share one own-Inbox external source into a joined team Channel, showing the clickable Bridge source above the original message with details in a Modal, and preserving provenance and independent member attention without forwarding future traffic or borrowing external identities (#636).
  • AddedActivity Center Overview uses the Host-selected execution state and safe Tool summary shared with sidebar/composer; pending native questions and approvals remain separate Human actions while live owned Session cards stay visible (#123).
  • AddedActive Orchestrator work determines the shared Bot Activity without concurrent Assignment Tool details overriding it; expanded Session rows still show both, and finishing the Orchestrator returns presentation to remaining Assignment work (#123).
  • AddedAdded a managed Container Browser target with separate profile data, the existing native Browser approval and an authenticated Human preview with explicit paused interaction; Local stays the default (#726, ADR-0114).
  • AddedChannel sidebar settings adds personal order editing with drag and keyboard controls, draft Done/Cancel/default actions, permission-safe expansion restoration and separate browser-persistent DM/group orders (#721).
  • AddedComputer and Browser Access use compact Lucide Power controls with localized permission actions, Host-confirmed state, pending guards and failure feedback (#720).
  • AddedMemory sidebar reads retain successful scoped content through refresh and reopening, use skeletons only before the first result, and recover through failure-only Retry actions without header refresh controls (#719).
  • AddedChannel sidebar entries use Lucide function icons and a single top settings gear for Sessions and Memory evolution display choices, preserving their existing preference scopes (#718).
  • AddedHumans can select @All Bots in a Group composer with an explicit active-recipient count; individual Bot picker rows show only avatar, name and role labels; stale previews require a fresh send and the committed message follows existing per-Bot mention attention and wake policies (#542).
  • AddedExplicitly trusted Host Plugins can read bounded canonical Tool arguments/results from opaque Activity references; unauthorized, expired and revoked reads fail closed without exposing payloads to Channel activity (#122).
  • AddedGroup Profile shows effective per-member attention; explicitly collected ordinary Lark messages retain one shared history and independently use each member’s existing count/time harvest or safely queued immediate policy (#638).
  • AddedGroup Channel Profile manages one authorized Lark Bridge through an Attention-style table, independent intake Switch and edit/delete Modal; pause preserves accepted sources, deletion removes intake without deleting Bot identity or history (#700).
  • AddedOverview Statistics adds compact per-Bot seven-day Memory Git commit trends and current uncommitted-change indicators, with explicit repository unavailability and exact daily detail (#716). Existing Bot Profile Memory activity uses the same ordinary-commit date/ref definition.
  • AddedThe expanded composer status shows each active Session’s latest safe activity inside its own compact block, without repeating the Bot name; Host revisions synchronize current rows, completed/disposed Sessions disappear and restart rebuilds the current baseline without copying Session payloads; the expanded container is transparent, desktop name/status share one line, and Assignment cards show native DSH titles (#122).
  • AddedOverview Statistics shows reported token totals across Bots with today/seven-day trends, compact Profile-aligned charts, paginated Bot details and direct Profile navigation; unknown buckets and retained usage remain explicit (#709).
  • AddedBrowser tab Activity can show the Provider-declared operation in shared sidebar/composer summaries; only bounded public text is admitted, conflicting concurrent detail is omitted, and raw URLs, titles and tool payloads remain excluded (#122).
  • AddedActive tool summaries now identify trusted Orchestrator, Assignment and DSH Subagent sources, count working Sessions separately from concurrent tools, clear finished sources through the same revisioned Host projection, and use compact role rows aligned with Overview (#122).
  • AddedOverview prioritizes Bots waiting for Human action, adds one-click message read without resolving requests, and separates collapsible Channel statistics with the existing TanStack chart (#705).
  • AddedAdded macOS Local Computer with a shared Profile target selector, explicit desktop permission checks and per-Bot authorization; fresh installations use the host desktop while legacy Docker configurations keep their target (#694).
  • AddedPersonaBot Profile separates external identities from source authorization, with account-only binding, durable pause/resume, local naming, reconnect and explicit unbind that preserves accepted history; existing grants retain their exact scopes (#699, ADR-0111).
  • AddedOverview shows today’s Human-accessible Channel message totals with Human/Bot/other segments, current sender names and expandable details; day/timezone and read-only Channel navigation remain explicit (#703).
  • AddedOverview defaults to active Bots, keeps Bots with Human actions visible, and lets Humans answer or decide from each Bot card; compact executing Session tiles show current native names and role icons, with exact Session navigation (#698).
  • AddedPersonaBots can explicitly follow a verified Lark Thread, admit its ordinary replies with inherited or overridden harvest, and unfollow without changing group collection; Humans can inspect and override participation (#614, ADR-0110).
  • AddedPersonaBot activity now shows Host-declared tool effects and compact safe summaries in the sidebar and composer; concurrent mixed kinds fall back to generic work, and a keyboard-accessible disclosure shows only the current tool summary without raw arguments or results (#122).
  • AddedActivity Center uses a compact unread chip beside Bot mode settings, switches to an aligned icon below Bot mode when collapsed, and remembers the last Overview or Inbox tab across chats and reload; expanded shows only the unread badge (hover or focus reveals an empty entry only in Bot mode) and collapsed shows its icon only in Bot mode, using a top-right red notification dot (#679).
  • AddedA Human or the bound Bot can configure ordinary text collection per authorized external group, independently choosing count/time harvest, next-turn wake, mention context or silent reads; versioned Admissions preserve their original policy and ordinary traffic never interrupts an active step (#613, ADR-0109).
  • AddedA Human can bridge authorized Lark mentions into an existing shared Group Channel: all current members can read one retained external message with its origin, while only the addressed bound Bot wakes and can explicitly reply through its own identity (#634, ADR-0108).
  • AddedActivity Center opens a cross-Bot Overview with the canonical Human action count, current Bot status and executing Orchestrator/Assignment Sessions; Bot cards open DMs and Session rows switch to the exact native DSH Session (#541).
  • AddedA mention-only PersonaBot can explicitly read bounded Lark group, nearby Chat time-window or anchored topic context through its own identity; the Inbox source uses a readable chat layout with named mentions and expandable exact message/source references, sender identities and read history, omissions and permission refusals without admitting ordinary history or creating wakes; non-advancing provider cursors refuse before retaining or observing returned messages (#612).
  • AddedA PersonaBot can process a ZIP received through an authorized Lark file reply, save an independent working copy, and explicitly return a newly selected file in the same topic; Bot Inbox exposes an on-demand original download through the qualified temporary provider (#657, file guide, ADR-0107).
  • AddedHuman Inbox adds filterable Handled history for answered questions, tool decisions, Workspace Grant replies and Assignment responses, with exact request/answer navigation; live actions stay oldest-first and refresh from canonical facts across windows and restart (#553).
  • AddedHumans can authorize a Workspace Grant request or answer a waiting/blocked Assignment inside Human Inbox with source context and exact Session navigation; committed replies use the Bot DM authority and refresh canonical action state (#552).
  • AddedHumans can answer a live native Bot question inside Human Inbox using the same options or custom input as its source DM card; answers resume the original request once, refresh resolved or stale actions, and preserve other Bots independently (#551).
  • AddedHumans can inspect a live tool request and approve or reject it directly in Human Inbox, with expandable source messages and exact navigation. Decisions use the source DM command, remove the resolved action while leaving other Bots independent, and refresh stale requests (#550).
  • AddedA PersonaBot can read a specified received original through native file tools and explicitly edit it with Human approval; original-message downloads and shared references show current contents, while independent uploads and default working copies remain separate (#633, file guide).
  • AddedHuman-participating DM and Group headers now offer My nickname; independent Channel names inherit the plugin default when cleared, and historical mentions plus Inbox and Bot context use their source Channel name without changing identity or attention (#622).
  • AddedAdded actual model/provider and execution-role filters to PersonaBot usage, with separate retained all-time totals, a seven-day chart default, and visible query freshness or failures (#507).
  • AddedThe local Human can save an optional default name in plugin settings; Channel authors, members, receipts and Bot context use the current name, and historical trusted Human/Bot mentions resolve current labels by stable identity without changing message content or attention (#621, ADR-0103).
  • AddedHuman can explicitly allow a PersonaBot to write one granted work folder, save a received file there, process it with native tools and approved Shell calls, and return a separately downloadable result (#632, ADR-0105).
  • AddedA Human can enable text mentions from one authorized Lark work group into a bound PersonaBot’s canonical Inbox; the Bot uses its own identity to explicitly reply in the original group/topic, with retained origin details, exclusive intake and no implicit Human DM mirror. This isolated tracer uses the qualified temporary provider and does not enable production IM (#12, ADR-0106).
  • AddedPersonaBots can explicitly mention the local Human in a Group using its current member identity; Human Inbox combines trusted mentions and direct replies in one personal view with expandable context and inline replies, while ordinary @Human text creates no personal reminder (#549).
  • AddedPersonaBot Profile coordinates daily and actual-model usage charts with one bounded time range, initially the most recent 7 days; a Model / Provider switch shows only the selected dimension; default model rows combine providers and execution roles as compact name-and-total rows, with inclusive input, cache reads, output and weighted percentages in chart hover tooltips alongside composition and cache-ratio charts; keyboard-accessible Details disclose Session categories (#592).
  • AddedExisting message attachments migrate at Host startup to resumable independent real-file identities; their original menus open the current destination, equal hashes remain independent, and owner-qualified old reads follow saved contents without rewriting messages or waking Bots (#577, migration guide).
  • AddedLocal IM verification Profiles can explicitly install the qualified temporary dsh-im fork at an immutable Git revision, with a runtime check before boot; the legacy npm package remains disabled and production enablement still requires upstream qualification (#117, guide, ADR-0104).
  • AddedPersonaBot model usage now separates Orchestrator, Assignment and DSH Subagent calls by actual provider/model, including reported failed and retried attempts; missing reports remain unknown (#503, ADR-0094).
  • AddedHuman Inbox shows direct Group replies to the local Human in a personal view, with Bot/Channel filters, exact source navigation and inline replies. Nearby messages appear chronologically with author, avatar and time; personal replies and other unread messages share one canonical unread count (#548).
  • AddedAdded a PersonaBot Profile IM connection flow for explicit account and destination grants, durable send records and honest unknown outcomes; external sends require the compatible public dsh-im contract and remain disabled with legacy services (#117, ADR-0101).
  • AddedHuman Inbox lets a Human inspect an unread Group or PersonaBot DM message with nearby context and reply inline; unavailable sources are rejected and failed attempts retain the draft (#547).
  • AddedPersonaBot Profile shows daily usage by the provider/model actually called, with separate input, output, cache-read and cache-write tokens, provider-reported totals, and explicit unknown buckets when a provider omits usage (#499).
  • AddedHumans can open the current Memory Repository, nested directories and files on the Host through DSH application menus, reveal a file, copy its Host path, or download its full current bytes to the browser device; ordinary file selection still uses the reader (#574, ADR-0100).
  • AddedHumans can click or right-click an authorized Workspace path to open its current Host directory with a detected application or copy its path; the Host checks the current Workspace Grant and registry identity without changing Grants, Session cwd, or access (#575, ADR-0100).
  • AddedNew message attachments open their actual Host destination through the file menu; external saves appear in subsequent message reads and downloads, independent uploads stay separate, and explicit reference reuse shares the current file without notifications or Bot wake (#576, file guide).
  • AddedHuman Inbox groups unread Group and PersonaBot DM messages by Channel, shows their deduplicated message count on the sidebar entry, and marks a captured message read only when opened or explicitly acknowledged; pending actions keep a separate indicator (#546, ADR-0098).
  • AddedA PersonaBot's message delivery is settable per source in Profile: for Human DM, Bot DM, and Group mention rules a Human chooses whether a message arriving during an active turn folds into it (steer, the unchanged default) or queues as its own turn (turn), and already queued messages keep their revision (#528).
  • AddedGroup Channels now open a Group Profile from the chat header, with a daily heatmap of committed messages and a per-author breakdown; pinned Group cards appear in its popover (#424, ADR-0085).
  • AddedBrowser observation now covers role-less click targets (icons and custom buttons such as Bilibili's publish controls): they appear as clickable with refs, ref clicks dispatch real input events at the element centre, and browser_click additionally accepts viewport x/y coordinates from a 1:1 CSS-pixel browser_screenshot for anything without a ref (#526).
  • AddedPersonaBots can be assigned a named Bot Browser profile (default: the shared profile); bots on the same profile share its logins, and different profiles run as separate browsers on demand with independent idle stops. The Browser entry has a Profile field to change a Bot's assignment (#497, ADR-0096).
  • AddedHumans can create a local Model Preset in a PersonaBot Profile and apply an independent Bot plan; its Orchestrator uses the chosen provider, model, and reasoning effort from the next turn (#498, ADR-0093).
  • AddedHumans can revise a reusable Model Preset for future applications, switch a PersonaBot from a compact Profile control, or save that Bot's Orchestrator choice as a custom snapshot. Existing Bot snapshots keep their routes, stale template edits are rejected, and each application or custom edit increments the Bot plan revision (#501, ADR-0093).
  • AddedHumans can choose the models and reasoning efforts available to a PersonaBot's new Assignments in Profile, including each model's default and one overall default. The Orchestrator can select an allowed route for a new Assignment; its DSH Session uses that route, while choices outside the Bot plan are rejected before work starts (#504, ADR-0093).
  • AddedExisting Assignments keep their model when a Human changes the Bot's preset; an Orchestrator can explicitly switch one to a route allowed by the current Bot plan for its next DSH request, while rejected choices leave its route intact (#506, ADR-0093).
  • AddedDSH Subagents started by a PersonaBot inherit an allowed parent model and effort. If an older Assignment uses a route excluded by the Bot's current plan, its new child uses the current Assignment default and tells the parent; out-of-plan and unavailable choices fail before child creation (#508, ADR-0093).
  • AddedA PersonaBot can attach Host files to a page through browser_upload (optionally clicking the control that opens the picker first): the native dialog is intercepted and the page's file input receives the path, with the audit recording only the file's basename (#491).
  • Addedbrowser_screenshot now also saves the capture under the browser data directory and reports its path, keeping only the newest captures (#494).
  • AddedMemory evolution now offers audited recovery checkpoints for branch, commit, staged, and working-tree state. A Human can confirm a restore while the original repository is archived; checkpoint context distinguishes observation from Git authorship (#115, ADR-0097).
  • AddedA PersonaBot can keep several tabs as owned background tabs on the shared Bot Browser through browser_tabs (list, open, select, close): background tabs are opened without stealing focus, observe and actions follow the selected tab, idle Bot tabs close while the browser keeps running, and a Human-closed tab recovers through list/select or a new open (#463).
  • AddedA PersonaBot can act as well as read in the Bot Browser: browser_click, browser_type, browser_press_key, browser_scroll, and browser_wait use refs from the latest observation, a stale ref fails with a clear re-observe instruction, and typed text enters the audit only as a character count (#462).
  • AddedThe Browser entry shows a live frame of the Bot's current tab and offers a Human takeover that pauses that Bot's browser actions and model screenshots until released; the Bot gains a browser_screenshot tool whose images reach the model only as attachments and never the audit (#461, ADR-0090).
  • AddedA PersonaBot can browse the web in the profile's shared Bot Browser once the Human turns on its Browser Access: the read-only browser_open and browser_observe tools with guidance are injected only into that PersonaBot's sessions, the first action of a session asks the Human once (a profile switch can auto-allow), every observation and action is recorded as a redacted Browser Audit entry, and a version-pinned Chrome for Testing is installed on demand when the machine has no browser (#460, ADR-0089, ADR-0090).
  • AddedMemory changes made with external tools now enter the PersonaBot's durable Bot Inbox with changed paths. Edits made while the Host is closed are recovered at startup and reach the Agent on its next ordinary turn, without an extra wake or file-content injection (#350, #352, #464, ADR-0092).
  • AddedA PersonaBot can leave any joined Group through group_leave; its Channel access ends immediately, a single system notice distinguishes voluntary departure from removal and records per-member Inbox admissions under each remaining Bot's Channel wake policy; the leaver's pending Group Inbox Admissions settle without removing message history or creating false Human Inbox repair items; if it created the Group, the remaining members continue under Human management; a failed post-commit wake is retried while the Host stays live (#372, ADR-0073).
  • AddedPersonaBot DMs now separate Memory files from Git evolution: files in an expandable folder tree open read-only in the Channel body; commit history and current diffs appear together in compact reading panes with old and new line numbers, grouped by New memories and Updates to existing memories by default, with a persistent Git terminology option and status badges. External edits refresh automatically; the evolution header offers Refresh and a terminology menu, while the sidebar shows one branch label without redundant history headings or section rules (#416, #444, #466, ADR-0088).
  • AddedA PersonaBot can act on the shared Computer once the Human turns on its Computer Access: a curated observe/act/verify tool set with guidance is injected only into that PersonaBot's sessions, the first action of a session asks the Human once (a profile switch can auto-allow), and every observation and action is recorded as a redacted Computer Audit entry (#386, ADR-0079, ADR-0080).
  • AddedGroup Channels keep the member roster separate from Group settings. Humans can crop a square WebP Group image, rename the Group, search for a PersonaBot to invite, handle pending invitations and join requests in a notification dialog, and manage each member through a menu for message policy or removal, and disband the Group from a secondary menu, with its avatar shown in ordinary, pinned, and collapsed navigation (#390).
  • AddedA joined PersonaBot can read and change its own Group attention preference with Orchestrator Tools; Human and Bot edits share the same Channel value and leave attributable revision history, while previously admitted messages keep their original policy snapshot (#365).
  • AddedA PersonaBot Profile now places a collapsible source-class policy section below its activity charts. Both sections fill the available Channel body width, showing all built-in attention defaults and their durable revision source; new Channel and Assignment admissions record the effective source revision while retaining immediate, Group digest, and conditional report delivery (#366).
  • AddedPersonaBots can inspect all source attention defaults and seven-day Orchestrator wake counts through scoped Tools. A Bot or Human can edit Assignment report wake and the ordinary Group default (all, digest with count/interval, mentions, or silent), restore built-in defaults, and see the last editor and durable revision in the Profile. Saved per-Group preferences still take priority; existing Admissions keep their original policy snapshots (#370).
  • AddedGroup Channel members can choose whether a PersonaBot sees every ordinary message immediately, receives a digest, only wakes for direct mentions, or records messages silently. A direct mention carries bounded pending context from the same Channel, including the oldest unread and nearby messages; the prompt reports omitted messages and later turns advance through the backlog. Explicitly read messages become Processing and settle as Handled on a successful turn or Needs repair on failure; unreturned messages stay pending. New members default to a digest, and a Group member or Bot message avatar opens that Bot's DM (#364).
  • AddedOversized Assignment reports now retain a short Inbox preview with a DSH Spill locator without interrupting the Agent or requiring it to write a file; the Orchestrator can page through the accepted report and inspect recent Session events through bounded DSH Session Query reads, with the returned size and estimated token cost shown (#194).
  • AddedGroup Channel receipts now include the local Human as a named unread/read recipient for Bot messages, backed by a durable Human membership and identity-keyed read position; sender messages exclude their author (#347, ADR-0078).
  • AddedThe operational-logs skill (the reader guide for logs.db) is listed in the skill and / catalogs only while the Bot settings Developer mode switch is on: on, a Human can invoke reading-operational-logs and the model can load the guide on demand; off (the default), no client sees it (#248).
  • AddedStopping an Assignment now records a Host-authored lifecycle notice in the owning PersonaBot's Bot Inbox, so the Orchestrator can report a confirmed stop even without an Assignment report; unobserved notices survive Host restart and briefly retry while DSH's Agent Loop starts (#194).
  • AddedExisting full-access Assignments remain visibly marked in the Bot's Session list after the Bot default is turned off or the Host restarts, using each Session's original permission snapshot (#116).
  • AddedGroup Channel members can choose a silent inbox for a Bot: ordinary messages remain as durable pending admissions without an automatic wake, including after restart; direct @ mentions still wake immediately (#47).
  • AddedOrchestrators can stop an Assignment through DSH cancellation; its stopped state survives restart, late reports cannot revive it, and the same continuity key can start a new Session (#194).
  • AddedBot mode has a Human Inbox above Messages for pending Group join requests, live native Bot questions and tool approvals, and new Bot DM information. Users can return to each source to decide, mark informational messages read, filter by Bot or Channel, and sort by time (#126, ADR-0071).
  • AddedAn Assignment that explicitly asks Human for input now appears once under Human Inbox action items, linked to its Assignment detail. A later blocked report updates that same item with the latest reason; it remains visible if the Assignment is still blocked after a reply, and clears when a newer report resolves it or the Assignment stops (#126, #47).
  • AddedWorkspace Grant requests from a PersonaBot now appear as Human Inbox actions linked to the exact DM card. An authorized reply clears the action using a Host-validated Grant reference; ordinary replies leave it pending (#47, #126, ADR-0071).
  • AddedA Bot Channel message that needs repair now appears in Human Inbox action items. Human can open the Bot Inbox or original message; a missing Channel degrades to Bot Inbox, and resolution removes the item without creating another Inbox store (#47, #126).
  • AddedA completed Assignment report can appear under Human Inbox information; Human can open its Assignment or ignore that specific report. The decision survives restart, while a later report from the same Assignment appears again (#126, ADR-0071).
  • AddedBot Inbox source groups reopen when new pending attention or a higher-severity state arrives; a manually collapsed group stays closed while its facts are unchanged (#152).
  • AddedA PersonaBot DM sidebar now shows a Bot-scoped Inbox grouped by source Channel, with durable attention status, source-message navigation, and unavailable-source fallback; completed attention does not imply a reply (#47, #152, ADR-0070).
  • AddedA PersonaBot can explicitly ignore a received or read Channel message through inbox_ignore; the durable Bot Inbox and Channel delivery status distinguish this decision from a handled turn with no reply, while the original message remains in history (#47, #152).
  • AddedAssignment reports now enter the same durable Bot Inbox as Channel messages, with report state and a link to the owning Assignment. Unobserved due reports recover after restart; a report interrupted after entering the Orchestrator context shows needs-repair, and a completed turn never forces a Channel reply (#47, #152, ADR-0070).
  • AddedA Human can select a Group Channel with # in a PersonaBot DM; the Bot receives its current ID and name without gaining membership or seeing its roster or history. The Bot can request to join, a Human or the Group's Bot creator can approve or decline, and the Human can click the sent reference to open that Group (#292, ADR-0069).
  • AddedGroup Channel members can use a per-Bot ordinary-message digest: after N messages or T seconds with a nonempty queue, the Bot receives one bounded Inbox summary at its next idle turn. Direct @ mentions remain immediate; a busy Bot finishes its current turn first, and a completed digest does not require a reply. Explicitly reading a Group message observes the corresponding admission and removes it from later digests (#47).
  • AddedPersonaBots can list joined Group, Human DM, and Bot DM Channels, filter by name or Bot membership, inspect current members, and send to a selected Channel by its stable ID; they can also query a joined Channel's full message history by text, author, and date, or search across joined Channels, with cursor pagination through the single channel_read tool (#304).
  • AddedPersonaBot creation now offers an empty Memory Repository or an HTTPS/SSH Git import. The Host checks Git, clones into staging with its existing credentials, and only creates the Bot after a successful clone; failed imports leave no Bot (#298).
  • AddedPersonaBots can create Group Channels, invite active colleagues through a durable pending invitation and Bot Inbox Admission, and let each invitee accept or decline before membership and Group access begin. The creator can rename the Group and remove Bot members; Humans see invitation states and can cancel invites, remove members, rename or logically delete the whole Group (#282, ADR-0065).
  • AddedIn a Human–PersonaBot DM, selecting one or more other active Bots with @ gives the current Bot their stable IDs, current names, and bounded descriptions on its next turn. The selection alone does not wake or add those Bots to the DM (#280).
  • AddedA PersonaBot in a Group Channel can mention multiple joined colleagues with stable IDs; the Host renders their Bot badges, commits one message, and wakes each recipient independently while bounding Bot-to-Bot loops (#281, ADR-0065).
  • AddedPersonaBots can now contact active colleagues through a two-member Bot DM. Each send commits one Channel message and a bodyless action link in the sender's Human DM; recipient Inbox Admission is conditional on hop-limit and causal-root deduplication checks; the recipient can reply in the same conversation. Humans can inspect these DMs from the hidden-channel manager in read-only mode (#279, ADR-0065).
  • AddedIn a Group Channel, a Human can select multiple joined PersonaBots with @; one committed message wakes each Bot independently, their replies stay in the Group, each processing state is visible, selected mentions appear as avatar-and-name badges without the @ sigil in both the draft and sent message, and clicking a sent badge opens that Bot’s DM. Existing Channel history moves once from NDJSON into the SQLite Messaging authority (#254, ADR-0037).
  • AddedA PersonaBot's checked-out Memory Git working tree is now its current memory: native Git can bring in unrelated histories, merges, code, and binary files without a second admission step. The Channel Memory view shows current files and all local branch history; binary files stay read-only in its text preview (#115, ADR-0068).
  • AddedWhen a Memory branch request is ambiguous, the Orchestrator asks through DSH's native question service in the PersonaBot DM; the Human's choice resumes the same Session, and answered or cancelled cards stay closed after refresh (#264).
  • AddedWhen a Memory branch switch encounters unfinished changes, the Orchestrator can coordinate affected Assignments, preserve work in a named Git stash, and retry in the same Session; the DM branch picker now filters local branches as the Human types (#263).
  • AddedA Human can choose “Continue from here” on a Memory Git commit, name a new branch, and have the same Orchestrator Session create and switch to it; pending raw commits remain unaccepted and can be recovered through Human Repair (#262).
  • AddedA Human can select an existing accepted Memory branch in the PersonaBot DM; the same Orchestrator Session switches the repository, reports progress in the Channel, and sees the new working-tree files on its next native read (#261).
  • AddedPersonaBot DM Memory now shows the local Git branch and commit graph with acceptance and repair status; selecting a commit opens its changed files and diff across the Channel body, and returning preserves the chat draft and reading position (#260).
  • AddedPersonaBot DMs can now open accepted Memory files, edit an existing Markdown file, and inspect validated commit history and diffs; Agent file writes are accepted after a successful turn, while provisional or divergent repository state blocks further saves and an explicit Human repair archives unfinished changes before restoring the accepted head (#115).
  • AddedWhen a PersonaBot needs a project folder with no active Grant, its Orchestrator can place an authorization request card in the DM. The Human chooses a Host folder on the card, and the same Orchestrator Session resumes from the explicit approval reply before creating an Assignment (#116).
  • AddedA Human can add a Host folder from the PersonaBot DM sidebar with the DSH picker or an absolute path, then remove its active Grant without deleting files; the sidebar shows fixed Memory and active folders by default, while the Bot settings Developer mode switch reveals revoked history and advanced folder options. New Assignments retain their selected Grant and single-directory permission snapshot; Bot-owned Sessions retain native DSH file and search tools with per-call Grant checks, while Shell and other tools whose file effects cannot be checked by path ask the Human in the Bot DM to allow or reject that exact call (#116, ADR-0067).
  • AddedA PersonaBot tool approval card can save an exact-call or all-opaque-tool auto-approval rule for its current role and Workspace Grant scope; rules are revocable and each matching call remains audited by DSH. A separate per-Bot dangerous-access switch applies danger-full-access + never to new Assignments after explicit risk confirmation, while existing Assignments and the Orchestrator retain their mode (#116, ADR-0067).
  • AddedBot-mode channels now support Shift range selection and Ctrl/Command toggle selection across the visible roster. Right-clicking any selected Bot DM or group channel offers count-aware batch pin or unpin, move-to-section (including from the pinned area), and hide actions; each selection now commits through one bounded Host command and appears together, without a separate action bar; destructive batch deletion awaits #138 (#215).
  • AddedPinned Channels now follow the global sort by default, can use their own recent/manual sort mode, and can be dragged between pinned-grid positions without unpinning. A manual drop persists the pinned order for both expanded and collapsed sidebars (#215).
  • AddedIn the web sidebar, Alt+1–9 opens the corresponding visible channel and Alt+0 opens the tenth; holding Alt reveals the position labels, and Alt+Backquote toggles Bot mode. Editable fields keep their own keys. Desktop Ctrl/Command mapping remains a future host integration (#216).
  • AddedBot and bridged Channel messages now render Markdown with DSH's safe native renderer, while Human messages retain literal text and line breaks (#142).
  • AddedPersonaBot replies now appear as a live Channel draft while channel_send is generated, then settle into one committed message; interrupted drafts disappear with a clear status (#144, ADR-0054).
  • AddedChannel messages can now reply to a committed message in the same Channel. The composer supports Reply/Cancel; bubbles show an author-and-excerpt quote that jumps to older history, with a safe unavailable state when the original is gone (#145).
  • AddedHuman and PersonaBot Channel messages can carry uploaded images and downloadable files. Upload failures remain retryable in the composer, while durable messages retain profile-scoped attachment references (#146).
  • AddedThe Computer group in the Bot settings section can export to a directory chosen at export time and open its folder in the Host's file manager, and the directory can also be typed when the deployment mounts no directory picker (#168).
  • AddedAdded the Computer group to the Bot settings section: its export directory is chosen through the Host's directory picker, the idle stop time is edited in place, and export/import run from the same page with an explicit authorization step; these settings are runtime settings, so they apply without restarting DSH (#168).
  • AddedAdded a paged Channel timeline with grouped message bubbles, one Bot avatar and one sender/time per consecutive run (Human messages have no avatar), contextual Copy and Locate actions, scroll-anchored older-history loading, a jump to newer messages, and reopening near the last visibly read committed message (#143, ADR-0061).
  • AddedAdded an optional Computer plugin: a profile-scoped shared Linux desktop that runs locally in Docker and appears in the DSH Web Client as an authenticated VNC panel, with explicit authorization for start and stop, live image-pull progress, idle stop, and one-file export/import of the Computer's persistent store; PersonaBot binding and a Settings-based directory picker remain follow-up slices (#150).
  • AddedAdded the Channel sidebar shell: Bot mode's right region now renders ordered, collapsible entries (group members, DM Assignments) registered through one client-side seam (#156).
  • AddedAdded the first Human-testable PersonaBot Assignment tracer bullet: a PersonaBot can receive a DM through its durable Bot Inbox, run an Orchestrator plus an independent Assignment Session, explicitly send the Assignment result back to the same Channel, and expose Assignment list/detail views; default Memory and Workspace Grant behavior remain follow-up work in #81.
  • AddedAdded a persistent BotHarness motion preference with Follow system, Reduce motion, and Full motion modes, including a live accessible preview and one effective policy shared by Client surfaces (#128).
  • AddedReworked the DM and group Channel composer as a responsive floating island with multiline input and an accessible, projection-only PersonaBot activity region (#129).
  • AddedAdded deterministic, read-only GitHub Release draft preparation for the independent DeepSeekBot and DSH Skill release trains (guide, #103).
  • AddedAdded a Computer export & migration guide covering the one-file move between machines, the durable ~/workspace convention for files that must survive a move, and size/time expectations (#154).
  • AddedAdded a Bot Marketplace to the sidebar + menu: paste a public GitHub repository carrying the botharness-bot topic to list it, browse listed Bots, and install one as a new PersonaBot after a confirmation that shows the latest commit and a third-party risk notice (#916, ADR-0131).
  • AddedRepositories that add the botharness-bot topic now appear in the Bot Marketplace after the daily discovery without a paste, and listed entries refresh hourly; removing the topic, archiving, deleting or making a repository private hides it, and renames keep the same entry (#917).
  • AddedThe Bot Marketplace can sort by recent update or stars, search names, descriptions, topics and READMEs (Chinese included) with relevance ranking, and filter by topic chips (#918).
  • AddedOpening a Bot Marketplace entry shows its README rendered like GitHub (relative images and links resolve at the listed commit; scripts, event handlers and unsafe URLs are removed), with stars, update date, topics, a GitHub link and Install (#919).
  • AddedBot authors can commit .botharness/bot.json to share a display name, role badges and an avatar (a generated-avatar recipe or a committed PNG, JPEG or WebP image); the Bot Marketplace shows the name and badges, and installing applies the avatar from the cloned repository. Invalid descriptors are ignored (#920).
  • AddedPasting a repository or reporting a Bot in the Bot Marketplace now passes a self-hosted proof-of-work check (ALTCHA, no third-party CAPTCHA) whose cost rises with recent volume, with per-source and per-repository rate limits. Each entry has a Report button with an optional reason; reports from enough distinct sources hide the entry until an administrator restores it, and blocked repositories stay out of the catalog. Raw IP addresses are never stored (#921).
  • AddedThe Bot Marketplace Worker documents a public, versioned read API (/v1/bots, /v1/bots/{id}, /v1/topics) for the product site, with CORS limited to deepseekbot.botharness.ai and its local dev origins and one-minute public caching (#922).
  • ChangedChannel header Profile entries and composer activity avatars now omit duplicate attention badges and activity dot matrices; sidebar indicators and activity disclosure remain available (#928).
  • ChangedDeepSeekBot is published as a stable version on the npm latest tag, with next moved along; install it with dsh plugin --profile web add deepseekbot or by entering deepseekbot in the desktop Add plugin dialog (#895, release guide).
  • ChangedChannel sections, pins, hidden entries and root order now persist in the Profile database after a validated one-time import; restart no longer depends on the retained legacy roster domain, while native sorting and per-Client collapse keep their existing owners (#885).
  • ChangedPersonaBot identity, saved appearance, pause/access flags and independent model plans now survive restart in the owning Profile database; validated legacy bot.json records are imported once and retained without runtime fallback, while Soul remains Git-backed (#884).
  • ChangedReusable Model Presets now persist in the Profile database, with a validated one-time import of existing templates and preserved IDs, revisions and independent applied Bot plans; legacy template files remain recovery inputs and are no longer used after cutover (#883).
  • ChangedMany active Avatars now animate smoothly together: all transitions share one animation-frame loop, pixel-family tool transitions step at a pixel-art frame rate with merged color runs (@botharness/pixel-morph 0.2.0), and Avatars scrolled out of view skip transition work after updates, keeping 32 to 128 active mixed-family Avatars at full frame rate in measured runs (#757).
  • ChangedMade the packaged IM Provider qualification independent of developer selections and advanced its own artifact version for the accepted Slack capabilities (IM installation, #868).
  • ChangedBot Inbox sidebar rows now put readable content first, separate source/report metadata from lifecycle status, and highlight items needing repair using the native error color (#851).
  • ChangedChannel sidebar display settings open hover submenus that keep repeated selections visible and temporarily isolate the relevant entry for preview; dismissing restores prior disclosure while saving the chosen display preferences (#807).
  • ChangedChannel message groups keep consecutive bubbles compact, show one hover/focus timestamp beside the author, and reveal per-message copy/reply beside delivery receipts without a reserved action row (#803).
  • ChangedNearby external context now covers the five-minute window and supplements sparse sides to configurable preceding/following message minima, with 30-minute bounded continuations (#793).
  • ChangedConnector authorization settings are more compact, with filled primary/destructive actions and contextual help available by hover, click, or keyboard (#780).
  • ChangedUnified Container Browser and Docker Computer preview, fullscreen and explicit interaction controls in one shared Viewer; Browser waits for Host Pause before enabling input and keeps Pause when the view collapses (#736).
  • ChangedHuman Inbox now uses native DSH filter menus and padded compact rows: open details by clicking a row, respond through primary actions, or jump to the exact source through its avatar and corner arrow; Activity Center keeps the current tab when browser storage rejects writes (#687).
  • ChangedPersonaBot Attention policy now compares nine source rules in a compact table, with recent wakes, inline edit actions and secondary audit details (#670).
  • ChangedBrowser Profile uses a searchable combobox: select an existing name or explicitly create a new one; errors use the destructive theme colour and the Browser view removes redundant help text and its duplicate page title (#611).
  • Changedchannel_send now confirms the committed Channel and message IDs as JSON, describes forwarding exact trusted attachment references from reads, and exposes the existing 10-attachment / 20-mention limits and safe integer byte sizes (#570).
  • ChangedContact discovery now searches names and full descriptions, returns bounded cursor pages and optional detail, and preserves stable colleague IDs for real Bot DMs and Group collaboration (#568).
  • ChangedAttention Tools now expose the complete Assignment-report and ordinary-Group parameter matrix, use integer digest schemas, and reject digest parameters outside Group digest mode without changing policy revisions; Human overrides and prospective Inbox snapshots still share the same authority (#567).
  • ChangedChannel reads now return bounded actionable content with explicit continuation, preserving replies, trusted attachments and action references while leaving omitted or partially read messages pending in Bot Inbox (#565).
  • ChangedGroup invitations now default to automatic acceptance without waking the invited PersonaBot; Bot settings can keep invitations pending for its own decision, and resolved invitations cannot wake again after redelivery or restart (#371, ADR-0073).
  • ChangedChannel discovery and history Tools now enumerate supported filters and explain joined-search, author, date and legacy page-size behavior; exact lookups with no accessible match report it explicitly without revealing hidden Channels (#564).
  • ChangedGroup join request and decision Tools now return compact Channel, request and requester references with the actual state, preserving approval-only access without copying full Group records or internal identity timestamps into model context (#563).
  • ChangedGroup creation and invitation Tools now return compact Channel, invitation and invitee references with the actual decision state; accepting or declining no longer copies the full Group record into the model context, and declines still grant no Group access (#562).
  • ChangedGroup rename and member-removal Tools acknowledge the committed Channel, name, outcome, and affected Bot without copying avatars or unrelated Group state into the model context; an unexpectedly missing rename result now fails explicitly (#561).
  • ChangedBrowser Pause now explains that the Human can always use the local browser window directly; paused tool refusals point to Resume and a fresh observation, while page reading remains available (#495).
  • ChangedPending context folded into a steer or harvest is now selected by the total character budget in arrival order (oldest first, no per-turn row sampling), so bursts of short messages — such as live chat comments — fold as many messages as the budget allows instead of at most twenty; messages beyond the budget stay pending for later turns (#528).
  • ChangedHuman DM messages now steer an active Orchestrator turn at its next safe step by default — and any messages still pending in that DM are claimed into the same steer, mirroring the Group mention context harvest; bot-DM messages steer the same way. When no turn is running the behavior is unchanged (#528).
  • ChangedIsolated Windows DSH development instances can safely adopt an existing WSL DeepSeek dev key once, so real model QA uses the same machine-local credential across both environments (#115, AX guide).
  • ChangedThe Computer entry's Access switch moved into the collapsible header and, like the Browser entry, the section cannot expand while access is off (#493).
  • ChangedThe Browser entry keeps its Browser Access switch in the collapsible header and refuses to open while the switch is off; the body is now a clean tab list with a focused preview that follows the Bot by default (or a tab you click), and Bot tabs open as background tabs in the shared Bot Browser without popping windows or stealing focus. The former Takeover control is now Pause Bot, which stops the Bot without implying you need permission to use the window (#490, #492, #496, ADR-0095).
  • ChangedMemory file readers use a distinct full-width header with quiet return and refresh controls; commit and working-tree diffs use collapsible file cards with old/new line numbers, addition/deletion counts, and the same status badges as the Git graph. The historical branch action names its create-and-switch behavior (#441, #512).
  • ChangedBotHarness now declares its DSH compatibility as a SemVer range (>=0.2.0-rc.1 <0.3.0-0) whose floor is the verified host line, instead of an exact pin; runtime behavior is unchanged (ADR-0087, #423).
  • ChangedBotHarness now targets DSH 0.2.0 RC1: workspace pins and engines.dsh moved from 0.1.7 RC2, and isolated development Profiles must be recreated for the new RC (#419).
  • ChangedUnpinned Group and PersonaBot DM Channels now share a conversation-row layout with an avatar, name, and latest-message preview; empty Channels show a short placeholder. The unpin drop hint has more breathing room, and an active Bot avatar keeps its status dot without an outer ring (#404).
  • ChangedNew isolated development Profiles compose the optional @botharness/computer bundle by default, so the Computer sidebar entry and viewer are available without hand-editing the Profile (#383).
  • ChangedGroup Channel messages now show a compact filled recipient pie beside each bubble. Open it to see each admitted PersonaBot by name and avatar as delivered, read, processing, handled, ignored, or failed; reading Channel history alone does not imply handling, and processing begins only when the message enters an Orchestrator turn, and a Bot sender is never counted as its own recipient (#345).
  • ChangedDM and Group message bubbles reveal the message time, Reply, and Copy beneath the bubble on hover or keyboard focus; touch devices keep the actions visible (#345).
  • ChangedCopying a DM or Group message now briefly changes that message's Copy icon to a checkmark after the clipboard write succeeds; failed writes keep the Copy icon (#376).
  • ChangedA PersonaBot DM sidebar now shows its owned Orchestrator and Assignment Sessions using native DSH titles, workspace and running state; a heading menu switches Current/All and Flat/By workspace views, each Bot remembers those choices and collapsed groups in this browser, and a row opens the native Session. An owned root Session shows its Bot avatar before the idle native sidebar title and offers header and Session menu actions back to its DM (#312, ADR-0072).
  • ChangedThe browser now remembers whether the last visible view was Bot mode or native DSH. Reloading a Bot view reopens its selected Channel, while returning to DSH keeps that choice on the next visit (#340).
  • ChangedGroup @PersonaBot and Bot-to-Bot DM guidance now let a Bot finish without replying when no response is useful; “handled” still means its turn completed, not that it acknowledged the message (#302).
  • ChangedLocal Desktop Client edits now update an open PersonaBot DM through DSH Client HMR; the unpublished UI Bundle uses @botharness/ui so RC2 can resolve its plugin graph (#272, ADR-0066). After a full Desktop document reload following HMR, RC2 can still fail Web boot; restart the app and Host as described in the development guide.
  • ChangedDM headers now use the PersonaBot display name even when the stored Channel name is an ID; the right Channel sidebar no longer repeats that title (#263).
  • ChangedLocal BotHarness development now supports DSH 0.1.7 RC2 Web Profiles, with automatic Client refresh and a documented Host restart path (#265).
  • ChangedChannel Bot bubbles now use the former Human grey surface, while Human bubbles use the DSH theme’s inverse neutral palette with readable text, reply excerpts, and file attachments in both light and dark themes (#255).
  • ChangedOperational logs gained a durable home: a lightweight logs.db beside the profile (versioned schema, rebuild-empty worst case, 50k rows + 30 days lazy retention, owner-scoped reads) that the Computer diagnostics ring now drains into, so debugging survives restarts (#240, ADR-0063).
  • ChangedThe Computer viewer now narrates its lifecycle (mounts, stream phases, reloads, retries) into the developer diagnostics log, so a later debugging session replays the card's story without a browser (#234).
  • ChangedOn web deployments, Computer export/import now runs through the browser: a Download button fetches the finished archive via the save dialog (streamed), and Choose archive file… streams a local .tar up for import — no Host path typing, with single-use transfer tokens and an explicit note where streaming upload needs Chromium (#212).
  • ChangedThe Computer accepts an opt-in dataDir for professional Linux deployments: the persistent store bind-mounts at the configured directory instead of the named volume, with the resolved location shown on the authorize view alongside the SQLite-on-shared-filesystem risk note; off Linux the setting is ignored with a visible reason, and changing it rebuilds a stopped container on the new store while a running one is left untouched with a migration hint — previous data stays behind for manual migration (#155).
  • ChangedStarting the Computer now waits for the desktop web endpoint to serve (bounded at ~90 seconds) before reporting running, so the viewer no longer mounts into a dead port and shows a black connecting screen; while waiting, the entry and settings rows report the live starting stage, and a desktop that never serves fails the start with an explicit retryable error instead of a silently broken running state (#223).
  • ChangedThe Computer viewer now syncs with Selkies' own session state instead of trusting canvas size alone: liveness requires a sized surface, changing pixels, and a quiet #status-display line — a static-but-healthy desktop still goes live after a short grace, and a stuck stream ages to the retry state — so opening the viewer no longer reports connected while Selkies is still connecting. Busy negotiation gets a patient budget instead of rushing to empty, losses remount only once persistent, and a document that never went live remounts itself a bounded number of times, so a fresh start recovers without a manual retry (#221).
  • ChangedThe Computer sidebar's Running card now follows the AgentScreen pattern: a framed capture that reveals a blue Open pill on hover, and a fullscreen viewer whose title bar carries the Bot name, live status, stop, and collapse — the toolbar button is the only way back, the page scroll is locked, and a single iframe only toggles geometry between the card and the overlay so opening the viewer never re-handshakes the stream. Entering shows a connecting state, sustained silence becomes an explicit no-picture state with retry, the start view hides bare exit-code reports behind the shared note, and all chrome colours read DSH design tokens or primitives so light and dark themes both render correctly (#167).
  • ChangedComputer export now closes the browser gracefully before packing the volume (bounded at ~10 seconds, falling back to a plain stop), and every start seeds the durable ~/workspace directory, so a migrated profile opens with flushed logins and tabs and bot work files travel with the archive (#154, ADR-0062).
  • ChangedDuring an export or import, the Computer settings rows and the sidebar card show the live stage with elapsed time instead of a generic busy label (#154).
  • ChangedThe Computer's settings rows — export directory, idle stop, export/import — now render under their own Computer section heading on the BotHarness settings page (#154).
  • ChangedThe Channel header is now a floating, clickable name island over a fading message timeline; it opens the Channel sidebar, whose top heading no longer draws a divider (#156).
  • ChangedThe Bot icon chooser is a grid of cards that show each mark, with the selected one outlined, instead of a selector that only names them (#178).
  • ChangedBotHarness copy now follows the DSH language everywhere, not only in Settings: the roster, section management, PersonaBot creation, the Channel sidebar entries, the composer, and activity states all render English when the interface is English (#184).
  • ChangedThe app sidebar's Bot mode switch stands taller with a larger mark and label: clicking the row again leaves Bot mode, and hovering reveals a settings gear that opens the Settings dialog on the Bot section (#177).
  • ChangedBotHarness now has its own Bot mark: the app sidebar's BOT-mode entry and the Bot settings section's navigation show the DeepSeekBot mascot (light and dark artwork), and the new Bot icon row switches it between the mascot, its simplified variant, a generated blob, or a generic bot glyph (#178).
  • ChangedBotHarness preferences now live in their own Bot settings section in the Settings dialog — the motion and BOT list sorting rows moved out of the native General page, and the Computer's settings, export/import, and resource bounds will follow there (#177).
  • ChangedThe Computer now pulls the upstream webtop image (XFCE with Chromium) instead of a BotHarness-built Chrome image, and runs under explicit resource bounds — 2 CPUs and 2 GiB memory by default, swap pinned to the limit, 512 MB shared memory, 4096 processes, and a 30-minute idle stop, all overridable per Host: the image shrank by ~470 MB and resting memory fell from ~2.4 GiB to ~1.15 GiB (#150).
  • ChangedThe Computer desktop now opens at viewer-friendly chrome sizes — a taller top bar with larger icons and a taller bottom dock — seeded only over stock values, so a Human's own panel customization is never overwritten (#150).
  • ChangedPersonaBot Agents now join an agent preset (standard by default); the Orchestrator can persist memories directly through its Memory-scoped file tools, while opaque native tools ask for one-time Human approval through the Workspace Grant boundary; the Orchestrator now records memory itself and delegates only independent work, while Assignments report memory-worthy findings instead of writing the repository (#115).
  • ChangedThe Orchestrator now starts Assignments without waiting: create_assignment returns its Session id immediately, a continuity key reuses an idle Assignment instead of creating another, and Assignment reports and questions arrive through the Bot Inbox where an answer resumes the waiting Assignment (ADR-0059, #180).
  • ChangedPersonaBot creation now provisions a real Git-backed Memory Repository and the Orchestrator Session runs inside it; reopening a repository never auto-commits a provisional working-tree edit (#115).
  • ChangedRemoved the model-visible memory_read, memory_search, memory_write, and memory_list tools; V1 uses Grant checks on DSH native file tools; opaque Shell and code calls require one-time Human approval when available (#115).
  • ChangedA Session freezes its persona when it first assembles a system prompt, so a Human edit to PERSONA.md reaches new Sessions while a running Session keeps its original prompt prefix (ADR-0060, #115).
  • ChangedPersonaBot DM and group Channels can now be hidden from every roster navigation surface and restored from a searchable More → Hidden channels modal without changing their pin, section, order, messages, PersonaBot, or Memory state (#137).
  • ChangedChannel and section context menus now expose the same organization controls as drag-and-drop: sections can move up/down, rename, or be safely removed; every group or PersonaBot DM Channel can pin/unpin, move to an existing or newly created section, rename, or hide. Renaming a DM updates the PersonaBot display name while stable internal identifiers remain unchanged; true Channel/PersonaBot deletion remains deferred to #138 (#10).
  • ChangedGroup Channels and PersonaBot DMs can now be pinned by context menu or drag. An empty pin target stays hidden until a Channel drag begins, then transitions open; dragging a pinned card reveals a dedicated dashed target that unpins and restores its prior placement, while dropping on a specific Channel, section, or section gap unpins it at that predicted position. Ordinary roster whitespace is not a drop target. Legacy PersonaBot-slug pins migrate to Channel ids (#10).
  • ChangedThe collapsed BOT-mode sidebar now projects every ordered Channel into its 36px rail: pinned Channels appear first behind a divider, followed by the same flattened section/loose order; PersonaBot DMs keep their avatars, group Channels use the hash glyph, and the native hover card shows identity plus the latest message preview (#10).
  • ChangedSession listing and PersonaBot activity now resolve through explicit durable Session ownership, including fork and Subagent lineage, instead of cwd or workspace membership (#80).
  • ChangedSection headers can now create either a group Channel or a PersonaBot DM directly inside that section, and newly created sections, loose Channels, and section members default to the first position in their scope (#10).
  • FixedOpen Profile identity and Channel connector tables now refresh after identity or Grant changes and when reception connects or fails, without a manual refresh (#855).
  • FixedAfter Host restart, previously executing Assignments now produce one safe recovery notification for their PersonaBot, preserving original Reports and avoiding automatic Assignment replay; handled notifications are not recreated on later restarts (#194).
  • FixedA native Assignment execution error now produces one safe Host notification for its PersonaBot and releases its Continuity Key, preserving the original progress Report without retry or replay after restart (#194).
  • FixedHuman cancellation of a running Assignment now delivers one Host-origin Bot Inbox notice, preserving the original Report and native Turn identity without automatic retry; handled facts survive restart (#194, ADR-0045).
  • FixedFixed Slack Channel connectors and member reminders showing Lark-only labels or defaults (#845).
  • FixedAssignment answers retain their original question until native Inbox acceptance; proven delivery preparation failures remain retryable, uncertain delivery stays visible for repair and older answers cannot clear newer questions (#812).
  • FixedHuman Inbox action buttons now open the same split detail view as the row; titles span the full first line above summaries and actions, and compact-entry dialogs have more room (#812).
  • FixedIdle Assignment continuation and keyed reuse now respect the same profile-wide concurrency limit as new work, preserving unanswered questions when capacity is full (#811).
  • FixedChannel sidebar edit mode omits expansion chevrons and supports dragging the whole row; dragging now previews the actual draft order with a clear insertion line, accepts row labels as drop surfaces and restores the pre-drag draft on cancellation (#808).
  • FixedFixed Container Computer panel sizing on the first start of a fresh home store, preserving existing custom preferences and using the configured storage (#797).
  • FixedFixed Browser Stop and idle shutdown to revoke affected Session authorization before cleanup, so a pending approval cannot restart the stopped profile; cleanup failures retain a visible Stop recovery path and later idle retries remain possible (#768).
  • FixedQualified the full IM fork for bounded context reads that discard pending results after consumer release or Provider replacement, preserving existing file, echo and independent-responder capabilities without waiting for an upstream merge (#789).
  • FixedConcurrent PersonaBot Tool activity now orders opaque detail references before bounding them, so the same active set produces the same lookup references regardless of arrival order (#123).
  • FixedGroup Profile member message activity identifies external traffic by its platform and source group name, combining senders within one source while keeping different sources separate (#769).
  • FixedNumeric PersonaBot avatar badges remain fully visible in the collapsed app Rail, including the first and pinned Channel rows, without changing native sidebar scrolling (#744).
  • FixedmacOS Local Computer now resumes fresh observations after driver idle expiry, while expired snapshot and element tokens remain invalid (#713).
  • FixedComputer Audit now records driver-returned tool failures as errors, so refused screenshot and window requests no longer appear successful; observation content stays out of Audit (#708).
  • FixedInbox source avatars remain at the far right of every action row; repair-only Bot Inbox maintenance is available inside details without an extra list button (#687).
  • FixedInbox details load older/newer context from flush edge controls, expose exact source links on message hover/focus and persist Dismiss without answering or authorizing the source request (#687).
  • FixedInbox list “Choose workspace” now opens the same DSH folder picker directly without expanding the event; other response actions use an independent dialog, cancellation can be retried and resolved requests do not trigger authorization (#687).
  • FixedComputer Settings opens the native directory picker correctly, keeps the authorized export destination for the next import, and retains manual path entry when a picker is unavailable (#166).
  • FixedBot activity recovers through bounded snapshot refresh when live transport fails; reconnects and revision gaps restore shared sidebar/composer state without treating connection errors as Bot activity (#121).
  • FixedFixed Memory edits being silently absorbed when a new DM or Group mention steers an active turn; bounded change summaries now enter that turn’s Bot Inbox and settle with it (#528).
  • FixedBrowser entry now expands when Access is enabled, pins the Bot’s current tab with visible title/URL, and holds the viewed tab when Follow is off without redirecting Bot work (#492).
  • FixedBrowser file uploads select the input that opened the picker, or the first input when ref is omitted; upload audits include basename and size and redact Host paths in failures (#491).
  • FixedPersonaBot Orchestrators can set and restore Human DM, Bot DM and Group mention delivery through the existing attention tools; changes keep immediate admission and carry Bot-authored revisions visible in Profile (#528).
  • FixedFixed concurrent first use by several PersonaBots sharing a Browser profile: they now wait for one Chrome startup, and a failed startup permits a fresh retry (#463).
  • FixedFixed recovery after a Human closes a Bot Browser tab: missing CDP Sessions now clear the closed current tab and return an instruction to select or open another owned tab (#463).
  • FixedHuman DM, Bot DM and Group mention delivery settings now save from PersonaBot Profile, so switching between steering the active Turn and queuing a separate Turn takes effect and survives restart (#528).
  • FixedBackground Bot Browser tabs now prepare native mouse and keyboard input without bringing the Human window to the foreground, so a search can open its first result before any screenshot or scroll (#462).
  • FixedBrowser actions and navigation now report a readable timeout when the page remains unsettled for 15 seconds, and direct the Bot to observe before retrying an action that may already have run (#462).
  • FixedSending a DM while reading earlier messages preserves the reading position; following the latest conversation still keeps new messages visible as Bot activity opens (#120).
  • FixedBrowser screenshots started before Human Pause are now refused if control changes during capture or native attachment processing, so unfinished images cannot reach the model after takeover (#461).
  • FixedTurning off Browser Access cancels active waits and refuses unfinished or queued calls from the revoked registration, including after Access is enabled again; existing Bot Browser tabs remain available to the Human (#460).
  • FixedDM activity now updates the sidebar and composer together from the actual Host Session projection; active turns show thinking or working and settle to idle, while delivery receipts keep their independent processing result (#536, #120).
  • FixedBrowser uploads now honor an observed file-input ref instead of attaching to a different field on multi-input pages, so the intended form can continue (#652).
  • FixedGroup departure now reports a committed change or an idempotent not-member no-change; missing Channels and non-Group targets fail explicitly, so repeated or rejected requests cannot fabricate a new departure (#571).
  • FixedBrowser scrolling now sends a native wheel at the viewport center, so the Bot can move central nested content as well as ordinary pages and observe the result before continuing (#647).
  • FixedBrowser typing now refuses readonly and disabled inputs and textareas before changing values, focus or events, including native disabled-fieldset inheritance; the Bot retains its current tab and can continue with an editable field (#644).
  • FixedBrowser key presses now perform native focus movement, editing and form submission; unsupported keys return retryable errors instead of reporting success (#640).
  • FixedBrowser navigation failures now return retryable Tool errors and error Audit outcomes; failed new tabs are cleaned up while an existing current target remains available for observation and retry (#627).
  • FixedFixed retained model-token statistics being cleared when Session histories are missing: restart and reconciliation preserve daily totals, durable receipts prevent duplicate replay, archive preserves usage, and PersonaBot Purge removes its usage (#502). Existing aggregates migrate as a retained baseline; pre-upgrade attempts cannot be backfilled independently when their prior accounting is unverifiable.
  • FixedSelecting a Bot Browser tab that a Human has closed preserves another live current tab and its preview; the missing tab is removed with recovery guidance, while transient lookup failures leave selection intact (#623).
  • FixedAfter Human Resume, Browser page interactions require a successful fresh observation; reads made during Pause or before a Pause/Resume transition cannot authorize actions on Human-modified content (#600).
  • FixedRefused Browser tool attempts now produce one attributed Browser Audit error entry, including authorization, Access, Pause and post-Resume observation checks; typed text and upload paths keep their existing redacted summaries (#604).
  • FixedBrowser Profile changes reject the reserved names . and .. before saving or resetting work, preserving the current tab and Pause state; invalid stored names keep the runtime’s existing default fallback (#611).
  • FixedChanging a PersonaBot’s Browser Profile clears its previous tab selection and Pause state, so work can start in the newly assigned profile without resuming unrelated old-profile work (#595).
  • FixedBrowser Access can be disabled and re-enabled without losing a PersonaBot’s existing work tabs or current page; tools remain unavailable while Access is off (#591).
  • FixedFixed Open Bot Browser to reveal the owned preview tab and restore minimized windows, reusing one owned blank tab when no live work remains (#584).
  • FixedFresh Browser observations replace the previous refs with an independent namespace, so an older ref cannot click a different control after page changes; role-less click targets stay visible on repeated observations and stale refs retain the readable re-observe refusal (#579).
  • FixedLegacy PersonaBot model choices migrate only when one available provider matches; ambiguous or unavailable routes stop new requests and direct the Human to repair the Model Preset in Profile, without switching providers (#500).
  • FixedQueued Browser actions recheck Browser Pause and Browser Access when execution starts, so a Human pause or revoked access blocks actions already waiting behind another operation while paused observation remains available (#569).
  • FixedScreenshots report the image size next to the viewport, so coordinate clicks state the exact conversion when the device scale factor is not 1 (for example 2x on Retina), and the viewport guard now uses exclusive bounds (#538).
  • FixedBrowser observation now finds role-less toolbar controls inside editor containers and gives unlabelled ones position-tagged names (div @x,y); coordinate clicks outside the viewport fail with a re-screenshot instruction, and screenshots report their viewport size so coordinates map 1:1 (#530).
  • FixedThe Computer viewer now remounts its stream after three consecutive lost samples, then makes at most three automatic attempts before showing the no-picture retry control; manual retry can recover the live desktop (#456).
  • FixedRecoverable browser tool errors (for example a page whose file input does not exist yet) no longer make a PersonaBot forget its current tab and reopen a new one; only a genuinely closed tab drops the bookkeeping, and browser_upload now waits briefly for the page to create its file input after clicking the upload control (#523).
  • FixedThe Bot Browser no longer stops itself seconds after the Human opens it: opening, watching the live view, and taking over in the Browser entry all count as activity, so the idle sweep only stops a genuinely idle browser (#486).
  • FixedThe Bot Browser launches without the automation marker (navigator.webdriver is false), so Human sign-in on sites that reject automated browsers, such as Google and X, works (#483, ADR-0089).
  • FixedPersonaBot activity heatmap tooltips now stay beside the hovered or focused day in wide and compact Profiles (#478).
  • FixedThe Computer viewer now connects to current Selkies desktops through their /api/websockets endpoint while retaining the older paths, so a started desktop no longer stays on the connecting screen (#451).
  • FixedChannel composers now accept pasted images and files through the existing attachment queue, show images as square previews with a full-size lightbox, and keep other files in compact type-labelled chips before and after sending; the add-media button and placeholder are easier to see in light and dark themes (#433).
  • FixedThe docked Channel sidebar now stays in place while switching Channels or opening a PersonaBot DM, so the Channel body no longer shifts while the next conversation loads (#430).
  • FixedPreviously opened Channels now show cached history and sidebar data immediately while refreshing in the background; first visits show skeleton placeholders in the Channel body, app sidebar, and Channel sidebar (#434).
  • FixedThe Channel composer now shows the blank line immediately after one Shift+Enter and stays steady when a long single line reaches its wrap width (#393).
  • FixedGroup join requests for a Bot-owned Group and Human accept/decline decisions now reach the recipient's Bot Inbox instead of remaining in Needs repair after the Orchestrator turn (#367).
  • FixedGroup messages sent while a PersonaBot is archived stay in Channel history but create no new Inbox Admission or wake for that Bot; active members still receive their own messages (#47).
  • FixedRevoking a Workspace Grant now expires pending native-tool approval cards in the PersonaBot DM and removes their action buttons immediately. The access list loads independently of secondary sidebar data, and stalled updates recover after a timeout, so a stale card cannot be approved after access is removed. Calls already executing may finish; subsequent Assignment access remains blocked (#116).
  • FixedA PersonaBot can list its own Memory directory with the literal read-only ls -la command without an interruption; other shell commands still use Channel approval (#298).
  • FixedSelected Group @PersonaBot references now appear once inside the composer and sent message, delete as a whole token, and remain visible as Bot text in Orchestrator Sessions instead of showing DSH's file icon (#254).
  • FixedPersonaBot creation now explains when Git is missing and leaves no partial identity; install Git on PATH and restart DeepSeek Harness before retrying (#268).
  • FixedFixed fresh BotHarness database initialization on Windows so the official DSH RC2 Desktop can add a local Workspace and create a PersonaBot without entering recovery mode (#266).
  • FixedFailed Orchestrator and Assignment turns now leave a durable notice in the PersonaBot DM with a localized summary and DSH error code; provider diagnostics and Session identity expand on demand, while credential and quota failures link to model settings (#116).
  • FixedFixed Computer export end-to-end on deployments whose directory picker rejects (e.g. web): the export directory falls back to a built-in default (~/Desktop/BotHarness Exports, or ~/BotHarness Exports without a Desktop) shown read-only so no path has to be typed, the row keeps tracking that Host-resolved path while the settings scope is still empty (Open folder / export / import stay enabled against it), a failed picker switches to the fixed directory and continues the export, and the folder opens in the Host's file manager when the export finishes; on picker deployments, saving a typed path shows progress plus success/failure notes, rejects relative paths, and surfaces a Host-refused write as an error instead of a false success (#154).
  • FixedThe local QA launcher now recognizes an existing DSH profile credential and can adopt its DeepSeek key once into a private machine-local source, so every new AX-launched profile works without re-entry; the AX runbook requires a real DM reply to prove availability (#218).
  • FixedFailed Human Channel sends now keep a visible failed bubble; retry restores the original text and attachments to the composer for explicit resubmission, and Client message IDs make response-loss retries idempotent at the Host (#206).
  • FixedReply-quote navigation can now continue loading newer timeline pages by ordinary downward scrolling until it reaches the latest message (#207).
  • FixedCommitted Channel placement changes now invalidate the roster in other open windows; drag previews remain local and remote windows re-read only authoritative committed state (#208).
  • FixedPersonaBot Orchestrators can read a Channel image on demand through an attachment reference after trusted membership, message-reference, MIME, and size checks, without guessing Host file paths or injecting all historical images into context (#209).
  • FixedThe multiline Channel composer gives the input the full upper row and places attachment/send controls in a stable bottom footer; only the first one-line-to-multiline expansion animates, while later line growth is immediate (#148).
  • FixedFixed the newly created PersonaBot DM so its first Human message can be sent immediately without reselecting the Bot or refreshing the page (#186).
  • FixedPersonaBot DM now previews a reply as the Orchestrator streams an explicit channel_send call, then replaces it with the committed Channel message; other committed messages appear without refresh, and reconnects replay missed history (#141, ADR-0054).
  • FixedA running turn no longer reports needs-repair while a side effect is in flight; an interrupted attempt is reconciled at boot (side effect started → reconciliation, otherwise retryable) (#115).
  • FixedFixed a pinned Channel drop onto a specific loose position so its preserved pre-pin topOrder entry is removed before the predicted position is inserted; unpinning and placement now commit together instead of returning the Channel to its old slot (#10).
  • FixedAligned the hidden-Channel recovery Modal with the native DeepSeek 380px/24px-inset geometry, tightened its search/list spacing and rows, ordered recoveries most-recently-hidden first, added a 180ms search debounce, and made the whole non-Channel area of a section—including its name label—open the section context menu (#10, #137).
  • FixedMade PersonaBot DM Channels follow the same section, loose-placement, drag, and move rules as group Channels while retaining their avatar contact rows (#56).
  • FixedFixed flat-order drag commits so an unpinned PersonaBot DM can persist at the absolute top or between Channel sections exactly like a group Channel (#56).
  • FixedChannel messages no longer wait for the PersonaBot's Orchestrator turn: a Human message appears immediately, can be sent while the bot is still working, and is admitted to the Bot Inbox for serial processing (#140).
  • FixedFixed the Computer's Chromium losing its open tabs across stop → start: the desktop now launches Chromium on boot and restores the previous session, so tabs survive a restart the same way they survive export → import (#150).
  • FixedCorrected Channel attachment send guidance to name the registered bounded-read and local-result import tools, so PersonaBots can follow the existing file workflow without a nonexistent tool reference (#677).
  • FixedPreserve definite checked IM source-not-found and reply-permission refusals as failed replies instead of unknown outcomes; genuinely unknown sends and previously recorded outcomes remain unchanged (#855).
  • DocsDocumented the accepted Bot Marketplace order, starting as a GitHub-indexed catalog: repositories opt in with the botharness-bot topic, a Cloudflare Worker/D1 crawler powers search in a harness modal, and Install reuses Git-URL Bot creation; accounts, uploads, favorites and import counts follow in a second phase (#18, ADR-0131).
  • DocsThe README and npm page now match the pixel-art website, with its share cards, desktop and CLI install, shipped IM platforms, pixel avatars and community links (#895, website).
  • DocsDocumented the accepted PersonaBot/Channel deletion contract: an unchecked optional Memory-erasure choice with direct folder access, history-preserving Channel deletion, and the real Purge Ledger prerequisite for Profile restore; runtime controls remain separate implementation work (#138, ADR-0130).
  • DocsAdded a bilingual Channel sidebar chapter with seven illustrated feature guides for Memory files/history, owned Sessions, Bot Inbox, Workspace Grants, local group management and display controls (#893, guide).
  • DocsUpdated Discord integration guidance with merged QA revisions, bounded send-interruption/recovery evidence, agent-operated UI/E2E screenshots, real Gateway redelivery without duplicate admission/reply, native refusal checks and explicit remaining qualification paths (#855, verification).
  • DocsAdded illustrated public npm installation, API / per-Bot model setup and non-IM settings guides with a user-focused Quickstart, verified with DSH 0.2.0 RC1 and deepseekbot 0.1.0-alpha.1 (#887, guide).
  • DocsDocumented the proposed Profile Backup / Restore / Transfer UX, including validation, repair and explicit activation; the UX is accepted and runtime implementation is tracked separately (#76, proposal).
  • DocsAdded an illustrated bilingual Slack connection guide covering App setup, identity binding, channel authorization and real same-thread replies (#874, guide).
  • DocsDocumented preparation and explicit publication of reviewed npm prerelease artifacts, including integrity checks, dependency order and partial-publication recovery; no public release is claimed (#866, operator guide).
  • DocsDocumented explicit recovery of an already started npm prerelease after main advances, retaining the original reviewed source and refusing conflicting published bytes (#877, operator guide).
  • DocsRecorded the fixed-source Discord mention/reply preflight and missing real-App qualification; Discord capability rows remain unqualified and runtime behavior is unchanged (#855, integration guide).
  • DocsDocumented the verified Lark/Slack IM integration boundary and repeatable qualification workflow for future providers (#845).
  • DocsAdded a Lark / Feishu beginner guide with compressed WebP captures of the actual console and connected Profile, a captioned step-by-step video, and qualified single-install, identity, group authorization and message-source checks (#814, guide).
  • DocsAdded a verified Assignment Report batch guide, with native harvest evidence, retained source history, cold Host restart acceptance and Human source-navigation checks (#194).
  • DocsAdded a verified Assignment stop and recovery guide, including pending approvals, persistent stopped state and new work after Host restart (#81).
  • DocsDocumented current Computer deployment/image choices, durable workspace and export recovery limits with real Docker verification (#205, report).
  • DocsDefined Avatar Family and Avatar Appearance, with separate ownership for editable appearance, shared activity facts and transient renderer poses; runtime behavior is unchanged (Context, ADR-0116, #743).
  • DocsAdded a compressed multi-bot concept illustration to both README introductions, keeping it clearly labelled alongside real product screenshots (#643).
  • DocsReplaced the early milestone README with bilingual product screenshots, current source-preview setup, and explicit Computer/Browser authorization (including Auto-allow) and temporary-fork IM delivery boundaries (#643).
  • DocsDocumented the local Human naming target: a plugin-wide default, per-Channel roleplay nicknames, and stable-ID mentions displaying current Human or PersonaBot names; runtime implementation remains subsequent work (ADR-0103, #126, design).
  • DocsDocumented the verified Lark work-group mention and checked topic-reply contract, separate Feishu/Lark permission limits, and a repeatable sandbox with public E2E evidence; PersonaBot ingress remains subsequent work (#78, research).
  • DocsDefined native file-open menus for Memory, later Workspaces and message attachments, with truthful Host targets and ordinary editable destination files without attachment version retention or edit-triggered Bot wakes; attachment migration remains subsequent work (ADR-0100, #572).
  • DocsDefined Activity Center as an operational Overview plus a personal Human Inbox for Channel unread, mentions, and inline actions; a Human's all-Bot Group mention reuses ordinary direct-mention delivery. Runtime behavior is unchanged (#126, #541, #542, ADR-0098, ADR-0099).
  • DocsDefined deployment-local Model Presets as per-PersonaBot snapshots and retained per-model token statistics across ordinary Session deletion; implementation follows in separate runtime slices (#488, #39, ADR-0093, ADR-0094).
  • DocsDocumented the in-harness Client interaction contracts for Channel continuity, roster moves, DSH shell integration, and HMR; runtime behavior is unchanged (guide, #452).
  • DocsRecorded the Browser use design: a profile-scoped managed Bot Browser with per-PersonaBot Browser Access, session-scoped Browser Authorization, a redacted Browser Audit, and window-scoped Bot Tabs; runtime behavior lands in the tracer (#459, ADR-0089, ADR-0090, ADR-0091).
  • DocsDocumented that cross-device Memory continuity is agent-mediated Git plus Portability; no first-party sync Skill, Host-owned remote, or credential handling is added, and runtime behavior is unchanged (ADR-0084, #398).
  • DocsRecorded the Computer Target design: the shared Computer is profile-scoped with local (the machine running DSH) as the default and container for headless hosts such as a VPS, set once in Bot settings while per-PersonaBot Computer Access stays in the Channel sidebar; Bot Screens are window-scoped surfaces first (per-PersonaBot workspaces, sequential by measurement) with per-PersonaBot displays as an experimental opt-in whose cost playbook lives in the multi-display research (#386, ADR-0081, ADR-0082).
  • DocsRecorded the Computer-use integration design: the official ctx.computerUse seam with a BotHarness-owned tool provider, a curated tool surface with progressive discovery, per-PersonaBot Computer Access (default off, scoped injection), session-scoped Computer Authorization with a profile auto-allow switch, and a redacted Computer Audit; runtime behavior lands in the tracer (#386, ADR-0079, ADR-0080).
  • DocsClarified Group catch-up semantics: a direct mention or due digest selects bounded same-Channel pending context with an oldest-first share, while only messages included in a successful Orchestrator turn become handled; runtime behavior is delivered in #364 (ADR-0070, ADR-0074, ADR-0077, #362).
  • DocsRecorded the group-and-attention design: invitation-first membership with default auto-accept, four Channel attention presets (all/digest/mentions/silent) owned by the Bot with Human override, a PersonaBot-managed attention policy behind Host-owned safety gates, turn-time harvest instead of one turn per event, and Inbox handling classified by Source class rather than platform (ADR-0073, ADR-0074, ADR-0075, ADR-0076, ADR-0077, #358).
  • DocsDocumented Bot-to-Bot DM Channels, Human DM contact mentions, and Bot-managed Group invitations as a future collaboration design; runtime behavior is unchanged (ADR-0065, #278).
  • DocsDocumented how coding-agent tasks sharing one GitHub account claim issues and carry task provenance through commits and PRs (#196).
  • DocsDocumented the Channel sidebar as Bot mode's scoped right region with one ordered, collapsible entry seam, retiring PersonaBot navigation (ADR-0053, #156).
  • DocsAdded the canonical Release Ledger, bilingual parity checks, and contributor guidance (#100).
  • DocsDocumented the planned PersonaBot DM navigation and renamed the application-defined Work concepts to Assignment, Assignment Session, Assignment Agent, and Assignment Directory; this records design language and does not claim the UI or runtime is implemented (#109).
  • DocsPublished a bilingual Development status page that keeps the DeepSeekBot and DSH Skill release trains separate from the Changelog (#105).
  • DocsDocumented Memory as an optional Git-backed Cordis Service, keeping the DM → Orchestrator → Assignment path independent of Persona and Memory (ADR-0047, #74).
  • DocsQualified the development-source Discord mention/reply tracer with real native App/Bot identity and wrong-guild refusal, fresh recovery and screenshots; other capabilities and the product Provider pin remain separate (#855, verification).
  • DocsMoved the DeepSeekBot user guides to deepseekbot.botharness.ai/en/docs (Chinese at /docs); every former botharness.ai guide URL redirects to the same guide there, and developer docs stay on botharness.ai (#914).
  • BreakingCallers of the exported createRosterStore factory or RosterStore constructor must pass the Profile OperationalDatabaseOwner as database; attach only imports the legacy domain once and command/query contracts remain unchanged (#885).
  • BreakingCallers of the exported createPersonaBotRegistry factory must pass the Profile OperationalDatabaseOwner as database; Registry commands and queries retain their interfaces, and implicit JSON-backed construction is removed (#884).
  • BreakingCustom BotAgentAdapter implementations must handle an absent OrchestratorAgentRun.inboundChannelId for external-only Inbox turns; choose an authorized local Channel explicitly when sending locally (#12).
  • Breakingchannel_send Tool acknowledgements change from prose to {channelId,messageId} JSON; consumers must read those fields. Attachment size is now declared as integer, matching the already-enforced safe nonnegative integer contract; new sends use the current four-field fileId reference; obsolete hash results must be refreshed from their owning message after #577 migration (#570).
  • BreakingCustom BotAgentAdapter implementations must return { outputLimit, contacts, nextCursor? } from Orchestrator channels.contacts(input?), with stable IDs under botId instead of slug; the list_bot_contacts Tool now returns that bounded page, so consumers must follow continuation (#568).

Development history

6 changes

Consolidated the implemented foundation and public documentation that preceded DeepSeekBot's first release; this is development history, not a released or installable version.

Work before the first npm release; it has no installable package.

  • AddedHumans can open the current Memory Repository, nested directories and files on the Host through DSH application menus, reveal a file, copy its Host path, or download its full current bytes to the browser device; ordinary file selection still uses the reader (#574, ADR-0100).
  • AddedPersonaBot creation now offers an empty Memory Repository or an HTTPS/SSH Git import. The Host checks Git, clones into staging with its existing credentials, and only creates the Bot after a successful clone; failed imports leave no Bot (#298).
  • AddedAdded durable PersonaBot identity, file-based Memory tools, and the BOT-mode creation flow (#22, #98).
  • AddedAdded the BOT-mode Channel shell, roster sections, per-scope sorting and drag movement, with durable Host-side arrangement (#51, #64, #72, #73, #95).
  • ChangedAligned the plugin manifest, configuration path, and client bridge with the verified DSH contract (#27).
  • DocsPublished the bilingual documentation site with maintained BotHarness architecture and product language, plus a stable DSH/Cordis Context and Decision Tree for plugin developers (#26, #88, #90, #92).

View the source on GitHub