@tanweilabs/daiti 0.0.12 → 0.0.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,14 +2,14 @@
2
2
 
3
3
  在你的电脑上运行,通过网页或微信使用的个人助理。基于 DeepSeek Harness 和 DSH-IM,通过独立插件提供单主会话、助理设置和首次使用流程。
4
4
 
5
- **0.0.12 为开发者预览版。** 本包不包含个人记忆、历史会话、密钥或 IM 登录数据。
5
+ **0.0.14 为开发者预览版。** 本包不包含个人记忆、历史会话、密钥或 IM 登录数据。
6
6
 
7
7
  ## 安装
8
8
 
9
9
  需要 Node.js `^22.19.0` 或 `>=24.0.0`:
10
10
 
11
11
  ```sh
12
- npm install -g @tanweilabs/daiti@0.0.12
12
+ npm install -g @tanweilabs/daiti@0.0.14
13
13
  daiti start
14
14
  ```
15
15
 
@@ -56,6 +56,8 @@ node bin/daiti.mjs start --port 3086 --no-open
56
56
 
57
57
  运行目录与工作文件夹不是同一个概念。备份需包含两者。当前不提供已有主会话的工作目录迁移;不要手工改写会话日志或 IM 绑定文件。工作目录不是操作系统权限沙箱,工具权限仍由 Harness 的权限设置控制。
58
58
 
59
+ 使用 DeepSeek 模型时,请求仍会发送对话所需的上下文;代体关闭了上游默认附加的完整 Session 事件增量与插件包清单字段。
60
+
59
61
  可以通过 `DAITI_HOME` 启动独立测试实例:
60
62
 
61
63
  ```sh
@@ -73,11 +75,13 @@ PowerShell 对应设置 `$env:DAITI_HOME = "$HOME\.daiti-preview"`。测试时
73
75
 
74
76
  适配包固定 DSH-IM 4.21.0,构建时复用其源码和运行时构造扩展点;不修改原包文件,也不修改 Harness 核心。这些扩展点不是稳定公开 API,上游升级需要契约测试。原许可证保存在适配包中。
75
77
 
78
+ 0.0.14 为 Harness 0.1.7 加了一层会话绑定兼容处理:主会话已经由同一个 Harness 进程持有时,微信连接复用它,避免旧 DSH-IM 再调用 `session.create` 触发写锁冲突;工作区、会话来源等检查仍由原插件执行。
79
+
76
80
  0.0.2 已验证主会话绑定与连接健康状态,微信与网页共用会话已由用户实际验收。0.0.3 修复了新装实例的插件层顺序问题(此前全新 `DAITI_HOME` 首次启动会因 `dshIm` 重复注册而失败),并默认启用实验性的 Agent Team 层。0.0.4 增加版本可见与 `daiti update`;0.0.6 重做设置页「助理」的视觉(统一控件、吸顶标题、版本移到页脚、微信区收敛成中性色)。
77
81
 
78
82
  ## Agent Team
79
83
 
80
- 0.0.3 起,profile 默认挂载 `@deepseek-ai/dsh-experimental-agent-team-profile` `-web-profile`:主会话可以作为 Team Lead 用 `spawn_teammate` 建立具名成员,成员是有独立会话的 durable 子代理,通过共享任务板与 `send_message`/`wait_agent` 协作;浏览器侧由官方 Agent Team 面板展示名册与任务板。该层为官方实验特性,不承诺稳定;启用后 Harness 的全局 `subagent`/`subagent_fork` 工具被 Team 工具替代(`workflow` 不受影响),而"标准模式"预设内的子代理工具是否同时生效仍待真实会话验收。
84
+ 0.0.14 起,profile 挂载 `@deepseek-ai/dsh-experimental-agent-team-profile`;Harness 0.1.7 已将 Team Host 与网页层合并进这一组合包。主会话可以作为 Team Lead 用 `spawn_teammate` 建立具名成员,通过共享任务板与 `send_message`/`wait_agent` 协作。该层为官方实验特性,不承诺稳定;启用后 Harness 的全局 `subagent`/`subagent_fork` 工具被 Team 工具替代(`workflow` 不受影响)。
81
85
 
82
86
  ## 开发和本地打包
83
87
 
@@ -89,7 +93,7 @@ npm run pack:local
89
93
 
90
94
  构建将四个插件打包到 `artifacts/`,生成文件名和 SHA-256 清单。`pack:local` 在 `.local/releases/` 生成 CLI 安装包;包含运行入口、插件包和文档,不包含仓库工作目录、上游源码、个人配置或测试数据。
91
95
 
92
- 未发布的本地安装包可用 `npm install -g /path/to/tanweilabs-daiti-0.0.12.tgz` 安装,随后使用 `daiti start`。安装仍需联网获取声明的运行依赖。
96
+ 本地打包产物可用 `npm install -g /path/to/tanweilabs-daiti-0.0.14.tgz` 安装,随后使用 `daiti start`。安装仍需联网获取声明的运行依赖。
93
97
 
94
98
  - `bin/`、`lib/`:CLI 和后台进程管理。
95
99
  - `packages/assistant-ui/`:界面、首次设置和助理配置。
@@ -101,7 +105,11 @@ npm run pack:local
101
105
 
102
106
  ## 版本和限制
103
107
 
104
- 当前本地代码固定 Harness `0.1.6-alpha.2`、DSH-IM `4.21.0`。部分界面调整依赖这个版本的插槽、DOM 结构和中文标签;上游升级必须先验收,不能承诺跨版本无改动兼容。
108
+ 当前本地代码固定 Harness `0.1.7-alpha.2`、DSH-IM `4.21.0`。部分界面调整依赖这个版本的插槽、DOM 结构和中文标签;上游升级必须先验收,不能承诺跨版本无改动兼容。Harness 0.1.7 将旧 `settings.yaml` 一次性导入 Profile 配置并把原文件改名为 `settings.yaml.imported`,会话日志首次写入时升级为 V4;升级已有运行数据前必须备份整个 `DAITI_HOME`。
109
+
110
+ 已知上游依赖问题:Office 预览链仍使用 `fflate 0.8.2`,畸形 ZIP64 文件可能让转换 Worker 卡住,默认约 60 秒后终止。上游修复版本尚未进入该链路;在此之前不要用代体预览不可信来源的 Office 文件。见 [安全公告](https://github.com/advisories/GHSA-px8p-9vwx-vf98)。
111
+
112
+ 代体在 Web 版显式开启右侧栏的「浏览器」。它用 iframe 显示 HTTP(S) 页面;如果网站禁止嵌入,可点「在系统浏览器中打开」。
105
113
 
106
114
  完整验证记录见 [docs/validation.md](docs/validation.md)。Windows/Linux 尚需真实机器安装验证;微信跨端会话已在本机验收,其他平台不在本版支持范围内。升级机制、异常断电恢复和工作目录迁移仍待完善。
107
115
 
@@ -122,3 +130,11 @@ npm run pack:local
122
130
  ## 0.0.12 浏览器标签
123
131
 
124
132
  修复网页标题只在 JavaScript 中变化、浏览器标签仍显示上游名称的问题。标签统一显示“代体”,使用保持正常宽度的工牌线框图标,支持浅色与深色主题。
133
+
134
+ ## 0.0.13 图标更新
135
+
136
+ 0.0.13 曾改用机器人图标;0.0.14 发布前已换成项目原创图标,旧图形不随本包分发。
137
+
138
+ ## 0.0.14 Harness 升级
139
+
140
+ 升级到 Harness `0.1.7-alpha.2`,适配 Agent Team、会话设置与历史格式、微信单主会话绑定。恢复新版 Web 默认关闭的侧边栏浏览器,修正子代理列表的误导性加号;默认关闭额外的 Session 日志和插件清单上传。浏览器标签使用原创的对话框机器人图标。
@@ -2,10 +2,14 @@
2
2
 
3
3
  代体 is an independent TanweiLabs project, not an official DeepSeek client.
4
4
 
5
- - [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness), 0.1.6-alpha.2, MIT, Copyright (c) 2026 DeepSeek. Its original code and license remain in the pinned upstream submodule and installed npm dependencies. Its own third-party notices cover its additional dependencies.
6
- - [DSH-IM](https://github.com/xmanrui/dsh-im), 4.21.0, MIT. Installed as a separate, unmodified dependency with its original license.
5
+ - [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness), 0.1.7-alpha.2, MIT, Copyright (c) 2026 DeepSeek. Its original code and license remain in the pinned upstream submodule and installed npm dependencies. Its own third-party notices cover its additional dependencies.
6
+ - [DSH-IM](https://github.com/xmanrui/dsh-im), 4.21.0, MIT. Installed as a separate, unmodified dependency with its original license; the local adapter wraps its Session binding for Harness 0.1.7 compatibility.
7
7
  - pnpm, 11.19.0, MIT; esbuild, 0.25.12, MIT (build-time).
8
8
 
9
9
  The executable package declares the runtime dependencies; setup installs the four local plugin archives and pinned DSH-IM into a separate data directory. No personal memory, session history, model credential or IM login data belongs in this repository or its release artifacts.
10
10
 
11
11
  The local single-session WeChat fix bundles selected DSH-IM source through its version-pinned runtime constructor seams. The upstream package files are not edited. Its MIT notice is retained as UPSTREAM-LICENSE in the adapter and assistant UI packages.
12
+
13
+ ## Favicon artwork
14
+
15
+ The current `packages/loading/badge.svg` is original Daiti artwork distributed under this project's MIT license. See the loading plugin's `NOTICE`. No third-party favicon artwork is included in this release.
@@ -2,27 +2,27 @@
2
2
  "plugins": [
3
3
  {
4
4
  "name": "@tanweilabs/daiti-ui",
5
- "version": "0.0.12",
6
- "file": "tanweilabs-daiti-ui-0.0.12-002b04f755a2.tgz",
7
- "sha256": "002b04f755a24ffc629fb3e7e5c677c15340401ef4b81bc82d8bd093ea2f2026"
5
+ "version": "0.0.14",
6
+ "file": "tanweilabs-daiti-ui-0.0.14-8d2dbe1f72d0.tgz",
7
+ "sha256": "8d2dbe1f72d0ba98a5d75cb9876e446c1f46422cf60c86d380c5772e5d7229a7"
8
8
  },
9
9
  {
10
10
  "name": "@tanweilabs/daiti-preferences",
11
- "version": "0.0.12",
12
- "file": "tanweilabs-daiti-preferences-0.0.12-04bd66b37727.tgz",
13
- "sha256": "04bd66b37727312829d4155690e61370b8f3a1509fa44b306ee0a78b3f087a96"
11
+ "version": "0.0.14",
12
+ "file": "tanweilabs-daiti-preferences-0.0.14-172b87a224a2.tgz",
13
+ "sha256": "172b87a224a22318281c5fcac062e4abfa62be9a1ba04ede27b370b497ba962b"
14
14
  },
15
15
  {
16
16
  "name": "@tanweilabs/daiti-loading",
17
- "version": "0.0.12",
18
- "file": "tanweilabs-daiti-loading-0.0.12-d102c57bcae1.tgz",
19
- "sha256": "d102c57bcae1540b18747dab0731b9f3f31dec23551bff7f0ae94a98b4daa5f9"
17
+ "version": "0.0.14",
18
+ "file": "tanweilabs-daiti-loading-0.0.14-d01bfb8fb76b.tgz",
19
+ "sha256": "d01bfb8fb76b2681ceaeea4124f314309e957d6c5938b9d6c9492e4dd70ee314"
20
20
  },
21
21
  {
22
22
  "name": "@tanweilabs/daiti-im",
23
- "version": "0.0.12",
24
- "file": "tanweilabs-daiti-im-0.0.12-471fe49f48c2.tgz",
25
- "sha256": "471fe49f48c2cb713ffb6ad94808ed1652998c8375bc2ee9813d8d6d65257659"
23
+ "version": "0.0.14",
24
+ "file": "tanweilabs-daiti-im-0.0.14-539e8a6f40b2.tgz",
25
+ "sha256": "539e8a6f40b251e2c8813f6087b316aedeb779578b876538a45b119b09089a1d"
26
26
  }
27
27
  ]
28
28
  }
@@ -105,3 +105,40 @@
105
105
  - 修正:① 恢复「打开右侧边栏」,只隐藏「更多操作」「选择打开方式」「在访达中打开工作目录」;② 子代理 chip 用 `position:fixed` 移到「代体」品牌右侧(`left:calc(50% + var(--daiti-brand-w))`,品牌文案变长时调该变量),不再依赖面包屑容器的布局。
106
106
  - 复核方法:CDP 连真实页面 dump 头部按钮的 display 状态,确认右侧边栏按钮可见、chip 位置正确、被隐藏的仍是那三个。
107
107
  - `npm test` 41/41 通过;`npm run build` 通过;四个插件包 0.0.9。
108
+
109
+ ## 2026-09-22 浏览器图标(0.0.13)
110
+
111
+ - 将工牌 favicon 替换为 `robot-light-16`,保持原图路径和 16×16 画布,并适配浅色、深色配色;未改变启动或会话逻辑。
112
+ - `npm test` 47 项通过,`npm run build` 生成四个 0.0.13 插件包。
113
+ - 同一图形已在独立实例及本机主实例验证:浏览器启动脚本包含新图标和主题配色,主界面恢复正常;安装后的 SVG 与源码一致,助理设置和主会话保持不变。没有重新发送模型或 IM 请求。
114
+ - 图标来源与尚未确认的再分发许可范围分别记录在根第三方说明和 loading 插件 NOTICE 中;未将该素材声明为 TanweiLabs 的 MIT 授权作品。
115
+ - 发布 0.0.14 前已以项目原创图标替换旧图形;本节仅保留 0.0.13 当时的验收历史,旧图形不随 0.0.14 分发。
116
+
117
+ ## 2026-09-23 Harness 升级(0.0.14)
118
+
119
+ - 固定官方 npm 与源码 tag `0.1.7-alpha.2`;DSH-IM 留在 `4.21.0`。新版 Agent Team Host/网页层合并为一个 bundle;代体同步更新安装顺序、会话头部插槽、子代理目录读取方式及设置写入说明。
120
+ - 已有 profile 的安装签名现在包含 Harness 与 IM 版本;重装时移除旧 Team 网页包,并保留用户 profile、主会话与微信绑定。DSH-IM 4.21 在同一 Host 已持有主会话时重复调用 `session.create` 会触发新版写锁;适配层在官方 `session.list` 确认 `agentAvailable` 后复用现有会话,其余情况走原插件的校验与创建流程,并对并发写锁做一次重新核验。
121
+ - `npm test` 53/53 通过、`npm run build` 通过;本地安装包白名单为应用入口、四个插件、文档、许可证和 shrinkwrap,无个人数据或上游源码。独立新装实例完成首次设置、网页主界面、协作面板、通用/模型/助理设置、插话默认值与重启后的主会话保持。
122
+ - 在不含 IM 登录与模型凭据的隔离旧数据副本中,原有主会话历史可读、Team 成员与子代理目录可打开。旧 `settings.yaml` 的三个 section、五个字段逐项导入一致;官方 V4 迁移脚本转换 10 个 V3 会话、确认 2 个既有 V4 会话,失败 0,原 V3 文件保留。
123
+ - 现用 3086 服务升级前已在产品仓库外完整备份。升级后主会话 ID、工作文件夹与五个设置字段保持一致,页面正常,微信设置页显示一个账号且状态「运行正常」;仅有一套个人代体服务。另在没有个人历史的独立实例用现有模型授权发出一次真实请求,得到 `HARNESS_UPGRADE_OK`;测试凭据副本在停机后删除。
124
+ - 复核上游 DeepSeek 请求扩展后,产品配置关闭额外的 `dsh_session_log` 与 `dsh_plugin_packages` 字段,正常对话输入保持原样。独立实例的 `--dump-config` 确认两项 `enabled: false` 且无失效 patch 警告;再次真实请求得到 `HARNESS_PRIVACY_OK`,测试凭据副本再次删除。
125
+ - 未主动向真实微信发送测试消息,也未用现用主会话发模型请求。现用主会话已生成 V4 后继代、网页历史可读,原 V3 文件字节与升级前备份一致。本轮升级验收没有触发发布、提交或推送;后续发布状态以 Git 和 npm 为准。
126
+
127
+ ## 2026-09-23 恢复 Web 侧边栏浏览器
128
+
129
+ - Harness 0.1.7 将 `ui-sidebar-browser` 在 Web profile 默认禁用;代体之前没有覆盖这一新默认值,右侧栏「浏览器」因而消失。产品配置现在显式设为 `disabled: false`,并提高安装签名的 profile 修订号,使已有安装也会更新覆盖层;不修改上游 bundle。
130
+ - 独立实例的 `--dump-config` 确认浏览器有效配置已启用、额外 DeepSeek 元数据仍关闭、无失效 patch 警告。真实浏览器中打开右侧栏,看到「浏览器」入口;输入本机 HTTP 页面后,iframe 显示 `DAITI_BROWSER_OK`,沙箱保持开启。`npm test` 53/53 与 `npm run build` 通过。
131
+ - Web iframe 仍受目标网站的 CSP、`X-Frame-Options` 和浏览器混合内容策略约束;这时使用界面已有的「在系统浏览器中打开」。
132
+ - 现用 3086 服务已显式启用右侧栏浏览器,在该栏打开本机 HTTP 测试页并看到 `DAITI_BROWSER_OK`;测试标签与测试服务器已关闭,原主会话仍在,微信账号仍显示「运行正常」。
133
+
134
+ ## 2026-09-23 子代理列表展开按钮
135
+
136
+ - 0.1.7 适配曾把“下级目录尚未读取”当成“有下级”,因此七个没有下级的子代理都显示很大的「+」,容易被理解成新增按钮。现在弹层打开后只读预取子会话目录;仅确认有下级时才显示小箭头,按钮有“展开下级子代理”的说明。
137
+ - 投影更新失败时,如仍有旧列表,明确标为上次结果并提供「重试」,避免要求用户关闭再打开。当前主会话和七个子会话投影均可正常读取;截图中的短时错误无法从已留存证据确定具体诱因。
138
+ - `npm test` 53/53、`npm run build` 通过;隔离旧数据实例中七个直接子代理仍可打开,七个子目录均为空,弹层显示 0 个「+」或展开箭头,且无读取错误。
139
+ - 现用 3086 页面复核:七个子代理仍列出,弹层无多余加号、无读取错误;真实有下级的会话才显示带说明的小箭头。
140
+
141
+ ## 2026-09-23 npm 发布前依赖检查
142
+
143
+ - `npm audit --omit=dev` 报告的 5 个 moderate 节点同属一条链:Harness Office 预览 → `libreoffice-kit 0.0.1` → `fflate 0.8.2`。畸形 ZIP64 可使 `unzipSync` 死循环;该转换在独立 Worker 中运行,默认约 60 秒超时。该链路可能处理用户提供的 DOCX/XLSX/PPTX,故不是纯开发依赖告警。
144
+ - 曾试用根项目的 `fflate 0.8.3` override;本地 `npm ci` 审计为 0,但从产品 tarball 安装到独立消费项目后仍解析到 `0.8.2`,证明该 override 不能作为公开 npm 包的修复。已撤回 override,保留上游原始依赖;README 明示当前限制。消费项目审计显示 6 个 moderate 节点,均源于同一漏洞链(比源码根项目多一个产品包节点)。
package/lib/cli.mjs CHANGED
@@ -35,7 +35,8 @@ export function runtimeBin() {
35
35
  const require = createRequire(path.join(root, 'package.json'));
36
36
  const manifest = require.resolve('@deepseek-ai/dsh/package.json');
37
37
  const pkg = require(manifest);
38
- if (pkg.version !== '0.1.6-alpha.2') throw new Error(`Unsupported Harness version ${pkg.version}; run npm ci`);
38
+ const expected = require(path.join(root, 'package.json')).dependencies['@deepseek-ai/dsh'];
39
+ if (pkg.version !== expected) throw new Error(`Unsupported Harness version ${pkg.version}; expected ${expected}. Run npm ci.`);
39
40
  return path.resolve(path.dirname(manifest), pkg.bin.dsh);
40
41
  }
41
42
  export function runtimePath(env = process.env) {
@@ -51,8 +52,9 @@ function run(args, p) {
51
52
  });
52
53
  }
53
54
  const execFileAsync = promisify(execFile);
54
- /** Team runs on the experimental Agent Team profile plus its Web panel, in that order. */
55
- const teamBundles = ['@deepseek-ai/dsh-experimental-agent-team-profile', '@deepseek-ai/dsh-experimental-agent-team-web-profile'];
55
+ /** Harness 0.1.7 ships the Team Host and Web panel in one bundle. */
56
+ const teamBundles = ['@deepseek-ai/dsh-experimental-agent-team-profile'];
57
+ const legacyTeamBundles = ['@deepseek-ai/dsh-experimental-agent-team-web-profile'];
56
58
  /** The Team layer must sit on the IM bundles; the adapter last so its disable wins. */
57
59
  const bundleOrder = ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-web-app', '@xmanrui/dsh-im', ...teamBundles, '@tanweilabs/daiti-loading', '@tanweilabs/daiti-preferences', '@tanweilabs/daiti-ui'];
58
60
  /**
@@ -65,7 +67,7 @@ const bundleOrder = ['@deepseek-ai/dsh-base', '@deepseek-ai/dsh-web-app', '@xman
65
67
  * Team layer installs. Unknown bundles keep their relative position at the end.
66
68
  */
67
69
  export function orderedBundles(bundles, available = () => true) {
68
- const unique = [...new Set(bundles)];
70
+ const unique = [...new Set(bundles)].filter(name => !legacyTeamBundles.includes(name));
69
71
  for (const name of ['@xmanrui/dsh-im', '@tanweilabs/daiti-im']) {
70
72
  if (unique.includes(name) && !available(name)) throw new Error(`Profile bundle ${name} is unavailable; run npm ci.`);
71
73
  }
@@ -87,6 +89,9 @@ async function pinTeamBundles(profile) {
87
89
  const manifest = JSON.parse(await fs.readFile(manifestPath, 'utf8'));
88
90
  const dependencies = { ...manifest.dependencies };
89
91
  let changed = false;
92
+ for (const name of legacyTeamBundles) {
93
+ if (name in dependencies) { delete dependencies[name]; changed = true; }
94
+ }
90
95
  for (const [name, version] of Object.entries(versions)) {
91
96
  if (dependencies[name] !== version) { dependencies[name] = version; changed = true; }
92
97
  }
@@ -111,7 +116,10 @@ export async function setup(p) {
111
116
  const marker = path.join(p.home, 'installation.json');
112
117
  const manifest = await readJson(path.join(root, 'artifacts/manifest.json'));
113
118
  if (!manifest?.plugins?.length) throw new Error('Plugin artifacts missing. Run npm run build first.');
114
- const signature = JSON.stringify(manifest);
119
+ const product = createRequire(path.join(root, 'package.json'))(path.join(root, 'package.json'));
120
+ // Reinstall the profile when the runtime or IM version changes even if the
121
+ // product plugin archives happen to be byte-for-byte identical.
122
+ const signature = JSON.stringify({ plugins: manifest, harness: product.dependencies['@deepseek-ai/dsh'], im: product.devDependencies['@xmanrui/dsh-im'], profileRevision: 2 });
115
123
  if ((await readJson(marker))?.signature === signature) return;
116
124
  // Official plugin command initializes the shipped web profile in this isolated home.
117
125
  const packageCache = path.join(p.home, 'plugin-packages');
@@ -123,13 +131,13 @@ export async function setup(p) {
123
131
  await fs.copyFile(path.resolve(root, 'artifacts', plugin.file), destination);
124
132
  return destination;
125
133
  }));
126
- await run(['plugin', '--profile', 'web', 'add', '--ignore-scripts', '@xmanrui/dsh-im@4.21.0', ...packages], p);
134
+ await run(['plugin', '--profile', 'web', 'add', '--ignore-scripts', `@xmanrui/dsh-im@${product.devDependencies['@xmanrui/dsh-im']}`, ...packages], p);
127
135
  const profile = path.join(p.runtime, 'profiles/web');
128
136
  const profileManifest=path.join(profile,'package.json');
137
+ const team=await pinTeamBundles(profile);
129
138
  const profileData=await readJson(profileManifest);
130
- const bundles=profileData.dsh.profile.bundles;
139
+ const bundles=profileData.dsh.profile.bundles.filter(name=>!legacyTeamBundles.includes(name));
131
140
  for(const plugin of manifest.plugins)if(!bundles.includes(plugin.name))bundles.push(plugin.name);
132
- const team=await pinTeamBundles(profile);
133
141
  if(team.pinned){for(const name of teamBundles)if(!bundles.includes(name))bundles.push(name);}
134
142
  else console.warn(`Agent Team unavailable: ${team.reason}. Starting without Team tools.`);
135
143
  profileData.dsh.profile.bundles=orderedBundles(bundles,name=>{try{createRequire(path.join(profile,'package.json')).resolve(`${name}/package.json`);return true;}catch{return false;}});
@@ -139,6 +147,14 @@ export async function setup(p) {
139
147
  // Our overlay is separate from the profile's user-owned patch.
140
148
  await atomicJson(path.join(p.home, 'daiti.patch.json'), [
141
149
  { id: 'ui-sidebar', disabled: true },
150
+ // Harness 0.1.7 disables this tab in Web by default; keep the side panel
151
+ // browser available in the product's local Web profile.
152
+ { id: 'ui-sidebar-browser', disabled: false },
153
+ // The official adapter does not need these additional HTTP metadata fields
154
+ // to produce a model reply. Keep Session events and installed package names
155
+ // inside the local runtime rather than sending them alongside each request.
156
+ { id: 'session-log-deepseek', config: { enabled: false } },
157
+ { id: 'plugin-package-inventory-deepseek', config: { enabled: false } },
142
158
  { id: 'daiti-single-session-im', disabled: false, config: { settingsPath: path.join(p.home, 'settings.json') } },
143
159
  { id: 'daiti-onboarding-preferences', disabled: false, config: { settingsPath: path.join(p.home, 'settings.json') } },
144
160
  { id: 'daiti-ui', disabled: false, config: { settingsPath: path.join(p.home, 'settings.json'), defaultWorkspacePath: path.join(homedir(), 'Daiti'), singleSessionIm: true } },