From 6fc277a2afcd4545355ad3767116a84121efafde Mon Sep 17 00:00:00 2001 From: Modole <104966315+Modole@users.noreply.github.com> Date: Wed, 19 Aug 2026 21:06:25 +0800 Subject: [PATCH 1/2] feat: publish open client v0.3.10 --- .gitattributes | 1 + .github/workflows/installers.yml | 171 +- .gitignore | 2 + CONTRIBUTING.md | 10 + README.md | 37 +- SECURITY.md | 6 + THIRD_PARTY_NOTICES.md | 11 +- app/studio.tsx | 10 +- bridge/server.mjs | 78 +- build/test-update-requirements.rqset | 1 + config/laobos.cordis.patch.yml | 2 + desktop/domains/apps.mjs | 39 +- desktop/domains/browser.mjs | 101 +- desktop/domains/clipboard.mjs | 14 + desktop/domains/conversation-export.mjs | 52 +- desktop/domains/desktop-settings.mjs | 55 +- desktop/domains/git-review.mjs | 18 +- desktop/domains/shell.mjs | 132 +- desktop/domains/terminal.mjs | 16 +- desktop/domains/updater.mjs | 382 ++ desktop/domains/workspace-files.mjs | 156 +- desktop/local-plugins.mjs | 1 + desktop/main.mjs | 157 +- desktop/permissions.mjs | 39 + desktop/plugin-recovery.mjs | 177 + desktop/preload.cjs | 27 +- desktop/register-desktop-domains.mjs | 30 +- desktop/workspace-authorization.mjs | 122 + electron-builder.test-update.yml | 9 + electron-builder.yml | 23 +- package-lock.json | 5271 +++++++++-------- package.json | 55 +- packages/laobos-app-manager/lib/client.js | 2 +- packages/laobos-app-manager/src/client.jsx | 2 +- packages/laobos-browserops/lib/client.js | 175 +- packages/laobos-browserops/src/client.jsx | 113 + .../laobos-conversation-tools/lib/client.js | 455 +- .../laobos-file-attachments/lib/client.js | 148 +- .../laobos-file-attachments/src/client.jsx | 164 +- packages/laobos-market/README.md | 4 +- packages/laobos-market/lib/market.js | 213 +- packages/laobos-shell/lib/client.js | 7 +- packages/laobos-shell/src/client.jsx | 9 +- packages/laobos-ssh/lib/client.js | 47 +- packages/laobos-ssh/src/client.jsx | 33 +- .../assets/laobos-logo.png | Bin 0 -> 979325 bytes packages/laobos-system-tools/lib/client.js | 404 +- .../laobos-system-tools/lib/git-service.mjs | 63 +- packages/laobos-system-tools/lib/index.js | 218 +- packages/laobos-system-tools/lib/store.js | 60 +- packages/laobos-system-tools/package.json | 2 +- packages/laobos-terminal-ui/lib/client.js | 50 +- packages/laobos-terminal-ui/src/client.jsx | 36 +- packages/laobos-updater/lib/client.js | 108 + packages/laobos-updater/lib/index.js | 1 + packages/laobos-updater/package.json | 22 + packages/laobos-updater/src/client.jsx | 153 + packages/laobos-workspace-tools/lib/client.js | 443 +- .../laobos-workspace-tools/src/client.jsx | 292 +- .../src/code-renderer.mjs | 123 + .../@deepseek-ai+dsh-sandbox+0.1.0-rc.7.patch | 19 + scripts/build-desktop-plugins.mjs | 2 + scripts/sign-test-update.mjs | 37 + scripts/stage-windows-git.mjs | 176 + scripts/verify-desktop-resources.mjs | 40 + scripts/verify-update-release.mjs | 38 + scripts/verify-windows-packaged-runtime.mjs | 91 + tests/bridge-lifecycle.test.mjs | 33 + tests/conversation-export.test.mjs | 57 + tests/desktop-shell.test.mjs | 74 +- tests/dsh-baseline.test.mjs | 21 +- tests/dsh-desktop-tools.test.mjs | 250 +- tests/dsh-local-plugins.test.mjs | 10 + tests/dsh-performance-shell.test.mjs | 64 +- tests/dsh-plugin-recovery.test.mjs | 130 + tests/dsh-sandbox-escalation.test.mjs | 82 + tests/dsh-system-tools.test.mjs | 108 +- tests/engine-sync.test.mjs | 180 +- tests/git-service.test.mjs | 36 + tests/updater.test.mjs | 250 + 80 files changed, 8266 insertions(+), 3984 deletions(-) create mode 100644 .gitattributes create mode 100644 build/test-update-requirements.rqset create mode 100644 desktop/domains/clipboard.mjs create mode 100644 desktop/domains/updater.mjs create mode 100644 desktop/permissions.mjs create mode 100644 desktop/plugin-recovery.mjs create mode 100644 desktop/workspace-authorization.mjs create mode 100644 electron-builder.test-update.yml create mode 100644 packages/laobos-browserops/src/client.jsx create mode 100644 packages/laobos-system-tools/assets/laobos-logo.png create mode 100644 packages/laobos-updater/lib/client.js create mode 100644 packages/laobos-updater/lib/index.js create mode 100644 packages/laobos-updater/package.json create mode 100644 packages/laobos-updater/src/client.jsx create mode 100644 packages/laobos-workspace-tools/src/code-renderer.mjs create mode 100644 patches/@deepseek-ai+dsh-sandbox+0.1.0-rc.7.patch create mode 100644 scripts/sign-test-update.mjs create mode 100644 scripts/stage-windows-git.mjs create mode 100644 scripts/verify-desktop-resources.mjs create mode 100644 scripts/verify-update-release.mjs create mode 100644 scripts/verify-windows-packaged-runtime.mjs create mode 100644 tests/conversation-export.test.mjs create mode 100644 tests/dsh-plugin-recovery.test.mjs create mode 100644 tests/dsh-sandbox-escalation.test.mjs create mode 100644 tests/updater.test.mjs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6b653bb --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.patch whitespace=-space-before-tab diff --git a/.github/workflows/installers.yml b/.github/workflows/installers.yml index a079d24..a9693cb 100644 --- a/.github/workflows/installers.yml +++ b/.github/workflows/installers.yml @@ -1,57 +1,184 @@ -name: Desktop Installers +name: Desktop Release on: + push: + tags: + - "v*" workflow_dispatch: permissions: - contents: read + contents: write + +env: + NODE_VERSION: 22.19.0 + RELEASE_REPOSITORY: Modole/laobos-agent-studio jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 30 + outputs: + version: ${{ steps.version.outputs.version }} + tag: ${{ steps.version.outputs.tag }} + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 + with: + node-version: ${{ env.NODE_VERSION }} + cache: npm + - run: npm ci + - id: version + shell: bash + run: | + version="$(node -p "require('./package.json').version")" + tag="v${version}" + if [[ "${GITHUB_REF_TYPE}" == "tag" && "${GITHUB_REF_NAME}" != "${tag}" ]]; then + echo "Tag ${GITHUB_REF_NAME} does not match package version ${version}." >&2 + exit 1 + fi + echo "version=${version}" >> "${GITHUB_OUTPUT}" + echo "tag=${tag}" >> "${GITHUB_OUTPUT}" + - run: npm run audit:public + - run: npm run lint + - run: npm test + macos-arm64: + needs: verify runs-on: macos-15 - timeout-minutes: 45 + timeout-minutes: 60 + env: + CSC_LINK: ${{ secrets.MAC_CSC_LINK }} + CSC_KEY_PASSWORD: ${{ secrets.MAC_CSC_KEY_PASSWORD }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: - node-version: 22.19.0 + node-version: ${{ env.NODE_VERSION }} cache: npm - run: npm ci - - run: npm run audit:public - - run: npm run desktop:installer -- --mac dmg --arm64 + - name: Build signed and notarized macOS release + if: env.CSC_LINK != '' + run: npm run desktop:installer -- --mac dmg zip --arm64 + - name: Build reproducibly signed community macOS release + if: env.CSC_LINK == '' + run: npm run desktop:installer:test-update -- --mac dmg zip --arm64 - run: node scripts/verify-packaged-runtime.mjs "out/installers/mac-arm64/劳博士.app/Contents/Resources/app.asar" - - run: test "$(find out/installers -maxdepth 1 -name 'laobos-studio-*-macos-arm64.dmg' | wc -l | tr -d ' ')" = "1" + - run: node scripts/verify-desktop-resources.mjs "out/installers/mac-arm64/劳博士.app/Contents/Resources" + - name: Verify macOS signature and update artifacts + shell: bash + run: | + codesign --verify --deep --strict --verbose=2 "out/installers/mac-arm64/劳博士.app" + if [[ -n "${CSC_LINK}" ]]; then + xcrun stapler validate "out/installers/mac-arm64/劳博士.app" + spctl --assess --type execute --verbose=2 "out/installers/mac-arm64/劳博士.app" + else + echo "No Developer ID secret configured; publishing the stable ad-hoc community update chain." + fi + test "$(find out/installers -maxdepth 1 -name 'laobos-studio-*-macos-arm64.dmg' | wc -l | tr -d ' ')" = "1" + test "$(find out/installers -maxdepth 1 -name 'laobos-studio-*-macos-arm64.zip' | wc -l | tr -d ' ')" = "1" + test -f out/installers/latest-mac.yml - uses: actions/upload-artifact@v7 with: name: laobos-studio-macos-arm64 - path: out/installers/laobos-studio-*-macos-arm64.dmg + path: | + out/installers/laobos-studio-*-macos-arm64.dmg + out/installers/laobos-studio-*-macos-arm64.zip + out/installers/*.blockmap + out/installers/latest-mac.yml if-no-files-found: error compression-level: 0 - retention-days: 7 + retention-days: 3 windows-x64: + needs: verify runs-on: windows-latest - timeout-minutes: 45 + timeout-minutes: 60 + env: + WIN_CSC_LINK: ${{ secrets.WIN_CSC_LINK }} + WIN_CSC_KEY_PASSWORD: ${{ secrets.WIN_CSC_KEY_PASSWORD }} steps: - - uses: actions/checkout@v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@v7 + - uses: actions/setup-node@v7 with: - node-version: 22.19.0 + node-version: ${{ env.NODE_VERSION }} cache: npm - run: npm ci - - run: npm run audit:public - - run: npm run desktop:installer -- --win nsis --x64 + - name: Build signed Windows release + if: env.WIN_CSC_LINK != '' + run: npm run desktop:installer -- --win nsis --x64 + - name: Build unsigned community Windows release + if: env.WIN_CSC_LINK == '' + run: npm run desktop:installer -- --win nsis --x64 + env: + CSC_IDENTITY_AUTO_DISCOVERY: false - run: node scripts/verify-packaged-runtime.mjs "out/installers/win-unpacked/resources/app.asar" - - shell: pwsh + - run: node scripts/verify-desktop-resources.mjs "out/installers/win-unpacked/resources" + - run: node scripts/verify-windows-packaged-runtime.mjs "out/installers/win-unpacked/resources" + - name: Verify Windows signature and update artifacts + shell: pwsh run: | $installers = @(Get-ChildItem "out/installers/laobos-studio-*-windows-x64-setup.exe") - if ($installers.Count -ne 1) { - throw "Windows installer was not generated." + if ($installers.Count -ne 1) { throw "Windows installer was not generated." } + if ($env:WIN_CSC_LINK) { + $signedFiles = @($installers[0].FullName, "out/installers/win-unpacked/laobos-studio.exe") + foreach ($file in $signedFiles) { + $signature = Get-AuthenticodeSignature $file + if ($signature.Status -ne "Valid") { throw "Invalid Windows signature for ${file}: $($signature.Status)" } + } + } else { + Write-Host "No Authenticode secret configured; publishing the unsigned community installer." } + if (-not (Test-Path "out/installers/latest.yml")) { throw "latest.yml was not generated." } - uses: actions/upload-artifact@v7 with: name: laobos-studio-windows-x64 - path: out/installers/laobos-studio-*-windows-x64-setup.exe + path: | + out/installers/laobos-studio-*-windows-x64-setup.exe + out/installers/*.blockmap + out/installers/latest.yml if-no-files-found: error compression-level: 0 - retention-days: 7 + retention-days: 3 + + publish: + if: github.ref_type == 'tag' + needs: [verify, macos-arm64, windows-x64] + runs-on: ubuntu-latest + timeout-minutes: 20 + steps: + - uses: actions/checkout@v7 + - uses: actions/download-artifact@v8 + with: + pattern: laobos-studio-* + path: release-assets + merge-multiple: true + - name: Validate update metadata and create checksums + run: | + node scripts/verify-update-release.mjs release-assets "${{ needs.verify.outputs.version }}" + cd release-assets + sha256sum * > SHA256SUMS + - name: Publish release atomically + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ needs.verify.outputs.tag }} + RELEASE_VERSION: ${{ needs.verify.outputs.version }} + shell: bash + run: | + test -n "${GH_TOKEN}" + existing_draft="$(gh release view "${RELEASE_TAG}" --repo "${RELEASE_REPOSITORY}" --json isDraft --jq .isDraft 2>/dev/null || true)" + if [[ "${existing_draft}" == "false" ]]; then + echo "Published release ${RELEASE_TAG} already exists in ${RELEASE_REPOSITORY}." >&2 + exit 1 + fi + if [[ "${existing_draft}" != "true" ]]; then + gh release create "${RELEASE_TAG}" \ + --repo "${RELEASE_REPOSITORY}" \ + --draft \ + --title "劳博士开源客户端 ${RELEASE_TAG}" \ + --notes "劳博士开源客户端 ${RELEASE_VERSION}。首次安装请下载 DMG 或 Windows Setup;ZIP、blockmap 和 latest 元数据用于应用内自动更新。" + fi + gh release upload "${RELEASE_TAG}" release-assets/* --repo "${RELEASE_REPOSITORY}" --clobber + gh release edit "${RELEASE_TAG}" --repo "${RELEASE_REPOSITORY}" --draft=false --latest diff --git a/.gitignore b/.gitignore index 9761d7b..f323e27 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,8 @@ /.next/ /.vinext/ /out/ +/.cache/ +/resources/mingit-win32-x64/ # misc .DS_Store diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2305378..40614e8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,6 +19,16 @@ npm run audit:public Pull Request 应说明改动目的、用户影响、验证方式,以及是否涉及数据迁移、权限、网络访问或依赖许可。 +## 桌面与发布改动 + +涉及 Electron、DSH 内置插件、安装器、平台原生依赖或更新器时,请先阅读[桌面打包与应用内更新手册](docs/desktop-release-playbook.md),并满足以下要求: + +- 插件运行时资源必须放在插件自身目录,不能跨目录引用根 `public/` 或开发机路径。 +- Windows 原生依赖必须在 `app.asar.unpacked` 中验证真实的 x64 PE 文件,不能只检查 package.json。 +- macOS 更新必须验证基线版与新版的完整签名和 designated requirement。 +- 修改功能、架构或发布流程时同步更新 `README.md`、`docs/` 中对应文档及必要的回归测试。 +- Release 先使用草稿聚合资产,安装器和 blockmap 上传成功后再发布 `latest*.yml`。 + ## 贡献许可 提交代码、文档或资源即表示: diff --git a/README.md b/README.md index 1ba17e3..7ee5941 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ DSH 官方 Web UI │ loopback HTTP ▼ -DeepSeek Harness 0.1.0-rc.6 +DeepSeek Harness 0.1.0-rc.7 ├─ Agent presets(标准 / PTC / 极简 / 创造 / 性能实验) ├─ Sandbox + Approval + Permission presets ├─ Plan 模式安全联动 - └─ 劳博士项目资源插件(知识库 / 工作流 / Skills / MCP) + └─ 劳博士项目资源插件(知识库 / Skills / MCP) ``` DSH 只监听本机回环地址。Electron 使用随机端口启动运行时,渲染进程保持 `sandbox: true`、`nodeIntegration: false`,并拒绝网页权限请求。 @@ -55,6 +55,20 @@ npm run desktop:installer -- --win nsis --x64 当前公开构建未配置 Apple Developer ID 或 Windows Authenticode 证书,因此首次安装会出现系统的“未知开发者/未知发布者”安全提示;发布页同时提供 SHA-256 校验值用于核对文件完整性。签名证书和密码只允许通过 CI Secret 注入,禁止提交到仓库。 +公开仓库的自动更新与源码 Release 使用同一个 GitHub 仓库。版本号以 `package.json` 为唯一来源,发布标签必须严格等于 `v`。推送版本标签后,GitHub Actions 会分别在 macOS 和 Windows 原生 Runner 生成: + +- macOS:DMG、自动更新 ZIP、两类 blockmap 与 `latest-mac.yml` +- Windows:NSIS 安装器、blockmap 与 `latest.yml` +- 汇总资产:`SHA256SUMS` + +没有配置签名 Secret 时,流水线仍会生成可测试的社区构建:macOS 使用固定要求的稳定 ad-hoc 签名,保证相邻社区版本可以验证更新包;Windows 生成未签名安装器。配置 `MAC_CSC_LINK`、`MAC_CSC_KEY_PASSWORD`、Apple 公证凭据以及 `WIN_CSC_LINK`、`WIN_CSC_KEY_PASSWORD` 后,同一流水线会自动切换到正式签名。手动运行工作流只生成构建产物,不会发布 Release;只有推送匹配版本号的 `v*` 标签才会发布并成为应用内更新源。 + +本机生成 macOS 测试安装包与更新包: + +```bash +npm run release:mac:test +``` + 常用诊断: ```bash @@ -121,22 +135,18 @@ macOS 默认数据目录: ## 项目侧栏与资源管理 -`@laobos/dsh-system-tools` 作为 DSH 插件运行。官方会话栏保持在左侧;项目导航固定在最右侧,与中间工作区组成三列布局。右栏折叠时保留 56px 图标轨道,展开宽度默认为 224px,并可在 200–300px 之间拖动调整。点击“对话、工作流、知识库、Skills、MCP、设置”都会复用中间工作区进行独立页面切换;设置页包含系统提示词编辑,以及可直达模型、Agent 预设、安全审批、插件分区的 DSH 系统设置入口;原左侧设置入口已迁移到右栏底部。 +`@laobos/dsh-system-tools` 作为 DSH 插件运行。官方会话栏保持在左侧;项目导航固定在最右侧,与中间工作区组成三列布局。右栏折叠时保留 56px 图标轨道,展开宽度默认为 224px,并可在 200–300px 之间拖动调整。点击“对话、知识库、Skills、MCP、设置”都会复用中间工作区进行独立页面切换;设置页包含系统提示词编辑,以及可直达模型、Agent 预设、安全审批、插件分区的 DSH 系统设置入口;原左侧设置入口已迁移到右栏底部。 - 本地 SQLite + FTS 全文检索,支持自然问句拆词、标题加权和相邻片段扩展 - Agent 可按需自动创建、读取和更新知识;删除经过 DSH 审批,暂停的知识库不会被全局搜索访问 - Agent 默认把知识写入当前工作区;只有明确的跨项目知识才进入全局作用域 - 知识库页面保持轻量插件形态,支持召回测试、资料编辑、重新索引、启停和删除 -- DAG 工作流由 Agent 通过 `workflow_manager` 创建、读取、更新、测试、发布和启停,删除经 `workflow_delete` 审批 -- 工作流页面使用纯列表和 SVG 快捷操作;查看、编辑会打开弹窗,用户可在弹窗内查看流程图、微调节点、试运行、发布版本、启停和删除,不提供手动新建入口 -- 首次发布会自动启用并注册为 DSH Agent 工具;后续发布保留用户设置的启停状态 -- 已发布工作流同时投影到“设置 > Plugins > Agent 自动化”虚拟插件页,任一侧启停或删除都会同步 - Skills 以名称、简介、范围、状态和实际文件位置的管理表展示;默认管理 DSH 原生目录,可按需查看 `.agents/skills` 兼容内容,并支持一键复制位置、启停、删除和 DSH 热更新 - MCP 支持 stdio 与 streamable HTTP,以 Server、连接方式、连接目标、工具数量和连接状态的管理表展示;可启停、重连和删除,密钥只以遮罩返回界面 - 插件市场源码内置于 `packages/laobos-market`,可在“设置 > 插件市场”搜索、安装和管理带有 `dsh-plugin` topic 的插件;代理地址和上传账号默认留空,由使用者自行配置 - 管理页支持右栏折叠按钮、再次点击当前菜单项、页面“收起”按钮和 Esc 快速返回对话;未保存的 Skills/MCP 修改会先确认 - 设置中的“系统提示词”默认展示可编辑的“劳博士”身份,以 `order: 39` 注册在 preset persona 与旧迁移指令之后、工具说明之前;用户修改姓名或角色后会覆盖冲突设定,不会保留旧名称作为别名 -- 实体插件清单与虚拟工作流插件统一使用 DSH 官方“设置 > Plugins”页面,不占用项目主侧栏 +- 实体插件清单统一使用 DSH 官方“设置 > Plugins”页面,不占用项目主侧栏 - HTTP 管理接口只接受本机请求并校验 Origin 数据位于 DSH Home 的 `data/system-tools.db`。 @@ -145,17 +155,20 @@ macOS 默认数据目录: 桌面版把右侧项目栏分成“对话 / 工作台 / 集成管理”三组,并把高权限能力收敛到 Electron 主进程。网页侧只能调用经过校验的最小化 preload API,文件路径会做工作区边界、真实路径和符号链接检查。 -- 会话:编辑上一轮并从稳定边界创建分支、重试上一轮、完整分页导出 PDF、重命名和可恢复删除 +- 会话:编辑上一轮并从稳定边界创建分支、重试上一轮、导出带内嵌资源的离线 HTML、重命名和可恢复删除 - 右键菜单:工作区可打开文件管理器、Git 审查和终端;会话可打开、编辑、重试、导出、重命名和删除 -- 文件工作台:目录浏览、文本/图片/PDF/音视频预览和 Finder 定位;敏感文件名、二进制内容和超大文件会被限制 -- 版本中心:状态与 staged/unstaged diff、未跟踪文件预览、提交历史、初始化、暂存、提交、分支管理,以及需确认的恢复和远端同步;桌面 UI 与 Agent 共用结构化 Git 服务 -- 文件上传:图片继续使用 DSH 原生图片附件;普通文件通过输入框回形针选择,复制到受管目录后以文件 Chip 显示,并把受管副本的绝对路径封装进提示词 +- 文件工作台:目录浏览、创建、编辑、重命名、删除、文本/图片/PDF/音视频预览和系统文件管理器定位;首次访问启动目录外的工作区会请求授权并记住用户选择 +- 版本中心:状态与 staged/unstaged diff、未跟踪文件预览、提交历史、初始化、暂存、提交、分支管理,以及需确认的恢复和远端同步;Windows 安装包内置固定校验的 MinGit,不依赖图形进程的 `PATH` +- 文件上传:支持选择、粘贴和桌面拖放;支持视觉的模型使用原生图片通道,不支持视觉时图片会作为普通受管文件交给 Agent - 上传路径:在“设置 > 文件上传”中选择“默认”或“工作区内”;默认写入 DSH Home 的 `uploads/v1`,后者使用当前工作区的 `update` 文件夹 +- 剪贴板:桌面端通过受约束的主进程 IPC 写入,浏览器 API 仍作为回退,并在失败时提供明确反馈 - 终端插件:基于 `node-pty` 与 xterm;每个标签使用独立的稳定命名 tmux 会话,打开或重连时自动回到当前工作区,未安装 tmux 时明确提示并回退到登录 Shell - 浏览器插件:使用隔离的 `WebContentsView` 预览 HTTP(S) 地址;BrowserOps daemon 仅在用户点击后启动,并可随时停止 - SSH 插件:密码和私钥使用系统 `safeStorage` 加密,主机密钥采用 TOFU 校验,发生变更时阻止连接 - 应用管理插件:登记、探测、启动、停止和查看日志;进程始终以 `shell: false` 启动,“移出管理”不会删除项目文件 - Shell 与 WSL:自动检测 Windows 的 WSL、Linux 发行版、Git Bash 与 PowerShell;设置页提供需 UAC 确认的 WSL/Ubuntu 安装、分阶段进度、重启恢复和可编辑的标准模式诊断对话 +- 软件更新:设置页可检查、下载并安装公开 GitHub Release;下载状态可恢复,应用退出时会等待本地运行时安全关闭 +- 插件恢复:市场安装前校验 Host/Client 入口和模块 ID;用户插件导致启动失败时会自动隔离并以安全模式重启 删除的会话会先归档,再移动到 DSH Home 下的劳博士回收站;不会直接永久擦除。Terminal、BrowserOps、SSH 和应用管理均为独立 DSH 客户端插件,配置位于 `config/laobos.cordis.patch.yml`。修改终端或 SSH 的 JSX 源码后,可单独重建浏览器插件: diff --git a/SECURITY.md b/SECURITY.md index 46265c8..31d73d6 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -13,3 +13,9 @@ ## 凭据泄露 如果凭据曾进入 Git 历史、Issue、构建日志或发布包,请立即在对应服务撤销并轮换。仅删除文件或提交并不能使已公开的凭据恢复安全。 + +## 软件更新与发布完整性 + +桌面客户端只从固定的劳博士 GitHub Release 仓库读取更新。渲染进程不能指定任意下载地址或安装路径,安装资产通过 `latest*.yml` 中的 SHA-512 和 Release 的 SHA-256 清单校验。 + +正式 macOS 包必须使用 Apple Developer ID 签名并完成公证;正式 Windows 包必须使用 Authenticode。ad-hoc 或未签名构建只允许用于受控测试,不能被描述为可信生产发行版。发现 Release 资产、更新元数据、签名或校验和不一致时,应立即停止发布和更新测试,替换资产并从公网重新下载复核。详细流程见[桌面打包与应用内更新手册](docs/desktop-release-playbook.md)。 diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 6bfe740..df9d853 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -4,7 +4,7 @@ ## DeepSeek Harness -- Package: `@deepseek-ai/dsh` 0.1.0-rc.6 +- Package: `@deepseek-ai/dsh` 0.1.0-rc.7 - Project: - License: MIT - Copyright: Copyright (c) 2026 DeepSeek @@ -55,6 +55,15 @@ SOFTWARE. 劳博士对该社区预设进行了系统 preset 注册、中文元数据和 Windows Shell 路由适配。上游 MIT 许可与 NOTICE 分别保存在 `packages/laobos-performance/LICENSE.upstream` 和 `packages/laobos-performance/NOTICE.upstream`。该社区项目不代表 DeepSeek 官方认可或合作关系。 +## Git for Windows MinGit + +- Component: MinGit 2.55.0.4 (64-bit) +- Project: +- Bundled path on Windows: `resources/git` +- License: GPL-2.0 and the licenses of bundled support libraries + +MinGit 是 Git for Windows 官方提供、面向第三方应用内嵌的最小 Git 发行物。构建脚本固定官方 Release 地址和 SHA-256;Windows 安装包保留 MinGit 根目录 `LICENSE.txt`、`COPYING` 及各支持库随附的许可证文件。对应版本的完整源代码可从上述项目和 `v2.55.0.windows.4` 标签获取。 + ## 其他 npm 依赖 完整依赖及锁定版本见 `package.json` 和 `package-lock.json`。各依赖的许可证文本会在 `npm install` 后位于对应的 `node_modules//LICENSE*` 文件中;Electron 桌面分发物还包含 Electron/Chromium 随附的许可证文件。分发者有责任核对并保留所有适用声明。 diff --git a/app/studio.tsx b/app/studio.tsx index 668c94b..320d87e 100644 --- a/app/studio.tsx +++ b/app/studio.tsx @@ -1425,14 +1425,11 @@ export function PiStudio({ mode = "studio" }: { mode?: StudioMode }) { const selectedModelInfo = models.find( (model) => `${model.provider}/${model.id}` === selectedModel, ); - if ( + const imagesAsFiles = Boolean( pendingAttachments.some((attachment) => attachment.kind === "image") && selectedModelInfo?.input && - !selectedModelInfo.input.includes("image") - ) { - showToast("当前模型不支持图片,请切换到支持视觉输入的模型"); - return; - } + !selectedModelInfo.input.includes("image"), + ); const conversationId = activeConversation.id; const assistantId = newId(); @@ -1449,6 +1446,7 @@ export function PiStudio({ mode = "studio" }: { mode?: StudioMode }) { { method: "POST", body: JSON.stringify({ + imageMode: imagesAsFiles ? "file" : "multimodal", attachments: pendingAttachments.map((attachment) => ({ id: attachment.id, name: attachment.name, diff --git a/bridge/server.mjs b/bridge/server.mjs index aa6a09e..609d35d 100644 --- a/bridge/server.mjs +++ b/bridge/server.mjs @@ -481,7 +481,7 @@ function isTextAttachment(attachment) { ); } -async function saveAttachmentBatch(sessionId, input) { +async function saveAttachmentBatch(sessionId, input, { imagesAsFiles = false } = {}) { if (!Array.isArray(input) || input.length === 0) { throw new HttpError(400, "请选择至少一个附件。"); } @@ -532,7 +532,9 @@ async function saveAttachmentBatch(sessionId, input) { .trim() .toLowerCase() .slice(0, 120); - const kind = supportedInlineImageTypes.has(mimeType) ? "image" : "file"; + const kind = !imagesAsFiles && supportedInlineImageTypes.has(mimeType) + ? "image" + : "file"; normalized.push({ id, name, @@ -651,8 +653,11 @@ async function buildAttachmentPrompt(message, sessionId, batch) { } const prompt = message || "请查看并处理这些附件。"; + const guidance = images.length + ? "Use the image inputs for images and the listed paths or inline content for other files." + : "Use the listed file paths or inline content to inspect the attachments."; return { - message: `${prompt}\n\n\nThe user attached these local files. Use the image inputs for images and the listed paths or inline content for other files.\n${lines.join("\n")}${inlineSections.join("")}\n`, + message: `${prompt}\n\n\nThe user attached these local files. ${guidance}\n${lines.join("\n")}${inlineSections.join("")}\n`, images, }; } @@ -1020,8 +1025,6 @@ async function listSystemToolNames() { try { return await withEmbeddedEngine(async (embeddedEngine) => [ "knowledge_search", - "workflow_manager", - "workflow_delete", "knowledge_manager", "knowledge_delete", "git_manager", @@ -1031,10 +1034,6 @@ async function listSystemToolNames() { .listKnowledgeCollections() .filter((collection) => collection.agentEnabled) .map((collection) => collection.toolName), - ...embeddedEngine - .listWorkflows() - .filter((workflow) => workflow.publishedVersion) - .map((workflow) => workflow.toolName), ]); } catch { return []; @@ -1497,9 +1496,7 @@ function routeMatch(pathname, expression) { async function handleSystemToolsRequest(request, response, url, headers) { if ( url.pathname !== "/api/knowledge" && - !url.pathname.startsWith("/api/knowledge/") && - url.pathname !== "/api/workflows" && - !url.pathname.startsWith("/api/workflows/") + !url.pathname.startsWith("/api/knowledge/") ) { return false; } @@ -1588,61 +1585,7 @@ async function handleSystemToolsRequest(request, response, url, headers) { return true; } - if (request.method === "GET" && url.pathname === "/api/workflows") { - const workflows = await withSystemToolsEngine(async (embeddedEngine) => - embeddedEngine.listWorkflows(), - ); - sendJson(response, 200, { workflows }, headers); - return true; - } - - if (request.method === "PUT" && url.pathname === "/api/workflows") { - const body = await parseBody(request); - const workflow = await withSystemToolsEngine(async (embeddedEngine) => - embeddedEngine.upsertWorkflow(body), - ); - sendJson(response, 200, { workflow }, headers); - return true; - } - - const workflowActionMatch = routeMatch( - url.pathname, - /^\/api\/workflows\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})\/(publish|run)$/u, - ); - if (request.method === "POST" && workflowActionMatch?.[2] === "publish") { - const published = await withSystemToolsEngine(async (embeddedEngine) => - embeddedEngine.publishWorkflow(workflowActionMatch[1]), - ); - restartRuntimes(); - sendJson(response, 200, { published }, headers); - return true; - } - if (request.method === "POST" && workflowActionMatch?.[2] === "run") { - const body = await parseBody(request); - const result = await withSystemToolsEngine(async (embeddedEngine) => - embeddedEngine.runWorkflow(workflowActionMatch[1], body), - ); - sendJson(response, 200, { result }, headers); - return true; - } - - const workflowMatch = routeMatch( - url.pathname, - /^\/api\/workflows\/([A-Za-z0-9][A-Za-z0-9._-]{0,127})$/u, - ); - if (request.method === "DELETE" && workflowMatch) { - await withSystemToolsEngine(async (embeddedEngine) => - embeddedEngine.deleteWorkflow( - workflowMatch[1], - request.headers["x-resource-revision"] || undefined, - ), - ); - restartRuntimes(); - sendJson(response, 200, { ok: true }, headers); - return true; - } - - throw new HttpError(404, "未找到该知识库或工作流接口。"); + throw new HttpError(404, "未找到该知识库接口。"); } async function handleRequest(request, response, token) { @@ -2059,6 +2002,7 @@ async function handleRequest(request, response, token) { const batch = await saveAttachmentBatch( attachmentUploadMatch[1], body.attachments, + { imagesAsFiles: body.imageMode === "file" }, ); sendJson( response, diff --git a/build/test-update-requirements.rqset b/build/test-update-requirements.rqset new file mode 100644 index 0000000..f5d9a9d --- /dev/null +++ b/build/test-update-requirements.rqset @@ -0,0 +1 @@ +designated => identifier "com.laobos.studio" diff --git a/config/laobos.cordis.patch.yml b/config/laobos.cordis.patch.yml index 995150b..5a793e3 100644 --- a/config/laobos.cordis.patch.yml +++ b/config/laobos.cordis.patch.yml @@ -48,3 +48,5 @@ name: '@laobos/dsh-market' config: profile: web + - id: laobos-updater + name: '@laobos/dsh-updater' diff --git a/desktop/domains/apps.mjs b/desktop/domains/apps.mjs index 5d18c42..6c2962a 100644 --- a/desktop/domains/apps.mjs +++ b/desktop/domains/apps.mjs @@ -1,9 +1,10 @@ import crypto from "node:crypto"; import { spawn } from "node:child_process"; -import { access, appendFile, mkdir, readFile, realpath, rename, rm, writeFile } from "node:fs/promises"; +import { access, appendFile, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises"; import net from "node:net"; import path from "node:path"; -import { boundedString, resolveAuthorizedPath } from "../ipc-security.mjs"; +import { boundedString } from "../ipc-security.mjs"; +import { resolveWorkspaceDirectory } from "../workspace-authorization.mjs"; const MAX_APPS = 100; const MAX_LOG_BYTES = 1_500_000; @@ -16,6 +17,7 @@ export function registerAppsIpc({ app, shell, workspace, + workspaceAuthorizer, authorize, getMainWindow, }) { @@ -47,7 +49,7 @@ export function registerAppsIpc({ const registry = await readManagedRegistry(registryFile); const entry = registry.find((item) => item.id === id); if (!entry) throw new Error("应用不存在。 "); - await appCwd(workspace, entry.cwd); + await appCwd(workspace, entry.cwd, workspaceAuthorizer); const port = normalizeManagedAppPort(entry.port); const observed = await applicationRuntime(entry, current); if (observed.state === "online") throw new Error(`端口 ${port} 当前在线,但进程不受本次应用管理器实例控制。请先释放端口或重启对应应用。`); @@ -164,7 +166,7 @@ export function registerAppsIpc({ ipcMain.handle("laobos:apps:detect", async (event, input = {}) => { authorize(event); - return detectApplication(await appCwd(workspace, input.cwd)); + return detectApplication(await appCwd(workspace, input.cwd, workspaceAuthorizer)); }); ipcMain.handle("laobos:apps:find-port", async (event, input = {}) => { @@ -180,7 +182,7 @@ export function registerAppsIpc({ const id = validId(input.id) || crypto.randomUUID(); const previous = registry.find((item) => item.id === id); if (["running", "starting", "stopping"].includes(runtime.get(id)?.state)) throw new Error("请先停止应用,再修改登记信息。 "); - const cwd = await appCwd(workspace, input.cwd); + const cwd = await appCwd(workspace, input.cwd, workspaceAuthorizer); const command = normalizeCommand(input.command); const args = normalizeArgs(input.args); let port; @@ -336,7 +338,18 @@ export async function findFreeApplicationPort(registry = [], start = MANAGED_APP throw new Error(`${MANAGED_APP_MIN_PORT}-${MANAGED_APP_MAX_PORT} 范围内没有可用端口。`); } -export function isTcpPortFree(port) { +export async function isTcpPortFree(port) { + // Probe the loopback and the wildcard address separately. On macOS/BSD, + // binding 127.0.0.1 can succeed while another socket already holds 0.0.0.0 + // (Flask-style `host="0.0.0.0"`), and the reverse is also true; a port is + // free only when both addresses accept a new bind. + for (const host of ["0.0.0.0", "127.0.0.1"]) { + if (!(await probeTcpBind(host, port))) return false; + } + return true; +} + +function probeTcpBind(host, port) { return new Promise((resolve, reject) => { const server = net.createServer(); server.unref(); @@ -344,7 +357,7 @@ export function isTcpPortFree(port) { if (error?.code === "EADDRINUSE" || error?.code === "EACCES") resolve(false); else reject(error); }); - server.listen({ host: "127.0.0.1", port, exclusive: true }, () => server.close(() => resolve(true))); + server.listen({ host, port, exclusive: true }, () => server.close(() => resolve(true))); }); } @@ -354,12 +367,14 @@ async function ensureApplicationPortAvailable(registry, port, ignoreId) { if (!(await isTcpPortFree(port))) throw new Error(`端口 ${port} 已被其他进程占用,请选择新的空闲端口。`); } -async function appCwd(workspace, requested) { +async function appCwd(workspace, requested, workspaceAuthorizer) { const value = boundedString(requested || workspace, "应用目录", 4096); - const root = await realpath(workspace); - const absolute = path.isAbsolute(value) ? value : path.resolve(root, value); - const canonical = await realpath(absolute); - return (await resolveAuthorizedPath(root, path.relative(root, canonical), { kind: "directory" })).path; + return resolveWorkspaceDirectory({ + authorizer: workspaceAuthorizer, + defaultRoot: workspace, + requested: value, + label: "应用工作区", + }); } async function readRegistry(filePath) { diff --git a/desktop/domains/browser.mjs b/desktop/domains/browser.mjs index f32a03d..e267bcb 100644 --- a/desktop/domains/browser.mjs +++ b/desktop/domains/browser.mjs @@ -1,9 +1,12 @@ import { spawn } from "node:child_process"; +import { createRequire } from "node:module"; import net from "node:net"; import path from "node:path"; import { boundedString } from "../ipc-security.mjs"; const BROWSEROPS_PORT = 57_321; +const require = createRequire(import.meta.url); +const BROWSER_HOME_URL = `data:text/html;charset=utf-8,${encodeURIComponent(`浏览器

内置浏览器已就绪

在上方输入 HTTP(S) 地址。预览本地项目时,请先启动对应的开发服务,再打开它实际监听的端口。

`)}`; export function registerBrowserIpc({ ipcMain, @@ -16,6 +19,8 @@ export function registerBrowserIpc({ let visible = false; let browserOpsChild; let browserOpsState = { state: "stopped", message: "" }; + let navigationError = ""; + let currentAddress = ""; ipcMain.handle("laobos:browser:show", (event, input = {}) => { authorize(event); @@ -41,7 +46,14 @@ export function registerBrowserIpc({ ipcMain.handle("laobos:browser:navigate", async (event, input = {}) => { authorize(event); const url = normalizeBrowserUrl(input.url); - await ensureView().webContents.loadURL(url); + currentAddress = url; + navigationError = ""; + try { + await ensureView().webContents.loadURL(url); + } catch (error) { + navigationError = friendlyNavigationError(error, url); + sendState(); + } return browserState(); }); @@ -59,7 +71,7 @@ export function registerBrowserIpc({ ipcMain.handle("laobos:browserops:status", async (event) => { authorize(event); if (!browserOpsChild && await canConnect(BROWSEROPS_PORT)) { - return { state: "external", message: `已检测到本机 BrowserOps daemon(端口 ${BROWSEROPS_PORT})` }; + browserOpsState = { state: "external", message: `已连接外部 BrowserOps daemon(端口 ${BROWSEROPS_PORT})` }; } return { ...browserOpsState }; }); @@ -71,47 +83,62 @@ export function registerBrowserIpc({ browserOpsState = { state: "external", message: `正在使用本机已有 daemon(端口 ${BROWSEROPS_PORT})` }; return { ...browserOpsState }; } - const daemon = path.join(app.getAppPath(), "node_modules", "@browserops", "bridge", "dist", "daemon.js"); + const daemon = resolveBrowserOpsDaemon(app.getAppPath()); browserOpsState = { state: "starting", message: "正在启动 BrowserOps daemon…" }; - browserOpsChild = spawn(process.execPath, [daemon], { + sendBrowserOpsState(); + const child = spawn(process.execPath, [daemon], { env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" }, stdio: ["ignore", "pipe", "pipe"], windowsHide: true, }); + browserOpsChild = child; let recent = ""; const collect = (chunk) => { recent = `${recent}${String(chunk)}`.slice(-2_000); - browserOpsState = { state: "running", message: recent.trim().split("\n").at(-1) || `端口 ${BROWSEROPS_PORT}` }; + if (browserOpsState.state === "starting") { + const detail = recent.trim().split("\n").at(-1); + browserOpsState = { state: "starting", message: detail ? `正在启动:${detail}` : "正在启动 BrowserOps daemon…" }; + } sendBrowserOpsState(); }; - browserOpsChild.stdout.on("data", collect); - browserOpsChild.stderr.on("data", collect); - browserOpsChild.once("error", (error) => { - browserOpsChild = undefined; + child.stdout.on("data", collect); + child.stderr.on("data", collect); + child.once("error", (error) => { + if (browserOpsChild === child) browserOpsChild = undefined; browserOpsState = { state: "error", message: error.message }; sendBrowserOpsState(); }); - browserOpsChild.once("exit", (code, signal) => { + child.once("exit", (code, signal) => { + if (browserOpsChild !== child) return; browserOpsChild = undefined; - browserOpsState = { state: code === 0 ? "stopped" : "error", message: `daemon 已退出(code=${String(code)}, signal=${String(signal)})` }; + if (browserOpsState.state === "stopping") browserOpsState = { state: "stopped", message: "BrowserOps daemon 已停止" }; + else if (browserOpsState.state !== "error") browserOpsState = { state: code === 0 ? "stopped" : "error", message: `daemon 已退出(code=${String(code)}, signal=${String(signal)})` }; sendBrowserOpsState(); }); - for (let attempt = 0; attempt < 20; attempt += 1) { + for (let attempt = 0; attempt < 40; attempt += 1) { if (await canConnect(BROWSEROPS_PORT)) { browserOpsState = { state: "running", message: `BrowserOps daemon 已就绪(端口 ${BROWSEROPS_PORT})` }; sendBrowserOpsState(); - break; + return { ...browserOpsState }; } - await new Promise((resolve) => setTimeout(resolve, 100)); + if (!browserOpsChild) break; + await new Promise((resolve) => setTimeout(resolve, 150)); + } + if (browserOpsChild === child) { + browserOpsState = { state: "error", message: recent.trim().split("\n").at(-1) || "BrowserOps daemon 启动超时,请检查安装或端口占用。" }; + child.kill("SIGTERM"); + sendBrowserOpsState(); } return { ...browserOpsState }; }); ipcMain.handle("laobos:browserops:stop", (event) => { authorize(event); - if (!browserOpsChild) return { stopped: false, state: browserOpsState.state }; + if (!browserOpsChild) return { stopped: false, ...browserOpsState }; + browserOpsState = { state: "stopping", message: "正在停止 BrowserOps daemon…" }; + sendBrowserOpsState(); browserOpsChild.kill("SIGTERM"); - return { stopped: true, state: "stopping" }; + return { stopped: true, ...browserOpsState }; }); function ensureView() { @@ -129,6 +156,7 @@ export function registerBrowserIpc({ }); window.contentView.addChildView(view); view.setBackgroundColor("#ffffff"); + void view.webContents.loadURL(BROWSER_HOME_URL); view.webContents.setWindowOpenHandler(({ url }) => { try { void view.webContents.loadURL(normalizeBrowserUrl(url)); } catch {} return { action: "deny" }; @@ -136,9 +164,16 @@ export function registerBrowserIpc({ view.webContents.on("will-navigate", (event, url) => { try { normalizeBrowserUrl(url); } catch { event.preventDefault(); } }); - for (const eventName of ["did-start-loading", "did-stop-loading", "did-navigate", "did-navigate-in-page", "page-title-updated"]) { - view.webContents.on(eventName, sendState); - } + view.webContents.on("did-start-loading", () => { navigationError = ""; sendState(); }); + view.webContents.on("did-stop-loading", sendState); + view.webContents.on("did-navigate", (_event, url) => { if (!url.startsWith("data:")) currentAddress = url; sendState(); }); + view.webContents.on("did-navigate-in-page", (_event, url) => { currentAddress = url; sendState(); }); + view.webContents.on("page-title-updated", sendState); + view.webContents.on("did-fail-load", (_event, errorCode, errorDescription, validatedURL, isMainFrame) => { + if (!isMainFrame || errorCode === -3) return; + navigationError = friendlyNavigationError({ code: errorCode, message: errorDescription }, validatedURL || currentAddress); + sendState(); + }); syncVisibility(); return view; } @@ -154,8 +189,9 @@ export function registerBrowserIpc({ const history = contents?.navigationHistory; return { visible, - url: contents?.getURL() || "", + url: currentAddress, title: contents?.getTitle() || "", + error: navigationError, loading: contents?.isLoading() || false, canGoBack: history?.canGoBack() || false, canGoForward: history?.canGoForward() || false, @@ -187,14 +223,33 @@ export function registerBrowserIpc({ export function normalizeBrowserUrl(value) { let input = boundedString(value, "浏览器地址", 8_192).trim(); - if (!input) input = "http://127.0.0.1:3000"; + if (!input) throw new Error("请输入要打开的 HTTP(S) 地址。"); if (!/^[a-z][a-z\d+.-]*:\/\//iu.test(input)) input = `http://${input}`; const url = new URL(input); - if (url.protocol !== "http:" && url.protocol !== "https:") throw new Error("浏览器预览只允许 HTTP(S) 地址。 "); - if (url.username || url.password) throw new Error("浏览器地址不能包含用户名或密码。 "); + if (url.protocol !== "http:" && url.protocol !== "https:") throw new Error("浏览器预览只允许 HTTP(S) 地址。"); + if (url.username || url.password) throw new Error("浏览器地址不能包含用户名或密码。"); return url.toString(); } +export function friendlyNavigationError(error, url) { + const message = String(error?.message || error || ""); + const target = (() => { try { return new URL(url).host; } catch { return url || "该地址"; } })(); + if (Number(error?.code) === -102 || /ERR_CONNECTION_REFUSED/iu.test(message)) { + return `无法连接到 ${target}。如果这是本地项目,请先启动开发服务并确认端口。`; + } + if (Number(error?.code) === -105 || /ERR_NAME_NOT_RESOLVED/iu.test(message)) return `找不到 ${target},请检查地址是否正确。`; + if (Number(error?.code) === -106 || /ERR_INTERNET_DISCONNECTED/iu.test(message)) return "当前网络不可用,请检查网络连接。"; + return `页面加载失败:${message.replace(/^Error:\s*/u, "") || "未知错误"}`; +} + +export function resolveBrowserOpsDaemon(appPath) { + try { + return path.join(path.dirname(require.resolve("@browserops/bridge/package.json")), "dist", "daemon.js"); + } catch { + return path.join(appPath, "node_modules", "@browserops", "bridge", "dist", "daemon.js"); + } +} + function clampDimension(value, minimum, maximum) { const number = Number(value); return Math.min(Math.max(minimum, Number.isFinite(number) ? Math.round(number) : minimum), Math.max(minimum, maximum)); diff --git a/desktop/domains/clipboard.mjs b/desktop/domains/clipboard.mjs new file mode 100644 index 0000000..c7f4629 --- /dev/null +++ b/desktop/domains/clipboard.mjs @@ -0,0 +1,14 @@ +import { boundedString } from "../ipc-security.mjs"; + +const MAX_CLIPBOARD_TEXT_LENGTH = 10 * 1024 * 1024; + +export function registerClipboardIpc({ ipcMain, clipboard, authorize }) { + ipcMain.handle("laobos:clipboard:write-text", (event, input = {}) => { + authorize(event); + const text = boundedString(input.text, "剪贴板内容", MAX_CLIPBOARD_TEXT_LENGTH); + clipboard.writeText(text); + return { written: true }; + }); + + return () => ipcMain.removeHandler("laobos:clipboard:write-text"); +} diff --git a/desktop/domains/conversation-export.mjs b/desktop/domains/conversation-export.mjs index 3900698..8ee9600 100644 --- a/desktop/domains/conversation-export.mjs +++ b/desktop/domains/conversation-export.mjs @@ -1,72 +1,42 @@ -import crypto from "node:crypto"; -import { mkdir, rm, writeFile } from "node:fs/promises"; +import { writeFile } from "node:fs/promises"; import path from "node:path"; -import { pathToFileURL } from "node:url"; import { boundedString } from "../ipc-security.mjs"; -const MAX_EXPORT_HTML_BYTES = 20 * 1024 * 1024; +const MAX_EXPORT_HTML_BYTES = 100 * 1024 * 1024; export function registerConversationExportIpc({ ipcMain, - BrowserWindow, dialog, app, authorize, getMainWindow, }) { - ipcMain.handle("laobos:pdf:export-conversation", async (event, input = {}) => { + ipcMain.handle("laobos:html:export-conversation", async (event, input = {}) => { authorize(event); const html = boundedString(input.html, "导出内容", MAX_EXPORT_HTML_BYTES); - const suggestedName = safePdfName(input.suggestedName); + const suggestedName = safeHtmlName(input.suggestedName); const parent = getMainWindow(); const result = await dialog.showSaveDialog(parent, { - title: "导出会话为 PDF", + title: "导出会话为 HTML", defaultPath: path.join(app.getPath("documents"), suggestedName), - filters: [{ name: "PDF 文档", extensions: ["pdf"] }], + filters: [{ name: "HTML 文档", extensions: ["html"] }], properties: ["showOverwriteConfirmation", "createDirectory"], }); if (result.canceled || !result.filePath) return { canceled: true }; - const tempRoot = path.join(app.getPath("temp"), "laobos-conversation-export"); - await mkdir(tempRoot, { recursive: true, mode: 0o700 }); - const tempFile = path.join(tempRoot, `${crypto.randomUUID()}.html`); - await writeFile(tempFile, html, { encoding: "utf8", mode: 0o600 }); - - const exportWindow = new BrowserWindow({ - show: false, - width: 900, - height: 1200, - webPreferences: { - contextIsolation: true, - nodeIntegration: false, - sandbox: true, - }, - }); - - try { - await exportWindow.loadURL(pathToFileURL(tempFile).toString()); - const pdf = await exportWindow.webContents.printToPDF({ - printBackground: true, - pageSize: "A4", - preferCSSPageSize: true, - }); - await writeFile(result.filePath, pdf, { mode: 0o600 }); - return { canceled: false, filePath: result.filePath }; - } finally { - if (!exportWindow.isDestroyed()) exportWindow.destroy(); - await rm(tempFile, { force: true }); - } + await writeFile(result.filePath, html, { encoding: "utf8", mode: 0o600 }); + return { canceled: false, filePath: result.filePath }; }); - return () => ipcMain.removeHandler("laobos:pdf:export-conversation"); + return () => ipcMain.removeHandler("laobos:html:export-conversation"); } -export function safePdfName(value) { +export function safeHtmlName(value) { const base = typeof value === "string" && value.trim() ? value.trim() : "劳博士会话"; const sanitized = base .replace(/[\\/:*?"<>|\u0000-\u001f]/gu, "-") .replace(/\s+/gu, " ") .slice(0, 120) .replace(/[. ]+$/gu, ""); - return `${sanitized || "劳博士会话"}.pdf`; + return `${sanitized || "劳博士会话"}.html`; } diff --git a/desktop/domains/desktop-settings.mjs b/desktop/domains/desktop-settings.mjs index fbab83a..1a6f597 100644 --- a/desktop/domains/desktop-settings.mjs +++ b/desktop/domains/desktop-settings.mjs @@ -2,10 +2,33 @@ import { mkdir, readFile, rename, writeFile } from "node:fs/promises"; import path from "node:path"; const DEFAULTS = Object.freeze({ - version: 2, + version: 5, uploadLocation: "default", + autoCheckUpdates: true, + lastUpdateCheckAt: null, + pendingUpdate: null, + authorizedWorkspaces: [], }); +function normalizePendingUpdate(value) { + if (!value || typeof value !== "object") return null; + const version = typeof value.version === "string" ? value.version.slice(0, 64) : ""; + if (!/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/u.test(version)) return null; + return { + version, + releaseName: typeof value.releaseName === "string" ? value.releaseName.slice(0, 256) : "", + releaseNotes: typeof value.releaseNotes === "string" ? value.releaseNotes.slice(0, 20_000) : "", + releaseDate: + typeof value.releaseDate === "string" && Number.isFinite(Date.parse(value.releaseDate)) + ? value.releaseDate + : "", + downloadedAt: + typeof value.downloadedAt === "string" && Number.isFinite(Date.parse(value.downloadedAt)) + ? value.downloadedAt + : null, + }; +} + export class DesktopSettingsStore { constructor(filePath) { this.filePath = filePath; @@ -51,11 +74,37 @@ export class DesktopSettingsStore { } export function normalizeSettings(value) { + const compatible = [2, 3, 4, 5].includes(value?.version); + const lastUpdateCheckAt = + [3, 4, 5].includes(value?.version) && + typeof value.lastUpdateCheckAt === "string" && + Number.isFinite(Date.parse(value.lastUpdateCheckAt)) + ? value.lastUpdateCheckAt + : null; return { - version: 2, + version: 5, uploadLocation: - value?.version === 2 && value?.uploadLocation === "workspace" + compatible && value?.uploadLocation === "workspace" ? "workspace" : "default", + autoCheckUpdates: + [3, 4, 5].includes(value?.version) ? value.autoCheckUpdates !== false : true, + lastUpdateCheckAt, + pendingUpdate: [4, 5].includes(value?.version) ? normalizePendingUpdate(value.pendingUpdate) : null, + authorizedWorkspaces: value?.version === 5 + ? normalizeAuthorizedWorkspaces(value.authorizedWorkspaces) + : [], }; } + +function normalizeAuthorizedWorkspaces(value) { + if (!Array.isArray(value)) return []; + const roots = []; + for (const entry of value) { + if (typeof entry !== "string" || !path.isAbsolute(entry) || entry.length > 4096) continue; + const normalized = path.normalize(entry); + const key = process.platform === "win32" ? normalized.toLowerCase() : normalized; + if (!roots.some((root) => root.key === key)) roots.push({ key, value: normalized }); + } + return roots.slice(-64).map((root) => root.value); +} diff --git a/desktop/domains/git-review.mjs b/desktop/domains/git-review.mjs index 94877bb..ad208a4 100644 --- a/desktop/domains/git-review.mjs +++ b/desktop/domains/git-review.mjs @@ -1,5 +1,5 @@ -import path from "node:path"; -import { boundedString, resolveAuthorizedPath } from "../ipc-security.mjs"; +import { boundedString } from "../ipc-security.mjs"; +import { resolveWorkspaceDirectory } from "../workspace-authorization.mjs"; import { branchGit, commitGit, @@ -28,10 +28,10 @@ const channels = [ "laobos:git:sync", ]; -export function registerGitReviewIpc({ ipcMain, workspace, authorize }) { +export function registerGitReviewIpc({ ipcMain, workspace, workspaceAuthorizer, authorize }) { const handle = (channel, operation) => ipcMain.handle(channel, async (event, input = {}) => { authorize(event); - const root = await gitRoot(workspace, input.root); + const root = await gitRoot(workspace, input.root, workspaceAuthorizer); return operation(root, input); }); @@ -60,10 +60,14 @@ export function registerGitReviewIpc({ ipcMain, workspace, authorize }) { }; } -async function gitRoot(workspace, requested) { +async function gitRoot(workspace, requested, workspaceAuthorizer) { const root = requested ? boundedString(requested, "工作区路径", 4_096) : workspace; - const relative = path.relative(workspace, path.resolve(root)); - return (await resolveAuthorizedPath(workspace, relative, { kind: "directory" })).path; + return resolveWorkspaceDirectory({ + authorizer: workspaceAuthorizer, + defaultRoot: workspace, + requested: root, + label: "Git 工作区", + }); } // Kept for compatibility with existing callers and fixtures. diff --git a/desktop/domains/shell.mjs b/desktop/domains/shell.mjs index d68a67b..22b21e1 100644 --- a/desktop/domains/shell.mjs +++ b/desktop/domains/shell.mjs @@ -3,19 +3,54 @@ import { access, mkdir, rename, writeFile } from "node:fs/promises"; import path from "node:path"; const READY_MARKER = "LAOBOS_WSL_READY"; -const ALLOWED_DISTRIBUTIONS = new Set(["Ubuntu", "Debian"]); +const ALLOWED_DISTRIBUTIONS = new Set(["Ubuntu", "Ubuntu-24.04", "Debian"]); export function laobosShellStatePath(dshHome) { return path.join(dshHome, "data", "laobos-shell-state.json"); } export function parseWslDistributions(output) { - return String(output || "") + return decodeWindowsNativeOutput(output) .replaceAll("\0", "") .replace(/^\uFEFF/u, "") .split(/\r?\n/u) .map((line) => line.trim().replace(/^\*\s*/u, "")) - .filter(Boolean); + .filter((line) => line + && line.length <= 128 + && !/(?:未安装|没有安装|no installed|usage:|用法:|适用于 Linux)/iu.test(line)); +} + +export function decodeWindowsNativeOutput(value) { + if (Buffer.isBuffer(value)) { + if (value.length === 0) return ""; + const hasUtf16Bom = value[0] === 0xff && value[1] === 0xfe; + const utf8 = value.toString("utf8"); + const utf16 = value.toString("utf16le").replace(/^\uFEFF/u, ""); + let zeroes = 0; + for (let index = 1; index < Math.min(value.length, 256); index += 2) { + if (value[index] === 0) zeroes += 1; + } + const sampledPairs = Math.floor(Math.min(value.length, 256) / 2); + const utf8LooksMisdecoded = utf8.includes("\0") + || (utf8.match(/\uFFFD/gu)?.length || 0) > Math.max(1, utf8.length * 0.03); + if (hasUtf16Bom + || (sampledPairs > 2 && zeroes / sampledPairs > 0.35) + || (value.length % 2 === 0 && utf8LooksMisdecoded && looksLikeText(utf16))) { + return utf16; + } + return utf8.replace(/^\uFEFF/u, ""); + } + return String(value || "").replace(/^\uFEFF/u, ""); +} + +function looksLikeText(value) { + if (!value) return true; + let controls = 0; + for (const character of value) { + const code = character.codePointAt(0); + if (code < 32 && ![9, 10, 13].includes(code)) controls += 1; + } + return controls / value.length < 0.02; } export function preferredWslDistribution(distributions, preferred) { @@ -28,7 +63,7 @@ export function preferredWslDistribution(distributions, preferred) { export function runFile(executable, args, options = {}) { return new Promise((resolve) => { execFile(executable, args, { - encoding: "utf8", + encoding: options.outputEncoding === "windows-native" ? null : "utf8", windowsHide: true, timeout: options.timeoutMs ?? 10_000, maxBuffer: options.maxBuffer ?? 1024 * 1024, @@ -37,8 +72,12 @@ export function runFile(executable, args, options = {}) { code: error ? Number.isInteger(error.code) ? error.code : -1 : 0, signal: error?.signal || null, timedOut: error?.killed === true, - stdout: String(stdout), - stderr: String(stderr || error?.message || ""), + stdout: options.outputEncoding === "windows-native" + ? decodeWindowsNativeOutput(stdout) + : String(stdout), + stderr: options.outputEncoding === "windows-native" + ? decodeWindowsNativeOutput(stderr) || String(error?.message || "") + : String(stderr || error?.message || ""), }); }); }); @@ -89,15 +128,23 @@ export async function detectShellEnvironment({ path.join(systemRoot, "System32", "wsl.exe"), ], canAccess); let listResult; + let statusResult; let distributions = []; let distribution; let wslReady = false; let healthResult; if (wslExecutable) { - listResult = await execute(wslExecutable, ["--list", "--quiet"], { - timeoutMs: 10_000, - }); + [statusResult, listResult] = await Promise.all([ + execute(wslExecutable, ["--status"], { + timeoutMs: 10_000, + outputEncoding: "windows-native", + }), + execute(wslExecutable, ["--list", "--quiet"], { + timeoutMs: 10_000, + outputEncoding: "windows-native", + }), + ]); if (listResult.code === 0) { distributions = parseWslDistributions(listResult.stdout); distribution = preferredWslDistribution( @@ -112,8 +159,8 @@ export async function detectShellEnvironment({ "--exec", "bash", "-lc", - `printf ${READY_MARKER}`, - ], { timeoutMs: 15_000 }); + `printf '${READY_MARKER}:%s' "$(id -u)"`, + ], { timeoutMs: 30_000, outputEncoding: "windows-native" }); wslReady = healthResult.code === 0 && healthResult.stdout.includes(READY_MARKER); } @@ -127,14 +174,34 @@ export async function detectShellEnvironment({ const powershellExecutable = await firstAccessible([ path.join(systemRoot, "System32", "WindowsPowerShell", "v1.0", "powershell.exe"), ], canAccess) || "powershell.exe"; + const defaultUserIsRoot = wslReady + && healthResult.stdout.includes(`${READY_MARKER}:0`); + const restartRequired = !distribution && wslRestartRequired(statusResult, listResult); + const phase = wslReady + ? defaultUserIsRoot ? "user-setup-required" : "ready" + : distribution + ? "initialization-required" + : restartRequired + ? "restart-required" + : wslExecutable + ? "distribution-required" + : "component-required"; const selectedBackend = wslReady ? "wsl" : gitBashExecutable ? "git-bash" : "powershell"; - const status = wslReady ? "ready" : "compatible"; + const status = wslReady && !defaultUserIsRoot ? "ready" : "attention"; const message = wslReady - ? `WSL ${distribution} 已就绪,性能模式将使用 Linux Bash。` + ? defaultUserIsRoot + ? `WSL ${distribution} 已可用,但默认登录用户仍是 root;建议完成普通 Linux 用户设置。` + : `WSL ${distribution} 已就绪,性能模式将使用 Linux Bash。` + : distribution + ? healthResult?.timedOut + ? `${distribution} 首次初始化超时,可能有初始化窗口或 OOBE 正在等待。` + : `${distribution} 已安装,但 Bash 尚未通过健康检查。` + : restartRequired + ? "WSL 组件变更需要重启 Windows 后才能生效。" : selectedBackend === "git-bash" ? "WSL 尚未就绪,当前使用 Git Bash 兼容后端。" : "WSL 尚未就绪,当前使用 PowerShell 兼容模式。"; @@ -142,19 +209,21 @@ export async function detectShellEnvironment({ return { version: 1, platform, - phase: wslReady ? "ready" : "fallback", + phase, status, selectedBackend, message, progress: { kind: "determinate", percent: wslReady ? 100 : 0 }, installAvailable: true, - requiresRestart: false, + requiresRestart: restartRequired, wsl: { executable: wslExecutable, available: Boolean(wslExecutable), - componentEnabled: listResult?.code === 0, + componentEnabled: statusResult?.code === 0 || listResult?.code === 0, installed: Boolean(distribution), ready: wslReady, + defaultUserIsRoot, + initializationBlocked: Boolean(distribution && healthResult?.timedOut), distributions, distribution, }, @@ -162,19 +231,30 @@ export async function detectShellEnvironment({ powershell: { executable: powershellExecutable }, diagnostics: { list: diagnosticText(listResult), + status: diagnosticText(statusResult), health: diagnosticText(healthResult), }, updatedAt: now(), }; } +function wslRestartRequired(...results) { + const text = results.map((result) => diagnosticText(result)).join("\n"); + return [ + /restart|required.*reboot|reboot.*required/iu, + /重启|重新启动/u, + /virtualmachineplatform|virtual machine platform/iu, + /虚拟机平台|未启用虚拟化/u, + ].some((pattern) => pattern.test(text)); +} + function quotePowerShellLiteral(value) { return `'${String(value).replaceAll("'", "''")}'`; } export async function runElevatedWslInstall({ state, - distribution = "Ubuntu", + distribution = "Ubuntu-24.04", execute = runFile, }) { if (!ALLOWED_DISTRIBUTIONS.has(distribution)) { @@ -213,7 +293,7 @@ export function buildShellRepairPrompt(state) { diagnostics: state.diagnostics, lastError: state.lastError, }, null, 2); - return `请帮助我诊断并修复劳博士的 WSL/Shell 环境。\n\n当前脱敏诊断数据:\n\n\`\`\`json\n${diagnostics}\n\`\`\`\n\n请先执行只读诊断,判断是 WSL 组件、Linux 发行版、虚拟化、重启、网络还是企业策略问题。给出结论和最小修复步骤。任何需要管理员权限、启停 Windows 功能、安装软件、重启或修改系统策略的动作,都必须先解释影响并征得我的明确确认;不要关闭安全软件,不要执行来源不明的脚本,也不要重复执行可能已经部分成功的安装命令。修复后请使用 wsl.exe --status、wsl.exe --list --verbose 和一个无副作用的 Bash 命令验证。`; + return `请帮助我诊断并修复劳博士的 WSL/Shell 环境。\n\n当前脱敏诊断数据:\n\n\`\`\`json\n${diagnostics}\n\`\`\`\n\n请先执行只读诊断,判断是 WSL 组件、Linux 发行版、虚拟化、待重启、首次初始化/OOBE、网络还是企业策略问题。给出结论和最小修复步骤。Windows 中文环境的 wsl.exe 输出可能是 UTF-16LE;乱码时应采集原始字节并显式解码,不要据乱码下结论。若功能状态与运行状态矛盾,请比较 DISM/CBS 功能变更时间与本次开机时间。若 wsl --install 已下载发行版但一直不退出,先查残留进程、发行版注册状态和 HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Lxss 下的 RunOOBE;只有确认是 OOBE 门闩且获得用户许可后,才可提出修改注册表并配合 wsl --shutdown 的可逆方案。复杂 Linux 命令不要经 cmd.exe 二次转义。若默认 uid 为 0,还需引导创建普通 Linux 用户并设置为默认用户。任何需要管理员权限、启停 Windows 功能、安装软件、重启、结束进程或修改注册表/系统策略的动作,都必须先解释影响并征得我的明确确认;不要关闭安全软件,不要执行来源不明的脚本,也不要重复执行可能已经部分成功的安装命令。若 pwsh 等最小命令出现 0xC0000142,先对比沙箱内外启动,区分注入层兼容问题与系统损坏。修复后请使用 wsl.exe --status、wsl.exe --list --verbose 和一个无副作用的 Bash 命令验证。`; } export class LaobosShellManager { @@ -280,7 +360,7 @@ export class LaobosShellManager { return this.refreshing; } - async install(distribution = "Ubuntu") { + async install(distribution = "Ubuntu-24.04") { if (this.platform !== "win32") throw new Error("当前系统不需要安装 WSL。 "); if (this.installing) return this.installing; if (!ALLOWED_DISTRIBUTIONS.has(distribution)) throw new Error("不支持的 WSL 发行版。 "); @@ -324,17 +404,7 @@ export class LaobosShellManager { canAccess: this.canAccess, preferredDistribution: distribution, }); - if (!detected.wsl?.ready) { - detected.phase = detected.wsl?.installed - ? "initialization-required" - : "restart-required"; - detected.status = "attention"; - detected.requiresRestart = !detected.wsl?.installed; - detected.message = detected.requiresRestart - ? "WSL 组件已安装,重启 Windows 后将自动继续检测。" - : "Linux 发行版已安装,需要完成首次初始化。"; - detected.progress = { kind: "determinate", percent: 90 }; - } + if (!detected.wsl?.ready) detected.progress = { kind: "determinate", percent: 90 }; await this.update(detected, true); return this.snapshot(); })().finally(() => { @@ -420,7 +490,7 @@ export function registerShellIpc({ }); ipcMain.handle("laobos:shell:install-wsl", async (event, input = {}) => { authorize(event); - return manager.install(input.distribution || "Ubuntu"); + return manager.install(input.distribution || "Ubuntu-24.04"); }); ipcMain.handle("laobos:shell:initialize-wsl", async (event) => { authorize(event); diff --git a/desktop/domains/terminal.mjs b/desktop/domains/terminal.mjs index 9c96013..7889dc6 100644 --- a/desktop/domains/terminal.mjs +++ b/desktop/domains/terminal.mjs @@ -3,7 +3,8 @@ import { spawnSync } from "node:child_process"; import fs from "node:fs"; import path from "node:path"; import * as pty from "node-pty"; -import { boundedString, resolveAuthorizedPath } from "../ipc-security.mjs"; +import { boundedString } from "../ipc-security.mjs"; +import { resolveWorkspaceDirectory } from "../workspace-authorization.mjs"; const MAX_TERMINALS = 8; const MAX_WRITE_BYTES = 64 * 1024; @@ -11,6 +12,7 @@ const MAX_WRITE_BYTES = 64 * 1024; export function registerTerminalIpc({ ipcMain, workspace, + workspaceAuthorizer, authorize, getMainWindow, }) { @@ -19,7 +21,7 @@ export function registerTerminalIpc({ ipcMain.handle("laobos:terminal:create", async (event, input = {}) => { authorize(event); if (terminals.size >= MAX_TERMINALS) throw new Error(`终端数量已达到上限(${MAX_TERMINALS})。`); - const cwd = await terminalCwd(workspace, input.cwd); + const cwd = await terminalCwd(workspace, input.cwd, workspaceAuthorizer); const cols = dimension(input.cols, 80, 20, 500); const rows = dimension(input.rows, 24, 5, 200); const tmuxRequested = input.tmux === true && process.platform !== "win32"; @@ -167,10 +169,14 @@ export function findExecutable(command, envPath = process.env.PATH || "") { return undefined; } -async function terminalCwd(workspace, requested) { +async function terminalCwd(workspace, requested, workspaceAuthorizer) { const value = requested ? boundedString(requested, "终端目录", 4096) : workspace; - const relative = path.relative(workspace, path.resolve(value)); - return (await resolveAuthorizedPath(workspace, relative, { kind: "directory" })).path; + return resolveWorkspaceDirectory({ + authorizer: workspaceAuthorizer, + defaultRoot: workspace, + requested: value, + label: "终端工作区", + }); } function terminalTmuxKey(value) { diff --git a/desktop/domains/updater.mjs b/desktop/domains/updater.mjs new file mode 100644 index 0000000..09b362f --- /dev/null +++ b/desktop/domains/updater.mjs @@ -0,0 +1,382 @@ +import electronUpdater from "electron-updater"; +const AUTO_CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; +const AUTO_CHECK_DELAY_MS = 15_000; +const MAX_RELEASE_NOTES_LENGTH = 20_000; + +function text(value, maximum = 512) { + return typeof value === "string" ? value.slice(0, maximum) : ""; +} + +function releaseNotes(value) { + if (typeof value === "string") { + return value + .replace(/<\s*br\s*\/?\s*>/giu, "\n") + .replace(/<\s*\/p\s*>/giu, "\n\n") + .replace(/<\s*li(?:\s[^>]*)?>/giu, "- ") + .replace(/<[^>]+>/gu, "") + .replace(/ /giu, " ") + .replace(/&/giu, "&") + .replace(/</giu, "<") + .replace(/>/giu, ">") + .replace(/"/giu, '"') + .replace(/'/giu, "'") + .trim() + .slice(0, MAX_RELEASE_NOTES_LENGTH); + } + if (!Array.isArray(value)) return ""; + return value + .map((item) => `${text(item?.version, 64)}\n${releaseNotes(item?.note).slice(0, 5_000)}`.trim()) + .filter(Boolean) + .join("\n\n") + .slice(0, MAX_RELEASE_NOTES_LENGTH); +} + +function updateInfo(info = {}) { + return { + availableVersion: text(info.version, 64), + releaseName: text(info.releaseName, 256), + releaseNotes: releaseNotes(info.releaseNotes), + releaseDate: text(info.releaseDate, 64), + }; +} + +function errorInfo(error) { + return { + code: text(error?.code, 128), + message: text(error instanceof Error ? error.message : String(error), 2_000), + }; +} + +function compareVersions(left, right) { + const leftParts = String(left).split(/[.+-]/u).slice(0, 3).map(Number); + const rightParts = String(right).split(/[.+-]/u).slice(0, 3).map(Number); + for (let index = 0; index < 3; index += 1) { + const difference = (leftParts[index] || 0) - (rightParts[index] || 0); + if (difference !== 0) return Math.sign(difference); + } + return String(left).localeCompare(String(right), "en", { numeric: true }); +} + +export class DesktopUpdater { + constructor({ + updater, + app, + settings, + getMainWindow, + platform = process.platform, + logger = console, + now = () => Date.now(), + setTimer = setTimeout, + clearTimer = clearTimeout, + }) { + this.updater = updater; + this.app = app; + this.settings = settings; + this.getMainWindow = getMainWindow; + this.logger = logger; + this.now = now; + this.setTimer = setTimer; + this.clearTimer = clearTimer; + this.timer = undefined; + this.listeners = []; + this.pendingWrite = Promise.resolve(); + this.restoring = false; + this.supported = app.isPackaged && ["darwin", "win32"].includes(platform); + this.state = { + schema: 1, + supported: this.supported, + phase: this.supported ? "idle" : "disabled", + currentVersion: app.getVersion(), + availableVersion: "", + releaseName: "", + releaseNotes: "", + releaseDate: "", + progress: null, + cached: false, + error: null, + }; + + if (this.supported && !this.updater) { + throw new Error("当前平台缺少 Electron 更新器。"); + } + if (this.supported) this.configure(); + } + + configure() { + this.updater.autoDownload = false; + this.updater.autoInstallOnAppQuit = false; + this.updater.allowPrerelease = false; + this.updater.logger = this.logger; + + this.listen("checking-for-update", () => { + this.publish({ phase: "checking", progress: null, error: null }); + }); + this.listen("update-available", (info) => { + this.publish({ + phase: "available", + ...updateInfo(info), + progress: null, + cached: this.restoring, + error: null, + }); + }); + this.listen("update-not-available", () => { + void this.clearPendingUpdate(); + this.publish({ + phase: "up-to-date", + availableVersion: "", + releaseName: "", + releaseNotes: "", + releaseDate: "", + progress: null, + cached: false, + error: null, + }); + }); + this.listen("download-progress", (progress = {}) => { + this.publish({ + phase: "downloading", + progress: { + percent: Number.isFinite(progress.percent) ? progress.percent : 0, + bytesPerSecond: Number.isFinite(progress.bytesPerSecond) ? progress.bytesPerSecond : 0, + transferred: Number.isFinite(progress.transferred) ? progress.transferred : 0, + total: Number.isFinite(progress.total) ? progress.total : 0, + }, + error: null, + }); + }); + this.listen("update-downloaded", (info) => { + const received = updateInfo(info); + const next = { + availableVersion: received.availableVersion || this.state.availableVersion, + releaseName: received.releaseName || this.state.releaseName, + releaseNotes: received.releaseNotes || this.state.releaseNotes, + releaseDate: received.releaseDate || this.state.releaseDate, + }; + this.persistPendingUpdate(next); + this.publish({ + phase: "downloaded", + ...next, + progress: null, + cached: true, + error: null, + }); + }); + this.listen("error", (error) => { + this.publish({ + phase: this.state.phase === "installing" ? "downloaded" : "error", + progress: null, + error: errorInfo(error), + }); + }); + } + + persistPendingUpdate(info) { + const pendingUpdate = { + version: info.availableVersion, + releaseName: info.releaseName, + releaseNotes: info.releaseNotes, + releaseDate: info.releaseDate, + downloadedAt: new Date(this.now()).toISOString(), + }; + this.pendingWrite = this.pendingWrite + .then(() => this.settings.update({ pendingUpdate })) + .catch((error) => this.logger.warn?.("无法保存更新缓存状态:", error)); + return this.pendingWrite; + } + + clearPendingUpdate() { + this.pendingWrite = this.pendingWrite + .then(() => this.settings.update({ pendingUpdate: null })) + .catch((error) => this.logger.warn?.("无法清除更新缓存状态:", error)); + return this.pendingWrite; + } + + async initialize() { + if (!this.supported) return this.snapshot(); + const preferences = await this.settings.get(); + const pending = preferences.pendingUpdate; + if (!pending) return this.snapshot(); + if (compareVersions(pending.version, this.state.currentVersion) <= 0) { + await this.clearPendingUpdate(); + return this.snapshot(); + } + + this.restoring = true; + this.publish({ + phase: "restoring", + availableVersion: pending.version, + releaseName: pending.releaseName, + releaseNotes: pending.releaseNotes, + releaseDate: pending.releaseDate, + progress: null, + cached: true, + error: null, + }); + try { + const result = await this.updater.checkForUpdates(); + const latestVersion = result?.updateInfo?.version || this.state.availableVersion; + if (latestVersion !== pending.version) { + await this.clearPendingUpdate(); + this.publish({ cached: false }); + return this.snapshot(); + } + await this.updater.downloadUpdate(); + await this.pendingWrite; + } catch (error) { + if (!this.state.error) this.publish({ phase: "error", cached: true, error: errorInfo(error) }); + } finally { + this.restoring = false; + } + return this.snapshot(); + } + + listen(event, listener) { + this.updater.on(event, listener); + this.listeners.push([event, listener]); + } + + snapshot() { + return structuredClone(this.state); + } + + publish(patch) { + this.state = { ...this.state, ...patch }; + const snapshot = this.snapshot(); + const window = this.getMainWindow?.(); + if (window && !window.isDestroyed()) { + window.webContents.send("laobos:updates:state", snapshot); + } + return snapshot; + } + + async preferences() { + const value = await this.settings.get(); + return { + autoCheckUpdates: value.autoCheckUpdates !== false, + lastUpdateCheckAt: value.lastUpdateCheckAt || null, + }; + } + + async setPreferences(input = {}) { + if (typeof input.autoCheckUpdates !== "boolean") { + throw new TypeError("自动检查更新设置必须是布尔值。"); + } + const value = await this.settings.update({ + autoCheckUpdates: input.autoCheckUpdates, + }); + return { + autoCheckUpdates: value.autoCheckUpdates, + lastUpdateCheckAt: value.lastUpdateCheckAt, + }; + } + + async check({ automatic = false } = {}) { + if (!this.supported) return this.snapshot(); + if (["restoring", "checking", "downloading", "downloaded", "installing"].includes(this.state.phase)) { + return this.snapshot(); + } + + if (automatic) { + const preferences = await this.preferences(); + if (!preferences.autoCheckUpdates) return this.snapshot(); + const lastCheck = preferences.lastUpdateCheckAt + ? Date.parse(preferences.lastUpdateCheckAt) + : 0; + if (Number.isFinite(lastCheck) && this.now() - lastCheck < AUTO_CHECK_INTERVAL_MS) { + return this.snapshot(); + } + } + + this.publish({ phase: "checking", progress: null, error: null }); + try { + await this.updater.checkForUpdates(); + await this.settings.update({ lastUpdateCheckAt: new Date(this.now()).toISOString() }); + } catch (error) { + if (this.state.phase !== "error") { + this.publish({ phase: "error", progress: null, error: errorInfo(error) }); + } + } + return this.snapshot(); + } + + async download() { + if (!this.supported) return this.snapshot(); + if (this.state.phase !== "available") { + throw new Error("当前没有可以下载的软件更新。"); + } + this.publish({ phase: "downloading", progress: null, error: null }); + try { + await this.updater.downloadUpdate(); + await this.pendingWrite; + } catch (error) { + if (this.state.phase !== "error") { + this.publish({ phase: "error", progress: null, error: errorInfo(error) }); + } + } + return this.snapshot(); + } + + async install() { + if (!this.supported) return this.snapshot(); + if (this.state.phase !== "downloaded") { + throw new Error("软件更新尚未下载完成。"); + } + this.publish({ phase: "installing", progress: null, error: null }); + try { + await this.pendingWrite; + this.updater.quitAndInstall(false, true); + } catch (error) { + this.publish({ phase: "downloaded", progress: null, cached: true, error: errorInfo(error) }); + } + return this.snapshot(); + } + + scheduleAutoCheck() { + if (!this.supported || this.timer) return; + this.timer = this.setTimer(() => { + this.timer = undefined; + void this.check({ automatic: true }); + }, AUTO_CHECK_DELAY_MS); + this.timer?.unref?.(); + } + + dispose() { + if (this.timer) this.clearTimer(this.timer); + this.timer = undefined; + for (const [event, listener] of this.listeners) { + this.updater.removeListener(event, listener); + } + this.listeners = []; + } +} + +export function registerUpdaterIpc({ ipcMain, authorize, ...options }) { + const useNativeUpdater = + options.app.isPackaged && ["darwin", "win32"].includes(process.platform); + const service = new DesktopUpdater({ + ...options, + updater: options.updater || (useNativeUpdater ? electronUpdater.autoUpdater : undefined), + }); + const channels = [ + ["laobos:updates:status", () => service.snapshot()], + ["laobos:updates:preferences", () => service.preferences()], + ["laobos:updates:set-preferences", (_event, input) => service.setPreferences(input)], + ["laobos:updates:check", () => service.check()], + ["laobos:updates:download", () => service.download()], + ["laobos:updates:install", () => service.install()], + ]; + + for (const [channel, handler] of channels) { + ipcMain.handle(channel, (event, input) => { + authorize(event); + return handler(event, input); + }); + } + void service.initialize().finally(() => service.scheduleAutoCheck()); + + return () => { + service.dispose(); + for (const [channel] of channels) ipcMain.removeHandler(channel); + }; +} diff --git a/desktop/domains/workspace-files.mjs b/desktop/domains/workspace-files.mjs index 660c86f..a5bb355 100644 --- a/desktop/domains/workspace-files.mjs +++ b/desktop/domains/workspace-files.mjs @@ -8,11 +8,13 @@ import { readFile, readdir, rename, + rmdir, unlink, writeFile, } from "node:fs/promises"; import path from "node:path"; -import { boundedString, isPathInside, resolveAuthorizedPath } from "../ipc-security.mjs"; +import { boundedString, resolveAuthorizedPath } from "../ipc-security.mjs"; +import { resolveWorkspaceDirectory } from "../workspace-authorization.mjs"; const MAX_DIRECTORY_ENTRIES = 2_000; const MAX_TEXT_BYTES = 5 * 1024 * 1024; @@ -30,6 +32,17 @@ const SENSITIVE_NAMES = new Set([ "id_rsa", "id_ed25519", ]); +const PLAIN_TEXT_NAMES = new Set([ + ".editorconfig", + ".gitattributes", + ".gitignore", + ".prettierignore", + "dockerfile", + "license", + "makefile", + "procfile", +]); +const WINDOWS_RESERVED_FILE_NAME = /^(?:con|prn|aux|nul|com[1-9]|lpt[1-9])(?:\.|$)/iu; export function registerWorkspaceFilesIpc({ ipcMain, @@ -39,16 +52,21 @@ export function registerWorkspaceFilesIpc({ dshHome, getMainWindow, settings, + workspaceAuthorizer, authorize, }) { ipcMain.handle("laobos:workspace:context", async (event) => { authorize(event); - return { root: workspace, settings: await settings.get() }; + return { + root: workspace, + authorizedRoots: workspaceAuthorizer ? await workspaceAuthorizer.roots() : [workspace], + settings: await settings.get(), + }; }); ipcMain.handle("laobos:workspace:list", async (event, input = {}) => { authorize(event); - const root = await authorizedRoot(workspace, input.root); + const root = await authorizedRoot(workspace, input.root, workspaceAuthorizer); const relative = boundedString(input.path || ".", "目录路径", 4096); const directory = await resolveAuthorizedPath(root, relative, { kind: "directory" }); const entries = await readdir(directory.path, { withFileTypes: true }); @@ -63,6 +81,7 @@ export function registerWorkspaceFilesIpc({ name: entry.name, path: path.relative(root, child.path) || ".", type: child.stat.isDirectory() ? "directory" : "file", + mediaType: child.stat.isFile() ? mediaTypeFor(child.path) : null, size: child.stat.isFile() ? child.stat.size : 0, modifiedAt: child.stat.mtimeMs, }; @@ -75,7 +94,7 @@ export function registerWorkspaceFilesIpc({ ipcMain.handle("laobos:workspace:read", async (event, input = {}) => { authorize(event); - const root = await authorizedRoot(workspace, input.root); + const root = await authorizedRoot(workspace, input.root, workspaceAuthorizer); const relative = boundedString(input.path, "文件路径", 4096); assertPreviewAllowed(relative); const file = await resolveAuthorizedPath(root, relative, { kind: "file" }); @@ -86,13 +105,73 @@ export function registerWorkspaceFilesIpc({ const data = await readFile(file.path); if (isText && data.includes(0)) throw new Error("文件包含二进制数据,不能作为文本预览。 "); return isText - ? { kind: "text", mediaType, content: data.toString("utf8"), size: data.byteLength } - : { kind: mediaType === "application/pdf" ? "pdf" : mediaType.startsWith("image/") ? "image" : mediaType.startsWith("audio/") || mediaType.startsWith("video/") ? "media" : "binary", mediaType, base64: data.toString("base64"), size: data.byteLength }; + ? { kind: "text", mediaType, content: data.toString("utf8"), size: data.byteLength, modifiedAt: file.stat.mtimeMs } + : { kind: mediaType === "application/pdf" ? "pdf" : mediaType.startsWith("image/") ? "image" : mediaType.startsWith("audio/") || mediaType.startsWith("video/") ? "media" : "binary", mediaType, base64: data.toString("base64"), size: data.byteLength, modifiedAt: file.stat.mtimeMs }; + }); + + ipcMain.handle("laobos:workspace:write", async (event, input = {}) => { + authorize(event); + const root = await authorizedRoot(workspace, input.root, workspaceAuthorizer); + const relative = boundedString(input.path, "文件路径", 4096); + const content = boundedString(input.content, "文件内容", MAX_TEXT_BYTES); + assertPreviewAllowed(relative); + const file = await resolveAuthorizedPath(root, relative, { kind: "file" }); + const mediaType = mediaTypeFor(file.path); + if (!isTextMediaType(mediaType)) throw new Error("只有文本文件可以在应用内编辑。 "); + if (Number.isFinite(input.expectedModifiedAt) && Math.abs(file.stat.mtimeMs - input.expectedModifiedAt) > 0.5) { + throw new Error("文件已被其他程序修改,请刷新后再编辑。 "); + } + const data = Buffer.from(content, "utf8"); + if (data.byteLength > MAX_TEXT_BYTES) throw new Error(`文件超过编辑上限(${Math.round(MAX_TEXT_BYTES / 1024 / 1024)} MB)。`); + const temporary = path.join(path.dirname(file.path), `.${path.basename(file.path)}.${randomUUID()}.tmp`); + try { + await writeFile(temporary, data, { flag: "wx", mode: file.stat.mode & 0o777 }); + await rename(temporary, file.path); + const saved = await resolveAuthorizedPath(root, relative, { kind: "file" }); + return { saved: true, size: saved.stat.size, modifiedAt: saved.stat.mtimeMs }; + } catch (error) { + await unlink(temporary).catch(() => {}); + throw error; + } + }); + + ipcMain.handle("laobos:workspace:rename", async (event, input = {}) => { + authorize(event); + const root = await authorizedRoot(workspace, input.root, workspaceAuthorizer); + const relative = boundedString(input.path, "路径", 4096); + if (relative === ".") throw new Error("不能重命名工作区根目录。 "); + const name = safeEntryName(input.name); + const source = await resolveAuthorizedPath(root, relative); + const destination = path.join(path.dirname(source.path), name); + await ensureDestinationAvailable(destination); + await rename(source.path, destination); + return { + renamed: true, + name, + path: path.relative(root, destination) || ".", + type: source.stat.isDirectory() ? "directory" : "file", + }; + }); + + ipcMain.handle("laobos:workspace:remove", async (event, input = {}) => { + authorize(event); + const root = await authorizedRoot(workspace, input.root, workspaceAuthorizer); + const relative = boundedString(input.path, "路径", 4096); + if (relative === ".") throw new Error("不能删除工作区根目录。 "); + const target = await resolveAuthorizedPath(root, relative); + if (target.stat.isDirectory()) { + try { await rmdir(target.path); } + catch (error) { + if (["ENOTEMPTY", "EEXIST"].includes(error?.code)) throw new Error("文件夹不为空,只能删除空文件夹。 "); + throw error; + } + } else await unlink(target.path); + return { removed: true, type: target.stat.isDirectory() ? "directory" : "file" }; }); ipcMain.handle("laobos:workspace:reveal", async (event, input = {}) => { authorize(event); - const root = await authorizedRoot(workspace, input.root); + const root = await authorizedRoot(workspace, input.root, workspaceAuthorizer); const target = await resolveAuthorizedPath(root, boundedString(input.path || ".", "路径", 4096)); if (target.stat.isDirectory()) await shell.openPath(target.path); else shell.showItemInFolder(target.path); @@ -177,6 +256,9 @@ export function registerWorkspaceFilesIpc({ "laobos:workspace:context", "laobos:workspace:list", "laobos:workspace:read", + "laobos:workspace:write", + "laobos:workspace:rename", + "laobos:workspace:remove", "laobos:workspace:reveal", "laobos:uploads:set-location", "laobos:uploads:pick-files", @@ -237,9 +319,13 @@ export function safeUploadFileName(value) { const normalized = path.basename(String(value || "").replaceAll("\\", "/")) .normalize("NFKC") .replace(/[\u0000-\u001f\u007f]/gu, "") + .replace(/[<>:"/\\|?*]/gu, "_") .trim() - .slice(0, 180); - return normalized && normalized !== "." && normalized !== ".." ? normalized : "file"; + .replace(/[. ]+$/gu, "") + .slice(0, 180) + .replace(/[. ]+$/gu, ""); + if (!normalized || normalized === "." || normalized === "..") return "file"; + return WINDOWS_RESERVED_FILE_NAME.test(normalized) ? `_${normalized}`.slice(0, 180) : normalized; } export function managedUploadRoot({ workspace, dshHome, location, sessionId }) { @@ -387,18 +473,16 @@ export async function copyManagedUploadFiles({ } } -async function authorizedRoot(defaultRoot, requested) { - if (requested === undefined || requested === "") { - return (await resolveAuthorizedPath(defaultRoot, ".", { kind: "directory" })).path; +async function authorizedRoot(defaultRoot, requested, workspaceAuthorizer) { + if (requested !== undefined && requested !== "" && !path.isAbsolute(requested)) { + throw new Error("工作区路径必须是绝对路径。 "); } - const root = boundedString(requested, "工作区路径", 4096); - if (!path.isAbsolute(root)) throw new Error("工作区路径必须是绝对路径。 "); - const defaultResolved = await resolveAuthorizedPath(defaultRoot, ".", { kind: "directory" }); - const requestedResolved = await resolveAuthorizedPath(root, ".", { kind: "directory" }); - if (!isPathInside(defaultResolved.path, requestedResolved.path)) { - throw new Error("该工作区不在桌面应用启动时授权的范围内。 "); - } - return requestedResolved.path; + return resolveWorkspaceDirectory({ + authorizer: workspaceAuthorizer, + defaultRoot, + requested: requested || defaultRoot, + label: "文件工作区", + }); } function assertPreviewAllowed(relative) { @@ -408,17 +492,43 @@ function assertPreviewAllowed(relative) { } } +function isTextMediaType(mediaType) { + return mediaType.startsWith("text/") || mediaType === "application/json"; +} + +function safeEntryName(value) { + const name = boundedString(value, "新名称", 255).trim(); + if (!name || name === "." || name === ".." || /[\\/\u0000-\u001f\u007f]/u.test(name)) { + throw new Error("文件名称无效。 "); + } + return name; +} + +async function ensureDestinationAvailable(destination) { + try { + await lstat(destination); + } catch (error) { + if (error?.code === "ENOENT") return; + throw error; + } + throw new Error("同一目录中已存在该名称。 "); +} + export function mediaTypeFor(filePath) { const extension = path.extname(filePath).toLowerCase(); + if (PLAIN_TEXT_NAMES.has(path.basename(filePath).toLowerCase())) return "text/plain"; return ({ ".md": "text/markdown", ".mdx": "text/markdown", ".txt": "text/plain", ".js": "text/javascript", ".mjs": "text/javascript", ".cjs": "text/javascript", ".ts": "text/typescript", ".tsx": "text/typescript", ".jsx": "text/javascript", - ".css": "text/css", ".html": "text/html", ".htm": "text/html", - ".json": "application/json", ".yaml": "text/yaml", ".yml": "text/yaml", + ".css": "text/css", ".scss": "text/css", ".less": "text/css", ".html": "text/html", ".htm": "text/html", + ".json": "application/json", ".jsonc": "application/json", ".yaml": "text/yaml", ".yml": "text/yaml", ".toml": "text/plain", ".xml": "text/xml", ".csv": "text/csv", ".tsv": "text/tab-separated-values", ".log": "text/plain", ".py": "text/x-python", ".rb": "text/x-ruby", ".rs": "text/x-rust", - ".go": "text/x-go", ".java": "text/x-java", ".sh": "text/x-shellscript", + ".go": "text/x-go", ".java": "text/x-java", ".kt": "text/plain", ".kts": "text/plain", + ".c": "text/plain", ".h": "text/plain", ".cc": "text/plain", ".cpp": "text/plain", ".cxx": "text/plain", ".hpp": "text/plain", + ".sh": "text/x-shellscript", ".bash": "text/x-shellscript", ".zsh": "text/x-shellscript", ".fish": "text/x-shellscript", + ".sql": "text/plain", ".graphql": "text/plain", ".gql": "text/plain", ".ini": "text/plain", ".conf": "text/plain", ".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".gif": "image/gif", ".webp": "image/webp", ".svg": "image/svg+xml", ".pdf": "application/pdf", ".doc": "application/msword", diff --git a/desktop/local-plugins.mjs b/desktop/local-plugins.mjs index 6d60fb6..a18a86d 100644 --- a/desktop/local-plugins.mjs +++ b/desktop/local-plugins.mjs @@ -26,6 +26,7 @@ export const bundledPluginNames = [ "laobos-ssh", "laobos-app-manager", "laobos-market", + "laobos-updater", ]; const markerName = ".laobos-managed-plugin.json"; diff --git a/desktop/main.mjs b/desktop/main.mjs index 3c5ba0f..12d8bda 100644 --- a/desktop/main.mjs +++ b/desktop/main.mjs @@ -2,8 +2,10 @@ import { existsSync } from "node:fs"; import path from "node:path"; import { app, + autoUpdater as nativeAutoUpdater, BrowserWindow, WebContentsView, + clipboard, dialog, ipcMain, safeStorage, @@ -12,8 +14,15 @@ import { } from "electron"; import { startDshRuntime } from "./dsh-runtime.mjs"; import { bundledPluginMode } from "./local-plugins.mjs"; +import { + clearPendingPlugin, + quarantineUserPlugins, + readPendingPlugin, + restoreLastPluginRecovery, +} from "./plugin-recovery.mjs"; import { migratePiOnFirstRun } from "../migrations/auto-pi.mjs"; import { registerDesktopDomains } from "./register-desktop-domains.mjs"; +import { installPermissionPolicy } from "./permissions.mjs"; const isDevelopment = !app.isPackaged; const productName = isDevelopment ? "劳博士(开发版)" : "劳博士"; @@ -33,6 +42,28 @@ let isQuitting = false; let disposeDesktopDomains; let dshHome; let workspace; +let shutdownPromise; +let quitReady = false; +let runtimeRestarting = false; +let rendererRecoveryAttempted = false; + +const RENDERER_BOOT_TIMEOUT_MS = 20_000; +const RENDERER_BOOT_POLL_MS = 250; + +function prepareToQuit() { + isQuitting = true; + if (!shutdownPromise) { + shutdownPromise = (async () => { + const dispose = disposeDesktopDomains; + disposeDesktopDomains = undefined; + dispose?.(); + const activeRuntime = runtime; + runtime = undefined; + await activeRuntime?.close(); + })(); + } + return shutdownPromise; +} function resolveRuntimeFiles() { const appRoot = app.getAppPath(); @@ -96,7 +127,7 @@ async function bootRuntime() { } runtime.child.once("exit", (code, signal) => { - if (isQuitting) return; + if (isQuitting || runtimeRestarting) return; dialog.showErrorBox( "劳博士运行时已停止", `DSH 运行时意外退出(code=${String(code)}, signal=${String(signal)})。`, @@ -105,10 +136,97 @@ async function bootRuntime() { }); } -function installPermissionPolicy() { - session.defaultSession.setPermissionRequestHandler( - (_webContents, _permission, callback) => callback(false), - ); +function reasonMessage(reason) { + return reason instanceof Error ? reason.message : String(reason); +} + +async function restartRuntimeAfterPluginFailure(reason) { + if (runtimeRestarting) return { changed: false, entryIds: [] }; + runtimeRestarting = true; + try { + const recovery = await quarantineUserPlugins(dshHome, reasonMessage(reason)); + if (!recovery.changed) return recovery; + const previousRuntime = runtime; + runtime = undefined; + runtimeUrl = undefined; + await previousRuntime?.close(); + console.warn( + `[plugins] 已进入安全模式并停用:${recovery.entryIds.join(", ")}`, + ); + try { + await bootRuntime(); + return recovery; + } catch (retryError) { + await restoreLastPluginRecovery(dshHome).catch(() => false); + throw new AggregateError( + [reason, retryError], + `插件安全模式启动仍然失败:${reasonMessage(retryError)}`, + ); + } + } finally { + runtimeRestarting = false; + } +} + +async function bootRuntimeWithPluginRecovery() { + try { + await bootRuntime(); + } catch (error) { + const recovery = await restartRuntimeAfterPluginFailure(error); + if (!recovery.changed) throw error; + } +} + +async function inspectRendererBoot(window) { + const deadline = Date.now() + RENDERER_BOOT_TIMEOUT_MS; + while (!window.isDestroyed() && Date.now() < deadline) { + const state = await window.webContents.executeJavaScript(`(() => { + const root = document.getElementById("root"); + const text = root?.innerText || ""; + if (text.includes("Failed to load plugins")) { + return { state: "failed", detail: text.slice(0, 4000) }; + } + if (globalThis.__DSH_MODULES__ && root?.childElementCount > 0 && !text.includes("Loading plugins")) { + return { state: "ready" }; + } + return { state: "loading" }; + })()`, true).catch((error) => ({ state: "failed", detail: reasonMessage(error) })); + if (state.state !== "loading") return state; + await new Promise((resolve) => setTimeout(resolve, RENDERER_BOOT_POLL_MS)); + } + return { state: "timeout", detail: "DSH 前端插件启动超时。" }; +} + +async function loadRuntimePage(window) { + await window.loadURL(runtimeUrl); + const state = await inspectRendererBoot(window); + if (state.state === "ready") { + await clearPendingPlugin(dshHome); + return; + } + + const pending = await readPendingPlugin(dshHome); + const shouldRecover = state.state === "failed" || pending !== undefined; + if (!shouldRecover || rendererRecoveryAttempted) { + if (state.state !== "timeout") { + dialog.showErrorBox("插件启动失败", state.detail || "DSH 前端插件无法启动。"); + } + return; + } + + rendererRecoveryAttempted = true; + const recovery = await restartRuntimeAfterPluginFailure(state.detail || state.state); + if (!recovery.changed || !runtimeUrl || window.isDestroyed()) { + dialog.showErrorBox("插件启动失败", state.detail || "没有可自动隔离的用户插件。"); + return; + } + await dialog.showMessageBox(window, { + type: "warning", + title: "已隔离故障插件", + message: "检测到用户插件阻止应用启动,已自动进入安全模式。", + detail: `已停用:${recovery.entryIds.join(", ")}\n恢复记录:${recovery.recoveryPath}`, + }); + await loadRuntimePage(window); } function createWindow() { @@ -146,7 +264,10 @@ function createWindow() { event.preventDefault(); } }); - void mainWindow.loadURL(runtimeUrl); + void loadRuntimePage(mainWindow).catch((error) => { + console.error("劳博士页面启动失败:", error); + dialog.showErrorBox("劳博士页面启动失败", reasonMessage(error)); + }); } const hasSingleInstanceLock = app.requestSingleInstanceLock(); @@ -162,12 +283,16 @@ if (!hasSingleInstanceLock) { app.whenReady().then(async () => { try { - await bootRuntime(); - installPermissionPolicy(); + await bootRuntimeWithPluginRecovery(); + installPermissionPolicy({ + session: session.defaultSession, + getRuntimeUrl: () => runtimeUrl, + }); disposeDesktopDomains = registerDesktopDomains({ ipcMain, BrowserWindow, WebContentsView, + clipboard, dialog, shell, safeStorage, @@ -195,11 +320,17 @@ if (!hasSingleInstanceLock) { }); } -app.on("before-quit", () => { - isQuitting = true; - disposeDesktopDomains?.(); - disposeDesktopDomains = undefined; - void runtime?.close(); +nativeAutoUpdater.on("before-quit-for-update", () => { + void prepareToQuit(); +}); + +app.on("before-quit", (event) => { + if (quitReady) return; + event.preventDefault(); + void prepareToQuit().finally(() => { + quitReady = true; + app.quit(); + }); }); app.on("window-all-closed", () => { diff --git a/desktop/permissions.mjs b/desktop/permissions.mjs new file mode 100644 index 0000000..4dc05ec --- /dev/null +++ b/desktop/permissions.mjs @@ -0,0 +1,39 @@ +const CLIPBOARD_WRITE_PERMISSION = "clipboard-sanitized-write"; + +function normalizedOrigin(value) { + try { + return new URL(value).origin; + } catch { + return null; + } +} + +export function isTrustedRuntimePermission({ webContents, requestingOrigin, runtimeUrl }) { + const expectedOrigin = normalizedOrigin(runtimeUrl); + if (!expectedOrigin) return false; + + const requestedOrigin = normalizedOrigin(requestingOrigin); + const pageOrigin = normalizedOrigin(webContents?.getURL?.()); + return requestedOrigin === expectedOrigin && (!pageOrigin || pageOrigin === expectedOrigin); +} + +export function installPermissionPolicy({ session, getRuntimeUrl }) { + const mayWriteClipboard = (webContents, permission, requestingOrigin) => ( + permission === CLIPBOARD_WRITE_PERMISSION + && isTrustedRuntimePermission({ + webContents, + requestingOrigin, + runtimeUrl: getRuntimeUrl(), + }) + ); + + session.setPermissionCheckHandler((webContents, permission, requestingOrigin) => ( + mayWriteClipboard(webContents, permission, requestingOrigin) + )); + session.setPermissionRequestHandler((webContents, permission, callback, details = {}) => { + const requestingOrigin = details.requestingOrigin + || details.requestingUrl + || webContents?.getURL?.(); + callback(mayWriteClipboard(webContents, permission, requestingOrigin)); + }); +} diff --git a/desktop/plugin-recovery.mjs b/desktop/plugin-recovery.mjs new file mode 100644 index 0000000..4d90801 --- /dev/null +++ b/desktop/plugin-recovery.mjs @@ -0,0 +1,177 @@ +import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises"; +import path from "node:path"; + +export const pendingPluginFileName = ".laobos-plugin-pending.json"; +export const pluginRecoveryFileName = ".laobos-plugin-recovery.json"; + +export function webProfileDirectory(dshHome) { + return path.join(dshHome, "profiles", "web"); +} + +export function pendingPluginPath(dshHome) { + return path.join(webProfileDirectory(dshHome), pendingPluginFileName); +} + +export function pluginRecoveryPath(dshHome) { + return path.join(webProfileDirectory(dshHome), pluginRecoveryFileName); +} + +function patchPath(dshHome) { + return path.join(webProfileDirectory(dshHome), "cordis.patch.yml"); +} + +async function readJsonIfPresent(filePath) { + try { + return JSON.parse(await readFile(filePath, "utf8")); + } catch (error) { + if (error?.code === "ENOENT" || error instanceof SyntaxError) return undefined; + throw error; + } +} + +async function writeFileAtomic(filePath, contents) { + await mkdir(path.dirname(filePath), { recursive: true, mode: 0o700 }); + const temporary = `${filePath}.tmp-${process.pid}-${Date.now()}`; + try { + await writeFile(temporary, contents, { encoding: "utf8", mode: 0o600 }); + await rename(temporary, filePath); + } catch (error) { + await rm(temporary, { force: true }); + throw error; + } +} + +function unquoteYamlScalar(value) { + const trimmed = value.trim(); + if ( + trimmed.length >= 2 + && ((trimmed.startsWith("'") && trimmed.endsWith("'")) + || (trimmed.startsWith('"') && trimmed.endsWith('"'))) + ) { + return trimmed.slice(1, -1); + } + return trimmed; +} + +/** + * Read the effective disabled flag for every entry touched by a profile patch. + * The profile market emits a deliberately small YAML subset, so preserving the + * original text is safer than parsing and serializing the whole file. + */ +export function profileEntryStates(patch) { + const lines = String(patch).split(/\r?\n/u); + const states = new Map(); + const inserted = new Set(); + + for (let index = 0; index < lines.length; index += 1) { + const match = /^(\s*)-\s+id:\s*([^#]+?)\s*$/u.exec(lines[index]); + if (!match) continue; + const indentation = match[1].length; + for (let cursor = index - 1; cursor >= 0; cursor -= 1) { + const line = lines[cursor]; + if (!line.trim() || line.trimStart().startsWith("#")) continue; + const leading = /^\s*/u.exec(line)?.[0].length ?? 0; + if (leading >= indentation) continue; + if (/^\s*-\s+insert:\s*$/u.test(line)) { + inserted.add(unquoteYamlScalar(match[2])); + } + break; + } + } + + for (let index = 0; index < lines.length; index += 1) { + const match = /^(\s*)-\s+id:\s*([^#]+?)\s*$/u.exec(lines[index]); + if (!match) continue; + const indentation = match[1].length; + const id = unquoteYamlScalar(match[2]); + if (!inserted.has(id)) continue; + let disabled; + + for (let cursor = index + 1; cursor < lines.length; cursor += 1) { + const line = lines[cursor]; + if (!line.trim() || line.trimStart().startsWith("#")) continue; + const leading = /^\s*/u.exec(line)?.[0].length ?? 0; + if (leading <= indentation && /^\s*-\s/u.test(line)) break; + const disabledMatch = /^\s*disabled:\s*(true|false)\s*(?:#.*)?$/iu.exec(line); + if (disabledMatch) disabled = disabledMatch[1].toLowerCase() === "true"; + } + + if (!states.has(id)) states.set(id, false); + if (disabled !== undefined) states.set(id, disabled); + } + + return states; +} + +export async function readPendingPlugin(dshHome) { + const pending = await readJsonIfPresent(pendingPluginPath(dshHome)); + if ( + pending?.schema !== 1 + || typeof pending.entryId !== "string" + || typeof pending.packageName !== "string" + ) return undefined; + return pending; +} + +export async function clearPendingPlugin(dshHome) { + await rm(pendingPluginPath(dshHome), { force: true }); +} + +/** + * Disable the pending market plugin, or every active user-profile plugin when + * no pending marker exists. The original patch is retained for manual or + * programmatic restoration. + */ +export async function quarantineUserPlugins(dshHome, reason) { + const profilePatchPath = patchPath(dshHome); + let originalPatch; + try { + originalPatch = await readFile(profilePatchPath, "utf8"); + } catch (error) { + if (error?.code === "ENOENT") return { changed: false, entryIds: [] }; + throw error; + } + + const states = profileEntryStates(originalPatch); + const pending = await readPendingPlugin(dshHome); + const requested = pending ? [pending.entryId] : [...states.keys()]; + const entryIds = [...new Set(requested)].filter((id) => states.get(id) !== true); + if (entryIds.length === 0) return { changed: false, entryIds: [], pending }; + + const recovery = { + schema: 1, + createdAt: new Date().toISOString(), + reason: String(reason || "plugin startup failure"), + entryIds, + pending, + originalPatch, + }; + await writeFileAtomic( + pluginRecoveryPath(dshHome), + `${JSON.stringify(recovery, null, 2)}\n`, + ); + + const suffix = [ + "", + "# 劳博士安全模式:以下用户插件因启动失败而自动停用。", + ...entryIds.flatMap((id) => [ + `- id: '${id.replaceAll("'", "''")}'`, + " disabled: true", + ]), + "", + ].join("\n"); + await writeFileAtomic(profilePatchPath, `${originalPatch.replace(/\s*$/u, "")}\n${suffix}`); + await clearPendingPlugin(dshHome); + return { changed: true, entryIds, pending, recoveryPath: pluginRecoveryPath(dshHome) }; +} + +export async function restoreLastPluginRecovery(dshHome) { + const recoveryFile = pluginRecoveryPath(dshHome); + const recovery = await readJsonIfPresent(recoveryFile); + if (recovery?.schema !== 1 || typeof recovery.originalPatch !== "string") { + return false; + } + await writeFileAtomic(patchPath(dshHome), recovery.originalPatch); + await rm(recoveryFile, { force: true }); + return true; +} diff --git a/desktop/preload.cjs b/desktop/preload.cjs index 858a44c..cc25c7b 100644 --- a/desktop/preload.cjs +++ b/desktop/preload.cjs @@ -6,7 +6,7 @@ const invoke = (channel, input) => ipcRenderer.invoke(channel, input); contextBridge.exposeInMainWorld("laobosDesktop", Object.freeze({ version: 1, capabilities: Object.freeze({ - conversationPdf: true, + conversationHtml: true, sessionTrash: true, workspaceFiles: true, gitReview: true, @@ -17,10 +17,28 @@ contextBridge.exposeInMainWorld("laobosDesktop", Object.freeze({ browserOps: true, ssh: true, apps: true, + clipboard: true, shellManager: true, + softwareUpdate: true, }), - pdf: Object.freeze({ - exportConversation: (input) => invoke("laobos:pdf:export-conversation", input), + clipboard: Object.freeze({ + writeText: (text) => invoke("laobos:clipboard:write-text", { text }), + }), + updates: Object.freeze({ + status: () => invoke("laobos:updates:status"), + preferences: () => invoke("laobos:updates:preferences"), + setPreferences: (input) => invoke("laobos:updates:set-preferences", input), + check: () => invoke("laobos:updates:check"), + download: () => invoke("laobos:updates:download"), + install: () => invoke("laobos:updates:install"), + onState: (listener) => { + const wrapped = (_event, payload) => listener(payload); + ipcRenderer.on("laobos:updates:state", wrapped); + return () => ipcRenderer.removeListener("laobos:updates:state", wrapped); + }, + }), + html: Object.freeze({ + exportConversation: (input) => invoke("laobos:html:export-conversation", input), }), sessions: Object.freeze({ trash: (input) => invoke("laobos:sessions:trash", input), @@ -29,6 +47,9 @@ contextBridge.exposeInMainWorld("laobosDesktop", Object.freeze({ context: () => invoke("laobos:workspace:context"), list: (input) => invoke("laobos:workspace:list", input), read: (input) => invoke("laobos:workspace:read", input), + write: (input) => invoke("laobos:workspace:write", input), + rename: (input) => invoke("laobos:workspace:rename", input), + remove: (input) => invoke("laobos:workspace:remove", input), reveal: (input) => invoke("laobos:workspace:reveal", input), }), git: Object.freeze({ diff --git a/desktop/register-desktop-domains.mjs b/desktop/register-desktop-domains.mjs index 7d6ee7c..32345c5 100644 --- a/desktop/register-desktop-domains.mjs +++ b/desktop/register-desktop-domains.mjs @@ -1,5 +1,6 @@ import { registerConversationExportIpc } from "./domains/conversation-export.mjs"; import { registerBrowserIpc } from "./domains/browser.mjs"; +import { registerClipboardIpc } from "./domains/clipboard.mjs"; import { registerAppsIpc } from "./domains/apps.mjs"; import { DesktopSettingsStore } from "./domains/desktop-settings.mjs"; import { registerGitReviewIpc } from "./domains/git-review.mjs"; @@ -7,8 +8,10 @@ import { registerSessionTrashIpc } from "./domains/session-trash.mjs"; import { registerShellIpc } from "./domains/shell.mjs"; import { registerSshIpc } from "./domains/ssh.mjs"; import { registerTerminalIpc } from "./domains/terminal.mjs"; +import { registerUpdaterIpc } from "./domains/updater.mjs"; import { registerWorkspaceFilesIpc } from "./domains/workspace-files.mjs"; import { assertTrustedDesktopSender } from "./ipc-security.mjs"; +import { WorkspaceAuthorization } from "./workspace-authorization.mjs"; import path from "node:path"; export function registerDesktopDomains(options) { @@ -16,16 +19,25 @@ export function registerDesktopDomains(options) { const settings = new DesktopSettingsStore( path.join(options.app.getPath("userData"), "desktop-settings.json"), ); + const workspaceAuthorizer = new WorkspaceAuthorization({ + defaultRoot: options.workspace, + settings, + dialog: options.dialog, + getMainWindow: options.getMainWindow, + }); + const domainOptions = { ...options, authorize, settings, workspaceAuthorizer }; const disposers = [ - registerAppsIpc({ ...options, authorize }), - registerBrowserIpc({ ...options, authorize }), - registerConversationExportIpc({ ...options, authorize }), - registerSessionTrashIpc({ ...options, authorize }), - registerWorkspaceFilesIpc({ ...options, authorize, settings }), - registerGitReviewIpc({ ...options, authorize }), - registerShellIpc({ ...options, authorize }), - registerTerminalIpc({ ...options, authorize }), - registerSshIpc({ ...options, authorize }), + registerClipboardIpc(domainOptions), + registerAppsIpc(domainOptions), + registerBrowserIpc(domainOptions), + registerConversationExportIpc(domainOptions), + registerSessionTrashIpc(domainOptions), + registerWorkspaceFilesIpc(domainOptions), + registerGitReviewIpc(domainOptions), + registerShellIpc(domainOptions), + registerTerminalIpc(domainOptions), + registerSshIpc(domainOptions), + registerUpdaterIpc(domainOptions), ]; return () => { for (const dispose of disposers.reverse()) dispose(); diff --git a/desktop/workspace-authorization.mjs b/desktop/workspace-authorization.mjs new file mode 100644 index 0000000..39c5bdc --- /dev/null +++ b/desktop/workspace-authorization.mjs @@ -0,0 +1,122 @@ +import { realpath, stat } from "node:fs/promises"; +import path from "node:path"; +import { boundedString, isPathInside } from "./ipc-security.mjs"; + +const MAX_AUTHORIZED_WORKSPACES = 64; + +/** + * Desktop tools run in Electron's main process and therefore need a boundary + * independent from the renderer. The startup workspace is trusted immediately; + * a DSH session outside it receives one native, persistent approval instead of + * being rejected merely because it lives on another Windows drive. + */ +export class WorkspaceAuthorization { + constructor({ defaultRoot, settings, dialog, getMainWindow }) { + this.defaultRoot = defaultRoot; + this.settings = settings; + this.dialog = dialog; + this.getMainWindow = getMainWindow; + this.pending = new Map(); + } + + async roots() { + const initial = await canonicalDirectory(this.defaultRoot); + const saved = (await this.settings.get()).authorizedWorkspaces || []; + const roots = [initial]; + for (const entry of saved) { + try { + const canonical = await canonicalDirectory(entry); + if (!roots.some((root) => samePath(root, canonical))) roots.push(canonical); + } catch { + // A removed or temporarily unavailable drive must not break the app. + } + } + return roots; + } + + async resolve(requested, { label = "工作区", prompt = true } = {}) { + const value = requested + ? boundedString(requested, `${label}路径`, 4096) + : this.defaultRoot; + const absolute = path.isAbsolute(value) + ? value + : path.resolve(this.defaultRoot, value); + const candidate = await canonicalDirectory(absolute); + const roots = await this.roots(); + if (roots.some((root) => isPathInside(root, candidate))) return candidate; + if (!prompt) throw unauthorizedWorkspaceError(candidate); + return this.approve(candidate, label); + } + + async approve(candidate, label) { + const key = normalizeForComparison(candidate); + if (this.pending.has(key)) return this.pending.get(key); + const approval = this.requestApproval(candidate, label).finally(() => { + this.pending.delete(key); + }); + this.pending.set(key, approval); + return approval; + } + + async requestApproval(candidate, label) { + const options = { + type: "question", + title: "授权工作区", + message: `是否允许劳博士访问这个${label}?`, + detail: `${candidate}\n\n授权仅覆盖该目录及其子目录,可让终端、文件、Git 和应用管理功能在普通用户模式下工作。`, + buttons: ["允许访问", "取消"], + defaultId: 0, + cancelId: 1, + noLink: true, + }; + const owner = this.getMainWindow?.(); + const result = owner && !owner.isDestroyed() + ? await this.dialog.showMessageBox(owner, options) + : await this.dialog.showMessageBox(options); + if (result.response !== 0) throw unauthorizedWorkspaceError(candidate); + + const current = await this.settings.get(); + const saved = current.authorizedWorkspaces || []; + const next = [...saved.filter((root) => !samePath(root, candidate)), candidate] + .slice(-MAX_AUTHORIZED_WORKSPACES); + await this.settings.update({ authorizedWorkspaces: next }); + return candidate; + } +} + +export async function resolveWorkspaceDirectory({ + authorizer, + defaultRoot, + requested, + label, +}) { + if (authorizer) return authorizer.resolve(requested, { label }); + const value = requested || defaultRoot; + const candidate = path.isAbsolute(value) + ? value + : path.resolve(defaultRoot, value); + const canonicalRoot = await canonicalDirectory(defaultRoot); + const canonical = await canonicalDirectory(candidate); + if (!isPathInside(canonicalRoot, canonical)) throw unauthorizedWorkspaceError(canonical); + return canonical; +} + +async function canonicalDirectory(value) { + const canonical = await realpath(path.resolve(value)); + const info = await stat(canonical); + if (!info.isDirectory()) throw new Error("目标工作区不是目录。 "); + return canonical; +} + +function unauthorizedWorkspaceError(candidate) { + return new Error(`工作区尚未授权:${candidate}。请在授权提示中选择“允许访问”。`); +} + +function samePath(left, right) { + return normalizeForComparison(left) === normalizeForComparison(right); +} + +function normalizeForComparison(value) { + const normalized = path.resolve(value); + return process.platform === "win32" ? normalized.toLowerCase() : normalized; +} diff --git a/electron-builder.test-update.yml b/electron-builder.test-update.yml new file mode 100644 index 0000000..f53c970 --- /dev/null +++ b/electron-builder.test-update.yml @@ -0,0 +1,9 @@ +extends: ./electron-builder.yml +afterSign: ./scripts/sign-test-update.mjs + +# Only for a controlled macOS auto-update test chain. This signs the complete +# application bundle ad-hoc so Squirrel can validate sealed resources. It is not +# a substitute for Developer ID signing or Apple notarization. +mac: + identity: "-" + hardenedRuntime: false diff --git a/electron-builder.yml b/electron-builder.yml index 97644b9..ae72048 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -5,6 +5,14 @@ asarUnpack: - "packages/**" compression: normal npmRebuild: false +electronUpdaterCompatibility: ">=2.16" +beforePack: ./scripts/stage-windows-git.mjs + +publish: + provider: github + owner: Modole + repo: laobos-agent-studio + releaseType: release directories: output: out/installers @@ -16,6 +24,7 @@ files: - "!dist{,/**}" - "!dist-desktop{,/**}" - "!outputs{,/**}" + - "!.cache{,/**}" - "!tests{,/**}" - "!.dsh{,/**}" - "!.git{,/**}" @@ -24,6 +33,7 @@ files: - "!.vinext{,/**}" - "!.wrangler{,/**}" - "!resources/pi{,/**}" + - "!resources/mingit-win32-x64{,/**}" - "!node_modules/cpu-features{,/**}" - "!node_modules/node-pty/build{,/**}" - "!node_modules/ssh2/lib/protocol/crypto/build{,/**}" @@ -31,23 +41,31 @@ files: mac: icon: build/laobos-icon.icns category: public.app-category.developer-tools - identity: null - hardenedRuntime: false + hardenedRuntime: true target: - target: dmg arch: - arm64 + - target: zip + arch: + - arm64 artifactName: "laobos-studio-${version}-macos-${arch}.${ext}" win: icon: public/laobos-logo.png executableName: laobos-studio + extraResources: + - from: resources/mingit-win32-x64 + to: git + filter: + - "**/*" files: - "**/*" - "!out{,/**}" - "!dist{,/**}" - "!dist-desktop{,/**}" - "!outputs{,/**}" + - "!.cache{,/**}" - "!tests{,/**}" - "!.dsh{,/**}" - "!.git{,/**}" @@ -56,6 +74,7 @@ win: - "!.vinext{,/**}" - "!.wrangler{,/**}" - "!resources/pi{,/**}" + - "!resources/mingit-win32-x64{,/**}" - "!node_modules/cpu-features{,/**}" - "!node_modules/node-pty/build{,/**}" - "!node_modules/ssh2/lib/protocol/crypto/build{,/**}" diff --git a/package-lock.json b/package-lock.json index fb760be..ac10220 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,46 +1,48 @@ { "name": "laobos-agent-studio", - "version": "0.2.3", + "version": "0.3.10", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "laobos-agent-studio", - "version": "0.2.3", + "version": "0.3.10", "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { "@browserops/bridge": "^0.0.11", "@deepseek-ai/cordis-plugin-group": "1.0.1", - "@deepseek-ai/dsh": "0.1.0-rc.6", - "@deepseek-ai/dsh-anonymous-user-id": "0.1.0-rc.6", - "@deepseek-ai/dsh-atomic-write": "0.1.0-rc.6", - "@deepseek-ai/dsh-bash-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.1.0-rc.6", - "@deepseek-ai/dsh-code-runtime": "0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "0.1.0-rc.6", - "@deepseek-ai/dsh-fs": "0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-browse": "0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "0.1.0-rc.6", - "@deepseek-ai/dsh-output-retention": "0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "0.1.0-rc.6", - "@deepseek-ai/dsh-session-telemetry": "0.1.0-rc.6", - "@deepseek-ai/dsh-session-title-llm": "0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "0.1.0-rc.6", - "@deepseek-ai/dsh-spill": "0.1.0-rc.6", - "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "0.1.0-rc.6", - "@deepseek-ai/dsh-workflow": "0.1.0-rc.6", + "@deepseek-ai/dsh": "0.1.0-rc.7", + "@deepseek-ai/dsh-anonymous-user-id": "0.1.0-rc.7", + "@deepseek-ai/dsh-atomic-write": "0.1.0-rc.7", + "@deepseek-ai/dsh-bash-local": "0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.1.0-rc.7", + "@deepseek-ai/dsh-code-runtime": "0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "0.1.0-rc.7", + "@deepseek-ai/dsh-fs": "0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-browse": "0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "0.1.0-rc.7", + "@deepseek-ai/dsh-output-retention": "0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "0.1.0-rc.7", + "@deepseek-ai/dsh-session-telemetry": "0.1.0-rc.7", + "@deepseek-ai/dsh-session-title-llm": "0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "0.1.0-rc.7", + "@deepseek-ai/dsh-spill": "0.1.0-rc.7", + "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "0.1.0-rc.7", + "@deepseek-ai/dsh-workflow": "0.1.0-rc.7", "@laobos/dsh-performance": "file:packages/laobos-performance", "@laobos/dsh-shell": "file:packages/laobos-shell", "@laobos/dsh-system-tools": "file:packages/laobos-system-tools", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "@xyflow/react": "12.11.3", + "electron-updater": "^6.8.9", "next": "16.2.11", - "node-pty": "^1.1.0", + "node-pty": "1.2.0-beta.15", + "patch-package": "8.0.1", "react": "19.2.6", "react-dom": "19.2.6", "ssh2": "^1.17.0", @@ -66,7 +68,8 @@ "typescript": "5.9.3", "vinext": "0.0.50", "vite": "8.0.13", - "wrangler": "4.92.0" + "wrangler": "4.92.0", + "yauzl": "3.4.0" }, "engines": { "node": ">=22.19.0" @@ -180,13 +183,13 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.977.7", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.7.tgz", - "integrity": "sha512-I88Iov89NVmjSmJLKSv7Cn9M2J+a2942OkA8nZCbz+sl4ZeY4zEOcoLOrbt1GRfQ8zEQKnjAJdXixA3J/p1fDQ==", + "version": "3.977.8", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.977.8.tgz", + "integrity": "sha512-7+Kcrkvrk9lM/m7jRhHpT4jCdvzGHsuaSRbF8TdzzkY1mRzp/Ogwf9c7H29k4gGhey0BBWhCWr16+t0J61gwmg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.974.3", - "@aws-sdk/xml-builder": "^3.972.38", + "@aws-sdk/types": "^3.974.4", + "@aws-sdk/xml-builder": "^3.972.39", "@aws/lambda-invoke-store": "^0.3.0", "@smithy/core": "^3.31.1", "@smithy/signature-v4": "^5.6.12", @@ -199,13 +202,13 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.68", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.68.tgz", - "integrity": "sha512-2a20A/IdNOwUvaDq91iqqS7BA0XlNMfW3iLGZGZLJv0EbUqhSxB0PIx4rQQqssvWj1uXImb3/UCCdHz/+1dOiA==", + "version": "3.972.69", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.69.tgz", + "integrity": "sha512-AreCFzcB4kH2HF9031Ot0jSJr3KXvRg6e8uDeub20JEVdZU3Bv0sTq1plc7VsT3KiqutlzH7l0j50UcCWHUioA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -215,13 +218,13 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.70", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.70.tgz", - "integrity": "sha512-0yRem2Fs52r/Nn6UAqIlpjexfaYj8ziEozOe9tamtAVT/5bzFLKx8O2r7MaRqgS3hGKHIa1Jij9nKHSsNnb04A==", + "version": "3.972.71", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.71.tgz", + "integrity": "sha512-A8ObcqVmDMnk4F9NozZ7JwmUu9Q4xyBJkmyq1C5U+wNM9ht9J7+EuuyabsLWXZnOoTqFaJuYBYTKf5CTipkEjA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -233,13 +236,13 @@ } }, "node_modules/@aws-sdk/credential-provider-http/node_modules/@smithy/node-http-handler": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.0.tgz", - "integrity": "sha512-ssHIZsadPUA3lGdnoByxfnjtb9xPYQLvdfJRLKIwxOoa6tO1suG4sLFSsgd7D/CsvYd8QbBIuKTImuJha5l6aQ==", + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.2.tgz", + "integrity": "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.33.0", - "@smithy/types": "^4.17.0", + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, "engines": { @@ -247,20 +250,20 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.973.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.13.tgz", - "integrity": "sha512-2M39DE02XpYYaSWYk/4AsImXYUU/1L2xmTMLUpMMWq7DfLv191/vCRy3baKtdr45AkJQyVgSjmuVOLm15SwrRQ==", + "version": "3.973.14", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.973.14.tgz", + "integrity": "sha512-7c+Wti2LsERNWMfm7ySz3/6RPopFW3Nmn7s63Xpcq6R/tRuY5hpvkHA2xVgi5ukJbvok9l0IDtVEvqTtg+X7dw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/credential-provider-env": "^3.972.68", - "@aws-sdk/credential-provider-http": "^3.972.70", - "@aws-sdk/credential-provider-login": "^3.972.75", - "@aws-sdk/credential-provider-process": "^3.972.68", - "@aws-sdk/credential-provider-sso": "^3.973.12", - "@aws-sdk/credential-provider-web-identity": "^3.972.74", - "@aws-sdk/nested-clients": "^3.997.42", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/credential-provider-env": "^3.972.69", + "@aws-sdk/credential-provider-http": "^3.972.71", + "@aws-sdk/credential-provider-login": "^3.972.76", + "@aws-sdk/credential-provider-process": "^3.972.69", + "@aws-sdk/credential-provider-sso": "^3.973.13", + "@aws-sdk/credential-provider-web-identity": "^3.972.75", + "@aws-sdk/nested-clients": "^3.997.43", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", @@ -271,14 +274,14 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.75", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.75.tgz", - "integrity": "sha512-jaTESuJlQsoUZ44f/i2puyPt8VlF/dMMJ9HM3cStYtk7eKX4N9UWi83OLixUkoOJH3BwWlPLCq9YIK9nfWhVBg==", + "version": "3.972.76", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.76.tgz", + "integrity": "sha512-LVixwOnEJfrrfKHeZjBA8pIMTZjNDq8ak8VpcoWUuCJDrSnBNU8POJksULMgvN089P0MXtQYH2Zs627/MK1K0g==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/nested-clients": "^3.997.42", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/nested-clients": "^3.997.43", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -288,18 +291,18 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.79", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.79.tgz", - "integrity": "sha512-RIw5dof1EHkWubrZzPC941CDtnFG1iAXsxbFgLkhdYZXHc4icU13c/uxSMI0J5eUx9bxa7LjfpdjfClBB1QsDA==", + "version": "3.972.80", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.80.tgz", + "integrity": "sha512-bE2qh8ww4iClO1jHsBXdOE8FUgzDbdxbyorNjSCoPSkQd51k3jODItuPZfuwcLHZqDXsH+bI4AMHhqtuyR7mSg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.68", - "@aws-sdk/credential-provider-http": "^3.972.70", - "@aws-sdk/credential-provider-ini": "^3.973.13", - "@aws-sdk/credential-provider-process": "^3.972.68", - "@aws-sdk/credential-provider-sso": "^3.973.12", - "@aws-sdk/credential-provider-web-identity": "^3.972.74", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/credential-provider-env": "^3.972.69", + "@aws-sdk/credential-provider-http": "^3.972.71", + "@aws-sdk/credential-provider-ini": "^3.973.14", + "@aws-sdk/credential-provider-process": "^3.972.69", + "@aws-sdk/credential-provider-sso": "^3.973.13", + "@aws-sdk/credential-provider-web-identity": "^3.972.75", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/credential-provider-imds": "^4.4.16", "@smithy/types": "^4.16.1", @@ -310,13 +313,13 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.68", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.68.tgz", - "integrity": "sha512-nLP3Pda2MQTFJ25hKBMmUuB9Uv+bTZQNlufbeCwklP549Vwnkd8bRLJoCKp5k6xjmdyptrPrOfGOhN0mKuca8A==", + "version": "3.972.69", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.69.tgz", + "integrity": "sha512-9kpTNdZTrcqXTfhxM7fgl9Z68ek3Fu5oe3Yf+A/pJGibEqpgZxz2tSY7SinmyCIU2PJ+ygY4FPoBBnLpocMtrQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -326,15 +329,15 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.973.12", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.12.tgz", - "integrity": "sha512-EmgyyHn+f9WCcelp3L/vci+LGbX8GigWaVphRArjVo5Pktkr9YnLy/mQ6VDkDyBD72dtfRNTgHmD2ts4rTDXKQ==", + "version": "3.973.13", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.973.13.tgz", + "integrity": "sha512-Oc81qauMPzUoTnAS2YKpNwY6sY/LUyQTEeaf6yP197WMxkEBQfcKLR1MFpD7+pNTubXnfkH6gwpji+Gc7iyD2Q==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/nested-clients": "^3.997.42", - "@aws-sdk/token-providers": "3.1108.0", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/nested-clients": "^3.997.43", + "@aws-sdk/token-providers": "3.1111.0", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -344,14 +347,14 @@ } }, "node_modules/@aws-sdk/credential-provider-sso/node_modules/@aws-sdk/token-providers": { - "version": "3.1108.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1108.0.tgz", - "integrity": "sha512-rI80zxDxGJ6904eC/YbjkdjY6JdaZvQ01kOmrMvw7cFQGIHo27fhnIVbMSVDS4T6foQImjxYSRoOu/uSJscXDw==", + "version": "3.1111.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1111.0.tgz", + "integrity": "sha512-JfljgoVtl+s3Qy21n9a7Z48uCQaOXcN74KJ3TEQfPoB293GrXFSt6HSQJF1sTZ8c/5QedEvd3NjJQMO4u9qa5A==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/nested-clients": "^3.997.42", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/nested-clients": "^3.997.43", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -361,14 +364,14 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.74", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.74.tgz", - "integrity": "sha512-0YfczxGXF3RjGj8z7QG/Ho2HnLGKDHfPSHiTs47UU1U/+mmwISDN+rvGKt2zh+3FX8NdT4xd95LGBGyhQw2dgQ==", + "version": "3.972.75", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.75.tgz", + "integrity": "sha512-YPN6uoGDgjjjeVFZrcOeCJqmB6zpXoeeNgIjqe+DexJaWqdjVfCCe+VAZwli9Z2h8KhFW8oxkO39emQ1tyz/Mw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/nested-clients": "^3.997.42", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/nested-clients": "^3.997.43", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -378,12 +381,12 @@ } }, "node_modules/@aws-sdk/eventstream-handler-node": { - "version": "3.972.32", - "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.32.tgz", - "integrity": "sha512-rlbmsMG7ZNgrVhWSqqXpq6y9hfiREyzCg3CNTk9UK+AoP7+65kOkqpWmqwLfV1UrRSHATdLnZF2rt9ZTUxYQJA==", + "version": "3.972.33", + "resolved": "https://registry.npmjs.org/@aws-sdk/eventstream-handler-node/-/eventstream-handler-node-3.972.33.tgz", + "integrity": "sha512-1Dd5WyEE2Kb3HvY44u7Ob16ST2W6iutOqsQ8Y2hUmsL2mAH/STlGS1dS9h3IOE6L7Ld3AR2HzKJ6XeCMOw8Peg==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -393,12 +396,12 @@ } }, "node_modules/@aws-sdk/middleware-eventstream": { - "version": "3.972.27", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.27.tgz", - "integrity": "sha512-M7Ay1VpBpf/YFfic9kkjwE3wyCh4G0gEM4RypRXYm7aPjyfqi+D8FEYMR2E3IqbvN+qi2rEFYAiwWL0XHtQYdQ==", + "version": "3.972.28", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-eventstream/-/middleware-eventstream-3.972.28.tgz", + "integrity": "sha512-Z1EDXnS01P7H5jVrUx+/dBqV0m7dta7bSxLclkOuDuS93pNNQm0IcT4YLUbuvWKPYNxbI8aTG0p5Br30GSKDgA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -408,13 +411,13 @@ } }, "node_modules/@aws-sdk/middleware-websocket": { - "version": "3.972.50", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.50.tgz", - "integrity": "sha512-gdcWRbmIf1dWA/prf44Bnnzgqj+AbsXX2yfhZhOQLwSm7NfKIYPmkRlPqP0CTepHzjxMIBdWBDdtQB+Y/dFUeg==", + "version": "3.972.51", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-websocket/-/middleware-websocket-3.972.51.tgz", + "integrity": "sha512-jdgP3jR5Q96j1jjZ98GGwpGg1CBNFIO2YE+vXg8cg8PvNY4NvgQNYJsqDaRX2PYv5gSUX/+C0D58Fhspj9ELMQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/signature-v4": "^5.6.12", @@ -426,14 +429,14 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.997.42", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.42.tgz", - "integrity": "sha512-XWRyon2MTHXD/zMoo0Mbge6Vwf+iE0qQaM/RyGO6NfZ9WukCFiQL27nQVZjYy2JwSIg+iXZxKOX95OBXqlSM4w==", + "version": "3.997.43", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.43.tgz", + "integrity": "sha512-bit+VpqWNyi3wHxFoTsTliNXimCSL2r2OeDTm7ZrG+YsTZ2D7ofDJ6r/t9PVBn80i6/v0X2h9Tgw6QP2MAKfPw==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "^3.977.7", - "@aws-sdk/signature-v4-multi-region": "^3.996.44", - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/core": "^3.977.8", + "@aws-sdk/signature-v4-multi-region": "^3.996.45", + "@aws-sdk/types": "^3.974.4", "@smithy/core": "^3.31.1", "@smithy/fetch-http-handler": "^5.6.13", "@smithy/node-http-handler": "^4.9.13", @@ -445,13 +448,13 @@ } }, "node_modules/@aws-sdk/nested-clients/node_modules/@smithy/node-http-handler": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.0.tgz", - "integrity": "sha512-ssHIZsadPUA3lGdnoByxfnjtb9xPYQLvdfJRLKIwxOoa6tO1suG4sLFSsgd7D/CsvYd8QbBIuKTImuJha5l6aQ==", + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.11.2.tgz", + "integrity": "sha512-avwAh9HM3h2lcfjvP3zYIZGf+XVgLQ91wOJ2qoFbNpW1UZeZb33aGlhTZvtkANHfcGhJroRY64525OjfgOg30g==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.33.0", - "@smithy/types": "^4.17.0", + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, "engines": { @@ -459,12 +462,12 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.44", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.44.tgz", - "integrity": "sha512-ZSfQ35Qn4MhSY+A0Whyr+KBx+wJKZUyBsOrjB2pSHOafRzbFe47T8XcXM8hZqUAC69qnqIy0C9ArxTuud0CC2w==", + "version": "3.996.45", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.45.tgz", + "integrity": "sha512-bBuyztukzXq6plzFGHAWiQt0QXo+HL8b8lX5cFTzkez/74PtS1c0qPFCIVuHkyoT+miH2qOjAcm1/yoro2ESPA==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "^3.974.3", + "@aws-sdk/types": "^3.974.4", "@smithy/signature-v4": "^5.6.12", "@smithy/types": "^4.16.1", "tslib": "^2.6.2" @@ -491,9 +494,9 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.974.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.3.tgz", - "integrity": "sha512-ECAqfpNsef+7MO8qtR0h9KcFIBAygaE7Cm6UOiQl+ft+uVap+1G7bNEjs4mdJE2OnA4m6k7i8peH8uGIAsOMGw==", + "version": "3.974.4", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.974.4.tgz", + "integrity": "sha512-dSFDNG00MEz0/xl5gxL62giLd1iYyJsTxZ1I1DOj6lC+bbgLB4TRsYClJg3b62dhXT1uATzsTNXPnC+33EJV3A==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", @@ -504,9 +507,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.965.9", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.9.tgz", - "integrity": "sha512-wB/ho7pTJKqWz3WYDt2ZWDWI8bxQpN/xwf+5ZQ1zWaj+HDY9B8Fn434i6qZ6j6ZG3aCiIJtZaQVqwajx5xYsQA==", + "version": "3.965.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.10.tgz", + "integrity": "sha512-ycwH6Zd2GhuSqdXX9ihbCjeGTB6xOJs+O3+Jb8/zDG9978XU80qs75dfkPJRMNKe5MvBZPuNeFpd4JZKPoUF4g==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -516,9 +519,9 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.38", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.38.tgz", - "integrity": "sha512-grf7mzfVxBS5AlsuTvBN7uDpzqohFww9fRPCO+EBSUdvtsYMcPSKdz54h/7XiscqNcUM1Ae1MF7JLHmiYYuzbQ==", + "version": "3.972.39", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.39.tgz", + "integrity": "sha512-FTti8DS5MMWXNUWiRwXAJeYS+0GHHiMy0+7XOhcwk63ILHmfS2UFy2z/HNpZCSOJJ3P3dnWY6hfYNW3DF0nXUA==", "license": "Apache-2.0", "dependencies": { "@smithy/types": "^4.16.1", @@ -1108,9 +1111,9 @@ "license": "MIT" }, "node_modules/@deepseek-ai/dsh": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh/-/dsh-0.1.0-rc.6.tgz", - "integrity": "sha512-brpZfED7ieRa2PQ5tUxMhHrM1pb2CmKFVM/f6yMULBDMicahk+Z2OsHgTwTDnoiZm23Ftu9rQz0NN4pflaoJcg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh/-/dsh-0.1.0-rc.7.tgz", + "integrity": "sha512-ZceDCJ8FAywih+USW/OMk9jEhunlvJBGEz4kqrhau23hPzbciOazZrywH0nBRsaalSeAJ1JGBmjtw4OSjToStw==", "license": "MIT", "dependencies": { "@deepseek-ai/cordis": "^4.0.1", @@ -1118,59 +1121,59 @@ "@deepseek-ai/cordis-plugin-include": "^1.0.6", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", "@deepseek-ai/cordis-plugin-timer": "^1.1.3", - "@deepseek-ai/dsh-agent-instructions": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-tool-presentation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-app-boot": "^0.1.0-rc.6", - "@deepseek-ai/dsh-base": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.6", - "@deepseek-ai/dsh-command-compact": "^0.1.0-rc.6", - "@deepseek-ai/dsh-command-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction-basic": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal-round-driver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-headless": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-mcp-client": "^0.1.0-rc.6", - "@deepseek-ai/dsh-persona": "^0.1.0-rc.6", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.6", - "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-schedule": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-reference": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.6", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-terminal-bash": "^0.1.0-rc.6", - "@deepseek-ai/dsh-time-context": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tmux-context": "^0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-ask-user": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-bash": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-bash-persistent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-cordis": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-fs-search": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-pwsh": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-ralph": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-subagent-control": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-web": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.6", - "@deepseek-ai/dsh-web-app": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.0-rc.6", + "@deepseek-ai/dsh-agent-instructions": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-tool-presentation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-app-boot": "^0.1.0-rc.7", + "@deepseek-ai/dsh-base": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.7", + "@deepseek-ai/dsh-command-compact": "^0.1.0-rc.7", + "@deepseek-ai/dsh-command-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction-basic": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal-round-driver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-headless": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-mcp-client": "^0.1.0-rc.7", + "@deepseek-ai/dsh-persona": "^0.1.0-rc.7", + "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.7", + "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-schedule": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-reference": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.7", + "@deepseek-ai/dsh-terminal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-terminal-bash": "^0.1.0-rc.7", + "@deepseek-ai/dsh-time-context": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tmux-context": "^0.1.0-rc.7", + "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-ask-user": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-bash": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-bash-persistent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-cordis": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-fs-search": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-pwsh": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-ralph": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-subagent-control": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-web": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.7", + "@deepseek-ai/dsh-web-app": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.0-rc.7", "commander": "^15.0.0", "js-yaml": "^4.2.0", "node-addon-require-builtin": "^0.1.4" @@ -1180,80 +1183,80 @@ } }, "node_modules/@deepseek-ai/dsh-agent": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.0-rc.6.tgz", - "integrity": "sha512-vtqq2pWTrzn0dKfj5kREZRpP82AwtGjGx9V1lYnKvF+Uc/a8zyWbSvjDE7V1d3YQAQJzs2cWO31hURWDekDXIA==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent/-/dsh-agent-0.1.0-rc.7.tgz", + "integrity": "sha512-AqBQavJYgbCUUYBHP7OGCaw8WN5082NXYQOoOfNRO72bub3E+/nWkl8b4B7BAJdFfyLo9ce+Kgb1BCHSJU/JLg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-agent-default-model": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-default-model/-/dsh-agent-default-model-0.1.0-rc.6.tgz", - "integrity": "sha512-5Fl15p5mHVMlp69Ea0qeS81ej1Bt9vSJtCed+gjvzkKzv5y3VbJQ8PPBV34F1rTSyhTtjj5Q7TuDugQI5ZpjfA==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-default-model/-/dsh-agent-default-model-0.1.0-rc.7.tgz", + "integrity": "sha512-zHtD4FAqxzidyNiyx1bpvLHdOTTsKnmjlHRqDS1KegIMSTNFmmp1B2bHdAUXp/OH7fPDmv+1ZXzDoJhBNUY9jA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-agent-instructions": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-instructions/-/dsh-agent-instructions-0.1.0-rc.6.tgz", - "integrity": "sha512-RCd3UWJI7b3X6EUnxnqwOFiMWh1PzRRg9GrVt4G0tVNDIxeYX+RF2FTbOrslIOkOCZxG3BlI2M/bZ6yQmB4Vwg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-instructions/-/dsh-agent-instructions-0.1.0-rc.7.tgz", + "integrity": "sha512-laLz5ee7tKqVzrj15ztHuOnJLxDiGlqFOm6mEJUjJPWWD9Yzj1Iq+6WHZZ3Hw66vrNzYKqEN0TBofWF3DA7OzQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-agent-loop": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-loop/-/dsh-agent-loop-0.1.0-rc.6.tgz", - "integrity": "sha512-yShuKIMW360H14L4y13j3gz3Ix1s/3lwEEpfJW4hnFAE09h9Z4yJA7UfTQmQdzMRMnuj4uWFPw0e0BbapnkFuw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-loop/-/dsh-agent-loop-0.1.0-rc.7.tgz", + "integrity": "sha512-98jV+6XnkZ93g4C1BJ/hCcC8k4GVhH+oNrkhLFvc6aOQz6o+9kdV8IrgEVr0qRcAfHKlCMfiV4BIDz4eBBoziw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-agent-presets": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-presets/-/dsh-agent-presets-0.1.0-rc.6.tgz", - "integrity": "sha512-LtDz0TYE7YNhJOhMDZ8s45xQG57bWF4F1SN3tjYDosaBdINIRTxJ0O80BC+KeliqFDw071ZNOzTUEelwEAIx7w==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-presets/-/dsh-agent-presets-0.1.0-rc.7.tgz", + "integrity": "sha512-T/VcMV7lrXCFmRKrtoMTAz5DAdUmku6hz95wbikRvRc0WizIwQ3R04ke9KIeDiQcxK8xkE8cx+IYqEWa9C5gPg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1263,88 +1266,88 @@ "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-include": "^1.0.6", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-agent-tool-presentation": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-tool-presentation/-/dsh-agent-tool-presentation-0.1.0-rc.6.tgz", - "integrity": "sha512-Ysg45g0qnteB6w7krUBRXQ6SFbc8L+laPZTS2y15FFTLueruJaANBLIgnorEtj2bIJYF2Lq0fKH5v0wPNNrlXw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-agent-tool-presentation/-/dsh-agent-tool-presentation-0.1.0-rc.7.tgz", + "integrity": "sha512-RAtrfRyLZ/ob9lW5/fKeU7T4LYPTXYP7qCmu2i7ZBqwHseMdYHk0U1Ti8z2kr2NF4LIzHNUXIwaE9s7za5cwuA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-anonymous-user-id": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-anonymous-user-id/-/dsh-anonymous-user-id-0.1.0-rc.6.tgz", - "integrity": "sha512-+K/+tQzuDlmvKhoudB7qVMJMNF/p1+GTRQkkPA3JHIQM5yHj7AUYY8oMLROTvUivs8XWtkNyEP1/c6nPwrHazQ==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-anonymous-user-id/-/dsh-anonymous-user-id-0.1.0-rc.7.tgz", + "integrity": "sha512-g39W2HSWum6ghJG3src3rLVR8mnCsc0xCBSRpef1Fxgsjjn1LS2KNstKThXQtn7lYQZM/DNE7uiaOmsLxayeJQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-api-gateway": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-gateway/-/dsh-api-gateway-0.1.0-rc.6.tgz", - "integrity": "sha512-pmdQXBEJpUtr87jIfTyzyPWKGbUghzJno/nZpBWfhk+ZTjGwj0jKpyA5GhhS/tzzo67f5IdmEjcxddoDr3o3Kw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-gateway/-/dsh-api-gateway-0.1.0-rc.7.tgz", + "integrity": "sha512-tcoOuHMSqYqCtMxLjWBHKN+glS56XaUo3ImphvDvUkB84FyU3btHNJbYeAt2oXoWbHfOedcIRWpfNN4tSmhPwQ==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-api-remotes": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-remotes/-/dsh-api-remotes-0.1.0-rc.6.tgz", - "integrity": "sha512-yYsHgPr5ZiLk+i2RTREdMj8Gin7J8jG2qnTehZmLpCONGbJv2+grPPRuH7OwcQd+HguXL0ay/rlg6L1O1t8xDg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-api-remotes/-/dsh-api-remotes-0.1.0-rc.7.tgz", + "integrity": "sha512-dsP69u0avHRcJTPzngudqCm73UaTxNvGi/557DNPi3cOSoIh1SyPzPgk8W8rQQEFTL07rkwt8KfdQoMU5ga1fg==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.6", - "@deepseek-ai/dsh-api-gateway": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.7", + "@deepseek-ai/dsh-api-gateway": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-app-boot": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-app-boot/-/dsh-app-boot-0.1.0-rc.6.tgz", - "integrity": "sha512-97Xb2wB0cuFMmbvW7/95pfMTyXwUNQxW/ROx19OdjS6PgHQNA28ZADZ19FgZmofguxzWuDD0lJPc1SWkSGLYcg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-app-boot/-/dsh-app-boot-0.1.0-rc.7.tgz", + "integrity": "sha512-3qgv994YzNGrlDcOyarL4vqNky3ttmYsUhDsMgGdefALK6gpL7ZCWF+9m0ehZjGY0Rb4VcBdieJYOY2EgpWb0w==", "license": "MIT", "dependencies": { "js-yaml": "^4.2.0" @@ -1355,10 +1358,10 @@ "@deepseek-ai/cordis-plugin-hmr": "^1.0.16", "@deepseek-ai/cordis-plugin-include": "^1.0.6", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" }, "peerDependenciesMeta": { "@deepseek-ai/cordis-plugin-hmr": { @@ -1367,30 +1370,30 @@ } }, "node_modules/@deepseek-ai/dsh-atomic-write": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-atomic-write/-/dsh-atomic-write-0.1.0-rc.6.tgz", - "integrity": "sha512-Ot/2aygDzWuN4ypUkDJA6MpSlGbcvzzKnWAms0lg+2WUtPZr7O0cGb83K3TEO2NoAu0LJfVxlbo8Eya3tDaFtw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-atomic-write/-/dsh-atomic-write-0.1.0-rc.7.tgz", + "integrity": "sha512-LxRx6K8FJ8bXZHiNhH6Rvj+jh/ZIpolmsmi138XrvMUGvbOBWE6QLbdzcgTgwrYZm5GP2kqqLe/3gQlgtt2bXA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-attachment": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.0-rc.6.tgz", - "integrity": "sha512-3P6N17NQ8jqSQGzeCs+svCIqArU8oq0YmgEAo+axN9aVuUDferWU4DLRSX59UGpmyldX4LQn81toA+c+DqMcHg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment/-/dsh-attachment-0.1.0-rc.7.tgz", + "integrity": "sha512-rsR/xVNOGIig8gXxhrKnkd6YD7aYliGtA/e7b4DlPawMpLhsItAh0HQ832n8LJn1aGZxKf68y9PRgzfljsveOQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-attachment-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment-local/-/dsh-attachment-local-0.1.0-rc.6.tgz", - "integrity": "sha512-vnLDgnFU2Nxxyjrdh1rRhUYhENE2ZMocfXoeWZd4qioCmjibO/GZxqB7HxJhmFzrldSkKI4VnOglPG8lttKW+Q==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-attachment-local/-/dsh-attachment-local-0.1.0-rc.7.tgz", + "integrity": "sha512-7i2Fuj811MFeqrUYnpEG3VBoShZEjQ7zNXdLOa1W5hZ4TWV+tUjX7pJoN88U1LOgEOWMc9uzSPqGA5/aKBYgdQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -1398,166 +1401,166 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-base": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-base/-/dsh-base-0.1.0-rc.6.tgz", - "integrity": "sha512-SR0V0Lq4Bm2ir7k2OaiINZZWFSDt1n4dS8J6IlIabYhoIF46baEQY2awZ9/InOWCe+dIpQob0/3y3yZOHqjnpw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-base/-/dsh-base-0.1.0-rc.7.tgz", + "integrity": "sha512-lpAMUO3PdxZwLnCQOdOZ/fu7eI27Ckz3Ec9MB9QYL4u34yatndCliTrGaFBDoNHoWt3V4gojzszRFrEx+Vce/g==", "license": "MIT", "dependencies": { "@deepseek-ai/cordis-plugin-hmr": "^1.0.16", "@deepseek-ai/cordis-plugin-timer": "^1.1.3", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-instructions": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-loop": "^0.1.0-rc.6", - "@deepseek-ai/dsh-api-gateway": "^0.1.0-rc.6", - "@deepseek-ai/dsh-attachment-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-bash-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-command-compact": "^0.1.0-rc.6", - "@deepseek-ai/dsh-command-feedback": "^0.1.0-rc.6", - "@deepseek-ai/dsh-command-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction-basic": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs-observation-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal-round-driver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm-deepseek": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm-pi-ai": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.6", - "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.6", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.6", - "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-repeat-tool-reminder": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-checkpoint-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-query-sqlite": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-telemetry-otel": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title-first-prompt-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings-file": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill-badge": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.6", - "@deepseek-ai/dsh-spill-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-spill-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent-fork-in-process": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent-spawn-in-process": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-bash": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-call-timeout-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-fs-search": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-pwsh": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-ralph": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-subagent-control": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-subagent-report": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-web": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-loader": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.6", - "@deepseek-ai/dsh-web": "^0.1.0-rc.6", - "@deepseek-ai/dsh-web-search-deepseek": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-instructions": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-loop": "^0.1.0-rc.7", + "@deepseek-ai/dsh-api-gateway": "^0.1.0-rc.7", + "@deepseek-ai/dsh-attachment-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-bash-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-command-compact": "^0.1.0-rc.7", + "@deepseek-ai/dsh-command-feedback": "^0.1.0-rc.7", + "@deepseek-ai/dsh-command-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction-basic": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs-observation-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal-round-driver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm-deepseek": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm-pi-ai": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.7", + "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.7", + "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.7", + "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-repeat-tool-reminder": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-checkpoint-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-query-sqlite": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-telemetry-otel": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title-first-prompt-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings-file": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill-badge": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill-filesystem": "^0.1.0-rc.7", + "@deepseek-ai/dsh-spill-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-spill-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent-fork-in-process": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent-spawn-in-process": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-bash": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-call-timeout-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-fs-search": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-pwsh": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-ralph": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-subagent-control": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-subagent-report": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-todo": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-web": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-loader": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.7", + "@deepseek-ai/dsh-web": "^0.1.0-rc.7", + "@deepseek-ai/dsh-web-search-deepseek": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.0-rc.7" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-bash-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-local/-/dsh-bash-local-0.1.0-rc.6.tgz", - "integrity": "sha512-YAc5W9uR7sN1Rrobp6fQlCaOdHqCWatTktV68UsoDuOJs5eM3nWEUUUVN8jdZCIDZhktT5hqbhe3+DzOX3Xg1w==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-local/-/dsh-bash-local-0.1.0-rc.7.tgz", + "integrity": "sha512-fsw2Ex5ExyX4A62P1+fodbnUG4PXOSyHAM4YtaLg2kcPcElLwatYNPG3gEuulxwbpWDlx/OWvbjHThnJUuzaoA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-bash-sandbox": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-sandbox/-/dsh-bash-sandbox-0.1.0-rc.6.tgz", - "integrity": "sha512-TNLRriAjpEUrJplrI0BmZtAtntIkV5usYiKylJGPlGUfWWnJkLR0zL9gioyXW3kncHBVSnb+YTuf+7FnDVeVHQ==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-bash-sandbox/-/dsh-bash-sandbox-0.1.0-rc.7.tgz", + "integrity": "sha512-xX+XhqPeRaOqMPDNk8dPboHza2pP13hTIMt+ztvd8WpD0t35idrNrcsXEYs+CtKiFWn6I05WB1BeAimWkLDOcg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-bash-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6" + "@deepseek-ai/dsh-bash-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-brand": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.0-rc.6.tgz", - "integrity": "sha512-E8j9Nby24qP4rfrdcfc7bpt1CHpGT3tYmycOJJkEOH4ptIdT1m2ro9nmnSd5CWYukTr64A77vjm2WGqHRI92UA==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-brand/-/dsh-brand-0.1.0-rc.7.tgz", + "integrity": "sha512-P7+w0fN40yXXQkV360p6jQi63pcl68OOWebNGN5gf8w8sguvni2mA1cU8RLZzDkRNFSZD+BCw3D4uWYM+hhh7A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-client-connection": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-connection/-/dsh-client-connection-0.1.0-rc.6.tgz", - "integrity": "sha512-ZHqZXmmdcxzw7HKwrSJDlU3/GVulvX/yAc1xHu7hw+cXWws2QK7ahQMpfdiywnxAVYadhFnsvLLkEPp38mOREg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-connection/-/dsh-client-connection-0.1.0-rc.7.tgz", + "integrity": "sha512-JZWDKCbwKHOUcm7+JadKA3aJCSEB34XfPycCtPgdWfABIiHMaSpnmSVy/8Jed4hw6hxhnR6A3rnvW02Xr2yqwA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", "@deepseek-ai/schemastery": "^3.18.1", "ws": "^8.21.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-client-hmr": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-hmr/-/dsh-client-hmr-0.1.0-rc.6.tgz", - "integrity": "sha512-DKm5ePNGDRCBVoyb42vBtE34M+FaIwgNwmJLu7xvOCj/XNlmgCBTakHCoKN9oBZLAPurC+D0skPEcGRHGqzBGw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-hmr/-/dsh-client-hmr-0.1.0-rc.7.tgz", + "integrity": "sha512-uJVHLMgmf19JI7UCqrC8jipf/5oaM539RPJ5sNv+BJCbt9Ik6VqaKbu4uiF+gz8i8EqbXV3D9criL1IiCS+pdg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" @@ -1565,49 +1568,70 @@ "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-client-locale": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-locale/-/dsh-client-locale-0.1.0-rc.7.tgz", + "integrity": "sha512-1onX79wXJfAzdwIJPUI9jEVYeVQJfWwyQvyL/OmGrnkCs8srJHIXBdYtsUC7ILlR13y5nOY4j6bifBOAoGRn6w==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, "node_modules/@deepseek-ai/dsh-client-modules": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-modules/-/dsh-client-modules-0.1.0-rc.6.tgz", - "integrity": "sha512-DFeXjfbfrU2LvVziHsqBsfvnYVuqXTpvNybwBDJqGBNR4VjPVUbvCUrH8pzFRkv0bQO6Vq6dLKUR0Q2ZUYdTwg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-modules/-/dsh-client-modules-0.1.0-rc.7.tgz", + "integrity": "sha512-hczFl0TRH5sLt/dS0+TMCtQvfDoeLw/r88L6n3rXfY6Q1e4Yddg6RAv4kGsUoMoLYgWi7qPwD6HcUGgyKkDPHg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-client-runtime": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-runtime/-/dsh-client-runtime-0.1.0-rc.6.tgz", - "integrity": "sha512-qprJMsVPLK2CyJmmCHwECJZlbM7XNG5yKr2Zf/yKYRyz0+QNJfHlIt+4C32tkjFFIq+Dx3gU5YaUQaLXxsR4/w==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-runtime/-/dsh-client-runtime-0.1.0-rc.7.tgz", + "integrity": "sha512-Ish2uFML2FibTpzo7QyVSt29jf/iG4j9BFQ41ychVMPRR3trJGM3h8CMuam3oKWlvB8OXVXFd6gO929w6PI0Ew==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", "immer": "^10.1.1", "react": "^18.2.0", "zustand": "~4.4.7" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-client-runtime/node_modules/react": { @@ -1660,33 +1684,53 @@ } }, "node_modules/@deepseek-ai/dsh-client-schema-form": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-schema-form/-/dsh-client-schema-form-0.1.0-rc.6.tgz", - "integrity": "sha512-2kFkweuNJlcnYRTy6rXx1gWoWNapFCDOvcYs7Kkir8n3JwQVB6xwTkQxVuZDBTD4jrdIpKTeetx4ghig49joTw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-schema-form/-/dsh-client-schema-form-0.1.0-rc.7.tgz", + "integrity": "sha512-acGeXjGl2lMqCO+jY1z9/FKbIiskk7FZO266OSBOwHJQP6yBd5MBnrvtPJUB3glP6xsQK8neFLLtRwVgRJ+GqQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-agent-preset": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-agent-preset/-/dsh-client-ui-agent-preset-0.1.0-rc.7.tgz", + "integrity": "sha512-85GLGfg3iEISMhHxn9ZePkB/mtXIJdWkpvSHCm9bZizK8KiyRfA/OjDpKfk5kvG16xKNV0KQo65HOf0JdwtyXQ==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, "node_modules/@deepseek-ai/dsh-client-ui-attachment": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-attachment/-/dsh-client-ui-attachment-0.1.0-rc.6.tgz", - "integrity": "sha512-/cnnH48758EQxJB/p3qPaAgFmQuxNgu29pGzSd4jH2W9dM29lNkLLZ15mrpS6IIDndx0bEzW/nLJ4x6/iowHnQ==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-attachment/-/dsh-client-ui-attachment-0.1.0-rc.7.tgz", + "integrity": "sha512-IRA778yZpOaoJEkODlfydd6yuASf7hF229s64IY5zaY+22K7D+X1cmDo8D13UylxQXFPAomTlHtQtQpCtghKXw==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", "clsx": "^2.0.0", "react": "^18.2.0", "react-dom": "^18.2.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-client-ui-attachment/node_modules/react": { @@ -1723,58 +1767,103 @@ "loose-envify": "^1.1.0" } }, - "node_modules/@deepseek-ai/dsh-client-ui-directory-picker-browse": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-directory-picker-browse/-/dsh-client-ui-directory-picker-browse-0.1.0-rc.6.tgz", - "integrity": "sha512-laXJjWRMPYaJaG5TuHB7H98Ahtg1Umxp6tH78WXVULATToJ5BLZ/7fPedc/rSlYwRQFFDpsmK0nNxsAVGY1RnQ==", + "node_modules/@deepseek-ai/dsh-client-ui-commands": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-commands/-/dsh-client-ui-commands-0.1.0-rc.7.tgz", + "integrity": "sha512-gLuzEmgVhEIjVeLlmIAdKX/SEEFavnVOD0mQPlHIMqFAX/80yzYfRD7CMxXc0amOj7uBcw7qsSa4WzFvaWso3w==", "license": "MIT", "dependencies": { "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-ui-primitives": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-primitives/-/dsh-client-ui-primitives-0.1.0-rc.6.tgz", - "integrity": "sha512-vZ9/V5pXYbkumLEOHagEjzSWvVxX+CtXZ13+iNz3BnqDVsy0HYLgnrWwcLLPHqHLUmww9NlxXe9husoS7o/zyw==", + "node_modules/@deepseek-ai/dsh-client-ui-conversation": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-conversation/-/dsh-client-ui-conversation-0.1.0-rc.7.tgz", + "integrity": "sha512-CyjFjP+oRJQ4ydX8WVrKUeloQnAJRA/fN6RRY6NAHldFC9pd1l8YogmTcR1JuCIlqzMnLRyYlGODQBYz8WOjmA==", "license": "MIT", "dependencies": { - "@shikijs/langs": "^4.3.1", - "@types/mdast": "^4.0.4", - "anser": "^2.3.5", - "clsx": "^2.0.0", - "katex": "^0.16.47", - "mdast-util-from-markdown": "^2.0.3", - "mdast-util-gfm": "^3.1.0", - "mdast-util-math": "^3.0.0", - "micromark-core-commonmark": "^2.0.3", - "micromark-extension-gfm": "^3.0.0", - "micromark-extension-math": "^3.1.0", - "micromark-factory-space": "^2.0.1", - "micromark-util-character": "^2.1.1", - "micromark-util-classify-character": "^2.0.1", - "micromark-util-sanitize-uri": "^2.0.1", - "micromark-util-symbol": "^2.0.1", - "micromark-util-types": "^2.0.2", - "react": "^18.2.0", - "react-dom": "^18.2.0", - "shiki": "^4.3.1" + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1", + "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.7", + "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-ui-primitives/node_modules/react": { + "node_modules/@deepseek-ai/dsh-client-ui-cordis": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-cordis/-/dsh-client-ui-cordis-0.1.0-rc.7.tgz", + "integrity": "sha512-8OwbFdMHRIE7L2PvoIGwSOkhUYsznr9u773K3s64DMxp4oLLl3ZzHc2hfaOfQTTmyE7ItpDJm8Von42LsJBKaw==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-deliverables": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-deliverables/-/dsh-client-ui-deliverables-0.1.0-rc.7.tgz", + "integrity": "sha512-uVN7TXKrGQMACKToSTPxOIeDlebQgi2OMiKBaKrYcI7jBsCRief3CTLziZ6Kups2h2s72Eo6gu/0eueccwLYew==", + "license": "MIT", + "dependencies": { + "react": "^18.2.0" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-deliverables/node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", @@ -1786,76 +1875,95 @@ "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-client-ui-primitives/node_modules/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "node_modules/@deepseek-ai/dsh-client-ui-directory-picker-browse": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-directory-picker-browse/-/dsh-client-ui-directory-picker-browse-0.1.0-rc.7.tgz", + "integrity": "sha512-5lj27c68wWqroyIOXmFPGUDFQxICDYEcYAJSuV5ZbnHXyN2cBTTDTW4zJPwisY5GhKfiJXjhS0YZqLi54/Xn+Q==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.2" + "clsx": "^2.0.0" }, "peerDependencies": { - "react": "^18.3.1" + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-ui-primitives/node_modules/scheduler": { - "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "node_modules/@deepseek-ai/dsh-client-ui-directory-picker-native": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-directory-picker-native/-/dsh-client-ui-directory-picker-native-0.1.0-rc.7.tgz", + "integrity": "sha512-SZ9NuuIDrBjHJsEcnqwhbiCZknjkyNd0ZBHDl453p2WHkfA8zwDMUJRdAMWd0sC95WH2Yu4rMzkAVYjZwCBjVw==", "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-ui-slots": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-slots/-/dsh-client-ui-slots-0.1.0-rc.6.tgz", - "integrity": "sha512-F4VZA60bMRi4DAbZvNipM4E/Jl01QC0cQCPpeIEIh1/lq/y/bpc7IqujtzWESHPe3qSljTURip3hkANfsYs3UA==", + "node_modules/@deepseek-ai/dsh-client-ui-goal": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-goal/-/dsh-client-ui-goal-0.1.0-rc.7.tgz", + "integrity": "sha512-zZEAbaA6ZCMw2ZDGMWFm+nBXnBBRfI8StRtx33GoFcJHlMIP5mJfuSm2gcFHdO+3aeAmuTf5G++DdWwLRLZv9A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-web": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-web/-/dsh-client-web-0.1.0-rc.6.tgz", - "integrity": "sha512-T0N/QeR/cVwj+Ss/GjnbGoEy+a63m5nhjD8Z9eRhaj3rgJHAoYrGf08/IbzAqXULZRZ5Y+Uqg338yhMymv4hwA==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "node_modules/@deepseek-ai/dsh-client-ui-input-trigger": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-input-trigger/-/dsh-client-ui-input-trigger-0.1.0-rc.7.tgz", + "integrity": "sha512-Sfn4YlS6dKm/ojGRyZL5oq34+GSeyirzGkmqhtoX7hpjHAhBVmugz2jku2ijYEjjFtD6YKYdWwvQxHdRaHFZ+w==", + "license": "MIT", + "dependencies": { + "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-web-react": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-web-react/-/dsh-client-web-react-0.1.0-rc.6.tgz", - "integrity": "sha512-2PAnRsZzokVr/nCcwX87axdxzobQYp76xzX70vYSqghlDab1phsIdgDSm1JxpszN9G3ETBMTLPM9xz30iodqYQ==", + "node_modules/@deepseek-ai/dsh-client-ui-jobs": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-jobs/-/dsh-client-ui-jobs-0.1.0-rc.7.tgz", + "integrity": "sha512-q8WvaB1gxj4OBPCLC/luDLQ7TRY2iwuhOZKrwG1MbXhSmfd14RiyKHG1p/5HIxwTJZfqnxuN69NzdAZY6cjU8g==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "react": "^18.2.0", - "use-sync-external-store": "1.2.0" + "react": "^18.2.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-client-web-react/node_modules/react": { + "node_modules/@deepseek-ai/dsh-client-ui-jobs/node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", @@ -1867,40 +1975,134 @@ "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-client-web-react/node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "node_modules/@deepseek-ai/dsh-client-ui-layout": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-layout/-/dsh-client-ui-layout-0.1.0-rc.7.tgz", + "integrity": "sha512-4z5xkH/O8GT6ve1IX15WTel236fJwSuRZusMKJ9qIxdslZZ1h+wMbtgX3tCqg7mTtMznRDspCpC1b1QSAt4nTg==", "license": "MIT", "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-message-feedback": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-message-feedback/-/dsh-client-ui-message-feedback-0.1.0-rc.7.tgz", + "integrity": "sha512-B8y2+tu1xorpHmwo8KWsLFZwa4P0uFCI32H1SwYyQjBjoTbSb+TOfPA3i6na988XMiF8NCcxynTFzHRv/77AJw==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7", + "react": "^18.2.0" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-model-selection": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-model-selection/-/dsh-client-ui-model-selection-0.1.0-rc.7.tgz", + "integrity": "sha512-Gr5goo9dEGCR/CqpeJgO1mGO1ZqoX4tpuAMuZoq3wmLwaeK8qOMMhHGTxGOI9NbBD1snvbUzOJP/LUoNrS61YQ==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "clsx": "^2.1.1", + "react": "^18.2.0" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-permission-presets": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-permission-presets/-/dsh-client-ui-permission-presets-0.1.0-rc.7.tgz", + "integrity": "sha512-OO/miNmPCJS/5GffqXeBnPvdx1HnHvi9AHb4Uoy9N+zucwo7ZQV40lQ+ODcAX9UaRW/6x3a8CxQ3G4q1t/ltKQ==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.7", + "react": "^18.2.0" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-plan": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-plan/-/dsh-client-ui-plan-0.1.0-rc.7.tgz", + "integrity": "sha512-b6qqGcq5MxulD+XBxcD3ZewgJ17OUegeSA0Ov0afC4hvgyhWhZP3b+odH92ax7Ckaat8/Yx2j4NPpu81e30qLA==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-client-web/node_modules/@deepseek-ai/dsh-client-ui-theme": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.1.0-rc.6.tgz", - "integrity": "sha512-Wu+bvnuti/gLA+t5a2cWUMQJ5UCqxt6oEK+OJiJ68gN0ixs2skpaN0nFdFoY2exC5KByXrNlN1rRrD+FsZSBLA==", + "node_modules/@deepseek-ai/dsh-client-ui-primitives": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-primitives/-/dsh-client-ui-primitives-0.1.0-rc.7.tgz", + "integrity": "sha512-x3cnIAeOdDMd7no8JwP65q7J9Fj4xQWAZPPJY4MzgfQAAOcHJb0T0d5Uo4FXMiCcTeU/73n7BssS5PE7jjgiDg==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1", - "clsx": "^2.0.0" + "@shikijs/langs": "^4.3.1", + "@types/mdast": "^4.0.4", + "anser": "^2.3.5", + "clsx": "^2.0.0", + "katex": "^0.16.47", + "mdast-util-from-markdown": "^2.0.3", + "mdast-util-gfm": "^3.1.0", + "mdast-util-math": "^3.0.0", + "micromark-core-commonmark": "^2.0.3", + "micromark-extension-gfm": "^3.0.0", + "micromark-extension-math": "^3.1.0", + "micromark-factory-space": "^2.0.1", + "micromark-util-character": "^2.1.1", + "micromark-util-classify-character": "^2.0.1", + "micromark-util-sanitize-uri": "^2.0.1", + "micromark-util-symbol": "^2.0.1", + "micromark-util-types": "^2.0.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "shiki": "^4.3.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-client-web/node_modules/react": { + "node_modules/@deepseek-ai/dsh-client-ui-primitives/node_modules/react": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", @@ -1912,7 +2114,7 @@ "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-client-web/node_modules/react-dom": { + "node_modules/@deepseek-ai/dsh-client-ui-primitives/node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", @@ -1925,7 +2127,7 @@ "react": "^18.3.1" } }, - "node_modules/@deepseek-ai/dsh-client-web/node_modules/scheduler": { + "node_modules/@deepseek-ai/dsh-client-ui-primitives/node_modules/scheduler": { "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", @@ -1934,613 +2136,598 @@ "loose-envify": "^1.1.0" } }, - "node_modules/@deepseek-ai/dsh-cmdline": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cmdline/-/dsh-cmdline-0.1.0-rc.6.tgz", - "integrity": "sha512-dqRHF+kIlTBwt+fio/34ttp6B7Lrpm31A+EOoEwBuwaziiHTEAWVl50hS53dPFmPyVBRINavBdx7Fa7UT2/2iw==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-code-runtime": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.0-rc.6.tgz", - "integrity": "sha512-aw8D4IOeMo11A3uxQeE4LFoW3bvaQnVkGFqqtS+lsINDARrOCJHXLUgecoKpys+Lc5erZZ4UQDnymJmL4OCcKA==", + "node_modules/@deepseek-ai/dsh-client-ui-settings": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings/-/dsh-client-ui-settings-0.1.0-rc.7.tgz", + "integrity": "sha512-I02BGKw3/yG25yf5omsMwmwJ2CnFyxTvbxqgRgSmTCUxATkLT87K8SxcemRZqXnFXQZhm6Il6bwVCpVfRfmNoA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-code-runtime-worker-thread": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime-worker-thread/-/dsh-code-runtime-worker-thread-0.1.0-rc.6.tgz", - "integrity": "sha512-I2YX2ZSeQnQrSJGffM2upL+7y7vGsLwKv478gesusgYtT0kH/MOcszO9ZpnV8sIqvlkgzvWgBhXzniGHWh40ZA==", + "node_modules/@deepseek-ai/dsh-client-ui-settings-general": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-general/-/dsh-client-ui-settings-general-0.1.0-rc.7.tgz", + "integrity": "sha512-L5heQqyzZ/Kd+/hj8Ptd89OOss6FI8TjD3iwC47V3Xj/8ZgtnHwEA7vSqeoTe03uzRz8Zd8ec+bz/q47z8/I/Q==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1", + "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-command-compact": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-compact/-/dsh-command-compact-0.1.0-rc.6.tgz", - "integrity": "sha512-aTadVzxYa+Me/9QqolHnXaduRVKPxe8z3XraZ9EdQp6Cz/QrYS9DMUbO2Bp434qgwAdye0SytuHLBBb9h8GVQw==", + "node_modules/@deepseek-ai/dsh-client-ui-settings-models": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-models/-/dsh-client-ui-settings-models-0.1.0-rc.7.tgz", + "integrity": "sha512-q73sXPomdUGpucj6pgKuO3WrGzqCoqyZhbqOZQL7EIdJcl9N3P+tNhsNj+ls1UOcOpb36Ou2NzUdIeyHSNVmKg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-command-feedback": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-feedback/-/dsh-command-feedback-0.1.0-rc.6.tgz", - "integrity": "sha512-VGVszTifY/LkgrTOctj8FRCVm62fwLZEGUan8rTqxLwIWYt7JZ9avckTtuB3Ls62hNBKGSAdbZ7fgH4n8KKMxQ==", + "node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/-/dsh-client-ui-settings-plugin-inventory-0.1.0-rc.7.tgz", + "integrity": "sha512-Ei6q5/UdUC9SxrTcbn/XR1NCe4iZgovhmbKCKBKBHMCNxhE0umdUJL8M7uKZdlpItJQ2ggiK9L8RmztKDmv59A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-telemetry": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-command-goal": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-goal/-/dsh-command-goal-0.1.0-rc.6.tgz", - "integrity": "sha512-3roWsvwDYPswLmpxxKcCjAAi8rRP9+jXhZ0yCss/zNAAKHgxlO8AJ5EcTkWnN9ODUnwzith448aQyU5mbm+GCg==", + "node_modules/@deepseek-ai/dsh-client-ui-settings-plugins": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugins/-/dsh-client-ui-settings-plugins-0.1.0-rc.7.tgz", + "integrity": "sha512-oOOgj9NTv1GE+QdKhBfkcWG2+WS9uJz5NYgIZzahbg6xCbu4a2vugcCKcyslQEKKOB35mGHH/orPcoj2N+DeHg==", "license": "MIT", + "dependencies": { + "clsx": "^2.0.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-commands": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.0-rc.6.tgz", - "integrity": "sha512-dq1GZmGTPXEGG01ksZ6Jj6DxAkzAbg+nepvfnM/P74d6EUcsFsEy7CfS18n0VJ6/2Wp0xOWsQyyuFElqbynO7w==", + "node_modules/@deepseek-ai/dsh-client-ui-sidebar": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-sidebar/-/dsh-client-ui-sidebar-0.1.0-rc.7.tgz", + "integrity": "sha512-YduvLROf3gniqYggfRfkvNDMtqvWlREmwxVtxullWTXhrgXmcPya7GCKJeru8ZuyrF3FU1XqOR8KJT+OzLSv7w==", "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-compaction": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.0-rc.6.tgz", - "integrity": "sha512-Uu8qgrHom13gdwwxAnqmNuWM8MqafkRlhjQMMJYmaMVVxjEUewSJ6lwtMbUEBR5ViLsfv4pTm5TnhxNCjedBUw==", + "node_modules/@deepseek-ai/dsh-client-ui-skill": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-skill/-/dsh-client-ui-skill-0.1.0-rc.7.tgz", + "integrity": "sha512-jxqQhu4RkNjEf2zTm/h9qJZ+q/mHdSBVC05XqfsdNP1VRni9k9L/LcR2TWHfyuvM61drtdi5s+/ZW9pbxaQPiQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-compaction-basic": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-basic/-/dsh-compaction-basic-0.1.0-rc.6.tgz", - "integrity": "sha512-sqfFPBy1SqsOmaWro/GOAcDkrryjsmJLU/M+V4HZakoE7hLyGVhMElrRG5E5OlplIl2Akntc+YYwX36kDfEItw==", + "node_modules/@deepseek-ai/dsh-client-ui-slots": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-slots/-/dsh-client-ui-slots-0.1.0-rc.7.tgz", + "integrity": "sha512-5rPP/6IWZflhiegVHU56IOPGHtrhLgBV44mOFn2JNVwiwxxmKeIhEcnYD4M0eKkI+pRiJIO5WvkRYokIGgyFiA==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6" - }, - "peerDependenciesMeta": { - "@deepseek-ai/dsh-compaction-tool-result-pruner": { - "optional": true - } + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-compaction-tool-result-pruner": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-tool-result-pruner/-/dsh-compaction-tool-result-pruner-0.1.0-rc.6.tgz", - "integrity": "sha512-xLtF3Js38AvKRITHi1ghWShsIphgT4EPpgr65VecCVpzCun0Agok2rZwKE7Kecw+pw2oC8kafHAc32SfmUudqw==", + "node_modules/@deepseek-ai/dsh-client-ui-subagent": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-subagent/-/dsh-client-ui-subagent-0.1.0-rc.7.tgz", + "integrity": "sha512-geEZbS5N68tYJIPSToWIFPj0EjRiJBzryLvv3VL+INqt6urYCEm2uY7arNLUFJhHpjOJVi45ZM8qlh0qw5Sk7Q==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "react": "^18.2.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-cordis-host-runner": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-host-runner/-/dsh-cordis-host-runner-0.1.0-rc.6.tgz", - "integrity": "sha512-opN+kvxYf40rBVWhURZmq2E8uGWkv8r9L0YfynYAu/2YE7W/oGEQx2x1Mp0LxuWq1uec8rtu2GL2U17ORNuuVw==", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-subagent/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "loose-envify": "^1.1.0" }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-credentials": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.0-rc.6.tgz", - "integrity": "sha512-zyYRs3A9gxfZjZfONzJdMhM0Gzbslpha+FGYkLDRAozgPj0N7mZdE+Qflx2V4WNrCnsSjuvOW0HFBxWtSRUTUw==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-credentials-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials-local/-/dsh-credentials-local-0.1.0-rc.6.tgz", - "integrity": "sha512-DSDcC1i8hd3Ynyr6MTPFoEdAsxcmZSLo68IPBPvaPGHZ+rCX8XDAjghWvXrNkLtkjms0ngNVPJS3rNMRcJFq0w==", + "node_modules/@deepseek-ai/dsh-client-ui-theme": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.1.0-rc.7.tgz", + "integrity": "sha512-T5YaUZEJv0XHL0VYuP4/Vg+tbQGgRq0+gqsbqryuU5nq59PPISDED81zpCSb1jkZ/xFNc5Weq68+54cUGndpQg==", "license": "MIT", "dependencies": { + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", "@deepseek-ai/schemastery": "^3.18.1", - "chokidar": "^4.0.3", - "yaml": "^2.9.0" + "clsx": "^2.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-fs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs/-/dsh-fs-0.1.0-rc.6.tgz", - "integrity": "sha512-OTkwb4QsZgmjtA/8ZEPh1FapmrBr3N989/G4Wmo1JkAvKbMxkYty6LxjckOawTTz7GJTfUoZCrw9uopDfIMMNw==", + "node_modules/@deepseek-ai/dsh-client-ui-tool": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-tool/-/dsh-client-ui-tool-0.1.0-rc.7.tgz", + "integrity": "sha512-smo+6QWddCdtLQb4AUVbaaxsu3h8ImQlMDTBYK4qeoxlVTQdKgrNdgtQe5YoB8bvuGLQd6obVVwwScPNaD73xw==", "license": "MIT", + "dependencies": { + "clsx": "^2.0.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-fs-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-local/-/dsh-fs-local-0.1.0-rc.6.tgz", - "integrity": "sha512-zP0OW474s7tvzEVQnBBTGL6Jrv/YyQXt4nswIbc3Aqr9JyHSfhZ/5IJoipZqfYXLS3ISWMhrF2npRg8L1NGsIQ==", + "node_modules/@deepseek-ai/dsh-client-ui-trajectory": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-trajectory/-/dsh-client-ui-trajectory-0.1.0-rc.7.tgz", + "integrity": "sha512-Iuksc3q9Rpwj+EQMoCv9BqfLBEclDiUGiGwUec2p2FhZjr1yEBK4ujlQK2N71EteyBjQ5yODE+/S+TzNkrou9w==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "koffi": "^3.1.0" + "@tanstack/react-virtual": "^3.14.9", + "diff": "^9.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "react": "^18.2.0", + "react-dom": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-fs-observation-policy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-observation-policy/-/dsh-fs-observation-policy-0.1.0-rc.6.tgz", - "integrity": "sha512-EiBMACBVmVEs0fDFkbVH6OwXrVDp9GrTG8c62vGBfuljZvRNv6yVwS+SDblboJrIPcp67axxHRVPOEy7z1CUKQ==", + "node_modules/@deepseek-ai/dsh-client-ui-user-questions": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-user-questions/-/dsh-client-ui-user-questions-0.1.0-rc.7.tgz", + "integrity": "sha512-HrFy3NpBx8J1Az+4WCljgXQvt/TTa6G3SKgtF0ZxdstB+BYoiMyBjO8aXAKQ94BM7zLcOVfUmL1bCb9t6tFmvg==", "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "clsx": "^2.0.0", + "react": "^18.2.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-fs-sandbox": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-sandbox/-/dsh-fs-sandbox-0.1.0-rc.6.tgz", - "integrity": "sha512-NLUeuZkeQVNPIpUute6TW4Ts1et6XxLkQIOxunL5T9mXwizp+tcdCeNjBW6XMiG6gvpECA+IA3amFCvbVSXtXw==", + "node_modules/@deepseek-ai/dsh-client-ui-user-questions/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6" + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-goal": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal/-/dsh-goal-0.1.0-rc.6.tgz", - "integrity": "sha512-cONQOvFqZmjtw5HSgbXJ5/8rZ2gHqdf69ONhH21cLFu5jJKVy9YbLt42SlD2sdGMv/co9nN8Kt9bWQiZ/96VbQ==", + "node_modules/@deepseek-ai/dsh-client-ui-workflow-run": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workflow-run/-/dsh-client-ui-workflow-run-0.1.0-rc.7.tgz", + "integrity": "sha512-XTKDLADe621GN+D2ysnOdVFvK1Et4nxvdrvsCxl7epsfrelsZD4l+/BleUQ+G/vQVZt3v03VkVVnE0SPGpt9Fg==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "react": "^18.2.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workflow": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-client-ui-workflow-run/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-goal-round-driver": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal-round-driver/-/dsh-goal-round-driver-0.1.0-rc.6.tgz", - "integrity": "sha512-+tpbRXZ3nq/C2btBxyFC88RU0IC0H39JY1WyL07fq3j24AWS5jZb9/05gEJPyoyaIDkV/Li4dJVCdJH4VaF9Fw==", + "node_modules/@deepseek-ai/dsh-client-ui-workspace": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workspace/-/dsh-client-ui-workspace-0.1.0-rc.7.tgz", + "integrity": "sha512-+8TmQprJ4y1J9AyM+/ABkndWsv6/lwA7by6HlRup4Ks2auQBhejFG7FjZPFACjkWLuJaIgDUN1aRQ5MNFCanfQ==", "license": "MIT", + "dependencies": { + "clsx": "^2.0.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-headless": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-headless/-/dsh-headless-0.1.0-rc.6.tgz", - "integrity": "sha512-0jdWiQMWwkbJ/PnUJng8NrrBM5fsMXCWYFKW3CUFCllhEMJwhoSrd5F7aRsqwKrIGqTRORLPRVOxdawhnVCSGQ==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.6", - "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1", - "commander": "^15.0.0" + "node_modules/@deepseek-ai/dsh-client-web": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-web/-/dsh-client-web-0.1.0-rc.7.tgz", + "integrity": "sha512-1pb5B7V8vhrgoCFsBwa8A+MsXkPvwPJ8fJ5ldMZ4Cd1RyFPgVev48LW/z2WF4tc6qkots2wnjZ2i6bMz8wvk2g==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.7", + "react": "^18.2.0", + "react-dom": "^18.2.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-headless/node_modules/commander": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", - "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", - "license": "MIT", - "engines": { - "node": ">=22.12.0" - } - }, - "node_modules/@deepseek-ai/dsh-home-paths": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.0-rc.6.tgz", - "integrity": "sha512-gIiUBmqB3L8inFr+hvjZv2/i6EVJOHIHCHg7bBFVhcl4HDK94+8wUCXTLGy80tcuISzIQiIaLuJq/NhSmV9Amw==", + "node_modules/@deepseek-ai/dsh-client-web-react": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-web-react/-/dsh-client-web-react-0.1.0-rc.7.tgz", + "integrity": "sha512-aw8s6RgMVJNNPTHB4TzVmKsuROp9yZDMKKXsMEEha8CESlHhCF1c+qxLsjAcilwY5CYCwin2T/3lot88k+ITiw==", "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "react": "^18.2.0", + "use-sync-external-store": "1.2.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-host-apiproxy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-apiproxy/-/dsh-host-apiproxy-0.1.0-rc.6.tgz", - "integrity": "sha512-sydiTngUEtvCyUwtCpXusQXVuiq0Kv7t2Axe8UKbimhhQLktnfhAmsEF+QHFTG5zcnxAuuigPiUTeY0Cr8+CnA==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.6", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-native-command": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-query": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workspace": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1", - "fflate": "^0.8.2", - "zod": "^4.4.3" + "node_modules/@deepseek-ai/dsh-client-web-react/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-host-apiproxy/node_modules/fflate": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", - "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", - "license": "MIT" - }, - "node_modules/@deepseek-ai/dsh-host-directory-picker": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker/-/dsh-host-directory-picker-0.1.0-rc.6.tgz", - "integrity": "sha512-1XafIFC2H5sPi720ATQWgCTgjZum7ZUng6H+z9uDMOhkKLFO7X2n8D2ddmGuQINnKV7sjlw0Q1uBr/sFiY4Bqw==", + "node_modules/@deepseek-ai/dsh-client-web-react/node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", "license": "MIT", "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/@deepseek-ai/dsh-host-directory-picker-browse": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-browse/-/dsh-host-directory-picker-browse-0.1.0-rc.6.tgz", - "integrity": "sha512-NAQOaGoEEpC0XEV5k6He/8t9UVy9EM/fq8a40dy9XjgvcCePelfOZOLaN9lnIp4UAY+CbVFglhzsuFF5M2rueg==", + "node_modules/@deepseek-ai/dsh-client-web/node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1" + "loose-envify": "^1.1.0" }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/@deepseek-ai/dsh-host-directory-picker-native": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-native/-/dsh-host-directory-picker-native-0.1.0-rc.6.tgz", - "integrity": "sha512-mr93KFRWfZ5HeAOT7N9IUYCzYsc7/CwG+tx76ozXL5znyUFS7OJfTJovcfglQv+GD+0wftX/N/857iVDsxr2cQ==", + "node_modules/@deepseek-ai/dsh-client-web/node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.6", - "@deepseek-ai/dsh-native-command": "^0.1.0-rc.6", - "koffi": "^3.1.0" + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "react": "^18.3.1" } }, - "node_modules/@deepseek-ai/dsh-host-frontend-static": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-frontend-static/-/dsh-host-frontend-static-0.1.0-rc.6.tgz", - "integrity": "sha512-WrUEn7jCykwbn+weYWbZrrWWOf4VGNsdv9m88AZK9+gX39EqsUU1mZhTMVlw8Pjea11/W091sszyyPDgK8HJNw==", + "node_modules/@deepseek-ai/dsh-client-web/node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "loose-envify": "^1.1.0" } }, - "node_modules/@deepseek-ai/dsh-host-plugin-inventory": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-plugin-inventory/-/dsh-host-plugin-inventory-0.1.0-rc.6.tgz", - "integrity": "sha512-FObaWsBb1Wlyg5/UH7nSNRUCjslZmUEOO90E2g01asefzXICmvY9rDsaAHzOvuAljX9+IDWn678kDJBK+3OFkA==", + "node_modules/@deepseek-ai/dsh-cmdline": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cmdline/-/dsh-cmdline-0.1.0-rc.7.tgz", + "integrity": "sha512-jNY9OOSpcH3csXqCwj8MMinByo42aUVIEauTSK1tNIOn6h6q0Y7SPu1ObIo5i3k0Khh/OWIiBTS1SbBlxcJHjw==", "license": "MIT", - "dependencies": { - "zod": "^4.4.3" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-host-webserver": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-webserver/-/dsh-host-webserver-0.1.0-rc.6.tgz", - "integrity": "sha512-Zod2L+JPss8uGuVMc+5VMQYidCyOZWV8H7LsvyzVR73dhB9zIIm4smuRwuHrk6ss+F/QWmHWV+/yUgqbBJTLjA==", + "node_modules/@deepseek-ai/dsh-code-runtime": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime/-/dsh-code-runtime-0.1.0-rc.7.tgz", + "integrity": "sha512-vzW82eU4so0qJQ/XS7BGBUSguJMAgEOW3GaJJW0g+W5ysBJg+UC/Jjo1Np8mPjSpjjl4eoyXpshJzrwjoxCpRg==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-invariants": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.0-rc.6.tgz", - "integrity": "sha512-WfEfOi99a4cpOugRAHTBSTnesLieu3ist1q9PXDXFBHX++K1rAl9+sB7YrdnbB8LH0UOY532gS9xJUYU6w0SLw==", + "node_modules/@deepseek-ai/dsh-code-runtime-worker-thread": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-code-runtime-worker-thread/-/dsh-code-runtime-worker-thread-0.1.0-rc.7.tgz", + "integrity": "sha512-CEGOMie1k733yc6TCSZuAtgbcs5H2QPO9wZnDnkx/kqaj3W+cEZGz6zZvljYNMWspNpomDTqOqpcB4ZAOI/K3g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1" + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-jobs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.0-rc.6.tgz", - "integrity": "sha512-fmyvSOVsNObmRnciuH57ZntuCSb0gflRleCeQx1ToGHRoGrR4Ndnstx33SuIXUQt6OSUhD2w2WKQTReXogpnSQ==", + "node_modules/@deepseek-ai/dsh-command-compact": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-compact/-/dsh-command-compact-0.1.0-rc.7.tgz", + "integrity": "sha512-zDBNVlCAwnieffyctzqZ7hUGLJqyTjqvtCEvzSNckmd2owyuYNPDIeFu4NTo/xN8Z/TISiuGbgA0wnIBCIsNtQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-jobs-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs-local/-/dsh-jobs-local-0.1.0-rc.6.tgz", - "integrity": "sha512-vnCcHPjvXLQq2i80No61oKF/165+OvEC2iUBmVTxl6ka87yNECwYf4nrspHKqP9HbVWndtNP0lGgrnz7bo0XCw==", + "node_modules/@deepseek-ai/dsh-command-feedback": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-feedback/-/dsh-command-feedback-0.1.0-rc.7.tgz", + "integrity": "sha512-DM/EGrz8vvgRJSxV4UAWtyJpxFi1v8gWkj/iT9q5iGex0zNdDO4Ml0/u/e73brmN3bsGyubsdUuIdkGsl8n/Ig==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-telemetry": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-launch-environment": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.1.0-rc.6.tgz", - "integrity": "sha512-tTRJ1464PJUDe1Em1qq0mfdgGREzGGWo3JSqP6xeYDoX+MRXVP9/ChsZ5k6VBMjARAxw0HGBf7WR6VcupHbMZg==", + "node_modules/@deepseek-ai/dsh-command-goal": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-command-goal/-/dsh-command-goal-0.1.0-rc.7.tgz", + "integrity": "sha512-ezuYaKmblRkOaFLUpzrTK9DiTrbES2lBtmkzo/Fg4UteDHLBVEaBgoips0J15gXJm8mE6o3LHhsgmGCIdNepKQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-llm": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.0-rc.6.tgz", - "integrity": "sha512-kuFGC8bHlzGTwlRxQhXjf3CYWl8M4NzH+EYIkrW8rri4iMc9W53xrdvkil5No/DUlMm8g1u7GdeiWYFy0TMvtA==", + "node_modules/@deepseek-ai/dsh-commands": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-commands/-/dsh-commands-0.1.0-rc.7.tgz", + "integrity": "sha512-SYrQpJZQ4fvfyfw3IJ5j0goUiOFZb1ZhcANgUp99HVlhhN/l1oEOAvEZL1efaSE7KIG6qp4JEn7iLtNdo8+mEA==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-llm-deepseek": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-deepseek/-/dsh-llm-deepseek-0.1.0-rc.6.tgz", - "integrity": "sha512-Md9ik1e8tmrKcL2aRpif8qdndl9TObbfHodj6CeVlkrL9y+PEghVPZqOYtnuRcv4/e0nVSIJsUw2gFvaL+T40Q==", + "node_modules/@deepseek-ai/dsh-compaction": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction/-/dsh-compaction-0.1.0-rc.7.tgz", + "integrity": "sha512-9SDsfhfOzriMw4AF/md6MDOjl+YOwtE9BKFwunCGzfyWZnOUljoKEZxjtU0w1sIESSAjJnTicqb2NBOAIV9YQQ==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "eventsource-parser": "^3.1.0" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-llm-pi-ai": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-pi-ai/-/dsh-llm-pi-ai-0.1.0-rc.6.tgz", - "integrity": "sha512-5RvzkpVCYLg9A3IGdm04px7XOaF/xikuMLe2toBY4A0qtJraXiZtUN1QBOL9i6u7DTOLG9oHP/USsbWRpyI+1Q==", + "node_modules/@deepseek-ai/dsh-compaction-basic": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-basic/-/dsh-compaction-basic-0.1.0-rc.7.tgz", + "integrity": "sha512-c4bkTsJMKeDDgN3F9GBvEJCnsaLyl3I+uXb42rBPhOzH85bG2x55fMO9lBhtpvE5h5JUOP/tBMtTAW2OCe10Mg==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "@earendil-works/pi-ai": "^0.82.1" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-compaction-tool-result-pruner": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-llm-retry": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-retry/-/dsh-llm-retry-0.1.0-rc.6.tgz", - "integrity": "sha512-HdjBWcQ6spwA8B5dScRhndLQNiKoQTkq36O+kmJ80B9V4z08K5XrJwAInH9cCxJ91CqNzx/sxCdDds0oZDH1Pw==", + "node_modules/@deepseek-ai/dsh-compaction-tool-result-pruner": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-compaction-tool-result-pruner/-/dsh-compaction-tool-result-pruner-0.1.0-rc.7.tgz", + "integrity": "sha512-W4SbSgHlAhCB6ZXjr1/BdRiTn1F1x5nZdCY+0AazHoJY9FDACN0hUd6Rlkc40n3x0BHxXN/sZFDHCtT/26Fw+Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-mcp-client": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-mcp-client/-/dsh-mcp-client-0.1.0-rc.6.tgz", - "integrity": "sha512-seBl0SLn308CbPwGVSm2BM3HECaNln3mbpcdHtw4DjnI5mZRILxC6wgKXAtYcNWKxMY1FaiwFWcgQ2+HHCQ7PQ==", + "node_modules/@deepseek-ai/dsh-cordis-client-runner": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-client-runner/-/dsh-cordis-client-runner-0.1.0-rc.7.tgz", + "integrity": "sha512-D8A93lu2T1/QfT9yRErxI3ptgTyGwJUIorzf5WQe4+3/buv1LUKCXJHabm0fknaDiQdUOge+MjdZDNV2SoYGvw==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "@modelcontextprotocol/sdk": "^1.12.0", - "zod": "^4.4.3" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/cordis-plugin-loader": "^1.0.2", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-message-feedback": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.6.tgz", - "integrity": "sha512-yqI49BjgVODSPQex7KdRhc4fUquvhifRYe73QP3w6snXYB6058tH8WQk2Yx+m1APi60dLEAZ1AJibRA4oCo6WQ==", + "node_modules/@deepseek-ai/dsh-cordis-host-runner": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-host-runner/-/dsh-cordis-host-runner-0.1.0-rc.7.tgz", + "integrity": "sha512-A7R39cSNsLwjm+P54bUFBUd5+YbdyKkC5cLQqYt12STt0Z06az10Qt5rsL25rnWkxW7x7Ql0wVA83tOmO2oy0g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -2548,917 +2735,785 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-native-command": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-native-command/-/dsh-native-command-0.1.0-rc.6.tgz", - "integrity": "sha512-b2AwcAlNmTDPho/dMQ5wOicEwkDG1FSNSCUvluFp9JBbM8AqUMI3rVuOGFPIT0BEOi+ehpW/if0BZ2S35FSEwA==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-output-retention": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-output-retention/-/dsh-output-retention-0.1.0-rc.6.tgz", - "integrity": "sha512-3TQJxGqjotWrvNKI+Da8nIDjzpKZEGpImeMBp7EklfO0CDbiXA5B0Ms39zBniWkWr1lvbm2iJiYERY5uDeP6og==", + "node_modules/@deepseek-ai/dsh-credentials": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials/-/dsh-credentials-0.1.0-rc.7.tgz", + "integrity": "sha512-24oY36x90GN3QG2BASlryjzsO5eLA1U9vsvH1tPtBRJ1pBC6JqnW2v0SfDI/pcMT0ZbWo0uEATiik8rrv6xRpA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-permission-presets": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-permission-presets/-/dsh-permission-presets-0.1.0-rc.6.tgz", - "integrity": "sha512-enFyuj9mTN44sMAwLoiommngZSY5yp09JtKOKT541lycacUotuvlTj9W+KJ0whtIOuYQ1jdIzYnyFGnH0J10SQ==", + "node_modules/@deepseek-ai/dsh-credentials-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-credentials-local/-/dsh-credentials-local-0.1.0-rc.7.tgz", + "integrity": "sha512-3HB4nHXzR3HreJE4MfVSX45Am1/JiKFSDOYmrnyX7kK3Hvb9qH1J2Mm4gCzNislCemhZ+wlYQgevrvyH1L1PvQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "chokidar": "^4.0.3", + "yaml": "^2.9.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-persona": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-persona/-/dsh-persona-0.1.0-rc.6.tgz", - "integrity": "sha512-rY5AVVopkS9vJl+hGHGQP0nSwzxawubRvEKo4JZmGK7bKZlvevRvj8bd2wLNhTx54jppz+u0iEUq/fqG5k9Mvg==", + "node_modules/@deepseek-ai/dsh-fs": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs/-/dsh-fs-0.1.0-rc.7.tgz", + "integrity": "sha512-l4jEcfjrV7hWTQo6sH0oXntg4pz1nVuDXRcprps6NhZ0/OOer/9SzUx7J9aLnLeX9XDtExXsFbxkXW5Js3ZFwg==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-plan-mode": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plan-mode/-/dsh-plan-mode-0.1.0-rc.6.tgz", - "integrity": "sha512-kabVmxbdjLSJkY3bM0s+VuDBuIhPNvKdW8CHXz/UmpQfm2KNfrS46+EEgDgRnz2xFxfAGLcV9KFm0iDEksE22A==", + "node_modules/@deepseek-ai/dsh-fs-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-local/-/dsh-fs-local-0.1.0-rc.7.tgz", + "integrity": "sha512-gbiH8xBrBw/1iRM3MLwI9zlFqLRg+1d+hNs8Etdn240xjWPuFdv5Hjg+eu4V5I+lU3M/lZieahEUpwYRScGuVw==", "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/schemastery": "^3.18.1", + "koffi": "^3.1.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.6" - }, - "peerDependenciesMeta": { - "@deepseek-ai/dsh-commands": { - "optional": true - } + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-pwsh-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-local/-/dsh-pwsh-local-0.1.0-rc.6.tgz", - "integrity": "sha512-TtITwtlDvxyXDE4HKJW9R6uWKU5kr72Y+8JHYV3Kj/HPAzQqwbVo/2e9wvq7H4t5Soo8K+KG5ZqBpMmpp+FAWg==", + "node_modules/@deepseek-ai/dsh-fs-observation-policy": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-observation-policy/-/dsh-fs-observation-policy-0.1.0-rc.7.tgz", + "integrity": "sha512-UbLBBWzUfBHAaZ6xGY/pPlIemGKz2iPoiCfmMkFQeLXVlLzeMrsTY4mvdx5ywu63tKYHvPpHHGdXMRFHqrTBvw==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-pwsh-sandbox": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-sandbox/-/dsh-pwsh-sandbox-0.1.0-rc.6.tgz", - "integrity": "sha512-UNVwsEyakQgjKYuWIIb1Xm03RHMtm0NdwYORgtBgVb2FV20KipBt1MhfHhBPT4FPPWIKjM94Vph9ZOhO5cCOeQ==", + "node_modules/@deepseek-ai/dsh-fs-sandbox": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-fs-sandbox/-/dsh-fs-sandbox-0.1.0-rc.7.tgz", + "integrity": "sha512-QMv2QbqVAKkFAmIIPFmW8cvjk8U9T4ZEVsoPdbanw5Enrg3qEYZUmii9WBkAxNtQhG5MRUf5Tg8jDkZqPScYrQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6" + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-repeat-tool-reminder": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-repeat-tool-reminder/-/dsh-repeat-tool-reminder-0.1.0-rc.6.tgz", - "integrity": "sha512-iN9FjWXL8e/IrxTFmybTKDqtB6obV5jt6ao2I3EQWOhQ0GVfXBuz1SY6Yx7gILQXWsCUeGRu1ltLyywdubpJcw==", + "node_modules/@deepseek-ai/dsh-goal": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal/-/dsh-goal-0.1.0-rc.7.tgz", + "integrity": "sha512-/pI2o0YcP21ReT+OQx7aA8SyUsnuEHxTQtMbu3DvN9ChvaFeptCTXGvHWocwVtzEEi48mdvAXF4Mx0Ptj1LJYA==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "^3.18.1", + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-sandbox": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.1.0-rc.6.tgz", - "integrity": "sha512-SLZjuivQQKHTx4H7xlsjraEGGMIEA8BYOwvlm/9uZBrBrlttMU+d8Ne6QYpDcOwIEubL8mvrWRg8j3rtY3lVyA==", + "node_modules/@deepseek-ai/dsh-goal-round-driver": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-goal-round-driver/-/dsh-goal-round-driver-0.1.0-rc.7.tgz", + "integrity": "sha512-PWIaza45vFqqrf8bYyw5tPgEXRqLliHqAn3uKEwui8b1hM6UHJtApq1jX83PO4gtJZs/yAnRK6LCbaS5VJBC9A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-sandbox-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-local/-/dsh-sandbox-local-0.1.0-rc.6.tgz", - "integrity": "sha512-W0CehRbWqAaHAYFw24wvYLlGxxJr2OlQQlFH/p1QbeNKtHzZ+6pgjksyFotgHdzOycNnVoBjb92RbQPfJhJZ9A==", + "node_modules/@deepseek-ai/dsh-headless": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-headless/-/dsh-headless-0.1.0-rc.7.tgz", + "integrity": "sha512-EKn/wrMKgqxPUPwLgoTGk3BY8vFcYSYBWfXxnc8ZOKiH2pmprKnzm89AcOkbERNBJzPySQEsDdSoWwWJ2Mut4w==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-sandbox-windows-acl": "^0.1.0-rc.6", - "@deepseek-ai/node-addon-landlock-run": "^0.1.1", - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.7", + "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1", + "commander": "^15.0.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/cordis-plugin-loader": "^1.0.2", + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-sandbox-policy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.1.0-rc.6.tgz", - "integrity": "sha512-XEB7+pJZVPWmZXv27EX/4V/1noVLUF5ZHyy3EY5tC4XtEyayWKtvHL4y9OTLIYhlU4Ualv5ag8s5ueGGq3ID8Q==", + "node_modules/@deepseek-ai/dsh-home-paths": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-home-paths/-/dsh-home-paths-0.1.0-rc.7.tgz", + "integrity": "sha512-9Bu0eAbPw/FfCNpiX9hvyP5wedMUUQBc2sVTtU+xtH27/iUPxXoamFtBt3ydBJUeuVhja/leuhJ/d3MRhXO9fQ==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-sandbox-windows-acl": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-windows-acl/-/dsh-sandbox-windows-acl-0.1.0-rc.6.tgz", - "integrity": "sha512-/L1TUOQMsJe8B2v1pJpTaLwkvMQIwrjlUg4+6yx2flU7AyycjFzlKwmzQQzo19/evkiqO88mLgod3FiLhqxEvA==", - "license": "MIT", - "dependencies": { - "koffi": "^3.1.0" + "node_modules/@deepseek-ai/dsh-host-apiproxy": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-apiproxy/-/dsh-host-apiproxy-0.1.0-rc.7.tgz", + "integrity": "sha512-oBCIJzzvVXijtxAPqSlQUlYTywEmkn3JEpMB2PM8W4UafnxNhqvDh8ikGE7/1y6KWoFUS4jHGwerUzyp3C6oWw==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-default-model": "^0.1.0-rc.7", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-native-command": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-query": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workspace": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1", + "fflate": "^0.8.2", + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-schedule": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-schedule/-/dsh-schedule-0.1.0-rc.6.tgz", - "integrity": "sha512-83p0mxkMUWwRZkazWICbD1SZO6hKwFVb9W3adDSR4wmojJQYTnawopnwTJn+Sij0V+gvvA4wTcL4rwDgbawDHA==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-scope": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.0-rc.6.tgz", - "integrity": "sha512-UlDLV4syLoJinNg9imhXrSAHrdaTa5Ff8gg46rzjFJGPUOhAk3DZff0hryT5OhrBi0A5Tj92qVpg2pRVvxnUzQ==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" - } + "node_modules/@deepseek-ai/dsh-host-apiproxy/node_modules/fflate": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", + "license": "MIT" }, - "node_modules/@deepseek-ai/dsh-session": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.1.0-rc.6.tgz", - "integrity": "sha512-8tu8I6VWC7050GAUXWhcEWQw4pakALQc8TlhKr52m7Y4+kIKeNt3FBgP86PaGPBtpK0p5zUPRQNkFpzZbBdxyw==", + "node_modules/@deepseek-ai/dsh-host-directory-picker": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker/-/dsh-host-directory-picker-0.1.0-rc.7.tgz", + "integrity": "sha512-CamVZ4wOjGcgzOiRFQtG0J0hy4EY3nXJBRFs0S397+H7b9eJUTtaMdOxP5w7VhMQ0Aq2ND7gpadwIcFaqINsMw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-checkpoint-policy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-checkpoint-policy/-/dsh-session-checkpoint-policy-0.1.0-rc.6.tgz", - "integrity": "sha512-wdWNyS/95wI3QB9SHeeeQ9HDIWeFQKInI54Wqlw35H+bGGjGZE92nx9QiqiiosoxHedQFBdA0TKgON4EIoxCgg==", + "node_modules/@deepseek-ai/dsh-host-directory-picker-auto": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-auto/-/dsh-host-directory-picker-auto-0.1.0-rc.7.tgz", + "integrity": "sha512-QFuI5xGvVQAtbgN5xEZddM9+s5/2GWem8Gvq5hQpi1faUPyY/GS34B3lpuui0khSyS2NTa5GUXtYhDN1qZTVjw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/cordis-plugin-loader": "^1.0.2", + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-persistence": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.0-rc.6.tgz", - "integrity": "sha512-AbNBe+IYCbZqSHqOACVdj8QTynm2HZ0cThrEuI6nGMtlWLYLx6lzZ1rgO/56Av9mIScjyTBGJAIKhEYaMTBG9g==", + "node_modules/@deepseek-ai/dsh-host-directory-picker-browse": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-browse/-/dsh-host-directory-picker-browse-0.1.0-rc.7.tgz", + "integrity": "sha512-yVHhAPK61gurrgys+xKia3RCr2OlwFCSb/XGzSDuzkVtAmqtG03oWTvnMiNpRKUyGCRFdgN0TP3QDg46rRlQ/g==", "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-persistence-jsonl": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence-jsonl/-/dsh-session-persistence-jsonl-0.1.0-rc.6.tgz", - "integrity": "sha512-US9Q4b5CZJPRRqa/M+WESL5VAOLjfYWjdzb3TQ/7zmpR4/+EQWCOFA9CtDSMh4t1oFOQBjz2+YJJcGu59MKHDA==", + "node_modules/@deepseek-ai/dsh-host-directory-picker-native": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-native/-/dsh-host-directory-picker-native-0.1.0-rc.7.tgz", + "integrity": "sha512-CMHnPXL0oqwCnwt4TVRBAUfM4GNwkcZ1yURLlUo11ISBYh11LbOCXri3LoDjXzdCaZ21CWEKl25sZHnHnQ2GWg==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", + "@deepseek-ai/dsh-host-directory-picker": "^0.1.0-rc.7", + "@deepseek-ai/dsh-native-command": "^0.1.0-rc.7", "koffi": "^3.1.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-projection": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.0-rc.6.tgz", - "integrity": "sha512-DYLALBPdEI1LZjJ4B6rdGdGY4gy+iR2+5Xh2xJoAGa/pTyN5Z55TNfvuMJrmeRBjAuDXNUQpmURbvos5rJ4veg==", + "node_modules/@deepseek-ai/dsh-host-frontend-static": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-frontend-static/-/dsh-host-frontend-static-0.1.0-rc.7.tgz", + "integrity": "sha512-qSKYgM2W5EV8mE5J3OEujTY4z7mRwPBCRK3hQrl8vm4IAuSf0vfv2qrS9rpgU2SUrpHlQCqsu44bp8OPX+XeUg==", "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-projection-cache": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection-cache/-/dsh-session-projection-cache-0.1.0-rc.6.tgz", - "integrity": "sha512-Fqyd5aN7MvIiRMWxs0Q4dWmSMKLqdWNk5U97EFdeWY3Ol5bk8SSFfFrij4941B5y4K2f7C0mE9nLSQ3mfL2KHg==", + "node_modules/@deepseek-ai/dsh-host-plugin-inventory": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-plugin-inventory/-/dsh-host-plugin-inventory-0.1.0-rc.7.tgz", + "integrity": "sha512-B8ITfMnBAdgkkuvoMrBdVgydhsCYGnP8XIGXIouOQyT9/eWbD3WqO76XG+u+e2G36ACXu2NaIxsRh3ijzyorwg==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.6" + "@deepseek-ai/cordis-plugin-loader": "^1.0.2", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-query": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query/-/dsh-session-query-0.1.0-rc.6.tgz", - "integrity": "sha512-bGzRrZnWuXDUtAmwkRxT74Nuc4PLQJmJ4IeGgSSTIGJ9JQCNbvVjr4ZWDWg+D/PvbZwh9mpYJspDZdUP42eWAA==", + "node_modules/@deepseek-ai/dsh-host-webserver": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-webserver/-/dsh-host-webserver-0.1.0-rc.7.tgz", + "integrity": "sha512-ip6HeN9YpWJXgWKAWsL3JUrI8j+MHEvbQ/m3U5ubP/Pc0AQ9x+6xZ/nYe+22112I12rihiwb85ykFwFfx0QbKQ==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.6" - }, - "peerDependenciesMeta": { - "@deepseek-ai/dsh-session-persistence": { - "optional": true - } + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-query-sqlite": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query-sqlite/-/dsh-session-query-sqlite-0.1.0-rc.6.tgz", - "integrity": "sha512-sbeOPAAJetQbvgyFB7zVANSlJPjNgEGxiixin/DI9TcXHcUqq3nrPgS+1iI+WJjD6/zhHdIticeEayuWXtORdA==", + "node_modules/@deepseek-ai/dsh-invariants": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-invariants/-/dsh-invariants-0.1.0-rc.7.tgz", + "integrity": "sha512-PnO1F4aZGUmqZPyuPJpBUfQ4DZmjCGCNGr0yuN2iURTP/e6h0kGnTNTYgR2NqMvAtpP66WNiHhvH2LMqumk1+A==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-query": "^0.1.0-rc.6" - }, - "peerDependenciesMeta": { - "@deepseek-ai/dsh-session-persistence": { - "optional": true - } + "@deepseek-ai/cordis": "^4.0.1" } }, - "node_modules/@deepseek-ai/dsh-session-reference": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-reference/-/dsh-session-reference-0.1.0-rc.6.tgz", - "integrity": "sha512-ubnfGbTBy/NnVnY8RXhTTXGO2Ga21Ze/1O9PBCzQk5wYfTqa2SUtx7t4MiJ1rVsDZMQ4YMpehqqGJFXf/z2dhQ==", + "node_modules/@deepseek-ai/dsh-jobs": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs/-/dsh-jobs-0.1.0-rc.7.tgz", + "integrity": "sha512-+omM89dEsaiAL1XtsSTMmRF46POp5g25Qs5KVj+Zfrk7whlXjLXwFiaukt/htdVdHIOM51qM+tCleqlHOU0Chw==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-query": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-stats": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-stats/-/dsh-session-stats-0.1.0-rc.6.tgz", - "integrity": "sha512-B2Rwp1klSl7DmRpViPnuIlmlPgsARdxqRpsz7MwoXTC1oKYipWgoCw8JFOsDxVj8Rno1o1kWVjVAM10I/FC1aw==", + "node_modules/@deepseek-ai/dsh-jobs-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-jobs-local/-/dsh-jobs-local-0.1.0-rc.7.tgz", + "integrity": "sha512-DAC8i+sshAkXPI8IcrUp5O6cOOkLLsKsD7mAcorFFbQjcPVBLdeRmtko3E1J9Jmf79IjoAvKVE+J+y84km9yKA==", "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-telemetry": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-telemetry/-/dsh-session-telemetry-0.1.0-rc.6.tgz", - "integrity": "sha512-x3t7lu+SLHvxhmOlocNyOwcj9t4MxUkzh7QyOh/YSMvWgojSOhNdnKcjWq4pE9PxFXBWMDpN3bLNvtk5jFA/+w==", + "node_modules/@deepseek-ai/dsh-launch-environment": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-launch-environment/-/dsh-launch-environment-0.1.0-rc.7.tgz", + "integrity": "sha512-ATVyi47hyAWFINOxi8TGurRF8rShW/WzqWKqjxEQU5gLZbWtAMgkpAc+hwlyo/lXytGaj5cMXyzeyjpD6URHFg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-telemetry-otel": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-telemetry-otel/-/dsh-session-telemetry-otel-0.1.0-rc.6.tgz", - "integrity": "sha512-e2tbkXm3wh33kkKNLfpM5q019DDG4Bpvlg1UyqZq3mffOP5O3e696mZA+sC0RhKB0xfLWMaAZq9n3WN2qtmWdw==", + "node_modules/@deepseek-ai/dsh-llm": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm/-/dsh-llm-0.1.0-rc.7.tgz", + "integrity": "sha512-VaB9kQ8XOA+R5jtsWf92QMc1WpaatEAFUvQePGUYrzQ7Z86b9VhQQzmchh5VmknT4oRSSdn0re5tReCvfcYNXQ==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "@opentelemetry/api": "^1.9.1", - "@opentelemetry/api-logs": "^0.220.0", - "@opentelemetry/exporter-logs-otlp-http": "^0.220.0", - "@opentelemetry/otlp-exporter-base": "^0.220.0", - "@opentelemetry/resources": "^2.9.0", - "@opentelemetry/sdk-logs": "^0.220.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.6", - "@deepseek-ai/dsh-command-feedback": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-telemetry": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-title": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title/-/dsh-session-title-0.1.0-rc.6.tgz", - "integrity": "sha512-RHV1ujuomvQB63HPI/n25c2/2It5XQ7zNQKozSqYOPQw7AIr16PT9iFqC7sCQ4l2gAY5GI3FbI1cQgHzjHNOag==", + "node_modules/@deepseek-ai/dsh-llm-deepseek": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-deepseek/-/dsh-llm-deepseek-0.1.0-rc.7.tgz", + "integrity": "sha512-cWNbBF+LeFrexht5V8cFeo4Kb0KeFaQWtemPJeTHRcijafq4OuQvgJEPx1IyelzzX6vctLQGSlmvvCNesLvIcw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "eventsource-parser": "^3.1.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6" + "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-title-first-prompt-llm": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title-first-prompt-llm/-/dsh-session-title-first-prompt-llm-0.1.0-rc.6.tgz", - "integrity": "sha512-eYta0tVmNnivANde4R2G9NW4V9w1fq9KYod7kZ4YeuVu3rjObCmlXKOOJiGwRis21PC5YVIhaPxszM+V35zizA==", + "node_modules/@deepseek-ai/dsh-llm-pi-ai": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-pi-ai/-/dsh-llm-pi-ai-0.1.0-rc.7.tgz", + "integrity": "sha512-8sZuvgylK9ZKQmZtUU4z3DVBcM4Q4SH4OWo4qeOahLOsteT9NdIwZFer6f0QwqH6DjXIqz2Gq+XtntYXznGZPw==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "^3.18.1", + "@earendil-works/pi-ai": "^0.82.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title-llm": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-session-title-llm": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title-llm/-/dsh-session-title-llm-0.1.0-rc.6.tgz", - "integrity": "sha512-BiqsXDSbyZbQ1XtLhKpILKdnDgZaQKWopZpSQW+Cy6i0wozMJ/xeO+oCWEFn0rQtsgBY6b+rKVKUW4wc7u9Ydg==", + "node_modules/@deepseek-ai/dsh-llm-retry": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-llm-retry/-/dsh-llm-retry-0.1.0-rc.7.tgz", + "integrity": "sha512-yyn5Yqth6vdScgmcYDF7L3a1jbfcu2y205HyTx9d84H+eU+h9m8k0Mc+1l8VCJbv9GILPCvoijP8wFTPDas7gQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-title": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-settings": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.0-rc.6.tgz", - "integrity": "sha512-5ZlH2FNRU0kkdcCoEJohvdb2fiNnxM+iZqN3icbR3WQbMm8RPRrXlZlps5YUaQKPRbNRHA2LkOXW998QRlhHcA==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1" - } - }, - "node_modules/@deepseek-ai/dsh-settings-file": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings-file/-/dsh-settings-file-0.1.0-rc.6.tgz", - "integrity": "sha512-OgwvP/dTlrWd8MRhjJbeolMJHDdyjLtvd+gS3z2mvCGDmNkkf0RxcB/8o2uoqe97iuklTWmy6cCws6dlmnDL+g==", + "node_modules/@deepseek-ai/dsh-mcp-client": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-mcp-client/-/dsh-mcp-client-0.1.0-rc.7.tgz", + "integrity": "sha512-hjdki2TTXfyZMJuddOVXV0lEhZjdku2aoPagVKV4TOhqz3jDJE0mQds87mtDOI9J4pyRGWfYXky6HN9Bi/usgg==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", - "chokidar": "^4.0.3", - "yaml": "^2.9.0" + "@modelcontextprotocol/sdk": "^1.12.0", + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-shell": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell/-/dsh-shell-0.1.0-rc.6.tgz", - "integrity": "sha512-l/pcwbdpM+Zgp2AzH0kH0z7bPU7L3k4uG1t5Du1V5ilk70tyMSxz2upNfAbjkDHZZZO18LTs33aq+zRWHX1CUg==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-shell-env": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell-env/-/dsh-shell-env-0.1.0-rc.6.tgz", - "integrity": "sha512-znxHFSqduw8U/AxKSO8SgSt703Bl+irRzTU0ukJT+ySlnyAwSAg8sZHLo5ZlEt5K8BdWhxz8Vc5jibOtJPB3ZQ==", + "node_modules/@deepseek-ai/dsh-message-feedback": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-message-feedback/-/dsh-message-feedback-0.1.0-rc.7.tgz", + "integrity": "sha512-P/Inw7dQMZCC6I6NC6G0UF9SeOVlpQxOBg2+LoCdvyTt40itDow2wmlThqkQDIt4UMHLT4yRc0Gd6a4gmTNJ2w==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "^3.18.1", + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-skill": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.0-rc.6.tgz", - "integrity": "sha512-VyRlCOASIRuTflKwn4NvbdAXxSPnnLJ+RAQUI4GK5pOtPwI2DhJrbovqpyp5kNAkZMsqvIeHWu5PcCEJ+FpQ2w==", + "node_modules/@deepseek-ai/dsh-native-command": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-native-command/-/dsh-native-command-0.1.0-rc.7.tgz", + "integrity": "sha512-c7NiAYPx5Ho2ZYOODRvt0yTZ9l00n7QvRh8paiyLaYBOuzo30KDo5wTJXGLxMkfzi6EQsWw1tljd8MnpGL2P4Q==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-skill-badge": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill-badge/-/dsh-skill-badge-0.1.0-rc.6.tgz", - "integrity": "sha512-k268iImXPFwA3barkSqusu9OlA8BcC0O8ZEvs5IY9bUJPCC0Tlw4VY8bumFt/2DSwh5cV4bBzZk96S8XA1Pd2A==", + "node_modules/@deepseek-ai/dsh-output-retention": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-output-retention/-/dsh-output-retention-0.1.0-rc.7.tgz", + "integrity": "sha512-bhmSfXIaLWLrYwC4ziMZ7GkNy5i9ltGBvlNZ5eB7NZoDAMh0Du7pKkMY+oqm2ajvx5O5qiFkHEhYoypRpEB56g==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-skill-filesystem": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill-filesystem/-/dsh-skill-filesystem-0.1.0-rc.6.tgz", - "integrity": "sha512-NCgz8lCAdvd0oSGIF0EKg1OXfIC7x9r0an7mgC19F0DGzYZJe5ve6AwEYpSvKITE3V8W4NbUzLKyyZG3VH5QtQ==", + "node_modules/@deepseek-ai/dsh-permission-presets": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-permission-presets/-/dsh-permission-presets-0.1.0-rc.7.tgz", + "integrity": "sha512-AC6cyrinc3fQ2/TKmm8V1r/32f3VekR/w6rS1+RWGefRm6PDGnNo4T96/U4EoMyWDq0VBCn1Oye+uqhWPtl/3g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", - "chokidar": "^5.0.0", - "yaml": "^2.4.2" + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6" + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-skill-filesystem/node_modules/chokidar": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", - "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", + "node_modules/@deepseek-ai/dsh-persona": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-persona/-/dsh-persona-0.1.0-rc.7.tgz", + "integrity": "sha512-1XhQNi3pIQ9TMUiquo+RRS4VpbXYhpFmZJ845kaVGToAexS2gJRVte8i/wKaDHDp/huAhJIsZemHlX0qADDsjw==", "license": "MIT", "dependencies": { - "readdirp": "^5.0.0" - }, - "engines": { - "node": ">= 20.19.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@deepseek-ai/dsh-skill-filesystem/node_modules/readdirp": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", - "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", - "license": "MIT", - "engines": { - "node": ">= 20.19.0" + "@deepseek-ai/schemastery": "^3.18.1" }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@deepseek-ai/dsh-spill": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill/-/dsh-spill-0.1.0-rc.6.tgz", - "integrity": "sha512-reV4utwd3E5LgiNrsaqh6i6zxHboVyrrL1ilALRukDbMxSyup1vuSRh+4CPxSUh9YcoToFJ6jz2Zmlsw755g1w==", - "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-spill-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill-local/-/dsh-spill-local-0.1.0-rc.6.tgz", - "integrity": "sha512-DskqKnE16ZFmlqEVniiZI/QjVpUfRVol4ZlAlc3PZ4ROmVqzi0eyXIVcxng5BDZSmjHbPO1PAh0I3TkAzFjMuQ==", + "node_modules/@deepseek-ai/dsh-plan-mode": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-plan-mode/-/dsh-plan-mode-0.1.0-rc.7.tgz", + "integrity": "sha512-VXUxBvmZ9PYinVbYsu7GmT8BZMXCfAbqExNMoR4RoZm+leOLzZOkWOKea9THoJwIik0lUbAO5lzrqaeVKa99Dw==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-spill": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.7" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-commands": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-spill-policy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill-policy/-/dsh-spill-policy-0.1.0-rc.6.tgz", - "integrity": "sha512-irdZNe/nZAeFKW/NyRZZS12sKLQhl3uLEPOCgYwh0jv8kin6fPdiW1cOqh/IOFuL+Bk0yF+646bRzamR9YUn8Q==", + "node_modules/@deepseek-ai/dsh-pwsh-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-local/-/dsh-pwsh-local-0.1.0-rc.7.tgz", + "integrity": "sha512-AImknM43+7bIR9BzEatmbZMvhjgBgAt7MWqJzmTo1KnBNTY1j7r/RmOiQTBX4R+tpsLXMza5oW7svHSAYw/ypw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-spill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-storage": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage/-/dsh-storage-0.1.0-rc.6.tgz", - "integrity": "sha512-zq15tNz5ywWuM15eqWADn7SKAPKyDYBto1WxZDIVJxHwQTBqu8gVaCdZo5IonH827qnabyiuJedgh9SkbSrTjg==", + "node_modules/@deepseek-ai/dsh-pwsh-sandbox": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-pwsh-sandbox/-/dsh-pwsh-sandbox-0.1.0-rc.7.tgz", + "integrity": "sha512-mXJcllRKoGnFhVs1mtUjjmqdfMymTRif5lrtxdhlkpegH6E9qKF7Wyq1Wnjkpsk6QW/iCicrRkXF2Bw623eDag==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-pwsh-local": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-storage-domain": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-domain/-/dsh-storage-domain-0.1.0-rc.6.tgz", - "integrity": "sha512-/5qDCIIf9JNpoRG5VrY/CXFIuch1tDE0H5XREHsKd6LE26TOHcTAUH6gyersFG4e3TPoOLJYDp1+SapFLd7+kQ==", + "node_modules/@deepseek-ai/dsh-repeat-tool-reminder": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-repeat-tool-reminder/-/dsh-repeat-tool-reminder-0.1.0-rc.7.tgz", + "integrity": "sha512-AdG/wyhpWSJcLkRqs3j2VVgS6uH5xQf0mK7WZsdQ/RidB3OVYZiBg9Mto7Of25AtV5lP7ZN6TrqCqWgi60XwFA==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-storage-json": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-json/-/dsh-storage-json-0.1.0-rc.6.tgz", - "integrity": "sha512-BtpDh+k7L5f/wdvUXTNdtTjBORwRxpQAZXgFW6VaVlfsPmsIZZ3L7lrPZWIow9Cbv+lCT8uiFj7A/CxRMb7Ppg==", + "node_modules/@deepseek-ai/dsh-sandbox": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox/-/dsh-sandbox-0.1.0-rc.7.tgz", + "integrity": "sha512-he43z39/SC8cMzPDsoP7EEXiXKjav3VClj/U943pxycvRL78JGkNEQQjv21n5mnuto0ti/gFBquybSI4sBAFqA==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-subagent": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent/-/dsh-subagent-0.1.0-rc.6.tgz", - "integrity": "sha512-vROmBDAlaFAzzSlTBOlvg/7fO55zxhUztnLtB3lKmN5RevrNQBjTsbeIMDQ8ow5ZplxEOnLU+sikFoA5JaoH8A==", + "node_modules/@deepseek-ai/dsh-sandbox-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-local/-/dsh-sandbox-local-0.1.0-rc.7.tgz", + "integrity": "sha512-jahNeS/WnBinCisOB4O+zeS366v7gWt6Uzfso0/C5He/vZFEITW5jPfWrJkZLuuN5S55LshaDEnegsddEIp6kw==", "license": "MIT", "dependencies": { - "zod": "^4.4.3" + "@deepseek-ai/dsh-sandbox-windows-acl": "^0.1.0-rc.7", + "@deepseek-ai/node-addon-landlock-run": "^0.1.1", + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" - }, - "peerDependenciesMeta": { - "@deepseek-ai/dsh-agent-presets": { - "optional": true - }, - "@deepseek-ai/dsh-jobs": { - "optional": true - }, - "@deepseek-ai/dsh-sandbox": { - "optional": true - }, - "@deepseek-ai/dsh-sandbox-policy": { - "optional": true - }, - "@deepseek-ai/dsh-session-persistence": { - "optional": true - }, - "@deepseek-ai/dsh-session-projection": { - "optional": true - }, - "@deepseek-ai/dsh-session-projection-cache": { - "optional": true - }, - "@deepseek-ai/dsh-user-approval": { - "optional": true - } + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-subagent-fork-in-process": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-fork-in-process/-/dsh-subagent-fork-in-process-0.1.0-rc.6.tgz", - "integrity": "sha512-S+BF0f2U0YkUf6vD6ZF82nREiWlrVe836U8FPV6PzgnVNGkEOb21rH2W9TSRjerB1G6KWjG/oBqrQIdKyFElVQ==", + "node_modules/@deepseek-ai/dsh-sandbox-policy": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-policy/-/dsh-sandbox-policy-0.1.0-rc.7.tgz", + "integrity": "sha512-TnOy1SnnSNPVZyw9UFNwQ7eE2lGxQBU6kye7+aAwDbNvSnudCJDEnQJhjTvGewHWA6PYA0O60XERKcCQAnK+dw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-subagent-in-process-driver": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-in-process-driver/-/dsh-subagent-in-process-driver-0.1.0-rc.6.tgz", - "integrity": "sha512-KK8Ep4PeSyrM3YQdcZhetXsiBd+bliKu6NWWKyTh60LobKtVNREfPBlqRfzc0mU0ZIKD4VEC7RfuJaqvz4UlPw==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh-subagent-spawn-in-process": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-spawn-in-process/-/dsh-subagent-spawn-in-process-0.1.0-rc.6.tgz", - "integrity": "sha512-62mtUEr5megxVy6CwQCdZVq5MCSt+kMw74ns5m7PK0PlZTWcxQVBQHNdfkE9sX4Cageu7YTvciUJuH8amm6bsQ==", + "node_modules/@deepseek-ai/dsh-sandbox-windows-acl": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-sandbox-windows-acl/-/dsh-sandbox-windows-acl-0.1.0-rc.7.tgz", + "integrity": "sha512-Br+Ocg+dr1PcCA71DxPJd7/7Cel+HLnRyglbkhSPx9mEYpXXgioVCkDHJh7J9OvjRw19UF56g2CvgVah6HwFww==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "koffi": "^3.1.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-subprocess": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.1.0-rc.6.tgz", - "integrity": "sha512-nZaZRjSnE1he+GAd14vURAH7n3Fw5eGx3nzMbkB96Y6Qx+oQB/7PTuXxKVxlCh8TSfMJTf851ahwWb1eALjKlw==", + "node_modules/@deepseek-ai/dsh-schedule": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-schedule/-/dsh-schedule-0.1.0-rc.7.tgz", + "integrity": "sha512-vlvjvhE2B07XG3X+jUsfEDUjsiEGln8GFdy+ojWm27FKtA8JuoMdrMMUcCuVHnyr23jyk2Ft/qGA3JIJUOvIKQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-subprocess-local": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess-local/-/dsh-subprocess-local-0.1.0-rc.6.tgz", - "integrity": "sha512-D2daTRaprE25ti1Ra69eURPwLULpnRyUHqAGtcMHddcjNIsZ4yR0DGinYOsgoRymzu3t02qLxyoio05atSViRw==", - "hasInstallScript": true, + "node_modules/@deepseek-ai/dsh-scope": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-scope/-/dsh-scope-0.1.0-rc.7.tgz", + "integrity": "sha512-8gn+sANXhpv+9egbNwq49/uI3XhbmB33obo9yMyzyzruan3zFoxeH4UV54jTC2hjbu8gFNPsyNam9AAtRV8/Cg==", "license": "MIT", - "dependencies": { - "node-pty": "^1.1.0" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-system-prompt": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.0-rc.6.tgz", - "integrity": "sha512-E7g+XChh4q4/wX++v56z1pV4SA1Rtz42xkznLPPi9FlXrrzJxwHMOUzBZ9Rz3Y1kLhQ++HJG3ZatmNx3rjFilg==", + "node_modules/@deepseek-ai/dsh-session": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session/-/dsh-session-0.1.0-rc.7.tgz", + "integrity": "sha512-02WVTkqIH+TyDL7dhMN3Hm+qcTEdhD0fVDC0aIAyND2fBdXj3CagEXXvpmt3mzwWfKwOTGL1RdxtC6pMA4Bl1A==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-terminal": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-terminal/-/dsh-terminal-0.1.0-rc.6.tgz", - "integrity": "sha512-riHLAQhXJJ2TT9XrDWGMgJf21RBqQgSZdEVvG4+xGEf9NZWcoszxdp+KW7rpwfrKuuD70p8RHCPGW4gCQPA+/A==", + "node_modules/@deepseek-ai/dsh-session-checkpoint-policy": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-checkpoint-policy/-/dsh-session-checkpoint-policy-0.1.0-rc.7.tgz", + "integrity": "sha512-Gw8GDvEJsH815NQuKkWhPPmw61hqhcdVpaaTXbCTAq/+0YdgNzNxAGIzizufAmq099QsqVWX0zs7IWGpWzCfEw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-terminal-bash": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-terminal-bash/-/dsh-terminal-bash-0.1.0-rc.6.tgz", - "integrity": "sha512-KRR/b/qqKO+sf6yc0xPC64LCZ+SQgTAnEMSO7gNXQ4BeAIzUbeKYfeVYiG6XZRbQ6al6o5sWIbZ0lUt3pHGdXw==", + "node_modules/@deepseek-ai/dsh-session-log-export": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-log-export/-/dsh-session-log-export-0.1.0-rc.7.tgz", + "integrity": "sha512-yToQnjzMGl5KCq//k9bN4OUXxpyRRjh3hBtnf/9AVVSvvV5DGDLHryEm7erECLOnoWZnng5J5SDERcykrVbYlA==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.6" + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.7", + "@deepseek-ai/dsh-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "react": "^18.2.0" } }, - "node_modules/@deepseek-ai/dsh-time-context": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-time-context/-/dsh-time-context-0.1.0-rc.6.tgz", - "integrity": "sha512-5tylnw0kS74xmhUAW1H1tHsMVjjVuEFyQvn4/ocSmyrR656ghwNuYJ6/CCu358QBMsTrRNfGRlUw/IAZ1ySiLg==", + "node_modules/@deepseek-ai/dsh-session-persistence": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence/-/dsh-session-persistence-0.1.0-rc.7.tgz", + "integrity": "sha512-NFH1uIGQDgMFOijgAv8lLWRiY3eHFEZW2alwuHlu4C32P4+jdChh9fjPlzBar3ZZTq0ZW0qWCdbYZS02DNxsvA==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-timeout": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.0-rc.6.tgz", - "integrity": "sha512-CUean0fAnfsJVszFEip7PsU/S26W+JfDFfsza2dCtlw8n6xlkbHA9Gjxdk2aTwqDGCgXEPkRW7mYkdJ0n6FR7w==", + "node_modules/@deepseek-ai/dsh-session-persistence-jsonl": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-persistence-jsonl/-/dsh-session-persistence-jsonl-0.1.0-rc.7.tgz", + "integrity": "sha512-amPgKP84E99YEiOroeoQNya3Rjm1VRWWU6y0ft02iVtFohTmWRMLESArkAAtFfap76bk34xEkvujp34nJl40Ow==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1", + "koffi": "^3.1.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tmux-context": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tmux-context/-/dsh-tmux-context-0.1.0-rc.6.tgz", - "integrity": "sha512-Wl7oOUO9XH7i6Bfu5L0+Nph2jzyF972eb949Hx/6akcKq+uNLFrq07L96LcAAQRezU8AQqtowzVs2LUbJ5dViA==", + "node_modules/@deepseek-ai/dsh-session-projection": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection/-/dsh-session-projection-0.1.0-rc.7.tgz", + "integrity": "sha512-BXehLYt6wYnV0PNNhv5GECePkH1w+1yuu/R63d2tdYdUQ7XVrd6tu5hMwfTH0P9AnBDxJir08FRu2WKO69JypA==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-token-meter": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-token-meter/-/dsh-token-meter-0.1.0-rc.6.tgz", - "integrity": "sha512-qU5FT4n1RJXP3Ss8NJ5TTvPo8rZ6cxcrCedp1t0sTAj93SGssAanq47voSmznPP52nwz/SLeunznAIT0jhbsZQ==", + "node_modules/@deepseek-ai/dsh-session-projection-cache": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-projection-cache/-/dsh-session-projection-cache-0.1.0-rc.7.tgz", + "integrity": "sha512-qWf7p2Xgr0LnY4o466ei3L/81QbGFQcCbEi+4XX9rxLKgnU+RvlQzwmIilrgz9N2hK/RqwS1Nb03bFRisxVeaw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", @@ -3466,1203 +3521,1158 @@ }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-ask-user": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-ask-user/-/dsh-tool-ask-user-0.1.0-rc.6.tgz", - "integrity": "sha512-AlDljdccjmygPkLcW2t7atz1iDtzMr2F55DAB+0nw26er74f4WQsQ6pqJg64glr/03oDVrxSlxtSOid4U3Cvqw==", + "node_modules/@deepseek-ai/dsh-session-query": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query/-/dsh-session-query-0.1.0-rc.7.tgz", + "integrity": "sha512-JKlEpByllYQU9JZLadrS3ClWCVZMcKRB4nc6iCWuNExyRi/Whwa5GicKFs+jXwGKe/rdSbTCom/jYLwkqipjuw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title": "^0.1.0-rc.7" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-session-persistence": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-tool-bash": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash/-/dsh-tool-bash-0.1.0-rc.6.tgz", - "integrity": "sha512-yzo/xPCObiFe+OU0e8E5nVOGpW6mp9vx/3q+MHQ0aqEbqrqHUfVMGPobfDAd/I1Ja/9Nag5NIvHpI2Hwx7lACg==", + "node_modules/@deepseek-ai/dsh-session-query-sqlite": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-query-sqlite/-/dsh-session-query-sqlite-0.1.0-rc.7.tgz", + "integrity": "sha512-XuhVkX2V+tx/xO9/gCzPHGbovoApwaojwCjNFAuBUbHLMvMl1wMdxvxSgk/xLPKnll98daXRPoq5Csg6hrG8MA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-query": "^0.1.0-rc.7" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-session-persistence": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-tool-bash-persistent": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash-persistent/-/dsh-tool-bash-persistent-0.1.0-rc.6.tgz", - "integrity": "sha512-bsM1RHwkpNRAy0zufIDNUWxeiuGngc+R35RZ20gbWM878rHOZVuicy4MG8NKhzqGLqMD4NuDoNfjtDUkZHC48A==", + "node_modules/@deepseek-ai/dsh-session-reference": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-reference/-/dsh-session-reference-0.1.0-rc.7.tgz", + "integrity": "sha512-lyD9VbGrOSVkAV8mr6aIl22bdWIe61lC9/dtZ6CtS3DLnewvSkZ4CNlUDG/qS1SUIZfk7A2UixgXYBIB2771xw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-terminal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-query": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-call-timeout-policy": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-call-timeout-policy/-/dsh-tool-call-timeout-policy-0.1.0-rc.6.tgz", - "integrity": "sha512-PBK6Lkj4AK4LJXBJW+67AfSE1bxMUbjAE8kYL4loKOetGpEpu2iU35jb7HirjsgG7Byz2mRxT/jvbWhW9/uxOA==", + "node_modules/@deepseek-ai/dsh-session-stats": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-stats/-/dsh-session-stats-0.1.0-rc.7.tgz", + "integrity": "sha512-ryf7HSYdmLbrTv4HQmeW/h0bHLiCNnSZYiY9RoBrzg2qh89MU8S+Q/a9CLVWA06TRXKt7tNbizF82dCj2/O0bQ==", "license": "MIT", + "dependencies": { + "zod": "^4.4.3" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-cordis": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-cordis/-/dsh-tool-cordis-0.1.0-rc.6.tgz", - "integrity": "sha512-MdsdiOzLaGps29FW2I6eO3vWUFttK80XGieD99rZM4p1pqwFQ8Ix22SIOhMeIqz70m1CvjoLxLak1vElte3lQw==", + "node_modules/@deepseek-ai/dsh-session-telemetry": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-telemetry/-/dsh-session-telemetry-0.1.0-rc.7.tgz", + "integrity": "sha512-6f5U7nt5Iqwh5RAFBqV2Ib7LJU2o89Et0r0eV7bskYws+PNM7ZRRW/Nw4a12ZcnuTp1eKPyVE8H6oJua6/7XLA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-fs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs/-/dsh-tool-fs-0.1.0-rc.6.tgz", - "integrity": "sha512-bJfo8cCacX3WBygG8GbIlGz3jQ15MyIv4htGCjKpIIRHrXHSAelNtzceO2xQ21/9BkXrvg+i50mqySOcKQ0b3w==", + "node_modules/@deepseek-ai/dsh-session-telemetry-otel": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-telemetry-otel/-/dsh-session-telemetry-otel-0.1.0-rc.7.tgz", + "integrity": "sha512-k5zHavA2RoBtZ5igD+qpbdfyxKvesZa2w+YKLfMtUnZOj7HZM9qcxvfYo4xJ9spNLpN5OGY/sWZBB5itilZlCw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", - "diff": "^9.0.0" + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/api-logs": "^0.220.0", + "@opentelemetry/exporter-logs-otlp-http": "^0.220.0", + "@opentelemetry/otlp-exporter-base": "^0.220.0", + "@opentelemetry/resources": "^2.9.0", + "@opentelemetry/sdk-logs": "^0.220.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-anonymous-user-id": "^0.1.0-rc.7", + "@deepseek-ai/dsh-command-feedback": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-telemetry": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-fs-search": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs-search/-/dsh-tool-fs-search-0.1.0-rc.6.tgz", - "integrity": "sha512-MUu9QF2Du8F6zdFP5rPEti9LKr/IyCYLM24XbaeuZZCrbq6Q1Rf9sng3v5bD9TlT+Wm+uXv3AqPX+8r8gcdqIQ==", + "node_modules/@deepseek-ai/dsh-session-title": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title/-/dsh-session-title-0.1.0-rc.7.tgz", + "integrity": "sha512-jhFiZa/C58zchuJkBodnkiPil7AEK8mHfB/hMOAW3N/7tUg5nbMLBERNqHdDMbIrvhTndrF4SN9qy+ltUf0cOQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1", - "@vscode/ripgrep": "^1.18.0" + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-spill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-goal": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-goal/-/dsh-tool-goal-0.1.0-rc.6.tgz", - "integrity": "sha512-5rYb1wWJa2HfCxi1JNMkPJwN0upoblJEVlnV+omTx4ZDGekg2dyfftaQdFH9cwiW576is8bAUgPE9Rd0sZCAzw==", + "node_modules/@deepseek-ai/dsh-session-title-first-prompt-llm": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title-first-prompt-llm/-/dsh-session-title-first-prompt-llm-0.1.0-rc.7.tgz", + "integrity": "sha512-tFocCpSglf69VC6a23R9OcomMBQdfQZm8MvAOGgENBzWz9htDLuyq6jukKzPdTtS3VdRDu4wzJtaWKAYBUCX4w==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title-llm": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-jobs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-jobs/-/dsh-tool-jobs-0.1.0-rc.6.tgz", - "integrity": "sha512-mcftmyHx2bq8u5Qwo7znysa3vOKO86ccJvgEZqfDV7S+UhOGbPDue7psyx1/jD/5fbK+653JbxQ8ds9wsLkiPw==", + "node_modules/@deepseek-ai/dsh-session-title-llm": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-title-llm/-/dsh-session-title-llm-0.1.0-rc.7.tgz", + "integrity": "sha512-mpQo/1x4jaWNdQAXckOs68U59u+/WHJlb/BX1zAvr02eJPV3Wac2/7NP+/vTw5TElEyzIAU8k0f3PMgvozUk0g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-title": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-pwsh": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-pwsh/-/dsh-tool-pwsh-0.1.0-rc.6.tgz", - "integrity": "sha512-x8ZlXUpOmcEiQobSTNSj18TPWVzyGe68pXJi6njea28DKVSe5Cx/L1bl9WImxru9f06+BkAm2ievJ+VKe89aeA==", + "node_modules/@deepseek-ai/dsh-settings": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings/-/dsh-settings-0.1.0-rc.7.tgz", + "integrity": "sha512-cS1+StK2xIVykrskw+KrO+hKJxYaVVgY2Jex2we5zASTNLHYCj74WQluPlaFjFgnXoZ1RYz8HNXL5/Ho6h1Ynw==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1" } }, - "node_modules/@deepseek-ai/dsh-tool-ralph": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-ralph/-/dsh-tool-ralph-0.1.0-rc.6.tgz", - "integrity": "sha512-/PTqAS4oeiC1kn2/V98quJNuzALW3SD8TIk8M0cWQwZUkwS7D421p9WO0PPaV+6BQYFkgONfXJ+vzb6DJ6x5dg==", + "node_modules/@deepseek-ai/dsh-settings-file": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-settings-file/-/dsh-settings-file-0.1.0-rc.7.tgz", + "integrity": "sha512-ODz9QWtCOjmwX7gxewPBfIHkA9twPiHDpcwgAW4sQUztgsJZKUtoe2T47loNH6QlHBPcSL5WMP4/QlnkRVKC0Q==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "^3.18.1", + "chokidar": "^4.0.3", + "yaml": "^2.9.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.6" + "@deepseek-ai/dsh-atomic-write": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-skill": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-skill/-/dsh-tool-skill-0.1.0-rc.6.tgz", - "integrity": "sha512-AebSfHSt6j0PXuN3yK9+X4aC6tHSnFdm2hZglII7aEHr/lL9UbynPb3NTumh6thXZ9Earvwhf9JdOxHMsjHqfw==", + "node_modules/@deepseek-ai/dsh-shell": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell/-/dsh-shell-0.1.0-rc.7.tgz", + "integrity": "sha512-in3ifbq80tn5cf1ICBBsRdwKjURB0g0dIRdCVUgl/GDqCdC/S0TjMLXw4nmFdCssYLm7JbG5a59BfJG0KFuz6Q==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-str-replace-editor": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-str-replace-editor/-/dsh-tool-str-replace-editor-0.1.0-rc.6.tgz", - "integrity": "sha512-Kv+zA9ZQCn85VLfox2WVvNI/iU6e3ml4gPLqXiKMC027/iwmGHTcRMKOlDNnwydFTJOucNs8wW4Ac3FafCn3gA==", + "node_modules/@deepseek-ai/dsh-shell-env": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-shell-env/-/dsh-shell-env-0.1.0-rc.7.tgz", + "integrity": "sha512-joSBNw/d54gq/VjkHLGSJ6y/Qr+594sObF4ApbJi2eEopx41L0Ky7kNW/W7cbrGIIN3KBGRDdiGv1s1paWzsMw==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-fs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-subagent": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent/-/dsh-tool-subagent-0.1.0-rc.6.tgz", - "integrity": "sha512-yK+ETLxDZhtwc19uqv5yAVzq3x/i2hjV9p67Or1a+s9Eqs+eu+ZJJk5hQ/2JeRiJet2otOC4zzOkYb/UVSBFyA==", + "node_modules/@deepseek-ai/dsh-skill": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill/-/dsh-skill-0.1.0-rc.7.tgz", + "integrity": "sha512-tDaqB1TOs27fSt6FZdjvPs4THXAFKoKOEgQG+iFUv63O5bm+glyLY3K1LTK8JeofB4lg3+4JIAeWRslnLJH57w==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-subagent-control": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent-control/-/dsh-tool-subagent-control-0.1.0-rc.6.tgz", - "integrity": "sha512-zoVt+uV8yyg1dAuIMydtz/AfARZPkjFOXQLd90a3Bj8GdxpE3tdaR6ZIv3xD39Grxe2vRz4gOZEJ9qth3O+s9g==", + "node_modules/@deepseek-ai/dsh-skill-badge": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill-badge/-/dsh-skill-badge-0.1.0-rc.7.tgz", + "integrity": "sha512-01Ue3mvLYyBwNj+fAuTUZN4gJLuDySPDqAZhCtWoYagZudCuLB8kAdpYWztKA4TRVSyml+EfGo1LrWvQeTD1wQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-subagent-report": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent-report/-/dsh-tool-subagent-report-0.1.0-rc.6.tgz", - "integrity": "sha512-DqnJ6yJ0wO35jdcpCSuogbx/PC4xE8wrcVxXPvSw9I59p/8nROsfwB9UXuJoilp/wenREUoTi0X8+5ZOVSRLqw==", + "node_modules/@deepseek-ai/dsh-skill-filesystem": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-skill-filesystem/-/dsh-skill-filesystem-0.1.0-rc.7.tgz", + "integrity": "sha512-i95xycP3vkz4IZnIO4BTzGNB6waKl1M5AsW2x04C0FIqLa4BSILvVUVwqcbwpBZm7Cd/KF50Q050au3NvauGrw==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" + "@deepseek-ai/schemastery": "^3.18.1", + "chokidar": "^5.0.0", + "yaml": "^2.4.2" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-home-paths": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tool-todo": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-todo/-/dsh-tool-todo-0.1.0-rc.6.tgz", - "integrity": "sha512-ll9xmgkrV6nsxjEZn5+YkNwQei7WrMMisnbr9mAKmqN5vpyOVHXisLvKdiASEmgpm4rsicnR8Y0wcBUfbeJTxA==", + "node_modules/@deepseek-ai/dsh-skill-filesystem/node_modules/chokidar": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz", + "integrity": "sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==", "license": "MIT", "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "zod": "^4.4.3" + "readdirp": "^5.0.0" }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6" + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@deepseek-ai/dsh-tool-web": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-web/-/dsh-tool-web-0.1.0-rc.6.tgz", - "integrity": "sha512-2iw+F65+1+I3gwi8N+LzC6GD6vnhDSHfo9D+Pm+4h2O2d+4YKjeaOukx65sV9HTvFumY1tWXnYhBbDCJYBJAig==", + "node_modules/@deepseek-ai/dsh-skill-filesystem/node_modules/readdirp": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-5.1.1.tgz", + "integrity": "sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1", - "@joplin/turndown-plugin-gfm": "^1.0.67", - "turndown": "^7.2.4" + "engines": { + "node": ">= 20.19.0" }, - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-web": "^0.1.0-rc.6" + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@deepseek-ai/dsh-tool-workflow": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-workflow/-/dsh-tool-workflow-0.1.0-rc.6.tgz", - "integrity": "sha512-w/D4RuFwxcx39Ryb//RFkSi1hp/QFVX/m6K7dFZ8HFdJVyu5otg5RJqvlDO55QNNLA8EndUOnc1GHl691MEDpg==", + "node_modules/@deepseek-ai/dsh-spill": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill/-/dsh-spill-0.1.0-rc.7.tgz", + "integrity": "sha512-EdX5AZElelHlCKlbflZipl4KRDiEHWLN/8smgnkzAhJgpXFq5dyp9jK58dO5v7cuODeq+/SfeDyUE5Mffdhh8Q==", "license": "MIT", - "dependencies": { - "@deepseek-ai/schemastery": "^3.18.1" - }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.6" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-tools": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.0-rc.6.tgz", - "integrity": "sha512-Tu08EPK3JyK0iNjH4FGzu/1uADynNSS6SmwOLdfytUN0YNqwNuKFSt2OJUg19famNlTgy992DcHfDu0T+gLXFg==", + "node_modules/@deepseek-ai/dsh-spill-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill-local/-/dsh-spill-local-0.1.0-rc.7.tgz", + "integrity": "sha512-jx198A2cc1gxsoKb2pRmXnDbIwIHAKg78ZjRMyiLRGpOFEZugVudILdDMp8u+lGpavP9xVAxBc1n75Z5NDRw7g==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6", - "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-spill": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-typert-loader": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-loader/-/dsh-typert-loader-0.1.0-rc.6.tgz", - "integrity": "sha512-PIC2iV1Sr+GtY9PpIGdW+pzoMDXSlxDx7QIfTbaeOVF5TRCxbe0gL6hsDEUIhkVOdfSpE731yxt0d8YpdNByzg==", + "node_modules/@deepseek-ai/dsh-spill-policy": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-spill-policy/-/dsh-spill-policy-0.1.0-rc.7.tgz", + "integrity": "sha512-fYypZXcXFkXybf8N0tz70+XCtxvnn9mDN8JiKnTp2ZNhXb/zvFbdf661Pp45lFWS6j0cHZsdZ5T8DfuQjfO94Q==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-spill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-typert-protocol": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.0-rc.6.tgz", - "integrity": "sha512-weWzN8r01YCkoDCAM7BsKw2YhRrD4zL8N2SAZu9hovYtXSq8xHXsP4Zh8RLYIlYcuotjyff/6hic+0TJPd14YA==", + "node_modules/@deepseek-ai/dsh-storage": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage/-/dsh-storage-0.1.0-rc.7.tgz", + "integrity": "sha512-M+6+SOjWWcfYoGASBMx+b1sHmWPFAHXF57rE/Mew9k5tHC5bEV8+owWwYOWQfv41eO1FfRMibZd0rH6mwPNApg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-typert-registry": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-registry/-/dsh-typert-registry-0.1.0-rc.6.tgz", - "integrity": "sha512-ry2AApGn0vEEIRWDC7TlLiLj5K8+2OblxXlGHs1u9APVxhPjZLok6Kfo57yfeJyW+EONGXv1DQcU05U+aYE7Tg==", + "node_modules/@deepseek-ai/dsh-storage-domain": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-domain/-/dsh-storage-domain-0.1.0-rc.7.tgz", + "integrity": "sha512-UxXwoCB0q4+/F+zddvi8I4LknTIlGD/1ec57Ym52kWRb7a8qGgrcIYrOC3yPCozn8rkirAuhEAkyAhR6AO5QDw==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6", + "@deepseek-ai/schemastery": "^3.18.1", "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-user-approval": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.0-rc.6.tgz", - "integrity": "sha512-9rnkSDGOpu2XUeGwbPeTzVUTFWTND1PMPM5L/ZQPptV5yyZlQiNxM2rCC6OdL+ZVerwxEqrRhZIQn/KVtQfKag==", + "node_modules/@deepseek-ai/dsh-storage-json": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-storage-json/-/dsh-storage-json-0.1.0-rc.7.tgz", + "integrity": "sha512-xYvEY3+ttxJg4/UPzXuxgeKcLxKvDP4alvPpEfRwuMBcp//O6FtzEJSqV8zycJVYHU8V0wmUKRIn4V1ycXlFgA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-user-questions": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-questions/-/dsh-user-questions-0.1.0-rc.6.tgz", - "integrity": "sha512-5vG4Ug+hVQuwU4KN7CFpF9qObBEYY/mPe1FHhToYO8Y2ICdHt3eX0Or9oEJFW68bZAMfuiAshZL8oUubr7obRg==", + "node_modules/@deepseek-ai/dsh-subagent": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent/-/dsh-subagent-0.1.0-rc.7.tgz", + "integrity": "sha512-PEpA9XT6E4hg7N8m7GYQyDLwFUwoqWTz0Cm9SrdAoNcju4byG08qy4+muDZbG0a1tm3PR4rxNB5zKcobDhDocg==", "license": "MIT", + "dependencies": { + "zod": "^4.4.3" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7" + }, + "peerDependenciesMeta": { + "@deepseek-ai/dsh-agent-presets": { + "optional": true + }, + "@deepseek-ai/dsh-jobs": { + "optional": true + }, + "@deepseek-ai/dsh-sandbox": { + "optional": true + }, + "@deepseek-ai/dsh-sandbox-policy": { + "optional": true + }, + "@deepseek-ai/dsh-session-persistence": { + "optional": true + }, + "@deepseek-ai/dsh-session-projection": { + "optional": true + }, + "@deepseek-ai/dsh-session-projection-cache": { + "optional": true + }, + "@deepseek-ai/dsh-user-approval": { + "optional": true + } } }, - "node_modules/@deepseek-ai/dsh-web": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web/-/dsh-web-0.1.0-rc.6.tgz", - "integrity": "sha512-ABFbyDgo+DGaCtdRnjYG7Rz2K4dFlPA+xCEIt5MDobK/9CRQNpdZ4YrhHiq0nxwl1oxEM1Zw48ylFt+PwtS9ug==", + "node_modules/@deepseek-ai/dsh-subagent-fork-in-process": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-fork-in-process/-/dsh-subagent-fork-in-process-0.1.0-rc.7.tgz", + "integrity": "sha512-PnT/poBisBmA9U+mLZeyQJfHS4Ps8kwN1ioZEmv36TwnROCrmwzog5FB33r9rXU/gKVX0dD/LkjxxTGmzC1xCA==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-app/-/dsh-web-app-0.1.0-rc.6.tgz", - "integrity": "sha512-GKvfD1oHbdNN4Mbb77nCydfv2ZRxGVnKcKIGUfXGvs5cNC3cfPYPP/Ok9b/Kbk9zFYMuz+lLikka+HK3zyUcAQ==", - "license": "MIT", - "dependencies": { - "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.6", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-app-boot": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-hmr": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-deliverables": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-jobs": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-model-selection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-permission-presets": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-plan": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings-general": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings-models": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-skill": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-trajectory": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-user-questions": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-workflow-run": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.6", - "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-auto": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-frontend-static": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-log-export": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage-json": "^0.1.0-rc.6", - "@deepseek-ai/dsh-web-frontend": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workspace": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1", - "commander": "^15.0.0" - }, + "node_modules/@deepseek-ai/dsh-subagent-in-process-driver": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-in-process-driver/-/dsh-subagent-in-process-driver-0.1.0-rc.7.tgz", + "integrity": "sha512-YleMt6xtXmW8LkHZ95MLPq1urIt1+sBUK908GCQ2EhV6nyfUwNog4XVDlVbzf3GXzc+3z/xiMW2GvVp3IQ5NIA==", + "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-locale": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-locale/-/dsh-client-locale-0.1.0-rc.6.tgz", - "integrity": "sha512-IoSLGxfHgcoaNzIlQ7YRTHRTy/MQCvvusrPCwlT30Xc9lpQe6Yo/LiRLDXlm9zbhN6imf/AoQZIfO+T3VGqneg==", + "node_modules/@deepseek-ai/dsh-subagent-spawn-in-process": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subagent-spawn-in-process/-/dsh-subagent-spawn-in-process-0.1.0-rc.7.tgz", + "integrity": "sha512-4C06MeBvsbgiUrWh+tge91wRLSOOJDU/Ub7b9Q6nTxQKEMJooJwCQRPfgaWtdXuNHrJGIJ87GKsgqV2iwfQ/jA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent-in-process-driver": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-agent-preset": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-agent-preset/-/dsh-client-ui-agent-preset-0.1.0-rc.6.tgz", - "integrity": "sha512-kJeQdVrUZ0skjyWIAwf+YKZE4VgUXT/7HGQvRVWSWRRlQ0X3dlWUgJnDDzcWBt+cn0cfR5/CANPrPiYEveBxdw==", + "node_modules/@deepseek-ai/dsh-subprocess": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess/-/dsh-subprocess-0.1.0-rc.7.tgz", + "integrity": "sha512-xiHD61S2trIZ0CzhSMgXxZJVyJ2c76DkX4eqP3Of4mBEnm6C7g7FChII6uL0z5v1bnOnTmpHzwPX8YCwqb7dbg==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-commands": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-commands/-/dsh-client-ui-commands-0.1.0-rc.6.tgz", - "integrity": "sha512-he9tgQtm/yy4qJRzob37rTqfb+FTY1YWzvHjDwfAWzsHH0R8vO2r0L/WHX8ZFpdGzzcPAIGuwEjkDa5Q05PI0A==", + "node_modules/@deepseek-ai/dsh-subprocess-local": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-subprocess-local/-/dsh-subprocess-local-0.1.0-rc.7.tgz", + "integrity": "sha512-Q1zl35fRNSASv2FOi6viwR29cn3vtOcyKfamcmRB789m6sb6CdlhIMettvcxxDDHwTSH/jjz3hqb0JAx2GT32g==", + "hasInstallScript": true, "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "node-pty": "1.2.0-beta.15" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-conversation": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-conversation/-/dsh-client-ui-conversation-0.1.0-rc.6.tgz", - "integrity": "sha512-pKDKZYTRvO9pBTyHvVOtPDuTzNfCHwy7GmeIaRLjyCORLPM3uv0BuMc1qIHVI6LcK54l+cRGIuSSGah3bO/0vw==", + "node_modules/@deepseek-ai/dsh-system-prompt": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-system-prompt/-/dsh-system-prompt-0.1.0-rc.7.tgz", + "integrity": "sha512-Rair2ZkzgoIIr+UstYVYeqeUgORNPIW1LNcsXz3Zjglx4FGjsmzs0UALdNYvSBpBvCLNmt4E6+XQIrBbS/s9jw==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1", - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-attachment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm-retry": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-cordis": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-cordis/-/dsh-client-ui-cordis-0.1.0-rc.6.tgz", - "integrity": "sha512-gYCef2obc7UMKOjneFvU8pTK2FehGNI9rqvZW9i1CUZ5pSJjAzJ14C4noIMPQxCrhj37QehrxyAC6Z+XzKYEYg==", + "node_modules/@deepseek-ai/dsh-terminal": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-terminal/-/dsh-terminal-0.1.0-rc.7.tgz", + "integrity": "sha512-B22qppmKWvw5Ez9eMKnppHiaMrikIcHmfmvyd296EspnhTBJAvXDnc9NggT0DUnSvm+2gh5ffohhMJel9A2pSA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-deliverables": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-deliverables/-/dsh-client-ui-deliverables-0.1.0-rc.6.tgz", - "integrity": "sha512-zs5pa0ug9gFf2+X3UHTLCOcspKAzWnroNyh8BG1gZtcDIZtpabjyG/+Yfpm98Pxl0j0VBnpU0MUOqI5LGrHsHw==", + "node_modules/@deepseek-ai/dsh-terminal-bash": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-terminal-bash/-/dsh-terminal-bash-0.1.0-rc.7.tgz", + "integrity": "sha512-2muS7xmy4olNEpGANp0ViK3/r4A4UlfQa5w24HJ2PrCy0J3qlk1vwHrpj30nAGK6sCaxbXmb8IjYUfNs7st7zw==", "license": "MIT", "dependencies": { - "react": "^18.2.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7", + "@deepseek-ai/dsh-terminal": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-directory-picker-native": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-directory-picker-native/-/dsh-client-ui-directory-picker-native-0.1.0-rc.6.tgz", - "integrity": "sha512-R2tdM0cLwMo9lJSl/tTmPi+jlilvVeVzBn3vZWeRDyvNzj3fwgw9nSy1/7FcwlOuopr9vCAyf3rRDZrnySYixw==", + "node_modules/@deepseek-ai/dsh-time-context": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-time-context/-/dsh-time-context-0.1.0-rc.7.tgz", + "integrity": "sha512-rZhEYA/urMq8sReaMc5rb9A/p7X1MXwktoF5Y6SwGUWqJQsdvHzXppksOEqJpg4a1pNDBe2N9X5o+wMKPmukMQ==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-goal": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-goal/-/dsh-client-ui-goal-0.1.0-rc.6.tgz", - "integrity": "sha512-Ixbqu74dbqjkwtVdvCAZWvUfjOsc4N5wAQvNKXR1eB5O+d6j0K3jeGb2rGeo1vCoZGCZVuawy5PWTKuIr2ZiRg==", + "node_modules/@deepseek-ai/dsh-timeout": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-timeout/-/dsh-timeout-0.1.0-rc.7.tgz", + "integrity": "sha512-Ufl9G7zP7Tky/zkXscavEiolEfAwutfbPeLb5sUU/tPQlDykhh1NwGrarNJ11fdR723zmA/3co4LgxtDtWCOEQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-goal": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-input-trigger": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-input-trigger/-/dsh-client-ui-input-trigger-0.1.0-rc.6.tgz", - "integrity": "sha512-lp6psRmPzkvz5JiVhV2tIovzVq7oo0LKbQcL77Rlcw1ZmHoZMCzQYResbMa+un9ycM8io/am2VKbTOaqrWjgOA==", + "node_modules/@deepseek-ai/dsh-tmux-context": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tmux-context/-/dsh-tmux-context-0.1.0-rc.7.tgz", + "integrity": "sha512-DYoWGpJglqzWxCFDzynJ7ebt9m7Redlm2Iuon5U2tJ0rsyOSRIgKuwQMXI67FdN/MNVXvSQ2xybUqu+5V0krnA==", "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-jobs": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-jobs/-/dsh-client-ui-jobs-0.1.0-rc.6.tgz", - "integrity": "sha512-pNJfFOyTyTG7XRysArUacNNw57J1bSoATozsffu5MA5gEnBDz4ZAE8uvlJjnbwD75xYBsfNoDABOWySY/rH/QA==", + "node_modules/@deepseek-ai/dsh-token-meter": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-token-meter/-/dsh-token-meter-0.1.0-rc.7.tgz", + "integrity": "sha512-i2WOx26otsAt3sTFOoXjo2xsdvUyC5CAuNiJyRQoo6yn1smx+NX541clIOYdx1uneZFmV0T6bK46JpdXasxaAA==", "license": "MIT", "dependencies": { - "react": "^18.2.0" + "@deepseek-ai/schemastery": "^3.18.1", + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-compaction": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-layout": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-layout/-/dsh-client-ui-layout-0.1.0-rc.6.tgz", - "integrity": "sha512-JpQ5rzySpK7molQBfMqrcBCGDWYQngqZmFuFqhcxecIc2n5mBYVP0F5UbGITgxo+D7sDOy78RA1PWqZ/5b/g0g==", + "node_modules/@deepseek-ai/dsh-tool-ask-user": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-ask-user/-/dsh-tool-ask-user-0.1.0-rc.7.tgz", + "integrity": "sha512-ZqwrTw+w4GepNCVQ7NIq71s+Hlrqu3jAfYCdKuNbkUy461EjlRLGMcHspSHAt1uhdwL9QDTodB6RRhpg65Hozw==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-questions": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-message-feedback": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-message-feedback/-/dsh-client-ui-message-feedback-0.1.0-rc.6.tgz", - "integrity": "sha512-CQqh/Uix3z5crbTb8lowJVltLRP39NfoRNoJ6J7gu9FaaX6qA8Cf5x4W3+hMnN2e7el6v3pVSpm+MicGypkeZg==", + "node_modules/@deepseek-ai/dsh-tool-bash": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash/-/dsh-tool-bash-0.1.0-rc.7.tgz", + "integrity": "sha512-nfc0SI3Xk36rgIOLmTBDSrSTN3Ufp9Wvefta/M82kbBCo6fesB4lst+VAw74039jzHUboXc2gwQ/j5rRcOpiuw==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.6", - "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-model-selection": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-model-selection/-/dsh-client-ui-model-selection-0.1.0-rc.6.tgz", - "integrity": "sha512-adjndhpBq++KGOmA8aK12xTBYvTu1UnY8BCW6smOQa93VVPuMWqstDw7MFZ6mrFQoF3tHwNxoSo+tYWS20o+mg==", + "node_modules/@deepseek-ai/dsh-tool-bash-persistent": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-bash-persistent/-/dsh-tool-bash-persistent-0.1.0-rc.7.tgz", + "integrity": "sha512-5tMC1TuWiGDerYd0UuUUzRdmv+uy/22lXbxmmrmUfR8aACeK6T76yXorvuvJSDYjhPpLoUovz9XU5LqGm3D2Wg==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "clsx": "^2.1.1", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-terminal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-permission-presets": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-permission-presets/-/dsh-client-ui-permission-presets-0.1.0-rc.6.tgz", - "integrity": "sha512-6Im98frB6nfM82HWOtAxGmN1lJHZnkwTJNcK9oX6piA+vyQ3LPXAmXq9dmTh/qMeIVgFkE+IljjuQ6hP0Wu8hQ==", + "node_modules/@deepseek-ai/dsh-tool-call-timeout-policy": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-call-timeout-policy/-/dsh-tool-call-timeout-policy-0.1.0-rc.7.tgz", + "integrity": "sha512-GKmrKxwfIhk51dEEzWjvPKTZ2SK/RNxKXROAaSsZ/HGcerv2kmBHRCEPlaphKBoWhFuw7KAhDnzI6foXLg4BWQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-permission-presets": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-plan": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-plan/-/dsh-client-ui-plan-0.1.0-rc.6.tgz", - "integrity": "sha512-9M3IOty+8exURc2h/favb3g5YRb8bkE1X1chyQjAaBqCDN8F3wtBSgc+jrYXW/mOabiM1vygliejvI7bDEjHhg==", + "node_modules/@deepseek-ai/dsh-tool-cordis": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-cordis/-/dsh-tool-cordis-0.1.0-rc.7.tgz", + "integrity": "sha512-tzZ1A+HhfqkMyOWwPgkWezY34rrK/OHD6BBX9DZ4km5/545JZ37+jmViza4TwrUhVxbs+Szhrx6g6V3Hm+674A==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-plan-mode": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-settings": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings/-/dsh-client-ui-settings-0.1.0-rc.6.tgz", - "integrity": "sha512-g+6w62SWnwMWkn6VuLK6MHcSKbXQZD7oTYLG5wjhDRDULOEBCgikXD3LJo/esOsVncXABDiih8KuDW3Fg8TfSQ==", + "node_modules/@deepseek-ai/dsh-tool-fs": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs/-/dsh-tool-fs-0.1.0-rc.7.tgz", + "integrity": "sha512-/Uf2z6OZckk0Nz7XjVbzf/yUnvDeY58CkUjAqy2FxgGuNc0rvIR6VzRER5NZ+30bXeB8TPnjMuCVB+j/8zltrw==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1", + "diff": "^9.0.0" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-attachment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-settings-general": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-general/-/dsh-client-ui-settings-general-0.1.0-rc.6.tgz", - "integrity": "sha512-AmN1VkT4YJq0Tg7odtLteFGLvGZCklbmL/uCCc3YHw6bQ/n+ZE+92tPMDxjMfHVPPcwqQS5T57ReLdAzJ3WyHA==", + "node_modules/@deepseek-ai/dsh-tool-fs-search": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-fs-search/-/dsh-tool-fs-search-0.1.0-rc.7.tgz", + "integrity": "sha512-0Lo6bbpPcSMKZlWkBGx2KjwyLy5zYJKMH8fmwz8orwOKHjbfYQT51GV9cpdhLq6NYTwKeMUaxTZC4xPlZ03SAg==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", "@deepseek-ai/schemastery": "^3.18.1", - "clsx": "^2.0.0" + "@vscode/ripgrep": "^1.18.0" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-spill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-tool-goal": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-goal/-/dsh-tool-goal-0.1.0-rc.7.tgz", + "integrity": "sha512-bQTVYD7nAtddefQZvvoKsoRHehA/hAHIPbNRdY+L97HVwKnowg5rlcUn/v+MJFQ1NPaTrTAfVQiHXGKEeeI9tA==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-settings-models": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-models/-/dsh-client-ui-settings-models-0.1.0-rc.6.tgz", - "integrity": "sha512-cgY7Em1QNwVK+ou2hI6i/vQj8MZK44US/u84wA6zuqvtDTP45jgNfYZBy1BCWnnUh6HslXVLj/1WzawEZn3YLw==", + "node_modules/@deepseek-ai/dsh-tool-jobs": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-jobs/-/dsh-tool-jobs-0.1.0-rc.7.tgz", + "integrity": "sha512-n/YcmHVTBrN3soZqzMElsnzIQoClOS3U1n5oqpg+oPyesMehpp7DFjdqh7kCZGEmI8chtq4AhYsPUWTPo85G7g==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-schema-form": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-output-retention": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/-/dsh-client-ui-settings-plugin-inventory-0.1.0-rc.6.tgz", - "integrity": "sha512-XRozBoG63/lH2gG8rnISASD3PwPGM429OQVXpJtryR/aPqsLoUzwAefmVETbuWlt25R82dbmGiX/y45dAdG30g==", + "node_modules/@deepseek-ai/dsh-tool-pwsh": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-pwsh/-/dsh-tool-pwsh-0.1.0-rc.7.tgz", + "integrity": "sha512-J24DC4otd3gAVvJ2jPpCfxrrujB/5isEqScp53O2vSvFP7rKn/Rwo8ddr1v462JVWyUG5HtyKpR23cPmQrP0+w==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-settings-plugins": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-settings-plugins/-/dsh-client-ui-settings-plugins-0.1.0-rc.6.tgz", - "integrity": "sha512-KdBqYbXmkt5WMdEC9Hi0jcCd4T19YqE4VgdZSFBsvNHR4RVMAS4G7EgZey2NdAl911Imc/kKsANxWLZ/ETquwQ==", + "node_modules/@deepseek-ai/dsh-tool-ralph": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-ralph/-/dsh-tool-ralph-0.1.0-rc.7.tgz", + "integrity": "sha512-1ZCj5w7GRcbs0zuDiDpZLJKc1zs/WSn1WX9VWTuXvWocV66Rq8GGMZLGDksBeltd+jv/dym7xro4+xFl87059Q==", "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workflow": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-sidebar": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-sidebar/-/dsh-client-ui-sidebar-0.1.0-rc.6.tgz", - "integrity": "sha512-q31eeswx19M8tKeMFsDTluWWi9fqZ/m4l8xT5m6eTB50pFFkaPHcl10uHzhCOOxKPMUX3HM4TjyoOclZXruT0Q==", + "node_modules/@deepseek-ai/dsh-tool-skill": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-skill/-/dsh-tool-skill-0.1.0-rc.7.tgz", + "integrity": "sha512-AnXLgiDXq8qB196qq4LnJ6rC5ukoPA4WZH+ILSFpLm59owkfwJLS9rGsfP+PGqiTN7NhoZtAwGmZoYCdSDi0kA==", "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-skill": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-skill/-/dsh-client-ui-skill-0.1.0-rc.6.tgz", - "integrity": "sha512-ucxbx/It3eZodYUfW6tcygYtvERm0xojcpb5OjQ1YwkNh8ldplnDioONTdDVqVTDczIz8vM66QvASr8K3kFMSg==", + "node_modules/@deepseek-ai/dsh-tool-str-replace-editor": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-str-replace-editor/-/dsh-tool-str-replace-editor-0.1.0-rc.7.tgz", + "integrity": "sha512-p4GmCg5wC9uw9BaVK9W0hOnEnjGvhhRF234ClVnQMbHwzfgPbhc0eSYUNJQmouqxLAa4kVuiF0nVZvc3aftCeQ==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-fs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "^0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox-policy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-subagent": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-subagent/-/dsh-client-ui-subagent-0.1.0-rc.6.tgz", - "integrity": "sha512-8yZkEhPCoOhtDfz1k6lzjF89QS+9zL188dQytCIXUewlhReva6UdoNvIX0OW1a6evDlZ/Vpn2P+mLb4sRG7n7w==", + "node_modules/@deepseek-ai/dsh-tool-subagent": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent/-/dsh-tool-subagent-0.1.0-rc.7.tgz", + "integrity": "sha512-QWs7SeItxpaJ3zY5Vh0scAv84QI+ZRyg9+dws15H88T+dp9dRr4gmR+fqEUdwd9JhPJF5VIORtKY/MqVtaiYQA==", "license": "MIT", "dependencies": { - "react": "^18.2.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-token-meter": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-tool-subagent-control": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent-control/-/dsh-tool-subagent-control-0.1.0-rc.7.tgz", + "integrity": "sha512-VPWUrhTc+X9DcrM/WC+ikM7vCjW54KzRU9wfdhFbXD6hea3hBQ4AlhEdtFtRwmgv3HmjYIUgHkPA3h7pqTsB1Q==", + "license": "MIT", + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-theme": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-theme/-/dsh-client-ui-theme-0.1.0-rc.6.tgz", - "integrity": "sha512-Wu+bvnuti/gLA+t5a2cWUMQJ5UCqxt6oEK+OJiJ68gN0ixs2skpaN0nFdFoY2exC5KByXrNlN1rRrD+FsZSBLA==", + "node_modules/@deepseek-ai/dsh-tool-subagent-report": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-subagent-report/-/dsh-tool-subagent-report-0.1.0-rc.7.tgz", + "integrity": "sha512-bdDcRsiB9t4EILfA4gO+FWwXrj6SA12SP0nqymz5yOI5AJWR6pzuIOwRk7IdguHBzq8pDyfelw0YxN+EtkS+tA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/schemastery": "^3.18.1", - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-tool": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-tool/-/dsh-client-ui-tool-0.1.0-rc.6.tgz", - "integrity": "sha512-pjNksBDDwWdRTb+YiZ1DSXWPipfw7C89B4bydopjwBtacOmx+rZH8Z9i8iFpmMwD5IFVd9ZJzwRR44sYkiun5g==", + "node_modules/@deepseek-ai/dsh-tool-todo": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-todo/-/dsh-tool-todo-0.1.0-rc.7.tgz", + "integrity": "sha512-Jm00eSYvNq8Qj5GmXdsC7EY3Q6TLSzBTiODNAu2bs5HxEqE5ssQ/fdcxuAXAfSFmh2Vq0ENLZckDg3q5Xvj6Qg==", "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1", + "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-trajectory": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-trajectory/-/dsh-client-ui-trajectory-0.1.0-rc.6.tgz", - "integrity": "sha512-pTAXYZHfbiRieYzfpH+BmLC2RXA2SDqT4oxGmW5sr2frBOXCZMsDEXJ/r770tmgQW9hzQaK58Nua74ru/bQg2Q==", + "node_modules/@deepseek-ai/dsh-tool-web": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-web/-/dsh-tool-web-0.1.0-rc.7.tgz", + "integrity": "sha512-FJyrD+LspCOIP05/v9hv6MJNkTbgDw8ZpmyAXk6sRopA3yOUju5SnN5HpSZ97ZAK65T6tHYbTMdJhy51D41wOw==", "license": "MIT", "dependencies": { - "@tanstack/react-virtual": "^3.14.9", - "diff": "^9.0.0" + "@deepseek-ai/schemastery": "^3.18.1", + "@joplin/turndown-plugin-gfm": "^1.0.67", + "turndown": "^7.2.4" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-web": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-user-questions": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-user-questions/-/dsh-client-ui-user-questions-0.1.0-rc.6.tgz", - "integrity": "sha512-NiO6w/10LfohgdQKbAihentLzQ72xnc9GdGTZ0DQTEpDu9l712g8OFeFOTcTWycn03N9+tBBTMxt/L21aavMVw==", + "node_modules/@deepseek-ai/dsh-tool-workflow": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tool-workflow/-/dsh-tool-workflow-0.1.0-rc.7.tgz", + "integrity": "sha512-EF9qbGiCK+SdFhckVcS8o4F0Rrib4VEbt5yCe0njj4UrHubjz5Ldmz68TqdrvFqw6mvQ11SUqAm1ookp5hp8gA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "clsx": "^2.0.0", - "react": "^18.2.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workflow": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-workflow-run": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workflow-run/-/dsh-client-ui-workflow-run-0.1.0-rc.6.tgz", - "integrity": "sha512-RqaBep4GdAsa2lZ1u2FPsu564EsiloPkvmfU1Nyi5j7+h+azx0wfxAzs5WI++TApm2qsbaHYLK/yxAlkyW89NQ==", + "node_modules/@deepseek-ai/dsh-tools": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-tools/-/dsh-tools-0.1.0-rc.7.tgz", + "integrity": "sha512-7Kq3EEv354aNcxbS0NRfxxyJiZhCsvFV/03a3MdkYO/gG2eM9+E4xQum0N2FL5bw7JiGlgw8jdLMkcNGmavEaA==", "license": "MIT", "dependencies": { - "react": "^18.2.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tool-workflow": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-code-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7", + "@deepseek-ai/dsh-user-approval": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-client-ui-workspace": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-workspace/-/dsh-client-ui-workspace-0.1.0-rc.6.tgz", - "integrity": "sha512-5Ajod9AuYaw4gMw0DNVVA5XEg9bm/kkWaJwXWw73JQG0FuRFRxNtVtN2p04lRVdZ9v0o2IkvNLVrnexur3S+uA==", + "node_modules/@deepseek-ai/dsh-typert-loader": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-loader/-/dsh-typert-loader-0.1.0-rc.7.tgz", + "integrity": "sha512-0sU6QDo5/8/F7eIi9YGOqI4PTz34O6+NOUr3qRK6U3m6YWh4SVzn1Fc5LXqpnaZPNQpetuLnkvTvFylewBghJA==", "license": "MIT", "dependencies": { - "clsx": "^2.0.0" + "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/cordis-plugin-loader": "^1.0.2", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-typert-registry": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-cordis-client-runner": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-client-runner/-/dsh-cordis-client-runner-0.1.0-rc.6.tgz", - "integrity": "sha512-ESZ/Gd4E8F4VjNETEvS5EGeYn1J2CpLMlEHjklaE8HJ1lww/D9D9AMYQVvcn+QmnF0mX3pqmwmeKtA2lh5hOqA==", + "node_modules/@deepseek-ai/dsh-typert-protocol": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-protocol/-/dsh-typert-protocol-0.1.0-rc.7.tgz", + "integrity": "sha512-R7qdvaRRHbz5xijoVOxueeBB/VT0eDzuQNQN4iNEBUbI/L9xG9bZutktTQlgrIlBSn1sPH4pLqiCiM6ErQPTaQ==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-host-directory-picker-auto": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-host-directory-picker-auto/-/dsh-host-directory-picker-auto-0.1.0-rc.6.tgz", - "integrity": "sha512-0jtXMY67uVQOmYjQKxN3PbJrrCEe5YjDpjw+gpQyuclglyZbZpDzAaoboRnp5PyvM/EQPS+TK/v05/7QNj/owA==", + "node_modules/@deepseek-ai/dsh-typert-registry": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-typert-registry/-/dsh-typert-registry-0.1.0-rc.7.tgz", + "integrity": "sha512-7AQNJLNZTw7/5DzjbfBy4dRqr6VSwc74HBOSPpxm0zzzbmXOEqRCRzMps25IByoAeltRz1ZyY4fzN3tcYa+XwQ==", "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-typert-protocol": "^0.1.0-rc.7", + "zod": "^4.4.3" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.6", - "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6" + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/@deepseek-ai/dsh-session-log-export": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-session-log-export/-/dsh-session-log-export-0.1.0-rc.6.tgz", - "integrity": "sha512-/4JSblyx7p3uxgVXe/YJSqd7rfXzclKjhi7/XmAj32P/fFAsmD2BIjIykgqdyyg07N2twxpGuH0P6jtlrmOiBg==", + "node_modules/@deepseek-ai/dsh-user-approval": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-approval/-/dsh-user-approval-0.1.0-rc.7.tgz", + "integrity": "sha512-kYMpU6eg1m1BcfSC4FLWUcNH/QAE8tcu0WRkQzqzoCw8bK/Nl3dqHtd2qSVzI/emIviTulM5I230e4wPi/kuVg==", "license": "MIT", + "dependencies": { + "@deepseek-ai/schemastery": "^3.18.1" + }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-commands": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/commander": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", - "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "node_modules/@deepseek-ai/dsh-user-questions": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-user-questions/-/dsh-user-questions-0.1.0-rc.7.tgz", + "integrity": "sha512-dfT6pj84lJdhrtbW2pV6hRftoKDkqx0aJevrhUhOy7Lv3CqTOheuLwwyT69Lww+n/q80Z+yp41qJq9loCkrOaw==", "license": "MIT", - "engines": { - "node": ">=22.12.0" + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7" } }, - "node_modules/@deepseek-ai/dsh-web-app/node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "node_modules/@deepseek-ai/dsh-web": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web/-/dsh-web-0.1.0-rc.7.tgz", + "integrity": "sha512-v3Wx/Kn57RyLDqvEhmz0m0p4YluLGSabmMp7dRVJSemYUzT6ZB0JCtMhWkXh6O3kNHSBGpfxeY9Pk+8k80X11Q==", "license": "MIT", "dependencies": { - "loose-envify": "^1.1.0" + "@deepseek-ai/schemastery": "^3.18.1" }, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7" + } + }, + "node_modules/@deepseek-ai/dsh-web-app": { + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-app/-/dsh-web-app-0.1.0-rc.7.tgz", + "integrity": "sha512-hcpVwEk5/SgZ63TRUmGaQsC1p2zBBSO8/KAr4xfM2XSwq/tbvpMLrkyt1zehBXcsx6ijB2s62bsr6AYOz9EczA==", + "license": "MIT", + "dependencies": { + "@deepseek-ai/dsh-agent-presets": "^0.1.0-rc.7", + "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.7", + "@deepseek-ai/dsh-app-boot": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-hmr": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-commands": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-cordis": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-deliverables": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-directory-picker-native": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-goal": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-jobs": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-layout": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-message-feedback": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-model-selection": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-permission-presets": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-plan": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings-general": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings-models": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings-plugin-inventory": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-settings-plugins": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-skill": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-trajectory": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-user-questions": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-workflow-run": "^0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-workspace": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cmdline": "^0.1.0-rc.7", + "@deepseek-ai/dsh-code-runtime-worker-thread": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-cordis-host-runner": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-apiproxy": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-auto": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-browse": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-native": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-frontend-static": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-plugin-inventory": "^0.1.0-rc.7", + "@deepseek-ai/dsh-host-webserver": "^0.1.0-rc.7", + "@deepseek-ai/dsh-message-feedback": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-log-export": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-projection-cache": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-stats": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage-json": "^0.1.0-rc.7", + "@deepseek-ai/dsh-web-frontend": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workspace": "^0.1.0-rc.7", + "@deepseek-ai/schemastery": "^3.18.1", + "commander": "^15.0.0" + }, + "peerDependencies": { + "@deepseek-ai/cordis": "^4.0.1", + "@deepseek-ai/cordis-plugin-loader": "^1.0.2", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-shell-env": "^0.1.0-rc.7", + "@deepseek-ai/dsh-system-prompt": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-web-frontend": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-frontend/-/dsh-web-frontend-0.1.0-rc.6.tgz", - "integrity": "sha512-+RpdDF11FqUZSbJGoZ4oLIk/4PJR+ynTS4ELMn9QqucbYZ8tv0Itq9ZtG2o6pKIe7NO0lj/eBjCR2EoRKx7L+g==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-frontend/-/dsh-web-frontend-0.1.0-rc.7.tgz", + "integrity": "sha512-U9Neu6x2/0hrDwCeExEjGO9KkXiJEoJgp61QF/XQkaHyg4E7YSWZDG9NttlhepqFgqs6Dn/qcjrL5G0JGuWYeA==", "license": "MIT", "dependencies": { - "@deepseek-ai/dsh-client-web": "^0.1.0-rc.6", + "@deepseek-ai/dsh-client-web": "^0.1.0-rc.7", "react": "^18.2.0", "react-dom": "^18.2.0" } @@ -4702,142 +4712,74 @@ } }, "node_modules/@deepseek-ai/dsh-web-search-deepseek": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-search-deepseek/-/dsh-web-search-deepseek-0.1.0-rc.6.tgz", - "integrity": "sha512-+p3eOiUIN5Gk8KLjgAgIXmC6Y/db7LDb1TQ+iCAxz/zNJ2vbGVAoP+Br2jSUA1vbUdHTj49zTEWAQKaebuldCw==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-web-search-deepseek/-/dsh-web-search-deepseek-0.1.0-rc.7.tgz", + "integrity": "sha512-NciK9Tm68RK5XOzl+Jcr4+eG6M5Svq1/23Mhjor9QVYPW1J+wnyxUt6RKLIrmjyiS6VOCOCcZVtyITFkkfVaSQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-credentials": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-web": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-credentials": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-launch-environment": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-settings": "^0.1.0-rc.7", + "@deepseek-ai/dsh-web": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-workflow": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workflow/-/dsh-workflow-0.1.0-rc.6.tgz", - "integrity": "sha512-zpTqaEp5/aXp3Zj5OfpZpTZxncak8af0FSSCOj5e6Eo6+o6cW2Y48fPk5Rl9Dzcbm/x4Y4PZfJSyqazeA27YeA==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workflow/-/dsh-workflow-0.1.0-rc.7.tgz", + "integrity": "sha512-PRGT0iF2KcOTxDC1DDIrNOe9bID3zZms902ScrxGAGj8AksRO97kj+3U2MOhRPfHkkNhSQMHCLt42DiclYhWtA==", "license": "MIT", "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-workflow-worker-thread": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workflow-worker-thread/-/dsh-workflow-worker-thread-0.1.0-rc.6.tgz", - "integrity": "sha512-PE5F8KW/qPmRzDoyC5EDw+44S1W7EDW+Iwox4l0LNG/WUqeARiRHVtTaNoEQyUqOZwUc6hs11SHlp1cZvwNHfg==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workflow-worker-thread/-/dsh-workflow-worker-thread-0.1.0-rc.7.tgz", + "integrity": "sha512-v0YIoPylB1SJW5gBV8gaqoE0PCAZLzEgIU5OqckBKiApHBd0jIo7EzCeTW9+9Tzd8gwwcBQYv7Yxr++rmH8WGQ==", "license": "MIT", "dependencies": { "@deepseek-ai/schemastery": "^3.18.1" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-agent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-llm": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-subagent": "^0.1.0-rc.6", - "@deepseek-ai/dsh-tools": "^0.1.0-rc.6", - "@deepseek-ai/dsh-workflow": "^0.1.0-rc.6" + "@deepseek-ai/dsh-agent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-llm": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-subagent": "^0.1.0-rc.7", + "@deepseek-ai/dsh-tools": "^0.1.0-rc.7", + "@deepseek-ai/dsh-workflow": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/dsh-workspace": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workspace/-/dsh-workspace-0.1.0-rc.6.tgz", - "integrity": "sha512-3R5mX5JTBD9jDpUdauqaswDlxxJzlrRtJ7aH4Ok5jPdlxw0LhC5aIsS5S5RCtFLI1xDzonnInEczjmqmdGQcDQ==", + "version": "0.1.0-rc.7", + "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-workspace/-/dsh-workspace-0.1.0-rc.7.tgz", + "integrity": "sha512-0czW0bI+uFFOS8h8eJ9SGZSdv+StEsa/+E1WEjZQXVeIOxo520Pv47dq+Z3mTyBfV8gJB+UcY0AQ3F0FddYohg==", "license": "MIT", "dependencies": { "zod": "^4.4.3" }, "peerDependencies": { "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-brand": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session": "^0.1.0-rc.6", - "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage": "^0.1.0-rc.6", - "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.6" - } - }, - "node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-client-ui-agent-preset": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-agent-preset/-/dsh-client-ui-agent-preset-0.1.0-rc.6.tgz", - "integrity": "sha512-kJeQdVrUZ0skjyWIAwf+YKZE4VgUXT/7HGQvRVWSWRRlQ0X3dlWUgJnDDzcWBt+cn0cfR5/CANPrPiYEveBxdw==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-conversation": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-settings": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-web-react": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" - } - }, - "node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-client-ui-cordis": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-client-ui-cordis/-/dsh-client-ui-cordis-0.1.0-rc.6.tgz", - "integrity": "sha512-gYCef2obc7UMKOjneFvU8pTK2FehGNI9rqvZW9i1CUZ5pSJjAzJ14C4noIMPQxCrhj37QehrxyAC6Z+XzKYEYg==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-locale": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-input-trigger": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-primitives": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-sidebar": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-tool": "^0.1.0-rc.6", - "@deepseek-ai/dsh-cordis-client-runner": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" - } - }, - "node_modules/@deepseek-ai/dsh/node_modules/@deepseek-ai/dsh-cordis-client-runner": { - "version": "0.1.0-rc.6", - "resolved": "https://registry.npmjs.org/@deepseek-ai/dsh-cordis-client-runner/-/dsh-cordis-client-runner-0.1.0-rc.6.tgz", - "integrity": "sha512-ESZ/Gd4E8F4VjNETEvS5EGeYn1J2CpLMlEHjklaE8HJ1lww/D9D9AMYQVvcn+QmnF0mX3pqmwmeKtA2lh5hOqA==", - "license": "MIT", - "peerDependencies": { - "@deepseek-ai/cordis": "^4.0.1", - "@deepseek-ai/cordis-plugin-loader": "^1.0.2", - "@deepseek-ai/dsh-api-remotes": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-connection": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-modules": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-runtime": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-slots": "^0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-theme": "^0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "^0.1.0-rc.6", - "react": "^18.2.0" - } - }, - "node_modules/@deepseek-ai/dsh/node_modules/commander": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", - "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", - "license": "MIT", - "engines": { - "node": ">=22.12.0" + "@deepseek-ai/dsh-brand": "^0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session": "^0.1.0-rc.7", + "@deepseek-ai/dsh-session-persistence": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage": "^0.1.0-rc.7", + "@deepseek-ai/dsh-storage-domain": "^0.1.0-rc.7" } }, "node_modules/@deepseek-ai/node-addon-landlock-run": { @@ -8092,12 +8034,12 @@ } }, "node_modules/@smithy/core": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.33.0.tgz", - "integrity": "sha512-uKbkxgqLyepQDZoq8aRSdUqD1ID//rOqG96ixBhp++O7vBtmwYM6fwldGhr9HJP0iYrdc7GP/AlgzPWEZIrNRg==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.33.2.tgz", + "integrity": "sha512-CUGXpnPkVdjUCbix+83sWLW9VFgQOm44MDOx/ihITJMAnOZKvL8YYIc7DR9pP/tZ8CIRvMiON/TucvygqbHO3w==", "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.17.0", + "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, "engines": { @@ -8105,13 +8047,13 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.0.tgz", - "integrity": "sha512-2jsPi+7Zv2hSzD9IXR9D7DTqSn7mv4XalzRm+bESh53jiaUS3NKEUbpQFTJP0HhQy9qzZvluxQ3yS24zdRrqsA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.5.2.tgz", + "integrity": "sha512-A9uSdn72ozbRUSit0eib0TW7nXuNPlaeM0zcGkJ+nE6tFcSDbnmtwoxbTCFBukVQcszDAyvsd7+rTduPTXpygg==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.32.0", - "@smithy/types": "^4.17.0", + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, "engines": { @@ -8119,13 +8061,13 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.0.tgz", - "integrity": "sha512-W/exA8T0LEzCQtJ02w4IzaEQPIspgarqZprb7W8FwnYiDowgCrjl2fTQ6FvuSSUnJORuepBF81abmBJwqh+0XQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.7.2.tgz", + "integrity": "sha512-nZyWTmSpJEXl6VtWVMBJve/7x12DZu6sIX1z1a+ZMaHlQQRs9Zpu6NbTe/gmxYXVRpkjxyDYpZ5gx2IM6f/Wkw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.32.0", - "@smithy/types": "^4.17.0", + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, "engines": { @@ -8159,13 +8101,13 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.0.tgz", - "integrity": "sha512-hCynhm22wMJ8wTF9crcwu8mxggtUrSLLJgDcGUvYFBqpofxycYJCGKOMYg4xtPPFtgNiDJSYmhsWLTrcU/g59Q==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.7.2.tgz", + "integrity": "sha512-P7Ki6px6OOrxVtx8K7nLmyx4SlXUW/uTKDdMG44UHefmPGSRMBKe2v+TM59WdLcpUIrBrnuCsIqiM2MbsZjmhw==", "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.32.0", - "@smithy/types": "^4.17.0", + "@smithy/core": "^3.33.2", + "@smithy/types": "^4.17.2", "tslib": "^2.6.2" }, "engines": { @@ -8173,9 +8115,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.17.0.tgz", - "integrity": "sha512-Aw4joiM0ZdErpo39lCj8phT2lxoiKZV+KZzBxnnQhWVtU2Is/WffQSL04uUWRcXUse9Ln8vXZK6V/FwqRVnQpg==", + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.17.2.tgz", + "integrity": "sha512-FOKpVZob9MPTn2znRzGrnsMHv7BOsKVw3XiP/cOyYLDVZ9qKp4nifIiSCuUU/fIj5Vu0UOAxCFr+qRAtG0NUkA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -8581,12 +8523,12 @@ } }, "node_modules/@tanstack/react-virtual": { - "version": "3.14.9", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.9.tgz", - "integrity": "sha512-qZyr0FZDP8rDC4WBhsryIZmAd9bveJvFGUJJtskWaew6/0dTRS6wZxnR6VQ5bY2KwL3LjerrHqQLk3a0GKcPXQ==", + "version": "3.14.10", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.14.10.tgz", + "integrity": "sha512-SRyoUbdFMRHuYXMijV5H4ZarQWpXkj3iANq8OFre+pybeVap8ZJjZ3Nz9bVjx4d8PfobVUQUdKyyyHYk3E+djw==", "license": "MIT", "dependencies": { - "@tanstack/virtual-core": "3.17.7" + "@tanstack/virtual-core": "3.17.8" }, "funding": { "type": "github", @@ -8598,9 +8540,9 @@ } }, "node_modules/@tanstack/virtual-core": { - "version": "3.17.7", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.7.tgz", - "integrity": "sha512-bp+v10y65sp2H7WpWfIMyxTNfl8ZVfxFTLRjPIFRryi6FV/J33z4IS53WO4pTk36KlvJ4iLiQz+oaydDC1xbcA==", + "version": "3.17.8", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.17.8.tgz", + "integrity": "sha512-BfEvehNpOT75r5Ksc5xW6NZuXujTfb7nlSEyVu4XHG3gdxNg1KqXruWbDewXOUaUYIo4oRbSfkjIajz4MAT8tA==", "license": "MIT", "funding": { "type": "github", @@ -9736,6 +9678,12 @@ "d3-zoom": "^3.0.0" } }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "license": "BSD-2-Clause" + }, "node_modules/abbrev": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", @@ -9841,7 +9789,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -10709,7 +10656,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -10804,7 +10750,6 @@ "version": "9.7.0", "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.7.0.tgz", "integrity": "sha512-g/kR520giAFYkSXTzcmF3kqQq7wi8F6N6SzeDgZrqTBN+VHdmgWOyTdD1yD7AATDId/yXLvuP34CxW46/BwCdw==", - "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.4", @@ -10866,7 +10811,6 @@ "version": "1.0.9", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", - "dev": true, "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -10964,7 +10908,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -11108,7 +11051,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -11121,7 +11063,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/combined-stream": { @@ -11147,6 +11088,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/commander": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-15.0.0.tgz", + "integrity": "sha512-z67u4ZhzCL/Tydu1lJARtEZYWbWaN7oYLHbsuzocr6y4N6WZAagG3RQ4FW61V1/0+jImpj293XfrcYnd1qxtPg==", + "license": "MIT", + "engines": { + "node": ">=22.12.0" + } + }, "node_modules/compare-version": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", @@ -11576,7 +11526,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -11866,6 +11815,34 @@ "dev": true, "license": "ISC" }, + "node_modules/electron-updater": { + "version": "6.8.9", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.8.9.tgz", + "integrity": "sha512-ZhVxM9iGONUpZGI1FxdMRgJjUFXi7AYGVa5PwKlO1tV1/4zDxQmfKpXOHVztKrd6L9rLcFjERvi1Mf2vxyTkig==", + "license": "MIT", + "dependencies": { + "builder-util-runtime": "9.7.0", + "fs-extra": "^10.1.0", + "js-yaml": "^4.1.0", + "lazy-val": "^1.0.5", + "lodash.escaperegexp": "^4.1.2", + "lodash.isequal": "^4.5.0", + "semver": "~7.7.3", + "tiny-typed-emitter": "^2.1.0" + } + }, + "node_modules/electron-updater/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/electron/node_modules/@electron/get": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.0.0.tgz", @@ -12953,7 +12930,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -13000,6 +12976,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -13124,7 +13109,6 @@ "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -13559,7 +13543,6 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, "license": "ISC" }, "node_modules/has-bigints": { @@ -13579,7 +13562,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -13589,7 +13571,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -14125,6 +14106,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -14224,7 +14220,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.12.0" @@ -14398,11 +14393,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, "license": "MIT" }, "node_modules/isbinaryfile": { @@ -14562,6 +14568,25 @@ "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", "license": "BSD-2-Clause" }, + "node_modules/json-stable-stringify": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.3.0.tgz", + "integrity": "sha512-qtYiSSFlwot9XHtF9bD9c7rwKjr+RecWT//ZnPvSmEjpV5mmPOCN4j8UjY5hbjNkOwZ/jQv3J6R1/pL7RwgMsg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -14594,7 +14619,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", - "dev": true, "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -14603,6 +14627,15 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", @@ -14688,6 +14721,15 @@ "json-buffer": "3.0.1" } }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", @@ -14749,7 +14791,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true, "license": "MIT" }, "node_modules/levn": { @@ -15061,6 +15102,19 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -16021,7 +16075,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -16117,7 +16170,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -16626,9 +16678,9 @@ "license": "MIT" }, "node_modules/node-pty": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.1.0.tgz", - "integrity": "sha512-20JqtutY6JPXTUnL0ij1uad7Qe1baT46lyolh2sSENDd4sTzKZ4nmAFkeAARDKwmlLjPx6XKRlwRUxwjOy+lUg==", + "version": "1.2.0-beta.15", + "resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.15.tgz", + "integrity": "sha512-vORSzHXi4Ofl7HemVWpuudLqCPdaQb4LfpRCUpE5HPxhp4JYscl8zZwxh11p26v2wvW24WMwnMfLjhRLixrfxA==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -16696,7 +16748,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -16830,6 +16881,22 @@ "regex-recursion": "^6.0.2" } }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/openai": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/openai/-/openai-6.26.0.tgz", @@ -16997,6 +17064,62 @@ "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", "license": "MIT" }, + "node_modules/patch-package": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.1.tgz", + "integrity": "sha512-VsKRIA8f5uqHQ7NGhwIna6Bx6D9s/1iXlA1hthBVBEbkq+t4kXD0HHt+rJhf/Z+Ci0F/HCB2hvn0qLdLG+Qxlw==", + "license": "MIT", + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^4.1.2", + "ci-info": "^3.7.0", + "cross-spawn": "^7.0.3", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^10.0.0", + "json-stable-stringify": "^1.0.2", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.6", + "open": "^7.4.2", + "semver": "^7.5.3", + "slash": "^2.0.0", + "tmp": "^0.2.4", + "yaml": "^2.2.2" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "node": ">=14", + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/patch-package/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -17089,6 +17212,13 @@ "url": "https://github.com/sponsors/jet2jet" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true, + "license": "MIT" + }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -17099,7 +17229,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, "license": "MIT", "engines": { "node": ">=8.6" @@ -18019,7 +18148,6 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", - "dev": true, "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" @@ -18115,7 +18243,6 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -18372,6 +18499,15 @@ "node": ">=10" } }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -18759,7 +18895,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -18867,6 +19002,12 @@ "dev": true, "license": "MIT" }, + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.16", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", @@ -18919,7 +19060,6 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.7.tgz", "integrity": "sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==", - "dev": true, "license": "MIT", "engines": { "node": ">=14.14" @@ -18939,7 +19079,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -19397,7 +19536,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -20886,6 +21024,19 @@ "node": ">=12" } }, + "node_modules/yauzl": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.4.0.tgz", + "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -21015,7 +21166,7 @@ "version": "0.1.0", "license": "SEE LICENSE IN ../../LICENSE", "dependencies": { - "@deepseek-ai/dsh-mcp-client": "0.1.0-rc.6", + "@deepseek-ai/dsh-mcp-client": "0.1.0-rc.7", "yaml": "2.9.0", "zod": "^4.4.3" } diff --git a/package.json b/package.json index 5d2d7d0..28ee943 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "laobos-agent-studio", - "version": "0.2.3", + "version": "0.3.10", "description": "劳博士:基于 DeepSeek Harness 的本地 Agent 桌面客户端", "author": "Modole contributors", "license": "SEE LICENSE IN LICENSE", @@ -17,7 +17,7 @@ "ws": "8.21.3" }, "scripts": { - "postinstall": "node scripts/ensure-node-pty-helper.mjs", + "postinstall": "patch-package && node scripts/ensure-node-pty-helper.mjs", "dev": "npm run build:desktop-plugins && node scripts/start-dsh.mjs", "dev:full": "npm run build:desktop-plugins && node scripts/start-dsh.mjs", "start": "npm run build:desktop-plugins && node scripts/start-dsh.mjs", @@ -32,6 +32,8 @@ "desktop:package": "npm run build:desktop-plugins && node scripts/package-desktop.mjs", "desktop:make": "npm run build:desktop-plugins && node scripts/make-desktop.mjs", "desktop:installer": "npm run build:desktop-plugins && electron-builder --publish never", + "desktop:installer:test-update": "npm run build:desktop-plugins && electron-builder --config electron-builder.test-update.yml --publish never", + "release:mac:test": "npm run desktop:installer:test-update -- --mac dmg zip --arm64", "site:dev": "WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext dev", "site:start": "WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext start", "build": "WRANGLER_LOG_PATH=.wrangler/wrangler.log vinext build", @@ -44,35 +46,37 @@ "dependencies": { "@browserops/bridge": "^0.0.11", "@deepseek-ai/cordis-plugin-group": "1.0.1", - "@deepseek-ai/dsh": "0.1.0-rc.6", - "@deepseek-ai/dsh-anonymous-user-id": "0.1.0-rc.6", - "@deepseek-ai/dsh-atomic-write": "0.1.0-rc.6", - "@deepseek-ai/dsh-bash-local": "0.1.0-rc.6", - "@deepseek-ai/dsh-code-runtime": "0.1.0-rc.6", - "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.1.0-rc.6", - "@deepseek-ai/dsh-compaction": "0.1.0-rc.6", - "@deepseek-ai/dsh-fs": "0.1.0-rc.6", - "@deepseek-ai/dsh-host-directory-picker-browse": "0.1.0-rc.6", - "@deepseek-ai/dsh-invariants": "0.1.0-rc.6", - "@deepseek-ai/dsh-output-retention": "0.1.0-rc.6", - "@deepseek-ai/dsh-sandbox": "0.1.0-rc.6", - "@deepseek-ai/dsh-scope": "0.1.0-rc.6", - "@deepseek-ai/dsh-session-telemetry": "0.1.0-rc.6", - "@deepseek-ai/dsh-session-title-llm": "0.1.0-rc.6", - "@deepseek-ai/dsh-shell": "0.1.0-rc.6", - "@deepseek-ai/dsh-spill": "0.1.0-rc.6", - "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.0-rc.6", - "@deepseek-ai/dsh-subprocess": "0.1.0-rc.6", - "@deepseek-ai/dsh-timeout": "0.1.0-rc.6", - "@deepseek-ai/dsh-workflow": "0.1.0-rc.6", + "@deepseek-ai/dsh": "0.1.0-rc.7", + "@deepseek-ai/dsh-anonymous-user-id": "0.1.0-rc.7", + "@deepseek-ai/dsh-atomic-write": "0.1.0-rc.7", + "@deepseek-ai/dsh-bash-local": "0.1.0-rc.7", + "@deepseek-ai/dsh-client-ui-directory-picker-browse": "0.1.0-rc.7", + "@deepseek-ai/dsh-code-runtime": "0.1.0-rc.7", + "@deepseek-ai/dsh-compaction": "0.1.0-rc.7", + "@deepseek-ai/dsh-fs": "0.1.0-rc.7", + "@deepseek-ai/dsh-host-directory-picker-browse": "0.1.0-rc.7", + "@deepseek-ai/dsh-invariants": "0.1.0-rc.7", + "@deepseek-ai/dsh-output-retention": "0.1.0-rc.7", + "@deepseek-ai/dsh-sandbox": "0.1.0-rc.7", + "@deepseek-ai/dsh-scope": "0.1.0-rc.7", + "@deepseek-ai/dsh-session-telemetry": "0.1.0-rc.7", + "@deepseek-ai/dsh-session-title-llm": "0.1.0-rc.7", + "@deepseek-ai/dsh-shell": "0.1.0-rc.7", + "@deepseek-ai/dsh-spill": "0.1.0-rc.7", + "@deepseek-ai/dsh-subagent-in-process-driver": "0.1.0-rc.7", + "@deepseek-ai/dsh-subprocess": "0.1.0-rc.7", + "@deepseek-ai/dsh-timeout": "0.1.0-rc.7", + "@deepseek-ai/dsh-workflow": "0.1.0-rc.7", "@laobos/dsh-performance": "file:packages/laobos-performance", "@laobos/dsh-shell": "file:packages/laobos-shell", "@laobos/dsh-system-tools": "file:packages/laobos-system-tools", "@xterm/addon-fit": "^0.11.0", "@xterm/xterm": "^6.0.0", "@xyflow/react": "12.11.3", + "electron-updater": "^6.8.9", "next": "16.2.11", - "node-pty": "^1.1.0", + "node-pty": "1.2.0-beta.15", + "patch-package": "8.0.1", "react": "19.2.6", "react-dom": "19.2.6", "ssh2": "^1.17.0", @@ -98,7 +102,8 @@ "typescript": "5.9.3", "vinext": "0.0.50", "vite": "8.0.13", - "wrangler": "4.92.0" + "wrangler": "4.92.0", + "yauzl": "3.4.0" }, "type": "module" } diff --git a/packages/laobos-app-manager/lib/client.js b/packages/laobos-app-manager/lib/client.js index c89f1cd..05fa7ac 100644 --- a/packages/laobos-app-manager/lib/client.js +++ b/packages/laobos-app-manager/lib/client.js @@ -17,7 +17,7 @@ .lbs-apps-list-wrap{min-height:0;overflow:auto}.lbs-apps-list-head,.lbs-apps-row{display:grid;gap:14px;grid-template-columns:minmax(250px,1.7fr) minmax(180px,1fr) 132px minmax(218px,auto);padding-left:14px;padding-right:10px}.lbs-apps-list-head{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);font-size:8px;font-weight:600;height:29px;letter-spacing:.06em;position:sticky;text-transform:uppercase;top:0;z-index:2}.lbs-apps-row{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);min-height:72px;padding-bottom:9px;padding-top:9px;transition:background .14s ease}.lbs-apps-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-apps-row-main{align-items:center;display:grid;gap:9px;grid-template-columns:9px minmax(0,1fr);min-width:0}.lbs-apps-dot{background:#89939e;border-radius:50%;display:block;flex:none;height:7px;width:7px}.lbs-apps-dot[data-state=running]{background:#2ba36d;box-shadow:0 0 0 3px color-mix(in srgb,#2ba36d 16%,transparent)}.lbs-apps-dot[data-state=online]{background:#4b8ed6;box-shadow:0 0 0 3px color-mix(in srgb,#4b8ed6 15%,transparent)}.lbs-apps-dot[data-state=starting],.lbs-apps-dot[data-state=stopping]{background:#d49a29}.lbs-apps-dot[data-state=error]{background:#d94b4b}.lbs-apps-row-copy,.lbs-apps-service,.lbs-apps-status-copy{display:grid;gap:4px;min-width:0}.lbs-apps-row-title{align-items:center;display:flex;gap:7px;min-width:0}.lbs-apps-row-title strong{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:4px;color:var(--dsw-alias-label-tertiary);flex:none;font-size:8px;padding:1px 4px;text-transform:uppercase}.lbs-apps-row-sub,.lbs-apps-service span,.lbs-apps-service code,.lbs-apps-status-copy small{color:var(--dsw-alias-label-tertiary);font:9px/1.35 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-row-command{color:var(--dsw-alias-label-secondary);font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-service strong{font:10px/1.35 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-service span{font-family:inherit}.lbs-apps-status-line{align-items:center;display:flex;font-size:10px;font-weight:600;gap:6px}.lbs-apps-status-line .lbs-apps-dot{box-shadow:none;height:6px;width:6px}.lbs-apps-row-actions{align-items:center;display:flex;gap:2px;justify-content:flex-end}.lbs-apps-action{color:var(--dsw-alias-label-tertiary);position:relative}.lbs-apps-action-separator{background:var(--dsw-alias-border-l1);height:18px;margin:0 3px;width:1px}.lbs-apps-row-error{color:#d94b4b;font-size:9px;grid-column:1/-1;margin:-3px 0 0 18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-empty-list{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;font-size:10px;gap:10px;justify-items:center;min-height:260px;padding:28px;text-align:center}.lbs-apps-empty-icon{align-items:center;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;display:flex;height:42px;justify-content:center;width:42px}.lbs-apps-empty-list strong{color:var(--dsw-alias-label-primary);font-size:12px}.lbs-apps-empty-list p{line-height:1.55;margin:0;max-width:360px} .lbs-apps-statusbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:12px;padding:0 10px}.lbs-apps-statusbar span:last-child{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-error{background:#482129;border:1px solid #6d303a;border-radius:6px;color:#ffc4ca;font-size:10px;max-width:min(520px,calc(100% - 20px));padding:7px 10px;position:absolute;right:10px;top:84px;z-index:5} .lbs-apps-modal-backdrop{align-items:center;background:rgba(0,0,0,.46);display:flex;inset:0;justify-content:center;padding:22px;position:fixed;z-index:2147483220}.lbs-apps-modal{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;box-shadow:var(--dsw-shadow-lv3);display:grid;grid-template-rows:46px minmax(0,1fr) auto;max-height:min(780px,92vh);overflow:hidden;width:min(680px,calc(100vw - 34px))}.lbs-apps-modal.wide{width:min(850px,calc(100vw - 34px))}.lbs-apps-modal-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;padding:0 14px}.lbs-apps-modal-header h2{font-size:14px;margin:0}.lbs-apps-modal-header button{margin-left:auto}.lbs-apps-modal-body{min-height:0;overflow:auto;padding:15px}.lbs-apps-modal-footer{border-top:1px solid var(--dsw-alias-border-l1);display:flex;gap:7px;justify-content:flex-end;padding:10px 14px} - .lbs-apps-log-viewer{background:#101419;border:1px solid #2b323b;border-radius:8px;color:#dce5ed;display:grid;grid-template-rows:34px minmax(0,1fr);height:min(560px,65vh);min-height:280px;overflow:hidden}.lbs-apps-log-header{align-items:center;background:#181d23;border-bottom:1px solid #2b323b;color:#a9b5c0;display:flex;font-size:9px;gap:7px;padding:0 10px}.lbs-apps-log-header strong{color:#e1e8ee;font-size:10px}.lbs-apps-log-header span{margin-left:auto}.lbs-apps-log{font:10px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;min-height:0;overflow:auto;padding:10px;white-space:pre-wrap}.lbs-apps-log-empty{align-content:center;color:#74808b;display:grid;font-size:10px;height:100%;justify-items:center} + .lbs-apps-log-viewer{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2);border-radius:8px;color:var(--dsw-alias-label-primary);display:grid;grid-template-rows:34px minmax(0,1fr);height:min(560px,65vh);min-height:280px;overflow:hidden}.lbs-apps-log-header{align-items:center;background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:7px;padding:0 10px}.lbs-apps-log-header strong{color:var(--dsw-alias-label-primary);font-size:10px}.lbs-apps-log-header span{margin-left:auto}.lbs-apps-log{font:10px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;min-height:0;overflow:auto;padding:10px;white-space:pre-wrap}.lbs-apps-log-empty{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;font-size:10px;height:100%;justify-items:center} .lbs-apps-form{display:grid;gap:13px}.lbs-apps-form-grid{display:grid;gap:10px;grid-template-columns:1fr 1fr}.lbs-apps-form label{color:var(--dsw-alias-label-secondary);display:grid;font-size:10px;gap:5px}.lbs-apps-form .wide{grid-column:1/-1}.lbs-apps-form input,.lbs-apps-form select,.lbs-apps-form textarea{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;box-sizing:border-box;color:inherit;font:11px inherit;min-height:32px;padding:6px 8px;width:100%}.lbs-apps-form textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;min-height:330px;resize:vertical}.lbs-apps-port-field{display:grid;gap:5px;grid-template-columns:minmax(0,1fr) auto}.lbs-apps-help{color:var(--dsw-alias-label-tertiary);font-size:9px;line-height:1.5;margin:0}.lbs-apps-rule{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;display:grid;font-size:9px;gap:5px;line-height:1.5;padding:10px}.lbs-apps-rule strong{font-size:10px}.lbs-apps-form-error{color:#d94b4b;font-size:10px;margin:0}.lbs-apps-delete-copy{font-size:11px;line-height:1.6;margin:0}.lbs-apps-delete-copy strong{display:block;margin-bottom:5px} @media(max-width:1050px){.lbs-apps-list-head,.lbs-apps-row{grid-template-columns:minmax(220px,1.5fr) minmax(150px,1fr) 112px minmax(196px,auto);gap:9px}.lbs-apps-action{height:27px;width:27px}}@media(max-width:900px){.lbs-apps-panel{left:0;right:0}.lbs-apps-list-head,.lbs-apps-row{grid-template-columns:minmax(220px,1.5fr) minmax(150px,1fr) 105px minmax(190px,auto)}.lbs-apps-notice-summary{display:none}}@media(max-width:700px){.lbs-apps-panel{grid-template-rows:44px auto 48px minmax(0,1fr) 25px}.lbs-apps-list-head{display:none}.lbs-apps-row{gap:7px;grid-template-columns:minmax(0,1fr) auto;min-height:94px;padding:10px 9px 10px 12px}.lbs-apps-service{grid-column:1}.lbs-apps-status-copy{grid-column:2;grid-row:1}.lbs-apps-row-actions{grid-column:2;grid-row:2}.lbs-apps-row-error{grid-column:1/-1;margin-left:18px}.lbs-apps-notice>span:not(.lbs-apps-notice-summary){display:none}.lbs-apps-filter-meta{display:none}.lbs-apps-form-grid{grid-template-columns:1fr}.lbs-apps-form .wide{grid-column:auto}} `; diff --git a/packages/laobos-app-manager/src/client.jsx b/packages/laobos-app-manager/src/client.jsx index d03210c..125722b 100644 --- a/packages/laobos-app-manager/src/client.jsx +++ b/packages/laobos-app-manager/src/client.jsx @@ -16,7 +16,7 @@ window.__ModuleLoader__.load({ .lbs-apps-list-wrap{min-height:0;overflow:auto}.lbs-apps-list-head,.lbs-apps-row{display:grid;gap:14px;grid-template-columns:minmax(250px,1.7fr) minmax(180px,1fr) 132px minmax(218px,auto);padding-left:14px;padding-right:10px}.lbs-apps-list-head{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);font-size:8px;font-weight:600;height:29px;letter-spacing:.06em;position:sticky;text-transform:uppercase;top:0;z-index:2}.lbs-apps-row{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);min-height:72px;padding-bottom:9px;padding-top:9px;transition:background .14s ease}.lbs-apps-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-apps-row-main{align-items:center;display:grid;gap:9px;grid-template-columns:9px minmax(0,1fr);min-width:0}.lbs-apps-dot{background:#89939e;border-radius:50%;display:block;flex:none;height:7px;width:7px}.lbs-apps-dot[data-state=running]{background:#2ba36d;box-shadow:0 0 0 3px color-mix(in srgb,#2ba36d 16%,transparent)}.lbs-apps-dot[data-state=online]{background:#4b8ed6;box-shadow:0 0 0 3px color-mix(in srgb,#4b8ed6 15%,transparent)}.lbs-apps-dot[data-state=starting],.lbs-apps-dot[data-state=stopping]{background:#d49a29}.lbs-apps-dot[data-state=error]{background:#d94b4b}.lbs-apps-row-copy,.lbs-apps-service,.lbs-apps-status-copy{display:grid;gap:4px;min-width:0}.lbs-apps-row-title{align-items:center;display:flex;gap:7px;min-width:0}.lbs-apps-row-title strong{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:4px;color:var(--dsw-alias-label-tertiary);flex:none;font-size:8px;padding:1px 4px;text-transform:uppercase}.lbs-apps-row-sub,.lbs-apps-service span,.lbs-apps-service code,.lbs-apps-status-copy small{color:var(--dsw-alias-label-tertiary);font:9px/1.35 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-row-command{color:var(--dsw-alias-label-secondary);font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-service strong{font:10px/1.35 ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-service span{font-family:inherit}.lbs-apps-status-line{align-items:center;display:flex;font-size:10px;font-weight:600;gap:6px}.lbs-apps-status-line .lbs-apps-dot{box-shadow:none;height:6px;width:6px}.lbs-apps-row-actions{align-items:center;display:flex;gap:2px;justify-content:flex-end}.lbs-apps-action{color:var(--dsw-alias-label-tertiary);position:relative}.lbs-apps-action-separator{background:var(--dsw-alias-border-l1);height:18px;margin:0 3px;width:1px}.lbs-apps-row-error{color:#d94b4b;font-size:9px;grid-column:1/-1;margin:-3px 0 0 18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-empty-list{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;font-size:10px;gap:10px;justify-items:center;min-height:260px;padding:28px;text-align:center}.lbs-apps-empty-icon{align-items:center;background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;display:flex;height:42px;justify-content:center;width:42px}.lbs-apps-empty-list strong{color:var(--dsw-alias-label-primary);font-size:12px}.lbs-apps-empty-list p{line-height:1.55;margin:0;max-width:360px} .lbs-apps-statusbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:12px;padding:0 10px}.lbs-apps-statusbar span:last-child{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-apps-error{background:#482129;border:1px solid #6d303a;border-radius:6px;color:#ffc4ca;font-size:10px;max-width:min(520px,calc(100% - 20px));padding:7px 10px;position:absolute;right:10px;top:84px;z-index:5} .lbs-apps-modal-backdrop{align-items:center;background:rgba(0,0,0,.46);display:flex;inset:0;justify-content:center;padding:22px;position:fixed;z-index:2147483220}.lbs-apps-modal{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;box-shadow:var(--dsw-shadow-lv3);display:grid;grid-template-rows:46px minmax(0,1fr) auto;max-height:min(780px,92vh);overflow:hidden;width:min(680px,calc(100vw - 34px))}.lbs-apps-modal.wide{width:min(850px,calc(100vw - 34px))}.lbs-apps-modal-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;padding:0 14px}.lbs-apps-modal-header h2{font-size:14px;margin:0}.lbs-apps-modal-header button{margin-left:auto}.lbs-apps-modal-body{min-height:0;overflow:auto;padding:15px}.lbs-apps-modal-footer{border-top:1px solid var(--dsw-alias-border-l1);display:flex;gap:7px;justify-content:flex-end;padding:10px 14px} - .lbs-apps-log-viewer{background:#101419;border:1px solid #2b323b;border-radius:8px;color:#dce5ed;display:grid;grid-template-rows:34px minmax(0,1fr);height:min(560px,65vh);min-height:280px;overflow:hidden}.lbs-apps-log-header{align-items:center;background:#181d23;border-bottom:1px solid #2b323b;color:#a9b5c0;display:flex;font-size:9px;gap:7px;padding:0 10px}.lbs-apps-log-header strong{color:#e1e8ee;font-size:10px}.lbs-apps-log-header span{margin-left:auto}.lbs-apps-log{font:10px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;min-height:0;overflow:auto;padding:10px;white-space:pre-wrap}.lbs-apps-log-empty{align-content:center;color:#74808b;display:grid;font-size:10px;height:100%;justify-items:center} + .lbs-apps-log-viewer{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2);border-radius:8px;color:var(--dsw-alias-label-primary);display:grid;grid-template-rows:34px minmax(0,1fr);height:min(560px,65vh);min-height:280px;overflow:hidden}.lbs-apps-log-header{align-items:center;background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:7px;padding:0 10px}.lbs-apps-log-header strong{color:var(--dsw-alias-label-primary);font-size:10px}.lbs-apps-log-header span{margin-left:auto}.lbs-apps-log{font:10px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;min-height:0;overflow:auto;padding:10px;white-space:pre-wrap}.lbs-apps-log-empty{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;font-size:10px;height:100%;justify-items:center} .lbs-apps-form{display:grid;gap:13px}.lbs-apps-form-grid{display:grid;gap:10px;grid-template-columns:1fr 1fr}.lbs-apps-form label{color:var(--dsw-alias-label-secondary);display:grid;font-size:10px;gap:5px}.lbs-apps-form .wide{grid-column:1/-1}.lbs-apps-form input,.lbs-apps-form select,.lbs-apps-form textarea{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;box-sizing:border-box;color:inherit;font:11px inherit;min-height:32px;padding:6px 8px;width:100%}.lbs-apps-form textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;min-height:330px;resize:vertical}.lbs-apps-port-field{display:grid;gap:5px;grid-template-columns:minmax(0,1fr) auto}.lbs-apps-help{color:var(--dsw-alias-label-tertiary);font-size:9px;line-height:1.5;margin:0}.lbs-apps-rule{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;display:grid;font-size:9px;gap:5px;line-height:1.5;padding:10px}.lbs-apps-rule strong{font-size:10px}.lbs-apps-form-error{color:#d94b4b;font-size:10px;margin:0}.lbs-apps-delete-copy{font-size:11px;line-height:1.6;margin:0}.lbs-apps-delete-copy strong{display:block;margin-bottom:5px} @media(max-width:1050px){.lbs-apps-list-head,.lbs-apps-row{grid-template-columns:minmax(220px,1.5fr) minmax(150px,1fr) 112px minmax(196px,auto);gap:9px}.lbs-apps-action{height:27px;width:27px}}@media(max-width:900px){.lbs-apps-panel{left:0;right:0}.lbs-apps-list-head,.lbs-apps-row{grid-template-columns:minmax(220px,1.5fr) minmax(150px,1fr) 105px minmax(190px,auto)}.lbs-apps-notice-summary{display:none}}@media(max-width:700px){.lbs-apps-panel{grid-template-rows:44px auto 48px minmax(0,1fr) 25px}.lbs-apps-list-head{display:none}.lbs-apps-row{gap:7px;grid-template-columns:minmax(0,1fr) auto;min-height:94px;padding:10px 9px 10px 12px}.lbs-apps-service{grid-column:1}.lbs-apps-status-copy{grid-column:2;grid-row:1}.lbs-apps-row-actions{grid-column:2;grid-row:2}.lbs-apps-row-error{grid-column:1/-1;margin-left:18px}.lbs-apps-notice>span:not(.lbs-apps-notice-summary){display:none}.lbs-apps-filter-meta{display:none}.lbs-apps-form-grid{grid-template-columns:1fr}.lbs-apps-form .wide{grid-column:auto}} `; diff --git a/packages/laobos-browserops/lib/client.js b/packages/laobos-browserops/lib/client.js index 76fed7b..5967aa8 100644 --- a/packages/laobos-browserops/lib/client.js +++ b/packages/laobos-browserops/lib/client.js @@ -1,42 +1,135 @@ -/* eslint-disable @next/next/no-assign-module-variable -- DSH browser plugins use a CommonJS-style module factory */ -window.__ModuleLoader__.load({ - id: "@laobos/dsh-browserops", - factory: (require) => { - var module = { exports: {} }; var exports = module.exports; - Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); - const React = require("react"); - const { createElement: h, useEffect, useRef, useState } = React; - const css = `.lbs-browser-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060}.lbs-browser-toolbar{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:5px;height:48px;padding:0 9px}.lbs-browser-toolbar button{appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;font:inherit;font-size:12px;height:29px;padding:0 8px}.lbs-browser-toolbar button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-browser-toolbar button:disabled{opacity:.4}.lbs-browser-address{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:7px;color:inherit;flex:1;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;height:30px;min-width:90px;padding:0 9px}.lbs-browser-viewport{flex:1;min-height:0}.lbs-browser-ops{align-items:center;border-left:1px solid var(--dsw-alias-border-l1);display:flex;gap:5px;margin-left:4px;padding-left:8px}.lbs-browser-ops span{color:var(--dsw-alias-label-tertiary);font-size:10px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-browser-error{background:rgba(218,70,70,.1);color:#d94b4b;font-size:12px;padding:7px 11px}@media(max-width:850px){.lbs-browser-panel{left:0;right:0}.lbs-browser-ops span{display:none}}`; - if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-browserops"]')) { const style = document.createElement("style"); style.dataset.pluginCss = "@laobos/dsh-browserops"; style.textContent = css; document.head.append(style); } - - function BrowserPanel() { - const [open, setOpen] = useState(false); const [address, setAddress] = useState("http://127.0.0.1:3000"); const [state, setState] = useState({}); const [ops, setOps] = useState({ state: "stopped", message: "" }); const [error, setError] = useState(""); const viewport = useRef(null); const addressRef = useRef(address); - useEffect(() => { addressRef.current = address; }, [address]); - useEffect(() => { const show = (event) => { if (event.detail?.tool === "close") { setOpen(false); return; } if (event.detail?.tool !== "browser") return; setOpen(true); setError(""); }; window.addEventListener("laobos:open-desktop-tool", show); return () => window.removeEventListener("laobos:open-desktop-tool", show); }, []); - useEffect(() => { - if (!open || !window.laobosDesktop?.capabilities?.browserPreview) return undefined; - let disposed = false; - const sync = () => { if (!viewport.current || disposed) return; const rect = viewport.current.getBoundingClientRect(); void window.laobosDesktop.browser.setBounds({ x: rect.left, y: rect.top, width: rect.width, height: rect.height }); }; - const observer = new ResizeObserver(sync); observer.observe(viewport.current); window.addEventListener("resize", sync); - const offState = window.laobosDesktop.browser.onState((value) => { setState(value); if (value.url) setAddress(value.url); }); - const offOps = window.laobosDesktop.browserOps.onState(setOps); - void window.laobosDesktop.browser.show(true).then((value) => { setState(value); sync(); if (!value.url) return window.laobosDesktop.browser.navigate(addressRef.current); }).catch((reason) => setError(reason instanceof Error ? reason.message : String(reason))); - void window.laobosDesktop.browserOps.status().then(setOps); - return () => { disposed = true; observer.disconnect(); window.removeEventListener("resize", sync); offState(); offOps(); void window.laobosDesktop.browser.show(false); }; - }, [open]); - const navigate = async () => { try { setError(""); setState(await window.laobosDesktop.browser.navigate(address)); } catch (reason) { setError(reason instanceof Error ? reason.message : String(reason)); } }; - const action = async (name) => { try { setState(await window.laobosDesktop.browser.action(name)); } catch (reason) { setError(reason instanceof Error ? reason.message : String(reason)); } }; - const toggleOps = async () => { try { setOps(await (ops.state === "running" ? window.laobosDesktop.browserOps.stop() : window.laobosDesktop.browserOps.start())); } catch (reason) { setError(reason instanceof Error ? reason.message : String(reason)); } }; - const close = () => { setOpen(false); window.dispatchEvent(new CustomEvent("laobos:desktop-tool-closed", { detail: { tool: "browser" } })); }; - if (!open) return null; - return h("section", { className: "lbs-browser-panel", role: "dialog", "aria-label": "浏览器预览" }, - h("header", { className: "lbs-browser-toolbar" }, h("button", { disabled: !state.canGoBack, onClick: () => action("back") }, "←"), h("button", { disabled: !state.canGoForward, onClick: () => action("forward") }, "→"), h("button", { onClick: () => action(state.loading ? "stop" : "reload") }, state.loading ? "停止" : "刷新"), h("input", { className: "lbs-browser-address", value: address, onChange: (event) => setAddress(event.target.value), onKeyDown: (event) => { if (event.key === "Enter") void navigate(); }, "aria-label": "浏览器地址" }), h("button", { onClick: navigate }, "打开"), h("div", { className: "lbs-browser-ops" }, h("button", { onClick: toggleOps }, ops.state === "running" ? "停止 BrowserOps" : "启动 BrowserOps"), h("span", { title: ops.message }, ops.message || ops.state)), h("button", { onClick: close }, "关闭")), - error ? h("div", { className: "lbs-browser-error" }, error) : null, - h("div", { className: "lbs-browser-viewport", ref: viewport }), - ); +/* eslint-disable @next/next/no-assign-module-variable -- generated DSH module factory */ +(() => { + // packages/laobos-browserops/src/client.jsx + window.__ModuleLoader__.load({ + id: "@laobos/dsh-browserops", + factory: (require2) => { + var module = { exports: {} }; + var exports = module.exports; + Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); + const React = require2("react"); + const { useEffect, useRef, useState } = React; + const css = ` + .lbs-browser-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060}.lbs-browser-toolbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:6px;min-height:52px;padding:0 10px}.lbs-browser-toolbar button{align-items:center;appearance:none;background:transparent;border:0;border-radius:7px;color:inherit;cursor:pointer;display:inline-flex;font:inherit;font-size:12px;height:31px;justify-content:center;padding:0 9px}.lbs-browser-toolbar button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-browser-toolbar button:disabled{cursor:not-allowed;opacity:.38}.lbs-browser-nav-button{font-size:17px!important;padding:0!important;width:31px}.lbs-browser-address-shell{align-items:center;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;display:flex;flex:1;min-width:110px;padding-left:9px}.lbs-browser-address-icon{color:var(--dsw-alias-label-tertiary);font-size:11px}.lbs-browser-address{appearance:none;background:transparent;border:0;color:inherit;flex:1;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;height:32px;min-width:80px;outline:0;padding:0 8px}.lbs-browser-address-shell:focus-within{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px rgba(92,117,255,.12)}.lbs-browser-open{background:var(--dsw-alias-interactive-bg-primary)!important;color:var(--dsw-alias-label-on-primary)!important}.lbs-browser-ops{align-items:center;border-left:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;margin-left:3px;padding-left:9px}.lbs-browser-ops-state{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;font-size:10px;gap:5px;max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-browser-ops-state:before{background:var(--dsw-alias-label-quaternary);border-radius:50%;content:"";height:6px;width:6px}.lbs-browser-ops-state[data-state=running]:before,.lbs-browser-ops-state[data-state=external]:before{background:#2a9b67}.lbs-browser-ops-state[data-state=starting]:before,.lbs-browser-ops-state[data-state=stopping]:before{background:#d6a84b}.lbs-browser-ops-state[data-state=error]:before{background:#d94b4b}.lbs-browser-error{align-items:center;background:rgba(218,70,70,.1);border-bottom:1px solid rgba(218,70,70,.18);color:#d94b4b;display:flex;font-size:12px;gap:10px;line-height:1.45;padding:8px 12px}.lbs-browser-error span{flex:1}.lbs-browser-error button{background:transparent;border:1px solid currentColor;border-radius:6px;color:inherit;cursor:pointer;font:11px/25px inherit;padding:0 8px}.lbs-browser-viewport{flex:1;min-height:0}.lbs-browser-close{margin-left:2px}@media(max-width:980px){.lbs-browser-ops-state{display:none}}@media(max-width:850px){.lbs-browser-panel{left:0;right:0}.lbs-browser-toolbar{flex-wrap:wrap;padding:7px 9px}.lbs-browser-address-shell{order:3;width:calc(100% - 72px)}.lbs-browser-open{order:3}.lbs-browser-ops{border-left:0;margin-left:auto}.lbs-browser-viewport{min-height:300px}} + `; + if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-browserops"]')) { + const style = document.createElement("style"); + style.dataset.pluginCss = "@laobos/dsh-browserops"; + style.textContent = css; + document.head.append(style); + } + const messageOf = (reason) => String(reason instanceof Error ? reason.message : reason).replace(/^Error invoking remote method '[^']+': Error:\s*/u, ""); + function BrowserPanel() { + const [open, setOpen] = useState(false); + const [address, setAddress] = useState(""); + const [state, setState] = useState({}); + const [ops, setOps] = useState({ state: "stopped", message: "BrowserOps 未启动" }); + const [error, setError] = useState(""); + const viewport = useRef(null); + const addressInput = useRef(null); + const addressRef = useRef(address); + useEffect(() => { + addressRef.current = address; + }, [address]); + const applyBrowserState = (value = {}) => { + setState(value); + if (value.url) setAddress(value.url); + setError(value.error || ""); + }; + useEffect(() => { + const show = (event) => { + if (event.detail?.tool === "close") { + setOpen(false); + return; + } + if (event.detail?.tool !== "browser") return; + setOpen(true); + setError(""); + }; + window.addEventListener("laobos:open-desktop-tool", show); + return () => window.removeEventListener("laobos:open-desktop-tool", show); + }, []); + useEffect(() => { + if (!open || !window.laobosDesktop?.capabilities?.browserPreview) return void 0; + let disposed = false; + const sync = () => { + if (!viewport.current || disposed) return; + const rect = viewport.current.getBoundingClientRect(); + void window.laobosDesktop.browser.setBounds({ x: rect.left, y: rect.top, width: rect.width, height: rect.height }); + }; + const observer = new ResizeObserver(sync); + observer.observe(viewport.current); + window.addEventListener("resize", sync); + const offState = window.laobosDesktop.browser.onState(applyBrowserState); + const offOps = window.laobosDesktop.browserOps.onState(setOps); + void window.laobosDesktop.browser.show(true).then((value) => { + applyBrowserState(value); + sync(); + }).catch((reason) => setError(messageOf(reason))); + void window.laobosDesktop.browserOps.status().then(setOps).catch((reason) => setOps({ state: "error", message: messageOf(reason) })); + const focusAddress = (event) => { + if (!(event.metaKey || event.ctrlKey) || event.key.toLowerCase() !== "l") return; + event.preventDefault(); + addressInput.current?.focus(); + addressInput.current?.select(); + }; + window.addEventListener("keydown", focusAddress); + return () => { + disposed = true; + observer.disconnect(); + window.removeEventListener("resize", sync); + window.removeEventListener("keydown", focusAddress); + offState(); + offOps(); + void window.laobosDesktop.browser.show(false); + }; + }, [open]); + const navigate = async () => { + const target = addressRef.current.trim(); + if (!target) { + addressInput.current?.focus(); + return; + } + try { + setError(""); + applyBrowserState(await window.laobosDesktop.browser.navigate(target)); + } catch (reason) { + setError(messageOf(reason)); + } + }; + const action = async (name) => { + try { + applyBrowserState(await window.laobosDesktop.browser.action(name)); + } catch (reason) { + setError(messageOf(reason)); + } + }; + const toggleOps = async () => { + if (["starting", "stopping", "external"].includes(ops.state)) return; + try { + setError(""); + setOps(await (ops.state === "running" ? window.laobosDesktop.browserOps.stop() : window.laobosDesktop.browserOps.start())); + } catch (reason) { + setError(messageOf(reason)); + } + }; + const close = () => { + setOpen(false); + window.dispatchEvent(new CustomEvent("laobos:desktop-tool-closed", { detail: { tool: "browser" } })); + }; + if (!open) return null; + const opsLabel = ops.state === "running" ? "停止 BrowserOps" : ops.state === "external" ? "外部 BrowserOps" : ops.state === "starting" ? "正在启动…" : ops.state === "stopping" ? "正在停止…" : "启动 BrowserOps"; + return /* @__PURE__ */ React.createElement("section", { className: "lbs-browser-panel", role: "dialog", "aria-label": "内置浏览器" }, /* @__PURE__ */ React.createElement("header", { className: "lbs-browser-toolbar" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-browser-nav-button", disabled: !state.canGoBack, onClick: () => action("back"), title: "后退" }, "←"), /* @__PURE__ */ React.createElement("button", { className: "lbs-browser-nav-button", disabled: !state.canGoForward, onClick: () => action("forward"), title: "前进" }, "→"), /* @__PURE__ */ React.createElement("button", { className: "lbs-browser-nav-button", onClick: () => action(state.loading ? "stop" : "reload"), title: state.loading ? "停止加载" : "刷新" }, state.loading ? "×" : "↻"), /* @__PURE__ */ React.createElement("label", { className: "lbs-browser-address-shell" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-browser-address-icon" }, "HTTP"), /* @__PURE__ */ React.createElement("input", { ref: addressInput, className: "lbs-browser-address", value: address, onChange: (event) => setAddress(event.target.value), onKeyDown: (event) => { + if (event.key === "Enter") void navigate(); + }, placeholder: "输入地址,例如 localhost:5173", "aria-label": "浏览器地址" })), /* @__PURE__ */ React.createElement("button", { className: "lbs-browser-open", disabled: !address.trim(), onClick: navigate }, "打开"), /* @__PURE__ */ React.createElement("div", { className: "lbs-browser-ops" }, /* @__PURE__ */ React.createElement("button", { disabled: ["starting", "stopping", "external"].includes(ops.state), onClick: toggleOps }, opsLabel), /* @__PURE__ */ React.createElement("span", { className: "lbs-browser-ops-state", "data-state": ops.state, title: ops.message }, ops.message || ops.state)), /* @__PURE__ */ React.createElement("button", { className: "lbs-browser-close", onClick: close }, "关闭")), error ? /* @__PURE__ */ React.createElement("div", { className: "lbs-browser-error" }, /* @__PURE__ */ React.createElement("span", null, error), /* @__PURE__ */ React.createElement("button", { type: "button", disabled: !address.trim(), onClick: navigate }, "重试")) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-browser-viewport", ref: viewport })); + } + const inject = ["slots"]; + function apply(ctx) { + ctx.slots.inject("shell.overlay", () => ctx.slots.register({ name: "shell.overlay", id: "laobos-browserops", order: 41 }, BrowserPanel)); + } + exports.apply = apply; + exports.inject = inject; + return module.exports; } - const inject = ["slots"]; - function apply(ctx) { ctx.slots.inject("shell.overlay", () => ctx.slots.register({ name: "shell.overlay", id: "laobos-browserops", order: 41 }, BrowserPanel)); } - exports.apply = apply; exports.inject = inject; return module.exports; - }, -}); + }); +})(); diff --git a/packages/laobos-browserops/src/client.jsx b/packages/laobos-browserops/src/client.jsx new file mode 100644 index 0000000..046ba71 --- /dev/null +++ b/packages/laobos-browserops/src/client.jsx @@ -0,0 +1,113 @@ +/* eslint-disable @next/next/no-assign-module-variable -- DSH browser plugins use a CommonJS-style module factory */ +window.__ModuleLoader__.load({ + id: "@laobos/dsh-browserops", + factory: (require) => { + var module = { exports: {} }; + var exports = module.exports; + Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); + const React = require("react"); + const { useEffect, useRef, useState } = React; + const css = ` + .lbs-browser-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060}.lbs-browser-toolbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:6px;min-height:52px;padding:0 10px}.lbs-browser-toolbar button{align-items:center;appearance:none;background:transparent;border:0;border-radius:7px;color:inherit;cursor:pointer;display:inline-flex;font:inherit;font-size:12px;height:31px;justify-content:center;padding:0 9px}.lbs-browser-toolbar button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-browser-toolbar button:disabled{cursor:not-allowed;opacity:.38}.lbs-browser-nav-button{font-size:17px!important;padding:0!important;width:31px}.lbs-browser-address-shell{align-items:center;background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:8px;display:flex;flex:1;min-width:110px;padding-left:9px}.lbs-browser-address-icon{color:var(--dsw-alias-label-tertiary);font-size:11px}.lbs-browser-address{appearance:none;background:transparent;border:0;color:inherit;flex:1;font:12px ui-monospace,SFMono-Regular,Menlo,monospace;height:32px;min-width:80px;outline:0;padding:0 8px}.lbs-browser-address-shell:focus-within{border-color:var(--dsw-alias-brand-primary);box-shadow:0 0 0 2px rgba(92,117,255,.12)}.lbs-browser-open{background:var(--dsw-alias-interactive-bg-primary)!important;color:var(--dsw-alias-label-on-primary)!important}.lbs-browser-ops{align-items:center;border-left:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;margin-left:3px;padding-left:9px}.lbs-browser-ops-state{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;font-size:10px;gap:5px;max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-browser-ops-state:before{background:var(--dsw-alias-label-quaternary);border-radius:50%;content:"";height:6px;width:6px}.lbs-browser-ops-state[data-state=running]:before,.lbs-browser-ops-state[data-state=external]:before{background:#2a9b67}.lbs-browser-ops-state[data-state=starting]:before,.lbs-browser-ops-state[data-state=stopping]:before{background:#d6a84b}.lbs-browser-ops-state[data-state=error]:before{background:#d94b4b}.lbs-browser-error{align-items:center;background:rgba(218,70,70,.1);border-bottom:1px solid rgba(218,70,70,.18);color:#d94b4b;display:flex;font-size:12px;gap:10px;line-height:1.45;padding:8px 12px}.lbs-browser-error span{flex:1}.lbs-browser-error button{background:transparent;border:1px solid currentColor;border-radius:6px;color:inherit;cursor:pointer;font:11px/25px inherit;padding:0 8px}.lbs-browser-viewport{flex:1;min-height:0}.lbs-browser-close{margin-left:2px}@media(max-width:980px){.lbs-browser-ops-state{display:none}}@media(max-width:850px){.lbs-browser-panel{left:0;right:0}.lbs-browser-toolbar{flex-wrap:wrap;padding:7px 9px}.lbs-browser-address-shell{order:3;width:calc(100% - 72px)}.lbs-browser-open{order:3}.lbs-browser-ops{border-left:0;margin-left:auto}.lbs-browser-viewport{min-height:300px}} + `; + if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-browserops"]')) { + const style = document.createElement("style"); + style.dataset.pluginCss = "@laobos/dsh-browserops"; + style.textContent = css; + document.head.append(style); + } + + const messageOf = (reason) => String(reason instanceof Error ? reason.message : reason).replace(/^Error invoking remote method '[^']+': Error:\s*/u, ""); + + function BrowserPanel() { + const [open, setOpen] = useState(false); + const [address, setAddress] = useState(""); + const [state, setState] = useState({}); + const [ops, setOps] = useState({ state: "stopped", message: "BrowserOps 未启动" }); + const [error, setError] = useState(""); + const viewport = useRef(null); + const addressInput = useRef(null); + const addressRef = useRef(address); + useEffect(() => { addressRef.current = address; }, [address]); + const applyBrowserState = (value = {}) => { + setState(value); + if (value.url) setAddress(value.url); + setError(value.error || ""); + }; + + useEffect(() => { + const show = (event) => { + if (event.detail?.tool === "close") { setOpen(false); return; } + if (event.detail?.tool !== "browser") return; + setOpen(true); setError(""); + }; + window.addEventListener("laobos:open-desktop-tool", show); + return () => window.removeEventListener("laobos:open-desktop-tool", show); + }, []); + + useEffect(() => { + if (!open || !window.laobosDesktop?.capabilities?.browserPreview) return undefined; + let disposed = false; + const sync = () => { + if (!viewport.current || disposed) return; + const rect = viewport.current.getBoundingClientRect(); + void window.laobosDesktop.browser.setBounds({ x: rect.left, y: rect.top, width: rect.width, height: rect.height }); + }; + const observer = new ResizeObserver(sync); + observer.observe(viewport.current); + window.addEventListener("resize", sync); + const offState = window.laobosDesktop.browser.onState(applyBrowserState); + const offOps = window.laobosDesktop.browserOps.onState(setOps); + void window.laobosDesktop.browser.show(true).then((value) => { applyBrowserState(value); sync(); }).catch((reason) => setError(messageOf(reason))); + void window.laobosDesktop.browserOps.status().then(setOps).catch((reason) => setOps({ state: "error", message: messageOf(reason) })); + const focusAddress = (event) => { + if (!(event.metaKey || event.ctrlKey) || event.key.toLowerCase() !== "l") return; + event.preventDefault(); addressInput.current?.focus(); addressInput.current?.select(); + }; + window.addEventListener("keydown", focusAddress); + return () => { + disposed = true; observer.disconnect(); window.removeEventListener("resize", sync); window.removeEventListener("keydown", focusAddress); + offState(); offOps(); void window.laobosDesktop.browser.show(false); + }; + }, [open]); + + const navigate = async () => { + const target = addressRef.current.trim(); + if (!target) { addressInput.current?.focus(); return; } + try { setError(""); applyBrowserState(await window.laobosDesktop.browser.navigate(target)); } + catch (reason) { setError(messageOf(reason)); } + }; + const action = async (name) => { + try { applyBrowserState(await window.laobosDesktop.browser.action(name)); } + catch (reason) { setError(messageOf(reason)); } + }; + const toggleOps = async () => { + if (["starting", "stopping", "external"].includes(ops.state)) return; + try { setError(""); setOps(await (ops.state === "running" ? window.laobosDesktop.browserOps.stop() : window.laobosDesktop.browserOps.start())); } + catch (reason) { setError(messageOf(reason)); } + }; + const close = () => { setOpen(false); window.dispatchEvent(new CustomEvent("laobos:desktop-tool-closed", { detail: { tool: "browser" } })); }; + if (!open) return null; + const opsLabel = ops.state === "running" ? "停止 BrowserOps" : ops.state === "external" ? "外部 BrowserOps" : ops.state === "starting" ? "正在启动…" : ops.state === "stopping" ? "正在停止…" : "启动 BrowserOps"; + return
+
+ + + + + +
{ops.message || ops.state}
+ +
+ {error ?
{error}
: null} +
+
; + } + + const inject = ["slots"]; + function apply(ctx) { ctx.slots.inject("shell.overlay", () => ctx.slots.register({ name: "shell.overlay", id: "laobos-browserops", order: 41 }, BrowserPanel)); } + exports.apply = apply; + exports.inject = inject; + return module.exports; + }, +}); diff --git a/packages/laobos-conversation-tools/lib/client.js b/packages/laobos-conversation-tools/lib/client.js index d181bed..3a7e357 100644 --- a/packages/laobos-conversation-tools/lib/client.js +++ b/packages/laobos-conversation-tools/lib/client.js @@ -17,6 +17,7 @@ window.__ModuleLoader__.load({ .lbs-conv-menu{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:10px;box-shadow:var(--dsw-shadow-lv2);display:flex;flex-direction:column;gap:2px;min-width:168px;padding:5px;position:absolute;right:0;top:30px;z-index:2147483100} .lbs-conv-menu.fixed{bottom:auto;box-sizing:border-box;max-height:calc(100vh - 16px);max-width:calc(100vw - 16px);overflow-y:auto;position:fixed;right:auto}.lbs-conv-menu button{appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;font:inherit;font-size:13px;line-height:30px;padding:0 9px;text-align:left;white-space:nowrap}.lbs-conv-menu button:hover,.lbs-conv-menu button:focus-visible{background:var(--dsw-alias-interactive-bg-hover);outline:none}.lbs-conv-menu button.danger{color:#d94b4b}.lbs-conv-menu button:disabled{cursor:not-allowed;opacity:.45} .lbs-conv-inline-action{align-items:center;appearance:none;background:transparent;border:0;border-radius:28px;color:var(--dsw-alias-label-tertiary);cursor:pointer;display:inline-flex;height:28px;justify-content:center;padding:6px;width:28px}.lbs-conv-inline-action:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-secondary)}.lbs-conv-inline-action:disabled{background:transparent;color:var(--dsw-alias-label-tertiary);cursor:not-allowed;opacity:.4}.lbs-conv-inline-action svg{display:block} + [data-chat-flow-kind="context"]{display:none!important} [data-time-hover-root]:not([data-turn-tail]){align-items:flex-end!important;flex-direction:column!important;gap:6px!important} .lbs-conv-overlay{align-items:center;background:rgba(0,0,0,.28);display:flex;inset:0;justify-content:center;padding:24px;position:fixed;z-index:2147483200}.lbs-conv-dialog{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:14px;box-shadow:var(--dsw-shadow-lv3);box-sizing:border-box;max-width:620px;padding:18px;width:100%}.lbs-conv-dialog h2{font-size:17px;margin:0 0 5px}.lbs-conv-dialog p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;margin:0 0 12px}.lbs-conv-dialog textarea{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l1);border-radius:9px;box-sizing:border-box;color:inherit;font:inherit;line-height:21px;min-height:150px;padding:10px;resize:vertical;width:100%}.lbs-conv-dialog footer{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}.lbs-conv-primary,.lbs-conv-secondary{appearance:none;border:0;border-radius:8px;cursor:pointer;font:inherit;font-size:13px;height:34px;padding:0 13px}.lbs-conv-primary{background:var(--dsw-alias-interactive-bg-primary);color:var(--dsw-alias-label-on-primary)}.lbs-conv-secondary{background:var(--dsw-alias-interactive-bg-secondary);color:inherit}.lbs-conv-primary:disabled{cursor:not-allowed;opacity:.5}.lbs-conv-feedback{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:18px;max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap} [data-phase]>[data-slot="conversation.session.header"]>header{padding:6px 28px 6px 20px!important} @@ -48,10 +49,6 @@ window.__ModuleLoader__.load({ return { text, files, envelopes }; }; const appendFileEnvelopes = (text, envelopes) => [String(text || "").trim(), ...envelopes].filter(Boolean).join("\n"); - const escapeHtml = (value) => String(value ?? "") - .replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">") - .replaceAll('"', """).replaceAll("'", "'"); - function orderedNodes(snapshot) { return snapshot?.chat?.order ?.map((key) => snapshot.chat.nodes.get(key)) @@ -123,52 +120,388 @@ window.__ModuleLoader__.load({ await scopedConversation(ctx, sessionId).send(text); } - function assistantText(node) { - const blocks = node?.data?.blocks; - if (!Array.isArray(blocks)) return ""; - return blocks.filter((block) => block?.kind === "text").map((block) => block.text || "").join("\n").trim(); - } - - function conversationHtml(sessionId, title, snapshot) { - const rows = []; - for (const node of orderedNodes(snapshot)) { - const kind = node?.data?.kind; - if (kind === "user" || kind === "steering") { - const projected = contentProjection(node.data.content); - const fileRows = projected.files.map((file) => `
${escapeHtml(file.name)}${escapeHtml(file.path)}
`).join(""); - rows.push(`
用户
${projected.text ? `
${escapeHtml(projected.text).replaceAll("\n", "
")}
` : ""}${fileRows}
`); - } else if (kind === "assistant") { - const text = assistantText(node); - if (text) rows.push(`
劳博士
${escapeHtml(text).replaceAll("\n", "
")}
`); - } else if (kind === "turn-error" || kind === "retry" || kind === "turn-max-tokens") { - rows.push(`
运行记录:${escapeHtml(kind)}
${escapeHtml(cleanText(node?.data?.message || node?.data?.error || ""))}
`); - } else if (kind === "tool-result") { - rows.push(`
工具:${escapeHtml(node?.data?.name || "调用结果")}
${escapeHtml(cleanText(node?.data?.output || node?.data?.result || ""))}
`); + const EXPORT_ROOT_ID = "lbs-conversation-export-root"; + const nextFrame = () => new Promise((resolve) => requestAnimationFrame(resolve)); + + async function settleFrames(count = 3) { + for (let index = 0; index < count; index += 1) await nextFrame(); + } + + function visibleConversationScroll() { + const candidates = [...document.querySelectorAll("[data-conversation-scroll]")] + .filter((element) => !element.closest(`#${EXPORT_ROOT_ID}`)); + return candidates.find((element) => { + const box = element.getBoundingClientRect(); + return box.width > 0 && box.height > 0; + }) || candidates[0] || null; + } + + async function waitForCurrentSession(ctx, sessionId) { + const deadline = performance.now() + 10_000; + while (performance.now() < deadline) { + if (ctx.sessions.list.getSnapshot().current === sessionId) return; + await nextFrame(); + } + throw new Error("等待会话界面切换超时。 "); + } + + async function loadCompleteSnapshot(session) { + let snapshot = session.getSnapshot(); + let previousMarker = ""; + while (snapshot.hasMore) { + const marker = `${snapshot.chat.order[0] || ""}:${snapshot.chat.order.length}`; + if (marker === previousMarker) throw new Error("历史会话分页没有继续前进,无法保证完整导出。 "); + previousMarker = marker; + await session.loadOlder(); + snapshot = session.getSnapshot(); + } + return snapshot; + } + + async function waitForRenderedConversation(snapshot) { + await settleFrames(); + const scroll = visibleConversationScroll(); + if (!scroll) throw new Error("找不到当前会话的渲染区域。 "); + + // The Chat view has one keyed seat for every ordered DSH node. Other active + // views (for example Trajectory) do not expose these seats and are cloned as-is. + const expected = snapshot.chat.order; + if (scroll.querySelector("[data-chat-flow-key]") && expected.length > 0) { + const deadline = performance.now() + 10_000; + while (performance.now() < deadline) { + const rendered = new Set([...scroll.querySelectorAll("[data-chat-flow-key]")] + .map((element) => element.dataset.chatFlowKey)); + if (expected.every((key) => rendered.has(key))) break; + await nextFrame(); + } + const rendered = new Set([...scroll.querySelectorAll("[data-chat-flow-key]")] + .map((element) => element.dataset.chatFlowKey)); + if (!expected.every((key) => rendered.has(key))) { + throw new Error("会话历史尚未全部渲染,已停止导出以避免生成不完整文件。 "); + } + } + return scroll; + } + + function copyLiveElementState(source, clone) { + const originals = [source, ...source.querySelectorAll("*")]; + const copies = [clone, ...clone.querySelectorAll("*")]; + for (let index = 0; index < originals.length; index += 1) { + const original = originals[index]; + const copy = copies[index]; + if (original instanceof HTMLInputElement && copy instanceof HTMLInputElement) { + copy.value = original.value; + copy.checked = original.checked; + } else if (original instanceof HTMLTextAreaElement && copy instanceof HTMLTextAreaElement) { + copy.value = original.value; + copy.textContent = original.value; + } else if (original instanceof HTMLSelectElement && copy instanceof HTMLSelectElement) { + copy.value = original.value; + } else if (original instanceof HTMLImageElement && copy instanceof HTMLImageElement) { + copy.src = original.currentSrc || original.src; + copy.removeAttribute("srcset"); + copy.removeAttribute("loading"); + } else if (original instanceof HTMLCanvasElement && copy instanceof HTMLCanvasElement) { + try { + const image = document.createElement("img"); + image.src = original.toDataURL("image/png"); + image.className = copy.className; + image.style.cssText = copy.style.cssText; + const box = original.getBoundingClientRect(); + if (box.width > 0) image.style.width = `${box.width}px`; + if (box.height > 0) image.style.height = `${box.height}px`; + copy.replaceWith(image); + } catch { /* A tainted third-party canvas remains as an empty canvas. */ } + } else if (original instanceof HTMLVideoElement && copy instanceof HTMLVideoElement && original.videoWidth > 0) { + try { + const canvas = document.createElement("canvas"); + canvas.width = original.videoWidth; + canvas.height = original.videoHeight; + canvas.getContext("2d")?.drawImage(original, 0, 0); + const image = document.createElement("img"); + image.src = canvas.toDataURL("image/png"); + image.className = copy.className; + image.style.cssText = copy.style.cssText; + copy.replaceWith(image); + } catch { /* Keep the cloned video/poster when a frame cannot be read. */ } + } + } + } + + function cloneRenderedElement(source) { + const clone = source.cloneNode(true); + copyLiveElementState(source, clone); + clone.querySelectorAll(".lbs-conv-actions,.lbs-conv-menu,.lbs-conv-overlay") + .forEach((element) => element.remove()); + clone.querySelectorAll("script").forEach((element) => element.remove()); + for (const element of [clone, ...clone.querySelectorAll("*")]) { + for (const attribute of [...element.attributes]) { + if (attribute.name.toLowerCase().startsWith("on")) element.removeAttribute(attribute.name); } } - const exportedAt = new Date().toLocaleString("zh-CN"); - return `${escapeHtml(title)}

${escapeHtml(title)}

会话 ${escapeHtml(sessionId)} · 导出于 ${escapeHtml(exportedAt)}
${rows.join("")}
由劳博士导出
`; + return clone; + } + + async function expandFoldedContent(scroll) { + const clicked = []; + const attempted = new WeakSet(); + const initialStates = new Map(); + + for (let round = 0; round < 20; round += 1) { + let changed = false; + for (const control of scroll.querySelectorAll("[aria-expanded]")) { + if (!initialStates.has(control)) { + initialStates.set(control, control.getAttribute("aria-expanded") === "true"); + } + } + const controls = [...scroll.querySelectorAll('[aria-expanded="false"]')] + .filter((element) => !attempted.has(element) + && !element.hasAttribute("disabled") + && !element.hasAttribute("aria-haspopup")); + for (const control of controls) { + attempted.add(control); + control.click(); + clicked.push(control); + changed = true; + await settleFrames(2); + } + if (!changed) break; + await settleFrames(2); + } + + return { + initialStates, + restore: async () => { + for (const control of clicked.reverse()) { + if (control.isConnected && control.getAttribute("aria-expanded") === "true") control.click(); + } + await settleFrames(2); + }, + }; + } + + function annotateFoldedContent(scroll, initialStates) { + const annotated = []; + const seen = new Set(); + let index = 0; + for (const control of scroll.querySelectorAll('[aria-expanded="true"]')) { + const toggle = control.closest("[data-disclosure-row]") || control; + if (seen.has(toggle)) continue; + const controlledId = control.getAttribute("aria-controls"); + const controlled = controlledId ? document.getElementById(controlledId) : null; + const panels = controlled && scroll.contains(controlled) ? [controlled] : []; + if (panels.length === 0) { + for (let panel = toggle.nextElementSibling; panel; panel = panel.nextElementSibling) panels.push(panel); + } + if (panels.length === 0) continue; + seen.add(toggle); + const id = `fold-${index += 1}`; + const initiallyOpen = initialStates.get(control) ?? initialStates.get(toggle) ?? true; + toggle.dataset.lbsExportToggle = id; + toggle.dataset.lbsExportInitial = initiallyOpen ? "expanded" : "collapsed"; + const addedTabIndex = !toggle.hasAttribute("tabindex"); + if (addedTabIndex) toggle.tabIndex = 0; + for (const panel of panels) { + panel.dataset.lbsExportPanel = id; + panel.dataset.lbsExportInitial = initiallyOpen ? "expanded" : "collapsed"; + } + annotated.push({ toggle, panels, addedTabIndex }); + } + return () => { + for (const { toggle, panels, addedTabIndex } of annotated) { + delete toggle.dataset.lbsExportToggle; + delete toggle.dataset.lbsExportInitial; + if (addedTabIndex) toggle.removeAttribute("tabindex"); + for (const panel of panels) { + delete panel.dataset.lbsExportPanel; + delete panel.dataset.lbsExportInitial; + } + } + }; + } + + function buildExportSnapshot(scroll) { + const phase = scroll.closest("[data-phase]"); + const sessionView = [...scroll.children] + .find((element) => !element.matches("[data-composer-seat]")); + if (!sessionView) throw new Error("找不到当前会话内容。 "); + + const root = document.createElement("main"); + root.id = EXPORT_ROOT_ID; + root.setAttribute("data-conversation-export", ""); + const shell = document.createElement("article"); + shell.className = [phase?.className || "", "lbs-conversation-export-shell"].filter(Boolean).join(" "); + if (phase?.dataset.phase) shell.dataset.phase = phase.dataset.phase; + + const header = phase?.querySelector(':scope > [data-slot="conversation.session.header"]'); + if (header) shell.append(cloneRenderedElement(header)); + + const scrollClone = document.createElement("div"); + scrollClone.className = scroll.className; + scrollClone.setAttribute("data-conversation-scroll", ""); + scrollClone.append(cloneRenderedElement(sessionView)); + shell.append(scrollClone); + root.append(shell); + + const phaseStyle = phase ? getComputedStyle(phase) : null; + for (const property of [ + "--dsh-chat-content-width", + "--dsh-composer-card-max-width", + "--dsh-composer-side-clearance", + "--dsh-composer-dock-inset", + ]) { + const value = phaseStyle?.getPropertyValue(property); + if (value) root.style.setProperty(property, value); + } + if (phaseStyle) { + root.style.color = phaseStyle.color; + root.style.background = phaseStyle.backgroundColor; + root.style.fontFamily = phaseStyle.fontFamily; + } + return root; + } + + function blobDataUrl(blob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.addEventListener("load", () => resolve(String(reader.result)), { once: true }); + reader.addEventListener("error", () => reject(reader.error), { once: true }); + reader.readAsDataURL(blob); + }); + } + + async function inlineImageAssets(root) { + await Promise.all([...root.querySelectorAll("img")].map(async (image) => { + const source = image.getAttribute("src"); + if (!source || source.startsWith("data:")) return; + try { + const response = await fetch(source); + if (!response.ok) throw new Error(`HTTP ${response.status}`); + image.src = await blobDataUrl(await response.blob()); + } catch (error) { + throw new Error(`图片资源无法内嵌,已停止导出:${error instanceof Error ? error.message : String(error)}`); + } + })); + } + + function stylesheetText() { + const chunks = []; + for (const sheet of document.styleSheets) { + try { + chunks.push([...sheet.cssRules].map((rule) => rule.cssText).join("\n")); + } catch { /* Cross-origin styles cannot be embedded; DSH plugin styles are same-origin. */ } + } + return chunks.join("\n"); + } + + const escapeHtml = (value) => String(value ?? "") + .replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">") + .replaceAll('"', """).replaceAll("'", "'"); + + function documentAttributes(element) { + return [...element.attributes] + .filter((attribute) => attribute.name === "class" + || attribute.name === "style" + || attribute.name === "lang" + || attribute.name === "dir" + || attribute.name.startsWith("data-")) + .map((attribute) => `${attribute.name}="${escapeHtml(attribute.value)}"`) + .join(" "); + } + + function standaloneConversationHtml(root, title) { + const styles = stylesheetText().replaceAll("*{box-sizing:border-box!important;height:auto!important;max-height:none!important;min-height:0!important;overflow:visible!important} + #${EXPORT_ROOT_ID} [data-conversation-scroll]{display:block!important;padding:0!important;scrollbar-gutter:auto!important} + #${EXPORT_ROOT_ID} [data-composer-seat],#${EXPORT_ROOT_ID} .lbs-conv-actions, + #${EXPORT_ROOT_ID} .lbs-conv-menu,#${EXPORT_ROOT_ID} .lbs-conv-overlay{display:none!important} + #${EXPORT_ROOT_ID} [data-lbs-export-toggle]{cursor:pointer} + #${EXPORT_ROOT_ID} [data-lbs-export-panel][data-lbs-export-initial="collapsed"], + #${EXPORT_ROOT_ID} [data-lbs-export-panel][hidden]{display:none!important} + #${EXPORT_ROOT_ID} img,#${EXPORT_ROOT_ID} svg,#${EXPORT_ROOT_ID} canvas{max-width:100%} + #${EXPORT_ROOT_ID} pre{max-width:100%;white-space:pre-wrap!important;overflow-wrap:anywhere} + #${EXPORT_ROOT_ID} table{max-width:100%;overflow-wrap:anywhere} + `; + const interactions = `(()=>{ + const root=document.getElementById(${JSON.stringify(EXPORT_ROOT_ID)}); + if(!root)return; + const apply=(toggle,open)=>{ + toggle.setAttribute("aria-expanded",String(open)); + toggle.dataset.lbsExportState=open?"expanded":"collapsed"; + const id=toggle.dataset.lbsExportToggle; + for(const panel of root.querySelectorAll("[data-lbs-export-panel]")){ + if(panel.dataset.lbsExportPanel!==id)continue; + panel.hidden=!open; + delete panel.dataset.lbsExportInitial; + } + }; + for(const toggle of root.querySelectorAll("[data-lbs-export-toggle]")){ + let open=toggle.dataset.lbsExportInitial!=="collapsed"; + apply(toggle,open); + delete toggle.dataset.lbsExportInitial; + const flip=(event)=>{event.preventDefault();event.stopPropagation();open=!open;apply(toggle,open);}; + toggle.addEventListener("click",flip); + toggle.addEventListener("keydown",(event)=>{if(event.key==="Enter"||event.key===" ")flip(event);}); + } + })();`; + return `${escapeHtml(title)}${root.outerHTML}`; + } + + function safeHtmlFileName(title) { + const sanitized = String(title || "劳博士会话") + .replace(/[\\/:*?"<>|\u0000-\u001f]/gu, "-") + .replace(/\s+/gu, " ") + .slice(0, 120) + .replace(/[. ]+$/gu, ""); + return `${sanitized || "劳博士会话"}.html`; + } + + function downloadHtml(html, title) { + const url = URL.createObjectURL(new Blob([html], { type: "text/html;charset=utf-8" })); + const anchor = document.createElement("a"); + anchor.href = url; + anchor.download = safeHtmlFileName(title); + anchor.style.display = "none"; + document.body.append(anchor); + anchor.click(); + anchor.remove(); + setTimeout(() => URL.revokeObjectURL(url), 60_000); + return { canceled: false, browserDownload: true }; } async function exportConversation(ctx, sessionId) { const bridge = window.laobosDesktop; - if (!bridge?.capabilities?.conversationPdf) throw new Error("PDF 导出仅在桌面版中可用。 "); + if (ctx.sessions.list.getSnapshot().current !== sessionId) ctx.sessions.open(sessionId); + await waitForCurrentSession(ctx, sessionId); const session = ctx.sessions.binding(sessionId)?.session; if (!session) throw new Error("会话尚未载入。 "); await session.open(); - let snapshot = session.getSnapshot(); - let pages = 0; - while (snapshot.hasMore && pages < 500) { - await session.loadOlder(); - snapshot = session.getSnapshot(); - pages += 1; - } + const snapshot = await loadCompleteSnapshot(session); + const scroll = await waitForRenderedConversation(snapshot); const row = ctx.sessions.list.getSnapshot().byId[sessionId]; const title = cleanText(row?.title) || "劳博士会话"; - return bridge.pdf.exportConversation({ - html: conversationHtml(sessionId, title, snapshot), - suggestedName: title, - }); + const folded = await expandFoldedContent(scroll); + const removeAnnotations = annotateFoldedContent(scroll, folded.initialStates); + try { + const root = buildExportSnapshot(scroll); + await inlineImageAssets(root); + const html = standaloneConversationHtml(root, title); + if (bridge?.capabilities?.conversationHtml) { + return await bridge.html.exportConversation({ html, suggestedName: title }); + } + return downloadHtml(html, title); + } finally { + removeAnnotations(); + await folded.restore(); + } } async function deleteConversation(ctx, sessionId) { @@ -280,7 +613,7 @@ window.__ModuleLoader__.load({ h("button", { className: "lbs-conv-action-button", type: "button", disabled: Boolean(busy), "aria-label": "会话操作", onClick: () => setOpen((value) => !value) }, h(Primitives.IconEllipsisOutline16, { size: 16 })), open ? h("div", { className: "lbs-conv-menu", role: "menu" }, - h("button", { onClick: () => run("导出", () => exportConversation(module.ctx, sessionId)) }, "导出会话为 PDF"), + h("button", { onClick: () => run("导出", () => exportConversation(module.ctx, sessionId)) }, "导出完整会话为 HTML"), h("button", { className: "danger", onClick: () => run("删除", () => deleteConversation(module.ctx, sessionId)) }, "删除会话"), ) : null, editing ? h(EditDialog, { initialValue: initialText, allowEmpty: projection.envelopes.length > 0, busy: busy === "发送", onCancel: () => setEditing(false), onConfirm: (value) => run("发送", async () => { await editAndResend(module.ctx, sessionId, appendFileEnvelopes(value, projection.envelopes)); setEditing(false); }) }) : null, @@ -316,17 +649,48 @@ window.__ModuleLoader__.load({ window.dispatchEvent(new CustomEvent("laobos:open-desktop-tool", { detail: { tool, cwd } })); } + function defaultTitleForPath(value, fallback) { + const title = String(value || "").replace(/[/\\]+$/u, "").split(/[/\\]/u).pop()?.trim(); + return title || fallback; + } + + async function revealInSystemFileManager(cwd) { + if (!cwd) throw new Error("当前项目没有可定位的本地路径。 "); + const reveal = window.laobosDesktop?.workspace?.reveal; + if (!reveal) throw new Error("系统文件管理器仅在桌面版中可用。 "); + await reveal({ root: cwd, path: "." }); + } + + async function renameWorkspace(item) { + const input = window.prompt("工作区名称(清空可恢复目录名称)", item.title); + if (input === null) return; + const title = input.trim() || defaultTitleForPath(item.path, item.workspaceId); + await module.ctx.workspaces.rename(item.workspaceId, title); + } + + async function renameSession(id) { + const summary = module.ctx.sessions.list.getSnapshot().byId[id]; + const session = module.ctx.sessions.binding(id)?.session; + if (!session) return; + const input = window.prompt("会话名称(清空可恢复默认名称)", summary?.title || ""); + if (input === null) return; + const title = input.trim() || defaultTitleForPath(summary?.cwd, id); + const result = await session.rename(title); + if (!result.ok) throw new Error(result.error.message); + } + function ContextMenuBridge() { const [menu, setMenu] = useState(null); useEffect(() => { const onContextMenu = (event) => { + if (event.target instanceof Element && event.target.closest(".lbs-workbench")) return; const row = event.target instanceof Element ? event.target.closest('[role="treeitem"]') : null; if (!row || !row.closest('[role="tree"]')) return; const workspace = row.hasAttribute("aria-expanded") ? resolveWorkspace(module.ctx, row) : undefined; const sessionId = workspace ? undefined : resolveSessionId(module.ctx, row); if (!workspace && !sessionId) return; event.preventDefault(); event.stopPropagation(); - const width = 210; const height = workspace ? 170 : 144; + const width = 240; const height = workspace ? 206 : 176; setMenu({ kind: workspace ? "workspace" : "session", workspace, sessionId, x: Math.min(event.clientX, window.innerWidth - width - 8), y: Math.min(event.clientY, window.innerHeight - height - 8) }); }; const close = () => setMenu(null); @@ -347,15 +711,18 @@ window.__ModuleLoader__.load({ h("button", { onClick: act(() => openDesktopTool("files", item.path)) }, "文件管理器"), h("button", { onClick: act(() => openDesktopTool("git", item.path)) }, "版本中心"), h("button", { onClick: act(() => openDesktopTool("terminal", item.path)) }, "在终端中打开"), - h("button", { onClick: act(async () => { const title = window.prompt("工作区名称", item.title); if (title?.trim()) await module.ctx.workspaces.rename(item.workspaceId, title.trim()); }) }, "重命名工作区"), + h("button", { onClick: act(() => revealInSystemFileManager(item.path)) }, "在系统文件管理器中打开"), + h("button", { onClick: act(() => renameWorkspace(item)) }, "重命名工作区"), h("button", { className: "danger", onClick: act(async () => { if (window.confirm(`从侧栏移除“${item.title}”?\n不会删除目录和会话。`)) await module.ctx.workspaces.delete(item.workspaceId); }) }, "从侧栏移除"), ); } const id = menu.sessionId; + const cwd = module.ctx.sessions.list.getSnapshot().byId[id]?.cwd; return h("div", { className: "lbs-conv-menu fixed", style, role: "menu", onPointerDown: (event) => event.stopPropagation() }, h("button", { onClick: act(() => module.ctx.sessions.open(id)) }, "打开会话"), - h("button", { onClick: act(() => exportConversation(module.ctx, id)) }, "导出为 PDF"), - h("button", { onClick: act(async () => { const session = module.ctx.sessions.binding(id)?.session; const current = module.ctx.sessions.list.getSnapshot().byId[id]?.title || ""; const title = window.prompt("会话名称", current); if (!title?.trim() || !session) return; const result = await session.rename(title.trim()); if (!result.ok) throw new Error(result.error.message); }) }, "重命名会话"), + h("button", { onClick: act(() => revealInSystemFileManager(cwd)) }, "在系统文件管理器中打开"), + h("button", { onClick: act(() => exportConversation(module.ctx, id)) }, "导出为 HTML"), + h("button", { onClick: act(() => renameSession(id)) }, "重命名会话"), h("button", { className: "danger", onClick: act(() => deleteConversation(module.ctx, id)) }, "删除会话"), ); } diff --git a/packages/laobos-file-attachments/lib/client.js b/packages/laobos-file-attachments/lib/client.js index c1320f1..2e91f2d 100644 --- a/packages/laobos-file-attachments/lib/client.js +++ b/packages/laobos-file-attachments/lib/client.js @@ -130,27 +130,61 @@ ${CLOSE_TAG}`; }, [sessionId]); return pendingFiles(sessionId); } + function selectedModelSupportsImages(ctx, sessionId) { + try { + const state = ctx.modelDirectories.directoryFor(sessionId).store.getSnapshot(); + const current = state.current; + if (!current) return void 0; + const model = state.groups.find((group) => group.id === current.provider)?.models.find((candidate) => candidate.id === current.model); + if (!Array.isArray(model?.inputModalities)) return void 0; + return model.inputModalities.includes("image"); + } catch { + return void 0; + } + } + async function persistImagesAsFiles(sessionId, images) { + const bridge = window.laobosDesktop; + if (!bridge?.capabilities?.fileAttachments || !bridge.uploads?.pasteFiles) { + throw new Error("当前模型不支持图片输入,且普通文件上传服务不可用。 "); + } + const payloads = await Promise.all(images.map(async (image) => ({ + name: image.file.name || "image", + mimeType: image.file.type || "application/octet-stream", + size: image.file.size, + bytes: new Uint8Array(await image.file.arrayBuffer()) + }))); + const result = await bridge.uploads.pasteFiles(sessionId, payloads); + return (result?.files || []).map(fileFromReference); + } function installFileSendChannel(ctx) { const conversation = ctx.get("conversation"); if (!conversation?.sendSession) throw new Error("对话发送服务尚未就绪。 "); const original = conversation.sendSession; const routed = async function routedSendSession(session, text, imageIds, mode) { - const files = pendingFiles(session.sessionId); + const pending = pendingFiles(session.sessionId); + const downgradeImages = imageIds.length > 0 && selectedModelSupportsImages(ctx, session.sessionId) !== true; + const images = downgradeImages ? conversation.draftImages(imageIds) : []; + if (downgradeImages && images.length !== imageIds.length) { + throw new Error("一个或多个待发送图片已经失效。 "); + } + const converted = downgradeImages ? await persistImagesAsFiles(session.sessionId, images) : []; + const files = [...pending, ...converted]; const envelopes = files.map(serializeFileEnvelope).join("\n\n"); const prompt = text && envelopes ? `${text} ${envelopes}` : text || envelopes; - if (files.length) { - const sent = new Set(files.map(fileIdentity)); + if (pending.length) { + const sent = new Set(pending.map(fileIdentity)); replacePendingFiles(session.sessionId, pendingFiles(session.sessionId).filter((file) => !sent.has(fileIdentity(file)))); } try { - await original.call(conversation, session, prompt, imageIds, mode); + await original.call(conversation, session, prompt, downgradeImages ? [] : imageIds, mode); + if (downgradeImages) conversation.releaseDraftImages(images); } catch (error) { - if (files.length) { + if (pending.length) { const current = pendingFiles(session.sessionId); const currentIds = new Set(current.map(fileIdentity)); - replacePendingFiles(session.sessionId, [...files.filter((file) => !currentIds.has(fileIdentity(file))), ...current]); + replacePendingFiles(session.sessionId, [...pending.filter((file) => !currentIds.has(fileIdentity(file))), ...current]); } throw error; } @@ -175,6 +209,29 @@ ${envelopes}` : text || envelopes; if (level === "error") window.alert(message); } } + async function writeClipboard(text) { + try { + if (window.laobosDesktop?.clipboard?.writeText) { + const result = await window.laobosDesktop.clipboard.writeText(text); + if (result?.written) return true; + } + } catch { + } + return Primitives.writeClipboard(text); + } + function useClipboardFeedback() { + const [status, setStatus] = useState("idle"); + const resetTimer = useRef(); + useEffect(() => () => window.clearTimeout(resetTimer.current), []); + const copy = async (text) => { + window.clearTimeout(resetTimer.current); + const written = await writeClipboard(text); + setStatus(written ? "copied" : "failed"); + resetTimer.current = window.setTimeout(() => setStatus("idle"), written ? 1800 : 3e3); + return written; + }; + return { status, copy }; + } function imageFileFromDesktop(image) { const source = image?.bytes?.type === "Buffer" ? image.bytes.data : image?.bytes; const bytes = source instanceof Uint8Array ? source : new Uint8Array(source || []); @@ -200,37 +257,50 @@ ${envelopes}` : text || envelopes; const bridge = window.laobosDesktop; const unavailable = !bridge?.capabilities?.fileAttachments || busy || input?.phase === "adjudicating" || input?.phase === "submitting"; useEffect(() => { - const paste = async (event) => { - if (!event.target?.closest?.("[data-composer-card]")) return; - const pasted = Array.from(event.clipboardData?.items || []).filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter(Boolean); - if (!pasted.length || pasted.every((file) => NATIVE_IMAGE_TYPES.has(file.type))) return; + const routeFiles = async (files) => { + const images = files.filter((file) => NATIVE_IMAGE_TYPES.has(file.type)); + const ordinary = files.filter((file) => !NATIVE_IMAGE_TYPES.has(file.type)); + const payloads = await Promise.all(ordinary.map(async (file) => ({ + name: file.name, + mimeType: file.type, + size: file.size, + bytes: new Uint8Array(await file.arrayBuffer()) + }))); + const result = await bridge.uploads.pasteFiles(sessionId, payloads); + insertImageFiles(module.ctx, sessionId, images); + addPendingFiles(sessionId, result?.files || []); + }; + const intercept = (event, files) => { + if (!files.length || files.every((file) => NATIVE_IMAGE_TYPES.has(file.type))) return false; event.preventDefault(); - event.stopPropagation(); + event.stopImmediatePropagation(); if (unavailable) { - notify(module.ctx, sessionId, "error", "当前状态无法粘贴附件,请稍后重试。 "); - return; + notify(module.ctx, sessionId, "error", "当前状态无法添加附件,请稍后重试。 "); + return true; } setBusy(true); - try { - const images = pasted.filter((file) => NATIVE_IMAGE_TYPES.has(file.type)); - const ordinary = pasted.filter((file) => !NATIVE_IMAGE_TYPES.has(file.type)); - const payloads = await Promise.all(ordinary.map(async (file) => ({ - name: file.name, - mimeType: file.type, - size: file.size, - bytes: new Uint8Array(await file.arrayBuffer()) - }))); - const result = await bridge.uploads.pasteFiles(sessionId, payloads); - insertImageFiles(module.ctx, sessionId, images); - addPendingFiles(sessionId, result?.files || []); - } catch (error) { + routeFiles(files).catch((error) => { notify(module.ctx, sessionId, "error", error instanceof Error ? error.message : String(error)); - } finally { + }).finally(() => { if (mounted.current) setBusy(false); - } + }); + return true; + }; + const paste = (event) => { + if (!event.target?.closest?.("[data-composer-card]")) return; + const pasted = Array.from(event.clipboardData?.items || []).filter((item) => item.kind === "file").map((item) => item.getAsFile()).filter(Boolean); + intercept(event, pasted); + }; + const drop = (event) => { + const dropped = Array.from(event.dataTransfer?.files || []); + intercept(event, dropped); }; document.addEventListener("paste", paste, true); - return () => document.removeEventListener("paste", paste, true); + document.addEventListener("drop", drop, true); + return () => { + document.removeEventListener("paste", paste, true); + document.removeEventListener("drop", drop, true); + }; }, [bridge, sessionId, unavailable]); const choose = async () => { if (unavailable) return; @@ -263,12 +333,9 @@ ${envelopes}` : text || envelopes; return /* @__PURE__ */ React.createElement("svg", { viewBox: "0 0 16 16", fill: "none", width: "16", height: "16", "aria-hidden": true }, /* @__PURE__ */ React.createElement("path", { d: "m4.5 4.5 7 7m0-7-7 7", stroke: "currentColor", strokeWidth: "1.4", strokeLinecap: "round" })); } function FileCard({ file }) { - const [copied, setCopied] = useState(false); + const { status, copy } = useClipboardFeedback(); const copyPath = async () => { - if (await Primitives.writeClipboard(file.path)) { - setCopied(true); - window.setTimeout(() => setCopied(false), 1e3); - } + await copy(file.path); }; const reveal = async () => { try { @@ -277,7 +344,7 @@ ${envelopes}` : text || envelopes; window.alert(error instanceof Error ? error.message : String(error)); } }; - return /* @__PURE__ */ React.createElement("article", { className: "lbs-file-card", "data-laobos-file-path": file.path, title: file.path }, /* @__PURE__ */ React.createElement("button", { className: "lbs-file-card-open", type: "button", "aria-label": `在文件夹中显示 ${file.name}`, onClick: reveal }, /* @__PURE__ */ React.createElement(FileSvgIcon, null), /* @__PURE__ */ React.createElement("span", { className: "lbs-file-card-main" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-file-card-name" }, file.name), /* @__PURE__ */ React.createElement("span", { className: "lbs-file-card-meta" }, fileKind(file.name), " · ", formatBytes(file.size)))), /* @__PURE__ */ React.createElement(Primitives.Tooltip, { label: copied ? "已复制" : "复制绝对路径", side: "bottom" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-file-card-action", type: "button", "aria-label": "复制文件绝对路径", onClick: copyPath }, copied ? /* @__PURE__ */ React.createElement(Primitives.IconCheckOutline16, null) : /* @__PURE__ */ React.createElement(Primitives.IconCopyOutline16, null)))); + return /* @__PURE__ */ React.createElement("article", { className: "lbs-file-card", "data-laobos-file-path": file.path, title: file.path }, /* @__PURE__ */ React.createElement("button", { className: "lbs-file-card-open", type: "button", "aria-label": `在文件夹中显示 ${file.name}`, onClick: reveal }, /* @__PURE__ */ React.createElement(FileSvgIcon, null), /* @__PURE__ */ React.createElement("span", { className: "lbs-file-card-main" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-file-card-name" }, file.name), /* @__PURE__ */ React.createElement("span", { className: "lbs-file-card-meta" }, fileKind(file.name), " · ", formatBytes(file.size)))), /* @__PURE__ */ React.createElement(Primitives.Tooltip, { label: status === "copied" ? "已复制" : status === "failed" ? "复制失败,请重试" : "复制绝对路径", side: "bottom" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-file-card-action", type: "button", "aria-label": status === "copied" ? "文件绝对路径已复制" : status === "failed" ? "复制文件绝对路径失败,请重试" : "复制文件绝对路径", onClick: copyPath }, status === "copied" ? /* @__PURE__ */ React.createElement(Primitives.IconCheckOutline16, null) : status === "failed" ? /* @__PURE__ */ React.createElement(Primitives.IconWarningOutline16, null) : /* @__PURE__ */ React.createElement(Primitives.IconCopyOutline16, null)))); } function FileComposerRail({ sessionId, input, inputActions }) { const files = usePendingFiles(sessionId); @@ -309,20 +376,17 @@ ${file.path}` }, /* @__PURE__ */ React.createElement(FileSvgIcon, null), /* @__P return parts; } function MessageActions({ text, files, time }) { - const [copied, setCopied] = useState(false); + const { status, copy: write } = useClipboardFeedback(); const copy = async () => { const value = [text, ...files.map((file) => file.path)].filter(Boolean).join("\n"); - if (await Primitives.writeClipboard(value)) { - setCopied(true); - window.setTimeout(() => setCopied(false), 1e3); - } + await write(value); }; let displayTime = ""; if (time !== void 0) { const date = new Date(time); if (!Number.isNaN(date.getTime())) displayTime = date.toLocaleTimeString("zh-CN", { hour: "2-digit", minute: "2-digit" }); } - return /* @__PURE__ */ React.createElement("div", { className: "lbs-file-message-actions" }, displayTime ? /* @__PURE__ */ React.createElement("span", { className: "lbs-file-message-time" }, displayTime) : null, /* @__PURE__ */ React.createElement(Primitives.Tooltip, { label: copied ? "已复制" : "复制", side: "bottom" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-file-message-action", type: "button", "aria-label": "复制消息", onClick: copy }, copied ? /* @__PURE__ */ React.createElement(Primitives.IconCheckOutline16, null) : /* @__PURE__ */ React.createElement(Primitives.IconCopyOutline16, null)))); + return /* @__PURE__ */ React.createElement("div", { className: "lbs-file-message-actions" }, displayTime ? /* @__PURE__ */ React.createElement("span", { className: "lbs-file-message-time" }, displayTime) : null, /* @__PURE__ */ React.createElement(Primitives.Tooltip, { label: status === "copied" ? "已复制" : status === "failed" ? "复制失败,请重试" : "复制", side: "bottom" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-file-message-action", type: "button", "aria-label": status === "copied" ? "消息已复制" : status === "failed" ? "复制消息失败,请重试" : "复制消息", onClick: copy }, status === "copied" ? /* @__PURE__ */ React.createElement(Primitives.IconCheckOutline16, null) : status === "failed" ? /* @__PURE__ */ React.createElement(Primitives.IconWarningOutline16, null) : /* @__PURE__ */ React.createElement(Primitives.IconCopyOutline16, null)))); } function FileMessageNode({ node, loadImage }) { const texts = []; @@ -337,7 +401,7 @@ ${file.path}` }, /* @__PURE__ */ React.createElement(FileSvgIcon, null), /* @__P const showBubble = parsed.text !== "" || rest.length > 0; return /* @__PURE__ */ React.createElement("div", { className: "lbs-file-user-row", "data-time-hover-root": true }, /* @__PURE__ */ React.createElement("div", { className: "lbs-file-user-stack" }, /* @__PURE__ */ React.createElement(AttachmentUI.ImageGallery, { images, load: loadImage, align: "end", labels: imageLabels }), showBubble ? /* @__PURE__ */ React.createElement("div", { className: "lbs-file-bubble" }, projectedText(parsed.text), rest.map((block, index) => /* @__PURE__ */ React.createElement("div", { className: "lbs-file-extra", key: index }, /* @__PURE__ */ React.createElement(Primitives.JsonBlock, { label: "附加内容", payload: block, truncatedLabel: (total) => `内容过长(${total} 项)` })))) : null, parsed.files.length ? /* @__PURE__ */ React.createElement("div", { className: "lbs-file-card-list" }, parsed.files.map((file, index) => /* @__PURE__ */ React.createElement(FileCard, { file, key: `${file.id}:${index}` }))) : null), /* @__PURE__ */ React.createElement(MessageActions, { text: parsed.text, files: parsed.files, time: node?.data?.time })); } - const inject = ["sessions", "slots", "conversation"]; + const inject = ["sessions", "slots", "conversation", "modelDirectories"]; function apply(ctx) { module.ctx = ctx; ctx.effect(() => installFileSendChannel(ctx), "laobos-file-attachments: independent file send channel"); diff --git a/packages/laobos-file-attachments/src/client.jsx b/packages/laobos-file-attachments/src/client.jsx index 4a5d322..8f54097 100644 --- a/packages/laobos-file-attachments/src/client.jsx +++ b/packages/laobos-file-attachments/src/client.jsx @@ -96,25 +96,66 @@ window.__ModuleLoader__.load({ return pendingFiles(sessionId); } + function selectedModelSupportsImages(ctx, sessionId) { + try { + const state = ctx.modelDirectories.directoryFor(sessionId).store.getSnapshot(); + const current = state.current; + if (!current) return undefined; + const model = state.groups + .find((group) => group.id === current.provider) + ?.models.find((candidate) => candidate.id === current.model); + if (!Array.isArray(model?.inputModalities)) return undefined; + return model.inputModalities.includes("image"); + } catch { + return undefined; + } + } + + async function persistImagesAsFiles(sessionId, images) { + const bridge = window.laobosDesktop; + if (!bridge?.capabilities?.fileAttachments || !bridge.uploads?.pasteFiles) { + throw new Error("当前模型不支持图片输入,且普通文件上传服务不可用。 "); + } + const payloads = await Promise.all(images.map(async (image) => ({ + name: image.file.name || "image", + mimeType: image.file.type || "application/octet-stream", + size: image.file.size, + bytes: new Uint8Array(await image.file.arrayBuffer()), + }))); + const result = await bridge.uploads.pasteFiles(sessionId, payloads); + return (result?.files || []).map(fileFromReference); + } + function installFileSendChannel(ctx) { const conversation = ctx.get("conversation"); if (!conversation?.sendSession) throw new Error("对话发送服务尚未就绪。 "); const original = conversation.sendSession; const routed = async function routedSendSession(session, text, imageIds, mode) { - const files = pendingFiles(session.sessionId); + const pending = pendingFiles(session.sessionId); + const downgradeImages = imageIds.length > 0 + && selectedModelSupportsImages(ctx, session.sessionId) !== true; + const images = downgradeImages ? conversation.draftImages(imageIds) : []; + if (downgradeImages && images.length !== imageIds.length) { + throw new Error("一个或多个待发送图片已经失效。 "); + } + const converted = downgradeImages + ? await persistImagesAsFiles(session.sessionId, images) + : []; + const files = [...pending, ...converted]; const envelopes = files.map(serializeFileEnvelope).join("\n\n"); const prompt = text && envelopes ? `${text}\n\n${envelopes}` : text || envelopes; - if (files.length) { - const sent = new Set(files.map(fileIdentity)); + if (pending.length) { + const sent = new Set(pending.map(fileIdentity)); replacePendingFiles(session.sessionId, pendingFiles(session.sessionId).filter((file) => !sent.has(fileIdentity(file)))); } try { - await original.call(conversation, session, prompt, imageIds, mode); + await original.call(conversation, session, prompt, downgradeImages ? [] : imageIds, mode); + if (downgradeImages) conversation.releaseDraftImages(images); } catch (error) { - if (files.length) { + if (pending.length) { const current = pendingFiles(session.sessionId); const currentIds = new Set(current.map(fileIdentity)); - replacePendingFiles(session.sessionId, [...files.filter((file) => !currentIds.has(fileIdentity(file))), ...current]); + replacePendingFiles(session.sessionId, [...pending.filter((file) => !currentIds.has(fileIdentity(file))), ...current]); } throw error; } @@ -139,6 +180,32 @@ window.__ModuleLoader__.load({ catch { if (level === "error") window.alert(message); } } + async function writeClipboard(text) { + try { + if (window.laobosDesktop?.clipboard?.writeText) { + const result = await window.laobosDesktop.clipboard.writeText(text); + if (result?.written) return true; + } + } catch { + // The browser clipboard implementation below remains available as a fallback. + } + return Primitives.writeClipboard(text); + } + + function useClipboardFeedback() { + const [status, setStatus] = useState("idle"); + const resetTimer = useRef(); + useEffect(() => () => window.clearTimeout(resetTimer.current), []); + const copy = async (text) => { + window.clearTimeout(resetTimer.current); + const written = await writeClipboard(text); + setStatus(written ? "copied" : "failed"); + resetTimer.current = window.setTimeout(() => setStatus("idle"), written ? 1_800 : 3_000); + return written; + }; + return { status, copy }; + } + function imageFileFromDesktop(image) { const source = image?.bytes?.type === "Buffer" ? image.bytes.data : image?.bytes; const bytes = source instanceof Uint8Array ? source : new Uint8Array(source || []); @@ -168,40 +235,53 @@ window.__ModuleLoader__.load({ || input?.phase === "adjudicating" || input?.phase === "submitting"; useEffect(() => { - const paste = async (event) => { - if (!event.target?.closest?.("[data-composer-card]")) return; - const pasted = Array.from(event.clipboardData?.items || []) - .filter((item) => item.kind === "file") - .map((item) => item.getAsFile()) - .filter(Boolean); - if (!pasted.length || pasted.every((file) => NATIVE_IMAGE_TYPES.has(file.type))) return; + const routeFiles = async (files) => { + const images = files.filter((file) => NATIVE_IMAGE_TYPES.has(file.type)); + const ordinary = files.filter((file) => !NATIVE_IMAGE_TYPES.has(file.type)); + const payloads = await Promise.all(ordinary.map(async (file) => ({ + name: file.name, + mimeType: file.type, + size: file.size, + bytes: new Uint8Array(await file.arrayBuffer()), + }))); + const result = await bridge.uploads.pasteFiles(sessionId, payloads); + insertImageFiles(module.ctx, sessionId, images); + addPendingFiles(sessionId, result?.files || []); + }; + const intercept = (event, files) => { + if (!files.length || files.every((file) => NATIVE_IMAGE_TYPES.has(file.type))) return false; event.preventDefault(); - event.stopPropagation(); + event.stopImmediatePropagation(); if (unavailable) { - notify(module.ctx, sessionId, "error", "当前状态无法粘贴附件,请稍后重试。 "); - return; + notify(module.ctx, sessionId, "error", "当前状态无法添加附件,请稍后重试。 "); + return true; } setBusy(true); - try { - const images = pasted.filter((file) => NATIVE_IMAGE_TYPES.has(file.type)); - const ordinary = pasted.filter((file) => !NATIVE_IMAGE_TYPES.has(file.type)); - const payloads = await Promise.all(ordinary.map(async (file) => ({ - name: file.name, - mimeType: file.type, - size: file.size, - bytes: new Uint8Array(await file.arrayBuffer()), - }))); - const result = await bridge.uploads.pasteFiles(sessionId, payloads); - insertImageFiles(module.ctx, sessionId, images); - addPendingFiles(sessionId, result?.files || []); - } catch (error) { + routeFiles(files).catch((error) => { notify(module.ctx, sessionId, "error", error instanceof Error ? error.message : String(error)); - } finally { + }).finally(() => { if (mounted.current) setBusy(false); - } + }); + return true; + }; + const paste = (event) => { + if (!event.target?.closest?.("[data-composer-card]")) return; + const pasted = Array.from(event.clipboardData?.items || []) + .filter((item) => item.kind === "file") + .map((item) => item.getAsFile()) + .filter(Boolean); + intercept(event, pasted); + }; + const drop = (event) => { + const dropped = Array.from(event.dataTransfer?.files || []); + intercept(event, dropped); }; document.addEventListener("paste", paste, true); - return () => document.removeEventListener("paste", paste, true); + document.addEventListener("drop", drop, true); + return () => { + document.removeEventListener("paste", paste, true); + document.removeEventListener("drop", drop, true); + }; }, [bridge, sessionId, unavailable]); const choose = async () => { if (unavailable) return; @@ -252,12 +332,9 @@ window.__ModuleLoader__.load({ } function FileCard({ file }) { - const [copied, setCopied] = useState(false); + const { status, copy } = useClipboardFeedback(); const copyPath = async () => { - if (await Primitives.writeClipboard(file.path)) { - setCopied(true); - window.setTimeout(() => setCopied(false), 1_000); - } + await copy(file.path); }; const reveal = async () => { try { await window.laobosDesktop?.uploads?.reveal?.(file.path); } @@ -271,7 +348,7 @@ window.__ModuleLoader__.load({ {fileKind(file.name)} · {formatBytes(file.size)} - + ; } @@ -328,13 +405,10 @@ window.__ModuleLoader__.load({ } function MessageActions({ text, files, time }) { - const [copied, setCopied] = useState(false); + const { status, copy: write } = useClipboardFeedback(); const copy = async () => { const value = [text, ...files.map((file) => file.path)].filter(Boolean).join("\n"); - if (await Primitives.writeClipboard(value)) { - setCopied(true); - window.setTimeout(() => setCopied(false), 1_000); - } + await write(value); }; let displayTime = ""; if (time !== undefined) { @@ -343,7 +417,7 @@ window.__ModuleLoader__.load({ } return
{displayTime ? {displayTime} : null} - +
; } @@ -368,7 +442,7 @@ window.__ModuleLoader__.load({ ; } - const inject = ["sessions", "slots", "conversation"]; + const inject = ["sessions", "slots", "conversation", "modelDirectories"]; function apply(ctx) { module.ctx = ctx; ctx.effect(() => installFileSendChannel(ctx), "laobos-file-attachments: independent file send channel"); diff --git a/packages/laobos-market/README.md b/packages/laobos-market/README.md index 5410ea2..5995784 100644 --- a/packages/laobos-market/README.md +++ b/packages/laobos-market/README.md @@ -9,9 +9,11 @@ | 功能 | 说明 | | --- | --- | | 🔍 查询 + 正则筛选 | 关键词搜索 GitHub `dsh-plugin` 市场(分页拉取、按星数/Fork/更新时间排序),支持对 **仓库名 / owner·仓库 / 描述 / 全部字段** 做正则二次筛选(不区分大小写) | -| 📦 下载安装 | 下载仓库 tarball → 解压到 `/profiles//node_modules/` → 在 `cordis.patch.yml` 注册插件条目(幂等去重)→ 提示重启生效;支持 `force` 覆盖 | +| 📦 下载安装 | 下载仓库 tarball → 校验 Host/Client 入口及 `__ModuleLoader__` 注册 ID → 事务化写入 `/profiles/` → 提示重启生效;支持 `force` 覆盖 | | 🚀 上传发布 | 本地插件目录(含 package.json)→ 自动 `git init` / 提交(缺 README、LICENSE 自动生成)→ `gh repo create` 公开/私有仓库并推送 → 自动添加 `dsh-plugin` topic 上架市场 | | 🤖 对话工具 | 同时注册 `plugin_market_search` / `plugin_market_install` / `plugin_market_upload` 三个工具,在对话中直接操作市场 | + +市场安装会留下一个仅供下一次启动确认的标记。若新增插件导致 Host 启动失败、Client 加载失败或前端启动超时,桌面端会自动停用该用户插件、保留原始 `cordis.patch.yml` 恢复记录,并以安全模式重启;产品内置插件与核心配置覆盖不会被自动停用。 | 🛡 零依赖 | host 端仅使用 Node 内置模块;自带 HTTP 代理(CONNECT 隧道)支持,可走 `http://127.0.0.1:7890` 等本地代理访问 GitHub | ## 📥 安装 diff --git a/packages/laobos-market/lib/market.js b/packages/laobos-market/lib/market.js index f923d01..c359530 100644 --- a/packages/laobos-market/lib/market.js +++ b/packages/laobos-market/lib/market.js @@ -9,7 +9,16 @@ */ import { execFile } from "node:child_process"; import { createHash, randomUUID } from "node:crypto"; -import { existsSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync } from "node:fs"; +import { + cpSync, + existsSync, + mkdirSync, + readFileSync, + readdirSync, + renameSync, + rmSync, + writeFileSync, +} from "node:fs"; import http from "node:http"; import https from "node:https"; import net from "node:net"; @@ -19,6 +28,7 @@ import path from "node:path"; import { promisify } from "node:util"; const execFileAsync = promisify(execFile); +const PENDING_PLUGIN_FILE = ".laobos-plugin-pending.json"; export class MarketError extends Error { constructor(code, message, status = 500) { @@ -352,6 +362,108 @@ function sanitizePackageName(name) { return value; } +function exportedPath(value) { + if (typeof value === "string") return value; + if (!value || typeof value !== "object" || Array.isArray(value)) return null; + for (const condition of ["default", "import", "node", "require"]) { + if (typeof value[condition] === "string") return value[condition]; + } + return null; +} + +function resolvePackageFile(packageDir, declaration, label) { + const relative = exportedPath(declaration); + if (!relative) return null; + const resolved = path.resolve(packageDir, relative); + const root = `${path.resolve(packageDir)}${path.sep}`; + if (resolved !== path.resolve(packageDir) && !resolved.startsWith(root)) { + throw new MarketError("PKG_ENTRY_OUTSIDE", `${label} 指向插件目录之外:${relative}`, 400); + } + return existsSync(resolved) ? resolved : null; +} + +function literalPattern(value) { + return String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); +} + +/** Validate the package surfaces DSH will import before changing the live profile. */ +export function validatePluginPackage(pkg, packageDir) { + const packageName = sanitizePackageName(pkg?.name); + const hostDeclaration = typeof pkg.exports === "string" + ? pkg.exports + : pkg.exports?.["."] ?? pkg.main; + const hostEntry = resolvePackageFile(packageDir, hostDeclaration, "Host 入口"); + if (!hostEntry) { + throw new MarketError( + "HOST_ENTRY_MISSING", + `${packageName} 缺少可用的 Host 入口(exports[\".\"] 或 main)。`, + 400, + ); + } + + const client = pkg.dsh?.client; + let clientEntry = null; + if (client !== undefined) { + if (!client || typeof client !== "object" || typeof client.platform !== "string") { + throw new MarketError("CLIENT_DECL_INVALID", `${packageName} 的 dsh.client.platform 必须为字符串。`, 400); + } + if (client.inject !== undefined && ( + !Array.isArray(client.inject) + || client.inject.some((value) => typeof value !== "string") + )) { + throw new MarketError("CLIENT_DECL_INVALID", `${packageName} 的 dsh.client.inject 必须为字符串数组。`, 400); + } + if (client.immediately !== undefined && typeof client.immediately !== "boolean") { + throw new MarketError("CLIENT_DECL_INVALID", `${packageName} 的 dsh.client.immediately 必须为布尔值。`, 400); + } + if (client.platform === "web") { + clientEntry = resolvePackageFile(packageDir, pkg.exports?.["./client"], "Client 入口"); + if (!clientEntry) { + throw new MarketError( + "CLIENT_ENTRY_MISSING", + `${packageName} 声明了 Web Client,但 exports[\"./client\"] 不存在。`, + 400, + ); + } + const source = readFileSync(clientEntry, "utf8"); + const hasLoaderCall = /(?:window|globalThis)\s*\.\s*__ModuleLoader__\s*\.\s*load\s*\(/u.test(source); + const hasMatchingId = new RegExp(`\\bid\\s*:\\s*(["'])${literalPattern(packageName)}\\1`, "u").test(source); + if (!hasLoaderCall || !hasMatchingId) { + throw new MarketError( + "CLIENT_REGISTRATION_MISMATCH", + `${packageName} 的 Client bundle 未通过 __ModuleLoader__.load 注册同名模块。`, + 400, + ); + } + } + } + + return { packageName, hostEntry, clientEntry }; +} + +function writeFileAtomicSync(filePath, contents) { + mkdirSync(path.dirname(filePath), { recursive: true, mode: 0o700 }); + const temporary = `${filePath}.tmp-${process.pid}-${Date.now()}`; + try { + writeFileSync(temporary, contents, { encoding: "utf8", mode: 0o600 }); + renameSync(temporary, filePath); + } catch (error) { + rmSync(temporary, { force: true }); + throw error; + } +} + +function markPluginPending(profileDir, plugin) { + writeFileAtomicSync( + path.join(profileDir, PENDING_PLUGIN_FILE), + `${JSON.stringify({ + schema: 1, + installedAt: new Date().toISOString(), + ...plugin, + }, null, 2)}\n`, + ); +} + export function profileDirOf(dshHome, profileName) { if (!dshHome) throw new MarketError("DSH_HOME_MISSING", "无法确定 DSH_HOME,安装需要主机环境。", 500); return path.join(dshHome, "profiles", profileName || "web"); @@ -413,37 +525,68 @@ export async function installPlugin({ lastError = new MarketError("PKG_INVALID", `package.json 解析失败:${error.message}`, 400); continue; } - const packageName = sanitizePackageName(pkg.name); + const validation = validatePluginPackage(pkg, sourceDir); + const packageName = validation.packageName; const targetDir = path.join(profileDir, "node_modules", ...packageName.split("/")); - if (existsSync(targetDir)) { - if (!force) { - throw new MarketError("ALREADY_INSTALLED", `${packageName} 已安装(${targetDir}),如需覆盖请使用 force。`, 409); - } - rmSync(targetDir, { recursive: true, force: true }); + const targetExists = existsSync(targetDir); + if (targetExists && !force) { + throw new MarketError("ALREADY_INSTALLED", `${packageName} 已安装(${targetDir}),如需覆盖请使用 force。`, 409); } + const patchFile = path.join(profileDir, "cordis.patch.yml"); + const entryId = packageName.replace(/^@/, "").replace(/\//g, "-"); + const stagingDir = `${targetDir}.installing-${randomUUID().slice(0, 8)}`; + const backupDir = `${targetDir}.backup-${randomUUID().slice(0, 8)}`; + const pendingFile = path.join(profileDir, PENDING_PLUGIN_FILE); + const originalPatch = existsSync(patchFile) ? readFileSync(patchFile, "utf8") : null; + const originalPending = existsSync(pendingFile) ? readFileSync(pendingFile, "utf8") : null; + let targetBackedUp = false; + let targetCommitted = false; + mkdirSync(path.dirname(targetDir), { recursive: true, mode: 0o700 }); - await run("cp", ["-R", `${sourceDir}/.`, targetDir], { timeout: 60000 }); + rmSync(stagingDir, { recursive: true, force: true }); + rmSync(backupDir, { recursive: true, force: true }); + cpSync(sourceDir, stagingDir, { recursive: true, force: false, errorOnExist: true }); - const patchFile = path.join(profileDir, "cordis.patch.yml"); - const patch = registerPatchEntry(patchFile, { - id: packageName.replace(/^@/, "").replace(/\//g, "-"), - name: packageName, - }); - const entryFile = resolveEntryFile(pkg, targetDir); - return { - installed: true, - packageName, - owner, - repo, - ref: branch, - targetDir, - patchFile, - patch, - entryFile, - entryWarning: entryFile === null ? "未找到可用的入口文件(exports.\".\" 或 main),该插件可能无法加载。" : null, - restartRequired: true, - message: `已安装 ${packageName} 到 ${targetDir};重启 dsh web 后生效。`, - }; + try { + if (targetExists) { + renameSync(targetDir, backupDir); + targetBackedUp = true; + } + renameSync(stagingDir, targetDir); + targetCommitted = true; + + const patch = registerPatchEntry(patchFile, { id: entryId, name: packageName }); + markPluginPending(profileDir, { entryId, packageName, ref: branch }); + rmSync(backupDir, { recursive: true, force: true }); + return { + installed: true, + packageName, + owner, + repo, + ref: branch, + targetDir, + patchFile, + patch, + entryFile: path.join(targetDir, path.relative(sourceDir, validation.hostEntry)), + clientEntry: validation.clientEntry + ? path.join(targetDir, path.relative(sourceDir, validation.clientEntry)) + : null, + restartRequired: true, + startupProtected: true, + message: `已安装 ${packageName} 到 ${targetDir};重启后若插件启动失败,劳博士会自动隔离并恢复。`, + }; + } catch (error) { + if (targetCommitted) rmSync(targetDir, { recursive: true, force: true }); + if (targetBackedUp && existsSync(backupDir)) renameSync(backupDir, targetDir); + if (originalPatch === null) rmSync(patchFile, { force: true }); + else writeFileAtomicSync(patchFile, originalPatch); + if (originalPending === null) rmSync(pendingFile, { force: true }); + else writeFileAtomicSync(pendingFile, originalPending); + throw error; + } finally { + rmSync(stagingDir, { recursive: true, force: true }); + rmSync(backupDir, { recursive: true, force: true }); + } } throw lastError || new MarketError("INSTALL_FAILED", "安装失败:没有可用分支。", 500); } finally { @@ -451,18 +594,6 @@ export async function installPlugin({ } } -function resolveEntryFile(pkg, packageDir) { - const candidates = []; - const mainEntry = typeof pkg.exports === "string" ? pkg.exports : pkg.exports?.["."]; - if (typeof mainEntry === "string") candidates.push(mainEntry); - if (pkg.main) candidates.push(pkg.main); - for (const candidate of candidates) { - const resolved = path.resolve(packageDir, candidate); - if (existsSync(resolved)) return resolved; - } - return null; -} - /** * 把插件条目追加注册到 profile 的 cordis.patch.yml(幂等:按 id 去重)。 */ @@ -494,7 +625,7 @@ export function registerPatchEntry(patchFile, entry) { } else { next = `${text.replace(/\s+$/, "")}${text ? "\n" : ""}${block}`; } - writeFileSync(patchFile, next, "utf8"); + writeFileAtomicSync(patchFile, next); return { already: false, id: entry.id }; } diff --git a/packages/laobos-shell/lib/client.js b/packages/laobos-shell/lib/client.js index 720a951..94a7077 100644 --- a/packages/laobos-shell/lib/client.js +++ b/packages/laobos-shell/lib/client.js @@ -50,6 +50,8 @@ const wslText = useMemo(() => { if (!state?.wsl?.available) return "Windows 组件尚未启用"; if (!state.wsl.distributions?.length) return "尚未安装 Linux 发行版"; + if (state.wsl.defaultUserIsRoot) return `${state.wsl.distribution} 可用,待创建普通用户`; + if (state.wsl.initializationBlocked) return `${state.wsl.distribution} 首次初始化可能卡住`; if (!state.wsl.ready) return `${state.wsl.distribution || state.wsl.distributions[0]} 需要初始化或修复`; return `${state.wsl.distribution} 已就绪`; }, [state]); @@ -133,11 +135,14 @@ "div", { className: "lbs-shell-actions" }, h("button", { type: "button", className: "lbs-shell-button secondary", disabled: busy, onClick: () => action(() => api.refresh()) }, busy ? "处理中…" : "重新检测"), - state?.platform === "win32" && !state?.wsl?.ready && !state?.wsl?.installed ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.installWsl("Ubuntu")) }, "安装 WSL + Ubuntu") : null, + state?.platform === "win32" && !state?.wsl?.ready && !state?.wsl?.installed ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.installWsl("Ubuntu-24.04")) }, "安装 WSL + Ubuntu 24.04") : null, state?.platform === "win32" && !state?.wsl?.ready && state?.wsl?.installed && state?.wsl?.distribution ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.initializeWsl()) }, "打开 Linux 初始化窗口") : null, + state?.platform === "win32" && state?.wsl?.defaultUserIsRoot ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.initializeWsl()) }, "打开 Linux 用户设置") : null, state?.status === "error" || state?.status === "attention" || state?.lastError ? h("button", { type: "button", className: "lbs-shell-button secondary", disabled: busy, onClick: prepareRepair }, "创建诊断对话") : null ), state?.requiresRestart ? h("div", { className: "lbs-shell-note" }, "Windows 需要重启。劳博士会保留安装状态,并在下次启动时自动检测。") : null, + state?.wsl?.initializationBlocked ? h("div", { className: "lbs-shell-note" }, "发行版可能被首次启动窗口或 OOBE 状态阻塞。请先关闭残留安装窗口,再创建诊断对话;劳博士不会自动修改注册表。") : null, + state?.wsl?.defaultUserIsRoot ? h("div", { className: "lbs-shell-note" }, "WSL 已能运行,但长期使用 root 风险较高。请创建普通 Linux 用户、加入 sudo 组并设为默认登录用户。") : null, error || state?.lastError ? h("div", { className: "lbs-shell-note lbs-shell-error" }, error || state.lastError) : null, h("div", { className: "lbs-shell-note" }, "性能模式在 Windows 上优先使用 WSL;WSL 不可用时依次降级到 Git Bash 和 PowerShell。需要管理员权限的安装或修复操作始终由你确认。"), repairPrompt ? h( diff --git a/packages/laobos-shell/src/client.jsx b/packages/laobos-shell/src/client.jsx index 256c980..9754917 100644 --- a/packages/laobos-shell/src/client.jsx +++ b/packages/laobos-shell/src/client.jsx @@ -53,6 +53,8 @@ window.__ModuleLoader__.load({ const wslText = useMemo(() => { if (!state?.wsl?.available) return "Windows 组件尚未启用"; if (!state.wsl.distributions?.length) return "尚未安装 Linux 发行版"; + if (state.wsl.defaultUserIsRoot) return `${state.wsl.distribution} 可用,待创建普通用户`; + if (state.wsl.initializationBlocked) return `${state.wsl.distribution} 首次初始化可能卡住`; if (!state.wsl.ready) return `${state.wsl.distribution || state.wsl.distributions[0]} 需要初始化或修复`; return `${state.wsl.distribution} 已就绪`; }, [state]); @@ -136,16 +138,21 @@ window.__ModuleLoader__.load({ h("div", { className: "lbs-shell-actions" }, h("button", { type: "button", className: "lbs-shell-button secondary", disabled: busy, onClick: () => action(() => api.refresh()) }, busy ? "处理中…" : "重新检测"), state?.platform === "win32" && !state?.wsl?.ready && !state?.wsl?.installed - ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.installWsl("Ubuntu")) }, "安装 WSL + Ubuntu") + ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.installWsl("Ubuntu-24.04")) }, "安装 WSL + Ubuntu 24.04") : null, state?.platform === "win32" && !state?.wsl?.ready && state?.wsl?.installed && state?.wsl?.distribution ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.initializeWsl()) }, "打开 Linux 初始化窗口") : null, + state?.platform === "win32" && state?.wsl?.defaultUserIsRoot + ? h("button", { type: "button", className: "lbs-shell-button", disabled: busy, onClick: () => action(() => api.initializeWsl()) }, "打开 Linux 用户设置") + : null, state?.status === "error" || state?.status === "attention" || state?.lastError ? h("button", { type: "button", className: "lbs-shell-button secondary", disabled: busy, onClick: prepareRepair }, "创建诊断对话") : null, ), state?.requiresRestart ? h("div", { className: "lbs-shell-note" }, "Windows 需要重启。劳博士会保留安装状态,并在下次启动时自动检测。") : null, + state?.wsl?.initializationBlocked ? h("div", { className: "lbs-shell-note" }, "发行版可能被首次启动窗口或 OOBE 状态阻塞。请先关闭残留安装窗口,再创建诊断对话;劳博士不会自动修改注册表。") : null, + state?.wsl?.defaultUserIsRoot ? h("div", { className: "lbs-shell-note" }, "WSL 已能运行,但长期使用 root 风险较高。请创建普通 Linux 用户、加入 sudo 组并设为默认登录用户。") : null, error || state?.lastError ? h("div", { className: "lbs-shell-note lbs-shell-error" }, error || state.lastError) : null, h("div", { className: "lbs-shell-note" }, "性能模式在 Windows 上优先使用 WSL;WSL 不可用时依次降级到 Git Bash 和 PowerShell。需要管理员权限的安装或修复操作始终由你确认。"), repairPrompt ? h("section", { className: "lbs-shell-repair" }, diff --git a/packages/laobos-ssh/lib/client.js b/packages/laobos-ssh/lib/client.js index 730d056..7e093ea 100644 --- a/packages/laobos-ssh/lib/client.js +++ b/packages/laobos-ssh/lib/client.js @@ -9438,6 +9438,7 @@ ${h2.join(` const css = `${xterm_default} .lbs-ssh-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:grid;grid-template-rows:42px minmax(0,1fr) 24px;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060}.lbs-ssh-toolbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:4px;padding:0 8px}.lbs-ssh-toolbar strong{font-size:13px;margin:0 4px}.lbs-ssh-toolbar-spacer{flex:1}.lbs-ssh-button,.lbs-ssh-icon{appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;font:inherit;font-size:11px;height:29px;padding:0 9px}.lbs-ssh-icon{display:grid;padding:0;place-items:center;width:29px}.lbs-ssh-button:hover,.lbs-ssh-icon:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-ssh-button.primary{background:var(--dsw-alias-interactive-bg-primary);color:var(--dsw-alias-label-on-primary)}.lbs-ssh-button:disabled,.lbs-ssh-icon:disabled{cursor:not-allowed;opacity:.42}.lbs-ssh-layout{display:grid;grid-template-columns:230px minmax(0,1fr);min-height:0}.lbs-ssh-sidebar{background:var(--dsw-alias-bg-layer-1);border-right:1px solid var(--dsw-alias-border-l1);display:grid;grid-template-rows:42px minmax(0,1fr);min-height:0}.lbs-ssh-search{align-items:center;display:flex;padding:7px}.lbs-ssh-search input{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;box-sizing:border-box;color:inherit;font:11px inherit;height:28px;padding:0 8px;width:100%}.lbs-ssh-groups{min-height:0;overflow:auto;padding:0 5px 8px}.lbs-ssh-group h3{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;height:24px;margin:0;padding:0 5px}.lbs-ssh-group h3 span{margin-left:auto}.lbs-ssh-row{align-items:center;border-radius:6px;display:grid;grid-template-columns:minmax(0,1fr) 27px 27px 27px;margin-bottom:2px}.lbs-ssh-row[data-active=true],.lbs-ssh-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-ssh-row-main{background:transparent;border:0;color:inherit;cursor:pointer;display:grid;font:inherit;gap:2px;min-width:0;padding:7px 5px 7px 8px;text-align:left}.lbs-ssh-row-main strong,.lbs-ssh-row-main small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-ssh-row-main strong{font-size:11px}.lbs-ssh-row-main small{color:var(--dsw-alias-label-tertiary);font-size:9px}.lbs-ssh-row-action{background:transparent;border:0;border-radius:5px;color:var(--dsw-alias-label-secondary);cursor:pointer;height:25px;opacity:.1}.lbs-ssh-row:hover .lbs-ssh-row-action,.lbs-ssh-row-action:focus-visible{opacity:1}.lbs-ssh-row-action:hover{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.lbs-ssh-row-action.danger:hover{color:#d94b4b}.lbs-ssh-empty-list{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;font-size:10px;gap:8px;justify-items:center;min-height:150px;padding:14px;text-align:center}.lbs-ssh-workspace{background:#101419;display:grid;grid-template-rows:auto minmax(0,1fr);min-height:0;min-width:0}.lbs-ssh-tabs{background:#181d23;border-bottom:1px solid #2b323b;display:flex;min-height:34px;overflow:auto hidden}.lbs-ssh-tab{align-items:center;border-right:1px solid #2b323b;border-top:2px solid transparent;color:#95a0ab;display:flex;max-width:200px;min-width:125px}.lbs-ssh-tab[data-active=true]{background:#101419;border-top-color:#55b58a;color:#e8edf2}.lbs-ssh-tab-main{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;flex:1;font:10px inherit;gap:6px;min-width:0;padding:0 8px}.lbs-ssh-tab-main span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-ssh-tab-close{background:transparent;border:0;color:inherit;height:25px;width:25px}.lbs-ssh-dot{background:#87929d;border-radius:50%;height:6px;width:6px}.lbs-ssh-dot[data-state=connected]{background:#39b87b}.lbs-ssh-dot[data-state=connecting],.lbs-ssh-dot[data-state=awaiting]{background:#e1a83d}.lbs-ssh-dot[data-state=error]{background:#e25d68}.lbs-ssh-stage{min-height:0;position:relative}.lbs-ssh-surface{inset:0;pointer-events:none;position:absolute;visibility:hidden}.lbs-ssh-surface[data-active=true]{pointer-events:auto;visibility:visible}.lbs-ssh-host{box-sizing:border-box;height:100%;padding:8px}.lbs-ssh-empty{align-content:center;color:#8f9aa6;display:grid;gap:9px;height:100%;justify-items:center;padding:28px;text-align:center}.lbs-ssh-empty strong{color:#e3e9ee;font-size:13px}.lbs-ssh-empty p{font-size:11px;line-height:1.5;margin:0;max-width:430px}.lbs-ssh-error{background:#482129;color:#ffc4ca;font-size:11px;left:10px;max-width:calc(100% - 20px);padding:7px 10px;position:absolute;top:9px;z-index:3}.lbs-ssh-global-error{background:#482129;border:1px solid #6d303a;border-radius:6px;color:#ffc4ca;font-size:10px;max-width:min(520px,calc(100% - 20px));padding:7px 10px;pointer-events:none;position:absolute;right:10px;top:48px;z-index:6}.lbs-ssh-status{align-items:center;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:12px;padding:0 8px}.lbs-ssh-status span:last-child{margin-left:auto}.lbs-ssh-modal-backdrop{align-items:center;background:rgba(0,0,0,.46);display:flex;inset:0;justify-content:center;padding:22px;position:fixed;z-index:2147483220}.lbs-ssh-modal{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;box-shadow:var(--dsw-shadow-lv3);display:grid;grid-template-rows:46px minmax(0,1fr) auto;max-height:min(760px,92vh);overflow:hidden;width:min(610px,calc(100vw - 34px))}.lbs-ssh-modal.wide{width:min(820px,calc(100vw - 34px))}.lbs-ssh-modal-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;padding:0 14px}.lbs-ssh-modal-header h2{font-size:14px;margin:0}.lbs-ssh-modal-header button{margin-left:auto}.lbs-ssh-modal-body{min-height:0;overflow:auto;padding:15px}.lbs-ssh-modal-footer{border-top:1px solid var(--dsw-alias-border-l1);display:flex;gap:7px;justify-content:flex-end;padding:10px 14px}.lbs-ssh-form{display:grid;gap:12px}.lbs-ssh-form-grid{display:grid;gap:10px;grid-template-columns:1fr 110px}.lbs-ssh-form label{color:var(--dsw-alias-label-secondary);display:grid;font-size:10px;gap:5px}.lbs-ssh-form .wide{grid-column:1/-1}.lbs-ssh-form input,.lbs-ssh-form select,.lbs-ssh-form textarea{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;box-sizing:border-box;color:inherit;font:11px inherit;height:32px;padding:0 8px;width:100%}.lbs-ssh-form textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;height:112px;padding:8px;resize:vertical}.lbs-ssh-check{align-items:center!important;display:flex!important;gap:7px!important}.lbs-ssh-check input{height:14px!important;width:14px!important}.lbs-ssh-help{color:var(--dsw-alias-label-tertiary);font-size:9px;line-height:1.5;margin:0}.lbs-ssh-form-error{color:#d94b4b;font-size:10px;margin:0}.lbs-ssh-credentials{display:grid;gap:7px}.lbs-ssh-credential{align-items:center;border:1px solid var(--dsw-alias-border-l1);border-radius:7px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;padding:9px}.lbs-ssh-credential span{display:grid;gap:2px}.lbs-ssh-credential small{color:var(--dsw-alias-label-tertiary);font-size:9px}.lbs-ssh-fingerprint{background:var(--dsw-alias-bg-base);border-radius:6px;font:10px ui-monospace,SFMono-Regular,Menlo,monospace;padding:9px;word-break:break-all}@media(max-width:850px){.lbs-ssh-panel{left:0;right:0}.lbs-ssh-layout{grid-template-columns:195px minmax(0,1fr)}}@media(max-width:620px){.lbs-ssh-layout{grid-template-columns:1fr}.lbs-ssh-sidebar{display:none}.lbs-ssh-toolbar strong{display:none}} + .lbs-ssh-workspace,.lbs-ssh-stage{background:var(--dsw-alias-bg-base)}.lbs-ssh-tabs{background:var(--dsw-alias-bg-layer-1);border-bottom-color:var(--dsw-alias-border-l1)}.lbs-ssh-tab{border-right-color:var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary)}.lbs-ssh-tab[data-active=true]{background:var(--dsw-alias-bg-base);border-top-color:var(--dsw-alias-state-success-primary,#39b87b);color:var(--dsw-alias-label-primary)}.lbs-ssh-empty{color:var(--dsw-alias-label-tertiary)}.lbs-ssh-empty strong{color:var(--dsw-alias-label-primary)}.lbs-ssh-error,.lbs-ssh-global-error{background:color-mix(in srgb,var(--dsw-alias-state-error-primary,#d94b4b) 10%,var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary,#d94b4b) 28%,transparent);color:var(--dsw-alias-state-error-primary,#d94b4b)} `; if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-ssh"]')) { const style = document.createElement("style"); @@ -9445,6 +9446,48 @@ ${h2.join(` style.textContent = css; document.head.append(style); } + function terminalTheme(element) { + const styles = getComputedStyle(element); + const color = (name, fallback) => styles.getPropertyValue(name).trim() || fallback; + const dark = document.body.hasAttribute("data-ds-dark-theme"); + return { + background: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + foreground: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursor: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursorAccent: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + selectionBackground: color("--dsw-alias-interactive-bg-active", dark ? "rgba(88,166,255,.28)" : "rgba(9,105,218,.18)"), + black: dark ? "#484f58" : "#24292f", + red: dark ? "#ff7b72" : "#cf222e", + green: dark ? "#3fb950" : "#1a7f37", + yellow: dark ? "#d29922" : "#9a6700", + blue: dark ? "#58a6ff" : "#0969da", + magenta: dark ? "#bc8cff" : "#8250df", + cyan: dark ? "#39c5cf" : "#1b7c83", + white: dark ? "#b1bac4" : "#6e7781", + brightBlack: dark ? "#6e7681" : "#57606a", + brightRed: dark ? "#ffa198" : "#a40e26", + brightGreen: dark ? "#56d364" : "#116329", + brightYellow: dark ? "#e3b341" : "#4d2d00", + brightBlue: dark ? "#79c0ff" : "#218bff", + brightMagenta: dark ? "#d2a8ff" : "#a475f9", + brightCyan: dark ? "#56d4dd" : "#3192aa", + brightWhite: dark ? "#f0f6fc" : "#24292f" + }; + } + function syncTerminalTheme(terminal, element) { + const applyTheme = () => { + terminal.options.theme = terminalTheme(element); + }; + const observer = new MutationObserver(applyTheme); + observer.observe(document.body, { attributes: true, attributeFilter: ["data-ds-dark-theme"] }); + const media = window.matchMedia?.("(prefers-color-scheme: dark)"); + media?.addEventListener?.("change", applyTheme); + applyTheme(); + return () => { + observer.disconnect(); + media?.removeEventListener?.("change", applyTheme); + }; + } function Modal({ title, wide, children, footer, onClose }) { return /* @__PURE__ */ React.createElement("div", { className: "lbs-ssh-modal-backdrop", onMouseDown: (event) => { if (event.target === event.currentTarget) onClose(); @@ -9588,11 +9631,12 @@ ${h2.join(` } let connectionId = ""; let disposed = false; - const terminal = new Dl({ cursorBlink: true, fontSize: 13, lineHeight: 1.2, scrollback: 1e4, theme: { background: "#101419", foreground: "#e8edf2", cursor: "#d8e6f3" } }); + const terminal = new Dl({ cursorBlink: true, fontSize: 13, lineHeight: 1.2, scrollback: 1e4, theme: terminalTheme(host.current) }); terminalRef.current = terminal; const fit = new o(); terminal.loadAddon(fit); terminal.open(host.current); + const stopThemeSync = syncTerminalTheme(terminal, host.current); const fitTerminal = () => { try { fit.fit(); @@ -9642,6 +9686,7 @@ ${h2.join(` return () => { disposed = true; terminalRef.current = null; + stopThemeSync(); resize.disconnect(); input.dispose(); offData(); diff --git a/packages/laobos-ssh/src/client.jsx b/packages/laobos-ssh/src/client.jsx index 1ec96e6..ea09a3f 100644 --- a/packages/laobos-ssh/src/client.jsx +++ b/packages/laobos-ssh/src/client.jsx @@ -13,11 +13,39 @@ window.__ModuleLoader__.load({ const css = `${xtermCss}\n .lbs-ssh-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:grid;grid-template-rows:42px minmax(0,1fr) 24px;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060}.lbs-ssh-toolbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:4px;padding:0 8px}.lbs-ssh-toolbar strong{font-size:13px;margin:0 4px}.lbs-ssh-toolbar-spacer{flex:1}.lbs-ssh-button,.lbs-ssh-icon{appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;font:inherit;font-size:11px;height:29px;padding:0 9px}.lbs-ssh-icon{display:grid;padding:0;place-items:center;width:29px}.lbs-ssh-button:hover,.lbs-ssh-icon:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-ssh-button.primary{background:var(--dsw-alias-interactive-bg-primary);color:var(--dsw-alias-label-on-primary)}.lbs-ssh-button:disabled,.lbs-ssh-icon:disabled{cursor:not-allowed;opacity:.42}.lbs-ssh-layout{display:grid;grid-template-columns:230px minmax(0,1fr);min-height:0}.lbs-ssh-sidebar{background:var(--dsw-alias-bg-layer-1);border-right:1px solid var(--dsw-alias-border-l1);display:grid;grid-template-rows:42px minmax(0,1fr);min-height:0}.lbs-ssh-search{align-items:center;display:flex;padding:7px}.lbs-ssh-search input{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;box-sizing:border-box;color:inherit;font:11px inherit;height:28px;padding:0 8px;width:100%}.lbs-ssh-groups{min-height:0;overflow:auto;padding:0 5px 8px}.lbs-ssh-group h3{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;height:24px;margin:0;padding:0 5px}.lbs-ssh-group h3 span{margin-left:auto}.lbs-ssh-row{align-items:center;border-radius:6px;display:grid;grid-template-columns:minmax(0,1fr) 27px 27px 27px;margin-bottom:2px}.lbs-ssh-row[data-active=true],.lbs-ssh-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-ssh-row-main{background:transparent;border:0;color:inherit;cursor:pointer;display:grid;font:inherit;gap:2px;min-width:0;padding:7px 5px 7px 8px;text-align:left}.lbs-ssh-row-main strong,.lbs-ssh-row-main small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-ssh-row-main strong{font-size:11px}.lbs-ssh-row-main small{color:var(--dsw-alias-label-tertiary);font-size:9px}.lbs-ssh-row-action{background:transparent;border:0;border-radius:5px;color:var(--dsw-alias-label-secondary);cursor:pointer;height:25px;opacity:.1}.lbs-ssh-row:hover .lbs-ssh-row-action,.lbs-ssh-row-action:focus-visible{opacity:1}.lbs-ssh-row-action:hover{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.lbs-ssh-row-action.danger:hover{color:#d94b4b}.lbs-ssh-empty-list{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;font-size:10px;gap:8px;justify-items:center;min-height:150px;padding:14px;text-align:center}.lbs-ssh-workspace{background:#101419;display:grid;grid-template-rows:auto minmax(0,1fr);min-height:0;min-width:0}.lbs-ssh-tabs{background:#181d23;border-bottom:1px solid #2b323b;display:flex;min-height:34px;overflow:auto hidden}.lbs-ssh-tab{align-items:center;border-right:1px solid #2b323b;border-top:2px solid transparent;color:#95a0ab;display:flex;max-width:200px;min-width:125px}.lbs-ssh-tab[data-active=true]{background:#101419;border-top-color:#55b58a;color:#e8edf2}.lbs-ssh-tab-main{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;flex:1;font:10px inherit;gap:6px;min-width:0;padding:0 8px}.lbs-ssh-tab-main span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-ssh-tab-close{background:transparent;border:0;color:inherit;height:25px;width:25px}.lbs-ssh-dot{background:#87929d;border-radius:50%;height:6px;width:6px}.lbs-ssh-dot[data-state=connected]{background:#39b87b}.lbs-ssh-dot[data-state=connecting],.lbs-ssh-dot[data-state=awaiting]{background:#e1a83d}.lbs-ssh-dot[data-state=error]{background:#e25d68}.lbs-ssh-stage{min-height:0;position:relative}.lbs-ssh-surface{inset:0;pointer-events:none;position:absolute;visibility:hidden}.lbs-ssh-surface[data-active=true]{pointer-events:auto;visibility:visible}.lbs-ssh-host{box-sizing:border-box;height:100%;padding:8px}.lbs-ssh-empty{align-content:center;color:#8f9aa6;display:grid;gap:9px;height:100%;justify-items:center;padding:28px;text-align:center}.lbs-ssh-empty strong{color:#e3e9ee;font-size:13px}.lbs-ssh-empty p{font-size:11px;line-height:1.5;margin:0;max-width:430px}.lbs-ssh-error{background:#482129;color:#ffc4ca;font-size:11px;left:10px;max-width:calc(100% - 20px);padding:7px 10px;position:absolute;top:9px;z-index:3}.lbs-ssh-global-error{background:#482129;border:1px solid #6d303a;border-radius:6px;color:#ffc4ca;font-size:10px;max-width:min(520px,calc(100% - 20px));padding:7px 10px;pointer-events:none;position:absolute;right:10px;top:48px;z-index:6}.lbs-ssh-status{align-items:center;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:12px;padding:0 8px}.lbs-ssh-status span:last-child{margin-left:auto}.lbs-ssh-modal-backdrop{align-items:center;background:rgba(0,0,0,.46);display:flex;inset:0;justify-content:center;padding:22px;position:fixed;z-index:2147483220}.lbs-ssh-modal{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;box-shadow:var(--dsw-shadow-lv3);display:grid;grid-template-rows:46px minmax(0,1fr) auto;max-height:min(760px,92vh);overflow:hidden;width:min(610px,calc(100vw - 34px))}.lbs-ssh-modal.wide{width:min(820px,calc(100vw - 34px))}.lbs-ssh-modal-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;padding:0 14px}.lbs-ssh-modal-header h2{font-size:14px;margin:0}.lbs-ssh-modal-header button{margin-left:auto}.lbs-ssh-modal-body{min-height:0;overflow:auto;padding:15px}.lbs-ssh-modal-footer{border-top:1px solid var(--dsw-alias-border-l1);display:flex;gap:7px;justify-content:flex-end;padding:10px 14px}.lbs-ssh-form{display:grid;gap:12px}.lbs-ssh-form-grid{display:grid;gap:10px;grid-template-columns:1fr 110px}.lbs-ssh-form label{color:var(--dsw-alias-label-secondary);display:grid;font-size:10px;gap:5px}.lbs-ssh-form .wide{grid-column:1/-1}.lbs-ssh-form input,.lbs-ssh-form select,.lbs-ssh-form textarea{background:var(--dsw-alias-bg-base);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;box-sizing:border-box;color:inherit;font:11px inherit;height:32px;padding:0 8px;width:100%}.lbs-ssh-form textarea{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;height:112px;padding:8px;resize:vertical}.lbs-ssh-check{align-items:center!important;display:flex!important;gap:7px!important}.lbs-ssh-check input{height:14px!important;width:14px!important}.lbs-ssh-help{color:var(--dsw-alias-label-tertiary);font-size:9px;line-height:1.5;margin:0}.lbs-ssh-form-error{color:#d94b4b;font-size:10px;margin:0}.lbs-ssh-credentials{display:grid;gap:7px}.lbs-ssh-credential{align-items:center;border:1px solid var(--dsw-alias-border-l1);border-radius:7px;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;padding:9px}.lbs-ssh-credential span{display:grid;gap:2px}.lbs-ssh-credential small{color:var(--dsw-alias-label-tertiary);font-size:9px}.lbs-ssh-fingerprint{background:var(--dsw-alias-bg-base);border-radius:6px;font:10px ui-monospace,SFMono-Regular,Menlo,monospace;padding:9px;word-break:break-all}@media(max-width:850px){.lbs-ssh-panel{left:0;right:0}.lbs-ssh-layout{grid-template-columns:195px minmax(0,1fr)}}@media(max-width:620px){.lbs-ssh-layout{grid-template-columns:1fr}.lbs-ssh-sidebar{display:none}.lbs-ssh-toolbar strong{display:none}} + .lbs-ssh-workspace,.lbs-ssh-stage{background:var(--dsw-alias-bg-base)}.lbs-ssh-tabs{background:var(--dsw-alias-bg-layer-1);border-bottom-color:var(--dsw-alias-border-l1)}.lbs-ssh-tab{border-right-color:var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary)}.lbs-ssh-tab[data-active=true]{background:var(--dsw-alias-bg-base);border-top-color:var(--dsw-alias-state-success-primary,#39b87b);color:var(--dsw-alias-label-primary)}.lbs-ssh-empty{color:var(--dsw-alias-label-tertiary)}.lbs-ssh-empty strong{color:var(--dsw-alias-label-primary)}.lbs-ssh-error,.lbs-ssh-global-error{background:color-mix(in srgb,var(--dsw-alias-state-error-primary,#d94b4b) 10%,var(--dsw-alias-bg-layer-1));border-color:color-mix(in srgb,var(--dsw-alias-state-error-primary,#d94b4b) 28%,transparent);color:var(--dsw-alias-state-error-primary,#d94b4b)} `; if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-ssh"]')) { const style = document.createElement("style"); style.dataset.pluginCss = "@laobos/dsh-ssh"; style.textContent = css; document.head.append(style); } + function terminalTheme(element) { + const styles = getComputedStyle(element); + const color = (name, fallback) => styles.getPropertyValue(name).trim() || fallback; + const dark = document.body.hasAttribute("data-ds-dark-theme"); + return { + background: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + foreground: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursor: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursorAccent: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + selectionBackground: color("--dsw-alias-interactive-bg-active", dark ? "rgba(88,166,255,.28)" : "rgba(9,105,218,.18)"), + black: dark ? "#484f58" : "#24292f", red: dark ? "#ff7b72" : "#cf222e", green: dark ? "#3fb950" : "#1a7f37", yellow: dark ? "#d29922" : "#9a6700", + blue: dark ? "#58a6ff" : "#0969da", magenta: dark ? "#bc8cff" : "#8250df", cyan: dark ? "#39c5cf" : "#1b7c83", white: dark ? "#b1bac4" : "#6e7781", + brightBlack: dark ? "#6e7681" : "#57606a", brightRed: dark ? "#ffa198" : "#a40e26", brightGreen: dark ? "#56d364" : "#116329", brightYellow: dark ? "#e3b341" : "#4d2d00", + brightBlue: dark ? "#79c0ff" : "#218bff", brightMagenta: dark ? "#d2a8ff" : "#a475f9", brightCyan: dark ? "#56d4dd" : "#3192aa", brightWhite: dark ? "#f0f6fc" : "#24292f", + }; + } + + function syncTerminalTheme(terminal, element) { + const applyTheme = () => { terminal.options.theme = terminalTheme(element); }; + const observer = new MutationObserver(applyTheme); + observer.observe(document.body, { attributes: true, attributeFilter: ["data-ds-dark-theme"] }); + const media = window.matchMedia?.("(prefers-color-scheme: dark)"); + media?.addEventListener?.("change", applyTheme); + applyTheme(); + return () => { observer.disconnect(); media?.removeEventListener?.("change", applyTheme); }; + } + function Modal({ title, wide, children, footer, onClose }) { return
{ if (event.target === event.currentTarget) onClose(); }}>
@@ -158,9 +186,10 @@ window.__ModuleLoader__.load({ useEffect(() => { if (!host.current || !window.laobosDesktop?.capabilities?.ssh) { onError(session.id, "SSH 仅在桌面版中可用。"); return undefined; } let connectionId = ""; let disposed = false; - const terminal = new Terminal({ cursorBlink: true, fontSize: 13, lineHeight: 1.2, scrollback: 10000, theme: { background: "#101419", foreground: "#e8edf2", cursor: "#d8e6f3" } }); + const terminal = new Terminal({ cursorBlink: true, fontSize: 13, lineHeight: 1.2, scrollback: 10000, theme: terminalTheme(host.current) }); terminalRef.current = terminal; const fit = new FitAddon(); terminal.loadAddon(fit); terminal.open(host.current); + const stopThemeSync = syncTerminalTheme(terminal, host.current); const fitTerminal = () => { try { fit.fit(); if (connectionId) void window.laobosDesktop.ssh.resize({ id: connectionId, cols: terminal.cols, rows: terminal.rows }); } catch {} }; fitTerminal(); const offData = window.laobosDesktop.ssh.onData((event) => { if (event.id === connectionId) terminal.write(event.data); }); @@ -186,7 +215,7 @@ window.__ModuleLoader__.load({ } }; void connect(); - return () => { disposed = true; terminalRef.current = null; resize.disconnect(); input.dispose(); offData(); offExit(); terminal.dispose(); if (connectionId) void window.laobosDesktop.ssh.disconnect(connectionId); }; + return () => { disposed = true; terminalRef.current = null; stopThemeSync(); resize.disconnect(); input.dispose(); offData(); offExit(); terminal.dispose(); if (connectionId) void window.laobosDesktop.ssh.disconnect(connectionId); }; }, [onChallenge, onError, onState, session.generation, session.id, session.profile]); return
; } diff --git a/packages/laobos-system-tools/assets/laobos-logo.png b/packages/laobos-system-tools/assets/laobos-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2e897701bb63bcccf6f72a18db870dfd7d36bc81 GIT binary patch literal 979325 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 z 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�e=w5^%3Y}}XV(<8Vc82Wuz1l~d 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
unYi-BEdRr3K)svH< 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 z z4=mwh-=VK-ef8%2coG7s{$F?zUmSS8-|hdnzBG`(E8pkDu; zj@3`wl#F^MH%hj=+fO*koxi>?!V|17e1R|Wdj0WLx^4F>U;T=n$la#;=-nkfA>*AL z@I3jXKep52T4QQ`%WT?%!BU+m?~)vvPm8LF1hHCTGN`#$CZ=KHW^c06Q<`&Y^C>ww z741rxtoO7l4Q{O~p6(A{TAM6S+bBrs7uLo3t~))Y*6=Ok$K^%t@Z6`Q8k2iP)8^S_BqkBXa6y<5Ywp*mBwK-^{iFc+s8UO z$JYA*#zWK{XinK!Q}=tw4)>$u(zr$o zA8z=y70$Ch*9rh8Uv{hWwLZ7cC-(2tm*sw0@9w`{U&8v1w_m+|`m>+ee)QuX`KNXH zD8>UGaEa_-%eoVr`-p1Z?X@0j0p|2W&(9FBTar~*06hS-tlD1m5bHnlM8N%ck;&Qn zwBz2%W_2^gI6HXPvXwZ($oUQ7&(x9Sez_p<)_Dy;_U+_^B~U z{y2Z4sDUJwN9NH?d)g!;s}FXI(@qbB#S-NIfz5uHXQNZL(jfJ7NzcQfX4;$@AMmq; zw^}xY)*jSZ${|@Ju-eDaxM3?n&_gn;JDk=8cfi=7HNe#;b*Nv>*g0aI{BSkjzPBeN)9c4@L<< zDA)(;0rq97n)M}IQ&rp;fw296R(#=OQ0U^;xCQ3YSV=Q0@t;_VEymJk?Ipf;3k`p+ znSvNL2??cLb#(_qM#vm|JsIK2QU4l%e%@&NkUk#pk&k|O`?LS&zid~$^os4(`XZ`l zKJyp0M?Lyc=H$}>yx{F8l(VMPO6&x)282&Xh+qELDhhBVrUt!br5aZ1=q9at`af)> z#z#&u!Lm#tBfa=Py5*Kzj(H;apa1XwtlxpYTHoaV zZRc}FHNB{wthX=A=0IfPVw9uwN-P-T+INFQed=DEYSJ5>jM0lAHO?BM{N^-Eb~zhCDl8Pu zi@K7B-^-_sX$P(u@CONoLoJaCQnDFOFzep@0)#dOsff5t&?ARx)0Q*HoDf5WknRK< zR0+6IW#o=7%=RlA3p6l9J0h{3w)CAbl-Z0fTS=-mb}pklmIec3O{`xWUVQPz#((#F z-`)P|ul{Pg>Z-SHzxa#K+5XM{_HXo4g1^2!`q7WpIsKd?{hZ)2FLw160h@kfS}zGJ zM!O?Qm=mD+6SzYeYgBPLG}qJ7VRT~aO1G-pOmEj_=3@dEuBc=%o+7H>d@kyUfwU)= z`_#Lgi3%Biz6hY)x$Ekj^K=`lgx~w#_qI=d>XZJ39DZ{3`>G#o=bm$ByHIxoKr?>2 zPc-?MfGgBtBUz1&xyH593<^ zlVcRJY63#&4WSj$H^!kh-q>l>DS=HtWNq8jyH@5ihvbAF7yRuWyHE(9<3Rh4V}@Wo zuyyluJq6*%GlB`RAjxgU8p7}g<|%=nI9F0zOR^-_@r$UBgZs9M4EZCauZ2cyvN(%0t#8}2RYiq$(k&u8v2d?eXYdn6NhaMK%;Dcum zi%xq`Ksxshrsa%T^YY9=vzFeJ)``IQiZ^w!#qfg1r_oB&+@9?T zDVseOp&z8IZA%Rn!mfAbYF`6tGVMufI7DGqxO^~Hap-p?0JH`2Iign@Sn2M7VerYS z%up*9yi(w7!^YB`aHiOxQri&((5UvrZLq0#V8lqX;bSK-hqE14=>5Nq+*&<&Bq~zm zh+T_xJVKg~0&u^Ors<$ozk-_0Ns(mFcY85l>_+`j%fXp5`kmwRb1m}v8?N8}?9cwI z-etOSd-ijFaeM9SUUU4by501$%P!YDO_v<$djgL6+$8Ugz=J1dCR7}JcJFa^ogBCk z!u@wb;rSsxxH}^ZyWcOgB#_(0VE+~%1Ffw>V6MH2B9$ITiQlnl#}i04yvDQcn&7t< zHMrr18;(Eu=}#ZO@yaW=Yu@$l?K?Mo$3O3P@kRPZZ`t_CC-3%~0AD6zcP8<$+4YSu96rMjBls=|buw%%+f-Js_R;UT;LEa`Zif!ym z=7#mcJ9fketbEYwzdzHHv$sT|)&A|H>yY)j}G( zb1mAhDbRYG6bQgJ?g`y&J z1U>iD(TFS#%MdpUW;YUKpxn=Tq=w+uwF>S;Y?76Iiqc_si(mSH^w(X)4&TNF765-; zk`NmJ+*{)6I1phQ`@U$*1=#a-%ea12P#+DrbNh#Xc<=V14}EZZ?sK2F{r;<7wO#Sz z7a#LIFBe{T=IAbcoQvOrXI;TFd^7Su{t2`d9jf$0Mu2zH=f_U)%wE47v*6@x&lZ!8zLjDlOZo7WDi zsP+0u>KxiX z{w!7!X*<@*zsoOfYA=h0bE--xfo+>g<5U?zFcTSTGBg~8I@W7v8D}+~+}hfj7#Uj3 zI5c>uKqr04rz(|J9dvH%46zYnp^mDpT2V2!7z3Y?&?7Xd+r^=%+5nvX=45M};Vu+Q zvzs%IZMMOt@JGKmCn^!;*?_#ZV$`W}5v7Y{qOf^IILsx`JZmgc8KJLu2DQ1ws}}&| z!)GM1|VeEYrhR#0pW?YtKp?4K-XkHFG2Nmw$4@3 zj$3BqgCNr9bCpN;9_ix}dZKvdoTJZv_Or)td)wQO-}IKZY+v}?|JrWVZT`G-^uUWB zpcip`=^{Sr$*2={;A8$0D*<-(op7f#TWUr9;20Y*C0`d3xy_qv0x>VOF#|856izeT z*w#9f)Jz!TmqER#gv%QRPNzJq%)nFnF@Gb^*mXL1vWs%Kuu5*Bh)X(}S&tcMg;P!2 z#80y>7{{NvMVb^73kh|6|w{}m>e$|>)*Nhgs_z7=$%8J`19iM-0C0syE}xz7{7SaS|?`S z9pj1=6)>rhgnthMSvz;KoM~R3tn}pprX{22v z&NF_Jd$?vQ;Jj-XH}!C0f=;J1Y2RTFzA+_B<<@vnEaT3%BOh^>V9L8Ttbwz5v?38S zFYSQidKh!z_Kg2{k^jE;{p0rD_r7;~+~Xd%{pN4{#`cQe`t9SFzVr%R2)OX*)?07Y z3~6oXI|9N>46F@K(0$%zMa`}KQ2tEPY>~Bo1Si?FpS{88V=z?1wqST3GWW6Stk-%W zm0bThZ*w7O#)#v-)vwiI2AKSk3o$okVJ*FK$;9`Dm z6?@srP6fzVZRHtq+_OoTa!c&3TAOJnrSD#lxKhDr43>&wI3Q~$ev@N=1R%A56f^y; z)-jl5j;nUkl5Oz657Ff2}a-MN*2?(qJ zF{y#ZimDWC&A4QRwkB$+(1DO3U5`t$h+qa)yu>2B>*tP1rtNUzhzr=Zfz5Rgc^Qvp zh7(^-c&C+}NU-K_;+dZUy6r(Dx|L0xCmLqW+?jcz;S5)*kzw1SJ={_w5Xm9Onk{y; zK0ms?$z$B5RD@k?jLb&d`oEm!D*q9gEy4D49RzvXO)OrhW-{*o*Usjuv=8=C@%yLh zMD8C|Ne++}5zf4gP746DHh;G5gt@ag-S&j4j7dTpjh+MD&j#*2wXL zNriH{*@62UzHvBI2RR<{HLlx3M;*&vezu$s`lx;58nyhoZ8WPOH5&E+5NX*XZVNM z)0tN3a2->r9MnRzAeL?eg7zAeD9r4WiL_Eh+QuHoY*_Sx%UuEIp1IK9qWt~ufA^T% zP2Zz0O?u*!p0K@8pFe%s%U`kmvOa(Mu!lTMzmKf%2hbBLY<)tNOStpSj(qYT?_MNC zR1xf(4!RQ}_NCulm`{_p{;*BX#IWCpHSZ!FAM;Jo@WvxQ_r&%=y=!#km2WtH_chmU zU;pY?{N;%k=qLRA&CrU$@A&gXlFes+#Z?pFR2^n2+T4u<*iRm9ubm@kV9OQ8djJ4H z07*naRK?q+YRqg6JS;@Ud#QlrYRhInpwSS0`9ygVz9$7!n-$ZvaZ}Pj*QS_}HPU?z zYIzKK#*=60S3|3_-pUWlY%DR$gz?&As-(>N0i+mQn0jH%#h|;@=c1P6nO||sh8Nm- z!KHT)^-+&=&OcXU^)JW;GrsfT0{wCE>;l~};?HhhaDjg}ykDs4%Od?EJuz_6j4y5D zJ0iHQ>2UPA{Ju?J?B?&>;LG3m*bRStuKQm7@#39tHoxcYdyekC?;c^L7w)dR@6;EE z-Kj4!OM9EzJM|m$U`H{OlP_@SVgWDyaM~9jM?}wIw|gV=*Z`wL-Hx9@BIs8J{Uprc?650QJKh1-!ASrTQKYHCYSDe%NL@`C zOy4R|YB2!9{uH{VPVHpK<104Wc;R^QMfyg2&Gq%)$xpw&`7Kv%zxHdty1nMLuQ`7C z%YIYq@;vK#;q1kx0Cg41>p;tpX*5r`~)*kW^XRI_Va{@KpKmhk<&bdnj(&X5a85Acr(@8pyE5qzYWaf(z zUH+`6-ZiNUq{7@uVqE*CWeCq6c~TOyv&o~afJ9cfBBi19mZMs?b*z3ZA0wh-AEHVV zT_}ypZlbC#31&g;yJ6hR?tip;xPRoy=n6laCbL79F()Uo1G)NN`)e`E(CW1>>r-8> zJZrxr8v&R9mN!`rCdX!I;j7_zAFCNzKX+;x+P2#TSOhB$sKf)N5TH91xui1i2V6Zo zv}fGe9oqW5WW!|T^Vu3i8#lqS5PSh3Cjf#LQvZFn>PQxF+xLPeknRIt?bd#%#7-b1 zjgAUgbmB82n8u^8tpZqmqG?~`Ar7DGlSlK8$W7GtZCC80S@Y`tAr^V(687n9@*`{C z;Pb?VUN+KQ>kz5As}iiH=A$K!_%4dk#30!C2@d-l5Yf#?8%}&+A}5=~vZPkJ$sJA* z4#xV9r@7LGtHW!IUEs--a1@oASz{|>I%vGC18%iQm7UU1e#m$vB_AvYFS#>di(kh= zU4v3Atq*GMBhOXAB9yYq+4CS8dkjCuV<^wvN8a1w&gw%SD+g-aYY+qVo0V$Xhe2gb5MWBis0YaWZkMfs%f!Ozafd~OF1`g&=O~Tu3Ls$x zk*MH5I_4Jmr(JzFd$OCwgaw znw;xfr4>hQbA3f%x8yMNbRkR_U+D2- zjwh5i-*W5rfe(FX`+Nd&EEJy?J(rJ2=%N7Mv<%^R*IzO0WAmDZ9UN0IR(91> zStVXP&mcWocFA?7*twUy3`adxgGQk0zSn@fbP$4tvhdB{j+?L76ijA@(2EUZ)zNj= zNCzjp;iv{wk)!MlSo@4v_%@M%ID6XLENyd03%->QOVvK`St=Xo1-wLBw_20j)!`TP zdI8M^pL6v2UtX;9;`{==i04K710VQ+?a~K5czei09<_r);_YJnk_LU&20W}EVxi@acjW!Yi|u-c-nAgeE`$Wcs6S%%GSOwJ zyj!nVKj@5=O-fZYC_8fEozT1V%N}>?0sucbdB+{MtG!KY`R47%KfY0}$gSs&95c0TA%Mw*bBBEdsYAzrUi}uDn4Pu+lWubrj!$=03Cwd;k8PQ#w9@Rjq`PKuFFtHt5E?Qnz^EEU40DiudyanEi3 zYB@)--hcF?A8v1c^P4w5^ZtStym0%YKl;P%B`BDT4@sW-J50NZ$tt5-Bg#c6yEignjIQ8Nj03$%1+*(C^W+Go;+U37% zMHnY(@P2ahe79H}@Iu-4@sxSs81ZvGQE|8!hph(S#zt2Jk%CIf7&I@Qx^9`@1!s%i zg?ZY+HGMHhY>Oy{ZD44sWn8r3STL~IlkllPXH+>i)+96Eh!cY=qHf}I5h|{=-%&U) z4dNN8yQ7Z9+0=$>m;Z596kU&wr6Uh#2#7fUHAX~(y;?U>YlyP9*`Jsg;RCFB4O8#L zBs350(w-XKzW0g~z1KdKkYO2DjGi?3}GhfjaIP z-$BpA=8tXLbRLY?eo(TRRPA)M;4>F+F96a&Ex%h2SKF2uwkS@KQ)#c!($Nqf(l)nm z2I|0OP0?Bcej$k^8YzkCriV9`53!X}5aY$LsOeN2C&PRU**>kLoM;bC-$NrQ@RxS1yDkt4mts*Xk$AYA(z zX($*LX6>v4A4V8@3qD3IOH|3h7VTdH&y(gb(?}~JxBrr})|B1}_XVeslwWk~*1B`~ zIj{4N^uqr5l1m=2Jy z>3OG~Zw}|>E_X?@BQDm9o)~Dvt<$Lyvfk+NZRBhbOTxGt>`UJ**tOrw#x+^Fix7Y9 z)A2w*Lx?$~+Ti7mf^qA=`nh0mk6%FP%PhB>Zu;@|gByRi{osc`)CGbcY~Q=#d)xKb z->`lE``_PwEZvWP^5gB6pWM9t-=Pyh6fw<})!Qr*e*L=)+I0=y>Lmp@V>yRpVN_C~%AXpBZyiaV9a zyp4PyB^iJYU%NFq^tBOx{`i2)Jq@a4#iB_RTR1E5Fj*1y6LO^Yqkj#_!^Y#0oZsCN5`#hH0dRzvj_2OH0W ztzj3DbD=wq8*{DpSZb4~scCx)<01%ItJN-Cqf2Mj&EklLU3@IOL(?Ru=ytw2AI~&L zzJrGl1n~dnY-PB6O;|d(s)hx{(yMGZ7?o_Y(e|`muMj>hCv*c!b=gIR24_^pvJ8shMG&eil1qTx@2`FXYlhhe$ar~k6=!+s>*N} zgUJD?=X{>Z(<}4Avxb7Ow;ZD#d3?$bt}4E2A{fBf&-5H*6{GBd7{3}#HXLM*N>4)> zQt$<6#bBeuX5Tv$FP!}@rx@QlBC{Q5uNUitg4+=rlST8;I@s~I|XJpvUEo;LenLQftegdPmZF{zxpBM4G zW6C>adV+lP!yA8i{MM`9cKqM}{J-nVv_9l_PPtw75^f#ErSiL1-v{7w$rt=%nV`nC zl91lvWT-t@H#&n92r#m-5;#EkZ=sa=4~4h(W8aXZSd|+_n5&h_TSS(YL`~JVdWMS2 zE-jnLF4}k!TdJas7X{^YZ=nK`)NwjVMFUDY8YMmsk*c6|(1wiCC>DpvvtV5m;=3fc zIHPy(*m&`H4|kQ^brCkAM93 z$VWd?@`u(7{!5P@pm*voeZT{^OLYN&TY}+N1PRqCh>!s3YvUbMUdZRgGf{B4p^hPq z?m524ITJmb=YXIz_FV4HIhAr0#upOH*Me3 z#ewhM@ZIg3-~7g=<3~TG_T%kF>CxSK$1R>SF07rWyK0yx|JsOSrNCT-;Acg1QGhr* z?yg5?F&>MZS5{Eh!}Y_M{4hweZr4(}?`0^^ctDB)Wt-E2teLVjGG5u3Gas}DV}Qww zGZODR9u4UBT1gBu+*nX}!rS{oS5rIJibF)ffA5AwKAJ#Xw8vbWIlB0gGkypCz5nnJ z+xtK8{_SZ`ecJZQSG{ukz2EsgeR<$>?V4NWU4M=Z9dkKG$_G=$wu^7(fUh|X`*V5B zI;^zdTi$&OB);b!&bQp5qmMOQe38UQM>qZCrsJ!xzWVsOzrAj|Ru^Z#^yM$<<1KgT z<2U+=M6Iv$^@WJ=`1>vDP6$s^oM<0^-V>@bwnrbj?t#ks@Z^_FCIVOZo~6WYVQ8ja z3_gf(2XU9nCW6%|P1NPK0?CW0oGN$qD91s2wu=|f*}x||v2vl3b7$E#rrX9b2ICd7 z2z?4GT~6d>S&77J_L$8mW-oLar%tXxyO=0=@jfMe>|+=Fs;xM74YtBId2uOJDVW0X zU%15&1_BK`si3e~Ow5ba9@x19DlcpqBeH+%)E%;DtnOVL7;kOWbEwgaAmRbe*t(9U zEF?3weV2ID(BrO6$D^Fp?NLmMytAocR-$}rY|)4})_rz_kM%c>HIagEd(h1>D9V?0 zpzR>hWFLk@Il1kRjkZZlV`N9EdolbLD2j@*Drv|&MgVX7zbR}N<6S3>9z0ZcS=qM9fcGtZHJ-O-Lr7#I3HzPPC`3JKii;viq7sdkvhR5UA7Dz z>Y`c4Jn7IAv16W$@xuDEpZV<3XFvU!?d@-WyS_N^dD}}~`jX=pz4*o3&;8ufy?*pA zj`?xLZO7DvyjVwm(utqN*AmRq1)wM#_###}8H9j-zx&uvXnD8t!UtTa7c)QJ-ul+7 zj{o{^{zji0{eWNOoTppDxwYH##JiOp$m&O&EhlEzV$4L{rO&hbBF%mG>H{Q4NB-!AZs&dEBObXu@d;1bF1!3m+v6Vl`0X)| zdDQlJz1V-mqaLYu?;pHfa>*szg?hp8fQv5SMQ3NHOe$Kv@TAAOgTL0grczSRqs~^c z;#Ols5o>;Z>pQ>21rCM(Czr98Vg8py=?mu#xyfo=4Y$_s){&llD<(?Pmc=oKwhV7u zN;DizesUDg6m$SvMAS?6AgqJhlb|N!8m?}M*P}nY_{g;$gOTz2JFj+Eekh%OjPlX`jf7k?I>GQ}`V&RPzd9I6+c`L&~*S`OR|z%jywm(PFU^V`4u z-~a7))tj%{ep_D__}bUKc6-J%o^hm)f9T>@?vP?W*u0LQY(7g*?ue1;SYutMXSHA* zcaBTg%@6+n|tm(`uHb5x&7^R*BxJX-F4eXKJt<62l_cb@;mRm^OeiR zjtwp@D%rUhR0H#@{*Y0I5#Cz5%5B9vSy^Z!eRpCK*&dq_UfE81kNm{m24PK|n7sp3 z71a}H?gZ1m8oiFgW$-D%;2`L+{uiH1*YntMwV$?~<5PMfvE4$3M~3{(Sk>#nf`zg1 z^mkk1cfzv`&H|QrU8BRgV(?0lkQ_!>Hdy#d;YPdG_?R9>gSnUH6fC_7XB~^ljw59s z?%A`cge_U%#TwfTIbBqqFIW{t1c%j;U)A0CpNF6TBlvu!Ri1c^Y^!AxT6MsN?4b#Z(S5VIj%$kJ29;DSd^y&WUq^Jj3;* z!|p2}@jKWtlv4dH2(h^0Jr>>KZ|M$v?BF18@JXQU{9si%b<>z0QxmeoG+AozjwI%@ zrc!KOteY!wMAkluq2q|gl`bD8iGvY$OJ_6$(s59i%C+o_7i2#V4!&wsjHZ}8D2-YI zPcG!DEfi{MJOrf}a`at4bd1}kx^2SHeelY|oY`kAK>H~QhbJ3iOD#3vKW6Jf$5h)$ z2mBBeSrFPYo-upmxJp%eJF-pf9DH+O5T1s(eqGlTbIgC%1jj?8yNv+2YwaPap{GW@ zNf4;zt*9y{G8q|PzWcb%Fih~4+O4a=IiUQt6VN~%w+1tkXdEAM?9{?zZo-v=J_dNV zPhW~AbKMni!*`Fay6P?4HP^mJw^~1bd+`-l@MKe89QZsxdE;}O+iX4p056lWlD+lU-~(>n0H>?>Ab+sER0+v_?g;p zFis3^@z*2-5+(b&fpJt4#e4>Yt%dOuF7rq;DlH5eFh!82tQ(j4%ef0)ZNl*`0k!2t zC$-}pcHYtFv&e+SJH{7Xe4&1E;t~3s^27Ba|8Yl8d-~J2XZ^x2Y>(Iad8A(GKj>0E zi~j)My}@@jKotks>qP}G9Jp0ou81RZXc#e+Z-yCtwT|&SzSj z-jnNWqqE0(!L$!Nh_^3N?U7@I=aXCeK_dh?_eR{QLrc`QnyWA@RBaHqo!_B{L;vR; z2)tl3*5?Q=UT_xycUF`+E!#045#WmmZ_`h%abbXu6mU`C>)-tP_KmN7bNkYlzO;So zTi?=M1mE3m)v?HYkvH>C%bg!Nwp1bBjaDo@cA#?NLJ$sr9%!fkJh7@Zidh{?6g^^eb$ur7I3yfsXczjc_S7h6o%R= zt?Gx-$Co8GSI-_Cjr$dqFTUtJ&3CnY@rz&F{@uU-cN^#FKmC(GK7REdzGi#uV;|#s zF)!pr9Xuy|p9^s_CR5VX))?CLJOyTr)8N_#+ZW=t<8yUUhzmk|*8e9z`N{En|KT6E zH@@-8;}7Ty{jR^^+kBa&E?}HF*7t45eJ-5A4bQ2YoLi+Bh_Y~1^s4baXw~+?j zO&0QA0@I-7*rY9z?h~o`*{j=e<1aCXXq3x%;*%%+<$P25y7-A;Ui_)pLW5y)G1jid zIF#1mm#BQ}2|no87Js;pZ+pXBplZrkvLtUsA}l}ljn{CO)V{+aijEJza2uqZ{_k|? z54P45BX*2?9VhM>#6_};UVZya8taROxO}-I?j%Wg1lX}Bh!I(1qlR~=WIOy=T}80)kT(ULco%%(GQm{G z9o|T){J0U3BVZ@|>Zkl$HVE8l;*Pz?jVdxIJwYsl)}6ggB!^rMt9Fxjt(&;ZDD`Im zvN9X_9(rzl$vLu`Xo%>XJ$C%rY+#(GcEsSIwA&wUMU5Vv4W_KDteet#AVsz}vLC#; z!!G(9=#KC-N0DLXg)qIHj7btG3uiYC*Ff491?5T4NdUVx9d1e%4ZQjTuuu07?kBRzr@%)sYCMzi$U=1JMp<75(TaOI1w$W$X1%F9ZdT; z@jGLYb{$)>@~Zz+Hv-BU9?_4E-8(olfx}^m^<>@yUVQsSxL!a!K%d2ax?a@1>=iHH zUiy-kY(M|=Kd)PnADAy`)7=A={HT3i5QP`&=C>34l)tVgbH+Pden+T5YR}bYlW*4T z$?yNb2e$w8pZ?SK-hX`Wc8A`P=NFk6$~qF<_vm+A*4yb3B4sXc9x` zZqg2pa&6X*3EsSDWIpcGXLR{lN$&U{rwcE<$nQoz{9zB>E_?Fj+hvzst}m3le7jtK z|Ku6Z(CzyV)(gywe8Gl00Ju1W9kJ?nC%MUY#^H=fD_I(&HAm}BarQ-rl9b$4Qoq|` z=+v!YHxe~)4nuS5zI=BGGnk1UI$R(wH>5cR6F!2NqUu%NC*&qA7(hwy4i}?`~a)MgP>NK6QJ|YhJhg{vZ7Q_M|5~(Z?MZ z>Cgqw$8+G|-kiiq@*QL1L0;ih3kH%tFDC}w{(A1YT2I)`L8dd@O>E?u1Y2S-YDjJQ(oTNDQ9n1kJ?TkL^2O2f&e26qj-&pL0NFUw z3Ku3GTkqCgb$q0aK`SwL7^gu zs2>)C4FH+rh8~f3YLN%x{n_IU2t6@7+P1Aabd6!$@!)GL?CFhlz2bPhN9&K%N#WWU zK5ce^3yXbf+6jRWzT}p!PMn7P0Ex2fS0CYQy-kK)AAeIyFEPLg&y1x}uGw&b|KQ?7 zebr*9VJM2`6=39QolOKPBV=^jjPA503N(|0VX*C2Isj^zs_3wjP*U^blM4U@55NvP zQfw<2TP?eSTVmp}Y16jrHp~hlQ4H2`Ft_3215u({ghkjVP%kJ49!jev9CQ*R>v6Xv zN@Whpl6(@Q`*GKTiFdtPyo9%Q69hIVw?p2JOL^JA)WzR5YL?~=M@z}^L_mJGq!FpZ z#H{e-gD!Kva+|l!q;M6qV{TRs{8-lx-G&d`%4usGH}TGBVEY8J(~7eFCgS)7!wJiq z<0G1EjbG+_0tJ~h4x@6O#?ebrCooe+-8qH7C|$$!+wbI$-6{NzJ=N`)o3G=W^~P^b zioxV~kZhVH$_j9tK&g*yQ3Ix!>Ip|{nfhJFine^ACl>7hSSjq{6x|#OVnN`t7{>6J z$Uf~gbcn5t!h3Ny1)7Imv6tL zy8@o|tY_(6-pBDI^XT^5@9?|0JSp`OA?QyUuPupVbkKJrHq@ z%2@_*`KN%jvG3e0K$ajS4rhiHyHC)uZPwwkIQ(xf z&ExX1936+e825K{U|Z+Dj^FXgcC=ikgIJr7WnT!q*LPd#Co+%pSa9E$zx)+ll>MN7 zYW2$PIDF*q5qwZV{(GtjoiBC9doxqiJ}1xZ06STfiGP9>snxz62aI5cxz~- z`phTC5#rL(4L^ba+pmTN9;!l=c{?cee02wp`1Ie5+Bw#azZA%VG(i0}komGLZY=Hm zD+;d>Vzw_KoR2}Z-imARj1J&pQEf0`UAH=IV&o10PBgPNj#kFy{Rh$ES5Uvk0?b@rC4 zZj9(RkNf48^3Lh?yo}|7r75fQT^o2p$J3b*NtQs=K}haL4}S22>#}BfTbnfs+{`iD zM%qz1Xiv!4W^pq{G{Kn5CLQL>_-& z(X{vGh(AeDG~pgN43lFP7=;tNJ)w0{L^^X=ZR};YYeyXw>#zK`=pdNpBS=F> zVM9F3JWTF%m$OL$V=o#9;YyUql#;5A&igWxgN^~y;V<}r#$HBH4@6^Qren#!7PkE|-Mc{?oZ~yM^Zol%&&(*EPm-<`E zdE&Tx;V*l?o2wW1Y;c0%uYGfo;e35Y^o~1k->$y;-P>RMJSB-&55i!Rjf zvh(7BIC6u6d9q6m%w1|o+qDUzZiDuKblRtSJ76=(jX9d{&{@jW6G?4$G{g~sfP=G0 z*4Sno?E$kx3v{8|r*#5bhQadWv^T%=r-7fGyY_nbNiX#ICM`5p zmpys=r_cST+f$zMl*Z zL&)O=6%m~B_Z7RFuX`mhv@DQhI*vX^}KR> zx-JCz`vbnM-?jhBSHH4-;q#y0KCeGMLhw!f{2RYe06)k2g}Q*Gj~>aP|JU6C#1H`u z8vk>ju{Qc6FpqUAZUKPWSU9Vl#Sxf74w}l3U7|Q-F*;ydkF~e}iL?E8eL4g@G}JwT zGq#aZwTFhQjW#un%jTXSrG=gTXkp+BH}BvJTXh^g=Q+>bUi;eDY_EIm>$b-|;qga0 z&h5v{3XpR{IFZO+cWwB5?7KxI(|=yPb0LWDh&gl4nWG=v_=DqXuf6v8ns;5ZU3=Z% z>0A82DVuwIHx?ImxURr?*6|Qf#YMZ@?6RLDWYCb78ZR?zyC4!~iZugLVB;D9)|iQ= zve>XSXGYq~$b3=^JMcbtn?NH-n*kgCYX_O^wO128BfhxrR()jVv5$S6FH&E2`DNSP zciz37r(ZHbXM6bbKjV<*4gh`ZhKt(&>woDE09^q1%x6C9UpwJKxQ(=*Tl_{&4#bX@ z9g)p#&3(k%u%;1w;+m@hU3gt9jZ+8NRQ?#7a?}Gt{T2V{cJ091pkRe-gE=QjW~eKz z=A#|k04cgwRL4W@Mz|Oi2HAi&SsM)4Ag?(W0L&DR`n8CqLw~}wN*3PMwM(~EpPg)B zKpuY9_qs(I3G0Dg&m;Yo(a+YksF54nHI)W)z07FC4SZ%6j@~yxza;i*A%Ze#y@r#_ zz7kV%i`DdNkCn9NY}c<`4_qW4<)H(F722MCSYzMxrR{Kx)2>_y7H~LP+WG3Ek6ox; zLZ$aXBIaSH=(WhY)NpnT9 z-^ce{T=*;c0)_*w$a`G$9H5J6WjA-JXM91pg6O1h#Bg{G&}m<2tX*X4T813#>DyY< zAd0gU60QrXF_W$R3a7*|YmeB)y3wuKkK5G=dxh-<2`8qtg_l9{^4OCXKriBg7mlKd z#3p6ug8|e^Zl^J|7@H|mb%M7nc6u;%2hqB-X=}Cur zsCrN~SXXyvCnwaYRc_~QKwH21;OeaX*(VO@tX`~`A)CEZDa^r6@>)FoxzncidTSmRJ#!)psRp0n+}h2%N&N2kCqMOx?Ngurls@^JWsa|`jYzPQY>@-Cu$blmXv1pvONj28kQ{_ux%tN;I{ zCsXg#t;YW^Z*Tg%TUM0`o=XlSnaPyQ0!o6+X+i>mAS41Rf{2P0(OPX;R&^LaPZVQ)ZIW?Pple+UuP6{oO>$=zZ_+?7i1| z*0YAa&w1zf{Tsb<_}Ck7Q0Tlf$~QBsE`tX{wMs3s>e(@VXKGC6!{ka=`2r^Xm2;I0 zwOwW;RZAUfR?-E`{upiw<1XG;>{*fY#2K~xul>??tEh_~W?Uye_$R}|58)@|?)|nN z^b`JM{I2---u#^H`Oka)_VSnCw%u~eOSh*y^{Mz~{wL{Gf2^~EfIGgL&!6qntNLJL zjrb*iEGxMfheAOAC|?5L(RY9okm_niix8Cdxnx6up=ZvMc8ou{(nbQx3YkvCp#n@p z9b{#{^C;q?LxEF9Lza!#v54uOw_))^FnRdLHsldmk)x#@dx@7f=cT<#F8l?Xo+jhG zECzSNj2I5eU7W;{NACn75Jh%$IA+69pau3hV!nJ1+~=@O!G^ttpKsi5zWL@$H{&BB zuYdgy^X<%+`6~o>cz_jcHHLG!J>CXY1j3iI=q2qAY72dPg>=>k@wT zts7G2hiTVt1eG`vMtWMa4z^rep;xZT5IRqsP;p13!pgiXD;9|wwD|3nSo(HvZNR)X z6&~uGiE<11FKQ%ggM2B1ABnPC0k7(;ws`_`Bn6N4T84hGNE6#vd=y;CJxX;5gp;3Gwjy+ zL2i@lC^HgUW+xmoI#!g%WV3{mT;nXwQOJrrTtW*_6k>@*d``4=uDq?G<$vZjVo5Z1 zm>3i2Vr*Y5jHtjZ*!&fMMhUZKGAc3_jdTCEU%o&SUnLiS;>bNdsafdaOhL&;(V4b6 zGVsQjVZ~o~(u=PqWNZf0OS3R6%Gz}1w1s>jY0i8sZIRBz!WUoZD~uIGMsi9m$hi3x zTdX)KCnCtgX|fK4%g!~g7#M1H(Mo<2zZW;Afj04O)dYKv>0mRc`zJy7x^hs|@isig+8E4)@u`t(C=w!USQ$lE5Ne;|8jIn8Obd#aBbosU zfnxNuj)OpwWvLrx800cd_4JXs%rsGra?tIZeopY}$LQPFzx4lpY5T%oe_{K;2Y!3| zxBupU-QMxecWyuVlRvq=;Ds;T9{1SCVte61sNN20M&5|<^u_PJLvU&PE7-pK*WbPU zyMOa<@ug#brB|qKs0aRhRf%h@=a$gR7B*fr?890s?(U0P?-c=57oj!EdQif>Kwm1p z3E`cJqL#&)LM|=ToTBf|CMt4^!~-d};= ze8=1Q@oE$w8eE6(OnBlGAHO~4xzF8R`Knjp3;J%|Uh?7>ZBKv3GqxM>%Kr7&-+;Gg z<0rXbidO@%RCtHL1NSRZ?nQI*T^xB;Ym6B%->S&q*pv?r>`~i#PEe{oqy`X}n}TL2 z7}u77Q%wP&G7|1O!^tZ$n;(N#<8 zxYu|g5DxLEM!@377_s-TYcvK9d*;db*}|th`6-uP^5Pd?zWw$$>Q&Qke&ZYX^?|>_ zTgX4Tef-XkZGVJsj{hRQWbj+x{FdHb!jGWv;{tjo3;gJsg=+ylRrLS5JbI`2Cstdur*%$A~KCX-U1iwe9=PzMc!G7tj3GvkIE zug7)yq3w=4eiu&$d~$o=``@?y%CG#&cH7Hefp=5knqAjoUQ2R4;m16##*;7nT>9N# z`SSJ=eBa8u-~DbpDf=;e%;RtM^OF2|$j9IpCb%{%2H!cr5Z2B}Y)-~nN2@4tV9(~* zHPZa#z}UFYN}>IPapsMW0M{wT;b_j_+Q0+yoo}T;=aJ)Az{AL%oNpmS$J-AX%GeA$ zKP5WZuaiUuu^kExDPOXnR3C|#Zs#`>1;|OQT`dHy!X;?j5WiDMdroA9G!;WaNq_V) zv1PsMVpsk-JrjyeqKFNpl=VjQ`AD%!FzP^An$5A7ipN#5R&)WTpZ+R3<8}(6B^hE3 z6L;}-xR_Jl>Yd#&lA)wcf-lb5O@7PE%g))b81h^zs8w9!d{`DMwqY8J1$%^%^X4V8 zMkK4o9L~Cq9=)v+OV}U}PX%X9m`{71SH&kb`NprF3et zA^FG)tWElcEcKr03&I$RC1G)DI_Abv-M|%REoND{EB9@=lwmJi{3T(DQ$zbrT#JJv zt{);{Vnw;uv%PbZ`nK3e+1a|xR38yhoJ5`PqHa}@Y0d-9-PfQhr3e&Y^zIpTkc=Sb zRj-F(#nP#H9ielXKpYbEoox-N8ZxbYEt}Z^(A=wu`!>!3u@o__#R83FrmSRDc}jrs zGtJXqLFFmc;xb5pLn=@L&}#&j(zK72Vp}p4{4qMV)J{)QK*~Fu*Inn&y*fe(itzciSI- z`j7RNQ$8T24}B>h_&bMKc9|57;_7vjj=+w#)@~Y?9U!uk4f2B{{(yfzhy+1I*w9Lu%<)cuYK(S~1Wp`MB2Rqs*_0vLT$3Ni-cvb%vd{4v6w%1@CZhQI5wws^x-0gZiv2x8-S367u#m{K-8{qHxmcBF$ z-wVKBcEGRPlAEz0P^>baN6>>Yds{Kmzv7HS=_)%KqIv8>nNLy_BbO1Glzj)Lx)Di+ z)K!yEN|ysMYVJSB$0$kdB++1RZ0M&%ggiot%8Y;db@zYr0%7#8M{M#*L36!(z~ zb7DIu8jR3(@Z=v-D!I6jXJ1B@-X=aCW8#xRwe@>fe8L`~2rVzkL)BI6wTM58<2cKezo2zF*+$ z_{9Nyxrn~>lMg_zx)#4Wz}Us+eKBj!U|cKa=DkV1>*QRCQR2NqM+Ttl{CD=El9gPS zHOFb$uBl1vRNPt=Qo2YuVjLTD_?n_3reCct>>Qfk-xTa?X{Qmj-UVV z>;GZ9<99x|{p`DbZu^)2@|U+4zvzYhNL8`h~E;{GWBugg_)0ygXp9>GqF?!+Y?$ue{A8;+}a*kMe_<$R)XV@^*-*lP^%}`@X@;A<6Kz8 zRoL>QN-~Zvu%c)>4HA$hOV3flFzGR%{oLycBN#>#nOtzPD>@wlyj&t?td8b9XQ^I# zPTj(eS%k%*)s+nP#bbA%apGzSzZWSuiK_P%)JmJ7U8rGhSL8QVWiD7){o>NN)QHuJR!xitXB3m%NIw z!;<$hS6Uc*s%Q#M;RIP+64g-Wqy&)?GdVIBQW~yYa`lT}!vr+hnv;d>in*cjXM;<) z0pkZ)n>umR{aSR+Oru3L2aa|X2TB@~Y{YQ!x=)5<3yyO07O@t?XrE9=bK_Wfj>6*} z7ExnRvMvHysn_CF{D~Vp5jW%`7}%+&)Eqooh$G$OA0cdvbNQq`n&`_~V(Zo!ZcNCq0VlW!(7{X!9QO3) zqnKdwvYEwWDte?Mt77o9G(;rsm024?7hd#QEP8P)^yQcm3o%sczi`KcYDOV(6`hDR zhlsW$#eckJrw55FjlSg=KNZKf_doS%Pv35T!yC3A##@4)hA|(=eh$BB{a^m;f89R$ zho8`w&fzzt=|Hbs>GS0nr^M;0hc9@Bv(c&^-V`nJ$)aPh@!eEE}~-!+I2+WEkVJ&m9I(ox7~KzcH1j%+rIz#FW6po>kn*Cz!&+Emt1@>78fi5!(`9(NaJ@b_`zMpq&T2e zfI)f6xy70YVui*sV~(+M8`@% zT2sdE@<1D{ua%Uj;Ez3z3d-EPFYv-nZ2KmD^m(@(5^=C03dU;EnMw~eTl&|m@7$wc6S;=U?Ct&%Gm1p877~lJz_ip^y3!i}1cOu}L z&VW@pVrjr!QCl|dS6;vQ9RPQI=F{81_{Cq`K6BTfY&X`g0O$@bfreMd2^q=dKzZ-T z871)aG4`D6#nxqEFl8yZW;~QV_N@?YS8{^U$R`O16%`JQLpD5)eQ%2#9fxkl_mpjA zap7Xt{oY7!Dk)i1ybbSxR-)1~H*3kL-O%H|Q5eciW=-O}JA@t>z+gm&N`PS1dfD42 z=Bbaa&(zBhHsIv2xj3aC>xp!$*eV2_kHW!phE---o03PZH3*%0cxq!_J19&Z3d$%9 zbM8vO*&)1K_pCo29f9_c7q9@7ABgN$+qbkXQSDQQ%X;r9`t(sTplm&1a*tfQ_GR0; zQN!YuJ?vx(oW2B5QI)9cHn=i$p;=scK*!~nsTOTT87=~MfroJP)MwFX7X!*NZjN#j z{Jtuk8`!<*ZFgK0>N|dBauI%^T)L`e$6o;*_#JydWs{<~bn+e%xgD#qVm*_;^IkE~ z-Y05g=1JWWfeO3}!xJ9ui{VtgA)t&LU1tfhHUR)fdDpHurybR1)2KNWc=*U8BJow2 z!tW1=M_iUxj)2?tfR(WGE2aDcFCRb<#JZPz%p~d66bWq;Z!})4j++oR@uHu*YlsQy zrfpCcffWE4LIPyDRa9-LK_VOA6M5w+dEwZ>l<{F$X-^I)RS<`fx7v$h9b_OX9NJnT zC9Z%CfTN+Pea2AgMnvc$;wrPPz0SEWfYJ;m0qH`SbR^18x;i+~I`LfdxG_cDsp01J*NW5t^F0NDkS!F>WRK>lQTpv?lku^}(D@!c!4d zyonn6^d#YY5--tY>Yvz3k=NEAgd$KXB`<+s!xM zjBo#b_V(Dv-e`|7!smGL8}Ilo2E6T;@7CZGGUjBo9T+ES9Y>0UjCx4CixznIIw!hd zWUdf~^&C6SX&N1MV^$JMd-4-Avy6wfg<$HZywdbKmtod7JhPvE z=Xl!47vhzSaaXN$J&BJv4*4O!CB_~a*NJem=cznY#VBX?&8&+zvB;j}6<7SQ@46h; zBYBd8e8-Oi@xf5eeLi5#Pe_Uq@Gs;01HSmBFY4#g{^*mR(zm7aodRFJ`)}owPX=6% zCj;2b!|xBk6I*h|P?-n*@&th5bC4ag5(3ugmupe(4>Tihs>PI4BONl4ji7~N6tkuF zg9$ZXh@jgYRR~s>UnsQ>!aD=!XnWRK>qQfc^{yVA_k8RBefSbr)`-_)K2YWNdVCY_ zvf#Ctzuv;@N&>;U$cLcGVu08GS~d74!_1Kk4ioZ0N9#T5!dW-)A|c!aize~fuk7H= zaHG72Wrw^IgJROeIV_*yDsG)y7>fc2!lmMYwR0bP0W_&~1(NVbUW%4`3d9w?f?Q}`GE(nEp^e^A#h|pi zFgS@7Iemhhs}r>gijXkfQ3-JVFg*+e+<*aR{luCTv2+MDr*KY!D~jPD#iT9A!kU zB&UZZU!y|pOyg^yqAz${Yioz%fU(#dR5hChYY#+24DVoOq4;C~KVzO(Jnp^sZl%cY z5V#(nCna8AAZ178!JfFrKP?cjUG}NJB z5mM%8hoQ;Jd?%L|D_B9s(5x8nP9h()@fA$ILdRE%$j+aLdhv^2xZQf|ZQI-5_7nO^ zzNbC)Y1V0azk1AqJm0D3;9Z+|Nu&eu$%&aMUr^|@*4cux0- zvZMb;G%$ckR^`4UixYg757y-AqJ2kf|387g%i26rbgtWeeMdQDKDDYHH_8-VDnu~xxvvf#%XdnV5M#_8T(a~Kp?O#H3t73# z`A#d=_yxK_;W8{K}pK&I1U#6F(K$j~-LlQdfg|1~9}F zrD;ode38zc%4N*adAKpVdsWM_3F&bh|m19q`exaZ=W61P1v z(nr*_83tGf5-!gDc&8W+v^>o-6k|wEL3%KhV>o@=f|5w5lQ|{?7>f88I0kcSu}_x) zf&p6_c{+~XV`uag0yQ-pR{sRU@SkVgh05;8Dz6lOq|!SIc1L?X;$dd@x2n^7#m!3W(@#y^cMYbr(|8+!7M ziEp6Gj?&UEn;6)SeAryI^a-^t5mY$z7(I6=6!rdjF= z&3lu%a9!*K{y`G%7(x>2#4j7jX@>RFD@z43z4uKja(uo-*H?PNpD4<|ItW#7C>R%A zC%)Z&r)|ZvB4zYwiiHH4iB_1bi?|`_d}Ks{V9iUs;wfnHx@L4`yuFmUCW%~h<3J^C zSo4b25!cavL{U7;m^GEKM5zsAkt;u|?SXu>ah%pH&q2D!@c?DI`w|ndT3x^_fbaHF zJVL8xxHCy|3-mc&KJe$9cS8BIg0cny{qc^u8+#dPx{rmLWC=CPQHHeWH6%m%O@Jwv zsaaRi6G=-FSpc~sFu)bJOn|mC%0{s%4hcQ3Qb2;ZWorWMC%r1~cK~qC&+_xmIiEz~ zlP6EdMJ>cZ`Vf9?fnVHp&pr3>S-kNoKlAgS zANcz-{5hA>JD$`EIUuy?lB+PaHpwopM(5RKtz!z2ew4?Y3&l}5Qg)h2t~$9!p-N94 z*0Z&YH%i%ivOF!NVx2M35AxD}N+A}!osd6y63c%HK=G~xp4PiM&V5Oc>fvIWYa~Ie zd`vdP-7)k=F2Jxo+O0Ymlze6Bh27=C)buxfb6h?a-vHEN#J9rZe!(E65rhZrqmZe3 zdRGeH6>!y6W>1X#-4E7D-y?AO0gZW1Jmo1*ryM7I99(4(?fb$<8-0G^tkGSxB{pVvUkxXZCp%l@E|Ez904;*%u)As3nSEI0Qid!jH{<|tBD0YcUo2-l3XQj<(_ z8gittAiMOiiTFi+m#(fS1ckBBGO8%-->G*bii`1xlSoq5x*BV{foMJrhOJD=Aek~L zHjF_Q9|X+$>~-=^K>NvUrbVP=i$3#`#xCl5m7ZGOhoLwYy5Fi`A*Eex2%clwFn(aN zTD;!%nE27cACcxfB(^BPAU9QL&FCYApF|a&R5f0igqv)PY8oI0L`nMt)|7=IE`r!VR4o!;AIMq~ znqVkP_8DNz{D{&yS%K@kq=^*nRdel$C8t}OxJEQ60f!jdkDbdUZzr0QVv^fz z=3jFMuy~CFW3Rdu?Oxrc~RL3Rw4Jv>_8->S=?~LXi1vOE)!FXtxhc$zpvPjIJ5@~OfJPJ zQZsuw_pyh2z$CK8xZwzJ_={-vRHq)w{eb7m7w#Igggl0GN3e`WQckQbsUeF#fFzZa zlnFj;N=vkxZR_rU%>1^`@<-70SnCx;eps_MI9?VnjMYs^Z_lQCvYT^A!Ss zDh+hDVNXf*(o-pk5r3wnUOTysW{_qK)W zyxSX26WckMmZRXwTlzXs&sXL7Wqo}0^MMEPS^jVHRsId%;C;jP!sonTd%^QxbmHb>^`K|^8>O5F}f~DVym4jA7w>IREj$y^Uw_}uW$#Xe+%y)i- z;KA6Q63=kUP&NmMtx8zkJf}p_ehH{Oh&ph_J*+`tDCOIzAHIZ-uAo=W6$ke}>Zx!Z zgSY-a=lh8IoDdg#xzX z1tdHTT?C3s(^5Kjr>5K57y}udp{$dW;x(f3w}6Ua#|fcIOEy;WsKv4sCS;*4xlx7U zD0ZT1mx`^dL>LCg7(0?M5FPEwx4YBcaqVu8!IoS_96n4qtRN~YA`o@L7}WGF|AZVH ziTXZiIe;iR3r=`ay z9QotN{ZU&%wPDS{l3LIXe)RgGVx+^sq(Zj24Gdj{%etx-n3rgUBLNPu+2^?+YqT6n zc9>pm5;D4FLF1M|L}uHCr9~1fb9G8~3aYdzxRPtVvS}X?EBQ>&lan%Wpfb z2Xzep6wW*;uUc_beDtJxpeqJ-9#<^^Rz$Q3y@D}n7(}byNyTFMCd6Ns+4ZVfB#g;;`olPH zAV}sE78qV=OI*y^OHU3obQ&o)&N-u9*~rit2wTIlGF%prkk?P&SBy}ona@G65+dyz zT0=@o_lg0%_#99CRaDjyqUcjqG0`4X$<26V)t~F)0y^&j3wnQWik7$;i!x9ht*eyi zdX>Mlh) zuM7P2PrY;d@>jlm z`O|lOdb{&ucjD*lKE8eA_dl}z^%wpc#t-W|1Fn7aV-!n0p`hGn&hn;nUB##=FT#w| zP1ldQi0F2rl97HLl!I!D86#p=s~u- zNlCJXlafdqX;ca=fYsQlOv#Mgx8f{I!%JC2$dcwz@jTbCF7BMAxXzDkZszA0Bm7_I zE<{D>{n=A0Xi!+%*|+6p?ARKI0aY}`pBM~N8K)V{J_d0^x^ktEjXcd(kU&gGCW4A+`BMDh*` zIKuE(qWv{cu_;#jHOR-fl7%KFvnPygQjXKvQ#q4Rdu|9E!4jA{WbBuY^Dr(Y`uB?U| zBN9(rn&)aKI}&Wb^4~67)RIPDX%HV1Ln^X3&qwC#gqER9#bF|`<? z)9FQ^zRDg)0-Zjvn&|*MO}Z`nz+nv z)hR88n>mI$XCp`|Lr?RIT3-Q(eW~xtGp4IWMe; zst8wz;o$Zxo39dd&;47RO!}X=Y3*|&{UhA`W8yk3;i)4_zh7UjMq+Z(qT?06vd*1KfG%o!cGwnZY|h`cZtb z;FokRU4Q*!@I|CJxA4zj9Jqq?U}Nvcrh+M3eoemNePfOFcP(3r5q?s!r3x>xq{Bj6I)ZWnUG zXG{hLp8ldb(l4WaZ$Vl<>Nu`b&SyX+SO+WbPiy&csjb|{9n+5`f$aBH+6 zlwA-v#lz$Z$VIm|*~vW#so6q*avKdrbhP8x??Z|`??WK+4n647XDX+h6fov8w$yt_ zz;zION3wLg(ePI;cIq)vtRobv5{_Y4@CV?c&&6z#V=Qx@!N^Gi*!V)QjEB)2UUcR^ zlHnntiW1)euoS#8avKR^*oEhXu4BP?Ol6pr)$9GLDK<7sz{1>6) zcP$)UKhs9GzK%H|I|o;kiFmK%rgp9zSvhA@ZgxVWU8AjV)E{&e*dAZJ9d#B8sK{v7V_Jtd zJw?fndNisO;=o8T2j{<;no#B`Y z&N*I9@Un@2n;A%1{1$!D zb{-&29WBVIs5oWAN$T9 z1N$bq!}NJ^!ZH}`P_bbc_vz&i==PBqI*_H)eyKF677~w zXrA&Hx%*fFyAoq?8@>Y|O6XKANS3Jlz>qTglHu{-g_(v6vEw66^Xy4?7d3#yc1p=y z7X$R+TYg%-f@r^sF!H_UFnaD|1&Et^Hnd%=wOlPej(>;RHWgn~Na!=zGheKWS!(xdg z`=TgUp(Frb$CCk~Tn>RcoX3)A6&Nhkb$&4n%n#QE3i0RWy_4DMi2ze|+(;glz`Vs1 z4(iez1zfj5atQ)`>xQg`=0qMMT|iA6j@e0aiP}heJ>$DM&JSpDmH~>hYy?k5a0(F< zlMQDL=Cxy|m8R@@?nKEEb(xbaEZ$R?Mle0Oh`J)+0f|T+z=Mwa?!8Z6IQF!sJwxBt ze>+}@e9N2PvOWI=&)c5zpx^58`nKOtCQd?QMDH1DbYN@!G(z6KD+l zJ|rYN6Cg;odlbbf3pF(1-zf^hYQhih-Sz8Ah9Q_d2iZka`aEVB>^%m^|T{@{G^*v5W5L6!O$m>xnsY zjErWPb38H8u~%bkvrS(|9TSm^pb6yk1iV;Fl^UL{mC%S9SiD(Ae$+v5^;P(JQU0R> zPonXs?#S`PCp;ccyuECD=}TU^{n9V}3;m+N9d~?q`<>tU?d=ag@$v2N?*6hqR=_6$ zu6;DWGXP(9uYH47De(MO}077d6o$>IvMH|V7;Zq;(yH!%h!UvW@50-RWC z>UPA2G&VufIIf%EfSl+da2nAZ9dTYdc5+pNn24b497X{Fz<;Sb-ol~d`C#9ajs4IZ zh0UB?@hKG)C1BkQ!!Z~MGLZ|^&8T2%mT5U;H|&NqULtDL(N_W1xgHDlup)j1?bsnp zJQKafyl(N_hh!B_YCq8*Ye&V3TH;aaz4+Ehlxr$_6FW?WtlF8I^R{8!_|x@ta0tM8 znWXfUd?CexYotNI1Xfld#1#Lj911+zbB0WmqoRqCdg606+COn+*wmY4nQMv4#gd*I z8MO8%*J&BzI{-3C_~}o{xKL>twQZ#C6`Y0(zejL3Pcjy0kIjvw3fn3VEMwfY>6(14 zl10QPKa~35BWCv1P8b=?GN&Dpo*z>V=Ze?isf*5W>=R1niN&7cyQE{mBspW` z6Oc8f!+oxaEk0Mw=BEjDlrQR4%h**k0~3jR^D;^1NmBkFxhM}+R|Y`1CsZ&?Xqy=0 zo3g~Fo_N7s+oCEy`{YIk(^PpJ($aXkY8L~>u5B;_rSfPG(W>$Ahhe2m1TCut<33Sp z2AG~H;-nIG7aPi3g-Pm3ei>Dd@nPR6Y$k;Ny}d<7O4_D@3t&m$od0Ma6o1gV5i4HSG(*P}UfSCt@z??5w;~QxKRS|16pn%nU{buXqYSn{rKs_lz8r&W z#YQVM2q>fdyfK!g4t{0uQFxHSZy0~z!EbM0|N1vBJ%CpopMeMcKmKEH-Cq5gS6_bp z?Qh&(^uib5LB|uw`Y6QaSNicy|ICM<=hrL!_?f=TSJA1zqg+1)$k3S+I>w?*yCw>P zoNh8DiWKfs&(6+b@L&LQY#^X(g-a)bd4N28Q%vsWor=Sl?805dPdvkTB>mt$LbCyTGnM>-YTXM_HIb~u8nET0`vBnj3|qb z9g8Q*i~4fCgHTqDv7h6KEb*w%9)iWLZse-mD7V{-_ku9xKY7)3-yzOm6%T#XX*=yS zrdysAX%&wpn6R>pWA-_ z_y1tK1Mdv@{Xh7F?Jxe~&&6}&4L9gZ1Run&ZalQ%odu|mJ(WKdpMLcpI%T0ybWm^# zG)Q44fJ{t_(0+0<^wbqNeN@O##I{>F8%Wx=j4RF8HRK^8u3^QjIS;I%(VlTErMlcq zvUddbEkqgOHkn$J%%ea!OciDPqfB}mgugH278BD&mKl7?REH2Cuinc`R?O&14;$vd zgoBS8)+sfLOpavTl1Chv13{;#Z2`wrQqCY4e_CS7d=!Q-W=u#oC(+Xk>=VeY1vT8m z<&3H@?Fb_b6C%WkB(E^_FabLjra=nR@R((Shl2XH2fEZkaoIuz2xap~I%XK6HEhRY zosaY}k)GQV;*u`wJME%_j9~r|i{7?eNB%(ug~Hc(xvNrlibSSG=f22A22MFBXE2Z! z)2c267`1N#q;y;ku8iW%z0Y@!E6}|fHe4U*io+;OBGTe9=VdRr@Btxw3>U&q2%#); zuxK1p$=kQ2hv=526`r#utA<#v^Ei@PK<)sg-l#{a@ng=w&|2P z0>Yd|Ua%T<^oN2uzW{qr9=h*?N zX!qsaA@;k?d!cNI)5h5uTsT>g+g|C21BV&zg$z)@6nh3+M{KrI40{6ZtK)t>AZkZ} z$KkZs9S##-ym;vkDdJE{5TY)xzu!H!@zSr)-sLJ%bZ2Uqf)csB{qsb8QHcTw&AtZPwf zYeGkttM78+(Jb&j59;ISB$y$975{^X4;=Uwee&FkSNi#C|BW|ZzrE(Quif7Iqi@?@ z^{Q9!LB;mur#$)6RrrkZL-;5FA9Uc7!B6)qpsVrfBAeg33^)4ko}Wf`J4VX6b-VLs z!p7KpJ6vHjK$ow*s(e0jM_bpquq&*c@d<9H#pD9Jz!YO9=|_GMeP{iZ3`ZcS3Cj}n zuFk{Jx!PK7%h<;xr9R4~hfwD-;S+n%frza-1 z8q-&C$#2F|;xP4*JyKus%Qo1_JICj+u|cmI6rN+g!{#!6Zjc`z;5!5OhbIGgL$zIl zU)i|jmLIr;zso=Sv+vqI^O?K!u7D4I@OQS4fBX~MSHAMq?Yc)_yIuE~>-5op2Oq$@ z0+L`o@S-cFJY%E`!ic2r8H0r;N=~~axeL^VTYOy0^KCJe-j6bT>vP6LJTN-kf-L$q zlJyCHaXL2FByM85vk6cc>@?0PMj<)$7pYbEQkr#-j3@0AuH61cWq5%d)VUpro#2@a zbZ-mD&Z#GqtK0siphew_iNn3Yh{M>W-sfjIWsV}TOjKlx1EXa^@q}ZFU114K_bQwD zc#`-YdP+-AB3x(7j7`@q15T)AS-Omqv%nP+!_CmR>0w#+2x=luLT^B6CMm{q8(nN4 z-_y8>FZNpJ?m{w1aF8axIX<*p>8Xn69YhLfwC4)dz*DP}ty%Wj9Et@FDCQqq(|Ni( zTDM2=x}0_2gMm8)Fl#=s@lEfFjdp8`396}{RG|(c8i~;7;pF4^>R>ntAIDw@-YnF` zSim~HIWGC$hSDrgF(>Ldl}scgat>95W06jav38Ah%1}JJSR|?ZH7KIrq3_qk;glH`6N8E zjATQhNK2cp!C}tIw1EsQU2CYY1aZ6omEYRKw30s^YAuQCmdp33eeF9Y%JYVd^nvDz z%b^84!ojMy#D%tR*GoqzrJ5BWfuug#^jKp_>yQe`4#0{~)XEj?{?Ay*YEBP4RscL; zYDr#M`$wy#DpuOK!Pk<2U-_GyRwF&Eoj@@%`KV594jecsswowI3fQ=9iY? z!G8s4zjmG)xt2`OAcvu2a=@hP**IFbaUXa+7FY1;gDoe$cVy>Fu^^m>%j@KL+Ma_U zI^n-a$K*=4_R@~E^@=fAto6&wauo3slra355#)*H_guYV^jxTBoXB`CFtp&LG+3m>Z{jwE>~P3@s&wnFC!_1Ag4N<^eE(sEXf0c*e8P6==> zC%|aT^>kw-i6avAHZK%9?tySn8Ul`;fVhuljjOoqZ-o;g)1@v=+K%cp6r5DHOF*uV z;$VLGA3sF8*@MTnQ<*A2c?Pj%KoL$@o3Tz1)%7sAL;%$)J16HFj6yfhr3syUkvEo3 z6@(5@r#I6344E8Aj0zUY=qW;DW*iCu9nV%x*bAHU7rRh%nYDY0V9V%A>*{EN19{a7 zQ6-d|vD%2oMq<3?mNw9K5+<&qhbHSzYyR=jLB~H8uy-!WUOS+yYMq=0S&iymZUJPh18t2jdU3_o;_SU)vH&{7+%9Nc zbkZpT;GCanam4>F4;-)9lgHBg+EqNt(=5tPB(#a1Ni$w%vzjdABw3PwVjL4Kj_0Ul zI#%gp=Q#L6j+&DgL+h#C`y#}7(iGnTkOHiJUM-~;3C(81j7}54RQ0AQVL9oLJg~CI zr5&^*r@`)G6HV6_h9C=|0t!P&hoMFG?=b^rOH7$lwl)c8`&O3+n>o1gQP%^uri>B8 zve_*bWkaXQ$w@Re-`)XIFM{R{pakf~r2(FVFJ-V7_X}92gks2$#g(firxtQlDN(Q( zq|gB}sIp9)=me8J4#-KC=S&yLVYCNl7Rm-Mrw|c!vbklV0M7?sR67rtoO+7Soy!7x z&jz7vGePea6Jy*s)?iSs3KNoyl#Q$ji(#acv0;w?CwtJ!I>vTRBV(UUhoQuY08_@b zrbS?p8E|yTg%VrG+HjX=#3u+Igb9AX9JZJ6Y9o`> zKd(_oV22=|K`-roRKaz@F0z5Va{>eXUeu@ymVHIpvYp+aiOo*W2{9?+9G?ISD|ieJ zpy5wB1UBRci(T9cR-+|Qp2~r;@N$S%+xeny*ri7FJ8Q?e+TasU zi0MfTP+2A=@Wk>Dv106Z1@Mjs-WBiwKPJE}ad~^z_dIiZHlEnK9UtfU(wDxtedPB( zvi;`!e{=iL2S2pkjV}*;@ZkryM_+?459Id+z#8TiOW0itKT%1*YQl3`gJoKAE$Eq% zjl4wO9X_6cmV?xlTe5xE$k+9~?d0=1EQuo2-mW;xwBO#1IqOIISe^4BvlR@DAR5=> z7;~M-ISg`hHf}u&Q86{|vXuGYSnCDM3^0DrnZiDM-+enW{b4E}N2-e*3>0I)XEC-J?f<3MC#M?Qz^uw>c z1vwPtsl^-HP*S6ZWesUPq=wZ|x)ixU?)s`Br1msMxOsQ$^{DwHbTfn9y24Jn5uk@d zaNy4Qyc5Skuj$ezJxVy%-X)$c@W=J$)K{#EN2*e$dIVLQoF*c70TlWgYYIC_b`z3O zO5ri9vL~b(`Hi%oAG2Y4uBLGnd-`y$&|on23_X!7{Cl~euy`kUmWa%?_gvKlkiNV}Sp&{v zXO`2WaZ64-OtI`dc^;{OpI`=%x|Y?Rm%)sTX%Kdv<5JTX20r5%fiMn3QOUv?5@`Y- zNl>l1#0Cx{IActiP57ylsKE&<&6+#9k^`-(E0Gb0ysb5f&wX#wSue$@K<&p~OrCNT zwLC^|EiE5-aLmHY;PAl-~Qm6J86<7C*3rjP{YQ+$>$W6bkDRJo_|_ zaUkC8#mH^|bA7_w^7&Hz_V9xbZ{NJ{9(+mP1KUkcylMNvSN-62`x}2`d+SfUb$iK+ zUbH>-agP(jxAA%Yd+xah{QOM+Rr*OWJn|Q}@=_jfL|^6Feh)H+w`&1Y$UWv@S+Qs& zsd={Jsw8vfUbmf$dKiY~kkxBj;sB`?Y|wE|ezoFFU~%b4p(JbxG2zOls(7jswCm-Z1n+=)Akt8&J~D<4x$w8@#fd_*&G6-GsWa?r zUr4Xi+oaCxi-4>}0Vkw_)zVZf>r6^;=@0fw4rIl}vWcgbf020{NtjN3(i2gu zIVQ-;Xy>MVgn5O*l~ALpY|YC|rOBa^_WmTc>{bXG@iL*E5WVT3s{y<6qf3ftN{F#p zafH7%rHLTamb6SDK;w4+;6R^OUL25SgWA&OG$c34@xL#C70!T;Vf=NeYB9y}Aw5!#asOE*`9RMP226Se)aaIH@|6n&1+t>z48^W z+#dJ%$0-)RT^QfqkNfwylMk}1@MVBpWBz1VbLz!JcvqZ}%e%ZXe#Qt5Ac(QbpJdI$ za4AVPo>%w`yBl*GD9ZtioN;ojCQghd0j7!vj>9AT0b>FmUC5Gz6I1PXuyn(4cyE6B zfiBmq#2UNiuNe5iII$6RH=b-P8{lS(AwFK@L*-iIMXnmPn@fsuw~PlkcS(KqVmC^5ICr>xTyBr zgZ2qU*8{2s6<>6!dz=u5*19sv+*(q(cB(;y;H6xx1M;+EDs20#;HTak6(sR<$eNT5 zT_p~_D?m|0$8();{pUw|ZoKiv?G3lTfq$2N^;duO@|~Z!bNevf5%Aj|{NQ%iU3YEY z{?@m)#{zRTJ|@8L|G13r0nzy_ZaU`xe~AHmks+w5hpwwt^6IFmi;5)UK4vknGfIF9 z4m)@7#nVBS2}FCYxxl!_iA`QgLoHjc6~A*X6nDD<*yz zd}S@KU`jw7v|+_ZQTgK@p;}ZpDCQ^?RM}HkSfYHM)-@kE=Oz}B?Q$hgT0t^hJuE8D zxo@erINVHZ&%WYXY#P;C#wDwm7GDZBLgvLWT&T91;E-#jTytIq;NL|)cgEfz!RTpYp$%!ecsI!A@yJCQy(zIV6 ziyxinOK4ZcGu;&2j}xqr=iUS5L&8h^#1cxoJZS`-m{Id+%#@0(SagRiAfOqSa;Uze zFHDt4nBdF`k8)C;auU*&xJr)5vd2=z-Tq@fWCENPPHj04OUKoNwX%$7t%-^JJxgV+ z4xH#&AxnMKtm?@%pwu$=j3PyomqnDE0yN13v}jk4CaWaa6Ghr(D>kcwJS&=d;_hZJ`t9j(3_#yZH2qJclw@M-LDhY9hn94k^`K#={vM8t`N1GM6S6PAlxR1X9K z;e6EHwpvNCI0R0x|X7+>w@0|DCbbN%^q4sr;m)f5H}4%9J5$3B7Rl*NR_o-I?!p|3fz zP~P)_9%cNW>^PTf@TFGj2?uYkFSFK^|C2N>@>s*Hd15`rC!egza8FEfN=*GE0855{ z=UV3j<;s!xqu0T}aEJ5Qg}-%-kI7V>cD@)>LRwY zQ0S6i4aS521*&>wyX3qhz+(fHV)LUil`~hswaD4x!bqMXRjtGXxN7d8fWT}zE#3~W zY(1xPC%`-gIzck&_-F@V8#RDTHQB{OB>t%4eJD;fMlVGfi7-m405YAA`#n=KcFdK3 zC8B9s_AC9UB;h~7?gfO=AolKyBMS?N-RHgNG%`=lkJwYAR&G{(qM$F2?Hgm(rSU_D zVTmO?;i8#H$_A6hQ_epMgz3RfX7gc3s#-f5?lp^Jt*#7uKXAq-UK~0e%Cs<2LvHTi zD3vT5%M6O;ByUr!qt=hkmN&Zcbjsunc3cB^qupZJ;T@l#iKLL+8;&UMW?lsEQqY>v z3v9|6Gv}UDH{^6Mxd=JiLWAuV-#k!T?&g5$|Q$4A_nPt+=D z>7h(q%i`>aGzoi9+B%9@u6ahoWD!xRB2IF+8DR=S*s_v7wI`HgJz*a@^bQsZU6E-0 zKia-i4&qQ1bR&&&Zk;Fl%A8!V&xRWtD9?p6=%pU>MOVT>6hmOYFr)^$2_FQ+%s}r{uQ4N6McoT_KEeoI!H9)8N=^v zYgItv8Cjed8<%{}L<&G>bw>S<6V0f!&<>47tU$t7$h|?7tFO8w!deaJSHUD>-b-Y! za%rK@>j2uR29&mho-sK=mONebJR$iKo~{$Hd*J>D^re2+U4O&&^4o6Pe(qiWYlKrug;VUBEbXBfTuGb+Zz9J{|L@DN=gH<_OCF-;UVa?84hwtIk?x@pFU zYYw61eYdmbZO}9vWG_u&{C53JxYi5v?A>#AltrJtku^;p`Lxft{Zc^ROz}Hug`@8_ z;XoXI(lB2r$X^j)@>gAb)%N}0|Ge$F&wcLpBX54w_6fWz;5Yu`f85^xo4>Vv5#Jra zYsRDTJpotYdqia5FBz!o2qo}U_0cJ(aS6&bL$44xJZ&AUREk)5OtbH7)K$f_5?f9U z$x#HkU^||*BbK@0%%d4C+Q;MstXZ`+EufG3*Mw2;h*{_jx zYlS)AYiZw-kUKZ2^rM)HxF(vW;gm0$EkcGgtW7H_3)+t=FnEFb8SULa?Z-I z;v?UlntG5)o(CRdkFf1I3jSQVNzs4bqB-(~Q+?ZVvAs>dQ>F>kxe;L3IS$w2{up zTdbKr9*#fn>;oHSnvmkdS25 zd9l~%glI39ng@o8E_3GP_?Q=@9Z0#PR2#~A*@-&9CGp7Y+yfk$(^&7T#VZ;`LLZ*x zsC31U{k#Vp_lNE4&0zIjICH?xA&Gj=f;vbrrH-{CE*o-K;`lJGi=!=ZEDECdS0(Ek zfStKXgo#`si>8Q3fz3iaxyZ>DJgNfjmJ)1$j?}ubP8vDJ~{X(J$S$Wfd{sG z@P&SCPk;K;x0k={W!pddpMHM3{S9x}p8f1+@ooH<9=QMh%iqG=c==2LzwMhoX)kWm zfzsaguXe$o0%9y0$TxS0<|KfaW6IdlH(t^+a=UAr;Cp|VuB^)k&qF#q=!#^=)%3vb z;l;tYnH-hs_9)7zOI#wC@D%TQ#E&`6X7VgCxl$kV(ZTdkdYcuNf$W$oeoEa4qN$78SyjTbK~s&^t4eMxp01>cT(QZ z)YtWe{<}>Mius4wDdszWX2Yxdc=yml`sEM)wBS>o{G{z|Kk>Fl-TsE#AHEAeC-{H- zU;pR!+rRaJ?Z5xopW^#M?%f`Z?-RHdKPkw{J;a|Q z+0!iZP|zt`qDaqLFKMfhD9>Vn|r3zQkQ^vm`#;jU#$_^rM1s;SA4e$p} zs4FjL)j zLs`>5_q_tiCZJ}y70v=h3oPnUl#;+sJa$_6*_B;L=Tx~)K{*~GSD$>?uapC#Ye>bL zuwzny8Ne8me<8(L@$WVxAV$JxLSo)~Q}aSUwt@I3Y&h?s>Q`~>NuC}hUV0r?b=bLs1E`~bq%bv9XtA$i#c=|285WABJ8QBbIjjK#0}EbSL^ zsd!MtWu7tQz}j9}3byX|&>r6bux^ZKxQf9b@C{NBF@=y)DwKNFMnRO`5e2P+N-Z?` zYO~jz5h))giT@h6j;?8)!Yh=X%OF@7Isy&kl3cojZVDl*mSrWF<%yX2G7$f7T%G?c zMd3@;h$1Mx@>rn&<+?H#HtFMY`hwbVlgL>5TzET>1_#fOj`a!v06+jqL_t(UsY5oW z*0h5y)DBEX%g&o0b76F+EGfe`fy)@Qc${Ek-_S$5)RWY9rPBlMXknj?O;OC1E9dP! znh|U`%Bo|RJotdPchfM^e{dlVYL2TfNh%*He0euLx zJD8K@2#)G3qGh8ZWlOm(u^qD%iIv*&7ZP2iW_6bDI6Yk^iprjQm$9?9jV zNT|ht9KuD3-WT2_P?`=!5k+IU*s5;Pkc81wS0=D$^oZOb>FK`Kj8e)NG7d!IXZiHt z{l0te)dT;Vo^aFly4SpR`_Ui&(d|dx^rr1aFMOds)2p}W;_dzT4u6&Knrm?foy>gV zp#15)0e{yG$>*HxxL6RixhJ>>s&-X_0-bcsWj65^rx~b+6nv^(Vq=g0#H*px8nlGU z(wPBs*Uhm555kO1LSJZ2NiF;`9{n$UVWg!GisOns=L~k|pW?Dd=aKyjMnQ2%hl8gf zhMuwDU;CvfMjFop2y%KQrl_f+<)n@-`OJCY5aI+Is1l#BMoxzaI#g!8#JcA*#|HE$SnWp!V>GpffG0~0| z>?G;yAS7vu%cymYr&85KPcL=t0h{w)_8R4&@Zd>(9Hd`DuO66+hOwn_aCnVbOEPikMV6 zCm7zUJRGAH-jm%iQK8@MFZdB@^utKL_M|~+T}aj0Rz)iStw!<|Wh^-%NXA+hYG^Hl zCZ#7dMd7&Gy58)wbshv+p4fs~d(HcaF)kVHEVn)P%Gx*7DrOJb&X|r~o?};8VC_J} zyvSGfnq&qY0X{DaAsN7#vX+X+f?eDYQOZBMSp!ZetFQZY82x7BRy+x&r zoDhur2>>Rs3r;MHk5gjSA{t;myIA(MDTIkG2|Jd44 z1KQ4Za^e@BFh|+;^11S(oPQx)IPHq*C;?6xY$cAlf&vFH5)~a|AWm_jr#Kr?CgTwL zxT7lZdK1RhWbcp%zW_jVl1z z*6?H&)`BFMV%gbJ*SXN8!L^$-lNw^xkm-)_7J$Cm5kNI=k!zFn%KlohG_d)}XkYtW zivz;8(ZE=(73Xclf%YT}nHO=)Qve|iZ8o8RX@T{OXZW^ zqeJnzd=9|2P*glwBQZ%f&bTZNIJJgjE=TPQuhL!ZFXp@Vo^Ne@)&HqadD`|fKl5gM zzW*KDYku%G+q3X$Ki;;hSMK=a0A1xX{e043WKz_Oal`@x#<1>`C^>A6$^cX8E3vgF zNaJLwpYn193+tg4N95%p)2^8WJWn}5O^DOXg4$;#6S!hytiUh^LRn5*7l=aqiObIS zdZ`J5-73WJEtPDz=0*}c{P4PBnC!wMY!szeBu!!tKHy@@lM)T(ps>MA9dn9jtw+@@ z7@OiaV-=w-iPPEvqWYBKXzy?n9b3_bi%+AmY0kcE5HxA zsjY?10{=`Dff>4Fu_lMBAE@3|1Uj+>(2dnt3R(r-}B68Ui$f; z|Ap=CZ-2+-&){7FzwsNtvAySg@7q56na^C}laDvv_*g~sFn)R9Vb(@3tk@OfQfiRf zHGM>f%&a6#dJS^G-jEFs-7<+T90Wke|5ORa>pvaDrbv)4Yf9;=H+g_iepS3wfFUByO!B7Mu#f9-igg@5P>mEss(JaK|kcPbU zK@@sks=84@Q~t5*1qZ&0%C*z5Fb3)vvt9k^BTdo3Uu4;Hb3f2e^s(zC5?2Wl6LI1g zzS>44blPk+prGWe!7(q&)YdxBI2U1n>C1{m0;g;+?1k8^s+X5N$39;eY>!dZ5*GQymG z$j7$(4giaIr1n^_rPU~G2XUqyhN&WU-^!WFl?nF+m`V7gLQ*6c%oDSBpBXIiZ~Eni zo%1=4)s=f$Ac|ceS2j7LrL}!?vE0rvPTXO=$k4XoIQGlFHMG(0z@XGVc^dJ^1941P zVmD!CL@30gV9tXH-EkvCUj5wM_O{;#)-MOgP!*537G_PoV>FLp3=|hMs+|z0he?^> zrtH*01tNs|GOh&6M7KhjK*M1;(?hlp5sIbcBQJ~39BD_EI7lD)854l(4BIMNl)UdbK67sc|UxS7oM-i+xzt`{z!+s z^~XKATY$qJwT@T9wGSB1wDCGFeKMerzA=rkdU@TI=m410;V^z@NhWlTRl6y8r12Tj znK#W9H}c}>s8dmL&+m}i33Ulh|u4FrCPKJ|fDm$JoO%Dpz$xJhim4B%j z7k>_r59BH5uZFO{@x~kYt0I?hExPm`oFgi|L%vjZ{vx`>+szp zSL1sEh}AU${fxkMhP(aVnGn^8>JqYZxg>z1G|R{kCBYg~zmzK$0uaw?)6P<=6)Sd3wZlVKEv`3m%bP=j0mkZwJ(D z7?QB3aoPfET~nw;g?^{yq^_OQQ!zm~(My{ANbk0EP1zz0$_MQ-jOE#WXA4A!VFIcp z!hw8TV$LI9yIQE}A`qdqk7;`XnLOLvI(gz|voYqg+K}pcjB3kFS;c zz@FJhLpz2Q@XpVY>H5X#PX8U$?|>f;i){I59c?Oa-pgT=XgY_PEv*SgU>(i`E4ld= zZa-qVj(cKx2sV=9LRX^z)GsbaDxt1PKo3#IdII2-C`fA79XwwkAb}TZbWtZF(bG&O zW#7a-5T8K8VVXz|XQ~r1;d)SRo^nrPHh{2I@IN-YSJSB`0suu#4&4i;fVjv|yozl(+ z4k`k}oF}{}kf3amcV^J0DJoHWusjhtzn~Q?C)Khhg_2{jLQe*>oYXfo?W6~?;mj=I zvVbKJvfw;#Bm-<90d`aV!Ln=^KMFtLNAP|3e|x+4-g~wiuD=mK+xLp?9q;(5?PuTh zuI*-gG1sFXea$7_3Fl|~`FZ}U@v0o3Ea1<2X&;Ld2le(Wa=KM4mgPF=wXc|9R9b_1 zgh2M93@_zIhC98PmOgWZ!!=jK+Q2@0fTFcpl9h=58eGhR6fsy3;mmK}C^@ zp|D|-4?07u8_Y~FpV7cartvj-ZKY#;d%`1Qh;hw9rnnJ+*MT{hIIos5#<-$$&BD_P zvXfuldxXut{BmP7czEG5Py3A|PEiZlP z_5-)vf@{>zZom1y_h0(;Uw`-IkAC#OZD0NJSM@}|qp#z~kRGL99-%|OH5z-N);B$M zYH;KIN&h9&266=68x36`VCKGd3RNBIV8VRVi;s>tqdy)rlur#yrg89skh8$-iDT=N z##76zTzml&kH7c_Pu9`a;rA@(i)M8iF(aZBjR#Vzp2$<4_B2A!!S&eHKHS@=)BO;J5SnjjB1{ zXMOCo*9KiQ5V5h_PAL7ld5GJBxw4Z&_mxeG?c#5=3Iq*D8dVYJbE$zR+R$NbFBH@vH-rZRwYT~ z_o;Jiq1I8QsGeyPD|8n-loP#xx}t#}AS{ZSW>0zFxiOc+Tv}jllpG9g8lmRqo(thy z+QGfZoWXu*W1@{pfU|ftxvVeNIynX9k2&`75@g3^o>~Clv|^XlkpJJ5D_Bg-QETWcs`)@gOu~c@LJRm7S2v9zui%ic0yxK1CfsP%oIK^rlxuOVTrlw@ z9nTcS9noYEbyH#DG&zgT<$F6j2&i^Z!nDR(R*6heSBE%v;y3~!-JC?PsVde(-1!6n zYnmEK4xUT@GOpM7FZ})qexv{Uk8l0fZ+-mm5C8Dvi$D3r$LIgT=O2Ick9_xopG4<3 z`SYKs@C$!_QqA~0XEa6uiqikNt2Iu`-qTsyRa)yX$dSGOyGz~#eis$bxLgzdtRB^);#*y05g** zImY7Xzg=&)dE{o_FFi{f;JP9uxZ^djK*UXIN3}lUDo@7`I4m{V;g<(^f`j+qBV{>h z-~D3_t?yowmpIkCa!|xedFbPH_1g*(?SpG4rDyi?ez(rnr7!9;fcXW2tb^YS;IrsE zzvDX}fB9#A=J6Lk|GBq*?H~Nw>!1JmpMU)7ul&m6w|?ul9-qK341D)f?<&~`=ymps z@or*1)3Z*$;+CQ`9N#^_>$V=LuMiE4iYaXNQJEkM&Zi^9{H%BXTR#|_Gjf_h@lId9 z#i^{4z!_P6*{-{Ij#A``VB&*=badJ%-hQQD=IR&}0`XL?tCDo~OIO(O~=4=}yQsF!IH zrWH<{UJEZ3*9Bt-q}jr~9}(T479&p*(JDyrG+>^kDZL!A-9*2p3e-VR@brO>yu7SO zpTpWLFmlmv)r~s=nq^F?`KIu5p7n}nlDtoff z-IGc%sr=buL5HDgl|5E2pptz!1i4l*M{x1&A$k{DZq+Tm(pFY>PS}{ahyi%>OoptL zhfrYnd!UFUy?z29A|~v4mIu%rFe^v`Mg-%=JK4chAM6<8t2kho=A|<75yj>j4UAw} z+v>dHWCK_gu3)gz6clh~1C2@ifrl#`6NALN8vR|U(U zZ7zikSl9|Fmjil zMO^e~E-?8?M~mBKD)Y+7+X!saHY*gFK~#kYUJPu=NDg9IG#g-!*Q=n z$>oCDI}`WFZrAQ$eZV1!h}3n=%$jaYf1^*l3Bp)?tWjPhiM82Qp|LSl=FB5)h@>s8 z%h}+_o_CSneqe=G+By3q!y5*^@{7ZiLtv?n6h2JE<6U^>JM{-Gr7bIV9vmSt)4qE2r)@K$KkNY8Hszo634x&Ph|v3Ugk({I~E7^UGg1k z7FriIbuQR8C(98uc&yd;>Q6ZCY*8Qr#);bzoU^FVvPNFyk*|M0vbCvZ{;Plzgx?b& zoqSF)_S1j(+aF*2;uqik!WX{q`XBwT|LFDK{ri9K@pt~tfBX22-}nvv)Y2dP1AkEX z_uhL?N%gw|I=eEGT)CBl@+b+15mo_kHe2&o_w?X8!H8|$ON|0-1@z|-mGLrXrO+zDf zZEdMT3V9xu3XxO{J$%=t33+132!kkai{Qqvm)vj1sRqEB1M~GmT_L<5S-?CSnDLvx zETmdVA)q*!_UiPuXr?U}(W&*AFB(h(nF%>=t|P~dU#4a=U=Btlx{!FY;p@0emPk>h z0{TziVL28jG|Vg6FpU5UuRG1rcsii@l)?VBX~*f@b@GD+3r1l$xQ@jNp#7d`=UV}S zchpO?N5Hv=w2aHUgmi}G#&ntS+Th1}#EgjBzMc#>tBIF$<=~oq@O7g&uGU)n?8 zJO*bOclLpG-O`Z?9_zViNd!hu;ZK5tOmPlQ%#*(iMjc))7VnzMMat>dbEqvVN�~ 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ðnhRck1n6PK!8)PE(zV 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
*;#Z^RY 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
)#$rE6Y|Mkl1%6E2cqPk8}E+_}MjDk$ImOZt#-! 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

1gb(&{hyvw?#G>_p$hfE{K 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 -pZL*)LRJsE0!Zq%_Y4`<1)2lr- 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

dL2XRezwhO%j3xAo)-?!4mKJV;{ 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 literal 0 HcmV?d00001 diff --git a/packages/laobos-system-tools/lib/client.js b/packages/laobos-system-tools/lib/client.js index 9c4304d..cf255b7 100644 --- a/packages/laobos-system-tools/lib/client.js +++ b/packages/laobos-system-tools/lib/client.js @@ -103,9 +103,7 @@ window.__ModuleLoader__.load({ .lbs-card{appearance:none;background:transparent;border:1px solid var(--dsw-alias-line-border);border-radius:10px;color:inherit;cursor:pointer;padding:10px;text-align:left;width:100%}.lbs-card:hover,.lbs-card[data-active=true]{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-line-border-hover)}.lbs-card-title{font-size:14px;font-weight:550}.lbs-meta{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px} .lbs-button{appearance:none;background:var(--dsw-alias-interactive-bg-primary);border:0;border-radius:9px;color:var(--dsw-alias-label-on-primary);cursor:pointer;font:inherit;font-size:13px;height:34px;padding:0 13px}.lbs-button.secondary{background:var(--dsw-alias-interactive-bg-secondary);color:var(--dsw-alias-label-primary)}.lbs-button.danger{background:rgba(218,70,70,.13);color:#d94b4b}.lbs-button:disabled{cursor:not-allowed;opacity:.5} .lbs-input,.lbs-area{box-sizing:border-box;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:9px;color:inherit;font:inherit;font-size:13px;outline:none;padding:8px 10px;width:100%}.lbs-input:focus,.lbs-area:focus{border-color:var(--dsw-alias-line-border-focus)}.lbs-area{min-height:110px;resize:vertical}.lbs-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;min-height:220px;tab-size:2}.lbs-label{font-size:12px;font-weight:550;margin-bottom:4px}.lbs-empty{align-items:center;color:var(--dsw-alias-label-secondary);display:flex;justify-content:center;min-height:180px;text-align:center}.lbs-error{background:rgba(218,70,70,.1);border-radius:9px;color:#d94b4b;font-size:12px;padding:9px}.lbs-ok{background:rgba(44,168,110,.1);border-radius:9px;color:#2a9b67;font-size:12px;padding:9px;white-space:pre-wrap;word-break:break-word} - .lbs-svg{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:12px;height:260px;width:100%}.lbs-node{fill:var(--dsw-alias-bg-layer-1);stroke:var(--dsw-alias-line-border);stroke-width:1.5}.lbs-node-group[data-selectable=true]{cursor:pointer;outline:none}.lbs-node-group[data-selectable=true]:hover .lbs-node,.lbs-node-group[data-selected=true] .lbs-node{stroke:var(--dsw-alias-brand-primary);stroke-width:2}.lbs-edge{fill:none;stroke:var(--dsw-alias-label-tertiary);stroke-width:1.4}.lbs-node-title{fill:var(--dsw-alias-label-primary);font-size:12px;font-weight:600}.lbs-node-type{fill:var(--dsw-alias-label-tertiary);font-size:10px}.lbs-workflow-node-editor{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:11px;display:flex;flex-direction:column;gap:9px;padding:11px}.lbs-workflow-node-head{align-items:center;display:flex;gap:8px;justify-content:space-between}.lbs-workflow-node-head strong{font-size:13px}.lbs-workflow-node-editor .lbs-code{min-height:130px}.lbs-check{accent-color:var(--dsw-alias-brand-primary)} - .lbs-workflow-list-panel{overflow:hidden;padding:0}.lbs-workflow-table-scroll{overflow:auto}.lbs-workflow-table{min-width:840px}.lbs-workflow-table-head,.lbs-workflow-row{align-items:center;display:grid;grid-template-columns:minmax(280px,1fr) minmax(150px,.62fr) 104px 74px 132px 154px}.lbs-workflow-table-head{background:var(--dsw-alias-bg-layer-2);border-bottom:1px solid var(--dsw-alias-line-border);color:var(--dsw-alias-label-tertiary);font-size:11px;font-weight:550;min-height:38px}.lbs-workflow-table-head>span,.lbs-workflow-cell{box-sizing:border-box;padding:0 12px}.lbs-workflow-row{border-bottom:1px solid var(--dsw-alias-line-border);min-height:68px}.lbs-workflow-row:last-child{border-bottom:0}.lbs-workflow-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-workflow-primary{align-items:center;display:flex;gap:10px;min-width:0}.lbs-workflow-primary-button{align-items:center;appearance:none;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;gap:10px;min-width:0;padding:0;text-align:left}.lbs-workflow-list-icon{align-items:center;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:8px;color:var(--dsw-alias-label-secondary);display:flex;flex:none;height:32px;justify-content:center;width:32px}.lbs-workflow-row-copy{display:flex;flex-direction:column;min-width:0}.lbs-workflow-row-copy>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-workflow-tool-name{font:11px/18px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-workflow-list-status{align-items:center;color:var(--dsw-alias-label-secondary);display:inline-flex;gap:6px;white-space:nowrap}.lbs-workflow-list-status>span{background:var(--dsw-alias-label-quaternary);border-radius:50%;height:7px;width:7px}.lbs-workflow-list-status[data-enabled=true]{color:#2a9b67}.lbs-workflow-list-status[data-enabled=true]>span{background:#2a9b67}.lbs-workflow-list-actions{display:flex;gap:4px;justify-content:flex-end}.lbs-workflow-modal{max-width:980px}.lbs-workflow-modal-summary{display:grid;gap:10px;grid-template-columns:repeat(4,1fr)}.lbs-workflow-summary-item{background:var(--dsw-alias-bg-layer-2);border-radius:9px;display:flex;flex-direction:column;gap:2px;padding:10px}.lbs-workflow-summary-item strong{font-size:14px}.lbs-workflow-summary-item span{color:var(--dsw-alias-label-tertiary);font-size:11px}.lbs-workflow-readonly{display:grid;gap:10px;grid-template-columns:1fr 1fr}.lbs-workflow-readonly>div{min-width:0}.lbs-workflow-readonly code{display:block;margin-top:4px}.lbs-workflow-run-output{max-height:180px;overflow:auto}@media(max-width:700px){.lbs-workflow-modal-summary,.lbs-workflow-readonly{grid-template-columns:1fr 1fr}} - .lbs-automation-list{display:flex;flex-direction:column;gap:6px}.lbs-automation-card{appearance:none;align-items:center;background:transparent;border:1px solid var(--dsw-alias-line-border);border-radius:10px;color:inherit;cursor:pointer;display:grid;gap:10px;grid-template-columns:minmax(0,1fr) auto;padding:11px;text-align:left;width:100%}.lbs-automation-card:hover,.lbs-automation-card[data-active=true]{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-line-border-hover)}.lbs-automation-card-copy{display:flex;flex-direction:column;min-width:0}.lbs-automation-card-copy>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-automation-state{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;font-size:11px;gap:6px;white-space:nowrap}.lbs-automation-state>span{background:var(--dsw-alias-label-quaternary);border-radius:50%;height:7px;width:7px}.lbs-automation-state[data-enabled=true]{color:#2a9b67}.lbs-automation-state[data-enabled=true]>span{background:#2a9b67}.lbs-automation-detail{display:flex;flex-direction:column;gap:12px}.lbs-automation-detail-head{align-items:flex-start;display:flex;gap:12px;justify-content:space-between}.lbs-automation-detail-head h2{font-size:18px;line-height:25px;margin:0}.lbs-automation-tool{background:var(--dsw-alias-bg-layer-2);border-radius:7px;color:var(--dsw-alias-label-secondary);display:block;font:11px/18px ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere;padding:7px 9px}.lbs-automation-actions{display:flex;flex-wrap:wrap;gap:8px}.lbs-automation-note{border-top:1px solid var(--dsw-alias-line-border);color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px;padding-top:10px} + .lbs-check{accent-color:var(--dsw-alias-brand-primary)} [data-laobos-right-sidebar]{grid-template-columns:var(--lbs-left-column,280px) minmax(0,1fr) var(--lbs-right-column,56px)!important}[data-laobos-native-settings-trigger]{display:none!important}body:has([data-laobos-native-settings-trigger][aria-expanded="true"])>[role="presentation"]:has(>[role="dialog"][aria-modal="true"]){z-index:2147483600!important}.lbs-right-sidebar{background:var(--dsw-specific-sidebar-fill);border-left:1px solid var(--dsw-alias-border-l1);box-sizing:border-box;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;overflow-y:auto;pointer-events:auto;position:absolute;right:0;top:0;bottom:0;transition:width var(--ds-transition-duration-slow,.2s) var(--ds-ease-in-out,ease);width:var(--lbs-right-column,56px)}.lbs-right-sidebar[data-dragging=true]{transition:none}.lbs-right-top{align-items:center;box-sizing:border-box;display:flex;flex:none;height:60px;justify-content:center;padding:8px 10px}.lbs-right-sidebar[data-expanded=true] .lbs-right-top{justify-content:space-between;padding:8px 16px}.lbs-right-brand{display:flex;flex-direction:column;min-width:0}.lbs-right-brand-title{font-size:14px;font-weight:600;line-height:19px}.lbs-right-brand-sub{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:14px}.lbs-right-toggle{appearance:none;align-items:center;background:transparent;border:0;border-radius:8px;color:var(--dsw-alias-label-secondary);cursor:pointer;display:flex;height:32px;justify-content:center;padding:0;width:32px}.lbs-right-toggle:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.lbs-right-nav{display:flex;flex:none;flex-direction:column;gap:2px;padding:4px 10px}.lbs-right-nav-group+.lbs-right-nav-group{border-top:1px solid var(--dsw-alias-border-l1);margin-top:6px;padding-top:8px}.lbs-right-nav-title{color:var(--dsw-alias-label-tertiary);font-size:10px;font-weight:550;letter-spacing:.04em;line-height:22px;overflow:hidden;padding:0 10px;text-overflow:ellipsis;white-space:nowrap}.lbs-right-nav-bottom{border-top:1px solid var(--dsw-alias-border-l1);margin-top:auto;padding-bottom:8px;padding-top:8px}.lbs-right-sidebar[data-expanded=false] .lbs-right-nav{align-items:center;padding-left:8px;padding-right:8px}.lbs-right-sidebar[data-expanded=false] .lbs-right-nav-title{display:none}.lbs-nav-button{appearance:none;background:transparent;border:0;border-radius:9px;color:var(--dsw-alias-label-secondary);cursor:pointer;display:flex;align-items:center;gap:10px;font:inherit;font-size:13px;height:38px;padding:0 10px;text-align:left;transition:background .12s,color .12s;width:100%}.lbs-nav-button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.lbs-nav-button[data-active=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.lbs-right-sidebar[data-expanded=false] .lbs-nav-button{justify-content:center;padding:0;width:36px}.lbs-nav-icon{align-items:center;color:currentColor;display:inline-flex;flex:none;height:18px;justify-content:center;width:18px}.lbs-nav-svg{display:block}.lbs-nav-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-right-spacer{flex:1;min-height:8px}.lbs-right-resizer{cursor:col-resize;position:absolute;bottom:0;left:-5px;top:0;width:10px}.lbs-right-resizer:after{background:var(--dsw-alias-border-l2);content:"";opacity:0;position:absolute;bottom:0;left:4px;top:0;width:1px;transition:opacity .15s}.lbs-right-resizer:hover:after,.lbs-right-sidebar[data-dragging=true] .lbs-right-resizer:after{opacity:1}.lbs-center-page{background:var(--dsw-alias-bg-base);box-sizing:border-box;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;pointer-events:auto;position:absolute;left:var(--lbs-left-column,280px);right:var(--lbs-right-column,56px);top:0;bottom:0}.lbs-center-bar{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);box-sizing:border-box;display:flex;flex:none;height:56px;justify-content:space-between;padding:0 clamp(16px,2.4vw,32px)}.lbs-center-crumb{align-items:center;display:flex;gap:9px}.lbs-center-crumb-icon{align-items:center;color:var(--dsw-alias-label-secondary);display:flex;height:20px;justify-content:center;width:20px}.lbs-center-crumb-title{font-size:15px;font-weight:600}.lbs-center-close{appearance:none;background:transparent;border:0;border-radius:8px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;font-size:12px;height:32px;padding:0 10px}.lbs-center-close:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.lbs-center-scroll{box-sizing:border-box;flex:1;min-height:0;overflow:auto;padding:22px clamp(16px,3vw,40px) 32px}.lbs-center-content{margin:0 auto;max-width:1180px}.lbs-settings-actions{display:flex;flex-wrap:wrap;gap:8px}.lbs-settings-note{margin-top:2px}.lbs-upload-options{display:flex;flex-direction:column;gap:8px;margin-top:10px}.lbs-upload-option{align-items:flex-start;border:1px solid var(--dsw-alias-line-border);border-radius:10px;cursor:pointer;display:flex;gap:9px;padding:11px 12px}.lbs-upload-option:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-upload-option input{accent-color:var(--dsw-alias-brand-primary);margin-top:3px}.lbs-upload-option-title{font-size:13px;font-weight:550;line-height:19px}.lbs-upload-option-path{color:var(--dsw-alias-label-tertiary);font:11px/18px ui-monospace,SFMono-Regular,Menlo,monospace;overflow-wrap:anywhere} .lbs-toggle-icon{display:block;transform:scaleX(-1)}.lbs-nav-icon{background:transparent;border:0;height:18px;width:18px}.lbs-right-sidebar[data-expanded=false] .lbs-nav-icon{height:18px;width:18px} .lbs-settings-grid{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(260px,.75fr);gap:16px}.lbs-settings-section{padding:2px 0}.lbs-settings-list{display:flex;flex-direction:column;gap:0}.lbs-settings-row{appearance:none;background:transparent;border:0;border-bottom:1px solid var(--dsw-alias-line-border);border-radius:8px;color:inherit;cursor:pointer;display:flex;align-items:center;gap:10px;padding:9px 0;text-align:left;width:100%}.lbs-settings-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-settings-row>div:first-child{flex:1;min-width:0}.lbs-settings-row:last-child{border-bottom:0}.lbs-settings-row-arrow{color:var(--dsw-alias-label-tertiary);display:flex;flex:none}@media(max-width:900px){.lbs-settings-grid{grid-template-columns:1fr}} @@ -123,6 +121,7 @@ window.__ModuleLoader__.load({ .lbs-knowledge-modal{border-radius:13px}.lbs-knowledge-modal-head{padding:13px 16px}.lbs-knowledge-modal-section{padding:16px 18px}.lbs-knowledge-modal-footer{padding:11px 16px}.lbs-knowledge-activity-modal{max-width:700px}.lbs-knowledge-activity-overview{background:var(--dsw-alias-bg-layer-2);border-bottom:1px solid var(--dsw-alias-line-border);display:grid;grid-template-columns:repeat(3,1fr);padding:14px 18px}.lbs-knowledge-activity-stat{display:flex;flex-direction:column;gap:1px}.lbs-knowledge-activity-stat+.lbs-knowledge-activity-stat{border-left:1px solid var(--dsw-alias-line-border);padding-left:18px}.lbs-knowledge-activity-stat strong{font-size:16px;font-weight:600;line-height:23px}.lbs-knowledge-activity-stat span{color:var(--dsw-alias-label-tertiary);font-size:10px}.lbs-knowledge-activity-note{background:rgba(92,117,255,.07);border-bottom:1px solid var(--dsw-alias-line-border);color:var(--dsw-alias-label-secondary);font-size:11px;line-height:18px;padding:10px 18px}.lbs-knowledge-activity-section{padding:15px 18px 18px}.lbs-knowledge-activity-heading{align-items:center;display:flex;justify-content:space-between;margin-bottom:9px}.lbs-knowledge-timeline{display:flex;flex-direction:column}.lbs-knowledge-timeline-item{align-items:center;display:grid;grid-template-columns:15px 30px minmax(0,1fr) 106px;min-height:54px}.lbs-knowledge-timeline-rail{align-self:stretch;position:relative}.lbs-knowledge-timeline-rail:before{background:var(--dsw-alias-line-border);bottom:0;content:"";left:7px;position:absolute;top:0;width:1px}.lbs-knowledge-timeline-rail>span{background:var(--dsw-alias-brand-primary);border:3px solid var(--dsw-alias-bg-layer-1);border-radius:50%;height:7px;left:4px;position:absolute;top:23px;width:7px;z-index:1}.lbs-knowledge-timeline-icon{align-items:center;background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:7px;color:var(--dsw-alias-label-secondary);display:flex;height:26px;justify-content:center;width:26px}.lbs-knowledge-timeline-copy{min-width:0;padding:6px 10px}.lbs-knowledge-timeline-copy>*{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-knowledge-timeline-item time{color:var(--dsw-alias-label-tertiary);font-size:10px;text-align:right;white-space:nowrap}.lbs-knowledge-activity-loading,.lbs-knowledge-activity-empty{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;font-size:11px;gap:8px;justify-content:center;min-height:110px}.lbs-knowledge-activity-empty{border:1px dashed var(--dsw-alias-line-border);border-radius:9px} @media(max-width:760px){.lbs-knowledge-toolbar{grid-template-columns:minmax(0,1fr) auto 30px}.lbs-knowledge-search{grid-column:1/-1}.lbs-knowledge-toolbar-count{justify-self:end}.lbs-knowledge-table{min-width:0}.lbs-knowledge-table-head,.lbs-knowledge-row{grid-template-columns:minmax(0,1fr) 96px 108px}.lbs-knowledge-table-head>span:nth-child(2),.lbs-knowledge-table-head>span:nth-child(4),.lbs-knowledge-table-head>span:nth-child(5),.lbs-knowledge-table-head>span:nth-child(6),.lbs-knowledge-row>.lbs-knowledge-cell:nth-child(2),.lbs-knowledge-row>.lbs-knowledge-cell:nth-child(4),.lbs-knowledge-row>.lbs-knowledge-cell:nth-child(5),.lbs-knowledge-row>.lbs-knowledge-cell:nth-child(6){display:none}.lbs-knowledge-head-summary span{display:none}.lbs-knowledge-timeline-item{grid-template-columns:15px 30px minmax(0,1fr)}.lbs-knowledge-timeline-item time{grid-column:3;padding:0 10px 7px;text-align:left}.lbs-knowledge-modal-head .lbs-badge{display:none}} @media(max-width:600px){.lbs-knowledge-toolbar{grid-template-columns:minmax(0,1fr) 30px}.lbs-knowledge-filters{overflow:auto}.lbs-knowledge-toolbar-count{display:none}.lbs-knowledge-table-head,.lbs-knowledge-row{grid-template-columns:minmax(0,1fr) 100px}.lbs-knowledge-table-head>span:nth-child(3),.lbs-knowledge-row>.lbs-knowledge-cell:nth-child(3){display:none}.lbs-knowledge-activity-overview{grid-template-columns:repeat(3,1fr);padding:12px 14px}.lbs-knowledge-activity-stat+.lbs-knowledge-activity-stat{padding-left:10px}.lbs-knowledge-activity-note,.lbs-knowledge-activity-section{padding-left:14px;padding-right:14px}.lbs-knowledge-activity-modal .lbs-knowledge-modal-footer>.lbs-meta{display:none}} + .lbs-knowledge-image-thumb{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:7px;height:28px;object-fit:cover;width:28px}.lbs-knowledge-image-grid{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(132px,1fr));margin-top:2px}.lbs-knowledge-image-card{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-line-border);border-radius:9px;display:flex;flex-direction:column;min-width:0;overflow:hidden}.lbs-knowledge-image-card img{aspect-ratio:16/10;background:var(--dsw-alias-bg-layer-2);display:block;object-fit:contain;width:100%}.lbs-knowledge-image-card span{color:var(--dsw-alias-label-tertiary);font:9px/24px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;padding:0 7px;text-overflow:ellipsis;white-space:nowrap}.lbs-retrieval-images{display:flex;gap:6px;margin-top:8px}.lbs-retrieval-images img{border:1px solid var(--dsw-alias-line-border);border-radius:6px;height:54px;object-fit:cover;width:76px}.lbs-knowledge-document-has-images{align-items:center;color:#6f8cff;display:inline-flex;gap:3px} @media(min-width:761px){.lbs-knowledge-table{min-width:780px}.lbs-knowledge-table-head,.lbs-knowledge-row{grid-template-columns:minmax(220px,1fr) 78px 94px 62px 62px 124px 126px}} .lbs-knowledge-modal .lbs-button{border:1px solid transparent;transition:background .12s,border-color .12s,filter .12s}.lbs-knowledge-modal .lbs-button:not(.secondary):not(.danger){background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-base)}.lbs-knowledge-modal .lbs-button:not(.secondary):not(.danger):hover{filter:brightness(.92)}.lbs-knowledge-modal .lbs-button.secondary{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-line-border);color:var(--dsw-alias-label-primary)}.lbs-knowledge-modal .lbs-button.secondary:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-line-border-hover)}.lbs-knowledge-modal .lbs-button:disabled{filter:none;opacity:.42} @media(max-width:720px){.lbs-grid,.lbs-split{grid-template-columns:1fr}.lbs-panel{min-height:auto}} @@ -196,17 +195,24 @@ window.__ModuleLoader__.load({ conversation: Primitives.IconNewChatOutline16, files: Primitives.IconFolderOpenOutline16, git: Primitives.IconBranchOutline16, - workflows: Primitives.IconChecklistOutline14, knowledge: Primitives.IconDataOutline16, skills: Primitives.IconSkillOutline16, - mcp: Primitives.IconApiOutline14, - terminal: Primitives.IconCodeOutline16, + mcp: Primitives.IconCodeOutline16, + terminal: Primitives.IconApiOutline14, browser: Primitives.IconBrowseOutline16, ssh: Primitives.IconLinkOutline16, apps: Primitives.IconCordisPluginOutline14, settings: Primitives.IconSettingsOutline16, }; const ProjectNavIcon = ({ id }) => { + if (id === "trajectory") { + return h("svg", { className: "lbs-nav-svg", viewBox: "0 0 16 16", width: 16, height: 16, fill: "none", stroke: "currentColor", strokeWidth: 1.35, strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, focusable: "false" }, + h("circle", { cx: 3.5, cy: 3, r: 1.25 }), + h("circle", { cx: 12.5, cy: 8, r: 1.25 }), + h("circle", { cx: 3.5, cy: 13, r: 1.25 }), + h("path", { d: "M4.75 3h1.5a6.25 6.25 0 0 1 6.25 5M11.25 8h-1.5a6.25 6.25 0 0 0-6.25 5" }), + ); + } const Icon = projectIcons[id] || Primitives.IconFolderOpenOutline16; return h(Icon, { size: 16, className: "lbs-nav-svg" }); }; @@ -218,9 +224,6 @@ window.__ModuleLoader__.load({ activity: [h("path", { key: "a", d: "M3 12a9 9 0 1 0 3-6.7" }), h("path", { key: "b", d: "M3 4v5h5" }), h("path", { key: "c", d: "M12 7v5l3 2" })], refresh: [h("path", { key: "a", d: "M20 6v5h-5" }), h("path", { key: "b", d: "M4 18v-5h5" }), h("path", { key: "c", d: "M18.4 9A7 7 0 0 0 6.7 6.7L4 9" }), h("path", { key: "d", d: "M5.6 15A7 7 0 0 0 17.3 17.3L20 15" })], search: [h("circle", { key: "a", cx: 11, cy: 11, r: 7 }), h("path", { key: "b", d: "m20 20-4-4" })], - eye: [h("path", { key: "a", d: "M2.5 12s3.5-6 9.5-6 9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6Z" }), h("circle", { key: "b", cx: 12, cy: 12, r: 2.5 })], - power: [h("path", { key: "a", d: "M12 2v10" }), h("path", { key: "b", d: "M6.3 5.7a8 8 0 1 0 11.4 0" })], - workflow: [h("rect", { key: "a", x: 3, y: 4, width: 7, height: 5, rx: 1 }), h("rect", { key: "b", x: 14, y: 15, width: 7, height: 5, rx: 1 }), h("path", { key: "c", d: "M10 6.5h2a4 4 0 0 1 4 4V15" }), h("path", { key: "d", d: "m13.5 12.5 2.5 2.5 2.5-2.5" })], trash: [h("path", { key: "a", d: "M3 6h18" }), h("path", { key: "b", d: "M8 6V4h8v2" }), h("path", { key: "c", d: "m19 6-1 15H6L5 6" }), h("path", { key: "d", d: "M10 11v5M14 11v5" })], close: [h("path", { key: "a", d: "m6 6 12 12" }), h("path", { key: "b", d: "M18 6 6 18" })], document: [h("path", { key: "a", d: "M6 3h8l4 4v14H6Z" }), h("path", { key: "b", d: "M14 3v5h5" }), h("path", { key: "c", d: "M9 13h6M9 17h6" })], @@ -250,7 +253,6 @@ window.__ModuleLoader__.load({ const workbenchNavigation = [ { id: "files", label: "文件管理器", icon: "文" }, { id: "git", label: "版本中心", icon: "G" }, - { id: "workflows", label: "工作流", icon: "流" }, { id: "knowledge", label: "知识库", icon: "知" }, ]; const integrationNavigation = [ @@ -398,10 +400,12 @@ window.__ModuleLoader__.load({ const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [agentEnabled, setAgentEnabled] = useState(false); + const [documentEditorOpen, setDocumentEditorOpen] = useState(false); const [documentId, setDocumentId] = useState(""); const [documentRevision, setDocumentRevision] = useState(""); const [documentTitle, setDocumentTitle] = useState(""); const [documentSource, setDocumentSource] = useState(""); + const [documentImageUrls, setDocumentImageUrls] = useState(""); const [documentContent, setDocumentContent] = useState(""); const [searchQuery, setSearchQuery] = useState(""); const [searchResults, setSearchResults] = useState([]); @@ -419,11 +423,12 @@ window.__ModuleLoader__.load({ }); }, [collectionFilter, collectionQuery, collections]); const collectionTotals = useMemo(() => collections.reduce((total, item) => ({ documents: total.documents + Number(item.documentCount || 0), chunks: total.chunks + Number(item.chunkCount || 0) }), { documents: 0, chunks: 0 }), [collections]); + const parsedDocumentImageUrls = useMemo(() => [...new Set(documentImageUrls.split(/\r?\n/u).map((value) => value.trim()).filter(Boolean))].slice(0, 12), [documentImageUrls]); const activityEntries = useMemo(() => { if (!activityCollection) return []; return [ { id: `collection-${activityCollection.id}`, type: "collection", title: "知识库配置最近更新", description: `${activityCollection.agentEnabled ? "可召回" : "已暂停"} · ${activityCollection.scope === "workspace" ? "当前项目" : "全局"}`, updatedAt: activityCollection.updatedAt }, - ...activityDocuments.map((document) => ({ id: document.id, type: "document", title: document.title, description: `${document.chunkCount} 个片段 · ${document.contentLength} 字符${document.source ? ` · ${document.source}` : ""}`, updatedAt: document.updatedAt })), + ...activityDocuments.map((document) => ({ id: document.id, type: "document", title: document.title, description: `${document.chunkCount} 个片段 · ${document.contentLength} 字符${document.imageUrls?.length ? ` · ${document.imageUrls.length} 张图片` : ""}${document.source ? ` · ${document.source}` : ""}`, updatedAt: document.updatedAt })), ].sort((left, right) => Number(new Date(right.updatedAt || 0)) - Number(new Date(left.updatedAt || 0))); }, [activityCollection, activityDocuments]); @@ -504,19 +509,24 @@ window.__ModuleLoader__.load({ setSelectedId(""); setActivityId(collection.id); setMessage(""); setError(""); } function cancelDocumentEdit() { - setDocumentId(""); setDocumentRevision(""); setDocumentTitle(""); setDocumentSource(""); setDocumentContent(""); + setDocumentEditorOpen(false); setDocumentId(""); setDocumentRevision(""); setDocumentTitle(""); setDocumentSource(""); setDocumentImageUrls(""); setDocumentContent(""); + } + function createDocument() { + cancelDocumentEdit(); + setDocumentEditorOpen(true); } async function editDocument(document) { try { const detail = await request(`/knowledge/documents/${encodeURIComponent(document.id)}`); + setDocumentEditorOpen(true); setDocumentId(detail.id); setDocumentRevision(detail.revision); setDocumentTitle(detail.title); - setDocumentSource(detail.source || ""); setDocumentContent(detail.content); setMessage(""); setError(""); + setDocumentSource(detail.source || ""); setDocumentImageUrls((detail.imageUrls || []).join("\n")); setDocumentContent(detail.content); setMessage(""); setError(""); } catch (reason) { setError(reason.message); } } async function saveDocument() { if (!selected) return; try { - await request("/knowledge/documents", { method: "POST", body: JSON.stringify({ id: documentId, expectedRevision: documentRevision, collectionId: selected.id, title: documentTitle, source: documentSource, content: documentContent }) }); + await request("/knowledge/documents", { method: "POST", body: JSON.stringify({ id: documentId || undefined, expectedRevision: documentRevision || undefined, collectionId: selected.id, title: documentTitle, source: documentSource, imageUrls: parsedDocumentImageUrls, content: documentContent }) }); cancelDocumentEdit(); await load(selected.id); setMessage("知识内容已更新并重新建立索引。"); setError(""); } catch (reason) { setError(reason.message); } } @@ -614,18 +624,21 @@ window.__ModuleLoader__.load({ searchResults.length ? h("div", { className: "lbs-retrieval-results" }, searchResults.map((result, index) => h("article", { key: `${result.chunkId || result.documentId}-${index}`, className: "lbs-retrieval-result" }, h("div", { className: "lbs-between" }, h("div", null, h("div", { className: "lbs-card-title" }, result.title), h("div", { className: "lbs-meta" }, result.source || `片段 ${Number(result.ordinal || 0) + 1}`)), h("span", { className: "lbs-relevance", "data-level": relevanceLabel(result.score) }, relevanceLabel(result.score))), h("p", { className: "lbs-retrieval-snippet" }, result.content), + result.imageUrls?.length ? h("div", { className: "lbs-retrieval-images" }, result.imageUrls.slice(0, 4).map((url, imageIndex) => h("img", { key: `${url}:${imageIndex}`, src: url, alt: `${result.title} 图片 ${imageIndex + 1}`, loading: "lazy", referrerPolicy: "no-referrer" }))) : null, ))) : null, ), h("section", { className: "lbs-knowledge-modal-section" }, - h("div", { className: "lbs-knowledge-modal-section-head" }, h("div", null, h("div", { className: "lbs-knowledge-modal-section-title" }, "资料"), h("div", { className: "lbs-meta" }, "Agent 写入后会自动切片并建立本地索引。")), h("span", { className: "lbs-meta" }, "自动同步")), + h("div", { className: "lbs-knowledge-modal-section-head" }, h("div", null, h("div", { className: "lbs-knowledge-modal-section-title" }, "资料"), h("div", { className: "lbs-meta" }, "正文会建立本地索引,HTTP(S) 图片 URL 会安全渲染。")), h(Button, { secondary: true, onClick: createDocument }, "添加资料")), h("div", { className: "lbs-knowledge-documents" }, documents.length ? documents.map((document) => h("article", { key: document.id, className: "lbs-knowledge-document" }, - h("span", { className: "lbs-knowledge-document-icon" }, h(LineIcon, { name: "document", size: 15 })), - h("div", { className: "lbs-knowledge-document-copy" }, h("div", { className: "lbs-card-title" }, document.title), h("div", { className: "lbs-meta" }, `${document.chunkCount} 个片段 · ${document.contentLength} 字符${document.source ? ` · ${document.source}` : ""}`)), + document.imageUrls?.[0] ? h("img", { className: "lbs-knowledge-image-thumb", src: document.imageUrls[0], alt: "", loading: "lazy", referrerPolicy: "no-referrer" }) : h("span", { className: "lbs-knowledge-document-icon" }, h(LineIcon, { name: "document", size: 15 })), + h("div", { className: "lbs-knowledge-document-copy" }, h("div", { className: "lbs-card-title" }, document.title), h("div", { className: "lbs-meta" }, `${document.chunkCount} 个片段 · ${document.contentLength} 字符${document.imageUrls?.length ? ` · ${document.imageUrls.length} 张图片` : ""}${document.source ? ` · ${document.source}` : ""}`)), h("div", { className: "lbs-knowledge-document-actions" }, h("button", { type: "button", className: "lbs-icon-action", onClick: () => editDocument(document), title: "编辑资料", "aria-label": `编辑资料 ${document.title}` }, h(LineIcon, { name: "edit" })), h("button", { type: "button", className: "lbs-icon-action danger", onClick: () => removeDocument(document), title: "删除资料", "aria-label": `删除资料 ${document.title}` }, h(LineIcon, { name: "trash" }))), )) : h("div", { className: "lbs-help" }, "暂无资料。你可以在对话中让 Agent 记住重要信息。")), - documentId ? h("div", { className: "lbs-knowledge-editor" }, - h("div", { className: "lbs-between" }, h("div", { className: "lbs-card-title" }, "编辑资料"), h("button", { type: "button", className: "lbs-icon-action", onClick: cancelDocumentEdit, title: "收起", "aria-label": "收起资料编辑" }, h(LineIcon, { name: "close" }))), + documentEditorOpen ? h("div", { className: "lbs-knowledge-editor" }, + h("div", { className: "lbs-between" }, h("div", { className: "lbs-card-title" }, documentId ? "编辑资料" : "添加资料"), h("button", { type: "button", className: "lbs-icon-action", onClick: cancelDocumentEdit, title: "收起", "aria-label": "收起资料编辑" }, h(LineIcon, { name: "close" }))), h("div", { className: "lbs-split" }, h(Field, { label: "标题", value: documentTitle, onChange: (event) => setDocumentTitle(event.target.value) }), h(Field, { label: "来源", value: documentSource, onChange: (event) => setDocumentSource(event.target.value) })), + h(Field, { label: "图片 URL(每行一个,最多 12 个,仅支持 HTTP/HTTPS)", area: true, code: true, value: documentImageUrls, onChange: (event) => setDocumentImageUrls(event.target.value), placeholder: "https://example.com/image.png" }), + parsedDocumentImageUrls.length ? h("div", { className: "lbs-knowledge-image-grid", "aria-label": "图片预览" }, parsedDocumentImageUrls.map((url, imageIndex) => h("div", { className: "lbs-knowledge-image-card", key: `${url}:${imageIndex}` }, h("img", { src: url, alt: `${documentTitle || "知识资料"} 图片 ${imageIndex + 1}`, loading: "lazy", referrerPolicy: "no-referrer" }), h("span", { title: url }, url)))) : null, h(Field, { label: "正文", area: true, code: true, value: documentContent, onChange: (event) => setDocumentContent(event.target.value) }), h(Button, { onClick: saveDocument, disabled: !documentTitle.trim() || !documentContent.trim() }, "保存并重新索引"), ) : null, @@ -678,341 +691,6 @@ window.__ModuleLoader__.load({ ); } - function WorkflowGraph({ definition, selectedNodeId, onSelectNode }) { - const graph = useMemo(() => { - const nodes = definition?.nodes || []; - if (!nodes.length) return null; - const minX = Math.min(...nodes.map((node) => node.position?.x || 0)); - const minY = Math.min(...nodes.map((node) => node.position?.y || 0)); - const maxX = Math.max(...nodes.map((node) => node.position?.x || 0)); - const maxY = Math.max(...nodes.map((node) => node.position?.y || 0)); - const width = Math.max(500, maxX - minX + 220), height = Math.max(260, maxY - minY + 140); - const positions = Object.fromEntries(nodes.map((node) => [node.id, { x: (node.position?.x || 0) - minX + 20, y: (node.position?.y || 0) - minY + 30 }])); - return { nodes, edges: definition.edges || [], positions, width, height }; - }, [definition]); - if (!graph) return h("div", { className: "lbs-empty" }, "没有可视化节点"); - return h("svg", { className: "lbs-svg", viewBox: `0 0 ${graph.width} ${graph.height}`, preserveAspectRatio: "xMidYMid meet" }, - h("defs", null, h("marker", { id: "lbs-arrow", markerWidth: 8, markerHeight: 8, refX: 7, refY: 4, orient: "auto" }, h("path", { d: "M0,0 L8,4 L0,8 Z", fill: "var(--dsw-alias-label-tertiary)" }))), - graph.edges.map((edge) => { const a = graph.positions[edge.source], b = graph.positions[edge.target]; return a && b ? h("path", { key: edge.id, className: "lbs-edge", markerEnd: "url(#lbs-arrow)", d: `M${a.x + 150},${a.y + 30} C${a.x + 190},${a.y + 30} ${b.x - 40},${b.y + 30} ${b.x},${b.y + 30}` }) : null; }), - graph.nodes.map((node) => { - const p = graph.positions[node.id]; - const selectable = typeof onSelectNode === "function"; - return h("g", { - key: node.id, - className: "lbs-node-group", - transform: `translate(${p.x} ${p.y})`, - "data-selectable": selectable, - "data-selected": node.id === selectedNodeId, - role: selectable ? "button" : undefined, - tabIndex: selectable ? 0 : undefined, - onClick: selectable ? () => onSelectNode(node) : undefined, - onKeyDown: selectable ? (event) => { if (["Enter", " "].includes(event.key)) onSelectNode(node); } : undefined, - }, h("rect", { className: "lbs-node", width: 150, height: 60, rx: 10 }), h("text", { className: "lbs-node-title", x: 12, y: 25 }, node.label || node.id), h("text", { className: "lbs-node-type", x: 12, y: 44 }, node.type)); - }), - ); - } - - function WorkflowsSection() { - const [workflows, setWorkflows] = useState([]); - const [selectedId, setSelectedId] = useState(""); - const [dialogMode, setDialogMode] = useState("view"); - const [loading, setLoading] = useState(true); - const [refreshing, setRefreshing] = useState(false); - const [name, setName] = useState(""); const [description, setDescription] = useState(""); const [toolName, setToolName] = useState(""); - const [definition, setDefinition] = useState(null); - const [selectedNodeId, setSelectedNodeId] = useState(""); - const [nodeLabel, setNodeLabel] = useState(""); - const [nodeConfigText, setNodeConfigText] = useState("{}"); - const [runInput, setRunInput] = useState('{"message":"你好","count":2}'); - const [message, setMessage] = useState(""); const [error, setError] = useState(""); - const selected = workflows.find((item) => item.id === selectedId); - const selectedNode = definition?.nodes.find((node) => node.id === selectedNodeId); - const load = useCallback(async (preferred, background = false) => { - if (background) setRefreshing(true); - try { - const next = await request("/workflows"); - setWorkflows(next); - setSelectedId((current) => { - const candidate = preferred || current; - return candidate && next.some((item) => item.id === candidate) ? candidate : ""; - }); - setError(""); - } catch (reason) { setError(reason.message); } - finally { setLoading(false); setRefreshing(false); } - }, []); - useEffect(() => { load(); }, [load]); - useEffect(() => { - if (!selected) return; - setName(selected.name); setDescription(selected.description); setToolName(selected.toolName); - setDefinition(selected.definition); - loadNodeEditor(selected.definition.nodes[0]); - }, [selectedId, selected?.revision]); - - function loadNodeEditor(node) { - if (!node) { setSelectedNodeId(""); setNodeLabel(""); setNodeConfigText("{}"); return; } - const config = { ...node }; - delete config.id; delete config.type; delete config.label; - setSelectedNodeId(node.id); - setNodeLabel(node.label || ""); - setNodeConfigText(JSON.stringify(config, null, 2)); - } - - function openWorkflow(workflow, mode) { - setDialogMode(mode); - setSelectedId(workflow.id); - setMessage(""); - setError(""); - } - - function closeWorkflow() { - setSelectedId(""); - setMessage(""); - setError(""); - } - - function selectNode(node) { - try { - const nextDefinition = editedDefinition(); - const nextNode = nextDefinition?.nodes.find((item) => item.id === node.id) || node; - setDefinition(nextDefinition); - loadNodeEditor(nextNode); - setError(""); - } catch (reason) { - setError(`请先修正当前节点参数:${reason.message}`); - } - } - - function editedDefinition() { - if (!selectedNode || !definition) return definition; - const config = JSON.parse(nodeConfigText); - if (!config || typeof config !== "object" || Array.isArray(config)) throw new Error("节点参数必须是 JSON 对象。"); - delete config.id; delete config.type; delete config.label; - return { - ...definition, - nodes: definition.nodes.map((node) => node.id === selectedNode.id ? { - id: node.id, - type: node.type, - ...(nodeLabel.trim() ? { label: nodeLabel.trim() } : {}), - ...config, - } : node), - }; - } - - async function save(notify = true) { - try { - const nextDefinition = editedDefinition(); - const saved = await request("/workflows", { method: "POST", body: JSON.stringify({ id: selected.id, expectedRevision: selected.revision, name, description, toolName, definition: nextDefinition }) }); - setDefinition(nextDefinition); - await load(saved.id); - if (notify) setMessage("工作流微调已保存。"); - setError(""); - return saved; - } catch (reason) { - setError(reason.message); - return null; - } - } - async function publish() { - try { - const saved = await save(false); - if (!saved) return; - const value = await request(`/workflows/${encodeURIComponent(saved.id)}/publish`, { method: "POST", body: JSON.stringify({ expectedRevision: saved.revision }) }); - await load(saved.id); - setMessage(`已发布并${value.enabled ? "启用" : "保持停用"} v${value.version},虚拟插件:${value.toolName}`); - setError(""); - } - catch (reason) { setError(reason.message); } - } - async function setEnabled(workflow, enabled) { - try { - const value = await request(`/workflows/${encodeURIComponent(workflow.id)}/enabled`, { method: "POST", body: JSON.stringify({ enabled, expectedRevision: workflow.revision }) }); - await load(selectedId === workflow.id ? value.id : undefined); - setMessage(enabled ? "虚拟工作流插件已启用。" : "虚拟工作流插件已停用,工作流和版本仍然保留。"); - setError(""); - } catch (reason) { setError(reason.message); } - } - async function run() { - try { - const input = JSON.parse(runInput); - const saved = await save(false); - if (!saved) return; - const value = await request(`/workflows/${encodeURIComponent(saved.id)}/run`, { method: "POST", body: JSON.stringify({ input }) }); - setMessage(JSON.stringify(value.output, null, 2)); - setError(""); - } - catch (reason) { setError(reason.message); } - } - async function remove(workflow = selected) { - if (!workflow || !confirm(`删除工作流“${workflow.name}”?对应的虚拟插件和全部发布版本也会删除。`)) return; - try { await request(`/workflows/${encodeURIComponent(workflow.id)}?revision=${encodeURIComponent(workflow.revision)}`, { method: "DELETE" }); setSelectedId(""); await load(); setMessage("工作流及虚拟插件已删除。"); } - catch (reason) { setError(reason.message); } - } - - function formatUpdatedAt(value) { - if (!value) return "—"; - try { return new Intl.DateTimeFormat("zh-CN", { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" }).format(new Date(value)); } - catch { return "—"; } - } - - return h("div", { className: "lbs-page lbs-workflow-page" }, - h(PageHeader, { title: "工作流", subtitle: "Agent 负责创建和维护;你可以从列表查看、编辑、启停或删除。", action: h("div", { className: "lbs-row" }, h("span", { className: "lbs-meta" }, `${workflows.length} 个工作流 · ${workflows.filter((item) => item.enabled).length} 个已启用`), h("button", { type: "button", className: classNames("lbs-icon-action", refreshing && "is-spinning"), onClick: () => load(undefined, true), title: "刷新列表", "aria-label": "刷新工作流列表", disabled: refreshing }, h(LineIcon, { name: "refresh" }))) }), - h(Status, { error: true, message: error }), h(Status, { message }), - h("section", { className: "lbs-panel lbs-workflow-list-panel" }, - loading ? h("div", { className: "lbs-knowledge-list-empty compact" }, h("span", { className: "lbs-knowledge-loading" }), h("div", null, h("div", { className: "lbs-card-title" }, "正在加载工作流"), h("div", { className: "lbs-meta" }, "正在同步 Agent 自动化状态…"))) - : workflows.length ? h("div", { className: "lbs-workflow-table-scroll" }, - h("div", { className: "lbs-workflow-table", role: "table", "aria-label": "工作流列表" }, - h("div", { className: "lbs-workflow-table-head", role: "row" }, - h("span", { role: "columnheader" }, "工作流"), h("span", { role: "columnheader" }, "Agent 工具"), h("span", { role: "columnheader" }, "状态"), h("span", { role: "columnheader" }, "节点"), h("span", { role: "columnheader" }, "最近更新"), h("span", { role: "columnheader" }, "操作"), - ), - workflows.map((item) => h("article", { key: item.id, className: "lbs-workflow-row", role: "row" }, - h("div", { className: "lbs-workflow-cell lbs-workflow-primary", role: "cell" }, - h("button", { type: "button", className: "lbs-workflow-primary-button", onClick: () => openWorkflow(item, "view"), title: `查看 ${item.name}` }, h("span", { className: "lbs-workflow-list-icon" }, h(LineIcon, { name: "workflow", size: 16 })), h("span", { className: "lbs-workflow-row-copy" }, h("span", { className: "lbs-card-title" }, item.name), h("span", { className: "lbs-meta" }, item.description || "Agent 创建的可复用自动化"))), - ), - h("code", { className: "lbs-workflow-cell lbs-workflow-tool-name", role: "cell", title: item.toolName }, item.toolName), - h("div", { className: "lbs-workflow-cell", role: "cell" }, h("span", { className: "lbs-workflow-list-status", "data-enabled": item.enabled }, h("span", null), item.publishedVersion ? (item.enabled ? `已启用 v${item.publishedVersion}` : `已停用 v${item.publishedVersion}`) : "草稿")), - h("div", { className: "lbs-workflow-cell", role: "cell" }, String(item.definition.nodes.length)), - h("time", { className: "lbs-workflow-cell", role: "cell", dateTime: item.updatedAt || undefined }, formatUpdatedAt(item.updatedAt)), - h("div", { className: "lbs-workflow-cell lbs-workflow-list-actions", role: "cell" }, - h("button", { type: "button", className: "lbs-icon-action", onClick: () => openWorkflow(item, "view"), title: "查看", "aria-label": `查看 ${item.name}` }, h(LineIcon, { name: "eye" })), - h("button", { type: "button", className: "lbs-icon-action", onClick: () => openWorkflow(item, "edit"), title: "编辑", "aria-label": `编辑 ${item.name}` }, h(LineIcon, { name: "edit" })), - item.publishedVersion ? h("button", { type: "button", className: "lbs-icon-action", onClick: () => setEnabled(item, !item.enabled), title: item.enabled ? "停用" : "启用", "aria-label": `${item.enabled ? "停用" : "启用"} ${item.name}` }, h(LineIcon, { name: "power" })) : null, - h("button", { type: "button", className: "lbs-icon-action danger", onClick: () => remove(item), title: "删除", "aria-label": `删除 ${item.name}` }, h(LineIcon, { name: "trash" })), - ), - )), - ), - ) : h("div", { className: "lbs-knowledge-list-empty" }, h("span", { className: "lbs-workflow-list-icon" }, h(LineIcon, { name: "workflow", size: 19 })), h("div", null, h("div", { className: "lbs-card-title" }, "暂无工作流"), h("div", { className: "lbs-meta" }, "直接在对话中让 Agent 创建一个可复用流程。"))), - ), - selected ? h("div", { className: "lbs-knowledge-modal-layer" }, - h("button", { type: "button", className: "lbs-knowledge-modal-backdrop", onClick: closeWorkflow, "aria-label": "关闭工作流窗口" }), - h("section", { className: "lbs-knowledge-modal lbs-workflow-modal", role: "dialog", "aria-modal": true, "aria-labelledby": "lbs-workflow-modal-title" }, - h("header", { className: "lbs-knowledge-modal-head" }, - h("span", { className: "lbs-workflow-list-icon" }, h(LineIcon, { name: "workflow", size: 17 })), - h("div", { className: "lbs-knowledge-modal-head-copy" }, h("div", { id: "lbs-workflow-modal-title", className: "lbs-knowledge-modal-title" }, selected.name), h("div", { className: "lbs-meta" }, dialogMode === "edit" ? "编辑工作流信息和节点参数" : "查看工作流结构和发布状态")), - h("span", { className: "lbs-badge" }, dialogMode === "edit" ? "编辑" : "查看"), - h("button", { type: "button", className: "lbs-icon-action", onClick: closeWorkflow, title: "关闭", "aria-label": "关闭" }, h(LineIcon, { name: "close", size: 18 })), - ), - h("div", { className: "lbs-knowledge-modal-scroll" }, - error || message ? h("div", { className: "lbs-knowledge-modal-feedback" }, h(Status, { error: true, message: error }), h(Status, { message })) : null, - h("section", { className: "lbs-knowledge-modal-section" }, - h("div", { className: "lbs-workflow-modal-summary" }, - h("div", { className: "lbs-workflow-summary-item" }, h("strong", null, selected.publishedVersion ? `v${selected.publishedVersion}` : "草稿"), h("span", null, "当前版本")), - h("div", { className: "lbs-workflow-summary-item" }, h("strong", null, selected.publishedVersion ? (selected.enabled ? "已启用" : "已停用") : "未发布"), h("span", null, "插件状态")), - h("div", { className: "lbs-workflow-summary-item" }, h("strong", null, String(selected.definition.nodes.length)), h("span", null, "流程节点")), - h("div", { className: "lbs-workflow-summary-item" }, h("strong", null, String(selected.definition.edges.length)), h("span", null, "节点连线")), - ), - ), - h("section", { className: "lbs-knowledge-modal-section" }, - h("div", null, h("div", { className: "lbs-knowledge-modal-section-title" }, "基础信息"), h("div", { className: "lbs-meta" }, dialogMode === "edit" ? "修改名称、说明和注册给 Agent 的工具名。" : `最近更新:${formatUpdatedAt(selected.updatedAt)}`)), - dialogMode === "edit" ? [ - h("div", { key: "fields", className: "lbs-split" }, h(Field, { label: "名称", value: name, onChange: (event) => setName(event.target.value) }), h(Field, { label: "Agent 工具名", value: toolName, onChange: (event) => setToolName(event.target.value) })), - h(Field, { key: "description", label: "说明", area: true, value: description, onChange: (event) => setDescription(event.target.value) }), - ] : h("div", { className: "lbs-workflow-readonly" }, - h("div", null, h("div", { className: "lbs-label" }, "Agent 工具名"), h("code", { className: "lbs-automation-tool" }, selected.toolName)), - h("div", null, h("div", { className: "lbs-label" }, "说明"), h("div", { className: "lbs-meta" }, selected.description || "暂无说明")), - ), - ), - h("section", { className: "lbs-knowledge-modal-section" }, - h("div", null, h("div", { className: "lbs-knowledge-modal-section-title" }, "流程图"), h("div", { className: "lbs-meta" }, dialogMode === "edit" ? "点击节点可在下方进行微调。" : "工作流结构由 Agent 维护。")), - h(WorkflowGraph, { definition: selectedNode && dialogMode === "edit" ? { ...definition, nodes: definition.nodes.map((node) => node.id === selectedNode.id ? { ...node, ...(nodeLabel.trim() ? { label: nodeLabel.trim() } : {}) } : node) } : selected.definition, selectedNodeId: dialogMode === "edit" ? selectedNodeId : undefined, onSelectNode: dialogMode === "edit" ? selectNode : undefined }), - dialogMode === "edit" && selectedNode ? h("div", { className: "lbs-workflow-node-editor" }, - h("div", { className: "lbs-workflow-node-head" }, h("strong", null, "节点微调"), h("span", { className: "lbs-badge" }, selectedNode.type)), - h("div", { className: "lbs-meta" }, `节点 ID:${selectedNode.id}`), - h(Field, { label: "显示名称", value: nodeLabel, onChange: (event) => setNodeLabel(event.target.value), placeholder: selectedNode.id }), - h(Field, { label: "节点参数", area: true, code: true, value: nodeConfigText, onChange: (event) => setNodeConfigText(event.target.value) }), - ) : null, - ), - dialogMode === "edit" ? h("section", { className: "lbs-knowledge-modal-section" }, - h("div", null, h("div", { className: "lbs-knowledge-modal-section-title" }, "试运行"), h("div", { className: "lbs-meta" }, "保存当前微调后使用下面的 JSON 输入执行一次。")), - h(Field, { label: "输入参数", area: true, code: true, value: runInput, onChange: (event) => setRunInput(event.target.value) }), - h(Button, { secondary: true, onClick: run }, "试运行"), - ) : null, - ), - h("footer", { className: "lbs-knowledge-modal-footer" }, - h(Button, { danger: true, onClick: () => remove(selected) }, "删除工作流"), - dialogMode === "edit" ? h("div", { className: "lbs-knowledge-modal-footer-actions" }, - selected.publishedVersion ? h(Button, { secondary: true, onClick: () => setEnabled(selected, !selected.enabled) }, selected.enabled ? "停用" : "启用") : null, - h(Button, { secondary: true, onClick: closeWorkflow }, "取消"), - h(Button, { secondary: true, onClick: publish }, selected.publishedVersion ? "发布新版本" : "发布并启用"), - h(Button, { onClick: () => save(), disabled: !name.trim() || !toolName.trim() }, "保存修改"), - ) : h("div", { className: "lbs-knowledge-modal-footer-actions" }, h(Button, { secondary: true, onClick: closeWorkflow }, "关闭"), h(Button, { onClick: () => setDialogMode("edit") }, "编辑")), - ), - ), - ) : null, - ); - } - - function WorkflowPluginsTab() { - const [workflows, setWorkflows] = useState([]); - const [selectedId, setSelectedId] = useState(""); - const [message, setMessage] = useState(""); - const [error, setError] = useState(""); - const published = workflows.filter((item) => item.publishedVersion); - const selected = published.find((item) => item.id === selectedId) || published[0]; - const load = useCallback(async (preferred) => { - try { - const next = await request("/workflows"); - const available = next.filter((item) => item.publishedVersion); - setWorkflows(next); - setSelectedId((current) => preferred || (available.some((item) => item.id === current) ? current : available[0]?.id || "")); - setError(""); - } catch (reason) { setError(reason.message); } - }, []); - useEffect(() => { - load(); - const timer = window.setInterval(() => load(), 2_000); - return () => window.clearInterval(timer); - }, [load]); - - async function setEnabled(workflow, enabled) { - try { - const value = await request(`/workflows/${encodeURIComponent(workflow.id)}/enabled`, { - method: "POST", - body: JSON.stringify({ enabled, expectedRevision: workflow.revision }), - }); - await load(value.id); - setMessage(enabled ? `“${workflow.name}”已启用并注册为 Agent 工具。` : `“${workflow.name}”已停用,流程和版本仍然保留。`); - setError(""); - } catch (reason) { setError(reason.message); } - } - - async function remove(workflow) { - if (!confirm(`删除虚拟工作流插件“${workflow.name}”?工作流和全部发布版本会同步删除。`)) return; - try { - await request(`/workflows/${encodeURIComponent(workflow.id)}?revision=${encodeURIComponent(workflow.revision)}`, { method: "DELETE" }); - await load(); - setMessage(`“${workflow.name}”及其虚拟插件已删除。`); - setError(""); - } catch (reason) { setError(reason.message); } - } - - return h("div", { className: "lbs-page" }, - h(PageHeader, { title: "Agent 自动化", subtitle: "已发布工作流会作为虚拟插件统一出现在这里;启停和删除会与工作流页面实时同步。" }), - h(Status, { error: true, message: error }), - h(Status, { message }), - published.length ? h("div", { className: "lbs-grid" }, - h("section", { className: "lbs-panel lbs-automation-list", "aria-label": "虚拟工作流插件列表" }, published.map((workflow) => h("button", { - type: "button", - key: workflow.id, - className: "lbs-automation-card", - "data-active": workflow.id === selected?.id, - onClick: () => setSelectedId(workflow.id), - }, - h("span", { className: "lbs-automation-card-copy" }, h("strong", { className: "lbs-card-title" }, workflow.name), h("small", { className: "lbs-meta" }, `${workflow.toolName} · v${workflow.publishedVersion}`)), - h("span", { className: "lbs-automation-state", "data-enabled": workflow.enabled }, h("span", null), workflow.enabled ? "已启用" : "已停用")))), - selected ? h("section", { className: "lbs-panel lbs-automation-detail" }, - h("div", { className: "lbs-automation-detail-head" }, h("div", null, h("h2", null, selected.name), h("div", { className: "lbs-sub" }, selected.description || "Agent 生成的可复用工作流。")), h("span", { className: "lbs-badge" }, `虚拟插件 · v${selected.publishedVersion}`)), - h("code", { className: "lbs-automation-tool" }, selected.toolName), - h(WorkflowGraph, { definition: selected.definition }), - h("div", { className: "lbs-automation-actions" }, - h(Button, { onClick: () => setEnabled(selected, !selected.enabled) }, selected.enabled ? "停用" : "启用"), - h(Button, { danger: true, onClick: () => remove(selected) }, "删除"), - ), - h("div", { className: "lbs-automation-note" }, `${selected.definition.nodes.length} 个节点 · ${selected.definition.edges.length} 条连线 · 删除后工作流管理页会同步移除`), - ) : null, - ) : h("div", { className: "lbs-empty" }, "还没有已发布的工作流。Agent 创建并发布后,会自动注册到这里。"), - ); - } - function SkillsSection() { const [catalog, setCatalog] = useState({ roots: [], skills: [] }); const [selectedId, setSelectedId] = useState(""); @@ -2422,7 +2100,6 @@ window.__ModuleLoader__.load({ }, [active]); if (active === "conversation") return null; const Page = { - workflows: WorkflowsSection, knowledge: KnowledgeSection, skills: SkillsSection, mcp: McpSection, @@ -2596,7 +2273,16 @@ window.__ModuleLoader__.load({ const assistants = group.nodes.filter( (node) => flowKind(node) === "assistant-step", ); - const finalAnswer = group.completed ? assistants.at(-1) : undefined; + const hasVisibleAnswer = (node) => { + const clone = node.cloneNode(true); + for (const thinking of clone.querySelectorAll("[data-variant=think]")) { + thinking.remove(); + } + return Boolean(clone.textContent?.trim()); + }; + const finalAnswer = group.completed + ? assistants.findLast(hasVisibleAnswer) + : undefined; const preserved = new Set( group.completed ? group.nodes.filter((node) => @@ -3440,12 +3126,6 @@ window.__ModuleLoader__.load({ order: 15, label: () => "文件上传", }, UploadCacheSettingsSection)); - ctx.slots.inject("settings.plugins.tab", () => ctx.slots.register({ - name: "settings.plugins.tab", - id: "laobos-workflow-plugins", - order: 20, - label: () => "Agent 自动化", - }, WorkflowPluginsTab)); } exports.apply = apply; exports.inject = inject; diff --git a/packages/laobos-system-tools/lib/git-service.mjs b/packages/laobos-system-tools/lib/git-service.mjs index 5ebf0f1..9733e7c 100644 --- a/packages/laobos-system-tools/lib/git-service.mjs +++ b/packages/laobos-system-tools/lib/git-service.mjs @@ -1,12 +1,13 @@ import { execFile } from "node:child_process"; import { createHash } from "node:crypto"; -import { realpath } from "node:fs/promises"; +import { access, realpath } from "node:fs/promises"; import path from "node:path"; import { promisify } from "node:util"; const execFileAsync = promisify(execFile); const MAX_BUFFER = 8 * 1024 * 1024; const MAX_PATHS = 200; +let defaultGitExecutable; export class GitServiceError extends Error { constructor(code, message) { @@ -16,6 +17,56 @@ export class GitServiceError extends Error { } } +export function gitExecutableCandidates({ + platform = process.platform, + env = process.env, + resourcesPath = process.resourcesPath, +} = {}) { + const configured = env.LAOBOS_GIT_EXECUTABLE?.trim(); + if (platform !== "win32") return [...new Set([configured, "git"].filter(Boolean))]; + const pathApi = path.win32; + + const programFiles = env.ProgramFiles || env.PROGRAMFILES; + const programFilesX86 = env["ProgramFiles(x86)"] || env.PROGRAMFILES_X86; + const localAppData = env.LOCALAPPDATA + || (env.USERPROFILE && pathApi.join(env.USERPROFILE, "AppData", "Local")); + const installRoots = [ + env.GIT_INSTALL_ROOT, + env.ProgramW6432 && pathApi.join(env.ProgramW6432, "Git"), + programFiles && pathApi.join(programFiles, "Git"), + programFilesX86 && pathApi.join(programFilesX86, "Git"), + localAppData && pathApi.join(localAppData, "Programs", "Git"), + env.USERPROFILE && pathApi.join(env.USERPROFILE, "scoop", "apps", "git", "current"), + resourcesPath && pathApi.join(resourcesPath, "git"), + ].filter(Boolean); + const absoluteCandidates = installRoots.flatMap((root) => [ + pathApi.join(root, "cmd", "git.exe"), + pathApi.join(root, "bin", "git.exe"), + ]); + if (env.ChocolateyInstall) absoluteCandidates.push(pathApi.join(env.ChocolateyInstall, "bin", "git.exe")); + return [...new Set([configured, ...absoluteCandidates, "git"].filter(Boolean))]; +} + +export async function resolveGitExecutable({ + platform = process.platform, + env = process.env, + resourcesPath = process.resourcesPath, + canAccess = access, +} = {}) { + const candidates = gitExecutableCandidates({ platform, env, resourcesPath }); + const pathApi = platform === "win32" ? path.win32 : path; + for (const candidate of candidates) { + if (!pathApi.isAbsolute(candidate)) return candidate; + try { + await canAccess(candidate); + return candidate; + } catch { + // Try the next known Git for Windows installation location. + } + } + return "git"; +} + export async function inspectGit(root) { const context = await resolveRepository(root, { allowMissing: true }); if (!context.repository) { @@ -351,7 +402,9 @@ function isPathInside(root, candidate) { async function runGit(cwd, args, options = {}) { const acceptedExitCodes = options.acceptedExitCodes || [0]; try { - const { stdout, stderr } = await execFileAsync("git", args, { + defaultGitExecutable ||= resolveGitExecutable(); + const gitExecutable = await defaultGitExecutable; + const { stdout, stderr } = await execFileAsync(gitExecutable, args, { cwd, encoding: "utf8", timeout: options.timeout || 20_000, @@ -361,6 +414,12 @@ async function runGit(cwd, args, options = {}) { }); return { stdout, stderr, code: 0 }; } catch (error) { + if (error?.code === "ENOENT") { + throw new GitServiceError( + "GIT_NOT_FOUND", + "未检测到 Git。请安装 Git for Windows,或将 git.exe 加入 PATH;安装后请完全退出并重新打开劳博士。", + ); + } const code = Number(error?.code); if (acceptedExitCodes.includes(code)) return { stdout: String(error?.stdout || ""), stderr: String(error?.stderr || ""), code }; const message = String(error?.stderr || error?.message || error).trim(); diff --git a/packages/laobos-system-tools/lib/index.js b/packages/laobos-system-tools/lib/index.js index 5d0bb99..83e822d 100644 --- a/packages/laobos-system-tools/lib/index.js +++ b/packages/laobos-system-tools/lib/index.js @@ -1,5 +1,4 @@ -import { randomUUID } from "node:crypto"; -import { readFileSync } from "node:fs"; +import { readFileSync, realpathSync, statSync } from "node:fs"; import path from "node:path"; import z from "@deepseek-ai/schemastery"; import { defineTool } from "@deepseek-ai/dsh-tools"; @@ -95,20 +94,6 @@ const jsonOutput = { render: (_args, value) => [{ type: "text", text: JSON.stringify(value, null, 2) }], }; -function fieldSchema(field) { - const base = { ...(field.required ? { required: true } : {}), ...(field.description ? { description: field.description } : {}) }; - if (field.options?.length) return { ...base, type: "string", enum: field.options }; - if (["string", "number", "boolean"].includes(field.type)) return { ...base, type: field.type }; - if (field.type === "array") return { ...base, type: "array" }; - if (field.type === "object" || field.type === "file") return { ...base, type: "object", additionalProperties: true }; - return { ...base, type: "json" }; -} - -function workflowParameters(definition) { - const input = definition.nodes.find((node) => node.type === "input"); - return Object.fromEntries((input?.fields || []).map((field) => [field.name, fieldSchema(field)])); -} - function json(res, status, value) { const body = JSON.stringify(value); res.writeHead(status, { @@ -155,14 +140,23 @@ function errorResponse(res, error) { }); } -function gitWorkspace(workspacePath, exec) { +export function gitWorkspace(workspacePath, exec) { const requested = exec?.agent?.session?.header?.cwd; - const candidate = path.resolve(workspacePath, typeof requested === "string" ? requested : "."); - const relative = path.relative(workspacePath, candidate); - if (relative.startsWith("..") || path.isAbsolute(relative)) { - throw new SystemToolsError("WORKSPACE_BOUNDARY", "当前会话工作区超出劳博士授权范围。", 403); + const candidate = path.resolve( + workspacePath, + typeof requested === "string" && requested.trim() ? requested : ".", + ); + try { + const canonical = realpathSync(candidate); + if (!statSync(canonical).isDirectory()) throw new Error("not a directory"); + return canonical; + } catch { + throw new SystemToolsError( + "WORKSPACE_UNAVAILABLE", + `当前会话工作区不可访问:${candidate}。请确认目录存在且当前 Windows 用户拥有访问权限。`, + 400, + ); } - return candidate; } function isPlanActive(events) { @@ -321,6 +315,7 @@ function manageKnowledge(store, args, workspacePath) { title: args.title || existing?.title, content: args.content ?? existing?.content, source: args.source ?? existing?.source ?? "Agent 对话", + imageUrls: args.imageUrls ?? existing?.imageUrls ?? [], }); } default: @@ -328,57 +323,6 @@ function manageKnowledge(store, args, workspacePath) { } } -async function manageWorkflow(store, args, executionOptions) { - const find = () => store.getWorkflow(requiredArgument(args.workflowId, "工作流 ID")); - const requireRevision = () => { - if (!args.expectedRevision) { - throw new SystemToolsError("REVISION_REQUIRED", "修改工作流前必须先读取并携带当前 revision。", 409); - } - return args.expectedRevision; - }; - switch (args.action) { - case "list_workflows": - return store.listWorkflows(); - case "get_workflow": - return find(); - case "create_workflow": - return store.upsertWorkflow({ - name: requiredArgument(args.name, "工作流名称"), - description: args.description || "由 Agent 创建的可复用自动化流程。", - toolName: requiredArgument(args.toolName, "工作流工具名"), - definition: args.definition, - }); - case "update_workflow": { - const existing = find(); - return store.upsertWorkflow({ - id: existing.id, - expectedRevision: requireRevision(), - name: args.name ?? existing.name, - description: args.description ?? existing.description, - toolName: args.toolName ?? existing.toolName, - definition: args.definition ?? existing.definition, - }); - } - case "test_workflow": { - const workflow = find(); - return store.runWorkflow(workflow.id, args.input || {}, executionOptions); - } - case "publish_workflow": { - const workflow = find(); - return store.publishWorkflow(workflow.id, requireRevision()); - } - case "set_enabled": { - const workflow = find(); - if (typeof args.enabled !== "boolean") { - throw new SystemToolsError("INPUT_INVALID", "启停工作流必须提供 enabled 布尔值。"); - } - return store.setWorkflowEnabled(workflow.id, args.enabled, requireRevision()); - } - default: - throw new SystemToolsError("ACTION_INVALID", `不支持的工作流操作:${args.action || "空"}。`); - } -} - export function apply(ctx, config) { installConversationLocatorProjection(ctx); installPlanPermissionLink(ctx, config); @@ -421,15 +365,6 @@ export function apply(ctx, config) { 当用户明确要求记住某项信息,或信息稳定且会在后续任务中复用时,使用 knowledge_manager 写入;未指定知识库时让工具自动维护“Agent 知识”。 默认写入当前工作区;只有用户明确要求跨项目复用时才使用 global scope。 不要保存临时对话、猜测、未经确认的结论、凭据或其他秘密。更新前先读取现有文档并携带 revision。删除必须使用 knowledge_delete。`, - }); - ctx.systemPrompt.section({ - name: "laobos:workflow-guidance", - order: 41, - text: () => `# 工作流使用规则 - -工作流是可复用的 Agent 自动化。只有用户明确要求自动化,或一个稳定流程会重复使用时,才使用 workflow_manager 创建工作流;一次性任务不要创建。 -创建后先 test_workflow,确认结果再 publish_workflow。首次发布会自动启用并作为虚拟工作流插件注册,用户可以随时停用。 -更新、发布或启停前先读取当前工作流并携带 revision。删除必须使用 workflow_delete,并说明原因。`, }); ctx.systemPrompt.section({ name: "laobos:git-guidance", @@ -455,31 +390,10 @@ export function apply(ctx, config) { isConcurrencySafe: () => true, })); - const workflowExecutionOptions = (exec = {}) => ({ - signal: exec.signal, - async invokeTool(call) { - if (typeof ctx.tools.execute !== "function") { - throw new SystemToolsError("WORKFLOW_TOOL_UNAVAILABLE", "当前运行环境未提供嵌套工具调用。"); - } - const parentCallId = exec.callId || randomUUID(); - const nested = await ctx.tools.execute({ - callId: `${parentCallId}:workflow:${randomUUID()}`, - rootCallId: exec.rootCallId || parentCallId, - parent: exec.token, - name: call.name, - arguments: call.arguments, - agent: exec.agent, - signal: exec.signal, - }); - if (nested.isError) throw new Error(nested.error.message); - return nested.value; - }, - }); - let dynamicDisposers = []; const refreshDynamicTools = () => { for (const dispose of dynamicDisposers.splice(0)) dispose(); - const names = new Set(["knowledge_search", "knowledge_manager", "knowledge_delete", "workflow_manager", "workflow_delete"]); + const names = new Set(["knowledge_search", "knowledge_manager", "knowledge_delete"]); for (const collection of visibleCollections(store, workspacePath).filter((item) => item.agentEnabled)) { if (names.has(collection.toolName)) continue; names.add(collection.toolName); @@ -495,28 +409,6 @@ export function apply(ctx, config) { isConcurrencySafe: () => true, }))); } - for (const workflow of store.listPublishedWorkflows().filter((item) => item.enabled)) { - if (names.has(workflow.toolName)) { - ctx.logger.warn(`跳过重复的劳博士工具名:${workflow.toolName}`); - continue; - } - names.add(workflow.toolName); - dynamicDisposers.push(ctx.tools.register(defineTool({ - name: workflow.toolName, - description: workflow.description || `Run the published workflow ${workflow.name}.`, - parameters: workflowParameters(workflow.definition), - output: jsonOutput, - async execute(args, exec) { - const result = await store.runWorkflow( - workflow.workflowId, - args, - workflowExecutionOptions(exec), - workflow.version, - ); - return result.output; - }, - }))); - } }; ctx.tools.register(defineTool({ @@ -536,6 +428,7 @@ export function apply(ctx, config) { title: { type: "string", description: "Document title for upsert_document." }, content: { type: "string", description: "Durable document content for upsert_document." }, source: { type: "string", description: "Source file, URL, conversation, or provenance note." }, + imageUrls: { type: "array", description: "Optional HTTP(S) image URLs rendered with this document (maximum 12)." }, }, output: jsonOutput, execute: async (args) => { @@ -570,46 +463,6 @@ export function apply(ctx, config) { }, })); - ctx.tools.register(defineTool({ - name: "workflow_manager", - description: "List, read, create, update, test, publish, enable, or disable reusable workflows. This tool never deletes workflows. Read the current revision before changing an existing workflow.", - parameters: { - action: { type: "string", required: true, enum: ["list_workflows", "get_workflow", "create_workflow", "update_workflow", "test_workflow", "publish_workflow", "set_enabled"], description: "Workflow management action." }, - workflowId: { type: "string", description: "Existing workflow id." }, - expectedRevision: { type: "string", description: "Current revision; required for update, publish, and enable changes." }, - name: { type: "string", description: "Human-readable workflow name." }, - description: { type: "string", description: "When and why the Agent should use this workflow." }, - toolName: { type: "string", description: "Stable lowercase Agent tool name." }, - definition: { type: "json", description: "Workflow DAG definition with nodes and edges." }, - input: { type: "json", description: "JSON object used by test_workflow." }, - enabled: { type: "boolean", description: "Whether the published workflow is available to the Agent." }, - }, - output: jsonOutput, - execute: async (args, exec) => { - const result = await manageWorkflow(store, args, workflowExecutionOptions(exec)); - if (["publish_workflow", "set_enabled"].includes(args.action)) refreshDynamicTools(); - return result; - }, - isConcurrencySafe: (args) => ["list_workflows", "get_workflow"].includes(args.action), - })); - - ctx.tools.register(defineTool({ - name: "workflow_delete", - description: "Delete a workflow and unregister its virtual workflow plugin after user approval. Read the current revision first.", - parameters: { - id: { type: "string", required: true, description: "Exact workflow id." }, - expectedRevision: { type: "string", required: true, description: "Current revision returned by workflow_manager." }, - reason: { type: "string", required: true, description: "Why this workflow should be deleted." }, - }, - output: jsonOutput, - execute: async (args) => { - const workflow = store.getWorkflow(args.id); - store.deleteWorkflow(workflow.id, args.expectedRevision); - refreshDynamicTools(); - return { deleted: true, id: workflow.id, name: workflow.name, reason: args.reason }; - }, - })); - ctx.tools.register(defineTool({ name: "git_manager", description: "Inspect or initialize the current Git repository; stage, unstage, commit, create, or switch local branches with optimistic state checks. Prefer this over Bash for Git version management.", @@ -668,12 +521,10 @@ export function apply(ctx, config) { ctx.on("tools/pre-execute", async (exec, next) => { const decision = await next(); - if (!["knowledge_delete", "workflow_delete", "git_restore", "git_publish"].includes(exec.name) || decision.kind !== "allow") return decision; + if (!["knowledge_delete", "git_restore", "git_publish"].includes(exec.name) || decision.kind !== "allow") return decision; return { kind: "ask", - reason: exec.name === "workflow_delete" - ? "删除工作流会同步移除虚拟插件和全部发布版本,请确认 Agent 的删除请求。" - : exec.name === "knowledge_delete" + reason: exec.name === "knowledge_delete" ? "删除知识库内容不可直接恢复,请确认 Agent 的删除请求。" : exec.name === "git_restore" ? "恢复文件或删除分支会丢弃本地状态,请确认 Agent 的操作请求。" @@ -697,7 +548,9 @@ export function apply(ctx, config) { let value; if (req.method === "GET" && route === "/brand/icon.png") { - const icon = readFileSync(new URL("../../../public/laobos-logo.png", import.meta.url)); + // Packaged plugins are copied into DSH Home and cannot reach the Studio + // repository's public directory. Keep every runtime asset package-local. + const icon = readFileSync(new URL("../assets/laobos-logo.png", import.meta.url)); res.writeHead(200, { "content-type": "image/png", "cache-control": "public, max-age=86400, immutable", @@ -731,7 +584,6 @@ export function apply(ctx, config) { const skillCatalog = await skills.list(); value = { collections: visibleCollections(store, workspacePath), - workflows: store.listWorkflows(), skills: skillCatalog.skills, mcp: mcp.list(), }; @@ -819,28 +671,6 @@ export function apply(ctx, config) { findCollection(store, document.collectionId, workspacePath); store.deleteDocument(id, url.searchParams.get("revision")); value = { deleted: true }; refreshDynamicTools(); - } else if (req.method === "GET" && route === "/workflows") { - value = store.listWorkflows(); - } else if (req.method === "GET" && route.startsWith("/workflows/")) { - value = store.getWorkflow(decodeURIComponent(route.slice(11))); - } else if (req.method === "POST" && route === "/workflows") { - value = store.upsertWorkflow(await body(req)); refreshDynamicTools(); - } else if (req.method === "DELETE" && route.startsWith("/workflows/")) { - store.deleteWorkflow(decodeURIComponent(route.slice(11)), url.searchParams.get("revision")); - value = { deleted: true }; refreshDynamicTools(); - } else if (req.method === "POST" && /^\/workflows\/[^/]+\/publish$/u.test(route)) { - const input = await body(req); - value = store.publishWorkflow(decodeURIComponent(route.split("/")[2]), input.expectedRevision); refreshDynamicTools(); - } else if (req.method === "POST" && /^\/workflows\/[^/]+\/enabled$/u.test(route)) { - const input = await body(req); - value = store.setWorkflowEnabled( - decodeURIComponent(route.split("/")[2]), - input.enabled, - input.expectedRevision, - ); - refreshDynamicTools(); - } else if (req.method === "POST" && /^\/workflows\/[^/]+\/run$/u.test(route)) { - value = await store.runWorkflow(decodeURIComponent(route.split("/")[2]), (await body(req)).input || {}); } else { json(res, 404, { error: { code: "NOT_FOUND", message: "接口不存在。" } }); return; diff --git a/packages/laobos-system-tools/lib/store.js b/packages/laobos-system-tools/lib/store.js index d6587c8..a95e15c 100644 --- a/packages/laobos-system-tools/lib/store.js +++ b/packages/laobos-system-tools/lib/store.js @@ -50,6 +50,36 @@ function toolName(value) { return value; } +export function normalizeImageUrls(value) { + const candidates = (Array.isArray(value) + ? value + : typeof value === "string" + ? value.split(/\r?\n/u) + : []) + .map((candidate) => String(candidate || "").trim()) + .filter(Boolean); + if (candidates.length > 12) fail("IMAGE_URLS_TOO_MANY", "每份知识资料最多添加 12 张图片。"); + const result = []; + for (const candidate of candidates) { + const text = candidate; + if (text.length > 4_096) fail("IMAGE_URL_INVALID", "图片 URL 过长。"); + let url; + try { url = new URL(text); } + catch { fail("IMAGE_URL_INVALID", `图片 URL 无效:${text.slice(0, 120)}`); } + if (!["http:", "https:"].includes(url.protocol) || url.username || url.password) { + fail("IMAGE_URL_INVALID", "图片仅支持不含凭据的 HTTP(S) URL。"); + } + const normalized = url.toString(); + if (!result.includes(normalized)) result.push(normalized); + } + return result; +} + +function parseImageUrls(value) { + try { return normalizeImageUrls(JSON.parse(value || "[]")); } + catch { return []; } +} + function normalizeSearchText(value) { return String(value || "") .normalize("NFKC") @@ -152,7 +182,7 @@ export class SystemToolsStore { CREATE TABLE IF NOT EXISTS knowledge_documents ( id TEXT PRIMARY KEY, revision INTEGER NOT NULL DEFAULT 1, collection_id TEXT NOT NULL REFERENCES knowledge_collections(id) ON DELETE CASCADE, - title TEXT NOT NULL, source TEXT, content TEXT NOT NULL, + title TEXT NOT NULL, source TEXT, image_urls_json TEXT NOT NULL DEFAULT '[]', content TEXT NOT NULL, created_at TEXT NOT NULL, updated_at TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS knowledge_chunks ( @@ -195,6 +225,12 @@ export class SystemToolsStore { if (!collectionColumns.has("workspace_path")) { this.database.exec("ALTER TABLE knowledge_collections ADD COLUMN workspace_path TEXT"); } + const documentColumns = new Set( + this.database.prepare("PRAGMA table_info(knowledge_documents)").all().map((row) => row.name), + ); + if (!documentColumns.has("image_urls_json")) { + this.database.exec("ALTER TABLE knowledge_documents ADD COLUMN image_urls_json TEXT NOT NULL DEFAULT '[]'"); + } const workflowColumns = new Set( this.database.prepare("PRAGMA table_info(workflows)").all().map((row) => row.name), ); @@ -369,13 +405,13 @@ export class SystemToolsStore { listDocuments(collectionId) { const where = collectionId ? "WHERE d.collection_id=?" : ""; return this.database.prepare(` - SELECT d.id,d.revision,d.collection_id,d.title,d.source,length(d.content) content_length, + SELECT d.id,d.revision,d.collection_id,d.title,d.source,d.image_urls_json,length(d.content) content_length, COUNT(k.id) chunk_count,d.created_at,d.updated_at FROM knowledge_documents d LEFT JOIN knowledge_chunks k ON k.document_id=d.id ${where} GROUP BY d.id ORDER BY d.updated_at DESC,d.title COLLATE NOCASE `).all(...(collectionId ? [collectionId] : [])).map((row) => ({ id: row.id, revision: revision(row), collectionId: row.collection_id, title: row.title, - ...(row.source ? { source: row.source } : {}), contentLength: row.content_length, + ...(row.source ? { source: row.source } : {}), imageUrls: parseImageUrls(row.image_urls_json), contentLength: row.content_length, chunkCount: row.chunk_count, createdAt: row.created_at, updatedAt: row.updated_at, })); } @@ -383,13 +419,13 @@ export class SystemToolsStore { getDocument(id) { identifier(id, "文档 ID"); const row = this.database.prepare(` - SELECT d.id,d.revision,d.collection_id,d.title,d.source,d.content,length(d.content) content_length, + SELECT d.id,d.revision,d.collection_id,d.title,d.source,d.image_urls_json,d.content,length(d.content) content_length, COUNT(k.id) chunk_count,d.created_at,d.updated_at FROM knowledge_documents d LEFT JOIN knowledge_chunks k ON k.document_id=d.id WHERE d.id=? GROUP BY d.id `).get(id); if (!row) fail("DOCUMENT_NOT_FOUND", "文档不存在。", 404); return { id: row.id, revision: revision(row), collectionId: row.collection_id, title: row.title, - ...(row.source ? { source: row.source } : {}), content: row.content, + ...(row.source ? { source: row.source } : {}), imageUrls: parseImageUrls(row.image_urls_json), content: row.content, contentLength: row.content_length, chunkCount: row.chunk_count, createdAt: row.created_at, updatedAt: row.updated_at }; } @@ -403,6 +439,7 @@ export class SystemToolsStore { const title = nonEmpty(input.title, "文档标题", 240); const content = nonEmpty(input.content, "文档内容", MAX_DOCUMENT_CHARACTERS); const source = String(input.source || "").trim().slice(0, 2000) || null; + const imageUrls = normalizeImageUrls(input.imageUrls ?? existing?.imageUrls ?? []); const chunks = splitDocument(content); const timestamp = now(); this.transaction(() => { @@ -411,11 +448,11 @@ export class SystemToolsStore { } this.database.prepare("DELETE FROM knowledge_chunks WHERE document_id=?").run(id); this.database.prepare(` - INSERT INTO knowledge_documents(id,collection_id,title,source,content,created_at,updated_at) - VALUES(?,?,?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET collection_id=excluded.collection_id, - title=excluded.title,source=excluded.source,content=excluded.content, + INSERT INTO knowledge_documents(id,collection_id,title,source,image_urls_json,content,created_at,updated_at) + VALUES(?,?,?,?,?,?,?,?) ON CONFLICT(id) DO UPDATE SET collection_id=excluded.collection_id, + title=excluded.title,source=excluded.source,image_urls_json=excluded.image_urls_json,content=excluded.content, updated_at=excluded.updated_at,revision=revision+1 - `).run(id, collectionId, title, source, content, timestamp, timestamp); + `).run(id, collectionId, title, source, JSON.stringify(imageUrls), content, timestamp, timestamp); for (const [ordinal, chunk] of chunks.entries()) { const chunkId = `chunk-${randomUUID()}`; this.database.prepare("INSERT INTO knowledge_chunks VALUES(?,?,?,?,?,?)").run(chunkId, id, collectionId, ordinal, chunk, timestamp); @@ -446,7 +483,7 @@ export class SystemToolsStore { let rows = []; try { rows = !match ? [] : this.database.prepare(` - SELECT k.id chunk_id,k.ordinal,k.document_id,k.collection_id,d.title,d.source,k.content, + SELECT k.id chunk_id,k.ordinal,k.document_id,k.collection_id,d.title,d.source,d.image_urls_json,k.content, bm25(knowledge_chunks_fts,0.0,0.0,5.0,1.0) rank FROM knowledge_chunks_fts JOIN knowledge_chunks k ON k.id=knowledge_chunks_fts.chunk_id JOIN knowledge_documents d ON d.id=k.document_id @@ -462,7 +499,7 @@ export class SystemToolsStore { const conditions = fallbackTerms.map(() => "(k.content LIKE ? OR d.title LIKE ?)").join(" OR "); const values = fallbackTerms.flatMap((term) => [`%${term}%`, `%${term}%`]); rows = this.database.prepare(` - SELECT k.id chunk_id,k.ordinal,k.document_id,k.collection_id,d.title,d.source,k.content,1.0 rank + SELECT k.id chunk_id,k.ordinal,k.document_id,k.collection_id,d.title,d.source,d.image_urls_json,k.content,1.0 rank FROM knowledge_chunks k JOIN knowledge_documents d ON d.id=k.document_id JOIN knowledge_collections c ON c.id=k.collection_id WHERE (${conditions}) AND (? IS NULL OR k.collection_id=?) AND (?=0 OR c.agent_enabled=1) @@ -498,6 +535,7 @@ export class SystemToolsStore { chunkId: row.chunk_id, ordinal: row.ordinal, documentId: row.document_id, collectionId: row.collection_id, title: row.title, ...(row.source ? { source: row.source } : {}), + imageUrls: parseImageUrls(row.image_urls_json), content: mergeOverlappingText(context.map((item) => item.content)), score: Number(row.score.toFixed(6)), }; diff --git a/packages/laobos-system-tools/package.json b/packages/laobos-system-tools/package.json index d75addd..f3de96a 100644 --- a/packages/laobos-system-tools/package.json +++ b/packages/laobos-system-tools/package.json @@ -11,7 +11,7 @@ "./package.json": "./package.json" }, "dependencies": { - "@deepseek-ai/dsh-mcp-client": "0.1.0-rc.6", + "@deepseek-ai/dsh-mcp-client": "0.1.0-rc.7", "yaml": "2.9.0", "zod": "^4.4.3" }, diff --git a/packages/laobos-terminal-ui/lib/client.js b/packages/laobos-terminal-ui/lib/client.js index fc59f5f..7bb911e 100644 --- a/packages/laobos-terminal-ui/lib/client.js +++ b/packages/laobos-terminal-ui/lib/client.js @@ -9437,8 +9437,8 @@ ${h2.join(` const { useCallback, useEffect, useMemo, useRef, useState } = React; const css = `${xterm_default} - .lbs-terminal-panel{background:#101419;bottom:0;color:#e8edf2;display:grid;grid-template-rows:44px minmax(0,1fr) 24px;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060} - .lbs-terminal-toolbar{align-items:center;background:#181d23;border-bottom:1px solid #2b323b;display:flex;gap:6px;min-width:0;padding:0 9px}.lbs-terminal-toolbar strong{font-size:13px;margin-right:2px}.lbs-terminal-toolbar .lbs-terminal-tabs{display:flex!important;flex:1;gap:3px;min-width:0;overflow:auto hidden}.lbs-terminal-tab{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:#9aa7b5;display:flex;height:30px;max-width:190px;min-width:112px;padding:0 4px 0 8px}.lbs-terminal-tab[data-active=true]{background:#242b33;border-color:#35404b;color:#edf3f8}.lbs-terminal-tab-main{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;flex:1;font:inherit;font-size:11px;gap:6px;min-width:0;padding:0}.lbs-terminal-tab-main span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-terminal-dot{background:#8b96a1;border-radius:50%;flex:none;height:6px;width:6px}.lbs-terminal-dot[data-state=connected]{background:#39b87b}.lbs-terminal-dot[data-state=creating]{background:#e1a83d}.lbs-terminal-dot[data-state=error]{background:#e25d68}.lbs-terminal-tab-close,.lbs-terminal-icon{appearance:none;background:transparent;border:0;border-radius:5px;color:inherit;cursor:pointer;display:grid;flex:none;height:26px;place-items:center;width:26px}.lbs-terminal-tab-close:hover,.lbs-terminal-icon:hover{background:#303944}.lbs-terminal-select{background:#252c34;border:1px solid #35404b;border-radius:6px;color:#d5dde5;font:11px inherit;height:29px;padding:0 7px}.lbs-terminal-new{appearance:none;background:#e8edf2;border:0;border-radius:6px;color:#14191f;cursor:pointer;font:600 11px inherit;height:29px;padding:0 10px}.lbs-terminal-stage{min-height:0;position:relative}.lbs-terminal-surface{inset:0;pointer-events:none;position:absolute;visibility:hidden}.lbs-terminal-surface[data-active=true]{pointer-events:auto;visibility:visible}.lbs-terminal-host{box-sizing:border-box;height:100%;padding:8px}.lbs-terminal-host .xterm{height:100%}.lbs-terminal-empty{align-content:center;color:#8f9aa6;display:grid;gap:9px;height:100%;justify-items:center;padding:28px;text-align:center}.lbs-terminal-empty strong{color:#dfe6ec;font-size:13px}.lbs-terminal-empty p{font-size:11px;line-height:1.5;margin:0;max-width:460px}.lbs-terminal-empty button{background:#e8edf2;border:0;border-radius:6px;color:#14191f;height:31px;padding:0 11px}.lbs-terminal-message{background:#482129;color:#ffc4ca;font-size:11px;left:10px;max-width:calc(100% - 20px);padding:7px 10px;position:absolute;top:8px;z-index:3}.lbs-terminal-status{align-items:center;background:#181d23;border-top:1px solid #2b323b;color:#8995a1;display:flex;font-size:9px;gap:12px;padding:0 9px}.lbs-terminal-status span:last-child{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:850px){.lbs-terminal-panel{left:0;right:0}.lbs-terminal-toolbar strong{display:none}.lbs-terminal-tab{min-width:96px}.lbs-terminal-select{max-width:94px}} + .lbs-terminal-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:grid;grid-template-rows:44px minmax(0,1fr) 24px;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060} + .lbs-terminal-toolbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;min-width:0;padding:0 9px}.lbs-terminal-toolbar strong{font-size:13px;margin-right:2px}.lbs-terminal-toolbar .lbs-terminal-tabs{display:flex!important;flex:1;gap:3px;min-width:0;overflow:auto hidden}.lbs-terminal-tab{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--dsw-alias-label-tertiary);display:flex;height:30px;max-width:190px;min-width:112px;padding:0 4px 0 8px}.lbs-terminal-tab[data-active=true]{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.lbs-terminal-tab-main{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;flex:1;font:inherit;font-size:11px;gap:6px;min-width:0;padding:0}.lbs-terminal-tab-main span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-terminal-dot{background:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));border-radius:50%;flex:none;height:6px;width:6px}.lbs-terminal-dot[data-state=connected]{background:var(--dsw-alias-state-success-primary,#39b87b)}.lbs-terminal-dot[data-state=creating]{background:var(--dsw-alias-state-warn-primary,#e1a83d)}.lbs-terminal-dot[data-state=error]{background:var(--dsw-alias-state-error-primary,#e25d68)}.lbs-terminal-tab-close,.lbs-terminal-icon{appearance:none;background:transparent;border:0;border-radius:5px;color:inherit;cursor:pointer;display:grid;flex:none;height:26px;place-items:center;width:26px}.lbs-terminal-tab-close:hover,.lbs-terminal-icon:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-terminal-select{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;color:var(--dsw-alias-label-primary);font:11px inherit;height:29px;padding:0 7px}.lbs-terminal-new{appearance:none;background:var(--dsw-alias-button-primary-fill,var(--dsw-alias-interactive-bg-primary));border:0;border-radius:6px;color:var(--dsw-alias-label-primary-foreground,var(--dsw-alias-label-on-primary));cursor:pointer;font:600 11px inherit;height:29px;padding:0 10px}.lbs-terminal-stage{background:var(--dsw-alias-bg-base);min-height:0;position:relative}.lbs-terminal-surface{inset:0;pointer-events:none;position:absolute;visibility:hidden}.lbs-terminal-surface[data-active=true]{pointer-events:auto;visibility:visible}.lbs-terminal-host{box-sizing:border-box;height:100%;padding:8px}.lbs-terminal-host .xterm{height:100%}.lbs-terminal-empty{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;gap:9px;height:100%;justify-items:center;padding:28px;text-align:center}.lbs-terminal-empty strong{color:var(--dsw-alias-label-primary);font-size:13px}.lbs-terminal-empty p{font-size:11px;line-height:1.5;margin:0;max-width:460px}.lbs-terminal-empty button{background:var(--dsw-alias-button-primary-fill,var(--dsw-alias-interactive-bg-primary));border:0;border-radius:6px;color:var(--dsw-alias-label-primary-foreground,var(--dsw-alias-label-on-primary));height:31px;padding:0 11px}.lbs-terminal-message{background:color-mix(in srgb,var(--dsw-alias-state-error-primary,#d94b4b) 10%,var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-state-error-primary,#d94b4b);font-size:11px;left:10px;max-width:calc(100% - 20px);padding:7px 10px;position:absolute;top:8px;z-index:3}.lbs-terminal-status{align-items:center;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:12px;padding:0 9px}.lbs-terminal-status span:last-child{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:850px){.lbs-terminal-panel{left:0;right:0}.lbs-terminal-toolbar strong{display:none}.lbs-terminal-tab{min-width:96px}.lbs-terminal-select{max-width:94px}} `; if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-terminal-ui"]')) { const style = document.createElement("style"); @@ -9446,6 +9446,48 @@ ${h2.join(` style.textContent = css; document.head.append(style); } + function terminalTheme(element) { + const styles = getComputedStyle(element); + const color = (name, fallback) => styles.getPropertyValue(name).trim() || fallback; + const dark = document.body.hasAttribute("data-ds-dark-theme"); + return { + background: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + foreground: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursor: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursorAccent: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + selectionBackground: color("--dsw-alias-interactive-bg-active", dark ? "rgba(88,166,255,.28)" : "rgba(9,105,218,.18)"), + black: dark ? "#484f58" : "#24292f", + red: dark ? "#ff7b72" : "#cf222e", + green: dark ? "#3fb950" : "#1a7f37", + yellow: dark ? "#d29922" : "#9a6700", + blue: dark ? "#58a6ff" : "#0969da", + magenta: dark ? "#bc8cff" : "#8250df", + cyan: dark ? "#39c5cf" : "#1b7c83", + white: dark ? "#b1bac4" : "#6e7781", + brightBlack: dark ? "#6e7681" : "#57606a", + brightRed: dark ? "#ffa198" : "#a40e26", + brightGreen: dark ? "#56d364" : "#116329", + brightYellow: dark ? "#e3b341" : "#4d2d00", + brightBlue: dark ? "#79c0ff" : "#218bff", + brightMagenta: dark ? "#d2a8ff" : "#a475f9", + brightCyan: dark ? "#56d4dd" : "#3192aa", + brightWhite: dark ? "#f0f6fc" : "#24292f" + }; + } + function syncTerminalTheme(terminal, element) { + const applyTheme = () => { + terminal.options.theme = terminalTheme(element); + }; + const observer = new MutationObserver(applyTheme); + observer.observe(document.body, { attributes: true, attributeFilter: ["data-ds-dark-theme"] }); + const media = window.matchMedia?.("(prefers-color-scheme: dark)"); + media?.addEventListener?.("change", applyTheme); + applyTheme(); + return () => { + observer.disconnect(); + media?.removeEventListener?.("change", applyTheme); + }; + } let tabSequence = 0; const nextTmuxSlot = (tabs) => { const used = new Set(tabs.filter((tab) => tab.tmux).map((tab) => tab.sessionKey)); @@ -9491,12 +9533,13 @@ ${h2.join(` fontSize: 13, lineHeight: 1.2, scrollback: 1e4, - theme: { background: "#101419", foreground: "#e8edf2", cursor: "#d8e6f3", selectionBackground: "#38506a" } + theme: terminalTheme(host.current) }); terminalRef.current = terminal; const fit = new o(); terminal.loadAddon(fit); terminal.open(host.current); + const stopThemeSync = syncTerminalTheme(terminal, host.current); const fitTerminal = () => { try { fit.fit(); @@ -9543,6 +9586,7 @@ ${h2.join(` return () => { disposed = true; terminalRef.current = null; + stopThemeSync(); resize.disconnect(); input.dispose(); offData(); diff --git a/packages/laobos-terminal-ui/src/client.jsx b/packages/laobos-terminal-ui/src/client.jsx index ea42a5c..b8936ba 100644 --- a/packages/laobos-terminal-ui/src/client.jsx +++ b/packages/laobos-terminal-ui/src/client.jsx @@ -13,8 +13,8 @@ window.__ModuleLoader__.load({ const { useCallback, useEffect, useMemo, useRef, useState } = React; const css = `${xtermCss}\n - .lbs-terminal-panel{background:#101419;bottom:0;color:#e8edf2;display:grid;grid-template-rows:44px minmax(0,1fr) 24px;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060} - .lbs-terminal-toolbar{align-items:center;background:#181d23;border-bottom:1px solid #2b323b;display:flex;gap:6px;min-width:0;padding:0 9px}.lbs-terminal-toolbar strong{font-size:13px;margin-right:2px}.lbs-terminal-toolbar .lbs-terminal-tabs{display:flex!important;flex:1;gap:3px;min-width:0;overflow:auto hidden}.lbs-terminal-tab{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:#9aa7b5;display:flex;height:30px;max-width:190px;min-width:112px;padding:0 4px 0 8px}.lbs-terminal-tab[data-active=true]{background:#242b33;border-color:#35404b;color:#edf3f8}.lbs-terminal-tab-main{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;flex:1;font:inherit;font-size:11px;gap:6px;min-width:0;padding:0}.lbs-terminal-tab-main span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-terminal-dot{background:#8b96a1;border-radius:50%;flex:none;height:6px;width:6px}.lbs-terminal-dot[data-state=connected]{background:#39b87b}.lbs-terminal-dot[data-state=creating]{background:#e1a83d}.lbs-terminal-dot[data-state=error]{background:#e25d68}.lbs-terminal-tab-close,.lbs-terminal-icon{appearance:none;background:transparent;border:0;border-radius:5px;color:inherit;cursor:pointer;display:grid;flex:none;height:26px;place-items:center;width:26px}.lbs-terminal-tab-close:hover,.lbs-terminal-icon:hover{background:#303944}.lbs-terminal-select{background:#252c34;border:1px solid #35404b;border-radius:6px;color:#d5dde5;font:11px inherit;height:29px;padding:0 7px}.lbs-terminal-new{appearance:none;background:#e8edf2;border:0;border-radius:6px;color:#14191f;cursor:pointer;font:600 11px inherit;height:29px;padding:0 10px}.lbs-terminal-stage{min-height:0;position:relative}.lbs-terminal-surface{inset:0;pointer-events:none;position:absolute;visibility:hidden}.lbs-terminal-surface[data-active=true]{pointer-events:auto;visibility:visible}.lbs-terminal-host{box-sizing:border-box;height:100%;padding:8px}.lbs-terminal-host .xterm{height:100%}.lbs-terminal-empty{align-content:center;color:#8f9aa6;display:grid;gap:9px;height:100%;justify-items:center;padding:28px;text-align:center}.lbs-terminal-empty strong{color:#dfe6ec;font-size:13px}.lbs-terminal-empty p{font-size:11px;line-height:1.5;margin:0;max-width:460px}.lbs-terminal-empty button{background:#e8edf2;border:0;border-radius:6px;color:#14191f;height:31px;padding:0 11px}.lbs-terminal-message{background:#482129;color:#ffc4ca;font-size:11px;left:10px;max-width:calc(100% - 20px);padding:7px 10px;position:absolute;top:8px;z-index:3}.lbs-terminal-status{align-items:center;background:#181d23;border-top:1px solid #2b323b;color:#8995a1;display:flex;font-size:9px;gap:12px;padding:0 9px}.lbs-terminal-status span:last-child{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:850px){.lbs-terminal-panel{left:0;right:0}.lbs-terminal-toolbar strong{display:none}.lbs-terminal-tab{min-width:96px}.lbs-terminal-select{max-width:94px}} + .lbs-terminal-panel{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:grid;grid-template-rows:44px minmax(0,1fr) 24px;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483060} + .lbs-terminal-toolbar{align-items:center;background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;min-width:0;padding:0 9px}.lbs-terminal-toolbar strong{font-size:13px;margin-right:2px}.lbs-terminal-toolbar .lbs-terminal-tabs{display:flex!important;flex:1;gap:3px;min-width:0;overflow:auto hidden}.lbs-terminal-tab{align-items:center;background:transparent;border:1px solid transparent;border-radius:6px;color:var(--dsw-alias-label-tertiary);display:flex;height:30px;max-width:190px;min-width:112px;padding:0 4px 0 8px}.lbs-terminal-tab[data-active=true]{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary)}.lbs-terminal-tab-main{align-items:center;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;flex:1;font:inherit;font-size:11px;gap:6px;min-width:0;padding:0}.lbs-terminal-tab-main span:nth-child(2){overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-terminal-dot{background:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));border-radius:50%;flex:none;height:6px;width:6px}.lbs-terminal-dot[data-state=connected]{background:var(--dsw-alias-state-success-primary,#39b87b)}.lbs-terminal-dot[data-state=creating]{background:var(--dsw-alias-state-warn-primary,#e1a83d)}.lbs-terminal-dot[data-state=error]{background:var(--dsw-alias-state-error-primary,#e25d68)}.lbs-terminal-tab-close,.lbs-terminal-icon{appearance:none;background:transparent;border:0;border-radius:5px;color:inherit;cursor:pointer;display:grid;flex:none;height:26px;place-items:center;width:26px}.lbs-terminal-tab-close:hover,.lbs-terminal-icon:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-terminal-select{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l2);border-radius:6px;color:var(--dsw-alias-label-primary);font:11px inherit;height:29px;padding:0 7px}.lbs-terminal-new{appearance:none;background:var(--dsw-alias-button-primary-fill,var(--dsw-alias-interactive-bg-primary));border:0;border-radius:6px;color:var(--dsw-alias-label-primary-foreground,var(--dsw-alias-label-on-primary));cursor:pointer;font:600 11px inherit;height:29px;padding:0 10px}.lbs-terminal-stage{background:var(--dsw-alias-bg-base);min-height:0;position:relative}.lbs-terminal-surface{inset:0;pointer-events:none;position:absolute;visibility:hidden}.lbs-terminal-surface[data-active=true]{pointer-events:auto;visibility:visible}.lbs-terminal-host{box-sizing:border-box;height:100%;padding:8px}.lbs-terminal-host .xterm{height:100%}.lbs-terminal-empty{align-content:center;color:var(--dsw-alias-label-tertiary);display:grid;gap:9px;height:100%;justify-items:center;padding:28px;text-align:center}.lbs-terminal-empty strong{color:var(--dsw-alias-label-primary);font-size:13px}.lbs-terminal-empty p{font-size:11px;line-height:1.5;margin:0;max-width:460px}.lbs-terminal-empty button{background:var(--dsw-alias-button-primary-fill,var(--dsw-alias-interactive-bg-primary));border:0;border-radius:6px;color:var(--dsw-alias-label-primary-foreground,var(--dsw-alias-label-on-primary));height:31px;padding:0 11px}.lbs-terminal-message{background:color-mix(in srgb,var(--dsw-alias-state-error-primary,#d94b4b) 10%,var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-state-error-primary,#d94b4b);font-size:11px;left:10px;max-width:calc(100% - 20px);padding:7px 10px;position:absolute;top:8px;z-index:3}.lbs-terminal-status{align-items:center;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-tertiary);display:flex;font-size:9px;gap:12px;padding:0 9px}.lbs-terminal-status span:last-child{margin-left:auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:850px){.lbs-terminal-panel{left:0;right:0}.lbs-terminal-toolbar strong{display:none}.lbs-terminal-tab{min-width:96px}.lbs-terminal-select{max-width:94px}} `; if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-terminal-ui"]')) { const style = document.createElement("style"); @@ -23,6 +23,33 @@ window.__ModuleLoader__.load({ document.head.append(style); } + function terminalTheme(element) { + const styles = getComputedStyle(element); + const color = (name, fallback) => styles.getPropertyValue(name).trim() || fallback; + const dark = document.body.hasAttribute("data-ds-dark-theme"); + return { + background: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + foreground: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursor: color("--dsw-alias-label-primary", dark ? "#f1f3f5" : "#0f1115"), + cursorAccent: color("--dsw-alias-bg-base", dark ? "#151517" : "#ffffff"), + selectionBackground: color("--dsw-alias-interactive-bg-active", dark ? "rgba(88,166,255,.28)" : "rgba(9,105,218,.18)"), + black: dark ? "#484f58" : "#24292f", red: dark ? "#ff7b72" : "#cf222e", green: dark ? "#3fb950" : "#1a7f37", yellow: dark ? "#d29922" : "#9a6700", + blue: dark ? "#58a6ff" : "#0969da", magenta: dark ? "#bc8cff" : "#8250df", cyan: dark ? "#39c5cf" : "#1b7c83", white: dark ? "#b1bac4" : "#6e7781", + brightBlack: dark ? "#6e7681" : "#57606a", brightRed: dark ? "#ffa198" : "#a40e26", brightGreen: dark ? "#56d364" : "#116329", brightYellow: dark ? "#e3b341" : "#4d2d00", + brightBlue: dark ? "#79c0ff" : "#218bff", brightMagenta: dark ? "#d2a8ff" : "#a475f9", brightCyan: dark ? "#56d4dd" : "#3192aa", brightWhite: dark ? "#f0f6fc" : "#24292f", + }; + } + + function syncTerminalTheme(terminal, element) { + const applyTheme = () => { terminal.options.theme = terminalTheme(element); }; + const observer = new MutationObserver(applyTheme); + observer.observe(document.body, { attributes: true, attributeFilter: ["data-ds-dark-theme"] }); + const media = window.matchMedia?.("(prefers-color-scheme: dark)"); + media?.addEventListener?.("change", applyTheme); + applyTheme(); + return () => { observer.disconnect(); media?.removeEventListener?.("change", applyTheme); }; + } + let tabSequence = 0; const nextTmuxSlot = (tabs) => { const used = new Set(tabs.filter((tab) => tab.tmux).map((tab) => tab.sessionKey)); @@ -69,12 +96,13 @@ window.__ModuleLoader__.load({ fontSize: 13, lineHeight: 1.2, scrollback: 10000, - theme: { background: "#101419", foreground: "#e8edf2", cursor: "#d8e6f3", selectionBackground: "#38506a" }, + theme: terminalTheme(host.current), }); terminalRef.current = terminal; const fit = new FitAddon(); terminal.loadAddon(fit); terminal.open(host.current); + const stopThemeSync = syncTerminalTheme(terminal, host.current); const fitTerminal = () => { try { fit.fit(); @@ -108,7 +136,7 @@ window.__ModuleLoader__.load({ }); return () => { disposed = true; terminalRef.current = null; - resize.disconnect(); input.dispose(); offData(); offExit(); terminal.dispose(); + stopThemeSync(); resize.disconnect(); input.dispose(); offData(); offExit(); terminal.dispose(); if (sessionId) void window.laobosDesktop.terminal.close({ id: sessionId }); }; }, [cwd, onError, onExit, onReady, tab.generation, tab.id, tab.sessionKey, tab.tmux]); diff --git a/packages/laobos-updater/lib/client.js b/packages/laobos-updater/lib/client.js new file mode 100644 index 0000000..26a85f9 --- /dev/null +++ b/packages/laobos-updater/lib/client.js @@ -0,0 +1,108 @@ +/* eslint-disable @next/next/no-assign-module-variable -- generated DSH module factory */ +(() => { + // packages/laobos-updater/src/client.jsx + window.__ModuleLoader__.load({ + id: "@laobos/dsh-updater", + factory: (require2) => { + var module = { exports: {} }; + var exports = module.exports; + Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); + const React = require2("react"); + const { useCallback, useEffect, useState } = React; + const css = ` + .lbs-update{display:flex;flex-direction:column;gap:12px} + .lbs-update-head{align-items:flex-start;display:flex;gap:14px;justify-content:space-between} + .lbs-update-title{font-size:13px;font-weight:600;line-height:20px}.lbs-update-sub{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px} + .lbs-update-version{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:999px;color:var(--dsw-alias-label-secondary);font:11px/26px ui-monospace,SFMono-Regular,Menlo,monospace;padding:0 10px;white-space:nowrap} + .lbs-update-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:10px;display:flex;flex-direction:column;gap:9px;padding:12px} + .lbs-update-status{align-items:center;display:flex;gap:8px}.lbs-update-dot{background:var(--dsw-alias-label-quaternary);border-radius:50%;height:8px;width:8px}.lbs-update-dot[data-active=true]{background:#2a9b67}.lbs-update-dot[data-error=true]{background:#d94b4b} + .lbs-update-status strong{font-size:12px;font-weight:600}.lbs-update-notes{color:var(--dsw-alias-label-secondary);font:11px/18px inherit;margin:0;max-height:160px;overflow:auto;white-space:pre-wrap} + .lbs-update-progress{background:var(--dsw-alias-bg-layer-1);border-radius:999px;height:6px;overflow:hidden}.lbs-update-progress>span{background:var(--dsw-alias-brand-primary);display:block;height:100%;transition:width .18s ease} + .lbs-update-actions{display:flex;flex-wrap:wrap;gap:8px}.lbs-update-button{appearance:none;background:transparent;border:1px solid var(--dsw-alias-line-border);border-radius:8px;color:inherit;cursor:pointer;font:11px inherit;height:31px;padding:0 11px}.lbs-update-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-update-button.primary{background:var(--dsw-alias-interactive-bg-primary);border-color:transparent;color:var(--dsw-alias-label-on-primary)}.lbs-update-button:disabled{cursor:not-allowed;opacity:.45} + .lbs-update-option{align-items:center;display:flex;font-size:11px;gap:8px}.lbs-update-option input{accent-color:var(--dsw-alias-brand-primary)}.lbs-update-error{color:#d94b4b;font-size:11px;line-height:18px} + `; + const labels = { + disabled: "开发环境不启用自动更新", + idle: "尚未检查更新", + restoring: "正在恢复本地更新缓存…", + checking: "正在检查更新…", + available: "发现新版本", + downloading: "正在下载更新…", + downloaded: "更新已下载,可以安装", + installing: "正在退出并安装更新…", + "up-to-date": "当前已经是最新版本", + error: "更新失败" + }; + function formatBytes(value) { + if (!Number.isFinite(value) || value <= 0) return "0 B"; + const units = ["B", "KB", "MB", "GB"]; + const index = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1); + return `${(value / 1024 ** index).toFixed(index === 0 ? 0 : 1)} ${units[index]}`; + } + function UpdateSettingsSection() { + const api = window.laobosDesktop?.updates; + const available = window.laobosDesktop?.capabilities?.softwareUpdate === true && Boolean(api); + const [state, setState] = useState(null); + const [preferences, setPreferences] = useState({ autoCheckUpdates: true }); + const [busy, setBusy] = useState(false); + const [localError, setLocalError] = useState(""); + useEffect(() => { + if (!available) return void 0; + let active2 = true; + Promise.all([api.status(), api.preferences()]).then(([nextState, nextPreferences]) => { + if (!active2) return; + setState(nextState); + setPreferences(nextPreferences); + }).catch((error2) => active2 && setLocalError(error2 instanceof Error ? error2.message : String(error2))); + const remove = api.onState((next) => active2 && setState(next)); + return () => { + active2 = false; + remove?.(); + }; + }, [api, available]); + const run = useCallback(async (action) => { + if (!available || busy) return; + setBusy(true); + setLocalError(""); + try { + const next = await action(); + if (next?.schema === 1) setState(next); + } catch (error2) { + setLocalError(error2 instanceof Error ? error2.message : String(error2)); + } finally { + setBusy(false); + } + }, [available, busy]); + async function toggleAutoCheck(event) { + const autoCheckUpdates = event.target.checked; + setPreferences((current) => ({ ...current, autoCheckUpdates })); + try { + const next = await api.setPreferences({ autoCheckUpdates }); + setPreferences(next); + } catch (error2) { + setPreferences((current) => ({ ...current, autoCheckUpdates: !autoCheckUpdates })); + setLocalError(error2 instanceof Error ? error2.message : String(error2)); + } + } + const phase = state?.phase || (available ? "idle" : "disabled"); + const progress = state?.progress; + const percent = Math.max(0, Math.min(100, progress?.percent || 0)); + const error = localError || state?.error?.message || ""; + const active = ["restoring", "available", "downloading", "downloaded", "installing", "up-to-date"].includes(phase); + return /* @__PURE__ */ React.createElement("section", { className: "lbs-update" }, /* @__PURE__ */ React.createElement("style", null, css), /* @__PURE__ */ React.createElement("div", { className: "lbs-update-head" }, /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "lbs-update-title" }, "软件更新"), /* @__PURE__ */ React.createElement("div", { className: "lbs-update-sub" }, "从劳博士官方 GitHub Release 获取经过签名的软件版本。")), /* @__PURE__ */ React.createElement("span", { className: "lbs-update-version" }, "v", state?.currentVersion || "—")), /* @__PURE__ */ React.createElement("div", { className: "lbs-update-card" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-update-status" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-update-dot", "data-active": active, "data-error": phase === "error" }), /* @__PURE__ */ React.createElement("strong", null, labels[phase] || "更新状态未知")), state?.availableVersion ? /* @__PURE__ */ React.createElement("div", { className: "lbs-update-sub" }, "可用版本:v", state.availableVersion, state.releaseDate ? ` · ${state.releaseDate.slice(0, 10)}` : "") : null, state?.cached ? /* @__PURE__ */ React.createElement("div", { className: "lbs-update-sub" }, "安装包已安全缓存到本地,重启应用后无需重新下载。") : null, state?.releaseNotes ? /* @__PURE__ */ React.createElement("pre", { className: "lbs-update-notes" }, state.releaseNotes) : null, phase === "downloading" ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "lbs-update-progress" }, /* @__PURE__ */ React.createElement("span", { style: { width: `${percent}%` } })), /* @__PURE__ */ React.createElement("div", { className: "lbs-update-sub" }, percent.toFixed(1), "% · ", formatBytes(progress?.transferred), " / ", formatBytes(progress?.total), " · ", formatBytes(progress?.bytesPerSecond), "/s")) : null, error ? /* @__PURE__ */ React.createElement("div", { className: "lbs-update-error" }, error) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-update-actions" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-update-button", disabled: !available || busy || ["restoring", "checking", "downloading", "downloaded", "installing"].includes(phase), onClick: () => void run(() => api.check()) }, "检查更新"), phase === "available" ? /* @__PURE__ */ React.createElement("button", { className: "lbs-update-button primary", disabled: busy, onClick: () => void run(() => api.download()) }, "下载更新") : null, phase === "downloaded" ? /* @__PURE__ */ React.createElement("button", { className: "lbs-update-button primary", disabled: busy, onClick: () => void run(() => api.install()) }, "重启并安装") : null)), /* @__PURE__ */ React.createElement("label", { className: "lbs-update-option" }, /* @__PURE__ */ React.createElement("input", { type: "checkbox", checked: preferences.autoCheckUpdates !== false, disabled: !available, onChange: (event) => void toggleAutoCheck(event) }), "启动后自动检查更新(每天最多一次,不自动下载)")); + } + const inject = ["slots"]; + function apply(ctx) { + ctx.slots.inject("settings.section", () => ctx.slots.register({ + name: "settings.section", + id: "laobos-software-update", + order: 35, + label: () => "软件更新" + }, UpdateSettingsSection)); + } + exports.apply = apply; + exports.inject = inject; + return module.exports; + } + }); +})(); diff --git a/packages/laobos-updater/lib/index.js b/packages/laobos-updater/lib/index.js new file mode 100644 index 0000000..c4641b6 --- /dev/null +++ b/packages/laobos-updater/lib/index.js @@ -0,0 +1 @@ +export function apply() {} diff --git a/packages/laobos-updater/package.json b/packages/laobos-updater/package.json new file mode 100644 index 0000000..b7ea3b0 --- /dev/null +++ b/packages/laobos-updater/package.json @@ -0,0 +1,22 @@ +{ + "name": "@laobos/dsh-updater", + "version": "0.1.0", + "license": "SEE LICENSE IN ../../LICENSE", + "private": true, + "type": "module", + "main": "lib/index.js", + "exports": { + ".": "./lib/index.js", + "./client": "./lib/client.js", + "./package.json": "./package.json" + }, + "dsh": { + "client": { + "inject": [ + "@deepseek-ai/dsh-client-runtime", + "@deepseek-ai/dsh-client-ui-settings" + ], + "platform": "web" + } + } +} diff --git a/packages/laobos-updater/src/client.jsx b/packages/laobos-updater/src/client.jsx new file mode 100644 index 0000000..024faff --- /dev/null +++ b/packages/laobos-updater/src/client.jsx @@ -0,0 +1,153 @@ +/* eslint-disable @next/next/no-assign-module-variable -- DSH browser plugins use a CommonJS-style module factory */ +window.__ModuleLoader__.load({ + id: "@laobos/dsh-updater", + factory: (require) => { + var module = { exports: {} }; + var exports = module.exports; + Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); + const React = require("react"); + const { useCallback, useEffect, useState } = React; + + const css = ` + .lbs-update{display:flex;flex-direction:column;gap:12px} + .lbs-update-head{align-items:flex-start;display:flex;gap:14px;justify-content:space-between} + .lbs-update-title{font-size:13px;font-weight:600;line-height:20px}.lbs-update-sub{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:18px} + .lbs-update-version{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:999px;color:var(--dsw-alias-label-secondary);font:11px/26px ui-monospace,SFMono-Regular,Menlo,monospace;padding:0 10px;white-space:nowrap} + .lbs-update-card{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-line-border);border-radius:10px;display:flex;flex-direction:column;gap:9px;padding:12px} + .lbs-update-status{align-items:center;display:flex;gap:8px}.lbs-update-dot{background:var(--dsw-alias-label-quaternary);border-radius:50%;height:8px;width:8px}.lbs-update-dot[data-active=true]{background:#2a9b67}.lbs-update-dot[data-error=true]{background:#d94b4b} + .lbs-update-status strong{font-size:12px;font-weight:600}.lbs-update-notes{color:var(--dsw-alias-label-secondary);font:11px/18px inherit;margin:0;max-height:160px;overflow:auto;white-space:pre-wrap} + .lbs-update-progress{background:var(--dsw-alias-bg-layer-1);border-radius:999px;height:6px;overflow:hidden}.lbs-update-progress>span{background:var(--dsw-alias-brand-primary);display:block;height:100%;transition:width .18s ease} + .lbs-update-actions{display:flex;flex-wrap:wrap;gap:8px}.lbs-update-button{appearance:none;background:transparent;border:1px solid var(--dsw-alias-line-border);border-radius:8px;color:inherit;cursor:pointer;font:11px inherit;height:31px;padding:0 11px}.lbs-update-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-update-button.primary{background:var(--dsw-alias-interactive-bg-primary);border-color:transparent;color:var(--dsw-alias-label-on-primary)}.lbs-update-button:disabled{cursor:not-allowed;opacity:.45} + .lbs-update-option{align-items:center;display:flex;font-size:11px;gap:8px}.lbs-update-option input{accent-color:var(--dsw-alias-brand-primary)}.lbs-update-error{color:#d94b4b;font-size:11px;line-height:18px} + `; + + const labels = { + disabled: "开发环境不启用自动更新", + idle: "尚未检查更新", + restoring: "正在恢复本地更新缓存…", + checking: "正在检查更新…", + available: "发现新版本", + downloading: "正在下载更新…", + downloaded: "更新已下载,可以安装", + installing: "正在退出并安装更新…", + "up-to-date": "当前已经是最新版本", + error: "更新失败", + }; + + function formatBytes(value) { + if (!Number.isFinite(value) || value <= 0) return "0 B"; + const units = ["B", "KB", "MB", "GB"]; + const index = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1); + return `${(value / (1024 ** index)).toFixed(index === 0 ? 0 : 1)} ${units[index]}`; + } + + function UpdateSettingsSection() { + const api = window.laobosDesktop?.updates; + const available = window.laobosDesktop?.capabilities?.softwareUpdate === true && Boolean(api); + const [state, setState] = useState(null); + const [preferences, setPreferences] = useState({ autoCheckUpdates: true }); + const [busy, setBusy] = useState(false); + const [localError, setLocalError] = useState(""); + + useEffect(() => { + if (!available) return undefined; + let active = true; + Promise.all([api.status(), api.preferences()]) + .then(([nextState, nextPreferences]) => { + if (!active) return; + setState(nextState); + setPreferences(nextPreferences); + }) + .catch((error) => active && setLocalError(error instanceof Error ? error.message : String(error))); + const remove = api.onState((next) => active && setState(next)); + return () => { + active = false; + remove?.(); + }; + }, [api, available]); + + const run = useCallback(async (action) => { + if (!available || busy) return; + setBusy(true); + setLocalError(""); + try { + const next = await action(); + if (next?.schema === 1) setState(next); + } catch (error) { + setLocalError(error instanceof Error ? error.message : String(error)); + } finally { + setBusy(false); + } + }, [available, busy]); + + async function toggleAutoCheck(event) { + const autoCheckUpdates = event.target.checked; + setPreferences((current) => ({ ...current, autoCheckUpdates })); + try { + const next = await api.setPreferences({ autoCheckUpdates }); + setPreferences(next); + } catch (error) { + setPreferences((current) => ({ ...current, autoCheckUpdates: !autoCheckUpdates })); + setLocalError(error instanceof Error ? error.message : String(error)); + } + } + + const phase = state?.phase || (available ? "idle" : "disabled"); + const progress = state?.progress; + const percent = Math.max(0, Math.min(100, progress?.percent || 0)); + const error = localError || state?.error?.message || ""; + const active = ["restoring", "available", "downloading", "downloaded", "installing", "up-to-date"].includes(phase); + + return ( +

+ +
+
+
软件更新
+
从劳博士官方 GitHub Release 获取经过签名的软件版本。
+
+ v{state?.currentVersion || "—"} +
+
+
+ + {labels[phase] || "更新状态未知"} +
+ {state?.availableVersion ?
可用版本:v{state.availableVersion}{state.releaseDate ? ` · ${state.releaseDate.slice(0, 10)}` : ""}
: null} + {state?.cached ?
安装包已安全缓存到本地,重启应用后无需重新下载。
: null} + {state?.releaseNotes ?
{state.releaseNotes}
: null} + {phase === "downloading" ? ( + <> +
+
{percent.toFixed(1)}% · {formatBytes(progress?.transferred)} / {formatBytes(progress?.total)} · {formatBytes(progress?.bytesPerSecond)}/s
+ + ) : null} + {error ?
{error}
: null} +
+ + {phase === "available" ? : null} + {phase === "downloaded" ? : null} +
+
+ +
+ ); + } + + const inject = ["slots"]; + function apply(ctx) { + ctx.slots.inject("settings.section", () => ctx.slots.register({ + name: "settings.section", + id: "laobos-software-update", + order: 35, + label: () => "软件更新", + }, UpdateSettingsSection)); + } + exports.apply = apply; + exports.inject = inject; + return module.exports; + }, +}); diff --git a/packages/laobos-workspace-tools/lib/client.js b/packages/laobos-workspace-tools/lib/client.js index 214eaf3..6caa3ae 100644 --- a/packages/laobos-workspace-tools/lib/client.js +++ b/packages/laobos-workspace-tools/lib/client.js @@ -1,5 +1,152 @@ /* eslint-disable @next/next/no-assign-module-variable -- generated DSH module factory */ (() => { + // packages/laobos-workspace-tools/src/code-renderer.mjs + var EXTENSION_LANGUAGE = /* @__PURE__ */ new Map([ + ["js", "javascript"], + ["jsx", "javascript"], + ["mjs", "javascript"], + ["cjs", "javascript"], + ["ts", "typescript"], + ["tsx", "typescript"], + ["json", "json"], + ["jsonc", "json"], + ["py", "python"], + ["rb", "ruby"], + ["rs", "rust"], + ["go", "go"], + ["java", "java"], + ["kt", "kotlin"], + ["kts", "kotlin"], + ["c", "c"], + ["h", "c"], + ["cc", "cpp"], + ["cpp", "cpp"], + ["cxx", "cpp"], + ["hpp", "cpp"], + ["css", "css"], + ["scss", "css"], + ["less", "css"], + ["html", "markup"], + ["htm", "markup"], + ["xml", "markup"], + ["svg", "markup"], + ["md", "markdown"], + ["mdx", "markdown"], + ["yaml", "yaml"], + ["yml", "yaml"], + ["toml", "toml"], + ["sh", "shell"], + ["bash", "shell"], + ["zsh", "shell"], + ["fish", "shell"], + ["sql", "sql"], + ["graphql", "graphql"], + ["gql", "graphql"] + ]); + var KEYWORDS = new Set(` + abstract as async await break case catch class const continue debugger default delete do else + enum export extends false finally for from function get if implements import in instanceof interface + let new null of package private protected public readonly return set static super switch this throw true + try type typeof undefined var void while with yield + and assert def del elif except False finally for from global if import in is lambda None nonlocal not or + pass raise return True try while with yield + bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort + fn impl match mod move mut pub ref self Self struct trait use where + func go map range select chan defer fallthrough package + SELECT FROM WHERE JOIN LEFT RIGHT INNER OUTER ON AS INSERT UPDATE DELETE CREATE ALTER DROP TABLE + INTO VALUES SET AND OR NOT NULL PRIMARY KEY FOREIGN REFERENCES GROUP BY ORDER LIMIT OFFSET HAVING +`.trim().split(/\s+/u)); + function languageForPath(filePath = "") { + const clean = String(filePath).split(/[?#]/u)[0]; + const name = clean.split(/[\\/]/u).at(-1)?.toLowerCase() || ""; + if (["dockerfile", "makefile", "procfile"].includes(name)) return "shell"; + const extension = name.includes(".") ? name.split(".").at(-1) : ""; + return EXTENSION_LANGUAGE.get(extension) || "text"; + } + function isCodePath(filePath = "") { + return languageForPath(filePath) !== "text"; + } + function tokenizeCodeLine(value, language = "text") { + const text = String(value ?? ""); + if (!text || language === "text") return [{ type: "plain", value: text }]; + const commentMarker = ["python", "ruby", "shell", "yaml", "toml"].includes(language) ? "#" : "//"; + const pattern = commentMarker === "#" ? /(`(?:\\.|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|#.*$|\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b|\b[A-Za-z_$][\w$]*\b)/giu : /(`(?:\\.|[^`\\])*`|"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\/\/.*$|\/\*.*?\*\/|\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b|\b[A-Za-z_$][\w$]*\b)/giu; + const tokens = []; + let cursor = 0; + for (const match of text.matchAll(pattern)) { + if (match.index > cursor) tokens.push({ type: "plain", value: text.slice(cursor, match.index) }); + const token = match[0]; + let type = "plain"; + if (token.startsWith(commentMarker) || token.startsWith("/*")) type = "comment"; + else if (/^[`"']/u.test(token)) type = "string"; + else if (/^(?:\d|0x)/iu.test(token)) type = "number"; + else if (KEYWORDS.has(token) || KEYWORDS.has(token.toUpperCase())) type = "keyword"; + else if (/^[A-Z]/u.test(token)) type = "type"; + else if (text.slice((match.index || 0) + token.length).trimStart().startsWith("(")) type = "function"; + tokens.push({ type, value: token }); + cursor = (match.index || 0) + token.length; + } + if (cursor < text.length) tokens.push({ type: "plain", value: text.slice(cursor) }); + return tokens.length ? tokens : [{ type: "plain", value: text }]; + } + function parseUnifiedDiff(value, fallbackPath = "") { + const rawLines = String(value || "").replace(/\r\n?/gu, "\n").split("\n"); + const lines = []; + let oldLine = null; + let newLine = null; + let currentPath = fallbackPath; + let additions = 0; + let deletions = 0; + for (let index = 0; index < rawLines.length; index += 1) { + const raw = rawLines[index]; + const hunk = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@(.*)$/u.exec(raw); + if (hunk) { + oldLine = Number(hunk[1]); + newLine = Number(hunk[2]); + lines.push({ key: index, type: "hunk", oldLine: null, newLine: null, prefix: "", content: raw, path: currentPath }); + continue; + } + if (raw.startsWith("+++ ")) { + const candidate = raw.slice(4).replace(/^b\//u, ""); + if (candidate !== "/dev/null") currentPath = candidate; + lines.push({ key: index, type: "file", oldLine: null, newLine: null, prefix: "", content: raw, path: currentPath }); + continue; + } + if (raw.startsWith("--- ") || raw.startsWith("diff --git ")) { + if (raw.startsWith("diff --git ")) { + oldLine = null; + newLine = null; + } + lines.push({ key: index, type: "file", oldLine: null, newLine: null, prefix: "", content: raw, path: currentPath }); + continue; + } + if (oldLine !== null && raw.startsWith("+") && !raw.startsWith("+++")) { + lines.push({ key: index, type: "insert", oldLine: null, newLine, prefix: "+", content: raw.slice(1), path: currentPath }); + newLine += 1; + additions += 1; + continue; + } + if (oldLine !== null && raw.startsWith("-") && !raw.startsWith("---")) { + lines.push({ key: index, type: "delete", oldLine, newLine: null, prefix: "-", content: raw.slice(1), path: currentPath }); + oldLine += 1; + deletions += 1; + continue; + } + if (oldLine !== null && raw.startsWith(" ")) { + lines.push({ key: index, type: "normal", oldLine, newLine, prefix: " ", content: raw.slice(1), path: currentPath }); + oldLine += 1; + newLine += 1; + continue; + } + const type = raw.startsWith("\\ No newline") ? "notice" : "meta"; + lines.push({ key: index, type, oldLine: null, newLine: null, prefix: "", content: raw, path: currentPath }); + } + return { lines, additions, deletions }; + } + function codeLines(value) { + return String(value ?? "").replace(/\r\n?/gu, "\n").split("\n"); + } + // packages/laobos-workspace-tools/src/client.jsx window.__ModuleLoader__.load({ id: "@laobos/dsh-workspace-tools", @@ -10,9 +157,15 @@ const React = require2("react"); const { useCallback, useEffect, useMemo, useState } = React; const css = ` - .lbs-workbench{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483030}.lbs-workbench-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:8px;height:56px;padding:0 18px}.lbs-workbench-header strong{font-size:15px}.lbs-workbench-close{margin-left:auto}.lbs-workbench-body{display:flex;flex:1;min-height:0}.lbs-files-list{border-right:1px solid var(--dsw-alias-border-l1);box-sizing:border-box;display:flex;flex-direction:column;min-width:250px;width:34%}.lbs-files-toolbar,.lbs-git-toolbar{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;min-height:43px;padding:0 10px}.lbs-files-path{color:var(--dsw-alias-label-secondary);flex:1;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-rows{flex:1;overflow:auto;padding:5px}.lbs-file-row{align-items:center;appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;display:flex;font:inherit;font-size:12px;gap:7px;height:29px;padding:0 8px;text-align:left;width:100%}.lbs-file-row:hover,.lbs-file-row[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-size{color:var(--dsw-alias-label-tertiary);font-size:10px}.lbs-preview{box-sizing:border-box;flex:1;min-width:0;overflow:auto;padding:16px}.lbs-preview-empty{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;height:100%;justify-content:center;text-align:center}.lbs-preview-title{align-items:center;display:flex;gap:8px;margin-bottom:12px}.lbs-preview-title strong{font-size:14px}.lbs-preview-title .lbs-wb-button{margin-left:auto}.lbs-preview pre,.lbs-git-diff{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:9px;box-sizing:border-box;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;overflow:auto;padding:12px;tab-size:2;white-space:pre}.lbs-preview img,.lbs-preview video{display:block;height:auto;margin:auto;max-height:calc(100vh - 130px);max-width:100%}.lbs-preview iframe{border:1px solid var(--dsw-alias-border-l1);height:calc(100vh - 115px);width:100%}.lbs-preview audio{margin:40px auto;max-width:620px;width:100%} + .lbs-workbench{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483030}.lbs-workbench-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:8px;height:56px;padding:0 18px}.lbs-workbench-header strong{font-size:15px}.lbs-workbench-close{margin-left:auto}.lbs-workbench-body{display:flex;flex:1;min-height:0}.lbs-files-list{border-right:1px solid var(--dsw-alias-border-l1);box-sizing:border-box;display:flex;flex-direction:column;min-width:250px;width:34%}.lbs-files-toolbar,.lbs-git-toolbar{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;min-height:43px;padding:0 10px}.lbs-files-path{color:var(--dsw-alias-label-secondary);flex:1;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-rows{flex:1;overflow:auto;padding:5px}.lbs-file-row{align-items:center;appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;display:flex;font:inherit;font-size:12px;gap:7px;height:29px;padding:0 8px;text-align:left;width:100%}.lbs-file-row:hover,.lbs-file-row[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-size{color:var(--dsw-alias-label-tertiary);font-size:10px}.lbs-preview{box-sizing:border-box;flex:1;min-width:0;overflow:auto;padding:16px}.lbs-preview-empty{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;height:100%;justify-content:center;text-align:center}.lbs-preview-title{align-items:center;display:flex;gap:8px;margin-bottom:12px}.lbs-preview-title strong{font-size:14px}.lbs-preview-actions{align-items:center;display:flex;gap:5px;margin-left:auto}.lbs-preview pre,.lbs-git-diff{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:9px;box-sizing:border-box;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;overflow:auto;padding:12px;tab-size:2;white-space:pre}.lbs-preview img,.lbs-preview video{display:block;height:auto;margin:auto;max-height:calc(100vh - 130px);max-width:100%}.lbs-preview iframe{border:1px solid var(--dsw-alias-border-l1);height:calc(100vh - 115px);width:100%}.lbs-preview audio{margin:40px auto;max-width:620px;width:100%}.lbs-preview-editor{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2);border-radius:9px;box-sizing:border-box;color:var(--dsw-alias-label-primary);font:12px/1.58 ui-monospace,SFMono-Regular,Menlo,monospace;height:calc(100vh - 145px);min-height:280px;outline:none;padding:12px;resize:none;tab-size:2;width:100%}.lbs-preview-editor:focus{border-color:var(--dsw-alias-border-l3);box-shadow:0 0 0 2px color-mix(in srgb,var(--dsw-alias-brand-primary) 16%,transparent)} .lbs-wb-button{appearance:none;background:transparent;border:0;border-radius:7px;color:inherit;cursor:pointer;font:inherit;font-size:11px;min-height:31px;padding:0 9px}.lbs-wb-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-wb-button.primary{background:var(--dsw-alias-interactive-bg-primary);color:var(--dsw-alias-label-on-primary)}.lbs-wb-button.danger{color:#d94b4b}.lbs-wb-button:disabled{cursor:not-allowed;opacity:.38}.lbs-wb-error{background:rgba(218,70,70,.1);border-radius:8px;color:#d94b4b;font-size:11px;line-height:1.5;margin:8px;padding:9px}.lbs-wb-ok{background:rgba(52,163,105,.1);border-radius:8px;color:#38a76f;font-size:11px;margin:8px;padding:9px} .lbs-git-layout{display:grid;flex:1;grid-template-columns:minmax(310px,37%) minmax(0,1fr);min-height:0}.lbs-git-sidebar{border-right:1px solid var(--dsw-alias-border-l1);display:flex;flex-direction:column;min-height:0}.lbs-git-toolbar{flex-wrap:wrap}.lbs-git-toolbar select,.lbs-git-commit-box textarea{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;color:inherit;font:inherit}.lbs-git-toolbar select{font-size:11px;height:29px;max-width:150px;padding:0 7px}.lbs-git-toolbar-spacer{flex:1}.lbs-git-scroll{flex:1;min-height:0;overflow:auto;padding:7px 9px}.lbs-git-section{margin-bottom:15px}.lbs-git-section-head{align-items:center;color:var(--dsw-alias-label-secondary);display:flex;font-size:10px;font-weight:600;height:27px;letter-spacing:.03em;padding:0 5px;text-transform:uppercase}.lbs-git-section-head span{margin-left:auto}.lbs-git-change,.lbs-git-history{align-items:center;appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;display:grid;font:inherit;text-align:left;width:100%}.lbs-git-change{grid-template-columns:28px minmax(0,1fr) auto;min-height:34px;padding:4px 5px}.lbs-git-change:hover,.lbs-git-change[data-active=true],.lbs-git-history:hover,.lbs-git-history[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-git-code{font:10px ui-monospace,SFMono-Regular,Menlo,monospace}.lbs-git-change-name,.lbs-git-history strong{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-git-change-sub,.lbs-git-history small{color:var(--dsw-alias-label-tertiary);display:block;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-git-row-action{appearance:none;background:transparent;border:0;border-radius:5px;color:var(--dsw-alias-label-secondary);cursor:pointer;font-size:9px;height:25px;opacity:.2;padding:0 6px}.lbs-git-change:hover .lbs-git-row-action,.lbs-git-row-action:focus-visible{opacity:1}.lbs-git-history{display:block;padding:6px}.lbs-git-commit-box{border-top:1px solid var(--dsw-alias-border-l1);display:grid;gap:7px;padding:9px}.lbs-git-commit-box textarea{box-sizing:border-box;font-size:11px;line-height:1.45;min-height:58px;padding:7px;resize:vertical;width:100%}.lbs-git-commit-actions{align-items:center;display:flex;gap:6px}.lbs-git-commit-actions span{color:var(--dsw-alias-label-tertiary);font-size:9px;margin-right:auto}.lbs-git-main{display:flex;flex-direction:column;min-width:0}.lbs-git-diff-head{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:8px;min-height:43px;padding:0 13px}.lbs-git-diff-head strong{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-git-diff-head span{color:var(--dsw-alias-label-tertiary);font-size:9px}.lbs-git-diff{border:0;border-radius:0;flex:1;min-height:0}.lbs-git-onboarding{align-content:center;display:grid;gap:12px;height:100%;justify-items:center;padding:30px;text-align:center}.lbs-git-onboarding strong{font-size:16px}.lbs-git-onboarding p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6;margin:0;max-width:480px}.lbs-git-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:4px;color:var(--dsw-alias-label-secondary);font-size:9px;padding:2px 5px}.lbs-git-loading{opacity:.58;pointer-events:none} + .lbs-files-list{min-width:280px;width:32%}.lbs-files-toolbar{min-height:46px}.lbs-file-tree{flex:1;overflow:auto;padding:6px 5px 14px}.lbs-file-root-row,.lbs-tree-row{align-items:center;border-radius:6px;box-sizing:border-box;display:flex;min-width:max-content;width:100%}.lbs-file-root-row{color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600;height:31px;padding:0 8px}.lbs-tree-row{height:29px;padding-right:7px}.lbs-tree-row:hover,.lbs-tree-row[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-tree-toggle,.lbs-tree-file{align-items:center;appearance:none;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;font:inherit;height:100%;min-width:0;padding:0;text-align:left}.lbs-tree-toggle{flex:1}.lbs-tree-chevron{color:var(--dsw-alias-label-tertiary);display:inline-flex;flex:none;font-size:10px;justify-content:center;width:18px}.lbs-tree-icon{align-items:center;color:var(--dsw-alias-label-secondary);display:inline-flex;flex:none;font:10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;height:18px;justify-content:center;margin-right:5px;width:18px}.lbs-tree-row[data-type=directory] .lbs-tree-icon{color:#d6a84b;font-size:15px}.lbs-tree-row[data-code=true] .lbs-tree-icon{color:#6f8cff}.lbs-tree-name{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-tree-file{flex:1}.lbs-tree-size{color:var(--dsw-alias-label-tertiary);font-size:9px;margin-left:10px}.lbs-tree-loading{animation:lbs-tree-spin .8s linear infinite;display:inline-block}@keyframes lbs-tree-spin{to{transform:rotate(360deg)}} + .lbs-file-menu{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:9px;box-shadow:var(--dsw-shadow-lv3);display:grid;min-width:190px;padding:5px;position:fixed;z-index:2147483200}.lbs-file-menu button{appearance:none;background:transparent;border:0;border-radius:6px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;font-size:11px;height:30px;padding:0 9px;text-align:left}.lbs-file-menu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-file-menu button.danger{color:var(--dsw-alias-state-error-primary,#d94b4b)}.lbs-file-menu-separator{border-top:1px solid var(--dsw-alias-border-l1);margin:4px 3px} + .lbs-workbench{--lbs-code-keyword:#cf222e;--lbs-code-string:#0a3069;--lbs-code-number:#0550ae;--lbs-code-comment:#6e7781;--lbs-code-type:#953800;--lbs-code-function:#8250df;--lbs-diff-add:#1a7f37;--lbs-diff-delete:#cf222e;--lbs-diff-hunk:#0969da;--lbs-diff-file:#8250df;--lbs-diff-insert-bg:rgba(46,160,67,.1);--lbs-diff-insert-gutter:rgba(46,160,67,.16);--lbs-diff-delete-bg:rgba(248,81,73,.1);--lbs-diff-delete-gutter:rgba(248,81,73,.16);--lbs-diff-hunk-bg:rgba(9,105,218,.08)}body[data-ds-dark-theme] .lbs-workbench{--lbs-code-keyword:#ff7b72;--lbs-code-string:#a5d6ff;--lbs-code-number:#79c0ff;--lbs-code-comment:#8b949e;--lbs-code-type:#ffa657;--lbs-code-function:#d2a8ff;--lbs-diff-add:#56d364;--lbs-diff-delete:#ff7b72;--lbs-diff-hunk:#79c0ff;--lbs-diff-file:#d2a8ff;--lbs-diff-insert-bg:rgba(46,160,67,.17);--lbs-diff-insert-gutter:rgba(46,160,67,.24);--lbs-diff-delete-bg:rgba(248,81,73,.16);--lbs-diff-delete-gutter:rgba(248,81,73,.23);--lbs-diff-hunk-bg:rgba(56,139,253,.13)} + .lbs-code-viewer{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2);border-radius:9px;color:var(--dsw-alias-label-primary);min-width:max-content;overflow:auto}.lbs-code-language{align-items:center;background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);display:flex;font:10px/28px ui-monospace,SFMono-Regular,Menlo,monospace;height:28px;justify-content:space-between;padding:0 10px;position:sticky;left:0}.lbs-code-row{display:grid;font:12px/1.58 ui-monospace,SFMono-Regular,Menlo,monospace;grid-template-columns:52px minmax(max-content,1fr);min-height:19px}.lbs-code-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-code-line-number{border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));padding:0 10px;text-align:right;user-select:none}.lbs-code-line{padding:0 12px;white-space:pre}.lbs-code-truncated{background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-tertiary);font-size:11px;padding:8px 12px;position:sticky;left:0}.lbs-token-keyword{color:var(--lbs-code-keyword)}.lbs-token-string{color:var(--lbs-code-string)}.lbs-token-number{color:var(--lbs-code-number)}.lbs-token-comment{color:var(--lbs-code-comment);font-style:italic}.lbs-token-type{color:var(--lbs-code-type)}.lbs-token-function{color:var(--lbs-code-function)} + .lbs-diff-viewer{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-label-primary);display:flex;flex:1;flex-direction:column;min-height:0}.lbs-diff-summary{align-items:center;background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));border-bottom:1px solid var(--dsw-alias-border-l2);display:flex;flex:none;gap:10px;height:34px;padding:0 10px}.lbs-diff-summary span{font:10px ui-monospace,SFMono-Regular,Menlo,monospace}.lbs-diff-additions{color:var(--lbs-diff-add)}.lbs-diff-deletions{color:var(--lbs-diff-delete)}.lbs-diff-summary button{background:transparent;border:1px solid var(--dsw-alias-border-l2);border-radius:5px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;font-size:10px;line-height:23px;margin-left:auto;padding:0 8px}.lbs-diff-summary button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-diff-scroll{flex:1;min-height:0;overflow:auto}.lbs-diff-table{border-collapse:collapse;font:12px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;min-width:100%;table-layout:auto}.lbs-diff-row td{height:20px;padding:0}.lbs-diff-gutter{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));min-width:43px;padding:0 8px!important;text-align:right;user-select:none;width:43px}.lbs-diff-prefix{color:var(--dsw-alias-label-tertiary);text-align:center;user-select:none;width:24px}.lbs-diff-code{padding-right:14px!important;white-space:pre}.lbs-diff-viewer[data-wrap=true] .lbs-diff-code{overflow-wrap:anywhere;white-space:pre-wrap}.lbs-diff-row[data-type=insert]{background:var(--lbs-diff-insert-bg)}.lbs-diff-row[data-type=insert] .lbs-diff-gutter{background:var(--lbs-diff-insert-gutter);color:var(--lbs-diff-add)}.lbs-diff-row[data-type=insert] .lbs-diff-prefix{color:var(--lbs-diff-add)}.lbs-diff-row[data-type=delete]{background:var(--lbs-diff-delete-bg)}.lbs-diff-row[data-type=delete] .lbs-diff-gutter{background:var(--lbs-diff-delete-gutter);color:var(--lbs-diff-delete)}.lbs-diff-row[data-type=delete] .lbs-diff-prefix{color:var(--lbs-diff-delete)}.lbs-diff-row[data-type=hunk]{background:var(--lbs-diff-hunk-bg);color:var(--lbs-diff-hunk)}.lbs-diff-row[data-type=file]{background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));color:var(--lbs-diff-file);font-weight:600}.lbs-diff-row[data-type=meta],.lbs-diff-row[data-type=notice]{color:var(--dsw-alias-label-tertiary)}.lbs-diff-row[data-type=hunk] .lbs-diff-code,.lbs-diff-row[data-type=file] .lbs-diff-code,.lbs-diff-row[data-type=meta] .lbs-diff-code,.lbs-diff-row[data-type=notice] .lbs-diff-code{padding:2px 12px!important}.lbs-diff-row:hover{box-shadow:inset 0 0 0 9999px color-mix(in srgb,var(--dsw-alias-label-primary) 3%,transparent)} + .lbs-git-change[data-status=A] .lbs-git-code,.lbs-git-change[data-status=U] .lbs-git-code{color:#2a9b67}.lbs-git-change[data-status=M] .lbs-git-code{color:#6f8cff}.lbs-git-change[data-status=D] .lbs-git-code{color:#d94b4b}.lbs-git-change[data-status=R] .lbs-git-code{color:#a675d1} @media(max-width:850px){.lbs-workbench{left:0;right:0}.lbs-workbench-body,.lbs-git-layout{display:flex;flex-direction:column}.lbs-files-list,.lbs-git-sidebar{border-bottom:1px solid var(--dsw-alias-border-l1);border-right:0;max-height:46vh;width:100%}.lbs-git-main{min-height:42vh}} `; if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-workspace-tools"]')) { @@ -27,11 +180,45 @@ return text.replace(/^Error invoking remote method '[^']+': Error:\s*/u, ""); }; const formatSize = (value) => value < 1024 ? `${value} B` : value < 1024 ** 2 ? `${(value / 1024).toFixed(1)} KB` : `${(value / 1024 ** 2).toFixed(1)} MB`; - const parentPath = (value) => { - const parts = String(value || ".").split("/").filter((part) => part && part !== "."); - parts.pop(); - return parts.join("/") || "."; + const absolutePathPattern = /^(?:\/|[a-zA-Z]:[\\/]|\\\\)/u; + const pathSeparator = (root) => String(root || "").includes("\\") ? "\\" : "/"; + const absoluteWorkspacePath = (root, target) => { + const value = String(target || "."); + if (!root || absolutePathPattern.test(value)) return value; + if (value === ".") return root; + const separator = pathSeparator(root); + return `${String(root).replace(/[\\/]+$/u, "")}${separator}${value.replace(/^[.][\\/]/u, "")}`; + }; + const relativeWorkspacePath = (root, target) => { + const value = String(target || "."); + if (!root) return value; + if (!absolutePathPattern.test(value)) return value.replace(/^[.][\\/]/u, "") || "."; + const windows = pathSeparator(root) === "\\"; + const normalizedRoot = String(root || "").replaceAll("\\", "/").replace(/\/+$/u, ""); + const normalizedTarget = value.replaceAll("\\", "/"); + const comparableRoot = windows ? normalizedRoot.toLowerCase() : normalizedRoot; + const comparableTarget = windows ? normalizedTarget.toLowerCase() : normalizedTarget; + if (comparableTarget === comparableRoot) return "."; + if (comparableTarget.startsWith(`${comparableRoot}/`)) return normalizedTarget.slice(normalizedRoot.length + 1).replaceAll("/", pathSeparator(root)); + return value; }; + const parentWorkspacePath = (value) => { + const parts = String(value || ".").split(/[\\/]/u).filter(Boolean); + return parts.length <= 1 ? "." : parts.slice(0, -1).join(String(value).includes("\\") ? "\\" : "/"); + }; + async function openProducedFile(path) { + const sessions = module.ctx?.sessions?.list?.getSnapshot?.(); + const cwd = sessions?.current ? sessions.byId?.[sessions.current]?.cwd : void 0; + const target = absoluteWorkspacePath(cwd, path); + try { + if (!module.ctx?.workspaces?.openPath) throw new Error("系统文件打开器不可用"); + await module.ctx.workspaces.openPath(target); + } catch { + window.dispatchEvent(new CustomEvent("laobos:open-desktop-tool", { + detail: { tool: "files", cwd, path, source: "file-open-fallback" } + })); + } + } function useDesktopContext() { const [context, setContext] = useState(null); const [error, setError] = useState(""); @@ -48,7 +235,39 @@ }, [refresh]); return { context, error }; } - function Preview({ selected, value, onReveal }) { + function CodeTokens({ value, language }) { + return tokenizeCodeLine(value, language).map((token, index) => /* @__PURE__ */ React.createElement("span", { className: `lbs-token-${token.type}`, key: `${index}:${token.value}` }, token.value)); + } + function CodeViewer({ value, path }) { + const language = languageForPath(path); + const lines = useMemo(() => codeLines(value), [value]); + const visibleLines = lines.slice(0, 6e3); + return /* @__PURE__ */ React.createElement("div", { className: "lbs-code-viewer", "aria-label": `${path} 代码预览` }, /* @__PURE__ */ React.createElement("div", { className: "lbs-code-language" }, /* @__PURE__ */ React.createElement("span", null, language), /* @__PURE__ */ React.createElement("span", null, lines.length, " 行")), visibleLines.map((line, index) => /* @__PURE__ */ React.createElement("div", { className: "lbs-code-row", key: index }, /* @__PURE__ */ React.createElement("span", { className: "lbs-code-line-number" }, index + 1), /* @__PURE__ */ React.createElement("code", { className: "lbs-code-line" }, /* @__PURE__ */ React.createElement(CodeTokens, { value: line, language })))), lines.length > visibleLines.length ? /* @__PURE__ */ React.createElement("div", { className: "lbs-code-truncated" }, "文件较大,仅渲染前 ", visibleLines.length, " 行;可在系统编辑器中查看完整内容。") : null); + } + function DiffViewer({ value, path }) { + const [wrap, setWrap] = useState(false); + const model = useMemo(() => parseUnifiedDiff(value, path), [value, path]); + const visibleLines = model.lines.slice(0, 12e3); + return /* @__PURE__ */ React.createElement("div", { className: "lbs-diff-viewer", "data-wrap": wrap }, /* @__PURE__ */ React.createElement("div", { className: "lbs-diff-summary" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-diff-additions" }, "+", model.additions, " 添加"), /* @__PURE__ */ React.createElement("span", { className: "lbs-diff-deletions" }, "−", model.deletions, " 删除"), /* @__PURE__ */ React.createElement("span", null, model.lines.length, " 行"), /* @__PURE__ */ React.createElement("button", { type: "button", onClick: () => setWrap((value2) => !value2) }, wrap ? "不换行" : "自动换行")), /* @__PURE__ */ React.createElement("div", { className: "lbs-diff-scroll" }, /* @__PURE__ */ React.createElement("table", { className: "lbs-diff-table", "aria-label": "Git 变更内容" }, /* @__PURE__ */ React.createElement("tbody", null, visibleLines.map((line) => { + const codeLine = ["insert", "delete", "normal"].includes(line.type); + const language = languageForPath(line.path || path); + return /* @__PURE__ */ React.createElement("tr", { className: "lbs-diff-row", "data-type": line.type, key: line.key }, /* @__PURE__ */ React.createElement("td", { className: "lbs-diff-gutter" }, line.oldLine ?? ""), /* @__PURE__ */ React.createElement("td", { className: "lbs-diff-gutter" }, line.newLine ?? ""), codeLine ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("td", { className: "lbs-diff-prefix" }, line.prefix), /* @__PURE__ */ React.createElement("td", { className: "lbs-diff-code" }, /* @__PURE__ */ React.createElement("code", null, /* @__PURE__ */ React.createElement(CodeTokens, { value: line.content, language })))) : /* @__PURE__ */ React.createElement("td", { className: "lbs-diff-code", colSpan: 2 }, line.content)); + }))), model.lines.length > visibleLines.length ? /* @__PURE__ */ React.createElement("div", { className: "lbs-code-truncated" }, "Diff 较大,仅渲染前 ", visibleLines.length, " 行。") : null)); + } + function fileGlyph(entry) { + if (entry.type === "directory") return "▰"; + if (isCodePath(entry.path)) return "{}"; + const extension = entry.name.split(".").at(-1)?.toLowerCase(); + if (["png", "jpg", "jpeg", "gif", "webp", "svg"].includes(extension)) return "▧"; + return "·"; + } + function FileTreeNode({ entry, depth, childrenByPath, expanded, loadingPaths, selected, onToggle, onSelect, onContextMenu }) { + const isDirectory = entry.type === "directory"; + const isExpanded = isDirectory && expanded.has(entry.path); + const children = childrenByPath[entry.path] || []; + return /* @__PURE__ */ React.createElement("div", { role: "treeitem", "aria-expanded": isDirectory ? isExpanded : void 0, "aria-selected": !isDirectory && selected === entry.path }, /* @__PURE__ */ React.createElement("div", { className: "lbs-tree-row", "data-active": selected === entry.path, "data-code": !isDirectory && isCodePath(entry.path), "data-type": entry.type, onContextMenu: (event) => onContextMenu(event, entry), style: { paddingLeft: 8 + depth * 16 } }, isDirectory ? /* @__PURE__ */ React.createElement("button", { type: "button", className: "lbs-tree-toggle", onClick: () => onToggle(entry), title: entry.path }, /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-chevron" }, loadingPaths.has(entry.path) ? /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-loading" }, "◌") : isExpanded ? "▾" : "▸"), /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-icon" }, fileGlyph(entry)), /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-name" }, entry.name)) : /* @__PURE__ */ React.createElement("button", { type: "button", className: "lbs-tree-file", onClick: () => onSelect(entry), title: entry.path }, /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-chevron" }), /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-icon" }, fileGlyph(entry)), /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-name" }, entry.name)), !isDirectory ? /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-size" }, formatSize(entry.size)) : null), isExpanded ? /* @__PURE__ */ React.createElement("div", { role: "group" }, children.map((child) => /* @__PURE__ */ React.createElement(FileTreeNode, { key: child.path, entry: child, depth: depth + 1, childrenByPath, expanded, loadingPaths, selected, onToggle, onSelect, onContextMenu }))) : null); + } + function Preview({ selected, value, editing, draft, saving, onBeginEdit, onDraftChange, onSave, onCancelEdit, onReveal }) { const source = useMemo(() => { if (!value?.base64) return ""; const binary = atob(value.base64); @@ -60,54 +279,199 @@ if (source) URL.revokeObjectURL(source); }, [source]); if (!selected) return /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "选择文件以预览"); - return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-title" }, /* @__PURE__ */ React.createElement("strong", null, selected), value ? /* @__PURE__ */ React.createElement("span", { className: "lbs-file-size" }, formatSize(value.size)) : null, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: onReveal }, "在系统中显示")), !value ? /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "正在读取…") : value.kind === "text" ? /* @__PURE__ */ React.createElement("pre", null, value.content) : value.kind === "image" ? /* @__PURE__ */ React.createElement("img", { src: source, alt: selected }) : value.kind === "pdf" ? /* @__PURE__ */ React.createElement("iframe", { src: source, title: selected }) : value.kind === "media" && value.mediaType.startsWith("audio/") ? /* @__PURE__ */ React.createElement("audio", { src: source, controls: true }) : value.kind === "media" ? /* @__PURE__ */ React.createElement("video", { src: source, controls: true }) : /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "该二进制文件暂不支持内嵌预览。")); + return /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-title" }, /* @__PURE__ */ React.createElement("strong", null, selected), value ? /* @__PURE__ */ React.createElement("span", { className: "lbs-file-size" }, formatSize(value.size)) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-actions" }, value?.kind === "text" ? editing ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", disabled: saving, onClick: onCancelEdit }, "取消"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button primary", disabled: saving, onClick: onSave }, saving ? "正在保存…" : "保存")) : /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: onBeginEdit }, "编辑") : null, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: onReveal }, "打开所在位置"))), !value ? /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "正在读取…") : value.kind === "text" && editing ? /* @__PURE__ */ React.createElement("textarea", { className: "lbs-preview-editor", "aria-label": `${selected} 文本编辑器`, autoFocus: true, spellCheck: false, value: draft, onChange: (event) => onDraftChange(event.target.value), onKeyDown: (event) => { + if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "s") { + event.preventDefault(); + onSave(); + } + } }) : value.kind === "text" && isCodePath(selected) ? /* @__PURE__ */ React.createElement(CodeViewer, { value: value.content, path: selected }) : value.kind === "text" ? /* @__PURE__ */ React.createElement("pre", null, value.content) : value.kind === "image" ? /* @__PURE__ */ React.createElement("img", { src: source, alt: selected }) : value.kind === "pdf" ? /* @__PURE__ */ React.createElement("iframe", { src: source, title: selected }) : value.kind === "media" && value.mediaType.startsWith("audio/") ? /* @__PURE__ */ React.createElement("audio", { src: source, controls: true }) : value.kind === "media" ? /* @__PURE__ */ React.createElement("video", { src: source, controls: true }) : /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "该二进制文件暂不支持内嵌预览。")); } - function FilesPage({ requestedRoot }) { + function FilesPage({ requestedRoot, requestedPath }) { const desktop = useDesktopContext(); const root = requestedRoot || desktop.context?.root; - const [current, setCurrent] = useState("."); - const [listing, setListing] = useState(null); + const [childrenByPath, setChildrenByPath] = useState({}); + const [expanded, setExpanded] = useState(() => /* @__PURE__ */ new Set(["."])); + const [loadingPaths, setLoadingPaths] = useState(() => /* @__PURE__ */ new Set()); const [selected, setSelected] = useState(""); const [preview, setPreview] = useState(null); const [error, setError] = useState(""); - const load = useCallback(async (next) => { + const [menu, setMenu] = useState(null); + const [editing, setEditing] = useState(false); + const [draft, setDraft] = useState(""); + const [saving, setSaving] = useState(false); + const loadDirectory = useCallback(async (next) => { if (!root) return; + setLoadingPaths((current) => new Set(current).add(next)); try { - setListing(await bridge().workspace.list({ root, path: next })); - setCurrent(next); + const listing = await bridge().workspace.list({ root, path: next }); + setChildrenByPath((current) => ({ ...current, [next]: listing.entries || [] })); setError(""); } catch (reason) { setError(messageOf(reason)); + } finally { + setLoadingPaths((current) => { + const value = new Set(current); + value.delete(next); + return value; + }); } }, [root]); - useEffect(() => { - setCurrent("."); + const choose = useCallback(async (entry) => { + setSelected(entry.path); + setPreview(null); + setEditing(false); + setDraft(""); + setError(""); + try { + setPreview(await bridge().workspace.read({ root, path: entry.path })); + } catch (reason) { + setError(messageOf(reason)); + } + }, [root]); + const initialize = useCallback(async (target = "") => { + setChildrenByPath({}); + setExpanded(/* @__PURE__ */ new Set(["."])); setSelected(""); setPreview(null); - if (root) void load("."); - }, [root, load]); - const choose = async (entry) => { - if (entry.type === "directory") { - setSelected(""); - setPreview(null); - await load(entry.path); + setEditing(false); + setDraft(""); + setMenu(null); + if (!root) return; + const relative = target ? relativeWorkspacePath(root, target) : "."; + const parts = relative.split(/[\\/]/u).filter((part) => part && part !== "."); + const separator = pathSeparator(root); + const directories = parts.slice(0, -1).map((_, index) => parts.slice(0, index + 1).join(separator)); + const openDirectories = [".", ...directories]; + setExpanded(new Set(openDirectories)); + await Promise.all(openDirectories.map((directory) => loadDirectory(directory))); + if (parts.length > 0) await choose({ path: parts.join(separator), type: "file" }); + }, [choose, loadDirectory, root]); + useEffect(() => { + void initialize(requestedPath); + }, [initialize, requestedPath]); + useEffect(() => { + const close = () => setMenu(null); + const key = (event) => { + if (event.key === "Escape") close(); + }; + document.addEventListener("pointerdown", close); + window.addEventListener("blur", close); + window.addEventListener("resize", close); + window.addEventListener("keydown", key); + return () => { + document.removeEventListener("pointerdown", close); + window.removeEventListener("blur", close); + window.removeEventListener("resize", close); + window.removeEventListener("keydown", key); + }; + }, []); + const toggleDirectory = async (entry) => { + if (expanded.has(entry.path)) { + setExpanded((current) => { + const value = new Set(current); + value.delete(entry.path); + return value; + }); return; } + setExpanded((current) => new Set(current).add(entry.path)); + if (!childrenByPath[entry.path]) await loadDirectory(entry.path); + }; + const save = async () => { + if (!selected || preview?.kind !== "text" || saving) return; + setSaving(true); + setError(""); + try { + const result = await bridge().workspace.write({ root, path: selected, content: draft, expectedModifiedAt: preview.modifiedAt }); + setPreview((current) => ({ ...current, content: draft, size: result.size, modifiedAt: result.modifiedAt })); + setEditing(false); + await loadDirectory(parentWorkspacePath(selected)); + } catch (reason) { + setError(messageOf(reason)); + } finally { + setSaving(false); + } + }; + const editEntry = async (entry) => { setSelected(entry.path); setPreview(null); + setEditing(false); + setDraft(""); + const value = await bridge().workspace.read({ root, path: entry.path }); + if (value.kind !== "text") throw new Error("该文件不是可编辑的文本文件。 "); + setPreview(value); + setDraft(value.content); + setEditing(true); + }; + const refresh = async () => Promise.all([...expanded].map((path) => loadDirectory(path))); + const openMenu = (event, entry) => { + event.preventDefault(); + event.stopPropagation(); + setMenu({ entry, x: Math.max(8, Math.min(event.clientX, window.innerWidth - 208)), y: Math.max(8, Math.min(event.clientY, window.innerHeight - 218)) }); + }; + const menuAction = (task) => async (event) => { + event.preventDefault(); + event.stopPropagation(); + setMenu(null); setError(""); try { - setPreview(await bridge().workspace.read({ root, path: entry.path })); + await task(); } catch (reason) { setError(messageOf(reason)); } }; + const renameEntry = async (entry) => { + const name = window.prompt(`重命名${entry.type === "directory" ? "文件夹" : "文件"}`, entry.name); + if (!name?.trim() || name.trim() === entry.name) return; + const result = await bridge().workspace.rename({ root, path: entry.path, name: name.trim() }); + if (entry.type === "directory") { + await initialize(); + return; + } + await loadDirectory(parentWorkspacePath(entry.path)); + if (selected === entry.path) await choose({ ...entry, name: result.name, path: result.path }); + }; + const removeEntry = async (entry) => { + const label = entry.type === "directory" ? `空文件夹“${entry.name}”` : `文件“${entry.name}”`; + if (!window.confirm(`确定删除${label}? +此操作无法撤销。`)) return; + await bridge().workspace.remove({ root, path: entry.path }); + const separator = pathSeparator(root); + if (selected === entry.path || selected.startsWith(`${entry.path}${separator}`)) { + setSelected(""); + setPreview(null); + setEditing(false); + setDraft(""); + } + setExpanded((current) => new Set([...current].filter((item) => item !== entry.path && !item.startsWith(`${entry.path}${separator}`)))); + setChildrenByPath((current) => Object.fromEntries(Object.entries(current).filter(([item]) => item !== entry.path && !item.startsWith(`${entry.path}${separator}`)))); + await loadDirectory(parentWorkspacePath(entry.path)); + }; + const revealSelected = async () => { + try { + await bridge().workspace.reveal({ root, path: selected }); + } catch (reason) { + setError(messageOf(reason)); + } + }; + const rootName = String(root || "项目").split(/[\\/]/u).filter(Boolean).at(-1) || String(root || "项目"); if (!bridge()?.capabilities?.workspaceFiles) return /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "文件工作台仅在桌面版中可用。"); - return /* @__PURE__ */ React.createElement("div", { className: "lbs-workbench-body" }, /* @__PURE__ */ React.createElement("section", { className: "lbs-files-list" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-files-toolbar" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", disabled: current === ".", onClick: () => load(parentPath(current)) }, "←"), /* @__PURE__ */ React.createElement("span", { className: "lbs-files-path", title: `${root || ""}/${current}` }, current), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: () => load(current) }, "刷新")), error || desktop.error ? /* @__PURE__ */ React.createElement("div", { className: "lbs-wb-error" }, error || desktop.error) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-file-rows" }, listing?.entries?.map((entry) => /* @__PURE__ */ React.createElement("button", { className: "lbs-file-row", key: entry.path, "data-active": selected === entry.path, onClick: () => choose(entry) }, /* @__PURE__ */ React.createElement("span", null, entry.type === "directory" ? "▸" : "·"), /* @__PURE__ */ React.createElement("span", { className: "lbs-file-name" }, entry.name), entry.type === "file" ? /* @__PURE__ */ React.createElement("span", { className: "lbs-file-size" }, formatSize(entry.size)) : null)))), /* @__PURE__ */ React.createElement("section", { className: "lbs-preview" }, /* @__PURE__ */ React.createElement(Preview, { selected, value: preview, onReveal: () => bridge().workspace.reveal({ root, path: selected }) }))); + return /* @__PURE__ */ React.createElement("div", { className: "lbs-workbench-body" }, /* @__PURE__ */ React.createElement("section", { className: "lbs-files-list" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-files-toolbar" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-files-path", title: root }, root || "正在读取项目…"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", disabled: expanded.size <= 1, onClick: () => setExpanded(/* @__PURE__ */ new Set(["."])) }, "全部折叠"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: refresh }, "刷新")), error || desktop.error ? /* @__PURE__ */ React.createElement("div", { className: "lbs-wb-error" }, error || desktop.error) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-file-tree", role: "tree", "aria-label": "项目文件目录树" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-file-root-row" }, /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-chevron" }, "▾"), /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-icon" }, "▰"), /* @__PURE__ */ React.createElement("span", { className: "lbs-tree-name" }, rootName)), /* @__PURE__ */ React.createElement("div", { role: "group" }, (childrenByPath["."] || []).map((entry) => /* @__PURE__ */ React.createElement(FileTreeNode, { key: entry.path, entry, depth: 0, childrenByPath, expanded, loadingPaths, selected, onToggle: toggleDirectory, onSelect: choose, onContextMenu: openMenu }))))), /* @__PURE__ */ React.createElement("section", { className: "lbs-preview" }, /* @__PURE__ */ React.createElement(Preview, { selected, value: preview, editing, draft, saving, onBeginEdit: () => { + setDraft(preview?.content || ""); + setEditing(true); + }, onDraftChange: setDraft, onSave: save, onCancelEdit: () => { + setDraft(preview?.content || ""); + setEditing(false); + }, onReveal: revealSelected })), menu ? /* @__PURE__ */ React.createElement("div", { className: "lbs-file-menu", role: "menu", style: { left: menu.x, top: menu.y }, onPointerDown: (event) => event.stopPropagation(), onContextMenu: (event) => { + event.preventDefault(); + event.stopPropagation(); + } }, /* @__PURE__ */ React.createElement("button", { onClick: menuAction(() => menu.entry.type === "directory" ? toggleDirectory(menu.entry) : choose(menu.entry)) }, menu.entry.type === "directory" ? expanded.has(menu.entry.path) ? "折叠文件夹" : "展开文件夹" : "在文件管理器中打开"), menu.entry.mediaType?.startsWith("text/") || menu.entry.mediaType === "application/json" ? /* @__PURE__ */ React.createElement("button", { onClick: menuAction(() => editEntry(menu.entry)) }, "编辑文本") : null, /* @__PURE__ */ React.createElement("button", { onClick: menuAction(() => bridge().workspace.reveal({ root, path: menu.entry.path })) }, "打开所在位置"), /* @__PURE__ */ React.createElement("button", { onClick: menuAction(() => renameEntry(menu.entry)) }, "重命名…"), /* @__PURE__ */ React.createElement("div", { className: "lbs-file-menu-separator" }), /* @__PURE__ */ React.createElement("button", { className: "danger", onClick: menuAction(() => removeEntry(menu.entry)) }, menu.entry.type === "directory" ? "删除空文件夹" : "删除文件")) : null); } function GitChange({ change, side, active, busy, onSelect, onAction, actionLabel }) { const code = side === "staged" ? change.index : change.worktree; - return /* @__PURE__ */ React.createElement("div", { className: "lbs-git-change", "data-active": active, onClick: onSelect, role: "button", tabIndex: 0 }, /* @__PURE__ */ React.createElement("span", { className: "lbs-git-code" }, code === "?" ? "U" : code), /* @__PURE__ */ React.createElement("span", null, /* @__PURE__ */ React.createElement("span", { className: "lbs-git-change-name" }, change.path), change.originalPath ? /* @__PURE__ */ React.createElement("span", { className: "lbs-git-change-sub" }, "来自 ", change.originalPath) : null), /* @__PURE__ */ React.createElement("button", { className: "lbs-git-row-action", disabled: busy, onClick: (event) => { + return /* @__PURE__ */ React.createElement("div", { className: "lbs-git-change", "data-active": active, "data-status": code === "?" ? "U" : code, onClick: onSelect, onKeyDown: (event) => { + if (["Enter", " "].includes(event.key)) onSelect(); + }, role: "button", tabIndex: 0 }, /* @__PURE__ */ React.createElement("span", { className: "lbs-git-code" }, code === "?" ? "U" : code), /* @__PURE__ */ React.createElement("span", null, /* @__PURE__ */ React.createElement("span", { className: "lbs-git-change-name" }, change.path), change.originalPath ? /* @__PURE__ */ React.createElement("span", { className: "lbs-git-change-sub" }, "来自 ", change.originalPath) : null), /* @__PURE__ */ React.createElement("button", { className: "lbs-git-row-action", disabled: busy, onClick: (event) => { event.stopPropagation(); onAction(); } }, actionLabel)); @@ -229,36 +593,59 @@ ${state.root}`) && update(() => bridge().git.init({ root, branch: "main" }), "Gi const staged = state.changes.filter((change) => change.staged); const unstaged = state.changes.filter((change) => change.unstaged); const selectedTitle = selection?.kind === "commit" ? `提交 ${selection.ref.slice(0, 8)}` : selection?.path || "版本差异"; - return /* @__PURE__ */ React.createElement("div", { className: `lbs-git-layout ${busy ? "lbs-git-loading" : ""}` }, /* @__PURE__ */ React.createElement("aside", { className: "lbs-git-sidebar" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-toolbar" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: refresh }, "刷新"), /* @__PURE__ */ React.createElement("select", { value: state.branch, onChange: (event) => void switchBranch(event.target.value) }, state.branches.map((branch) => /* @__PURE__ */ React.createElement("option", { key: branch.name, value: branch.name }, branch.name))), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: createBranch }, "新分支"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button danger", onClick: deleteBranch }, "删分支"), /* @__PURE__ */ React.createElement("span", { className: "lbs-git-toolbar-spacer" }), state.upstream ? /* @__PURE__ */ React.createElement("span", { className: "lbs-git-badge" }, "↑", state.ahead, " ↓", state.behind) : null), error || desktop.error ? /* @__PURE__ */ React.createElement("div", { className: "lbs-wb-error" }, error || desktop.error) : notice ? /* @__PURE__ */ React.createElement("div", { className: "lbs-wb-ok" }, notice) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-scroll" }, /* @__PURE__ */ React.createElement("section", { className: "lbs-git-section" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-section-head" }, "已暂存 ", /* @__PURE__ */ React.createElement("span", null, staged.length)), staged.map((change) => /* @__PURE__ */ React.createElement(GitChange, { key: `s:${change.path}`, change, side: "staged", active: selection?.side === "staged" && selection.path === change.path, busy, onSelect: () => showChange(change, "staged"), onAction: () => unstage(change), actionLabel: "取消暂存" }))), /* @__PURE__ */ React.createElement("section", { className: "lbs-git-section" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-section-head" }, "工作区变更 ", /* @__PURE__ */ React.createElement("span", null, unstaged.length)), unstaged.map((change) => /* @__PURE__ */ React.createElement(GitChange, { key: `w:${change.path}`, change, side: change.untracked ? "untracked" : "unstaged", active: selection?.side !== "staged" && selection?.path === change.path, busy, onSelect: () => showChange(change, change.untracked ? "untracked" : "unstaged"), onAction: () => stage(change), actionLabel: "暂存" })), unstaged.filter((change) => !change.untracked).map((change) => /* @__PURE__ */ React.createElement("button", { key: `r:${change.path}`, className: "lbs-wb-button danger", onClick: () => restore(change) }, "放弃 ", change.path, " 的修改"))), /* @__PURE__ */ React.createElement("section", { className: "lbs-git-section" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-section-head" }, "提交历史 ", /* @__PURE__ */ React.createElement("span", null, state.commits.length)), state.commits.map((commit2) => /* @__PURE__ */ React.createElement("button", { className: "lbs-git-history", "data-active": selection?.ref === commit2.hash, key: commit2.hash, onClick: () => showCommit(commit2) }, /* @__PURE__ */ React.createElement("strong", null, commit2.subject), /* @__PURE__ */ React.createElement("small", null, commit2.shortHash, " · ", commit2.author, " · ", new Date(commit2.date).toLocaleString("zh-CN")))))), /* @__PURE__ */ React.createElement("div", { className: "lbs-git-commit-box" }, /* @__PURE__ */ React.createElement("textarea", { value: message, onChange: (event) => setMessage(event.target.value), placeholder: "描述这次本地版本…" }), /* @__PURE__ */ React.createElement("div", { className: "lbs-git-commit-actions" }, /* @__PURE__ */ React.createElement("span", null, staged.length, " 个已暂存文件"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button primary", disabled: !message.trim() || staged.length === 0 || busy, onClick: commit }, "提交版本")))), /* @__PURE__ */ React.createElement("main", { className: "lbs-git-main" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-diff-head" }, /* @__PURE__ */ React.createElement("strong", null, selectedTitle), /* @__PURE__ */ React.createElement("span", null, state.root), /* @__PURE__ */ React.createElement("span", { className: "lbs-git-toolbar-spacer" }), state.remotes.length ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: () => sync("fetch") }, "获取"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: () => sync("pull") }, "拉取"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button primary", onClick: () => sync("push") }, "发布")) : /* @__PURE__ */ React.createElement("span", null, "未配置远端")), /* @__PURE__ */ React.createElement("pre", { className: "lbs-git-diff" }, diff || "选择一个变更或提交查看 Diff。"))); + return /* @__PURE__ */ React.createElement("div", { className: `lbs-git-layout ${busy ? "lbs-git-loading" : ""}` }, /* @__PURE__ */ React.createElement("aside", { className: "lbs-git-sidebar" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-toolbar" }, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: refresh }, "刷新"), /* @__PURE__ */ React.createElement("select", { value: state.branch, onChange: (event) => void switchBranch(event.target.value) }, state.branches.map((branch) => /* @__PURE__ */ React.createElement("option", { key: branch.name, value: branch.name }, branch.name))), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: createBranch }, "新分支"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button danger", onClick: deleteBranch }, "删分支"), /* @__PURE__ */ React.createElement("span", { className: "lbs-git-toolbar-spacer" }), state.upstream ? /* @__PURE__ */ React.createElement("span", { className: "lbs-git-badge" }, "↑", state.ahead, " ↓", state.behind) : null), error || desktop.error ? /* @__PURE__ */ React.createElement("div", { className: "lbs-wb-error" }, error || desktop.error) : notice ? /* @__PURE__ */ React.createElement("div", { className: "lbs-wb-ok" }, notice) : null, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-scroll" }, /* @__PURE__ */ React.createElement("section", { className: "lbs-git-section" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-section-head" }, "已暂存 ", /* @__PURE__ */ React.createElement("span", null, staged.length)), staged.map((change) => /* @__PURE__ */ React.createElement(GitChange, { key: `s:${change.path}`, change, side: "staged", active: selection?.side === "staged" && selection.path === change.path, busy, onSelect: () => showChange(change, "staged"), onAction: () => unstage(change), actionLabel: "取消暂存" }))), /* @__PURE__ */ React.createElement("section", { className: "lbs-git-section" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-section-head" }, "工作区变更 ", /* @__PURE__ */ React.createElement("span", null, unstaged.length)), unstaged.map((change) => /* @__PURE__ */ React.createElement(GitChange, { key: `w:${change.path}`, change, side: change.untracked ? "untracked" : "unstaged", active: selection?.side !== "staged" && selection?.path === change.path, busy, onSelect: () => showChange(change, change.untracked ? "untracked" : "unstaged"), onAction: () => stage(change), actionLabel: "暂存" })), unstaged.filter((change) => !change.untracked).map((change) => /* @__PURE__ */ React.createElement("button", { key: `r:${change.path}`, className: "lbs-wb-button danger", onClick: () => restore(change) }, "放弃 ", change.path, " 的修改"))), /* @__PURE__ */ React.createElement("section", { className: "lbs-git-section" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-section-head" }, "提交历史 ", /* @__PURE__ */ React.createElement("span", null, state.commits.length)), state.commits.map((commit2) => /* @__PURE__ */ React.createElement("button", { className: "lbs-git-history", "data-active": selection?.ref === commit2.hash, key: commit2.hash, onClick: () => showCommit(commit2) }, /* @__PURE__ */ React.createElement("strong", null, commit2.subject), /* @__PURE__ */ React.createElement("small", null, commit2.shortHash, " · ", commit2.author, " · ", new Date(commit2.date).toLocaleString("zh-CN")))))), /* @__PURE__ */ React.createElement("div", { className: "lbs-git-commit-box" }, /* @__PURE__ */ React.createElement("textarea", { value: message, onChange: (event) => setMessage(event.target.value), placeholder: "描述这次本地版本…" }), /* @__PURE__ */ React.createElement("div", { className: "lbs-git-commit-actions" }, /* @__PURE__ */ React.createElement("span", null, staged.length, " 个已暂存文件"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button primary", disabled: !message.trim() || staged.length === 0 || busy, onClick: commit }, "提交版本")))), /* @__PURE__ */ React.createElement("main", { className: "lbs-git-main" }, /* @__PURE__ */ React.createElement("div", { className: "lbs-git-diff-head" }, /* @__PURE__ */ React.createElement("strong", null, selectedTitle), /* @__PURE__ */ React.createElement("span", null, state.root), /* @__PURE__ */ React.createElement("span", { className: "lbs-git-toolbar-spacer" }), state.remotes.length ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: () => sync("fetch") }, "获取"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button", onClick: () => sync("pull") }, "拉取"), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button primary", onClick: () => sync("push") }, "发布")) : /* @__PURE__ */ React.createElement("span", null, "未配置远端")), diff ? /* @__PURE__ */ React.createElement(DiffViewer, { value: diff, path: selection?.path || "" }) : /* @__PURE__ */ React.createElement("div", { className: "lbs-preview-empty" }, "选择一个变更或提交查看 Diff。"))); } function WorkspaceWorkbench() { const [page, setPage] = useState(""); const [root, setRoot] = useState(""); + const [requestedPath, setRequestedPath] = useState(""); useEffect(() => { const open = (event) => { const tool = event.detail?.tool; if (tool === "close") { setPage(""); + setRequestedPath(""); return; } if (!["files", "git"].includes(tool)) return; setRoot(event.detail?.cwd || ""); + setRequestedPath(tool === "files" ? event.detail?.path || "" : ""); setPage(tool); }; window.addEventListener("laobos:open-desktop-tool", open); return () => window.removeEventListener("laobos:open-desktop-tool", open); }, []); + useEffect(() => { + const interceptProducedFile = (event) => { + if (!(event.target instanceof Element)) return; + const target = event.target.closest("[data-produced-files-row] button[title], [data-chat-flow] [aria-label][title]"); + if (!target) return; + const produced = target.closest("[data-produced-files-row]"); + const label = target.getAttribute("aria-label") || ""; + if (!produced && !/^(?:打开|Open)\s/u.test(label)) return; + const path = target.getAttribute("title"); + if (!path) return; + event.preventDefault(); + event.stopPropagation(); + event.stopImmediatePropagation(); + void openProducedFile(path); + }; + document.addEventListener("click", interceptProducedFile, true); + return () => document.removeEventListener("click", interceptProducedFile, true); + }, []); const close = () => { const closing = page; setPage(""); + setRequestedPath(""); window.dispatchEvent(new CustomEvent("laobos:desktop-tool-closed", { detail: { tool: closing } })); }; if (!page) return null; const title = page === "files" ? "文件管理器" : "版本中心"; - return /* @__PURE__ */ React.createElement("section", { className: "lbs-workbench", role: "dialog", "aria-label": title }, /* @__PURE__ */ React.createElement("header", { className: "lbs-workbench-header" }, /* @__PURE__ */ React.createElement("strong", null, title), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button lbs-workbench-close", onClick: close }, "关闭")), page === "files" ? /* @__PURE__ */ React.createElement(FilesPage, { requestedRoot: root }) : /* @__PURE__ */ React.createElement(GitPage, { requestedRoot: root })); + return /* @__PURE__ */ React.createElement("section", { className: "lbs-workbench", role: "dialog", "aria-label": title }, /* @__PURE__ */ React.createElement("header", { className: "lbs-workbench-header" }, /* @__PURE__ */ React.createElement("strong", null, title), /* @__PURE__ */ React.createElement("button", { className: "lbs-wb-button lbs-workbench-close", onClick: close }, "关闭")), page === "files" ? /* @__PURE__ */ React.createElement(FilesPage, { requestedRoot: root, requestedPath }) : /* @__PURE__ */ React.createElement(GitPage, { requestedRoot: root })); } - const inject = ["slots"]; + const inject = ["slots", "sessions", "workspaces"]; function apply(ctx) { + module.ctx = ctx; ctx.slots.inject("shell.overlay", () => ctx.slots.register({ name: "shell.overlay", id: "laobos-desktop-workbench", order: 35 }, WorkspaceWorkbench)); } exports.apply = apply; diff --git a/packages/laobos-workspace-tools/src/client.jsx b/packages/laobos-workspace-tools/src/client.jsx index f8de9e6..daf7a2d 100644 --- a/packages/laobos-workspace-tools/src/client.jsx +++ b/packages/laobos-workspace-tools/src/client.jsx @@ -1,4 +1,5 @@ /* eslint-disable @next/next/no-assign-module-variable, @next/next/no-img-element -- DSH module factory and local previews */ +import { codeLines, isCodePath, languageForPath, parseUnifiedDiff, tokenizeCodeLine } from "./code-renderer.mjs"; window.__ModuleLoader__.load({ id: "@laobos/dsh-workspace-tools", factory: (require) => { @@ -9,9 +10,15 @@ window.__ModuleLoader__.load({ const { useCallback, useEffect, useMemo, useState } = React; const css = ` - .lbs-workbench{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483030}.lbs-workbench-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:8px;height:56px;padding:0 18px}.lbs-workbench-header strong{font-size:15px}.lbs-workbench-close{margin-left:auto}.lbs-workbench-body{display:flex;flex:1;min-height:0}.lbs-files-list{border-right:1px solid var(--dsw-alias-border-l1);box-sizing:border-box;display:flex;flex-direction:column;min-width:250px;width:34%}.lbs-files-toolbar,.lbs-git-toolbar{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;min-height:43px;padding:0 10px}.lbs-files-path{color:var(--dsw-alias-label-secondary);flex:1;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-rows{flex:1;overflow:auto;padding:5px}.lbs-file-row{align-items:center;appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;display:flex;font:inherit;font-size:12px;gap:7px;height:29px;padding:0 8px;text-align:left;width:100%}.lbs-file-row:hover,.lbs-file-row[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-size{color:var(--dsw-alias-label-tertiary);font-size:10px}.lbs-preview{box-sizing:border-box;flex:1;min-width:0;overflow:auto;padding:16px}.lbs-preview-empty{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;height:100%;justify-content:center;text-align:center}.lbs-preview-title{align-items:center;display:flex;gap:8px;margin-bottom:12px}.lbs-preview-title strong{font-size:14px}.lbs-preview-title .lbs-wb-button{margin-left:auto}.lbs-preview pre,.lbs-git-diff{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:9px;box-sizing:border-box;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;overflow:auto;padding:12px;tab-size:2;white-space:pre}.lbs-preview img,.lbs-preview video{display:block;height:auto;margin:auto;max-height:calc(100vh - 130px);max-width:100%}.lbs-preview iframe{border:1px solid var(--dsw-alias-border-l1);height:calc(100vh - 115px);width:100%}.lbs-preview audio{margin:40px auto;max-width:620px;width:100%} + .lbs-workbench{background:var(--dsw-alias-bg-base);bottom:0;color:var(--dsw-alias-label-primary);display:flex;flex-direction:column;left:var(--lbs-left-column,280px);pointer-events:auto;position:fixed;right:var(--lbs-right-column,56px);top:0;z-index:2147483030}.lbs-workbench-header{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;flex:none;gap:8px;height:56px;padding:0 18px}.lbs-workbench-header strong{font-size:15px}.lbs-workbench-close{margin-left:auto}.lbs-workbench-body{display:flex;flex:1;min-height:0}.lbs-files-list{border-right:1px solid var(--dsw-alias-border-l1);box-sizing:border-box;display:flex;flex-direction:column;min-width:250px;width:34%}.lbs-files-toolbar,.lbs-git-toolbar{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:6px;min-height:43px;padding:0 10px}.lbs-files-path{color:var(--dsw-alias-label-secondary);flex:1;font:11px ui-monospace,SFMono-Regular,Menlo,monospace;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-rows{flex:1;overflow:auto;padding:5px}.lbs-file-row{align-items:center;appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;display:flex;font:inherit;font-size:12px;gap:7px;height:29px;padding:0 8px;text-align:left;width:100%}.lbs-file-row:hover,.lbs-file-row[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-file-name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-file-size{color:var(--dsw-alias-label-tertiary);font-size:10px}.lbs-preview{box-sizing:border-box;flex:1;min-width:0;overflow:auto;padding:16px}.lbs-preview-empty{align-items:center;color:var(--dsw-alias-label-tertiary);display:flex;height:100%;justify-content:center;text-align:center}.lbs-preview-title{align-items:center;display:flex;gap:8px;margin-bottom:12px}.lbs-preview-title strong{font-size:14px}.lbs-preview-actions{align-items:center;display:flex;gap:5px;margin-left:auto}.lbs-preview pre,.lbs-git-diff{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:9px;box-sizing:border-box;font:12px/1.6 ui-monospace,SFMono-Regular,Menlo,monospace;margin:0;overflow:auto;padding:12px;tab-size:2;white-space:pre}.lbs-preview img,.lbs-preview video{display:block;height:auto;margin:auto;max-height:calc(100vh - 130px);max-width:100%}.lbs-preview iframe{border:1px solid var(--dsw-alias-border-l1);height:calc(100vh - 115px);width:100%}.lbs-preview audio{margin:40px auto;max-width:620px;width:100%}.lbs-preview-editor{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2);border-radius:9px;box-sizing:border-box;color:var(--dsw-alias-label-primary);font:12px/1.58 ui-monospace,SFMono-Regular,Menlo,monospace;height:calc(100vh - 145px);min-height:280px;outline:none;padding:12px;resize:none;tab-size:2;width:100%}.lbs-preview-editor:focus{border-color:var(--dsw-alias-border-l3);box-shadow:0 0 0 2px color-mix(in srgb,var(--dsw-alias-brand-primary) 16%,transparent)} .lbs-wb-button{appearance:none;background:transparent;border:0;border-radius:7px;color:inherit;cursor:pointer;font:inherit;font-size:11px;min-height:31px;padding:0 9px}.lbs-wb-button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-wb-button.primary{background:var(--dsw-alias-interactive-bg-primary);color:var(--dsw-alias-label-on-primary)}.lbs-wb-button.danger{color:#d94b4b}.lbs-wb-button:disabled{cursor:not-allowed;opacity:.38}.lbs-wb-error{background:rgba(218,70,70,.1);border-radius:8px;color:#d94b4b;font-size:11px;line-height:1.5;margin:8px;padding:9px}.lbs-wb-ok{background:rgba(52,163,105,.1);border-radius:8px;color:#38a76f;font-size:11px;margin:8px;padding:9px} .lbs-git-layout{display:grid;flex:1;grid-template-columns:minmax(310px,37%) minmax(0,1fr);min-height:0}.lbs-git-sidebar{border-right:1px solid var(--dsw-alias-border-l1);display:flex;flex-direction:column;min-height:0}.lbs-git-toolbar{flex-wrap:wrap}.lbs-git-toolbar select,.lbs-git-commit-box textarea{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:6px;color:inherit;font:inherit}.lbs-git-toolbar select{font-size:11px;height:29px;max-width:150px;padding:0 7px}.lbs-git-toolbar-spacer{flex:1}.lbs-git-scroll{flex:1;min-height:0;overflow:auto;padding:7px 9px}.lbs-git-section{margin-bottom:15px}.lbs-git-section-head{align-items:center;color:var(--dsw-alias-label-secondary);display:flex;font-size:10px;font-weight:600;height:27px;letter-spacing:.03em;padding:0 5px;text-transform:uppercase}.lbs-git-section-head span{margin-left:auto}.lbs-git-change,.lbs-git-history{align-items:center;appearance:none;background:transparent;border:0;border-radius:6px;color:inherit;cursor:pointer;display:grid;font:inherit;text-align:left;width:100%}.lbs-git-change{grid-template-columns:28px minmax(0,1fr) auto;min-height:34px;padding:4px 5px}.lbs-git-change:hover,.lbs-git-change[data-active=true],.lbs-git-history:hover,.lbs-git-history[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-git-code{font:10px ui-monospace,SFMono-Regular,Menlo,monospace}.lbs-git-change-name,.lbs-git-history strong{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-git-change-sub,.lbs-git-history small{color:var(--dsw-alias-label-tertiary);display:block;font-size:9px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-git-row-action{appearance:none;background:transparent;border:0;border-radius:5px;color:var(--dsw-alias-label-secondary);cursor:pointer;font-size:9px;height:25px;opacity:.2;padding:0 6px}.lbs-git-change:hover .lbs-git-row-action,.lbs-git-row-action:focus-visible{opacity:1}.lbs-git-history{display:block;padding:6px}.lbs-git-commit-box{border-top:1px solid var(--dsw-alias-border-l1);display:grid;gap:7px;padding:9px}.lbs-git-commit-box textarea{box-sizing:border-box;font-size:11px;line-height:1.45;min-height:58px;padding:7px;resize:vertical;width:100%}.lbs-git-commit-actions{align-items:center;display:flex;gap:6px}.lbs-git-commit-actions span{color:var(--dsw-alias-label-tertiary);font-size:9px;margin-right:auto}.lbs-git-main{display:flex;flex-direction:column;min-width:0}.lbs-git-diff-head{align-items:center;border-bottom:1px solid var(--dsw-alias-border-l1);display:flex;gap:8px;min-height:43px;padding:0 13px}.lbs-git-diff-head strong{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-git-diff-head span{color:var(--dsw-alias-label-tertiary);font-size:9px}.lbs-git-diff{border:0;border-radius:0;flex:1;min-height:0}.lbs-git-onboarding{align-content:center;display:grid;gap:12px;height:100%;justify-items:center;padding:30px;text-align:center}.lbs-git-onboarding strong{font-size:16px}.lbs-git-onboarding p{color:var(--dsw-alias-label-secondary);font-size:12px;line-height:1.6;margin:0;max-width:480px}.lbs-git-badge{background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:4px;color:var(--dsw-alias-label-secondary);font-size:9px;padding:2px 5px}.lbs-git-loading{opacity:.58;pointer-events:none} + .lbs-files-list{min-width:280px;width:32%}.lbs-files-toolbar{min-height:46px}.lbs-file-tree{flex:1;overflow:auto;padding:6px 5px 14px}.lbs-file-root-row,.lbs-tree-row{align-items:center;border-radius:6px;box-sizing:border-box;display:flex;min-width:max-content;width:100%}.lbs-file-root-row{color:var(--dsw-alias-label-secondary);font-size:11px;font-weight:600;height:31px;padding:0 8px}.lbs-tree-row{height:29px;padding-right:7px}.lbs-tree-row:hover,.lbs-tree-row[data-active=true]{background:var(--dsw-alias-interactive-bg-hover)}.lbs-tree-toggle,.lbs-tree-file{align-items:center;appearance:none;background:transparent;border:0;color:inherit;cursor:pointer;display:flex;font:inherit;height:100%;min-width:0;padding:0;text-align:left}.lbs-tree-toggle{flex:1}.lbs-tree-chevron{color:var(--dsw-alias-label-tertiary);display:inline-flex;flex:none;font-size:10px;justify-content:center;width:18px}.lbs-tree-icon{align-items:center;color:var(--dsw-alias-label-secondary);display:inline-flex;flex:none;font:10px/1 ui-monospace,SFMono-Regular,Menlo,monospace;height:18px;justify-content:center;margin-right:5px;width:18px}.lbs-tree-row[data-type=directory] .lbs-tree-icon{color:#d6a84b;font-size:15px}.lbs-tree-row[data-code=true] .lbs-tree-icon{color:#6f8cff}.lbs-tree-name{font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lbs-tree-file{flex:1}.lbs-tree-size{color:var(--dsw-alias-label-tertiary);font-size:9px;margin-left:10px}.lbs-tree-loading{animation:lbs-tree-spin .8s linear infinite;display:inline-block}@keyframes lbs-tree-spin{to{transform:rotate(360deg)}} + .lbs-file-menu{background:var(--dsw-alias-bg-layer-2);border:1px solid var(--dsw-alias-border-l2);border-radius:9px;box-shadow:var(--dsw-shadow-lv3);display:grid;min-width:190px;padding:5px;position:fixed;z-index:2147483200}.lbs-file-menu button{appearance:none;background:transparent;border:0;border-radius:6px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;font-size:11px;height:30px;padding:0 9px;text-align:left}.lbs-file-menu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-file-menu button.danger{color:var(--dsw-alias-state-error-primary,#d94b4b)}.lbs-file-menu-separator{border-top:1px solid var(--dsw-alias-border-l1);margin:4px 3px} + .lbs-workbench{--lbs-code-keyword:#cf222e;--lbs-code-string:#0a3069;--lbs-code-number:#0550ae;--lbs-code-comment:#6e7781;--lbs-code-type:#953800;--lbs-code-function:#8250df;--lbs-diff-add:#1a7f37;--lbs-diff-delete:#cf222e;--lbs-diff-hunk:#0969da;--lbs-diff-file:#8250df;--lbs-diff-insert-bg:rgba(46,160,67,.1);--lbs-diff-insert-gutter:rgba(46,160,67,.16);--lbs-diff-delete-bg:rgba(248,81,73,.1);--lbs-diff-delete-gutter:rgba(248,81,73,.16);--lbs-diff-hunk-bg:rgba(9,105,218,.08)}body[data-ds-dark-theme] .lbs-workbench{--lbs-code-keyword:#ff7b72;--lbs-code-string:#a5d6ff;--lbs-code-number:#79c0ff;--lbs-code-comment:#8b949e;--lbs-code-type:#ffa657;--lbs-code-function:#d2a8ff;--lbs-diff-add:#56d364;--lbs-diff-delete:#ff7b72;--lbs-diff-hunk:#79c0ff;--lbs-diff-file:#d2a8ff;--lbs-diff-insert-bg:rgba(46,160,67,.17);--lbs-diff-insert-gutter:rgba(46,160,67,.24);--lbs-diff-delete-bg:rgba(248,81,73,.16);--lbs-diff-delete-gutter:rgba(248,81,73,.23);--lbs-diff-hunk-bg:rgba(56,139,253,.13)} + .lbs-code-viewer{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border:1px solid var(--dsw-alias-border-l2);border-radius:9px;color:var(--dsw-alias-label-primary);min-width:max-content;overflow:auto}.lbs-code-language{align-items:center;background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));border-bottom:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-tertiary);display:flex;font:10px/28px ui-monospace,SFMono-Regular,Menlo,monospace;height:28px;justify-content:space-between;padding:0 10px;position:sticky;left:0}.lbs-code-row{display:grid;font:12px/1.58 ui-monospace,SFMono-Regular,Menlo,monospace;grid-template-columns:52px minmax(max-content,1fr);min-height:19px}.lbs-code-row:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-code-line-number{border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));padding:0 10px;text-align:right;user-select:none}.lbs-code-line{padding:0 12px;white-space:pre}.lbs-code-truncated{background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-tertiary);font-size:11px;padding:8px 12px;position:sticky;left:0}.lbs-token-keyword{color:var(--lbs-code-keyword)}.lbs-token-string{color:var(--lbs-code-string)}.lbs-token-number{color:var(--lbs-code-number)}.lbs-token-comment{color:var(--lbs-code-comment);font-style:italic}.lbs-token-type{color:var(--lbs-code-type)}.lbs-token-function{color:var(--lbs-code-function)} + .lbs-diff-viewer{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));color:var(--dsw-alias-label-primary);display:flex;flex:1;flex-direction:column;min-height:0}.lbs-diff-summary{align-items:center;background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));border-bottom:1px solid var(--dsw-alias-border-l2);display:flex;flex:none;gap:10px;height:34px;padding:0 10px}.lbs-diff-summary span{font:10px ui-monospace,SFMono-Regular,Menlo,monospace}.lbs-diff-additions{color:var(--lbs-diff-add)}.lbs-diff-deletions{color:var(--lbs-diff-delete)}.lbs-diff-summary button{background:transparent;border:1px solid var(--dsw-alias-border-l2);border-radius:5px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;font-size:10px;line-height:23px;margin-left:auto;padding:0 8px}.lbs-diff-summary button:hover{background:var(--dsw-alias-interactive-bg-hover)}.lbs-diff-scroll{flex:1;min-height:0;overflow:auto}.lbs-diff-table{border-collapse:collapse;font:12px/1.55 ui-monospace,SFMono-Regular,Menlo,monospace;min-width:100%;table-layout:auto}.lbs-diff-row td{height:20px;padding:0}.lbs-diff-gutter{background:var(--dsw-alias-markdown-code-block,var(--dsw-alias-bg-layer-1));border-right:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-caption,var(--dsw-alias-label-tertiary));min-width:43px;padding:0 8px!important;text-align:right;user-select:none;width:43px}.lbs-diff-prefix{color:var(--dsw-alias-label-tertiary);text-align:center;user-select:none;width:24px}.lbs-diff-code{padding-right:14px!important;white-space:pre}.lbs-diff-viewer[data-wrap=true] .lbs-diff-code{overflow-wrap:anywhere;white-space:pre-wrap}.lbs-diff-row[data-type=insert]{background:var(--lbs-diff-insert-bg)}.lbs-diff-row[data-type=insert] .lbs-diff-gutter{background:var(--lbs-diff-insert-gutter);color:var(--lbs-diff-add)}.lbs-diff-row[data-type=insert] .lbs-diff-prefix{color:var(--lbs-diff-add)}.lbs-diff-row[data-type=delete]{background:var(--lbs-diff-delete-bg)}.lbs-diff-row[data-type=delete] .lbs-diff-gutter{background:var(--lbs-diff-delete-gutter);color:var(--lbs-diff-delete)}.lbs-diff-row[data-type=delete] .lbs-diff-prefix{color:var(--lbs-diff-delete)}.lbs-diff-row[data-type=hunk]{background:var(--lbs-diff-hunk-bg);color:var(--lbs-diff-hunk)}.lbs-diff-row[data-type=file]{background:var(--dsw-alias-markdown-code-block-banner,var(--dsw-alias-bg-layer-2));color:var(--lbs-diff-file);font-weight:600}.lbs-diff-row[data-type=meta],.lbs-diff-row[data-type=notice]{color:var(--dsw-alias-label-tertiary)}.lbs-diff-row[data-type=hunk] .lbs-diff-code,.lbs-diff-row[data-type=file] .lbs-diff-code,.lbs-diff-row[data-type=meta] .lbs-diff-code,.lbs-diff-row[data-type=notice] .lbs-diff-code{padding:2px 12px!important}.lbs-diff-row:hover{box-shadow:inset 0 0 0 9999px color-mix(in srgb,var(--dsw-alias-label-primary) 3%,transparent)} + .lbs-git-change[data-status=A] .lbs-git-code,.lbs-git-change[data-status=U] .lbs-git-code{color:#2a9b67}.lbs-git-change[data-status=M] .lbs-git-code{color:#6f8cff}.lbs-git-change[data-status=D] .lbs-git-code{color:#d94b4b}.lbs-git-change[data-status=R] .lbs-git-code{color:#a675d1} @media(max-width:850px){.lbs-workbench{left:0;right:0}.lbs-workbench-body,.lbs-git-layout{display:flex;flex-direction:column}.lbs-files-list,.lbs-git-sidebar{border-bottom:1px solid var(--dsw-alias-border-l1);border-right:0;max-height:46vh;width:100%}.lbs-git-main{min-height:42vh}} `; if (typeof document !== "undefined" && !document.querySelector('style[data-plugin-css="@laobos/dsh-workspace-tools"]')) { @@ -27,7 +34,46 @@ window.__ModuleLoader__.load({ return text.replace(/^Error invoking remote method '[^']+': Error:\s*/u, ""); }; const formatSize = (value) => value < 1024 ? `${value} B` : value < 1024 ** 2 ? `${(value / 1024).toFixed(1)} KB` : `${(value / 1024 ** 2).toFixed(1)} MB`; - const parentPath = (value) => { const parts = String(value || ".").split("/").filter((part) => part && part !== "."); parts.pop(); return parts.join("/") || "."; }; + const absolutePathPattern = /^(?:\/|[a-zA-Z]:[\\/]|\\\\)/u; + const pathSeparator = (root) => String(root || "").includes("\\") ? "\\" : "/"; + const absoluteWorkspacePath = (root, target) => { + const value = String(target || "."); + if (!root || absolutePathPattern.test(value)) return value; + if (value === ".") return root; + const separator = pathSeparator(root); + return `${String(root).replace(/[\\/]+$/u, "")}${separator}${value.replace(/^[.][\\/]/u, "")}`; + }; + const relativeWorkspacePath = (root, target) => { + const value = String(target || "."); + if (!root) return value; + if (!absolutePathPattern.test(value)) return value.replace(/^[.][\\/]/u, "") || "."; + const windows = pathSeparator(root) === "\\"; + const normalizedRoot = String(root || "").replaceAll("\\", "/").replace(/\/+$/u, ""); + const normalizedTarget = value.replaceAll("\\", "/"); + const comparableRoot = windows ? normalizedRoot.toLowerCase() : normalizedRoot; + const comparableTarget = windows ? normalizedTarget.toLowerCase() : normalizedTarget; + if (comparableTarget === comparableRoot) return "."; + if (comparableTarget.startsWith(`${comparableRoot}/`)) return normalizedTarget.slice(normalizedRoot.length + 1).replaceAll("/", pathSeparator(root)); + return value; + }; + const parentWorkspacePath = (value) => { + const parts = String(value || ".").split(/[\\/]/u).filter(Boolean); + return parts.length <= 1 ? "." : parts.slice(0, -1).join(String(value).includes("\\") ? "\\" : "/"); + }; + + async function openProducedFile(path) { + const sessions = module.ctx?.sessions?.list?.getSnapshot?.(); + const cwd = sessions?.current ? sessions.byId?.[sessions.current]?.cwd : undefined; + const target = absoluteWorkspacePath(cwd, path); + try { + if (!module.ctx?.workspaces?.openPath) throw new Error("系统文件打开器不可用"); + await module.ctx.workspaces.openPath(target); + } catch { + window.dispatchEvent(new CustomEvent("laobos:open-desktop-tool", { + detail: { tool: "files", cwd, path, source: "file-open-fallback" }, + })); + } + } function useDesktopContext() { const [context, setContext] = useState(null); @@ -40,7 +86,80 @@ window.__ModuleLoader__.load({ return { context, error }; } - function Preview({ selected, value, onReveal }) { + function CodeTokens({ value, language }) { + return tokenizeCodeLine(value, language).map((token, index) => {token.value}); + } + + function CodeViewer({ value, path }) { + const language = languageForPath(path); + const lines = useMemo(() => codeLines(value), [value]); + const visibleLines = lines.slice(0, 6_000); + return
+
{language}{lines.length} 行
+ {visibleLines.map((line, index) =>
+ {index + 1} + +
)} + {lines.length > visibleLines.length ?
文件较大,仅渲染前 {visibleLines.length} 行;可在系统编辑器中查看完整内容。
: null} +
; + } + + function DiffViewer({ value, path }) { + const [wrap, setWrap] = useState(false); + const model = useMemo(() => parseUnifiedDiff(value, path), [value, path]); + const visibleLines = model.lines.slice(0, 12_000); + return
+
+ +{model.additions} 添加 + −{model.deletions} 删除 + {model.lines.length} 行 + +
+
+ + {visibleLines.map((line) => { + const codeLine = ["insert", "delete", "normal"].includes(line.type); + const language = languageForPath(line.path || path); + return + + + {codeLine ? <> + : } + ; + })} +
{line.oldLine ?? ""}{line.newLine ?? ""}{line.prefix}{line.content}
+ {model.lines.length > visibleLines.length ?
Diff 较大,仅渲染前 {visibleLines.length} 行。
: null} +
+
; + } + + function fileGlyph(entry) { + if (entry.type === "directory") return "▰"; + if (isCodePath(entry.path)) return "{}"; + const extension = entry.name.split(".").at(-1)?.toLowerCase(); + if (["png", "jpg", "jpeg", "gif", "webp", "svg"].includes(extension)) return "▧"; + return "·"; + } + + function FileTreeNode({ entry, depth, childrenByPath, expanded, loadingPaths, selected, onToggle, onSelect, onContextMenu }) { + const isDirectory = entry.type === "directory"; + const isExpanded = isDirectory && expanded.has(entry.path); + const children = childrenByPath[entry.path] || []; + return
+
onContextMenu(event, entry)} style={{ paddingLeft: 8 + depth * 16 }}> + {isDirectory ? : } + {!isDirectory ? {formatSize(entry.size)} : null} +
+ {isExpanded ?
{children.map((child) => )}
: null} +
; + } + + function Preview({ selected, value, editing, draft, saving, onBeginEdit, onDraftChange, onSave, onCancelEdit, onReveal }) { const source = useMemo(() => { if (!value?.base64) return ""; const binary = atob(value.base64); const bytes = new Uint8Array(binary.length); @@ -50,8 +169,13 @@ window.__ModuleLoader__.load({ useEffect(() => () => { if (source) URL.revokeObjectURL(source); }, [source]); if (!selected) return
选择文件以预览
; return
-
{selected}{value ? {formatSize(value.size)} : null}
+
{selected}{value ? {formatSize(value.size)} : null}
+ {value?.kind === "text" ? editing ? <> : : null} + +
{!value ?
正在读取…
+ : value.kind === "text" && editing ?