@qwen-code/web-shell 0.24.5-preview.0 → 0.24.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.
Files changed (86) hide show
  1. package/README.md +152 -1
  2. package/dist/code-highlighter.js +4 -0
  3. package/dist/codeHighlighter-pfciSYNN.js +89 -0
  4. package/dist/daemon-react-sdk.js +1 -1
  5. package/dist/index.js +49185 -44478
  6. package/dist/sw.js +1 -1
  7. package/dist/{toolNames-Cnaa5VCB.js → toolNames-C6S4xtsA.js} +7018 -6371
  8. package/dist/transcript.js +11334 -10857
  9. package/dist/types/App.d.ts +18 -3
  10. package/dist/types/App.typecheck.d.ts +6 -0
  11. package/dist/types/ManagedAgentWebShell.d.ts +17 -0
  12. package/dist/types/adapters/toolClassification.d.ts +1 -0
  13. package/dist/types/adapters/transcriptToMessages.d.ts +3 -2
  14. package/dist/types/code-highlighter.d.ts +6 -0
  15. package/dist/types/components/BranchPickerPopover.d.ts +3 -1
  16. package/dist/types/components/ChatEditor.d.ts +2 -0
  17. package/dist/types/components/ChatPane.d.ts +5 -3
  18. package/dist/types/components/ConversationSearch.d.ts +18 -0
  19. package/dist/types/components/GlobalTurnNavigation.d.ts +3 -1
  20. package/dist/types/components/MessageList.d.ts +10 -2
  21. package/dist/types/components/MessageTimestamp.d.ts +4 -1
  22. package/dist/types/components/SplitView.d.ts +3 -1
  23. package/dist/types/components/WorkspaceSessionProvider.d.ts +2 -0
  24. package/dist/types/components/artifacts/ArtifactPanel.d.ts +18 -1
  25. package/dist/types/components/artifacts/SideTaskPanel.d.ts +5 -1
  26. package/dist/types/components/artifacts/TrajectoryOverview.d.ts +71 -0
  27. package/dist/types/components/artifacts/TurnCallPromptSelect.d.ts +9 -0
  28. package/dist/types/components/artifacts/TurnCallsPanel.d.ts +38 -0
  29. package/dist/types/components/artifacts/TurnOutputs.d.ts +6 -1
  30. package/dist/types/components/artifacts/loadTurnCalls.d.ts +4 -0
  31. package/dist/types/components/channels/channel-editor-state.d.ts +9 -3
  32. package/dist/types/components/conversation-search-i18n.d.ts +6 -0
  33. package/dist/types/components/dialogs/DeleteSessionDialog.d.ts +9 -1
  34. package/dist/types/components/dialogs/GitDialog.d.ts +6 -2
  35. package/dist/types/components/dialogs/GitWorktreesDialog.d.ts +11 -0
  36. package/dist/types/components/managed/ManagedSessionProgress.d.ts +6 -0
  37. package/dist/types/components/managed/ManagedSessionsPage.d.ts +7 -0
  38. package/dist/types/components/managed/java-managed-agent-client.d.ts +140 -0
  39. package/dist/types/components/managed/java-managed-agent-event-projector.d.ts +5 -0
  40. package/dist/types/components/managed/java-managed-agent-provider.d.ts +8 -0
  41. package/dist/types/components/managed/managed-agent-provider.d.ts +77 -0
  42. package/dist/types/components/managed/managed-session-messages.d.ts +4 -0
  43. package/dist/types/components/managed/managed-session-storage.d.ts +7 -0
  44. package/dist/types/components/managed/use-managed-session.d.ts +12 -0
  45. package/dist/types/components/messages/AuthMessage.d.ts +2 -1
  46. package/dist/types/components/messages/LinkifiedText.d.ts +1 -1
  47. package/dist/types/components/messages/ModelManagementSection.d.ts +3 -2
  48. package/dist/types/components/messages/PlanExecutionView.d.ts +14 -66
  49. package/dist/types/components/messages/SettingsMessage.d.ts +2 -2
  50. package/dist/types/components/messages/ToolFilePreviewButton.d.ts +2 -1
  51. package/dist/types/components/messages/ToolGroup.d.ts +3 -0
  52. package/dist/types/components/messages/codeHighlighter.d.ts +7 -0
  53. package/dist/types/components/messages/taskExecutionIndex.d.ts +80 -0
  54. package/dist/types/components/messages/toolFormatting.d.ts +3 -0
  55. package/dist/types/components/panels/EnvironmentPanel.d.ts +2 -1
  56. package/dist/types/components/sidebar/WebShellSidebar.d.ts +12 -3
  57. package/dist/types/components/sidebar/WorkspaceSection.d.ts +8 -1
  58. package/dist/types/components/workflow/SessionWorkflowCockpit.d.ts +8 -1
  59. package/dist/types/components/workflow/SessionWorkflowInspector.d.ts +8 -1
  60. package/dist/types/components/workflow/session-workflow-model.d.ts +9 -1
  61. package/dist/types/customization.d.ts +9 -1
  62. package/dist/types/daemon/session/actions.d.ts +1 -1
  63. package/dist/types/daemon/session/transcript-page-table.d.ts +1 -1
  64. package/dist/types/daemon/session/turn-navigation-store.d.ts +32 -0
  65. package/dist/types/daemon/session/types.d.ts +3 -1
  66. package/dist/types/hooks/useMessageNavigation.d.ts +12 -0
  67. package/dist/types/hooks/useQueuedPrompts.d.ts +4 -1
  68. package/dist/types/hooks/useTranscriptViewport.d.ts +4 -1
  69. package/dist/types/index.d.ts +17 -1
  70. package/dist/types/live/live-presence.d.ts +14 -0
  71. package/dist/types/live/screen-feed-sampler.d.ts +12 -0
  72. package/dist/types/live/useLiveBrowserHost.d.ts +7 -0
  73. package/dist/types/live/useLiveVoice.d.ts +2 -0
  74. package/dist/types/modelManagement.d.ts +16 -0
  75. package/dist/types/navigation.d.ts +37 -0
  76. package/dist/types/settings.d.ts +1 -0
  77. package/dist/types/trajectory/buildTimeline.d.ts +67 -0
  78. package/dist/types/trajectory/timelineRange.d.ts +27 -0
  79. package/dist/types/trajectory/transcriptPageLoader.d.ts +4 -2
  80. package/dist/types/trajectory/types.d.ts +3 -3
  81. package/dist/types/trajectory/useTrajectoryWindow.d.ts +55 -17
  82. package/dist/types/turnCallsContext.d.ts +12 -0
  83. package/dist/types/utils/navigationUrl.d.ts +21 -0
  84. package/dist/types/utils/popoverRoom.d.ts +22 -0
  85. package/dist/types/utils/sessionPath.d.ts +1 -0
  86. package/package.json +5 -1
package/README.md CHANGED
@@ -46,6 +46,70 @@ daemon 自身。页面的防嵌入策略可能要求使用外部打开。远程
46
46
  浏览器可访问的地址或已有端口转发;预览不会自动把浏览器的 `localhost`
47
47
  转成远程 daemon 地址,也不会转发 daemon 凭据。
48
48
 
49
+ ## 宿主接管产物与代码高亮
50
+
51
+ `onRightPanelOpen` 同步返回 `false` 时继续 Web Shell 原生打开逻辑;返回
52
+ `true` 或 `undefined` 时由宿主接管,保持旧版无返回值回调的行为。
53
+ 未提供回调时仍使用原生行为,`onFileReviewOpen` 保持更高优先级。
54
+ 该回调处理右侧面板请求;原生直接外部打开的记录链接仍走外部链接能力。
55
+
56
+ `filterArtifact(artifact, { turnId, sourceSessionId })` 返回是否展示消息末尾的
57
+ 产物卡片。过滤先于折叠数量计算,并应用于主会话、分屏和嵌套会话。
58
+ 它不删除产物记录、不改变会话产物同步结果,也不隐藏文件变更卡片。
59
+
60
+ ```tsx
61
+ <WebShell
62
+ {...connectionProps}
63
+ onRightPanelOpen={(request) => {
64
+ if (request.kind !== 'artifact') return false;
65
+ openHostPreview(request);
66
+ return true;
67
+ }}
68
+ filterArtifact={(artifact) => artifact.id !== hiddenArtifactId}
69
+ />
70
+ ```
71
+
72
+ 预览组件可从独立入口复用高亮服务,无需导入聊天 UI 或样式:
73
+
74
+ ```ts
75
+ import { highlightCode } from '@qwen-code/web-shell/code-highlighter';
76
+
77
+ const html = await highlightCode({
78
+ code: 'SELECT id FROM orders',
79
+ language: 'sql',
80
+ theme: 'dark', // 或 'light'
81
+ });
82
+ ```
83
+
84
+ 返回高亮 HTML;未知语言、纯文本、超出已有大小限制或高亮失败返回 `null`,
85
+ 宿主应回退为转义的纯文本。服务复用同一模块实例的 Shiki、语言加载和缓存,
86
+ 不暴露可变的高亮器实例。独立 JavaScript realm 或重复打包的模块不共享实例。
87
+ 样式和 HTML 的安全渲染由宿主负责。
88
+
89
+ ## 实时语音中的屏幕共享
90
+
91
+ 无需启动原生 Live Host。在 Web Shell 设置中启用 Live Voice 并配置支持图像输入的
92
+ 实时模型,点击 Live Voice 后会直接接入新的语音会话,再点击「共享屏幕」。
93
+ 浏览器需要支持屏幕共享,
94
+ 并通过 HTTPS 或 localhost 等安全上下文访问;共享范围由浏览器选择器决定。
95
+
96
+ 共享后画面自动作为当前语音对话的持续上下文,无需填写目标或额外开始观察。
97
+ 可直接问「这个是什么意思」「下一步怎么做」。画面与麦克风进入同一条模型连接,
98
+ 画面到达本身不会请求模型回复,也不会启动单独的目标监控模型。
99
+ 画面中的文字仅作观察证据;用户要求执行操作时仍由执行 Agent 处理。
100
+
101
+ 默认每秒采样一帧,包括内容未变的画面;单帧最多 190 KiB,网络拥塞时丢弃过期帧,
102
+ 不会累积截图队列。每张图像紧随新的音频帧发送;麦克风静音或音频暂停期间仅保留最新画面,恢复音频后继续。
103
+ 这是近实时画面上下文,不是逐帧视频分析。模型需要支持所选实时接口的图像输入,
104
+ 图像输入会产生对应的模型用量。截图不会由 Live Feed 保存为图片文件。
105
+
106
+ 停止共享会立即停止后续图像输入,语音可以继续。挂断会关闭面板并释放浏览器麦克风;
107
+ 再次点击 Live Voice 会创建新会话。关闭页面或断开连接也会
108
+ 停止共享。请保持页面和通话开启;浏览器后台节流或休眠可能中断采样,连续 15 秒
109
+ 没有收到画面会停止 Live Feed 并提示重新共享。旧 daemon 继续支持按需截图,
110
+ 界面会明确提示不支持实时画面。停止共享后的历史画面仍可能属于对话上下文,
111
+ 不能当作当前屏幕。默认不会自动解说或主动提醒。
112
+
49
113
  ## 环境要求
50
114
 
51
115
  - React:`^18.0.0 || ^19.0.0`
@@ -131,7 +195,10 @@ Tailwind/shadcn 组件;现有 CSS Modules 的主题色值保持不变。组件
131
195
  变量以及外部配置的 z-index 才能正确继承。
132
196
  - 保留组件上的 `data-web-shell-*` 属性和公开 CSS 变量。接入方可能通过这些属性或
133
197
  `--web-shell-dialog-backdrop-z-index`、`--web-shell-popover-z-index`、
134
- `--web-shell-tooltip-z-index` 等变量定制样式和层级。
198
+ `--web-shell-tooltip-z-index` 等变量定制样式和层级。宿主自己的标题栏覆盖在
199
+ shell 之上但并不裁剪它时,必须通过 `--web-shell-popover-safe-top` 声明顶部
200
+ 安全区,向上展开的浮层(输入历史、@ 引用)才能避开它;显式声明 `0px` 表示
201
+ 没有顶部安全区,不会被默认值覆盖。
135
202
 
136
203
  在 `packages/web-shell` 目录添加后续组件,例如:
137
204
 
@@ -357,6 +424,7 @@ const projection = projectChatRecordsToDaemonTranscript(records);
357
424
 
358
425
  | 属性 | 类型 | 说明 |
359
426
  | ---------------------- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
427
+ | `urlNavigation` | `WebShellUrlNavigationOptions` | 可选 URL 管理,含 `basePath`;默认关闭。详见 [URL 导航](#url-导航可选)。 |
360
428
  | `browserNotifications` | `WebShellBrowserNotificationsOptions` | 可选接入通知;`appName` 默认 QwenCode,`iconUrl` 默认内联 PNG(支持 CDN),`defaultEnabled` 默认 false;已保存偏好优先;不传时停用,不重建会话 |
361
429
  | `baseUrl` | `string` | daemon API 地址,未传时使用 `window.location.origin` |
362
430
  | `token` | `string` | daemon API Bearer token |
@@ -367,6 +435,7 @@ const projection = projectChatRecordsToDaemonTranscript(records);
367
435
  | `lockWorkspaceCwd` | `string` | 锁定到指定工作区路径;未注册时自动持久注册,并隐藏其他工作区及添加、移除和选择入口 |
368
436
  | `restartSseOnPrompt` | `boolean` | 每次 prompt 被 daemon 接收后重建存活 SSE 流;流断开时提交 prompt 总会立即重建(与此开关无关);默认关闭 |
369
437
  | `settings` | `WebShellSettingsOptions` | 可选。控制原生 `/settings` 页面的呈现;见 [原生设置呈现](#原生设置呈现)。 |
438
+ | `modelManagement` | `WebShellModelManagementOptions` | 可选。控制 WebShell 内模型新增/删除交互,默认均允许;见 [模型增删交互](#模型增删交互)。 |
370
439
 
371
440
  ### Workspace 会话创建超时
372
441
 
@@ -415,6 +484,10 @@ daemon 参数的完整含义和配置方式见
415
484
  | `onSessionArtifactsChange` | `(change: WebShellSessionArtifactsChange) => void` | Session Artifact 初始恢复或变化后返回当前完整快照与 turn 投影 |
416
485
  | `onAssistantTurnSettled` | `(event: WebShellAssistantTurnSettledEvent) => void` | daemon 权威终态提交后触发;多个 provider 可能重复上报,宿主按 `(sessionId, promptId)` 去重 |
417
486
  | `settings` | `WebShellSettingsOptions` | 可选。控制原生 `/settings` 页面的呈现;见 [原生设置呈现](#原生设置呈现)。 |
487
+ | `showToolCalls` | `boolean` | 是否展示用户消息旁的工具调用入口;默认 `false`,独立页面设置为 `true`。 |
488
+ | `modelManagement` | `WebShellModelManagementOptions` | 可选。控制 WebShell 内模型新增/删除交互,默认均允许;见 [模型增删交互](#模型增删交互)。 |
489
+
490
+ 移动访问二维码入口由 `header.showMobileAccess?: boolean` 控制,默认隐藏,适用于主聊天和分屏页头。独立入口 `main.tsx` 显式设为 `true`,保留本地 Qwen Code 用户的入口。
418
491
 
419
492
  宿主可以通过 `onContextUsageOpen?: (sessionId: string) => void` 接管上下文
420
493
  详情的打开操作:
@@ -591,6 +664,24 @@ daemon 不净化它读到的文件。该配置只从 User / System / SystemDefau
591
664
 
592
665
  设计与验证范围见 [English](../../docs/design/web-shell-settings-allowlists.md) / [简体中文](../../docs/design/web-shell-settings-allowlists.zh-CN.md)。
593
666
 
667
+ ## 模型增删交互
668
+
669
+ 宿主可以保留模型列表和切换,同时关闭 WebShell 内的新增与删除入口:
670
+
671
+ ```tsx
672
+ <WebShellWithProviders
673
+ modelManagement={{ allowAdd: false, allowDelete: false }}
674
+ />
675
+ ```
676
+
677
+ 公共类型 `WebShellModelManagementOptions` 的两个字段独立控制,省略均为 `true`。
678
+ `allowAdd: false` 隐藏新增按钮和 `/auth` 建议,并在主窗口、欢迎页、分屏和侧任务中拦截手动输入的 `/auth` 及其别名 `/connect`、`/login`。输入框提交时,拦截位于宿主 `onSlashCommand` 回调之后、隐藏命令转发之前,宿主回调返回 `true` 即可接管;消息编辑、重试和侧任务初始发送不调用该回调。命令快照就绪后,daemon 命令按解析身份判断,同名项目/用户命令可保留;App 本地 `/auth` 路由仍是配置弹框入口。快照未就绪时,输入框保守拒绝配置命令名称;侧任务保留这类初始提示词等待加载,五秒后提示等待状态,信息到达后重新检查。添加模型弹框无法打开或保存。
679
+ `allowDelete: false` 隐藏模型删除按钮并阻止删除动作。模型列表、当前标识、选择、`/model`、参数编辑及会话 `/delete` 保持原行为。
680
+
681
+ 动态收紧策略会关闭相关弹框或确认,之后的浏览器队列发送读取最新策略。已交给 SDK/daemon 的请求不能由 props 撤销。恢复允许不会重新打开旧弹框。
682
+
683
+ 这仅用于界面防误操作,不是安全权限。daemon API、CLI、配置文件写入和外部模型下发不受影响;`settings.excludeItems` 的呈现策略仍独立生效。
684
+
594
685
  ## Markdown 图表接入
595
686
 
596
687
  `WebShell` 已内置 `markdown-chart` renderer 和 ECharts 运行时。宿主只需将
@@ -696,3 +787,63 @@ Chart/Data 控件、无数据提示和错误提示默认跟随 WebShell 语言
696
787
  | `/btw` | 本地实现 + ACP 透传 | daemon 支持侧边任务时新建侧边任务;否则发送一个不影响主对话的侧边问题。 |
697
788
  | `/fork` | 本地实现 + ACP 透传 | 启动共享当前上下文的后台智能体。 |
698
789
  | `/insight` | ACP 透传 | 查看 insight 相关信息。 |
790
+
791
+ ## 当前会话内容搜索
792
+
793
+ `conversationSearchThreshold` 控制搜索入口的消息数阈值,默认 `10`。
794
+ 当前会话的用户和助手消息数严格超过阈值时显示入口(默认第 11 条起),
795
+ 搜索图标位于左侧会话时间轴下方,采用适配窄栏的小尺寸;时间轴刻度隐藏时同步隐藏搜索入口。
796
+ `WebShell` 和 `WebShellWithProviders` 均支持此 prop,例如
797
+ `<WebShellWithProviders conversationSearchThreshold={20} {...connectionProps} />`。
798
+
799
+ 弹框搜索用户和助手正文(包括代码),点击摘要可定位并高亮对应消息。
800
+ 支持 turn navigation 的 daemon 会分页搜索持久化历史,不受当前可见区域限制;
801
+ 旧 daemon 只能搜索已加载消息,弹框会明确提示。搜索结果最多展示 200 条,
802
+ 超过时可缩小关键词范围。搜索不修改草稿或中断正在进行的回复。
803
+
804
+ ### 宿主定位持久化消息
805
+
806
+ 宿主先通过 `WebShellWithProviders` 的 `sessionId` 和 workspace props 打开目标会话,再调用公开 API:
807
+
808
+ ```tsx
809
+ import { useRef } from 'react';
810
+ import { WebShellWithProviders, type WebShellApi } from '@qwen-code/web-shell';
811
+
812
+ const shellRef = useRef<WebShellApi>(null);
813
+ // 将 shellRef 传给 <WebShellWithProviders shellRef={shellRef} {...connectionProps} />。
814
+ // 会话/历史就绪后,在宿主的结果点击处理函数里调用:
815
+ const result = await shellRef.current?.navigateToMessage({
816
+ sessionId: selectedSessionId,
817
+ recordId: selectedPersistedRecordId,
818
+ signal: abortController.signal,
819
+ });
820
+ ```
821
+
822
+ 公开类型为 `WebShellMessageNavigationRequest`、`WebShellMessageNavigationResult`。
823
+ `recordId` 是持久化用户/助手转录记录 ID,不是渲染消息 ID 或摘要。
824
+ 接口分页加载尚未渲染的历史、激活目标并在随后渲染中滚动高亮,不修改草稿;
825
+ 搜索图标隐藏时也可调用。很旧的目标需要线性扫描历史,找到记录即停止。
826
+
827
+ 结果 `status` 为 `located`、`not_found`、`not_ready`、`session_mismatch`、`unsupported`、
828
+ `cancelled` 或 `error`;`located` 不代表滚动动画已结束。未就绪时宿主须等待会话/视图就绪后再调用。聊天被面板或全页视图覆盖时返回 `not_ready`,宿主应先恢复聊天视图。
829
+ 新请求、会话/工作目录变化、卸载或 AbortSignal 取消会使旧请求失效。
830
+ 现有跨会话搜索接口仅返回会话和摘要,不提供 `recordId`;宿主搜索需补齐记录 ID 后才可精确定位。
831
+
832
+ ## URL 导航(可选)
833
+
834
+ `WebShellWithProviders` 支持 `urlNavigation={{ basePath: '/agentic-code' }}`。
835
+ 独立入口默认启用同一实现,并推断既有部署基础路径(默认根路径)。嵌入组件默认不启用,原有受控
836
+ `sessionId`、`workspaceId`、`workspaceCwd` 和 `sessionContext` 接入保持兼容。
837
+ 启用后,显式初始会话目标 props 优先于 URL,后续目标 props 变化 replace 地址;
838
+ 宿主必须停止自行写 history,避免双重控制。`lockWorkspaceCwd` 仍是宿主约束。
839
+
840
+ 基础路径下支持 `/session/<id>`、`/plugins`、`/channels`、`/scheduled-tasks`、
841
+ `/goals` 和 `/settings`。会话保留原有 `workspace` / `context` 协议,页面仅定位
842
+ 页面,设置不持久化分类或作用域。无关参数(包括宿主的实例参数)和 fragment 保留。
843
+ 主动导航新增历史,重复点击不新增;浏览器前进后退恢复页面和会话。页面来源保存在
844
+ history.state,直接打开或复制到新标签页的页面没有来源时返回空白聊天,不创建会话。
845
+
846
+ 宿主部署必须把基础路径和上述深层路径的文档请求返回宿主 HTML,并保留 API 路由。
847
+ `basePath` 只配置客户端,不创建服务端 rewrite。Qwen daemon 自带五个页面的文档
848
+ GET/HEAD 入口,JSON 请求、子路径和写请求仍走原有鉴权/API。
849
+ 详见[导航协议设计](../../docs/design/web-shell-url-navigation.zh-CN.md)。
@@ -0,0 +1,4 @@
1
+ import { h as e } from "./codeHighlighter-pfciSYNN.js";
2
+ export {
3
+ e as highlightCode
4
+ };
@@ -0,0 +1,89 @@
1
+ import { createHighlighter as f } from "shiki";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Qwen Team
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ const d = ["github-light-default", "github-dark-default"];
8
+ let h = null, u = null;
9
+ const s = /* @__PURE__ */ new Set(), l = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set(), H = 128, a = /* @__PURE__ */ new Map();
10
+ function g(t, e, n) {
11
+ return `${e}\0${n}\0${t}`;
12
+ }
13
+ function w(t, e) {
14
+ if (a.size >= H) {
15
+ const n = a.keys().next().value;
16
+ n !== void 0 && a.delete(n);
17
+ }
18
+ a.set(t, e);
19
+ }
20
+ function C(t, e, n) {
21
+ return a.get(g(t, e, n)) ?? null;
22
+ }
23
+ function y() {
24
+ return h || (h = f({
25
+ langs: [],
26
+ themes: d
27
+ }).then((t) => (u = t, t)).catch((t) => {
28
+ throw h = null, t;
29
+ })), h;
30
+ }
31
+ async function L(t) {
32
+ const e = await y();
33
+ if (s.has(t)) return e;
34
+ if (c.has(t))
35
+ throw new Error(`shiki: language "${t}" previously failed to load`);
36
+ let n = l.get(t);
37
+ return n || (n = e.loadLanguage(t).then(() => {
38
+ s.add(t);
39
+ }).catch((i) => {
40
+ throw c.add(t), i;
41
+ }).finally(() => {
42
+ l.delete(t);
43
+ }), l.set(t, n)), await n, e;
44
+ }
45
+ const T = 1e5, m = 2e4;
46
+ function p(t) {
47
+ if (t.length > T) return !0;
48
+ let e = 0;
49
+ const n = t.length;
50
+ for (let i = 0; i <= n; i++)
51
+ if (i === n || t.charCodeAt(i) === 10) {
52
+ if (i - e > m) return !0;
53
+ e = i + 1;
54
+ }
55
+ return !1;
56
+ }
57
+ function A(t, e, n, i = !0) {
58
+ if (u && s.has(e))
59
+ try {
60
+ const r = u.codeToHtml(t, { lang: e, theme: n });
61
+ return i && w(g(t, e, n), r), r;
62
+ } catch (r) {
63
+ return console.warn("[web-shell] sync highlight failed for lang=%s", e, r), null;
64
+ }
65
+ return null;
66
+ }
67
+ async function S({
68
+ code: t,
69
+ language: e,
70
+ theme: n
71
+ }) {
72
+ const i = e.trim().toLowerCase();
73
+ if (!i || i === "text" || i === "plaintext" || p(t))
74
+ return null;
75
+ const r = n === "dark" ? "github-dark-default" : "github-light-default", o = C(t, i, r);
76
+ if (o !== null) return o;
77
+ try {
78
+ return await L(i), A(t, i, r);
79
+ } catch {
80
+ return null;
81
+ }
82
+ }
83
+ export {
84
+ L as a,
85
+ A as b,
86
+ C as g,
87
+ S as h,
88
+ p as i
89
+ };
@@ -1,4 +1,4 @@
1
- import { A as a, D as o, a as n, b as t, c as u, g as i, d as r, i as S, e as c, s as p, f as g, u as P, h as m, j as d, k as A, l as T, m as l, n as D, o as E, p as v, q as O, r as M, t as N, v as k, w as _, x as b, y as L, z as W, B as h, C, E as F, F as G, G as R, H as V, I as f, J as w, K as x, L as y, M as B, N as H, O as I, P as U, Q as j, R as K, S as q, T as z, U as J, V as Q } from "./toolNames-Cnaa5VCB.js";
1
+ import { A as a, D as o, a as n, b as t, c as u, g as i, d as r, i as S, e as c, s as p, f as g, u as P, h as m, j as d, k as A, l as T, m as l, n as D, o as E, p as v, q as O, r as M, t as N, v as k, w as _, x as b, y as L, z as W, B as h, C, E as F, F as G, G as R, H as V, I as f, J as w, K as x, L as y, M as B, N as H, O as I, P as U, Q as j, R as K, S as q, T as z, U as J, V as Q } from "./toolNames-C6S4xtsA.js";
2
2
  import { DAEMON_APPROVAL_MODES as Y } from "@qwen-code/sdk/daemon";
3
3
  export {
4
4
  a as AGENT_TOOL_NAME,