@starwish-ai/xingyuan-dsh 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,63 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.6.6] - 2026-09-29
9
+
10
+ Adapt to the dsh `0.2.0-rc.1` host line while keeping `0.1.7-rc.1` supported. Upgrading the
11
+ host had made the plugin disappear completely: the compatibility gate introduced in
12
+ 0.1.7-rc.1 evaluates only the peers a package *declares*, and `^0.1.7-rc.1` does not admit
13
+ `0.2.0-rc.1`, so dsh skipped the whole bundle — reproduced with
14
+ `dsh --profile web --dump-config`, which printed
15
+ `skipping profile bundle "@starwish-ai/xingyuan-dsh" … is incompatible with dsh 0.2.0-rc.1`.
16
+ Preset, chat cards, session-view tabs, the settings page and the standalone `/xingyuan/*`
17
+ pages all vanished; the SQLite data stayed intact.
18
+
19
+ ### Added
20
+ - `test/host-baseline.test.ts` — two new gates: every supported host version line
21
+ (`SUPPORTED_DSH_VERSIONS`) must be admitted by **all** dsh peers under the host's own
22
+ predicate (`semver.satisfies(line, range, {includePrerelease: true})`), the pinned
23
+ devDependency must be one of those lines, and an unverified next generation
24
+ (`0.3.0-rc.1`) must still be refused. Widening support therefore stays a deliberate,
25
+ verified act instead of a silent over-promise.
26
+ - `test/prompts.test.ts` — a gate that the reminder guide and the capabilities section
27
+ contain no host-version-specific assertion.
28
+ - AGENTS.md §5.10 — self-audit against the skills shipped with 0.2.0-rc.1 (the new
29
+ `references/user-actions.md` "one operation, two callers" rule and the `agent-experience`
30
+ skill), recording three UI-only actions that still lack tool equivalents as deliberate,
31
+ documented deviations rather than shipping half-implementations.
32
+
33
+ ### Changed
34
+ - peerDependencies: all 16 `@deepseek-ai/dsh-*` entries now admit two host lines
35
+ (`^0.1.7-rc.1 || ^0.2.0-rc.1`) — this is exactly what the gate reads.
36
+ - devDependencies: host baseline moved to `0.2.0-rc.1`. `cordis 4.0.4`,
37
+ `cordis-plugin-loader 1.0.5` and `schemastery 3.18.4` are unchanged in that release.
38
+ - Reminder guidance (`REMINDER_GUIDE` plus the capabilities line) no longer states a fixed
39
+ capability. The host rewrote its schedule subsystem in 0.2.0 — one-shot/session-local
40
+ timers became Host-wide durable reminders with `daily`/`weekly`/`cron`, a
41
+ `schedule_update` tool, its own storage domain and `every_seconds` lowered to a 60 s
42
+ minimum — and because this package supports both host lines, any "periodic reminders are
43
+ impossible" sentence would now be a false statement to users. The guide instead tells the
44
+ model to read the timing parameters `schedule_create` actually accepts and to answer
45
+ accordingly.
46
+ - Documentation: AGENTS.md header gains the 0.2.0-rc.1 delta notes; §10 decision 7 and §11
47
+ are rewritten on the new schedule facts; the transcriptView note now reflects per-host
48
+ defaults (web defaults to `detailed` from 0.2.0, Desktop `standard`, and only `verbose`
49
+ avoids folding completed turns); §4's upgrade checklist gained the schedule row's changed
50
+ plugin shape; the troubleshooting table gained the observed symptom and its remedy.
51
+
52
+ ### Fixed
53
+ - The plugin being unusable on dsh 0.2.0-rc.1. **No business-code change was required**:
54
+ package-by-package byte comparison between 0.1.7-rc.1 and 0.2.0-rc.1 showed that every
55
+ host seam this plugin touches is unchanged — session format is still v4, the v3→v4
56
+ migration edge still preserves ignorable plugin events (so the session-log self-repair
57
+ boundary stands), `retainedBy.mainView` and `projectionValues.agentPreset` are unchanged,
58
+ `dsh-host-webserver` / `dsh-settings` / `dsh-storage` / `dsh-storage-domain` /
59
+ `dsh-system-prompt` / `dsh-user-questions` / `dsh-client-ui-slots` /
60
+ `dsh-client-ui-renderer` / `dsh-client-store` / `dsh-session-format-catalog` and the
61
+ `dsh-agent-preset` implementation are byte-identical, and no changed package removed a
62
+ symbol this package imports. Verified with `pnpm typecheck`, `pnpm build` and the full
63
+ suite (25 files / 293 tests) against the new baseline.
64
+
8
65
  ## [0.6.5] - 2026-09-24
9
66
 
10
67
  First stable line on the dsh 0.1.7 host contract. This release re-verifies the plugin
package/README.en-US.md CHANGED
@@ -25,10 +25,12 @@ Tools are only mounted on sessions using the XingYuan preset; other sessions are
25
25
 
26
26
  ## Install
27
27
 
28
- > Requires DeepSeek Harness `0.1.7-rc.1` (peer dependencies — including the host's
29
- > client-half packages — are pinned to that release; 0.1.7 rewrote the settings
30
- > subsystem, so on older hosts this plugin's client half does not activate at all,
31
- > and since rc.1 dsh refuses to load a bundle whose peer range does not match.
28
+ > Requires DeepSeek Harness `0.1.7-rc.1` **or** `0.2.0-rc.1` (peer dependencies admit both
29
+ > version lines, including the host's client-half packages; 0.1.7 rewrote the settings
30
+ > subsystem, so on older hosts this plugin's client half does not activate at all, and
31
+ > since rc.1 dsh refuses to load a whole bundle whose peer range does not match — this
32
+ > package's "every supported line is admitted" claim is locked by a test). Scheduled
33
+ > reminder capabilities differ between the two host versions and are not hardcoded here.
32
34
  > Check the upgrade notes in [AGENTS.md](./AGENTS.md) before bumping dsh).
33
35
 
34
36
  ```sh
package/README.md CHANGED
@@ -27,9 +27,10 @@
27
27
 
28
28
  ## 安装
29
29
 
30
- > 需要 DeepSeek Harness `0.1.7-rc.1`(peer 依赖按该版本锁定,含 client 半侧的宿主包;
31
- > 0.1.7 重写了设置子系统,更早的宿主上本插件的 client 半侧不会激活,且 rc.1 起
32
- > dsh 会按 peer 范围**拒绝加载**不兼容的插件包。升级 dsh 前先核对 [AGENTS.md](./AGENTS.md)
30
+ > 需要 DeepSeek Harness `0.1.7-rc.1` 或 `0.2.0-rc.1`(peer 依赖同时 admit 这两条版本线,
31
+ > 含 client 半侧的宿主包;0.1.7 重写了设置子系统,更早的宿主上本插件的 client 半侧不会激活;
32
+ > rc.1 起 dsh 会按 peer 范围**整包拒绝加载**不匹配的插件,本包的「每条线都放行」由测试锁死。
33
+ > 两版宿主的定时提醒能力不同,插件不把能力写死。升级 dsh 前先核对 [AGENTS.md](./AGENTS.md)
33
34
  > 的升级要点)。
34
35
 
35
36
  ```sh
@@ -35,7 +35,7 @@ const CAPABILITIES = `# 能力范围
35
35
  - 成长统计:get_growth_stats 查询等级/经验/连续打卡/达成数量
36
36
  - 数据汇总(内部工具 batch_query_user_data):一次性获取全部愿望/任务数据
37
37
  - 用户配置:教练风格、用户画像
38
- - 定时提醒:一次性提醒(schedule_create);周期提醒暂不支持,用今日待办概览兜底
38
+ - 定时提醒:宿主原生 schedule_* 工具,一次性与周期能力随宿主版本,判定见「定时提醒指南」
39
39
 
40
40
  ## 界面入口(主动告知用户)
41
41
  会话顶部有视图标签页,无需通过对话即可直接查看与操作:
@@ -410,18 +410,20 @@ const CHART_GUIDE = `# 图表展示指南(均为内部能力,通过 generate
410
410
  - 图表卡自动渲染;文字回复聚焦结论(趋势/占比/排行)与建议,基于工具返回 subtitle 与数据要点概括,不得只说"已生成图表"`;
411
411
  const REMINDER_GUIDE = `# 定时提醒指南
412
412
 
413
- ## 能力边界(务必如实告知)
414
- - 支持**一次性提醒**:原生 schedule_create 工具,参数 prompt(提醒内容)+ at(RFC3339 绝对时间,如 2026-08-25T15:00:00+08:00)
415
- - **不支持**每天/每周/每月等周期提醒——定时器仅一次性触发且仅在当前会话存活期间送达。
416
- 用户要周期提醒时,说明限制并引导替代方案:「我会在每次对话开始给你今日待打卡概览,也可以随时问“今天有什么任务”」
413
+ ## 能力判定(先看参数,别凭记忆断言)
414
+ 提醒走宿主原生 schedule_* 工具,能做什么随宿主版本不同。**动手前看 schedule_create 本次实际接受的参数**:
415
+ - 有 daily / weekly / cron / every_seconds → 周期提醒可以做,直接设(weekly 的 weekdays 用 ISO 序号:周一 1 …… 周日 7;这些参数还各自要本地时刻与时区,时区给 IANA 名如 Asia/Shanghai)
416
+ - 只有 at / after_seconds → 本环境只支持一次性提醒。如实说明并给替代方案:「我会在每次对话开始给你今日待打卡概览,也可以随时问“今天有什么任务”」
417
+ 两种情况都只填用户要的**那一种**时间参数;参数表里标了必填的其余字段(如标题)一并填满。
417
418
 
418
419
  ## 何时使用
419
- - 「明天下午3点提醒我开会」「10分钟后提醒我喝水」→ schedule_create(prompt 写清提醒正文,at 用绝对时间)
420
+ - 「明天下午3点提醒我开会」「10分钟后提醒我喝水」→ schedule_create(提醒正文写清,绝对时间或「延后多少秒」二选一)
421
+ - 「每天早上9点提醒我打卡」「每周一三五提醒我锻炼」→ 参数支持时按 daily / weekly 设;不支持时退化为一次性提醒,并说明周期做不到
420
422
 
421
423
  ## 注意事项
422
- - 口语时间须换算为绝对时间并在复述中明确(如"好的,明天下午3点(2026-08-26 15:00)我会提醒你")
423
- - 会话结束后提醒不再触达;跨会话的任务触达依赖今日页与开场概览
424
- - 查看已设提醒 → schedule_list;取消 → schedule_delete(均为本环境原生工具,ID 取列表真实值)`;
424
+ - 口语时间须换算并在复述里说全(时间、内容、是否重复三样,如"好的,明天下午3点(2026-08-26 15:00)我会提醒你开会")
425
+ - 提醒的存活范围与送达次数由宿主决定,不得向用户承诺「关掉会话也不会丢」或「一定只送达一次」
426
+ - 查看已设提醒 → schedule_list;取消 → schedule_delete;改时间或正文 → schedule_update(本环境没有该工具时删除后重建);ID 一律取列表真实值`;
425
427
  const STYLE_TONES = {
426
428
  gentle: '当前教练风格:温柔型——暖心鼓励为主,肯定每一点进步,建议措辞柔和。',
427
429
  strict: '当前教练风格:严格型——直接鞭策、少客套,明确指出拖延与差距,督促立即行动。',
@@ -1457,7 +1457,7 @@ export function registerTools(ctx, config) {
1457
1457
  const done = result.state.steps.filter((s) => s.completed).length;
1458
1458
  const skipped = result.state.steps.filter((s) => s.skipped).length;
1459
1459
  if (result.finished) {
1460
- return `「${task.name}」微行动全部完成(完成 ${done} 步、跳过 ${skipped} 步)🎉 计划走完了——现在可以打卡这个任务,告诉我或去「今日」页点打卡都行。`;
1460
+ return `「${task.name}」微行动全部完成(完成 ${done} 步、跳过 ${skipped} 步)。\n🎉 计划走完了——现在可以打卡这个任务,告诉我或去「今日」页点打卡都行。`;
1461
1461
  }
1462
1462
  const next = result.state.steps.find((s) => s.stepNumber === result.state.currentStepNumber);
1463
1463
  return `第 ${args.stepNumber} 步已${args.action === 'complete' ? '完成 ✓' : '跳过 ↷'}(${done}/${result.state.steps.length} 完成)。下一步 第 ${result.state.currentStepNumber} 步:${next?.instruction ?? ''}`;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 提示词移植:PromptTemplateManager 全量段落 → dsh systemPrompt 分节注册。
3
3
  * 渠道适配:无微信版(Web 图表卡自动渲染);emitUiCardsBlock 移除(工具成功即发事件);
4
- * 提醒指南按 harness schedule 能力如实改写(仅一次性)。
4
+ * 提醒指南对宿主能力保持中立(宿主 schedule 的一次性/周期口径随版本变,判定交给工具参数)。
5
5
  */
6
6
  import type { Context } from '@deepseek-ai/cordis';
7
7
  import type { XingyuanStore } from '../domain.js';
@@ -7,8 +7,8 @@
7
7
  * - 写确认:总开关(confirmWrites)开启时按类目明细(confirmOps)弹卡——创建/打卡/取消打卡
8
8
  * 默认确认,领取/修改/记忆保存默认免确认但可在设置开启;删除(含批量)始终确认;教练风格与画像免确认;
9
9
  * - 业务事实:写操作成功即发 xingyuan/* 会话事件驱动卡片(可回放);
10
- * - 周期提醒:harness schedule 仅一次性触发,原生 schedule_create 直接可用,
11
- * 差异在提示词指南中如实告知,不另造包装工具。
10
+ * - 提醒:不自造包装工具,直接用宿主原生 schedule_*;其能力随宿主版本而不同,
11
+ * 判定与如实告知的口径集中在提示词的「定时提醒指南」,本层不断言能力边界。
12
12
  */
13
13
  import type { Context } from '@deepseek-ai/cordis';
14
14
  import type { XingyuanStore } from '../domain.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starwish-ai/xingyuan-dsh",
3
- "version": "0.6.5",
3
+ "version": "0.6.6",
4
4
  "description": "星愿 XingYuan for DeepSeek Harness: 对话创建愿望/任务、机会日打卡、微行动、记忆与图表的 Agent Preset 组合包",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -97,22 +97,22 @@
97
97
  },
98
98
  "peerDependencies": {
99
99
  "@deepseek-ai/cordis": "^4.0.4",
100
- "@deepseek-ai/dsh-agent-preset": "^0.1.7-rc.1",
101
- "@deepseek-ai/dsh-api-session-controller": "^0.1.7-rc.1",
102
- "@deepseek-ai/dsh-client-locale": "^0.1.7-rc.1",
103
- "@deepseek-ai/dsh-client-ui-chat": "^0.1.7-rc.1",
104
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-rc.1",
105
- "@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.1",
106
- "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.7-rc.1",
107
- "@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.1",
108
- "@deepseek-ai/dsh-schedule": "^0.1.7-rc.1",
109
- "@deepseek-ai/dsh-session": "^0.1.7-rc.1",
110
- "@deepseek-ai/dsh-settings": "^0.1.7-rc.1",
111
- "@deepseek-ai/dsh-storage": "^0.1.7-rc.1",
112
- "@deepseek-ai/dsh-storage-domain": "^0.1.7-rc.1",
113
- "@deepseek-ai/dsh-system-prompt": "^0.1.7-rc.1",
114
- "@deepseek-ai/dsh-tools": "^0.1.7-rc.1",
115
- "@deepseek-ai/dsh-user-questions": "^0.1.7-rc.1",
100
+ "@deepseek-ai/dsh-agent-preset": "^0.1.7-rc.1 || ^0.2.0-rc.1",
101
+ "@deepseek-ai/dsh-api-session-controller": "^0.1.7-rc.1 || ^0.2.0-rc.1",
102
+ "@deepseek-ai/dsh-client-locale": "^0.1.7-rc.1 || ^0.2.0-rc.1",
103
+ "@deepseek-ai/dsh-client-ui-chat": "^0.1.7-rc.1 || ^0.2.0-rc.1",
104
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.7-rc.1 || ^0.2.0-rc.1",
105
+ "@deepseek-ai/dsh-client-ui-settings": "^0.1.7-rc.1 || ^0.2.0-rc.1",
106
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.7-rc.1 || ^0.2.0-rc.1",
107
+ "@deepseek-ai/dsh-host-webserver": "^0.1.7-rc.1 || ^0.2.0-rc.1",
108
+ "@deepseek-ai/dsh-schedule": "^0.1.7-rc.1 || ^0.2.0-rc.1",
109
+ "@deepseek-ai/dsh-session": "^0.1.7-rc.1 || ^0.2.0-rc.1",
110
+ "@deepseek-ai/dsh-settings": "^0.1.7-rc.1 || ^0.2.0-rc.1",
111
+ "@deepseek-ai/dsh-storage": "^0.1.7-rc.1 || ^0.2.0-rc.1",
112
+ "@deepseek-ai/dsh-storage-domain": "^0.1.7-rc.1 || ^0.2.0-rc.1",
113
+ "@deepseek-ai/dsh-system-prompt": "^0.1.7-rc.1 || ^0.2.0-rc.1",
114
+ "@deepseek-ai/dsh-tools": "^0.1.7-rc.1 || ^0.2.0-rc.1",
115
+ "@deepseek-ai/dsh-user-questions": "^0.1.7-rc.1 || ^0.2.0-rc.1",
116
116
  "@deepseek-ai/schemastery": "*",
117
117
  "react": "^18.2.0",
118
118
  "zod": "^4.4.3"
@@ -150,30 +150,30 @@
150
150
  "@deepseek-ai/cordis": "4.0.4",
151
151
  "@deepseek-ai/cordis-plugin-include": "1.0.9",
152
152
  "@deepseek-ai/cordis-plugin-loader": "1.0.5",
153
- "@deepseek-ai/dsh-agent": "0.1.7-rc.1",
154
- "@deepseek-ai/dsh-agent-preset": "0.1.7-rc.1",
155
- "@deepseek-ai/dsh-api-remotes": "0.1.7-rc.1",
156
- "@deepseek-ai/dsh-api-session-controller": "0.1.7-rc.1",
157
- "@deepseek-ai/dsh-attachment": "0.1.7-rc.1",
158
- "@deepseek-ai/dsh-client-locale": "0.1.7-rc.1",
159
- "@deepseek-ai/dsh-client-store": "0.1.7-rc.1",
160
- "@deepseek-ai/dsh-client-ui-chat": "0.1.7-rc.1",
161
- "@deepseek-ai/dsh-client-ui-conversation": "0.1.7-rc.1",
162
- "@deepseek-ai/dsh-client-ui-renderer": "0.1.7-rc.1",
163
- "@deepseek-ai/dsh-client-ui-settings": "0.1.7-rc.1",
164
- "@deepseek-ai/dsh-client-ui-settings-plugins": "0.1.7-rc.1",
165
- "@deepseek-ai/dsh-client-ui-slots": "0.1.7-rc.1",
166
- "@deepseek-ai/dsh-host-webserver": "0.1.7-rc.1",
167
- "@deepseek-ai/dsh-llm": "0.1.7-rc.1",
168
- "@deepseek-ai/dsh-schedule": "0.1.7-rc.1",
169
- "@deepseek-ai/dsh-session": "0.1.7-rc.1",
170
- "@deepseek-ai/dsh-session-format-catalog": "0.1.7-rc.1",
171
- "@deepseek-ai/dsh-settings": "0.1.7-rc.1",
172
- "@deepseek-ai/dsh-storage": "0.1.7-rc.1",
173
- "@deepseek-ai/dsh-storage-domain": "0.1.7-rc.1",
174
- "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.1",
175
- "@deepseek-ai/dsh-tools": "0.1.7-rc.1",
176
- "@deepseek-ai/dsh-user-questions": "0.1.7-rc.1",
153
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.1",
154
+ "@deepseek-ai/dsh-agent-preset": "0.2.0-rc.1",
155
+ "@deepseek-ai/dsh-api-remotes": "0.2.0-rc.1",
156
+ "@deepseek-ai/dsh-api-session-controller": "0.2.0-rc.1",
157
+ "@deepseek-ai/dsh-attachment": "0.2.0-rc.1",
158
+ "@deepseek-ai/dsh-client-locale": "0.2.0-rc.1",
159
+ "@deepseek-ai/dsh-client-store": "0.2.0-rc.1",
160
+ "@deepseek-ai/dsh-client-ui-chat": "0.2.0-rc.1",
161
+ "@deepseek-ai/dsh-client-ui-conversation": "0.2.0-rc.1",
162
+ "@deepseek-ai/dsh-client-ui-renderer": "0.2.0-rc.1",
163
+ "@deepseek-ai/dsh-client-ui-settings": "0.2.0-rc.1",
164
+ "@deepseek-ai/dsh-client-ui-settings-plugins": "0.2.0-rc.1",
165
+ "@deepseek-ai/dsh-client-ui-slots": "0.2.0-rc.1",
166
+ "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1",
167
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.1",
168
+ "@deepseek-ai/dsh-schedule": "0.2.0-rc.1",
169
+ "@deepseek-ai/dsh-session": "0.2.0-rc.1",
170
+ "@deepseek-ai/dsh-session-format-catalog": "0.2.0-rc.1",
171
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.1",
172
+ "@deepseek-ai/dsh-storage": "0.2.0-rc.1",
173
+ "@deepseek-ai/dsh-storage-domain": "0.2.0-rc.1",
174
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
175
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.1",
176
+ "@deepseek-ai/dsh-user-questions": "0.2.0-rc.1",
177
177
  "@deepseek-ai/schemastery": "3.18.4",
178
178
  "@types/js-yaml": "^4.0.9",
179
179
  "@types/node": "^24.0.0",