@qilin-agent/client-ui-conversation 3.1.3 → 3.1.4

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/README.i18n.yaml CHANGED
@@ -5,33 +5,33 @@
5
5
  /:
6
6
  en: 0ca51f37788dcbdb
7
7
  zh: 14d73c6bc8d4e17f
8
- /qilin-client-ui-conversation:
9
- en: ea87ff5a8293d022
10
- zh: 5237169f2c26e192
11
- /qilin-client-ui-conversation/summary:
8
+ /qilin-agent-client-ui-conversation:
9
+ en: 885391d4756985e9
10
+ zh: 68184a40aa520e09
11
+ /qilin-agent-client-ui-conversation/summary:
12
12
  en: bac0bf0d7330f3b1
13
13
  zh: 84a895f4b26d8490
14
- /qilin-client-ui-conversation/table-of-contents:
14
+ /qilin-agent-client-ui-conversation/table-of-contents:
15
15
  en: 9c1c4905952fea5e
16
16
  zh: d1506dd6fc1018d1
17
- /qilin-client-ui-conversation/conversation-assembly:
17
+ /qilin-agent-client-ui-conversation/conversation-assembly:
18
18
  en: d8ce61119083b24f
19
19
  zh: cc48467a09417108
20
- /qilin-client-ui-conversation/shell-and-standard-props:
21
- en: 266012fa37373e2b
22
- zh: 18e038296f4599cc
23
- /qilin-client-ui-conversation/temporary-composer-entries:
20
+ /qilin-agent-client-ui-conversation/shell-and-standard-props:
21
+ en: 9f2fbe1117245082
22
+ zh: 48f276dc7bc736e3
23
+ /qilin-agent-client-ui-conversation/temporary-composer-entries:
24
24
  en: f8c9adabf654cc14
25
25
  zh: 67790ddec09a3421
26
- /qilin-client-ui-conversation/model-experience:
26
+ /qilin-agent-client-ui-conversation/model-experience:
27
27
  en: e0a05b73ba3e4318
28
28
  zh: dc85ab8433bb4456
29
- /qilin-client-ui-conversation/model-experience/kv-cache-effect:
29
+ /qilin-agent-client-ui-conversation/model-experience/kv-cache-effect:
30
30
  en: 9f4e0da7c8addf88
31
31
  zh: 1a33d9981af75643
32
- /qilin-client-ui-conversation/known-limitations-and-deferred-work:
32
+ /qilin-agent-client-ui-conversation/known-limitations-and-deferred-work:
33
33
  en: 38d243630d0e4c38
34
34
  zh: a58cdc35b664020b
35
- /qilin-client-ui-conversation/known-limitations-and-deferred-work/dev-note:
35
+ /qilin-agent-client-ui-conversation/known-limitations-and-deferred-work/dev-note:
36
36
  en: e67f633dc6fe7773
37
37
  zh: e88aeb617ffb74ea
package/README.md CHANGED
@@ -64,7 +64,7 @@ Active transcripts in the main occurrence expose content-width drag handles in t
64
64
 
65
65
  The resident composer survives no-Session and Session transitions. Whitespace hides its placeholder; a whitespace-only draft without attachments cannot be sent. The no-Session state keeps the same composer surface mounted but inert while the Workspace picker connects a blank Session. The surface is a shell-owned Lexical editor: reference chips are atomic decorator nodes carrying the owner's serialization identity (submission expands them through the owner codec), claimed slash commands stay styled leading text, folder text references carry the folder glyph as an icon prefix, and the draft's clipboard projection is mirrored into the per-Session Conversation store. QueueDock reads `next-turn` directly from the Session `inbox` projection, including cold recovered messages. Queue operations address exact queue occurrences through the scoped `ctx.conversation` service; queue previews render sent text through the shared inline reference projection from `ui-primitives` (wire session forms fold to their label) and show local or durable images and files in original attachment order. Images use thumbnails; files use compact name-and-size cards. An edit exposes the literal sent text, and durable thumbnails resolve through the session image URL cache. Busy Enter behavior is stored in the Host-backed `ui-conversation` settings namespace. The composer keymap arbitrates the trigger menu's keys through the slash pipeline — Tab settles the highlighted completion (or drills a drillable one), Escape and Shift+Tab leave the menu without settling — and leaves every other key to the editor. An overlay that takes the keyboard hands it back through `SessionInput.focus()`, which rides Lexical's own focus so the caret returns where the draft left it rather than at the start.
66
66
 
67
- Default sends commit optimistically: Enter clears the draft, occurrence table, and undo history in the same transaction, keeps the composer in `plain`, and runs the send as a detached attempt, so typing and further sends continue during the flight. `sendSession` registers a Session submission echo (`session.beginSubmission`) with the delivery mode before serializing, preserving selected image and file order in `pendingSubmissions`; Session derives the placement from that mode and its current running state, so idle sends use the transcript, busy Queue sends use QueueDock, and busy Steer sends use the pending-steering surface. It then yields one paint, encodes images through the browser's native `FileReader` data-URL path, and cites staged file receipts. Command submissions use the same receipts for generic files, so sending `/goal` or `/plan` never reads those browser files again. The prompt reuses the submission `requestId`; queue and history observation by that `rpcId` retires the echo once. Concurrent failures are restored together in submission order until the user edits the restored content; command submissions keep the frozen `submitting` phase. Detached attempts retain their attachment ids through admission and Session scope disposal. An observed retirement immediately exposes each image preview through the durable cache, replaces it with the canonical URL after fetching the admitted attachment, revokes each URL after its use ends, and releases file cards. Selected generic files enter one FIFO background-upload queue; `maxConcurrentFileUploads` defaults to two active Worker transports, the Conversation service retains queued and active operations plus byte progress across Session navigation, and removing a draft skips its queued transfer or aborts its active transport. Continuable subagents disable attachment intake and skip local echoes because their transport does not preserve the browser request id.
67
+ Default sends commit optimistically: Enter clears the draft, occurrence table, and undo history in the same transaction, keeps the composer in `plain`, and runs the send as a detached attempt, so typing and further sends continue during the flight. `sendSession` registers a Session submission echo (`session.beginSubmission`) with the delivery mode before serializing, preserving selected image and file order in `pendingSubmissions`; Session derives the placement from that mode and its current running state, so idle sends use the transcript, busy Queue sends use QueueDock, and busy Steer sends use the pending-steering surface. It then yields one paint, encodes images through the browser's native `FileReader` data-URL path, and cites staged file receipts. Command submissions use the same receipts for generic files, so sending `/goal` or `/plan` never reads those browser files again. The prompt reuses the submission `requestId`; queue and history observation by that `rpcId` retires the echo once. Concurrent failures are restored together in submission order until the user edits the restored content; command submissions keep the frozen `submitting` phase. Detached attempts retain their attachment ids through admission and Session scope disposal. An observed retirement immediately exposes each image preview through the durable cache, replaces it with the canonical URL after fetching the admitted attachment, revokes each URL after its use ends, and releases file cards. Selected generic files enter one FIFO background-upload queue; `maxConcurrentFileUploads` defaults to two active Worker transports, the Conversation service retains queued and active operations plus byte progress across Session navigation, and removing a draft skips its queued transfer or aborts its active transport. Continuable subagents accept pasted and dropped PNG, JPEG, WebP, and GIF images with the same projected limits; a batch containing a generic file or unsupported image format is refused before intake, and they skip local echoes because their transport does not preserve the browser request id.
68
68
 
69
69
  Queued submission echoes show “Sending…” beside disabled edit, remove, and steer buttons; a collapsed dock keeps the sending status in its header. A matching Host queue row replaces the echo and enables each action according to its normal text-content and running-state requirements. Prompt acknowledgement alone does not enable queue actions. A failed submission removes its echo and displays an error; the composer restores the failed draft when it is empty or still contains the previous automatic restoration, preserving subsequently typed text.
70
70
 
package/README.zh.md CHANGED
@@ -64,11 +64,11 @@ Session 首次绑定或缓存的 Session 成为 current 时,shell 会在渲染
64
64
 
65
65
  常驻 composer 在无 Session 与有 Session 之间保持挂载。输入空白字符会隐藏占位提示;没有附件的纯空白草稿无法发送。无 Session 时,同一个编辑器表面保持 inert,Workspace picker 连接 blank Session。该表面是 shell 所有的 Lexical 编辑器:引用 chip 是携带 owner 序列化身份的原子 decorator 节点(提交时经 owner codec 展开),已认领的 slash command 保持为带样式的行首文本,文件夹文本引用以图标前缀携带文件夹图形,草稿的剪贴板投影镜像到逐 Session Conversation store。QueueDock 直接从 Session 的 `inbox` 投影读取 `next-turn`,包含从冷状态恢复的消息。Queue 操作通过 scoped `ctx.conversation` service 寻址准确的 queue occurrence;queue 预览经 `ui-primitives` 的共享行内引用投影渲染已发送文本(wire 会话形式折叠为其标签),并按原始附件顺序展示本地或持久化的图片和文件。图片使用缩略图,文件使用紧凑的名称与大小卡片。编辑态展示字面发送文本,持久化缩略图通过会话图片 URL 缓存解析。繁忙时 Enter 行为保存在 Host-backed `ui-conversation` settings namespace。 composer 键盘映射经斜杠流水线裁决触发菜单的按键——Tab 确认高亮补全项(可下钻项则下钻),Escape 与 Shift+Tab 离开菜单且不选定——其余按键交给编辑器自身。 接管键盘的浮层通过 `SessionInput.focus()` 把键盘还回来,该路径走 Lexical 自己的 focus,因此光标回到草稿原来的位置而不是开头。
66
66
 
67
- 默认发送采用乐观提交:Enter 在同一事务里清空草稿、occurrence 表和撤销历史,composer 保持 `plain`,发送作为 detached attempt 运行,发送期间可以继续输入和提交。`sendSession` 在序列化之前用投递模式注册 Session 提交回显(`session.beginSubmission`),并在 `pendingSubmissions` 中保留图片与文件的选择顺序;Session 根据该模式与当前运行状态推导位置,因此空闲发送进入 transcript(文本记录),繁忙时 Queue 进入 QueueDock,繁忙时 Steer 进入 pending-steering 区域。随后让出一帧,图片经浏览器原生 `FileReader` data-URL 路径编码,文件则引用已暂存凭证。命令提交也用同一凭证表示通用文件,因此发送 `/goal` 或 `/plan` 时不会再次读取这些浏览器文件。提示词复用提交 `requestId`;queue 或历史以同一 `rpcId` 被观察后,回显只退休一次。多个并发发送失败时,在用户编辑还原内容之前按提交顺序合并还原;命令提交保持冻结的 `submitting` 阶段。Detached attempt 持有附件 id,直到 admission 完成或 Session scope 销毁。回显以 observed 退休时,durable 图片缓存立即公开每个预览 URL,读取 admitted 附件后用规范化 URL 替换预览,并在各 URL 停止使用后撤销,同时释放文件卡。选中的通用文件进入同一个先进先出的后台上传队列;`maxConcurrentFileUploads` 默认允许两个 Worker transport 同时运行,Conversation 服务在切换 Session 时继续持有排队和运行中的传输操作及字节进度,移除草稿会跳过排队中的传输或中止正在运行的传输。continuable 子代理禁用附件入口,也不创建本地回显,因为其 transport 不保留浏览器 request id。
67
+ 默认发送采用乐观提交:Enter 在同一事务里清空草稿、occurrence 表和撤销历史,composer 保持 `plain`,发送作为 detached attempt 运行,发送期间可以继续输入和提交。`sendSession` 在序列化之前用投递模式注册 Session 提交回显(`session.beginSubmission`),并在 `pendingSubmissions` 中保留图片与文件的选择顺序;Session 根据该模式与当前运行状态推导位置,因此空闲发送进入 transcript(文本记录),繁忙时 Queue 进入 QueueDock,繁忙时 Steer 进入 pending-steering 区域。随后让出一帧,图片经浏览器原生 `FileReader` data-URL 路径编码,文件则引用已暂存凭证。命令提交也用同一凭证表示通用文件,因此发送 `/goal` 或 `/plan` 时不会再次读取这些浏览器文件。提示词复用提交 `requestId`;queue 或历史以同一 `rpcId` 被观察后,回显只退休一次。多个并发发送失败时,在用户编辑还原内容之前按提交顺序合并还原;命令提交保持冻结的 `submitting` 阶段。Detached attempt 持有附件 id,直到 admission 完成或 Session scope 销毁。回显以 observed 退休时,durable 图片缓存立即公开每个预览 URL,读取 admitted 附件后用规范化 URL 替换预览,并在各 URL 停止使用后撤销,同时释放文件卡。选中的通用文件进入同一个先进先出的后台上传队列;`maxConcurrentFileUploads` 默认允许两个 Worker transport 同时运行,Conversation 服务在切换 Session 时继续持有排队和运行中的传输操作及字节进度,移除草稿会跳过排队中的传输或中止正在运行的传输。continuable 子代理允许粘贴和拖入 PNG、JPEG、WebP、GIF 图片,并沿用相同的投影限制;包含通用文件或不支持的图片格式的批次会在进入草稿前整批拒绝。它们不创建本地回显,因为其 transport 不保留浏览器 request id。
68
68
 
69
69
  排队提交的本地回显在禁用的编辑、删除、插话按钮旁显示“发送中…”;折叠后的队列在标题栏保留发送状态。匹配的 Host 队列行替换回显后,各操作按原有的纯文本内容和运行状态要求启用。仅收到提示词确认不会启用队列操作。提交失败会移除回显并显示错误;输入框为空或仍保留上一次自动恢复的内容时,composer 恢复失败草稿,保留用户随后输入的文字。
70
70
 
71
- Send 和 Stop 按钮禁用时不显示提示气泡,轮次结束后由 Stop 切换成禁用 Send 的按钮也遵循此规则。普通 composer 运行时,如果草稿为空或输入不可用,主指针操作保持为 Stop。可提交的文字或附件会把同一位置切换为 Send;清空或成功提交草稿后恢复 Stop。繁忙态 Enter 设置为普通 Session 与可继续 child 选择 Queue 或 Steer 投递,运行中的 Send 按钮按 plain Enter 解析出的同一模式投递;当它在普通消息草稿上可用(没有待上传文件)时,其标签以该模式命名(排队发送或插话发送),因此该设置同时约束 Enter 与按钮,而 Cmd/Ctrl+Enter 仍使用另一模式;空闲会话、空草稿与 `/` 命令行保留普通的 Send 标签([决策](../../../.agents/notes/implemented/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.zh.md))。它们的 QueueDock 行共享 Edit、Remove 与 Steer,空草稿也共享 steer-all 组合键。One-shot child 继续只读。Plan Mode 与 active goal 不改变附件入口。可继续 child 保留独立的 Send 与 Stop 操作,但不提供「文件」菜单项、粘贴或拖放入口;parent 离线时,Send 与 composer 手势锁定,但在线 inbox 的 QueueDock 控制仍可使用([决策](../../../.agents/notes/archived/bug-fix/2026-08-20-running-draft-primary-send.md)、[inbox 控制](../../../.agents/notes/implemented/feature/2026-08-27-continuable-subagent-human-inbox-control.zh.md))。
71
+ Send 和 Stop 按钮禁用时不显示提示气泡,轮次结束后由 Stop 切换成禁用 Send 的按钮也遵循此规则。普通 composer 运行时,如果草稿为空或输入不可用,主指针操作保持为 Stop。可提交的文字或附件会把同一位置切换为 Send;清空或成功提交草稿后恢复 Stop。繁忙态 Enter 设置为普通 Session 与可继续 child 选择 Queue 或 Steer 投递,运行中的 Send 按钮按 plain Enter 解析出的同一模式投递;当它在普通消息草稿上可用(没有待上传文件)时,其标签以该模式命名(排队发送或插话发送),因此该设置同时约束 Enter 与按钮,而 Cmd/Ctrl+Enter 仍使用另一模式;空闲会话、空草稿与 `/` 命令行保留普通的 Send 标签([决策](../../../.agents/notes/implemented/bug-fix/2026-09-04-busy-send-button-follows-enter-setting.zh.md))。它们的 QueueDock 行共享 Edit、Remove 与 Steer,空草稿也共享 steer-all 组合键。One-shot child 继续只读。Plan Mode 与 active goal 不改变附件入口。可继续 child 保留独立的 Send 与 Stop 操作,允许粘贴或拖入图片,但不提供「文件」菜单项;parent 离线时,Send 与 composer 手势锁定,但在线 inbox 的 QueueDock 控制仍可使用([决策](../../../.agents/notes/archived/bug-fix/2026-08-20-running-draft-primary-send.md)、[inbox 控制](../../../.agents/notes/implemented/feature/2026-08-27-continuable-subagent-human-inbox-control.zh.md))。
72
72
 
73
73
  文件标签和可编辑的 skill 引用共用覆盖整个引用的悬停背景,并跟随输入框的行高与文字基线。首次点击立即由已注册的引用来源负责打开预览,包括双击序列的第一次点击。后续点击保留原生文本选择行为;已有非折叠选区时,指针点击不打开预览。预览不改变草稿、剪贴板文本或提交内容。
74
74
 
package/lib/client.js CHANGED
@@ -3912,7 +3912,7 @@ window.__ModuleLoader__.load({
3912
3912
  function readConversationViewPreference(sessionId) {
3913
3913
  if (typeof localStorage === "undefined") return null;
3914
3914
  try {
3915
- const raw = localStorage.getItem(`${CONVERSATION_STORE_KEY}.${sessionId}`);
3915
+ const raw = localStorage.getItem((0, _qilin_agent_client_store.accountScopedName)(`${CONVERSATION_STORE_KEY}.${sessionId}`));
3916
3916
  if (raw === null) return null;
3917
3917
  const stored = JSON.parse(raw);
3918
3918
  if (typeof stored !== "object" || stored === null || !("view" in stored)) return null;
@@ -4398,7 +4398,11 @@ window.__ModuleLoader__.load({
4398
4398
  default: throw new UnsupportedImageMediaTypeError(value);
4399
4399
  }
4400
4400
  }
4401
- /** Whether a browser-declared MIME selects the image draft path (all other files upload verbatim). */
4401
+ /**
4402
+ * Whether a browser-declared MIME selects the image draft path.
4403
+ * @param value - browser-declared MIME string from the picked file.
4404
+ * @returns true when the platform supports previewing and uploading it as an image.
4405
+ */
4402
4406
  function isImageMediaType(value) {
4403
4407
  return value === "image/png" || value === "image/jpeg" || value === "image/webp" || value === "image/gif";
4404
4408
  }
@@ -15299,6 +15303,7 @@ window.__ModuleLoader__.load({
15299
15303
  "terminal.done": "已完成",
15300
15304
  "terminal.noOutput": "无输出",
15301
15305
  "terminal.collapseAria": "收起输出",
15306
+ "terminal.commandLine": "命令第 {n} 行",
15302
15307
  "terminal.expandAria": "展开其余 {n} 行输出",
15303
15308
  "terminal.expandRest": "… 其余 {n} 行",
15304
15309
  "terminal.sendInput": "(发送输入)",
@@ -15681,6 +15686,7 @@ window.__ModuleLoader__.load({
15681
15686
  "terminal.done": "Done",
15682
15687
  "terminal.noOutput": "No output",
15683
15688
  "terminal.collapseAria": "Collapse output",
15689
+ "terminal.commandLine": "Command line {n}",
15684
15690
  "terminal.expandAria": "Expand the remaining {n} output lines",
15685
15691
  "terminal.expandRest": "… {n} more lines",
15686
15692
  "terminal.sendInput": "(send input)",
@@ -17630,7 +17636,7 @@ window.__ModuleLoader__.load({
17630
17636
  */
17631
17637
  function installDraftFilePicker(keyboard, gate, fileInputRef) {
17632
17638
  return keyboard.bindFilePicker({
17633
- available: () => gate.current.canAcceptDrop && fileInputRef.current !== null,
17639
+ available: () => gate.current.canAcceptDrop && fileInputRef.current !== null && !fileInputRef.current.disabled,
17634
17640
  open: () => {
17635
17641
  fileInputRef.current?.click();
17636
17642
  }
@@ -18149,8 +18155,9 @@ window.__ModuleLoader__.load({
18149
18155
  return installDraftWheel(scrollRef);
18150
18156
  }, []);
18151
18157
  const intakeFiles = (0, react.useCallback)((files) => {
18152
- if (subagent !== null || addFiles === void 0 || files.length === 0) return;
18158
+ if (locked || machineBusy || subagent !== null && !continuable || addFiles === void 0 || files.length === 0) return;
18153
18159
  const rejected = (() => {
18160
+ if (continuable && files.some((file) => !isImageMediaType(file.type))) return t("image.unsupportedType");
18154
18161
  if (imageLimits !== void 0) {
18155
18162
  const mediaTypes = imageLimits.mediaTypes;
18156
18163
  const images = files.filter((file) => mediaTypes.includes(file.type));
@@ -18163,14 +18170,17 @@ window.__ModuleLoader__.load({
18163
18170
  })();
18164
18171
  if (rejected !== null) showToast(rejected);
18165
18172
  }, [
18173
+ locked,
18174
+ machineBusy,
18166
18175
  subagent,
18176
+ continuable,
18167
18177
  addFiles,
18168
18178
  attachments,
18169
18179
  imageLimits,
18170
18180
  showToast,
18171
18181
  t
18172
18182
  ]);
18173
- const canAcceptDrop = subagent === null && !locked && !machineBusy && addFiles !== void 0;
18183
+ const canAcceptDrop = (subagent === null || continuable) && !locked && !machineBusy && addFiles !== void 0;
18174
18184
  const fileInputRef = (0, react.useRef)(null);
18175
18185
  const onPickFiles = (e) => {
18176
18186
  const picked = e.target.files === null ? [] : [...e.target.files];
@@ -83,8 +83,9 @@ interface RequestViewBase {
83
83
  startedAt: number;
84
84
  completedAt: number | null;
85
85
  status: 'running' | 'complete' | 'error';
86
+ /** Failure detail; with assistant retry metadata, the last failed attempt even while running or after recovery. */
86
87
  error?: string;
87
- /** Stable provider code for localized presentation of known failures. */
88
+ /** Stable provider code for `error`, including retained attempt failures, for localized presentation. */
88
89
  errorCode?: string;
89
90
  providerMetadata?: AssistantProviderMetadataView;
90
91
  requestConfig?: AssistantRequestConfig;
@@ -177,6 +177,7 @@ export declare const zh: {
177
177
  'terminal.done': string;
178
178
  'terminal.noOutput': string;
179
179
  'terminal.collapseAria': string;
180
+ 'terminal.commandLine': string;
180
181
  'terminal.expandAria': string;
181
182
  'terminal.expandRest': string;
182
183
  'terminal.sendInput': string;
@@ -561,6 +562,7 @@ export declare const en: {
561
562
  'terminal.done': string;
562
563
  'terminal.noOutput': string;
563
564
  'terminal.collapseAria': string;
565
+ 'terminal.commandLine': string;
564
566
  'terminal.expandAria': string;
565
567
  'terminal.expandRest': string;
566
568
  'terminal.sendInput': string;
@@ -183,4 +183,10 @@ export declare class ConversationController extends Service implements IConversa
183
183
  /** Canonical base64 wire form of one browser image file. */
184
184
  private encodeImage;
185
185
  }
186
+ /**
187
+ * Whether a browser-declared MIME selects the image draft path.
188
+ * @param value - browser-declared MIME string from the picked file.
189
+ * @returns true when the platform supports previewing and uploading it as an image.
190
+ */
191
+ export declare function isImageMediaType(value: string): boolean;
186
192
  //# sourceMappingURL=service.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@qilin-agent/client-ui-conversation",
3
3
  "description": "Target-neutral Conversation assembly, shell, composer, queue, and view navigation",
4
- "version": "3.1.3",
4
+ "version": "3.1.4",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -64,38 +64,38 @@
64
64
  "react": "^18.2.0",
65
65
  "react-dom": "^18.2.0",
66
66
  "zod": "^4.4.3",
67
- "@qilin-agent/agent": "3.1.3",
68
- "@qilin-agent/api-session-controller": "3.1.3",
69
- "@qilin-agent/api-workspace-controller": "3.1.3",
70
- "@qilin-agent/attachment": "3.1.3",
71
- "@qilin-agent/api-remotes": "3.1.3",
72
- "@qilin-agent/brand": "3.1.3",
73
- "@qilin-agent/client-file-upload": "3.1.3",
74
- "@qilin-agent/client-locale": "3.1.3",
75
- "@qilin-agent/client-shortcuts": "3.1.3",
76
- "@qilin-agent/client-test-runtime": "3.1.3",
77
- "@qilin-agent/client-ui-layout": "3.1.3",
78
- "@qilin-agent/client-ui-primitives": "3.1.3",
79
- "@qilin-agent/client-store": "3.1.3",
80
- "@qilin-agent/client-ui-session": "3.1.3",
81
- "@qilin-agent/client-ui-settings": "3.1.3",
82
- "@qilin-agent/client-ui-workspace": "3.1.3",
83
- "@qilin-agent/client-ui-slots": "3.1.3",
84
- "@qilin-agent/client-ui-renderer": "3.1.3",
85
- "@qilin-agent/commands": "3.1.3",
86
- "@qilin-agent/goal": "3.1.3",
67
+ "@qilin-agent/agent": "3.1.4",
68
+ "@qilin-agent/api-remotes": "3.1.4",
69
+ "@qilin-agent/api-session-controller": "3.1.4",
70
+ "@qilin-agent/attachment": "3.1.4",
71
+ "@qilin-agent/api-workspace-controller": "3.1.4",
72
+ "@qilin-agent/brand": "3.1.4",
73
+ "@qilin-agent/client-locale": "3.1.4",
74
+ "@qilin-agent/client-test-runtime": "3.1.4",
75
+ "@qilin-agent/client-ui-layout": "3.1.4",
76
+ "@qilin-agent/client-shortcuts": "3.1.4",
77
+ "@qilin-agent/client-ui-primitives": "3.1.4",
78
+ "@qilin-agent/client-ui-renderer": "3.1.4",
79
+ "@qilin-agent/client-ui-session": "3.1.4",
80
+ "@qilin-agent/client-ui-settings": "3.1.4",
81
+ "@qilin-agent/client-store": "3.1.4",
82
+ "@qilin-agent/client-ui-slots": "3.1.4",
83
+ "@qilin-agent/client-ui-workspace": "3.1.4",
84
+ "@qilin-agent/commands": "3.1.4",
85
+ "@qilin-agent/client-file-upload": "3.1.4",
87
86
  "@qilin-agent/kylin": "~4.0.3",
88
- "@qilin-agent/plan-mode": "3.1.3",
89
- "@qilin-agent/llm-retry": "3.1.3",
90
- "@qilin-agent/settings": "3.1.3",
91
- "@qilin-agent/token-meter": "3.1.3",
92
- "@qilin-agent/llm": "3.1.3",
93
- "@qilin-agent/tool-todo": "3.1.3",
94
- "@qilin-agent/session": "3.1.3",
95
- "@qilin-agent/util-crypto": "3.1.3",
96
- "@qilin-agent/util-values": "3.1.3",
97
- "@qilin-agent/util-workspace-path": "3.1.3",
98
- "@qilin-agent/workspace": "3.1.3"
87
+ "@qilin-agent/goal": "3.1.4",
88
+ "@qilin-agent/llm-retry": "3.1.4",
89
+ "@qilin-agent/llm": "3.1.4",
90
+ "@qilin-agent/plan-mode": "3.1.4",
91
+ "@qilin-agent/session": "3.1.4",
92
+ "@qilin-agent/settings": "3.1.4",
93
+ "@qilin-agent/token-meter": "3.1.4",
94
+ "@qilin-agent/util-crypto": "3.1.4",
95
+ "@qilin-agent/util-workspace-path": "3.1.4",
96
+ "@qilin-agent/tool-todo": "3.1.4",
97
+ "@qilin-agent/util-values": "3.1.4",
98
+ "@qilin-agent/workspace": "3.1.4"
99
99
  },
100
100
  "files": [
101
101
  "lib/index.js",