@khorsheed/dsh-client-session-title-edit 0.2.5 → 0.2.7

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
@@ -1,5 +1,13 @@
1
1
  # 变更记录
2
2
 
3
+ ## 0.2.7(2026-10-26)
4
+
5
+ - 无功能变更:仓内目录随 npm 包名改为 `packages/client-session-title-edit`(包名不变,安装与使用无感),README 里的路径与截图尺寸随之更新。
6
+
7
+ ## 0.2.6(2026-10-22)
8
+
9
+ 无功能变更。适配宿主 0.2.1 线:verifiedHost 前移至 0.2.1-rc.1,`@deepseek-ai/dsh-*` peer 区间加宽覆盖 0.2.1 并声明 `engines.dsh`(`>=0.1.2-rc.1 <0.3.0-0`);退役 load 期 invariant 伴生探针(空仪式,无行为变化)。
10
+
3
11
  ## 0.2.5(2026-09-30)
4
12
 
5
13
  无功能变更。加宽 `@deepseek-ai/dsh-*` peer 区间以覆盖宿主 0.2.0(0.2.0 的兼容闸会禁用 peer 区间不覆盖宿主版本的已装插件)。
package/README.en.md CHANGED
@@ -6,7 +6,7 @@ Rename a session whenever you like: click the little pencil by the title, hit En
6
6
 
7
7
  Auto-generated session titles are often off the mark, and finding a session again two days later is pure luck. This plugin puts a pencil next to the title in the chat header: one click and the title becomes an input in place, prefilled and fully selected. Enter saves, Escape cancels, and a draft that's too long gets a warning instead of silent truncation. Renames go through the official `session.rename` RPC, and the title never enters the model context — the model knows nothing about it.
8
8
 
9
- <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit1.png" width="640" alt="the pencil button beside the title in the chat header, with a rename-session tooltip on hover">
9
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit1.png" width="560" alt="the pencil button beside the title in the chat header, with a rename-session tooltip on hover">
10
10
 
11
11
  ## Features
12
12
 
@@ -16,7 +16,7 @@ Auto-generated session titles are often off the mark, and finding a session agai
16
16
  - **Budget-aware** — drafts past the host's 80-UTF-8-byte title budget are blocked with a warning, never silently truncated.
17
17
  - **Zero footprint** — rides the official `session.rename` RPC; the title never enters model context (no token or KV-cache effect).
18
18
 
19
- <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit2.png" width="640" alt="after clicking the pencil the title becomes an input in place — edit and press Enter to save">
19
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit2.png" width="560" alt="after clicking the pencil the title becomes an input in place — edit and press Enter to save">
20
20
 
21
21
  ## Install
22
22
 
@@ -34,7 +34,7 @@ dsh plugin --profile web remove @khorsheed/dsh-client-session-title-edit
34
34
 
35
35
  - npm release line (host `0.1.7-rc.2`, next release `0.2.4`): ✅ full — the rename rides the official `session.rename`, and **in-place editing works on both the 0.1.5 and 0.1.7 host lines** (one text-based probe covers the 0.1.5/0.1.6 disabled crumb button and the plain-text crumb that replaced it in 0.1.7-alpha.1), proven by the dual-line suite and on both host lines in a live instance; the minHost floor stays at `0.1.2-rc.1`.
36
36
  - Published `0.2.3` and earlier: on hosts from 0.1.7-alpha.1 the current crumb is no longer a disabled button, so in-place editing falls back to the inline editor in the actions row (**renaming itself keeps working**, it just no longer overlays the title); `0.2.4` restores it.
37
- - source line (deepseek-harness master, `0.1.7-rc.2`): ✅ (verifiedHost: `0.1.7-rc.2`)
37
+ - source line (deepseek-harness master): ✅ (verifiedHost: `0.2.1-rc.1`) — host-021 wave: full build+test green against the 0.2.1-rc.1 tree; no other surface changes.
38
38
 
39
39
  **Version line mapping**: 0.2.0 and up support host `0.1.2-rc.1` and later; hosts on `0.1.0-rc.6` ~ `0.1.1-rc.2` stay on the 0.1.x release line (last release `0.1.0`).
40
40
 
@@ -68,7 +68,7 @@ Nothing changes for the model: the title is a projection-only property, never in
68
68
 
69
69
  ## Development
70
70
 
71
- Part of the [dsh-plugins](https://github.com/Khorsheed/dsh-plugins) monorepo (`packages/session-title-edit`). Issues and contributions welcome there.
71
+ Part of the [dsh-plugins](https://github.com/Khorsheed/dsh-plugins) monorepo (`packages/client-session-title-edit`). Issues and contributions welcome there.
72
72
 
73
73
  ## Changelog
74
74
 
package/README.i18n.yaml CHANGED
@@ -1,6 +1,6 @@
1
1
  # Bilingual-pair consistency record: the git blob hash of each side as of the
2
2
  # last confirmed-consistent state. Both languages carry equal authority; after
3
3
  # editing either side, bring the other along and re-record with:
4
- # pnpm run verify-translation-pairing --write packages/session-title-edit/README.en.md
5
- packages/session-title-edit/README.en.md: 0a8cc7956e7b923a32640451eb6bf8b4c95d1f7b
6
- packages/session-title-edit/README.md: fce91b839aedaea17db2646de9090f6e2f49dda1
4
+ # pnpm run verify-translation-pairing --write packages/client-session-title-edit/README.en.md
5
+ packages/client-session-title-edit/README.en.md: 004736255c6d7eb0c04a8af130d8aec51df44c2e
6
+ packages/client-session-title-edit/README.md: e1dff9453cc766f9a7e4f6b3e0562a3a7458a225
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  自动起的会话标题常常词不达意,过两天想找回某个会话全靠运气。这个插件在聊天区顶部的标题旁放了一支铅笔:点一下,标题就地变成输入框,预填好当前名字并全选;Enter 保存、Escape 取消,名字起得太长会先被警告拦下,绝不悄悄截断。改名走的是官方 `session.rename` 接口,标题永远不会进入模型上下文,模型对此一无所知。
8
8
 
9
- <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit1.png" width="640" alt="聊天区头部标题旁的铅笔按钮,悬停显示「重命名会话」">
9
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit1.png" width="560" alt="聊天区头部标题旁的铅笔按钮,悬停显示「重命名会话」">
10
10
 
11
11
  ## 特性
12
12
 
@@ -16,7 +16,7 @@
16
16
  - **预算把关**——超过宿主 80 UTF-8 字节标题预算的草稿被警告拦下,绝不静默截断。
17
17
  - **零足迹**——走官方 `session.rename` RPC;标题永远不会进入模型上下文(无 token 或 KV 缓存影响)。
18
18
 
19
- <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit2.png" width="640" alt="点击铅笔后标题就地变成输入框,直接修改后回车保存">
19
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-basic/main/docs/screenshots/session-title-edit2.png" width="560" alt="点击铅笔后标题就地变成输入框,直接修改后回车保存">
20
20
 
21
21
  ## 安装
22
22
 
@@ -34,7 +34,7 @@ dsh plugin --profile web remove @khorsheed/dsh-client-session-title-edit
34
34
 
35
35
  - npm 发布线(宿主 `0.1.7-rc.2`,下一版 `0.2.4`):✅ 完整——改名走官方 `session.rename`;**就地覆盖在 0.1.5 与 0.1.7 两条宿主线上都可用**(同一套文本定位同时覆盖 0.1.5/0.1.6 的 disabled crumb 按钮与 0.1.7-alpha.1 起的纯文本 crumb),双线单测 + 两条宿主线实机验收通过;minHost 地板保持 `0.1.2-rc.1` 不动。
36
36
  - 已发布版本 `0.2.3` 及更早:在 0.1.7-alpha.1 起的宿主上,标题 crumb 不再是 disabled 按钮,就地覆盖会退回 actions 行内编辑器(**改名本身仍可用**,只是不再盖在标题上);升到 `0.2.4` 即恢复。
37
- - 源码线(deepseek-harness master,`0.1.7-rc.2`):✅(verifiedHost: `0.1.7-rc.2`)
37
+ - 源码线(deepseek-harness master):✅(verifiedHost: `0.2.1-rc.1`)——host-021 波对 0.2.1-rc.1 树全量 build+test 绿,无其它表面变化。
38
38
 
39
39
  **版本线对照**:0.2.0 起支持宿主 `0.1.2-rc.1` 及以后;宿主 `0.1.0-rc.6` ~ `0.1.1-rc.2` 的用户请停留在 0.1.x 发布线(末版 `0.1.0`)。
40
40
 
@@ -68,7 +68,7 @@ src/client/slots.ts 槽位声明
68
68
 
69
69
  ## 开发
70
70
 
71
- 隶属 [dsh-plugins](https://github.com/Khorsheed/dsh-plugins) monorepo(`packages/session-title-edit`)。问题与贡献请移步该仓库。
71
+ 隶属 [dsh-plugins](https://github.com/Khorsheed/dsh-plugins) monorepo(`packages/client-session-title-edit`)。问题与贡献请移步该仓库。
72
72
 
73
73
  ## 变更记录
74
74
 
package/lib/client.js CHANGED
@@ -112,7 +112,7 @@ window.__ModuleLoader__.load({
112
112
  }
113
113
  //#endregion
114
114
  //#region \0dsh-css:src/client/TitleEditAction.module.css.mjs
115
- const css = ".okd51a_renameButton{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;margin-left:-12px;padding:0;display:inline-flex}.okd51a_renameButton:hover,.okd51a_renameButton:focus-visible{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}.okd51a_editor{align-items:center;gap:6px;display:inline-flex}.okd51a_editorInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:220px;height:28px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:6px;outline:none;padding:3px 8px;font-size:12px;line-height:18px}.okd51a_editorInput:focus{border-color:var(--dsw-alias-brand-primary)}.okd51a_editorInput:disabled{color:var(--dsw-alias-label-dimmed)}.okd51a_editorError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.okd51a_editorHint{color:var(--dsw-alias-state-warn-primary);font-size:12px;line-height:18px}.okd51a_inPlaceInput{box-sizing:border-box;z-index:40;color:var(--dsw-alias-label-primary);background:0 0;border:1px solid #0000;border-radius:12px;outline:none;padding:4px 8px;font-size:14px;font-weight:500;line-height:20px;position:fixed}.okd51a_inPlaceInput:focus{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-base)}.okd51a_inPlaceInput:disabled{color:var(--dsw-alias-label-dimmed)}.okd51a_inPlaceMirror{visibility:hidden;white-space:pre;pointer-events:none;font-family:inherit;font-size:14px;font-weight:500;position:absolute;top:-9999px;left:-9999px}.okd51a_inPlaceError{color:var(--dsw-alias-state-error-primary);margin-left:6px;font-size:12px;line-height:18px}.okd51a_inPlaceHint{color:var(--dsw-alias-state-warn-primary);margin-left:6px;font-size:12px;line-height:18px}header nav [data-ste-inplace]{visibility:hidden!important}";
115
+ const css = ".JYeHca_renameButton{width:22px;height:22px;color:var(--dsw-alias-label-tertiary);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;margin-left:-12px;padding:0;display:inline-flex}.JYeHca_renameButton:hover,.JYeHca_renameButton:focus-visible{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-interactive-bg-hover)}.JYeHca_editor{align-items:center;gap:6px;display:inline-flex}.JYeHca_editorInput{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:220px;height:28px;color:var(--dsw-alias-label-primary);background:0 0;border-radius:6px;outline:none;padding:3px 8px;font-size:12px;line-height:18px}.JYeHca_editorInput:focus{border-color:var(--dsw-alias-brand-primary)}.JYeHca_editorInput:disabled{color:var(--dsw-alias-label-dimmed)}.JYeHca_editorError{color:var(--dsw-alias-state-error-primary);font-size:12px;line-height:18px}.JYeHca_editorHint{color:var(--dsw-alias-state-warn-primary);font-size:12px;line-height:18px}.JYeHca_inPlaceInput{box-sizing:border-box;z-index:40;color:var(--dsw-alias-label-primary);background:0 0;border:1px solid #0000;border-radius:12px;outline:none;padding:4px 8px;font-size:14px;font-weight:500;line-height:20px;position:fixed}.JYeHca_inPlaceInput:focus{border-color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-base)}.JYeHca_inPlaceInput:disabled{color:var(--dsw-alias-label-dimmed)}.JYeHca_inPlaceMirror{visibility:hidden;white-space:pre;pointer-events:none;font-family:inherit;font-size:14px;font-weight:500;position:absolute;top:-9999px;left:-9999px}.JYeHca_inPlaceError{color:var(--dsw-alias-state-error-primary);margin-left:6px;font-size:12px;line-height:18px}.JYeHca_inPlaceHint{color:var(--dsw-alias-state-warn-primary);margin-left:6px;font-size:12px;line-height:18px}header nav [data-ste-inplace]{visibility:hidden!important}";
116
116
  const tagId = "@khorsheed/dsh-client-session-title-edit/TitleEditAction.module.css";
117
117
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
118
118
  const tag = document.createElement("style");
@@ -122,15 +122,15 @@ window.__ModuleLoader__.load({
122
122
  document.head.appendChild(tag);
123
123
  }
124
124
  var TitleEditAction_module_css_default = {
125
- "inPlaceHint": "okd51a_inPlaceHint",
126
- "renameButton": "okd51a_renameButton",
127
- "inPlaceMirror": "okd51a_inPlaceMirror",
128
- "inPlaceError": "okd51a_inPlaceError",
129
- "editorInput": "okd51a_editorInput",
130
- "editorError": "okd51a_editorError",
131
- "editor": "okd51a_editor",
132
- "editorHint": "okd51a_editorHint",
133
- "inPlaceInput": "okd51a_inPlaceInput"
125
+ "editorHint": "JYeHca_editorHint",
126
+ "editorError": "JYeHca_editorError",
127
+ "editorInput": "JYeHca_editorInput",
128
+ "editor": "JYeHca_editor",
129
+ "inPlaceInput": "JYeHca_inPlaceInput",
130
+ "inPlaceMirror": "JYeHca_inPlaceMirror",
131
+ "inPlaceError": "JYeHca_inPlaceError",
132
+ "renameButton": "JYeHca_renameButton",
133
+ "inPlaceHint": "JYeHca_inPlaceHint"
134
134
  };
135
135
  //#endregion
136
136
  //#region src/client/TitleEditAction.tsx
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Generated by scripts/sync-icon-artwork.mts from @deepseek-ai/dsh-client-ui-primitives
3
- * (v0.1.7-rc.1, harness 46a7f68b09) — do not edit by hand. The 0.1.5 and rc.1 host lines
3
+ * (v0.2.1-rc.1, harness 1600d8a1e1) — do not edit by hand. The 0.1.5 and rc.1 host lines
4
4
  * share no icon export name, so the rc.1 artwork is inlined here: pure SVG,
5
5
  * no host runtime identity, identical on every line. Re-run the generator
6
6
  * after adding an icon import or bumping the harness checkout.
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "session",
9
9
  "title"
10
10
  ],
11
- "version": "0.2.5",
11
+ "version": "0.2.7",
12
12
  "type": "module",
13
13
  "main": "lib/index.js",
14
14
  "types": "lib/types/index.d.ts",
@@ -17,10 +17,6 @@
17
17
  "types": "./lib/types/index.d.ts",
18
18
  "default": "./lib/index.js"
19
19
  },
20
- "./invariant": {
21
- "types": "./lib/types/invariant.d.ts",
22
- "default": "./lib/invariant.js"
23
- },
24
20
  "./client": {
25
21
  "types": "./lib/types/client/index.d.ts",
26
22
  "default": "./lib/client.js"
@@ -43,18 +39,20 @@
43
39
  },
44
40
  "compat": {
45
41
  "minHost": "0.1.2-rc.1",
46
- "verifiedHost": "0.1.7-rc.2",
42
+ "verifiedHost": "0.2.1-rc.1",
47
43
  "notes": "就地编辑是 DOM 层过渡方案(官方 header 无标题槽位),定位按「crumbs nav 最后一段里文本等于当前 displayTitle 的叶子节点」做:0.1.5/0.1.6 的当前 crumb 是 disabled 按钮,0.1.7-alpha.1 起(上游 92101e1a5b,让标题进入窗口拖拽条)是纯文本 span.crumbCurrent,两条宿主线因此共用一套定位;标题尚未投影或官方 DOM 再次变化时按设计退回 actions 行的行内编辑器(改名始终走官方 session.rename,不受影响)。已发布的 0.2.3 及更早版本在 0.1.7-alpha.1 起的宿主上只会走退回臂。"
48
44
  }
49
45
  },
50
46
  "license": "MIT",
47
+ "engines": {
48
+ "dsh": ">=0.1.2-rc.1 <0.3.0-0"
49
+ },
51
50
  "peerDependencies": {
52
51
  "@deepseek-ai/cordis": "^4.0.1",
53
- "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6 || ^0.2.0-rc.1",
54
- "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6 || ^0.2.0-rc.1",
55
- "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6 || ^0.2.0-rc.1",
56
- "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6 || ^0.2.0-rc.1",
57
- "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6 || ^0.2.0-rc.1",
52
+ "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6 || ^0.2.0-rc.1 || ^0.2.1-rc.1",
53
+ "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6 || ^0.2.0-rc.1 || ^0.2.1-rc.1",
54
+ "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6 || ^0.2.0-rc.1 || ^0.2.1-rc.1",
55
+ "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6 || ^0.2.0-rc.1 || ^0.2.1-rc.1",
58
56
  "react": "^18.2.0"
59
57
  },
60
58
  "files": [
package/lib/invariant.js DELETED
@@ -1,26 +0,0 @@
1
- //#region lib/types/invariant.js
2
- /**
3
- * Package-owned invariant companion for `@khorsheed/dsh-client-session-title-edit`.
4
- * @module @khorsheed/dsh-client-session-title-edit/invariant
5
- */
6
- const PACKAGE_NAME = "@khorsheed/dsh-client-session-title-edit";
7
- /** Cordis companion plugin name. */
8
- const name = "client-session-title-edit-invariant";
9
- /** Service required before the companion can reserve package ownership. */
10
- const inject = ["invariants"];
11
- /**
12
- * No runtime invariant: every accepted rename is appended through the official
13
- * session service, whose session-title invariant companion audits the
14
- * `session/title` source relationship (a user rename must carry no message
15
- * citations), and the plugin's one header-slot entry proves disposal through
16
- * the browser-plugin spec. No second authority exists to check at runtime.
17
- */
18
- const install = () => {};
19
- /**
20
- * Register this package's invariant companion.
21
- * @param ctx - Cordis context carrying the invariant service.
22
- * @returns the installed registration's disposer after setup succeeds.
23
- */
24
- const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
25
- //#endregion
26
- export { apply, inject, name };
@@ -1,16 +0,0 @@
1
- /**
2
- * Package-owned invariant companion for `@khorsheed/dsh-client-session-title-edit`.
3
- * @module @khorsheed/dsh-client-session-title-edit/invariant
4
- */
5
- import type { Context } from '@deepseek-ai/cordis';
6
- /** Cordis companion plugin name. */
7
- export declare const name = "client-session-title-edit-invariant";
8
- /** Service required before the companion can reserve package ownership. */
9
- export declare const inject: string[];
10
- /**
11
- * Register this package's invariant companion.
12
- * @param ctx - Cordis context carrying the invariant service.
13
- * @returns the installed registration's disposer after setup succeeds.
14
- */
15
- export declare const apply: (ctx: Context) => Promise<() => void>;
16
- //# sourceMappingURL=invariant.d.ts.map
@@ -1,24 +0,0 @@
1
- /**
2
- * Package-owned invariant companion for `@khorsheed/dsh-client-session-title-edit`.
3
- * @module @khorsheed/dsh-client-session-title-edit/invariant
4
- */
5
- const PACKAGE_NAME = '@khorsheed/dsh-client-session-title-edit';
6
- /** Cordis companion plugin name. */
7
- export const name = 'client-session-title-edit-invariant';
8
- /** Service required before the companion can reserve package ownership. */
9
- export const inject = ['invariants'];
10
- /**
11
- * No runtime invariant: every accepted rename is appended through the official
12
- * session service, whose session-title invariant companion audits the
13
- * `session/title` source relationship (a user rename must carry no message
14
- * citations), and the plugin's one header-slot entry proves disposal through
15
- * the browser-plugin spec. No second authority exists to check at runtime.
16
- */
17
- const install = () => { };
18
- /**
19
- * Register this package's invariant companion.
20
- * @param ctx - Cordis context carrying the invariant service.
21
- * @returns the installed registration's disposer after setup succeeds.
22
- */
23
- export const apply = (ctx) => Promise.resolve(ctx.invariants.register(PACKAGE_NAME, install));
24
- /* jscpd:ignore-end */