@ahggg/dsh-side-chat 0.4.2 → 0.6.0

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.
Files changed (97) hide show
  1. package/README.md +2 -1
  2. package/README.zh-CN.md +2 -1
  3. package/lib/client/apply.d.ts.map +1 -1
  4. package/lib/client/apply.js +1 -1
  5. package/lib/client/apply.js.map +1 -1
  6. package/lib/client/contracts.d.ts +3 -1
  7. package/lib/client/contracts.d.ts.map +1 -1
  8. package/lib/client/index.d.ts +2 -2
  9. package/lib/client/index.d.ts.map +1 -1
  10. package/lib/client/index.js +1 -1
  11. package/lib/client/index.js.map +1 -1
  12. package/lib/client/model-preference.d.ts +14 -0
  13. package/lib/client/model-preference.d.ts.map +1 -0
  14. package/lib/client/model-preference.js +60 -0
  15. package/lib/client/model-preference.js.map +1 -0
  16. package/lib/client/panel/SelectionQuote.d.ts.map +1 -1
  17. package/lib/client/panel/SelectionQuote.js +26 -1
  18. package/lib/client/panel/SelectionQuote.js.map +1 -1
  19. package/lib/client/panel/SideChatModelSelect.d.ts +17 -0
  20. package/lib/client/panel/SideChatModelSelect.d.ts.map +1 -0
  21. package/lib/client/panel/SideChatModelSelect.js +247 -0
  22. package/lib/client/panel/SideChatModelSelect.js.map +1 -0
  23. package/lib/client/panel/SideChatPanel.d.ts +2 -1
  24. package/lib/client/panel/SideChatPanel.d.ts.map +1 -1
  25. package/lib/client/panel/SideChatPanel.js +3 -3
  26. package/lib/client/panel/SideChatPanel.js.map +1 -1
  27. package/lib/client/parent-composer/ParentConversationAnnotations.d.ts.map +1 -1
  28. package/lib/client/parent-composer/ParentConversationAnnotations.js +4 -2
  29. package/lib/client/parent-composer/ParentConversationAnnotations.js.map +1 -1
  30. package/lib/client/parent-composer/add-to-conversation.d.ts +16 -0
  31. package/lib/client/parent-composer/add-to-conversation.d.ts.map +1 -1
  32. package/lib/client/parent-composer/add-to-conversation.js +143 -17
  33. package/lib/client/parent-composer/add-to-conversation.js.map +1 -1
  34. package/lib/client/parent-composer/annotation-persistence.d.ts +19 -0
  35. package/lib/client/parent-composer/annotation-persistence.d.ts.map +1 -0
  36. package/lib/client/parent-composer/annotation-persistence.js +97 -0
  37. package/lib/client/parent-composer/annotation-persistence.js.map +1 -0
  38. package/lib/client/rc6/ArchivedConversation.d.ts +3 -1
  39. package/lib/client/rc6/ArchivedConversation.d.ts.map +1 -1
  40. package/lib/client/rc6/ArchivedConversation.js +61 -11
  41. package/lib/client/rc6/ArchivedConversation.js.map +1 -1
  42. package/lib/client/rc6/Rc6SideChatOverlay.d.ts.map +1 -1
  43. package/lib/client/rc6/Rc6SideChatOverlay.js +65 -5
  44. package/lib/client/rc6/Rc6SideChatOverlay.js.map +1 -1
  45. package/lib/client/rc6/context.d.ts +3 -1
  46. package/lib/client/rc6/context.d.ts.map +1 -1
  47. package/lib/client/rc6/remote-adapter.d.ts.map +1 -1
  48. package/lib/client/rc6/remote-adapter.js +4 -0
  49. package/lib/client/rc6/remote-adapter.js.map +1 -1
  50. package/lib/client/rc6/sessions-adapter.d.ts +16 -1
  51. package/lib/client/rc6/sessions-adapter.d.ts.map +1 -1
  52. package/lib/client/rc6/sessions-adapter.js +80 -16
  53. package/lib/client/rc6/sessions-adapter.js.map +1 -1
  54. package/lib/client/selection/ConversationAnnotationMarkers.d.ts +9 -0
  55. package/lib/client/selection/ConversationAnnotationMarkers.d.ts.map +1 -0
  56. package/lib/client/selection/ConversationAnnotationMarkers.js +241 -0
  57. package/lib/client/selection/ConversationAnnotationMarkers.js.map +1 -0
  58. package/lib/client/selection/SelectionActions.d.ts +6 -1
  59. package/lib/client/selection/SelectionActions.d.ts.map +1 -1
  60. package/lib/client/selection/SelectionActions.js +9 -8
  61. package/lib/client/selection/SelectionActions.js.map +1 -1
  62. package/lib/client/selection/selection-controller.d.ts +11 -0
  63. package/lib/client/selection/selection-controller.d.ts.map +1 -1
  64. package/lib/client/selection/selection-controller.js +54 -0
  65. package/lib/client/selection/selection-controller.js.map +1 -1
  66. package/lib/client/side-chat-controller.d.ts +3 -1
  67. package/lib/client/side-chat-controller.d.ts.map +1 -1
  68. package/lib/client/side-chat-controller.js +45 -1
  69. package/lib/client/side-chat-controller.js.map +1 -1
  70. package/lib/client.js +1392 -144
  71. package/lib/client.js.map +1 -1
  72. package/lib/host/archived-fork-service.d.ts +3 -1
  73. package/lib/host/archived-fork-service.d.ts.map +1 -1
  74. package/lib/host/archived-fork-service.js +80 -2
  75. package/lib/host/archived-fork-service.js.map +1 -1
  76. package/lib/index.d.ts +2 -1
  77. package/lib/index.d.ts.map +1 -1
  78. package/lib/index.js +4 -1
  79. package/lib/index.js.map +1 -1
  80. package/lib/remote.d.ts +5 -2
  81. package/lib/remote.d.ts.map +1 -1
  82. package/lib/remote.js.map +1 -1
  83. package/lib/shared/archived-wire.d.ts +56 -0
  84. package/lib/shared/archived-wire.d.ts.map +1 -1
  85. package/lib/shared/archived-wire.js +17 -0
  86. package/lib/shared/archived-wire.js.map +1 -1
  87. package/lib/shared/contracts.d.ts +16 -0
  88. package/lib/shared/contracts.d.ts.map +1 -1
  89. package/lib/shared/error-codes.d.ts +1 -1
  90. package/lib/shared/error-codes.d.ts.map +1 -1
  91. package/lib/shared/error-codes.js +1 -0
  92. package/lib/shared/error-codes.js.map +1 -1
  93. package/lib/typert.d.ts +2 -2
  94. package/lib/typert.d.ts.map +1 -1
  95. package/lib/typert.js +14 -3
  96. package/lib/typert.js.map +1 -1
  97. package/package.json +6 -1
package/README.md CHANGED
@@ -38,6 +38,7 @@ Open the URL printed by DSH. The plugin loads automatically in the Web client.
38
38
  Useful details:
39
39
 
40
40
  - `Shift+Enter` inserts a newline.
41
+ - Use the model control beside Send to choose a provider/model and its available reasoning effort. The choice belongs to Side Chat, does not change the main conversation, and becomes the global default for the next Side Chat.
41
42
  - After clicking `Add to chat`, press `Enter` or click `Save` to keep the annotation. Click outside the comment box or click `Cancel` to discard it.
42
43
  - `Add to chat` keeps any existing draft text and can collect multiple numbered passages, each with its own optional comment, in one annotation capsule.
43
44
  - The input grows with its content and becomes scrollable at its maximum height.
@@ -49,7 +50,7 @@ Useful details:
49
50
 
50
51
  ## What happens to the conversation
51
52
 
52
- The first send creates a real DSH Session fork at the selected message. The child inherits the complete event prefix, model configuration, presets, and workspace. Keeping the prefix unchanged is friendly to provider prompt caching, although a cache hit is never guaranteed.
53
+ The first send creates a real DSH Session fork at the selected message. The child inherits the complete event prefix, presets, and workspace. Its initial model choice uses the last accepted Side Chat choice when one is saved, otherwise it snapshots the parent configuration; later model or reasoning-effort changes apply to subsequent child steps without changing or following the parent conversation. Keeping the prefix unchanged is friendly to provider prompt caching, although a cache hit is never guaranteed.
53
54
 
54
55
  Closing Side Chat stops active work, archives the child Session, and releases its Agent. It does not delete the child's history from disk. The child and copied prefix therefore consume normal DSH Session storage.
55
56
 
package/README.zh-CN.md CHANGED
@@ -38,6 +38,7 @@ dsh web --port 3080
38
38
  常用操作:
39
39
 
40
40
  - `Shift+Enter` 换行。
41
+ - 使用发送按钮旁的模型控件可以选择 provider/model 及其可用的推理等级;该选择只属于 Side Chat,不会修改主会话,并会成为下次打开 Side Chat 时使用的全局默认值。
41
42
  - 点击 `Add to chat` 后,按 `Enter` 或点击 `Save` 保存 annotation;点击批注框外部或点击 `Cancel` 则直接取消。
42
43
  - `Add to chat` 会保留输入框中已有的草稿,并可把多段带序号的文本及各自的可选批注汇总到同一个 annotation 胶囊中。
43
44
  - 输入框会随内容自动增高,达到最大高度后在内部滚动。
@@ -49,7 +50,7 @@ dsh web --port 3080
49
50
 
50
51
  ## 会话和数据如何处理
51
52
 
52
- 第一次发送时,插件会在所选消息处创建一个真实的 DSH Session fork。child 会继承完整事件前缀、模型配置、preset 和 workspace。保持前缀不变有利于供应商的 prompt cache 复用,但不保证一定命中缓存。
53
+ 第一次发送时,插件会在所选消息处创建一个真实的 DSH Session fork。child 会继承完整事件前缀、preset 和 workspace;初始模型优先使用最近一次被接受的 Side Chat 选择,没有已保存选择时才快照主会话配置。之后修改模型或推理等级只会作用于 child 的后续 step,既不会修改主会话,也不会继续跟随主会话切换。保持前缀不变有利于供应商的 prompt cache 复用,但不保证一定命中缓存。
53
54
 
54
55
  关闭 Side Chat 时,插件会停止正在运行的任务、归档 child Session,并释放其 Agent;不会删除 child 的磁盘历史。因此,child 和复制的完整前缀会占用正常的 DSH Session 存储空间。
55
56
 
@@ -1 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAalD,eAAO,MAAM,IAAI,qBAAqB,CAAA;AACtC,eAAO,MAAM,MAAM,UAAmE,CAAA;AAEtF,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvD"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAalD,eAAO,MAAM,IAAI,qBAAqB,CAAA;AACtC,eAAO,MAAM,MAAM,UAAuF,CAAA;AAE1G,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvD"}
@@ -7,7 +7,7 @@ import { mountArchivedRemote } from './rc6/remote-adapter.js';
7
7
  import { Rc6SideChatOverlay } from './rc6/Rc6SideChatOverlay.js';
8
8
  import { Rc6SideChatSessions } from './rc6/sessions-adapter.js';
9
9
  export const name = 'side-chat-client';
10
- export const inject = ['conversation', 'inputTriggers', 'remote', 'sessions', 'slots'];
10
+ export const inject = ['conversation', 'inputTriggers', 'modelDirectories', 'remote', 'sessions', 'slots'];
11
11
  export async function apply(ctx) {
12
12
  const stylesheet = document.createElement('style');
13
13
  stylesheet.textContent = sideChatCss;
@@ -1 +1 @@
1
- {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAKrC,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AACnF,OAAO,EAAE,kCAAkC,EAAE,MAAM,oDAAoD,CAAA;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAG/D,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AAEtF,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAClD,UAAU,CAAC,WAAW,GAAG,WAAW,CAAA;IACpC,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAA;IAC3C,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAA;IAC5C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEhC,MAAM,SAAS,GAAG,GAAkC,CAAA;IACpD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,8BAA8B,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAA;IACvG,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACnD,MAAM,uBAAuB,GAAG,kCAAkC,CAChE,SAAS,EACT,GAAG,EAAE,GAAG,QAAQ,CAAC,6BAA6B,EAAE,CAAA,CAAC,CAAC,CACnD,CAAA;IACD,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3F,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,EAAE;KACV,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;QAC5B,CAAC;gBAAS,CAAC;YACT,uBAAuB,EAAE,CAAA;YACzB,8BAA8B,EAAE,CAAA;YAChC,aAAa,EAAE,CAAA;YACf,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,UAAU,CAAC,MAAM,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,+BAA+B,CAAC,CAAA;AACrC,CAAC"}
1
+ {"version":3,"file":"apply.js","sourceRoot":"","sources":["../../src/client/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAKrC,OAAO,WAAW,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,0CAA0C,CAAA;AACnF,OAAO,EAAE,kCAAkC,EAAE,MAAM,oDAAoD,CAAA;AACvG,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAG/D,MAAM,CAAC,MAAM,IAAI,GAAG,kBAAkB,CAAA;AACtC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;AAE1G,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAClD,UAAU,CAAC,WAAW,GAAG,WAAW,CAAA;IACpC,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,eAAe,CAAA;IAC3C,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAA;IAC5C,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IAEhC,MAAM,SAAS,GAAG,GAAkC,CAAA;IACpD,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACpD,MAAM,8BAA8B,GAAG,SAAS,CAAC,aAAa,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAA;IACvG,MAAM,QAAQ,GAAG,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAA;IACnD,MAAM,uBAAuB,GAAG,kCAAkC,CAChE,SAAS,EACT,GAAG,EAAE,GAAG,QAAQ,CAAC,6BAA6B,EAAE,CAAA,CAAC,CAAC,CACnD,CAAA;IACD,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC3F,IAAI,EAAE,eAAe;QACrB,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,EAAE;KACV,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IAEtE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,OAAO,EAAE,CAAA;QAC5B,CAAC;gBAAS,CAAC;YACT,uBAAuB,EAAE,CAAA;YACzB,8BAA8B,EAAE,CAAA;YAChC,aAAa,EAAE,CAAA;YACf,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,UAAU,CAAC,MAAM,EAAE,CAAA;QACrB,CAAC;IACH,CAAC,EAAE,+BAA+B,CAAC,CAAA;AACrC,CAAC"}
@@ -1,4 +1,4 @@
1
- import type { ConversationSelection, SessionId, SideChatPromptPart, SideChatWireError } from '../shared/contracts.js';
1
+ import type { ConversationSelection, SessionId, SideChatModelSelection, SideChatPromptPart, SideChatWireError } from '../shared/contracts.js';
2
2
  import type { HostObservable } from '../shared/observable.js';
3
3
  export interface SideChatSessionSnapshot {
4
4
  readonly status: 'idle' | 'running' | 'needs-input' | 'needs-approval' | 'failed' | 'interrupted';
@@ -59,6 +59,8 @@ export interface SideChatClientSessions {
59
59
  currentSessionId(): SessionId | undefined;
60
60
  lastCompletedSeq(parentSessionId: SessionId): number | undefined;
61
61
  selectionIsCurrent(selection: ConversationSelection): boolean;
62
+ sideChatModelPreference(): SideChatModelSelection | undefined;
63
+ rememberSideChatModelPreference(selection: SideChatModelSelection): void;
62
64
  retain(sessionId: SessionId): Promise<SideChatSessionLease>;
63
65
  openSession(sessionId: SessionId): Promise<void>;
64
66
  notify(message: {
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/client/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/client/contracts.ts"],"names":[],"mappings":"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"}
@@ -4,8 +4,8 @@ export { SideChatController } from './side-chat-controller.js';
4
4
  export { buildSideChatPrompt } from './parent-composer/add-to-conversation.js';
5
5
  export { SideChatPanel, type SideChatPanelProps } from './panel/SideChatPanel.js';
6
6
  export { SelectionActions, type SelectionActionsProps } from './selection/SelectionActions.js';
7
- export { captureDomConversationSelection, type SelectionAnchorResolver, type SelectionNodeDescriptor, } from './selection/selection-controller.js';
7
+ export { captureDomConversationSelection, restoreDomConversationSelection, type RestoredConversationSelection, type SelectionAnchorResolver, type SelectionNodeDescriptor, } from './selection/selection-controller.js';
8
8
  export { selectionFitsLimit, summarizeSelection, utf8ByteLength } from './selection/selection-limits.js';
9
9
  export { assertSelectionCurrent, finalizeConversationSelection, normalizeSelectedText, SelectionValidationError, type ConversationSelectionInput, } from './selection/selection-normalizer.js';
10
- export type { ConversationSelection, SelectionFragment, SelectionRect, SideChatState, } from '../shared/contracts.js';
10
+ export type { ConversationSelection, SelectionFragment, SelectionRect, SideChatModelSelection, SideChatState, } from '../shared/contracts.js';
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAC9F,OAAO,EACL,+BAA+B,EAC/B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACxG,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,0BAA0B,GAChC,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,aAAa,GACd,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AAC9F,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,EAC/B,KAAK,6BAA6B,EAClC,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,GAC7B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACxG,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,wBAAwB,EACxB,KAAK,0BAA0B,GAChC,MAAM,qCAAqC,CAAA;AAC5C,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,aAAa,GACd,MAAM,wBAAwB,CAAA"}
@@ -3,7 +3,7 @@ export { SideChatController } from './side-chat-controller.js';
3
3
  export { buildSideChatPrompt } from './parent-composer/add-to-conversation.js';
4
4
  export { SideChatPanel } from './panel/SideChatPanel.js';
5
5
  export { SelectionActions } from './selection/SelectionActions.js';
6
- export { captureDomConversationSelection, } from './selection/selection-controller.js';
6
+ export { captureDomConversationSelection, restoreDomConversationSelection, } from './selection/selection-controller.js';
7
7
  export { selectionFitsLimit, summarizeSelection, utf8ByteLength } from './selection/selection-limits.js';
8
8
  export { assertSelectionCurrent, finalizeConversationSelection, normalizeSelectedText, SelectionValidationError, } from './selection/selection-normalizer.js';
9
9
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,EAAE,aAAa,EAA2B,MAAM,0BAA0B,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAA8B,MAAM,iCAAiC,CAAA;AAC9F,OAAO,EACL,+BAA+B,GAGhC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACxG,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,wBAAwB,GAEzB,MAAM,qCAAqC,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAQhD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAA;AAC9E,OAAO,EAAE,aAAa,EAA2B,MAAM,0BAA0B,CAAA;AACjF,OAAO,EAAE,gBAAgB,EAA8B,MAAM,iCAAiC,CAAA;AAC9F,OAAO,EACL,+BAA+B,EAC/B,+BAA+B,GAIhC,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAA;AACxG,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,qBAAqB,EACrB,wBAAwB,GAEzB,MAAM,qCAAqC,CAAA"}
@@ -0,0 +1,14 @@
1
+ import type { SideChatModelSelection } from '../shared/contracts.js';
2
+ interface ModelPreferenceStorage {
3
+ getItem(key: string): string | null;
4
+ setItem(key: string, value: string): void;
5
+ }
6
+ /** Browser-persistent default shared by every Side Chat in this DSH profile. */
7
+ export declare class SideChatModelPreferences {
8
+ private readonly storage;
9
+ constructor(storage?: ModelPreferenceStorage | undefined);
10
+ get(): SideChatModelSelection | undefined;
11
+ set(selection: SideChatModelSelection): void;
12
+ }
13
+ export {};
14
+ //# sourceMappingURL=model-preference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-preference.d.ts","sourceRoot":"","sources":["../../src/client/model-preference.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAIpE,UAAU,sBAAsB;IAC9B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1C;AAgCD,gFAAgF;AAChF,qBAAa,wBAAwB;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,GAAE,sBAAsB,GAAG,SAAiC;IAEhG,GAAG,IAAI,sBAAsB,GAAG,SAAS;IAYzC,GAAG,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;CAS7C"}
@@ -0,0 +1,60 @@
1
+ const STORAGE_KEY = 'dsh-side-chat:model-preference:v1';
2
+ function browserLocalStorage() {
3
+ if (typeof window === 'undefined')
4
+ return;
5
+ try {
6
+ return window.localStorage;
7
+ }
8
+ catch {
9
+ return;
10
+ }
11
+ }
12
+ function modelSelection(value) {
13
+ if (typeof value !== 'object' || value === null)
14
+ return;
15
+ const candidate = value;
16
+ if (typeof candidate.provider !== 'string' || candidate.provider === ''
17
+ || typeof candidate.model !== 'string' || candidate.model === ''
18
+ || (candidate.reasoningEffort !== undefined
19
+ && (typeof candidate.reasoningEffort !== 'string' || candidate.reasoningEffort === ''))) {
20
+ return;
21
+ }
22
+ return {
23
+ provider: candidate.provider,
24
+ model: candidate.model,
25
+ ...(candidate.reasoningEffort === undefined ? {} : { reasoningEffort: candidate.reasoningEffort }),
26
+ };
27
+ }
28
+ /** Browser-persistent default shared by every Side Chat in this DSH profile. */
29
+ export class SideChatModelPreferences {
30
+ storage;
31
+ constructor(storage = browserLocalStorage()) {
32
+ this.storage = storage;
33
+ }
34
+ get() {
35
+ if (this.storage === undefined)
36
+ return;
37
+ try {
38
+ const raw = this.storage.getItem(STORAGE_KEY);
39
+ if (raw === null)
40
+ return;
41
+ const parsed = JSON.parse(raw);
42
+ return parsed.version === 1 ? modelSelection(parsed.selection) : undefined;
43
+ }
44
+ catch {
45
+ return;
46
+ }
47
+ }
48
+ set(selection) {
49
+ if (this.storage === undefined)
50
+ return;
51
+ const preference = { version: 1, selection: { ...selection } };
52
+ try {
53
+ this.storage.setItem(STORAGE_KEY, JSON.stringify(preference));
54
+ }
55
+ catch {
56
+ // A denied or full localStorage must not block Side Chat model selection.
57
+ }
58
+ }
59
+ }
60
+ //# sourceMappingURL=model-preference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-preference.js","sourceRoot":"","sources":["../../src/client/model-preference.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,mCAAmC,CAAA;AAYvD,SAAS,mBAAmB;IAC1B,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAM;IACzC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,YAAY,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAM;IACR,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAM;IACvD,MAAM,SAAS,GAAG,KAAwC,CAAA;IAC1D,IAAI,OAAO,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,EAAE;WAClE,OAAO,SAAS,CAAC,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,KAAK,EAAE;WAC7D,CAAC,SAAS,CAAC,eAAe,KAAK,SAAS;eACtC,CAAC,OAAO,SAAS,CAAC,eAAe,KAAK,QAAQ,IAAI,SAAS,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;QAC5F,OAAM;IACR,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,SAAS,CAAC,QAAQ;QAC5B,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,GAAG,CAAC,SAAS,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,CAAC,eAAe,EAAE,CAAC;KACnG,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,OAAO,wBAAwB;IACN;IAA7B,YAA6B,UAA8C,mBAAmB,EAAE;QAAnE,YAAO,GAAP,OAAO,CAA4D;IAAG,CAAC;IAEpG,GAAG;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAM;QACtC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;YAC7C,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAM;YACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA8B,CAAA;YAC3D,OAAO,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,OAAM;QACR,CAAC;IACH,CAAC;IAED,GAAG,CAAC,SAAiC;QACnC,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,OAAM;QACtC,MAAM,UAAU,GAAqB,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,GAAG,SAAS,EAAE,EAAE,CAAA;QAChF,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,0EAA0E;QAC5E,CAAC;IACH,CAAC;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionQuote.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAC/B,2CAiGA"}
1
+ {"version":3,"file":"SelectionQuote.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAErD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAC1B;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,QAAQ,CAAC,UAAU,EAAE,SAAS,kBAAkB,EAAE,CAAA;IAClD,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAA;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;CAC/B,2CAuHA"}
@@ -25,6 +25,23 @@ export function SelectionQuote({ selections, messages, onRemove, }) {
25
25
  if (leaveTimerRef.current !== undefined)
26
26
  window.clearTimeout(leaveTimerRef.current);
27
27
  }, []);
28
+ useEffect(() => {
29
+ if (!expanded)
30
+ return;
31
+ const dismissOutside = (event) => {
32
+ const quote = quoteRef.current;
33
+ const target = event.target;
34
+ if (quote !== null && target instanceof Node && quote.contains(target))
35
+ return;
36
+ if (leaveTimerRef.current !== undefined)
37
+ window.clearTimeout(leaveTimerRef.current);
38
+ leaveTimerRef.current = undefined;
39
+ setHovered(false);
40
+ setExpanded(false);
41
+ };
42
+ document.addEventListener('mousedown', dismissOutside, true);
43
+ return () => { document.removeEventListener('mousedown', dismissOutside, true); };
44
+ }, [expanded]);
28
45
  const constrainDetailsToBoundary = () => {
29
46
  const details = detailsRef.current;
30
47
  const boundary = quoteRef.current?.closest('.dsh-side-chat-panel, [data-composer-seat], [data-chat-flow-kind]');
@@ -43,6 +60,14 @@ export function SelectionQuote({ selections, messages, onRemove, }) {
43
60
  return (_jsxs("section", { ref: quoteRef, className: "dsh-side-chat-quote", "aria-label": messages.selectedPassage, "data-expanded": expanded || undefined, "data-hovered": hovered || undefined, onMouseEnter: () => {
44
61
  keepHoverOpen();
45
62
  constrainDetailsToBoundary();
46
- }, onMouseLeave: closeHoverAfterGrace, onFocusCapture: constrainDetailsToBoundary, children: [_jsxs("div", { className: "dsh-side-chat-quote-chip", children: [_jsxs("button", { type: "button", className: "dsh-side-chat-quote-trigger", "aria-expanded": expanded, "aria-label": `${expanded ? messages.collapse : messages.expand}: ${messages.selectedPassage}`, onClick: () => { setExpanded(value => !value); }, children: [_jsxs("svg", { className: "dsh-side-chat-quote-icon", viewBox: "0 0 24 24", "aria-hidden": "true", children: [_jsx("path", { d: "M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4Z" }), _jsx("path", { d: "M8 8h8M8 12h5" })] }), _jsx("strong", { children: messages.selectionAttachments(selections.length) })] }), onRemove !== undefined && (_jsx("button", { type: "button", className: "dsh-side-chat-quote-remove", "aria-label": messages.removeSelection, onClick: onRemove, children: "\u00D7" }))] }), _jsx("div", { ref: detailsRef, className: "dsh-side-chat-quote-details", role: "tooltip", children: selections.map((selection, index) => (_jsxs("div", { className: "dsh-side-chat-quote-detail", children: [_jsx("div", { className: "dsh-side-chat-quote-details-header", children: _jsxs("strong", { children: [String(index + 1), ". ", messages.selectionPreviewLabel, ":"] }) }), _jsx("pre", { children: selection.text }), selection.comment !== undefined && (_jsxs("div", { className: "dsh-side-chat-quote-comment", children: [_jsxs("strong", { children: [messages.selectionCommentLabel, ":"] }), _jsx("pre", { children: selection.comment })] }))] }, `${String(index)}-${selection.text}`))) })] }));
63
+ }, onMouseLeave: closeHoverAfterGrace, onFocusCapture: constrainDetailsToBoundary, children: [_jsxs("div", { className: "dsh-side-chat-quote-chip", children: [_jsxs("button", { type: "button", className: "dsh-side-chat-quote-trigger", "aria-expanded": expanded, "aria-label": `${expanded ? messages.collapse : messages.expand}: ${messages.selectedPassage}`, onClick: () => {
64
+ if (expanded) {
65
+ if (leaveTimerRef.current !== undefined)
66
+ window.clearTimeout(leaveTimerRef.current);
67
+ leaveTimerRef.current = undefined;
68
+ setHovered(false);
69
+ }
70
+ setExpanded(value => !value);
71
+ }, children: [_jsxs("svg", { className: "dsh-side-chat-quote-icon", viewBox: "0 0 24 24", "aria-hidden": "true", children: [_jsx("path", { d: "M21 15a4 4 0 0 1-4 4H7l-4 4V7a4 4 0 0 1 4-4h10a4 4 0 0 1 4 4Z" }), _jsx("path", { d: "M8 8h8M8 12h5" })] }), _jsx("strong", { children: messages.selectionAttachments(selections.length) })] }), onRemove !== undefined && (_jsx("button", { type: "button", className: "dsh-side-chat-quote-remove", "aria-label": messages.removeSelection, onClick: onRemove, children: "\u00D7" }))] }), _jsx("div", { ref: detailsRef, className: "dsh-side-chat-quote-details", role: "tooltip", children: selections.map((selection, index) => (_jsxs("div", { className: "dsh-side-chat-quote-detail", children: [_jsx("div", { className: "dsh-side-chat-quote-details-header", children: _jsxs("strong", { children: [String(index + 1), ". ", messages.selectionPreviewLabel, ":"] }) }), _jsx("pre", { children: selection.text }), selection.comment !== undefined && (_jsxs("div", { className: "dsh-side-chat-quote-comment", children: [_jsxs("strong", { children: [messages.selectionCommentLabel, ":"] }), _jsx("pre", { children: selection.comment })] }))] }, `${String(index)}-${selection.text}`))) })] }));
47
72
  }
48
73
  //# sourceMappingURL=SelectionQuote.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionQuote.js","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SelectionQuote.js","sourceRoot":"","sources":["../../../src/client/panel/SelectionQuote.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ModelDirectory } from '@deepseek-ai/dsh-client-ui-model-selection/client';
2
+ import type { SideChatModelSelection } from '../../shared/contracts.js';
3
+ import type { SideChatActionResult } from '../contracts.js';
4
+ export interface SideChatModelSelectProps {
5
+ readonly directory: ModelDirectory;
6
+ readonly selection?: SideChatModelSelection | undefined;
7
+ readonly locked: boolean;
8
+ readonly validateInitialSelection?: boolean;
9
+ readonly locale?: 'en' | 'zh-CN';
10
+ readonly onInitialize: (selection: SideChatModelSelection, options: {
11
+ readonly remember: boolean;
12
+ }) => void;
13
+ readonly onSelect: (selection: SideChatModelSelection) => Promise<SideChatActionResult<SideChatModelSelection>>;
14
+ }
15
+ /** Side Chat projection of DSH Web's native composer model selector. */
16
+ export declare function SideChatModelSelect({ directory, selection, locked, validateInitialSelection, locale, onInitialize, onSelect, }: SideChatModelSelectProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=SideChatModelSelect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideChatModelSelect.d.ts","sourceRoot":"","sources":["../../../src/client/panel/SideChatModelSelect.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAA;AAQvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AACvE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAA;AAkE3D,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAA;IAClC,QAAQ,CAAC,SAAS,CAAC,EAAE,sBAAsB,GAAG,SAAS,CAAA;IACvD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,GAAG,OAAO,CAAA;IAChC,QAAQ,CAAC,YAAY,EAAE,CACrB,SAAS,EAAE,sBAAsB,EACjC,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,KACpC,IAAI,CAAA;IACT,QAAQ,CAAC,QAAQ,EAAE,CACjB,SAAS,EAAE,sBAAsB,KAC9B,OAAO,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,CAAA;CAC3D;AAoCD,wEAAwE;AACxE,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,SAAS,EACT,MAAM,EACN,wBAA+B,EAC/B,MAAa,EACb,YAAY,EACZ,QAAQ,GACT,EAAE,wBAAwB,2CAwV1B"}
@@ -0,0 +1,247 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useId, useMemo, useRef, useState, useSyncExternalStore, } from 'react';
3
+ import { IconCheckOutline16, IconChevronDownOutline14, IconChevronRightOutline14, IconWarningOutline16, Toast, } from '@deepseek-ai/dsh-client-ui-primitives';
4
+ const MODEL_MESSAGES = {
5
+ en: {
6
+ selectModel: 'Select model',
7
+ menu: 'Model and reasoning effort',
8
+ model: 'Model',
9
+ effort: 'Effort',
10
+ providerDefault: 'Default',
11
+ loading: 'Refreshing model list…',
12
+ reload: 'Reload',
13
+ emptyModels: 'No models available.',
14
+ emptyEfforts: 'This model provides no reasoning effort levels.',
15
+ aria: (model, effort) => effort === undefined
16
+ ? `Select model, current ${model}`
17
+ : `Select model, current ${model}, reasoning effort ${effort}`,
18
+ operationFailed: message => `Model operation failed: ${message}`,
19
+ groupFailed: (name, message) => `${name} failed to load: ${message}`,
20
+ },
21
+ 'zh-CN': {
22
+ selectModel: '选择模型',
23
+ menu: '模型与推理等级',
24
+ model: '模型',
25
+ effort: '推理等级',
26
+ providerDefault: 'Default',
27
+ loading: '正在刷新模型列表…',
28
+ reload: '重新加载',
29
+ emptyModels: '没有可用的模型。',
30
+ emptyEfforts: '当前模型未提供推理等级。',
31
+ aria: (model, effort) => effort === undefined
32
+ ? `选择模型,当前 ${model}`
33
+ : `选择模型,当前 ${model},推理等级 ${effort}`,
34
+ operationFailed: message => `模型操作失败:${message}`,
35
+ groupFailed: (name, message) => `${name} 加载失败:${message}`,
36
+ },
37
+ };
38
+ function sameModel(selection, provider, model) {
39
+ return selection?.provider === provider && selection.model === model;
40
+ }
41
+ function sameSelection(left, right) {
42
+ return left.provider === right.provider
43
+ && left.model === right.model
44
+ && left.reasoningEffort === right.reasoningEffort;
45
+ }
46
+ function repairSelection(selection, choices, fallback) {
47
+ const choice = choices.find(candidate => sameModel(selection, candidate.group.id, candidate.model.id));
48
+ if (choice === undefined)
49
+ return fallback;
50
+ const reasoning = choice.model.reasoning;
51
+ if (reasoning === undefined)
52
+ return { provider: selection.provider, model: selection.model };
53
+ if (selection.reasoningEffort === undefined
54
+ || reasoning.efforts.some(effort => effort.id === selection.reasoningEffort)) {
55
+ return selection;
56
+ }
57
+ return {
58
+ provider: selection.provider,
59
+ model: selection.model,
60
+ ...(reasoning.defaultEffort === undefined ? {} : { reasoningEffort: reasoning.defaultEffort }),
61
+ };
62
+ }
63
+ /** Side Chat projection of DSH Web's native composer model selector. */
64
+ export function SideChatModelSelect({ directory, selection, locked, validateInitialSelection = true, locale = 'en', onInitialize, onSelect, }) {
65
+ const messages = MODEL_MESSAGES[locale];
66
+ const state = useSyncExternalStore(listener => directory.store.subscribe(listener), () => directory.store.getSnapshot(), () => directory.store.getSnapshot());
67
+ const [open, setOpen] = useState(false);
68
+ const [pane, setPane] = useState('root');
69
+ const [selecting, setSelecting] = useState(false);
70
+ const [toast, setToast] = useState(null);
71
+ const rootRef = useRef(null);
72
+ const triggerRef = useRef(null);
73
+ const itemRefs = useRef([]);
74
+ const initialized = useRef(false);
75
+ const operation = useRef(0);
76
+ const toastSequence = useRef(0);
77
+ const id = useId();
78
+ const choices = useMemo(() => state.groups.flatMap(group => group.models.map(model => ({ group, model }))), [state.groups]);
79
+ const current = selection ?? state.current ?? undefined;
80
+ const currentChoice = choices.find(choice => sameModel(current, choice.group.id, choice.model.id));
81
+ const reasoning = currentChoice?.model.reasoning;
82
+ const effectiveEffort = current?.reasoningEffort ?? reasoning?.defaultEffort;
83
+ const effortLabel = reasoning === undefined
84
+ ? undefined
85
+ : effectiveEffort === undefined
86
+ ? messages.providerDefault
87
+ : reasoning.efforts.find(level => level.id === effectiveEffort)?.name ?? effectiveEffort;
88
+ const effortChoices = useMemo(() => reasoning === undefined
89
+ ? []
90
+ : [
91
+ ...(reasoning.defaultEffort === undefined
92
+ ? [{ key: 'provider-default', effort: undefined, label: messages.providerDefault }]
93
+ : []),
94
+ ...reasoning.efforts.map(effort => ({
95
+ key: `effort:${effort.id}`,
96
+ effort: effort.id,
97
+ label: effort.name,
98
+ ...(effort.description === undefined ? {} : { description: effort.description }),
99
+ })),
100
+ ], [messages.providerDefault, reasoning]);
101
+ const modelLabel = currentChoice?.model.name ?? messages.selectModel;
102
+ const triggerLabel = effortLabel === undefined ? modelLabel : `${modelLabel} · ${effortLabel}`;
103
+ const reload = () => {
104
+ void directory.load().catch(() => undefined);
105
+ };
106
+ useEffect(() => { reload(); }, [directory]);
107
+ useEffect(() => {
108
+ if (initialized.current)
109
+ return;
110
+ if (selection !== undefined && !validateInitialSelection) {
111
+ initialized.current = true;
112
+ return;
113
+ }
114
+ if (state.current === null)
115
+ return;
116
+ const directoryCurrent = {
117
+ provider: state.current.provider,
118
+ model: state.current.model,
119
+ ...(state.current.reasoningEffort === undefined
120
+ ? {}
121
+ : { reasoningEffort: state.current.reasoningEffort }),
122
+ };
123
+ if (selection === undefined) {
124
+ initialized.current = true;
125
+ onInitialize(directoryCurrent, { remember: false });
126
+ return;
127
+ }
128
+ if (state.status !== 'ready')
129
+ return;
130
+ initialized.current = true;
131
+ const repaired = repairSelection(selection, choices, directoryCurrent);
132
+ if (!sameSelection(selection, repaired))
133
+ onInitialize(repaired, { remember: true });
134
+ }, [choices, onInitialize, selection, state.current, state.status, validateInitialSelection]);
135
+ useEffect(() => {
136
+ if (!open)
137
+ return;
138
+ const closeOutside = (event) => {
139
+ if (!rootRef.current?.contains(event.target))
140
+ setOpen(false);
141
+ };
142
+ document.addEventListener('mousedown', closeOutside);
143
+ return () => { document.removeEventListener('mousedown', closeOutside); };
144
+ }, [open]);
145
+ const show = () => {
146
+ setPane('root');
147
+ setOpen(true);
148
+ reload();
149
+ };
150
+ const close = (restoreFocus = false) => {
151
+ setOpen(false);
152
+ setPane('root');
153
+ if (restoreFocus)
154
+ queueMicrotask(() => { triggerRef.current?.focus(); });
155
+ };
156
+ const moveFocus = (offset) => {
157
+ const items = itemRefs.current.filter((item) => item !== null);
158
+ if (items.length === 0)
159
+ return;
160
+ const active = items.findIndex(item => item === document.activeElement);
161
+ items[(Math.max(active, 0) + offset + items.length) % items.length]?.focus();
162
+ };
163
+ const onKeyDown = (event) => {
164
+ if (event.key === 'Escape' && open) {
165
+ event.preventDefault();
166
+ if (pane !== 'root')
167
+ setPane('root');
168
+ else
169
+ close(true);
170
+ return;
171
+ }
172
+ if (!open || (event.key !== 'ArrowDown' && event.key !== 'ArrowUp'))
173
+ return;
174
+ event.preventDefault();
175
+ moveFocus(event.key === 'ArrowDown' ? 1 : -1);
176
+ };
177
+ const onBlur = (event) => {
178
+ if (event.relatedTarget instanceof Node && rootRef.current?.contains(event.relatedTarget))
179
+ return;
180
+ close();
181
+ };
182
+ const submitSelection = async (next) => {
183
+ const generation = ++operation.current;
184
+ setSelecting(true);
185
+ const result = await onSelect(next);
186
+ if (generation !== operation.current)
187
+ return;
188
+ setSelecting(false);
189
+ if (!result.ok) {
190
+ toastSequence.current += 1;
191
+ setToast({
192
+ seq: toastSequence.current,
193
+ text: messages.operationFailed(result.error.message),
194
+ });
195
+ return;
196
+ }
197
+ close(true);
198
+ };
199
+ const chooseModel = (group, model) => {
200
+ if (sameModel(current, group.id, model.id)) {
201
+ close(true);
202
+ return;
203
+ }
204
+ void submitSelection({
205
+ provider: group.id,
206
+ model: model.id,
207
+ ...(model.reasoning?.defaultEffort === undefined
208
+ ? {}
209
+ : { reasoningEffort: model.reasoning.defaultEffort }),
210
+ });
211
+ };
212
+ const chooseEffort = (effort) => {
213
+ if (current === undefined)
214
+ return;
215
+ if (effectiveEffort === effort) {
216
+ close(true);
217
+ return;
218
+ }
219
+ void submitSelection({
220
+ provider: current.provider,
221
+ model: current.model,
222
+ ...(effort === undefined ? {} : { reasoningEffort: effort }),
223
+ });
224
+ };
225
+ itemRefs.current = [];
226
+ let itemIndex = 0;
227
+ const itemRef = () => {
228
+ const index = itemIndex++;
229
+ return (node) => { itemRefs.current[index] = node; };
230
+ };
231
+ return (_jsxs("div", { ref: rootRef, className: "dsh-side-chat-model-root", "data-side-chat-model-select": "", onKeyDown: onKeyDown, onBlur: onBlur, children: [_jsxs("button", { ref: triggerRef, type: "button", className: "dsh-side-chat-model-trigger", "aria-label": messages.aria(modelLabel, effortLabel), "aria-haspopup": "menu", "aria-expanded": open, "aria-controls": open ? `${id}-menu` : undefined, title: triggerLabel, disabled: locked, onClick: () => { if (open)
232
+ close();
233
+ else
234
+ show(); }, children: [_jsx("span", { className: "dsh-side-chat-model-trigger-label", children: modelLabel }), effortLabel !== undefined && (_jsx("span", { className: "dsh-side-chat-model-trigger-effort", children: effortLabel })), _jsx(IconChevronDownOutline14, { className: `dsh-side-chat-model-chevron${open ? ' dsh-side-chat-model-chevron-open' : ''}` })] }), open && (_jsxs("div", { id: `${id}-menu`, className: "dsh-side-chat-model-menu", role: "menu", "aria-label": messages.menu, "aria-busy": state.status === 'loading' || selecting, children: [pane === 'root' && (_jsxs(_Fragment, { children: [_jsxs("button", { ref: itemRef(), type: "button", role: "menuitem", className: "dsh-side-chat-model-cell", onClick: () => { setPane('model'); }, children: [_jsx("span", { className: "dsh-side-chat-model-cell-label", children: messages.model }), _jsx("span", { className: "dsh-side-chat-model-cell-value", children: modelLabel }), _jsx(IconChevronRightOutline14, { className: "dsh-side-chat-model-cell-chevron" })] }), reasoning !== undefined && (_jsxs("button", { ref: itemRef(), type: "button", role: "menuitem", className: "dsh-side-chat-model-cell", onClick: () => { setPane('effort'); }, children: [_jsx("span", { className: "dsh-side-chat-model-cell-label", children: messages.effort }), _jsx("span", { className: "dsh-side-chat-model-cell-value", children: effortLabel }), _jsx(IconChevronRightOutline14, { className: "dsh-side-chat-model-cell-chevron" })] }))] })), pane === 'model' && (_jsxs(_Fragment, { children: [state.status === 'loading' && (_jsx("div", { className: "dsh-side-chat-model-status", children: messages.loading })), state.error !== null && (_jsxs("div", { className: "dsh-side-chat-model-error", role: "alert", children: [_jsx("span", { children: messages.operationFailed(state.error) }), _jsx("button", { type: "button", className: "dsh-side-chat-model-retry", onClick: reload, children: messages.reload })] })), state.failures.map(failure => (_jsxs("div", { className: "dsh-side-chat-model-warning", children: [_jsx("span", { children: messages.groupFailed(failure.name, failure.message) }), _jsx("button", { type: "button", className: "dsh-side-chat-model-retry", onClick: reload, children: messages.reload })] }, failure.id))), _jsx("div", { className: "dsh-side-chat-model-groups scrollable", children: state.groups.map(group => {
235
+ const headingId = `${id}-${group.id}`;
236
+ return (_jsxs("section", { role: "group", "aria-labelledby": headingId, className: "dsh-side-chat-model-group", children: [_jsx("div", { id: headingId, className: "dsh-side-chat-model-group-title", children: group.name }), group.models.map(model => {
237
+ const selected = sameModel(current, group.id, model.id);
238
+ return (_jsxs("button", { ref: itemRef(), type: "button", role: "menuitemradio", "aria-checked": selected, className: `dsh-side-chat-model-option${selected ? ' dsh-side-chat-model-selected' : ''}`, title: model.name, disabled: selecting, onClick: () => { chooseModel(group, model); }, children: [_jsxs("span", { className: "dsh-side-chat-model-option-copy", children: [_jsx("span", { className: "dsh-side-chat-model-name", children: model.name }), model.description !== undefined && (_jsx("span", { className: "dsh-side-chat-model-description", children: model.description }))] }), _jsx("span", { className: "dsh-side-chat-model-check", children: selected ? _jsx(IconCheckOutline16, {}) : null })] }, model.id));
239
+ })] }, group.id));
240
+ }) }), state.status === 'ready' && choices.length === 0 && (_jsx("div", { className: "dsh-side-chat-model-empty", children: messages.emptyModels }))] })), pane === 'effort' && (effortChoices.length === 0
241
+ ? _jsx("div", { className: "dsh-side-chat-model-empty", children: messages.emptyEfforts })
242
+ : effortChoices.map(level => {
243
+ const selected = effectiveEffort === level.effort;
244
+ return (_jsxs("button", { ref: itemRef(), type: "button", role: "menuitemradio", "aria-checked": selected, className: `dsh-side-chat-model-option${selected ? ' dsh-side-chat-model-selected' : ''}`, disabled: selecting, onClick: () => { chooseEffort(level.effort); }, children: [_jsxs("span", { className: "dsh-side-chat-model-option-copy", children: [_jsx("span", { className: "dsh-side-chat-model-name", children: level.label }), level.description !== undefined && (_jsx("span", { className: "dsh-side-chat-model-description", children: level.description }))] }), _jsx("span", { className: "dsh-side-chat-model-check", children: selected ? _jsx(IconCheckOutline16, {}) : null })] }, level.key));
245
+ }))] })), toast !== null && (_jsx(Toast, { text: toast.text, icon: _jsx(IconWarningOutline16, {}), anchor: rootRef.current?.closest('[data-composer-card]') ?? null, onDone: () => { setToast(null); } }, toast.seq))] }));
246
+ }
247
+ //# sourceMappingURL=SideChatModelSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SideChatModelSelect.js","sourceRoot":"","sources":["../../../src/client/panel/SideChatModelSelect.tsx"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ export interface SideChatPanelProps {
5
5
  readonly state: SideChatState;
6
6
  readonly locale?: 'en' | 'zh-CN';
7
7
  readonly embeddedConversation?: ReactNode;
8
+ readonly modelControl?: ReactNode;
8
9
  readonly onDraftChange: (draft: string) => void;
9
10
  readonly onFirstSend: (question: string) => Promise<SideChatActionResult<void>>;
10
11
  readonly onClose: () => Promise<SideChatActionResult<void>>;
@@ -12,5 +13,5 @@ export interface SideChatPanelProps {
12
13
  readonly onFocusParent: () => void;
13
14
  readonly onRemoveSelection?: () => void;
14
15
  }
15
- export declare function SideChatPanel({ state, locale, embeddedConversation, onDraftChange, onFirstSend, onClose, onRetry, onFocusParent, onRemoveSelection, }: SideChatPanelProps): import("react/jsx-runtime").JSX.Element;
16
+ export declare function SideChatPanel({ state, locale, embeddedConversation, modelControl, onDraftChange, onFirstSend, onClose, onRetry, onFocusParent, onRemoveSelection, }: SideChatPanelProps): import("react/jsx-runtime").JSX.Element;
16
17
  //# sourceMappingURL=SideChatPanel.d.ts.map