You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is the companion to my longer post (Feedback after ~30 days of daily production use). I'm keeping the five smaller items in one place so they're easy to triage; happy to split them into five separate issues if that's easier for you — the titles are listed at the end.
Each item below is self-contained: environment, what I observed, how to reproduce, impact, and what I'd suggest.
Desensitisation note: all group IDs, user IDs, session IDs and machine-specific paths in this post are placeholders or generic. I've also removed all client/company names. The technical details — versions, package names, record counts, byte sizes — are unchanged.
Environment unless stated otherwise: DSH Web 0.1.7-rc.2, profile=web, Windows, multi-plugin profile, long-lived runtime, sessions fed from both the Web GUI and IM (WeCom) groups.
1. The model-facing session-query package is not shipped — the model cannot search its own history
Status: re-verified today on 0.1.7-rc.2.
Observed.dsh-session-query (service contract) and dsh-session-query-sqlite (FTS5 backend) are installed. The model-facing consumer package (packages/session-query/tool-session-query upstream) is not part of the published install.
Evidence.
$ ls <install>/node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai | grep session
dsh-session-query
dsh-session-query-sqlite
# ... 25 session-related packages in total, including:
# dsh-session-format-v2-to-v3, dsh-session-persistence-jsonl,
# dsh-session-projection, dsh-session-log-export, dsh-session-title ...
# (there is no dsh-tool-session-query)
dsh-session-query/README.zh.md states that reads prefer the live session, that ranked full-text search requires a backend such as dsh-session-query-sqlite, and points to ../tool-session-query/README.zh.md — described there as "for the model as consumer, built on top of this service".
Impact. In a long session the model has no built-in way to look up what the user actually asked earlier. It can only use whatever is still in context, or write its own script to decompress the session log (which is exactly what I do — see item 4). Users end up copy-pasting history by hand, which is precisely the work that should be automatable.
Suggestion. Include dsh-tool-session-query in the default composition (the backend already exists), or make it explicitly enable-able via configuration.
2. No documented filesystem location for user/agent-authored skills — and skill <name> gives no hint
Status: re-verified today on 0.1.7-rc.2; <DSH_HOME>/skills still does not exist.
Observed.
A skill placed in an ordinary directory (e.g. <some dir>/skills/ppt-master/) is invisible: skill ppt-master returns "ppt-master" is unknown or no longer available.
Searching <DSH_HOME>, the DSH install directory and the profile directory turns up no skills/ directory to put one in. <DSH_HOME> today contains: attachments, cache, integrations, llm-deepseek, memories, plugin-src, plugin-src-disabled, profiles, sessions, storages, task-board, vault, ... — but no skills.
The skill directories that do exist (dingtalk-* / wecomcli-*) appear to be provided by plugin packages rather than discovered from the filesystem.
Impact. A skill that a user or an agent has written cannot be invoked through the skill tool; the only workaround is the crude "just read SKILL.md". The skill ecosystem is effectively limited to published plugin packages.
Suggestion.
Define and document a skill root — e.g. <DSH_HOME>/skills/<name>/SKILL.md — or support a skills.dirs configuration entry.
When skill <name> fails, say where skills are loaded from and where one can be placed, instead of only unknown or no longer available. For someone writing their first skill this message is a dead end.
3. Web UI degrades noticeably on very long sessions; no built-in collapse or virtualisation
Observed. After a session accumulated a few thousand records (about 3 hours of continuous development plus IM group traffic), scrolling and typing in the Web UI became visibly laggy.
Measured, same session:
Metric
Value
Session log
4.69 MB compressed / 16.68 MB uncompressed
Records
3,549 (tool/call 710, tool/result 720)
Must be rendered
644 chat bubbles + 1,430 tool cards
Oversized records
43 records > 50 KB, largest 107 KB
Web process
599 MB resident, 710 s cumulative CPU
Supporting evidence that this is general, not my edge case: a community plugin already exists whose whole purpose is to collapse completed turns into a single processed in Xs line (kudos to its author) — meaning "long session rendering" is a shared pain.
Impact. During long development you must either start a new session mid-task (losing continuity) or work with the lag.
Suggestion. Built-in turn collapsing and/or message virtualisation; optionally a threshold hint ("this session has 3,000+ records; consider starting a new one").
4. The session log is appended multi-frame zstd; there is no official way to read or grep it
Observed and reproduced.
// One-shot decompression returns only the FIRST frame:zstdDecompressSync(readFileSync('session.v3.jsonl.zstd')).toString()// → a 4.69 MB file yields a single line {"type":"session",...}: it looks empty// Streaming decompression dies on the second frame:createZstdDecompress()// → error: Unknown frame descriptor
What worked (my current approach): scan for the magic number 28 B5 2F FD, split into frames, zstdDecompressSync each frame, then concatenate:
4.69 MB (compressed) → 1,946 frames → 16.68 MB of text → 3,549 JSONL records
Impact. Anyone — including the application layer — who wants to look up history by keyword has to reverse-engineer the multi-frame layout first, and is likely to conclude "the session is empty" when it isn't.
Suggestion.
Document the format explicitly: one zstd frame is appended per batch.
Provide an official read path, e.g. dsh session grep <pattern>, or wrap multi-frame decompression in the official reader.
5. The Web GUI session and IM group sessions share one session id — is that intended?
Observed. A single Web session id was mapped to one direct IM conversation and to several group conversations at the same time:
(Group names and IDs replaced with placeholders; the mapping itself is verbatim.)
Impact.
Group messages and GUI conversation land in the same history, so the session grows far faster than pure GUI use — 16.68 MB in about three hours in my case.
The two contexts contaminate each other: one session is being written from two entry points.
When you start or fork a session, the IM binding does not follow, which makes it easy to assume "the new session will take over the group messages" — it won't.
Suggestion. Please clarify whether this is intended or a default. If it's a default, consider binding IM to its own session by default, or at least badge the session in the UI: "this session is currently shared by N groups".
Ready-to-split titles (if you prefer separate issues)
dsh-tool-session-query is absent from the published composition — the model cannot search its own session history
No documented filesystem location for agent-authored skills — skill <name> cannot see them
Web UI degrades noticeably on very long sessions; no built-in collapse or virtualisation control
Session log is multi-frame appended zstd; no official way to read or grep it
The Web GUI session and IM group sessions share one session id — is that intended?
Happy to add a minimal reproduction for any of these, or to test a fix on this setup.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
This is the companion to my longer post (Feedback after ~30 days of daily production use). I'm keeping the five smaller items in one place so they're easy to triage; happy to split them into five separate issues if that's easier for you — the titles are listed at the end.
Each item below is self-contained: environment, what I observed, how to reproduce, impact, and what I'd suggest.
Environment unless stated otherwise: DSH Web
0.1.7-rc.2,profile=web, Windows, multi-plugin profile, long-lived runtime, sessions fed from both the Web GUI and IM (WeCom) groups.1. The model-facing session-query package is not shipped — the model cannot search its own history
Status: re-verified today on
0.1.7-rc.2.Observed.
dsh-session-query(service contract) anddsh-session-query-sqlite(FTS5 backend) are installed. The model-facing consumer package (packages/session-query/tool-session-queryupstream) is not part of the published install.Evidence.
dsh-session-query/README.zh.mdstates that reads prefer the live session, that ranked full-text search requires a backend such asdsh-session-query-sqlite, and points to../tool-session-query/README.zh.md— described there as "for the model as consumer, built on top of this service".Impact. In a long session the model has no built-in way to look up what the user actually asked earlier. It can only use whatever is still in context, or write its own script to decompress the session log (which is exactly what I do — see item 4). Users end up copy-pasting history by hand, which is precisely the work that should be automatable.
Suggestion. Include
dsh-tool-session-queryin the default composition (the backend already exists), or make it explicitly enable-able via configuration.2. No documented filesystem location for user/agent-authored skills — and
skill <name>gives no hintStatus: re-verified today on
0.1.7-rc.2;<DSH_HOME>/skillsstill does not exist.Observed.
<some dir>/skills/ppt-master/) is invisible:skill ppt-masterreturns"ppt-master" is unknown or no longer available.<DSH_HOME>, the DSH install directory and the profile directory turns up noskills/directory to put one in.<DSH_HOME>today contains:attachments, cache, integrations, llm-deepseek, memories, plugin-src, plugin-src-disabled, profiles, sessions, storages, task-board, vault, ...— but noskills.dingtalk-*/wecomcli-*) appear to be provided by plugin packages rather than discovered from the filesystem.Impact. A skill that a user or an agent has written cannot be invoked through the
skilltool; the only workaround is the crude "just read SKILL.md". The skill ecosystem is effectively limited to published plugin packages.Suggestion.
<DSH_HOME>/skills/<name>/SKILL.md— or support askills.dirsconfiguration entry.skill <name>fails, say where skills are loaded from and where one can be placed, instead of onlyunknown or no longer available. For someone writing their first skill this message is a dead end.3. Web UI degrades noticeably on very long sessions; no built-in collapse or virtualisation
Observed. After a session accumulated a few thousand records (about 3 hours of continuous development plus IM group traffic), scrolling and typing in the Web UI became visibly laggy.
Measured, same session:
tool/call710,tool/result720)Supporting evidence that this is general, not my edge case: a community plugin already exists whose whole purpose is to collapse completed turns into a single
processed in Xsline (kudos to its author) — meaning "long session rendering" is a shared pain.Impact. During long development you must either start a new session mid-task (losing continuity) or work with the lag.
Suggestion. Built-in turn collapsing and/or message virtualisation; optionally a threshold hint ("this session has 3,000+ records; consider starting a new one").
4. The session log is appended multi-frame zstd; there is no official way to read or grep it
Observed and reproduced.
What worked (my current approach): scan for the magic number
28 B5 2F FD, split into frames,zstdDecompressSynceach frame, then concatenate:Impact. Anyone — including the application layer — who wants to look up history by keyword has to reverse-engineer the multi-frame layout first, and is likely to conclude "the session is empty" when it isn't.
Suggestion.
dsh session grep <pattern>, or wrap multi-frame decompression in the official reader.5. The Web GUI session and IM group sessions share one session id — is that intended?
Observed. A single Web session id was mapped to one direct IM conversation and to several group conversations at the same time:
(Group names and IDs replaced with placeholders; the mapping itself is verbatim.)
Impact.
Suggestion. Please clarify whether this is intended or a default. If it's a default, consider binding IM to its own session by default, or at least badge the session in the UI: "this session is currently shared by N groups".
Ready-to-split titles (if you prefer separate issues)
dsh-tool-session-queryis absent from the published composition — the model cannot search its own session historyskill <name>cannot see themHappy to add a minimal reproduction for any of these, or to test a fix on this setup.
中文摘要(点击展开)
中文摘要(五条缺口)
0.1.7-rc.2上复核仍成立):dsh-session-query与dsh-session-query-sqlite都在,dsh-tool-session-query不在。后果:超长会话里模型没有任何内置手段回查"用户前面说过什么",只能靠上下文残留或自己写脚本解压会话文件。建议纳入默认组合。<DSH_HOME>/skills仍不存在):放在普通目录里的技能,skill <name>返回unknown or no longer available;建议明确技能根目录(或skills.dirs配置),并让报错提示"技能从哪里加载、可以放到哪里"。Unknown frame descriptor;我靠扫魔数28 B5 2F FD切出 1,946 帧才能检索。建议把格式写进文档,并提供dsh session grep之类的官方入口。脱敏声明:本贴所有群 ID / userid / session id / 本机路径均为占位符或通用写法,客户与公司名已全部移除;版本号、包名、记录数、字节数等技术细节未改动。
All reactions