packages/dsh-task-board
zhu1090093659/dsh-web侧边栏多列任务看板:卡片交给真实 DSH 智能体会话执行,支持 cron 定时(Host 侧到点执行,关浏览器也生效)。
输入框增强:按工作区缓存新会话草稿、按会话缓存已有会话草稿,切换后自动恢复,发送或清空后不再回填;同时在 @ 补全中增加“插件”分组,选中已安装插件后会把该插件信息作为运行时上下文交给 Agent。
DeepSeek Harness(dsh)的输入框增强插件,包含两个能力:
@ 插件提及:在输入框里输入 @ 即可选择已安装的社区插件(而不是只能 @ 文件/会话);选中后会插入一个原子引用,Agent 本轮会被明确告知"用户指定使用该插件",并收到该插件的名称与说明。例如:@ui-ux 设计插件的标题 帮我做这个页面的 UI/UE 设计。A DeepSeek Harness composer-enhancement bundle with two features:
@plugin mentions — typing @ in the composer now offers one more
completion group: the installed community plugins, next to files and
Sessions. Picking one inserts an atomic mention chip; the Host half reads the
mention from the accepted user message and publishes the selected plugin's
metadata as bounded runtime context, so the model knows the user explicitly
chose that plugin for this turn.conversation.input.dock slot that
always renders null; no visual footprint, no layout change.sawText); once text was seen, an empty composer
means send/clear and the entry is deleted instead of restored. Extra guards
discard a new-session entry when its source Session already attempted a prompt
(promptAttempted) or is no longer blank.draft / attachment count / submit phase) with Object.is equality, so
unrelated store publishes (queue, occurrences, claim, uploads) neither
re-render the component nor re-run its effect. No timers, DOM writes, or
per-render allocations.sessionStorage mirror under
dsh.composer-draft-cache.v1: (workspace:<path> / session:<id> keys).
Survives a page reload, discarded when the app window closes; never writes to
the Host or the Session log.@plugin mentions@ source (plugin) lists enabled community
plugins from the Host pluginInventory Remote, newest snapshot cached for a
few seconds; the live query filters by title, module name and description.
Core @deepseek-ai/* platform rows are not listed — only plugins you
installed on top of the harness.@[Title](dsh-plugin:<package name>)
as an atomic reference (source plugin), displayed as @ Title; the
hand-typed shortcut @plugin:<package name> works too.agent/pre-step the Host half collects mentions from the
accepted user messages, keeps them for the turn (later tool-call steps keep
the same selection), and publishes a bounded ## User-selected plugins
block through ctx.systemPrompt.context(): display title, package name,
Loader entry id and description, plus the instruction that the user asked to
use that plugin and that non-existent capabilities must not be invented.
Unknown/disabled packages are reported instead of guessed.userText rule and a
conversation.user.text.node renderer show the mention as a compact inline
chip in Chat instead of raw Markdown.Built and verified against DeepSeek Harness 0.2.1-rc.2 (Desktop profile). Uses documented extension seams only:
slots, inputTriggers.registerSource, uiConversation.userText,
remote.pluginInventory, locale.loader, systemPrompt.context, the agent/pre-step waterfall
(returns the downstream decision unchanged and only records the selection).It does not import Harness Client packages; UI styling uses --dsw-alias-*
theme tokens only.
Put this directory anywhere on disk (e.g. a workspace folder).
Install it as a profile bundle through the Plugin Manager, or with the
plugin_manager tool:
plugin_manager action=install_bundle target=<absolute path to this directory>
Refresh the Web GUI once. Verify the live registration: the
composer-draft-cache entry appears in conversation.input.dock, and the
plugin entry in conversation.user.text.node.
@ in the composer: files and Sessions appear as before, and a
Plugins group lists installed community plugins. Pick one (for example a
UI/UE design plugin), then describe the task; the agent receives the plugin's
metadata as explicit runtime context for that turn.@plugin:<package name>.@plugin completion lists Loader-visible plugins (a community plugin needs at
least one Host row, which every dsh.bundle patch normally inserts). A
client-only package without a Host row is not listed; hand-typing its exact
package name still reaches the model as a mention but without injected
metadata.@ source registers under plugin; on a page that went through several
hot reloads of this plugin it may fall back to plugins / plugin-mentions
(and the two extra names exist as serializer aliases). A normal page reload
restores the preferred name.node --check client.js index.js lib/mentions.js
node --test test/logic.test.mjs test/mentions.test.mjs
test/logic.test.mjs loads the real client.js in a vm sandbox with a stub
React hook dispatcher and stub Slot/session/locale/inventory services: draft
cache scenarios, restore/send/clear guards, and the @plugin completion
source, pick serialization and sent-message rule.test/mentions.test.mjs covers the pure mention parsing/rendering helpers and
drives index.js against a stub Cordis context the way the agent loop does
(runtime-context provider + agent/pre-step waterfall).MIT — see LICENSE.