diff --git a/.agents/skills/verify-deepseekbot/features/team-mode.md b/.agents/skills/verify-deepseekbot/features/team-mode.md index 3aa7242048..2933895cf4 100644 --- a/.agents/skills/verify-deepseekbot/features/team-mode.md +++ b/.agents/skills/verify-deepseekbot/features/team-mode.md @@ -13,6 +13,8 @@ - S8 (M3 Host/CLI): `memberDevices { humanId }` is self-scoped without management permission; other targets require `members.manage`. `memberDeviceRevoke { humanId, grantId }` closes only that grant. `current` comes from the authenticated principal. - S9 (M3 Host/CLI): `ownerTransfer { humanId, password }` verifies the current Owner password; the outgoing Owner gets Admin and the target has no roles. The outgoing Owner's paired devices and pending offers cannot inherit the new Owner, including an A→B→A round trip. Transfers require a credential issued by the current Owner and a completed forced change; `owner-transfer-target-unverified` requires current-Owner reset followed by the target's password change. +- S10 (M14 Host/CLI): `channels member-candidates [--query ]` and `channels add-member ` enforce `addMembers` as the explicit calling Human. An invitation opens private/roles/public Channels immediately in list, stream and search. A role-based join exits on role revoke; a named invitation remains. Bots in the Channel do not cause invitation refusal. The Add people picker UI is verified separately by its UI owner. + ## How to get to it (user POV) Owner: Bot settings › Team. Member: open the address under Team › Sign-in › Address in a browser on another machine, sign in, choose a new password, then New (+) › Browse channels. @@ -46,3 +48,6 @@ M3 canonical verification: `roles catalog`, `roles list|create|update|delete`, ` M3 review regressions: suspended Humans have no effective permissions, role deletion requires CLI `--confirm`, and live roster/Channel gates recheck the current Owner after transfer for baselines, queued frames, new publications and SSE. See the [transfer credential rule](../../../../docs/architecture/team-mode.md#m3-owner-transfer-credential-rule) before qualifying ownership changes; clearing `mustChangePassword` alone does not establish eligibility. M10 Host/CLI: `usage members --period week`, `models allowed`, and `roles update --models all|provider/model,provider/model`, including `--as`. `usageByMember` requires `usage.view`; refusal is `permission-required` with `details.permission`. Route selection and the next turn refuse `model-not-allowed` with `details.route`; `get`/`list` mark `modelAllowed: false` without changing the plan. Members receive no credential readiness. The per-member table, Role Models editor and filtered Client pickers belong to the separate UI half. + + +M14 canonical verification: launch `m14-logic` and run `doctor`; enable Team mode, create two members and change their initial passwords through `--as`. Create private and roles Channels as Owner. Use Owner and member `channels member-candidates --query ` and `channels add-member `; verify `channels`, `channel-messages`, `channel-timeline` and `message-search --query ` as the invited member. Open `followChannel` through the authenticated member carrier. Join one roles Channel with `channels join`; invite the other person by name. Revoke both people's matching role with `members roles --set member`: the role-joined person's list/search and stream lose access, the invited person's retain it. Set `--add-members admins` and prove both candidate search and invitation refuse a regular member with `permission-required` / `details.permission: 'addMembers'`. Exercise `--as` for both successes and refusals. Upgrade/restart classification is covered by `packages/core/test/team-channel-membership-migration.test.ts`; see [M14 runtime notes](../../../../docs/architecture/team-mode.md#m14-runtime-invitations-and-membership-basis). Stop the verified task Host and check its process/port release. This logic journey does not qualify rendered Web, installed Desktop, native mobile or Human acceptance. diff --git a/changes/4188-channel-invitations.md b/changes/4188-channel-invitations.md new file mode 100644 index 0000000000..b2ff1b6192 --- /dev/null +++ b/changes/4188-channel-invitations.md @@ -0,0 +1,11 @@ +--- +section: Changed +--- + +## en + +- Channel invitations now grant access regardless of visibility; named invitations survive role revocation, while role-based joins end with their access. The CLI can search people available to add ([#4188](https://github.com/BotHarness/DeepSeekBot/issues/4188)). + +## zh + +- Channel 姓名邀请现在不受可见性限制地授予访问;撤销角色后保留姓名邀请,角色加入则随角色访问撤销而结束。CLI 支持搜索可添加的人([#4188](https://github.com/BotHarness/DeepSeekBot/issues/4188))。 diff --git a/docs/architecture/team-mode.md b/docs/architecture/team-mode.md index 78444e0d1a..17a552ed64 100644 --- a/docs/architecture/team-mode.md +++ b/docs/architecture/team-mode.md @@ -76,3 +76,15 @@ This rule trusts the current Owner's out-of-band delivery to the intended Human. | M12 | Linux Bot execution confinement (hide other spaces and `DSH_HOME`, network namespace); ends the trial notice | M6 | Seek Human feedback after M1 before expanding. + +## M14 runtime: invitations and membership basis + +The 2026-11-15 amendment on spec #4137 supersedes the older Bot audience-containment text above for Channel invitations: there is no Bot co-occupancy refusal. Bot principal inheritance is delivered separately by M7. + +M14 stores `channel_human_members.membership_basis` per Channel/Human. `channelJoin` (including the older `publicChannelJoin`) records `role` for browse-and-join; `channelHumanAdd` records `invited` for a named invitation, including promotion of an existing role join. Repeating Join never downgrades an active invitation. Named invitations grant immediate access to private, role-restricted and public Channels regardless of the person's roles or Host permission rank. Removing a role closes only role-dependent memberships that no longer satisfy any allowed role; the role update and membership exit commit together. Restoring the role permits browsing again but does not silently rejoin. Visibility changes, role deletion and Owner-transfer role resets apply the same rule. Named access survives role changes until the person leaves or is removed. Channel creation and explicit ownership transfer establish named access too; transfer does not remove an outgoing active person's named membership. + +Application-defined Host bridge methods use the trusted explicit `HumanContext`, never an identity from the payload. `channelHumanAdd { channelId, humanId }` accepts a Human ID or username and returns `null`. `channelMemberCandidates { channelId, query?: string }` returns up to 100 `{ humanId, displayName, username: string | null }` records, sorted by display name and Human ID. Query defaults to empty and is limited to 200 characters; it matches display names and usernames. The picker excludes inactive people and current members. Both require the Host Owner, `channels.manageAll`, a joined Channel owner/admin, or a joined member when `addMembers` is `everyone`; other callers receive `permission-required` with `details.permission: 'addMembers'`. Unknown/non-Group Channels refuse `channel-not-found`; unknown/inactive invitees refuse `member-not-found`. Invalid wire inputs refuse `invalid-input`. + +The named `channel-membership-basis` migration is appended after `migration-ledger`. Historic invitation provenance is unavailable. To preserve the former role-revocation boundary, ordinary memberships in role-restricted Groups become `role`, with ineligible members marked left. The Host Owner, Channel owners/admins, DMs and memberships in public/private Groups become `invited`. This conservatively retains existing non-role access and all Owner data; it cannot recover which historic ordinary role-Channel members were invited by name. Re-inviting one by name establishes durable named access. Channel records, messages, read positions and membership history are retained across upgrade and restart. + +The existing shared SQL audience predicate governs lists, stream authorization, search and unread queries. Invitation writes publish through the existing membership change log; role revocation refreshes streams and invalidates list cursors. No new cache, timer, polling loop, dependency or Bot execution path is introduced. The additional basis predicate uses the existing membership primary key; a partial index bounds role-membership lookup by Human. Regression guards keep audience/browse checks at one database read independent of Channel count, bound candidate lookup reads and output to 100, and verify stream closure alongside search/list correctness. Runtime timing remains machine-specific; these structure guards do not claim an end-to-end speedup. diff --git a/docs/architecture/team-mode.zh.md b/docs/architecture/team-mode.zh.md index a981642ec0..e7c4a2953e 100644 --- a/docs/architecture/team-mode.zh.md +++ b/docs/architecture/team-mode.zh.md @@ -32,3 +32,15 @@ Human 在 2026-11-13 完成 Q1–Q35 并确认的目标设计,不代表已实 ## 交付切片 M0 去硬编码 → **M1 首个端到端 tracer**(开启团队模式、创建成员、内网 HTTPS 登录、加入公开 Channel 互发消息、CLI)→ M2 私有 Bot、Tob 与 Activity(M11 之前 Owner 不能查看成员私有内容)→ M3 角色与成员管理 → M4 Channel 可见性与 Human DM → M5 审批 → M6 Workspace → M7 Bot 可见性与角色策略 → M8 移动端 → M9 密码与离职 → M10 用量 → M11 审计 → M12 Linux 执行隔离(结束试用告知)。依赖关系见[英文版](team-mode.md#delivery)。M1 完成后先取得 Human 反馈,再扩展。 + +## M14 运行时:邀请与成员访问依据 + +规格 #4137 在 2026-11-15 的修订取代上文旧的 Bot 受众包含限制:邀请 Human 不因 Channel 里有 Bot 而拒绝;Bot 继承其 principal 访问的实现由 M7 单独交付。 + +`channel_human_members.membership_basis` 按 Channel/Human 保存访问依据。浏览后通过 `channelJoin`(或旧 `publicChannelJoin`)加入记为 `role`;按姓名通过 `channelHumanAdd` 添加记为 `invited`,也可将已有角色加入提升为姓名邀请。重复 Join 不会降低有效邀请。无论 private、roles 或 public,可添加成员的人都能直接授予访问,不比较被邀请者的角色或 Host 权限高低。撤销角色后,不再符合任何允许角色的 `role` 成员在同一事务中退出,流立即关闭,列表和搜索不再显示;恢复角色只恢复浏览资格,不自动重新加入。可见性变更、删除角色和移交 Owner 时的角色重置沿用此规则。姓名邀请一直有效,直到离开或被移除;创建 Channel 和显式移交所有权也授予姓名访问,移交不自动删除原所有者仍有效的姓名成员关系。 + +应用定义的 Host 方法从受信任的显式 `HumanContext` 取得调用者。`channelHumanAdd { channelId, humanId }` 接受 Human ID 或用户名,返回 `null`。`channelMemberCandidates { channelId, query?: string }` 按显示名和 Human ID 排序,最多返回 100 条 `{ humanId, displayName, username: string | null }`;搜索默认为空,最多 200 字符,匹配显示名和用户名,排除非活跃者与现有成员。两者允许 Host Owner、`channels.manageAll`、已加入的 Channel owner/admin,或 `addMembers: 'everyone'` 时已加入的普通成员。缺权返回 `permission-required`,带 `details.permission: 'addMembers'`;未知或非群组 Channel 返回 `channel-not-found`,未知或非活跃目标返回 `member-not-found`,无效输入返回 `invalid-input`。 + +追加的具名迁移为 `channel-membership-basis`(位于 `migration-ledger` 之后)。历史记录无法区分邀请来源,因此 roles 群组的普通成员归为 `role`,已不符合角色的记录标记退出;Host Owner、Channel owner/admin、DM 与 public/private 群组旧成员归为 `invited`。这样保留原角色撤销边界及所有 Owner 数据,但无法还原旧角色群组里哪些普通成员曾按姓名邀请;重新按姓名添加即可建立持久邀请。Channel、消息、已读位置与成员历史不会删除,重启保留分类。 + +列表、流、搜索和未读统一使用既有 SQL 受众检查。邀请沿用成员变更日志;角色撤销刷新流并使列表游标失效。没有新增缓存、计时器、轮询、依赖或 Bot 执行路径。依据检查使用成员主键,按 Human 查询角色成员使用部分索引。回归守卫保持受众/浏览单次数据库读取、候选查询读取次数及最多 100 条结果,并验证搜索、列表和流关闭。结构守卫不代表端到端性能提升。 diff --git a/docs/bot-cli.md b/docs/bot-cli.md index c55de0409c..3473398d7f 100644 --- a/docs/bot-cli.md +++ b/docs/bot-cli.md @@ -2112,3 +2112,13 @@ deepseekbot models allowed [--as ] ``` Tool effect declarations (E1) preserve the existing tool commands and approval outcomes. Full Access, saved rules, Secrets, device targets and Workspace Grants retain their existing checks; no new route or CLI authority is introduced. + +### Channel invitations (M14) + +```sh +deepseekbot channels member-candidates --query Alice +deepseekbot --as bob channels member-candidates --query alice +deepseekbot --as bob channels add-member alice +``` + +Candidate listing returns up to 100 active people outside the Channel, with `humanId`, `displayName` and nullable `username`. Search matches names and usernames. Both commands enforce the calling Human's `addMembers` right, including Channel owner/admin and `channels.manageAll`; refusal is `permission-required` with `details.permission: 'addMembers'`. Invitations grant access immediately for every visibility and survive role revocation. Browse-and-join memberships depend on allowed roles and leave when that access is revoked. See [M14 runtime notes](architecture/team-mode.md#m14-runtime-invitations-and-membership-basis) for upgrade classification. diff --git a/docs/bot-cli.zh.md b/docs/bot-cli.zh.md index 5416e034d7..f0f7d6987c 100644 --- a/docs/bot-cli.zh.md +++ b/docs/bot-cli.zh.md @@ -2053,3 +2053,13 @@ Web 手动检查请求最多等待 25 秒,关闭自检卡片会取消请求。 公网阶段仅对 DNS、网络、超时及 HTTP 429/5xx 短暂失败重试:最多四次,间隔 1/3/6 秒,仍受同一个 20 秒总时限约束。证书或身份失败不重试。每次自检完成后,界面刷新一次账号电脑列表。 工具效果声明(E1)保持既有工具命令与审批结果。Full Access、保存规则、Secrets、设备目标和 Workspace Grant 仍使用原检查;不新增 route 或 CLI 权限。 + +### Channel 邀请(M14) + +```sh +deepseekbot channels member-candidates --query Alice +deepseekbot --as bob channels member-candidates --query alice +deepseekbot --as bob channels add-member alice +``` + +候选查询最多返回 100 位活跃且未加入该 Channel 的人,包含 `humanId`、`displayName` 和可为空的 `username`,可按显示名或用户名搜索。两个命令都检查调用 Human 的 `addMembers` 权限,包括 Channel owner/admin 和 `channels.manageAll`;缺权返回 `permission-required`,带 `details.permission: 'addMembers'`。姓名邀请对所有可见性立即授予访问,撤销角色后仍保留;浏览后加入的角色成员在角色访问撤销时退出。升级分类见 [M14 运行时说明](architecture/team-mode.zh.md#m14-运行时邀请与成员访问依据)。 diff --git a/docs/channel-sidebar/groups.md b/docs/channel-sidebar/groups.md index 3f229d0a94..d67e359954 100644 --- a/docs/channel-sidebar/groups.md +++ b/docs/channel-sidebar/groups.md @@ -16,7 +16,7 @@ The **Work** tab lists the Assignments this group asked its Bots for, newest fir Open the **Members** tab (or expand **Members** in the narrow overlay) to see the Human, participating PersonaBots and the creator marker when present. Click a Bot to open its DM. Its **…** menu offers **Open DM**, **Message attention settings**, and **Remove from group**; removal asks for confirmation. -Click **Invite member** beside the entry title to search for an available Bot and send an invitation. Already-present, paused, or pending-invitation Bots are excluded. The Profile’s **Auto-accept Group invitations** setting determines the result: when enabled an invitation can be accepted immediately; otherwise wait for the Bot to accept or decline. A pending invitation is not membership: check both its result and the actual member list. +Click **Invite a Bot** beside the entry title to search for an available Bot and send an invitation. In Team mode, people who may add members to the Channel also see **Add people**: pick a member and they get access at once, even to a private Channel. Already-present, paused, or pending-invitation Bots are excluded. The Profile’s **Auto-accept Group invitations** setting determines the result: when enabled an invitation can be accepted immediately; otherwise wait for the Bot to accept or decline. A pending invitation is not membership: check both its result and the actual member list. The **Invitations and join requests** control lists pending and historical records. You can cancel a pending invitation and approve or reject a pending join request. Check the member list afterwards to confirm the resulting membership. diff --git a/docs/channel-sidebar/groups.zh.md b/docs/channel-sidebar/groups.zh.md index 78ac41d9ff..ffac141063 100644 --- a/docs/channel-sidebar/groups.zh.md +++ b/docs/channel-sidebar/groups.zh.md @@ -16,7 +16,7 @@ 打开 **成员** 标签页(窄窗口覆盖面板中展开 **成员**),查看 Human、参与的 PersonaBot,以及存在时显示的创建者标记。点击 Bot 可打开私聊;它的 **…** 菜单包含 **打开私聊、消息提醒设置、移出群聊**,移出会要求确认。 -点击标题旁的 **邀请新群员**,搜索可邀请 Bot 并发送邀请。已在群内、暂停或已有待处理邀请的 Bot 不会列为候选。邀请结果由 Profile 的 **自动接受入群邀请** 设置决定:开启时可以直接显示 **已接受**;关闭时等待 Bot 接受或拒绝。待接受邀请不等于已经入群,应核对邀请状态和实际成员列表。 +点击标题旁的 **邀请 Bot**,搜索可邀请的 Bot 并发送邀请。在 Team 模式下,有权向频道添加成员的人还会看到 **添加成员**:选中一位成员后,对方立即获得访问权限,私密频道也一样。已在群内、暂停或已有待处理邀请的 Bot 不会列为候选。邀请结果由 Profile 的 **自动接受入群邀请** 设置决定:开启时可以直接显示 **已接受**;关闭时等待 Bot 接受或拒绝。待接受邀请不等于已经入群,应核对邀请状态和实际成员列表。 **邀请与入群申请** 控件列出待处理和历史记录。可以取消待处理邀请,也可以批准或拒绝待审批入群申请。操作后核对成员列表,确认实际成员关系。 diff --git a/packages/browser/lib/client.js b/packages/browser/lib/client.js index f7242df937..c5ff95756f 100644 --- a/packages/browser/lib/client.js +++ b/packages/browser/lib/client.js @@ -388,6 +388,16 @@ window.__ModuleLoader__.load({ cy: "7", r: "4" }]], + "user-plus": [ + ["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2" }], + ["circle", { + cx: "9", + cy: "7", + r: "4" + }], + ["path", { d: "M19 8v6" }], + ["path", { d: "M22 11h-6" }] + ], bot: [ ["path", { d: "M12 8V4H8" }], ["rect", { diff --git a/packages/browser/lib/client.js.map b/packages/browser/lib/client.js.map index 3bf99e024f..040039565a 100644 --- a/packages/browser/lib/client.js.map +++ b/packages/browser/lib/client.js.map @@ -1 +1 @@ -{"version":3,"file":"client.js","names":["createElement","stylex","space","x1","x2","x3","x4","x5","x6","text","metaSize","metaLine","bodySize","bodyLine","titleSize","titleLine","regular","strong","radius","xs","sm","md","lg","panel","round","border","hairline","focus","size","inlineIcon","icon","row","nav","dialog","small","bodyMax","medium","wide","actionColor","secondary","hover","danger","dangerLabel","color","fg","muted","subtle","divider","borderStrong","selected","navSelected","accent","accentText","onAccent","onDanger","dangerEdge","dangerSoft","warning","warningEdge","warningSoft","success","surface","elevated","base","modal","well","accentTint","ReactElement","ReactNode","stylex","ChannelSidebarIcon","border","color","radius","size","space","text","EmptyState","title","description","action","status","undefined","PanelEmptyState","icon","children","useRef","useCallback","Button","Pill","IconFullscreenOutlineRegular","useState","StateDot","useRef","useCallback","Fragment","createContext","useContext","PrimitiveTooltip","ReactElement","ReactNode","stylex","color","space","text","styles","note","kogj98","kGuDYH","kLWn49","kHjlTd","$$css","inset","k8WAf4","kg3NbH","muted","kMwMTN","subtle","danger","success","warning","NoteTone","Note","tone","children","props","useState","ReactElement","ReactNode","stylex","Button","Note","color","radius","space","text","MissingPackagesAccess","MissingPackagesLabels","missing","manual","install","copy","copied","formatProgressMiB","bytes","toFixed","ProgressLine","percent","label","value","Math","max","min","MissingPackages","command","access","installing","busy","onInstall","labels","children","setCopied","navigator","clipboard","writeText","then","undefined","useState","useRef","useCallback","native","useId","useRef","useId","useState","Input","IconChevronDownOutlineRegular","createPortal","MenuSurface","IconPlusOutlineRegular","NativeMenu","Menu","ComponentProps","createPortal","stylex","useMountedResource","border","space","MenuPoint","x","y","pointerMenuPosition","point","width","height","viewport","top","margin","Number","parseFloat","x4","Math","max","min","PointerMenuProps","Omit","container","Element","align","PointerMenu","document","body","props","mount","HTMLSpanElement","node","menu","querySelector","HTMLElement","originalMaxWidth","getComputedStyle","maxWidth","originalMinWidth","minWidth","place","scale","getBoundingClientRect","cssZoom","currentCSSZoom","undefined","scaleX","scaleY","root","documentElement","clearance","hasAttribute","getPropertyValue","availableWidth","innerWidth","style","Infinity","maxHeight","innerHeight","box","desired","left","observer","ResizeObserver","observe","window","addEventListener","disconnect","removeEventListener","className","ButtonHTMLAttributes","InputHTMLAttributes","ReactElement","ReactNode","stylex","actionColor","border","color","radius","size","space","text","pillStyles","pill","k1xSpc","kGNEyG","kOIVth","ks0D6T","kZKoxP","kg3NbH","kMzoRj","kaIpWk","kWkggS","kMwMTN","kMv6JI","kGuDYH","kLWn49","khDVqt","kkrTdU","kSiTet","kI3sdo","kInvED","$$css","PillButton","children","rest","Omit","HTMLButtonElement","PillFileButton","input","HTMLInputElement","PointerMenu","MenuPoint","useMountedResource","useRef","useState","ReactElement","ReactNode","stylex","IconChevronDownOutlineRegular","pillStyles","color","space","SelectOption","value","Value","label","SelectProps","options","onChange","disabled","align","autoFocus","reselect","Select","open","setOpen","point","setPoint","trigger","HTMLButtonElement","active","mount","node","current","place","rect","getBoundingClientRect","scale","offsetHeight","height","next","x","right","left","y","bottom","Number","parseFloat","x2","previous","resize","ResizeObserver","undefined","observe","document","documentElement","observer","MutationObserver","attributes","attributeFilter","window","addEventListener","disconnect","removeEventListener","close","button","menu","activeElement","closest","queueMicrotask","focused","isConnected","body","contains","focus","preventScroll","find","option","event","stopPropagation","props","pill","map","id","useId","ReactElement","ReactNode","Ref","stylex","border","color","space","text","NARROW","COMPACT","SettingsRows","children","rootRef","HTMLDivElement","SettingsSectionProps","title","description","SettingsSection","id","undefined","SettingsRowProps","control","data","Readonly","Record","SettingsRow","titleId","descriptionId","SettingsValue","useState","useMemo","useSyncExternalStore","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useCallback","Tag","Button","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useSyncExternalStore","useId","useCallback","Tag","Switch","Button","IconFullscreenOutlineRegular"],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.1/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../../client/src/client/channel-sidebar-icon.tsx","../../client/src/client/ds/tokens.stylex.ts","../../client/src/client/ds/empty-state.tsx","../../client/src/client/mounted-resource.ts","../../client/src/client/remote-viewer/tokens.ts","../../client/src/client/remote-viewer/viewer-state.ts","../../client/src/client/remote-viewer/frame-liveness.ts","../../client/src/client/remote-viewer/index.tsx","../../client/src/client/ds/tooltip.tsx","../../client/src/client/telemetry-surface.ts","../../client/src/client/sidebar-card.tsx","../src/client/locale.ts","../src/failure-kinds.ts","../../client/src/client/ds/note.tsx","../../client/src/client/missing-packages.tsx","../src/client/browser-failure.tsx","../../client/src/client/anchored-panel.ts","../../client/src/client/combobox.tsx","../src/client/profile-combobox.tsx","../../client/src/client/appearance-scope.ts","../../client/src/client/appearance-primitives.tsx","../../client/src/client/ds/pointer-menu.tsx","../../client/src/client/ds/pill-button.tsx","../../client/src/client/ds/select.tsx","../../client/src/client/ds/settings-row.tsx","../src/client/settings.tsx","../src/client/profile-browser.tsx","../src/client/daily-browser.tsx","../src/client/borrowed-browser.tsx","../../client/src/client/ds/stylex-css.ts","../src/client/styles.ts","../src/client/access-power-icon.tsx","../src/client/viewer-icons.tsx","../src/client/index.tsx"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","/**\n * Vendored Channel sidebar glyphs from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the matching lucide `dist/esm/icons/*.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { createElement, type ReactElement } from 'react';\n\nconst glyphs: Record][]> = {\n image: [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'm21 15-4-4L7 21' }],\n ],\n 'arrow-left': [\n ['path', { d: 'm12 19-7-7 7-7' }],\n ['path', { d: 'M19 12H5' }],\n ],\n 'chevron-right': [['path', { d: 'm9 18 6-6-6-6' }]],\n store: [\n ['path', { d: 'M15 21v-5a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v5' }],\n [\n 'path',\n {\n d: 'M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244',\n },\n ],\n ['path', { d: 'M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05' }],\n ],\n house: [['path', { d: 'm3 10 9-7 9 7v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z' }]],\n search: [\n ['path', { d: 'm21 21-4.34-4.34' }],\n ['circle', { cx: '11', cy: '11', r: '8' }],\n ],\n hash: [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21' }],\n ],\n 'messages-circle': [\n [\n 'path',\n {\n d: 'M19.95 10.05a7 7 0 011.412 7.872 1 1 0 00-.058.787l.675 2.089a1 1 0 01-1.236 1.168l-2.155-.631a1 1 0 00-.745.06 7 7 0 01-7.793-1.445',\n },\n ],\n [\n 'path',\n {\n d: 'M2.696 12.708a1 1 0 00-.058-.785 7 7 0 113.518 3.473 1 1 0 00-.744-.061l-2.155.63a1 1 0 01-1.236-1.167z',\n },\n ],\n ],\n 'text-quote': [\n ['path', { d: 'M17 5H3' }],\n ['path', { d: 'M21 12H8' }],\n ['path', { d: 'M21 19H8' }],\n ['path', { d: 'M3 12v7' }],\n ],\n brain: [\n ['path', { d: 'M12 18V5' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77' }],\n ],\n file: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5' }],\n ],\n terminal: [\n ['path', { d: 'M12 19h8' }],\n ['path', { d: 'm4 17 6-6-6-6' }],\n ],\n archive: [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8' }],\n ['path', { d: 'M10 12h4' }],\n ],\n 'archive-restore': [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M20 8v11a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'm9 15 3-3 3 3' }],\n ['path', { d: 'M12 12v9' }],\n ],\n 'alarm-clock': [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M12 9v4l2 2' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ],\n 'bell-ring': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8' }],\n ],\n bell: [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ],\n 'bell-off': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05' }],\n ],\n cpu: [\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M17 20v2' }],\n ['path', { d: 'M17 2v2' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M2 17h2' }],\n ['path', { d: 'M2 7h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'M20 17h2' }],\n ['path', { d: 'M20 7h2' }],\n ['path', { d: 'M7 20v2' }],\n ['path', { d: 'M7 2v2' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1' }],\n ],\n 'id-card': [\n ['path', { d: 'M13 19a4 4 0 00-8 0' }],\n ['path', { d: 'M16 10h2' }],\n ['path', { d: 'M16 14h2' }],\n ['circle', { cx: '9', cy: '12', r: '3' }],\n ['rect', { x: '2', y: '5', width: '20', height: '14', rx: '2' }],\n ],\n plug: [\n ['path', { d: 'M12 22v-5' }],\n ['path', { d: 'M15 8V2' }],\n [\n 'path',\n {\n d: 'M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z',\n },\n ],\n ['path', { d: 'M9 8V2' }],\n ],\n ruler: [\n [\n 'path',\n {\n d: 'M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z',\n },\n ],\n ['path', { d: 'm14.5 12.5 2-2' }],\n ['path', { d: 'm11.5 9.5 2-2' }],\n ['path', { d: 'm8.5 6.5 2-2' }],\n ['path', { d: 'm17.5 15.5 2-2' }],\n ],\n compass: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'path',\n {\n d: 'm16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z',\n },\n ],\n ],\n gauge: [\n ['path', { d: 'm12 14 4-4' }],\n ['path', { d: 'M3.34 19a10 10 0 1 1 17.32 0' }],\n ],\n 'user-check': [\n ['path', { d: 'm16 11 2 2 4-4' }],\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ],\n 'shield-check': [\n [\n 'path',\n {\n d: 'M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n upload: [\n ['path', { d: 'M12 3v12' }],\n ['path', { d: 'm17 8-5-5-5 5' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4' }],\n ],\n package: [\n [\n 'path',\n {\n d: 'M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z',\n },\n ],\n ['path', { d: 'M12 22V12' }],\n ['path', { d: 'M3.29 7 12 12l8.71-5' }],\n ['path', { d: 'm7.5 4.27 9 5.15' }],\n ],\n plus: [\n ['path', { d: 'M5 12h14' }],\n ['path', { d: 'M12 5v14' }],\n ],\n user: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '12', cy: '7', r: '4' }],\n ],\n bot: [\n ['path', { d: 'M12 8V4H8' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2' }],\n ['path', { d: 'M2 14h2' }],\n ['path', { d: 'M20 14h2' }],\n ['path', { d: 'M15 13v2' }],\n ['path', { d: 'M9 13v2' }],\n ],\n 'list-checks': [\n ['path', { d: 'M13 5h8' }],\n ['path', { d: 'M13 12h8' }],\n ['path', { d: 'M13 19h8' }],\n ['path', { d: 'm3 17 2 2 4-4' }],\n ['path', { d: 'm3 7 2 2 4-4' }],\n ],\n palette: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor' }],\n ],\n 'image-up': [\n [\n 'path',\n {\n d: 'M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21',\n },\n ],\n ['path', { d: 'm14 19.5 3-3 3 3' }],\n ['path', { d: 'M17 22v-5.5' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ],\n lock: [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4' }],\n ],\n play: [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n },\n ],\n ],\n 'lock-open': [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 9.9-1' }],\n ],\n eye: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n 'eye-off': [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ],\n files: [\n [\n 'path',\n {\n d: 'M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8',\n },\n ],\n [\n 'path',\n {\n d: 'M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z',\n },\n ],\n [\n 'path',\n {\n d: 'M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1',\n },\n ],\n ],\n 'git-branch': [\n [\n 'path',\n {\n d: 'M15 6a9 9 0 0 0-9 9V3',\n },\n ],\n [\n 'circle',\n {\n cx: '18',\n cy: '6',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '6',\n cy: '18',\n r: '3',\n },\n ],\n ],\n 'messages-square': [\n [\n 'path',\n {\n d: 'M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',\n },\n ],\n [\n 'path',\n {\n d: 'M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1',\n },\n ],\n ],\n inbox: [\n [\n 'polyline',\n {\n points: '22 12 16 12 14 15 10 15 8 12 2 12',\n },\n ],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ],\n 'folder-key': [\n [\n 'path',\n {\n d: 'M13 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1.36',\n },\n ],\n [\n 'path',\n {\n d: 'M19 12v6',\n },\n ],\n [\n 'path',\n {\n d: 'M19 14h2',\n },\n ],\n [\n 'circle',\n {\n cx: '19',\n cy: '20',\n r: '2',\n },\n ],\n ],\n users: [\n [\n 'path',\n {\n d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2',\n },\n ],\n [\n 'path',\n {\n d: 'M16 3.128a4 4 0 0 1 0 7.744',\n },\n ],\n [\n 'path',\n {\n d: 'M22 21v-2a4 4 0 0 0-3-3.87',\n },\n ],\n [\n 'circle',\n {\n cx: '9',\n cy: '7',\n r: '4',\n },\n ],\n ],\n 'settings-2': [\n [\n 'path',\n {\n d: 'M14 17H5',\n },\n ],\n [\n 'path',\n {\n d: 'M19 7h-9',\n },\n ],\n [\n 'circle',\n {\n cx: '17',\n cy: '17',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '7',\n cy: '7',\n r: '3',\n },\n ],\n ],\n settings: [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n },\n ],\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '3',\n },\n ],\n ],\n monitor: [\n [\n 'rect',\n {\n width: '20',\n height: '14',\n x: '2',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'line',\n {\n x1: '8',\n x2: '16',\n y1: '21',\n y2: '21',\n },\n ],\n [\n 'line',\n {\n x1: '12',\n x2: '12',\n y1: '17',\n y2: '21',\n },\n ],\n ],\n globe: [\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '10',\n },\n ],\n [\n 'path',\n {\n d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12h20',\n },\n ],\n ],\n 'panel-right': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M15 3v18',\n },\n ],\n ],\n 'panels-top-left': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M3 9h18',\n },\n ],\n [\n 'path',\n {\n d: 'M9 21V9',\n },\n ],\n ],\n 'grip-vertical': [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '9', cy: '5', r: '1' }],\n ['circle', { cx: '9', cy: '19', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['circle', { cx: '15', cy: '19', r: '1' }],\n ],\n star: [\n [\n 'path',\n {\n d: 'M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z',\n },\n ],\n ],\n copy: [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n 'external-link': [\n ['path', { d: 'M15 3h6v6' }],\n ['path', { d: 'M10 14 21 3' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6' }],\n ],\n sun: [\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ],\n moon: [\n [\n 'path',\n {\n d: 'M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401',\n },\n ],\n ],\n crop: [\n ['path', { d: 'M6 2v14a2 2 0 0 0 2 2h14' }],\n ['path', { d: 'M18 22V8a2 2 0 0 0-2-2H2' }],\n ],\n ban: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M4.929 4.929 19.07 19.071' }],\n ],\n x: [\n ['path', { d: 'M18 6 6 18' }],\n ['path', { d: 'm6 6 12 12' }],\n ],\n 'message-square': [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z',\n },\n ],\n ],\n keyboard: [\n ['path', { d: 'M10 8h.01' }],\n ['path', { d: 'M12 12h.01' }],\n ['path', { d: 'M14 8h.01' }],\n ['path', { d: 'M16 12h.01' }],\n ['path', { d: 'M18 8h.01' }],\n ['path', { d: 'M6 8h.01' }],\n ['path', { d: 'M7 16h10' }],\n ['path', { d: 'M8 12h.01' }],\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2' }],\n ],\n smartphone: [\n ['rect', { width: '14', height: '20', x: '5', y: '2', rx: '2', ry: '2' }],\n ['path', { d: 'M12 18h.01' }],\n ],\n 'sliders-horizontal': [\n ['path', { d: 'M10 5H3' }],\n ['path', { d: 'M12 19H3' }],\n ['path', { d: 'M14 3v4' }],\n ['path', { d: 'M16 17v4' }],\n ['path', { d: 'M21 12h-9' }],\n ['path', { d: 'M21 19h-5' }],\n ['path', { d: 'M21 5h-7' }],\n ['path', { d: 'M8 10v4' }],\n ['path', { d: 'M8 12H3' }],\n ],\n info: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M12 16v-4' }],\n ['path', { d: 'M12 8h.01' }],\n ],\n puzzle: [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n },\n ],\n ],\n check: [\n [\n 'path',\n {\n d: 'M20 6 9 17l-5-5',\n },\n ],\n ],\n laptop: [\n [\n 'path',\n {\n d: 'M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z',\n },\n ],\n ['path', { d: 'M20.054 15.987H3.946' }],\n ],\n server: [\n ['rect', { width: '20', height: '8', x: '2', y: '2', rx: '2', ry: '2' }],\n ['rect', { width: '20', height: '8', x: '2', y: '14', rx: '2', ry: '2' }],\n ['line', { x1: '6', x2: '6.01', y1: '6', y2: '6' }],\n ['line', { x1: '6', x2: '6.01', y1: '18', y2: '18' }],\n ],\n building: [\n ['path', { d: 'M12 10h.01' }],\n ['path', { d: 'M12 14h.01' }],\n ['path', { d: 'M12 6h.01' }],\n ['path', { d: 'M16 10h.01' }],\n ['path', { d: 'M16 14h.01' }],\n ['path', { d: 'M16 6h.01' }],\n ['path', { d: 'M8 10h.01' }],\n ['path', { d: 'M8 14h.01' }],\n ['path', { d: 'M8 6h.01' }],\n ['path', { d: 'M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3' }],\n ['rect', { x: '4', y: '2', width: '16', height: '20', rx: '2' }],\n ],\n briefcase: [\n ['path', { d: 'M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16' }],\n ['rect', { width: '20', height: '14', x: '2', y: '6', rx: '2' }],\n ],\n 'flask-conical': [\n [\n 'path',\n {\n d: 'M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2',\n },\n ],\n ['path', { d: 'M6.453 15h11.094' }],\n ['path', { d: 'M8.5 2h7' }],\n ],\n 'gamepad-2': [\n ['line', { x1: '6', x2: '10', y1: '11', y2: '11' }],\n ['line', { x1: '8', x2: '8', y1: '9', y2: '13' }],\n ['line', { x1: '15', x2: '15.01', y1: '12', y2: '12' }],\n ['line', { x1: '18', x2: '18.01', y1: '10', y2: '10' }],\n [\n 'path',\n {\n d: 'M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z',\n },\n ],\n ],\n paintbrush: [\n ['path', { d: 'm14.622 17.897-10.68-2.913' }],\n [\n 'path',\n {\n d: 'M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0z',\n },\n ],\n [\n 'path',\n {\n d: 'M9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15',\n },\n ],\n ],\n 'audio-lines': [\n ['path', { d: 'M2 10v3' }],\n ['path', { d: 'M6 6v11' }],\n ['path', { d: 'M10 3v18' }],\n ['path', { d: 'M14 8v7' }],\n ['path', { d: 'M18 5v13' }],\n ['path', { d: 'M22 10v3' }],\n ],\n 'book-open': [\n ['path', { d: 'M12 5v16' }],\n [\n 'path',\n {\n d: 'M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z',\n },\n ],\n ],\n zap: [\n [\n 'path',\n {\n d: 'M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z',\n },\n ],\n ],\n heart: [\n [\n 'path',\n {\n d: 'M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5',\n },\n ],\n ],\n leaf: [\n [\n 'path',\n {\n d: 'M11 20a10 10 0 0010-10 25.9 25.9 0 00-1.04-7.281 1 1 0 00-1.755-.325C15.833 5.5 13 5.5 9.8 6.1A7 7 0 0011 20',\n },\n ],\n ['path', { d: 'M2 21a5 5 0 012.911-4.544C7.613 15.212 8.351 15.24 11 13' }],\n ],\n phone: [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n },\n ],\n ],\n video: [\n ['path', { d: 'm16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5' }],\n ['rect', { x: '2', y: '6', width: '14', height: '12', rx: '2' }],\n ],\n 'video-off': [\n ['path', { d: 'M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196' }],\n ['path', { d: 'M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n 'phone-off': [\n [\n 'path',\n {\n d: 'M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272',\n },\n ],\n ['path', { d: 'M22 2 2 22' }],\n [\n 'path',\n {\n d: 'M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473',\n },\n ],\n ],\n mic: [\n ['path', { d: 'M12 19v3' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3' }],\n ],\n 'mic-off': [\n ['path', { d: 'M12 19v3' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12' }],\n ],\n tv: [\n ['path', { d: 'm17 2-5 5-5-5' }],\n ['rect', { width: '20', height: '15', x: '2', y: '7', rx: '2' }],\n ],\n};\n\nexport function ChannelSidebarIcon({\n name = 'panels-top-left',\n size = 16,\n}: {\n name?: string | undefined;\n size?: number | string;\n}): ReactElement {\n const nodes = Object.hasOwn(glyphs, name) ? glyphs[name]! : glyphs['panels-top-left']!;\n return (\n \n {nodes.map(([tag, attributes], index) => createElement(tag, { ...attributes, key: index }))}\n \n );\n}\n","import * as stylex from '@stylexjs/stylex';\n\nexport const space = stylex.defineConsts({\n x1: '2px',\n x2: '4px',\n x3: '8px',\n x4: '12px',\n x5: '16px',\n x6: '24px',\n});\n\nexport const text = stylex.defineConsts({\n metaSize: '12px',\n metaLine: '16px',\n bodySize: '13px',\n bodyLine: '20px',\n titleSize: '14px',\n titleLine: '20px',\n regular: '400',\n strong: '500',\n});\n\nexport const radius = stylex.defineConsts({\n xs: 'var(--dsw-radius-xs, 4px)',\n sm: 'var(--dsw-radius-sm, 8px)',\n md: 'var(--dsw-radius-md, 12px)',\n lg: 'var(--dsw-radius-lg, 16px)',\n panel: 'var(--dsw-radius-panel)',\n round: '50%',\n});\n\nexport const border = stylex.defineConsts({\n hairline: '1px',\n focus: 'var(--dsw-focus-ring-width, 2px)',\n});\n\nexport const size = stylex.defineConsts({\n inlineIcon: '26px',\n icon: '28px',\n row: '32px',\n nav: '40px',\n});\n\nexport const dialog = stylex.defineConsts({\n small: 'min(440px, calc(100vw - 32px))',\n bodyMax: 'min(60vh, 520px)',\n medium: 'min(760px, calc(100vw - 32px))',\n wide: 'min(1060px, calc(100vw - 32px))',\n});\n\nexport const actionColor = stylex.defineConsts({\n secondary:\n 'color-mix(in srgb, var(--dsw-alias-label-primary) 8%, var(--dsw-alias-bg-module-platform))',\n hover:\n 'color-mix(in srgb, var(--dsw-alias-label-primary) 13%, var(--dsw-alias-bg-module-platform))',\n danger:\n 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, var(--dsw-alias-bg-module-platform))',\n dangerLabel:\n 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 65%, var(--dsw-alias-label-primary))',\n});\n\nexport const color = stylex.defineConsts({\n fg: 'var(--dsw-alias-label-primary)',\n muted: 'var(--dsw-alias-label-secondary)',\n subtle: 'var(--dsw-alias-label-tertiary)',\n divider: 'var(--dsw-alias-border-l1)',\n border: 'var(--dsw-alias-border-l2)',\n borderStrong: 'var(--dsw-alias-border-l3)',\n hover: 'var(--dsw-alias-interactive-bg-hover)',\n selected: 'var(--dsw-alias-interactive-bg-active)',\n navSelected: 'var(--dsw-specific-sidebar-nav-item-active)',\n accent: 'var(--dsw-alias-state-business-primary)',\n accentText: 'var(--dsw-alias-link)',\n onAccent: 'var(--dsw-alias-label-primary-foreground)',\n danger: 'var(--dsw-alias-state-error-primary)',\n onDanger: 'var(--dsw-alias-label-primary-foreground)',\n dangerEdge: 'var(--dsw-alias-state-error-secondary)',\n dangerSoft: 'var(--dsw-alias-interactive-bg-hover-danger)',\n warning: 'var(--dsw-alias-state-warn-primary)',\n warningEdge: 'var(--dsw-alias-state-warn-secondary)',\n warningSoft: 'var(--dsw-alias-state-warn-tertiary)',\n success: 'var(--dsw-alias-state-success-primary)',\n surface: 'var(--dsw-alias-bg-module-platform)',\n elevated: 'var(--dsw-alias-button-elevated-fill)',\n base: 'var(--dsw-alias-bg-base)',\n modal: 'var(--dsw-alias-bg-layer-2)',\n well: 'var(--dsw-alias-bg-base)',\n accentTint: 'var(--dsw-alias-state-business-tertiary)',\n});\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { ChannelSidebarIcon } from '../channel-sidebar-icon.js';\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: space.x3,\n marginBlock: space.x4,\n paddingBlock: space.x6,\n paddingInline: space.x5,\n borderWidth: border.hairline,\n borderStyle: 'dashed',\n borderColor: color.border,\n borderRadius: radius.md,\n textAlign: 'center',\n },\n panel: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n gap: space.x4,\n padding: space.x5,\n boxSizing: 'border-box',\n textAlign: 'center',\n color: color.muted,\n },\n icon: { width: size.nav, height: size.nav, flexShrink: 0, color: color.subtle },\n title: {\n margin: 0,\n color: color.fg,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n fontWeight: text.strong,\n },\n description: {\n margin: 0,\n maxWidth: '360px',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nexport function EmptyState({\n title,\n description,\n action,\n status = false,\n}: {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly action?: ReactNode;\n readonly status?: boolean;\n}): ReactElement {\n return (\n
\n

{title}

\n {description === undefined ? null : (\n

{description}

\n )}\n {action}\n
\n );\n}\n\nexport function PanelEmptyState({\n icon,\n children,\n action,\n}: {\n readonly icon?: string | undefined;\n readonly children: ReactNode;\n readonly action?: ReactNode;\n}): ReactElement {\n return (\n
\n \n \n \n

{children}

\n {action === undefined ? null :
{action}
}\n
\n );\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","export const BH = {\n labelSecondary: 'var(--dsw-alias-label-secondary)',\n hoverFill: 'var(--dsw-alias-interactive-bg-hover)',\n errorPrimary: 'var(--dsw-alias-state-error-primary)',\n radiusMd: 'var(--dsw-radius-md)',\n labelPrimary: 'var(--dsw-alias-label-primary, #0f1115)',\n labelPrimaryForeground: 'var(--dsw-alias-label-primary-foreground, #ffffff)',\n borderL2: 'var(--dsw-alias-border-l2, #0000001a)',\n borderL3: 'var(--dsw-alias-border-l3, #0000001f)',\n borderL4: 'var(--dsw-alias-border-l4, #00000029)',\n bgBase: 'var(--dsw-alias-bg-base, #ffffff)',\n buttonPrimaryFill: 'var(--dsw-alias-button-primary-fill, #0f1115)',\n buttonElevatedFill: 'var(--dsw-alias-button-elevated-fill, transparent)',\n businessPrimary: 'var(--dsw-alias-state-business-primary, #4176e6)',\n hoverScrim: 'color-mix(in srgb, var(--dsw-alias-bg-base) 35%, transparent)',\n} as const;\n\nexport const VIDEO_SURFACE = {\n background: '#000000',\n spinnerTrack: 'rgba(255, 255, 255, 0.18)',\n spinnerArc: '#ffffff',\n onVideo: '#ffffff',\n} as const;\n","import type { ViewerKey } from './locale.js';\n\nexport type ViewerAction = 'open' | 'collapse';\n\nexport function nextExpanded(action: ViewerAction): boolean {\n return action === 'open';\n}\n\nexport type FramePhase = 'connecting' | 'live' | 'empty';\n\nexport const PHASE_SMOOTH_AFTER = 2;\n\nexport interface SmoothedPhase {\n readonly phase: FramePhase;\n readonly streak: number;\n}\n\nexport function smoothPhase(shown: FramePhase, raw: FramePhase, streak: number): SmoothedPhase {\n if (raw === 'live') return { phase: 'live', streak: 0 };\n if (shown !== 'live') return { phase: raw, streak: 0 };\n const next = streak + 1;\n if (next >= PHASE_SMOOTH_AFTER) return { phase: raw, streak: next };\n return { phase: shown, streak: next };\n}\n\nexport function dotStateFor(phase: FramePhase): 'done' | 'ongoing' | 'error' {\n if (phase === 'live') return 'done';\n if (phase === 'empty') return 'error';\n return 'ongoing';\n}\n\nexport function statusKeyFor(phase: FramePhase, reconnecting: boolean): ViewerKey {\n if (phase === 'live') return 'entry.live';\n if (phase === 'empty') return 'entry.noScreen';\n return reconnecting ? 'entry.reconnecting' : 'entry.connecting';\n}\n\nexport function stopKey(busy: boolean, stopping: boolean): ViewerKey {\n return busy || stopping ? 'entry.stopping' : 'entry.stop';\n}\n\nconst EXIT_REPORT = /^exited code=\\d+$/;\n\nexport function isExitReport(detail: string | undefined): boolean {\n return detail !== undefined && EXIT_REPORT.test(detail);\n}\n","import type { FramePhase } from './viewer-state.js';\n\nexport const EMPTY_AFTER_MISSES = 6;\n\nexport const BUSY_EMPTY_AFTER = 30;\n\nexport const QUIET_TOLERANCE = 4;\n\nexport const QUIET_ABANDON = 120;\n\nexport const LOSS_REMOUNT_AFTER = 3;\n\nexport const MAX_AUTO_RELOAD = 3;\n\nconst STATUS_ELEMENT_ID = 'status-display';\n\nconst BUSY_TEXT = /connecting|reconnect|disconnect|failed|error/i;\n\nexport interface StreamSample {\n readonly sized: boolean;\n readonly busy: boolean;\n readonly signature?: number;\n}\n\nexport interface StreamTracker {\n readonly misses: number;\n readonly busyStreak: number;\n readonly quiet: number;\n readonly lastSignature?: number;\n readonly live?: true;\n}\n\nexport function hashBytes(data: Uint8ClampedArray): number {\n let hash = 0x81_9c_9d_c5;\n for (let index = 0; index < data.length; index += 1) {\n hash ^= data[index] ?? 0;\n hash = Math.imul(hash, 0x01_00_01_93);\n }\n return hash >>> 0;\n}\n\nexport function upstreamBusy(doc: Document | null | undefined): boolean {\n try {\n const element = doc?.getElementById(STATUS_ELEMENT_ID) as HTMLElement | null;\n if (element === null || element === undefined) return false;\n if (element.classList.contains('hidden')) return false;\n return BUSY_TEXT.test(element.textContent ?? '');\n } catch {\n return false;\n }\n}\n\nfunction signatureOf(\n doc: Document,\n surface: HTMLVideoElement | HTMLCanvasElement,\n): number | undefined {\n try {\n const scratch = doc.createElement('canvas');\n scratch.width = 16;\n scratch.height = 16;\n const context = scratch.getContext('2d', { willReadFrequently: true });\n if (context === null) return undefined;\n context.drawImage(surface, 0, 0, 16, 16);\n return hashBytes(context.getImageData(0, 0, 16, 16).data);\n } catch {\n return undefined;\n }\n}\n\nexport function sampleSurface(doc: Document | null | undefined): StreamSample {\n const busy = upstreamBusy(doc);\n let sized = false;\n let signature: number | undefined;\n try {\n const surface = doc?.getElementById('videoCanvas') as\n | HTMLVideoElement\n | HTMLCanvasElement\n | null;\n const videoWidth = (surface as { readonly videoWidth?: unknown } | null)?.videoWidth;\n const canvasWidth = (surface as { readonly width?: unknown } | null)?.width;\n const width =\n typeof videoWidth === 'number'\n ? videoWidth\n : typeof canvasWidth === 'number'\n ? canvasWidth\n : 0;\n sized = surface !== null && surface !== undefined && width > 0;\n if (sized && surface !== null && surface !== undefined && doc !== null && doc !== undefined) {\n signature = signatureOf(doc, surface);\n }\n } catch {\n signature = undefined;\n }\n return signature === undefined ? { sized, busy } : { sized, busy, signature };\n}\nfunction withSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n signature: number | undefined,\n): StreamTracker {\n return signature === undefined ? { ...base } : { ...base, lastSignature: signature };\n}\n\nfunction withPreviousSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n prev: StreamTracker,\n): StreamTracker {\n return prev.lastSignature === undefined\n ? { ...base }\n : { ...base, lastSignature: prev.lastSignature };\n}\n\nexport function shouldRemountLoss(lossStreak: number): boolean {\n return lossStreak >= LOSS_REMOUNT_AFTER;\n}\n\nexport function shouldAutoReload(phase: FramePhase, everLive: boolean, attempts: number): boolean {\n return phase === 'empty' && !everLive && attempts < MAX_AUTO_RELOAD;\n}\n\nexport function nextStreamTracker(\n prev: StreamTracker,\n sample: StreamSample,\n): { readonly tracker: StreamTracker; readonly phase: FramePhase } {\n const signature = sample.signature;\n if (!sample.sized) {\n const misses = prev.misses + 1;\n return {\n tracker: withSignature({ misses, busyStreak: 0, quiet: 0 }, signature),\n phase: misses >= EMPTY_AFTER_MISSES ? 'empty' : 'connecting',\n };\n }\n if (sample.busy) {\n const busyStreak = prev.busyStreak + 1;\n return {\n tracker: withPreviousSignature({ misses: prev.misses, busyStreak, quiet: 0 }, prev),\n phase: busyStreak >= BUSY_EMPTY_AFTER ? 'empty' : 'connecting',\n };\n }\n const changed =\n signature !== undefined && prev.lastSignature !== undefined && signature !== prev.lastSignature;\n if (changed) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet: 0 }, signature), live: true },\n phase: 'live',\n };\n }\n if (signature === undefined) {\n return { tracker: { misses: 0, busyStreak: 0, quiet: 0, live: true }, phase: 'live' };\n }\n const quiet = prev.quiet + 1;\n if (quiet >= QUIET_ABANDON) {\n return {\n tracker: withSignature({ misses: EMPTY_AFTER_MISSES, busyStreak: 0, quiet }, signature),\n phase: 'empty',\n };\n }\n if (prev.live === true || quiet >= QUIET_TOLERANCE) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet }, signature), live: true },\n phase: 'live',\n };\n }\n return {\n tracker: withSignature({ misses: prev.misses, busyStreak: 0, quiet }, signature),\n phase: 'connecting',\n };\n}\n","import {\n Fragment,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Pill,\n StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { BH, VIDEO_SURFACE } from './tokens.js';\nimport {\n dotStateFor,\n nextExpanded,\n smoothPhase,\n statusKeyFor,\n stopKey,\n type FramePhase,\n} from './viewer-state.js';\nimport {\n LOSS_REMOUNT_AFTER,\n nextStreamTracker,\n sampleSurface,\n shouldAutoReload,\n shouldRemountLoss,\n type StreamTracker,\n} from './frame-liveness.js';\nimport type { ViewerTranslate } from './locale.js';\nexport type ViewerLifecycleEvent =\n | { readonly type: 'mount' }\n | { readonly type: 'overlay'; readonly open: boolean }\n | { readonly type: 'phase'; readonly from: FramePhase; readonly to: FramePhase }\n | { readonly type: 'auto-reload'; readonly attempt: number }\n | { readonly type: 'manual-retry' }\n | { readonly type: 'loss-remount'; readonly streak: number };\n\nexport const SPIN_STYLE = '@keyframes bc-spin { to { transform: rotate(360deg); } }';\n\nfunction useStreamPhase(onSample: (phase: FramePhase) => void): RefCallback {\n return useMountedResource(\n (iframe) => {\n let active = true;\n let tracker: StreamTracker = { misses: 0, busyStreak: 0, quiet: 0 };\n let timer: ReturnType | undefined;\n const check = (): void => {\n if (!active) return;\n let doc: Document | null = null;\n try {\n doc = iframe.contentDocument;\n } catch {\n doc = null;\n }\n const next = nextStreamTracker(tracker, sampleSurface(doc));\n tracker = next.tracker;\n onSample(next.phase);\n timer = setTimeout(check, 1000);\n };\n timer = setTimeout(check, 300);\n return () => {\n active = false;\n if (timer !== undefined) clearTimeout(timer);\n };\n },\n [onSample],\n );\n}\n\nexport function ScreenIndicator({ label = '连接中' }: { readonly label?: string }): ReactElement {\n const size = 26;\n const stroke = 2;\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n return (\n \n
\n \n \n \n \n {label}\n
\n \n );\n}\n\nfunction ScreenEmpty({\n t,\n onRetry,\n}: {\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n}): ReactElement {\n return (\n \n
\n {t('entry.noScreen')}\n \n
\n \n );\n}\n\nexport interface StreamOverlayProps {\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly hovered: boolean;\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n readonly onOpen: () => void;\n}\n\nexport function StreamOverlay(props: StreamOverlayProps): ReactElement | null {\n const { phase, reconnecting, hovered, t, onRetry, onOpen } = props;\n if (phase === 'connecting') {\n return ;\n }\n if (phase === 'empty') {\n return ;\n }\n if (!hovered) return null;\n return (\n \n \n \n {t('entry.openFullscreen')}\n \n \n );\n}\n\ninterface ScaledFrameProps {\n readonly src: string;\n readonly title: string;\n readonly design: { width: number; height: number };\n readonly interactive: boolean;\n readonly fit?: 'width' | 'contain';\n readonly iframeRef?: RefCallback;\n}\n\nfunction ScaledFrame({\n src,\n title,\n design,\n interactive,\n fit = 'width',\n iframeRef,\n}: ScaledFrameProps): ReactElement {\n const DESIGN_WIDTH = design.width;\n const DESIGN_HEIGHT = design.height;\n const [box, setBox] = useState({ width: DESIGN_WIDTH, height: DESIGN_HEIGHT });\n const resizeResource = useMountedResource(\n (element) => {\n const frame = element.querySelector('iframe');\n if (frame !== null) {\n frame.inert = !interactive;\n if (!interactive) frame.blur();\n }\n const update = (): void =>\n setBox({ width: element.clientWidth, height: element.clientHeight });\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n },\n [interactive],\n );\n\n const scale =\n fit === 'contain'\n ? Math.min(box.width / DESIGN_WIDTH, box.height / DESIGN_HEIGHT)\n : box.width / DESIGN_WIDTH;\n const offsetX = fit === 'contain' ? Math.max(0, (box.width - DESIGN_WIDTH * scale) / 2) : 0;\n const offsetY = fit === 'contain' ? Math.max(0, (box.height - DESIGN_HEIGHT * scale) / 2) : 0;\n\n return (\n \n \n \n );\n}\n\nfunction CollapseIcon(): ReactElement {\n return (\n \n \n \n \n \n \n );\n}\n\nexport interface ViewerTitleBarProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly interactive: boolean;\n readonly extraControls?: ReactNode;\n readonly onToggleInteractive: () => void;\n readonly onStop: () => void;\n readonly onCollapse: () => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n}\n\nfunction StopButton({\n t,\n busy,\n stopping,\n onStop,\n}: {\n readonly t: ViewerTranslate;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n}): ReactElement {\n return (\n \n );\n}\n\nexport function ViewerTitleBar(props: ViewerTitleBarProps): ReactElement {\n const {\n t,\n title,\n phase,\n reconnecting,\n busy,\n stopping,\n interactive,\n extraControls,\n onToggleInteractive,\n onStop,\n onCollapse,\n hideStop,\n hideInteractiveToggle,\n } = props;\n return (\n \n \n \n {title}\n \n {t(statusKeyFor(phase, reconnecting))}\n {interactive ? null : (\n {t('entry.watchOnly')}\n )}\n \n {extraControls}\n {hideInteractiveToggle ? null : (\n \n {t(interactive ? 'entry.interactive.disable' : 'entry.interactive.enable')}\n \n )}\n {hideStop === true ? null : (\n \n )}\n \n \n \n \n );\n}\n\nexport interface RemoteViewerProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly src: string;\n readonly design: { width: number; height: number };\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n readonly footer?: ReactNode;\n readonly notice?: ReactNode;\n readonly extraControls?: ReactNode;\n readonly onEvent?: (event: ViewerLifecycleEvent) => void;\n readonly interactive?: boolean;\n readonly onToggleInteractive?: () => void;\n readonly onDisableInteraction?: () => void;\n readonly expanded?: boolean;\n readonly onExpandedChange?: (expanded: boolean) => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n readonly allowFrameInput?: boolean | undefined;\n}\n\nexport function RemoteViewer({\n t,\n title,\n src,\n design,\n busy,\n stopping,\n onStop,\n footer,\n notice,\n extraControls,\n onEvent,\n interactive,\n onToggleInteractive,\n onDisableInteraction,\n expanded: controlledExpanded,\n onExpandedChange,\n hideStop,\n hideInteractiveToggle,\n allowFrameInput,\n}: RemoteViewerProps): ReactElement {\n const entryRef = useRef(null);\n const mounted = useRef(false);\n const [hovered, setHovered] = useState(false);\n const [ownExpanded, setOwnExpanded] = useState(false);\n const expanded = controlledExpanded ?? ownExpanded;\n const setExpanded = (next: boolean): void => {\n setOwnExpanded(next);\n onExpandedChange?.(next);\n };\n const [inputEnabled, setInputEnabled] = useState(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [reconnecting, setReconnecting] = useState(false);\n const wasReady = useRef(false);\n const autoReloads = useRef(0);\n const lossStreak = useRef(0);\n const phaseRef = useRef('connecting');\n\n const [smooth, setSmooth] = useState<{ phase: FramePhase; streak: number }>({\n phase: 'connecting',\n streak: 0,\n });\n const resetFrame = useCallback(() => {\n phaseRef.current = 'connecting';\n setSmooth({ phase: 'connecting', streak: 0 });\n setReloadKey((key) => key + 1);\n }, []);\n const onSample = useCallback(\n (nextPhase: FramePhase): void => {\n const fromPhase = phaseRef.current;\n if (fromPhase !== nextPhase) {\n phaseRef.current = nextPhase;\n setSmooth((current) => smoothPhase(current.phase, nextPhase, current.streak));\n onEvent?.({ type: 'phase', from: fromPhase, to: nextPhase });\n }\n if (nextPhase === 'live') {\n wasReady.current = true;\n autoReloads.current = 0;\n lossStreak.current = 0;\n setReconnecting(false);\n return;\n }\n if (wasReady.current) {\n lossStreak.current += 1;\n if (shouldRemountLoss(lossStreak.current)) {\n wasReady.current = false;\n lossStreak.current = 0;\n onEvent?.({ type: 'loss-remount', streak: LOSS_REMOUNT_AFTER });\n setReconnecting(true);\n resetFrame();\n return;\n }\n }\n if (\n fromPhase !== nextPhase &&\n shouldAutoReload(nextPhase, wasReady.current, autoReloads.current)\n ) {\n autoReloads.current += 1;\n onEvent?.({ type: 'auto-reload', attempt: autoReloads.current });\n resetFrame();\n }\n },\n [resetFrame, onEvent],\n );\n const streamRef = useStreamPhase(onSample);\n const phase = smooth.phase;\n\n const reconnect = (): void => {\n onEvent?.({ type: 'manual-retry' });\n setReconnecting(true);\n autoReloads.current = 0;\n lossStreak.current = 0;\n wasReady.current = false;\n resetFrame();\n };\n const openViewer = (): void => {\n setExpanded(nextExpanded('open'));\n onEvent?.({ type: 'overlay', open: true });\n };\n const collapseViewer = (): void => {\n setInputEnabled(false);\n onDisableInteraction?.();\n setExpanded(nextExpanded('collapse'));\n onEvent?.({ type: 'overlay', open: false });\n requestAnimationFrame(() => entryRef.current?.focus());\n };\n const dialogResource = useMountedResource(\n (dialog) => {\n if (!mounted.current) {\n mounted.current = true;\n onEvent?.({ type: 'mount' });\n }\n if (!expanded) return;\n const onKey = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return;\n const focusable = [\n ...dialog.querySelectorAll(\n 'button, [href], iframe, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ].filter((element) => element.tabIndex !== -1);\n const first = focusable[0];\n const last = focusable.at(-1);\n if (first === undefined || last === undefined) return;\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === dialog)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n dialog.focus();\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = previousOverflow;\n };\n },\n [expanded, onDisableInteraction, onEvent],\n );\n\n const statusText = t(statusKeyFor(phase, reconnecting));\n const openable = phase === 'live' && !expanded;\n\n const overlay = (\n \n );\n\n const stopLabel = t(stopKey(busy, stopping));\n const rowButton = (disabled: boolean): CSSProperties => ({\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 28,\n padding: '0 10px',\n borderRadius: 14,\n border: `1px solid ${BH.borderL3}`,\n background: BH.buttonElevatedFill,\n color: BH.labelPrimary,\n fontSize: 12,\n ...(disabled ? { opacity: 0.4, cursor: 'not-allowed' } : { cursor: 'pointer' }),\n });\n\n return (\n \n \n {expanded ? (\n setInputEnabled((current) => !current))\n }\n onStop={onStop}\n onCollapse={collapseViewer}\n hideStop={hideStop}\n hideInteractiveToggle={hideInteractiveToggle}\n />\n ) : null}\n {notice}\n setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={() => {\n if (openable) openViewer();\n }}\n onKeyDown={(event) => {\n if (!openable) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openViewer();\n }}\n style={\n expanded\n ? { position: 'relative', flex: 1, minHeight: 0 }\n : { position: 'relative', cursor: openable ? 'pointer' : 'default' }\n }\n >\n \n {overlay}\n \n {expanded ? null : (\n \n \n {title}\n \n
\n {hideStop === true ? null : (\n \n {stopLabel}\n \n )}\n \n {t('entry.reconnect')}\n \n
\n {footer}\n
\n )}\n \n );\n}\n","import {\n createContext,\n type Context,\n useContext,\n type ComponentProps,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Tooltip as PrimitiveTooltip } from '@deepseek-ai/dsh-client-ui-primitives';\n\nconst shared = globalThis as typeof globalThis & Record | undefined>;\nconst InstantTooltips = (shared[Symbol.for('botharness.instant-tooltips')] ??=\n createContext(false));\n\nexport function InstantTooltipScope({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n\nexport function Tooltip(props: ComponentProps): ReactElement {\n const instant = useContext(InstantTooltips);\n return instant ? (\n \n ) : (\n \n );\n}\n","export type ClientTelemetrySurface = 'desktop_app' | 'browser';\n\nexport interface TelemetryRpc {\n call(path: string, method: string, options?: { args?: unknown }): Promise;\n}\n\nexport function telemetrySurface(): ClientTelemetrySurface {\n return typeof globalThis === 'object' && 'dshDesktop' in globalThis ? 'desktop_app' : 'browser';\n}\n\nexport function recordViewerOpen(\n rpc: TelemetryRpc | undefined,\n panel: 'browser' | 'computer',\n): void {\n void rpc\n ?.call('/api', 'botharness/telemetryEvent', {\n args: {\n event: 'viewer:subpanel_open',\n properties: { panel, surface: telemetrySurface() },\n },\n })\n .catch(() => {});\n}\n","import type { ReactElement, ReactNode, Ref } from 'react';\n\nimport { ChannelSidebarIcon } from './channel-sidebar-icon.js';\n\nexport function SidebarCardList({\n label,\n className,\n listRef,\n flush = false,\n children,\n}: {\n label?: string | undefined;\n className?: string | undefined;\n listRef?: Ref | undefined;\n flush?: boolean | undefined;\n children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n \n );\n}\n\nexport interface SidebarCardRowProps {\n icon?: string | undefined;\n leading?: ReactNode | undefined;\n selection?: { checked: boolean; multiple?: boolean } | undefined;\n iconLabel?: string | undefined;\n title: ReactNode;\n titleClassName?: string | undefined;\n badge?: ReactNode | undefined;\n summary?: ReactNode | undefined;\n flipKey?: string | undefined;\n hint?: string | undefined;\n chips?: ReactNode | undefined;\n meta?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n detail?: ReactNode | undefined;\n onClick?: () => void | undefined;\n disabled?: boolean | undefined;\n muted?: boolean | undefined;\n mainClassName?: string | undefined;\n dialog?: boolean | undefined;\n expanded?: boolean | undefined;\n controls?: string | undefined;\n state?: string | undefined;\n anchor?: string | undefined;\n}\n\nexport function SidebarCardRow({\n icon,\n leading,\n iconLabel,\n selection,\n title,\n titleClassName,\n badge,\n summary,\n flipKey,\n hint,\n chips,\n meta,\n trailing,\n detail,\n onClick,\n disabled,\n muted,\n mainClassName,\n dialog,\n expanded,\n controls,\n state,\n anchor,\n}: SidebarCardRowProps): ReactElement {\n const body = (\n <>\n {leading === undefined ? null : {leading}}\n {icon === undefined ? null : (\n \n \n
\n )}\n \n {badge === undefined ? (\n \n {title}\n \n ) : (\n \n \n {title}\n \n {badge}\n \n )}\n {summary === undefined ? null : {summary}}\n {chips === undefined ? null : {chips}}\n {meta === undefined ? null : {meta}}\n \n \n );\n const className = mainClassName === undefined ? 'bh-card-main' : 'bh-card-main ' + mainClassName;\n return (\n \n
\n {selection?.multiple === true ? (\n \n ) : onClick === undefined ? (\n
\n {body}\n
\n ) : (\n \n {body}\n \n )}\n {trailing === undefined ? null : {trailing}}\n
\n {detail === undefined ? null : (\n
\n {detail}\n
\n )}\n \n );\n}\n","export const LOCALE_NS = 'botharness-browser';\n\nexport const zh = {\n 'entry.profile.install': '安装 BotHarness Profile 控制扩展',\n 'entry.profile.instructions':\n '在 BotHarness Profile 控制扩展中输入地址和配对码,并确认允许整个 Profile。',\n 'entry.profile.forget': '解除 Profile 配对',\n 'entry.profile.disconnected': 'Profile 已配对,连接已断开',\n 'entry.profile.connected': 'Profile 已连接',\n 'entry.profile.pair': '配对 Chrome Profile',\n 'entry.profile.scope': '此 Chrome Profile 的所有普通网页标签页',\n 'settings.profile-control': '日常 Chrome · 整个 Profile',\n 'settings.daily-control': '日常 Chrome · 控制',\n 'entry.daily.install': '安装 Playwright 扩展',\n 'entry.daily.connect': '连接现有页面',\n 'entry.daily.select': '请在 Chrome 中选择一个现有标签页',\n 'entry.daily.confirm': '已连接,尚未允许操作',\n 'entry.daily.controlled': '已允许此页面的读取、输入和点击',\n 'entry.daily.allow': '允许控制此页面',\n\n 'entry.live': '已连接',\n 'entry.noScreen': '暂无画面',\n 'entry.connecting': '连接中',\n 'entry.reconnecting': '正在重新连接',\n 'entry.reconnect': '重新连接',\n 'entry.openFullscreen': '打开大屏',\n 'entry.collapseFullscreen': '收起全屏',\n 'entry.interactive.disable': '停止交互',\n 'entry.interactive.enable': '开启交互',\n 'entry.watchOnly': '观看模式',\n 'entry.stop': '停止',\n 'entry.stopping': '停止中',\n\n 'settings.localDriver': '本机驱动',\n 'settings.containerDriver': '容器驱动',\n 'settings.driver.current': '默认',\n 'settings.driver.agent-browser': 'agent-browser(试用)',\n 'settings.section': '浏览器控制',\n 'settings.target': '操作目标',\n 'settings.local': '本机 Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': '日常浏览器',\n 'entry.borrow.none': '尚未借用标签页',\n 'entry.borrow.readOnly': '只读借用中',\n 'entry.borrow.pair': '连接浏览器扩展',\n 'entry.borrow.return': '归还标签页',\n 'entry.borrow.code': '配对码',\n 'entry.borrow.cancel': '取消配对',\n 'entry.borrow.instructions':\n '在扩展中输入此地址和配对码,再选择借出当前页面。配对码 5 分钟内有效,仅可使用一次。',\n 'entry.view.interaction': '允许 Human 操作',\n 'entry.view.inputMode.direct': '直接点按',\n 'entry.view.inputMode.trackpad': '触控板',\n 'entry.view.close': '关闭',\n 'entry.view.container': '容器浏览器',\n 'entry.view.browserTitle': '{name}的浏览器',\n 'entry.takeover.start': '接管',\n 'entry.takeover.stop': '取消接管',\n 'entry.takeover.active': '接管中',\n 'entry.label': '浏览器',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access 已开启',\n 'entry.access.description': '开启后,该 Bot 的会话可以使用浏览器',\n 'entry.access.enable': '启用 Browser Access',\n 'entry.access.disable': '停用 Browser Access',\n 'entry.access.failed': '切换 Browser Access 失败',\n 'entry.access.failureHint': '授权失败',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': '切换浏览器 profile 失败',\n 'entry.profile.choose': '选择浏览器 Profile',\n 'entry.profile.create': '创建“{name}”',\n 'entry.view.follow': '跟随 Bot',\n 'entry.view.pause': '暂停 Bot',\n 'entry.view.resume': '继续',\n 'entry.view.open': '打开 Bot 浏览器',\n 'entry.view.fullscreen': '全屏',\n 'entry.view.stop': '停止',\n 'entry.view.cleanupFailed': '浏览器清理失败。点击“停止”重试。',\n 'entry.view.opening': '正在打开…',\n 'entry.view.noFrame': '暂无画面',\n 'entry.view.noTabs': '暂无标签页',\n 'entry.view.tabs': '标签页',\n 'entry.chip.running': '运行中',\n 'entry.chip.stopped': '未运行',\n 'entry.chip.paused': '已暂停',\n 'entry.chip.disconnected': '未连接',\n 'entry.chip.connecting': '连接中',\n 'entry.chip.confirm': '待允许',\n 'entry.chip.controlled': '可操作',\n 'entry.chip.unpaired': '未配对',\n 'entry.chip.offline': '已断开',\n 'entry.chip.connected': '已连接',\n 'entry.chip.notShared': '未借用',\n 'entry.chip.readOnly': '只读',\n 'entry.provision.preparing': '正在准备下载浏览器…',\n 'entry.provision.downloading': '正在下载浏览器…{percent}%({downloaded}/{total})',\n 'entry.fail.details': '详情',\n 'entry.fail.provision-no-network.title': '浏览器下载失败——本机网络似乎不通。',\n 'entry.fail.provision-no-network.fault': '这是本机网络的问题,不是你的设置问题。',\n 'entry.fail.provision-no-network.action': '让本机连上网后,再点一次“打开”。',\n 'entry.fail.provision-no-disk-space.title': '浏览器下载失败——磁盘空间不足。',\n 'entry.fail.provision-no-disk-space.fault': '这是本机剩余空间的问题。',\n 'entry.fail.provision-no-disk-space.action': '至少腾出 500 MB 空间后,再点一次“打开”。',\n 'entry.fail.provision-no-permission.title': '浏览器下载失败——下载目录不可写。',\n 'entry.fail.provision-no-permission.fault': '这是本机目录权限的问题。',\n 'entry.fail.provision-no-permission.action':\n '请机器管理员放开浏览器目录的写权限后,再点一次“打开”。',\n 'entry.fail.provision-missing-libs.title': '这台机器缺少浏览器需要的系统库。',\n 'entry.install.missing': '需要安装 {count} 个系统包。',\n 'entry.install.manual':\n '安装需要管理员密码。请在这台机器的终端里运行下面的命令,装好后再点「打开」。',\n 'entry.install.button': '一键安装',\n 'entry.install.copy': '复制命令',\n 'entry.install.copied': '已复制',\n 'entry.install.progress': '正在安装系统库:{percent}%',\n 'entry.fail.provision-missing-libs.fault': '这是机器环境的问题,不是浏览器设置的问题。',\n 'entry.fail.provision-missing-libs.action':\n 'Ubuntu 24.04 上按“详情”里的命令安装系统库,装好后再点“打开”。',\n 'entry.fail.provision-failed.title': '浏览器下载失败。',\n 'entry.fail.provision-failed.fault': '暂时看不出具体原因。',\n 'entry.fail.provision-failed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-missing-binary.title': '配置的浏览器文件不存在。',\n 'entry.fail.startup-missing-binary.fault': '这是插件配置里的浏览器路径问题。',\n 'entry.fail.startup-missing-binary.action':\n '修正浏览器插件配置中的 browserPath,或清空它改用自动下载。',\n 'entry.fail.startup-spawn-failed.title': '浏览器程序无法启动。',\n 'entry.fail.startup-spawn-failed.fault':\n '本机拦截或删除了浏览器文件——常见是杀毒软件,偶尔是权限问题。',\n 'entry.fail.startup-spawn-failed.action':\n '把浏览器目录加入杀毒软件白名单(或找机器管理员看权限),再点一次“打开”。',\n 'entry.fail.startup-sandbox.title': '浏览器因系统沙箱限制拒绝启动。',\n 'entry.fail.startup-sandbox.fault': '这是本机系统限制的问题。',\n 'entry.fail.startup-sandbox.action':\n 'Ubuntu 23.10 起通常是 AppArmor 限制了用户命名空间:按“详情”给这个浏览器加 AppArmor 配置后,再点一次“打开”。',\n 'entry.fail.startup-crashed.title': '浏览器在启动过程中退出了。',\n 'entry.fail.startup-crashed.fault': '这是本机浏览器的问题,不是页面问题。',\n 'entry.fail.startup-crashed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-timeout.title': '浏览器启动超时。',\n 'entry.fail.startup-timeout.fault': '这台机器可能比较慢或负载较高。',\n 'entry.fail.startup-timeout.action': '再点一次“打开”重试;多次失败请重启机器或联系管理员。',\n 'entry.error': '浏览器操作失败',\n};\n\nexport type BrowserKey = keyof typeof zh;\n\nexport const en: Record = {\n 'entry.profile.install': 'Install BotHarness Profile Control extension',\n 'entry.profile.instructions':\n 'Enter the address and code in the BotHarness Profile Control extension and confirm Profile-wide access.',\n 'entry.profile.forget': 'Forget Profile pairing',\n 'entry.profile.disconnected': 'Profile paired · disconnected',\n 'entry.profile.connected': 'Profile connected',\n 'entry.profile.pair': 'Pair Chrome Profile',\n 'entry.profile.scope': 'All ordinary webpage tabs in this Chrome Profile',\n 'settings.profile-control': 'Daily Chrome · Entire Profile',\n 'settings.daily-control': 'Daily Chrome · Control',\n 'entry.daily.install': 'Install Playwright extension',\n 'entry.daily.connect': 'Connect existing page',\n 'entry.daily.select': 'Select one existing Chrome tab',\n 'entry.daily.confirm': 'Connected · control not granted',\n 'entry.daily.controlled': 'This document allows observe, type and click',\n 'entry.daily.allow': 'Allow control of this document',\n\n 'entry.live': 'Connected',\n 'entry.noScreen': 'No screen',\n 'entry.connecting': 'Connecting',\n 'entry.reconnecting': 'Reconnecting',\n 'entry.reconnect': 'Reconnect',\n 'entry.openFullscreen': 'Open fullscreen',\n 'entry.collapseFullscreen': 'Leave fullscreen',\n 'entry.interactive.disable': 'Disable interaction',\n 'entry.interactive.enable': 'Enable interaction',\n 'entry.watchOnly': 'Watch only',\n 'entry.stop': 'Stop',\n 'entry.stopping': 'Stopping',\n\n 'settings.localDriver': 'Local driver',\n 'settings.containerDriver': 'Container driver',\n 'settings.driver.current': 'Default',\n 'settings.driver.agent-browser': 'agent-browser (trial)',\n 'settings.section': 'Browser',\n 'settings.target': 'Browser Target',\n 'settings.local': 'Local Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': 'Daily Browser',\n 'entry.borrow.none': 'No shared tab',\n 'entry.borrow.readOnly': 'Shared read-only',\n 'entry.borrow.pair': 'Connect browser extension',\n 'entry.borrow.return': 'Return tab',\n 'entry.borrow.code': 'Pairing code',\n 'entry.borrow.cancel': 'Cancel pairing',\n 'entry.borrow.instructions':\n 'Enter this address and code in the extension, then share the current page. The code expires in 5 minutes and can be used once.',\n 'entry.view.interaction': 'Enable Human interaction',\n 'entry.view.inputMode.direct': 'Direct tap',\n 'entry.view.inputMode.trackpad': 'Trackpad',\n 'entry.view.close': 'Close',\n 'entry.view.container': 'Container Browser',\n 'entry.view.browserTitle': \"{name}'s Browser\",\n 'entry.takeover.start': 'Take over',\n 'entry.takeover.stop': 'Release',\n 'entry.takeover.active': 'Taking over',\n 'entry.label': 'Browser',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access is on',\n 'entry.access.description': \"This PersonaBot's sessions may use the browser\",\n 'entry.access.enable': 'Enable Browser Access',\n 'entry.access.disable': 'Disable Browser Access',\n 'entry.access.failed': 'Failed to switch Browser Access',\n 'entry.access.failureHint': 'Access failed',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': 'Failed to switch the browser profile',\n 'entry.profile.choose': 'Choose browser profile',\n 'entry.profile.create': 'Create “{name}”',\n 'entry.view.follow': 'Follow the Bot',\n 'entry.view.pause': 'Pause Bot',\n 'entry.view.resume': 'Resume',\n 'entry.view.open': 'Open Bot Browser',\n 'entry.view.fullscreen': 'Fullscreen',\n 'entry.view.stop': 'Stop',\n 'entry.view.cleanupFailed': 'Browser cleanup failed. Click Stop to retry.',\n 'entry.view.opening': 'Opening…',\n 'entry.view.noFrame': 'No frame yet',\n 'entry.view.noTabs': 'No tabs yet',\n 'entry.view.tabs': 'Tabs',\n 'entry.chip.running': 'Running',\n 'entry.chip.stopped': 'Stopped',\n 'entry.chip.paused': 'Paused',\n 'entry.chip.disconnected': 'Not connected',\n 'entry.chip.connecting': 'Connecting',\n 'entry.chip.confirm': 'Needs approval',\n 'entry.chip.controlled': 'Controllable',\n 'entry.chip.unpaired': 'Not paired',\n 'entry.chip.offline': 'Disconnected',\n 'entry.chip.connected': 'Connected',\n 'entry.chip.notShared': 'Not shared',\n 'entry.chip.readOnly': 'Read-only',\n 'entry.provision.preparing': 'Preparing the browser download…',\n 'entry.provision.downloading': 'Downloading browser… {percent}% ({downloaded} / {total})',\n 'entry.fail.details': 'Details',\n 'entry.fail.provision-no-network.title':\n 'The browser download failed — this machine looks offline.',\n 'entry.fail.provision-no-network.fault':\n 'This is about the network on this machine, not your settings.',\n 'entry.fail.provision-no-network.action':\n 'Reconnect this machine to the internet, then click Open again.',\n 'entry.fail.provision-no-disk-space.title': 'The browser download failed — the disk is full.',\n 'entry.fail.provision-no-disk-space.fault': 'This is about free space on this machine.',\n 'entry.fail.provision-no-disk-space.action': 'Free at least 500 MB, then click Open again.',\n 'entry.fail.provision-no-permission.title':\n 'The browser download failed — the download folder is not writable.',\n 'entry.fail.provision-no-permission.fault': 'This is about folder permissions on this machine.',\n 'entry.fail.provision-no-permission.action':\n 'Ask the machine owner to make the browser folder writable, then click Open again.',\n 'entry.fail.provision-missing-libs.title':\n 'This machine is missing system libraries the browser needs.',\n 'entry.install.missing': '{count} system packages need to be installed.',\n 'entry.install.manual':\n 'Installing needs an administrator password. Run this command in a terminal on this machine, then click Open again.',\n 'entry.install.button': 'Install',\n 'entry.install.copy': 'Copy command',\n 'entry.install.copied': 'Copied',\n 'entry.install.progress': 'Installing system libraries: {percent}%',\n 'entry.fail.provision-missing-libs.fault':\n 'This is about the machine setup, not your browser settings.',\n 'entry.fail.provision-missing-libs.action':\n 'On Ubuntu 24.04, install them with the command in Details, then click Open again.',\n 'entry.fail.provision-failed.title': 'The browser download failed.',\n 'entry.fail.provision-failed.fault': 'The cause is unclear from here.',\n 'entry.fail.provision-failed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-missing-binary.title': 'The configured browser file does not exist.',\n 'entry.fail.startup-missing-binary.fault':\n 'This is about the browser path in the plugin configuration.',\n 'entry.fail.startup-missing-binary.action':\n 'Fix browserPath in the browser plugin configuration, or clear it to use the automatic download.',\n 'entry.fail.startup-spawn-failed.title': 'The browser program could not be started.',\n 'entry.fail.startup-spawn-failed.fault':\n 'This machine blocked or removed the browser file — often antivirus, sometimes permissions.',\n 'entry.fail.startup-spawn-failed.action':\n 'Allow-list the browser folder in your antivirus (or ask the machine owner about permissions), then click Open again.',\n 'entry.fail.startup-sandbox.title': 'The browser refused to start because of its OS sandbox.',\n 'entry.fail.startup-sandbox.fault': 'This is about OS restrictions on this machine.',\n 'entry.fail.startup-sandbox.action':\n 'On Ubuntu 23.10 and later this is usually AppArmor restricting user namespaces: add the AppArmor profile from Details for this browser, then click Open again.',\n 'entry.fail.startup-crashed.title': 'The browser exited during startup.',\n 'entry.fail.startup-crashed.fault': 'This is about the browser on this machine, not the page.',\n 'entry.fail.startup-crashed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-timeout.title': 'The browser took too long to start.',\n 'entry.fail.startup-timeout.fault': 'This machine may be slow or overloaded.',\n 'entry.fail.startup-timeout.action':\n 'Click Open to retry; if it keeps failing, restart the machine or ask its owner.',\n 'entry.error': 'Browser action failed',\n};\n\nexport type BrowserTranslate = (\n key: BrowserKey,\n params?: Record,\n) => string;\n","export type BrowserFailureKind =\n | 'provision-no-network'\n | 'provision-no-disk-space'\n | 'provision-no-permission'\n | 'provision-missing-libs'\n | 'provision-failed'\n | 'startup-missing-binary'\n | 'startup-spawn-failed'\n | 'startup-sandbox'\n | 'startup-crashed'\n | 'startup-timeout';\n\nexport const BROWSER_FAILURE_KINDS: readonly BrowserFailureKind[] = [\n 'provision-no-network',\n 'provision-no-disk-space',\n 'provision-no-permission',\n 'provision-missing-libs',\n 'provision-failed',\n 'startup-missing-binary',\n 'startup-spawn-failed',\n 'startup-sandbox',\n 'startup-crashed',\n 'startup-timeout',\n];\n\nexport function isBrowserFailureKind(value: unknown): value is BrowserFailureKind {\n return typeof value === 'string' && (BROWSER_FAILURE_KINDS as readonly string[]).includes(value);\n}\n\nexport interface BrowserInstallProgress {\n readonly downloadedBytes: number;\n readonly totalBytes: number;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { color, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n note: {\n margin: 0,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n inset: { paddingBlock: space.x2, paddingInline: space.x2 },\n muted: { color: color.muted },\n subtle: { color: color.subtle },\n danger: { color: color.danger },\n success: { color: color.success },\n warning: { color: color.warning },\n});\n\nexport type NoteTone = 'muted' | 'subtle' | 'danger' | 'success' | 'warning';\n\nexport function Note({\n tone = 'muted',\n inset = false,\n children,\n}: {\n readonly tone?: NoteTone;\n readonly inset?: boolean;\n readonly children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n

\n );\n}\n","import { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from './ds/note.js';\nimport { color, radius, space, text } from './ds/tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n width: '100%',\n },\n progress: {\n display: 'grid',\n gap: space.x1,\n width: '100%',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n bar: {\n width: '100%',\n height: '6px',\n accentColor: color.accent,\n },\n command: {\n margin: 0,\n width: '100%',\n boxSizing: 'border-box',\n paddingBlock: space.x2,\n paddingInline: space.x2,\n borderRadius: radius.sm,\n backgroundColor: color.hover,\n color: color.fg,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n actions: {\n display: 'flex',\n gap: space.x2,\n flexWrap: 'wrap',\n },\n});\n\nexport type MissingPackagesAccess = 'root' | 'sudo' | 'none';\n\nexport interface MissingPackagesLabels {\n readonly missing: string;\n readonly manual: string;\n readonly install: string;\n readonly copy: string;\n readonly copied: string;\n}\n\nexport function formatProgressMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function ProgressLine({\n percent,\n label,\n}: {\n readonly percent: number;\n readonly label: string;\n}): ReactElement {\n const value = Math.max(0, Math.min(100, percent));\n return (\n
\n \n {label}\n
\n );\n}\n\nexport function MissingPackages({\n command,\n access,\n installing,\n busy = false,\n onInstall,\n labels,\n children,\n}: {\n readonly command: string;\n readonly access: MissingPackagesAccess;\n readonly installing?: { readonly percent: number; readonly label: string } | undefined;\n readonly busy?: boolean;\n readonly onInstall: () => void;\n readonly labels: MissingPackagesLabels;\n readonly children?: ReactNode;\n}): ReactElement {\n const [copied, setCopied] = useState(false);\n const copy = (): void => {\n void navigator.clipboard?.writeText(command).then(() => setCopied(true));\n };\n return (\n
\n {installing === undefined ? (\n {labels.missing}\n ) : (\n \n )}\n {access === 'none' && installing === undefined ? (\n <>\n {labels.manual}\n
{command}
\n \n ) : null}\n
\n {access !== 'none' && installing === undefined ? (\n \n ) : null}\n {access === 'none' ? (\n \n ) : null}\n {children}\n
\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\n\nimport {\n isBrowserFailureKind,\n type BrowserFailureKind,\n type BrowserInstallProgress,\n} from '../failure-kinds.js';\nimport {\n MissingPackages,\n type MissingPackagesAccess,\n} from '../../../client/src/client/missing-packages.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BrowserFailure {\n readonly message: string;\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n}\n\nexport class BrowserApiError extends Error {\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n\n constructor(message: string, code?: string, detail?: string, packages?: readonly string[]) {\n super(message);\n this.name = 'BrowserApiError';\n if (code !== undefined) this.code = code;\n if (detail !== undefined) this.detail = detail;\n if (packages !== undefined) this.packages = packages;\n }\n}\n\nexport function readFailure(cause: unknown): BrowserFailure {\n if (cause instanceof BrowserApiError)\n return {\n message: cause.message,\n ...(cause.code === undefined ? {} : { code: cause.code }),\n ...(cause.detail === undefined ? {} : { detail: cause.detail }),\n ...(cause.packages === undefined ? {} : { packages: cause.packages }),\n };\n return { message: cause instanceof Error ? cause.message : String(cause) };\n}\n\ninterface InstallState {\n readonly access?: MissingPackagesAccess;\n readonly state?: 'installing' | 'installed' | 'failed';\n readonly percent?: number;\n readonly text?: string;\n}\n\nconst INSTALL_ENDPOINT = './api/browser/install-packages';\n\nfunction BrowserMissingLibs({\n packages,\n t,\n onRetry,\n}: {\n readonly packages: readonly string[];\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement {\n const [install, setInstall] = useState({});\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const retried = useRef(false);\n const read = useCallback(async (): Promise => {\n const response = await fetch(INSTALL_ENDPOINT, { cache: 'no-store' });\n const next = (await response.json()) as InstallState;\n setInstall(next);\n return next;\n }, []);\n const resource = useCallback(\n (node: HTMLDivElement | null): void => {\n if (node === null) return;\n void read().catch(() => undefined);\n },\n [read],\n );\n const poll = (): void => {\n void read()\n .then((next) => {\n if (next.state === 'installing') {\n setTimeout(poll, 1000);\n return;\n }\n if (next.state === 'installed' && !retried.current) {\n retried.current = true;\n onRetry?.();\n }\n })\n .catch((cause: unknown) => setError(String(cause)));\n };\n const start = (): void => {\n setBusy(true);\n setError(undefined);\n void fetch(INSTALL_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, packages }),\n })\n .then(async (response) => {\n if (!response.ok) throw new Error(((await response.json()) as { error?: string }).error);\n poll();\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setBusy(false));\n };\n const installing = install.state === 'installing';\n return (\n
\n {install.state === 'failed' && install.text !== undefined ? (\n
{install.text}
\n ) : null}\n {error === undefined ? null :
{error}
}\n \n
\n );\n}\n\nexport function BrowserFailureNotice({\n failure,\n t,\n onRetry,\n}: {\n readonly failure: BrowserFailure;\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement | null {\n if (!isBrowserFailureKind(failure.code)) return null;\n const kind: BrowserFailureKind = failure.code;\n return (\n
\n
{t(`entry.fail.${kind}.title`)}
\n
{t(`entry.fail.${kind}.fault`)}
\n {kind === 'provision-missing-libs' && (failure.packages?.length ?? 0) > 0 ? (\n \n ) : (\n
{t(`entry.fail.${kind}.action`)}
\n )}\n {failure.detail === undefined || failure.detail === '' ? null : (\n
\n {t('entry.fail.details')}\n
{failure.detail}
\n
\n )}\n
\n );\n}\n\nfunction formatMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function BrowserProvisionProgress({\n progress,\n t,\n}: {\n readonly progress: BrowserInstallProgress;\n readonly t: BrowserTranslate;\n}): ReactElement {\n if (progress.totalBytes <= 0)\n return (\n
\n {t('entry.provision.preparing')}\n
\n );\n const percent = Math.max(\n 0,\n Math.min(99, Math.floor((progress.downloadedBytes / progress.totalBytes) * 100)),\n );\n return (\n
\n \n \n {t('entry.provision.downloading', {\n percent: String(percent),\n downloaded: formatMiB(progress.downloadedBytes),\n total: formatMiB(progress.totalBytes),\n })}\n \n
\n );\n}\n","import * as native from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useId, useLayoutEffect, type CSSProperties, type RefObject } from 'react';\n\nconst useLegacyPosition = 'useAnchoredPosition' in native ? native.useAnchoredPosition : undefined;\n\nexport function useAnchoredPanel({\n open,\n anchorRef,\n panelRef,\n gap,\n margin,\n matchWidth = false,\n}: {\n open: boolean;\n anchorRef: RefObject;\n panelRef: RefObject;\n gap: number;\n margin: number;\n matchWidth?: boolean;\n}): CSSProperties {\n const position = useLegacyPosition?.({ open, anchorRef, panelRef, gap, margin });\n const id = useId();\n const name = `--bh-panel-${id.replace(/[^a-zA-Z0-9_-]/gu, '')}`;\n useLayoutEffect(() => {\n const anchor = anchorRef.current;\n if (useLegacyPosition !== undefined || !open || anchor === null) return;\n const previous = anchor.style.getPropertyValue('anchor-name');\n const priority = anchor.style.getPropertyPriority('anchor-name');\n anchor.style.setProperty('anchor-name', name);\n return () => anchor.style.setProperty('anchor-name', previous, priority);\n }, [open, anchorRef, name]);\n if (useLegacyPosition !== undefined) {\n return {\n ...position,\n ...(matchWidth ? { width: anchorRef.current?.getBoundingClientRect().width ?? 200 } : {}),\n visibility: position === null ? 'hidden' : undefined,\n };\n }\n return {\n position: 'fixed',\n positionAnchor: name,\n top: `max(${margin}px, var(--dsh-frame-overlay-top, ${margin}px), calc(anchor(bottom) + ${gap}px))`,\n bottom: margin,\n left: `max(${margin}px, anchor(left))`,\n right: margin,\n alignSelf: 'start',\n justifySelf: 'start',\n margin: 0,\n height: 'fit-content',\n maxWidth: `calc(100vw - ${margin * 2}px)`,\n positionTryFallbacks: 'flip-block, flip-inline, flip-block flip-inline',\n ...(matchWidth ? { width: `min(anchor-size(width), calc(100vw - ${margin * 2}px))` } : {}),\n };\n}\n","import { useAnchoredPanel } from './anchored-panel.js';\nimport { border, color, radius, space, text } from './ds/tokens.stylex.js';\nimport { useId, useRef, useState, type KeyboardEvent, type ReactElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n IconChevronDownOutlineRegular,\n IconPlusOutlineRegular,\n Input,\n MenuSurface,\n useDismissOnOutsidePointer,\n} from '@deepseek-ai/dsh-client-ui-primitives';\n\nexport interface ComboboxOption {\n readonly value: string;\n readonly label: string;\n readonly hint?: string | undefined;\n readonly disabled?: boolean | undefined;\n}\n\nexport const COMBOBOX_CSS = `\n.bh-combobox { position: relative; flex: 1; min-width: 0; }\n.bh-combobox-input { display: flex; padding-right: ${space.x6}; }\n.bh-combobox input { width: 100%; text-overflow: ellipsis; }\n.bh-combobox input[readonly] { cursor: pointer; }\n.bh-combobox-toggle {\n position: absolute; right: 4px; top: 50%; transform: translateY(-50%); width: 24px; height: 24px;\n display: flex; align-items: center; justify-content: center;\n border: 0; border-radius: ${radius.sm}; padding: 0;\n color: var(--dsw-alias-label-secondary); background: transparent; cursor: pointer;\n}\n.bh-combobox-toggle:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-combobox-toggle:disabled { opacity: 0.5; cursor: default; }\n.bh-combobox-list {\n position: fixed; z-index: 1100; box-sizing: border-box;\n background: var(--dsw-alias-bg-base);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n}\n.bh-combobox-scroll > button {\n display: flex; align-items: baseline; justify-content: space-between; gap: ${space.x4};\n width: 100%; min-height: 34px; padding: ${space.x2} ${space.x3};\n border: 0; border-radius: ${radius.sm}; background: transparent;\n color: var(--dsw-alias-label-primary); text-align: left; font: inherit; font-size: ${text.bodySize}; line-height: ${text.bodyLine}; cursor: pointer;\n overflow-wrap: anywhere;\n}\n.bh-combobox-scroll > button[aria-selected=\"true\"] { font-weight: ${text.strong}; }\n.bh-combobox-scroll > button:disabled { color: var(--dsw-alias-label-tertiary); cursor: default; }\n.bh-combobox-scroll > button:not(:disabled):hover, .bh-combobox-scroll > button[data-active] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.bh-combobox-scroll { max-height: 260px; overflow-y: auto; padding: ${space.x2}; box-sizing: border-box; }\n.bh-combobox-hint { flex: none; color: var(--dsw-alias-label-secondary); font-size: ${text.metaSize}; font-weight: ${text.regular}; }\n.bh-combobox-empty { padding: ${space.x2} ${space.x3}; color: var(--dsw-alias-label-secondary); font-size: ${text.bodySize}; }\n.bh-combobox-scroll > .bh-combobox-action { justify-content: flex-start; align-items: center; gap: ${space.x2}; border-top: ${border.hairline} solid ${color.divider}; border-radius: 0; margin-top: ${space.x2}; }\n`;\n\nexport function Combobox({\n value,\n options,\n onSelect,\n label,\n toggleLabel,\n disabled = false,\n invalid = false,\n errorId,\n placeholder,\n emptyLabel,\n fallbackValue,\n createLabel,\n searchable = true,\n className,\n action,\n}: {\n readonly value: string;\n readonly options: readonly ComboboxOption[];\n readonly onSelect: (value: string) => void;\n readonly label: string;\n readonly toggleLabel: string;\n readonly disabled?: boolean;\n readonly invalid?: boolean;\n readonly errorId?: string;\n readonly placeholder?: string;\n readonly emptyLabel?: string;\n readonly fallbackValue?: string;\n readonly createLabel?: (query: string) => string;\n readonly searchable?: boolean;\n readonly className?: string;\n readonly action?: {\n readonly label: string;\n readonly onSelect: () => void;\n readonly disabled?: boolean;\n };\n}): ReactElement {\n const root = useRef(null);\n const panel = useRef(null);\n const listId = useId();\n const actionValue = `${listId}-action`;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(undefined);\n const [active, setActive] = useState(undefined);\n const current = value === '' && fallbackValue !== undefined ? fallbackValue : value;\n const display = options.find((option) => option.value === current)?.label ?? current;\n const trimmed = query?.trim() ?? '';\n const needle = trimmed.toLowerCase();\n const matches: ComboboxOption[] = options.filter((option) =>\n [option.label, option.value, option.hint ?? ''].some((text) =>\n text.toLowerCase().includes(needle),\n ),\n );\n const canCreate =\n createLabel !== undefined &&\n trimmed !== '' &&\n !options.some((option) => option.value === trimmed);\n const choices: ComboboxOption[] = canCreate\n ? [...matches, { value: trimmed, label: createLabel(trimmed) }]\n : matches;\n const shown =\n action === undefined\n ? choices\n : [...choices, { value: actionValue, label: action.label, disabled: action.disabled }];\n const enabled = shown.filter((option) => option.disabled !== true);\n const hasPopup = shown.length > 0 || (choices.length === 0 && emptyLabel !== undefined);\n const highlighted = shown.findIndex(\n (option) => option.value === active && option.disabled !== true,\n );\n const position = useAnchoredPanel({\n open,\n anchorRef: root,\n panelRef: panel,\n matchWidth: true,\n gap: 4,\n margin: 12,\n });\n useDismissOnOutsidePointer(root, open, setOpen, panel);\n\n const dismiss = (): void => {\n setOpen(false);\n setQuery(undefined);\n setActive(undefined);\n };\n const select = (next: string): void => {\n dismiss();\n if (action !== undefined && next === actionValue) action.onSelect();\n else onSelect(next);\n };\n const typedChoice = (): string | undefined => {\n if (query === undefined) return current === '' ? undefined : current;\n if (trimmed === '') return fallbackValue;\n if (createLabel !== undefined) return trimmed;\n const available = matches.filter((option) => option.disabled !== true);\n const exact = available.find(\n (option) => option.value.toLowerCase() === needle || option.label.toLowerCase() === needle,\n );\n return (exact ?? available[0])?.value;\n };\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (!open) return;\n event.preventDefault();\n event.stopPropagation();\n dismiss();\n } else if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setOpen(true);\n if (enabled.length === 0) return;\n const offset = event.key === 'ArrowDown' ? 1 : -1;\n const at = enabled.findIndex((option) => option.value === active);\n const next =\n enabled[\n at < 0\n ? offset === 1\n ? 0\n : enabled.length - 1\n : (at + offset + enabled.length) % enabled.length\n ];\n setActive(next?.value);\n const index = shown.findIndex((option) => option.value === next?.value);\n document.getElementById(`${listId}-${index}`)?.scrollIntoView?.({ block: 'nearest' });\n } else if (event.key === 'Enter' && open) {\n event.preventDefault();\n const choice = shown[highlighted]?.value ?? typedChoice();\n if (choice === undefined) dismiss();\n else select(choice);\n }\n };\n\n return (\n \n = 0 ? `${listId}-${highlighted}` : undefined\n }\n aria-invalid={invalid}\n aria-describedby={invalid ? errorId : undefined}\n value={query ?? display}\n placeholder={placeholder}\n disabled={disabled}\n autoComplete=\"off\"\n readOnly={!searchable}\n data-searchable={searchable || undefined}\n onFocus={(event) => {\n if (searchable) event.currentTarget.select();\n setOpen(true);\n }}\n onClick={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setActive(undefined);\n setOpen(true);\n }}\n onBlur={dismiss}\n onKeyDown={onKeyDown}\n />\n event.preventDefault()}\n onClick={() => {\n if (open) dismiss();\n else {\n root.current?.querySelector('input')?.focus();\n setOpen(true);\n }\n }}\n >\n \n \n {open && !disabled && hasPopup\n ? createPortal(\n \n
\n {choices.length === 0 && emptyLabel !== undefined ? (\n
{emptyLabel}
\n ) : null}\n {shown.map((option, index) => (\n event.preventDefault()}\n onMouseEnter={() => {\n if (option.disabled !== true) setActive(option.value);\n }}\n onClick={() => select(option.value)}\n >\n {option.value === actionValue ? : null}\n {option.label}\n {option.hint === undefined ? null : (\n {option.hint}\n )}\n \n ))}\n
\n ,\n document.body,\n )\n : null}\n \n );\n}\n","import type { ReactElement } from 'react';\n\nimport { Combobox } from '../../../client/src/client/combobox.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function ProfileCombobox({\n value,\n profiles,\n disabled,\n invalid,\n errorId,\n onSelect,\n t,\n}: {\n readonly value: string;\n readonly profiles: readonly string[];\n readonly disabled: boolean;\n readonly invalid: boolean;\n readonly errorId: string;\n readonly onSelect: (name: string) => void;\n readonly t: BrowserTranslate;\n}): ReactElement {\n const names = [...new Set(['default', ...profiles, value === '' ? 'default' : value])];\n return (\n ({ value: name, label: name }))}\n onSelect={onSelect}\n label={t('entry.profile.label')}\n toggleLabel={t('entry.profile.choose')}\n disabled={disabled}\n invalid={invalid}\n errorId={errorId}\n fallbackValue=\"default\"\n createLabel={(name) => t('entry.profile.create', { name })}\n />\n );\n}\n","import { BUBBLE_SURFACES, readable } from './bot-name-color.js';\nimport { space } from './ds/tokens.stylex.js';\nimport { panelMaterials, validTargetId } from './appearance-panels.js';\nimport { appearanceMaterials } from './appearance-materials.js';\nimport {\n APPEARANCE_KEY,\n APPEARANCE_PRIMARY,\n Appearance,\n type AppearanceSnapshot,\n} from './appearance.js';\nimport { NATIVE_LIGHT, NATIVE_DARK } from './appearance-native-tokens.js';\nexport const APPEARANCE_CLASS = 'bh-appearance-scope';\nexport function appearanceCss(snapshot: AppearanceSnapshot): string {\n const { config, mode } = snapshot;\n const selected = config.modes[mode];\n const primary = selected.primary ?? APPEARANCE_PRIMARY[selected.preset][mode];\n const materials = appearanceMaterials(selected, mode);\n const tokens: Record = {\n ...NATIVE_LIGHT,\n ...(mode === 'dark' ? NATIVE_DARK : {}),\n };\n for (const part of ['header', 'body'] as const) {\n const material = materials[part];\n tokens[`--bh-global-${part}-fill`] =\n `color-mix(in srgb, ${material.color} ${material.opacity}%, transparent)`;\n tokens[`--bh-global-${part}-blur`] = `${material.blur}px`;\n }\n tokens['--dsw-alias-state-business-primary'] = primary;\n tokens['--dsw-alias-link'] = readable(primary, BUBBLE_SURFACES[mode].surface, 4.6);\n tokens['--dsw-alias-state-business-secondary'] =\n `color-mix(in srgb, ${primary} 45%, transparent)`;\n tokens['--dsw-alias-state-business-tertiary'] = `color-mix(in srgb, ${primary} 14%, transparent)`;\n tokens['--dsw-specific-sidebar-nav-item-active'] =\n `color-mix(in srgb, ${primary} 14%, transparent)`;\n return `.bh-root,.bh-workspace-mount[data-workspace-enabled],.${APPEARANCE_CLASS},[data-bh-appearance-owned]{color:var(--dsw-alias-label-primary);color-scheme:${mode};${Object.entries(\n tokens,\n )\n .map(([k, v]) => `${k}:${v}`)\n .join(\n ';',\n )}}:root [data-bh-appearance-owned][data-menu-material],:root .${APPEARANCE_CLASS}[data-menu-material],:root .${APPEARANCE_CLASS} [data-menu-material]{--dsw-elevation-stroke-color:var(--dsw-alias-border-${mode === 'dark' ? 'l3' : 'l4'})}${materialCss()}${panelCss(snapshot)}`;\n}\n\nexport function mountAppearance(owner: Appearance): () => void {\n const style = document.createElement('style');\n style.dataset.plugin = '@botharness/ui';\n style.dataset.pluginCss = '@botharness/ui/appearance';\n const update = () => {\n style.textContent = appearanceCss(owner.getSnapshot());\n style.dataset.bhAppearance = owner.getSnapshot().mode;\n document.documentElement.dataset.bhAppearance = owner.getSnapshot().mode;\n };\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const onStorage = (event: StorageEvent) => {\n if (event.key === APPEARANCE_KEY || event.key === null) owner.refresh();\n };\n update();\n document.head.appendChild(style);\n const off = owner.subscribe(update);\n media.addEventListener('change', owner.refresh);\n window.addEventListener('storage', onStorage);\n return () => {\n off();\n style.remove();\n delete document.documentElement.dataset.bhAppearance;\n media.removeEventListener('change', owner.refresh);\n window.removeEventListener('storage', onStorage);\n };\n}\n\nfunction materialCss(): string {\n const scope = ':root .bh-workspace-mount[data-workspace-enabled]';\n return `\n${scope} .bh-dock-theme { --dv-group-view-background-color:transparent; --dv-tabs-and-actions-container-background-color:transparent; --dv-activegroup-visiblepanel-tab-background-color:transparent; --dv-inactivegroup-visiblepanel-tab-background-color:transparent; --dv-activegroup-hiddenpanel-tab-background-color:transparent; --dv-inactivegroup-hiddenpanel-tab-background-color:transparent; }\n${scope} .bh-root, ${scope} .bh-workspace-rail { background:transparent; }\n${scope} .dv-tabs-and-actions-container, ${scope} .bh-channel-session-header { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} [data-appearance-header] { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} .bh-channel-subpanel-body { display:flex; flex-direction:column; flex:1; min-height:0; min-width:0; overflow:auto; }\n${scope} .bh-channel-subpanel-body > section { flex:1; min-height:0; }\n${scope} .bh-memory-commit-view { display:flex; flex-direction:column; padding:0; }\n${scope} .bh-memory-commit-header { margin:0; flex-shrink:0; }\n${scope} .bh-memory-detail-body { flex:1; padding:${space.x3} ${space.x4}; }\n${scope} [data-appearance-body], ${scope} .dv-content-container { background:var(--bh-global-body-fill); backdrop-filter:blur(var(--bh-global-body-blur)); }\n`;\n}\n\nfunction panelCss({ config, mode }: AppearanceSnapshot): string {\n return Object.keys(config.modes[mode].panels ?? {})\n .filter(validTargetId)\n .map((id) => {\n const material = panelMaterials(config.modes[mode], mode, id);\n const scope = `:root .bh-workspace-mount[data-workspace-enabled] .dv-groupview:has(> .dv-tabs-and-actions-container .dv-active-tab [data-dock-header=\"${id.slice(5)}\"])`;\n return (['header', 'body'] as const)\n .map(\n (part) =>\n `${scope} > ${part === 'header' ? '.dv-tabs-and-actions-container' : '.dv-content-container'}, :root .bh-workspace-mount[data-workspace-enabled] [data-appearance-${part}=\"${id.slice(5)}\"] { background:color-mix(in srgb, ${material[part].color} ${material[part].opacity}%, transparent); backdrop-filter:blur(${material[part].blur}px); }`,\n )\n .join('');\n })\n .join('');\n}\n","import { Modal as NativeModal, Menu as NativeMenu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { ComponentProps, RefObject } from 'react';\nimport { APPEARANCE_CLASS } from './appearance-scope.js';\nexport function Modal(props: ComponentProps) {\n return (\n \n );\n}\ntype MenuProps = Omit, 'getAnchorRect'> & {\n anchorRef?: RefObject;\n};\n\nexport function Menu(props: MenuProps) {\n const { anchorRef } = props;\n const legacyAnchor =\n anchorRef === undefined\n ? {}\n : {\n getAnchorRect: () => anchorRef.current?.getBoundingClientRect() ?? null,\n };\n return (\n \n );\n}\n","import { Menu } from '../appearance-primitives.js';\nimport type { ComponentProps } from 'react';\nimport { createPortal } from 'react-dom';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { useMountedResource } from '../mounted-resource.js';\nimport { border, space } from './tokens.stylex.js';\n\nexport interface MenuPoint {\n readonly x: number;\n readonly y: number;\n}\n\nexport function pointerMenuPosition(\n point: MenuPoint,\n width: number,\n height: number,\n viewport: { width: number; height: number; top: number },\n) {\n const margin = Number.parseFloat(space.x4);\n return {\n x: Math.max(margin, Math.min(point.x, viewport.width - width - margin)),\n y: Math.max(\n Math.max(margin, viewport.top),\n Math.min(point.y, viewport.height - height - margin),\n ),\n };\n}\n\ntype PointerMenuProps = Omit<\n ComponentProps,\n 'open' | 'portal' | 'anchorRef' | 'side' | 'align' | 'className'\n> & { point: MenuPoint; container?: Element; align?: 'start' | 'end' };\n\nexport function PointerMenu({\n point,\n container = document.body,\n align = 'start',\n ...props\n}: PointerMenuProps) {\n const mount = useMountedResource(\n (node) => {\n const menu = node.querySelector('[role=\"menu\"]');\n if (!menu) return;\n const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth);\n const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth);\n const place = () => {\n const scale = node.getBoundingClientRect();\n if (!scale.width || !scale.height) return;\n const cssZoom =\n 'currentCSSZoom' in node && typeof node.currentCSSZoom === 'number'\n ? node.currentCSSZoom\n : undefined;\n const scaleX = cssZoom ?? scale.width;\n const scaleY = cssZoom ?? scale.height;\n const root = document.documentElement;\n const clearance = root.hasAttribute('data-fullscreen')\n ? 0\n : Number.parseFloat(\n getComputedStyle(root).getPropertyValue('--dsh-frame-top-clearance'),\n ) || 0;\n const margin = Number.parseFloat(space.x4);\n const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX;\n menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`;\n menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`;\n menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`;\n const box = menu.getBoundingClientRect();\n const desired = pointerMenuPosition(\n { x: align === 'end' ? point.x - box.width : point.x, y: point.y },\n box.width,\n box.height,\n {\n width: innerWidth,\n height: innerHeight,\n top: clearance,\n },\n );\n const left = Number.parseFloat(node.style.left) || 0;\n const top = Number.parseFloat(node.style.top) || 0;\n node.style.left = `${left + (desired.x - box.left) / scaleX}px`;\n node.style.top = `${top + (desired.y - box.top) / scaleY}px`;\n };\n place();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n observer?.observe(menu);\n observer?.observe(node);\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [point.x, point.y, align],\n );\n return createPortal(\n \n \n ,\n container,\n );\n}\n\nconst styles = stylex.create({\n origin: {\n position: 'fixed',\n left: 0,\n top: 0,\n width: border.hairline,\n height: border.hairline,\n zIndex: 1100,\n pointerEvents: 'none',\n },\n menu: { pointerEvents: 'auto' },\n});\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { actionColor, border, color, radius, size, space, text } from './tokens.stylex.js';\n\nexport const pillStyles = stylex.create({\n pill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: space.x2,\n maxWidth: '100%',\n height: size.icon,\n paddingInline: `${space.x4} ${space.x3}`,\n borderWidth: 0,\n borderRadius: radius.sm,\n backgroundColor: { default: actionColor.secondary, ':hover': actionColor.hover },\n color: color.fg,\n fontFamily: 'inherit',\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n whiteSpace: 'nowrap',\n cursor: { default: 'pointer', ':disabled': 'default' },\n opacity: { default: 1, ':disabled': 0.5 },\n outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` },\n outlineOffset: '1px',\n },\n});\n\nexport function PillButton({\n children,\n ...rest\n}: { readonly children: ReactNode } & Omit<\n ButtonHTMLAttributes,\n 'className' | 'style' | 'type' | 'children'\n>): ReactElement {\n return (\n \n );\n}\n\nexport function PillFileButton({\n children,\n ...input\n}: { readonly children: ReactNode } & Omit<\n InputHTMLAttributes,\n 'className' | 'style' | 'type' | 'children' | 'hidden'\n>): ReactElement {\n return (\n \n );\n}\n","import { PointerMenu, type MenuPoint } from './pointer-menu.js';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';\n\nimport { pillStyles } from './pill-button.js';\nimport { color, space } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n label: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n});\n\nexport interface SelectOption {\n readonly value: Value;\n readonly label: ReactNode;\n}\n\nexport interface SelectProps {\n readonly label: string;\n readonly value: Value;\n readonly options: readonly SelectOption[];\n readonly onChange: (value: Value) => void;\n readonly disabled?: boolean;\n readonly align?: 'start' | 'end';\n readonly autoFocus?: boolean;\n readonly reselect?: boolean;\n}\n\nexport function Select({\n label,\n value,\n options,\n onChange,\n disabled = false,\n align = 'end',\n autoFocus = false,\n reselect = false,\n}: SelectProps): ReactElement {\n const [open, setOpen] = useState(false);\n const [point, setPoint] = useState();\n const trigger = useRef(null);\n const active = open && !disabled;\n const mount = useMountedResource(\n (node) => {\n trigger.current = node;\n if (!active)\n return () => {\n trigger.current = null;\n };\n const place = () => {\n const rect = node.getBoundingClientRect();\n const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1;\n const next = {\n x: align === 'end' ? rect.right : rect.left,\n y: rect.bottom + Number.parseFloat(space.x2) * scale,\n };\n setPoint((previous) => (previous?.x === next.x && previous.y === next.y ? previous : next));\n };\n place();\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n resize?.observe(node);\n resize?.observe(document.documentElement);\n const observer = new MutationObserver(place);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style', 'data-fullscreen'],\n });\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n trigger.current = null;\n resize?.disconnect();\n observer.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [active, align],\n );\n const close = () => {\n const button = trigger.current;\n const menu = document.activeElement?.closest('[data-pointer-menu]');\n setOpen(false);\n setPoint(undefined);\n queueMicrotask(() => {\n const focused = document.activeElement;\n if (\n button?.isConnected &&\n !button.disabled &&\n (focused === document.body || (focused !== null && menu?.contains(focused)))\n )\n button.focus({ preventScroll: true });\n });\n };\n const current = options.find((option) => option.value === value);\n return (\n <>\n {\n if (active) event.stopPropagation();\n }}\n onClick={() => {\n if (active) close();\n else setOpen(true);\n }}\n {...stylex.props(pillStyles.pill)}\n >\n {current?.label}\n \n \n \n \n {active && point ? (\n }\n items={options.map((option) => ({ id: option.value, label: option.label }))}\n selectedId={value}\n onSelect={(id) => {\n close();\n const next = options.find((option) => option.value === id);\n if (next !== undefined && (reselect || next.value !== value)) onChange(next.value);\n }}\n onClose={close}\n />\n ) : null}\n \n );\n}\n","import { useId, type ReactElement, type ReactNode, type Ref } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, space, text } from './tokens.stylex.js';\n\nconst NARROW = '@media (max-width: 648px)';\nconst COMPACT = '@container bh-settings (max-width: 480px)';\n\nconst styles = stylex.create({\n rows: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n paddingTop: { default: space.x5, ':first-child': 0 },\n },\n sectionHead: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n paddingBottom: space.x2,\n },\n sectionTitle: {\n margin: 0,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n fontWeight: text.strong,\n },\n row: {\n display: 'flex',\n alignItems: { default: 'center', [NARROW]: 'stretch', [COMPACT]: 'stretch' },\n flexDirection: { default: 'row', [NARROW]: 'column', [COMPACT]: 'column' },\n gap: { default: space.x4, [NARROW]: space.x3, [COMPACT]: space.x3 },\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: { default: color.divider, ':last-child': 'transparent' },\n },\n text: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n title: {\n color: color.fg,\n fontSize: text.titleSize,\n lineHeight: text.titleLine,\n fontWeight: text.strong,\n overflowWrap: 'anywhere',\n },\n description: {\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n control: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: { default: 'flex-end', [NARROW]: 'flex-start', [COMPACT]: 'flex-start' },\n gap: space.x3,\n flexShrink: 0,\n minWidth: 0,\n maxWidth: { default: '60%', [NARROW]: '100%', [COMPACT]: '100%' },\n },\n value: {\n color: color.muted,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n});\n\nexport function SettingsRows({\n children,\n rootRef,\n}: {\n readonly children: ReactNode;\n readonly rootRef?: Ref | undefined;\n}): ReactElement {\n return (\n
\n {children}\n
\n );\n}\n\nexport interface SettingsSectionProps {\n readonly title?: ReactNode;\n readonly description?: ReactNode;\n readonly children: ReactNode;\n}\n\nexport function SettingsSection({\n title,\n description,\n children,\n}: SettingsSectionProps): ReactElement {\n const id = useId();\n return (\n \n {title === undefined ? null : (\n
\n

\n {title}\n

\n {description === undefined ? null : (\n
{description}
\n )}\n
\n )}\n {children}\n \n );\n}\n\nexport interface SettingsRowProps {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly control?: ReactNode;\n readonly children?: ReactNode;\n readonly rootRef?: Ref | undefined;\n readonly data?: Readonly>;\n}\n\nexport function SettingsRow({\n title,\n description,\n control,\n children,\n rootRef,\n data,\n}: SettingsRowProps): ReactElement {\n const id = useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n return (\n \n
\n
\n {title}\n
\n {description === undefined ? null : (\n
\n {description}\n
\n )}\n {children}\n
\n {control === undefined ? null :
{control}
}\n \n );\n}\n\nexport function SettingsValue({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n","import { useMemo, useState, useSyncExternalStore, type ReactElement } from 'react';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { Select } from '../../../client/src/client/ds/select.js';\nimport { SettingsRow, SettingsRows } from '../../../client/src/client/ds/settings-row.js';\nimport type { BrowserClientContext } from './index.js';\nimport { LOCALE_NS, type BrowserTranslate } from './locale.js';\n\ninterface TargetScope {\n getSnapshot(): {\n status: string;\n writable: boolean;\n value:\n | {\n target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n localDriver?: 'current' | 'agent-browser';\n containerDriver?: 'current' | 'agent-browser';\n }\n | undefined;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise;\n}\n\nfunction ConfigChoice({\n scope,\n field,\n value,\n writable,\n title,\n items,\n}: {\n scope: TargetScope;\n field: 'target' | 'localDriver' | 'containerDriver';\n value: string;\n writable: boolean;\n title: string;\n items: { id: string; label: string }[];\n}): ReactElement {\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState();\n return (\n <>\n ({ value: item.id, label: item.label }))}\n disabled={!writable || saving}\n onChange={(id) => {\n setSaving(true);\n setError(undefined);\n void scope\n .set(field, id)\n .then(() => {\n if (scope.getSnapshot().value?.[field] !== id)\n throw new Error('Browser setting was not saved');\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setSaving(false));\n }}\n />\n }\n />\n {error === undefined ? null : {error}}\n \n );\n}\n\nexport function BrowserTargetSettings({\n scope,\n t,\n}: {\n scope: TargetScope;\n t: BrowserTranslate;\n}): ReactElement {\n const store = useMemo(\n () => ({\n subscribe: (listener: () => void) => scope.subscribe(listener),\n getSnapshot: () => scope.getSnapshot(),\n }),\n [scope],\n );\n const snapshot = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const target = snapshot.value?.target ?? 'local';\n return (\n \n ({ id, label: t(`settings.${id}`) }))}\n />\n {target !== 'local' && target !== 'container' ? null : (\n ({\n id,\n label: t(`settings.driver.${id}`),\n }))}\n />\n )}\n \n );\n}\n\nexport function registerBrowserSettings(ctx: BrowserClientContext, t: BrowserTranslate): void {\n ctx.inject(['configForms', 'slots'], (settingsCtx) => {\n const native = settingsCtx as unknown as {\n configForms: { get(namespace: string): TargetScope };\n slots: {\n inject(name: string, callback: () => unknown): () => void;\n register(\n options: {\n name: string;\n id: string;\n order: number;\n label: () => string;\n locale: string;\n inject: () => { scope: TargetScope; t: BrowserTranslate };\n },\n component: typeof BrowserTargetSettings,\n ): () => void;\n };\n };\n const scope = native.configForms.get('botharness-browser');\n return native.slots.inject('botharness.settings.section', () =>\n native.slots.register(\n {\n name: 'botharness.settings.section',\n id: 'browser',\n order: 32,\n label: () => t('settings.section'),\n locale: LOCALE_NS,\n inject: () => ({ scope, t }),\n },\n BrowserTargetSettings,\n ),\n );\n });\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nimport type { ProfileView } from '../profile-control.js';\n\nexport function ProfileBrowserControl({\n slug,\n view,\n paused,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: ProfileView | undefined;\n readonly paused: boolean;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'forget' | 'pause'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/profile/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view?.paired !== true ? (\n {t('entry.chip.unpaired')}\n ) : view.connected ? (\n {t('entry.chip.connected')}\n ) : (\n {t('entry.chip.offline')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n meta={\n <>\n {t('entry.profile.scope')}\n \n {view?.paired\n ? t(view.connected ? 'entry.profile.connected' : 'entry.profile.disconnected')\n : t('entry.view.noTabs')}\n {view?.connected ? ` · ${view.tabs}` : ''}\n \n \n }\n detail={\n
\n \n {t('entry.profile.install')}\n \n
\n invoke(view?.paired ? 'forget' : 'pair')}\n >\n {t(view?.paired ? 'entry.profile.forget' : 'entry.profile.pair')}\n \n {view?.connected ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n
\n {view?.paired || pair === undefined ? null : (\n <>\n {t('entry.profile.instructions')}\n \n {location.origin}\n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { DailyView } from '../daily.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function DailyBrowserControl({\n slug,\n view,\n enabled,\n paused,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: DailyView | null;\n readonly enabled: boolean;\n readonly paused: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const mounted = useRef(false);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n }, []);\n const invoke = (action: 'connect' | 'grant' | 'return' | 'pause'): void => {\n if (busy || slug === undefined) return;\n setBusy(true);\n setError(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/daily/${action}`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as { ok: boolean; error?: string };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n })\n .catch((cause: unknown) => {\n if (mounted.current) setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view === null || view.state === 'error' ? (\n {t('entry.chip.disconnected')}\n ) : view.state === 'connecting' ? (\n {t('entry.chip.connecting')}\n ) : view.state === 'confirm' ? (\n {t('entry.chip.confirm')}\n ) : (\n {t('entry.chip.controlled')}\n )}\n {paused && view?.state === 'controlled' ? (\n {t('entry.chip.paused')}\n ) : null}\n \n }\n meta={\n view === null || view.state === 'error' ? undefined : (\n \n {t(\n view.state === 'connecting'\n ? 'entry.daily.select'\n : view.state === 'confirm'\n ? 'entry.daily.confirm'\n : 'entry.daily.controlled',\n )}\n \n )\n }\n detail={\n
\n {view === null || view.state === 'error' || view.url === '' ? null : (\n <>\n {view.title || view.url}\n {view.url}\n \n )}\n \n {t('entry.daily.install')}\n \n
\n {view === null || view.state === 'error' ? (\n invoke('connect')}\n >\n {t('entry.daily.connect')}\n \n ) : (\n <>\n {view.state === 'confirm' ? (\n invoke('grant')}\n >\n {t('entry.daily.allow')}\n \n ) : null}\n {view.state === 'controlled' ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n invoke('return')}\n >\n {t(\n view.state === 'connecting' ? 'entry.borrow.cancel' : 'entry.borrow.return',\n )}\n \n \n )}\n
\n
\n }\n />\n
\n {view?.error === undefined ? null : (\n
\n {view.error}\n
\n )}\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BorrowedTabView {\n readonly title: string;\n readonly url: string;\n readonly expiresAt: number;\n}\n\nexport function BorrowedBrowser({\n slug,\n tab,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly tab: BorrowedTabView | null | undefined;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'return'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(`./api/browser/borrow/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n {t('entry.chip.notShared')}\n ) : (\n {t('entry.chip.readOnly')}\n )\n }\n meta={{t(tab == null ? 'entry.borrow.none' : 'entry.borrow.readOnly')}}\n detail={\n
\n {tab == null ? null : (\n <>\n {tab.title || tab.url}\n {tab.url}\n \n )}\n invoke(tab == null ? 'pair' : 'return')}\n >\n {t(tab == null ? 'entry.borrow.pair' : 'entry.borrow.return')}\n \n {tab != null || pair === undefined ? null : (\n <>\n {t('entry.borrow.instructions')}\n \n {location.origin}\n {\n sequence.current += 1;\n setPair(undefined);\n invoke('return');\n }}\n >\n {t('entry.borrow.cancel')}\n \n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","export const STYLEX_CSS: string = '@bh-stylex-css';\n","import { border, color, radius, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport { COMBOBOX_CSS } from '../../../client/src/client/combobox.js';\nimport { STYLEX_CSS } from '../../../client/src/client/ds/stylex-css.js';\n\nexport const styles =\n COMBOBOX_CSS +\n `\n.bh-browser-access-control { position: relative; display: flex; align-items: center; }\n.bh-browser-borrow { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-borrow-title, .bh-browser-daily-install { color: var(--dsw-alias-label-primary); text-underline-offset: 3px; }\n.bh-browser-borrow-url { overflow-wrap: anywhere; }\n.bh-browser-borrow-url { color: var(--dsw-alias-label-secondary); }\n.bh-browser-access-power {\n display: flex; align-items: center; justify-content: center; width: 28px; height: 28px;\n padding: 0; border: 0; border-radius: ${radius.md}; background: transparent;\n color: var(--dsw-alias-label-secondary); cursor: pointer;\n}\n.bh-browser-access-power:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power[aria-pressed='true'] { color: var(--dsw-alias-state-business-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power:focus-visible { outline: ${border.focus} solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }\n.bh-browser-access-power:disabled { opacity: 0.5; cursor: default; }\n.bh-browser-access-power.bh-access-failed { color: var(--dsw-alias-state-error-primary); }\n.bh-browser-access-error { order: -1; padding: 0 ${space.x2}; color: var(--dsw-alias-state-error-primary); font-size: ${text.metaSize}; line-height: ${text.metaLine}; white-space: nowrap; }\n\n.bh-browser-local { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-card-detail { display: grid; gap: ${space.x3}; justify-items: start; font-size: ${text.metaSize}; }\n.bh-browser-card-field { display: flex; align-items: center; justify-content: space-between; gap: ${space.x3}; width: 100%; color: var(--dsw-alias-label-secondary); }\n.bh-browser-card-field > span:first-child { flex: none; }\n.bh-browser-cards .bh-card-meta [role=\"status\"] { color: inherit; }\n.bh-browser-note { color: var(--dsw-alias-label-secondary); }\n.bh-browser-frame { display: block; width: 100%; border: ${border.hairline} solid ${color.divider}; border-radius: ${radius.md}; }\n.bh-browser-actions { display: flex; flex-wrap: wrap; gap: ${space.x3}; }\n.bh-browser-tab[aria-pressed=\"true\"] { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-tab[aria-current=\"true\"] .bh-browser-tab-title { font-weight: ${text.strong}; }\n.bh-browser-tab .bh-browser-tab-url { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bh-browser-tabs .bh-card-main { padding: ${space.x3} ${space.x3}; }\n.bh-browser-error { color: var(--dsw-alias-state-error-primary); overflow-wrap: anywhere; }\n.bh-viewer-btn-content { display: inline-flex; align-items: center; gap: ${space.x2}; }\n@media (max-width: 560px) {\n [data-bh-viewer-btn-label] { display: none; }\n}\n.bh-browser-progress { display: grid; gap: ${space.x2}; color: var(--dsw-alias-label-secondary); }\n.bh-browser-progress-bar { width: 100%; height: 6px; accent-color: var(--dsw-alias-state-business-primary); }\n.bh-browser-failure { display: grid; gap: ${space.x2}; overflow-wrap: anywhere; }\n.bh-browser-failure-title { color: var(--dsw-alias-label-primary); font-weight: ${text.strong}; }\n.bh-browser-failure-fault, .bh-browser-failure-action { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details pre { overflow-x: auto; white-space: pre-wrap; font-size: ${text.metaSize}; }\n` +\n STYLEX_CSS;\n","/**\n * Vendored Access Power glyph from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the lucide `dist/esm/icons/power.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport type { ReactElement } from 'react';\nexport function AccessPowerIcon(): ReactElement {\n return (\n \n \n \n \n );\n}\n","import type { ReactElement } from 'react';\n\nfunction baseProps(size: number): {\n width: number;\n height: number;\n viewBox: string;\n fill: string;\n stroke: string;\n strokeWidth: number;\n strokeLinecap: 'round';\n strokeLinejoin: 'round';\n 'aria-hidden': true;\n} {\n return {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n 'aria-hidden': true,\n };\n}\n\nexport function TrackpadIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n );\n}\n\nexport function TakeoverIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n \n );\n}\n","import { PanelEmptyState } from '../../../client/src/client/ds/empty-state.js';\nimport { RemoteViewer } from '../../../client/src/client/remote-viewer/index.js';\nimport type { ViewerTranslate } from '../../../client/src/client/remote-viewer/locale.js';\nimport {\n useId,\n useCallback,\n useRef,\n useState,\n useSyncExternalStore,\n type ComponentType,\n type ReactElement,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Switch,\n Tag,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Tooltip } from '../../../client/src/client/ds/tooltip.js';\nimport { ChannelSidebarIcon } from '../../../client/src/client/channel-sidebar-icon.js';\nimport { useMountedResource } from '../../../client/src/client/mounted-resource.js';\nimport { recordViewerOpen } from '../../../client/src/client/telemetry-surface.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type {} from '@deepseek-ai/dsh-client-ui-slots';\n\nimport { LOCALE_NS, en, zh, type BrowserTranslate } from './locale.js';\nimport {\n BrowserApiError,\n BrowserFailureNotice,\n BrowserProvisionProgress,\n readFailure,\n type BrowserFailure,\n} from './browser-failure.js';\nimport { isBrowserFailureKind } from '../failure-kinds.js';\nimport { ProfileCombobox } from './profile-combobox.js';\nimport { registerBrowserSettings } from './settings.js';\nimport { ProfileBrowserControl } from './profile-browser.js';\nimport type { ProfileView } from '../profile-control.js';\nimport { DailyBrowserControl } from './daily-browser.js';\nimport type { DailyView } from '../daily.js';\nimport { BorrowedBrowser, type BorrowedTabView } from './borrowed-browser.js';\nimport { styles } from './styles.js';\n\nconst ENTRY_ID = 'botharness-browser';\nconst OBSERVATION_ENDPOINT = './api/browser/observation';\nconst TAKEOVER_ENDPOINT = './api/browser/takeover';\nconst OPEN_ENDPOINT = './api/browser/open';\nconst STOP_ENDPOINT = './api/browser/stop';\nconst baseRelative = (path: string | null | undefined): string | undefined =>\n path === null || path === undefined ? undefined : path.startsWith('/') ? `.${path}` : path;\n\nimport { AccessPowerIcon } from './access-power-icon.js';\nimport { TakeoverIcon, TrackpadIcon } from './viewer-icons.js';\n\nexport const name = 'botharness-browser-client';\n\nexport const inject = ['channelSidebar', 'connection', 'locale'];\n\nexport interface BrowserClientContext {\n readonly locale: {\n bind(namespace: string): BrowserTranslate;\n register(namespace: string, dictionaries: { zh: unknown; en: unknown }): () => void;\n };\n inject(names: readonly string[], callback: (ctx: BrowserClientContext) => void): void;\n effect(callback: () => () => void, name: string): void;\n}\n\ninterface ChannelSidebarEntryProps {\n readonly botSlug?: string;\n readonly t: BrowserTranslate;\n readonly expanded?: boolean;\n readonly setExpanded?: (expanded: boolean) => void;\n readonly setExpandable?: (expandable: boolean) => void;\n}\n\ninterface ChannelSidebarRegistryLike {\n register(entry: {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly order: number;\n readonly scope: 'channel' | 'personabot';\n readonly component: ComponentType;\n readonly headerAction?: ComponentType;\n readonly badge?: ComponentType;\n readonly tab?: string;\n }): () => void;\n}\n\ninterface ConnectionRpcLike {\n call(\n path: string,\n method: string,\n options?: { args?: unknown },\n ): Promise<{ ok: boolean; value?: unknown; error?: { message?: string } }>;\n}\n\nlet connectionRpc: ConnectionRpcLike | undefined;\n\ninterface BotInfoView {\n readonly displayName: string | undefined;\n readonly browserAccess: boolean | undefined;\n readonly browserProfile: string | undefined;\n readonly profiles: readonly string[];\n}\n\ninterface BrowserTabView {\n readonly targetId: string;\n readonly url: string;\n readonly title: string;\n readonly current: boolean;\n}\n\ninterface BrowserObservation {\n readonly target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n readonly daily?: DailyView | null;\n readonly profile?: ProfileView;\n readonly borrowed?: BorrowedTabView | null;\n readonly viewerUrl?: string | null;\n readonly cleanupRequired?: boolean;\n readonly running: boolean;\n readonly frame: string | null;\n readonly focused: string | null;\n readonly takeover: boolean;\n readonly handoffPending?: boolean;\n readonly provisioning?: { downloadedBytes: number; totalBytes: number } | null;\n readonly tabs: readonly BrowserTabView[];\n readonly profiles?: readonly string[];\n}\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { cache: 'no-store', ...init });\n const body = (await response.json()) as T & {\n ok?: boolean;\n error?: string;\n code?: string;\n detail?: string;\n packages?: string[];\n };\n if (!response.ok || body.ok === false) {\n throw new BrowserApiError(\n body.error ?? `HTTP ${String(response.status)}`,\n body.code,\n body.detail,\n body.packages,\n );\n }\n return body;\n}\n\ninterface ReadableStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): T;\n}\n\ntype BotInfoStore = ReadableStore & {\n refresh(): void;\n setAccess(enabled: boolean): void;\n};\n\nconst botInfoStores = new Map();\n\nfunction botInfoStore(botSlug: string | undefined): BotInfoStore {\n const key = botSlug ?? '';\n const existing = botInfoStores.get(key);\n if (existing !== undefined) return existing;\n const created = createBotInfoStore(botSlug);\n botInfoStores.set(key, created);\n return created;\n}\n\nfunction createBotInfoStore(botSlug: string | undefined): BotInfoStore {\n let info: BotInfoView = {\n displayName: undefined,\n browserAccess: undefined,\n browserProfile: undefined,\n profiles: [],\n };\n const listeners = new Set<() => void>();\n let loadedAt = Number.NEGATIVE_INFINITY;\n const load = (): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined) return;\n void rpc\n .call('/api', 'botharness/list', { args: {} })\n .then((result) => {\n if (!result.ok) return;\n const value = result.value as {\n bots?: readonly {\n slug?: unknown;\n displayName?: unknown;\n browserAccess?: unknown;\n browserProfile?: unknown;\n }[];\n };\n const bots = value.bots ?? [];\n const match = bots.find((bot) => bot.slug === botSlug);\n if (match === undefined) return;\n const profiles = [\n ...new Set(\n bots\n .map((bot) => (typeof bot.browserProfile === 'string' ? bot.browserProfile : ''))\n .filter((name) => name !== ''),\n ),\n ].sort();\n info = {\n displayName:\n typeof match.displayName === 'string' && match.displayName.length > 0\n ? match.displayName\n : undefined,\n browserAccess: match.browserAccess === true,\n browserProfile:\n typeof match.browserProfile === 'string' && match.browserProfile !== ''\n ? match.browserProfile\n : undefined,\n profiles,\n };\n for (const listener of listeners) listener();\n })\n .catch(() => undefined);\n };\n return {\n setAccess(enabled) {\n info = { ...info, browserAccess: enabled };\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n if (listeners.size === 0 && Date.now() - loadedAt > 5000) {\n loadedAt = Date.now();\n load();\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => info,\n refresh: load,\n };\n}\n\ninterface ObservationStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): BrowserObservation | undefined;\n setTab(targetId: string | undefined): void;\n refresh(): void;\n confirmTakeover(active: boolean): void;\n}\n\nfunction observationUrl(botSlug: string | undefined, tabId: string | undefined): string {\n const base = `${OBSERVATION_ENDPOINT}?slug=${encodeURIComponent(botSlug ?? '')}`;\n return tabId === undefined || tabId === '' ? base : `${base}&tab=${encodeURIComponent(tabId)}`;\n}\n\nfunction createObservationStore(botSlug: string | undefined): ObservationStore {\n let value: BrowserObservation | undefined;\n let tab: string | undefined;\n let timer: ReturnType | undefined;\n let refreshing = false;\n let revision = 0;\n let refreshAgain = false;\n const listeners = new Set<() => void>();\n const refresh = async (): Promise => {\n if (refreshing) {\n refreshAgain = true;\n return;\n }\n refreshing = true;\n const requestedTab = tab;\n const requestedRevision = revision;\n try {\n const next = await requestJson(observationUrl(botSlug, requestedTab));\n if (tab === requestedTab && revision === requestedRevision) value = next;\n } catch {\n if (tab === requestedTab && revision === requestedRevision) value = undefined;\n } finally {\n refreshing = false;\n }\n for (const listener of listeners) listener();\n if (refreshAgain && listeners.size > 0) {\n refreshAgain = false;\n void refresh();\n }\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n if (listeners.size === 1) {\n void refresh();\n timer = setInterval(() => void refresh(), 1500);\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && timer !== undefined) {\n clearInterval(timer);\n timer = undefined;\n }\n };\n },\n getSnapshot: () => value,\n setTab(targetId) {\n tab = targetId;\n void refresh();\n },\n confirmTakeover(active) {\n revision += 1;\n if (value !== undefined) value = { ...value, takeover: active };\n for (const listener of listeners) listener();\n },\n refresh: () => void refresh(),\n };\n}\n\nfunction BrowserHeaderAction({\n botSlug,\n t,\n setExpandable,\n setExpanded,\n}: ChannelSidebarEntryProps): ReactElement {\n const store = botInfoStore(botSlug);\n const [busy, setBusy] = useState(false);\n const inFlight = useRef(false);\n const [error, setError] = useState(false);\n const subscribe = (listener: () => void): (() => void) => {\n const sync = (): void => {\n setExpandable?.(store.getSnapshot().browserAccess !== undefined);\n };\n const unsubscribe = store.subscribe(() => {\n sync();\n listener();\n });\n sync();\n return unsubscribe;\n };\n const info = useSyncExternalStore(subscribe, store.getSnapshot);\n const accessOn = info.browserAccess === true;\n\n const onToggle = (next: boolean): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n void rpc\n .call('/api', 'botharness/browserAccessSet', { args: { slug: botSlug, enabled: next } })\n .then((result) => {\n if (!result.ok) {\n setError(true);\n return;\n }\n const value = result.value as { bot?: { browserAccess?: unknown } };\n const applied = value.bot?.browserAccess === true;\n store.setAccess(applied);\n setExpanded?.(applied);\n })\n .catch(() => {\n setError(true);\n })\n .finally(() => {\n inFlight.current = false;\n setBusy(false);\n });\n };\n\n const label = t(accessOn ? 'entry.access.disable' : 'entry.access.enable');\n return (\n \n \n onToggle(!accessOn)}\n >\n \n \n \n {error ? (\n \n {t('entry.access.failureHint')}\n \n ) : null}\n \n );\n}\n\nfunction BrowserBody({ botSlug, t }: ChannelSidebarEntryProps): ReactElement {\n const [store] = useState(() => createObservationStore(botSlug));\n const infoStore = botInfoStore(botSlug);\n const observation = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const info = useSyncExternalStore(infoStore.subscribe, infoStore.getSnapshot);\n const [follow, setFollow] = useState(true);\n const [preview, setPreview] = useState(undefined);\n const [busy, setBusy] = useState(false);\n const errorId = useId();\n const [profileInvalid, setProfileInvalid] = useState(false);\n const [profileOverride, setProfileOverride] = useState(undefined);\n const [failure, setFailure] = useState(undefined);\n const [viewer, setViewer] = useState();\n const [interaction, setInteraction] = useState(false);\n const viewerScope = useRef('');\n const previousViewer = useRef<{ identity: string; url: string | undefined }>({\n identity: '',\n url: undefined,\n });\n const mounted = useRef(true);\n const viewerRequest = useRef(0);\n const interactionResource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n if (node === null) viewerRequest.current += 1;\n }, []);\n const disableInteraction = useCallback(() => {\n viewerRequest.current += 1;\n setInteraction(false);\n }, []);\n const [inputMode, setInputMode] = useState<'direct' | 'trackpad'>(() =>\n typeof window !== 'undefined' &&\n window.innerWidth < 768 &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: coarse)').matches\n ? 'trackpad'\n : 'direct',\n );\n const finePointer =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: fine)').matches;\n const showHeaderTakeover = inputMode === 'direct' && finePointer;\n\n const tabs = observation?.tabs ?? [];\n const focused = observation?.focused ?? null;\n const currentTab = tabs.find((tab) => tab.current);\n const orderedTabs =\n currentTab === undefined ? tabs : [currentTab, ...tabs.filter((tab) => !tab.current)];\n const cleanupRequired = observation?.cleanupRequired === true;\n const failureNotice =\n !cleanupRequired && failure !== undefined && isBrowserFailureKind(failure.code) ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n />\n ) : null;\n let visibleError: string | undefined = failure?.message;\n if (cleanupRequired) visibleError = t('entry.view.cleanupFailed');\n if (failureNotice !== null) visibleError = undefined;\n const provisioning = observation?.provisioning ?? null;\n const paused = observation?.takeover === true;\n const viewerUrl =\n observation?.running === true &&\n (observation?.target === 'container' || observation?.target === 'local')\n ? baseRelative(observation.viewerUrl)\n : undefined;\n const narrowViewer = typeof window !== 'undefined' && window.innerWidth < 700;\n const viewerDesign =\n observation?.target === 'local' && (inputMode === 'trackpad' || narrowViewer)\n ? { width: 390, height: 700 }\n : { width: 1024, height: 768 };\n const identity = `${botSlug ?? ''}:${profileOverride ?? info.browserProfile ?? ''}:${observation?.target ?? ''}`;\n const scope = `${identity}:${viewerUrl ?? ''}`;\n const previous = previousViewer.current;\n if (viewerScope.current !== scope) {\n viewerScope.current = scope;\n viewerRequest.current += 1;\n previousViewer.current = { identity, url: viewerUrl };\n if (interaction) setInteraction(false);\n if ((previous.identity !== identity || previous.url !== undefined) && viewer !== undefined)\n setViewer(undefined);\n }\n if (!paused && interaction) setInteraction(false);\n const viewerTranslate: ViewerTranslate = (key) => t(key);\n const postTakeoverEnable = (): void => {\n if (botSlug === undefined || viewerUrl === undefined) return;\n const request = ++viewerRequest.current;\n const expectedScope = viewerScope.current;\n setBusy(true);\n setFailure(undefined);\n void requestJson<{ takeover: boolean }>(TAKEOVER_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, active: true }),\n })\n .then((result) => {\n if (\n mounted.current &&\n request === viewerRequest.current &&\n viewerScope.current === expectedScope\n ) {\n store.confirmTakeover(result.takeover);\n setInteraction(result.takeover);\n }\n })\n .catch((cause: unknown) => {\n if (mounted.current && request === viewerRequest.current) setFailure(readFailure(cause));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n store.refresh();\n }\n });\n };\n const toggleTakeover = (): void => {\n if (interaction) {\n disableInteraction();\n if (observation?.handoffPending !== true) invoke(TAKEOVER_ENDPOINT, { active: false });\n return;\n }\n if (busy || botSlug === undefined || viewerUrl === undefined) return;\n postTakeoverEnable();\n };\n const botName = info.displayName ?? botSlug ?? '';\n const takeoverTitle =\n interaction && paused\n ? `${t('entry.view.browserTitle', { name: botName })} · ${t('entry.takeover.active')}`\n : t('entry.view.browserTitle', { name: botName });\n const toggleRef = useRef(toggleTakeover);\n toggleRef.current = toggleTakeover;\n const messageResource = useMountedResource(() => {\n const onMessage = (event: MessageEvent): void => {\n const data = event.data as { type?: unknown } | null;\n if (typeof window === 'undefined' || event.origin !== window.location.origin) return;\n if (data === null || typeof data !== 'object' || data.type !== 'bh-takeover-toggle') return;\n const ours = [...document.querySelectorAll('iframe')].some(\n (frame) =>\n frame.contentWindow === event.source &&\n (frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/'),\n );\n if (!ours) return;\n toggleRef.current();\n };\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n const takeoverNote = useRef(undefined);\n const wantTakeoverNote = interaction && paused;\n if (takeoverNote.current !== wantTakeoverNote && typeof document !== 'undefined') {\n takeoverNote.current = wantTakeoverNote;\n try {\n for (const frame of Array.from(document.querySelectorAll('iframe'))) {\n if ((frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/')) {\n frame.contentWindow?.postMessage(\n { type: 'bh-takeover-state', active: wantTakeoverNote },\n window.location.origin,\n );\n }\n }\n } catch {\n void 0;\n }\n }\n const bodyResource = useCallback(\n (node: HTMLDivElement | null): void => {\n interactionResource(node);\n messageResource(node);\n },\n [interactionResource, messageResource],\n );\n\n const invoke = (endpoint: string, body: Record = {}): void => {\n if (busy || botSlug === undefined) return;\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void requestJson<{ ok: boolean; viewerUrl?: string | null; takeover?: boolean }>(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, ...body }),\n })\n .then((result) => {\n if (typeof result.takeover === 'boolean') store.confirmTakeover(result.takeover);\n if (\n endpoint === OPEN_ENDPOINT &&\n result.viewerUrl !== undefined &&\n result.viewerUrl !== null\n ) {\n setViewer(baseRelative(result.viewerUrl));\n setInteraction(false);\n }\n if (endpoint === STOP_ENDPOINT) {\n setViewer(undefined);\n setInteraction(false);\n }\n })\n .catch((cause: unknown) => setFailure(readFailure(cause)))\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n const onFollow = (next: boolean): void => {\n setFollow(next);\n if (next) {\n setPreview(undefined);\n store.setTab(undefined);\n } else {\n const selected = focused ?? preview;\n setPreview(selected);\n store.setTab(selected);\n }\n };\n\n const onSelectTab = (targetId: string): void => {\n setFollow(false);\n setPreview(targetId);\n store.setTab(targetId);\n };\n\n const onPause = (): void => {\n disableInteraction();\n invoke(TAKEOVER_ENDPOINT, { active: !paused });\n };\n\n const currentProfile = profileOverride ?? info.browserProfile ?? '';\n\n const saveProfile = (name: string): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || busy) return;\n const trimmed = name.trim();\n const next = trimmed === 'default' ? '' : trimmed;\n if (next === currentProfile) {\n setProfileInvalid(false);\n setFailure(undefined);\n return;\n }\n disableInteraction();\n setViewer(undefined);\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void rpc\n .call('/api', 'botharness/browserProfileSet', { args: { slug: botSlug, profile: next } })\n .then((result) => {\n if (!result.ok) {\n setProfileInvalid(true);\n setFailure({ message: result.error?.message ?? t('entry.profile.failed') });\n return;\n }\n const value = result.value as { bot?: { browserProfile?: unknown } };\n setProfileOverride(\n typeof value.bot?.browserProfile === 'string' ? value.bot.browserProfile : '',\n );\n setPreview(undefined);\n store.setTab(undefined);\n infoStore.refresh();\n })\n .catch((cause: unknown) => {\n setProfileInvalid(true);\n setFailure(readFailure(cause));\n })\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n if (!cleanupRequired && observation?.target === 'profile-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'daily-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'extension')\n return (\n \n );\n\n return (\n
\n \n \n {observation?.running === true ? (\n {t('entry.chip.running')}\n ) : (\n {t('entry.chip.stopped')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n detail={\n
\n
\n {t('entry.profile.label')}\n \n
\n {viewerUrl === undefined ? (\n
\n {t('entry.view.follow')}\n \n
\n ) : null}\n
\n {viewerUrl === undefined ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n >\n {t(busy ? 'entry.view.opening' : 'entry.view.open')}\n \n ) : (\n {\n if (viewerUrl !== undefined) setViewer(viewerUrl);\n }}\n >\n \n \n {t('entry.view.fullscreen')}\n \n \n )}\n \n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n {observation?.running === true || cleanupRequired ? (\n invoke(STOP_ENDPOINT)}\n >\n {t('entry.view.stop')}\n \n ) : null}\n
\n
\n }\n />\n
\n {viewerUrl === undefined ? (\n <>\n {observation?.frame === null || observation?.frame === undefined ? (\n
{t('entry.view.noFrame')}
\n ) : (\n {t('entry.label')}\n )}\n \n ) : (\n \n {failure.message}\n
\n )\n }\n busy={busy}\n stopping={false}\n hideStop\n hideInteractiveToggle\n allowFrameInput\n onStop={() => invoke(STOP_ENDPOINT)}\n interactive={interaction && paused}\n onToggleInteractive={toggleTakeover}\n onDisableInteraction={disableInteraction}\n expanded={viewer === viewerUrl}\n onExpandedChange={(next) => {\n setViewer(next ? viewerUrl : undefined);\n if (!next) disableInteraction();\n }}\n extraControls={\n <>\n {showHeaderTakeover ? (\n setInputMode('trackpad')}\n >\n \n \n {t('entry.view.inputMode.trackpad')}\n \n \n ) : null}\n {showHeaderTakeover ? (\n \n \n \n \n {t(interaction ? 'entry.takeover.stop' : 'entry.takeover.start')}\n \n \n \n ) : null}\n \n }\n />\n )}\n {tabs.length === 0 ? (\n
{t('entry.view.noTabs')}
\n ) : (\n
    \n {orderedTabs.map((tab) => (\n
  • \n
    \n onSelectTab(tab.targetId)}\n >\n \n \n \n \n \n {tab.title === '' ? tab.url : tab.title}\n \n {tab.title === '' ? null : (\n {tab.url}\n )}\n \n \n
    \n
  • \n ))}\n
\n )}\n {provisioning !== null ? : null}\n {failureNotice}\n {visibleError !== undefined ? (\n
\n {visibleError}\n
\n ) : null}\n \n );\n}\n\nfunction createBrowserBody(t: BrowserTranslate): ComponentType {\n return function BrowserBodyView(props: Omit): ReactElement {\n useState(() => recordViewerOpen(connectionRpc, 'browser'));\n const store = botInfoStore(props.botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess === false)\n return {t('entry.access.description')};\n return ;\n };\n}\n\nfunction createBrowserBadge(t: BrowserTranslate): ComponentType {\n return function BrowserBadge({ botSlug }: Omit) {\n const store = botInfoStore(botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess !== true) return null;\n return (\n \n );\n };\n}\n\nfunction createBrowserHeader(t: BrowserTranslate): ComponentType {\n return function BrowserHeaderView(props: Omit): ReactElement {\n return ;\n };\n}\n\nexport function apply(ctx: BrowserClientContext): void {\n botInfoStores.clear();\n const t = ctx.locale.bind(LOCALE_NS);\n registerBrowserSettings(ctx, t);\n ctx.effect(() => {\n const sheet = document.createElement('style');\n sheet.dataset.plugin = '@botharness/browser';\n sheet.dataset.pluginCss = '@botharness/browser/client.css';\n sheet.textContent = styles;\n document.head.append(sheet);\n return () => sheet.remove();\n }, 'botharness-browser: styles');\n ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'botharness-browser: dictionaries');\n ctx.inject(['channelSidebar', 'connection'], (sidebarCtx) => {\n const registry = (sidebarCtx as unknown as { channelSidebar?: ChannelSidebarRegistryLike })\n .channelSidebar;\n connectionRpc = (sidebarCtx as unknown as { connection?: { rpc?: ConnectionRpcLike } })\n .connection?.rpc;\n if (registry === undefined) return;\n ctx.effect(\n () =>\n registry.register({\n id: ENTRY_ID,\n icon: 'globe',\n label: t('entry.label'),\n order: 41,\n scope: 'personabot',\n component: createBrowserBody(t),\n headerAction: createBrowserHeader(t),\n badge: createBrowserBadge(t),\n tab: 'screen',\n }),\n 'botharness-browser: channel sidebar entry',\n );\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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,MAAM,CACJ,CAAC,QAAQ;IAAE,OAAO;IAAM,QAAQ;IAAM,GAAG;IAAK,GAAG;IAAM,IAAI;IAAK,IAAI;GAAI,CAAC,GACzE,CAAC,QAAQ,EAAE,GAAG,2BAA2B,CAAC,CAC5C;GACA,MAAM,CACJ,CACE,QACA,EACE,GAAG,qFACL,CACF,CACF;GACA,aAAa,CACX,CAAC,QAAQ;IAAE,OAAO;IAAM,QAAQ;IAAM,GAAG;IAAK,GAAG;IAAM,IAAI;IAAK,IAAI;GAAI,CAAC,GACzE,CAAC,QAAQ,EAAE,GAAG,0BAA0B,CAAC,CAC3C;GACA,KAAK,CACH,CACE,QACA,EACE,GAAG,wGACL,CACF,GACA,CAAC,UAAU;IAAE,IAAI;IAAM,IAAI;IAAM,GAAG;GAAI,CAAC,CAC3C;GACA,WAAW;IACT,CACE,QACA,EACE,GAAG,iGACL,CACF;IACA,CAAC,QAAQ,EAAE,GAAG,uCAAuC,CAAC;IACtD,CACE,QACA,EACE,GAAG,+FACL,CACF;IACA,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC;GAC9B;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4DACL,CACF;IACA,CACE,QACA,EACE,GAAG,+EACL,CACF;IACA,CACE,QACA,EACE,GAAG,0DACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,wBACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,mBAAmB,CACjB,CACE,QACA,EACE,GAAG,sHACL,CACF,GACA,CACE,QACA,EACE,GAAG,yGACL,CACF,CACF;GACA,OAAO,CACL,CACE,YACA,EACE,QAAQ,oCACV,CACF,GACA,CACE,QACA,EACE,GAAG,6GACL,CACF,CACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,6GACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4CACL,CACF;IACA,CACE,QACA,EACE,GAAG,8BACL,CACF;IACA,CACE,QACA,EACE,GAAG,6BACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,UAAU,CACR,CACE,QACA,EACE,GAAG,0UACL,CACF,GACA,CACE,UACA;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;GACL,CACF,CACF;GACA,SAAS;IACP,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;GACF;GACA,OAAO;IACL,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,QACA,EACE,GAAG,kDACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;GACF;GACA,eAAe,CACb,CACE,QACA;IACE,OAAO;IACP,QAAQ;IACR,GAAG;IACH,GAAG;IACH,IAAI;GACN,CACF,GACA,CACE,QACA,EACE,GAAG,WACL,CACF,CACF;GACA,mBAAmB;IACjB,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA,EACE,GAAG,UACL,CACF;IACA,CACE,QACA,EACE,GAAG,UACL,CACF;GACF;GACA,iBAAiB;IACf,CAAC,UAAU;KAAE,IAAI;KAAK,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"} \ No newline at end of file +{"version":3,"file":"client.js","names":["createElement","stylex","space","x1","x2","x3","x4","x5","x6","text","metaSize","metaLine","bodySize","bodyLine","titleSize","titleLine","regular","strong","radius","xs","sm","md","lg","panel","round","border","hairline","focus","size","inlineIcon","icon","row","nav","dialog","small","bodyMax","medium","wide","actionColor","secondary","hover","danger","dangerLabel","color","fg","muted","subtle","divider","borderStrong","selected","navSelected","accent","accentText","onAccent","onDanger","dangerEdge","dangerSoft","warning","warningEdge","warningSoft","success","surface","elevated","base","modal","well","accentTint","ReactElement","ReactNode","stylex","ChannelSidebarIcon","border","color","radius","size","space","text","EmptyState","title","description","action","status","undefined","PanelEmptyState","icon","children","useRef","useCallback","Button","Pill","IconFullscreenOutlineRegular","useState","StateDot","useRef","useCallback","Fragment","createContext","useContext","PrimitiveTooltip","ReactElement","ReactNode","stylex","color","space","text","styles","note","kogj98","kGuDYH","kLWn49","kHjlTd","$$css","inset","k8WAf4","kg3NbH","muted","kMwMTN","subtle","danger","success","warning","NoteTone","Note","tone","children","props","useState","ReactElement","ReactNode","stylex","Button","Note","color","radius","space","text","MissingPackagesAccess","MissingPackagesLabels","missing","manual","install","copy","copied","formatProgressMiB","bytes","toFixed","ProgressLine","percent","label","value","Math","max","min","MissingPackages","command","access","installing","busy","onInstall","labels","children","setCopied","navigator","clipboard","writeText","then","undefined","useState","useRef","useCallback","native","useId","useRef","useId","useState","Input","IconChevronDownOutlineRegular","createPortal","MenuSurface","IconPlusOutlineRegular","NativeMenu","Menu","ComponentProps","createPortal","stylex","useMountedResource","border","space","MenuPoint","x","y","pointerMenuPosition","point","width","height","viewport","top","margin","Number","parseFloat","x4","Math","max","min","PointerMenuProps","Omit","container","Element","align","PointerMenu","document","body","props","mount","HTMLSpanElement","node","menu","querySelector","HTMLElement","originalMaxWidth","getComputedStyle","maxWidth","originalMinWidth","minWidth","place","scale","getBoundingClientRect","cssZoom","currentCSSZoom","undefined","scaleX","scaleY","root","documentElement","clearance","hasAttribute","getPropertyValue","availableWidth","innerWidth","style","Infinity","maxHeight","innerHeight","box","desired","left","observer","ResizeObserver","observe","window","addEventListener","disconnect","removeEventListener","className","ButtonHTMLAttributes","InputHTMLAttributes","ReactElement","ReactNode","stylex","actionColor","border","color","radius","size","space","text","pillStyles","pill","k1xSpc","kGNEyG","kOIVth","ks0D6T","kZKoxP","kg3NbH","kMzoRj","kaIpWk","kWkggS","kMwMTN","kMv6JI","kGuDYH","kLWn49","khDVqt","kkrTdU","kSiTet","kI3sdo","kInvED","$$css","PillButton","children","rest","Omit","HTMLButtonElement","PillFileButton","input","HTMLInputElement","PointerMenu","MenuPoint","useMountedResource","useRef","useState","ReactElement","ReactNode","stylex","IconChevronDownOutlineRegular","pillStyles","color","space","SelectOption","value","Value","label","SelectProps","options","onChange","disabled","align","autoFocus","reselect","Select","open","setOpen","point","setPoint","trigger","HTMLButtonElement","active","mount","node","current","place","rect","getBoundingClientRect","scale","offsetHeight","height","next","x","right","left","y","bottom","Number","parseFloat","x2","previous","resize","ResizeObserver","undefined","observe","document","documentElement","observer","MutationObserver","attributes","attributeFilter","window","addEventListener","disconnect","removeEventListener","close","button","menu","activeElement","closest","queueMicrotask","focused","isConnected","body","contains","focus","preventScroll","find","option","event","stopPropagation","props","pill","map","id","useId","ReactElement","ReactNode","Ref","stylex","border","color","space","text","NARROW","COMPACT","SettingsRows","children","rootRef","HTMLDivElement","SettingsSectionProps","title","description","SettingsSection","id","undefined","SettingsRowProps","control","data","Readonly","Record","SettingsRow","titleId","descriptionId","SettingsValue","useState","useMemo","useSyncExternalStore","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useCallback","Tag","Button","useState","useRef","useCallback","Tag","Button","Input","useState","useRef","useSyncExternalStore","useId","useCallback","Tag","Switch","Button","IconFullscreenOutlineRegular"],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.1/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../../client/src/client/channel-sidebar-icon.tsx","../../client/src/client/ds/tokens.stylex.ts","../../client/src/client/ds/empty-state.tsx","../../client/src/client/mounted-resource.ts","../../client/src/client/remote-viewer/tokens.ts","../../client/src/client/remote-viewer/viewer-state.ts","../../client/src/client/remote-viewer/frame-liveness.ts","../../client/src/client/remote-viewer/index.tsx","../../client/src/client/ds/tooltip.tsx","../../client/src/client/telemetry-surface.ts","../../client/src/client/sidebar-card.tsx","../src/client/locale.ts","../src/failure-kinds.ts","../../client/src/client/ds/note.tsx","../../client/src/client/missing-packages.tsx","../src/client/browser-failure.tsx","../../client/src/client/anchored-panel.ts","../../client/src/client/combobox.tsx","../src/client/profile-combobox.tsx","../../client/src/client/appearance-scope.ts","../../client/src/client/appearance-primitives.tsx","../../client/src/client/ds/pointer-menu.tsx","../../client/src/client/ds/pill-button.tsx","../../client/src/client/ds/select.tsx","../../client/src/client/ds/settings-row.tsx","../src/client/settings.tsx","../src/client/profile-browser.tsx","../src/client/daily-browser.tsx","../src/client/borrowed-browser.tsx","../../client/src/client/ds/stylex-css.ts","../src/client/styles.ts","../src/client/access-power-icon.tsx","../src/client/viewer-icons.tsx","../src/client/index.tsx"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","/**\n * Vendored Channel sidebar glyphs from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the matching lucide `dist/esm/icons/*.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { createElement, type ReactElement } from 'react';\n\nconst glyphs: Record][]> = {\n image: [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'm21 15-4-4L7 21' }],\n ],\n 'arrow-left': [\n ['path', { d: 'm12 19-7-7 7-7' }],\n ['path', { d: 'M19 12H5' }],\n ],\n 'chevron-right': [['path', { d: 'm9 18 6-6-6-6' }]],\n store: [\n ['path', { d: 'M15 21v-5a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v5' }],\n [\n 'path',\n {\n d: 'M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244',\n },\n ],\n ['path', { d: 'M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05' }],\n ],\n house: [['path', { d: 'm3 10 9-7 9 7v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z' }]],\n search: [\n ['path', { d: 'm21 21-4.34-4.34' }],\n ['circle', { cx: '11', cy: '11', r: '8' }],\n ],\n hash: [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21' }],\n ],\n 'messages-circle': [\n [\n 'path',\n {\n d: 'M19.95 10.05a7 7 0 011.412 7.872 1 1 0 00-.058.787l.675 2.089a1 1 0 01-1.236 1.168l-2.155-.631a1 1 0 00-.745.06 7 7 0 01-7.793-1.445',\n },\n ],\n [\n 'path',\n {\n d: 'M2.696 12.708a1 1 0 00-.058-.785 7 7 0 113.518 3.473 1 1 0 00-.744-.061l-2.155.63a1 1 0 01-1.236-1.167z',\n },\n ],\n ],\n 'text-quote': [\n ['path', { d: 'M17 5H3' }],\n ['path', { d: 'M21 12H8' }],\n ['path', { d: 'M21 19H8' }],\n ['path', { d: 'M3 12v7' }],\n ],\n brain: [\n ['path', { d: 'M12 18V5' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77' }],\n ],\n file: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5' }],\n ],\n terminal: [\n ['path', { d: 'M12 19h8' }],\n ['path', { d: 'm4 17 6-6-6-6' }],\n ],\n archive: [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8' }],\n ['path', { d: 'M10 12h4' }],\n ],\n 'archive-restore': [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M20 8v11a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'm9 15 3-3 3 3' }],\n ['path', { d: 'M12 12v9' }],\n ],\n 'alarm-clock': [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M12 9v4l2 2' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ],\n 'bell-ring': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8' }],\n ],\n bell: [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ],\n 'bell-off': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05' }],\n ],\n cpu: [\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M17 20v2' }],\n ['path', { d: 'M17 2v2' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M2 17h2' }],\n ['path', { d: 'M2 7h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'M20 17h2' }],\n ['path', { d: 'M20 7h2' }],\n ['path', { d: 'M7 20v2' }],\n ['path', { d: 'M7 2v2' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1' }],\n ],\n 'id-card': [\n ['path', { d: 'M13 19a4 4 0 00-8 0' }],\n ['path', { d: 'M16 10h2' }],\n ['path', { d: 'M16 14h2' }],\n ['circle', { cx: '9', cy: '12', r: '3' }],\n ['rect', { x: '2', y: '5', width: '20', height: '14', rx: '2' }],\n ],\n plug: [\n ['path', { d: 'M12 22v-5' }],\n ['path', { d: 'M15 8V2' }],\n [\n 'path',\n {\n d: 'M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z',\n },\n ],\n ['path', { d: 'M9 8V2' }],\n ],\n ruler: [\n [\n 'path',\n {\n d: 'M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z',\n },\n ],\n ['path', { d: 'm14.5 12.5 2-2' }],\n ['path', { d: 'm11.5 9.5 2-2' }],\n ['path', { d: 'm8.5 6.5 2-2' }],\n ['path', { d: 'm17.5 15.5 2-2' }],\n ],\n compass: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'path',\n {\n d: 'm16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z',\n },\n ],\n ],\n gauge: [\n ['path', { d: 'm12 14 4-4' }],\n ['path', { d: 'M3.34 19a10 10 0 1 1 17.32 0' }],\n ],\n 'user-check': [\n ['path', { d: 'm16 11 2 2 4-4' }],\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ],\n 'shield-check': [\n [\n 'path',\n {\n d: 'M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n upload: [\n ['path', { d: 'M12 3v12' }],\n ['path', { d: 'm17 8-5-5-5 5' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4' }],\n ],\n package: [\n [\n 'path',\n {\n d: 'M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z',\n },\n ],\n ['path', { d: 'M12 22V12' }],\n ['path', { d: 'M3.29 7 12 12l8.71-5' }],\n ['path', { d: 'm7.5 4.27 9 5.15' }],\n ],\n plus: [\n ['path', { d: 'M5 12h14' }],\n ['path', { d: 'M12 5v14' }],\n ],\n user: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '12', cy: '7', r: '4' }],\n ],\n 'user-plus': [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['path', { d: 'M19 8v6' }],\n ['path', { d: 'M22 11h-6' }],\n ],\n bot: [\n ['path', { d: 'M12 8V4H8' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2' }],\n ['path', { d: 'M2 14h2' }],\n ['path', { d: 'M20 14h2' }],\n ['path', { d: 'M15 13v2' }],\n ['path', { d: 'M9 13v2' }],\n ],\n 'list-checks': [\n ['path', { d: 'M13 5h8' }],\n ['path', { d: 'M13 12h8' }],\n ['path', { d: 'M13 19h8' }],\n ['path', { d: 'm3 17 2 2 4-4' }],\n ['path', { d: 'm3 7 2 2 4-4' }],\n ],\n palette: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor' }],\n ],\n 'image-up': [\n [\n 'path',\n {\n d: 'M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21',\n },\n ],\n ['path', { d: 'm14 19.5 3-3 3 3' }],\n ['path', { d: 'M17 22v-5.5' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ],\n lock: [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4' }],\n ],\n play: [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n },\n ],\n ],\n 'lock-open': [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 9.9-1' }],\n ],\n eye: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n 'eye-off': [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ],\n files: [\n [\n 'path',\n {\n d: 'M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8',\n },\n ],\n [\n 'path',\n {\n d: 'M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z',\n },\n ],\n [\n 'path',\n {\n d: 'M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1',\n },\n ],\n ],\n 'git-branch': [\n [\n 'path',\n {\n d: 'M15 6a9 9 0 0 0-9 9V3',\n },\n ],\n [\n 'circle',\n {\n cx: '18',\n cy: '6',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '6',\n cy: '18',\n r: '3',\n },\n ],\n ],\n 'messages-square': [\n [\n 'path',\n {\n d: 'M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',\n },\n ],\n [\n 'path',\n {\n d: 'M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1',\n },\n ],\n ],\n inbox: [\n [\n 'polyline',\n {\n points: '22 12 16 12 14 15 10 15 8 12 2 12',\n },\n ],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ],\n 'folder-key': [\n [\n 'path',\n {\n d: 'M13 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1.36',\n },\n ],\n [\n 'path',\n {\n d: 'M19 12v6',\n },\n ],\n [\n 'path',\n {\n d: 'M19 14h2',\n },\n ],\n [\n 'circle',\n {\n cx: '19',\n cy: '20',\n r: '2',\n },\n ],\n ],\n users: [\n [\n 'path',\n {\n d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2',\n },\n ],\n [\n 'path',\n {\n d: 'M16 3.128a4 4 0 0 1 0 7.744',\n },\n ],\n [\n 'path',\n {\n d: 'M22 21v-2a4 4 0 0 0-3-3.87',\n },\n ],\n [\n 'circle',\n {\n cx: '9',\n cy: '7',\n r: '4',\n },\n ],\n ],\n 'settings-2': [\n [\n 'path',\n {\n d: 'M14 17H5',\n },\n ],\n [\n 'path',\n {\n d: 'M19 7h-9',\n },\n ],\n [\n 'circle',\n {\n cx: '17',\n cy: '17',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '7',\n cy: '7',\n r: '3',\n },\n ],\n ],\n settings: [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n },\n ],\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '3',\n },\n ],\n ],\n monitor: [\n [\n 'rect',\n {\n width: '20',\n height: '14',\n x: '2',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'line',\n {\n x1: '8',\n x2: '16',\n y1: '21',\n y2: '21',\n },\n ],\n [\n 'line',\n {\n x1: '12',\n x2: '12',\n y1: '17',\n y2: '21',\n },\n ],\n ],\n globe: [\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '10',\n },\n ],\n [\n 'path',\n {\n d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12h20',\n },\n ],\n ],\n 'panel-right': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M15 3v18',\n },\n ],\n ],\n 'panels-top-left': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M3 9h18',\n },\n ],\n [\n 'path',\n {\n d: 'M9 21V9',\n },\n ],\n ],\n 'grip-vertical': [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '9', cy: '5', r: '1' }],\n ['circle', { cx: '9', cy: '19', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['circle', { cx: '15', cy: '19', r: '1' }],\n ],\n star: [\n [\n 'path',\n {\n d: 'M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z',\n },\n ],\n ],\n copy: [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n 'external-link': [\n ['path', { d: 'M15 3h6v6' }],\n ['path', { d: 'M10 14 21 3' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6' }],\n ],\n sun: [\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ],\n moon: [\n [\n 'path',\n {\n d: 'M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401',\n },\n ],\n ],\n crop: [\n ['path', { d: 'M6 2v14a2 2 0 0 0 2 2h14' }],\n ['path', { d: 'M18 22V8a2 2 0 0 0-2-2H2' }],\n ],\n ban: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M4.929 4.929 19.07 19.071' }],\n ],\n x: [\n ['path', { d: 'M18 6 6 18' }],\n ['path', { d: 'm6 6 12 12' }],\n ],\n 'message-square': [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z',\n },\n ],\n ],\n keyboard: [\n ['path', { d: 'M10 8h.01' }],\n ['path', { d: 'M12 12h.01' }],\n ['path', { d: 'M14 8h.01' }],\n ['path', { d: 'M16 12h.01' }],\n ['path', { d: 'M18 8h.01' }],\n ['path', { d: 'M6 8h.01' }],\n ['path', { d: 'M7 16h10' }],\n ['path', { d: 'M8 12h.01' }],\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2' }],\n ],\n smartphone: [\n ['rect', { width: '14', height: '20', x: '5', y: '2', rx: '2', ry: '2' }],\n ['path', { d: 'M12 18h.01' }],\n ],\n 'sliders-horizontal': [\n ['path', { d: 'M10 5H3' }],\n ['path', { d: 'M12 19H3' }],\n ['path', { d: 'M14 3v4' }],\n ['path', { d: 'M16 17v4' }],\n ['path', { d: 'M21 12h-9' }],\n ['path', { d: 'M21 19h-5' }],\n ['path', { d: 'M21 5h-7' }],\n ['path', { d: 'M8 10v4' }],\n ['path', { d: 'M8 12H3' }],\n ],\n info: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M12 16v-4' }],\n ['path', { d: 'M12 8h.01' }],\n ],\n puzzle: [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n },\n ],\n ],\n check: [\n [\n 'path',\n {\n d: 'M20 6 9 17l-5-5',\n },\n ],\n ],\n laptop: [\n [\n 'path',\n {\n d: 'M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z',\n },\n ],\n ['path', { d: 'M20.054 15.987H3.946' }],\n ],\n server: [\n ['rect', { width: '20', height: '8', x: '2', y: '2', rx: '2', ry: '2' }],\n ['rect', { width: '20', height: '8', x: '2', y: '14', rx: '2', ry: '2' }],\n ['line', { x1: '6', x2: '6.01', y1: '6', y2: '6' }],\n ['line', { x1: '6', x2: '6.01', y1: '18', y2: '18' }],\n ],\n building: [\n ['path', { d: 'M12 10h.01' }],\n ['path', { d: 'M12 14h.01' }],\n ['path', { d: 'M12 6h.01' }],\n ['path', { d: 'M16 10h.01' }],\n ['path', { d: 'M16 14h.01' }],\n ['path', { d: 'M16 6h.01' }],\n ['path', { d: 'M8 10h.01' }],\n ['path', { d: 'M8 14h.01' }],\n ['path', { d: 'M8 6h.01' }],\n ['path', { d: 'M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3' }],\n ['rect', { x: '4', y: '2', width: '16', height: '20', rx: '2' }],\n ],\n briefcase: [\n ['path', { d: 'M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16' }],\n ['rect', { width: '20', height: '14', x: '2', y: '6', rx: '2' }],\n ],\n 'flask-conical': [\n [\n 'path',\n {\n d: 'M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2',\n },\n ],\n ['path', { d: 'M6.453 15h11.094' }],\n ['path', { d: 'M8.5 2h7' }],\n ],\n 'gamepad-2': [\n ['line', { x1: '6', x2: '10', y1: '11', y2: '11' }],\n ['line', { x1: '8', x2: '8', y1: '9', y2: '13' }],\n ['line', { x1: '15', x2: '15.01', y1: '12', y2: '12' }],\n ['line', { x1: '18', x2: '18.01', y1: '10', y2: '10' }],\n [\n 'path',\n {\n d: 'M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z',\n },\n ],\n ],\n paintbrush: [\n ['path', { d: 'm14.622 17.897-10.68-2.913' }],\n [\n 'path',\n {\n d: 'M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0z',\n },\n ],\n [\n 'path',\n {\n d: 'M9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15',\n },\n ],\n ],\n 'audio-lines': [\n ['path', { d: 'M2 10v3' }],\n ['path', { d: 'M6 6v11' }],\n ['path', { d: 'M10 3v18' }],\n ['path', { d: 'M14 8v7' }],\n ['path', { d: 'M18 5v13' }],\n ['path', { d: 'M22 10v3' }],\n ],\n 'book-open': [\n ['path', { d: 'M12 5v16' }],\n [\n 'path',\n {\n d: 'M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z',\n },\n ],\n ],\n zap: [\n [\n 'path',\n {\n d: 'M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z',\n },\n ],\n ],\n heart: [\n [\n 'path',\n {\n d: 'M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5',\n },\n ],\n ],\n leaf: [\n [\n 'path',\n {\n d: 'M11 20a10 10 0 0010-10 25.9 25.9 0 00-1.04-7.281 1 1 0 00-1.755-.325C15.833 5.5 13 5.5 9.8 6.1A7 7 0 0011 20',\n },\n ],\n ['path', { d: 'M2 21a5 5 0 012.911-4.544C7.613 15.212 8.351 15.24 11 13' }],\n ],\n phone: [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n },\n ],\n ],\n video: [\n ['path', { d: 'm16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5' }],\n ['rect', { x: '2', y: '6', width: '14', height: '12', rx: '2' }],\n ],\n 'video-off': [\n ['path', { d: 'M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196' }],\n ['path', { d: 'M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n 'phone-off': [\n [\n 'path',\n {\n d: 'M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272',\n },\n ],\n ['path', { d: 'M22 2 2 22' }],\n [\n 'path',\n {\n d: 'M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473',\n },\n ],\n ],\n mic: [\n ['path', { d: 'M12 19v3' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3' }],\n ],\n 'mic-off': [\n ['path', { d: 'M12 19v3' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12' }],\n ],\n tv: [\n ['path', { d: 'm17 2-5 5-5-5' }],\n ['rect', { width: '20', height: '15', x: '2', y: '7', rx: '2' }],\n ],\n};\n\nexport function ChannelSidebarIcon({\n name = 'panels-top-left',\n size = 16,\n}: {\n name?: string | undefined;\n size?: number | string;\n}): ReactElement {\n const nodes = Object.hasOwn(glyphs, name) ? glyphs[name]! : glyphs['panels-top-left']!;\n return (\n \n {nodes.map(([tag, attributes], index) => createElement(tag, { ...attributes, key: index }))}\n \n );\n}\n","import * as stylex from '@stylexjs/stylex';\n\nexport const space = stylex.defineConsts({\n x1: '2px',\n x2: '4px',\n x3: '8px',\n x4: '12px',\n x5: '16px',\n x6: '24px',\n});\n\nexport const text = stylex.defineConsts({\n metaSize: '12px',\n metaLine: '16px',\n bodySize: '13px',\n bodyLine: '20px',\n titleSize: '14px',\n titleLine: '20px',\n regular: '400',\n strong: '500',\n});\n\nexport const radius = stylex.defineConsts({\n xs: 'var(--dsw-radius-xs, 4px)',\n sm: 'var(--dsw-radius-sm, 8px)',\n md: 'var(--dsw-radius-md, 12px)',\n lg: 'var(--dsw-radius-lg, 16px)',\n panel: 'var(--dsw-radius-panel)',\n round: '50%',\n});\n\nexport const border = stylex.defineConsts({\n hairline: '1px',\n focus: 'var(--dsw-focus-ring-width, 2px)',\n});\n\nexport const size = stylex.defineConsts({\n inlineIcon: '26px',\n icon: '28px',\n row: '32px',\n nav: '40px',\n});\n\nexport const dialog = stylex.defineConsts({\n small: 'min(440px, calc(100vw - 32px))',\n bodyMax: 'min(60vh, 520px)',\n medium: 'min(760px, calc(100vw - 32px))',\n wide: 'min(1060px, calc(100vw - 32px))',\n});\n\nexport const actionColor = stylex.defineConsts({\n secondary:\n 'color-mix(in srgb, var(--dsw-alias-label-primary) 8%, var(--dsw-alias-bg-module-platform))',\n hover:\n 'color-mix(in srgb, var(--dsw-alias-label-primary) 13%, var(--dsw-alias-bg-module-platform))',\n danger:\n 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, var(--dsw-alias-bg-module-platform))',\n dangerLabel:\n 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 65%, var(--dsw-alias-label-primary))',\n});\n\nexport const color = stylex.defineConsts({\n fg: 'var(--dsw-alias-label-primary)',\n muted: 'var(--dsw-alias-label-secondary)',\n subtle: 'var(--dsw-alias-label-tertiary)',\n divider: 'var(--dsw-alias-border-l1)',\n border: 'var(--dsw-alias-border-l2)',\n borderStrong: 'var(--dsw-alias-border-l3)',\n hover: 'var(--dsw-alias-interactive-bg-hover)',\n selected: 'var(--dsw-alias-interactive-bg-active)',\n navSelected: 'var(--dsw-specific-sidebar-nav-item-active)',\n accent: 'var(--dsw-alias-state-business-primary)',\n accentText: 'var(--dsw-alias-link)',\n onAccent: 'var(--dsw-alias-label-primary-foreground)',\n danger: 'var(--dsw-alias-state-error-primary)',\n onDanger: 'var(--dsw-alias-label-primary-foreground)',\n dangerEdge: 'var(--dsw-alias-state-error-secondary)',\n dangerSoft: 'var(--dsw-alias-interactive-bg-hover-danger)',\n warning: 'var(--dsw-alias-state-warn-primary)',\n warningEdge: 'var(--dsw-alias-state-warn-secondary)',\n warningSoft: 'var(--dsw-alias-state-warn-tertiary)',\n success: 'var(--dsw-alias-state-success-primary)',\n surface: 'var(--dsw-alias-bg-module-platform)',\n elevated: 'var(--dsw-alias-button-elevated-fill)',\n base: 'var(--dsw-alias-bg-base)',\n modal: 'var(--dsw-alias-bg-layer-2)',\n well: 'var(--dsw-alias-bg-base)',\n accentTint: 'var(--dsw-alias-state-business-tertiary)',\n});\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { ChannelSidebarIcon } from '../channel-sidebar-icon.js';\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: space.x3,\n marginBlock: space.x4,\n paddingBlock: space.x6,\n paddingInline: space.x5,\n borderWidth: border.hairline,\n borderStyle: 'dashed',\n borderColor: color.border,\n borderRadius: radius.md,\n textAlign: 'center',\n },\n panel: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n gap: space.x4,\n padding: space.x5,\n boxSizing: 'border-box',\n textAlign: 'center',\n color: color.muted,\n },\n icon: { width: size.nav, height: size.nav, flexShrink: 0, color: color.subtle },\n title: {\n margin: 0,\n color: color.fg,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n fontWeight: text.strong,\n },\n description: {\n margin: 0,\n maxWidth: '360px',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nexport function EmptyState({\n title,\n description,\n action,\n status = false,\n}: {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly action?: ReactNode;\n readonly status?: boolean;\n}): ReactElement {\n return (\n
\n

{title}

\n {description === undefined ? null : (\n

{description}

\n )}\n {action}\n
\n );\n}\n\nexport function PanelEmptyState({\n icon,\n children,\n action,\n}: {\n readonly icon?: string | undefined;\n readonly children: ReactNode;\n readonly action?: ReactNode;\n}): ReactElement {\n return (\n
\n \n \n \n

{children}

\n {action === undefined ? null :
{action}
}\n
\n );\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","export const BH = {\n labelSecondary: 'var(--dsw-alias-label-secondary)',\n hoverFill: 'var(--dsw-alias-interactive-bg-hover)',\n errorPrimary: 'var(--dsw-alias-state-error-primary)',\n radiusMd: 'var(--dsw-radius-md)',\n labelPrimary: 'var(--dsw-alias-label-primary, #0f1115)',\n labelPrimaryForeground: 'var(--dsw-alias-label-primary-foreground, #ffffff)',\n borderL2: 'var(--dsw-alias-border-l2, #0000001a)',\n borderL3: 'var(--dsw-alias-border-l3, #0000001f)',\n borderL4: 'var(--dsw-alias-border-l4, #00000029)',\n bgBase: 'var(--dsw-alias-bg-base, #ffffff)',\n buttonPrimaryFill: 'var(--dsw-alias-button-primary-fill, #0f1115)',\n buttonElevatedFill: 'var(--dsw-alias-button-elevated-fill, transparent)',\n businessPrimary: 'var(--dsw-alias-state-business-primary, #4176e6)',\n hoverScrim: 'color-mix(in srgb, var(--dsw-alias-bg-base) 35%, transparent)',\n} as const;\n\nexport const VIDEO_SURFACE = {\n background: '#000000',\n spinnerTrack: 'rgba(255, 255, 255, 0.18)',\n spinnerArc: '#ffffff',\n onVideo: '#ffffff',\n} as const;\n","import type { ViewerKey } from './locale.js';\n\nexport type ViewerAction = 'open' | 'collapse';\n\nexport function nextExpanded(action: ViewerAction): boolean {\n return action === 'open';\n}\n\nexport type FramePhase = 'connecting' | 'live' | 'empty';\n\nexport const PHASE_SMOOTH_AFTER = 2;\n\nexport interface SmoothedPhase {\n readonly phase: FramePhase;\n readonly streak: number;\n}\n\nexport function smoothPhase(shown: FramePhase, raw: FramePhase, streak: number): SmoothedPhase {\n if (raw === 'live') return { phase: 'live', streak: 0 };\n if (shown !== 'live') return { phase: raw, streak: 0 };\n const next = streak + 1;\n if (next >= PHASE_SMOOTH_AFTER) return { phase: raw, streak: next };\n return { phase: shown, streak: next };\n}\n\nexport function dotStateFor(phase: FramePhase): 'done' | 'ongoing' | 'error' {\n if (phase === 'live') return 'done';\n if (phase === 'empty') return 'error';\n return 'ongoing';\n}\n\nexport function statusKeyFor(phase: FramePhase, reconnecting: boolean): ViewerKey {\n if (phase === 'live') return 'entry.live';\n if (phase === 'empty') return 'entry.noScreen';\n return reconnecting ? 'entry.reconnecting' : 'entry.connecting';\n}\n\nexport function stopKey(busy: boolean, stopping: boolean): ViewerKey {\n return busy || stopping ? 'entry.stopping' : 'entry.stop';\n}\n\nconst EXIT_REPORT = /^exited code=\\d+$/;\n\nexport function isExitReport(detail: string | undefined): boolean {\n return detail !== undefined && EXIT_REPORT.test(detail);\n}\n","import type { FramePhase } from './viewer-state.js';\n\nexport const EMPTY_AFTER_MISSES = 6;\n\nexport const BUSY_EMPTY_AFTER = 30;\n\nexport const QUIET_TOLERANCE = 4;\n\nexport const QUIET_ABANDON = 120;\n\nexport const LOSS_REMOUNT_AFTER = 3;\n\nexport const MAX_AUTO_RELOAD = 3;\n\nconst STATUS_ELEMENT_ID = 'status-display';\n\nconst BUSY_TEXT = /connecting|reconnect|disconnect|failed|error/i;\n\nexport interface StreamSample {\n readonly sized: boolean;\n readonly busy: boolean;\n readonly signature?: number;\n}\n\nexport interface StreamTracker {\n readonly misses: number;\n readonly busyStreak: number;\n readonly quiet: number;\n readonly lastSignature?: number;\n readonly live?: true;\n}\n\nexport function hashBytes(data: Uint8ClampedArray): number {\n let hash = 0x81_9c_9d_c5;\n for (let index = 0; index < data.length; index += 1) {\n hash ^= data[index] ?? 0;\n hash = Math.imul(hash, 0x01_00_01_93);\n }\n return hash >>> 0;\n}\n\nexport function upstreamBusy(doc: Document | null | undefined): boolean {\n try {\n const element = doc?.getElementById(STATUS_ELEMENT_ID) as HTMLElement | null;\n if (element === null || element === undefined) return false;\n if (element.classList.contains('hidden')) return false;\n return BUSY_TEXT.test(element.textContent ?? '');\n } catch {\n return false;\n }\n}\n\nfunction signatureOf(\n doc: Document,\n surface: HTMLVideoElement | HTMLCanvasElement,\n): number | undefined {\n try {\n const scratch = doc.createElement('canvas');\n scratch.width = 16;\n scratch.height = 16;\n const context = scratch.getContext('2d', { willReadFrequently: true });\n if (context === null) return undefined;\n context.drawImage(surface, 0, 0, 16, 16);\n return hashBytes(context.getImageData(0, 0, 16, 16).data);\n } catch {\n return undefined;\n }\n}\n\nexport function sampleSurface(doc: Document | null | undefined): StreamSample {\n const busy = upstreamBusy(doc);\n let sized = false;\n let signature: number | undefined;\n try {\n const surface = doc?.getElementById('videoCanvas') as\n | HTMLVideoElement\n | HTMLCanvasElement\n | null;\n const videoWidth = (surface as { readonly videoWidth?: unknown } | null)?.videoWidth;\n const canvasWidth = (surface as { readonly width?: unknown } | null)?.width;\n const width =\n typeof videoWidth === 'number'\n ? videoWidth\n : typeof canvasWidth === 'number'\n ? canvasWidth\n : 0;\n sized = surface !== null && surface !== undefined && width > 0;\n if (sized && surface !== null && surface !== undefined && doc !== null && doc !== undefined) {\n signature = signatureOf(doc, surface);\n }\n } catch {\n signature = undefined;\n }\n return signature === undefined ? { sized, busy } : { sized, busy, signature };\n}\nfunction withSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n signature: number | undefined,\n): StreamTracker {\n return signature === undefined ? { ...base } : { ...base, lastSignature: signature };\n}\n\nfunction withPreviousSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n prev: StreamTracker,\n): StreamTracker {\n return prev.lastSignature === undefined\n ? { ...base }\n : { ...base, lastSignature: prev.lastSignature };\n}\n\nexport function shouldRemountLoss(lossStreak: number): boolean {\n return lossStreak >= LOSS_REMOUNT_AFTER;\n}\n\nexport function shouldAutoReload(phase: FramePhase, everLive: boolean, attempts: number): boolean {\n return phase === 'empty' && !everLive && attempts < MAX_AUTO_RELOAD;\n}\n\nexport function nextStreamTracker(\n prev: StreamTracker,\n sample: StreamSample,\n): { readonly tracker: StreamTracker; readonly phase: FramePhase } {\n const signature = sample.signature;\n if (!sample.sized) {\n const misses = prev.misses + 1;\n return {\n tracker: withSignature({ misses, busyStreak: 0, quiet: 0 }, signature),\n phase: misses >= EMPTY_AFTER_MISSES ? 'empty' : 'connecting',\n };\n }\n if (sample.busy) {\n const busyStreak = prev.busyStreak + 1;\n return {\n tracker: withPreviousSignature({ misses: prev.misses, busyStreak, quiet: 0 }, prev),\n phase: busyStreak >= BUSY_EMPTY_AFTER ? 'empty' : 'connecting',\n };\n }\n const changed =\n signature !== undefined && prev.lastSignature !== undefined && signature !== prev.lastSignature;\n if (changed) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet: 0 }, signature), live: true },\n phase: 'live',\n };\n }\n if (signature === undefined) {\n return { tracker: { misses: 0, busyStreak: 0, quiet: 0, live: true }, phase: 'live' };\n }\n const quiet = prev.quiet + 1;\n if (quiet >= QUIET_ABANDON) {\n return {\n tracker: withSignature({ misses: EMPTY_AFTER_MISSES, busyStreak: 0, quiet }, signature),\n phase: 'empty',\n };\n }\n if (prev.live === true || quiet >= QUIET_TOLERANCE) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet }, signature), live: true },\n phase: 'live',\n };\n }\n return {\n tracker: withSignature({ misses: prev.misses, busyStreak: 0, quiet }, signature),\n phase: 'connecting',\n };\n}\n","import {\n Fragment,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Pill,\n StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { BH, VIDEO_SURFACE } from './tokens.js';\nimport {\n dotStateFor,\n nextExpanded,\n smoothPhase,\n statusKeyFor,\n stopKey,\n type FramePhase,\n} from './viewer-state.js';\nimport {\n LOSS_REMOUNT_AFTER,\n nextStreamTracker,\n sampleSurface,\n shouldAutoReload,\n shouldRemountLoss,\n type StreamTracker,\n} from './frame-liveness.js';\nimport type { ViewerTranslate } from './locale.js';\nexport type ViewerLifecycleEvent =\n | { readonly type: 'mount' }\n | { readonly type: 'overlay'; readonly open: boolean }\n | { readonly type: 'phase'; readonly from: FramePhase; readonly to: FramePhase }\n | { readonly type: 'auto-reload'; readonly attempt: number }\n | { readonly type: 'manual-retry' }\n | { readonly type: 'loss-remount'; readonly streak: number };\n\nexport const SPIN_STYLE = '@keyframes bc-spin { to { transform: rotate(360deg); } }';\n\nfunction useStreamPhase(onSample: (phase: FramePhase) => void): RefCallback {\n return useMountedResource(\n (iframe) => {\n let active = true;\n let tracker: StreamTracker = { misses: 0, busyStreak: 0, quiet: 0 };\n let timer: ReturnType | undefined;\n const check = (): void => {\n if (!active) return;\n let doc: Document | null = null;\n try {\n doc = iframe.contentDocument;\n } catch {\n doc = null;\n }\n const next = nextStreamTracker(tracker, sampleSurface(doc));\n tracker = next.tracker;\n onSample(next.phase);\n timer = setTimeout(check, 1000);\n };\n timer = setTimeout(check, 300);\n return () => {\n active = false;\n if (timer !== undefined) clearTimeout(timer);\n };\n },\n [onSample],\n );\n}\n\nexport function ScreenIndicator({ label = '连接中' }: { readonly label?: string }): ReactElement {\n const size = 26;\n const stroke = 2;\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n return (\n \n
\n \n \n \n \n {label}\n
\n \n );\n}\n\nfunction ScreenEmpty({\n t,\n onRetry,\n}: {\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n}): ReactElement {\n return (\n \n
\n {t('entry.noScreen')}\n \n
\n \n );\n}\n\nexport interface StreamOverlayProps {\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly hovered: boolean;\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n readonly onOpen: () => void;\n}\n\nexport function StreamOverlay(props: StreamOverlayProps): ReactElement | null {\n const { phase, reconnecting, hovered, t, onRetry, onOpen } = props;\n if (phase === 'connecting') {\n return ;\n }\n if (phase === 'empty') {\n return ;\n }\n if (!hovered) return null;\n return (\n \n \n \n {t('entry.openFullscreen')}\n \n \n );\n}\n\ninterface ScaledFrameProps {\n readonly src: string;\n readonly title: string;\n readonly design: { width: number; height: number };\n readonly interactive: boolean;\n readonly fit?: 'width' | 'contain';\n readonly iframeRef?: RefCallback;\n}\n\nfunction ScaledFrame({\n src,\n title,\n design,\n interactive,\n fit = 'width',\n iframeRef,\n}: ScaledFrameProps): ReactElement {\n const DESIGN_WIDTH = design.width;\n const DESIGN_HEIGHT = design.height;\n const [box, setBox] = useState({ width: DESIGN_WIDTH, height: DESIGN_HEIGHT });\n const resizeResource = useMountedResource(\n (element) => {\n const frame = element.querySelector('iframe');\n if (frame !== null) {\n frame.inert = !interactive;\n if (!interactive) frame.blur();\n }\n const update = (): void =>\n setBox({ width: element.clientWidth, height: element.clientHeight });\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n },\n [interactive],\n );\n\n const scale =\n fit === 'contain'\n ? Math.min(box.width / DESIGN_WIDTH, box.height / DESIGN_HEIGHT)\n : box.width / DESIGN_WIDTH;\n const offsetX = fit === 'contain' ? Math.max(0, (box.width - DESIGN_WIDTH * scale) / 2) : 0;\n const offsetY = fit === 'contain' ? Math.max(0, (box.height - DESIGN_HEIGHT * scale) / 2) : 0;\n\n return (\n \n \n \n );\n}\n\nfunction CollapseIcon(): ReactElement {\n return (\n \n \n \n \n \n \n );\n}\n\nexport interface ViewerTitleBarProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly interactive: boolean;\n readonly extraControls?: ReactNode;\n readonly onToggleInteractive: () => void;\n readonly onStop: () => void;\n readonly onCollapse: () => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n}\n\nfunction StopButton({\n t,\n busy,\n stopping,\n onStop,\n}: {\n readonly t: ViewerTranslate;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n}): ReactElement {\n return (\n \n );\n}\n\nexport function ViewerTitleBar(props: ViewerTitleBarProps): ReactElement {\n const {\n t,\n title,\n phase,\n reconnecting,\n busy,\n stopping,\n interactive,\n extraControls,\n onToggleInteractive,\n onStop,\n onCollapse,\n hideStop,\n hideInteractiveToggle,\n } = props;\n return (\n \n \n \n {title}\n \n {t(statusKeyFor(phase, reconnecting))}\n {interactive ? null : (\n {t('entry.watchOnly')}\n )}\n \n {extraControls}\n {hideInteractiveToggle ? null : (\n \n {t(interactive ? 'entry.interactive.disable' : 'entry.interactive.enable')}\n \n )}\n {hideStop === true ? null : (\n \n )}\n \n \n \n \n );\n}\n\nexport interface RemoteViewerProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly src: string;\n readonly design: { width: number; height: number };\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n readonly footer?: ReactNode;\n readonly notice?: ReactNode;\n readonly extraControls?: ReactNode;\n readonly onEvent?: (event: ViewerLifecycleEvent) => void;\n readonly interactive?: boolean;\n readonly onToggleInteractive?: () => void;\n readonly onDisableInteraction?: () => void;\n readonly expanded?: boolean;\n readonly onExpandedChange?: (expanded: boolean) => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n readonly allowFrameInput?: boolean | undefined;\n}\n\nexport function RemoteViewer({\n t,\n title,\n src,\n design,\n busy,\n stopping,\n onStop,\n footer,\n notice,\n extraControls,\n onEvent,\n interactive,\n onToggleInteractive,\n onDisableInteraction,\n expanded: controlledExpanded,\n onExpandedChange,\n hideStop,\n hideInteractiveToggle,\n allowFrameInput,\n}: RemoteViewerProps): ReactElement {\n const entryRef = useRef(null);\n const mounted = useRef(false);\n const [hovered, setHovered] = useState(false);\n const [ownExpanded, setOwnExpanded] = useState(false);\n const expanded = controlledExpanded ?? ownExpanded;\n const setExpanded = (next: boolean): void => {\n setOwnExpanded(next);\n onExpandedChange?.(next);\n };\n const [inputEnabled, setInputEnabled] = useState(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [reconnecting, setReconnecting] = useState(false);\n const wasReady = useRef(false);\n const autoReloads = useRef(0);\n const lossStreak = useRef(0);\n const phaseRef = useRef('connecting');\n\n const [smooth, setSmooth] = useState<{ phase: FramePhase; streak: number }>({\n phase: 'connecting',\n streak: 0,\n });\n const resetFrame = useCallback(() => {\n phaseRef.current = 'connecting';\n setSmooth({ phase: 'connecting', streak: 0 });\n setReloadKey((key) => key + 1);\n }, []);\n const onSample = useCallback(\n (nextPhase: FramePhase): void => {\n const fromPhase = phaseRef.current;\n if (fromPhase !== nextPhase) {\n phaseRef.current = nextPhase;\n setSmooth((current) => smoothPhase(current.phase, nextPhase, current.streak));\n onEvent?.({ type: 'phase', from: fromPhase, to: nextPhase });\n }\n if (nextPhase === 'live') {\n wasReady.current = true;\n autoReloads.current = 0;\n lossStreak.current = 0;\n setReconnecting(false);\n return;\n }\n if (wasReady.current) {\n lossStreak.current += 1;\n if (shouldRemountLoss(lossStreak.current)) {\n wasReady.current = false;\n lossStreak.current = 0;\n onEvent?.({ type: 'loss-remount', streak: LOSS_REMOUNT_AFTER });\n setReconnecting(true);\n resetFrame();\n return;\n }\n }\n if (\n fromPhase !== nextPhase &&\n shouldAutoReload(nextPhase, wasReady.current, autoReloads.current)\n ) {\n autoReloads.current += 1;\n onEvent?.({ type: 'auto-reload', attempt: autoReloads.current });\n resetFrame();\n }\n },\n [resetFrame, onEvent],\n );\n const streamRef = useStreamPhase(onSample);\n const phase = smooth.phase;\n\n const reconnect = (): void => {\n onEvent?.({ type: 'manual-retry' });\n setReconnecting(true);\n autoReloads.current = 0;\n lossStreak.current = 0;\n wasReady.current = false;\n resetFrame();\n };\n const openViewer = (): void => {\n setExpanded(nextExpanded('open'));\n onEvent?.({ type: 'overlay', open: true });\n };\n const collapseViewer = (): void => {\n setInputEnabled(false);\n onDisableInteraction?.();\n setExpanded(nextExpanded('collapse'));\n onEvent?.({ type: 'overlay', open: false });\n requestAnimationFrame(() => entryRef.current?.focus());\n };\n const dialogResource = useMountedResource(\n (dialog) => {\n if (!mounted.current) {\n mounted.current = true;\n onEvent?.({ type: 'mount' });\n }\n if (!expanded) return;\n const onKey = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return;\n const focusable = [\n ...dialog.querySelectorAll(\n 'button, [href], iframe, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ].filter((element) => element.tabIndex !== -1);\n const first = focusable[0];\n const last = focusable.at(-1);\n if (first === undefined || last === undefined) return;\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === dialog)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n dialog.focus();\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = previousOverflow;\n };\n },\n [expanded, onDisableInteraction, onEvent],\n );\n\n const statusText = t(statusKeyFor(phase, reconnecting));\n const openable = phase === 'live' && !expanded;\n\n const overlay = (\n \n );\n\n const stopLabel = t(stopKey(busy, stopping));\n const rowButton = (disabled: boolean): CSSProperties => ({\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 28,\n padding: '0 10px',\n borderRadius: 14,\n border: `1px solid ${BH.borderL3}`,\n background: BH.buttonElevatedFill,\n color: BH.labelPrimary,\n fontSize: 12,\n ...(disabled ? { opacity: 0.4, cursor: 'not-allowed' } : { cursor: 'pointer' }),\n });\n\n return (\n \n \n {expanded ? (\n setInputEnabled((current) => !current))\n }\n onStop={onStop}\n onCollapse={collapseViewer}\n hideStop={hideStop}\n hideInteractiveToggle={hideInteractiveToggle}\n />\n ) : null}\n {notice}\n setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={() => {\n if (openable) openViewer();\n }}\n onKeyDown={(event) => {\n if (!openable) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openViewer();\n }}\n style={\n expanded\n ? { position: 'relative', flex: 1, minHeight: 0 }\n : { position: 'relative', cursor: openable ? 'pointer' : 'default' }\n }\n >\n \n {overlay}\n \n {expanded ? null : (\n \n \n {title}\n \n
\n {hideStop === true ? null : (\n \n {stopLabel}\n \n )}\n \n {t('entry.reconnect')}\n \n
\n {footer}\n
\n )}\n \n );\n}\n","import {\n createContext,\n type Context,\n useContext,\n type ComponentProps,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Tooltip as PrimitiveTooltip } from '@deepseek-ai/dsh-client-ui-primitives';\n\nconst shared = globalThis as typeof globalThis & Record | undefined>;\nconst InstantTooltips = (shared[Symbol.for('botharness.instant-tooltips')] ??=\n createContext(false));\n\nexport function InstantTooltipScope({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n\nexport function Tooltip(props: ComponentProps): ReactElement {\n const instant = useContext(InstantTooltips);\n return instant ? (\n \n ) : (\n \n );\n}\n","export type ClientTelemetrySurface = 'desktop_app' | 'browser';\n\nexport interface TelemetryRpc {\n call(path: string, method: string, options?: { args?: unknown }): Promise;\n}\n\nexport function telemetrySurface(): ClientTelemetrySurface {\n return typeof globalThis === 'object' && 'dshDesktop' in globalThis ? 'desktop_app' : 'browser';\n}\n\nexport function recordViewerOpen(\n rpc: TelemetryRpc | undefined,\n panel: 'browser' | 'computer',\n): void {\n void rpc\n ?.call('/api', 'botharness/telemetryEvent', {\n args: {\n event: 'viewer:subpanel_open',\n properties: { panel, surface: telemetrySurface() },\n },\n })\n .catch(() => {});\n}\n","import type { ReactElement, ReactNode, Ref } from 'react';\n\nimport { ChannelSidebarIcon } from './channel-sidebar-icon.js';\n\nexport function SidebarCardList({\n label,\n className,\n listRef,\n flush = false,\n children,\n}: {\n label?: string | undefined;\n className?: string | undefined;\n listRef?: Ref | undefined;\n flush?: boolean | undefined;\n children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n \n );\n}\n\nexport interface SidebarCardRowProps {\n icon?: string | undefined;\n leading?: ReactNode | undefined;\n selection?: { checked: boolean; multiple?: boolean } | undefined;\n iconLabel?: string | undefined;\n title: ReactNode;\n titleClassName?: string | undefined;\n badge?: ReactNode | undefined;\n summary?: ReactNode | undefined;\n flipKey?: string | undefined;\n hint?: string | undefined;\n chips?: ReactNode | undefined;\n meta?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n detail?: ReactNode | undefined;\n onClick?: () => void | undefined;\n disabled?: boolean | undefined;\n muted?: boolean | undefined;\n mainClassName?: string | undefined;\n dialog?: boolean | undefined;\n expanded?: boolean | undefined;\n controls?: string | undefined;\n state?: string | undefined;\n anchor?: string | undefined;\n}\n\nexport function SidebarCardRow({\n icon,\n leading,\n iconLabel,\n selection,\n title,\n titleClassName,\n badge,\n summary,\n flipKey,\n hint,\n chips,\n meta,\n trailing,\n detail,\n onClick,\n disabled,\n muted,\n mainClassName,\n dialog,\n expanded,\n controls,\n state,\n anchor,\n}: SidebarCardRowProps): ReactElement {\n const body = (\n <>\n {leading === undefined ? null : {leading}}\n {icon === undefined ? null : (\n \n \n
\n )}\n \n {badge === undefined ? (\n \n {title}\n \n ) : (\n \n \n {title}\n \n {badge}\n
\n )}\n {summary === undefined ? null : {summary}}\n {chips === undefined ? null : {chips}}\n {meta === undefined ? null : {meta}}\n \n \n );\n const className = mainClassName === undefined ? 'bh-card-main' : 'bh-card-main ' + mainClassName;\n return (\n \n
\n {selection?.multiple === true ? (\n \n ) : onClick === undefined ? (\n
\n {body}\n
\n ) : (\n \n {body}\n \n )}\n {trailing === undefined ? null : {trailing}}\n
\n {detail === undefined ? null : (\n
\n {detail}\n
\n )}\n \n );\n}\n","export const LOCALE_NS = 'botharness-browser';\n\nexport const zh = {\n 'entry.profile.install': '安装 BotHarness Profile 控制扩展',\n 'entry.profile.instructions':\n '在 BotHarness Profile 控制扩展中输入地址和配对码,并确认允许整个 Profile。',\n 'entry.profile.forget': '解除 Profile 配对',\n 'entry.profile.disconnected': 'Profile 已配对,连接已断开',\n 'entry.profile.connected': 'Profile 已连接',\n 'entry.profile.pair': '配对 Chrome Profile',\n 'entry.profile.scope': '此 Chrome Profile 的所有普通网页标签页',\n 'settings.profile-control': '日常 Chrome · 整个 Profile',\n 'settings.daily-control': '日常 Chrome · 控制',\n 'entry.daily.install': '安装 Playwright 扩展',\n 'entry.daily.connect': '连接现有页面',\n 'entry.daily.select': '请在 Chrome 中选择一个现有标签页',\n 'entry.daily.confirm': '已连接,尚未允许操作',\n 'entry.daily.controlled': '已允许此页面的读取、输入和点击',\n 'entry.daily.allow': '允许控制此页面',\n\n 'entry.live': '已连接',\n 'entry.noScreen': '暂无画面',\n 'entry.connecting': '连接中',\n 'entry.reconnecting': '正在重新连接',\n 'entry.reconnect': '重新连接',\n 'entry.openFullscreen': '打开大屏',\n 'entry.collapseFullscreen': '收起全屏',\n 'entry.interactive.disable': '停止交互',\n 'entry.interactive.enable': '开启交互',\n 'entry.watchOnly': '观看模式',\n 'entry.stop': '停止',\n 'entry.stopping': '停止中',\n\n 'settings.localDriver': '本机驱动',\n 'settings.containerDriver': '容器驱动',\n 'settings.driver.current': '默认',\n 'settings.driver.agent-browser': 'agent-browser(试用)',\n 'settings.section': '浏览器控制',\n 'settings.target': '操作目标',\n 'settings.local': '本机 Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': '日常浏览器',\n 'entry.borrow.none': '尚未借用标签页',\n 'entry.borrow.readOnly': '只读借用中',\n 'entry.borrow.pair': '连接浏览器扩展',\n 'entry.borrow.return': '归还标签页',\n 'entry.borrow.code': '配对码',\n 'entry.borrow.cancel': '取消配对',\n 'entry.borrow.instructions':\n '在扩展中输入此地址和配对码,再选择借出当前页面。配对码 5 分钟内有效,仅可使用一次。',\n 'entry.view.interaction': '允许 Human 操作',\n 'entry.view.inputMode.direct': '直接点按',\n 'entry.view.inputMode.trackpad': '触控板',\n 'entry.view.close': '关闭',\n 'entry.view.container': '容器浏览器',\n 'entry.view.browserTitle': '{name}的浏览器',\n 'entry.takeover.start': '接管',\n 'entry.takeover.stop': '取消接管',\n 'entry.takeover.active': '接管中',\n 'entry.label': '浏览器',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access 已开启',\n 'entry.access.description': '开启后,该 Bot 的会话可以使用浏览器',\n 'entry.access.enable': '启用 Browser Access',\n 'entry.access.disable': '停用 Browser Access',\n 'entry.access.failed': '切换 Browser Access 失败',\n 'entry.access.failureHint': '授权失败',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': '切换浏览器 profile 失败',\n 'entry.profile.choose': '选择浏览器 Profile',\n 'entry.profile.create': '创建“{name}”',\n 'entry.view.follow': '跟随 Bot',\n 'entry.view.pause': '暂停 Bot',\n 'entry.view.resume': '继续',\n 'entry.view.open': '打开 Bot 浏览器',\n 'entry.view.fullscreen': '全屏',\n 'entry.view.stop': '停止',\n 'entry.view.cleanupFailed': '浏览器清理失败。点击“停止”重试。',\n 'entry.view.opening': '正在打开…',\n 'entry.view.noFrame': '暂无画面',\n 'entry.view.noTabs': '暂无标签页',\n 'entry.view.tabs': '标签页',\n 'entry.chip.running': '运行中',\n 'entry.chip.stopped': '未运行',\n 'entry.chip.paused': '已暂停',\n 'entry.chip.disconnected': '未连接',\n 'entry.chip.connecting': '连接中',\n 'entry.chip.confirm': '待允许',\n 'entry.chip.controlled': '可操作',\n 'entry.chip.unpaired': '未配对',\n 'entry.chip.offline': '已断开',\n 'entry.chip.connected': '已连接',\n 'entry.chip.notShared': '未借用',\n 'entry.chip.readOnly': '只读',\n 'entry.provision.preparing': '正在准备下载浏览器…',\n 'entry.provision.downloading': '正在下载浏览器…{percent}%({downloaded}/{total})',\n 'entry.fail.details': '详情',\n 'entry.fail.provision-no-network.title': '浏览器下载失败——本机网络似乎不通。',\n 'entry.fail.provision-no-network.fault': '这是本机网络的问题,不是你的设置问题。',\n 'entry.fail.provision-no-network.action': '让本机连上网后,再点一次“打开”。',\n 'entry.fail.provision-no-disk-space.title': '浏览器下载失败——磁盘空间不足。',\n 'entry.fail.provision-no-disk-space.fault': '这是本机剩余空间的问题。',\n 'entry.fail.provision-no-disk-space.action': '至少腾出 500 MB 空间后,再点一次“打开”。',\n 'entry.fail.provision-no-permission.title': '浏览器下载失败——下载目录不可写。',\n 'entry.fail.provision-no-permission.fault': '这是本机目录权限的问题。',\n 'entry.fail.provision-no-permission.action':\n '请机器管理员放开浏览器目录的写权限后,再点一次“打开”。',\n 'entry.fail.provision-missing-libs.title': '这台机器缺少浏览器需要的系统库。',\n 'entry.install.missing': '需要安装 {count} 个系统包。',\n 'entry.install.manual':\n '安装需要管理员密码。请在这台机器的终端里运行下面的命令,装好后再点「打开」。',\n 'entry.install.button': '一键安装',\n 'entry.install.copy': '复制命令',\n 'entry.install.copied': '已复制',\n 'entry.install.progress': '正在安装系统库:{percent}%',\n 'entry.fail.provision-missing-libs.fault': '这是机器环境的问题,不是浏览器设置的问题。',\n 'entry.fail.provision-missing-libs.action':\n 'Ubuntu 24.04 上按“详情”里的命令安装系统库,装好后再点“打开”。',\n 'entry.fail.provision-failed.title': '浏览器下载失败。',\n 'entry.fail.provision-failed.fault': '暂时看不出具体原因。',\n 'entry.fail.provision-failed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-missing-binary.title': '配置的浏览器文件不存在。',\n 'entry.fail.startup-missing-binary.fault': '这是插件配置里的浏览器路径问题。',\n 'entry.fail.startup-missing-binary.action':\n '修正浏览器插件配置中的 browserPath,或清空它改用自动下载。',\n 'entry.fail.startup-spawn-failed.title': '浏览器程序无法启动。',\n 'entry.fail.startup-spawn-failed.fault':\n '本机拦截或删除了浏览器文件——常见是杀毒软件,偶尔是权限问题。',\n 'entry.fail.startup-spawn-failed.action':\n '把浏览器目录加入杀毒软件白名单(或找机器管理员看权限),再点一次“打开”。',\n 'entry.fail.startup-sandbox.title': '浏览器因系统沙箱限制拒绝启动。',\n 'entry.fail.startup-sandbox.fault': '这是本机系统限制的问题。',\n 'entry.fail.startup-sandbox.action':\n 'Ubuntu 23.10 起通常是 AppArmor 限制了用户命名空间:按“详情”给这个浏览器加 AppArmor 配置后,再点一次“打开”。',\n 'entry.fail.startup-crashed.title': '浏览器在启动过程中退出了。',\n 'entry.fail.startup-crashed.fault': '这是本机浏览器的问题,不是页面问题。',\n 'entry.fail.startup-crashed.action': '再点一次“打开”重试;多次失败请把“详情”发给机器管理员。',\n 'entry.fail.startup-timeout.title': '浏览器启动超时。',\n 'entry.fail.startup-timeout.fault': '这台机器可能比较慢或负载较高。',\n 'entry.fail.startup-timeout.action': '再点一次“打开”重试;多次失败请重启机器或联系管理员。',\n 'entry.error': '浏览器操作失败',\n};\n\nexport type BrowserKey = keyof typeof zh;\n\nexport const en: Record = {\n 'entry.profile.install': 'Install BotHarness Profile Control extension',\n 'entry.profile.instructions':\n 'Enter the address and code in the BotHarness Profile Control extension and confirm Profile-wide access.',\n 'entry.profile.forget': 'Forget Profile pairing',\n 'entry.profile.disconnected': 'Profile paired · disconnected',\n 'entry.profile.connected': 'Profile connected',\n 'entry.profile.pair': 'Pair Chrome Profile',\n 'entry.profile.scope': 'All ordinary webpage tabs in this Chrome Profile',\n 'settings.profile-control': 'Daily Chrome · Entire Profile',\n 'settings.daily-control': 'Daily Chrome · Control',\n 'entry.daily.install': 'Install Playwright extension',\n 'entry.daily.connect': 'Connect existing page',\n 'entry.daily.select': 'Select one existing Chrome tab',\n 'entry.daily.confirm': 'Connected · control not granted',\n 'entry.daily.controlled': 'This document allows observe, type and click',\n 'entry.daily.allow': 'Allow control of this document',\n\n 'entry.live': 'Connected',\n 'entry.noScreen': 'No screen',\n 'entry.connecting': 'Connecting',\n 'entry.reconnecting': 'Reconnecting',\n 'entry.reconnect': 'Reconnect',\n 'entry.openFullscreen': 'Open fullscreen',\n 'entry.collapseFullscreen': 'Leave fullscreen',\n 'entry.interactive.disable': 'Disable interaction',\n 'entry.interactive.enable': 'Enable interaction',\n 'entry.watchOnly': 'Watch only',\n 'entry.stop': 'Stop',\n 'entry.stopping': 'Stopping',\n\n 'settings.localDriver': 'Local driver',\n 'settings.containerDriver': 'Container driver',\n 'settings.driver.current': 'Default',\n 'settings.driver.agent-browser': 'agent-browser (trial)',\n 'settings.section': 'Browser',\n 'settings.target': 'Browser Target',\n 'settings.local': 'Local Browser',\n 'settings.container': 'Docker Browser',\n 'settings.extension': 'Daily Browser',\n 'entry.borrow.none': 'No shared tab',\n 'entry.borrow.readOnly': 'Shared read-only',\n 'entry.borrow.pair': 'Connect browser extension',\n 'entry.borrow.return': 'Return tab',\n 'entry.borrow.code': 'Pairing code',\n 'entry.borrow.cancel': 'Cancel pairing',\n 'entry.borrow.instructions':\n 'Enter this address and code in the extension, then share the current page. The code expires in 5 minutes and can be used once.',\n 'entry.view.interaction': 'Enable Human interaction',\n 'entry.view.inputMode.direct': 'Direct tap',\n 'entry.view.inputMode.trackpad': 'Trackpad',\n 'entry.view.close': 'Close',\n 'entry.view.container': 'Container Browser',\n 'entry.view.browserTitle': \"{name}'s Browser\",\n 'entry.takeover.start': 'Take over',\n 'entry.takeover.stop': 'Release',\n 'entry.takeover.active': 'Taking over',\n 'entry.label': 'Browser',\n 'entry.access.title': 'Browser Access',\n 'entry.access.on': 'Browser Access is on',\n 'entry.access.description': \"This PersonaBot's sessions may use the browser\",\n 'entry.access.enable': 'Enable Browser Access',\n 'entry.access.disable': 'Disable Browser Access',\n 'entry.access.failed': 'Failed to switch Browser Access',\n 'entry.access.failureHint': 'Access failed',\n 'entry.profile.label': 'Profile',\n 'entry.profile.default': 'default',\n 'entry.profile.failed': 'Failed to switch the browser profile',\n 'entry.profile.choose': 'Choose browser profile',\n 'entry.profile.create': 'Create “{name}”',\n 'entry.view.follow': 'Follow the Bot',\n 'entry.view.pause': 'Pause Bot',\n 'entry.view.resume': 'Resume',\n 'entry.view.open': 'Open Bot Browser',\n 'entry.view.fullscreen': 'Fullscreen',\n 'entry.view.stop': 'Stop',\n 'entry.view.cleanupFailed': 'Browser cleanup failed. Click Stop to retry.',\n 'entry.view.opening': 'Opening…',\n 'entry.view.noFrame': 'No frame yet',\n 'entry.view.noTabs': 'No tabs yet',\n 'entry.view.tabs': 'Tabs',\n 'entry.chip.running': 'Running',\n 'entry.chip.stopped': 'Stopped',\n 'entry.chip.paused': 'Paused',\n 'entry.chip.disconnected': 'Not connected',\n 'entry.chip.connecting': 'Connecting',\n 'entry.chip.confirm': 'Needs approval',\n 'entry.chip.controlled': 'Controllable',\n 'entry.chip.unpaired': 'Not paired',\n 'entry.chip.offline': 'Disconnected',\n 'entry.chip.connected': 'Connected',\n 'entry.chip.notShared': 'Not shared',\n 'entry.chip.readOnly': 'Read-only',\n 'entry.provision.preparing': 'Preparing the browser download…',\n 'entry.provision.downloading': 'Downloading browser… {percent}% ({downloaded} / {total})',\n 'entry.fail.details': 'Details',\n 'entry.fail.provision-no-network.title':\n 'The browser download failed — this machine looks offline.',\n 'entry.fail.provision-no-network.fault':\n 'This is about the network on this machine, not your settings.',\n 'entry.fail.provision-no-network.action':\n 'Reconnect this machine to the internet, then click Open again.',\n 'entry.fail.provision-no-disk-space.title': 'The browser download failed — the disk is full.',\n 'entry.fail.provision-no-disk-space.fault': 'This is about free space on this machine.',\n 'entry.fail.provision-no-disk-space.action': 'Free at least 500 MB, then click Open again.',\n 'entry.fail.provision-no-permission.title':\n 'The browser download failed — the download folder is not writable.',\n 'entry.fail.provision-no-permission.fault': 'This is about folder permissions on this machine.',\n 'entry.fail.provision-no-permission.action':\n 'Ask the machine owner to make the browser folder writable, then click Open again.',\n 'entry.fail.provision-missing-libs.title':\n 'This machine is missing system libraries the browser needs.',\n 'entry.install.missing': '{count} system packages need to be installed.',\n 'entry.install.manual':\n 'Installing needs an administrator password. Run this command in a terminal on this machine, then click Open again.',\n 'entry.install.button': 'Install',\n 'entry.install.copy': 'Copy command',\n 'entry.install.copied': 'Copied',\n 'entry.install.progress': 'Installing system libraries: {percent}%',\n 'entry.fail.provision-missing-libs.fault':\n 'This is about the machine setup, not your browser settings.',\n 'entry.fail.provision-missing-libs.action':\n 'On Ubuntu 24.04, install them with the command in Details, then click Open again.',\n 'entry.fail.provision-failed.title': 'The browser download failed.',\n 'entry.fail.provision-failed.fault': 'The cause is unclear from here.',\n 'entry.fail.provision-failed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-missing-binary.title': 'The configured browser file does not exist.',\n 'entry.fail.startup-missing-binary.fault':\n 'This is about the browser path in the plugin configuration.',\n 'entry.fail.startup-missing-binary.action':\n 'Fix browserPath in the browser plugin configuration, or clear it to use the automatic download.',\n 'entry.fail.startup-spawn-failed.title': 'The browser program could not be started.',\n 'entry.fail.startup-spawn-failed.fault':\n 'This machine blocked or removed the browser file — often antivirus, sometimes permissions.',\n 'entry.fail.startup-spawn-failed.action':\n 'Allow-list the browser folder in your antivirus (or ask the machine owner about permissions), then click Open again.',\n 'entry.fail.startup-sandbox.title': 'The browser refused to start because of its OS sandbox.',\n 'entry.fail.startup-sandbox.fault': 'This is about OS restrictions on this machine.',\n 'entry.fail.startup-sandbox.action':\n 'On Ubuntu 23.10 and later this is usually AppArmor restricting user namespaces: add the AppArmor profile from Details for this browser, then click Open again.',\n 'entry.fail.startup-crashed.title': 'The browser exited during startup.',\n 'entry.fail.startup-crashed.fault': 'This is about the browser on this machine, not the page.',\n 'entry.fail.startup-crashed.action':\n 'Click Open to retry; if it keeps failing, show Details to the machine owner.',\n 'entry.fail.startup-timeout.title': 'The browser took too long to start.',\n 'entry.fail.startup-timeout.fault': 'This machine may be slow or overloaded.',\n 'entry.fail.startup-timeout.action':\n 'Click Open to retry; if it keeps failing, restart the machine or ask its owner.',\n 'entry.error': 'Browser action failed',\n};\n\nexport type BrowserTranslate = (\n key: BrowserKey,\n params?: Record,\n) => string;\n","export type BrowserFailureKind =\n | 'provision-no-network'\n | 'provision-no-disk-space'\n | 'provision-no-permission'\n | 'provision-missing-libs'\n | 'provision-failed'\n | 'startup-missing-binary'\n | 'startup-spawn-failed'\n | 'startup-sandbox'\n | 'startup-crashed'\n | 'startup-timeout';\n\nexport const BROWSER_FAILURE_KINDS: readonly BrowserFailureKind[] = [\n 'provision-no-network',\n 'provision-no-disk-space',\n 'provision-no-permission',\n 'provision-missing-libs',\n 'provision-failed',\n 'startup-missing-binary',\n 'startup-spawn-failed',\n 'startup-sandbox',\n 'startup-crashed',\n 'startup-timeout',\n];\n\nexport function isBrowserFailureKind(value: unknown): value is BrowserFailureKind {\n return typeof value === 'string' && (BROWSER_FAILURE_KINDS as readonly string[]).includes(value);\n}\n\nexport interface BrowserInstallProgress {\n readonly downloadedBytes: number;\n readonly totalBytes: number;\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { color, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n note: {\n margin: 0,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n inset: { paddingBlock: space.x2, paddingInline: space.x2 },\n muted: { color: color.muted },\n subtle: { color: color.subtle },\n danger: { color: color.danger },\n success: { color: color.success },\n warning: { color: color.warning },\n});\n\nexport type NoteTone = 'muted' | 'subtle' | 'danger' | 'success' | 'warning';\n\nexport function Note({\n tone = 'muted',\n inset = false,\n children,\n}: {\n readonly tone?: NoteTone;\n readonly inset?: boolean;\n readonly children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n

\n );\n}\n","import { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from './ds/note.js';\nimport { color, radius, space, text } from './ds/tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n width: '100%',\n },\n progress: {\n display: 'grid',\n gap: space.x1,\n width: '100%',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n bar: {\n width: '100%',\n height: '6px',\n accentColor: color.accent,\n },\n command: {\n margin: 0,\n width: '100%',\n boxSizing: 'border-box',\n paddingBlock: space.x2,\n paddingInline: space.x2,\n borderRadius: radius.sm,\n backgroundColor: color.hover,\n color: color.fg,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n actions: {\n display: 'flex',\n gap: space.x2,\n flexWrap: 'wrap',\n },\n});\n\nexport type MissingPackagesAccess = 'root' | 'sudo' | 'none';\n\nexport interface MissingPackagesLabels {\n readonly missing: string;\n readonly manual: string;\n readonly install: string;\n readonly copy: string;\n readonly copied: string;\n}\n\nexport function formatProgressMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function ProgressLine({\n percent,\n label,\n}: {\n readonly percent: number;\n readonly label: string;\n}): ReactElement {\n const value = Math.max(0, Math.min(100, percent));\n return (\n
\n \n {label}\n
\n );\n}\n\nexport function MissingPackages({\n command,\n access,\n installing,\n busy = false,\n onInstall,\n labels,\n children,\n}: {\n readonly command: string;\n readonly access: MissingPackagesAccess;\n readonly installing?: { readonly percent: number; readonly label: string } | undefined;\n readonly busy?: boolean;\n readonly onInstall: () => void;\n readonly labels: MissingPackagesLabels;\n readonly children?: ReactNode;\n}): ReactElement {\n const [copied, setCopied] = useState(false);\n const copy = (): void => {\n void navigator.clipboard?.writeText(command).then(() => setCopied(true));\n };\n return (\n
\n {installing === undefined ? (\n {labels.missing}\n ) : (\n \n )}\n {access === 'none' && installing === undefined ? (\n <>\n {labels.manual}\n
{command}
\n \n ) : null}\n
\n {access !== 'none' && installing === undefined ? (\n \n ) : null}\n {access === 'none' ? (\n \n ) : null}\n {children}\n
\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\n\nimport {\n isBrowserFailureKind,\n type BrowserFailureKind,\n type BrowserInstallProgress,\n} from '../failure-kinds.js';\nimport {\n MissingPackages,\n type MissingPackagesAccess,\n} from '../../../client/src/client/missing-packages.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BrowserFailure {\n readonly message: string;\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n}\n\nexport class BrowserApiError extends Error {\n readonly code?: string;\n readonly detail?: string;\n readonly packages?: readonly string[];\n\n constructor(message: string, code?: string, detail?: string, packages?: readonly string[]) {\n super(message);\n this.name = 'BrowserApiError';\n if (code !== undefined) this.code = code;\n if (detail !== undefined) this.detail = detail;\n if (packages !== undefined) this.packages = packages;\n }\n}\n\nexport function readFailure(cause: unknown): BrowserFailure {\n if (cause instanceof BrowserApiError)\n return {\n message: cause.message,\n ...(cause.code === undefined ? {} : { code: cause.code }),\n ...(cause.detail === undefined ? {} : { detail: cause.detail }),\n ...(cause.packages === undefined ? {} : { packages: cause.packages }),\n };\n return { message: cause instanceof Error ? cause.message : String(cause) };\n}\n\ninterface InstallState {\n readonly access?: MissingPackagesAccess;\n readonly state?: 'installing' | 'installed' | 'failed';\n readonly percent?: number;\n readonly text?: string;\n}\n\nconst INSTALL_ENDPOINT = './api/browser/install-packages';\n\nfunction BrowserMissingLibs({\n packages,\n t,\n onRetry,\n}: {\n readonly packages: readonly string[];\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement {\n const [install, setInstall] = useState({});\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const retried = useRef(false);\n const read = useCallback(async (): Promise => {\n const response = await fetch(INSTALL_ENDPOINT, { cache: 'no-store' });\n const next = (await response.json()) as InstallState;\n setInstall(next);\n return next;\n }, []);\n const resource = useCallback(\n (node: HTMLDivElement | null): void => {\n if (node === null) return;\n void read().catch(() => undefined);\n },\n [read],\n );\n const poll = (): void => {\n void read()\n .then((next) => {\n if (next.state === 'installing') {\n setTimeout(poll, 1000);\n return;\n }\n if (next.state === 'installed' && !retried.current) {\n retried.current = true;\n onRetry?.();\n }\n })\n .catch((cause: unknown) => setError(String(cause)));\n };\n const start = (): void => {\n setBusy(true);\n setError(undefined);\n void fetch(INSTALL_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, packages }),\n })\n .then(async (response) => {\n if (!response.ok) throw new Error(((await response.json()) as { error?: string }).error);\n poll();\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setBusy(false));\n };\n const installing = install.state === 'installing';\n return (\n
\n {install.state === 'failed' && install.text !== undefined ? (\n
{install.text}
\n ) : null}\n {error === undefined ? null :
{error}
}\n \n
\n );\n}\n\nexport function BrowserFailureNotice({\n failure,\n t,\n onRetry,\n}: {\n readonly failure: BrowserFailure;\n readonly t: BrowserTranslate;\n readonly onRetry?: (() => void) | undefined;\n}): ReactElement | null {\n if (!isBrowserFailureKind(failure.code)) return null;\n const kind: BrowserFailureKind = failure.code;\n return (\n
\n
{t(`entry.fail.${kind}.title`)}
\n
{t(`entry.fail.${kind}.fault`)}
\n {kind === 'provision-missing-libs' && (failure.packages?.length ?? 0) > 0 ? (\n \n ) : (\n
{t(`entry.fail.${kind}.action`)}
\n )}\n {failure.detail === undefined || failure.detail === '' ? null : (\n
\n {t('entry.fail.details')}\n
{failure.detail}
\n
\n )}\n
\n );\n}\n\nfunction formatMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function BrowserProvisionProgress({\n progress,\n t,\n}: {\n readonly progress: BrowserInstallProgress;\n readonly t: BrowserTranslate;\n}): ReactElement {\n if (progress.totalBytes <= 0)\n return (\n
\n {t('entry.provision.preparing')}\n
\n );\n const percent = Math.max(\n 0,\n Math.min(99, Math.floor((progress.downloadedBytes / progress.totalBytes) * 100)),\n );\n return (\n
\n \n \n {t('entry.provision.downloading', {\n percent: String(percent),\n downloaded: formatMiB(progress.downloadedBytes),\n total: formatMiB(progress.totalBytes),\n })}\n \n
\n );\n}\n","import * as native from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useId, useLayoutEffect, type CSSProperties, type RefObject } from 'react';\n\nconst useLegacyPosition = 'useAnchoredPosition' in native ? native.useAnchoredPosition : undefined;\n\nexport function useAnchoredPanel({\n open,\n anchorRef,\n panelRef,\n gap,\n margin,\n matchWidth = false,\n}: {\n open: boolean;\n anchorRef: RefObject;\n panelRef: RefObject;\n gap: number;\n margin: number;\n matchWidth?: boolean;\n}): CSSProperties {\n const position = useLegacyPosition?.({ open, anchorRef, panelRef, gap, margin });\n const id = useId();\n const name = `--bh-panel-${id.replace(/[^a-zA-Z0-9_-]/gu, '')}`;\n useLayoutEffect(() => {\n const anchor = anchorRef.current;\n if (useLegacyPosition !== undefined || !open || anchor === null) return;\n const previous = anchor.style.getPropertyValue('anchor-name');\n const priority = anchor.style.getPropertyPriority('anchor-name');\n anchor.style.setProperty('anchor-name', name);\n return () => anchor.style.setProperty('anchor-name', previous, priority);\n }, [open, anchorRef, name]);\n if (useLegacyPosition !== undefined) {\n return {\n ...position,\n ...(matchWidth ? { width: anchorRef.current?.getBoundingClientRect().width ?? 200 } : {}),\n visibility: position === null ? 'hidden' : undefined,\n };\n }\n return {\n position: 'fixed',\n positionAnchor: name,\n top: `max(${margin}px, var(--dsh-frame-overlay-top, ${margin}px), calc(anchor(bottom) + ${gap}px))`,\n bottom: margin,\n left: `max(${margin}px, anchor(left))`,\n right: margin,\n alignSelf: 'start',\n justifySelf: 'start',\n margin: 0,\n height: 'fit-content',\n maxWidth: `calc(100vw - ${margin * 2}px)`,\n positionTryFallbacks: 'flip-block, flip-inline, flip-block flip-inline',\n ...(matchWidth ? { width: `min(anchor-size(width), calc(100vw - ${margin * 2}px))` } : {}),\n };\n}\n","import { useAnchoredPanel } from './anchored-panel.js';\nimport { border, color, radius, space, text } from './ds/tokens.stylex.js';\nimport { useId, useRef, useState, type KeyboardEvent, type ReactElement } from 'react';\nimport { createPortal } from 'react-dom';\nimport {\n IconChevronDownOutlineRegular,\n IconPlusOutlineRegular,\n Input,\n MenuSurface,\n useDismissOnOutsidePointer,\n} from '@deepseek-ai/dsh-client-ui-primitives';\n\nexport interface ComboboxOption {\n readonly value: string;\n readonly label: string;\n readonly hint?: string | undefined;\n readonly disabled?: boolean | undefined;\n}\n\nexport const COMBOBOX_CSS = `\n.bh-combobox { position: relative; flex: 1; min-width: 0; }\n.bh-combobox-input { display: flex; padding-right: ${space.x6}; }\n.bh-combobox input { width: 100%; text-overflow: ellipsis; }\n.bh-combobox input[readonly] { cursor: pointer; }\n.bh-combobox-toggle {\n position: absolute; right: 4px; top: 50%; transform: translateY(-50%); width: 24px; height: 24px;\n display: flex; align-items: center; justify-content: center;\n border: 0; border-radius: ${radius.sm}; padding: 0;\n color: var(--dsw-alias-label-secondary); background: transparent; cursor: pointer;\n}\n.bh-combobox-toggle:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-combobox-toggle:disabled { opacity: 0.5; cursor: default; }\n.bh-combobox-list {\n position: fixed; z-index: 1100; box-sizing: border-box;\n background: var(--dsw-alias-bg-base);\n --dsw-elevation-stroke-color: var(--dsw-alias-border-l1);\n box-shadow: var(--dsw-elevation-prominent);\n}\n.bh-combobox-scroll > button {\n display: flex; align-items: baseline; justify-content: space-between; gap: ${space.x4};\n width: 100%; min-height: 34px; padding: ${space.x2} ${space.x3};\n border: 0; border-radius: ${radius.sm}; background: transparent;\n color: var(--dsw-alias-label-primary); text-align: left; font: inherit; font-size: ${text.bodySize}; line-height: ${text.bodyLine}; cursor: pointer;\n overflow-wrap: anywhere;\n}\n.bh-combobox-scroll > button[aria-selected=\"true\"] { font-weight: ${text.strong}; }\n.bh-combobox-scroll > button:disabled { color: var(--dsw-alias-label-tertiary); cursor: default; }\n.bh-combobox-scroll > button:not(:disabled):hover, .bh-combobox-scroll > button[data-active] {\n background: var(--dsw-alias-interactive-bg-hover);\n}\n.bh-combobox-scroll { max-height: 260px; overflow-y: auto; padding: ${space.x2}; box-sizing: border-box; }\n.bh-combobox-hint { flex: none; color: var(--dsw-alias-label-secondary); font-size: ${text.metaSize}; font-weight: ${text.regular}; }\n.bh-combobox-empty { padding: ${space.x2} ${space.x3}; color: var(--dsw-alias-label-secondary); font-size: ${text.bodySize}; }\n.bh-combobox-scroll > .bh-combobox-action { justify-content: flex-start; align-items: center; gap: ${space.x2}; border-top: ${border.hairline} solid ${color.divider}; border-radius: 0; margin-top: ${space.x2}; }\n`;\n\nexport function Combobox({\n value,\n options,\n onSelect,\n label,\n toggleLabel,\n disabled = false,\n invalid = false,\n errorId,\n placeholder,\n emptyLabel,\n fallbackValue,\n createLabel,\n searchable = true,\n className,\n action,\n}: {\n readonly value: string;\n readonly options: readonly ComboboxOption[];\n readonly onSelect: (value: string) => void;\n readonly label: string;\n readonly toggleLabel: string;\n readonly disabled?: boolean;\n readonly invalid?: boolean;\n readonly errorId?: string;\n readonly placeholder?: string;\n readonly emptyLabel?: string;\n readonly fallbackValue?: string;\n readonly createLabel?: (query: string) => string;\n readonly searchable?: boolean;\n readonly className?: string;\n readonly action?: {\n readonly label: string;\n readonly onSelect: () => void;\n readonly disabled?: boolean;\n };\n}): ReactElement {\n const root = useRef(null);\n const panel = useRef(null);\n const listId = useId();\n const actionValue = `${listId}-action`;\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState(undefined);\n const [active, setActive] = useState(undefined);\n const current = value === '' && fallbackValue !== undefined ? fallbackValue : value;\n const display = options.find((option) => option.value === current)?.label ?? current;\n const trimmed = query?.trim() ?? '';\n const needle = trimmed.toLowerCase();\n const matches: ComboboxOption[] = options.filter((option) =>\n [option.label, option.value, option.hint ?? ''].some((text) =>\n text.toLowerCase().includes(needle),\n ),\n );\n const canCreate =\n createLabel !== undefined &&\n trimmed !== '' &&\n !options.some((option) => option.value === trimmed);\n const choices: ComboboxOption[] = canCreate\n ? [...matches, { value: trimmed, label: createLabel(trimmed) }]\n : matches;\n const shown =\n action === undefined\n ? choices\n : [...choices, { value: actionValue, label: action.label, disabled: action.disabled }];\n const enabled = shown.filter((option) => option.disabled !== true);\n const hasPopup = shown.length > 0 || (choices.length === 0 && emptyLabel !== undefined);\n const highlighted = shown.findIndex(\n (option) => option.value === active && option.disabled !== true,\n );\n const position = useAnchoredPanel({\n open,\n anchorRef: root,\n panelRef: panel,\n matchWidth: true,\n gap: 4,\n margin: 12,\n });\n useDismissOnOutsidePointer(root, open, setOpen, panel);\n\n const dismiss = (): void => {\n setOpen(false);\n setQuery(undefined);\n setActive(undefined);\n };\n const select = (next: string): void => {\n dismiss();\n if (action !== undefined && next === actionValue) action.onSelect();\n else onSelect(next);\n };\n const typedChoice = (): string | undefined => {\n if (query === undefined) return current === '' ? undefined : current;\n if (trimmed === '') return fallbackValue;\n if (createLabel !== undefined) return trimmed;\n const available = matches.filter((option) => option.disabled !== true);\n const exact = available.find(\n (option) => option.value.toLowerCase() === needle || option.label.toLowerCase() === needle,\n );\n return (exact ?? available[0])?.value;\n };\n const onKeyDown = (event: KeyboardEvent): void => {\n if (event.nativeEvent.isComposing) return;\n if (event.key === 'Escape') {\n if (!open) return;\n event.preventDefault();\n event.stopPropagation();\n dismiss();\n } else if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n setOpen(true);\n if (enabled.length === 0) return;\n const offset = event.key === 'ArrowDown' ? 1 : -1;\n const at = enabled.findIndex((option) => option.value === active);\n const next =\n enabled[\n at < 0\n ? offset === 1\n ? 0\n : enabled.length - 1\n : (at + offset + enabled.length) % enabled.length\n ];\n setActive(next?.value);\n const index = shown.findIndex((option) => option.value === next?.value);\n document.getElementById(`${listId}-${index}`)?.scrollIntoView?.({ block: 'nearest' });\n } else if (event.key === 'Enter' && open) {\n event.preventDefault();\n const choice = shown[highlighted]?.value ?? typedChoice();\n if (choice === undefined) dismiss();\n else select(choice);\n }\n };\n\n return (\n \n = 0 ? `${listId}-${highlighted}` : undefined\n }\n aria-invalid={invalid}\n aria-describedby={invalid ? errorId : undefined}\n value={query ?? display}\n placeholder={placeholder}\n disabled={disabled}\n autoComplete=\"off\"\n readOnly={!searchable}\n data-searchable={searchable || undefined}\n onFocus={(event) => {\n if (searchable) event.currentTarget.select();\n setOpen(true);\n }}\n onClick={() => setOpen(true)}\n onChange={(event) => {\n setQuery(event.target.value);\n setActive(undefined);\n setOpen(true);\n }}\n onBlur={dismiss}\n onKeyDown={onKeyDown}\n />\n event.preventDefault()}\n onClick={() => {\n if (open) dismiss();\n else {\n root.current?.querySelector('input')?.focus();\n setOpen(true);\n }\n }}\n >\n \n \n {open && !disabled && hasPopup\n ? createPortal(\n \n
\n {choices.length === 0 && emptyLabel !== undefined ? (\n
{emptyLabel}
\n ) : null}\n {shown.map((option, index) => (\n event.preventDefault()}\n onMouseEnter={() => {\n if (option.disabled !== true) setActive(option.value);\n }}\n onClick={() => select(option.value)}\n >\n {option.value === actionValue ? : null}\n {option.label}\n {option.hint === undefined ? null : (\n {option.hint}\n )}\n \n ))}\n
\n ,\n document.body,\n )\n : null}\n \n );\n}\n","import type { ReactElement } from 'react';\n\nimport { Combobox } from '../../../client/src/client/combobox.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function ProfileCombobox({\n value,\n profiles,\n disabled,\n invalid,\n errorId,\n onSelect,\n t,\n}: {\n readonly value: string;\n readonly profiles: readonly string[];\n readonly disabled: boolean;\n readonly invalid: boolean;\n readonly errorId: string;\n readonly onSelect: (name: string) => void;\n readonly t: BrowserTranslate;\n}): ReactElement {\n const names = [...new Set(['default', ...profiles, value === '' ? 'default' : value])];\n return (\n ({ value: name, label: name }))}\n onSelect={onSelect}\n label={t('entry.profile.label')}\n toggleLabel={t('entry.profile.choose')}\n disabled={disabled}\n invalid={invalid}\n errorId={errorId}\n fallbackValue=\"default\"\n createLabel={(name) => t('entry.profile.create', { name })}\n />\n );\n}\n","import { BUBBLE_SURFACES, readable } from './bot-name-color.js';\nimport { space } from './ds/tokens.stylex.js';\nimport { panelMaterials, validTargetId } from './appearance-panels.js';\nimport { appearanceMaterials } from './appearance-materials.js';\nimport {\n APPEARANCE_KEY,\n APPEARANCE_PRIMARY,\n Appearance,\n type AppearanceSnapshot,\n} from './appearance.js';\nimport { NATIVE_LIGHT, NATIVE_DARK } from './appearance-native-tokens.js';\nexport const APPEARANCE_CLASS = 'bh-appearance-scope';\nexport function appearanceCss(snapshot: AppearanceSnapshot): string {\n const { config, mode } = snapshot;\n const selected = config.modes[mode];\n const primary = selected.primary ?? APPEARANCE_PRIMARY[selected.preset][mode];\n const materials = appearanceMaterials(selected, mode);\n const tokens: Record = {\n ...NATIVE_LIGHT,\n ...(mode === 'dark' ? NATIVE_DARK : {}),\n };\n for (const part of ['header', 'body'] as const) {\n const material = materials[part];\n tokens[`--bh-global-${part}-fill`] =\n `color-mix(in srgb, ${material.color} ${material.opacity}%, transparent)`;\n tokens[`--bh-global-${part}-blur`] = `${material.blur}px`;\n }\n tokens['--dsw-alias-state-business-primary'] = primary;\n tokens['--dsw-alias-link'] = readable(primary, BUBBLE_SURFACES[mode].surface, 4.6);\n tokens['--dsw-alias-state-business-secondary'] =\n `color-mix(in srgb, ${primary} 45%, transparent)`;\n tokens['--dsw-alias-state-business-tertiary'] = `color-mix(in srgb, ${primary} 14%, transparent)`;\n tokens['--dsw-specific-sidebar-nav-item-active'] =\n `color-mix(in srgb, ${primary} 14%, transparent)`;\n return `.bh-root,.bh-workspace-mount[data-workspace-enabled],.${APPEARANCE_CLASS},[data-bh-appearance-owned]{color:var(--dsw-alias-label-primary);color-scheme:${mode};${Object.entries(\n tokens,\n )\n .map(([k, v]) => `${k}:${v}`)\n .join(\n ';',\n )}}:root [data-bh-appearance-owned][data-menu-material],:root .${APPEARANCE_CLASS}[data-menu-material],:root .${APPEARANCE_CLASS} [data-menu-material]{--dsw-elevation-stroke-color:var(--dsw-alias-border-${mode === 'dark' ? 'l3' : 'l4'})}${materialCss()}${panelCss(snapshot)}`;\n}\n\nexport function mountAppearance(owner: Appearance): () => void {\n const style = document.createElement('style');\n style.dataset.plugin = '@botharness/ui';\n style.dataset.pluginCss = '@botharness/ui/appearance';\n const update = () => {\n style.textContent = appearanceCss(owner.getSnapshot());\n style.dataset.bhAppearance = owner.getSnapshot().mode;\n document.documentElement.dataset.bhAppearance = owner.getSnapshot().mode;\n };\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const onStorage = (event: StorageEvent) => {\n if (event.key === APPEARANCE_KEY || event.key === null) owner.refresh();\n };\n update();\n document.head.appendChild(style);\n const off = owner.subscribe(update);\n media.addEventListener('change', owner.refresh);\n window.addEventListener('storage', onStorage);\n return () => {\n off();\n style.remove();\n delete document.documentElement.dataset.bhAppearance;\n media.removeEventListener('change', owner.refresh);\n window.removeEventListener('storage', onStorage);\n };\n}\n\nfunction materialCss(): string {\n const scope = ':root .bh-workspace-mount[data-workspace-enabled]';\n return `\n${scope} .bh-dock-theme { --dv-group-view-background-color:transparent; --dv-tabs-and-actions-container-background-color:transparent; --dv-activegroup-visiblepanel-tab-background-color:transparent; --dv-inactivegroup-visiblepanel-tab-background-color:transparent; --dv-activegroup-hiddenpanel-tab-background-color:transparent; --dv-inactivegroup-hiddenpanel-tab-background-color:transparent; }\n${scope} .bh-root, ${scope} .bh-workspace-rail { background:transparent; }\n${scope} .dv-tabs-and-actions-container, ${scope} .bh-channel-session-header { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} [data-appearance-header] { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} .bh-channel-subpanel-body { display:flex; flex-direction:column; flex:1; min-height:0; min-width:0; overflow:auto; }\n${scope} .bh-channel-subpanel-body > section { flex:1; min-height:0; }\n${scope} .bh-memory-commit-view { display:flex; flex-direction:column; padding:0; }\n${scope} .bh-memory-commit-header { margin:0; flex-shrink:0; }\n${scope} .bh-memory-detail-body { flex:1; padding:${space.x3} ${space.x4}; }\n${scope} [data-appearance-body], ${scope} .dv-content-container { background:var(--bh-global-body-fill); backdrop-filter:blur(var(--bh-global-body-blur)); }\n`;\n}\n\nfunction panelCss({ config, mode }: AppearanceSnapshot): string {\n return Object.keys(config.modes[mode].panels ?? {})\n .filter(validTargetId)\n .map((id) => {\n const material = panelMaterials(config.modes[mode], mode, id);\n const scope = `:root .bh-workspace-mount[data-workspace-enabled] .dv-groupview:has(> .dv-tabs-and-actions-container .dv-active-tab [data-dock-header=\"${id.slice(5)}\"])`;\n return (['header', 'body'] as const)\n .map(\n (part) =>\n `${scope} > ${part === 'header' ? '.dv-tabs-and-actions-container' : '.dv-content-container'}, :root .bh-workspace-mount[data-workspace-enabled] [data-appearance-${part}=\"${id.slice(5)}\"] { background:color-mix(in srgb, ${material[part].color} ${material[part].opacity}%, transparent); backdrop-filter:blur(${material[part].blur}px); }`,\n )\n .join('');\n })\n .join('');\n}\n","import { Modal as NativeModal, Menu as NativeMenu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { ComponentProps, RefObject } from 'react';\nimport { APPEARANCE_CLASS } from './appearance-scope.js';\nexport function Modal(props: ComponentProps) {\n return (\n \n );\n}\ntype MenuProps = Omit, 'getAnchorRect'> & {\n anchorRef?: RefObject;\n};\n\nexport function Menu(props: MenuProps) {\n const { anchorRef } = props;\n const legacyAnchor =\n anchorRef === undefined\n ? {}\n : {\n getAnchorRect: () => anchorRef.current?.getBoundingClientRect() ?? null,\n };\n return (\n \n );\n}\n","import { Menu } from '../appearance-primitives.js';\nimport type { ComponentProps } from 'react';\nimport { createPortal } from 'react-dom';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { useMountedResource } from '../mounted-resource.js';\nimport { border, space } from './tokens.stylex.js';\n\nexport interface MenuPoint {\n readonly x: number;\n readonly y: number;\n}\n\nexport function pointerMenuPosition(\n point: MenuPoint,\n width: number,\n height: number,\n viewport: { width: number; height: number; top: number },\n) {\n const margin = Number.parseFloat(space.x4);\n return {\n x: Math.max(margin, Math.min(point.x, viewport.width - width - margin)),\n y: Math.max(\n Math.max(margin, viewport.top),\n Math.min(point.y, viewport.height - height - margin),\n ),\n };\n}\n\ntype PointerMenuProps = Omit<\n ComponentProps,\n 'open' | 'portal' | 'anchorRef' | 'side' | 'align' | 'className'\n> & { point: MenuPoint; container?: Element; align?: 'start' | 'end' };\n\nexport function PointerMenu({\n point,\n container = document.body,\n align = 'start',\n ...props\n}: PointerMenuProps) {\n const mount = useMountedResource(\n (node) => {\n const menu = node.querySelector('[role=\"menu\"]');\n if (!menu) return;\n const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth);\n const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth);\n const place = () => {\n const scale = node.getBoundingClientRect();\n if (!scale.width || !scale.height) return;\n const cssZoom =\n 'currentCSSZoom' in node && typeof node.currentCSSZoom === 'number'\n ? node.currentCSSZoom\n : undefined;\n const scaleX = cssZoom ?? scale.width;\n const scaleY = cssZoom ?? scale.height;\n const root = document.documentElement;\n const clearance = root.hasAttribute('data-fullscreen')\n ? 0\n : Number.parseFloat(\n getComputedStyle(root).getPropertyValue('--dsh-frame-top-clearance'),\n ) || 0;\n const margin = Number.parseFloat(space.x4);\n const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX;\n menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`;\n menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`;\n menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`;\n const box = menu.getBoundingClientRect();\n const desired = pointerMenuPosition(\n { x: align === 'end' ? point.x - box.width : point.x, y: point.y },\n box.width,\n box.height,\n {\n width: innerWidth,\n height: innerHeight,\n top: clearance,\n },\n );\n const left = Number.parseFloat(node.style.left) || 0;\n const top = Number.parseFloat(node.style.top) || 0;\n node.style.left = `${left + (desired.x - box.left) / scaleX}px`;\n node.style.top = `${top + (desired.y - box.top) / scaleY}px`;\n };\n place();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n observer?.observe(menu);\n observer?.observe(node);\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [point.x, point.y, align],\n );\n return createPortal(\n \n \n ,\n container,\n );\n}\n\nconst styles = stylex.create({\n origin: {\n position: 'fixed',\n left: 0,\n top: 0,\n width: border.hairline,\n height: border.hairline,\n zIndex: 1100,\n pointerEvents: 'none',\n },\n menu: { pointerEvents: 'auto' },\n});\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { actionColor, border, color, radius, size, space, text } from './tokens.stylex.js';\n\nexport const pillStyles = stylex.create({\n pill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: space.x2,\n maxWidth: '100%',\n height: size.icon,\n paddingInline: `${space.x4} ${space.x3}`,\n borderWidth: 0,\n borderRadius: radius.sm,\n backgroundColor: { default: actionColor.secondary, ':hover': actionColor.hover },\n color: color.fg,\n fontFamily: 'inherit',\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n whiteSpace: 'nowrap',\n cursor: { default: 'pointer', ':disabled': 'default' },\n opacity: { default: 1, ':disabled': 0.5 },\n outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` },\n outlineOffset: '1px',\n },\n});\n\nexport function PillButton({\n children,\n ...rest\n}: { readonly children: ReactNode } & Omit<\n ButtonHTMLAttributes,\n 'className' | 'style' | 'type' | 'children'\n>): ReactElement {\n return (\n \n );\n}\n\nexport function PillFileButton({\n children,\n ...input\n}: { readonly children: ReactNode } & Omit<\n InputHTMLAttributes,\n 'className' | 'style' | 'type' | 'children' | 'hidden'\n>): ReactElement {\n return (\n \n );\n}\n","import { PointerMenu, type MenuPoint } from './pointer-menu.js';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';\n\nimport { pillStyles } from './pill-button.js';\nimport { color, space } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n label: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n});\n\nexport interface SelectOption {\n readonly value: Value;\n readonly label: ReactNode;\n}\n\nexport interface SelectProps {\n readonly label: string;\n readonly value: Value;\n readonly options: readonly SelectOption[];\n readonly onChange: (value: Value) => void;\n readonly disabled?: boolean;\n readonly align?: 'start' | 'end';\n readonly autoFocus?: boolean;\n readonly reselect?: boolean;\n}\n\nexport function Select({\n label,\n value,\n options,\n onChange,\n disabled = false,\n align = 'end',\n autoFocus = false,\n reselect = false,\n}: SelectProps): ReactElement {\n const [open, setOpen] = useState(false);\n const [point, setPoint] = useState();\n const trigger = useRef(null);\n const active = open && !disabled;\n const mount = useMountedResource(\n (node) => {\n trigger.current = node;\n if (!active)\n return () => {\n trigger.current = null;\n };\n const place = () => {\n const rect = node.getBoundingClientRect();\n const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1;\n const next = {\n x: align === 'end' ? rect.right : rect.left,\n y: rect.bottom + Number.parseFloat(space.x2) * scale,\n };\n setPoint((previous) => (previous?.x === next.x && previous.y === next.y ? previous : next));\n };\n place();\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n resize?.observe(node);\n resize?.observe(document.documentElement);\n const observer = new MutationObserver(place);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style', 'data-fullscreen'],\n });\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n trigger.current = null;\n resize?.disconnect();\n observer.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [active, align],\n );\n const close = () => {\n const button = trigger.current;\n const menu = document.activeElement?.closest('[data-pointer-menu]');\n setOpen(false);\n setPoint(undefined);\n queueMicrotask(() => {\n const focused = document.activeElement;\n if (\n button?.isConnected &&\n !button.disabled &&\n (focused === document.body || (focused !== null && menu?.contains(focused)))\n )\n button.focus({ preventScroll: true });\n });\n };\n const current = options.find((option) => option.value === value);\n return (\n <>\n {\n if (active) event.stopPropagation();\n }}\n onClick={() => {\n if (active) close();\n else setOpen(true);\n }}\n {...stylex.props(pillStyles.pill)}\n >\n {current?.label}\n \n \n \n \n {active && point ? (\n }\n items={options.map((option) => ({ id: option.value, label: option.label }))}\n selectedId={value}\n onSelect={(id) => {\n close();\n const next = options.find((option) => option.value === id);\n if (next !== undefined && (reselect || next.value !== value)) onChange(next.value);\n }}\n onClose={close}\n />\n ) : null}\n \n );\n}\n","import { useId, type ReactElement, type ReactNode, type Ref } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, space, text } from './tokens.stylex.js';\n\nconst NARROW = '@media (max-width: 648px)';\nconst COMPACT = '@container bh-settings (max-width: 480px)';\n\nconst styles = stylex.create({\n rows: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n paddingTop: { default: space.x5, ':first-child': 0 },\n },\n sectionHead: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n paddingBottom: space.x2,\n },\n sectionTitle: {\n margin: 0,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n fontWeight: text.strong,\n },\n row: {\n display: 'flex',\n alignItems: { default: 'center', [NARROW]: 'stretch', [COMPACT]: 'stretch' },\n flexDirection: { default: 'row', [NARROW]: 'column', [COMPACT]: 'column' },\n gap: { default: space.x4, [NARROW]: space.x3, [COMPACT]: space.x3 },\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: { default: color.divider, ':last-child': 'transparent' },\n },\n text: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n title: {\n color: color.fg,\n fontSize: text.titleSize,\n lineHeight: text.titleLine,\n fontWeight: text.strong,\n overflowWrap: 'anywhere',\n },\n description: {\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n control: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: { default: 'flex-end', [NARROW]: 'flex-start', [COMPACT]: 'flex-start' },\n gap: space.x3,\n flexShrink: 0,\n minWidth: 0,\n maxWidth: { default: '60%', [NARROW]: '100%', [COMPACT]: '100%' },\n },\n value: {\n color: color.muted,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n});\n\nexport function SettingsRows({\n children,\n rootRef,\n}: {\n readonly children: ReactNode;\n readonly rootRef?: Ref | undefined;\n}): ReactElement {\n return (\n
\n {children}\n
\n );\n}\n\nexport interface SettingsSectionProps {\n readonly title?: ReactNode;\n readonly description?: ReactNode;\n readonly children: ReactNode;\n}\n\nexport function SettingsSection({\n title,\n description,\n children,\n}: SettingsSectionProps): ReactElement {\n const id = useId();\n return (\n \n {title === undefined ? null : (\n
\n

\n {title}\n

\n {description === undefined ? null : (\n
{description}
\n )}\n
\n )}\n {children}\n \n );\n}\n\nexport interface SettingsRowProps {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly control?: ReactNode;\n readonly children?: ReactNode;\n readonly rootRef?: Ref | undefined;\n readonly data?: Readonly>;\n}\n\nexport function SettingsRow({\n title,\n description,\n control,\n children,\n rootRef,\n data,\n}: SettingsRowProps): ReactElement {\n const id = useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n return (\n \n
\n
\n {title}\n
\n {description === undefined ? null : (\n
\n {description}\n
\n )}\n {children}\n
\n {control === undefined ? null :
{control}
}\n \n );\n}\n\nexport function SettingsValue({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n","import { useMemo, useState, useSyncExternalStore, type ReactElement } from 'react';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { Select } from '../../../client/src/client/ds/select.js';\nimport { SettingsRow, SettingsRows } from '../../../client/src/client/ds/settings-row.js';\nimport type { BrowserClientContext } from './index.js';\nimport { LOCALE_NS, type BrowserTranslate } from './locale.js';\n\ninterface TargetScope {\n getSnapshot(): {\n status: string;\n writable: boolean;\n value:\n | {\n target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n localDriver?: 'current' | 'agent-browser';\n containerDriver?: 'current' | 'agent-browser';\n }\n | undefined;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise;\n}\n\nfunction ConfigChoice({\n scope,\n field,\n value,\n writable,\n title,\n items,\n}: {\n scope: TargetScope;\n field: 'target' | 'localDriver' | 'containerDriver';\n value: string;\n writable: boolean;\n title: string;\n items: { id: string; label: string }[];\n}): ReactElement {\n const [saving, setSaving] = useState(false);\n const [error, setError] = useState();\n return (\n <>\n ({ value: item.id, label: item.label }))}\n disabled={!writable || saving}\n onChange={(id) => {\n setSaving(true);\n setError(undefined);\n void scope\n .set(field, id)\n .then(() => {\n if (scope.getSnapshot().value?.[field] !== id)\n throw new Error('Browser setting was not saved');\n })\n .catch((cause: unknown) => setError(String(cause)))\n .finally(() => setSaving(false));\n }}\n />\n }\n />\n {error === undefined ? null : {error}}\n \n );\n}\n\nexport function BrowserTargetSettings({\n scope,\n t,\n}: {\n scope: TargetScope;\n t: BrowserTranslate;\n}): ReactElement {\n const store = useMemo(\n () => ({\n subscribe: (listener: () => void) => scope.subscribe(listener),\n getSnapshot: () => scope.getSnapshot(),\n }),\n [scope],\n );\n const snapshot = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const target = snapshot.value?.target ?? 'local';\n return (\n \n ({ id, label: t(`settings.${id}`) }))}\n />\n {target !== 'local' && target !== 'container' ? null : (\n ({\n id,\n label: t(`settings.driver.${id}`),\n }))}\n />\n )}\n \n );\n}\n\nexport function registerBrowserSettings(ctx: BrowserClientContext, t: BrowserTranslate): void {\n ctx.inject(['configForms', 'slots'], (settingsCtx) => {\n const native = settingsCtx as unknown as {\n configForms: { get(namespace: string): TargetScope };\n slots: {\n inject(name: string, callback: () => unknown): () => void;\n register(\n options: {\n name: string;\n id: string;\n order: number;\n label: () => string;\n locale: string;\n inject: () => { scope: TargetScope; t: BrowserTranslate };\n },\n component: typeof BrowserTargetSettings,\n ): () => void;\n };\n };\n const scope = native.configForms.get('botharness-browser');\n return native.slots.inject('botharness.settings.section', () =>\n native.slots.register(\n {\n name: 'botharness.settings.section',\n id: 'browser',\n order: 32,\n label: () => t('settings.section'),\n locale: LOCALE_NS,\n inject: () => ({ scope, t }),\n },\n BrowserTargetSettings,\n ),\n );\n });\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nimport type { ProfileView } from '../profile-control.js';\n\nexport function ProfileBrowserControl({\n slug,\n view,\n paused,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: ProfileView | undefined;\n readonly paused: boolean;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'forget' | 'pause'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/profile/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view?.paired !== true ? (\n {t('entry.chip.unpaired')}\n ) : view.connected ? (\n {t('entry.chip.connected')}\n ) : (\n {t('entry.chip.offline')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n meta={\n <>\n {t('entry.profile.scope')}\n \n {view?.paired\n ? t(view.connected ? 'entry.profile.connected' : 'entry.profile.disconnected')\n : t('entry.view.noTabs')}\n {view?.connected ? ` · ${view.tabs}` : ''}\n \n \n }\n detail={\n
\n \n {t('entry.profile.install')}\n \n
\n invoke(view?.paired ? 'forget' : 'pair')}\n >\n {t(view?.paired ? 'entry.profile.forget' : 'entry.profile.pair')}\n \n {view?.connected ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n
\n {view?.paired || pair === undefined ? null : (\n <>\n {t('entry.profile.instructions')}\n \n {location.origin}\n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { DailyView } from '../daily.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport function DailyBrowserControl({\n slug,\n view,\n enabled,\n paused,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly view: DailyView | null;\n readonly enabled: boolean;\n readonly paused: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const mounted = useRef(false);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n }, []);\n const invoke = (action: 'connect' | 'grant' | 'return' | 'pause'): void => {\n if (busy || slug === undefined) return;\n setBusy(true);\n setError(undefined);\n void fetch(action === 'pause' ? './api/browser/takeover' : `./api/browser/daily/${action}`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug, ...(action === 'pause' ? { active: !paused } : {}) }),\n })\n .then(async (response) => {\n const body = (await response.json()) as { ok: boolean; error?: string };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n })\n .catch((cause: unknown) => {\n if (mounted.current) setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n \n {view === null || view.state === 'error' ? (\n {t('entry.chip.disconnected')}\n ) : view.state === 'connecting' ? (\n {t('entry.chip.connecting')}\n ) : view.state === 'confirm' ? (\n {t('entry.chip.confirm')}\n ) : (\n {t('entry.chip.controlled')}\n )}\n {paused && view?.state === 'controlled' ? (\n {t('entry.chip.paused')}\n ) : null}\n \n }\n meta={\n view === null || view.state === 'error' ? undefined : (\n \n {t(\n view.state === 'connecting'\n ? 'entry.daily.select'\n : view.state === 'confirm'\n ? 'entry.daily.confirm'\n : 'entry.daily.controlled',\n )}\n \n )\n }\n detail={\n
\n {view === null || view.state === 'error' || view.url === '' ? null : (\n <>\n {view.title || view.url}\n {view.url}\n \n )}\n \n {t('entry.daily.install')}\n \n
\n {view === null || view.state === 'error' ? (\n invoke('connect')}\n >\n {t('entry.daily.connect')}\n \n ) : (\n <>\n {view.state === 'confirm' ? (\n invoke('grant')}\n >\n {t('entry.daily.allow')}\n \n ) : null}\n {view.state === 'controlled' ? (\n invoke('pause')}\n >\n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n ) : null}\n invoke('return')}\n >\n {t(\n view.state === 'connecting' ? 'entry.borrow.cancel' : 'entry.borrow.return',\n )}\n \n \n )}\n
\n
\n }\n />\n
\n {view?.error === undefined ? null : (\n
\n {view.error}\n
\n )}\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","import { useCallback, useRef, useState, type ReactElement } from 'react';\nimport { Button, Input, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { BrowserTranslate } from './locale.js';\n\nexport interface BorrowedTabView {\n readonly title: string;\n readonly url: string;\n readonly expiresAt: number;\n}\n\nexport function BorrowedBrowser({\n slug,\n tab,\n enabled,\n t,\n refresh,\n}: {\n readonly slug: string | undefined;\n readonly tab: BorrowedTabView | null | undefined;\n readonly enabled: boolean;\n readonly t: BrowserTranslate;\n readonly refresh: () => void;\n}): ReactElement {\n const [pair, setPair] = useState<{ code: string; expiresAt: number } | undefined>();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const active = useRef(false);\n const sequence = useRef(0);\n const resource = useCallback((node: HTMLDivElement | null): void => {\n active.current = node !== null;\n if (node === null) sequence.current += 1;\n }, []);\n const invoke = (action: 'pair' | 'return'): void => {\n if (slug === undefined || busy) return;\n const request = ++sequence.current;\n setBusy(true);\n setError(undefined);\n setPair(undefined);\n void fetch(`./api/browser/borrow/${action}`, {\n method: 'POST',\n cache: 'no-store',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug }),\n })\n .then(async (response) => {\n const body = (await response.json()) as {\n ok: boolean;\n error?: string;\n code?: string;\n expiresAt?: number;\n };\n if (!response.ok || !body.ok) throw new Error(body.error ?? t('entry.error'));\n if (!active.current || sequence.current !== request) return;\n if (action === 'pair' && body.code !== undefined && body.expiresAt !== undefined)\n setPair({ code: body.code, expiresAt: body.expiresAt });\n })\n .catch((cause: unknown) => {\n if (active.current && sequence.current === request)\n setError(cause instanceof Error ? cause.message : t('entry.error'));\n })\n .finally(() => {\n if (active.current && sequence.current === request) {\n setBusy(false);\n refresh();\n }\n });\n };\n return (\n
\n \n {t('entry.chip.notShared')}\n ) : (\n {t('entry.chip.readOnly')}\n )\n }\n meta={{t(tab == null ? 'entry.borrow.none' : 'entry.borrow.readOnly')}}\n detail={\n
\n {tab == null ? null : (\n <>\n {tab.title || tab.url}\n {tab.url}\n \n )}\n invoke(tab == null ? 'pair' : 'return')}\n >\n {t(tab == null ? 'entry.borrow.pair' : 'entry.borrow.return')}\n \n {tab != null || pair === undefined ? null : (\n <>\n {t('entry.borrow.instructions')}\n \n {location.origin}\n {\n sequence.current += 1;\n setPair(undefined);\n invoke('return');\n }}\n >\n {t('entry.borrow.cancel')}\n \n \n )}\n
\n }\n />\n
\n {error === undefined ? null : (\n
\n {error}\n
\n )}\n
\n );\n}\n","export const STYLEX_CSS: string = '@bh-stylex-css';\n","import { border, color, radius, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport { COMBOBOX_CSS } from '../../../client/src/client/combobox.js';\nimport { STYLEX_CSS } from '../../../client/src/client/ds/stylex-css.js';\n\nexport const styles =\n COMBOBOX_CSS +\n `\n.bh-browser-access-control { position: relative; display: flex; align-items: center; }\n.bh-browser-borrow { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-borrow-title, .bh-browser-daily-install { color: var(--dsw-alias-label-primary); text-underline-offset: 3px; }\n.bh-browser-borrow-url { overflow-wrap: anywhere; }\n.bh-browser-borrow-url { color: var(--dsw-alias-label-secondary); }\n.bh-browser-access-power {\n display: flex; align-items: center; justify-content: center; width: 28px; height: 28px;\n padding: 0; border: 0; border-radius: ${radius.md}; background: transparent;\n color: var(--dsw-alias-label-secondary); cursor: pointer;\n}\n.bh-browser-access-power:hover { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power[aria-pressed='true'] { color: var(--dsw-alias-state-business-primary); background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-access-power:focus-visible { outline: ${border.focus} solid var(--dsw-alias-state-business-primary); outline-offset: 2px; }\n.bh-browser-access-power:disabled { opacity: 0.5; cursor: default; }\n.bh-browser-access-power.bh-access-failed { color: var(--dsw-alias-state-error-primary); }\n.bh-browser-access-error { order: -1; padding: 0 ${space.x2}; color: var(--dsw-alias-state-error-primary); font-size: ${text.metaSize}; line-height: ${text.metaLine}; white-space: nowrap; }\n\n.bh-browser-local { display: grid; gap: ${space.x3}; font-size: ${text.metaSize}; }\n.bh-browser-card-detail { display: grid; gap: ${space.x3}; justify-items: start; font-size: ${text.metaSize}; }\n.bh-browser-card-field { display: flex; align-items: center; justify-content: space-between; gap: ${space.x3}; width: 100%; color: var(--dsw-alias-label-secondary); }\n.bh-browser-card-field > span:first-child { flex: none; }\n.bh-browser-cards .bh-card-meta [role=\"status\"] { color: inherit; }\n.bh-browser-note { color: var(--dsw-alias-label-secondary); }\n.bh-browser-frame { display: block; width: 100%; border: ${border.hairline} solid ${color.divider}; border-radius: ${radius.md}; }\n.bh-browser-actions { display: flex; flex-wrap: wrap; gap: ${space.x3}; }\n.bh-browser-tab[aria-pressed=\"true\"] { background: var(--dsw-alias-interactive-bg-hover); }\n.bh-browser-tab[aria-current=\"true\"] .bh-browser-tab-title { font-weight: ${text.strong}; }\n.bh-browser-tab .bh-browser-tab-url { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }\n.bh-browser-tabs .bh-card-main { padding: ${space.x3} ${space.x3}; }\n.bh-browser-error { color: var(--dsw-alias-state-error-primary); overflow-wrap: anywhere; }\n.bh-viewer-btn-content { display: inline-flex; align-items: center; gap: ${space.x2}; }\n@media (max-width: 560px) {\n [data-bh-viewer-btn-label] { display: none; }\n}\n.bh-browser-progress { display: grid; gap: ${space.x2}; color: var(--dsw-alias-label-secondary); }\n.bh-browser-progress-bar { width: 100%; height: 6px; accent-color: var(--dsw-alias-state-business-primary); }\n.bh-browser-failure { display: grid; gap: ${space.x2}; overflow-wrap: anywhere; }\n.bh-browser-failure-title { color: var(--dsw-alias-label-primary); font-weight: ${text.strong}; }\n.bh-browser-failure-fault, .bh-browser-failure-action { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details { color: var(--dsw-alias-label-secondary); }\n.bh-browser-failure-details pre { overflow-x: auto; white-space: pre-wrap; font-size: ${text.metaSize}; }\n` +\n STYLEX_CSS;\n","/**\n * Vendored Access Power glyph from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the lucide `dist/esm/icons/power.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport type { ReactElement } from 'react';\nexport function AccessPowerIcon(): ReactElement {\n return (\n \n \n \n \n );\n}\n","import type { ReactElement } from 'react';\n\nfunction baseProps(size: number): {\n width: number;\n height: number;\n viewBox: string;\n fill: string;\n stroke: string;\n strokeWidth: number;\n strokeLinecap: 'round';\n strokeLinejoin: 'round';\n 'aria-hidden': true;\n} {\n return {\n width: size,\n height: size,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n 'aria-hidden': true,\n };\n}\n\nexport function TrackpadIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n );\n}\n\nexport function TakeoverIcon({ size = 14 }: { readonly size?: number }): ReactElement {\n return (\n \n \n \n \n \n );\n}\n","import { PanelEmptyState } from '../../../client/src/client/ds/empty-state.js';\nimport { RemoteViewer } from '../../../client/src/client/remote-viewer/index.js';\nimport type { ViewerTranslate } from '../../../client/src/client/remote-viewer/locale.js';\nimport {\n useId,\n useCallback,\n useRef,\n useState,\n useSyncExternalStore,\n type ComponentType,\n type ReactElement,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Switch,\n Tag,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Tooltip } from '../../../client/src/client/ds/tooltip.js';\nimport { ChannelSidebarIcon } from '../../../client/src/client/channel-sidebar-icon.js';\nimport { useMountedResource } from '../../../client/src/client/mounted-resource.js';\nimport { recordViewerOpen } from '../../../client/src/client/telemetry-surface.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type {} from '@deepseek-ai/dsh-client-ui-slots';\n\nimport { LOCALE_NS, en, zh, type BrowserTranslate } from './locale.js';\nimport {\n BrowserApiError,\n BrowserFailureNotice,\n BrowserProvisionProgress,\n readFailure,\n type BrowserFailure,\n} from './browser-failure.js';\nimport { isBrowserFailureKind } from '../failure-kinds.js';\nimport { ProfileCombobox } from './profile-combobox.js';\nimport { registerBrowserSettings } from './settings.js';\nimport { ProfileBrowserControl } from './profile-browser.js';\nimport type { ProfileView } from '../profile-control.js';\nimport { DailyBrowserControl } from './daily-browser.js';\nimport type { DailyView } from '../daily.js';\nimport { BorrowedBrowser, type BorrowedTabView } from './borrowed-browser.js';\nimport { styles } from './styles.js';\n\nconst ENTRY_ID = 'botharness-browser';\nconst OBSERVATION_ENDPOINT = './api/browser/observation';\nconst TAKEOVER_ENDPOINT = './api/browser/takeover';\nconst OPEN_ENDPOINT = './api/browser/open';\nconst STOP_ENDPOINT = './api/browser/stop';\nconst baseRelative = (path: string | null | undefined): string | undefined =>\n path === null || path === undefined ? undefined : path.startsWith('/') ? `.${path}` : path;\n\nimport { AccessPowerIcon } from './access-power-icon.js';\nimport { TakeoverIcon, TrackpadIcon } from './viewer-icons.js';\n\nexport const name = 'botharness-browser-client';\n\nexport const inject = ['channelSidebar', 'connection', 'locale'];\n\nexport interface BrowserClientContext {\n readonly locale: {\n bind(namespace: string): BrowserTranslate;\n register(namespace: string, dictionaries: { zh: unknown; en: unknown }): () => void;\n };\n inject(names: readonly string[], callback: (ctx: BrowserClientContext) => void): void;\n effect(callback: () => () => void, name: string): void;\n}\n\ninterface ChannelSidebarEntryProps {\n readonly botSlug?: string;\n readonly t: BrowserTranslate;\n readonly expanded?: boolean;\n readonly setExpanded?: (expanded: boolean) => void;\n readonly setExpandable?: (expandable: boolean) => void;\n}\n\ninterface ChannelSidebarRegistryLike {\n register(entry: {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly order: number;\n readonly scope: 'channel' | 'personabot';\n readonly component: ComponentType;\n readonly headerAction?: ComponentType;\n readonly badge?: ComponentType;\n readonly tab?: string;\n }): () => void;\n}\n\ninterface ConnectionRpcLike {\n call(\n path: string,\n method: string,\n options?: { args?: unknown },\n ): Promise<{ ok: boolean; value?: unknown; error?: { message?: string } }>;\n}\n\nlet connectionRpc: ConnectionRpcLike | undefined;\n\ninterface BotInfoView {\n readonly displayName: string | undefined;\n readonly browserAccess: boolean | undefined;\n readonly browserProfile: string | undefined;\n readonly profiles: readonly string[];\n}\n\ninterface BrowserTabView {\n readonly targetId: string;\n readonly url: string;\n readonly title: string;\n readonly current: boolean;\n}\n\ninterface BrowserObservation {\n readonly target?: 'local' | 'container' | 'extension' | 'daily-control' | 'profile-control';\n readonly daily?: DailyView | null;\n readonly profile?: ProfileView;\n readonly borrowed?: BorrowedTabView | null;\n readonly viewerUrl?: string | null;\n readonly cleanupRequired?: boolean;\n readonly running: boolean;\n readonly frame: string | null;\n readonly focused: string | null;\n readonly takeover: boolean;\n readonly handoffPending?: boolean;\n readonly provisioning?: { downloadedBytes: number; totalBytes: number } | null;\n readonly tabs: readonly BrowserTabView[];\n readonly profiles?: readonly string[];\n}\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { cache: 'no-store', ...init });\n const body = (await response.json()) as T & {\n ok?: boolean;\n error?: string;\n code?: string;\n detail?: string;\n packages?: string[];\n };\n if (!response.ok || body.ok === false) {\n throw new BrowserApiError(\n body.error ?? `HTTP ${String(response.status)}`,\n body.code,\n body.detail,\n body.packages,\n );\n }\n return body;\n}\n\ninterface ReadableStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): T;\n}\n\ntype BotInfoStore = ReadableStore & {\n refresh(): void;\n setAccess(enabled: boolean): void;\n};\n\nconst botInfoStores = new Map();\n\nfunction botInfoStore(botSlug: string | undefined): BotInfoStore {\n const key = botSlug ?? '';\n const existing = botInfoStores.get(key);\n if (existing !== undefined) return existing;\n const created = createBotInfoStore(botSlug);\n botInfoStores.set(key, created);\n return created;\n}\n\nfunction createBotInfoStore(botSlug: string | undefined): BotInfoStore {\n let info: BotInfoView = {\n displayName: undefined,\n browserAccess: undefined,\n browserProfile: undefined,\n profiles: [],\n };\n const listeners = new Set<() => void>();\n let loadedAt = Number.NEGATIVE_INFINITY;\n const load = (): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined) return;\n void rpc\n .call('/api', 'botharness/list', { args: {} })\n .then((result) => {\n if (!result.ok) return;\n const value = result.value as {\n bots?: readonly {\n slug?: unknown;\n displayName?: unknown;\n browserAccess?: unknown;\n browserProfile?: unknown;\n }[];\n };\n const bots = value.bots ?? [];\n const match = bots.find((bot) => bot.slug === botSlug);\n if (match === undefined) return;\n const profiles = [\n ...new Set(\n bots\n .map((bot) => (typeof bot.browserProfile === 'string' ? bot.browserProfile : ''))\n .filter((name) => name !== ''),\n ),\n ].sort();\n info = {\n displayName:\n typeof match.displayName === 'string' && match.displayName.length > 0\n ? match.displayName\n : undefined,\n browserAccess: match.browserAccess === true,\n browserProfile:\n typeof match.browserProfile === 'string' && match.browserProfile !== ''\n ? match.browserProfile\n : undefined,\n profiles,\n };\n for (const listener of listeners) listener();\n })\n .catch(() => undefined);\n };\n return {\n setAccess(enabled) {\n info = { ...info, browserAccess: enabled };\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n if (listeners.size === 0 && Date.now() - loadedAt > 5000) {\n loadedAt = Date.now();\n load();\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => info,\n refresh: load,\n };\n}\n\ninterface ObservationStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): BrowserObservation | undefined;\n setTab(targetId: string | undefined): void;\n refresh(): void;\n confirmTakeover(active: boolean): void;\n}\n\nfunction observationUrl(botSlug: string | undefined, tabId: string | undefined): string {\n const base = `${OBSERVATION_ENDPOINT}?slug=${encodeURIComponent(botSlug ?? '')}`;\n return tabId === undefined || tabId === '' ? base : `${base}&tab=${encodeURIComponent(tabId)}`;\n}\n\nfunction createObservationStore(botSlug: string | undefined): ObservationStore {\n let value: BrowserObservation | undefined;\n let tab: string | undefined;\n let timer: ReturnType | undefined;\n let refreshing = false;\n let revision = 0;\n let refreshAgain = false;\n const listeners = new Set<() => void>();\n const refresh = async (): Promise => {\n if (refreshing) {\n refreshAgain = true;\n return;\n }\n refreshing = true;\n const requestedTab = tab;\n const requestedRevision = revision;\n try {\n const next = await requestJson(observationUrl(botSlug, requestedTab));\n if (tab === requestedTab && revision === requestedRevision) value = next;\n } catch {\n if (tab === requestedTab && revision === requestedRevision) value = undefined;\n } finally {\n refreshing = false;\n }\n for (const listener of listeners) listener();\n if (refreshAgain && listeners.size > 0) {\n refreshAgain = false;\n void refresh();\n }\n };\n return {\n subscribe(listener) {\n listeners.add(listener);\n if (listeners.size === 1) {\n void refresh();\n timer = setInterval(() => void refresh(), 1500);\n }\n return () => {\n listeners.delete(listener);\n if (listeners.size === 0 && timer !== undefined) {\n clearInterval(timer);\n timer = undefined;\n }\n };\n },\n getSnapshot: () => value,\n setTab(targetId) {\n tab = targetId;\n void refresh();\n },\n confirmTakeover(active) {\n revision += 1;\n if (value !== undefined) value = { ...value, takeover: active };\n for (const listener of listeners) listener();\n },\n refresh: () => void refresh(),\n };\n}\n\nfunction BrowserHeaderAction({\n botSlug,\n t,\n setExpandable,\n setExpanded,\n}: ChannelSidebarEntryProps): ReactElement {\n const store = botInfoStore(botSlug);\n const [busy, setBusy] = useState(false);\n const inFlight = useRef(false);\n const [error, setError] = useState(false);\n const subscribe = (listener: () => void): (() => void) => {\n const sync = (): void => {\n setExpandable?.(store.getSnapshot().browserAccess !== undefined);\n };\n const unsubscribe = store.subscribe(() => {\n sync();\n listener();\n });\n sync();\n return unsubscribe;\n };\n const info = useSyncExternalStore(subscribe, store.getSnapshot);\n const accessOn = info.browserAccess === true;\n\n const onToggle = (next: boolean): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n void rpc\n .call('/api', 'botharness/browserAccessSet', { args: { slug: botSlug, enabled: next } })\n .then((result) => {\n if (!result.ok) {\n setError(true);\n return;\n }\n const value = result.value as { bot?: { browserAccess?: unknown } };\n const applied = value.bot?.browserAccess === true;\n store.setAccess(applied);\n setExpanded?.(applied);\n })\n .catch(() => {\n setError(true);\n })\n .finally(() => {\n inFlight.current = false;\n setBusy(false);\n });\n };\n\n const label = t(accessOn ? 'entry.access.disable' : 'entry.access.enable');\n return (\n \n \n onToggle(!accessOn)}\n >\n \n \n \n {error ? (\n \n {t('entry.access.failureHint')}\n \n ) : null}\n \n );\n}\n\nfunction BrowserBody({ botSlug, t }: ChannelSidebarEntryProps): ReactElement {\n const [store] = useState(() => createObservationStore(botSlug));\n const infoStore = botInfoStore(botSlug);\n const observation = useSyncExternalStore(store.subscribe, store.getSnapshot);\n const info = useSyncExternalStore(infoStore.subscribe, infoStore.getSnapshot);\n const [follow, setFollow] = useState(true);\n const [preview, setPreview] = useState(undefined);\n const [busy, setBusy] = useState(false);\n const errorId = useId();\n const [profileInvalid, setProfileInvalid] = useState(false);\n const [profileOverride, setProfileOverride] = useState(undefined);\n const [failure, setFailure] = useState(undefined);\n const [viewer, setViewer] = useState();\n const [interaction, setInteraction] = useState(false);\n const viewerScope = useRef('');\n const previousViewer = useRef<{ identity: string; url: string | undefined }>({\n identity: '',\n url: undefined,\n });\n const mounted = useRef(true);\n const viewerRequest = useRef(0);\n const interactionResource = useCallback((node: HTMLDivElement | null): void => {\n mounted.current = node !== null;\n if (node === null) viewerRequest.current += 1;\n }, []);\n const disableInteraction = useCallback(() => {\n viewerRequest.current += 1;\n setInteraction(false);\n }, []);\n const [inputMode, setInputMode] = useState<'direct' | 'trackpad'>(() =>\n typeof window !== 'undefined' &&\n window.innerWidth < 768 &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: coarse)').matches\n ? 'trackpad'\n : 'direct',\n );\n const finePointer =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(pointer: fine)').matches;\n const showHeaderTakeover = inputMode === 'direct' && finePointer;\n\n const tabs = observation?.tabs ?? [];\n const focused = observation?.focused ?? null;\n const currentTab = tabs.find((tab) => tab.current);\n const orderedTabs =\n currentTab === undefined ? tabs : [currentTab, ...tabs.filter((tab) => !tab.current)];\n const cleanupRequired = observation?.cleanupRequired === true;\n const failureNotice =\n !cleanupRequired && failure !== undefined && isBrowserFailureKind(failure.code) ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n />\n ) : null;\n let visibleError: string | undefined = failure?.message;\n if (cleanupRequired) visibleError = t('entry.view.cleanupFailed');\n if (failureNotice !== null) visibleError = undefined;\n const provisioning = observation?.provisioning ?? null;\n const paused = observation?.takeover === true;\n const viewerUrl =\n observation?.running === true &&\n (observation?.target === 'container' || observation?.target === 'local')\n ? baseRelative(observation.viewerUrl)\n : undefined;\n const narrowViewer = typeof window !== 'undefined' && window.innerWidth < 700;\n const viewerDesign =\n observation?.target === 'local' && (inputMode === 'trackpad' || narrowViewer)\n ? { width: 390, height: 700 }\n : { width: 1024, height: 768 };\n const identity = `${botSlug ?? ''}:${profileOverride ?? info.browserProfile ?? ''}:${observation?.target ?? ''}`;\n const scope = `${identity}:${viewerUrl ?? ''}`;\n const previous = previousViewer.current;\n if (viewerScope.current !== scope) {\n viewerScope.current = scope;\n viewerRequest.current += 1;\n previousViewer.current = { identity, url: viewerUrl };\n if (interaction) setInteraction(false);\n if ((previous.identity !== identity || previous.url !== undefined) && viewer !== undefined)\n setViewer(undefined);\n }\n if (!paused && interaction) setInteraction(false);\n const viewerTranslate: ViewerTranslate = (key) => t(key);\n const postTakeoverEnable = (): void => {\n if (botSlug === undefined || viewerUrl === undefined) return;\n const request = ++viewerRequest.current;\n const expectedScope = viewerScope.current;\n setBusy(true);\n setFailure(undefined);\n void requestJson<{ takeover: boolean }>(TAKEOVER_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, active: true }),\n })\n .then((result) => {\n if (\n mounted.current &&\n request === viewerRequest.current &&\n viewerScope.current === expectedScope\n ) {\n store.confirmTakeover(result.takeover);\n setInteraction(result.takeover);\n }\n })\n .catch((cause: unknown) => {\n if (mounted.current && request === viewerRequest.current) setFailure(readFailure(cause));\n })\n .finally(() => {\n if (mounted.current) {\n setBusy(false);\n store.refresh();\n }\n });\n };\n const toggleTakeover = (): void => {\n if (interaction) {\n disableInteraction();\n if (observation?.handoffPending !== true) invoke(TAKEOVER_ENDPOINT, { active: false });\n return;\n }\n if (busy || botSlug === undefined || viewerUrl === undefined) return;\n postTakeoverEnable();\n };\n const botName = info.displayName ?? botSlug ?? '';\n const takeoverTitle =\n interaction && paused\n ? `${t('entry.view.browserTitle', { name: botName })} · ${t('entry.takeover.active')}`\n : t('entry.view.browserTitle', { name: botName });\n const toggleRef = useRef(toggleTakeover);\n toggleRef.current = toggleTakeover;\n const messageResource = useMountedResource(() => {\n const onMessage = (event: MessageEvent): void => {\n const data = event.data as { type?: unknown } | null;\n if (typeof window === 'undefined' || event.origin !== window.location.origin) return;\n if (data === null || typeof data !== 'object' || data.type !== 'bh-takeover-toggle') return;\n const ours = [...document.querySelectorAll('iframe')].some(\n (frame) =>\n frame.contentWindow === event.source &&\n (frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/'),\n );\n if (!ours) return;\n toggleRef.current();\n };\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n const takeoverNote = useRef(undefined);\n const wantTakeoverNote = interaction && paused;\n if (takeoverNote.current !== wantTakeoverNote && typeof document !== 'undefined') {\n takeoverNote.current = wantTakeoverNote;\n try {\n for (const frame of Array.from(document.querySelectorAll('iframe'))) {\n if ((frame.getAttribute('src') ?? '').includes('/botharness-browser/viewer/')) {\n frame.contentWindow?.postMessage(\n { type: 'bh-takeover-state', active: wantTakeoverNote },\n window.location.origin,\n );\n }\n }\n } catch {\n void 0;\n }\n }\n const bodyResource = useCallback(\n (node: HTMLDivElement | null): void => {\n interactionResource(node);\n messageResource(node);\n },\n [interactionResource, messageResource],\n );\n\n const invoke = (endpoint: string, body: Record = {}): void => {\n if (busy || botSlug === undefined) return;\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void requestJson<{ ok: boolean; viewerUrl?: string | null; takeover?: boolean }>(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ slug: botSlug, ...body }),\n })\n .then((result) => {\n if (typeof result.takeover === 'boolean') store.confirmTakeover(result.takeover);\n if (\n endpoint === OPEN_ENDPOINT &&\n result.viewerUrl !== undefined &&\n result.viewerUrl !== null\n ) {\n setViewer(baseRelative(result.viewerUrl));\n setInteraction(false);\n }\n if (endpoint === STOP_ENDPOINT) {\n setViewer(undefined);\n setInteraction(false);\n }\n })\n .catch((cause: unknown) => setFailure(readFailure(cause)))\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n const onFollow = (next: boolean): void => {\n setFollow(next);\n if (next) {\n setPreview(undefined);\n store.setTab(undefined);\n } else {\n const selected = focused ?? preview;\n setPreview(selected);\n store.setTab(selected);\n }\n };\n\n const onSelectTab = (targetId: string): void => {\n setFollow(false);\n setPreview(targetId);\n store.setTab(targetId);\n };\n\n const onPause = (): void => {\n disableInteraction();\n invoke(TAKEOVER_ENDPOINT, { active: !paused });\n };\n\n const currentProfile = profileOverride ?? info.browserProfile ?? '';\n\n const saveProfile = (name: string): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || busy) return;\n const trimmed = name.trim();\n const next = trimmed === 'default' ? '' : trimmed;\n if (next === currentProfile) {\n setProfileInvalid(false);\n setFailure(undefined);\n return;\n }\n disableInteraction();\n setViewer(undefined);\n setBusy(true);\n setProfileInvalid(false);\n setFailure(undefined);\n void rpc\n .call('/api', 'botharness/browserProfileSet', { args: { slug: botSlug, profile: next } })\n .then((result) => {\n if (!result.ok) {\n setProfileInvalid(true);\n setFailure({ message: result.error?.message ?? t('entry.profile.failed') });\n return;\n }\n const value = result.value as { bot?: { browserProfile?: unknown } };\n setProfileOverride(\n typeof value.bot?.browserProfile === 'string' ? value.bot.browserProfile : '',\n );\n setPreview(undefined);\n store.setTab(undefined);\n infoStore.refresh();\n })\n .catch((cause: unknown) => {\n setProfileInvalid(true);\n setFailure(readFailure(cause));\n })\n .finally(() => {\n setBusy(false);\n store.refresh();\n });\n };\n\n if (!cleanupRequired && observation?.target === 'profile-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'daily-control')\n return (\n \n );\n\n if (!cleanupRequired && observation?.target === 'extension')\n return (\n \n );\n\n return (\n
\n \n \n {observation?.running === true ? (\n {t('entry.chip.running')}\n ) : (\n {t('entry.chip.stopped')}\n )}\n {paused ? {t('entry.chip.paused')} : null}\n \n }\n detail={\n
\n
\n {t('entry.profile.label')}\n \n
\n {viewerUrl === undefined ? (\n
\n {t('entry.view.follow')}\n \n
\n ) : null}\n
\n {viewerUrl === undefined ? (\n \n invoke(OPEN_ENDPOINT, follow || preview === undefined ? {} : { tab: preview })\n }\n >\n {t(busy ? 'entry.view.opening' : 'entry.view.open')}\n \n ) : (\n {\n if (viewerUrl !== undefined) setViewer(viewerUrl);\n }}\n >\n \n \n {t('entry.view.fullscreen')}\n \n \n )}\n \n {t(paused ? 'entry.view.resume' : 'entry.view.pause')}\n \n {observation?.running === true || cleanupRequired ? (\n invoke(STOP_ENDPOINT)}\n >\n {t('entry.view.stop')}\n \n ) : null}\n
\n
\n }\n />\n
\n {viewerUrl === undefined ? (\n <>\n {observation?.frame === null || observation?.frame === undefined ? (\n
{t('entry.view.noFrame')}
\n ) : (\n {t('entry.label')}\n )}\n \n ) : (\n \n {failure.message}\n
\n )\n }\n busy={busy}\n stopping={false}\n hideStop\n hideInteractiveToggle\n allowFrameInput\n onStop={() => invoke(STOP_ENDPOINT)}\n interactive={interaction && paused}\n onToggleInteractive={toggleTakeover}\n onDisableInteraction={disableInteraction}\n expanded={viewer === viewerUrl}\n onExpandedChange={(next) => {\n setViewer(next ? viewerUrl : undefined);\n if (!next) disableInteraction();\n }}\n extraControls={\n <>\n {showHeaderTakeover ? (\n setInputMode('trackpad')}\n >\n \n \n {t('entry.view.inputMode.trackpad')}\n \n \n ) : null}\n {showHeaderTakeover ? (\n \n \n \n \n {t(interaction ? 'entry.takeover.stop' : 'entry.takeover.start')}\n \n \n \n ) : null}\n \n }\n />\n )}\n {tabs.length === 0 ? (\n
{t('entry.view.noTabs')}
\n ) : (\n
    \n {orderedTabs.map((tab) => (\n
  • \n
    \n onSelectTab(tab.targetId)}\n >\n \n \n \n \n \n {tab.title === '' ? tab.url : tab.title}\n \n {tab.title === '' ? null : (\n {tab.url}\n )}\n \n \n
    \n
  • \n ))}\n
\n )}\n {provisioning !== null ? : null}\n {failureNotice}\n {visibleError !== undefined ? (\n
\n {visibleError}\n
\n ) : null}\n \n );\n}\n\nfunction createBrowserBody(t: BrowserTranslate): ComponentType {\n return function BrowserBodyView(props: Omit): ReactElement {\n useState(() => recordViewerOpen(connectionRpc, 'browser'));\n const store = botInfoStore(props.botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess === false)\n return {t('entry.access.description')};\n return ;\n };\n}\n\nfunction createBrowserBadge(t: BrowserTranslate): ComponentType {\n return function BrowserBadge({ botSlug }: Omit) {\n const store = botInfoStore(botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n if (info.browserAccess !== true) return null;\n return (\n \n );\n };\n}\n\nfunction createBrowserHeader(t: BrowserTranslate): ComponentType {\n return function BrowserHeaderView(props: Omit): ReactElement {\n return ;\n };\n}\n\nexport function apply(ctx: BrowserClientContext): void {\n botInfoStores.clear();\n const t = ctx.locale.bind(LOCALE_NS);\n registerBrowserSettings(ctx, t);\n ctx.effect(() => {\n const sheet = document.createElement('style');\n sheet.dataset.plugin = '@botharness/browser';\n sheet.dataset.pluginCss = '@botharness/browser/client.css';\n sheet.textContent = styles;\n document.head.append(sheet);\n return () => sheet.remove();\n }, 'botharness-browser: styles');\n ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'botharness-browser: dictionaries');\n ctx.inject(['channelSidebar', 'connection'], (sidebarCtx) => {\n const registry = (sidebarCtx as unknown as { channelSidebar?: ChannelSidebarRegistryLike })\n .channelSidebar;\n connectionRpc = (sidebarCtx as unknown as { connection?: { rpc?: ConnectionRpcLike } })\n .connection?.rpc;\n if (registry === undefined) return;\n ctx.effect(\n () =>\n registry.register({\n id: ENTRY_ID,\n icon: 'globe',\n label: t('entry.label'),\n order: 41,\n scope: 'personabot',\n component: createBrowserBody(t),\n headerAction: createBrowserHeader(t),\n badge: createBrowserBadge(t),\n tab: 'screen',\n }),\n 'botharness-browser: channel sidebar entry',\n );\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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ACE,QACA,EACE,GAAG,6GACL,CACF,CACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,6GACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4CACL,CACF;IACA,CACE,QACA,EACE,GAAG,8BACL,CACF;IACA,CACE,QACA,EACE,GAAG,6BACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,UAAU,CACR,CACE,QACA,EACE,GAAG,0UACL,CACF,GACA,CACE,UACA;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;GACL,CACF,CACF;GACA,SAAS;IACP,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;GACF;GACA,OAAO;IACL,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,QACA,EACE,GAAG,kDACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;GACF;GACA,eAAe,CACb,CACE,QACA;IACE,OAAO;IACP,QAAQ;IACR,GAAG;IACH,GAAG;IACH,IAAI;GACN,CACF,GACA,CACE,QACA,EACE,GAAG,WACL,CACF,CACF;GACA,mBAAmB;IACjB,CACE,Q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"} \ No newline at end of file diff --git a/packages/client/src/client/bot-main.tsx b/packages/client/src/client/bot-main.tsx index 8fbd8fb5fa..c4497946a9 100644 --- a/packages/client/src/client/bot-main.tsx +++ b/packages/client/src/client/bot-main.tsx @@ -1,4 +1,4 @@ -import { useTeamMember } from './team-state.js'; +import { useTeamMember, useTeamMode } from './team-state.js'; import { AnnouncementGate } from './announcement-gate.js'; import { ReadFailure } from './ds/read-failure.js'; import { humanIdOf, useSelfHumanId, SelfHumanContext } from './self-human.js'; @@ -1278,6 +1278,7 @@ function ConversationView({ const sidebar = useChannelSidebar(state); const docked = useChannelDockActive(); const workspaceEnabled = useContext(WorkspaceContext) !== undefined; + const teamMode = useTeamMode(actions.teamCall)?.enabled === true; const [detail, setDetail] = useScopedState<'files' | 'inbox' | undefined>( scopeKey, state.selection?.kind === 'bot' && state.selection.inboxRequest ? 'inbox' : undefined, @@ -3936,7 +3937,7 @@ function ConversationView({ (hasChannelBots(channel) || (entry.scope !== 'personabot' && entry.id !== 'sessions' && - entry.id !== 'members')) && + (entry.id !== 'members' || teamMode))) && (entry.scope === 'both' || entry.scope === settingsScope) && (entry.visible?.(state) ?? true) } diff --git a/packages/client/src/client/channel-add-people.tsx b/packages/client/src/client/channel-add-people.tsx new file mode 100644 index 0000000000..7f614856d0 --- /dev/null +++ b/packages/client/src/client/channel-add-people.tsx @@ -0,0 +1,284 @@ +import { useState, type ReactElement } from 'react'; +import * as stylex from '@stylexjs/stylex'; + +import type { BridgeActions } from './actions.js'; +import type { BridgeCall } from './bridge.js'; +import { ChannelSidebarIcon } from './channel-sidebar-icon.js'; +import { useDelayedSearch } from './delayed-search.js'; +import { TextField } from './ds/field.js'; +import { FormDialog } from './ds/form-dialog.js'; +import { IconButton } from './ds/icon-button.js'; +import { Note } from './ds/note.js'; +import { Tooltip } from './ds/tooltip.js'; +import { border, color, radius, size, space, text } from './ds/tokens.stylex.js'; +import type { BotHarnessTranslate } from './locale.js'; +import { useMountedResource } from './mounted-resource.js'; +import { teamRefusal, type TeamViewer } from './team-bridge.js'; +import { + addChannelHuman, + loadChannelAccess, + loadMemberCandidates, + type ChannelAccess, + type MemberCandidate, +} from './team-channels-bridge.js'; +import { teamErrorText } from './team-settings.js'; +import { useTeamMode } from './team-state.js'; + +const styles = stylex.create({ + results: { + display: 'flex', + flexDirection: 'column', + gap: space.x1, + minWidth: 0, + minHeight: '120px', + maxHeight: '280px', + overflowY: 'auto', + }, + option: { + display: 'flex', + alignItems: 'center', + gap: space.x3, + width: '100%', + minWidth: 0, + minHeight: size.nav, + paddingInline: space.x3, + borderWidth: 0, + borderRadius: radius.sm, + backgroundColor: { default: 'transparent', ':hover': color.hover }, + color: color.fg, + fontFamily: 'inherit', + fontSize: text.bodySize, + lineHeight: text.bodyLine, + textAlign: 'start', + cursor: 'pointer', + outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` }, + outlineOffset: '-2px', + }, + optionOn: { + backgroundColor: { default: color.selected, ':hover': color.selected }, + }, + initial: { + display: 'inline-flex', + alignItems: 'center', + justifyContent: 'center', + flexShrink: 0, + width: '28px', + height: '28px', + borderRadius: radius.round, + backgroundColor: color.well, + color: color.muted, + fontSize: text.metaSize, + fontWeight: text.strong, + }, + names: { + display: 'flex', + alignItems: 'baseline', + gap: space.x2, + minWidth: 0, + }, + name: { + minWidth: 0, + overflow: 'hidden', + textOverflow: 'ellipsis', + whiteSpace: 'nowrap', + }, + username: { + flexShrink: 0, + color: color.muted, + fontSize: text.metaSize, + lineHeight: text.metaLine, + }, +}); + +export function canAddPeople(access: ChannelAccess | undefined, viewer: TeamViewer): boolean { + if (access === undefined) return false; + return ( + viewer.owner || + viewer.permissions.includes('channels.manageAll') || + access.role !== 'member' || + access.policy.addMembers === 'everyone' + ); +} + +export function addPeopleErrorText(t: BotHarnessTranslate, error: unknown): string { + return teamRefusal(error) === 'permission-required' + ? t('channelPeople.denied') + : teamErrorText(t, error); +} + +export function AddPeopleAction({ + channelId, + actions, + t, +}: { + readonly channelId: string; + readonly actions: BridgeActions; + readonly t: BotHarnessTranslate; +}): ReactElement | null { + const call = actions.teamCall; + const team = useTeamMode(call); + const viewer = team?.enabled === true ? team.viewer : undefined; + const [allowed, setAllowed] = useState<{ channelId: string; value: boolean }>(); + const [open, setOpen] = useState(false); + const mount = useMountedResource(() => { + if (call === undefined || viewer === undefined) return undefined; + const controller = new AbortController(); + loadChannelAccess(call, channelId, controller.signal) + .then((access) => { + if (!controller.signal.aborted) + setAllowed({ channelId, value: canAddPeople(access, viewer) }); + }) + .catch(() => undefined); + return () => controller.abort(); + }, [call, channelId, viewer]); + if (call === undefined || viewer === undefined) return null; + const visible = allowed?.channelId === channelId && allowed.value; + return ( + <> + \n )}\n {summary === undefined ? null : {summary}}\n {chips === undefined ? null : {chips}}\n {meta === undefined ? null : {meta}}\n \n \n );\n const className = mainClassName === undefined ? 'bh-card-main' : 'bh-card-main ' + mainClassName;\n return (\n \n
\n {selection?.multiple === true ? (\n \n ) : onClick === undefined ? (\n
\n {body}\n
\n ) : (\n \n {body}\n \n )}\n {trailing === undefined ? null : {trailing}}\n
\n {detail === undefined ? null : (\n
\n {detail}\n
\n )}\n \n );\n}\n","import type { ComputerTarget } from './target.js';\n\nexport const COMPUTER_SETTINGS_NAMESPACE = 'botharness-computer';\n\nexport const COMPUTER_EXPORT_DIR_FIELD = 'exportDir';\n\nexport const COMPUTER_IDLE_STOP_FIELD = 'idleStopMinutes';\n\nexport const COMPUTER_AUTO_ALLOW_FIELD = 'autoAllowActions';\n\nexport const COMPUTER_TARGET_FIELD = 'target';\n\nexport interface ComputerSettings {\n target?: ComputerTarget;\n exportDir: string;\n idleStopMinutes: number;\n autoAllowActions: boolean;\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { color, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n note: {\n margin: 0,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n inset: { paddingBlock: space.x2, paddingInline: space.x2 },\n muted: { color: color.muted },\n subtle: { color: color.subtle },\n danger: { color: color.danger },\n success: { color: color.success },\n warning: { color: color.warning },\n});\n\nexport type NoteTone = 'muted' | 'subtle' | 'danger' | 'success' | 'warning';\n\nexport function Note({\n tone = 'muted',\n inset = false,\n children,\n}: {\n readonly tone?: NoteTone;\n readonly inset?: boolean;\n readonly children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n

\n );\n}\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { actionColor, border, color, radius, size, space, text } from './tokens.stylex.js';\n\nexport const pillStyles = stylex.create({\n pill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: space.x2,\n maxWidth: '100%',\n height: size.icon,\n paddingInline: `${space.x4} ${space.x3}`,\n borderWidth: 0,\n borderRadius: radius.sm,\n backgroundColor: { default: actionColor.secondary, ':hover': actionColor.hover },\n color: color.fg,\n fontFamily: 'inherit',\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n whiteSpace: 'nowrap',\n cursor: { default: 'pointer', ':disabled': 'default' },\n opacity: { default: 1, ':disabled': 0.5 },\n outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` },\n outlineOffset: '1px',\n },\n});\n\nexport function PillButton({\n children,\n ...rest\n}: { readonly children: ReactNode } & Omit<\n ButtonHTMLAttributes,\n 'className' | 'style' | 'type' | 'children'\n>): ReactElement {\n return (\n \n );\n}\n\nexport function PillFileButton({\n children,\n ...input\n}: { readonly children: ReactNode } & Omit<\n InputHTMLAttributes,\n 'className' | 'style' | 'type' | 'children' | 'hidden'\n>): ReactElement {\n return (\n \n );\n}\n","import { BUBBLE_SURFACES, readable } from './bot-name-color.js';\nimport { space } from './ds/tokens.stylex.js';\nimport { panelMaterials, validTargetId } from './appearance-panels.js';\nimport { appearanceMaterials } from './appearance-materials.js';\nimport {\n APPEARANCE_KEY,\n APPEARANCE_PRIMARY,\n Appearance,\n type AppearanceSnapshot,\n} from './appearance.js';\nimport { NATIVE_LIGHT, NATIVE_DARK } from './appearance-native-tokens.js';\nexport const APPEARANCE_CLASS = 'bh-appearance-scope';\nexport function appearanceCss(snapshot: AppearanceSnapshot): string {\n const { config, mode } = snapshot;\n const selected = config.modes[mode];\n const primary = selected.primary ?? APPEARANCE_PRIMARY[selected.preset][mode];\n const materials = appearanceMaterials(selected, mode);\n const tokens: Record = {\n ...NATIVE_LIGHT,\n ...(mode === 'dark' ? NATIVE_DARK : {}),\n };\n for (const part of ['header', 'body'] as const) {\n const material = materials[part];\n tokens[`--bh-global-${part}-fill`] =\n `color-mix(in srgb, ${material.color} ${material.opacity}%, transparent)`;\n tokens[`--bh-global-${part}-blur`] = `${material.blur}px`;\n }\n tokens['--dsw-alias-state-business-primary'] = primary;\n tokens['--dsw-alias-link'] = readable(primary, BUBBLE_SURFACES[mode].surface, 4.6);\n tokens['--dsw-alias-state-business-secondary'] =\n `color-mix(in srgb, ${primary} 45%, transparent)`;\n tokens['--dsw-alias-state-business-tertiary'] = `color-mix(in srgb, ${primary} 14%, transparent)`;\n tokens['--dsw-specific-sidebar-nav-item-active'] =\n `color-mix(in srgb, ${primary} 14%, transparent)`;\n return `.bh-root,.bh-workspace-mount[data-workspace-enabled],.${APPEARANCE_CLASS},[data-bh-appearance-owned]{color:var(--dsw-alias-label-primary);color-scheme:${mode};${Object.entries(\n tokens,\n )\n .map(([k, v]) => `${k}:${v}`)\n .join(\n ';',\n )}}:root [data-bh-appearance-owned][data-menu-material],:root .${APPEARANCE_CLASS}[data-menu-material],:root .${APPEARANCE_CLASS} [data-menu-material]{--dsw-elevation-stroke-color:var(--dsw-alias-border-${mode === 'dark' ? 'l3' : 'l4'})}${materialCss()}${panelCss(snapshot)}`;\n}\n\nexport function mountAppearance(owner: Appearance): () => void {\n const style = document.createElement('style');\n style.dataset.plugin = '@botharness/ui';\n style.dataset.pluginCss = '@botharness/ui/appearance';\n const update = () => {\n style.textContent = appearanceCss(owner.getSnapshot());\n style.dataset.bhAppearance = owner.getSnapshot().mode;\n document.documentElement.dataset.bhAppearance = owner.getSnapshot().mode;\n };\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const onStorage = (event: StorageEvent) => {\n if (event.key === APPEARANCE_KEY || event.key === null) owner.refresh();\n };\n update();\n document.head.appendChild(style);\n const off = owner.subscribe(update);\n media.addEventListener('change', owner.refresh);\n window.addEventListener('storage', onStorage);\n return () => {\n off();\n style.remove();\n delete document.documentElement.dataset.bhAppearance;\n media.removeEventListener('change', owner.refresh);\n window.removeEventListener('storage', onStorage);\n };\n}\n\nfunction materialCss(): string {\n const scope = ':root .bh-workspace-mount[data-workspace-enabled]';\n return `\n${scope} .bh-dock-theme { --dv-group-view-background-color:transparent; --dv-tabs-and-actions-container-background-color:transparent; --dv-activegroup-visiblepanel-tab-background-color:transparent; --dv-inactivegroup-visiblepanel-tab-background-color:transparent; --dv-activegroup-hiddenpanel-tab-background-color:transparent; --dv-inactivegroup-hiddenpanel-tab-background-color:transparent; }\n${scope} .bh-root, ${scope} .bh-workspace-rail { background:transparent; }\n${scope} .dv-tabs-and-actions-container, ${scope} .bh-channel-session-header { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} [data-appearance-header] { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} .bh-channel-subpanel-body { display:flex; flex-direction:column; flex:1; min-height:0; min-width:0; overflow:auto; }\n${scope} .bh-channel-subpanel-body > section { flex:1; min-height:0; }\n${scope} .bh-memory-commit-view { display:flex; flex-direction:column; padding:0; }\n${scope} .bh-memory-commit-header { margin:0; flex-shrink:0; }\n${scope} .bh-memory-detail-body { flex:1; padding:${space.x3} ${space.x4}; }\n${scope} [data-appearance-body], ${scope} .dv-content-container { background:var(--bh-global-body-fill); backdrop-filter:blur(var(--bh-global-body-blur)); }\n`;\n}\n\nfunction panelCss({ config, mode }: AppearanceSnapshot): string {\n return Object.keys(config.modes[mode].panels ?? {})\n .filter(validTargetId)\n .map((id) => {\n const material = panelMaterials(config.modes[mode], mode, id);\n const scope = `:root .bh-workspace-mount[data-workspace-enabled] .dv-groupview:has(> .dv-tabs-and-actions-container .dv-active-tab [data-dock-header=\"${id.slice(5)}\"])`;\n return (['header', 'body'] as const)\n .map(\n (part) =>\n `${scope} > ${part === 'header' ? '.dv-tabs-and-actions-container' : '.dv-content-container'}, :root .bh-workspace-mount[data-workspace-enabled] [data-appearance-${part}=\"${id.slice(5)}\"] { background:color-mix(in srgb, ${material[part].color} ${material[part].opacity}%, transparent); backdrop-filter:blur(${material[part].blur}px); }`,\n )\n .join('');\n })\n .join('');\n}\n","import { Modal as NativeModal, Menu as NativeMenu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { ComponentProps, RefObject } from 'react';\nimport { APPEARANCE_CLASS } from './appearance-scope.js';\nexport function Modal(props: ComponentProps) {\n return (\n \n );\n}\ntype MenuProps = Omit, 'getAnchorRect'> & {\n anchorRef?: RefObject;\n};\n\nexport function Menu(props: MenuProps) {\n const { anchorRef } = props;\n const legacyAnchor =\n anchorRef === undefined\n ? {}\n : {\n getAnchorRect: () => anchorRef.current?.getBoundingClientRect() ?? null,\n };\n return (\n \n );\n}\n","import { Menu } from '../appearance-primitives.js';\nimport type { ComponentProps } from 'react';\nimport { createPortal } from 'react-dom';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { useMountedResource } from '../mounted-resource.js';\nimport { border, space } from './tokens.stylex.js';\n\nexport interface MenuPoint {\n readonly x: number;\n readonly y: number;\n}\n\nexport function pointerMenuPosition(\n point: MenuPoint,\n width: number,\n height: number,\n viewport: { width: number; height: number; top: number },\n) {\n const margin = Number.parseFloat(space.x4);\n return {\n x: Math.max(margin, Math.min(point.x, viewport.width - width - margin)),\n y: Math.max(\n Math.max(margin, viewport.top),\n Math.min(point.y, viewport.height - height - margin),\n ),\n };\n}\n\ntype PointerMenuProps = Omit<\n ComponentProps,\n 'open' | 'portal' | 'anchorRef' | 'side' | 'align' | 'className'\n> & { point: MenuPoint; container?: Element; align?: 'start' | 'end' };\n\nexport function PointerMenu({\n point,\n container = document.body,\n align = 'start',\n ...props\n}: PointerMenuProps) {\n const mount = useMountedResource(\n (node) => {\n const menu = node.querySelector('[role=\"menu\"]');\n if (!menu) return;\n const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth);\n const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth);\n const place = () => {\n const scale = node.getBoundingClientRect();\n if (!scale.width || !scale.height) return;\n const cssZoom =\n 'currentCSSZoom' in node && typeof node.currentCSSZoom === 'number'\n ? node.currentCSSZoom\n : undefined;\n const scaleX = cssZoom ?? scale.width;\n const scaleY = cssZoom ?? scale.height;\n const root = document.documentElement;\n const clearance = root.hasAttribute('data-fullscreen')\n ? 0\n : Number.parseFloat(\n getComputedStyle(root).getPropertyValue('--dsh-frame-top-clearance'),\n ) || 0;\n const margin = Number.parseFloat(space.x4);\n const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX;\n menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`;\n menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`;\n menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`;\n const box = menu.getBoundingClientRect();\n const desired = pointerMenuPosition(\n { x: align === 'end' ? point.x - box.width : point.x, y: point.y },\n box.width,\n box.height,\n {\n width: innerWidth,\n height: innerHeight,\n top: clearance,\n },\n );\n const left = Number.parseFloat(node.style.left) || 0;\n const top = Number.parseFloat(node.style.top) || 0;\n node.style.left = `${left + (desired.x - box.left) / scaleX}px`;\n node.style.top = `${top + (desired.y - box.top) / scaleY}px`;\n };\n place();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n observer?.observe(menu);\n observer?.observe(node);\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [point.x, point.y, align],\n );\n return createPortal(\n \n \n ,\n container,\n );\n}\n\nconst styles = stylex.create({\n origin: {\n position: 'fixed',\n left: 0,\n top: 0,\n width: border.hairline,\n height: border.hairline,\n zIndex: 1100,\n pointerEvents: 'none',\n },\n menu: { pointerEvents: 'auto' },\n});\n","import { PointerMenu, type MenuPoint } from './pointer-menu.js';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';\n\nimport { pillStyles } from './pill-button.js';\nimport { color, space } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n label: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n});\n\nexport interface SelectOption {\n readonly value: Value;\n readonly label: ReactNode;\n}\n\nexport interface SelectProps {\n readonly label: string;\n readonly value: Value;\n readonly options: readonly SelectOption[];\n readonly onChange: (value: Value) => void;\n readonly disabled?: boolean;\n readonly align?: 'start' | 'end';\n readonly autoFocus?: boolean;\n readonly reselect?: boolean;\n}\n\nexport function Select({\n label,\n value,\n options,\n onChange,\n disabled = false,\n align = 'end',\n autoFocus = false,\n reselect = false,\n}: SelectProps): ReactElement {\n const [open, setOpen] = useState(false);\n const [point, setPoint] = useState();\n const trigger = useRef(null);\n const active = open && !disabled;\n const mount = useMountedResource(\n (node) => {\n trigger.current = node;\n if (!active)\n return () => {\n trigger.current = null;\n };\n const place = () => {\n const rect = node.getBoundingClientRect();\n const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1;\n const next = {\n x: align === 'end' ? rect.right : rect.left,\n y: rect.bottom + Number.parseFloat(space.x2) * scale,\n };\n setPoint((previous) => (previous?.x === next.x && previous.y === next.y ? previous : next));\n };\n place();\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n resize?.observe(node);\n resize?.observe(document.documentElement);\n const observer = new MutationObserver(place);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style', 'data-fullscreen'],\n });\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n trigger.current = null;\n resize?.disconnect();\n observer.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [active, align],\n );\n const close = () => {\n const button = trigger.current;\n const menu = document.activeElement?.closest('[data-pointer-menu]');\n setOpen(false);\n setPoint(undefined);\n queueMicrotask(() => {\n const focused = document.activeElement;\n if (\n button?.isConnected &&\n !button.disabled &&\n (focused === document.body || (focused !== null && menu?.contains(focused)))\n )\n button.focus({ preventScroll: true });\n });\n };\n const current = options.find((option) => option.value === value);\n return (\n <>\n {\n if (active) event.stopPropagation();\n }}\n onClick={() => {\n if (active) close();\n else setOpen(true);\n }}\n {...stylex.props(pillStyles.pill)}\n >\n {current?.label}\n \n \n \n \n {active && point ? (\n }\n items={options.map((option) => ({ id: option.value, label: option.label }))}\n selectedId={value}\n onSelect={(id) => {\n close();\n const next = options.find((option) => option.value === id);\n if (next !== undefined && (reselect || next.value !== value)) onChange(next.value);\n }}\n onClose={close}\n />\n ) : null}\n \n );\n}\n","import { useId, type ReactElement, type ReactNode, type Ref } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, space, text } from './tokens.stylex.js';\n\nconst NARROW = '@media (max-width: 648px)';\nconst COMPACT = '@container bh-settings (max-width: 480px)';\n\nconst styles = stylex.create({\n rows: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n paddingTop: { default: space.x5, ':first-child': 0 },\n },\n sectionHead: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n paddingBottom: space.x2,\n },\n sectionTitle: {\n margin: 0,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n fontWeight: text.strong,\n },\n row: {\n display: 'flex',\n alignItems: { default: 'center', [NARROW]: 'stretch', [COMPACT]: 'stretch' },\n flexDirection: { default: 'row', [NARROW]: 'column', [COMPACT]: 'column' },\n gap: { default: space.x4, [NARROW]: space.x3, [COMPACT]: space.x3 },\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: { default: color.divider, ':last-child': 'transparent' },\n },\n text: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n title: {\n color: color.fg,\n fontSize: text.titleSize,\n lineHeight: text.titleLine,\n fontWeight: text.strong,\n overflowWrap: 'anywhere',\n },\n description: {\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n control: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: { default: 'flex-end', [NARROW]: 'flex-start', [COMPACT]: 'flex-start' },\n gap: space.x3,\n flexShrink: 0,\n minWidth: 0,\n maxWidth: { default: '60%', [NARROW]: '100%', [COMPACT]: '100%' },\n },\n value: {\n color: color.muted,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n});\n\nexport function SettingsRows({\n children,\n rootRef,\n}: {\n readonly children: ReactNode;\n readonly rootRef?: Ref | undefined;\n}): ReactElement {\n return (\n
\n {children}\n
\n );\n}\n\nexport interface SettingsSectionProps {\n readonly title?: ReactNode;\n readonly description?: ReactNode;\n readonly children: ReactNode;\n}\n\nexport function SettingsSection({\n title,\n description,\n children,\n}: SettingsSectionProps): ReactElement {\n const id = useId();\n return (\n \n {title === undefined ? null : (\n
\n

\n {title}\n

\n {description === undefined ? null : (\n
{description}
\n )}\n
\n )}\n {children}\n \n );\n}\n\nexport interface SettingsRowProps {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly control?: ReactNode;\n readonly children?: ReactNode;\n readonly rootRef?: Ref | undefined;\n readonly data?: Readonly>;\n}\n\nexport function SettingsRow({\n title,\n description,\n control,\n children,\n rootRef,\n data,\n}: SettingsRowProps): ReactElement {\n const id = useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n return (\n \n
\n
\n {title}\n
\n {description === undefined ? null : (\n
\n {description}\n
\n )}\n {children}\n
\n {control === undefined ? null :
{control}
}\n \n );\n}\n\nexport function SettingsValue({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n","import type { ComputerTranslate } from './locale.js';\n\nexport function localSetupFailure(code: string | undefined, t: ComputerTranslate): string {\n switch (code) {\n case 'permissions-required':\n return t('local.error.permissions');\n case 'disk-full':\n return t('local.error.disk');\n case 'runtime-write-refused':\n return t('local.error.write');\n case 'download-failed':\n return t('local.error.download');\n case 'verification-failed':\n return t('local.error.verify');\n case 'installation-failed':\n return t('local.error.install');\n case 'settings-open-failed':\n return t('local.error.settings');\n case 'target-changed':\n return t('local.error.target');\n case 'request-failed':\n return t('local.error.request');\n default:\n return t('local.error.setup');\n }\n}\n","import { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from './ds/note.js';\nimport { color, radius, space, text } from './ds/tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n width: '100%',\n },\n progress: {\n display: 'grid',\n gap: space.x1,\n width: '100%',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n bar: {\n width: '100%',\n height: '6px',\n accentColor: color.accent,\n },\n command: {\n margin: 0,\n width: '100%',\n boxSizing: 'border-box',\n paddingBlock: space.x2,\n paddingInline: space.x2,\n borderRadius: radius.sm,\n backgroundColor: color.hover,\n color: color.fg,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n actions: {\n display: 'flex',\n gap: space.x2,\n flexWrap: 'wrap',\n },\n});\n\nexport type MissingPackagesAccess = 'root' | 'sudo' | 'none';\n\nexport interface MissingPackagesLabels {\n readonly missing: string;\n readonly manual: string;\n readonly install: string;\n readonly copy: string;\n readonly copied: string;\n}\n\nexport function formatProgressMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function ProgressLine({\n percent,\n label,\n}: {\n readonly percent: number;\n readonly label: string;\n}): ReactElement {\n const value = Math.max(0, Math.min(100, percent));\n return (\n
\n \n {label}\n
\n );\n}\n\nexport function MissingPackages({\n command,\n access,\n installing,\n busy = false,\n onInstall,\n labels,\n children,\n}: {\n readonly command: string;\n readonly access: MissingPackagesAccess;\n readonly installing?: { readonly percent: number; readonly label: string } | undefined;\n readonly busy?: boolean;\n readonly onInstall: () => void;\n readonly labels: MissingPackagesLabels;\n readonly children?: ReactNode;\n}): ReactElement {\n const [copied, setCopied] = useState(false);\n const copy = (): void => {\n void navigator.clipboard?.writeText(command).then(() => setCopied(true));\n };\n return (\n
\n {installing === undefined ? (\n {labels.missing}\n ) : (\n \n )}\n {access === 'none' && installing === undefined ? (\n <>\n {labels.manual}\n
{command}
\n \n ) : null}\n
\n {access !== 'none' && installing === undefined ? (\n \n ) : null}\n {access === 'none' ? (\n \n ) : null}\n {children}\n
\n
\n );\n}\n","import { localSetupFailure } from './local-setup-copy.js';\nimport { useCallback, useState, type ReactElement } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { space } from '../../../client/src/client/ds/tokens.stylex.js';\nimport {\n MissingPackages,\n ProgressLine,\n formatProgressMiB,\n} from '../../../client/src/client/missing-packages.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { ComputerTranslate } from './locale.js';\nimport { useMountedResource } from './mounted-resource.js';\n\nconst styles = stylex.create({\n detail: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n },\n});\n\ninterface LocalMissing {\n packages?: string[];\n command?: string;\n install?: 'root' | 'sudo' | 'none';\n}\n\ninterface LocalStatus {\n target?: string;\n probe?: { available?: boolean; detail?: string };\n status?: {\n refusal?: string;\n permissions?: { accessibility: boolean; screenRecording: boolean };\n state?: string;\n phase?: string;\n detail?: string;\n progress?: { percent?: number; downloadedBytes?: number; totalBytes?: number };\n missing?: LocalMissing;\n };\n install?: { state?: string; packages?: string[]; percent?: number; text?: string };\n}\n\nexport function LocalComputerStatus({ t }: { t: ComputerTranslate }): ReactElement {\n const [payload, setPayload] = useState();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const refresh = useCallback(async (signal?: AbortSignal) => {\n const response = await fetch('./api/computer/status', {\n credentials: 'same-origin',\n ...(signal === undefined ? {} : { signal }),\n });\n if (!response.ok) throw new Error('request-failed');\n const next = (await response.json()) as LocalStatus;\n if (!signal?.aborted) {\n setPayload(next);\n setError((old) => (old === 'request-failed' ? undefined : old));\n }\n }, []);\n const resource = useMountedResource(() => {\n const controller = new AbortController();\n let pending = false;\n const poll = async (): Promise => {\n if (pending || controller.signal.aborted) return;\n pending = true;\n try {\n await refresh(AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]));\n } catch {\n if (!controller.signal.aborted) setError('request-failed');\n } finally {\n pending = false;\n }\n };\n void poll();\n const timer = setInterval(() => void poll(), 2000);\n return () => {\n controller.abort();\n clearInterval(timer);\n };\n }, [refresh]);\n const installing = payload?.install?.state === 'installing';\n const preparing = busy || installing || payload?.status?.phase === 'starting';\n const missing = payload?.status?.missing;\n const failureDetail =\n error ??\n (payload?.install?.state === 'failed' ? payload.install.text : undefined) ??\n (missing === undefined ? payload?.status?.detail : undefined) ??\n payload?.probe?.detail;\n const failure =\n failureDetail === undefined\n ? undefined\n : localSetupFailure(error ?? payload?.status?.refusal, t);\n const permissions =\n payload?.status?.refusal === 'permissions-required' ? payload.status.permissions : undefined;\n const post = (path: string, body: Record): void => {\n setBusy(true);\n setError(undefined);\n void fetch(path, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n })\n .then(async (response) => {\n if (!response.ok) {\n const refused = (await response.json().catch(() => ({}))) as { code?: string };\n setError(refused.code ?? 'request-failed');\n return;\n }\n await refresh();\n })\n .catch(() => setError('request-failed'))\n .finally(() => setBusy(false));\n };\n const check = (): void => post('./api/computer/start', { authorize: true, target: 'local' });\n const install = (): void => post('./api/computer/install-packages', { authorize: true });\n const granted = payload?.status?.state === 'running';\n const download = payload?.status?.progress;\n const installLabel = installing\n ? {\n percent: payload?.install?.percent ?? 0,\n label: t('local.installing', {\n packages: (payload?.install?.packages ?? []).join(', '),\n percent: String(payload?.install?.percent ?? 0),\n }),\n }\n : undefined;\n const checkButton = (\n \n {t(preparing ? 'local.checking' : 'local.check')}\n \n );\n const packages = installing ? (payload?.install?.packages ?? []) : (missing?.packages ?? []);\n const body =\n packages.length > 0 && (missing !== undefined || installing) ? (\n \n {checkButton}\n \n ) : (\n <>\n {payload?.status?.phase === 'starting' && (download?.totalBytes ?? 0) > 0 ? (\n \n ) : null}\n {permissions ? (\n <>\n {!permissions.accessibility ? (\n \n post('./api/computer/open-permission-settings', {\n authorize: true,\n permission: 'accessibility',\n })\n }\n >\n {t('local.open.accessibility')}\n \n ) : null}\n {!permissions.screenRecording ? (\n \n post('./api/computer/open-permission-settings', {\n authorize: true,\n permission: 'screen-recording',\n })\n }\n >\n {t('local.open.screen')}\n \n ) : null}\n {t('local.permissions.help')}\n \n ) : null}\n {checkButton}\n \n );\n return (\n
\n \n {t('local.chip.granted')}\n ) : preparing ? (\n {t('local.chip.checking')}\n ) : missing !== undefined ? (\n {t('local.chip.missing')}\n ) : failure === undefined ? (\n {t('local.chip.unchecked')}\n ) : (\n {t('local.chip.failed')}\n )\n }\n meta={t(granted ? 'local.granted' : 'local.description')}\n detail={\n
\n {failure === undefined ? null : {failure}}\n {body}\n
\n }\n />\n
\n
\n );\n}\n","import { useCallback, useRef, useState, useSyncExternalStore, type ReactElement } from 'react';\nimport { useMountedResource } from './mounted-resource.js';\n\nimport * as stylex from '@stylexjs/stylex';\nimport {\n IconChevronDownOutlineRegular,\n IconFolderOpenOutlineRegular,\n Input,\n Menu,\n Switch,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { InjectFace, PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';\n\nimport {\n COMPUTER_TARGET_FIELD,\n COMPUTER_AUTO_ALLOW_FIELD,\n COMPUTER_EXPORT_DIR_FIELD,\n COMPUTER_IDLE_STOP_FIELD,\n type ComputerSettings,\n} from '../settings.js';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { PillButton, PillFileButton } from '../../../client/src/client/ds/pill-button.js';\nimport { Select } from '../../../client/src/client/ds/select.js';\nimport { SettingsRow, SettingsRows } from '../../../client/src/client/ds/settings-row.js';\nimport { border, color, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport { LocalComputerStatus } from './local-computer.js';\nimport type { ComputerTarget } from '../target.js';\n\nimport { PHASE_LABEL, type ComputerTranslate } from './locale.js';\n\nexport interface ComputerSettingsSnapshot {\n target: ComputerTarget;\n exportDir: string;\n idleStopMinutes: number;\n autoAllowActions: boolean;\n status: 'loading' | 'ready' | 'unavailable';\n writable: boolean;\n}\n\nexport interface ComputerSettingsScope {\n getSnapshot(): {\n status: 'loading' | 'ready' | 'unavailable';\n value: ComputerSettings | undefined;\n writable: boolean;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise;\n}\n\nexport class ExportDirRejectedError extends Error {\n constructor() {\n super('the Host did not accept the export directory');\n this.name = 'ExportDirRejectedError';\n }\n}\n\nexport function displayExportDir(configured: string, hostDir: string | undefined): string {\n return configured !== '' ? configured : (hostDir ?? '');\n}\n\nexport class ComputerSettingsPrefs {\n private snapshot: ComputerSettingsSnapshot = {\n target: 'container',\n exportDir: '',\n idleStopMinutes: 30,\n autoAllowActions: false,\n status: 'loading',\n writable: false,\n };\n\n private readonly listeners = new Set<() => void>();\n\n private scope: ComputerSettingsScope | undefined;\n\n private detach: (() => void) | undefined;\n\n attach(scope: ComputerSettingsScope): () => void {\n this.detach?.();\n this.scope = scope;\n this.detach = scope.subscribe(() => {\n this.sync();\n });\n this.sync();\n return () => {\n this.detach?.();\n this.detach = undefined;\n this.scope = undefined;\n };\n }\n\n getSnapshot = (): ComputerSettingsSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n\n async setTarget(target: ComputerTarget): Promise {\n if (this.scope === undefined) throw new Error('Computer settings are unavailable');\n await this.scope.set(COMPUTER_TARGET_FIELD, target);\n this.sync();\n if (this.snapshot.target !== target) throw new Error('Computer Target was not saved');\n }\n\n async setExportDir(exportDir: string): Promise {\n if (this.scope === undefined) throw new ExportDirRejectedError();\n this.publish({ exportDir });\n try {\n await this.scope.set(COMPUTER_EXPORT_DIR_FIELD, exportDir);\n } catch (error) {\n this.sync();\n throw error;\n }\n if (this.snapshot.exportDir !== exportDir) throw new ExportDirRejectedError();\n }\n\n setIdleStopMinutes(idleStopMinutes: number): void {\n this.publish({ idleStopMinutes });\n void this.scope?.set(COMPUTER_IDLE_STOP_FIELD, idleStopMinutes).catch(() => undefined);\n }\n\n setAutoAllowActions(autoAllowActions: boolean): void {\n const previous = this.snapshot.autoAllowActions;\n this.publish({ autoAllowActions });\n void this.scope?.set(COMPUTER_AUTO_ALLOW_FIELD, autoAllowActions).catch(() => {\n this.publish({ autoAllowActions: previous });\n });\n }\n\n private publish(patch: Partial): void {\n this.snapshot = { ...this.snapshot, ...patch };\n for (const listener of this.listeners) listener();\n }\n\n private sync(): void {\n const scope = this.scope;\n if (scope === undefined) return;\n const next = scope.getSnapshot();\n const value = next.value;\n this.snapshot = {\n target: value?.target ?? 'container',\n exportDir: value?.exportDir ?? '',\n idleStopMinutes: value?.idleStopMinutes ?? 30,\n autoAllowActions: value?.autoAllowActions ?? false,\n status: next.status,\n writable: next.writable,\n };\n for (const listener of this.listeners) listener();\n }\n}\n\nexport interface ComputerSettingsFace {\n prefs: ComputerSettingsPrefs;\n pickerAvailable: boolean;\n pickDirectory: () => Promise;\n openDirectory: (dir: string) => Promise;\n exportArchive: (dir?: string) => Promise<{ archive: string; downloadToken?: string }>;\n downloadUrl: (downloadToken: string) => string;\n importArchive: (file: string) => Promise;\n requestUpload: (file: string) => Promise;\n sendUploadBytes: (uploadToken: string, file: File) => Promise;\n listArchives: () => Promise;\n hostExportDir: () => Promise;\n}\n\nconst IDLE_OPTIONS = [15, 30, 60, 120, 240] as const;\n\nconst styles = stylex.create({\n intro: {\n margin: 0,\n paddingTop: space.x5,\n paddingBottom: space.x2,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n manual: {\n display: 'flex',\n alignItems: 'center',\n gap: space.x4,\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: color.divider,\n },\n manualInput: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n file: {\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nconst EXPORT_ENDPOINT = './api/computer/export';\nconst IMPORT_ENDPOINT = './api/computer/import';\nconst EXPORTS_ENDPOINT = './api/computer/exports';\nconst STATUS_ENDPOINT = './api/computer/status';\nconst OPEN_DIR_ENDPOINT = './api/computer/open-dir';\nconst DOWNLOAD_ENDPOINT = './api/computer/download';\nconst UPLOAD_ENDPOINT = './api/computer/upload';\nconst UPLOAD_CONTENT_ENDPOINT = './api/computer/upload-content';\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { credentials: 'same-origin', ...init });\n if (!response.ok) throw new Error(`${String(response.status)} ${await response.text()}`);\n return (await response.json()) as T;\n}\n\nasync function postAuthorized(url: string, body: Record = {}): Promise {\n await requestJson(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, ...body }),\n });\n}\n\nexport function createComputerSettingsFace(options: {\n prefs: ComputerSettingsPrefs;\n pickDirectory?: (() => Promise) | undefined;\n createXhr?: (() => XMLHttpRequest) | undefined;\n}): ComputerSettingsFace {\n const { prefs } = options;\n return {\n prefs,\n pickerAvailable: options.pickDirectory !== undefined,\n pickDirectory: async () =>\n options.pickDirectory === undefined ? null : options.pickDirectory(),\n openDirectory: async (dir) => {\n await postAuthorized(OPEN_DIR_ENDPOINT, dir === '' ? {} : { dir });\n },\n exportArchive: async (dir) => {\n if (dir !== undefined && dir !== '') await prefs.setExportDir(dir);\n const payload = await requestJson<{ archive?: string; downloadToken?: string }>(\n EXPORT_ENDPOINT,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(\n dir === undefined || dir === '' ? { authorize: true } : { authorize: true, dir },\n ),\n },\n );\n return {\n archive: payload.archive ?? '',\n ...(payload.downloadToken === undefined ? {} : { downloadToken: payload.downloadToken }),\n };\n },\n downloadUrl: (downloadToken) =>\n `${DOWNLOAD_ENDPOINT}?token=${encodeURIComponent(downloadToken)}`,\n importArchive: async (file) => {\n await postAuthorized(IMPORT_ENDPOINT, { file });\n },\n requestUpload: async (file) => {\n const payload = await requestJson<{ uploadToken?: string }>(UPLOAD_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, file }),\n });\n if (payload.uploadToken === undefined) throw new Error('upload not accepted');\n return payload.uploadToken;\n },\n sendUploadBytes: (uploadToken, file) =>\n new Promise((resolve, reject) => {\n const createXhr = options.createXhr ?? (() => new XMLHttpRequest());\n const xhr = createXhr();\n xhr.open('POST', `${UPLOAD_CONTENT_ENDPOINT}?token=${encodeURIComponent(uploadToken)}`);\n xhr.withCredentials = true;\n xhr.setRequestHeader('content-type', 'application/octet-stream');\n xhr.onload = () => {\n if (xhr.status !== 200) {\n reject(new Error(`upload failed: HTTP ${String(xhr.status)}`));\n return;\n }\n try {\n const payload = JSON.parse(xhr.responseText) as {\n ok?: unknown;\n error?: unknown;\n };\n if (payload.ok === true) resolve();\n else\n reject(\n new Error(typeof payload.error === 'string' ? payload.error : 'upload failed'),\n );\n } catch (error: unknown) {\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n };\n xhr.onerror = () => reject(new Error('upload transport failed'));\n xhr.send(file);\n }),\n listArchives: async () => {\n const payload = await requestJson<{ files?: string[] }>(EXPORTS_ENDPOINT);\n return payload.files ?? [];\n },\n hostExportDir: async () => {\n const payload = await requestJson<{ exportDir?: string }>(STATUS_ENDPOINT);\n return payload.exportDir ?? '';\n },\n };\n}\n\nfunction Selector({\n label,\n open,\n onToggle,\n disabled,\n}: {\n readonly label: string;\n readonly open: boolean;\n readonly onToggle: () => void;\n readonly disabled?: boolean | undefined;\n}): ReactElement {\n return (\n \n {label}\n \n \n \n \n );\n}\n\nexport function ComputerSettingsRows({\n t,\n prefs,\n pickerAvailable,\n pickDirectory,\n openDirectory,\n exportArchive,\n downloadUrl,\n importArchive,\n requestUpload,\n sendUploadBytes,\n listArchives,\n hostExportDir,\n}: PropsLocale<'botharness-computer'> & InjectFace): ReactElement {\n const snapshot = useSyncExternalStore(prefs.subscribe, prefs.getSnapshot);\n const [targetError, setTargetError] = useState();\n const [targetSaving, setTargetSaving] = useState(false);\n const [idleOpen, setIdleOpen] = useState(false);\n const [importOpen, setImportOpen] = useState(false);\n const [archives, setArchives] = useState(undefined);\n const [busy, setBusy] = useState<'export' | 'import' | 'upload' | undefined>(undefined);\n const [confirming, setConfirming] = useState<'export' | 'import' | undefined>(undefined);\n const [exportTarget, setExportTarget] = useState(undefined);\n const [manualOpen, setManualOpen] = useState(false);\n const [manualPath, setManualPath] = useState('');\n const [saving, setSaving] = useState(false);\n const [dirNote, setDirNote] = useState(undefined);\n const [transferNote, setTransferNote] = useState(undefined);\n const [download, setDownload] = useState<{ archive: string; token: string } | undefined>(\n undefined,\n );\n const [uploadName, setUploadName] = useState(undefined);\n const uploadFile = useRef(null);\n const [pickerBroken, setPickerBroken] = useState(false);\n const [hostDir, setHostDir] = useState(undefined);\n const [livePhase, setLivePhase] = useState(undefined);\n const [liveElapsed, setLiveElapsed] = useState(0);\n\n const hostDirResource = useMountedResource(() => {\n if (snapshot.target === 'local') return;\n if (snapshot.status !== 'unavailable' && snapshot.exportDir !== '') return;\n let active = true;\n void hostExportDir()\n .then((dir) => {\n if (active) setHostDir(dir);\n })\n .catch(() => undefined);\n return () => {\n active = false;\n };\n }, [hostExportDir, snapshot.status, snapshot.exportDir, snapshot.target]);\n\n const busyResource = useMountedResource(() => {\n setLivePhase(undefined);\n setLiveElapsed(0);\n const startedAt = Date.now();\n const controller = new AbortController();\n let pending = false;\n const tick = async (): Promise => {\n if (controller.signal.aborted) return;\n setLiveElapsed(Math.round((Date.now() - startedAt) / 1000));\n if (pending) return;\n pending = true;\n try {\n const payload = await requestJson<{ status?: { phase?: string } }>(STATUS_ENDPOINT, {\n signal: AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]),\n });\n if (!controller.signal.aborted) setLivePhase(payload.status?.phase);\n } catch {\n } finally {\n pending = false;\n }\n };\n void tick();\n const timer = setInterval(() => void tick(), 1000);\n return () => {\n controller.abort();\n clearInterval(timer);\n };\n }, [busy]);\n\n const phaseKey = livePhase === undefined ? undefined : PHASE_LABEL[livePhase];\n\n const exportDir = displayExportDir(snapshot.exportDir, hostDir);\n const hasDir = exportDir !== '';\n const writable = snapshot.status === 'ready' && snapshot.writable;\n const canAdjust = pickerAvailable && !pickerBroken;\n\n const pickDirectoryInto = useCallback(\n (apply: (dir: string) => void) => {\n void pickDirectory()\n .then((dir) => {\n if (dir !== null) apply(dir);\n })\n .catch(() => {\n setPickerBroken(true);\n setManualOpen(false);\n setDirNote(t('rows.pickerFallback', { dir: exportDir }));\n });\n },\n [exportDir, pickDirectory, t],\n );\n\n const pickExportDir = useCallback(() => {\n pickDirectoryInto((dir) => {\n setManualPath(dir);\n setDirNote(undefined);\n void prefs.setExportDir(dir).catch((error: unknown) => setDirNote(String(error)));\n });\n }, [pickDirectoryInto, prefs]);\n\n const startExport = useCallback(() => {\n if (!canAdjust) {\n setExportTarget(undefined);\n setConfirming('export');\n return;\n }\n pickDirectory()\n .then((dir) => {\n if (dir === null) return;\n setExportTarget(dir);\n setConfirming('export');\n })\n .catch(() => {\n setPickerBroken(true);\n setManualOpen(false);\n setDirNote(t('rows.pickerFallback', { dir: exportDir }));\n setExportTarget(undefined);\n setConfirming('export');\n });\n }, [canAdjust, exportDir, pickDirectory, t]);\n\n const saveManualPath = useCallback(() => {\n const dir = manualPath.trim();\n if (dir === '') return;\n if (!dir.startsWith('/') && !/^[A-Za-z]:[\\\\/]/u.test(dir)) {\n setDirNote(t('rows.exportDir.needsAbsolute'));\n return;\n }\n setSaving(true);\n setDirNote(undefined);\n void prefs\n .setExportDir(dir)\n .then(() => {\n setManualOpen(false);\n setDirNote(t('rows.exportDir.saved', { dir }));\n })\n .catch((error: unknown) =>\n setDirNote(\n error instanceof ExportDirRejectedError\n ? t('rows.exportDir.saveRejected')\n : String(error),\n ),\n )\n .finally(() => setSaving(false));\n }, [manualPath, prefs, t]);\n\n const runExport = useCallback(() => {\n const autoOpen = !canAdjust;\n setConfirming(undefined);\n setBusy('export');\n setTransferNote(undefined);\n setDownload(undefined);\n void exportArchive(exportTarget)\n .then(({ archive, downloadToken }) => {\n setTransferNote(archive === '' ? t('rows.exportedDone') : t('rows.exported', { archive }));\n if (archive !== '' && downloadToken !== undefined) {\n setDownload({ archive, token: downloadToken });\n }\n if (autoOpen) void openDirectory(exportDir).catch(() => undefined);\n })\n .catch((error: unknown) => setTransferNote(String(error)))\n .finally(() => setBusy(undefined));\n }, [canAdjust, exportArchive, exportDir, exportTarget, openDirectory, t]);\n\n const runImport = useCallback(\n (file: string) => {\n setImportOpen(false);\n setConfirming(undefined);\n setBusy('import');\n setTransferNote(undefined);\n void importArchive(file)\n .then(() => setTransferNote(t('rows.imported', { file })))\n .catch((error: unknown) => setTransferNote(String(error)))\n .finally(() => setBusy(undefined));\n },\n [importArchive, t],\n );\n\n const takeUploadFile = useCallback((file: File | null) => {\n if (file === null) return;\n uploadFile.current = file;\n setUploadName(file.name);\n setTransferNote(undefined);\n }, []);\n\n const runUpload = useCallback(() => {\n const file = uploadFile.current;\n const name = uploadName;\n if (file === null || name === undefined) return;\n setConfirming(undefined);\n setBusy('upload');\n setTransferNote(undefined);\n void requestUpload(name)\n .then((token) => sendUploadBytes(token, file))\n .then(() => importArchive(name))\n .then(() => {\n setTransferNote(t('rows.imported', { file: name }));\n setUploadName(undefined);\n uploadFile.current = null;\n })\n .catch((error: unknown) => setTransferNote(String(error)))\n .finally(() => setBusy(undefined));\n }, [uploadName, requestUpload, sendUploadBytes, importArchive, t]);\n\n const openImport = useCallback(() => {\n if (importOpen) {\n setImportOpen(false);\n return;\n }\n void listArchives()\n .then((files) => {\n setArchives(files);\n if (files.length === 0) {\n setImportOpen(false);\n setTransferNote(t('rows.noArchives'));\n } else {\n setImportOpen(true);\n }\n })\n .catch((error: unknown) => setTransferNote(String(error)));\n }, [importOpen, listArchives, t]);\n\n const openDir = useCallback(() => {\n void openDirectory(exportDir).catch((error: unknown) => setDirNote(String(error)));\n }, [exportDir, openDirectory]);\n\n const selectedFile = uploadName ?? (confirming === 'import' ? archives?.[0] : undefined);\n\n return (\n \n \n );\n}\n","export type ClientTelemetrySurface = 'desktop_app' | 'browser';\n\nexport interface TelemetryRpc {\n call(path: string, method: string, options?: { args?: unknown }): Promise;\n}\n\nexport function telemetrySurface(): ClientTelemetrySurface {\n return typeof globalThis === 'object' && 'dshDesktop' in globalThis ? 'desktop_app' : 'browser';\n}\n\nexport function recordViewerOpen(\n rpc: TelemetryRpc | undefined,\n panel: 'browser' | 'computer',\n): void {\n void rpc\n ?.call('/api', 'botharness/telemetryEvent', {\n args: {\n event: 'viewer:subpanel_open',\n properties: { panel, surface: telemetrySurface() },\n },\n })\n .catch(() => {});\n}\n","/**\n * Vendored Access Power glyph from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the lucide `dist/esm/icons/power.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport type { ReactElement } from 'react';\nexport function AccessPowerIcon(): ReactElement {\n return (\n \n \n \n \n );\n}\n","export const STYLEX_CSS: string = '@bh-stylex-css';\n","import { PanelEmptyState } from '../../../client/src/client/ds/empty-state.js';\nimport { border, color, radius, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport {\n RemoteViewer,\n type ViewerLifecycleEvent,\n} from '../../../client/src/client/remote-viewer/index.js';\nimport { BH } from '../../../client/src/client/remote-viewer/tokens.js';\nimport {\n useCallback,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ComponentType,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { isExitReport } from './viewer-state.js';\nimport { reportViewerEvent, viewerEventText } from './viewer-events.js';\nimport {\n LOCALE_NS,\n PHASE_LABEL,\n en,\n zh,\n type ComputerKey,\n type ComputerTranslate,\n} from './locale.js';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Tooltip } from '../../../client/src/client/ds/tooltip.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { Context as ClientContext } from '@deepseek-ai/cordis';\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client';\n\nimport { COMPUTER_SETTINGS_NAMESPACE, type ComputerSettings } from '../settings.js';\nimport type { ComputerStorage } from '../provider.js';\nimport {\n ComputerSettingsPrefs,\n ComputerSettingsRows,\n createComputerSettingsFace,\n type ComputerSettingsScope,\n} from './settings-rows.js';\nimport { LocalComputerStatus } from './local-computer.js';\nimport { useMountedResource } from './mounted-resource.js';\nimport { recordViewerOpen } from '../../../client/src/client/telemetry-surface.js';\n\nimport { AccessPowerIcon } from './access-power-icon.js';\nimport { STYLEX_CSS } from '../../../client/src/client/ds/stylex-css.js';\n\nconst ACCESS_STYLE = `\n.bh-computer-access-control { position: relative; display: flex; align-items: center; }\n.bh-computer-access-power {\n display: flex; align-items: center; justify-content: center; width: 28px; height: 28px;\n padding: 0; border: 0; border-radius: ${radius.md}; background: transparent;\n color: ${color.muted}; cursor: pointer;\n}\n.bh-computer-access-power:hover { background: ${color.hover}; }\n.bh-computer-access-power[aria-pressed='true'] { color: ${color.accent}; background: ${color.hover}; }\n.bh-computer-access-power:focus-visible { outline: ${border.focus} solid ${color.accent}; outline-offset: 2px; }\n.bh-computer-access-power:disabled { opacity: 0.5; cursor: default; }\n.bh-computer-access-power.bh-access-failed { color: ${color.danger}; }\n.bh-computer-access-error { order: -1; padding: 0 ${space.x2}; color: ${color.danger}; font-size: ${text.metaSize}; line-height: ${text.metaLine}; white-space: nowrap; }\n\n`;\n\nexport const name = 'botharness-computer-client';\n\nexport const inject = ['slots', 'channelSidebar', 'connection', 'locale'];\n\nconst STATUS_ENDPOINT = './api/computer/status';\nconst START_ENDPOINT = './api/computer/start';\nconst STOP_ENDPOINT = './api/computer/stop';\nconst VIEWER_SRC = './botharness-computer/viewer/';\nconst APPROVED_KEY = 'botharness-computer-start-approved';\nconst ENTRY_ID = 'botharness-computer';\n\ntype ComputerState = 'absent' | 'stopped' | 'running' | 'failed';\ntype ComputerPhase =\n | 'idle'\n | 'pulling'\n | 'starting'\n | 'running'\n | 'stopping'\n | 'exporting'\n | 'importing'\n | 'failed';\n\ninterface ComputerProgress {\n readonly percent?: number;\n readonly text?: string;\n readonly updatedAt?: number;\n}\n\ninterface ComputerStatusPayload {\n readonly target?: 'local' | 'container';\n resolution?: string;\n readonly provider: string | null;\n readonly probe: { readonly available: boolean; readonly detail?: string };\n readonly exportDir?: string;\n readonly status: {\n readonly state: ComputerState;\n readonly phase?: ComputerPhase;\n readonly detail?: string;\n readonly progress?: ComputerProgress;\n readonly storage?: ComputerStorage;\n };\n}\n\ninterface ChannelSidebarEntryProps {\n readonly scope: 'channel' | 'personabot';\n readonly channelId: string;\n readonly botSlug: string | undefined;\n readonly actions: unknown;\n readonly setExpanded?: (expanded: boolean) => void;\n readonly setExpandable?: (expandable: boolean) => void;\n}\n\ninterface ConnectionRpcLike {\n call(\n channel: string,\n endpoint: string,\n payload: unknown,\n signal?: AbortSignal,\n ): Promise<\n | { readonly ok: true; readonly value: unknown }\n | { readonly ok: false; readonly error: { readonly message?: string } }\n >;\n}\n\nlet connectionRpc: ConnectionRpcLike | undefined;\n\ninterface ChannelSidebarRegistryLike {\n register(entry: {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly order?: number;\n readonly scope: 'channel' | 'personabot';\n readonly component: ComponentType;\n readonly headerAction?: ComponentType;\n readonly badge?: ComponentType;\n readonly tab?: string;\n }): () => void;\n}\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { credentials: 'same-origin', ...init });\n if (!response.ok) throw new Error(`${String(response.status)} ${await response.text()}`);\n return (await response.json()) as T;\n}\n\nconst SETUP_GUIDANCE_KEY: ComputerKey = 'entry.setup';\n\nconst SHARED_NOTE_KEY: ComputerKey = 'entry.shared';\n\nconst AUTHORIZATION_POINTS: readonly ComputerKey[] = [\n 'entry.authorize.probe',\n 'entry.authorize.volume',\n 'entry.authorize.pull',\n 'entry.authorize.bind',\n];\n\nconst noteStyle: CSSProperties = { opacity: 0.7, fontSize: 12, whiteSpace: 'pre-wrap' };\nconst buttonStyle: CSSProperties = {\n padding: '4px 10px',\n borderRadius: 6,\n border: `1px solid ${BH.borderL3}`,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n fontSize: 12,\n};\nconst terminalStyle: CSSProperties = {\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n fontSize: 11,\n opacity: 0.7,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n};\n\nconst DESIGN_WIDTH = 1280;\nconst DESIGN_HEIGHT = 800;\n\nfunction designOf(resolution: string | undefined): { width: number; height: number } {\n const match = /^(\\d{2,5})x(\\d{2,5})$/u.exec(resolution ?? '');\n if (match === null) return { width: DESIGN_WIDTH, height: DESIGN_HEIGHT };\n return { width: Number(match[1]), height: Number(match[2]) };\n}\n\nexport interface RecentLogRow {\n readonly id: number;\n readonly ts: number;\n readonly plugin: string;\n readonly owner: string;\n readonly kind: string;\n readonly detail: string;\n}\n\nexport function RecentLogsList({\n entries,\n}: {\n readonly entries: readonly RecentLogRow[];\n}): ReactElement {\n return (\n
\n {entries.map((entry) => (\n
\n {new Date(entry.ts).toLocaleTimeString()} [{entry.kind}] {entry.detail}\n
\n ))}\n
\n );\n}\n\nexport function RecentLogs({ t }: { readonly t: ComputerTranslate }): ReactElement {\n const [open, setOpen] = useState(false);\n const [entries, setEntries] = useState(undefined);\n const [failed, setFailed] = useState(false);\n const loadResource = useMountedResource(() => {\n const controller = new AbortController();\n requestJson<{ entries: RecentLogRow[] }>('./api/computer/logs?limit=10', {\n signal: controller.signal,\n })\n .then((result) => {\n if (!controller.signal.aborted) setEntries(result.entries);\n })\n .catch(() => {\n if (!controller.signal.aborted) setFailed(true);\n });\n return () => controller.abort();\n }, []);\n return (\n
\n {open && entries === undefined && !failed ?
\n );\n}\n\nexport {\n ScreenIndicator,\n StreamOverlay,\n ViewerTitleBar,\n} from '../../../client/src/client/remote-viewer/index.js';\n\nfunction RunningCard({\n t,\n botSlug,\n busy,\n stopping,\n resolution,\n onStop,\n}: {\n readonly t: ComputerTranslate;\n readonly botSlug: string | undefined;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly resolution?: string;\n readonly onStop: () => void;\n}): ReactElement {\n const onEvent = useCallback((event: ViewerLifecycleEvent) => {\n void reportViewerEvent(undefined, viewerEventText(event));\n }, []);\n return (\n }\n onEvent={onEvent}\n />\n );\n}\n\nexport interface ComputerEntryViewProps {\n readonly t: ComputerTranslate;\n readonly state: ComputerState;\n readonly phase?: ComputerPhase;\n readonly detail?: string;\n readonly progress?: ComputerProgress;\n readonly runtimeAvailable: boolean;\n readonly confirming: boolean;\n readonly busy: boolean;\n readonly elapsed: number;\n readonly nowTs: number;\n readonly error?: string;\n readonly botSlug?: string;\n readonly storage?: ComputerStorage;\n readonly resolution?: string;\n readonly onStart: () => void;\n readonly onConfirmStart: () => void;\n readonly onStop: () => void;\n readonly onApprove: (remember: boolean) => void;\n readonly onCancel: () => void;\n}\n\nexport function ComputerEntryView(props: ComputerEntryViewProps): ReactElement {\n const {\n t,\n state,\n phase,\n detail,\n progress,\n runtimeAvailable,\n confirming,\n busy,\n elapsed,\n nowTs,\n error,\n botSlug,\n storage,\n resolution,\n onStart,\n onConfirmStart,\n onStop,\n onApprove,\n onCancel,\n } = props;\n\n const title = t('rows.target.container');\n const card = (\n chip: ReactElement,\n rest: { meta?: ReactNode; detail?: ReactNode },\n ): ReactElement => (\n \n \n \n );\n\n if (!runtimeAvailable) {\n return card({t('entry.chip.setup')}, {\n detail:
{t(SETUP_GUIDANCE_KEY)}
,\n });\n }\n\n if (confirming) {\n return card({t('entry.chip.authorize')}, {\n detail: (\n
\n
{t('entry.authorizeIntro')}
\n
    \n {AUTHORIZATION_POINTS.map((point) => (\n
  • {t(point)}
  • \n ))}\n
\n {storage === undefined ? null : (\n
\n {t('entry.authorize.storage', { target: storage.target })}\n {storage.ignoredReason === undefined ? '' : `(${storage.ignoredReason})`}\n
\n )}\n {storage?.migrationHint === undefined ? null : (\n
{storage.migrationHint}
\n )}\n {storage?.kind === 'bind' ? (\n
{t('entry.authorize.storageBindRisk')}
\n ) : null}\n \n
\n \n \n
\n
\n ),\n });\n }\n\n const inProgress =\n phase === 'pulling' ||\n phase === 'starting' ||\n phase === 'stopping' ||\n phase === 'exporting' ||\n phase === 'importing';\n\n if (state === 'running') {\n return (\n
\n {card({t('entry.chip.running')}, {\n meta: t('entry.screen.title', { name: botSlug ?? 'PersonaBot' }),\n })}\n \n
\n );\n }\n\n if (inProgress) {\n return card({t(PHASE_LABEL[phase] ?? 'entry.phase.working')}, {\n meta: (\n \n {t('entry.elapsed', { seconds: elapsed })}\n {progress?.updatedAt === undefined\n ? ''\n : ` · ${t('entry.updated', {\n seconds: Math.max(0, Math.round((nowTs - progress.updatedAt) / 1000)),\n })}`}\n \n ),\n detail: (\n
\n \n \n
\n
{progress?.text ?? detail ?? t('entry.wait')}
\n \n ),\n });\n }\n\n const failed = error !== undefined || state === 'failed';\n return card(\n failed ? (\n {t('entry.chip.failed')}\n ) : (\n {t('entry.chip.stopped')}\n ),\n {\n meta: (\n \n {error ?? (isExitReport(detail) ? undefined : detail) ?? t(SHARED_NOTE_KEY)}\n \n ),\n detail: (\n \n ),\n },\n );\n}\n\nexport function createComputerEntry(\n t: ComputerTranslate,\n): (props: ChannelSidebarEntryProps) => ReactElement {\n return function ComputerEntryWithLocale(props: ChannelSidebarEntryProps): ReactElement {\n const { computerAccess } = useBotInfo(props.botSlug);\n if (computerAccess === false)\n return {t('entry.access.description')};\n return ;\n };\n}\n\nexport function createComputerBadge(\n t: ComputerTranslate,\n): (props: ChannelSidebarEntryProps) => ReactElement | null {\n return function ComputerBadge({ botSlug }: ChannelSidebarEntryProps): ReactElement | null {\n const { computerAccess } = useBotInfo(botSlug);\n if (computerAccess !== true) return null;\n return (\n \n );\n };\n}\n\ninterface BotInfo {\n readonly displayName: string | undefined;\n readonly computerAccess: boolean | undefined;\n}\n\ninterface ReadableStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): T;\n}\n\nconst botInfoStores = new Map<\n string,\n ReadableStore & { setAccess(enabled: boolean): void }\n>();\n\nfunction botInfoStore(\n botSlug: string | undefined,\n): ReadableStore & { setAccess(enabled: boolean): void } {\n const key = botSlug ?? '';\n const existing = botInfoStores.get(key);\n if (existing !== undefined) return existing;\n const created = createBotInfoStore(botSlug);\n botInfoStores.set(key, created);\n return created;\n}\n\nfunction createBotInfoStore(\n botSlug: string | undefined,\n): ReadableStore & { setAccess(enabled: boolean): void } {\n let info: BotInfo = { displayName: undefined, computerAccess: undefined };\n const listeners = new Set<() => void>();\n let loadedAt = Number.NEGATIVE_INFINITY;\n const load = (): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined) return;\n void rpc\n .call('/api', 'botharness/list', { args: {} })\n .then((result) => {\n if (!result.ok) return;\n const value = result.value as {\n bots?: readonly { slug?: unknown; displayName?: unknown; computerAccess?: unknown }[];\n };\n const match = (value.bots ?? []).find((bot) => bot.slug === botSlug);\n if (match === undefined) return;\n info = {\n displayName:\n typeof match.displayName === 'string' && match.displayName.length > 0\n ? match.displayName\n : undefined,\n computerAccess: match.computerAccess === true,\n };\n for (const listener of listeners) listener();\n })\n .catch(() => undefined);\n };\n return {\n setAccess(enabled) {\n info = { ...info, computerAccess: enabled };\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n if (listeners.size === 0 && Date.now() - loadedAt > 5000) {\n loadedAt = Date.now();\n load();\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => info,\n };\n}\n\nfunction useBotInfo(botSlug: string | undefined): BotInfo {\n const store = botInfoStore(botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n return { displayName: info.displayName ?? botSlug, computerAccess: info.computerAccess };\n}\n\nfunction ComputerHeaderAction({\n botSlug,\n t,\n setExpandable,\n setExpanded,\n}: ChannelSidebarEntryProps & { t: ComputerTranslate }): ReactElement {\n const store = botInfoStore(botSlug);\n const [busy, setBusy] = useState(false);\n const inFlight = useRef(false);\n const [error, setError] = useState(false);\n const subscribe = (listener: () => void): (() => void) => {\n const sync = (): void => {\n setExpandable?.(store.getSnapshot().computerAccess !== undefined);\n };\n const unsubscribe = store.subscribe(() => {\n sync();\n listener();\n });\n sync();\n return unsubscribe;\n };\n const info = useSyncExternalStore(subscribe, store.getSnapshot);\n const accessOn = info.computerAccess === true;\n\n const onToggle = (next: boolean): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n void rpc\n .call('/api', 'botharness/computerAccessSet', { args: { slug: botSlug, enabled: next } })\n .then((result) => {\n if (!result.ok) {\n setError(true);\n return;\n }\n const value = result.value as { bot?: { computerAccess?: unknown } };\n const applied = value.bot?.computerAccess === true;\n store.setAccess(applied);\n setExpanded?.(applied);\n })\n .catch(() => {\n setError(true);\n })\n .finally(() => {\n inFlight.current = false;\n setBusy(false);\n });\n };\n\n const label = t(accessOn ? 'entry.access.disable' : 'entry.access.enable');\n return (\n \n \n onToggle(!accessOn)}\n >\n \n \n \n {error ? (\n \n {t('entry.access.failureHint')}\n \n ) : null}\n \n );\n}\n\nexport function createComputerHeader(\n t: ComputerTranslate,\n): (props: ChannelSidebarEntryProps) => ReactElement {\n return function ComputerHeaderWithLocale(props: ChannelSidebarEntryProps): ReactElement {\n return ;\n };\n}\n\nfunction ComputerEntry({\n botSlug,\n t,\n}: ChannelSidebarEntryProps & { t: ComputerTranslate }): ReactElement {\n const { displayName } = useBotInfo(botSlug);\n const [payload, setPayload] = useState();\n const [error, setError] = useState();\n const [busy, setBusy] = useState(false);\n const [confirming, setConfirming] = useState(false);\n const [approved, setApproved] = useState(\n () => globalThis.sessionStorage?.getItem(APPROVED_KEY) === '1',\n );\n const [elapsed, setElapsed] = useState(0);\n const [nowTs, setNowTs] = useState(() => Date.now());\n const refresh = useCallback(async (signal?: AbortSignal) => {\n try {\n const next = await requestJson(\n STATUS_ENDPOINT,\n signal === undefined ? undefined : { signal },\n );\n if (signal?.aborted) return;\n setPayload(next);\n setError(undefined);\n } catch (cause) {\n if (!signal?.aborted) setError(String(cause));\n }\n }, []);\n\n const statusResource = useMountedResource(() => {\n recordViewerOpen(connectionRpc, 'computer');\n const controller = new AbortController();\n let pending = false;\n const poll = async (): Promise => {\n if (pending || controller.signal.aborted) return;\n pending = true;\n try {\n await refresh(AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]));\n } finally {\n pending = false;\n }\n };\n void poll();\n const timer = setInterval(() => void poll(), 3000);\n return () => {\n controller.abort();\n clearInterval(timer);\n };\n }, [refresh]);\n\n const phase = payload?.status.phase;\n const inProgress =\n phase === 'pulling' ||\n phase === 'starting' ||\n phase === 'stopping' ||\n phase === 'exporting' ||\n phase === 'importing';\n\n const progressResource = useMountedResource(() => {\n const startedAt = Date.now();\n setElapsed(0);\n const timer = setInterval(() => {\n setNowTs(Date.now());\n setElapsed(Math.round((Date.now() - startedAt) / 1000));\n }, 1000);\n return () => clearInterval(timer);\n }, [inProgress]);\n\n const act = useCallback(\n async (endpoint: string) => {\n setBusy(true);\n try {\n await requestJson(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n authorize: true,\n ...(endpoint === START_ENDPOINT && typeof navigator !== 'undefined'\n ? { language: navigator.language }\n : {}),\n }),\n });\n await refresh();\n } catch (cause) {\n setError(String(cause));\n } finally {\n setBusy(false);\n }\n },\n [refresh],\n );\n\n const onStart = useCallback(() => {\n if (!approved) {\n setConfirming(true);\n return;\n }\n void act(START_ENDPOINT);\n }, [act, approved]);\n\n const onConfirmStart = useCallback(() => {\n setConfirming(false);\n void act(START_ENDPOINT);\n }, [act]);\n\n const onApprove = useCallback((remember: boolean) => {\n if (remember) {\n globalThis.sessionStorage?.setItem(APPROVED_KEY, '1');\n setApproved(true);\n }\n }, []);\n\n return (\n
\n {inProgress ?
\n );\n}\n\nexport function apply(ctx: ClientContext): void {\n botInfoStores.clear();\n const settingsPrefs = new ComputerSettingsPrefs();\n ctx.inject(['configForms'], (settingsCtx) => {\n const scope = settingsCtx.configForms.get(\n COMPUTER_SETTINGS_NAMESPACE,\n ) as unknown as ComputerSettingsScope;\n const release = settingsPrefs.attach(scope);\n return () => {\n release();\n };\n });\n ctx.inject(['uiWorkspace', 'slots'], (workspaceCtx) => {\n const workspace = (\n workspaceCtx as unknown as { uiWorkspace?: { pickDirectory?: () => Promise } }\n ).uiWorkspace;\n const face = createComputerSettingsFace({\n prefs: settingsPrefs,\n pickDirectory: workspace?.pickDirectory?.bind(workspace),\n });\n workspaceCtx.slots.inject('botharness.settings.section', () =>\n workspaceCtx.slots.register(\n {\n name: 'botharness.settings.section',\n id: 'computer',\n order: 30,\n label: () => t('section.title'),\n locale: LOCALE_NS,\n inject: () => face,\n },\n ComputerSettingsRows,\n ),\n );\n });\n ctx.effect(() => {\n if (typeof document === 'undefined') return () => {};\n const style = document.createElement('style');\n style.setAttribute('data-botharness-computer', 'client');\n style.dataset.plugin = '@botharness/computer';\n style.dataset.pluginCss = '@botharness/computer/client.css';\n style.textContent = ACCESS_STYLE + STYLEX_CSS;\n document.head.appendChild(style);\n return () => {\n style.remove();\n };\n }, 'botharness-computer: client styles');\n const t = ctx.locale.bind(LOCALE_NS);\n ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'botharness-computer: dictionaries');\n ctx.inject(['channelSidebar', 'connection'], (sidebarCtx) => {\n const registry = (sidebarCtx as unknown as { channelSidebar?: ChannelSidebarRegistryLike })\n .channelSidebar;\n connectionRpc = (sidebarCtx as unknown as { connection?: { rpc?: ConnectionRpcLike } })\n .connection?.rpc;\n if (registry === undefined) return;\n ctx.effect(\n () =>\n registry.register({\n id: ENTRY_ID,\n icon: 'monitor',\n label: t('entry.label'),\n order: 40,\n scope: 'personabot',\n component: createComputerEntry(t),\n headerAction: createComputerHeader(t),\n badge: createComputerBadge(t),\n tab: 'screen',\n }),\n 'botharness-computer: channel sidebar entry',\n );\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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AE,OAAO;IAAM,QAAQ;IAAM,GAAG;IAAK,GAAG;IAAM,IAAI;IAAK,IAAI;GAAI,CAAC,GACzE,CAAC,QAAQ,EAAE,GAAG,2BAA2B,CAAC,CAC5C;GACA,MAAM,CACJ,CACE,QACA,EACE,GAAG,qFACL,CACF,CACF;GACA,aAAa,CACX,CAAC,QAAQ;IAAE,OAAO;IAAM,QAAQ;IAAM,GAAG;IAAK,GAAG;IAAM,IAAI;IAAK,IAAI;GAAI,CAAC,GACzE,CAAC,QAAQ,EAAE,GAAG,0BAA0B,CAAC,CAC3C;GACA,KAAK,CACH,CACE,QACA,EACE,GAAG,wGACL,CACF,GACA,CAAC,UAAU;IAAE,IAAI;IAAM,IAAI;IAAM,GAAG;GAAI,CAAC,CAC3C;GACA,WAAW;IACT,CACE,QACA,EACE,GAAG,iGACL,CACF;IACA,CAAC,QAAQ,EAAE,GAAG,uCAAuC,CAAC;IACtD,CACE,QACA,EACE,GAAG,+FACL,CACF;IACA,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC;GAC9B;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4DACL,CACF;IACA,CACE,QACA,EACE,GAAG,+EACL,CACF;IACA,CACE,QACA,EACE,GAAG,0DACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,wBACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,mBAAmB,CACjB,CACE,QACA,EACE,GAAG,sHACL,CACF,GACA,CACE,QACA,EACE,GAAG,yGACL,CACF,CACF;GACA,OAAO,CACL,CACE,YACA,EACE,QAAQ,oCACV,CACF,GACA,CACE,QACA,EACE,GAAG,6GACL,CACF,CACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,6GACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4CACL,CACF;IACA,CACE,QACA,EACE,GAAG,8BACL,CACF;IACA,CACE,QACA,EACE,GAAG,6BACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,UAAU,CACR,CACE,QACA,EACE,GAAG,0UACL,CACF,GACA,CACE,UACA;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;GACL,CACF,CACF;GACA,SAAS;IACP,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;GACF;GACA,OAAO;IACL,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,QACA,EACE,GAAG,kDACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;GACF;GACA,eAAe,CACb,CACE,QACA;IACE,OAAO;IACP,QAAQ;IACR,GAAG;IACH,GAAG;IACH,IAAI;GACN,CACF,GACA,CACE,QACA,EACE,GAAG,WACL,CACF,CACF;GACA,mBAAmB;IACjB,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA,EACE,GAAG,UACL,CACF;IACA,CACE,QACA,EACE,GAAG,UACL,CACF;GACF;GACA,iBAAiB;IACf,CAAC,UAAU;KAAE,IAAI;KAAK,IAAI;KAAM,GAAG;IAAI,CAA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"} \ No newline at end of file +{"version":3,"file":"client.js","names":["createElement","stylex","space","x1","x2","x3","x4","x5","x6","text","metaSize","metaLine","bodySize","bodyLine","titleSize","titleLine","regular","strong","radius","xs","sm","md","lg","panel","round","border","hairline","focus","size","inlineIcon","icon","row","nav","dialog","small","bodyMax","medium","wide","actionColor","secondary","hover","danger","dangerLabel","color","fg","muted","subtle","divider","borderStrong","selected","navSelected","accent","accentText","onAccent","onDanger","dangerEdge","dangerSoft","warning","warningEdge","warningSoft","success","surface","elevated","base","modal","well","accentTint","ReactElement","ReactNode","stylex","ChannelSidebarIcon","border","color","radius","size","space","text","EmptyState","title","description","action","status","undefined","PanelEmptyState","icon","children","useMountedResource","useRef","useCallback","useMountedResource","Button","Pill","IconFullscreenOutlineRegular","useState","StateDot","useRef","useCallback","Fragment","createContext","useContext","PrimitiveTooltip","useRef","useCallback","ReactElement","ReactNode","stylex","color","space","text","styles","note","kogj98","kGuDYH","kLWn49","kHjlTd","$$css","inset","k8WAf4","kg3NbH","muted","kMwMTN","subtle","danger","success","warning","NoteTone","Note","tone","children","props","ButtonHTMLAttributes","InputHTMLAttributes","ReactElement","ReactNode","stylex","actionColor","border","color","radius","size","space","text","pillStyles","pill","k1xSpc","kGNEyG","kOIVth","ks0D6T","kZKoxP","kg3NbH","kMzoRj","kaIpWk","kWkggS","kMwMTN","kMv6JI","kGuDYH","kLWn49","khDVqt","kkrTdU","kSiTet","kI3sdo","kInvED","$$css","PillButton","children","rest","Omit","HTMLButtonElement","PillFileButton","input","HTMLInputElement","Menu","NativeMenu","Menu","ComponentProps","createPortal","stylex","useMountedResource","border","space","MenuPoint","x","y","pointerMenuPosition","point","width","height","viewport","top","margin","Number","parseFloat","x4","Math","max","min","PointerMenuProps","Omit","container","Element","align","PointerMenu","document","body","props","mount","HTMLSpanElement","node","menu","querySelector","HTMLElement","originalMaxWidth","getComputedStyle","maxWidth","originalMinWidth","minWidth","place","scale","getBoundingClientRect","cssZoom","currentCSSZoom","undefined","scaleX","scaleY","root","documentElement","clearance","hasAttribute","getPropertyValue","availableWidth","innerWidth","style","Infinity","maxHeight","innerHeight","box","desired","left","observer","ResizeObserver","observe","window","addEventListener","disconnect","removeEventListener","className","PointerMenu","MenuPoint","useMountedResource","useRef","useState","ReactElement","ReactNode","stylex","IconChevronDownOutlineRegular","pillStyles","color","space","SelectOption","value","Value","label","SelectProps","options","onChange","disabled","align","autoFocus","reselect","Select","open","setOpen","point","setPoint","trigger","HTMLButtonElement","active","mount","node","current","place","rect","getBoundingClientRect","scale","offsetHeight","height","next","x","right","left","y","bottom","Number","parseFloat","x2","previous","resize","ResizeObserver","undefined","observe","document","documentElement","observer","MutationObserver","attributes","attributeFilter","window","addEventListener","disconnect","removeEventListener","close","button","menu","activeElement","closest","queueMicrotask","focused","isConnected","body","contains","focus","preventScroll","find","option","event","stopPropagation","props","pill","map","id","useId","ReactElement","ReactNode","Ref","stylex","border","color","space","text","NARROW","COMPACT","SettingsRows","children","rootRef","HTMLDivElement","SettingsSectionProps","title","description","SettingsSection","id","undefined","SettingsRowProps","control","data","Readonly","Record","SettingsRow","titleId","descriptionId","SettingsValue","useState","ReactElement","ReactNode","stylex","Button","Note","color","radius","space","text","MissingPackagesAccess","MissingPackagesLabels","missing","manual","install","copy","copied","formatProgressMiB","bytes","toFixed","ProgressLine","percent","label","value","Math","max","min","MissingPackages","command","access","installing","busy","onInstall","labels","children","setCopied","navigator","clipboard","writeText","then","undefined","localSetupFailure","useCallback","useState","ReactElement","stylex","Button","Tag","Note","space","MissingPackages","ProgressLine","formatProgressMiB","SidebarCardList","SidebarCardRow","ComputerTranslate","useMountedResource","LocalMissing","packages","command","install","LocalStatus","target","probe","available","detail","status","refusal","permissions","accessibility","screenRecording","state","phase","progress","percent","downloadedBytes","totalBytes","missing","text","LocalComputerStatus","t","payload","setPayload","busy","setBusy","error","setError","refresh","signal","AbortSignal","response","fetch","credentials","undefined","ok","Error","next","json","aborted","old","resource","HTMLDivElement","controller","AbortController","pending","poll","Promise","any","timeout","timer","setInterval","abort","clearInterval","installing","preparing","failureDetail","failure","post","path","body","Record","method","headers","JSON","stringify","then","refused","catch","code","finally","check","authorize","granted","download","installLabel","label","join","String","checkButton","length","manual","copy","copied","downloaded","total","permission","useCallback","useRef","useState","useSyncExternalStore","ReactElement","useMountedResource","stylex","IconChevronDownOutlineRegular","IconFolderOpenOutlineRegular","Input","Menu","Switch","InjectFace","PropsLocale","COMPUTER_TARGET_FIELD","COMPUTER_AUTO_ALLOW_FIELD","COMPUTER_EXPORT_DIR_FIELD","COMPUTER_IDLE_STOP_FIELD","ComputerSettings","Note","PillButton","PillFileButton","Select","SettingsRow","SettingsRows","border","color","space","text","LocalComputerStatus","ComputerTarget","PHASE_LABEL","ComputerTranslate","ComputerSettingsSnapshot","target","exportDir","idleStopMinutes","autoAllowActions","status","writable","ComputerSettingsScope","getSnapshot","value","subscribe","listener","set","field","Promise","ExportDirRejectedError","Error","constructor","name","displayExportDir","configured","hostDir","ComputerSettingsPrefs","snapshot","listeners","Set","scope","detach","attach","sync","undefined","add","delete","setTarget","setExportDir","publish","error","setIdleStopMinutes","catch","setAutoAllowActions","previous","patch","Partial","next","ComputerSettingsFace","prefs","pickerAvailable","pickDirectory","openDirectory","dir","exportArchive","archive","downloadToken","downloadUrl","importArchive","file","requestUpload","sendUploadBytes","uploadToken","File","listArchives","hostExportDir","IDLE_OPTIONS","const","EXPORT_ENDPOINT","IMPORT_ENDPOINT","EXPORTS_ENDPOINT","STATUS_ENDPOINT","OPEN_DIR_ENDPOINT","DOWNLOAD_ENDPOINT","UPLOAD_ENDPOINT","UPLOAD_CONTENT_ENDPOINT","requestJson","url","init","RequestInit","T","response","fetch","credentials","ok","String","json","postAuthorized","body","Record","method","headers","JSON","stringify","authorize","createComputerSettingsFace","options","createXhr","XMLHttpRequest","payload","encodeURIComponent","resolve","reject","xhr","open","withCredentials","setRequestHeader","onload","parse","responseText","onerror","send","files","Selector","label","onToggle","disabled","ComputerSettingsRows","t","targetError","setTargetError","targetSaving","setTargetSaving","idleOpen","setIdleOpen","importOpen","setImportOpen","archives","setArchives","busy","setBusy","confirming","setConfirming","exportTarget","setExportTarget","manualOpen","setManualOpen","manualPath","setManualPath","saving","setSaving","dirNote","setDirNote","transferNote","setTransferNote","download","setDownload","token","uploadName","setUploadName","uploadFile","pickerBroken","setPickerBroken","setHostDir","livePhase","setLivePhase","liveElapsed","setLiveElapsed","hostDirResource","HTMLSpanElement","active","then","busyResource","startedAt","Date","now","controller","AbortController","pending","tick","signal","aborted","Math","round","phase","AbortSignal","any","timeout","timer","setInterval","abort","clearInterval","phaseKey","hasDir","canAdjust","pickDirectoryInto","apply","pickExportDir","startExport","saveManualPath","trim","startsWith","test","finally","runExport","autoOpen","runImport","takeUploadFile","current","runUpload","openImport","length","openDir","selectedFile","map","id","className","event","minutes","Number","globalThis","location","assign","seconds","useState","useCallback","Tag","Button","useSyncExternalStore","useRef"],"sources":["../../../node_modules/.pnpm/@stylexjs+stylex@0.19.1/node_modules/@stylexjs/stylex/lib/es/stylex.mjs","../../client/src/client/channel-sidebar-icon.tsx","../../client/src/client/ds/tokens.stylex.ts","../../client/src/client/ds/empty-state.tsx","../../client/src/client/mounted-resource.ts","../../client/src/client/remote-viewer/tokens.ts","../../client/src/client/remote-viewer/viewer-state.ts","../../client/src/client/remote-viewer/frame-liveness.ts","../../client/src/client/remote-viewer/index.tsx","../src/client/viewer-events.ts","../src/client/locale.ts","../../client/src/client/ds/tooltip.tsx","../../client/src/client/sidebar-card.tsx","../src/settings.ts","../src/client/mounted-resource.ts","../../client/src/client/ds/note.tsx","../../client/src/client/ds/pill-button.tsx","../../client/src/client/appearance-scope.ts","../../client/src/client/appearance-primitives.tsx","../../client/src/client/ds/pointer-menu.tsx","../../client/src/client/ds/select.tsx","../../client/src/client/ds/settings-row.tsx","../src/client/local-setup-copy.ts","../../client/src/client/missing-packages.tsx","../src/client/local-computer.tsx","../src/client/settings-rows.tsx","../../client/src/client/telemetry-surface.ts","../src/client/access-power-icon.tsx","../../client/src/client/ds/stylex-css.ts","../src/client/index.tsx"],"sourcesContent":["var styleq = {};\n\nvar hasRequiredStyleq;\n\nfunction requireStyleq () {\n\tif (hasRequiredStyleq) return styleq;\n\thasRequiredStyleq = 1;\n\n\tObject.defineProperty(styleq, \"__esModule\", {\n\t value: true\n\t});\n\tstyleq.styleq = void 0;\n\tvar cache = new WeakMap();\n\tvar compiledKey = '$$css';\n\tfunction createStyleq(options) {\n\t var disableCache;\n\t var disableMix;\n\t var transform;\n\t if (options != null) {\n\t disableCache = options.disableCache === true;\n\t disableMix = options.disableMix === true;\n\t transform = options.transform;\n\t }\n\t return function styleq() {\n\t var definedProperties = [];\n\t var className = '';\n\t var inlineStyle = null;\n\t var debugString = '';\n\t var nextCache = disableCache ? null : cache;\n\t var styles = new Array(arguments.length);\n\t for (var i = 0; i < arguments.length; i++) {\n\t styles[i] = arguments[i];\n\t }\n\t while (styles.length > 0) {\n\t var possibleStyle = styles.pop();\n\t if (possibleStyle == null || possibleStyle === false) {\n\t continue;\n\t }\n\t if (Array.isArray(possibleStyle)) {\n\t for (var _i = 0; _i < possibleStyle.length; _i++) {\n\t styles.push(possibleStyle[_i]);\n\t }\n\t continue;\n\t }\n\t var style = transform != null ? transform(possibleStyle) : possibleStyle;\n\t if (style.$$css != null) {\n\t var classNameChunk = '';\n\t if (nextCache != null && nextCache.has(style)) {\n\t var cacheEntry = nextCache.get(style);\n\t if (cacheEntry != null) {\n\t classNameChunk = cacheEntry[0];\n\t debugString = cacheEntry[2];\n\t definedProperties.push.apply(definedProperties, cacheEntry[1]);\n\t nextCache = cacheEntry[3];\n\t }\n\t } else {\n\t var definedPropertiesChunk = [];\n\t for (var prop in style) {\n\t var value = style[prop];\n\t if (prop === compiledKey) {\n\t var compiledKeyValue = style[prop];\n\t if (compiledKeyValue !== true) {\n\t debugString = debugString ? compiledKeyValue + '; ' + debugString : compiledKeyValue;\n\t }\n\t continue;\n\t }\n\t if (typeof value === 'string' || value === null) {\n\t if (!definedProperties.includes(prop)) {\n\t definedProperties.push(prop);\n\t if (nextCache != null) {\n\t definedPropertiesChunk.push(prop);\n\t }\n\t if (typeof value === 'string') {\n\t classNameChunk += classNameChunk ? ' ' + value : value;\n\t }\n\t }\n\t } else {\n\t console.error(\"styleq: \".concat(prop, \" typeof \").concat(String(value), \" is not \\\"string\\\" or \\\"null\\\".\"));\n\t }\n\t }\n\t if (nextCache != null) {\n\t var weakMap = new WeakMap();\n\t nextCache.set(style, [classNameChunk, definedPropertiesChunk, debugString, weakMap]);\n\t nextCache = weakMap;\n\t }\n\t }\n\t if (classNameChunk) {\n\t className = className ? classNameChunk + ' ' + className : classNameChunk;\n\t }\n\t } else {\n\t if (disableMix) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t inlineStyle = Object.assign({}, style, inlineStyle);\n\t } else {\n\t var subStyle = null;\n\t for (var _prop in style) {\n\t var _value = style[_prop];\n\t if (_value !== undefined) {\n\t if (!definedProperties.includes(_prop)) {\n\t if (_value != null) {\n\t if (inlineStyle == null) {\n\t inlineStyle = {};\n\t }\n\t if (subStyle == null) {\n\t subStyle = {};\n\t }\n\t subStyle[_prop] = _value;\n\t }\n\t definedProperties.push(_prop);\n\t nextCache = null;\n\t }\n\t }\n\t }\n\t if (subStyle != null) {\n\t inlineStyle = Object.assign(subStyle, inlineStyle);\n\t }\n\t }\n\t }\n\t }\n\t var styleProps = [className, inlineStyle, debugString];\n\t return styleProps;\n\t };\n\t}\n\tvar styleq$1 = styleq.styleq = createStyleq();\n\tstyleq$1.factory = createStyleq;\n\treturn styleq;\n}\n\nvar styleqExports = /*@__PURE__*/ requireStyleq();\n\nconst errorForFn = name => new Error(`Unexpected 'stylex.${name}' call at runtime. Styles must be compiled by '@stylexjs/babel-plugin'.`);\nconst errorForType = key => errorForFn(`types.${key}`);\nconst create = function stylexCreate(_styles) {\n throw errorForFn('create');\n};\nconst createTheme = (_baseTokens, _overrides) => {\n throw errorForFn('createTheme');\n};\nconst defineConsts = function stylexDefineConsts(_styles) {\n throw errorForFn('defineConsts');\n};\nconst defineVars = function stylexDefineVars(_styles) {\n throw errorForFn('defineVars');\n};\nconst unstable_conditional = function stylexConditional(_value) {\n throw errorForFn('unstable_conditional');\n};\nconst unstable_defineVarsNested = function stylexDefineVarsNested(_styles) {\n throw errorForFn('unstable_defineVarsNested');\n};\nconst unstable_defineConstsNested = function stylexDefineConstsNested(_styles) {\n throw errorForFn('unstable_defineConstsNested');\n};\nconst unstable_createThemeNested = (_baseTokens, _overrides) => {\n throw errorForFn('unstable_createThemeNested');\n};\nconst defineMarker = () => {\n throw errorForFn('defineMarker');\n};\nconst firstThatWorks = (..._styles) => {\n throw errorForFn('firstThatWorks');\n};\nconst keyframes = _keyframes => {\n throw errorForFn('keyframes');\n};\nconst positionTry = _positionTry => {\n throw errorForFn('positionTry');\n};\nfunction props(...styles) {\n const [className, style, dataStyleSrc] = styleqExports.styleq(styles);\n const result = {};\n if (className != null && className !== '') {\n result.className = className;\n }\n if (style != null && Object.keys(style).length > 0) {\n result.style = style;\n }\n if (dataStyleSrc != null && dataStyleSrc !== '') {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst toKebabCase = str => str.replace(/([A-Z])/g, '-$1').toLowerCase();\nfunction attrs(...styles) {\n const {\n className,\n style,\n 'data-style-src': dataStyleSrc\n } = props.apply(this, styles);\n const result = {};\n if (className != null) {\n result.class = className;\n }\n if (style != null) {\n result.style = Object.entries(style).map(([key, value]) => `${toKebabCase(key)}:${value}`).join(';');\n }\n if (dataStyleSrc != null) {\n result['data-style-src'] = dataStyleSrc;\n }\n return result;\n}\nconst viewTransitionClass = _viewTransitionClass => {\n throw errorForFn('viewTransitionClass');\n};\nconst defaultMarker = () => {\n throw errorForFn('defaultMarker');\n};\nconst when = {\n ancestor: _p => {\n throw errorForFn('when.ancestor');\n },\n descendant: _p => {\n throw errorForFn('when.descendant');\n },\n siblingBefore: _p => {\n throw errorForFn('when.siblingBefore');\n },\n siblingAfter: _p => {\n throw errorForFn('when.siblingAfter');\n },\n anySibling: _p => {\n throw errorForFn('when.anySibling');\n }\n};\nconst env = Object.freeze({});\nconst types = {\n angle: _v => {\n throw errorForType('angle');\n },\n color: _v => {\n throw errorForType('color');\n },\n url: _v => {\n throw errorForType('url');\n },\n image: _v => {\n throw errorForType('image');\n },\n integer: _v => {\n throw errorForType('integer');\n },\n lengthPercentage: _v => {\n throw errorForType('lengthPercentage');\n },\n length: _v => {\n throw errorForType('length');\n },\n percentage: _v => {\n throw errorForType('percentage');\n },\n number: _v => {\n throw errorForType('number');\n },\n resolution: _v => {\n throw errorForType('resolution');\n },\n time: _v => {\n throw errorForType('time');\n },\n transformFunction: _v => {\n throw errorForType('transformFunction');\n },\n transformList: _v => {\n throw errorForType('transformList');\n }\n};\nconst legacyMerge = /*@__PURE__*/ function () {\n function _legacyMerge(...styles) {\n const [className] = styleqExports.styleq(styles);\n return className;\n }\n _legacyMerge.create = create;\n _legacyMerge.createTheme = createTheme;\n _legacyMerge.defineConsts = defineConsts;\n _legacyMerge.defineMarker = defineMarker;\n _legacyMerge.defineVars = defineVars;\n _legacyMerge.defaultMarker = defaultMarker;\n _legacyMerge.firstThatWorks = firstThatWorks;\n _legacyMerge.keyframes = keyframes;\n _legacyMerge.positionTry = positionTry;\n _legacyMerge.props = props;\n _legacyMerge.attrs = attrs;\n _legacyMerge.types = types;\n _legacyMerge.when = when;\n _legacyMerge.viewTransitionClass = viewTransitionClass;\n _legacyMerge.env = env;\n _legacyMerge.unstable_conditional = unstable_conditional;\n _legacyMerge.unstable_defineVarsNested = unstable_defineVarsNested;\n _legacyMerge.unstable_defineConstsNested = unstable_defineConstsNested;\n _legacyMerge.unstable_createThemeNested = unstable_createThemeNested;\n return _legacyMerge;\n}();\n\nexport { attrs, create, createTheme, defaultMarker, defineConsts, defineMarker, defineVars, env, firstThatWorks, keyframes, legacyMerge, positionTry, props, types, unstable_conditional, unstable_createThemeNested, unstable_defineConstsNested, unstable_defineVarsNested, viewTransitionClass, when };\n","/**\n * Vendored Channel sidebar glyphs from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the matching lucide `dist/esm/icons/*.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { createElement, type ReactElement } from 'react';\n\nconst glyphs: Record][]> = {\n image: [\n ['rect', { width: '18', height: '18', x: '3', y: '3', rx: '2', ry: '2' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ['path', { d: 'm21 15-4-4L7 21' }],\n ],\n 'arrow-left': [\n ['path', { d: 'm12 19-7-7 7-7' }],\n ['path', { d: 'M19 12H5' }],\n ],\n 'chevron-right': [['path', { d: 'm9 18 6-6-6-6' }]],\n store: [\n ['path', { d: 'M15 21v-5a2 2 0 0 0-2-2h-2a2 2 0 0 0-2 2v5' }],\n [\n 'path',\n {\n d: 'M17.774 10.31a1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.451 0 1.12 1.12 0 0 0-1.548 0 2.5 2.5 0 0 1-3.452 0 1.12 1.12 0 0 0-1.549 0 2.5 2.5 0 0 1-3.77-3.248l2.889-4.184A2 2 0 0 1 7 2h10a2 2 0 0 1 1.653.873l2.895 4.192a2.5 2.5 0 0 1-3.774 3.244',\n },\n ],\n ['path', { d: 'M4 10.95V19a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8.05' }],\n ],\n house: [['path', { d: 'm3 10 9-7 9 7v10a1 1 0 0 1-1 1h-5v-7H9v7H4a1 1 0 0 1-1-1z' }]],\n search: [\n ['path', { d: 'm21 21-4.34-4.34' }],\n ['circle', { cx: '11', cy: '11', r: '8' }],\n ],\n hash: [\n ['line', { x1: '4', x2: '20', y1: '9', y2: '9' }],\n ['line', { x1: '4', x2: '20', y1: '15', y2: '15' }],\n ['line', { x1: '10', x2: '8', y1: '3', y2: '21' }],\n ['line', { x1: '16', x2: '14', y1: '3', y2: '21' }],\n ],\n 'messages-circle': [\n [\n 'path',\n {\n d: 'M19.95 10.05a7 7 0 011.412 7.872 1 1 0 00-.058.787l.675 2.089a1 1 0 01-1.236 1.168l-2.155-.631a1 1 0 00-.745.06 7 7 0 01-7.793-1.445',\n },\n ],\n [\n 'path',\n {\n d: 'M2.696 12.708a1 1 0 00-.058-.785 7 7 0 113.518 3.473 1 1 0 00-.744-.061l-2.155.63a1 1 0 01-1.236-1.167z',\n },\n ],\n ],\n 'text-quote': [\n ['path', { d: 'M17 5H3' }],\n ['path', { d: 'M21 12H8' }],\n ['path', { d: 'M21 19H8' }],\n ['path', { d: 'M3 12v7' }],\n ],\n brain: [\n ['path', { d: 'M12 18V5' }],\n ['path', { d: 'M15 13a4.17 4.17 0 0 1-3-4 4.17 4.17 0 0 1-3 4' }],\n ['path', { d: 'M17.598 6.5A3 3 0 1 0 12 5a3 3 0 1 0-5.598 1.5' }],\n ['path', { d: 'M17.997 5.125a4 4 0 0 1 2.526 5.77' }],\n ['path', { d: 'M18 18a4 4 0 0 0 2-7.464' }],\n ['path', { d: 'M19.967 17.483A4 4 0 1 1 12 18a4 4 0 1 1-7.967-.517' }],\n ['path', { d: 'M6 18a4 4 0 0 1-2-7.464' }],\n ['path', { d: 'M6.003 5.125a4 4 0 0 0-2.526 5.77' }],\n ],\n file: [\n [\n 'path',\n {\n d: 'M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z',\n },\n ],\n ['path', { d: 'M14 2v5a1 1 0 0 0 1 1h5' }],\n ],\n terminal: [\n ['path', { d: 'M12 19h8' }],\n ['path', { d: 'm4 17 6-6-6-6' }],\n ],\n archive: [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8' }],\n ['path', { d: 'M10 12h4' }],\n ],\n 'archive-restore': [\n ['rect', { width: '20', height: '5', x: '2', y: '3', rx: '1' }],\n ['path', { d: 'M4 8v11a2 2 0 0 0 2 2h2' }],\n ['path', { d: 'M20 8v11a2 2 0 0 1-2 2h-2' }],\n ['path', { d: 'm9 15 3-3 3 3' }],\n ['path', { d: 'M12 12v9' }],\n ],\n 'alarm-clock': [\n ['circle', { cx: '12', cy: '13', r: '8' }],\n ['path', { d: 'M12 9v4l2 2' }],\n ['path', { d: 'M5 3 2 6' }],\n ['path', { d: 'm22 6-3-3' }],\n ['path', { d: 'M6.38 18.7 4 21' }],\n ['path', { d: 'M17.64 18.67 20 21' }],\n ],\n 'bell-ring': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n ['path', { d: 'M22 8c0-2.3-.8-4.3-2-6' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ['path', { d: 'M4 2C2.8 3.7 2 5.7 2 8' }],\n ],\n bell: [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326',\n },\n ],\n ],\n 'bell-off': [\n ['path', { d: 'M10.268 21a2 2 0 0 0 3.464 0' }],\n [\n 'path',\n {\n d: 'M17 17H4a1 1 0 0 1-.74-1.673C4.59 13.956 6 12.499 6 8a6 6 0 0 1 .258-1.742',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M8.668 3.01A6 6 0 0 1 18 8c0 2.687.77 4.653 1.707 6.05' }],\n ],\n cpu: [\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M17 20v2' }],\n ['path', { d: 'M17 2v2' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M2 17h2' }],\n ['path', { d: 'M2 7h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'M20 17h2' }],\n ['path', { d: 'M20 7h2' }],\n ['path', { d: 'M7 20v2' }],\n ['path', { d: 'M7 2v2' }],\n ['rect', { x: '4', y: '4', width: '16', height: '16', rx: '2' }],\n ['rect', { x: '8', y: '8', width: '8', height: '8', rx: '1' }],\n ],\n 'id-card': [\n ['path', { d: 'M13 19a4 4 0 00-8 0' }],\n ['path', { d: 'M16 10h2' }],\n ['path', { d: 'M16 14h2' }],\n ['circle', { cx: '9', cy: '12', r: '3' }],\n ['rect', { x: '2', y: '5', width: '20', height: '14', rx: '2' }],\n ],\n plug: [\n ['path', { d: 'M12 22v-5' }],\n ['path', { d: 'M15 8V2' }],\n [\n 'path',\n {\n d: 'M17 8a1 1 0 0 1 1 1v4a4 4 0 0 1-4 4h-4a4 4 0 0 1-4-4V9a1 1 0 0 1 1-1z',\n },\n ],\n ['path', { d: 'M9 8V2' }],\n ],\n ruler: [\n [\n 'path',\n {\n d: 'M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.41 2.41 0 0 1 0-3.4l2.6-2.6a2.41 2.41 0 0 1 3.4 0Z',\n },\n ],\n ['path', { d: 'm14.5 12.5 2-2' }],\n ['path', { d: 'm11.5 9.5 2-2' }],\n ['path', { d: 'm8.5 6.5 2-2' }],\n ['path', { d: 'm17.5 15.5 2-2' }],\n ],\n compass: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n [\n 'path',\n {\n d: 'm16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z',\n },\n ],\n ],\n gauge: [\n ['path', { d: 'm12 14 4-4' }],\n ['path', { d: 'M3.34 19a10 10 0 1 1 17.32 0' }],\n ],\n 'user-check': [\n ['path', { d: 'm16 11 2 2 4-4' }],\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ],\n 'shield-check': [\n [\n 'path',\n {\n d: 'M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z',\n },\n ],\n ['path', { d: 'm9 12 2 2 4-4' }],\n ],\n upload: [\n ['path', { d: 'M12 3v12' }],\n ['path', { d: 'm17 8-5-5-5 5' }],\n ['path', { d: 'M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4' }],\n ],\n package: [\n [\n 'path',\n {\n d: 'M11 21.73a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73z',\n },\n ],\n ['path', { d: 'M12 22V12' }],\n ['path', { d: 'M3.29 7 12 12l8.71-5' }],\n ['path', { d: 'm7.5 4.27 9 5.15' }],\n ],\n plus: [\n ['path', { d: 'M5 12h14' }],\n ['path', { d: 'M12 5v14' }],\n ],\n user: [\n ['path', { d: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '12', cy: '7', r: '4' }],\n ],\n 'user-plus': [\n ['path', { d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2' }],\n ['circle', { cx: '9', cy: '7', r: '4' }],\n ['path', { d: 'M19 8v6' }],\n ['path', { d: 'M22 11h-6' }],\n ],\n bot: [\n ['path', { d: 'M12 8V4H8' }],\n ['rect', { width: '16', height: '12', x: '4', y: '8', rx: '2' }],\n ['path', { d: 'M2 14h2' }],\n ['path', { d: 'M20 14h2' }],\n ['path', { d: 'M15 13v2' }],\n ['path', { d: 'M9 13v2' }],\n ],\n 'list-checks': [\n ['path', { d: 'M13 5h8' }],\n ['path', { d: 'M13 12h8' }],\n ['path', { d: 'M13 19h8' }],\n ['path', { d: 'm3 17 2 2 4-4' }],\n ['path', { d: 'm3 7 2 2 4-4' }],\n ],\n palette: [\n [\n 'path',\n {\n d: 'M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z',\n },\n ],\n ['circle', { cx: '13.5', cy: '6.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '17.5', cy: '10.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '6.5', cy: '12.5', r: '.5', fill: 'currentColor' }],\n ['circle', { cx: '8.5', cy: '7.5', r: '.5', fill: 'currentColor' }],\n ],\n 'image-up': [\n [\n 'path',\n {\n d: 'M10.3 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2v10l-3.1-3.1a2 2 0 0 0-2.814.014L6 21',\n },\n ],\n ['path', { d: 'm14 19.5 3-3 3 3' }],\n ['path', { d: 'M17 22v-5.5' }],\n ['circle', { cx: '9', cy: '9', r: '2' }],\n ],\n lock: [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 10 0v4' }],\n ],\n play: [\n [\n 'path',\n {\n d: 'M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z',\n },\n ],\n ],\n 'lock-open': [\n ['rect', { width: '18', height: '11', x: '3', y: '11', rx: '2', ry: '2' }],\n ['path', { d: 'M7 11V7a5 5 0 0 1 9.9-1' }],\n ],\n eye: [\n [\n 'path',\n {\n d: 'M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0',\n },\n ],\n ['circle', { cx: '12', cy: '12', r: '3' }],\n ],\n 'eye-off': [\n [\n 'path',\n {\n d: 'M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49',\n },\n ],\n ['path', { d: 'M14.084 14.158a3 3 0 0 1-4.242-4.242' }],\n [\n 'path',\n {\n d: 'M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143',\n },\n ],\n ['path', { d: 'm2 2 20 20' }],\n ],\n files: [\n [\n 'path',\n {\n d: 'M15 2h-4a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V8',\n },\n ],\n [\n 'path',\n {\n d: 'M16.706 2.706A2.4 2.4 0 0 0 15 2v5a1 1 0 0 0 1 1h5a2.4 2.4 0 0 0-.706-1.706z',\n },\n ],\n [\n 'path',\n {\n d: 'M5 7a2 2 0 0 0-2 2v11a2 2 0 0 0 2 2h8a2 2 0 0 0 1.732-1',\n },\n ],\n ],\n 'git-branch': [\n [\n 'path',\n {\n d: 'M15 6a9 9 0 0 0-9 9V3',\n },\n ],\n [\n 'circle',\n {\n cx: '18',\n cy: '6',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '6',\n cy: '18',\n r: '3',\n },\n ],\n ],\n 'messages-square': [\n [\n 'path',\n {\n d: 'M16 10a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 14.286V4a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z',\n },\n ],\n [\n 'path',\n {\n d: 'M20 9a2 2 0 0 1 2 2v10.286a.71.71 0 0 1-1.212.502l-2.202-2.202A2 2 0 0 0 17.172 19H10a2 2 0 0 1-2-2v-1',\n },\n ],\n ],\n inbox: [\n [\n 'polyline',\n {\n points: '22 12 16 12 14 15 10 15 8 12 2 12',\n },\n ],\n [\n 'path',\n {\n d: 'M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z',\n },\n ],\n ],\n 'folder-key': [\n [\n 'path',\n {\n d: 'M13 20H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H20a2 2 0 0 1 2 2v1.36',\n },\n ],\n [\n 'path',\n {\n d: 'M19 12v6',\n },\n ],\n [\n 'path',\n {\n d: 'M19 14h2',\n },\n ],\n [\n 'circle',\n {\n cx: '19',\n cy: '20',\n r: '2',\n },\n ],\n ],\n users: [\n [\n 'path',\n {\n d: 'M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2',\n },\n ],\n [\n 'path',\n {\n d: 'M16 3.128a4 4 0 0 1 0 7.744',\n },\n ],\n [\n 'path',\n {\n d: 'M22 21v-2a4 4 0 0 0-3-3.87',\n },\n ],\n [\n 'circle',\n {\n cx: '9',\n cy: '7',\n r: '4',\n },\n ],\n ],\n 'settings-2': [\n [\n 'path',\n {\n d: 'M14 17H5',\n },\n ],\n [\n 'path',\n {\n d: 'M19 7h-9',\n },\n ],\n [\n 'circle',\n {\n cx: '17',\n cy: '17',\n r: '3',\n },\n ],\n [\n 'circle',\n {\n cx: '7',\n cy: '7',\n r: '3',\n },\n ],\n ],\n settings: [\n [\n 'path',\n {\n d: 'M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915',\n },\n ],\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '3',\n },\n ],\n ],\n monitor: [\n [\n 'rect',\n {\n width: '20',\n height: '14',\n x: '2',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'line',\n {\n x1: '8',\n x2: '16',\n y1: '21',\n y2: '21',\n },\n ],\n [\n 'line',\n {\n x1: '12',\n x2: '12',\n y1: '17',\n y2: '21',\n },\n ],\n ],\n globe: [\n [\n 'circle',\n {\n cx: '12',\n cy: '12',\n r: '10',\n },\n ],\n [\n 'path',\n {\n d: 'M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20',\n },\n ],\n [\n 'path',\n {\n d: 'M2 12h20',\n },\n ],\n ],\n 'panel-right': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M15 3v18',\n },\n ],\n ],\n 'panels-top-left': [\n [\n 'rect',\n {\n width: '18',\n height: '18',\n x: '3',\n y: '3',\n rx: '2',\n },\n ],\n [\n 'path',\n {\n d: 'M3 9h18',\n },\n ],\n [\n 'path',\n {\n d: 'M9 21V9',\n },\n ],\n ],\n 'grip-vertical': [\n ['circle', { cx: '9', cy: '12', r: '1' }],\n ['circle', { cx: '9', cy: '5', r: '1' }],\n ['circle', { cx: '9', cy: '19', r: '1' }],\n ['circle', { cx: '15', cy: '12', r: '1' }],\n ['circle', { cx: '15', cy: '5', r: '1' }],\n ['circle', { cx: '15', cy: '19', r: '1' }],\n ],\n star: [\n [\n 'path',\n {\n d: 'M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z',\n },\n ],\n ],\n copy: [\n ['rect', { width: '14', height: '14', x: '8', y: '8', rx: '2', ry: '2' }],\n ['path', { d: 'M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2' }],\n ],\n 'external-link': [\n ['path', { d: 'M15 3h6v6' }],\n ['path', { d: 'M10 14 21 3' }],\n ['path', { d: 'M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6' }],\n ],\n sun: [\n ['circle', { cx: '12', cy: '12', r: '4' }],\n ['path', { d: 'M12 2v2' }],\n ['path', { d: 'M12 20v2' }],\n ['path', { d: 'm4.93 4.93 1.41 1.41' }],\n ['path', { d: 'm17.66 17.66 1.41 1.41' }],\n ['path', { d: 'M2 12h2' }],\n ['path', { d: 'M20 12h2' }],\n ['path', { d: 'm6.34 17.66-1.41 1.41' }],\n ['path', { d: 'm19.07 4.93-1.41 1.41' }],\n ],\n moon: [\n [\n 'path',\n {\n d: 'M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401',\n },\n ],\n ],\n crop: [\n ['path', { d: 'M6 2v14a2 2 0 0 0 2 2h14' }],\n ['path', { d: 'M18 22V8a2 2 0 0 0-2-2H2' }],\n ],\n ban: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M4.929 4.929 19.07 19.071' }],\n ],\n x: [\n ['path', { d: 'M18 6 6 18' }],\n ['path', { d: 'm6 6 12 12' }],\n ],\n 'message-square': [\n [\n 'path',\n {\n d: 'M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z',\n },\n ],\n ],\n keyboard: [\n ['path', { d: 'M10 8h.01' }],\n ['path', { d: 'M12 12h.01' }],\n ['path', { d: 'M14 8h.01' }],\n ['path', { d: 'M16 12h.01' }],\n ['path', { d: 'M18 8h.01' }],\n ['path', { d: 'M6 8h.01' }],\n ['path', { d: 'M7 16h10' }],\n ['path', { d: 'M8 12h.01' }],\n ['rect', { width: '20', height: '16', x: '2', y: '4', rx: '2' }],\n ],\n smartphone: [\n ['rect', { width: '14', height: '20', x: '5', y: '2', rx: '2', ry: '2' }],\n ['path', { d: 'M12 18h.01' }],\n ],\n 'sliders-horizontal': [\n ['path', { d: 'M10 5H3' }],\n ['path', { d: 'M12 19H3' }],\n ['path', { d: 'M14 3v4' }],\n ['path', { d: 'M16 17v4' }],\n ['path', { d: 'M21 12h-9' }],\n ['path', { d: 'M21 19h-5' }],\n ['path', { d: 'M21 5h-7' }],\n ['path', { d: 'M8 10v4' }],\n ['path', { d: 'M8 12H3' }],\n ],\n info: [\n ['circle', { cx: '12', cy: '12', r: '10' }],\n ['path', { d: 'M12 16v-4' }],\n ['path', { d: 'M12 8h.01' }],\n ],\n puzzle: [\n [\n 'path',\n {\n d: 'M15.39 4.39a1 1 0 0 0 1.68-.474 2.5 2.5 0 1 1 3.014 3.015 1 1 0 0 0-.474 1.68l1.683 1.682a2.414 2.414 0 0 1 0 3.414L19.61 15.39a1 1 0 0 1-1.68-.474 2.5 2.5 0 1 0-3.014 3.015 1 1 0 0 1 .474 1.68l-1.683 1.682a2.414 2.414 0 0 1-3.414 0L8.61 19.61a1 1 0 0 0-1.68.474 2.5 2.5 0 1 1-3.014-3.015 1 1 0 0 0 .474-1.68l-1.683-1.682a2.414 2.414 0 0 1 0-3.414L4.39 8.61a1 1 0 0 1 1.68.474 2.5 2.5 0 1 0 3.014-3.015 1 1 0 0 1-.474-1.68l1.683-1.682a2.414 2.414 0 0 1 3.414 0z',\n },\n ],\n ],\n check: [\n [\n 'path',\n {\n d: 'M20 6 9 17l-5-5',\n },\n ],\n ],\n laptop: [\n [\n 'path',\n {\n d: 'M18 5a2 2 0 0 1 2 2v8.526a2 2 0 0 0 .212.897l1.068 2.127a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45l1.068-2.127A2 2 0 0 0 4 15.526V7a2 2 0 0 1 2-2z',\n },\n ],\n ['path', { d: 'M20.054 15.987H3.946' }],\n ],\n server: [\n ['rect', { width: '20', height: '8', x: '2', y: '2', rx: '2', ry: '2' }],\n ['rect', { width: '20', height: '8', x: '2', y: '14', rx: '2', ry: '2' }],\n ['line', { x1: '6', x2: '6.01', y1: '6', y2: '6' }],\n ['line', { x1: '6', x2: '6.01', y1: '18', y2: '18' }],\n ],\n building: [\n ['path', { d: 'M12 10h.01' }],\n ['path', { d: 'M12 14h.01' }],\n ['path', { d: 'M12 6h.01' }],\n ['path', { d: 'M16 10h.01' }],\n ['path', { d: 'M16 14h.01' }],\n ['path', { d: 'M16 6h.01' }],\n ['path', { d: 'M8 10h.01' }],\n ['path', { d: 'M8 14h.01' }],\n ['path', { d: 'M8 6h.01' }],\n ['path', { d: 'M9 22v-3a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3' }],\n ['rect', { x: '4', y: '2', width: '16', height: '20', rx: '2' }],\n ],\n briefcase: [\n ['path', { d: 'M16 20V4a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16' }],\n ['rect', { width: '20', height: '14', x: '2', y: '6', rx: '2' }],\n ],\n 'flask-conical': [\n [\n 'path',\n {\n d: 'M14 2v6a2 2 0 0 0 .245.96l5.51 10.08A2 2 0 0 1 18 22H6a2 2 0 0 1-1.755-2.96l5.51-10.08A2 2 0 0 0 10 8V2',\n },\n ],\n ['path', { d: 'M6.453 15h11.094' }],\n ['path', { d: 'M8.5 2h7' }],\n ],\n 'gamepad-2': [\n ['line', { x1: '6', x2: '10', y1: '11', y2: '11' }],\n ['line', { x1: '8', x2: '8', y1: '9', y2: '13' }],\n ['line', { x1: '15', x2: '15.01', y1: '12', y2: '12' }],\n ['line', { x1: '18', x2: '18.01', y1: '10', y2: '10' }],\n [\n 'path',\n {\n d: 'M17.32 5H6.68a4 4 0 0 0-3.978 3.59c-.006.052-.01.101-.017.152C2.604 9.416 2 14.456 2 16a3 3 0 0 0 3 3c1 0 1.5-.5 2-1l1.414-1.414A2 2 0 0 1 9.828 16h4.344a2 2 0 0 1 1.414.586L17 18c.5.5 1 1 2 1a3 3 0 0 0 3-3c0-1.545-.604-6.584-.685-7.258-.007-.05-.011-.1-.017-.151A4 4 0 0 0 17.32 5z',\n },\n ],\n ],\n paintbrush: [\n ['path', { d: 'm14.622 17.897-10.68-2.913' }],\n [\n 'path',\n {\n d: 'M18.376 2.622a1 1 0 1 1 3.002 3.002L17.36 9.643a.5.5 0 0 0 0 .707l.944.944a2.41 2.41 0 0 1 0 3.408l-.944.944a.5.5 0 0 1-.707 0L8.354 7.348a.5.5 0 0 1 0-.707l.944-.944a2.41 2.41 0 0 1 3.408 0l.944.944a.5.5 0 0 0 .707 0z',\n },\n ],\n [\n 'path',\n {\n d: 'M9 8c-1.804 2.71-3.97 3.46-6.583 3.948a.507.507 0 0 0-.302.819l7.32 8.883a1 1 0 0 0 1.185.204C12.735 20.405 16 16.792 16 15',\n },\n ],\n ],\n 'audio-lines': [\n ['path', { d: 'M2 10v3' }],\n ['path', { d: 'M6 6v11' }],\n ['path', { d: 'M10 3v18' }],\n ['path', { d: 'M14 8v7' }],\n ['path', { d: 'M18 5v13' }],\n ['path', { d: 'M22 10v3' }],\n ],\n 'book-open': [\n ['path', { d: 'M12 5v16' }],\n [\n 'path',\n {\n d: 'M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z',\n },\n ],\n ],\n zap: [\n [\n 'path',\n {\n d: 'M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z',\n },\n ],\n ],\n heart: [\n [\n 'path',\n {\n d: 'M2 9.5a5.5 5.5 0 0 1 9.591-3.676.56.56 0 0 0 .818 0A5.49 5.49 0 0 1 22 9.5c0 2.29-1.5 4-3 5.5l-5.492 5.313a2 2 0 0 1-3 .019L5 15c-1.5-1.5-3-3.2-3-5.5',\n },\n ],\n ],\n leaf: [\n [\n 'path',\n {\n d: 'M11 20a10 10 0 0010-10 25.9 25.9 0 00-1.04-7.281 1 1 0 00-1.755-.325C15.833 5.5 13 5.5 9.8 6.1A7 7 0 0011 20',\n },\n ],\n ['path', { d: 'M2 21a5 5 0 012.911-4.544C7.613 15.212 8.351 15.24 11 13' }],\n ],\n phone: [\n [\n 'path',\n {\n d: 'M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384',\n },\n ],\n ],\n video: [\n ['path', { d: 'm16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5' }],\n ['rect', { x: '2', y: '6', width: '14', height: '12', rx: '2' }],\n ],\n 'video-off': [\n ['path', { d: 'M10.66 6H14a2 2 0 0 1 2 2v2.5l5.248-3.062A.5.5 0 0 1 22 7.87v8.196' }],\n ['path', { d: 'M16 16a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h2' }],\n ['path', { d: 'm2 2 20 20' }],\n ],\n 'phone-off': [\n [\n 'path',\n {\n d: 'M10.1 13.9a14 14 0 0 0 3.732 2.668 1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2 18 18 0 0 1-12.728-5.272',\n },\n ],\n ['path', { d: 'M22 2 2 22' }],\n [\n 'path',\n {\n d: 'M4.76 13.582A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 .244.473',\n },\n ],\n ],\n mic: [\n ['path', { d: 'M12 19v3' }],\n ['path', { d: 'M19 10v2a7 7 0 0 1-14 0v-2' }],\n ['rect', { x: '9', y: '2', width: '6', height: '13', rx: '3' }],\n ],\n 'mic-off': [\n ['path', { d: 'M12 19v3' }],\n ['path', { d: 'M15 9.34V5a3 3 0 0 0-5.68-1.33' }],\n ['path', { d: 'M16.95 16.95A7 7 0 0 1 5 12v-2' }],\n ['path', { d: 'M18.89 13.23A7 7 0 0 0 19 12v-2' }],\n ['path', { d: 'm2 2 20 20' }],\n ['path', { d: 'M9 9v3a3 3 0 0 0 5.12 2.12' }],\n ],\n tv: [\n ['path', { d: 'm17 2-5 5-5-5' }],\n ['rect', { width: '20', height: '15', x: '2', y: '7', rx: '2' }],\n ],\n};\n\nexport function ChannelSidebarIcon({\n name = 'panels-top-left',\n size = 16,\n}: {\n name?: string | undefined;\n size?: number | string;\n}): ReactElement {\n const nodes = Object.hasOwn(glyphs, name) ? glyphs[name]! : glyphs['panels-top-left']!;\n return (\n \n {nodes.map(([tag, attributes], index) => createElement(tag, { ...attributes, key: index }))}\n \n );\n}\n","import * as stylex from '@stylexjs/stylex';\n\nexport const space = stylex.defineConsts({\n x1: '2px',\n x2: '4px',\n x3: '8px',\n x4: '12px',\n x5: '16px',\n x6: '24px',\n});\n\nexport const text = stylex.defineConsts({\n metaSize: '12px',\n metaLine: '16px',\n bodySize: '13px',\n bodyLine: '20px',\n titleSize: '14px',\n titleLine: '20px',\n regular: '400',\n strong: '500',\n});\n\nexport const radius = stylex.defineConsts({\n xs: 'var(--dsw-radius-xs, 4px)',\n sm: 'var(--dsw-radius-sm, 8px)',\n md: 'var(--dsw-radius-md, 12px)',\n lg: 'var(--dsw-radius-lg, 16px)',\n panel: 'var(--dsw-radius-panel)',\n round: '50%',\n});\n\nexport const border = stylex.defineConsts({\n hairline: '1px',\n focus: 'var(--dsw-focus-ring-width, 2px)',\n});\n\nexport const size = stylex.defineConsts({\n inlineIcon: '26px',\n icon: '28px',\n row: '32px',\n nav: '40px',\n});\n\nexport const dialog = stylex.defineConsts({\n small: 'min(440px, calc(100vw - 32px))',\n bodyMax: 'min(60vh, 520px)',\n medium: 'min(760px, calc(100vw - 32px))',\n wide: 'min(1060px, calc(100vw - 32px))',\n});\n\nexport const actionColor = stylex.defineConsts({\n secondary:\n 'color-mix(in srgb, var(--dsw-alias-label-primary) 8%, var(--dsw-alias-bg-module-platform))',\n hover:\n 'color-mix(in srgb, var(--dsw-alias-label-primary) 13%, var(--dsw-alias-bg-module-platform))',\n danger:\n 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 10%, var(--dsw-alias-bg-module-platform))',\n dangerLabel:\n 'color-mix(in srgb, var(--dsw-alias-state-error-primary) 65%, var(--dsw-alias-label-primary))',\n});\n\nexport const color = stylex.defineConsts({\n fg: 'var(--dsw-alias-label-primary)',\n muted: 'var(--dsw-alias-label-secondary)',\n subtle: 'var(--dsw-alias-label-tertiary)',\n divider: 'var(--dsw-alias-border-l1)',\n border: 'var(--dsw-alias-border-l2)',\n borderStrong: 'var(--dsw-alias-border-l3)',\n hover: 'var(--dsw-alias-interactive-bg-hover)',\n selected: 'var(--dsw-alias-interactive-bg-active)',\n navSelected: 'var(--dsw-specific-sidebar-nav-item-active)',\n accent: 'var(--dsw-alias-state-business-primary)',\n accentText: 'var(--dsw-alias-link)',\n onAccent: 'var(--dsw-alias-label-primary-foreground)',\n danger: 'var(--dsw-alias-state-error-primary)',\n onDanger: 'var(--dsw-alias-label-primary-foreground)',\n dangerEdge: 'var(--dsw-alias-state-error-secondary)',\n dangerSoft: 'var(--dsw-alias-interactive-bg-hover-danger)',\n warning: 'var(--dsw-alias-state-warn-primary)',\n warningEdge: 'var(--dsw-alias-state-warn-secondary)',\n warningSoft: 'var(--dsw-alias-state-warn-tertiary)',\n success: 'var(--dsw-alias-state-success-primary)',\n surface: 'var(--dsw-alias-bg-module-platform)',\n elevated: 'var(--dsw-alias-button-elevated-fill)',\n base: 'var(--dsw-alias-bg-base)',\n modal: 'var(--dsw-alias-bg-layer-2)',\n well: 'var(--dsw-alias-bg-base)',\n accentTint: 'var(--dsw-alias-state-business-tertiary)',\n});\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { ChannelSidebarIcon } from '../channel-sidebar-icon.js';\nimport { border, color, radius, size, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: space.x3,\n marginBlock: space.x4,\n paddingBlock: space.x6,\n paddingInline: space.x5,\n borderWidth: border.hairline,\n borderStyle: 'dashed',\n borderColor: color.border,\n borderRadius: radius.md,\n textAlign: 'center',\n },\n panel: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n flexGrow: 1,\n gap: space.x4,\n padding: space.x5,\n boxSizing: 'border-box',\n textAlign: 'center',\n color: color.muted,\n },\n icon: { width: size.nav, height: size.nav, flexShrink: 0, color: color.subtle },\n title: {\n margin: 0,\n color: color.fg,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n fontWeight: text.strong,\n },\n description: {\n margin: 0,\n maxWidth: '360px',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nexport function EmptyState({\n title,\n description,\n action,\n status = false,\n}: {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly action?: ReactNode;\n readonly status?: boolean;\n}): ReactElement {\n return (\n
\n

{title}

\n {description === undefined ? null : (\n

{description}

\n )}\n {action}\n
\n );\n}\n\nexport function PanelEmptyState({\n icon,\n children,\n action,\n}: {\n readonly icon?: string | undefined;\n readonly children: ReactNode;\n readonly action?: ReactNode;\n}): ReactElement {\n return (\n
\n \n \n \n

{children}

\n {action === undefined ? null :
{action}
}\n
\n );\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","export const BH = {\n labelSecondary: 'var(--dsw-alias-label-secondary)',\n hoverFill: 'var(--dsw-alias-interactive-bg-hover)',\n errorPrimary: 'var(--dsw-alias-state-error-primary)',\n radiusMd: 'var(--dsw-radius-md)',\n labelPrimary: 'var(--dsw-alias-label-primary, #0f1115)',\n labelPrimaryForeground: 'var(--dsw-alias-label-primary-foreground, #ffffff)',\n borderL2: 'var(--dsw-alias-border-l2, #0000001a)',\n borderL3: 'var(--dsw-alias-border-l3, #0000001f)',\n borderL4: 'var(--dsw-alias-border-l4, #00000029)',\n bgBase: 'var(--dsw-alias-bg-base, #ffffff)',\n buttonPrimaryFill: 'var(--dsw-alias-button-primary-fill, #0f1115)',\n buttonElevatedFill: 'var(--dsw-alias-button-elevated-fill, transparent)',\n businessPrimary: 'var(--dsw-alias-state-business-primary, #4176e6)',\n hoverScrim: 'color-mix(in srgb, var(--dsw-alias-bg-base) 35%, transparent)',\n} as const;\n\nexport const VIDEO_SURFACE = {\n background: '#000000',\n spinnerTrack: 'rgba(255, 255, 255, 0.18)',\n spinnerArc: '#ffffff',\n onVideo: '#ffffff',\n} as const;\n","import type { ViewerKey } from './locale.js';\n\nexport type ViewerAction = 'open' | 'collapse';\n\nexport function nextExpanded(action: ViewerAction): boolean {\n return action === 'open';\n}\n\nexport type FramePhase = 'connecting' | 'live' | 'empty';\n\nexport const PHASE_SMOOTH_AFTER = 2;\n\nexport interface SmoothedPhase {\n readonly phase: FramePhase;\n readonly streak: number;\n}\n\nexport function smoothPhase(shown: FramePhase, raw: FramePhase, streak: number): SmoothedPhase {\n if (raw === 'live') return { phase: 'live', streak: 0 };\n if (shown !== 'live') return { phase: raw, streak: 0 };\n const next = streak + 1;\n if (next >= PHASE_SMOOTH_AFTER) return { phase: raw, streak: next };\n return { phase: shown, streak: next };\n}\n\nexport function dotStateFor(phase: FramePhase): 'done' | 'ongoing' | 'error' {\n if (phase === 'live') return 'done';\n if (phase === 'empty') return 'error';\n return 'ongoing';\n}\n\nexport function statusKeyFor(phase: FramePhase, reconnecting: boolean): ViewerKey {\n if (phase === 'live') return 'entry.live';\n if (phase === 'empty') return 'entry.noScreen';\n return reconnecting ? 'entry.reconnecting' : 'entry.connecting';\n}\n\nexport function stopKey(busy: boolean, stopping: boolean): ViewerKey {\n return busy || stopping ? 'entry.stopping' : 'entry.stop';\n}\n\nconst EXIT_REPORT = /^exited code=\\d+$/;\n\nexport function isExitReport(detail: string | undefined): boolean {\n return detail !== undefined && EXIT_REPORT.test(detail);\n}\n","import type { FramePhase } from './viewer-state.js';\n\nexport const EMPTY_AFTER_MISSES = 6;\n\nexport const BUSY_EMPTY_AFTER = 30;\n\nexport const QUIET_TOLERANCE = 4;\n\nexport const QUIET_ABANDON = 120;\n\nexport const LOSS_REMOUNT_AFTER = 3;\n\nexport const MAX_AUTO_RELOAD = 3;\n\nconst STATUS_ELEMENT_ID = 'status-display';\n\nconst BUSY_TEXT = /connecting|reconnect|disconnect|failed|error/i;\n\nexport interface StreamSample {\n readonly sized: boolean;\n readonly busy: boolean;\n readonly signature?: number;\n}\n\nexport interface StreamTracker {\n readonly misses: number;\n readonly busyStreak: number;\n readonly quiet: number;\n readonly lastSignature?: number;\n readonly live?: true;\n}\n\nexport function hashBytes(data: Uint8ClampedArray): number {\n let hash = 0x81_9c_9d_c5;\n for (let index = 0; index < data.length; index += 1) {\n hash ^= data[index] ?? 0;\n hash = Math.imul(hash, 0x01_00_01_93);\n }\n return hash >>> 0;\n}\n\nexport function upstreamBusy(doc: Document | null | undefined): boolean {\n try {\n const element = doc?.getElementById(STATUS_ELEMENT_ID) as HTMLElement | null;\n if (element === null || element === undefined) return false;\n if (element.classList.contains('hidden')) return false;\n return BUSY_TEXT.test(element.textContent ?? '');\n } catch {\n return false;\n }\n}\n\nfunction signatureOf(\n doc: Document,\n surface: HTMLVideoElement | HTMLCanvasElement,\n): number | undefined {\n try {\n const scratch = doc.createElement('canvas');\n scratch.width = 16;\n scratch.height = 16;\n const context = scratch.getContext('2d', { willReadFrequently: true });\n if (context === null) return undefined;\n context.drawImage(surface, 0, 0, 16, 16);\n return hashBytes(context.getImageData(0, 0, 16, 16).data);\n } catch {\n return undefined;\n }\n}\n\nexport function sampleSurface(doc: Document | null | undefined): StreamSample {\n const busy = upstreamBusy(doc);\n let sized = false;\n let signature: number | undefined;\n try {\n const surface = doc?.getElementById('videoCanvas') as\n | HTMLVideoElement\n | HTMLCanvasElement\n | null;\n const videoWidth = (surface as { readonly videoWidth?: unknown } | null)?.videoWidth;\n const canvasWidth = (surface as { readonly width?: unknown } | null)?.width;\n const width =\n typeof videoWidth === 'number'\n ? videoWidth\n : typeof canvasWidth === 'number'\n ? canvasWidth\n : 0;\n sized = surface !== null && surface !== undefined && width > 0;\n if (sized && surface !== null && surface !== undefined && doc !== null && doc !== undefined) {\n signature = signatureOf(doc, surface);\n }\n } catch {\n signature = undefined;\n }\n return signature === undefined ? { sized, busy } : { sized, busy, signature };\n}\nfunction withSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n signature: number | undefined,\n): StreamTracker {\n return signature === undefined ? { ...base } : { ...base, lastSignature: signature };\n}\n\nfunction withPreviousSignature(\n base: { readonly misses: number; readonly busyStreak: number; readonly quiet: number },\n prev: StreamTracker,\n): StreamTracker {\n return prev.lastSignature === undefined\n ? { ...base }\n : { ...base, lastSignature: prev.lastSignature };\n}\n\nexport function shouldRemountLoss(lossStreak: number): boolean {\n return lossStreak >= LOSS_REMOUNT_AFTER;\n}\n\nexport function shouldAutoReload(phase: FramePhase, everLive: boolean, attempts: number): boolean {\n return phase === 'empty' && !everLive && attempts < MAX_AUTO_RELOAD;\n}\n\nexport function nextStreamTracker(\n prev: StreamTracker,\n sample: StreamSample,\n): { readonly tracker: StreamTracker; readonly phase: FramePhase } {\n const signature = sample.signature;\n if (!sample.sized) {\n const misses = prev.misses + 1;\n return {\n tracker: withSignature({ misses, busyStreak: 0, quiet: 0 }, signature),\n phase: misses >= EMPTY_AFTER_MISSES ? 'empty' : 'connecting',\n };\n }\n if (sample.busy) {\n const busyStreak = prev.busyStreak + 1;\n return {\n tracker: withPreviousSignature({ misses: prev.misses, busyStreak, quiet: 0 }, prev),\n phase: busyStreak >= BUSY_EMPTY_AFTER ? 'empty' : 'connecting',\n };\n }\n const changed =\n signature !== undefined && prev.lastSignature !== undefined && signature !== prev.lastSignature;\n if (changed) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet: 0 }, signature), live: true },\n phase: 'live',\n };\n }\n if (signature === undefined) {\n return { tracker: { misses: 0, busyStreak: 0, quiet: 0, live: true }, phase: 'live' };\n }\n const quiet = prev.quiet + 1;\n if (quiet >= QUIET_ABANDON) {\n return {\n tracker: withSignature({ misses: EMPTY_AFTER_MISSES, busyStreak: 0, quiet }, signature),\n phase: 'empty',\n };\n }\n if (prev.live === true || quiet >= QUIET_TOLERANCE) {\n return {\n tracker: { ...withSignature({ misses: 0, busyStreak: 0, quiet }, signature), live: true },\n phase: 'live',\n };\n }\n return {\n tracker: withSignature({ misses: prev.misses, busyStreak: 0, quiet }, signature),\n phase: 'connecting',\n };\n}\n","import {\n Fragment,\n useCallback,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n type RefCallback,\n} from 'react';\nimport {\n Button,\n IconFullscreenOutlineRegular,\n Pill,\n StateDot,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { BH, VIDEO_SURFACE } from './tokens.js';\nimport {\n dotStateFor,\n nextExpanded,\n smoothPhase,\n statusKeyFor,\n stopKey,\n type FramePhase,\n} from './viewer-state.js';\nimport {\n LOSS_REMOUNT_AFTER,\n nextStreamTracker,\n sampleSurface,\n shouldAutoReload,\n shouldRemountLoss,\n type StreamTracker,\n} from './frame-liveness.js';\nimport type { ViewerTranslate } from './locale.js';\nexport type ViewerLifecycleEvent =\n | { readonly type: 'mount' }\n | { readonly type: 'overlay'; readonly open: boolean }\n | { readonly type: 'phase'; readonly from: FramePhase; readonly to: FramePhase }\n | { readonly type: 'auto-reload'; readonly attempt: number }\n | { readonly type: 'manual-retry' }\n | { readonly type: 'loss-remount'; readonly streak: number };\n\nexport const SPIN_STYLE = '@keyframes bc-spin { to { transform: rotate(360deg); } }';\n\nfunction useStreamPhase(onSample: (phase: FramePhase) => void): RefCallback {\n return useMountedResource(\n (iframe) => {\n let active = true;\n let tracker: StreamTracker = { misses: 0, busyStreak: 0, quiet: 0 };\n let timer: ReturnType | undefined;\n const check = (): void => {\n if (!active) return;\n let doc: Document | null = null;\n try {\n doc = iframe.contentDocument;\n } catch {\n doc = null;\n }\n const next = nextStreamTracker(tracker, sampleSurface(doc));\n tracker = next.tracker;\n onSample(next.phase);\n timer = setTimeout(check, 1000);\n };\n timer = setTimeout(check, 300);\n return () => {\n active = false;\n if (timer !== undefined) clearTimeout(timer);\n };\n },\n [onSample],\n );\n}\n\nexport function ScreenIndicator({ label = '连接中' }: { readonly label?: string }): ReactElement {\n const size = 26;\n const stroke = 2;\n const radius = (size - stroke) / 2;\n const circumference = 2 * Math.PI * radius;\n return (\n \n
\n \n \n \n \n {label}\n
\n \n );\n}\n\nfunction ScreenEmpty({\n t,\n onRetry,\n}: {\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n}): ReactElement {\n return (\n \n
\n {t('entry.noScreen')}\n \n
\n \n );\n}\n\nexport interface StreamOverlayProps {\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly hovered: boolean;\n readonly t: ViewerTranslate;\n readonly onRetry: () => void;\n readonly onOpen: () => void;\n}\n\nexport function StreamOverlay(props: StreamOverlayProps): ReactElement | null {\n const { phase, reconnecting, hovered, t, onRetry, onOpen } = props;\n if (phase === 'connecting') {\n return ;\n }\n if (phase === 'empty') {\n return ;\n }\n if (!hovered) return null;\n return (\n \n \n \n {t('entry.openFullscreen')}\n \n \n );\n}\n\ninterface ScaledFrameProps {\n readonly src: string;\n readonly title: string;\n readonly design: { width: number; height: number };\n readonly interactive: boolean;\n readonly fit?: 'width' | 'contain';\n readonly iframeRef?: RefCallback;\n}\n\nfunction ScaledFrame({\n src,\n title,\n design,\n interactive,\n fit = 'width',\n iframeRef,\n}: ScaledFrameProps): ReactElement {\n const DESIGN_WIDTH = design.width;\n const DESIGN_HEIGHT = design.height;\n const [box, setBox] = useState({ width: DESIGN_WIDTH, height: DESIGN_HEIGHT });\n const resizeResource = useMountedResource(\n (element) => {\n const frame = element.querySelector('iframe');\n if (frame !== null) {\n frame.inert = !interactive;\n if (!interactive) frame.blur();\n }\n const update = (): void =>\n setBox({ width: element.clientWidth, height: element.clientHeight });\n update();\n const observer = new ResizeObserver(update);\n observer.observe(element);\n return () => observer.disconnect();\n },\n [interactive],\n );\n\n const scale =\n fit === 'contain'\n ? Math.min(box.width / DESIGN_WIDTH, box.height / DESIGN_HEIGHT)\n : box.width / DESIGN_WIDTH;\n const offsetX = fit === 'contain' ? Math.max(0, (box.width - DESIGN_WIDTH * scale) / 2) : 0;\n const offsetY = fit === 'contain' ? Math.max(0, (box.height - DESIGN_HEIGHT * scale) / 2) : 0;\n\n return (\n \n \n \n );\n}\n\nfunction CollapseIcon(): ReactElement {\n return (\n \n \n \n \n \n \n );\n}\n\nexport interface ViewerTitleBarProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly phase: FramePhase;\n readonly reconnecting: boolean;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly interactive: boolean;\n readonly extraControls?: ReactNode;\n readonly onToggleInteractive: () => void;\n readonly onStop: () => void;\n readonly onCollapse: () => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n}\n\nfunction StopButton({\n t,\n busy,\n stopping,\n onStop,\n}: {\n readonly t: ViewerTranslate;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n}): ReactElement {\n return (\n \n );\n}\n\nexport function ViewerTitleBar(props: ViewerTitleBarProps): ReactElement {\n const {\n t,\n title,\n phase,\n reconnecting,\n busy,\n stopping,\n interactive,\n extraControls,\n onToggleInteractive,\n onStop,\n onCollapse,\n hideStop,\n hideInteractiveToggle,\n } = props;\n return (\n \n \n \n {title}\n \n {t(statusKeyFor(phase, reconnecting))}\n {interactive ? null : (\n {t('entry.watchOnly')}\n )}\n \n {extraControls}\n {hideInteractiveToggle ? null : (\n \n {t(interactive ? 'entry.interactive.disable' : 'entry.interactive.enable')}\n \n )}\n {hideStop === true ? null : (\n \n )}\n \n \n \n \n );\n}\n\nexport interface RemoteViewerProps {\n readonly t: ViewerTranslate;\n readonly title: string;\n readonly src: string;\n readonly design: { width: number; height: number };\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly onStop: () => void;\n readonly footer?: ReactNode;\n readonly notice?: ReactNode;\n readonly extraControls?: ReactNode;\n readonly onEvent?: (event: ViewerLifecycleEvent) => void;\n readonly interactive?: boolean;\n readonly onToggleInteractive?: () => void;\n readonly onDisableInteraction?: () => void;\n readonly expanded?: boolean;\n readonly onExpandedChange?: (expanded: boolean) => void;\n readonly hideStop?: boolean | undefined;\n readonly hideInteractiveToggle?: boolean | undefined;\n readonly allowFrameInput?: boolean | undefined;\n}\n\nexport function RemoteViewer({\n t,\n title,\n src,\n design,\n busy,\n stopping,\n onStop,\n footer,\n notice,\n extraControls,\n onEvent,\n interactive,\n onToggleInteractive,\n onDisableInteraction,\n expanded: controlledExpanded,\n onExpandedChange,\n hideStop,\n hideInteractiveToggle,\n allowFrameInput,\n}: RemoteViewerProps): ReactElement {\n const entryRef = useRef(null);\n const mounted = useRef(false);\n const [hovered, setHovered] = useState(false);\n const [ownExpanded, setOwnExpanded] = useState(false);\n const expanded = controlledExpanded ?? ownExpanded;\n const setExpanded = (next: boolean): void => {\n setOwnExpanded(next);\n onExpandedChange?.(next);\n };\n const [inputEnabled, setInputEnabled] = useState(false);\n const [reloadKey, setReloadKey] = useState(0);\n const [reconnecting, setReconnecting] = useState(false);\n const wasReady = useRef(false);\n const autoReloads = useRef(0);\n const lossStreak = useRef(0);\n const phaseRef = useRef('connecting');\n\n const [smooth, setSmooth] = useState<{ phase: FramePhase; streak: number }>({\n phase: 'connecting',\n streak: 0,\n });\n const resetFrame = useCallback(() => {\n phaseRef.current = 'connecting';\n setSmooth({ phase: 'connecting', streak: 0 });\n setReloadKey((key) => key + 1);\n }, []);\n const onSample = useCallback(\n (nextPhase: FramePhase): void => {\n const fromPhase = phaseRef.current;\n if (fromPhase !== nextPhase) {\n phaseRef.current = nextPhase;\n setSmooth((current) => smoothPhase(current.phase, nextPhase, current.streak));\n onEvent?.({ type: 'phase', from: fromPhase, to: nextPhase });\n }\n if (nextPhase === 'live') {\n wasReady.current = true;\n autoReloads.current = 0;\n lossStreak.current = 0;\n setReconnecting(false);\n return;\n }\n if (wasReady.current) {\n lossStreak.current += 1;\n if (shouldRemountLoss(lossStreak.current)) {\n wasReady.current = false;\n lossStreak.current = 0;\n onEvent?.({ type: 'loss-remount', streak: LOSS_REMOUNT_AFTER });\n setReconnecting(true);\n resetFrame();\n return;\n }\n }\n if (\n fromPhase !== nextPhase &&\n shouldAutoReload(nextPhase, wasReady.current, autoReloads.current)\n ) {\n autoReloads.current += 1;\n onEvent?.({ type: 'auto-reload', attempt: autoReloads.current });\n resetFrame();\n }\n },\n [resetFrame, onEvent],\n );\n const streamRef = useStreamPhase(onSample);\n const phase = smooth.phase;\n\n const reconnect = (): void => {\n onEvent?.({ type: 'manual-retry' });\n setReconnecting(true);\n autoReloads.current = 0;\n lossStreak.current = 0;\n wasReady.current = false;\n resetFrame();\n };\n const openViewer = (): void => {\n setExpanded(nextExpanded('open'));\n onEvent?.({ type: 'overlay', open: true });\n };\n const collapseViewer = (): void => {\n setInputEnabled(false);\n onDisableInteraction?.();\n setExpanded(nextExpanded('collapse'));\n onEvent?.({ type: 'overlay', open: false });\n requestAnimationFrame(() => entryRef.current?.focus());\n };\n const dialogResource = useMountedResource(\n (dialog) => {\n if (!mounted.current) {\n mounted.current = true;\n onEvent?.({ type: 'mount' });\n }\n if (!expanded) return;\n const onKey = (event: KeyboardEvent): void => {\n if (event.key !== 'Tab') return;\n const focusable = [\n ...dialog.querySelectorAll(\n 'button, [href], iframe, [tabindex]:not([tabindex=\"-1\"])',\n ),\n ].filter((element) => element.tabIndex !== -1);\n const first = focusable[0];\n const last = focusable.at(-1);\n if (first === undefined || last === undefined) return;\n const active = document.activeElement;\n if (event.shiftKey && (active === first || active === dialog)) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && active === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener('keydown', onKey);\n const previousOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n dialog.focus();\n return () => {\n document.removeEventListener('keydown', onKey);\n document.body.style.overflow = previousOverflow;\n };\n },\n [expanded, onDisableInteraction, onEvent],\n );\n\n const statusText = t(statusKeyFor(phase, reconnecting));\n const openable = phase === 'live' && !expanded;\n\n const overlay = (\n \n );\n\n const stopLabel = t(stopKey(busy, stopping));\n const rowButton = (disabled: boolean): CSSProperties => ({\n flex: 1,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n height: 28,\n padding: '0 10px',\n borderRadius: 14,\n border: `1px solid ${BH.borderL3}`,\n background: BH.buttonElevatedFill,\n color: BH.labelPrimary,\n fontSize: 12,\n ...(disabled ? { opacity: 0.4, cursor: 'not-allowed' } : { cursor: 'pointer' }),\n });\n\n return (\n \n \n {expanded ? (\n setInputEnabled((current) => !current))\n }\n onStop={onStop}\n onCollapse={collapseViewer}\n hideStop={hideStop}\n hideInteractiveToggle={hideInteractiveToggle}\n />\n ) : null}\n {notice}\n setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={() => {\n if (openable) openViewer();\n }}\n onKeyDown={(event) => {\n if (!openable) return;\n if (event.key !== 'Enter' && event.key !== ' ') return;\n event.preventDefault();\n openViewer();\n }}\n style={\n expanded\n ? { position: 'relative', flex: 1, minHeight: 0 }\n : { position: 'relative', cursor: openable ? 'pointer' : 'default' }\n }\n >\n \n {overlay}\n \n {expanded ? null : (\n \n \n {title}\n \n
\n {hideStop === true ? null : (\n \n {stopLabel}\n \n )}\n \n {t('entry.reconnect')}\n \n
\n {footer}\n
\n )}\n \n );\n}\n","export const VIEWER_EVENT_ENDPOINT = './api/computer/diagnostics/viewer';\n\nexport type { ViewerLifecycleEvent } from '../../../client/src/client/remote-viewer/index.js';\nimport type { ViewerLifecycleEvent } from '../../../client/src/client/remote-viewer/index.js';\nexport function viewerEventText(event: ViewerLifecycleEvent): string {\n switch (event.type) {\n case 'mount':\n return 'viewer mount docked';\n case 'overlay':\n return event.open ? 'viewer overlay open' : 'viewer overlay closed';\n case 'phase':\n return `viewer phase ${event.from}>${event.to}`;\n case 'auto-reload':\n return `viewer auto-reload attempt=${String(event.attempt)}`;\n case 'manual-retry':\n return 'viewer manual-retry';\n case 'loss-remount':\n return `viewer loss-remount streak=${String(event.streak)}`;\n }\n}\n\nexport async function reportViewerEvent(\n fetchImpl: typeof fetch | undefined,\n detail: string,\n): Promise {\n try {\n await (fetchImpl ?? fetch)(VIEWER_EVENT_ENDPOINT, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ detail }),\n });\n } catch {}\n}\n","import type { TranslateNS } from '@deepseek-ai/dsh-client-ui-slots';\n\nexport const LOCALE_NS = 'botharness-computer';\n\nexport const zh = {\n 'local.error.permissions': '请在 macOS 系统设置中允许所需权限。',\n 'local.error.disk': '磁盘空间不足。请释放空间后重新检查。',\n 'local.error.write': '无法写入桌面组件。请检查安装目录权限后重试。',\n 'local.error.download': '桌面组件下载失败。请检查网络后重试。',\n 'local.error.verify': '桌面组件校验失败。请重新检查以下载安装。',\n 'local.error.install': '桌面组件安装失败。请检查磁盘空间和目录权限后重试。',\n 'local.error.settings': '无法打开系统设置。请手动打开“隐私与安全性”。',\n 'local.error.target': '操作目标已变更。请确认当前目标后重试。',\n 'local.error.request': '无法连接电脑服务。请检查 DSH 是否运行后重试。',\n 'local.error.setup': '电脑检查失败。请重试;若仍失败,请查看诊断日志。',\n 'local.open.accessibility': '打开辅助功能设置',\n 'local.open.screen': '打开屏幕录制设置',\n 'local.permissions.help':\n '允许运行 DSH 的应用访问这些权限,然后完全退出并重新打开该应用,再检查一次。',\n\n 'rows.target.title': '操作目标',\n 'rows.target.description': '本 Profile 的所有 Bot 共用一个目标;切换后需要重新授权操作。',\n 'rows.target.local': '本机 Computer',\n 'rows.target.container': 'Docker Computer',\n 'local.title': '本机 Computer',\n 'local.granted': '桌面权限已授予',\n 'local.description':\n '直接操作运行 DSH 的这台电脑(macOS、Windows 或 Linux)。首次检查会安装桌面操作组件;没有显示器的 Linux 服务器会启动一个虚拟桌面。登录请在这台电脑上完成。',\n 'local.check': '检查权限',\n 'local.downloading': '正在下载桌面操作组件 {percent}%({downloaded} / {total})',\n 'local.installing': '正在安装 {packages}:{percent}%',\n 'local.missing': '这台机器缺少桌面组件:{packages}',\n 'local.missing.manual':\n '安装需要管理员密码。请在这台机器的终端里运行下面的命令;装好后这里会自动重新检查。',\n 'local.install': '一键安装',\n 'local.copy': '复制命令',\n 'local.copied': '已复制',\n 'local.checking': '正在检查…',\n 'local.chip.granted': '已授权',\n 'local.chip.checking': '检查中',\n 'local.chip.unchecked': '未检查',\n 'local.chip.failed': '需要处理',\n 'local.chip.missing': '缺少组件',\n\n 'entry.label': '电脑',\n 'entry.screen.title': '{name} 的屏幕',\n 'entry.shared':\n '这台电脑由本 profile 的所有 PersonaBot 共享:各自拥有自己的窗口,共享登录态与文件。',\n 'entry.access.title': 'Computer Access',\n 'entry.access.on': 'Computer Access 已开启',\n 'entry.access.enable': '启用 Computer Access',\n 'entry.access.disable': '停用 Computer Access',\n 'entry.access.description': '开启后,该 Bot 的会话可以操作这台电脑',\n 'entry.access.failed': '切换 Computer Access 失败',\n 'entry.access.failureHint': '授权失败',\n 'entry.start': '启动',\n 'entry.starting': '启动中…',\n 'entry.chip.setup': '需要设置',\n 'entry.chip.authorize': '待授权',\n 'entry.chip.running': '运行中',\n 'entry.chip.stopped': '未启动',\n 'entry.chip.failed': '出错',\n 'entry.stop': '停止',\n 'entry.stopping': '停止中…',\n 'entry.reconnect': '重新连接',\n 'entry.connecting': '连接中',\n 'entry.reconnecting': '正在重新连接',\n 'entry.live': '已连接',\n 'entry.noScreen': '暂无画面',\n 'entry.openFullscreen': '打开大屏',\n 'entry.watchOnly': '观看模式 · 开启交互后可操作键盘鼠标',\n 'entry.interactive.enable': '开启交互',\n 'entry.interactive.disable': '停止交互',\n 'entry.collapseFullscreen': '收起全屏',\n 'entry.recentLogs': '近期动态',\n 'entry.recentLogs.empty': '暂无运行记录',\n 'entry.recentLogs.failed': '读取运行记录失败',\n 'entry.authorize': '授权并启动',\n 'entry.cancel': '取消',\n 'entry.remember': '本次会话内不再询问',\n 'entry.authorizeIntro': '启动会在你的机器上执行:',\n 'entry.authorize.probe': '检测本机容器运行时;缺失时只给安装引导,不会自动安装',\n 'entry.authorize.volume': '创建/复用持久卷(登录态与文件保留在这台电脑上)',\n 'entry.authorize.pull': '拉取镜像(首次约 1.2 GB 网络流量)并创建容器',\n 'entry.authorize.bind': '把 Web VNC 绑定到 127.0.0.1 的本地端口,仅本机可访问',\n 'entry.authorize.storage': '存储位置:{target}',\n 'entry.authorize.storageBindRisk':\n 'Bind mount 把浏览器 profile(含 SQLite 与缓存)直接落在宿主目录;在 Docker Desktop / Colima 等虚拟文件共享下文件锁不可靠,可能损坏数据,仅建议 Linux 原生 Docker 使用。详见 Docker 文档:https://docs.docker.com/storage/bind-mounts/',\n 'entry.phase.pulling': '正在拉取镜像',\n 'entry.phase.starting': '正在启动',\n 'entry.phase.stopping': '正在停止',\n 'entry.phase.exporting': '正在导出',\n 'entry.phase.importing': '正在导入',\n 'entry.phase.working': '处理中',\n 'entry.wait': '请稍候',\n 'entry.elapsed': '已用时 {seconds}s',\n 'entry.updated': '最后更新 {seconds}s 前',\n 'entry.setup':\n '未检测到容器运行时。任选其一安装后重试:\\n\\nColima(推荐,MIT):\\n brew install colima docker\\n brew services start colima\\n\\n或 Docker Desktop:https://www.docker.com/products/docker-desktop/',\n 'section.title': '电脑控制',\n 'section.description': '操作目标与 Computer 权限',\n 'rows.exportDir.title': 'Computer 导出目录',\n 'rows.exportDir.current': '当前:{dir}',\n 'rows.exportDir.empty': '未配置时使用默认导出目录',\n 'rows.exportDir.pick': '选择…',\n 'rows.exportDir.manual': '手动输入路径',\n 'rows.exportDir.save': '保存',\n 'rows.exportDir.saving': '正在保存…',\n 'rows.exportDir.saved': '导出目录已保存:{dir}',\n 'rows.exportDir.needsAbsolute': '路径必须是绝对路径,例如 /path/to/exports',\n 'rows.exportDir.saveRejected': 'Host 未接受该导出目录,已恢复原值;请重试',\n 'rows.exportDir.open': '打开目录',\n 'rows.idle.title': '空闲停止',\n 'rows.idle.description': '无观看者时 Computer 自动停止的等待时间',\n 'rows.idle.minutes': '{minutes} 分钟',\n 'rows.autoAllow.title': '自动允许 Computer 操作',\n 'rows.autoAllow.description': '打开后,PersonaBot 在 Computer 上的操作不再逐会话询问;默认关闭。',\n 'rows.exportSection.title': '导出',\n 'rows.exportSection.description': '把 Computer 的持久存储打包成一个归档',\n 'rows.importSection.title': '导入',\n 'rows.importSection.description': '从归档恢复 Computer',\n 'rows.export': '导出',\n 'rows.exporting': '导出中…',\n 'rows.download': '下载',\n 'rows.exportTo': '导出到…',\n 'rows.authorizeExport': '授权并导出',\n 'rows.exportTarget': '导出至:{dir}',\n 'rows.import': '导入…',\n 'rows.importing': '导入中…',\n 'rows.chooseFile': '选择归档文件…',\n 'rows.cancelImport': '取消导入',\n 'rows.authorizeImportConfirm': '授权并导入',\n 'rows.exported': '已导出:{archive}',\n 'rows.exportedDone': '导出完成。',\n 'rows.imported': '已从 {file} 导入并重启 Computer。',\n 'rows.noArchives': '该目录还没有归档;先导出一次。',\n 'rows.noSettings': '设置服务不可用:可以导出/导入,但无法修改目录与空闲时间。',\n 'rows.pickerFallback': '目录选择器不可用;可手动输入路径,或继续使用当前目录:{dir}',\n} as const;\n\nexport const en: Record = {\n 'local.error.permissions': 'Allow the required permissions in macOS System Settings.',\n 'local.error.disk': 'Not enough disk space. Free some space and check again.',\n 'local.error.write': 'Could not write the desktop helper. Check folder permissions and retry.',\n 'local.error.download': 'Could not download the desktop helper. Check your connection and retry.',\n 'local.error.verify': 'Desktop helper verification failed. Check again to reinstall it.',\n 'local.error.install':\n 'Could not install the desktop helper. Check disk space and folder permissions, then retry.',\n 'local.error.settings': 'Could not open System Settings. Open Privacy & Security manually.',\n 'local.error.target': 'The Computer target changed. Check the selected target and retry.',\n 'local.error.request':\n 'Could not reach the computer service. Check that DSH is running and retry.',\n 'local.error.setup':\n 'Computer setup failed. Retry; if it still fails, check the diagnostic logs.',\n 'local.open.accessibility': 'Open Accessibility settings',\n 'local.open.screen': 'Open Screen Recording settings',\n 'local.permissions.help':\n 'Allow these permissions for the app running DSH, fully quit and reopen that app, then check again.',\n\n 'rows.target.title': 'Computer Target',\n 'rows.target.description':\n 'All Bots in this Profile share one target. Switching requires new action authorization.',\n 'rows.target.local': 'Local Computer',\n 'rows.target.container': 'Docker Computer',\n 'local.title': 'Local Computer',\n 'local.granted': 'Desktop permissions granted',\n 'local.description':\n 'Uses the computer running DSH (macOS, Windows or Linux). The first check installs the required desktop helper; a Linux server without a display gets a virtual one. Complete logins on this computer.',\n 'local.check': 'Check permissions',\n 'local.downloading': 'Downloading the desktop helper {percent}% ({downloaded} / {total})',\n 'local.installing': 'Installing {packages}: {percent}%',\n 'local.missing': 'This machine is missing desktop packages: {packages}',\n 'local.missing.manual':\n 'Installing needs an administrator password. Run this command in a terminal on this machine; this card checks again on its own once it is done.',\n 'local.install': 'Install',\n 'local.copy': 'Copy command',\n 'local.copied': 'Copied',\n 'local.checking': 'Checking…',\n 'local.chip.granted': 'Granted',\n 'local.chip.checking': 'Checking',\n 'local.chip.unchecked': 'Not checked',\n 'local.chip.failed': 'Needs attention',\n 'local.chip.missing': 'Missing parts',\n\n 'entry.label': 'Computer',\n 'entry.screen.title': \"{name}'s screen\",\n 'entry.shared':\n 'This Computer is shared by every PersonaBot in the profile: each keeps its own window and they share logins and files.',\n 'entry.access.title': 'Computer Access',\n 'entry.access.on': 'Computer Access is on',\n 'entry.access.enable': 'Enable Computer Access',\n 'entry.access.disable': 'Disable Computer Access',\n 'entry.access.description': \"This PersonaBot's sessions may act on the Computer\",\n 'entry.access.failed': 'Could not change Computer Access',\n 'entry.access.failureHint': 'Access failed',\n 'entry.start': 'Start',\n 'entry.starting': 'Starting…',\n 'entry.chip.setup': 'Needs setup',\n 'entry.chip.authorize': 'Needs approval',\n 'entry.chip.running': 'Running',\n 'entry.chip.stopped': 'Stopped',\n 'entry.chip.failed': 'Error',\n 'entry.stop': 'Stop',\n 'entry.stopping': 'Stopping…',\n 'entry.reconnect': 'Reconnect',\n 'entry.connecting': 'Connecting',\n 'entry.reconnecting': 'Reconnecting',\n 'entry.live': 'Connected',\n 'entry.noScreen': 'No picture',\n 'entry.openFullscreen': 'Open fullscreen',\n 'entry.watchOnly': 'Watch-only — enable input to use keyboard and mouse',\n 'entry.interactive.enable': 'Enable input',\n 'entry.interactive.disable': 'Stop input',\n 'entry.collapseFullscreen': 'Leave fullscreen',\n 'entry.recentLogs': 'Recent activity',\n 'entry.recentLogs.empty': 'No operational records yet',\n 'entry.recentLogs.failed': 'Could not load operational records',\n 'entry.authorize': 'Authorize and start',\n 'entry.cancel': 'Cancel',\n 'entry.remember': \"Don't ask again in this session\",\n 'entry.authorizeIntro': 'Starting runs these steps on your machine:',\n 'entry.authorize.probe':\n 'Detect the local container runtime; a missing one only gets setup guidance, never an automatic install',\n 'entry.authorize.volume':\n 'Create or reuse the persistent volume (logins and files stay on this Computer)',\n 'entry.authorize.pull': 'Pull the image (about 1.2 GB the first time) and create the container',\n 'entry.authorize.bind':\n 'Bind the web VNC endpoint to a loopback port, reachable only from this machine',\n 'entry.authorize.storage': 'Storage location: {target}',\n 'entry.authorize.storageBindRisk':\n 'A bind mount places the browser profile (including SQLite and caches) directly on a host directory; file locking over virtual filesystem sharing (Docker Desktop, Colima, …) is unreliable and can corrupt data — recommended only for native Linux Docker. See the Docker docs: https://docs.docker.com/storage/bind-mounts/',\n 'entry.phase.pulling': 'Pulling the image',\n 'entry.phase.starting': 'Starting',\n 'entry.phase.stopping': 'Stopping',\n 'entry.phase.exporting': 'Exporting',\n 'entry.phase.importing': 'Importing',\n 'entry.phase.working': 'Working',\n 'entry.wait': 'Please wait',\n 'entry.elapsed': 'Elapsed {seconds}s',\n 'entry.updated': 'Last update {seconds}s ago',\n 'entry.setup':\n 'No container runtime found. Install one of these, then retry:\\n\\nColima (recommended, MIT):\\n brew install colima docker\\n brew services start colima\\n\\nOr Docker Desktop: https://www.docker.com/products/docker-desktop/',\n 'section.title': 'Computer',\n 'section.description': 'Computer target and permissions',\n 'rows.exportDir.title': 'Computer export directory',\n 'rows.exportDir.current': 'Current: {dir}',\n 'rows.exportDir.empty': 'Uses the default export directory when none is set',\n 'rows.exportDir.pick': 'Choose…',\n 'rows.exportDir.manual': 'Type a path',\n 'rows.exportDir.save': 'Save',\n 'rows.exportDir.saving': 'Saving…',\n 'rows.exportDir.saved': 'Export directory saved: {dir}',\n 'rows.exportDir.needsAbsolute': 'Path must be absolute, e.g. /path/to/exports',\n 'rows.exportDir.saveRejected':\n 'The Host did not accept the export directory — the previous value was restored; try again',\n 'rows.exportDir.open': 'Open folder',\n 'rows.idle.title': 'Idle stop',\n 'rows.idle.description': 'How long the Computer waits without viewers before stopping',\n 'rows.idle.minutes': '{minutes} min',\n 'rows.autoAllow.title': 'Auto-allow Computer actions',\n 'rows.autoAllow.description':\n 'When on, PersonaBot actions on the Computer run without a per-session approval; off by default.',\n 'rows.exportSection.title': 'Export',\n 'rows.exportSection.description': \"Pack the Computer's persistent store into one archive\",\n 'rows.importSection.title': 'Import',\n 'rows.importSection.description': 'Restore the Computer from an archive',\n 'rows.export': 'Export',\n 'rows.exporting': 'Exporting…',\n 'rows.download': 'Download',\n 'rows.exportTo': 'Export to…',\n 'rows.authorizeExport': 'Authorize and export',\n 'rows.exportTarget': 'Export to: {dir}',\n 'rows.import': 'Import…',\n 'rows.importing': 'Importing…',\n 'rows.chooseFile': 'Choose archive file…',\n 'rows.cancelImport': 'Cancel import',\n 'rows.authorizeImportConfirm': 'Authorize and import',\n 'rows.exported': 'Exported: {archive}',\n 'rows.exportedDone': 'Export complete.',\n 'rows.imported': 'Imported {file} and restarted the Computer.',\n 'rows.noArchives': 'No archives in that directory yet — export once first.',\n 'rows.noSettings':\n 'Settings service unavailable: export and import still work, but the directory and idle time cannot be changed.',\n 'rows.pickerFallback':\n 'Directory picker unavailable — type a path or use the current directory: {dir}',\n};\n\nexport type ComputerKey = keyof typeof zh;\n\nexport const PHASE_LABEL: Partial> = {\n pulling: 'entry.phase.pulling',\n starting: 'entry.phase.starting',\n stopping: 'entry.phase.stopping',\n exporting: 'entry.phase.exporting',\n importing: 'entry.phase.importing',\n};\n\nexport type ComputerTranslate = TranslateNS;\n\ndeclare module '@deepseek-ai/dsh-client-ui-slots' {\n interface LocaleNamespaceMap {\n 'botharness-computer': ComputerKey;\n }\n}\n","import {\n createContext,\n type Context,\n useContext,\n type ComponentProps,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { Tooltip as PrimitiveTooltip } from '@deepseek-ai/dsh-client-ui-primitives';\n\nconst shared = globalThis as typeof globalThis & Record | undefined>;\nconst InstantTooltips = (shared[Symbol.for('botharness.instant-tooltips')] ??=\n createContext(false));\n\nexport function InstantTooltipScope({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n\nexport function Tooltip(props: ComponentProps): ReactElement {\n const instant = useContext(InstantTooltips);\n return instant ? (\n \n ) : (\n \n );\n}\n","import type { ReactElement, ReactNode, Ref } from 'react';\n\nimport { ChannelSidebarIcon } from './channel-sidebar-icon.js';\n\nexport function SidebarCardList({\n label,\n className,\n listRef,\n flush = false,\n children,\n}: {\n label?: string | undefined;\n className?: string | undefined;\n listRef?: Ref | undefined;\n flush?: boolean | undefined;\n children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n \n );\n}\n\nexport interface SidebarCardRowProps {\n icon?: string | undefined;\n leading?: ReactNode | undefined;\n selection?: { checked: boolean; multiple?: boolean } | undefined;\n iconLabel?: string | undefined;\n title: ReactNode;\n titleClassName?: string | undefined;\n badge?: ReactNode | undefined;\n summary?: ReactNode | undefined;\n flipKey?: string | undefined;\n hint?: string | undefined;\n chips?: ReactNode | undefined;\n meta?: ReactNode | undefined;\n trailing?: ReactNode | undefined;\n detail?: ReactNode | undefined;\n onClick?: () => void | undefined;\n disabled?: boolean | undefined;\n muted?: boolean | undefined;\n mainClassName?: string | undefined;\n dialog?: boolean | undefined;\n expanded?: boolean | undefined;\n controls?: string | undefined;\n state?: string | undefined;\n anchor?: string | undefined;\n}\n\nexport function SidebarCardRow({\n icon,\n leading,\n iconLabel,\n selection,\n title,\n titleClassName,\n badge,\n summary,\n flipKey,\n hint,\n chips,\n meta,\n trailing,\n detail,\n onClick,\n disabled,\n muted,\n mainClassName,\n dialog,\n expanded,\n controls,\n state,\n anchor,\n}: SidebarCardRowProps): ReactElement {\n const body = (\n <>\n {leading === undefined ? null : {leading}}\n {icon === undefined ? null : (\n \n \n
\n )}\n \n {badge === undefined ? (\n \n {title}\n \n ) : (\n \n \n {title}\n \n {badge}\n
\n )}\n {summary === undefined ? null : {summary}}\n {chips === undefined ? null : {chips}}\n {meta === undefined ? null : {meta}}\n \n \n );\n const className = mainClassName === undefined ? 'bh-card-main' : 'bh-card-main ' + mainClassName;\n return (\n \n
\n {selection?.multiple === true ? (\n \n ) : onClick === undefined ? (\n
\n {body}\n
\n ) : (\n \n {body}\n \n )}\n {trailing === undefined ? null : {trailing}}\n
\n {detail === undefined ? null : (\n
\n {detail}\n
\n )}\n \n );\n}\n","import type { ComputerTarget } from './target.js';\n\nexport const COMPUTER_SETTINGS_NAMESPACE = 'botharness-computer';\n\nexport const COMPUTER_EXPORT_DIR_FIELD = 'exportDir';\n\nexport const COMPUTER_IDLE_STOP_FIELD = 'idleStopMinutes';\n\nexport const COMPUTER_AUTO_ALLOW_FIELD = 'autoAllowActions';\n\nexport const COMPUTER_TARGET_FIELD = 'target';\n\nexport interface ComputerSettings {\n target?: ComputerTarget;\n exportDir: string;\n idleStopMinutes: number;\n autoAllowActions: boolean;\n}\n","import { useCallback, useRef, type DependencyList, type RefCallback } from 'react';\n\nexport function useMountedResource(\n start: (node: T) => void | (() => void),\n dependencies: DependencyList,\n): RefCallback {\n const cleanup = useRef<(() => void) | undefined>(undefined);\n return useCallback((node: T | null) => {\n cleanup.current?.();\n cleanup.current = undefined;\n if (node !== null) cleanup.current = start(node) || undefined;\n }, dependencies);\n}\n","import type { ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { color, space, text } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n note: {\n margin: 0,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n inset: { paddingBlock: space.x2, paddingInline: space.x2 },\n muted: { color: color.muted },\n subtle: { color: color.subtle },\n danger: { color: color.danger },\n success: { color: color.success },\n warning: { color: color.warning },\n});\n\nexport type NoteTone = 'muted' | 'subtle' | 'danger' | 'success' | 'warning';\n\nexport function Note({\n tone = 'muted',\n inset = false,\n children,\n}: {\n readonly tone?: NoteTone;\n readonly inset?: boolean;\n readonly children: ReactNode;\n}): ReactElement {\n return (\n \n {children}\n

\n );\n}\n","import type { ButtonHTMLAttributes, InputHTMLAttributes, ReactElement, ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { actionColor, border, color, radius, size, space, text } from './tokens.stylex.js';\n\nexport const pillStyles = stylex.create({\n pill: {\n display: 'inline-flex',\n alignItems: 'center',\n gap: space.x2,\n maxWidth: '100%',\n height: size.icon,\n paddingInline: `${space.x4} ${space.x3}`,\n borderWidth: 0,\n borderRadius: radius.sm,\n backgroundColor: { default: actionColor.secondary, ':hover': actionColor.hover },\n color: color.fg,\n fontFamily: 'inherit',\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n whiteSpace: 'nowrap',\n cursor: { default: 'pointer', ':disabled': 'default' },\n opacity: { default: 1, ':disabled': 0.5 },\n outline: { default: 'none', ':focus-visible': `${border.focus} solid ${color.accent}` },\n outlineOffset: '1px',\n },\n});\n\nexport function PillButton({\n children,\n ...rest\n}: { readonly children: ReactNode } & Omit<\n ButtonHTMLAttributes,\n 'className' | 'style' | 'type' | 'children'\n>): ReactElement {\n return (\n \n );\n}\n\nexport function PillFileButton({\n children,\n ...input\n}: { readonly children: ReactNode } & Omit<\n InputHTMLAttributes,\n 'className' | 'style' | 'type' | 'children' | 'hidden'\n>): ReactElement {\n return (\n \n );\n}\n","import { BUBBLE_SURFACES, readable } from './bot-name-color.js';\nimport { space } from './ds/tokens.stylex.js';\nimport { panelMaterials, validTargetId } from './appearance-panels.js';\nimport { appearanceMaterials } from './appearance-materials.js';\nimport {\n APPEARANCE_KEY,\n APPEARANCE_PRIMARY,\n Appearance,\n type AppearanceSnapshot,\n} from './appearance.js';\nimport { NATIVE_LIGHT, NATIVE_DARK } from './appearance-native-tokens.js';\nexport const APPEARANCE_CLASS = 'bh-appearance-scope';\nexport function appearanceCss(snapshot: AppearanceSnapshot): string {\n const { config, mode } = snapshot;\n const selected = config.modes[mode];\n const primary = selected.primary ?? APPEARANCE_PRIMARY[selected.preset][mode];\n const materials = appearanceMaterials(selected, mode);\n const tokens: Record = {\n ...NATIVE_LIGHT,\n ...(mode === 'dark' ? NATIVE_DARK : {}),\n };\n for (const part of ['header', 'body'] as const) {\n const material = materials[part];\n tokens[`--bh-global-${part}-fill`] =\n `color-mix(in srgb, ${material.color} ${material.opacity}%, transparent)`;\n tokens[`--bh-global-${part}-blur`] = `${material.blur}px`;\n }\n tokens['--dsw-alias-state-business-primary'] = primary;\n tokens['--dsw-alias-link'] = readable(primary, BUBBLE_SURFACES[mode].surface, 4.6);\n tokens['--dsw-alias-state-business-secondary'] =\n `color-mix(in srgb, ${primary} 45%, transparent)`;\n tokens['--dsw-alias-state-business-tertiary'] = `color-mix(in srgb, ${primary} 14%, transparent)`;\n tokens['--dsw-specific-sidebar-nav-item-active'] =\n `color-mix(in srgb, ${primary} 14%, transparent)`;\n return `.bh-root,.bh-workspace-mount[data-workspace-enabled],.${APPEARANCE_CLASS},[data-bh-appearance-owned]{color:var(--dsw-alias-label-primary);color-scheme:${mode};${Object.entries(\n tokens,\n )\n .map(([k, v]) => `${k}:${v}`)\n .join(\n ';',\n )}}:root [data-bh-appearance-owned][data-menu-material],:root .${APPEARANCE_CLASS}[data-menu-material],:root .${APPEARANCE_CLASS} [data-menu-material]{--dsw-elevation-stroke-color:var(--dsw-alias-border-${mode === 'dark' ? 'l3' : 'l4'})}${materialCss()}${panelCss(snapshot)}`;\n}\n\nexport function mountAppearance(owner: Appearance): () => void {\n const style = document.createElement('style');\n style.dataset.plugin = '@botharness/ui';\n style.dataset.pluginCss = '@botharness/ui/appearance';\n const update = () => {\n style.textContent = appearanceCss(owner.getSnapshot());\n style.dataset.bhAppearance = owner.getSnapshot().mode;\n document.documentElement.dataset.bhAppearance = owner.getSnapshot().mode;\n };\n const media = window.matchMedia('(prefers-color-scheme: dark)');\n const onStorage = (event: StorageEvent) => {\n if (event.key === APPEARANCE_KEY || event.key === null) owner.refresh();\n };\n update();\n document.head.appendChild(style);\n const off = owner.subscribe(update);\n media.addEventListener('change', owner.refresh);\n window.addEventListener('storage', onStorage);\n return () => {\n off();\n style.remove();\n delete document.documentElement.dataset.bhAppearance;\n media.removeEventListener('change', owner.refresh);\n window.removeEventListener('storage', onStorage);\n };\n}\n\nfunction materialCss(): string {\n const scope = ':root .bh-workspace-mount[data-workspace-enabled]';\n return `\n${scope} .bh-dock-theme { --dv-group-view-background-color:transparent; --dv-tabs-and-actions-container-background-color:transparent; --dv-activegroup-visiblepanel-tab-background-color:transparent; --dv-inactivegroup-visiblepanel-tab-background-color:transparent; --dv-activegroup-hiddenpanel-tab-background-color:transparent; --dv-inactivegroup-hiddenpanel-tab-background-color:transparent; }\n${scope} .bh-root, ${scope} .bh-workspace-rail { background:transparent; }\n${scope} .dv-tabs-and-actions-container, ${scope} .bh-channel-session-header { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} [data-appearance-header] { background:var(--bh-global-header-fill); backdrop-filter:blur(var(--bh-global-header-blur)); }\n${scope} .bh-channel-subpanel-body { display:flex; flex-direction:column; flex:1; min-height:0; min-width:0; overflow:auto; }\n${scope} .bh-channel-subpanel-body > section { flex:1; min-height:0; }\n${scope} .bh-memory-commit-view { display:flex; flex-direction:column; padding:0; }\n${scope} .bh-memory-commit-header { margin:0; flex-shrink:0; }\n${scope} .bh-memory-detail-body { flex:1; padding:${space.x3} ${space.x4}; }\n${scope} [data-appearance-body], ${scope} .dv-content-container { background:var(--bh-global-body-fill); backdrop-filter:blur(var(--bh-global-body-blur)); }\n`;\n}\n\nfunction panelCss({ config, mode }: AppearanceSnapshot): string {\n return Object.keys(config.modes[mode].panels ?? {})\n .filter(validTargetId)\n .map((id) => {\n const material = panelMaterials(config.modes[mode], mode, id);\n const scope = `:root .bh-workspace-mount[data-workspace-enabled] .dv-groupview:has(> .dv-tabs-and-actions-container .dv-active-tab [data-dock-header=\"${id.slice(5)}\"])`;\n return (['header', 'body'] as const)\n .map(\n (part) =>\n `${scope} > ${part === 'header' ? '.dv-tabs-and-actions-container' : '.dv-content-container'}, :root .bh-workspace-mount[data-workspace-enabled] [data-appearance-${part}=\"${id.slice(5)}\"] { background:color-mix(in srgb, ${material[part].color} ${material[part].opacity}%, transparent); backdrop-filter:blur(${material[part].blur}px); }`,\n )\n .join('');\n })\n .join('');\n}\n","import { Modal as NativeModal, Menu as NativeMenu } from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { ComponentProps, RefObject } from 'react';\nimport { APPEARANCE_CLASS } from './appearance-scope.js';\nexport function Modal(props: ComponentProps) {\n return (\n \n );\n}\ntype MenuProps = Omit, 'getAnchorRect'> & {\n anchorRef?: RefObject;\n};\n\nexport function Menu(props: MenuProps) {\n const { anchorRef } = props;\n const legacyAnchor =\n anchorRef === undefined\n ? {}\n : {\n getAnchorRect: () => anchorRef.current?.getBoundingClientRect() ?? null,\n };\n return (\n \n );\n}\n","import { Menu } from '../appearance-primitives.js';\nimport type { ComponentProps } from 'react';\nimport { createPortal } from 'react-dom';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { useMountedResource } from '../mounted-resource.js';\nimport { border, space } from './tokens.stylex.js';\n\nexport interface MenuPoint {\n readonly x: number;\n readonly y: number;\n}\n\nexport function pointerMenuPosition(\n point: MenuPoint,\n width: number,\n height: number,\n viewport: { width: number; height: number; top: number },\n) {\n const margin = Number.parseFloat(space.x4);\n return {\n x: Math.max(margin, Math.min(point.x, viewport.width - width - margin)),\n y: Math.max(\n Math.max(margin, viewport.top),\n Math.min(point.y, viewport.height - height - margin),\n ),\n };\n}\n\ntype PointerMenuProps = Omit<\n ComponentProps,\n 'open' | 'portal' | 'anchorRef' | 'side' | 'align' | 'className'\n> & { point: MenuPoint; container?: Element; align?: 'start' | 'end' };\n\nexport function PointerMenu({\n point,\n container = document.body,\n align = 'start',\n ...props\n}: PointerMenuProps) {\n const mount = useMountedResource(\n (node) => {\n const menu = node.querySelector('[role=\"menu\"]');\n if (!menu) return;\n const originalMaxWidth = Number.parseFloat(getComputedStyle(menu).maxWidth);\n const originalMinWidth = Number.parseFloat(getComputedStyle(menu).minWidth);\n const place = () => {\n const scale = node.getBoundingClientRect();\n if (!scale.width || !scale.height) return;\n const cssZoom =\n 'currentCSSZoom' in node && typeof node.currentCSSZoom === 'number'\n ? node.currentCSSZoom\n : undefined;\n const scaleX = cssZoom ?? scale.width;\n const scaleY = cssZoom ?? scale.height;\n const root = document.documentElement;\n const clearance = root.hasAttribute('data-fullscreen')\n ? 0\n : Number.parseFloat(\n getComputedStyle(root).getPropertyValue('--dsh-frame-top-clearance'),\n ) || 0;\n const margin = Number.parseFloat(space.x4);\n const availableWidth = Math.max(0, innerWidth - 2 * margin) / scaleX;\n menu.style.minWidth = `${Math.min(originalMinWidth || 0, availableWidth)}px`;\n menu.style.maxWidth = `${Math.min(originalMaxWidth || Infinity, availableWidth)}px`;\n menu.style.maxHeight = `${Math.max(0, innerHeight - Math.max(margin, clearance) - margin) / scaleY}px`;\n const box = menu.getBoundingClientRect();\n const desired = pointerMenuPosition(\n { x: align === 'end' ? point.x - box.width : point.x, y: point.y },\n box.width,\n box.height,\n {\n width: innerWidth,\n height: innerHeight,\n top: clearance,\n },\n );\n const left = Number.parseFloat(node.style.left) || 0;\n const top = Number.parseFloat(node.style.top) || 0;\n node.style.left = `${left + (desired.x - box.left) / scaleX}px`;\n node.style.top = `${top + (desired.y - box.top) / scaleY}px`;\n };\n place();\n const observer =\n typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n observer?.observe(menu);\n observer?.observe(node);\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n observer?.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [point.x, point.y, align],\n );\n return createPortal(\n \n \n ,\n container,\n );\n}\n\nconst styles = stylex.create({\n origin: {\n position: 'fixed',\n left: 0,\n top: 0,\n width: border.hairline,\n height: border.hairline,\n zIndex: 1100,\n pointerEvents: 'none',\n },\n menu: { pointerEvents: 'auto' },\n});\n","import { PointerMenu, type MenuPoint } from './pointer-menu.js';\nimport { useMountedResource } from '../mounted-resource.js';\nimport { useRef, useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { IconChevronDownOutlineRegular } from '@deepseek-ai/dsh-client-ui-primitives';\n\nimport { pillStyles } from './pill-button.js';\nimport { color, space } from './tokens.stylex.js';\n\nconst styles = stylex.create({\n label: {\n minWidth: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n});\n\nexport interface SelectOption {\n readonly value: Value;\n readonly label: ReactNode;\n}\n\nexport interface SelectProps {\n readonly label: string;\n readonly value: Value;\n readonly options: readonly SelectOption[];\n readonly onChange: (value: Value) => void;\n readonly disabled?: boolean;\n readonly align?: 'start' | 'end';\n readonly autoFocus?: boolean;\n readonly reselect?: boolean;\n}\n\nexport function Select({\n label,\n value,\n options,\n onChange,\n disabled = false,\n align = 'end',\n autoFocus = false,\n reselect = false,\n}: SelectProps): ReactElement {\n const [open, setOpen] = useState(false);\n const [point, setPoint] = useState();\n const trigger = useRef(null);\n const active = open && !disabled;\n const mount = useMountedResource(\n (node) => {\n trigger.current = node;\n if (!active)\n return () => {\n trigger.current = null;\n };\n const place = () => {\n const rect = node.getBoundingClientRect();\n const scale = node.offsetHeight > 0 ? rect.height / node.offsetHeight : 1;\n const next = {\n x: align === 'end' ? rect.right : rect.left,\n y: rect.bottom + Number.parseFloat(space.x2) * scale,\n };\n setPoint((previous) => (previous?.x === next.x && previous.y === next.y ? previous : next));\n };\n place();\n const resize = typeof ResizeObserver === 'undefined' ? undefined : new ResizeObserver(place);\n resize?.observe(node);\n resize?.observe(document.documentElement);\n const observer = new MutationObserver(place);\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: ['style', 'data-fullscreen'],\n });\n window.addEventListener('resize', place);\n window.addEventListener('scroll', place, true);\n return () => {\n trigger.current = null;\n resize?.disconnect();\n observer.disconnect();\n window.removeEventListener('resize', place);\n window.removeEventListener('scroll', place, true);\n };\n },\n [active, align],\n );\n const close = () => {\n const button = trigger.current;\n const menu = document.activeElement?.closest('[data-pointer-menu]');\n setOpen(false);\n setPoint(undefined);\n queueMicrotask(() => {\n const focused = document.activeElement;\n if (\n button?.isConnected &&\n !button.disabled &&\n (focused === document.body || (focused !== null && menu?.contains(focused)))\n )\n button.focus({ preventScroll: true });\n });\n };\n const current = options.find((option) => option.value === value);\n return (\n <>\n {\n if (active) event.stopPropagation();\n }}\n onClick={() => {\n if (active) close();\n else setOpen(true);\n }}\n {...stylex.props(pillStyles.pill)}\n >\n {current?.label}\n \n \n \n \n {active && point ? (\n }\n items={options.map((option) => ({ id: option.value, label: option.label }))}\n selectedId={value}\n onSelect={(id) => {\n close();\n const next = options.find((option) => option.value === id);\n if (next !== undefined && (reselect || next.value !== value)) onChange(next.value);\n }}\n onClose={close}\n />\n ) : null}\n \n );\n}\n","import { useId, type ReactElement, type ReactNode, type Ref } from 'react';\nimport * as stylex from '@stylexjs/stylex';\n\nimport { border, color, space, text } from './tokens.stylex.js';\n\nconst NARROW = '@media (max-width: 648px)';\nconst COMPACT = '@container bh-settings (max-width: 480px)';\n\nconst styles = stylex.create({\n rows: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n },\n section: {\n display: 'flex',\n flexDirection: 'column',\n minWidth: 0,\n paddingTop: { default: space.x5, ':first-child': 0 },\n },\n sectionHead: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n paddingBottom: space.x2,\n },\n sectionTitle: {\n margin: 0,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n fontWeight: text.strong,\n },\n row: {\n display: 'flex',\n alignItems: { default: 'center', [NARROW]: 'stretch', [COMPACT]: 'stretch' },\n flexDirection: { default: 'row', [NARROW]: 'column', [COMPACT]: 'column' },\n gap: { default: space.x4, [NARROW]: space.x3, [COMPACT]: space.x3 },\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: { default: color.divider, ':last-child': 'transparent' },\n },\n text: {\n display: 'flex',\n flexDirection: 'column',\n gap: space.x1,\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n title: {\n color: color.fg,\n fontSize: text.titleSize,\n lineHeight: text.titleLine,\n fontWeight: text.strong,\n overflowWrap: 'anywhere',\n },\n description: {\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n overflowWrap: 'anywhere',\n },\n control: {\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n justifyContent: { default: 'flex-end', [NARROW]: 'flex-start', [COMPACT]: 'flex-start' },\n gap: space.x3,\n flexShrink: 0,\n minWidth: 0,\n maxWidth: { default: '60%', [NARROW]: '100%', [COMPACT]: '100%' },\n },\n value: {\n color: color.muted,\n fontSize: text.bodySize,\n lineHeight: text.bodyLine,\n textAlign: 'end',\n overflowWrap: 'anywhere',\n },\n});\n\nexport function SettingsRows({\n children,\n rootRef,\n}: {\n readonly children: ReactNode;\n readonly rootRef?: Ref | undefined;\n}): ReactElement {\n return (\n
\n {children}\n
\n );\n}\n\nexport interface SettingsSectionProps {\n readonly title?: ReactNode;\n readonly description?: ReactNode;\n readonly children: ReactNode;\n}\n\nexport function SettingsSection({\n title,\n description,\n children,\n}: SettingsSectionProps): ReactElement {\n const id = useId();\n return (\n \n {title === undefined ? null : (\n
\n

\n {title}\n

\n {description === undefined ? null : (\n
{description}
\n )}\n
\n )}\n {children}\n \n );\n}\n\nexport interface SettingsRowProps {\n readonly title: ReactNode;\n readonly description?: ReactNode;\n readonly control?: ReactNode;\n readonly children?: ReactNode;\n readonly rootRef?: Ref | undefined;\n readonly data?: Readonly>;\n}\n\nexport function SettingsRow({\n title,\n description,\n control,\n children,\n rootRef,\n data,\n}: SettingsRowProps): ReactElement {\n const id = useId();\n const titleId = `${id}-title`;\n const descriptionId = `${id}-description`;\n return (\n \n
\n
\n {title}\n
\n {description === undefined ? null : (\n
\n {description}\n
\n )}\n {children}\n
\n {control === undefined ? null :
{control}
}\n \n );\n}\n\nexport function SettingsValue({ children }: { readonly children: ReactNode }): ReactElement {\n return {children};\n}\n","import type { ComputerTranslate } from './locale.js';\n\nexport function localSetupFailure(code: string | undefined, t: ComputerTranslate): string {\n switch (code) {\n case 'permissions-required':\n return t('local.error.permissions');\n case 'disk-full':\n return t('local.error.disk');\n case 'runtime-write-refused':\n return t('local.error.write');\n case 'download-failed':\n return t('local.error.download');\n case 'verification-failed':\n return t('local.error.verify');\n case 'installation-failed':\n return t('local.error.install');\n case 'settings-open-failed':\n return t('local.error.settings');\n case 'target-changed':\n return t('local.error.target');\n case 'request-failed':\n return t('local.error.request');\n default:\n return t('local.error.setup');\n }\n}\n","import { useState, type ReactElement, type ReactNode } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from './ds/note.js';\nimport { color, radius, space, text } from './ds/tokens.stylex.js';\n\nconst styles = stylex.create({\n root: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n width: '100%',\n },\n progress: {\n display: 'grid',\n gap: space.x1,\n width: '100%',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n bar: {\n width: '100%',\n height: '6px',\n accentColor: color.accent,\n },\n command: {\n margin: 0,\n width: '100%',\n boxSizing: 'border-box',\n paddingBlock: space.x2,\n paddingInline: space.x2,\n borderRadius: radius.sm,\n backgroundColor: color.hover,\n color: color.fg,\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Consolas, monospace',\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n whiteSpace: 'pre-wrap',\n overflowWrap: 'anywhere',\n },\n actions: {\n display: 'flex',\n gap: space.x2,\n flexWrap: 'wrap',\n },\n});\n\nexport type MissingPackagesAccess = 'root' | 'sudo' | 'none';\n\nexport interface MissingPackagesLabels {\n readonly missing: string;\n readonly manual: string;\n readonly install: string;\n readonly copy: string;\n readonly copied: string;\n}\n\nexport function formatProgressMiB(bytes: number): string {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nexport function ProgressLine({\n percent,\n label,\n}: {\n readonly percent: number;\n readonly label: string;\n}): ReactElement {\n const value = Math.max(0, Math.min(100, percent));\n return (\n
\n \n {label}\n
\n );\n}\n\nexport function MissingPackages({\n command,\n access,\n installing,\n busy = false,\n onInstall,\n labels,\n children,\n}: {\n readonly command: string;\n readonly access: MissingPackagesAccess;\n readonly installing?: { readonly percent: number; readonly label: string } | undefined;\n readonly busy?: boolean;\n readonly onInstall: () => void;\n readonly labels: MissingPackagesLabels;\n readonly children?: ReactNode;\n}): ReactElement {\n const [copied, setCopied] = useState(false);\n const copy = (): void => {\n void navigator.clipboard?.writeText(command).then(() => setCopied(true));\n };\n return (\n
\n {installing === undefined ? (\n {labels.missing}\n ) : (\n \n )}\n {access === 'none' && installing === undefined ? (\n <>\n {labels.manual}\n
{command}
\n \n ) : null}\n
\n {access !== 'none' && installing === undefined ? (\n \n ) : null}\n {access === 'none' ? (\n \n ) : null}\n {children}\n
\n
\n );\n}\n","import { localSetupFailure } from './local-setup-copy.js';\nimport { useCallback, useState, type ReactElement } from 'react';\nimport * as stylex from '@stylexjs/stylex';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { space } from '../../../client/src/client/ds/tokens.stylex.js';\nimport {\n MissingPackages,\n ProgressLine,\n formatProgressMiB,\n} from '../../../client/src/client/missing-packages.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { ComputerTranslate } from './locale.js';\nimport { useMountedResource } from './mounted-resource.js';\n\nconst styles = stylex.create({\n detail: {\n display: 'grid',\n gap: space.x3,\n justifyItems: 'start',\n },\n});\n\ninterface LocalMissing {\n packages?: string[];\n command?: string;\n install?: 'root' | 'sudo' | 'none';\n}\n\ninterface LocalStatus {\n target?: string;\n probe?: { available?: boolean; detail?: string };\n status?: {\n refusal?: string;\n permissions?: { accessibility: boolean; screenRecording: boolean };\n state?: string;\n phase?: string;\n detail?: string;\n progress?: { percent?: number; downloadedBytes?: number; totalBytes?: number };\n missing?: LocalMissing;\n };\n install?: { state?: string; packages?: string[]; percent?: number; text?: string };\n}\n\nexport function LocalComputerStatus({ t }: { t: ComputerTranslate }): ReactElement {\n const [payload, setPayload] = useState();\n const [busy, setBusy] = useState(false);\n const [error, setError] = useState();\n const refresh = useCallback(async (signal?: AbortSignal) => {\n const response = await fetch('./api/computer/status', {\n credentials: 'same-origin',\n ...(signal === undefined ? {} : { signal }),\n });\n if (!response.ok) throw new Error('request-failed');\n const next = (await response.json()) as LocalStatus;\n if (!signal?.aborted) {\n setPayload(next);\n setError((old) => (old === 'request-failed' ? undefined : old));\n }\n }, []);\n const resource = useMountedResource(() => {\n const controller = new AbortController();\n let pending = false;\n const poll = async (): Promise => {\n if (pending || controller.signal.aborted) return;\n pending = true;\n try {\n await refresh(AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]));\n } catch {\n if (!controller.signal.aborted) setError('request-failed');\n } finally {\n pending = false;\n }\n };\n void poll();\n const timer = setInterval(() => void poll(), 2000);\n return () => {\n controller.abort();\n clearInterval(timer);\n };\n }, [refresh]);\n const installing = payload?.install?.state === 'installing';\n const preparing = busy || installing || payload?.status?.phase === 'starting';\n const missing = payload?.status?.missing;\n const failureDetail =\n error ??\n (payload?.install?.state === 'failed' ? payload.install.text : undefined) ??\n (missing === undefined ? payload?.status?.detail : undefined) ??\n payload?.probe?.detail;\n const failure =\n failureDetail === undefined\n ? undefined\n : localSetupFailure(error ?? payload?.status?.refusal, t);\n const permissions =\n payload?.status?.refusal === 'permissions-required' ? payload.status.permissions : undefined;\n const post = (path: string, body: Record): void => {\n setBusy(true);\n setError(undefined);\n void fetch(path, {\n method: 'POST',\n credentials: 'same-origin',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(body),\n })\n .then(async (response) => {\n if (!response.ok) {\n const refused = (await response.json().catch(() => ({}))) as { code?: string };\n setError(refused.code ?? 'request-failed');\n return;\n }\n await refresh();\n })\n .catch(() => setError('request-failed'))\n .finally(() => setBusy(false));\n };\n const check = (): void => post('./api/computer/start', { authorize: true, target: 'local' });\n const install = (): void => post('./api/computer/install-packages', { authorize: true });\n const granted = payload?.status?.state === 'running';\n const download = payload?.status?.progress;\n const installLabel = installing\n ? {\n percent: payload?.install?.percent ?? 0,\n label: t('local.installing', {\n packages: (payload?.install?.packages ?? []).join(', '),\n percent: String(payload?.install?.percent ?? 0),\n }),\n }\n : undefined;\n const checkButton = (\n \n {t(preparing ? 'local.checking' : 'local.check')}\n \n );\n const packages = installing ? (payload?.install?.packages ?? []) : (missing?.packages ?? []);\n const body =\n packages.length > 0 && (missing !== undefined || installing) ? (\n \n {checkButton}\n \n ) : (\n <>\n {payload?.status?.phase === 'starting' && (download?.totalBytes ?? 0) > 0 ? (\n \n ) : null}\n {permissions ? (\n <>\n {!permissions.accessibility ? (\n \n post('./api/computer/open-permission-settings', {\n authorize: true,\n permission: 'accessibility',\n })\n }\n >\n {t('local.open.accessibility')}\n \n ) : null}\n {!permissions.screenRecording ? (\n \n post('./api/computer/open-permission-settings', {\n authorize: true,\n permission: 'screen-recording',\n })\n }\n >\n {t('local.open.screen')}\n \n ) : null}\n {t('local.permissions.help')}\n \n ) : null}\n {checkButton}\n \n );\n return (\n
\n \n {t('local.chip.granted')}\n ) : preparing ? (\n {t('local.chip.checking')}\n ) : missing !== undefined ? (\n {t('local.chip.missing')}\n ) : failure === undefined ? (\n {t('local.chip.unchecked')}\n ) : (\n {t('local.chip.failed')}\n )\n }\n meta={t(granted ? 'local.granted' : 'local.description')}\n detail={\n
\n {failure === undefined ? null : {failure}}\n {body}\n
\n }\n />\n
\n
\n );\n}\n","import { useCallback, useRef, useState, useSyncExternalStore, type ReactElement } from 'react';\nimport { useMountedResource } from './mounted-resource.js';\n\nimport * as stylex from '@stylexjs/stylex';\nimport {\n IconChevronDownOutlineRegular,\n IconFolderOpenOutlineRegular,\n Input,\n Menu,\n Switch,\n} from '@deepseek-ai/dsh-client-ui-primitives';\nimport type { InjectFace, PropsLocale } from '@deepseek-ai/dsh-client-ui-slots';\n\nimport {\n COMPUTER_TARGET_FIELD,\n COMPUTER_AUTO_ALLOW_FIELD,\n COMPUTER_EXPORT_DIR_FIELD,\n COMPUTER_IDLE_STOP_FIELD,\n type ComputerSettings,\n} from '../settings.js';\nimport { Note } from '../../../client/src/client/ds/note.js';\nimport { PillButton, PillFileButton } from '../../../client/src/client/ds/pill-button.js';\nimport { Select } from '../../../client/src/client/ds/select.js';\nimport { SettingsRow, SettingsRows } from '../../../client/src/client/ds/settings-row.js';\nimport { border, color, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport { LocalComputerStatus } from './local-computer.js';\nimport type { ComputerTarget } from '../target.js';\n\nimport { PHASE_LABEL, type ComputerTranslate } from './locale.js';\n\nexport interface ComputerSettingsSnapshot {\n target: ComputerTarget;\n exportDir: string;\n idleStopMinutes: number;\n autoAllowActions: boolean;\n status: 'loading' | 'ready' | 'unavailable';\n writable: boolean;\n}\n\nexport interface ComputerSettingsScope {\n getSnapshot(): {\n status: 'loading' | 'ready' | 'unavailable';\n value: ComputerSettings | undefined;\n writable: boolean;\n };\n subscribe(listener: () => void): () => void;\n set(field: string, value: unknown): Promise;\n}\n\nexport class ExportDirRejectedError extends Error {\n constructor() {\n super('the Host did not accept the export directory');\n this.name = 'ExportDirRejectedError';\n }\n}\n\nexport function displayExportDir(configured: string, hostDir: string | undefined): string {\n return configured !== '' ? configured : (hostDir ?? '');\n}\n\nexport class ComputerSettingsPrefs {\n private snapshot: ComputerSettingsSnapshot = {\n target: 'container',\n exportDir: '',\n idleStopMinutes: 30,\n autoAllowActions: false,\n status: 'loading',\n writable: false,\n };\n\n private readonly listeners = new Set<() => void>();\n\n private scope: ComputerSettingsScope | undefined;\n\n private detach: (() => void) | undefined;\n\n attach(scope: ComputerSettingsScope): () => void {\n this.detach?.();\n this.scope = scope;\n this.detach = scope.subscribe(() => {\n this.sync();\n });\n this.sync();\n return () => {\n this.detach?.();\n this.detach = undefined;\n this.scope = undefined;\n };\n }\n\n getSnapshot = (): ComputerSettingsSnapshot => this.snapshot;\n\n subscribe = (listener: () => void): (() => void) => {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n };\n\n async setTarget(target: ComputerTarget): Promise {\n if (this.scope === undefined) throw new Error('Computer settings are unavailable');\n await this.scope.set(COMPUTER_TARGET_FIELD, target);\n this.sync();\n if (this.snapshot.target !== target) throw new Error('Computer Target was not saved');\n }\n\n async setExportDir(exportDir: string): Promise {\n if (this.scope === undefined) throw new ExportDirRejectedError();\n this.publish({ exportDir });\n try {\n await this.scope.set(COMPUTER_EXPORT_DIR_FIELD, exportDir);\n } catch (error) {\n this.sync();\n throw error;\n }\n if (this.snapshot.exportDir !== exportDir) throw new ExportDirRejectedError();\n }\n\n setIdleStopMinutes(idleStopMinutes: number): void {\n this.publish({ idleStopMinutes });\n void this.scope?.set(COMPUTER_IDLE_STOP_FIELD, idleStopMinutes).catch(() => undefined);\n }\n\n setAutoAllowActions(autoAllowActions: boolean): void {\n const previous = this.snapshot.autoAllowActions;\n this.publish({ autoAllowActions });\n void this.scope?.set(COMPUTER_AUTO_ALLOW_FIELD, autoAllowActions).catch(() => {\n this.publish({ autoAllowActions: previous });\n });\n }\n\n private publish(patch: Partial): void {\n this.snapshot = { ...this.snapshot, ...patch };\n for (const listener of this.listeners) listener();\n }\n\n private sync(): void {\n const scope = this.scope;\n if (scope === undefined) return;\n const next = scope.getSnapshot();\n const value = next.value;\n this.snapshot = {\n target: value?.target ?? 'container',\n exportDir: value?.exportDir ?? '',\n idleStopMinutes: value?.idleStopMinutes ?? 30,\n autoAllowActions: value?.autoAllowActions ?? false,\n status: next.status,\n writable: next.writable,\n };\n for (const listener of this.listeners) listener();\n }\n}\n\nexport interface ComputerSettingsFace {\n prefs: ComputerSettingsPrefs;\n pickerAvailable: boolean;\n pickDirectory: () => Promise;\n openDirectory: (dir: string) => Promise;\n exportArchive: (dir?: string) => Promise<{ archive: string; downloadToken?: string }>;\n downloadUrl: (downloadToken: string) => string;\n importArchive: (file: string) => Promise;\n requestUpload: (file: string) => Promise;\n sendUploadBytes: (uploadToken: string, file: File) => Promise;\n listArchives: () => Promise;\n hostExportDir: () => Promise;\n}\n\nconst IDLE_OPTIONS = [15, 30, 60, 120, 240] as const;\n\nconst styles = stylex.create({\n intro: {\n margin: 0,\n paddingTop: space.x5,\n paddingBottom: space.x2,\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n chevron: {\n display: 'inline-flex',\n flexShrink: 0,\n color: color.muted,\n },\n manual: {\n display: 'flex',\n alignItems: 'center',\n gap: space.x4,\n minWidth: 0,\n paddingBlock: space.x4,\n borderBottomWidth: border.hairline,\n borderBottomStyle: 'solid',\n borderBottomColor: color.divider,\n },\n manualInput: {\n flexGrow: 1,\n flexShrink: 1,\n flexBasis: 0,\n minWidth: 0,\n },\n file: {\n margin: 0,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n color: color.muted,\n fontSize: text.metaSize,\n lineHeight: text.metaLine,\n },\n});\n\nconst EXPORT_ENDPOINT = './api/computer/export';\nconst IMPORT_ENDPOINT = './api/computer/import';\nconst EXPORTS_ENDPOINT = './api/computer/exports';\nconst STATUS_ENDPOINT = './api/computer/status';\nconst OPEN_DIR_ENDPOINT = './api/computer/open-dir';\nconst DOWNLOAD_ENDPOINT = './api/computer/download';\nconst UPLOAD_ENDPOINT = './api/computer/upload';\nconst UPLOAD_CONTENT_ENDPOINT = './api/computer/upload-content';\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { credentials: 'same-origin', ...init });\n if (!response.ok) throw new Error(`${String(response.status)} ${await response.text()}`);\n return (await response.json()) as T;\n}\n\nasync function postAuthorized(url: string, body: Record = {}): Promise {\n await requestJson(url, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, ...body }),\n });\n}\n\nexport function createComputerSettingsFace(options: {\n prefs: ComputerSettingsPrefs;\n pickDirectory?: (() => Promise) | undefined;\n createXhr?: (() => XMLHttpRequest) | undefined;\n}): ComputerSettingsFace {\n const { prefs } = options;\n return {\n prefs,\n pickerAvailable: options.pickDirectory !== undefined,\n pickDirectory: async () =>\n options.pickDirectory === undefined ? null : options.pickDirectory(),\n openDirectory: async (dir) => {\n await postAuthorized(OPEN_DIR_ENDPOINT, dir === '' ? {} : { dir });\n },\n exportArchive: async (dir) => {\n if (dir !== undefined && dir !== '') await prefs.setExportDir(dir);\n const payload = await requestJson<{ archive?: string; downloadToken?: string }>(\n EXPORT_ENDPOINT,\n {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(\n dir === undefined || dir === '' ? { authorize: true } : { authorize: true, dir },\n ),\n },\n );\n return {\n archive: payload.archive ?? '',\n ...(payload.downloadToken === undefined ? {} : { downloadToken: payload.downloadToken }),\n };\n },\n downloadUrl: (downloadToken) =>\n `${DOWNLOAD_ENDPOINT}?token=${encodeURIComponent(downloadToken)}`,\n importArchive: async (file) => {\n await postAuthorized(IMPORT_ENDPOINT, { file });\n },\n requestUpload: async (file) => {\n const payload = await requestJson<{ uploadToken?: string }>(UPLOAD_ENDPOINT, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ authorize: true, file }),\n });\n if (payload.uploadToken === undefined) throw new Error('upload not accepted');\n return payload.uploadToken;\n },\n sendUploadBytes: (uploadToken, file) =>\n new Promise((resolve, reject) => {\n const createXhr = options.createXhr ?? (() => new XMLHttpRequest());\n const xhr = createXhr();\n xhr.open('POST', `${UPLOAD_CONTENT_ENDPOINT}?token=${encodeURIComponent(uploadToken)}`);\n xhr.withCredentials = true;\n xhr.setRequestHeader('content-type', 'application/octet-stream');\n xhr.onload = () => {\n if (xhr.status !== 200) {\n reject(new Error(`upload failed: HTTP ${String(xhr.status)}`));\n return;\n }\n try {\n const payload = JSON.parse(xhr.responseText) as {\n ok?: unknown;\n error?: unknown;\n };\n if (payload.ok === true) resolve();\n else\n reject(\n new Error(typeof payload.error === 'string' ? payload.error : 'upload failed'),\n );\n } catch (error: unknown) {\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n };\n xhr.onerror = () => reject(new Error('upload transport failed'));\n xhr.send(file);\n }),\n listArchives: async () => {\n const payload = await requestJson<{ files?: string[] }>(EXPORTS_ENDPOINT);\n return payload.files ?? [];\n },\n hostExportDir: async () => {\n const payload = await requestJson<{ exportDir?: string }>(STATUS_ENDPOINT);\n return payload.exportDir ?? '';\n },\n };\n}\n\nfunction Selector({\n label,\n open,\n onToggle,\n disabled,\n}: {\n readonly label: string;\n readonly open: boolean;\n readonly onToggle: () => void;\n readonly disabled?: boolean | undefined;\n}): ReactElement {\n return (\n \n {label}\n \n \n \n \n );\n}\n\nexport function ComputerSettingsRows({\n t,\n prefs,\n pickerAvailable,\n pickDirectory,\n openDirectory,\n exportArchive,\n downloadUrl,\n importArchive,\n requestUpload,\n sendUploadBytes,\n listArchives,\n hostExportDir,\n}: PropsLocale<'botharness-computer'> & InjectFace): ReactElement {\n const snapshot = useSyncExternalStore(prefs.subscribe, prefs.getSnapshot);\n const [targetError, setTargetError] = useState();\n const [targetSaving, setTargetSaving] = useState(false);\n const [idleOpen, setIdleOpen] = useState(false);\n const [importOpen, setImportOpen] = useState(false);\n const [archives, setArchives] = useState(undefined);\n const [busy, setBusy] = useState<'export' | 'import' | 'upload' | undefined>(undefined);\n const [confirming, setConfirming] = useState<'export' | 'import' | undefined>(undefined);\n const [exportTarget, setExportTarget] = useState(undefined);\n const [manualOpen, setManualOpen] = useState(false);\n const [manualPath, setManualPath] = useState('');\n const [saving, setSaving] = useState(false);\n const [dirNote, setDirNote] = useState(undefined);\n const [transferNote, setTransferNote] = useState(undefined);\n const [download, setDownload] = useState<{ archive: string; token: string } | undefined>(\n undefined,\n );\n const [uploadName, setUploadName] = useState(undefined);\n const uploadFile = useRef(null);\n const [pickerBroken, setPickerBroken] = useState(false);\n const [hostDir, setHostDir] = useState(undefined);\n const [livePhase, setLivePhase] = useState(undefined);\n const [liveElapsed, setLiveElapsed] = useState(0);\n\n const hostDirResource = useMountedResource(() => {\n if (snapshot.target === 'local') return;\n if (snapshot.status !== 'unavailable' && snapshot.exportDir !== '') return;\n let active = true;\n void hostExportDir()\n .then((dir) => {\n if (active) setHostDir(dir);\n })\n .catch(() => undefined);\n return () => {\n active = false;\n };\n }, [hostExportDir, snapshot.status, snapshot.exportDir, snapshot.target]);\n\n const busyResource = useMountedResource(() => {\n setLivePhase(undefined);\n setLiveElapsed(0);\n const startedAt = Date.now();\n const controller = new AbortController();\n let pending = false;\n const tick = async (): Promise => {\n if (controller.signal.aborted) return;\n setLiveElapsed(Math.round((Date.now() - startedAt) / 1000));\n if (pending) return;\n pending = true;\n try {\n const payload = await requestJson<{ status?: { phase?: string } }>(STATUS_ENDPOINT, {\n signal: AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]),\n });\n if (!controller.signal.aborted) setLivePhase(payload.status?.phase);\n } catch {\n } finally {\n pending = false;\n }\n };\n void tick();\n const timer = setInterval(() => void tick(), 1000);\n return () => {\n controller.abort();\n clearInterval(timer);\n };\n }, [busy]);\n\n const phaseKey = livePhase === undefined ? undefined : PHASE_LABEL[livePhase];\n\n const exportDir = displayExportDir(snapshot.exportDir, hostDir);\n const hasDir = exportDir !== '';\n const writable = snapshot.status === 'ready' && snapshot.writable;\n const canAdjust = pickerAvailable && !pickerBroken;\n\n const pickDirectoryInto = useCallback(\n (apply: (dir: string) => void) => {\n void pickDirectory()\n .then((dir) => {\n if (dir !== null) apply(dir);\n })\n .catch(() => {\n setPickerBroken(true);\n setManualOpen(false);\n setDirNote(t('rows.pickerFallback', { dir: exportDir }));\n });\n },\n [exportDir, pickDirectory, t],\n );\n\n const pickExportDir = useCallback(() => {\n pickDirectoryInto((dir) => {\n setManualPath(dir);\n setDirNote(undefined);\n void prefs.setExportDir(dir).catch((error: unknown) => setDirNote(String(error)));\n });\n }, [pickDirectoryInto, prefs]);\n\n const startExport = useCallback(() => {\n if (!canAdjust) {\n setExportTarget(undefined);\n setConfirming('export');\n return;\n }\n pickDirectory()\n .then((dir) => {\n if (dir === null) return;\n setExportTarget(dir);\n setConfirming('export');\n })\n .catch(() => {\n setPickerBroken(true);\n setManualOpen(false);\n setDirNote(t('rows.pickerFallback', { dir: exportDir }));\n setExportTarget(undefined);\n setConfirming('export');\n });\n }, [canAdjust, exportDir, pickDirectory, t]);\n\n const saveManualPath = useCallback(() => {\n const dir = manualPath.trim();\n if (dir === '') return;\n if (!dir.startsWith('/') && !/^[A-Za-z]:[\\\\/]/u.test(dir)) {\n setDirNote(t('rows.exportDir.needsAbsolute'));\n return;\n }\n setSaving(true);\n setDirNote(undefined);\n void prefs\n .setExportDir(dir)\n .then(() => {\n setManualOpen(false);\n setDirNote(t('rows.exportDir.saved', { dir }));\n })\n .catch((error: unknown) =>\n setDirNote(\n error instanceof ExportDirRejectedError\n ? t('rows.exportDir.saveRejected')\n : String(error),\n ),\n )\n .finally(() => setSaving(false));\n }, [manualPath, prefs, t]);\n\n const runExport = useCallback(() => {\n const autoOpen = !canAdjust;\n setConfirming(undefined);\n setBusy('export');\n setTransferNote(undefined);\n setDownload(undefined);\n void exportArchive(exportTarget)\n .then(({ archive, downloadToken }) => {\n setTransferNote(archive === '' ? t('rows.exportedDone') : t('rows.exported', { archive }));\n if (archive !== '' && downloadToken !== undefined) {\n setDownload({ archive, token: downloadToken });\n }\n if (autoOpen) void openDirectory(exportDir).catch(() => undefined);\n })\n .catch((error: unknown) => setTransferNote(String(error)))\n .finally(() => setBusy(undefined));\n }, [canAdjust, exportArchive, exportDir, exportTarget, openDirectory, t]);\n\n const runImport = useCallback(\n (file: string) => {\n setImportOpen(false);\n setConfirming(undefined);\n setBusy('import');\n setTransferNote(undefined);\n void importArchive(file)\n .then(() => setTransferNote(t('rows.imported', { file })))\n .catch((error: unknown) => setTransferNote(String(error)))\n .finally(() => setBusy(undefined));\n },\n [importArchive, t],\n );\n\n const takeUploadFile = useCallback((file: File | null) => {\n if (file === null) return;\n uploadFile.current = file;\n setUploadName(file.name);\n setTransferNote(undefined);\n }, []);\n\n const runUpload = useCallback(() => {\n const file = uploadFile.current;\n const name = uploadName;\n if (file === null || name === undefined) return;\n setConfirming(undefined);\n setBusy('upload');\n setTransferNote(undefined);\n void requestUpload(name)\n .then((token) => sendUploadBytes(token, file))\n .then(() => importArchive(name))\n .then(() => {\n setTransferNote(t('rows.imported', { file: name }));\n setUploadName(undefined);\n uploadFile.current = null;\n })\n .catch((error: unknown) => setTransferNote(String(error)))\n .finally(() => setBusy(undefined));\n }, [uploadName, requestUpload, sendUploadBytes, importArchive, t]);\n\n const openImport = useCallback(() => {\n if (importOpen) {\n setImportOpen(false);\n return;\n }\n void listArchives()\n .then((files) => {\n setArchives(files);\n if (files.length === 0) {\n setImportOpen(false);\n setTransferNote(t('rows.noArchives'));\n } else {\n setImportOpen(true);\n }\n })\n .catch((error: unknown) => setTransferNote(String(error)));\n }, [importOpen, listArchives, t]);\n\n const openDir = useCallback(() => {\n void openDirectory(exportDir).catch((error: unknown) => setDirNote(String(error)));\n }, [exportDir, openDirectory]);\n\n const selectedFile = uploadName ?? (confirming === 'import' ? archives?.[0] : undefined);\n\n return (\n \n \n );\n}\n","export type ClientTelemetrySurface = 'desktop_app' | 'browser';\n\nexport interface TelemetryRpc {\n call(path: string, method: string, options?: { args?: unknown }): Promise;\n}\n\nexport function telemetrySurface(): ClientTelemetrySurface {\n return typeof globalThis === 'object' && 'dshDesktop' in globalThis ? 'desktop_app' : 'browser';\n}\n\nexport function recordViewerOpen(\n rpc: TelemetryRpc | undefined,\n panel: 'browser' | 'computer',\n): void {\n void rpc\n ?.call('/api', 'botharness/telemetryEvent', {\n args: {\n event: 'viewer:subpanel_open',\n properties: { panel, surface: telemetrySurface() },\n },\n })\n .catch(() => {});\n}\n","/**\n * Vendored Access Power glyph from lucide-react@1.46.0 (ISC, ADR-0032).\n *\n * Source: the lucide `dist/esm/icons/power.mjs` glyph data. Vendored at the\n * stock 2-unit stroke without adding a `lucide-react` runtime dependency.\n *\n * ISC License\n *\n * Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2022 as part of Feather (MIT).\n * All other copyright (c) for Lucide are held by Lucide Contributors 2022.\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport type { ReactElement } from 'react';\nexport function AccessPowerIcon(): ReactElement {\n return (\n \n \n \n \n );\n}\n","export const STYLEX_CSS: string = '@bh-stylex-css';\n","import { PanelEmptyState } from '../../../client/src/client/ds/empty-state.js';\nimport { border, color, radius, space, text } from '../../../client/src/client/ds/tokens.stylex.js';\nimport {\n RemoteViewer,\n type ViewerLifecycleEvent,\n} from '../../../client/src/client/remote-viewer/index.js';\nimport { BH } from '../../../client/src/client/remote-viewer/tokens.js';\nimport {\n useCallback,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n type ComponentType,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport { isExitReport } from './viewer-state.js';\nimport { reportViewerEvent, viewerEventText } from './viewer-events.js';\nimport {\n LOCALE_NS,\n PHASE_LABEL,\n en,\n zh,\n type ComputerKey,\n type ComputerTranslate,\n} from './locale.js';\nimport { Button, Tag } from '@deepseek-ai/dsh-client-ui-primitives';\nimport { Tooltip } from '../../../client/src/client/ds/tooltip.js';\nimport { SidebarCardList, SidebarCardRow } from '../../../client/src/client/sidebar-card.js';\nimport type { Context as ClientContext } from '@deepseek-ai/cordis';\nimport type {} from '@deepseek-ai/dsh-client-ui-settings/client';\n\nimport { COMPUTER_SETTINGS_NAMESPACE, type ComputerSettings } from '../settings.js';\nimport type { ComputerStorage } from '../provider.js';\nimport {\n ComputerSettingsPrefs,\n ComputerSettingsRows,\n createComputerSettingsFace,\n type ComputerSettingsScope,\n} from './settings-rows.js';\nimport { LocalComputerStatus } from './local-computer.js';\nimport { useMountedResource } from './mounted-resource.js';\nimport { recordViewerOpen } from '../../../client/src/client/telemetry-surface.js';\n\nimport { AccessPowerIcon } from './access-power-icon.js';\nimport { STYLEX_CSS } from '../../../client/src/client/ds/stylex-css.js';\n\nconst ACCESS_STYLE = `\n.bh-computer-access-control { position: relative; display: flex; align-items: center; }\n.bh-computer-access-power {\n display: flex; align-items: center; justify-content: center; width: 28px; height: 28px;\n padding: 0; border: 0; border-radius: ${radius.md}; background: transparent;\n color: ${color.muted}; cursor: pointer;\n}\n.bh-computer-access-power:hover { background: ${color.hover}; }\n.bh-computer-access-power[aria-pressed='true'] { color: ${color.accent}; background: ${color.hover}; }\n.bh-computer-access-power:focus-visible { outline: ${border.focus} solid ${color.accent}; outline-offset: 2px; }\n.bh-computer-access-power:disabled { opacity: 0.5; cursor: default; }\n.bh-computer-access-power.bh-access-failed { color: ${color.danger}; }\n.bh-computer-access-error { order: -1; padding: 0 ${space.x2}; color: ${color.danger}; font-size: ${text.metaSize}; line-height: ${text.metaLine}; white-space: nowrap; }\n\n`;\n\nexport const name = 'botharness-computer-client';\n\nexport const inject = ['slots', 'channelSidebar', 'connection', 'locale'];\n\nconst STATUS_ENDPOINT = './api/computer/status';\nconst START_ENDPOINT = './api/computer/start';\nconst STOP_ENDPOINT = './api/computer/stop';\nconst VIEWER_SRC = './botharness-computer/viewer/';\nconst APPROVED_KEY = 'botharness-computer-start-approved';\nconst ENTRY_ID = 'botharness-computer';\n\ntype ComputerState = 'absent' | 'stopped' | 'running' | 'failed';\ntype ComputerPhase =\n | 'idle'\n | 'pulling'\n | 'starting'\n | 'running'\n | 'stopping'\n | 'exporting'\n | 'importing'\n | 'failed';\n\ninterface ComputerProgress {\n readonly percent?: number;\n readonly text?: string;\n readonly updatedAt?: number;\n}\n\ninterface ComputerStatusPayload {\n readonly target?: 'local' | 'container';\n resolution?: string;\n readonly provider: string | null;\n readonly probe: { readonly available: boolean; readonly detail?: string };\n readonly exportDir?: string;\n readonly status: {\n readonly state: ComputerState;\n readonly phase?: ComputerPhase;\n readonly detail?: string;\n readonly progress?: ComputerProgress;\n readonly storage?: ComputerStorage;\n };\n}\n\ninterface ChannelSidebarEntryProps {\n readonly scope: 'channel' | 'personabot';\n readonly channelId: string;\n readonly botSlug: string | undefined;\n readonly actions: unknown;\n readonly setExpanded?: (expanded: boolean) => void;\n readonly setExpandable?: (expandable: boolean) => void;\n}\n\ninterface ConnectionRpcLike {\n call(\n channel: string,\n endpoint: string,\n payload: unknown,\n signal?: AbortSignal,\n ): Promise<\n | { readonly ok: true; readonly value: unknown }\n | { readonly ok: false; readonly error: { readonly message?: string } }\n >;\n}\n\nlet connectionRpc: ConnectionRpcLike | undefined;\n\ninterface ChannelSidebarRegistryLike {\n register(entry: {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly order?: number;\n readonly scope: 'channel' | 'personabot';\n readonly component: ComponentType;\n readonly headerAction?: ComponentType;\n readonly badge?: ComponentType;\n readonly tab?: string;\n }): () => void;\n}\n\nasync function requestJson(url: string, init?: RequestInit): Promise {\n const response = await fetch(url, { credentials: 'same-origin', ...init });\n if (!response.ok) throw new Error(`${String(response.status)} ${await response.text()}`);\n return (await response.json()) as T;\n}\n\nconst SETUP_GUIDANCE_KEY: ComputerKey = 'entry.setup';\n\nconst SHARED_NOTE_KEY: ComputerKey = 'entry.shared';\n\nconst AUTHORIZATION_POINTS: readonly ComputerKey[] = [\n 'entry.authorize.probe',\n 'entry.authorize.volume',\n 'entry.authorize.pull',\n 'entry.authorize.bind',\n];\n\nconst noteStyle: CSSProperties = { opacity: 0.7, fontSize: 12, whiteSpace: 'pre-wrap' };\nconst buttonStyle: CSSProperties = {\n padding: '4px 10px',\n borderRadius: 6,\n border: `1px solid ${BH.borderL3}`,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n fontSize: 12,\n};\nconst terminalStyle: CSSProperties = {\n fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace',\n fontSize: 11,\n opacity: 0.7,\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-all',\n};\n\nconst DESIGN_WIDTH = 1280;\nconst DESIGN_HEIGHT = 800;\n\nfunction designOf(resolution: string | undefined): { width: number; height: number } {\n const match = /^(\\d{2,5})x(\\d{2,5})$/u.exec(resolution ?? '');\n if (match === null) return { width: DESIGN_WIDTH, height: DESIGN_HEIGHT };\n return { width: Number(match[1]), height: Number(match[2]) };\n}\n\nexport interface RecentLogRow {\n readonly id: number;\n readonly ts: number;\n readonly plugin: string;\n readonly owner: string;\n readonly kind: string;\n readonly detail: string;\n}\n\nexport function RecentLogsList({\n entries,\n}: {\n readonly entries: readonly RecentLogRow[];\n}): ReactElement {\n return (\n
\n {entries.map((entry) => (\n
\n {new Date(entry.ts).toLocaleTimeString()} [{entry.kind}] {entry.detail}\n
\n ))}\n
\n );\n}\n\nexport function RecentLogs({ t }: { readonly t: ComputerTranslate }): ReactElement {\n const [open, setOpen] = useState(false);\n const [entries, setEntries] = useState(undefined);\n const [failed, setFailed] = useState(false);\n const loadResource = useMountedResource(() => {\n const controller = new AbortController();\n requestJson<{ entries: RecentLogRow[] }>('./api/computer/logs?limit=10', {\n signal: controller.signal,\n })\n .then((result) => {\n if (!controller.signal.aborted) setEntries(result.entries);\n })\n .catch(() => {\n if (!controller.signal.aborted) setFailed(true);\n });\n return () => controller.abort();\n }, []);\n return (\n
\n {open && entries === undefined && !failed ?
\n );\n}\n\nexport {\n ScreenIndicator,\n StreamOverlay,\n ViewerTitleBar,\n} from '../../../client/src/client/remote-viewer/index.js';\n\nfunction RunningCard({\n t,\n botSlug,\n busy,\n stopping,\n resolution,\n onStop,\n}: {\n readonly t: ComputerTranslate;\n readonly botSlug: string | undefined;\n readonly busy: boolean;\n readonly stopping: boolean;\n readonly resolution?: string;\n readonly onStop: () => void;\n}): ReactElement {\n const onEvent = useCallback((event: ViewerLifecycleEvent) => {\n void reportViewerEvent(undefined, viewerEventText(event));\n }, []);\n return (\n }\n onEvent={onEvent}\n />\n );\n}\n\nexport interface ComputerEntryViewProps {\n readonly t: ComputerTranslate;\n readonly state: ComputerState;\n readonly phase?: ComputerPhase;\n readonly detail?: string;\n readonly progress?: ComputerProgress;\n readonly runtimeAvailable: boolean;\n readonly confirming: boolean;\n readonly busy: boolean;\n readonly elapsed: number;\n readonly nowTs: number;\n readonly error?: string;\n readonly botSlug?: string;\n readonly storage?: ComputerStorage;\n readonly resolution?: string;\n readonly onStart: () => void;\n readonly onConfirmStart: () => void;\n readonly onStop: () => void;\n readonly onApprove: (remember: boolean) => void;\n readonly onCancel: () => void;\n}\n\nexport function ComputerEntryView(props: ComputerEntryViewProps): ReactElement {\n const {\n t,\n state,\n phase,\n detail,\n progress,\n runtimeAvailable,\n confirming,\n busy,\n elapsed,\n nowTs,\n error,\n botSlug,\n storage,\n resolution,\n onStart,\n onConfirmStart,\n onStop,\n onApprove,\n onCancel,\n } = props;\n\n const title = t('rows.target.container');\n const card = (\n chip: ReactElement,\n rest: { meta?: ReactNode; detail?: ReactNode },\n ): ReactElement => (\n \n \n \n );\n\n if (!runtimeAvailable) {\n return card({t('entry.chip.setup')}, {\n detail:
{t(SETUP_GUIDANCE_KEY)}
,\n });\n }\n\n if (confirming) {\n return card({t('entry.chip.authorize')}, {\n detail: (\n
\n
{t('entry.authorizeIntro')}
\n
    \n {AUTHORIZATION_POINTS.map((point) => (\n
  • {t(point)}
  • \n ))}\n
\n {storage === undefined ? null : (\n
\n {t('entry.authorize.storage', { target: storage.target })}\n {storage.ignoredReason === undefined ? '' : `(${storage.ignoredReason})`}\n
\n )}\n {storage?.migrationHint === undefined ? null : (\n
{storage.migrationHint}
\n )}\n {storage?.kind === 'bind' ? (\n
{t('entry.authorize.storageBindRisk')}
\n ) : null}\n \n
\n \n \n
\n
\n ),\n });\n }\n\n const inProgress =\n phase === 'pulling' ||\n phase === 'starting' ||\n phase === 'stopping' ||\n phase === 'exporting' ||\n phase === 'importing';\n\n if (state === 'running') {\n return (\n
\n {card({t('entry.chip.running')}, {\n meta: t('entry.screen.title', { name: botSlug ?? 'PersonaBot' }),\n })}\n \n
\n );\n }\n\n if (inProgress) {\n return card({t(PHASE_LABEL[phase] ?? 'entry.phase.working')}, {\n meta: (\n \n {t('entry.elapsed', { seconds: elapsed })}\n {progress?.updatedAt === undefined\n ? ''\n : ` · ${t('entry.updated', {\n seconds: Math.max(0, Math.round((nowTs - progress.updatedAt) / 1000)),\n })}`}\n \n ),\n detail: (\n
\n \n \n
\n
{progress?.text ?? detail ?? t('entry.wait')}
\n \n ),\n });\n }\n\n const failed = error !== undefined || state === 'failed';\n return card(\n failed ? (\n {t('entry.chip.failed')}\n ) : (\n {t('entry.chip.stopped')}\n ),\n {\n meta: (\n \n {error ?? (isExitReport(detail) ? undefined : detail) ?? t(SHARED_NOTE_KEY)}\n \n ),\n detail: (\n \n ),\n },\n );\n}\n\nexport function createComputerEntry(\n t: ComputerTranslate,\n): (props: ChannelSidebarEntryProps) => ReactElement {\n return function ComputerEntryWithLocale(props: ChannelSidebarEntryProps): ReactElement {\n const { computerAccess } = useBotInfo(props.botSlug);\n if (computerAccess === false)\n return {t('entry.access.description')};\n return ;\n };\n}\n\nexport function createComputerBadge(\n t: ComputerTranslate,\n): (props: ChannelSidebarEntryProps) => ReactElement | null {\n return function ComputerBadge({ botSlug }: ChannelSidebarEntryProps): ReactElement | null {\n const { computerAccess } = useBotInfo(botSlug);\n if (computerAccess !== true) return null;\n return (\n \n );\n };\n}\n\ninterface BotInfo {\n readonly displayName: string | undefined;\n readonly computerAccess: boolean | undefined;\n}\n\ninterface ReadableStore {\n subscribe(listener: () => void): () => void;\n getSnapshot(): T;\n}\n\nconst botInfoStores = new Map<\n string,\n ReadableStore & { setAccess(enabled: boolean): void }\n>();\n\nfunction botInfoStore(\n botSlug: string | undefined,\n): ReadableStore & { setAccess(enabled: boolean): void } {\n const key = botSlug ?? '';\n const existing = botInfoStores.get(key);\n if (existing !== undefined) return existing;\n const created = createBotInfoStore(botSlug);\n botInfoStores.set(key, created);\n return created;\n}\n\nfunction createBotInfoStore(\n botSlug: string | undefined,\n): ReadableStore & { setAccess(enabled: boolean): void } {\n let info: BotInfo = { displayName: undefined, computerAccess: undefined };\n const listeners = new Set<() => void>();\n let loadedAt = Number.NEGATIVE_INFINITY;\n const load = (): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined) return;\n void rpc\n .call('/api', 'botharness/list', { args: {} })\n .then((result) => {\n if (!result.ok) return;\n const value = result.value as {\n bots?: readonly { slug?: unknown; displayName?: unknown; computerAccess?: unknown }[];\n };\n const match = (value.bots ?? []).find((bot) => bot.slug === botSlug);\n if (match === undefined) return;\n info = {\n displayName:\n typeof match.displayName === 'string' && match.displayName.length > 0\n ? match.displayName\n : undefined,\n computerAccess: match.computerAccess === true,\n };\n for (const listener of listeners) listener();\n })\n .catch(() => undefined);\n };\n return {\n setAccess(enabled) {\n info = { ...info, computerAccess: enabled };\n for (const listener of listeners) listener();\n },\n subscribe(listener) {\n if (listeners.size === 0 && Date.now() - loadedAt > 5000) {\n loadedAt = Date.now();\n load();\n }\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n getSnapshot: () => info,\n };\n}\n\nfunction useBotInfo(botSlug: string | undefined): BotInfo {\n const store = botInfoStore(botSlug);\n const info = useSyncExternalStore(store.subscribe, store.getSnapshot);\n return { displayName: info.displayName ?? botSlug, computerAccess: info.computerAccess };\n}\n\nfunction ComputerHeaderAction({\n botSlug,\n t,\n setExpandable,\n setExpanded,\n}: ChannelSidebarEntryProps & { t: ComputerTranslate }): ReactElement {\n const store = botInfoStore(botSlug);\n const [busy, setBusy] = useState(false);\n const inFlight = useRef(false);\n const [error, setError] = useState(false);\n const subscribe = (listener: () => void): (() => void) => {\n const sync = (): void => {\n setExpandable?.(store.getSnapshot().computerAccess !== undefined);\n };\n const unsubscribe = store.subscribe(() => {\n sync();\n listener();\n });\n sync();\n return unsubscribe;\n };\n const info = useSyncExternalStore(subscribe, store.getSnapshot);\n const accessOn = info.computerAccess === true;\n\n const onToggle = (next: boolean): void => {\n const rpc = connectionRpc;\n if (rpc === undefined || botSlug === undefined || inFlight.current) return;\n inFlight.current = true;\n setBusy(true);\n setError(false);\n void rpc\n .call('/api', 'botharness/computerAccessSet', { args: { slug: botSlug, enabled: next } })\n .then((result) => {\n if (!result.ok) {\n setError(true);\n return;\n }\n const value = result.value as { bot?: { computerAccess?: unknown } };\n const applied = value.bot?.computerAccess === true;\n store.setAccess(applied);\n setExpanded?.(applied);\n })\n .catch(() => {\n setError(true);\n })\n .finally(() => {\n inFlight.current = false;\n setBusy(false);\n });\n };\n\n const label = t(accessOn ? 'entry.access.disable' : 'entry.access.enable');\n return (\n \n \n onToggle(!accessOn)}\n >\n \n \n \n {error ? (\n \n {t('entry.access.failureHint')}\n \n ) : null}\n \n );\n}\n\nexport function createComputerHeader(\n t: ComputerTranslate,\n): (props: ChannelSidebarEntryProps) => ReactElement {\n return function ComputerHeaderWithLocale(props: ChannelSidebarEntryProps): ReactElement {\n return ;\n };\n}\n\nfunction ComputerEntry({\n botSlug,\n t,\n}: ChannelSidebarEntryProps & { t: ComputerTranslate }): ReactElement {\n const { displayName } = useBotInfo(botSlug);\n const [payload, setPayload] = useState();\n const [error, setError] = useState();\n const [busy, setBusy] = useState(false);\n const [confirming, setConfirming] = useState(false);\n const [approved, setApproved] = useState(\n () => globalThis.sessionStorage?.getItem(APPROVED_KEY) === '1',\n );\n const [elapsed, setElapsed] = useState(0);\n const [nowTs, setNowTs] = useState(() => Date.now());\n const refresh = useCallback(async (signal?: AbortSignal) => {\n try {\n const next = await requestJson(\n STATUS_ENDPOINT,\n signal === undefined ? undefined : { signal },\n );\n if (signal?.aborted) return;\n setPayload(next);\n setError(undefined);\n } catch (cause) {\n if (!signal?.aborted) setError(String(cause));\n }\n }, []);\n\n const statusResource = useMountedResource(() => {\n recordViewerOpen(connectionRpc, 'computer');\n const controller = new AbortController();\n let pending = false;\n const poll = async (): Promise => {\n if (pending || controller.signal.aborted) return;\n pending = true;\n try {\n await refresh(AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]));\n } finally {\n pending = false;\n }\n };\n void poll();\n const timer = setInterval(() => void poll(), 3000);\n return () => {\n controller.abort();\n clearInterval(timer);\n };\n }, [refresh]);\n\n const phase = payload?.status.phase;\n const inProgress =\n phase === 'pulling' ||\n phase === 'starting' ||\n phase === 'stopping' ||\n phase === 'exporting' ||\n phase === 'importing';\n\n const progressResource = useMountedResource(() => {\n const startedAt = Date.now();\n setElapsed(0);\n const timer = setInterval(() => {\n setNowTs(Date.now());\n setElapsed(Math.round((Date.now() - startedAt) / 1000));\n }, 1000);\n return () => clearInterval(timer);\n }, [inProgress]);\n\n const act = useCallback(\n async (endpoint: string) => {\n setBusy(true);\n try {\n await requestJson(endpoint, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({\n authorize: true,\n ...(endpoint === START_ENDPOINT && typeof navigator !== 'undefined'\n ? { language: navigator.language }\n : {}),\n }),\n });\n await refresh();\n } catch (cause) {\n setError(String(cause));\n } finally {\n setBusy(false);\n }\n },\n [refresh],\n );\n\n const onStart = useCallback(() => {\n if (!approved) {\n setConfirming(true);\n return;\n }\n void act(START_ENDPOINT);\n }, [act, approved]);\n\n const onConfirmStart = useCallback(() => {\n setConfirming(false);\n void act(START_ENDPOINT);\n }, [act]);\n\n const onApprove = useCallback((remember: boolean) => {\n if (remember) {\n globalThis.sessionStorage?.setItem(APPROVED_KEY, '1');\n setApproved(true);\n }\n }, []);\n\n return (\n
\n {inProgress ?
\n );\n}\n\nexport function apply(ctx: ClientContext): void {\n botInfoStores.clear();\n const settingsPrefs = new ComputerSettingsPrefs();\n ctx.inject(['configForms'], (settingsCtx) => {\n const scope = settingsCtx.configForms.get(\n COMPUTER_SETTINGS_NAMESPACE,\n ) as unknown as ComputerSettingsScope;\n const release = settingsPrefs.attach(scope);\n return () => {\n release();\n };\n });\n ctx.inject(['uiWorkspace', 'slots'], (workspaceCtx) => {\n const workspace = (\n workspaceCtx as unknown as { uiWorkspace?: { pickDirectory?: () => Promise } }\n ).uiWorkspace;\n const face = createComputerSettingsFace({\n prefs: settingsPrefs,\n pickDirectory: workspace?.pickDirectory?.bind(workspace),\n });\n workspaceCtx.slots.inject('botharness.settings.section', () =>\n workspaceCtx.slots.register(\n {\n name: 'botharness.settings.section',\n id: 'computer',\n order: 30,\n label: () => t('section.title'),\n locale: LOCALE_NS,\n inject: () => face,\n },\n ComputerSettingsRows,\n ),\n );\n });\n ctx.effect(() => {\n if (typeof document === 'undefined') return () => {};\n const style = document.createElement('style');\n style.setAttribute('data-botharness-computer', 'client');\n style.dataset.plugin = '@botharness/computer';\n style.dataset.pluginCss = '@botharness/computer/client.css';\n style.textContent = ACCESS_STYLE + STYLEX_CSS;\n document.head.appendChild(style);\n return () => {\n style.remove();\n };\n }, 'botharness-computer: client styles');\n const t = ctx.locale.bind(LOCALE_NS);\n ctx.effect(() => ctx.locale.register(LOCALE_NS, { zh, en }), 'botharness-computer: dictionaries');\n ctx.inject(['channelSidebar', 'connection'], (sidebarCtx) => {\n const registry = (sidebarCtx as unknown as { channelSidebar?: ChannelSidebarRegistryLike })\n .channelSidebar;\n connectionRpc = (sidebarCtx as unknown as { connection?: { rpc?: ConnectionRpcLike } })\n .connection?.rpc;\n if (registry === undefined) return;\n ctx.effect(\n () =>\n registry.register({\n id: ENTRY_ID,\n icon: 'monitor',\n label: t('entry.label'),\n order: 40,\n scope: 'personabot',\n component: createComputerEntry(t),\n headerAction: createComputerHeader(t),\n badge: createComputerBadge(t),\n tab: 'screen',\n }),\n 'botharness-computer: channel sidebar entry',\n );\n });\n}\n"],"x_google_ignoreList":[0],"mappings":"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L,CACF,CACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,6GACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,OAAO;IACL,CACE,QACA,EACE,GAAG,4CACL,CACF;IACA,CACE,QACA,EACE,GAAG,8BACL,CACF;IACA,CACE,QACA,EACE,GAAG,6BACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,cAAc;IACZ,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;GACF;GACA,UAAU,CACR,CACE,QACA,EACE,GAAG,0UACL,CACF,GACA,CACE,UACA;IACE,IAAI;IACJ,IAAI;IACJ,GAAG;GACL,CACF,CACF;GACA,SAAS;IACP,CACE,QACA;KACE,OAAO;KACP,QAAQ;KACR,GAAG;KACH,GAAG;KACH,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;IACA,CACE,QACA;KACE,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN,CACF;GACF;GACA,OAAO;IACL,CACE,UACA;KACE,IAAI;KACJ,IAAI;KACJ,GAAG;IACL,CACF;IACA,CACE,QACA,EACE,GAAG,kDACL,CACF;IACA,CACE,QACA,EACE,GAAG,WACL,CACF;GACF;GACA,eAAe,CACb,CACE,QACA;IACE,OAAO;IACP,QAAQ;IACR,GAAG;IACH,GAAG;IACH,IAAI;GACN,CACF,GACA,CACE,QACA,EACE,GAAG,WACL,CACF,CACF;GACA,mBAAmB;IACjB,CACE,QACA;KACE,OAAO;KACP,QAAQ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"} \ No newline at end of file diff --git a/packages/core/src/bots/bot-create-cli.ts b/packages/core/src/bots/bot-create-cli.ts index fcebd9be44..e893474015 100644 --- a/packages/core/src/bots/bot-create-cli.ts +++ b/packages/core/src/bots/bot-create-cli.ts @@ -2515,7 +2515,11 @@ const SEARCH_INDEX: ReadonlyArray<{ command: string; description: string }> = [ { command: 'update', description: 'update bot name description roles' }, { command: 'human-name-set', description: 'set the Human display name' }, { command: 'channel-human-name-set', description: 'set the per-channel Human nickname' }, - { command: 'channels', description: 'list channels' }, + { + command: 'channels', + description: + 'list channels | add-member | member-candidates [--query ]', + }, { command: 'channel-messages', description: 'read channel messages' }, { command: 'grants', description: 'list bot workspace grants' }, { command: 'grant-revoke', description: 'revoke a workspace grant' }, diff --git a/packages/core/src/bots/cli-team.ts b/packages/core/src/bots/cli-team.ts index 1a458bb0c3..ef99477305 100644 --- a/packages/core/src/bots/cli-team.ts +++ b/packages/core/src/bots/cli-team.ts @@ -70,6 +70,7 @@ export const TEAM_COMMANDS = [ ] as const; type TeamValues = { + query?: string; after?: string; limit?: string; kind?: string; @@ -445,6 +446,11 @@ export async function runTeamCommand( } if (action === 'admins' && argument && rest.length === 2 && values.set !== undefined) return rpc('channelAdminsSet', { channelId: argument, humanIds: ids(values.set) }); + if (action === 'member-candidates' && argument && rest.length === 2) + return rpc('channelMemberCandidates', { + channelId: argument, + ...(values.query === undefined ? {} : { query: values.query }), + }); if (action === 'add-member' && argument && rest.length === 3) return rpc('channelHumanAdd', { channelId: argument, humanId: rest[2] }); if (action === 'description' && argument && rest.length === 2 && values['body-stdin']) diff --git a/packages/core/src/bridge/rpc.ts b/packages/core/src/bridge/rpc.ts index 70225463da..1775fb09e2 100644 --- a/packages/core/src/bridge/rpc.ts +++ b/packages/core/src/bridge/rpc.ts @@ -549,6 +549,14 @@ export class BotharnessBridgeService extends TypertRemoteService { }), ); } + channelMemberCandidates(channelId: string, query?: string) { + return unwrapAsync( + this.methods.channelMemberCandidates({ + channelId, + ...(query === undefined ? {} : { query }), + }), + ); + } channelHumanAdd(channelId: string, humanId: string) { return unwrapAsync(this.methods.channelHumanAdd({ channelId, humanId })); } @@ -3187,6 +3195,7 @@ markRemoteMethods(BotharnessBridgeService.prototype, [ 'channelAdminsSet', 'channelPolicySet', 'channelHumanAdd', + 'channelMemberCandidates', 'channelDescriptionSet', 'teamDirectory', 'humanDm', diff --git a/packages/core/src/database/schema-plan.ts b/packages/core/src/database/schema-plan.ts index 01f49b0867..b6476cc886 100644 --- a/packages/core/src/database/schema-plan.ts +++ b/packages/core/src/database/schema-plan.ts @@ -3671,6 +3671,33 @@ const MIGRATION_LEDGER_MIGRATION: SchemaMigration = { migrate() {}, }; +const CHANNEL_MEMBERSHIP_BASIS_MIGRATION: SchemaMigration = { + id: 'channel-membership-basis', + module: 'team', + description: 'Distinguish named invitations from role-based Channel joins', + migrate(db) { + db.exec(` + ALTER TABLE channel_human_members ADD COLUMN membership_basis TEXT NOT NULL DEFAULT 'invited' + CHECK (membership_basis IN ('role', 'invited')); + CREATE INDEX channel_role_members_by_human ON channel_human_members(human_id, channel_id) + WHERE left_at IS NULL AND membership_basis = 'role'; + UPDATE channel_human_members AS m SET membership_basis = 'role' + WHERE m.human_id <> (SELECT owner_human_id FROM team_settings) + AND EXISTS (SELECT 1 FROM channel_records c WHERE c.channel_id = m.channel_id + AND json_extract(c.record_json, '$.type') = 'group' + AND json_extract(c.visibility_json, '$.kind') = 'roles' + AND c.owner_human_id <> m.human_id) + AND NOT EXISTS (SELECT 1 FROM channel_admins a + WHERE a.channel_id = m.channel_id AND a.human_id = m.human_id); + UPDATE channel_human_members AS m SET left_at = COALESCE(left_at, datetime('now')) + WHERE membership_basis = 'role' AND NOT EXISTS ( + SELECT 1 FROM channel_records c, json_each(c.visibility_json, '$.roleIds') vr + JOIN human_roles r ON r.role_id = vr.value AND r.human_id = m.human_id + WHERE c.channel_id = m.channel_id); + `); + }, +}; + export const BOT_HARNESS_SCHEMA_PLAN = defineSchemaPlan([ SESSION_OWNERSHIP_MIGRATION, MESSAGING_TRACER_MIGRATION, @@ -3825,4 +3852,5 @@ export const BOT_HARNESS_SCHEMA_PLAN = defineSchemaPlan([ PRIVATE_CONTENT_AUDIT_MIGRATION, MINIMAL_MEMBER_MIGRATION, MIGRATION_LEDGER_MIGRATION, + CHANNEL_MEMBERSHIP_BASIS_MIGRATION, ]); diff --git a/packages/core/src/plugin.ts b/packages/core/src/plugin.ts index 474ced63af..0449e6cb97 100644 --- a/packages/core/src/plugin.ts +++ b/packages/core/src/plugin.ts @@ -1093,6 +1093,7 @@ function initializeCore( if ( topics.some((topic) => [ + 'channels', 'bindings', 'grants', 'bot-schedules', diff --git a/packages/core/src/team/bridge-access.ts b/packages/core/src/team/bridge-access.ts index 4ecb90248a..1e96be6efc 100644 --- a/packages/core/src/team/bridge-access.ts +++ b/packages/core/src/team/bridge-access.ts @@ -185,6 +185,8 @@ export function guardHumanBridge( 'channelVisibilitySet', 'channelPolicySet', 'channelRoleDirectory', + 'channelHumanAdd', + 'channelMemberCandidates', ].includes(property) ) { const channel = deps.channels.get(channelId); diff --git a/packages/core/src/team/bridge.ts b/packages/core/src/team/bridge.ts index a0eb42a42d..62e97a6a3b 100644 --- a/packages/core/src/team/bridge.ts +++ b/packages/core/src/team/bridge.ts @@ -283,6 +283,13 @@ export function createTeamBridge(human: HumanContext, team: TeamService | undefi if (!target) throw new TeamError('member-not-found'); return service.channelAccess.dm(human, target.humanId); }), + channelMemberCandidates: (payload: unknown) => + call((service) => { + const { channelId, query } = z + .object({ channelId: z.string().min(1), query: z.string().max(200).default('') }) + .parse(payload); + return service.channelAccess.memberCandidates(human, channelId, query); + }), channelHumanAdd: (payload: unknown) => call((service) => { const { channelId, humanId } = z diff --git a/packages/core/src/team/channel-contract.ts b/packages/core/src/team/channel-contract.ts index 98fec37169..c7fdb9be61 100644 --- a/packages/core/src/team/channel-contract.ts +++ b/packages/core/src/team/channel-contract.ts @@ -30,8 +30,16 @@ export function channelRoleEligibleSql(channel: string, humanId: string): string WHERE ar.human_id = ${humanId}) OR EXISTS (SELECT 1 FROM channel_human_members cm WHERE cm.channel_id = ${channel}.channel_id AND cm.human_id = ${humanId} AND cm.left_at IS NULL - AND (${channel}.owner_human_id = ${humanId} OR EXISTS (SELECT 1 FROM channel_admins ca - WHERE ca.channel_id = ${channel}.channel_id AND ca.human_id = ${humanId}))))`; + AND cm.membership_basis = 'invited'))`; +} + +export function channelRoleMembershipExitSql(scope: 'human' | 'channel' | 'all'): string { + const filter = + scope === 'human' ? 'm.human_id = ? AND' : scope === 'channel' ? 'm.channel_id = ? AND' : ''; + return `UPDATE channel_human_members AS m SET left_at = ? + WHERE ${filter} left_at IS NULL AND membership_basis = 'role' + AND EXISTS (SELECT 1 FROM channel_records c WHERE c.channel_id = m.channel_id + AND NOT ${channelRoleEligibleSql('c', 'm.human_id')})`; } export function channelBotDmEligibleSql(channel: string, humanId: string): string { diff --git a/packages/core/src/team/channels.ts b/packages/core/src/team/channels.ts index c15d32a0d9..2971545ee7 100644 --- a/packages/core/src/team/channels.ts +++ b/packages/core/src/team/channels.ts @@ -9,6 +9,7 @@ import { channelPolicySchema, channelBotDmEligibleSql, channelRoleEligibleSql, + channelRoleMembershipExitSql, channelVisibilitySchema, type ChannelPolicy, type ChannelVisibility, @@ -50,15 +51,6 @@ export class TeamChannels { if (!row) throw new TeamError('channel-not-found'); return settingsSchema.parse(row); } - private qualifies(human: HumanContext, channelId: string): boolean { - return !!this.db.read((db) => - db - .prepare(`SELECT 1 FROM channel_records c - JOIN humans h ON h.human_id = ? WHERE c.channel_id = ? - AND ${channelRoleEligibleSql('c', 'h.human_id')}`) - .get(human.humanId, channelId), - ); - } private joined(human: HumanContext, channelId: string): boolean { return !!this.db.read((db) => db @@ -123,6 +115,10 @@ export class TeamChannels { if (this.role(human, channelId) === 'member') throw new TeamError('permission-required'); } requirePolicy(human: HumanContext, channelId: string, key: keyof ChannelPolicy): void { + if (key === 'addMembers') { + this.requireAddMembers(human, channelId); + return; + } if (!this.canRead(human, channelId, true)) throw new TeamError('channel-not-found'); const channel = this.channels.get(channelId); if (channel?.type !== 'group') { @@ -145,6 +141,36 @@ export class TeamChannels { { permission: key }, ); } + private requireAddMembers(human: HumanContext, channelId: string): void { + const denied = () => + new TeamError('permission-required', undefined, { permission: 'addMembers' }); + if (!this.active(human)) throw denied(); + const settings = this.settings(channelId); + if (this.roles.permissions(human).includes('channels.manageAll')) return; + if (!this.canRead(human, channelId, true)) throw denied(); + if (settings.policy.addMembers === 'everyone' || this.role(human, channelId) !== 'member') + return; + throw denied(); + } + memberCandidates(human: HumanContext, channelId: string, query: string) { + this.requireAddMembers(human, channelId); + return z + .array( + z.object({ humanId: z.string(), displayName: z.string(), username: z.string().nullable() }), + ) + .parse( + this.db.read((db) => + db + .prepare(`SELECT h.human_id AS humanId, h.display_name AS displayName, c.username + FROM humans h LEFT JOIN member_credentials c ON c.human_id = h.human_id + WHERE h.status = 'active' + AND NOT EXISTS (SELECT 1 FROM channel_human_members m WHERE m.channel_id = ? AND m.human_id = h.human_id AND m.left_at IS NULL) + AND (instr(lower(h.display_name), lower(?)) > 0 OR instr(lower(COALESCE(c.username, '')), lower(?)) > 0) + ORDER BY h.display_name, h.human_id LIMIT 100`) + .all(channelId, query, query), + ), + ); + } view(human: HumanContext, channelId: string) { if (!this.canRead(human, channelId)) throw new TeamError('channel-not-found'); const settings = this.settings(channelId); @@ -181,12 +207,15 @@ export class TeamChannels { if (JSON.stringify(this.settings(channelId).visibility) === JSON.stringify(visibility)) return null; this.db.transaction( - (db) => - db - .prepare( - 'UPDATE channel_records SET visibility_json = ?, public = ? WHERE channel_id = ?', - ) - .run(JSON.stringify(visibility), Number(visibility.kind === 'public'), channelId), + (db) => { + db.prepare( + 'UPDATE channel_records SET visibility_json = ?, public = ? WHERE channel_id = ?', + ).run(JSON.stringify(visibility), Number(visibility.kind === 'public'), channelId); + db.prepare(channelRoleMembershipExitSql('channel')).run( + new Date().toISOString(), + channelId, + ); + }, ['channels', 'team'], ); this.changed(true); @@ -305,7 +334,7 @@ export class TeamChannels { (db) => db .prepare( - `INSERT INTO channel_human_members(channel_id, human_id, display_name, visible_from_revision, joined_at) SELECT ?, human_id, display_name, 1, ? FROM humans WHERE human_id = ? AND status = 'active' ON CONFLICT(channel_id,human_id) DO UPDATE SET left_at = NULL`, + `INSERT INTO channel_human_members(channel_id, human_id, display_name, visible_from_revision, joined_at, membership_basis) SELECT ?, human_id, display_name, 1, ?, 'role' FROM humans WHERE human_id = ? AND status = 'active' ON CONFLICT(channel_id,human_id) DO UPDATE SET left_at = NULL, membership_basis = CASE WHEN channel_human_members.left_at IS NULL THEN channel_human_members.membership_basis ELSE 'role' END`, ) .run(channelId, new Date().toISOString(), human.humanId), ['channels', 'team'], @@ -317,20 +346,11 @@ export class TeamChannels { this.requirePolicy(human, channelId, 'addMembers'); const humanId = this.memberId(reference); if (!this.active(humanContext(humanId))) throw new TeamError('member-not-found'); - if (!this.qualifies(humanContext(humanId), channelId)) - throw new TeamError('permission-required', undefined, { permission: 'addMembers' }); - const ceiling = new Set(this.roles.permissions(human)); - if ( - !this.roles.isOwner(human) && - (this.roles.isOwner(humanContext(humanId)) || - this.roles.permissions(humanContext(humanId)).some((p) => !ceiling.has(p))) - ) - throw new TeamError('permission-required', undefined, { permission: 'addMembers' }); this.db.transaction( (db) => db .prepare( - `INSERT INTO channel_human_members(channel_id,human_id,display_name,visible_from_revision,joined_at) SELECT ?,human_id,display_name,1,? FROM humans WHERE human_id = ? ON CONFLICT(channel_id,human_id) DO UPDATE SET left_at = NULL`, + `INSERT INTO channel_human_members(channel_id,human_id,display_name,visible_from_revision,joined_at) SELECT ?,human_id,display_name,1,? FROM humans WHERE human_id = ? ON CONFLICT(channel_id,human_id) DO UPDATE SET left_at = NULL, membership_basis = 'invited'`, ) .run(channelId, new Date().toISOString(), humanId), ['channels', 'team'], diff --git a/packages/core/src/team/member-methods.ts b/packages/core/src/team/member-methods.ts index 7db1f3ff9e..6bd81655d7 100644 --- a/packages/core/src/team/member-methods.ts +++ b/packages/core/src/team/member-methods.ts @@ -50,6 +50,8 @@ export const MEMBER_GLOBAL_METHODS = [ 'channelVisibilitySet', 'channelAdminsSet', 'channelPolicySet', + 'channelHumanAdd', + 'channelMemberCandidates', 'teamDirectory', 'humanDm', 'humanDmByUsername', @@ -106,7 +108,6 @@ export const MEMBER_CHANNEL_METHODS = [ 'channelRename', 'channelGroupAvatarSet', 'channelDescriptionSet', - 'channelHumanAdd', 'channelGroupInvite', 'channelAllBotPreview', 'composerValidate', diff --git a/packages/core/src/team/roles.ts b/packages/core/src/team/roles.ts index 27574d9217..f9f7d62f11 100644 --- a/packages/core/src/team/roles.ts +++ b/packages/core/src/team/roles.ts @@ -3,6 +3,7 @@ import { z } from 'zod'; import type { OperationalDatabaseModulePort } from '../database/owner.js'; import { humanContext, type HumanContext } from '../humans/context.js'; import { TeamError } from './error.js'; +import { channelRoleMembershipExitSql } from './channel-contract.js'; import { ALL_PERMISSIONS, roleSchema, @@ -305,6 +306,7 @@ export class TeamRoles { db.prepare(`INSERT INTO human_roles SELECT h.human_id, 'member' FROM humans h WHERE h.human_id <> (SELECT owner_human_id FROM team_settings) AND NOT EXISTS (SELECT 1 FROM human_roles m WHERE m.human_id = h.human_id)`).run(); + db.prepare(channelRoleMembershipExitSql('all')).run(new Date().toISOString()); }, ['team'], ); @@ -368,6 +370,7 @@ export class TeamRoles { (db) => { db.prepare('DELETE FROM human_roles WHERE human_id = ?').run(humanId); for (const id of ids) db.prepare('INSERT INTO human_roles VALUES (?, ?)').run(humanId, id); + db.prepare(channelRoleMembershipExitSql('human')).run(new Date().toISOString(), humanId); }, ['team'], ); diff --git a/packages/core/src/team/service.ts b/packages/core/src/team/service.ts index 5b01e5e9be..97983e6a87 100644 --- a/packages/core/src/team/service.ts +++ b/packages/core/src/team/service.ts @@ -5,6 +5,7 @@ import { TeamApprovals } from './approvals.js'; import type { UsageProjection } from '../usage/usage.js'; import type { UsageByMemberResult, UsageOverviewPeriod } from '../usage/overview.js'; import { TeamChannels } from './channels.js'; +import { channelRoleMembershipExitSql } from './channel-contract.js'; import type { ContentPurge } from '../purge/contracts.js'; import { TeamRoles } from './roles.js'; import type { DevicePairing } from '../devices/pairing.js'; @@ -1022,7 +1023,7 @@ export class TeamService { OR (json_extract(record_json, '$.type') = 'group' AND EXISTS (SELECT 1 FROM json_each(record_json, '$.members') m WHERE m.value IN (SELECT value FROM json_each(?)))) - ON CONFLICT(channel_id, human_id) DO UPDATE SET left_at = NULL`).run( + ON CONFLICT(channel_id, human_id) DO UPDATE SET left_at = NULL, membership_basis = 'invited'`).run( toHumanId, target.displayName, new Date(this.now()).toISOString(), @@ -1180,17 +1181,29 @@ export class TeamService { (device) => device.kind === 'paired-device', ); if (oldDevices.length && !this.pairing) throw new TeamError('unavailable'); - this.db.transaction( + const roleAccessEnded = this.db.transaction( (db) => { db.prepare('DELETE FROM human_roles WHERE human_id IN (?, ?)').run(human.humanId, humanId); db.prepare("INSERT INTO human_roles VALUES (?, 'admin')").run(human.humanId); db.prepare('UPDATE team_settings SET owner_human_id = ? WHERE singleton = 1').run(humanId); + let roleAccessEnded = false; + for (const id of [human.humanId, humanId]) + if ( + db + .prepare(channelRoleMembershipExitSql('human')) + .run(new Date(this.now()).toISOString(), id).changes > 0 + ) + roleAccessEnded = true; db.prepare('DELETE FROM tob_identity WHERE human_id IN (?, ?)').run(human.humanId, humanId); + return roleAccessEnded; }, ['team'], ); this.pairing?.clearOffers(); - this.invalidate(); + if (roleAccessEnded) { + this.accessChanged(true); + await this.accessSettled(); + } else this.invalidate(); for (const device of oldDevices) this.pairing?.revoke(device.grantId); this.log('owner-transferred', { initiator: 'owner', humanId }); return null; diff --git a/packages/core/test/bridge-rpc.test.ts b/packages/core/test/bridge-rpc.test.ts index 537582065d..e484f92444 100644 --- a/packages/core/test/bridge-rpc.test.ts +++ b/packages/core/test/bridge-rpc.test.ts @@ -730,6 +730,7 @@ describe('bridge typert service', () => { 'channelAdminsSet', 'channelPolicySet', 'channelHumanAdd', + 'channelMemberCandidates', 'channelDescriptionSet', 'teamDirectory', 'humanDm', diff --git a/packages/core/test/cli-team.test.ts b/packages/core/test/cli-team.test.ts index 6062c92517..9b47264299 100644 --- a/packages/core/test/cli-team.test.ts +++ b/packages/core/test/cli-team.test.ts @@ -616,6 +616,16 @@ describe('Team CLI', () => { describe('M4 CLI parity', () => { const cases = [ { args: ['channels', 'browse'], method: 'browsableChannels', payload: {} }, + { + args: ['channels', 'member-candidates', 'group-1'], + method: 'channelMemberCandidates', + payload: { channelId: 'group-1' }, + }, + { + args: ['channels', 'member-candidates', 'group-1', '--query', 'Alice'], + method: 'channelMemberCandidates', + payload: { channelId: 'group-1', query: 'Alice' }, + }, { args: ['channels', 'admins', 'group-1', '--set', 'alice,bob'], method: 'channelAdminsSet', diff --git a/packages/core/test/group-human-receipt.test.ts b/packages/core/test/group-human-receipt.test.ts index aaf6660540..3ac1f87e97 100644 --- a/packages/core/test/group-human-receipt.test.ts +++ b/packages/core/test/group-human-receipt.test.ts @@ -133,7 +133,10 @@ describe('local Human Group receipts', () => { }), ); expect(migrate).not.toHaveBeenCalled(); - expect(after).toEqual(before); + expect(after).toEqual({ + ...before, + members: before.members.map((member) => ({ ...member, membership_basis: 'invited' })), + }); } finally { migrate.mockRestore(); } diff --git a/packages/core/test/plugin.test.ts b/packages/core/test/plugin.test.ts index af2dd9a748..dda8239e8b 100644 --- a/packages/core/test/plugin.test.ts +++ b/packages/core/test/plugin.test.ts @@ -822,6 +822,7 @@ describe('plugin entry', () => { 'channelAdminsSet', 'channelPolicySet', 'channelHumanAdd', + 'channelMemberCandidates', 'channelDescriptionSet', 'teamDirectory', 'humanDm', diff --git a/packages/core/test/schema-migration-ledger.test.ts b/packages/core/test/schema-migration-ledger.test.ts index 1540757682..5c1ef678c3 100644 --- a/packages/core/test/schema-migration-ledger.test.ts +++ b/packages/core/test/schema-migration-ledger.test.ts @@ -144,7 +144,12 @@ describe('named schema migration ledger', () => { it('rolls back backfill, body and generation together on a failed staged migration', () => { const home = createTempRoot('bh-ledger-rollback-'); - const prefix = defineSchemaPlan(plan.migrations.slice(0, -1)); + const prefix = defineSchemaPlan( + plan.migrations.slice( + 0, + plan.migrations.findIndex((migration) => migration.id === 'migration-ledger'), + ), + ); const old = trackTestOwner(mountOperationalDatabase({ dshHome: home, schemaPlan: prefix })); old.close(); edit(home, (db) => db.exec('DROP TABLE schema_migrations')); diff --git a/packages/core/test/team-approvals.test.ts b/packages/core/test/team-approvals.test.ts index 1f1ffd7f77..b4de6cda5e 100644 --- a/packages/core/test/team-approvals.test.ts +++ b/packages/core/test/team-approvals.test.ts @@ -924,8 +924,8 @@ describe('M5 approval projections and decisions', () => { 'preserves role-restricted access around %s approval projections', async (kind) => { const f = fixture(); - f.team.channelAccess.addMember(bob, f.group.id, alice.humanId); f.team.channelAccess.visibilitySet(bob, f.group.id, { kind: 'roles', roleIds: ['member'] }); + f.team.channelAccess.join(alice, f.group.id); const request = await seed(f, kind); const project = vi.spyOn(f.team.approvals, 'project'); expect(await f.invoke(bob, 'channelGet', { channelId: f.group.id })).toMatchObject({ diff --git a/packages/core/test/team-channel-membership-live.test.ts b/packages/core/test/team-channel-membership-live.test.ts new file mode 100644 index 0000000000..f1a96aa2e6 --- /dev/null +++ b/packages/core/test/team-channel-membership-live.test.ts @@ -0,0 +1,42 @@ +import { expect, it, vi } from 'vitest'; +import { createCore } from '../src/plugin.js'; +import { attachOperationalModule } from '../src/database/owner.js'; +import { humanContext, OWNER_HUMAN_CONTEXT as owner } from '../src/humans/context.js'; +import { createTempRoot } from './helpers.js'; + +it('publishes a roster change to an already-connected invitee without needing another message', async () => { + const core = createCore({ dshHome: createTempRoot('m14-invite-live-') }); + const human = humanContext('invitee'); + const abort = new AbortController(); + const stream = core.live.followRoster(human, abort.signal)[Symbol.asyncIterator](); + try { + attachOperationalModule(core.operationalDatabase, 'm14-test').transaction((db) => { + db.prepare("INSERT INTO humans VALUES ('invitee', 'Invitee', 'active', 'before')").run(); + db.prepare("INSERT INTO human_roles VALUES ('invitee', 'member')").run(); + }); + const group = core.channels.createGroup(owner, { name: 'Private invitation', members: [] }); + expect(core.team.channelAccess.canRead(human, group.id, true)).toBe(false); + expect((await stream.next()).value).toMatchObject({ type: 'baseline' }); + let delivered = false; + const next = stream.next().then((result) => { + expect(result.value).toMatchObject({ type: 'changed' }); + delivered = true; + }); + try { + core.team.channelAccess.addMember(owner, group.id, human.humanId); + await vi.waitFor(() => expect(delivered).toBe(true), { timeout: 2000 }); + expect(core.team.channelAccess.visibleIds(human).has(group.id)).toBe(true); + } finally { + abort.abort(); + await next; + } + } finally { + abort.abort(); + await stream.return?.(); + core.live.close(); + core.schedules.close(); + core.externalMessaging.close(); + await core.runtime.close(); + core.operationalDatabase.close(); + } +}); diff --git a/packages/core/test/team-channel-membership-migration.test.ts b/packages/core/test/team-channel-membership-migration.test.ts new file mode 100644 index 0000000000..eeec1195a6 --- /dev/null +++ b/packages/core/test/team-channel-membership-migration.test.ts @@ -0,0 +1,95 @@ +import { expect, it } from 'vitest'; +import { attachOperationalModule, mountOperationalDatabase } from '../src/database/owner.js'; +import { BOT_HARNESS_SCHEMA_PLAN } from '../src/database/schema-plan.js'; +import { defineSchemaPlan } from '../src/database/schema.js'; +import { createTempRoot, trackTestOwner } from './helpers.js'; + +it('classifies legacy memberships without changing Owner content and keeps the named migration across restart', () => { + const home = createTempRoot('m14-membership-upgrade-'); + const old = trackTestOwner( + mountOperationalDatabase({ + dshHome: home, + schemaPlan: defineSchemaPlan( + BOT_HARNESS_SCHEMA_PLAN.migrations.slice( + 0, + BOT_HARNESS_SCHEMA_PLAN.migrations.findIndex( + (migration) => migration.id === 'channel-membership-basis', + ), + ), + ), + }), + ); + const before = attachOperationalModule(old, 'm14-test'); + before.transaction((db) => { + for (const id of ['channel-owner', 'admin', 'eligible', 'ineligible']) { + db.prepare('INSERT INTO humans VALUES (?, ?, ?, ?)').run(id, id, 'active', 'before'); + db.prepare('INSERT INTO human_roles VALUES (?, ?)').run( + id, + id === 'eligible' ? 'admin' : 'member', + ); + } + for (const kind of ['roles', 'private', 'public']) { + db.prepare( + 'INSERT INTO channel_records(channel_id,record_json,owner_human_id,visibility_json) VALUES (?,?,?,?)', + ).run( + kind, + JSON.stringify({ + id: kind, + type: 'group', + name: 'Preserved', + members: [], + createdAt: 'before', + updatedAt: 'before', + }), + 'channel-owner', + JSON.stringify(kind === 'roles' ? { kind, roleIds: ['admin'] } : { kind }), + ); + for (const id of ['local-human', 'channel-owner', 'admin', 'eligible', 'ineligible']) + db.prepare( + 'INSERT INTO channel_human_members(channel_id,human_id,display_name,visible_from_revision,joined_at) VALUES (?,?,?,1,?)', + ).run(kind, id, id, 'before'); + } + db.prepare('INSERT INTO channel_admins VALUES (?,?)').run('roles', 'admin'); + }); + const records = before.read((db) => + db.prepare('SELECT * FROM channel_records ORDER BY channel_id').all(), + ); + old.close(); + for (let restart = 0; restart < 2; restart++) { + const current = trackTestOwner( + mountOperationalDatabase({ dshHome: home, schemaPlan: BOT_HARNESS_SCHEMA_PLAN }), + ); + expect(current.mode).toBe('ready'); + const database = attachOperationalModule(current, 'm14-test'); + database.read((db) => { + expect(db.prepare('SELECT * FROM channel_records ORDER BY channel_id').all()).toEqual( + records, + ); + expect( + db.prepare("SELECT id FROM schema_migrations WHERE id = 'channel-membership-basis'").all(), + ).toEqual([{ id: 'channel-membership-basis' }]); + expect( + db + .prepare( + "SELECT human_id, membership_basis, left_at IS NOT NULL AS leftChannel FROM channel_human_members WHERE channel_id = 'roles' ORDER BY human_id", + ) + .all(), + ).toEqual([ + { human_id: 'admin', membership_basis: 'invited', leftChannel: 0 }, + { human_id: 'channel-owner', membership_basis: 'invited', leftChannel: 0 }, + { human_id: 'eligible', membership_basis: 'role', leftChannel: 0 }, + { human_id: 'ineligible', membership_basis: 'role', leftChannel: 1 }, + { human_id: 'local-human', membership_basis: 'invited', leftChannel: 0 }, + ]); + expect( + db + .prepare( + "SELECT 1 FROM channel_human_members WHERE channel_id IN ('private','public') AND (membership_basis <> 'invited' OR left_at IS NOT NULL)", + ) + .all(), + ).toEqual([]); + expect(db.prepare('PRAGMA foreign_key_check').all()).toEqual([]); + }); + current.close(); + } +}); diff --git a/packages/core/test/team-minimal-members.test.ts b/packages/core/test/team-minimal-members.test.ts index ccbbdc0f6d..cca6b6b0b8 100644 --- a/packages/core/test/team-minimal-members.test.ts +++ b/packages/core/test/team-minimal-members.test.ts @@ -311,7 +311,9 @@ describe('M13 upgrade', () => { const ownerHome = await f.core.tob.ensure(owner); f.db.transaction((db) => { db.prepare("INSERT INTO tob_identity VALUES ('member', 'legacy-tob')").run(); - BOT_HARNESS_SCHEMA_PLAN.migrations.at(-1)!.migrate(db); + BOT_HARNESS_SCHEMA_PLAN.migrations + .find((migration) => migration.id === 'minimal-member')! + .migrate(db); }); await closes.pop()!(); const restarted = fixture(f.dshHome); diff --git a/packages/core/test/team-mode.test.ts b/packages/core/test/team-mode.test.ts index 58ae33bfd5..afbfd4195e 100644 --- a/packages/core/test/team-mode.test.ts +++ b/packages/core/test/team-mode.test.ts @@ -1000,6 +1000,7 @@ describe('member confidentiality', { timeout: 60_000 }, () => { 'channelRename', 'channelDescriptionSet', 'channelHumanAdd', + 'channelMemberCandidates', 'channelGroupInvite', 'channelAllBotPreview', 'composerValidate', @@ -2789,8 +2790,13 @@ describe('M4 Channel audience and policy', { timeout: 60_000 }, () => { author: { kind: 'human', humanId: owner.humanId }, body: 'm4-confidential-content', }); - if (kind === 'roles-member') - f.team.channelAccess.addMember(owner, secret.id, f.human.humanId); + if (kind === 'roles-member') { + f.team.channelAccess.visibilitySet(owner, secret.id, { + kind: 'roles', + roleIds: ['member'], + }); + f.team.channelAccess.join(f.human, secret.id); + } if (kind !== 'private') { const { role } = f.team.roles.create(owner, 'restricted', []); f.team.channelAccess.visibilitySet(owner, secret.id, { @@ -3266,10 +3272,10 @@ describe('M4 review regressions', { timeout: 60_000 }, () => { 'member-not-found', ); f.team.channelAccess.adminsSet(owner, group.id, ['bob']); - f.team.channelAccess.addMember(owner, group.id, human.humanId); const { role } = f.team.roles.create(owner, 'Design', ['channels.create', 'dm.humans']); f.team.roles.set(owner, human.humanId, [role.roleId]); f.team.channelAccess.visibilitySet(owner, group.id, { kind: 'roles', roleIds: [role.roleId] }); + f.team.channelAccess.join(human, group.id); expect(f.team.mode(owner).viewer.roleIds).not.toContain(role.roleId); expect(f.team.mode(f.human).viewer.roleIds).not.toContain(role.roleId); expect(() => f.team.channelAccess.addMember(owner, group.id, 'bob')).not.toThrow(); @@ -3316,10 +3322,10 @@ describe('M4 review regressions', { timeout: 60_000 }, () => { f.channels.searchAllHumanMessages?.(human, { text: 'design-review-secret', limit: 10 }), ).toMatchObject({ hits: [] }); expect(() => f.team.channelAccess.join(human, group.id)).toThrow('channel-not-found'); - expect(f.channels.hasHumanMembership?.(human, group.id)).toBe(true); + expect(f.channels.hasHumanMembership?.(human, group.id)).toBe(false); }); - it('transfers a role-restricted Channel owner through M9 and closes revoked access immediately', async () => { + it('transfers a role-restricted Channel owner through M9, closes old streams and retains named access', async () => { const f = await enabledFixture(); const alice = await f.team.createMember(owner, 'transfer-alice', 'Alice'); const target = humanContext(alice.member.humanId); @@ -3341,7 +3347,7 @@ describe('M4 review regressions', { timeout: 60_000 }, () => { await f.team.accessSettled(); expect(login.peer.signal.aborted).toBe(true); expect((await reader.read()).done).toBe(true); - expect(f.team.channelAccess.canRead(f.human, group.id)).toBe(false); + expect(f.team.channelAccess.canRead(f.human, group.id)).toBe(true); expect(f.team.channelAccess.view(target, group.id).role).toBe('owner'); expect(f.team.transferPreview(owner, target.humanId).channels).toEqual([ { channelId: group.id, name: 'Transferred Design' }, @@ -3904,7 +3910,7 @@ describe('M4 review integrity', { timeout: 60_000 }, () => { }); }); - it('denies opening observed output after role loss despite retained membership', async () => { + it('denies opening observed output after role loss removes membership', async () => { const f = await enabledFixture(); const group = f.channels.createGroup(owner, { name: 'Observed output', members: [] }); f.team.channelAccess.visibilitySet(owner, group.id, { kind: 'roles', roleIds: ['member'] }); @@ -3924,7 +3930,7 @@ describe('M4 review integrity', { timeout: 60_000 }, () => { const { role } = f.team.roles.create(owner, 'No output audience', []); f.team.roles.set(owner, f.human.humanId, [role.roleId]); await f.team.accessSettled(); - expect(f.channels.hasHumanMembership?.(f.human, group.id)).toBe(true); + expect(f.channels.hasHumanMembership?.(f.human, group.id)).toBe(false); expect(f.channels.observeOutput(f.human, group.id, 'observed-message')).toMatchObject({ canRead: false, humanParticipant: false, @@ -4051,3 +4057,321 @@ describe('M4 review integrity', { timeout: 60_000 }, () => { ).toMatchObject({ ok: false, error: { code: 'channel-not-found' } }); }); }); + +describe('M14 invitation access', { timeout: 60_000 }, () => { + it.each(['private', 'roles'] as const)( + 'invites by name into %s with immediate list, stream and search access', + async (kind) => { + const f = await enabledFixture(); + f.registry.create({ + slug: 'm14-private-bot', + displayName: 'Private Bot', + ownerHumanId: owner.humanId, + }); + const group = f.channels.createGroup(owner, { + name: 'M14 secret', + members: ['m14-private-bot'], + }); + if (kind === 'roles') + f.team.channelAccess.visibilitySet(owner, group.id, { kind, roleIds: ['admin'] }); + await f.channels.appendMessage(owner, group.id, { + id: 'm14-history', + at: '2026-11-16T00:00:00Z', + author: { kind: 'human' }, + body: 'm14-invitation-history', + }); + expect(f.team.channelAccess.canRead(f.human, group.id)).toBe(false); + expect( + await f.methods(owner).channelHumanAdd({ channelId: group.id, humanId: 'bob' }), + ).toEqual({ ok: true, value: null }); + expect(await f.methods(f.human).channels({})).toMatchObject({ + ok: true, + value: { channels: [expect.objectContaining({ id: group.id })] }, + }); + expect( + f.channels.searchAllHumanMessages?.(f.human, { text: 'm14-invitation-history', limit: 10 }), + ).toMatchObject({ hits: [expect.objectContaining({ channelId: group.id })] }); + const abort = new AbortController(); + const stream = f.live + .followChannel(f.human, group.id, 10, abort.signal) + [Symbol.asyncIterator](); + try { + expect((await stream.next()).value).toMatchObject({ type: 'opened' }); + } finally { + abort.abort(); + await stream.return?.(); + } + }, + ); + + it.each(['owner', 'manager', 'channel-owner', 'admin', 'everyone'] as const)( + 'allows %s to add even a higher-permission target and searches only available active people', + async (authority) => { + const f = await enabledFixture(); + const group = f.channels.createGroup(authority === 'channel-owner' ? f.human : owner, { + name: 'M14 authority', + members: [], + }); + if (authority === 'manager') { + const role = f.team.roles.create(owner, 'M14 manager', ['channels.manageAll']).role; + f.team.roles.set(owner, f.human.humanId, [role.roleId]); + } else if (authority !== 'owner' && authority !== 'channel-owner') { + f.team.channelAccess.addMember(owner, group.id, 'bob'); + if (authority === 'admin') f.team.channelAccess.adminsSet(owner, group.id, ['bob']); + } + const target = await f.team.createMember(owner, 'm14-target', 'Search Target', ['admin']); + const inactive = await f.team.createMember(owner, 'm14-inactive', 'Search Inactive'); + await f.team.deactivate(owner, inactive.member.humanId); + f.team.channelAccess.policySet(owner, group.id, { + ...f.team.channelAccess.view(authority === 'channel-owner' ? f.human : owner, group.id) + .policy, + addMembers: authority === 'everyone' ? 'everyone' : 'admins', + }); + const actor = authority === 'owner' ? owner : f.human; + const reads = f.db.diagnostics().metrics.reads; + expect( + await f.methods(actor).channelMemberCandidates({ channelId: group.id, query: 'Search' }), + ).toEqual({ + ok: true, + value: [ + { humanId: target.member.humanId, displayName: 'Search Target', username: 'm14-target' }, + ], + }); + expect(f.db.diagnostics().metrics.reads - reads).toBeLessThanOrEqual(12); + expect( + await f.methods(actor).channelHumanAdd({ channelId: group.id, humanId: 'm14-target' }), + ).toEqual({ ok: true, value: null }); + expect( + await f + .methods(actor) + .channelMemberCandidates({ channelId: group.id, query: 'm14-target' }), + ).toEqual({ ok: true, value: [] }); + expect( + f.team.channelAccess.canRead(humanContext(target.member.humanId), group.id, true), + ).toBe(true); + }, + ); + + it('enforces addMembers through the member Gateway for invitation and candidate search without trusting payload identity', async () => { + const f = await enabledFixture(); + const alice = await f.team.createMember(owner, 'm14-target', 'Alice'); + const group = f.channels.createGroup(owner, { name: 'M14 denied', members: [] }); + f.team.channelAccess.addMember(owner, group.id, 'bob'); + f.team.channelAccess.policySet(owner, group.id, { + ...f.team.channelAccess.view(owner, group.id).policy, + addMembers: 'admins', + }); + await f.team.changePassword(f.human, f.initialPassword, 'm14-password-2', false); + const login = await f.team.signIn('bob', 'm14-password-2', 'm14-ip'); + for (const method of ['channelHumanAdd', 'channelMemberCandidates']) { + await expect( + f.gateway.invoke({ + namespace: 'botharness', + method, + args: { + channelId: group.id, + ...(method === 'channelHumanAdd' ? { humanId: alice.member.humanId } : {}), + }, + peer: login.peer, + }), + ).rejects.toMatchObject({ + code: 'permission-required', + details: { permission: 'addMembers' }, + }); + } + await expect( + f.gateway.invoke({ + namespace: 'botharness', + method: 'channelHumanAdd', + args: { channelId: group.id, humanId: alice.member.humanId, callerHumanId: owner.humanId }, + peer: login.peer, + }), + ).rejects.toMatchObject({ code: 'gateway/arguments-invalid' }); + expect(f.channels.hasHumanMembership?.(humanContext(alice.member.humanId), group.id)).toBe( + false, + ); + f.team.channelAccess.policySet(owner, group.id, { + ...f.team.channelAccess.view(owner, group.id).policy, + addMembers: 'everyone', + }); + await f.team.accessSettled(); + const allowed = await f.team.signIn('bob', 'm14-password-2', 'm14-ip-allowed'); + await expect( + f.gateway.invoke({ + namespace: 'botharness', + method: 'channelMemberCandidates', + args: { channelId: group.id, query: 'target' }, + peer: allowed.peer, + }), + ).resolves.toEqual([ + { humanId: alice.member.humanId, displayName: 'Alice', username: 'm14-target' }, + ]); + await expect( + f.gateway.invoke({ + namespace: 'botharness', + method: 'channelHumanAdd', + args: { channelId: group.id, humanId: 'm14-target' }, + peer: allowed.peer, + }), + ).resolves.toBe(null); + await f.team.deactivate(owner, f.human.humanId); + expect(await f.methods(f.human).channelMemberCandidates({ channelId: group.id })).toMatchObject( + { ok: false, error: { code: 'member-suspended' } }, + ); + }); + + it('bounds candidate output and database reads independently of directory size', async () => { + const f = await enabledFixture(); + const group = f.channels.createGroup(owner, { name: 'M14 directory budget', members: [] }); + f.database.transaction((db) => { + const insert = db.prepare('INSERT INTO humans VALUES (?, ?, ?, ?)'); + for (let index = 0; index < 1000; index++) + insert.run( + `candidate-${String(index).padStart(4, '0')}`, + `Candidate ${index}`, + 'active', + 'before', + ); + }); + const reads = f.db.diagnostics().metrics.reads; + const candidates = f.team.channelAccess.memberCandidates(owner, group.id, 'Candidate'); + expect(candidates).toHaveLength(100); + expect(f.db.diagnostics().metrics.reads - reads).toBe(4); + expect(f.team.channelAccess.memberCandidates(owner, group.id, 'Candidate 999')).toEqual([ + { humanId: 'candidate-0999', displayName: 'Candidate 999', username: null }, + ]); + expect( + await f + .methods(owner) + .channelMemberCandidates({ channelId: group.id, query: 'x'.repeat(201) }), + ).toMatchObject({ ok: false, error: { code: 'invalid-input' } }); + expect( + await f.methods(owner).channelHumanAdd({ channelId: group.id, humanId: 'missing' }), + ).toMatchObject({ ok: false, error: { code: 'member-not-found' } }); + expect( + await f.methods(f.human).channelHumanAdd({ channelId: group.id, humanId: owner.humanId }), + ).toMatchObject({ + ok: false, + error: { code: 'permission-required', details: { permission: 'addMembers' } }, + }); + }); + + it('keeps a role join while another allowed role remains, then removes it when neither remains', async () => { + const f = await enabledFixture(); + const first = f.team.roles.create(owner, 'First audience', []).role; + const second = f.team.roles.create(owner, 'Second audience', []).role; + f.team.roles.set(owner, f.human.humanId, [first.roleId, second.roleId]); + const group = f.channels.createGroup(owner, { name: 'Union of roles', members: [] }); + f.team.channelAccess.visibilitySet(owner, group.id, { + kind: 'roles', + roleIds: [first.roleId, second.roleId], + }); + f.team.channelAccess.join(f.human, group.id); + f.team.roles.set(owner, f.human.humanId, [second.roleId]); + expect(f.channels.hasHumanMembership?.(f.human, group.id)).toBe(true); + f.team.roles.set(owner, f.human.humanId, ['member']); + expect(f.channels.hasHumanMembership?.(f.human, group.id)).toBe(false); + expect(f.team.channelAccess.memberCandidates(owner, group.id, 'bob')).toEqual([ + { humanId: f.human.humanId, displayName: 'Bob', username: 'bob' }, + ]); + f.team.channelAccess.addMember(owner, group.id, 'bob'); + expect(f.team.channelAccess.canRead(f.human, group.id, true)).toBe(true); + }); + + it.each(['delete-role', 'transfer-owner'] as const)( + 'ends role access on %s while preserving named access', + async (operation) => { + const f = await enabledFixture(); + const role = f.team.roles.create(owner, 'Removed audience', []).role; + f.team.roles.set(owner, f.human.humanId, [role.roleId]); + const groups = ['role', 'invited'].map((basis) => { + const group = f.channels.createGroup(owner, { name: `M14 ${basis}`, members: [] }); + f.team.channelAccess.visibilitySet(owner, group.id, { + kind: 'roles', + roleIds: [role.roleId], + }); + if (basis === 'role') f.team.channelAccess.join(f.human, group.id); + else f.team.channelAccess.addMember(owner, group.id, 'bob'); + return group; + }); + if (operation === 'delete-role') f.team.roles.delete(owner, role.roleId); + else { + await f.team.changePassword(f.human, f.initialPassword, 'm14-new-owner-password'); + await f.team.transferOwner(owner, f.human.humanId, 'owner-password-1'); + } + expect(f.channels.hasHumanMembership?.(f.human, groups[0]!.id)).toBe(false); + expect(f.team.channelAccess.canRead(f.human, groups[0]!.id, true)).toBe(false); + expect(f.channels.hasHumanMembership?.(f.human, groups[1]!.id)).toBe(true); + expect(f.team.channelAccess.canRead(f.human, groups[1]!.id, true)).toBe(true); + }, + ); + + it('upgrades a role join on a named invitation and never downgrades it on repeated join', async () => { + const f = await enabledFixture(); + const group = f.channels.createGroup(owner, { name: 'Upgrade invitation', members: [] }); + f.team.channelAccess.visibilitySet(owner, group.id, { kind: 'roles', roleIds: ['member'] }); + f.team.channelAccess.join(f.human, group.id); + f.team.channelAccess.addMember(owner, group.id, 'bob'); + f.team.channelAccess.join(f.human, group.id); + f.team.roles.set(owner, f.human.humanId, ['admin']); + expect(f.team.channelAccess.canRead(f.human, group.id, true)).toBe(true); + expect( + f.database.read((db) => + db + .prepare( + 'SELECT membership_basis FROM channel_human_members WHERE channel_id = ? AND human_id = ?', + ) + .get(group.id, f.human.humanId), + ), + ).toEqual({ membership_basis: 'invited' }); + }); + + it('removes role-joined membership and its live stream on role revoke, retaining named invitations', async () => { + const f = await enabledFixture(); + const alice = await f.team.createMember(owner, 'm14-alice', 'Alice'); + const invited = humanContext(alice.member.humanId); + const role = f.team.roles.create(owner, 'M14 audience', []).role; + f.team.roles.set(owner, f.human.humanId, [role.roleId]); + f.team.roles.set(owner, invited.humanId, [role.roleId]); + const group = f.channels.createGroup(owner, { name: 'Role basis', members: [] }); + f.team.channelAccess.visibilitySet(owner, group.id, { kind: 'roles', roleIds: [role.roleId] }); + f.team.channelAccess.join(f.human, group.id); + f.team.channelAccess.addMember(owner, group.id, invited.humanId); + await f.channels.appendMessage(owner, group.id, { + id: 'm14-role-history', + at: '2026-11-16', + author: { kind: 'human' }, + body: 'm14-role-history', + }); + const abort = new AbortController(); + const stream = f.live + .followChannel(f.human, group.id, 10, abort.signal) + [Symbol.asyncIterator](); + try { + expect((await stream.next()).value).toMatchObject({ type: 'opened' }); + await stream.next(); + const next = stream.next(); + f.team.roles.set(owner, f.human.humanId, ['member']); + f.team.roles.set(owner, invited.humanId, ['member']); + await f.team.accessSettled(); + expect((await next).done).toBe(true); + expect(f.channels.hasHumanMembership?.(f.human, group.id)).toBe(false); + expect(await f.methods(f.human).channels({})).toMatchObject({ + ok: true, + value: { channels: [] }, + }); + expect( + f.channels.searchAllHumanMessages?.(f.human, { text: 'm14-role-history', limit: 10 }), + ).toMatchObject({ hits: [] }); + expect(f.team.channelAccess.canRead(invited, group.id, true)).toBe(true); + expect( + f.channels.searchAllHumanMessages?.(invited, { text: 'm14-role-history', limit: 10 }), + ).toMatchObject({ hits: [expect.objectContaining({ channelId: group.id })] }); + f.team.roles.set(owner, f.human.humanId, [role.roleId]); + expect(f.channels.hasHumanMembership?.(f.human, group.id)).toBe(false); + } finally { + abort.abort(); + await stream.return?.(); + } + }); +}); diff --git a/packages/core/test/team-space-role-references.test.ts b/packages/core/test/team-space-role-references.test.ts index ffe619a536..ee0b60ebb2 100644 --- a/packages/core/test/team-space-role-references.test.ts +++ b/packages/core/test/team-space-role-references.test.ts @@ -9,6 +9,7 @@ import { } from '../src/database/owner.js'; import { humanContext, OWNER_HUMAN_CONTEXT as owner } from '../src/humans/context.js'; import { TeamRoles } from '../src/team/roles.js'; +import { BOT_HARNESS_SCHEMA_PLAN } from '../src/database/schema-plan.js'; import { WorkspaceSpaces } from '../src/workspaces/spaces.js'; const resources: { database: OperationalDatabaseOwner; home: string }[] = []; @@ -20,19 +21,13 @@ afterEach(() => { }); function fixture() { const home = mkdtempSync(join(tmpdir(), 'm6-role-references-')); - const database = mountOperationalDatabase({ dshHome: home }); + const database = mountOperationalDatabase({ dshHome: home, schemaPlan: BOT_HARNESS_SCHEMA_PLAN }); resources.push({ database, home }); const port = attachOperationalModule(database, 'role-space-fixture'); port.transaction((db) => db.exec(` - CREATE TABLE humans(human_id TEXT PRIMARY KEY, display_name TEXT, status TEXT); - CREATE TABLE team_settings(singleton INTEGER PRIMARY KEY, owner_human_id TEXT, enabled INTEGER); - CREATE TABLE host_roles(role_id TEXT PRIMARY KEY, name TEXT COLLATE NOCASE UNIQUE, builtin TEXT, permissions_json TEXT, models_json TEXT NOT NULL DEFAULT '{"kind":"all"}'); - CREATE TABLE human_roles(human_id TEXT REFERENCES humans, role_id TEXT REFERENCES host_roles, PRIMARY KEY(human_id, role_id)); - CREATE TABLE workspace_spaces(space_id TEXT PRIMARY KEY, kind TEXT, name TEXT COLLATE NOCASE, owner_human_id TEXT UNIQUE, audience_json TEXT); - INSERT INTO humans VALUES ('local-human', 'Owner', 'active'), ('alice', 'Alice', 'active'); - INSERT INTO team_settings VALUES (1, 'local-human', 1); - INSERT INTO host_roles(role_id, name, builtin, permissions_json) VALUES ('member', 'Member', 'member', '[]'); + INSERT INTO humans VALUES ('alice', 'Alice', 'active', 'before'); + UPDATE team_settings SET enabled = 1; INSERT INTO human_roles VALUES ('alice', 'member'); `), ); diff --git a/scripts/e2e-client-interactions.mjs b/scripts/e2e-client-interactions.mjs index fb8cbea721..4358970651 100644 --- a/scripts/e2e-client-interactions.mjs +++ b/scripts/e2e-client-interactions.mjs @@ -165,7 +165,7 @@ try { if (head?.getAttribute('aria-expanded') === 'false') head.click(); }); await page.waitForSelector('.bh-member-menu-button'); - await page.click('button[aria-label="Invite member"], button[aria-label="邀请新群员"]'); + await page.click('button[aria-label="Invite a Bot"], button[aria-label="邀请 Bot"]'); await page.waitForSelector('[data-group-invite]'); await page.keyboard.press('Escape'); await page.waitForSelector('[data-group-invite]', { hidden: true }); diff --git a/scripts/e2e-group-management.mjs b/scripts/e2e-group-management.mjs index bae129ff86..81b89c6320 100644 --- a/scripts/e2e-group-management.mjs +++ b/scripts/e2e-group-management.mjs @@ -421,7 +421,7 @@ try { if (!(await groupRecord(group.id)).avatar.startsWith('data:image/webp;base64,')) throw new Error('Group avatar was not saved as WebP'); - await page.click('button[aria-label="Invite member"], button[aria-label="邀请新群员"]'); + await page.click('button[aria-label="Invite a Bot"], button[aria-label="邀请 Bot"]'); await page.waitForSelector('[data-group-invite]'); await page.type('[data-group-invite-search]', target.displayName.slice(0, 8)); await sleep(350); @@ -433,15 +433,14 @@ try { await page.waitForFunction(() => Array.from(document.querySelectorAll('button')).some( (button) => - ['邀请新群员', 'Invite member'].includes(button.textContent?.trim() ?? '') && - !button.disabled, + ['邀请 Bot', 'Invite a Bot'].includes(button.textContent?.trim() ?? '') && !button.disabled, ), ); await page.evaluate(() => { Array.from(document.querySelectorAll('button')) .find( (button) => - ['邀请新群员', 'Invite member'].includes(button.textContent?.trim() ?? '') && + ['邀请 Bot', 'Invite a Bot'].includes(button.textContent?.trim() ?? '') && !button.disabled, ) ?.click(); diff --git a/scripts/schema-migrations.json b/scripts/schema-migrations.json index 169f399a24..e073189824 100644 --- a/scripts/schema-migrations.json +++ b/scripts/schema-migrations.json @@ -610,5 +610,9 @@ { "id": "migration-ledger", "sha256": "c8797dee7988cf70952e32ce178e2f451602fed59e6f22c59bb1e2c905e2b891" + }, + { + "id": "channel-membership-basis", + "sha256": "dffb4326af7af1eabc54a536a08b9856b696b56cd56b0c7baa24e125f7d2fd41" } ] diff --git a/scripts/verification-inventory.json b/scripts/verification-inventory.json index f66fec7f9e..40b4e61b68 100644 --- a/scripts/verification-inventory.json +++ b/scripts/verification-inventory.json @@ -1554,7 +1554,7 @@ "behaviors": ["desktop.composer", "desktop.group.manage"], "reason": "Task cookie profile; checks draft persistence, composer clearing, invite controls and Client errors across Channel changes.", "task": 1967, - "sha256": "e770745c5c2f4cd6127c4016b8cc02f12f6183b3ab022cc10c83f22edbfcce3d" + "sha256": "05f16e29a66a658faef886484c0a0e2c5154cc7665395fddc8607e0c664712f2" }, { "path": "scripts/e2e-client-reads.mjs", @@ -1730,7 +1730,7 @@ "behaviors": ["desktop.group.manage"], "reason": "Task cookie profile with optional restart/join phases; group name/avatar, membership decisions and refresh persistence.", "task": 1967, - "sha256": "7bd3d2a01baef1419390ef8b0836ed1d52116de51e8e46e334a85995595d2256" + "sha256": "424ca27bf88a299440ca73d7c916eeb1c4444f4616c2d7c86ea4cd14c77dc881" }, { "path": "scripts/e2e-group-motion-matrix.mjs",