Skip to content

dsh-daylist

Verified

dsh-daylist · v0.15.8 · MIT · Web UI

DSH scheduling host for the generic Arona assistant and its proposal-based task-allocation tools

Install

dsh plugin add dsh-daylist

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Published to npm without a public repository. Inspect the package contents before installing.

Readme

dsh-daylist

0.15.8 让 v3 的周历与单日议程按「周次」过滤课程(7-15 周 / 10-18 周的课不再在本周出现),并让从计划页切回对话保留原阅读位置(不再默认回最顶);0.15.7 修掉修改卡把「没改的字段」显示成「→ 无」(看起来像确认后会清空名称/地点/截止),并给卡片限高加一档 58vh 兜底、收紧行距;0.15.6 修掉大批量修改时「修改卡占满屏幕、确认按钮被挤出可视区点不到」;0.15.5 课程支持「第几周开课到第几周停」(startWeek/endWeek,周历与排程按周过滤,冲突判定按周次重叠);0.15.4 让模型直接填「第 X-Y 节」由产品换算时间(并让 plan_snapshot 直接打印权威作息表);0.15.3 把权威作息写进提示词并修掉「课程时间没对齐作息模板就整门从周历消失」;0.15.2 清洗聊天历史里泄漏的工具调用标记;0.15.1 修掉「模型把工具调用写成文本」导致只输出一段标记、什么都没排的问题;0.15.0 把 AI 修改计划权限定成 L2「可撤回即自动」并拆分混合批次,同时修掉大改动时把「模型没给正文」误报成 LLM 未连接的假断连;0.14.0 新增「文件档案库」;0.13.0 新增「拖文件 → 转成文本 → 助手据此回答」:支持纯文本类与图片(图片由模型转写),PDF/Word/Excel 暂不支持。0.12.2 调整 AI 修改计划权限:新增/归档/恢复直接生效(可撤销),修改与删模板仍要确认,普通任务只能归档不能硬删。0.10.0 存在宿主遮挡问题,请升级。

DSH 排班工作空间插件,包含通用对话、任务拆解、提议确认与日程安排。

安装

需要 Node.js 24 或更新版本、DSH >= 0.1.5-rc.2,以及 webServer 和 tools 宿主服务。

dsh plugin --profile <profile> add [email protected]

安装后重启相应 DSH profile。包名为 dsh-daylist,与 npm 上其他作者的 dsh-enterprise 包无关。

桌面端也可以在「设置 → 插件 → 安装」里输入绝对路径的 .tgz(例如 D:\dsh-daylist-0.15.8.tgz)离线安装,回退时输入旧版本的 .tgz 或 [email protected]。

拖文件给助手

把文件直接拖到日程面板上(哪个页签都行)。文件会被存到磁盘档案库(<数据目录>/files/),面板显示「📄 已存档《文件名》」,AI 只在真正需要内容时才去读它——不会每轮把文本塞进对话,省 token。

  • 之后可以在对话里让助手读它(它会先列档案再按需读,也能读历史加入过的文件);顶栏「文件」按钮打开文件档案库,可以看列表、打开文件位置、删除不要的文件。
  • 支持:.txt .md .markdown .csv .tsv .json .log .ics .yaml .yml(UTF-8 解码,失败时按 GB18030 再试一次);图片 .png .jpg .jpeg .webp .gif(由模型转写成文字,需要 provider 密钥)。
  • 不支持:.pdf .docx .xlsx .pptx —— 运行环境没有对应的解析库,拖入会明确提示「转成文本、粘贴内容或截图」。
  • 上限:单文件约 9 MB;抽取文本最多 20,000 字(超出截断并标记);档案库最多 200 个文件。档案库按数据目录共享、重启不丢,删除要去档案库或文件管理器里删。

模型配置

本版本没有插件内的 API Key 设置页面。默认直连 DeepSeek 官方 OpenAI 兼容接口(基址 https://api.deepseek.com,模型 deepseek-flash);密钥优先从 DSH 凭据服务取 DEEPSEEK_API_KEY(与联网搜索同一把),没有凭据服务时用同名环境变量。插件配置 apiKeyEnv 可指定另一个凭据引用名称。

可用环境变量覆盖(在宿主加载插件时读取,改完要重启 DSH):

  • ENTERPRISE_LLM_BASE_URL:默认 https://api.deepseek.com;填 API 基址,不含 /chat/completions。
  • ENTERPRISE_LLM_MODEL:默认 deepseek-flash(官方 /models 的默认型号;更强更贵的可换 deepseek-v4-pro)。
  • ENTERPRISE_LLM_API_KEY_ENV:默认 DEEPSEEK_API_KEY。

要改回 opencode 网关,三个一起设:ENTERPRISE_LLM_BASE_URL=https://opencode.ai/zen/go/v1、ENTERPRISE_LLM_MODEL=deepseek-v4-flash、ENTERPRISE_LLM_API_KEY_ENV=OPENCODE_GO_API_KEY。

设置环境变量后重启 DSH。不要把密钥写入网页脚本或提交到仓库。

联网搜索走 DeepSeek 官方 Search / Fetch JSON API(/v1/tools/search、/v1/tools/fetch),在插件配置里设置:

  • searchApiKeyEnv:凭据引用/环境变量名,默认 DEEPSEEK_API_KEY。
  • searchBaseUrl:默认 https://api.deepseek.com。
  • searchCallLimit:每个会话 web_search + web_fetch 合计上限,默认 30 次(按成功请求计费,单次约 0.005 元)。

没有可用密钥时不声明联网工具,回落到宿主工具桥;请求响应的 webTools 字段会说明实际用的是哪种后端(direct-deepseek / declared / withheld-no-agent / no-host-tool-service)。

数据与自定义人格

默认数据目录为当前用户主目录下的 .dsh/data/dsh-enterprise。可在插件配置中设置 dataDir 指向已有数据目录;升级不会自动迁移旧版自定义目录。现有数据需要继续使用时,请明确配置原目录。

assistantPersona 可提供自定义人格,默认空值,使用通用对话风格与任务生命周期规程。模型不直接落库;任务需经提议确认后写入。

访问控制与并发(2026-10-18 起)

/enterprise/* 路由现在统一过一层访问控制:

  • 在 DSH 里:向宿主的 connection 服务询问 requestRejection,它做 Host/Origin 围栏 + 签名会话 cookie 校验,浏览器不需要额外凭据;
  • 不在 DSH 里(standalone 模式):回环 Host + 同源 Origin 围栏,并要求 accessToken;
  • 改状态的请求必须是 application/json(否则 415),挡掉浏览器不经预检的 simple request。

配置项:

  • singleWriter:默认 true。启动时在数据目录写 .writer-lock.json;第二个活着的进程对同一目录降为只读,写请求返回 503 并说明持有者 pid。
  • accessToken:非浏览器调用方的静态凭据(Authorization: Bearer … 或 x-enterprise-token)。默认不设——在 DSH 里浏览器用会话 cookie,不需要 token。
  • serverWrites:默认 false。开启后挂载 POST /enterprise/ops,让服务端直接应用模型已验证的 op(不经确认卡)。开启即等于允许无人工确认的提交,属显式产品决策。

PUT /enterprise/data 现在必须带版本前置条件

写是 compare-and-swap:先 GET(响应带 ETag),再用 If-Match: <etag> 写;首次创建用 If-Match: *。

响应 含义
428 没带 If-Match
412 版本不符(附当前 ETag),客户端应重新加载
503 另一个实例持有该数据目录(本实例只读)

页面里发生 412 时会自动重新加载磁盘状态(本地未保存改动丢弃),因为这一版架构没有合并语义。命令行脚本请按上面的三步走;tools/verify-live-workflow.mjs 已改成这样。

没有 DSH 也能跑(lib/standalone.js)

node lib/standalone.js --data-dir <dir> --token <t> [--port 4185] [--allow-server-writes]

挂载与宿主相同的 HTTP 路由(不含 UI:浏览器半区是 DSH 客户端插件,需要宿主座位)。启动时打印实际地址与 access 姿态。端到端检查见 runtime/protocol-seam-acceptance/README.md。

/enterprise/ping 不需要凭据,但只报姿态(access.posture = host-session/token/none、store.writer = writer/readonly),不报任何数据——这样会话坏掉时仍能区分「插件没加载」和「没授权」。

归档库与撤销(2026-10-18 起)

  • 归档:已完成/已跳过的任务可以让助手归档(或在「已归档」面板里恢复)。归档后任务离开周历但数据保留,存在数据文件的独立 archivedTasks 数组里;旧版本桌面不认这个字段,因此也不会把归档任务显示出来。
  • 助手默认看不到归档内容:它只有一个只读工具 query_archive(关键词 / 日期范围 / 条数)。问「以前那份报告呢」时它会去查,不会凭记忆回答。
  • 归档库只读:不能改、不能排、不能删。要恢复就点「已归档」面板里的「恢复」,或让助手提恢复操作。物理清除尚未实现,两者都不支持。
  • 撤销:原界面右下角「撤销」按钮回退最近一次已提交的变更(含归档/恢复、改删、排时段、完成任务),最多 20 步;撤销会先落盘再提交,保存失败则不做任何改动。

0.15.5

  • 课程支持周次:Course 新增 startWeek / endWeek(第几周开课到第几周停,1-based,缺省=每周都上)。周历只显示当周在开的课;排程/空闲时间计算也按当周过滤——7-15 周的实验课在第 5 周不再占时间、不再显示,到第 7 周自己出现、第 16 周自己消失。
  • 学期基准:AppState.semesterStart(第 1 周周一,本轮默认 2026-09-21,可在状态里改);plan_snapshot 首行会告诉模型「本学期第 N 周(学期首周 …)」,课表里的「7-15 周」直接填 startWeek:7, endWeek:15。
  • 冲突判定按周次重叠:两门课同一时段但周次不相交(如 1-6 周 / 7-15 周)不再互相判冲突;周次相交才算。
  • 课程卡片/周历格在名称旁显示周次(v3 里跟在地点行后面);update_course 可改周次。
  • 其余保持 0.15.4 行为。

0.15.4

  • 模型直接填「第 X-Y 节」:create_course / update_course 新增 periodStart + periodEnd(1–13),由服务端按作息表换算成起止时间(整大节的自动记成 period)。课表里的「3-5 节」原样填进来就行,模型不需要知道钟点。与 period、start/end 三选一,混用会被拒绝。
  • plan_snapshot 直接打印权威作息表:13 节逐节起止 + 5 个大节 + 用餐时段,并提示「课表里的第3-5节可直接填 periodStart=3、periodEnd=5」。模型每次排课前必调这个工具,比只看提示词更不易漏。
  • 计划变更 skill 同步:「任意节次区间优先 periodStart/periodEnd」。
  • 其余保持 0.15.3 行为。

0.15.3

  • 助手拿到「权威作息表」:之前提示词只说「13 个小节、每节 40 分钟」,模型自己猜的时钟(第3节 09:30、第8节 14:30、第10节 18:00)和产品模板不一致——课表文件里「晚上=第10-13节」的描述又加深了误解。现在拆解/聊天提示词和计划变更 skill 都写明 13 节逐节起止时间、5 个大节划分,并明确「文件/PDF 自带的上午/下午/晚上划分不得用于换算」。
  • 课程不再因为时间没对齐而消失:aggregateDayBlocks 原先对「开始时间落在作息空档」的课程直接丢弃(12 门课里 8 门看不见);现在会按结束时间 / 下一个大节兜底归位(用餐时段的异常时间仍视为脏数据丢弃)。这是防御层:提示词修好后新数据本来就该对齐。
  • 计划变更 skill 增加「整大节用 period、只占大节一部分用 start/end 并按作息表换算」的规则。

0.15.2

  • 聊天历史里泄漏的工具调用标记会被清洗:0.15.1 让新的回复不再显示 <||DSML|| …>,但旧对话(chat-history.json 里已经存下的)还会原样显示。现在读取时就把标记剥掉、只由标记组成的回复直接丢弃(不留空气泡),写入时同样清洗;磁盘文件在下一次保存时被改写干净。
  • 这是防御层:聊天主链路在 0.15.1 已经会把这类文本调用恢复成真实工具调用;这里保证任何存量数据、任何读取路径都不把机器文本当回复。
  • 其余保持 0.15.1 行为。

0.15.1

  • 修掉「助手只输出一段 <||DSML|| …> 标记、什么都没排」:有些网关会把模型的工具调用写成文本塞进正文(而不是标准的 tool_calls 字段),于是 plan_change 没被执行、界面上只剩一段标记(老师 2026-10-22 截图)。现在服务端会识别这种文本调用:解析出 plan_change(兼容 ops / 裸数组写法)、按正常工具轮执行、把结果回给模型继续收尾,标记本身绝不会显示给用户;实在解析不出来也只显示说明文字,不显示标记。
  • 随带把 plan_change 的参数名兼容 ops(结构化调用里出现同样写法也能通过校验)。
  • 其余保持 0.15.0 行为。

0.15.0

  • AI 助手权限等级定为 L2「可撤回即自动」:新建任务/课程、归档、恢复直接生效;修改字段、安排/改期/取消、改课程、停用重复/限期模板仍要确认。判据是「有天然回退路径、原值被保留」,不依赖内存撤销栈。
  • 混合批次拆分:一次回答里既有可撤回操作、又有修改时,可撤回的部分先直接生效并在对话里说明「已自动应用 N 项(可撤销)」;其余操作仍出确认卡。自动部分提交失败则整批回退成一张卡。
  • 重复/限期模板的新建仍免确认;要回退只能停用模板(确认卡,保留已完成实例、移除未完成实例)。
  • 保存冲突自动重载时清空撤销栈:不再可能把重载前的旧快照写回、覆盖别处写入。
  • 修掉「大改动时报 LLM 未连接」的假断连:供应商 HTTP 200 但没有可用文字(输出被截断、工具轮次用尽后的纯工具回合)不再一律当 502;截断会翻倍预算重试一次、沉默会明确要求一次文字结论。已经拟好的变更草案即使收尾文字缺失也会照常交给界面,不再随 502 丢掉。失败文案按真实原因区分(密钥/权限、HTTP 状态、网络层),只有真网络错误才说「没能连上」,且失败后输入框保留刚打的字。
  • 同一轮只允许一份 plan_change 草案:模型把大改动拆成多次调用时,第二次会被拒绝并要求「把全部操作合并到一次调用里重新提交」,不再静默覆盖前面的批次;skill 也写明一次列全。
  • 设置里的权限开关与跨刷新撤销仍未做(撤销仍是内存 20 步)。

0.14.0

  • 文件改为落盘档案库 + 按需读取:拖入的文件存到 <数据目录>/files/(原始字节 + 抽取文本),不再每轮注入对话;助手用只读工具 file_list / file_read 在你需要时才读它,重启不丢、也不占每轮 token。
  • 新增文件档案库(顶栏「文件」):列出加入过的文件、字数/大小/时间,可「打开文件位置」(在资源管理器里打开目录)和删除(点两次确认)。
  • 拖入后只在下一条消息里带一行指针(文件名+id),正文不进提示词、不进聊天历史。
  • 上限:单文件约 9 MB、抽取文本 20,000 字、档案库 200 个文件;PDF/Office 仍不支持(无解析库)。
  • 0.13.0 的文件转文本方向保留,实现从「会话内存固定」改为「磁盘档案 + 按需读取」。
  • 课程可被创建和归档:助手能新建课程(按规定星期/大节或起止时间,冲突会被拒绝)、把课程归档(不再占课表,可恢复);课程没有硬删除。归档面板同时列出归档任务与归档课程,恢复走同一套校验与撤销。

0.13.0

  • 新增「文件 → 文本」:把文件拖到日程面板,宿主把内容转成文本并固定到当前会话,助手据此回答;不需要改发送流程,也不会因此自动排课。
  • 支持纯文本类文件与图片(图片由 deepseek-flash 的图片输入转写);单文件约 9 MB、抽取文本上限 20,000 字。
  • PDF/Word/Excel/PPT 暂不支持:运行环境没有对应解析库(DSH 自带 Python 有 docx/xlsx/pptx,但插件不启动外部进程也不引依赖),拖入会明确提示改用文本或截图。
  • 新增路由 POST /enterprise/attachment(与其它路由同一道访问守卫);守卫通过时共 7 条路由,serverWrites 开启后 8 条。
  • 0.12.2 的权限调整与 0.12.1 的模型默认值、UI 修复保持不变。

0.12.2

  • AI 修改计划权限调整:新增任务、归档、恢复由插件直接应用(可在「撤销」里回退),不再逐条点确认;修改任务/课程、安排/改期/取消安排、删除重复/限期模板仍弹确认卡。
  • 普通任务没有硬删除:助手要「删掉」一律走归档(任何状态都可归档,归档库可恢复);只有重复/限期模板用删除(移除未完成实例、保留已完成实例)。
  • 服务端提交通道 POST /enterprise/ops 只接受新建、归档、恢复;修改类操作返回 403,必须走界面确认。
  • 助手 skill 与提示词同步更新(删除→归档、哪些会自动生效、#T 现在可归档);新 skill digest dc5fe3f8…。
  • 助手工具结果按操作分句:新建/归档/恢复回「已由界面直接应用、可撤销」,修改/删除类才回「等界面确认」——不再一边说「请确认」一边显示「已自动应用」。
  • 0.12.1 的官方模型默认值与两个 UI 修复保持不变。

0.12.1

  • 默认模型改走 DeepSeek 官方接口:https://api.deepseek.com + deepseek-flash,密钥 DEEPSEEK_API_KEY(与联网搜索同一把);opencode 网关仍可用三个 ENTERPRISE_LLM_* 环境变量切回。
  • 修复「关闭归档面板时对话区闪一下」:关闭只收起面板,不再重绘整个对话区。
  • 修复「对话停在底部时,新回复不会自动滚到最新」:只有对话内容变化且读者本来就在底部(32px 内)时才吸底滚动;往上翻看旧消息时保持位置。

0.12.0

  • 新增 create_task:助手可直接创建一次性任务、重复模板与限期次数任务;服务端/模型可经操作通道提交(serverWrites 仍默认关闭)。
  • 模板与实例可改可删:改模板同步未完成实例并保留已完成实例;删模板移除未完成实例、保留已完成实例;单个实例可改期或取消安排。
  • 归档库与撤销(见上文),助手可用只读工具 query_archive 查历史。
  • 协议缝加固:/enterprise/* 统一访问控制;写操作要求 ETag 前置条件;单写者锁;lib/standalone.js 可脱离 DSH 运行。
  • 时间基准固定为 Asia/Shanghai,宿主与浏览器半区共用同一份时钟模块。

0.11.0

  • 小窗使用 DSH 原生右侧栏,自动为对话区留出空间;展开后使用中央页面。
  • 收起宿主左栏后随可用空间扩展;不再注册覆盖宿主的全屏浮层。
  • 展开向左、收回向右,保留同一工作空间与输入草稿;减少动态效果设置下直接切换。
  • 修复反复展开、收回后关闭按钮只收回而不关闭的问题。
  • 宿主未提供 View Transition 时直接切换,保留原生布局行为。

0.10.0

  • 默认启用 V6 精修界面,去除默认角色名称与角色图标。
  • 集成 conversational-voice 与 task-lifecycle,自定义人格可配置。
  • 接入持久拆解生命周期、停止/继续、真实提议确认和任务排班。
  • 保留周历/单日切换,修复切换叠层和回本周选中日期。
  • 默认数据目录改为用户目录,不再绑定开发机 E 盘。

本 npm 包仅包含编译后的运行文件、插件声明与说明;不包含用户数据、对话记录、测试凭据或开发归档。