Skip to content

v0.1.2

Choose a tag to compare

@github-actions github-actions released this 24 Oct 06:50
· 1 commit to main since this release

dsh-tool-web-enhanced-profile 0.1.2

  • Mounts dsh-web-search-enhanced 0.2.2, dsh-web-fetch-enhanced 0.2.2 and dsh-tool-web-enhanced-ui 0.1.2; the patch itself is unchanged.

dsh-tool-web-enhanced-ui 0.1.2

  • Released with the profile; no behaviour change of its own. Its browser face is Web-only: in dsh-TUI the row mounts and does nothing, and the plugins' /setup-* Host commands below work there without it.

dsh-web-search-enhanced 0.2.2

  • Fix: a subagent's conversation (spawn or subagent_fork) no longer shows "Read failed" in the composer menu (#1); its connection can be read and changed there like any conversation's, whether or not the subagent is running. A running subagent uses the new choice from its next model request step, and turning search Off hides web_search right away; a subagent that is not running uses it the next time it runs (woken by its parent Agent or by a message in its conversation), and reading or changing the choice does not resume it. Choices made in a subagent's conversation do not write model memory. Top-level conversations and user forks (the Web's forked sessions) are unchanged and still write it.
  • While a subagent is not running, the model of its next request is unknown: the conversation-model connection says so (reason no-model), native connections show readiness from the API key only, and a conversation that has neither chosen nor inherited a choice shows the default connection without looking up model memory; that is worked out again, with model memory, when the subagent runs.
  • The menu text for no-model now reads "The model for this conversation's next request isn't known yet" / "还不知道本会话下一次请求用哪个模型".
  • /setup-search is now a Host command that the plugin registers while its row runs (the shared UI row is not needed), so it works in the Web GUI and in dsh-TUI. Without arguments it shows the conversation's connection, where the choice comes from and its freshness, whether the web row routes search to this plugin, and the enabled connections with their status, current, applies freshness and who receives the query. off, a connection id and freshness auto|fresh|realtime change the choice from the next model request under the composer menu's rules: only enabled connections, a revision check that refuses a choice changed meanwhile, no model memory from a subagent's conversation, and freshness only for a connection that applies it. off, freshness and the modes are case-insensitive; connection ids are not. The description and output are fixed English text; invalid settings, storage failures and unexpected errors give fixed messages, and the original error is logged to the Host log at warn level, never shown.
  • Web GUI: the slash-menu row for /setup-search now shows the Host command's name and English description, without the icon and localized title. Choosing it, or pressing Enter without arguments, opens the same chooser as before; a line with arguments (/setup-search off) runs the Host command, its output appears in a command card, and this tab then re-reads that conversation's choice and model memory (other tabs and dsh-TUI's writes show on their next read). A subagent's conversation view has no /setup-*, because DSH lists no commands there; its composer menu still works.
  • dsh-TUI: arguments complete after /setup-search : off, the row's enabled connection ids (inserted exactly as written, such as custom:MyEngine), and freshness followed by auto, fresh or realtime. Completions mark neither the current choice nor readiness; run the command without arguments for those. dsh-TUI 0.16.1 shows a plugin command's output as a one-line notice of about 200 characters, so only the start of that listing is visible there; the Web GUI's chooser and composer menu show the connections and their status in full.

dsh-web-fetch-enhanced 0.2.2

  • The same subagent fix as search (#1): a subagent's conversation can read and change its fetch connection in the composer menu whether or not the subagent is running, turning fetch Off in a running subagent hides web_fetch right away, a subagent that is not running uses the new choice the next time it runs, and choices made there do not write model memory. While a subagent is not running, native connections show readiness from the API key only, and a conversation that has neither chosen nor inherited a choice shows the default connection without looking up model memory.
  • /setup-fetch is now a Host command, as for search: without arguments it shows the conversation's connection and where the choice comes from, the routing, and the enabled connections with their status, current and who receives the URL; off or a connection id changes the choice from the next model request under the same rules. The Web GUI's slash-menu row, chooser and command card work as for search, and dsh-TUI completes off and the row's enabled connection ids.

dsh-tool-web-enhanced-core (private, not published)

  • ./host: sessionOrigin(header) classifies a Session from public header fields as top-level, fork or subagent (origin: 'subagent' decides first, as in DSH's own subagent ownership rule); selection inheritance, provider-list copying, isNewConversation and the model-memory decision use it, with unchanged results for the first three.
  • ./host: Sessions reads and writes a SessionTarget (live with its Agent via liveSession(agent), or cold with only the Session id and header) instead of an Agent. change decides model memory itself (only a connection choice, never for a subagent Session, only with a known next-request model) and, once the write is durable, syncs tool masks for whichever Agent is running then. Capability.describe and credentialReadiness take the next request's model (SessionModel | undefined) instead of an Agent.
  • ./host: the connection Remote service's get and set share one lookup: a running Agent from ctx.agents.get; else, for a subagent Session whose header sessionPersistence.stat returns, the stored record directly without resuming it; else sessionController.resolveAgent, whose errors pass through. The service is installed in the sessionController + typert + agents injection scope.
  • ./host: registerCommand (host/command.ts) registers a capability's Host command from installCapability in a commands injection scope; writeSelection (host/selection-write.ts) is the one eligibility check and revisioned write that Remote set and the command share (written, unavailable or conflict; Remote's errors are unchanged); registerTerminal (host/terminal.ts) registers dsh-TUI completion through locally declared structural types in its own tuiCommandTrees injection scope, so a failure there leaves the row and the command running. New: PluginIdentity.command (./shared), the optional Capability.commandOptions (search's freshness) and LabeledConnection; enhanced-parts/listing.ts exports recipientText, oneLine and LABEL_MAX.
  • ./client: selectionCommand returns a CommandDecoration for commandUi.decorate (no label, description or icon) instead of a CommandContribution; followHostCommand listens to command/executed; ConnectionSelectionStore.invalidateSession(sessionId) re-reads one Session's views.

Development

  • New devDependencies @deepseek-ai/dsh-commands (catalog version; command types and composition tests on the real CommandRuntime) and @deepseek-harness-tui/dsh-tui 0.16.1 (the dsh-TUI e2e spec and the completion registry test). Product code imports only types from the first and nothing from the second; neither is in a published package. The e2e suite drives the published dsh-TUI through a real PTY (Python's standard pty module), so it needs python3.