@khorsheed/dsh-local-agent-claude-code 0.1.0-rc.6 → 0.1.0-rc.7

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/CHANGELOG.md ADDED
@@ -0,0 +1,9 @@
1
+ # 变更记录
2
+
3
+ ## 0.1.0-rc.7(2026-09-27)
4
+
5
+ 家族同版联动:随宿主 0.1.7-rc.2 基线发布波重发,全量构建+测试在 rc.2 基线通过。README 按仓标准补齐双语。无功能变更。
6
+
7
+ ## 0.1.0-rc.6(2026-09-26)
8
+
9
+ 首个公开发布。
package/README.en.md CHANGED
@@ -1,10 +1,12 @@
1
- # `@khorsheed/dsh-local-agent-claude-code`
1
+ # @khorsheed/dsh-local-agent-claude-code
2
2
 
3
3
  English | [中文](README.md)
4
4
 
5
- **Live output migration.** Live runs always consume incremental output. The old `liveMirrorGranularity: event | token` key is accepted for existing profiles but ignored; changing it never changes a running process. Exec remains available for evaluation. Final provider items remain authoritative, including tool history and usage.
5
+ Delegate coding tasks to the Claude Code on this machine — thinking, tool calls, and replies stream back live, and your personal `~/.claude` is never touched.
6
6
 
7
- Delegate coding tasks to a locally installed Claude Code from any dsh agent preset — answers stream back live, and your personal `~/.claude` is never touched. The Claude Code harness of the [local-agent family](../local-agent/README.md).
7
+ Any dsh agent preset can delegate: the family tool mounts once at the profile root, the child session is visible end to end — abortable, resumable — and every round's accounting (the actual model, token usage, tool-call count) reads back for real. Login is scope-isolated: the plugin only ever manages the one directory `$DSH_HOME/local-agent/claude-code`, so your personal installation and credentials stay out of it from start to finish. The Claude Code harness of the [local-agent family](../local-agent/README.md).
8
+
9
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-web-basic/main/docs/screenshots/08-local-agent.png" width="640" alt="the Local Agent family cards under Settings → Plugins → plugin configuration, the Claude Code row's status dot showing its auth state">
8
10
 
9
11
  ## Features
10
12
 
@@ -13,7 +15,10 @@ Delegate coding tasks to a locally installed Claude Code from any dsh agent pres
13
15
  - **Guided login, one command** — `/claude-code login` answers with the exact command to run in your own terminal (claude ≥2.1 prints its OAuth URL only on a TTY, so the host no longer spawns and scrapes) and watches the scoped home for the credential; `sessions`/`status`/`logout` and a Settings → 本地 Agent panel complete the family.
14
16
  - **Resume a delegation** — pass back the result's `resume` handle to continue the same Claude session, with per-round accounting.
15
17
  - **Live stream mirror** — the child session mirrors Claude's thinking, tool calls, and replies live; aborting keeps the partial transcript and real token usage.
16
- - **Model readback and per-cell working directory** — every settled round reads back the model from stream-json’s system/init into the delegation record; orchestrators pass a `cwd` per cell, and a resume in a different directory is rejected.
18
+ - **Model readback and per-cell working directory** — every settled round reads back the model from stream-json's system/init into the delegation record; orchestrators pass a `cwd` per cell, and a resume in a different directory is rejected.
19
+
20
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-web-basic/main/docs/screenshots/local-agent-claude-code-card.png" width="640" alt="the expanded Local Agent · Claude Code settings card: the authentication block, the default-model picker, and the resident-mode (live) switch">
21
+
17
22
  ## Install
18
23
 
19
24
  Prerequisites: a running dsh profile, and the Claude Code CLI (`claude`) on `PATH` — the plugin does not install it. Install the family core together with this bundle (`dsh plugin add` reconciles only *direct* dependencies, so name both):
@@ -22,7 +27,7 @@ Prerequisites: a running dsh profile, and the Claude Code CLI (`claude`) on `PAT
22
27
  dsh plugin --profile web add @khorsheed/dsh-local-agent @khorsheed/dsh-local-agent-claude-code
23
28
  ```
24
29
 
25
- Restart the profile, then run `/claude-code login` once from a session. Uninstall:
30
+ Restart the web instance to activate, then run `/claude-code login` once from a session. Uninstall:
26
31
 
27
32
  ```sh
28
33
  dsh plugin --profile web remove @khorsheed/dsh-local-agent-claude-code
@@ -37,9 +42,12 @@ Optional fields on the bundle row:
37
42
  - `permissionMode` — `skip` (default) passes `--dangerously-skip-permissions` so the child can write files without an approval prompt; `normal` runs without it, so approval-requiring actions (e.g. writing files) are denied.
38
43
  - `model` — every delegation round starts the CLI with it (`claude -p --model <model>`); absent passes no model flag at all. See below.
39
44
  - `baseUrl` — sets `ANTHROPIC_BASE_URL` for the child CLI (e.g. a self-hosted router or proxy); absent, the child inherits the host process environment. Config wins over environment.
45
+ - `proxyUrl` — an HTTP proxy for the child CLI's own traffic (model calls AND OAuth refresh), provisioned into the scoped `settings.json` env block; for when the host process environment carries no proxy (a supervisor-spawned instance does not inherit your shell exports).
40
46
  - `live` — live driver: one resident stream-json process per member (`--input-format stream-json`), one stdin message per round (runtime-level graceful control interrupt, same-shape push stream); off — or a channel that cannot come up — means the one-shot `claude -p` path.
41
47
  - `liveIdleMs` — idle lifetime of a resident runtime before reclaim (default 30 min).
42
48
 
49
+ > **Migration note** — live runs always consume incremental output. The old `liveMirrorGranularity: event | token` key is accepted for existing profiles but ignored; changing it never changes a running process. Exec remains available for evaluation. Final provider items remain authoritative, including tool history and usage.
50
+
43
51
  ### Default model (`model`)
44
52
 
45
53
  **Absent = today's behavior.** Without this key the plugin adds no model flag to the argv at all: the scoped `settings.json`'s `model` decides which model runs, and claude's own default decides when that is missing too (the plugin never guesses what it is).
@@ -48,7 +56,7 @@ Optional fields on the bundle row:
48
56
 
49
57
  One-shot (exec) rounds never rewrite the scoped `settings.json`: `--model` overrules it per round and the file stays exactly as you edited it. A resident (live) spawn scratches the member's effective model into that file (a `--resume` reattach honors the file's model over the `--model` flag) and restores the previous value before a spawn that binds none; the "CLI config" layer that status and the settings card report is always the value you configured, never a member's scratch.
50
58
 
51
- The settings card’s "Default model" writes the provider setting for subsequent rounds. Its shared picker displays the scoped model directory, discovery source and completeness, plus an explicit model-ID input when needed. Clearing the selection follows the effective configuration/default chain. Saving does not interrupt an active round and requires no reload. If the shared picker is unavailable, the card retains its text-input fallback. Per-member model and effort changes use the durable controls described below.
59
+ The settings card's "Default model" writes the provider setting for subsequent rounds. Its shared picker displays the scoped model directory, discovery source and completeness, plus an explicit model-ID input when needed. Clearing the selection follows the effective configuration/default chain. Saving does not interrupt an active round and requires no reload. If the shared picker is unavailable, the card retains its text-input fallback. Per-member model and effort changes use the durable controls described below.
52
60
 
53
61
  The model surface now also reads Claude's native `initialize` directory, preserving selection aliases, display labels, resolved names and supported effort levels. It shares the core cache and refresh subscription, retains successful data after a failed refresh, and labels historical suggestions separately. This scoped control probe sends no user task and writes no model settings. An older CLI without this directory reports unsupported; native candidates do not establish account entitlement. The shared model picker and member effort controls are connected. Busy selections apply at the next complete turn boundary, including tool continuations; core owns current/pending state, cancellation and retry, while frozen evaluation members reject changes.
54
62
 
@@ -64,7 +72,7 @@ The model surface now also reads Claude's native `initialize` directory, preserv
64
72
 
65
73
  ## Compatibility
66
74
 
67
- - npm release line (`@deepseek-ai/dsh@0.1.5-rc.1`): ✅ public API compatible. Live generation uses the local-agent transient Remote and public Conversation nodes; suffix checkpoints provide recovery, and native final messages retain transcript and usage semantics. Browser P95 acceptance is tracked separately in the room coordinator proposal. Older hosts stay on the previous release line.
75
+ - npm release line (`@deepseek-ai/dsh@0.1.5-rc.1`): ✅ public API compatible. Live generation uses the local-agent transient Remote and public Conversation nodes; incremental durable recovery checkpoints handle persistence, and native final messages retain transcript and usage semantics. Browser P95 acceptance is tracked by the room coordinator proposal. minHost is 0.1.5-rc.1 — older hosts stay on the previous release line.
68
76
  - source line (deepseek-harness master): ✅ (verifiedHost: 0.1.5-rc.1)
69
77
 
70
78
  ## Known Limitations
package/README.i18n.yaml CHANGED
@@ -2,5 +2,5 @@
2
2
  # last confirmed-consistent state. Both languages carry equal authority; after
3
3
  # editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write packages/local-agent-claude-code/README.en.md
5
- packages/local-agent-claude-code/README.en.md: 29705c09a8af61a023bbfdaed0b38c62a28f9787
6
- packages/local-agent-claude-code/README.md: 5c74d6c22db916f8b2852271a8d7cb57ddc0b11a
5
+ packages/local-agent-claude-code/README.en.md: 2b1df535b0382bad4475a0652f1a389ac0afa944
6
+ packages/local-agent-claude-code/README.md: ea84ad5a477258ca4c97678cc229f25d76efe480
package/README.md CHANGED
@@ -1,50 +1,58 @@
1
- # `@khorsheed/dsh-local-agent-claude-code`
1
+ # @khorsheed/dsh-local-agent-claude-code
2
2
 
3
3
  [English](README.en.md) | 中文
4
4
 
5
- **实时输出迁移。** live 轮次统一消费增量输出。旧 `liveMirrorGranularity: event | token` 配置继续兼容读取,但不再影响行为,也不会改变运行中的进程。评测继续保留 exec。最终内容仍以 provider 完成项为准,包括工具记录和用量。
5
+ 把编码任务委派给本机的 Claude Code——思考、工具调用与回复实时流回,你的私人 `~/.claude` 分文不动。
6
6
 
7
- 把编码任务委派给本地安装的 Claude Code,任意 dsh agent preset 都能用——答案实时流回,你的个人 `~/.claude` 绝不被动到。[local-agent 家族](../local-agent/README.md) 的 Claude Code harness。
7
+ 任意 dsh agent preset 都能发起委派:家族工具在 profile 根只挂一次,子会话全程可见、可中止、可续聊,每轮的账目(实际模型、token 用量、工具调用数)都真实回读。登录是作用域隔离的——插件只管理 `$DSH_HOME/local-agent/claude-code` 这一份目录,你的个人安装与凭据自始至终置身事外。[local-agent 家族](../local-agent/README.md) 的 Claude Code harness。
8
+
9
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-web-basic/main/docs/screenshots/08-local-agent.png" width="640" alt="设置 → 插件 → 插件配置里的 Local Agent 家族卡片,Claude Code 一行的状态点显示授权状态">
8
10
 
9
11
  ## 特性
10
12
 
11
- - **任意 preset 都能委派**——工具只在 profile 根挂载一次,无需逐 preset 变体。
12
- - **作用域隔离**——每个 Claude 进程都以 `$DSH_HOME/local-agent/claude-code` 为 `CLAUDE_CONFIG_DIR` 运行;你的个人 `~/.claude` 置身事外。
13
- - **一条命令完成登录指引**——`/claude-code login` 在会话中给出需要在你自己终端运行的完整命令(claude ≥2.1 只在 TTY 打印 OAuth URL,宿主不再 spawn 抓取),并监听作用域目录识别登录完成;`sessions`/`status`/`logout` 与 设置 → 本地 Agent 面板构成完整一族。
14
- - **续聊委派**——把结果自述的 `resume` 句柄传回,即可继续同一个 Claude 会话,并按轮记账。
15
- - **实时流镜像**——子会话实时镜像 Claude 的思考、工具调用与回复;中止会保留部分转写与真实 token 用量。
13
+ - **任意 preset 都能委派**——工具只在 profile 根挂载一次,无需逐 preset 变体。
14
+ - **作用域隔离**——每个 Claude 进程都以 `$DSH_HOME/local-agent/claude-code` 为 `CLAUDE_CONFIG_DIR` 运行;你的个人 `~/.claude` 置身事外。
15
+ - **一条命令完成登录指引**——`/claude-code login` 在会话中给出需要在你自己终端运行的完整命令(claude ≥2.1 只在 TTY 打印 OAuth URL,宿主不再 spawn 抓取),并监听作用域目录识别登录完成;`sessions`/`status`/`logout` 与 设置 → 本地 Agent 面板构成完整一族。
16
+ - **续聊委派**——把结果自述的 `resume` 句柄传回,即可继续同一个 Claude 会话,并按轮记账。
17
+ - **实时流镜像**——子会话实时镜像 Claude 的思考、工具调用与回复;中止会保留部分转写与真实 token 用量。
16
18
  - **模型回读与独立工作目录**——每轮从 stream-json 的 system/init 回读实际模型,写进委派记录;编排器可用 `cwd` 选项给每格独立目录,resume 换目录即拒绝。
19
+
20
+ <img src="https://raw.githubusercontent.com/Khorsheed/dsh-web-basic/main/docs/screenshots/local-agent-claude-code-card.png" width="640" alt="展开的「Local Agent · Claude Code」设置卡:认证块、默认模型选择与常驻模式(live)开关">
21
+
17
22
  ## 安装
18
23
 
19
- 前置依赖:一个可运行的 dsh profile,以及 `PATH` 上的 Claude Code CLI(`claude`)——插件不负责安装。家族 core 与本包一起安装(`dsh plugin add` 只调和**直接**依赖,所以两个包都点名):
24
+ 前置依赖:一个可运行的 dsh profile,以及 `PATH` 上的 Claude Code CLI(`claude`)——插件不负责安装。家族 core 与本包一起安装(`dsh plugin add` 只调和**直接**依赖,所以两个包都点名):
20
25
 
21
26
  ```sh
22
27
  dsh plugin --profile web add @khorsheed/dsh-local-agent @khorsheed/dsh-local-agent-claude-code
23
28
  ```
24
29
 
25
- 重启 profile,然后在会话里运行一次 `/claude-code login`。卸载:
30
+ 重启 web 实例后生效,然后在会话里运行一次 `/claude-code login`。卸载:
26
31
 
27
32
  ```sh
28
33
  dsh plugin --profile web remove @khorsheed/dsh-local-agent-claude-code
29
34
  ```
30
35
 
31
- 作用域目录在卸载时刻意保留,重装无需重新登录;删除 `$DSH_HOME/local-agent/claude-code` 即可清除全部痕迹。
36
+ 作用域目录在卸载时刻意保留,重装无需重新登录;删除 `$DSH_HOME/local-agent/claude-code` 即可清除全部痕迹。
32
37
 
33
38
  ## 配置
34
39
 
35
- bundle 行接受这些可选字段:
40
+ bundle 行接受这些可选字段:
41
+
42
+ - `permissionMode`——`skip`(默认)传 `--dangerously-skip-permissions`,子代理写文件无需审批;`normal` 不传,需审批的动作(如写文件)被拒绝。
43
+ - `model`——每轮委派以它起 CLI(`claude -p --model <模型>`);不写就一个模型参数都不传。见下。
44
+ - `baseUrl`——为子 CLI 设置 `ANTHROPIC_BASE_URL`(例如自部署路由器或代理);缺省继承宿主进程环境。配置优先于环境。
45
+ - `proxyUrl`——子 CLI 自身流量(模型调用与 OAuth 续期)的 HTTP 代理,provision 进作用域 `settings.json` 的 env 块;宿主进程环境不带代理时(例如 supervisor 拉起的实例不继承 shell export)用这项。
46
+ - `live`——长驻驱动:每成员常驻一个 stream-json 进程(`--input-format stream-json`),按轮发 stdin 消息(runtime 级优雅中断 control interrupt、同形推送流);关闭或通道不可用即回一次性 `claude -p`。
47
+ - `liveIdleMs`——长驻 runtime 空闲回收时限(默认 30 分钟)。
36
48
 
37
- - `permissionMode`——`skip`(默认)传 `--dangerously-skip-permissions`,子代理写文件无需审批;`normal` 不传,需审批的动作(如写文件)被拒绝。
38
- - `model`——每轮委派以它起 CLI(`claude -p --model <模型>`);不写就一个模型参数都不传。见下。
39
- - `baseUrl`——为子 CLI 设置 `ANTHROPIC_BASE_URL`(例如自部署路由器或代理);缺省继承宿主进程环境。配置优先于环境。
40
- - `live`——长驻驱动:每成员常驻一个 stream-json 进程(`--input-format stream-json`),按轮发 stdin 消息(runtime 级优雅中断 control interrupt、同形推送流);关闭或通道不可用即回一次性 `claude -p`。
41
- - `liveIdleMs`——长驻 runtime 空闲回收时限(默认 30 分钟)。
49
+ > **迁移说明**——live 轮次统一消费增量输出;旧 `liveMirrorGranularity: event | token` 配置键继续兼容读取,但不再影响行为,也不会改变运行中的进程。评测继续保留 exec;最终内容仍以 provider 完成项为准,包括工具记录和用量。
42
50
 
43
51
  ### 默认模型(`model`)
44
52
 
45
- **不写 = 今天的表现。**没有这个键时,本插件在 argv 上一个模型参数都不加:跑哪个模型由作用域 `settings.json` 的 `model` 决定,它也没有时由 claude 自己的默认决定(本插件从不猜它是什么)。
53
+ **不写 = 今天的表现。** 没有这个键时,本插件在 argv 上一个模型参数都不加:跑哪个模型由作用域 `settings.json` 的 `model` 决定,它也没有时由 claude 自己的默认决定(本插件从不猜它是什么)。
46
54
 
47
- **写了 = 每轮委派以它起 CLI。**新起一轮与续接(resume)、一次性与常驻(`live: true`)四种 argv 都带上 `--model <模型>`,位置在成员通道的 `--allowedTools …--` 之前——那个旗标是变长的,`--` 之后就是任务文本。
55
+ **写了 = 每轮委派以它起 CLI。** 新起一轮与续接(resume)、一次性与常驻(`live: true`)四种 argv 都带上 `--model <模型>`,位置在成员通道的 `--allowedTools …--` 之前——那个旗标是变长的,`--` 之后就是任务文本。
48
56
 
49
57
  一次性(exec)轮不改写作用域 `settings.json`——`--model` 每轮覆盖它,文件仍是你编辑的样子。常驻(live)spawn 会把成员的生效模型暂写进该文件(`--resume` 重挂时 CLI 认文件里的模型而不认 `--model` 旗标),绑定空模型的 spawn 前再还原;状态页与设置卡读到的「CLI 配置」层永远是你自己配的值,不会读到某个成员留下的暂写。
50
58
 
@@ -52,33 +60,33 @@ bundle 行接受这些可选字段:
52
60
 
53
61
  模型读面现已读取 Claude 原生 `initialize` 目录,保留选择别名、显示名、解析名称和支持的 effort 值。目录共用 core 缓存和刷新订阅,刷新失败保留成功数据,并独立标识历史建议。此 scoped 控制查询不发送用户任务、不写模型设置。旧 CLI 缺少目录时显示不支持;原生候选不证明账号权限。共用模型菜单和成员 effort 控制已接入。运行中选择排到下一完整轮次(含工具续跑);core 统一持有当前/待生效配置、撤销与重试,冻结评测成员禁止变更。
54
62
 
55
- **委派级的模型优先。**编排器可以经门面 `DelegationCallOptions.model` 给**某一次委派**点名模型,它排在这个键之前(顺序见家族核心 README 的层序)。首轮请求的值记进委派记录,resume 轮照它重发——resume 不接受 model 参数。常驻模式下,首轮点名的模型作为该成员的起始模型在 runtime spawn 时绑定:已绑定不同模型的 runtime 先退役,同一个 CLI 会话经 `--resume` 在新进程上续起。
63
+ **委派级的模型优先。** 编排器可以经门面 `DelegationCallOptions.model` 给**某一次委派**点名模型,它排在这个键之前(顺序见家族核心 README 的层序)。首轮请求的值记进委派记录,resume 轮照它重发——resume 不接受 model 参数。常驻模式下,首轮点名的模型作为该成员的起始模型在 runtime spawn 时绑定:已绑定不同模型的 runtime 先退役,同一个 CLI 会话经 `--resume` 在新进程上续起。
56
64
 
57
- **成员会话级切换。**成员会话的 composer 模型选择器经家族网关 `setMemberModel` 写入一个**会话级覆盖**——它排在委派模型与这个键之前,只存内存、刻意不跨宿主重启、也不写进设置。切换进行中轮次的成员会被拒绝;live 下换到不同模型会退役该成员的常驻 runtime,下一轮以新模型重挂**同一个** CLI 会话(对话不丢),换成相同模型则什么都不发生。
65
+ **成员会话级切换。** 成员会话的 composer 模型选择器经家族网关 `setMemberModel` 写入一个**会话级覆盖**——它排在委派模型与这个键之前,只存内存、刻意不跨宿主重启、也不写进设置。切换进行中轮次的成员会被拒绝;live 下换到不同模型会退役该成员的常驻 runtime,下一轮以新模型重挂**同一个** CLI 会话(对话不丢),换成相同模型则什么都不发生。
58
66
 
59
- **这不是评测的缺口。**评测 run 的条件在建立时冻结:run 跑到一半改这个键,下一轮的模型回读会发现声明模型 ≠ 实测模型,run 直接判为 misattributed 而失败(冻结决策 5)。「切了新 run 照新走、进行中的 run 不被悄悄换掉」是设计出来的,不是漏掉的。
67
+ **这不是评测的缺口。** 评测 run 的条件在建立时冻结:run 跑到一半改这个键,下一轮的模型回读会发现声明模型 ≠ 实测模型,run 直接判为 misattributed 而失败(冻结决策 5)。「切了新 run 照新走、进行中的 run 不被悄悄换掉」是设计出来的,不是漏掉的。
60
68
 
61
- ⚠️ `skip` 没有 OS 级沙箱——子进程可以写宿主用户能写的任何地方,包括工作区之外;作用域登录的 OAuth token 会发送给 `baseUrl` 指向的端点。委派需要限制时改用 `normal`;`baseUrl` 只指向你信任的地址。
69
+ ⚠️ `skip` 没有 OS 级沙箱——子进程可以写宿主用户能写的任何地方,包括工作区之外;作用域登录的 OAuth token 会发送给 `baseUrl` 指向的端点。委派需要限制时改用 `normal`;`baseUrl` 只指向你信任的地址。
62
70
 
63
- **评测快照(effectiveSettings)。** 本 harness 向注册表声明一份实时读取的公平性设置快照,供评测条件哈希使用:drive(exec/live)、permissionMode(skip/normal,插件配置)、端点是否固定(按 provider 的解析顺序——配置项优先于宿主进程环境的 `ANTHROPIC_BASE_URL`,只报主机名)、已配置模型(先看插件配置的 `model` 键——它每轮覆盖文件;没有才读作用域 `settings.json` 的 `model`;CLI 自身的默认模型由 CLI 决定,绝不猜值,都没有就不给字段)、CLI 版本(`claude --version`,按可执行文件路径+mtime 缓存;探测不到即字段缺位)。`/claude-code status` 与 `LocalAgentStatus` Remote 附带同一份快照。
71
+ **评测快照(effectiveSettings)。** 本 harness 向注册表声明一份实时读取的公平性设置快照,供评测条件哈希使用:drive(exec/live)、permissionMode(skip/normal,插件配置)、端点是否固定(按 provider 的解析顺序——配置项优先于宿主进程环境的 `ANTHROPIC_BASE_URL`,只报主机名)、已配置模型(先看插件配置的 `model` 键——它每轮覆盖文件;没有才读作用域 `settings.json` 的 `model`;CLI 自身的默认模型由 CLI 决定,绝不猜值,都没有就不给字段)、CLI 版本(`claude --version`,按可执行文件路径+mtime 缓存;探测不到即字段缺位)。`/claude-code status` 与 `LocalAgentStatus` Remote 附带同一份快照。
64
72
 
65
73
  ## Compatibility
66
74
 
67
- - npm 发布线(`@deepseek-ai/dsh@0.1.5-rc.1`):✅ 公开 API 兼容。生成中的内容走 local-agent 瞬时 Remote 与公开 Conversation 节点;后缀检查点负责恢复,最终原生消息保留转写与用量语义。浏览器 P95 另在 room 协调者提案中验收。更旧宿主留在前一发布线。
75
+ - npm 发布线(`@deepseek-ai/dsh@0.1.5-rc.1`):✅ 公开 API 兼容。生成中的内容走 local-agent 瞬时 Remote 与公开 Conversation 节点;增量耐久恢复检查点负责落盘,最终原生消息保留转写与用量语义。浏览器 P95 验收由 room 协调者提案跟踪。minHost 0.1.5-rc.1——更旧宿主请停留在前一发布线。
68
76
  - 源码线(deepseek-harness master):✅(verifiedHost: 0.1.5-rc.1)
69
77
 
70
78
  ## 已知限制
71
79
 
72
- - **macOS logout 只删配置**——keychain 条目留给 CLI 自己的 `claude auth logout`;下次登录会重写同一槽位,残留无害。
80
+ - **macOS logout 只删配置**——keychain 条目留给 CLI 自己的 `claude auth logout`;下次登录会重写同一槽位,残留无害。
73
81
  - **同一次授权不能被宿主轮与容器轮共用**——macOS 上两者用的是不同存储,任一侧轮换都会作废另一侧的 token family。容器化的条件用自己的命名 scope,见「容器内委派」。
74
- - **Linux 凭据不隔离**(上游 bug #47661)——即使作用域目录没有凭据,claude 也会读默认 `~/.claude/.credentials.json`。
75
- - **交互会话记录可能缺失**——自定义 `CLAUDE_CONFIG_DIR` 下 CLI 可能不写转写(上游行为)。
76
- - **headless 注意**——`/claude-code` 命令需要 Web 会话;`--profile headless` 可通过挂载工具行的组合委派。
82
+ - **Linux 凭据不隔离**(上游 bug #47661)——即使作用域目录没有凭据,claude 也会读默认 `~/.claude/.credentials.json`。
83
+ - **交互会话记录可能缺失**——自定义 `CLAUDE_CONFIG_DIR` 下 CLI 可能不写转写(上游行为)。
84
+ - **headless 注意**——`/claude-code` 命令需要 Web 会话;`--profile headless` 可通过挂载工具行的组合委派。
77
85
 
78
86
  ## 实现原理
79
87
 
80
88
  <details>
81
- <summary>内部结构(点击展开)</summary>
89
+ <summary>内部结构(点击展开)</summary>
82
90
 
83
91
  **模型回读与 cwd 覆盖。** 每轮 settle 后,provider 把 stream-json `system`(init)事件 `model` 字段里的实际模型(如 `claude-opus-5[1m]`,原样回读,上下文变体后缀照留)随 `settled` 进度事件上报,并合并进 `delegations.jsonl` 的 `observedModel` 字段;取不到即缺位,绝不猜测。当任何一层、任何记录都没有模型时,「默认」面的最近观测提示读成员**自己的**转录(`projects/<cwd-slug>/<sessionId>.jsonl`;无成员面读全树最新的那份)——这是为 settle 通道之前的旧轮次准备的历史兜底;只读,绝不回写 `delegations.jsonl`。编排器还可以经门面 `DelegationCallOptions.cwd` 给本轮指定工作目录(记录进 `cwd` 字段);resume 轮解析出的目录若与首轮记录不一致,进程启动前即 fail loud——CLI 会话延续的是首轮所在目录的上下文。
84
92
 
@@ -97,24 +105,24 @@ src/provision.ts 作用域目录 provisioning 与基于文件的 logo
97
105
  src/records.ts 认证探测与作用域目录的会话记录列表
98
106
  ```
99
107
 
100
- bundle patch 把 `claude-code` harness 注册进家族 core(`@khorsheed/dsh-local-agent`,声明为依赖——claude 包刻意不重复插入 core 行,重复会挂载两次),并挂载 `claude-local` provider,后者在 harness 作用域目录下 spawn `claude -p --verbose --output-format stream-json`。`subagent_claude_code` 工具是家族自有工具(`@khorsheed/dsh-local-agent-tool-subagent`):官方子集(`description`/`prompt`)加一个可选 `resume` 参数。
108
+ bundle patch 把 `claude-code` harness 注册进家族 core(`@khorsheed/dsh-local-agent`,声明为依赖——claude 包刻意不重复插入 core 行,重复会挂载两次),并挂载 `claude-local` provider,后者在 harness 作用域目录下 spawn `claude -p --verbose --output-format stream-json`。`subagent_claude_code` 工具是家族自有工具(`@khorsheed/dsh-local-agent-tool-subagent`):官方子集(`description`/`prompt`)加一个可选 `resume` 参数。
101
109
 
102
- **作用域隔离。** macOS 上真实凭据在系统 keychain 的哈希条目里(`Claude Code-credentials-<sha256(configDir)[:8]>`,以作用域目录路径为键)——基于文件的 logout 够不到它,但下次登录会重写同一个槽位。**CLI 自己用哪个存储是随版本变的,且由实测而非假定确定**:2.1.236 写 keychain、读文件(这个镜像正是为那条分裂而存在),而 2.1.274 在 macOS 上读写 keychain,2.1.272 在 Linux 上读写作用域文件。因此文件对本包自己的探针与容器轮仍是权威;keychain 才是当前 macOS 上宿主 CLI 真正用的那个。认证探测只做轻量文件检查——看作用域 `.claude.json` 的 `oauthAccount`,绝不为了探测而 spawn CLI。该探测同样会协调两个存储,因此遵守与 spawn 点一致的新者胜规则:它在每次状态读与每次就绪检查时都会跑,那里若是无条件镜像,同样会把容器轮的续期抹掉。
110
+ **作用域隔离。** macOS 上真实凭据在系统 keychain 的哈希条目里(`Claude Code-credentials-<sha256(configDir)[:8]>`,以作用域目录路径为键)——基于文件的 logout 够不到它,但下次登录会重写同一个槽位。**CLI 自己用哪个存储是随版本变的,且由实测而非假定确定**:2.1.236 写 keychain、读文件(这个镜像正是为那条分裂而存在),而 2.1.274 在 macOS 上读写 keychain,2.1.272 在 Linux 上读写作用域文件。因此文件对本包自己的探针与容器轮仍是权威;keychain 才是当前 macOS 上宿主 CLI 真正用的那个。认证探测只做轻量文件检查——看作用域 `.claude.json` 的 `oauthAccount`,绝不为了探测而 spawn CLI。该探测同样会协调两个存储,因此遵守与 spawn 点一致的新者胜规则:它在每次状态读与每次就绪检查时都会跑,那里若是无条件镜像,同样会把容器轮的续期抹掉。
103
111
 
104
- **会话记录。** `/claude-code sessions` 列出作用域目录下的 `projects/<cwd-slug>/<uuid>.jsonl` 会话文件——即本 agent 的委派,绝不是你的私人会话。slug 是工作区路径的有损编码,所以列出的 `workDir` 取自文件内容(第一条 `user` 事件的 `cwd` 字段),绝不取自目录名。设置面板呈现同一份列表并收窄到当前工作区。
112
+ **会话记录。** `/claude-code sessions` 列出作用域目录下的 `projects/<cwd-slug>/<uuid>.jsonl` 会话文件——即本 agent 的委派,绝不是你的私人会话。slug 是工作区路径的有损编码,所以列出的 `workDir` 取自文件内容(第一条 `user` 事件的 `cwd` 字段),绝不取自目录名。设置面板呈现同一份列表并收窄到当前工作区。
105
113
 
106
- **续聊安全。** 句柄绝不进 prompt:它只从 `resume` 参数读取,localAgent registry 只对记录该委派的同一 parent 会话与 provider 解析句柄——伪造的句柄(未知子会话、他人 parent 的会话、或错误的 provider)在任何 CLI 进程启动前就被拒绝。
114
+ **续聊安全。** 句柄绝不进 prompt:它只从 `resume` 参数读取,localAgent registry 只对记录该委派的同一 parent 会话与 provider 解析句柄——伪造的句柄(未知子会话、他人 parent 的会话、或错误的 provider)在任何 CLI 进程启动前就被拒绝。
107
115
 
108
- **流镜像与记账。** `thinking` 块折叠为 `reasoning` 块、`tool_use`/`tool_result` 为工具行(`[工具 Bash] <command> → output`)、回复 `text` 为 assistant 文本;续聊轮各自追加自己的 turn,不会重复。编辑类调用(Edit/Write/MultiEdit/NotebookEdit)折叠为 ApplyPatch 式卡片——路径在参数行,真正的改动(旧/新串或整个文件体)在卡身,与 codex 的 fileChange 镜像同一形态;服务端工具(`server_tool_use` 的 web_search/web_fetch)与其结果按 id 配对成可见的 WebSearch/WebFetch 卡;`redacted_thinking` 折叠为一行可见的占位思考(内容按设计由服务端加密,不可见——行内注明);其余工具的输入取单一标量摘要,取不到就给一份截断的 JSON 摘要而不是丢空。每个镜像 step 都包在同 (turn, step) 的 `step/start`–`step/end` 边界对内——宿主实时会话视图只在边界上登记 step,缺了边界 assistant 消息要等整页重建才渲染。provider 在 spawn 时开 `turn/start`、settle 时关 `turn/end`——失败与被取消同样关闭——因此 `subagentTiming` 时长等于实际 CLI 运行时长,不会留下未闭合窗口;最终 `assistant/message` 携带从 JSON 结果解析的 token 用量(`input_tokens`、`output_tokens`、`cache_read_input_tokens`、`cache_creation_input_tokens`——Anthropic 各桶独立上报)。
116
+ **流镜像与记账。** `thinking` 块折叠为 `reasoning` 块、`tool_use`/`tool_result` 为工具行(`[工具 Bash] <command> → output`)、回复 `text` 为 assistant 文本;续聊轮各自追加自己的 turn,不会重复。编辑类调用(Edit/Write/MultiEdit/NotebookEdit)折叠为 ApplyPatch 式卡片——路径在参数行,真正的改动(旧/新串或整个文件体)在卡身,与 codex 的 fileChange 镜像同一形态;服务端工具(`server_tool_use` 的 web_search/web_fetch)与其结果按 id 配对成可见的 WebSearch/WebFetch 卡;`redacted_thinking` 折叠为一行可见的占位思考(内容按设计由服务端加密,不可见——行内注明);其余工具的输入取单一标量摘要,取不到就给一份截断的 JSON 摘要而不是丢空。每个镜像 step 都包在同 (turn, step) 的 `step/start`–`step/end` 边界对内——宿主实时会话视图只在边界上登记 step,缺了边界 assistant 消息要等整页重建才渲染。provider 在 spawn 时开 `turn/start`、settle 时关 `turn/end`——失败与被取消同样关闭——因此 `subagentTiming` 时长等于实际 CLI 运行时长,不会留下未闭合窗口;最终 `assistant/message` 携带从 JSON 结果解析的 token 用量(`input_tokens`、`output_tokens`、`cache_read_input_tokens`、`cache_creation_input_tokens`——Anthropic 各桶独立上报)。
109
117
 
110
- **模型体验。** 子会话是委派会话工作区内一个全新的一次性 `claude -p`;父级只提交独立的任务文本,只看到最终回答或精确错误,以及首次委派时的续聊自述——Claude 的评论、工具活动、工作区 diff 不会复制进父级。子会话 token 永不进入父级上下文;子会话为独立的 Claude 上下文与回合付费(缓存复用只取决于作用域安装自身的 provider、模型与历史);父级 KV cache 不受影响。
118
+ **模型体验。** 子会话是委派会话工作区内一个全新的一次性 `claude -p`;父级只提交独立的任务文本,只看到最终回答或精确错误,以及首次委派时的续聊自述——Claude 的评论、工具活动、工作区 diff 不会复制进父级。子会话 token 永不进入父级上下文;子会话为独立的 Claude 上下文与回合付费(缓存复用只取决于作用域安装自身的 provider、模型与历史);父级 KV cache 不受影响。
111
119
 
112
- **长驻驱动(`live: true`)。** 替代每轮 spawn:成员首轮委派拉起一个常驻 stream-json 进程(`claude -p --verbose --input-format stream-json --output-format stream-json`),第一条 stdin `user` 消息触发 `system/init`(server 分配 session id,即委派记录的 `cliSessionId`),之后每轮 = 一条 stdin 消息;事件流与 exec 的 stream-json **完全同形**,逐轮过同一个 `ClaudeStreamParser` 折叠(末行留置到 `result` 挂用量,与 exec 一致),`cancel` 落地为 `control_request interrupt`——进程不死、会话可续。回收阶梯是 stdin EOF → SIGTERM;崩溃后下一轮以 `--resume <session_id>` 重挂盘上会话。runtime 在 spawn 时绑定成员的生效模型(会话级覆盖 → 委派模型 → 设置键),并把它暂写进作用域 `settings.json`(`--resume` 重挂认文件不认旗标);绑定模型与新一轮解析不一致的 runtime 先退役再重挂。`permissionMode: normal` 的 spawn 不带 `--dangerously-skip-permissions`,CLI 的 server→client 控制请求(`can_use_tool` 审批面)由驱动自动应答 allow——子代理没有审批面,与 exec 在 skip 下的有效行为一致;其余子类型应答 error 而不是沉默挂起。授权纪律与 exec 逐字一致:只注入作用域 `CLAUDE_CONFIG_DIR`(与可选的 `baseUrl` 覆盖),绝不碰全局 `~/.claude`,绝不执行任何 `auth` 命令。
120
+ **长驻驱动(`live: true`)。** 替代每轮 spawn:成员首轮委派拉起一个常驻 stream-json 进程(`claude -p --verbose --input-format stream-json --output-format stream-json`),第一条 stdin `user` 消息触发 `system/init`(server 分配 session id,即委派记录的 `cliSessionId`),之后每轮 = 一条 stdin 消息;事件流与 exec 的 stream-json **完全同形**,逐轮过同一个 `ClaudeStreamParser` 折叠(末行留置到 `result` 挂用量,与 exec 一致),`cancel` 落地为 `control_request interrupt`——进程不死、会话可续。回收阶梯是 stdin EOF → SIGTERM;崩溃后下一轮以 `--resume <session_id>` 重挂盘上会话。runtime 在 spawn 时绑定成员的生效模型(会话级覆盖 → 委派模型 → 设置键),并把它暂写进作用域 `settings.json`(`--resume` 重挂认文件不认旗标);绑定模型与新一轮解析不一致的 runtime 先退役再重挂。`permissionMode: normal` 的 spawn 不带 `--dangerously-skip-permissions`,CLI 的 server→client 控制请求(`can_use_tool` 审批面)由驱动自动应答 allow——子代理没有审批面,与 exec 在 skip 下的有效行为一致;其余子类型应答 error 而不是沉默挂起。授权纪律与 exec 逐字一致:只注入作用域 `CLAUDE_CONFIG_DIR`(与可选的 `baseUrl` 覆盖),绝不碰全局 `~/.claude`,绝不执行任何 `auth` 命令。
113
121
 
114
- **配置注意。** 宿主环境是启动时的快照——之后在别的 shell 里 `export ANTHROPIC_BASE_URL` 对运行中的进程无效,除非重启宿主;排查路由异常时检查宿主的实际环境而非你当前的 shell。每次委派在 info 级别记录有效端点(`subagent-claude: delegating via <endpoint>`),失败运行的报错文本会点名它。`skip` 作为默认是因为一次性 CLI 子代理没有审批面;委派需要被限制时,给宿主自身套沙箱(例如在沙箱化工作区内运行 dsh 宿主)。
122
+ **配置注意。** 宿主环境是启动时的快照——之后在别的 shell 里 `export ANTHROPIC_BASE_URL` 对运行中的进程无效,除非重启宿主;排查路由异常时检查宿主的实际环境而非你当前的 shell。每次委派在 info 级别记录有效端点(`subagent-claude: delegating via <endpoint>`),失败运行的报错文本会点名它。`skip` 作为默认是因为一次性 CLI 子代理没有审批面;委派需要被限制时,给宿主自身套沙箱(例如在沙箱化工作区内运行 dsh 宿主)。
115
123
 
116
124
  </details>
117
125
 
118
126
  ## 开发
119
127
 
120
- 隶属 [dsh-plugins](https://github.com/Khorsheed/dsh-plugins) monorepo(`packages/local-agent-claude-code`)。问题与贡献请移步该仓库。
128
+ 隶属 [dsh-plugins](https://github.com/Khorsheed/dsh-plugins) monorepo(`packages/local-agent-claude-code`)。问题与贡献请移步该仓库。
package/lib/client.js CHANGED
@@ -233,7 +233,7 @@ window.__ModuleLoader__.load({
233
233
  }
234
234
  //#endregion
235
235
  //#region \0dsh-css:../local-agent/src/client/ProviderAuthBlock.module.css.mjs
236
- const css$2 = ".On5p7W_section{max-width:720px;color:var(--dsw-alias-label-primary);flex-direction:column;gap:4px;display:flex}.On5p7W_title{color:var(--dsw-alias-label-primary);margin:0;font-size:16px;font-weight:500;line-height:24px}.On5p7W_intro{color:var(--dsw-alias-label-tertiary);margin:0;font-size:14px;line-height:22px}.On5p7W_rows{flex-direction:column;gap:8px;margin:12px 0 0;padding:0;list-style:none;display:flex}.On5p7W_rowCard{border:1px solid var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;gap:10px;padding:12px 14px;display:flex}.On5p7W_rowPending{opacity:.6}.On5p7W_rowHead{align-items:center;gap:10px;display:flex}.On5p7W_rowIdentity{align-items:center;gap:6px;min-width:0;display:inline-flex}.On5p7W_rowName{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px}.On5p7W_rowTag{border:1px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:1px 6px;font-size:11px;line-height:16px}.On5p7W_credentialDot{box-sizing:border-box;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.On5p7W_dotOn{background:var(--dsw-alias-state-success-primary)}.On5p7W_dotOff{background:var(--dsw-alias-state-error-primary)}.On5p7W_dotPending{background:var(--dsw-alias-fill-l3)}.On5p7W_status{color:var(--dsw-alias-label-tertiary);flex:none;margin-left:auto;font-size:12px;line-height:18px}.On5p7W_rowActions{align-items:center;gap:4px;display:inline-flex}.On5p7W_loginButton{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:14px;justify-content:center;align-items:center;padding:0 12px;font-size:12px;line-height:18px;display:inline-flex}.On5p7W_loginButton:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l3)}.On5p7W_loginButton:disabled{color:var(--dsw-alias-label-tertiary);border-color:var(--dsw-alias-border-l2);cursor:not-allowed}.On5p7W_logoutButton{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-state-error-primary);cursor:pointer;background:0 0;border-radius:14px;justify-content:center;align-items:center;padding:0 12px;font-size:12px;line-height:18px;display:inline-flex}.On5p7W_logoutButton:hover{border-color:var(--dsw-alias-state-error-primary)}.On5p7W_rosterError{color:var(--dsw-alias-state-error-primary);align-items:center;gap:10px;margin:8px 0 0;font-size:12px;line-height:18px;display:flex}.On5p7W_retryButton{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:12px;justify-content:center;align-items:center;padding:0 10px;font-size:12px;line-height:18px;display:inline-flex}.On5p7W_retryButton:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l3)}.On5p7W_loginPrompt{align-items:flex-start;gap:10px;display:flex}.On5p7W_promptText{min-width:0;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;flex:1;font-size:12px;line-height:18px}.On5p7W_codeInput{border:1px solid var(--dsw-alias-line-normal,currentColor);min-width:0;color:inherit;background:0 0;border-radius:6px;flex:1;padding:4px 8px;font-size:12px;line-height:18px}.On5p7W_openPage{color:var(--dsw-alias-accent-link);flex:none;font-size:12px;line-height:18px;text-decoration:none}.On5p7W_openPage:hover{text-decoration:underline}";
236
+ const css$2 = ".n6PEuW_section{max-width:720px;color:var(--dsw-alias-label-primary);flex-direction:column;gap:4px;display:flex}.n6PEuW_title{color:var(--dsw-alias-label-primary);margin:0;font-size:16px;font-weight:500;line-height:24px}.n6PEuW_intro{color:var(--dsw-alias-label-tertiary);margin:0;font-size:14px;line-height:22px}.n6PEuW_rows{flex-direction:column;gap:8px;margin:12px 0 0;padding:0;list-style:none;display:flex}.n6PEuW_rowCard{border:1px solid var(--dsw-alias-border-l2);border-radius:12px;flex-direction:column;gap:10px;padding:12px 14px;display:flex}.n6PEuW_rowPending{opacity:.6}.n6PEuW_rowHead{align-items:center;gap:10px;display:flex}.n6PEuW_rowIdentity{align-items:center;gap:6px;min-width:0;display:inline-flex}.n6PEuW_rowName{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:500;line-height:22px}.n6PEuW_rowTag{border:1px solid var(--dsw-alias-border-l3);color:var(--dsw-alias-label-secondary);border-radius:4px;flex:none;padding:1px 6px;font-size:11px;line-height:16px}.n6PEuW_credentialDot{box-sizing:border-box;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.n6PEuW_dotOn{background:var(--dsw-alias-state-success-primary)}.n6PEuW_dotOff{background:var(--dsw-alias-state-error-primary)}.n6PEuW_dotPending{background:var(--dsw-alias-fill-l3)}.n6PEuW_status{color:var(--dsw-alias-label-tertiary);flex:none;margin-left:auto;font-size:12px;line-height:18px}.n6PEuW_rowActions{align-items:center;gap:4px;display:inline-flex}.n6PEuW_loginButton{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:14px;justify-content:center;align-items:center;padding:0 12px;font-size:12px;line-height:18px;display:inline-flex}.n6PEuW_loginButton:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l3)}.n6PEuW_loginButton:disabled{color:var(--dsw-alias-label-tertiary);border-color:var(--dsw-alias-border-l2);cursor:not-allowed}.n6PEuW_logoutButton{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:28px;color:var(--dsw-alias-state-error-primary);cursor:pointer;background:0 0;border-radius:14px;justify-content:center;align-items:center;padding:0 12px;font-size:12px;line-height:18px;display:inline-flex}.n6PEuW_logoutButton:hover{border-color:var(--dsw-alias-state-error-primary)}.n6PEuW_rosterError{color:var(--dsw-alias-state-error-primary);align-items:center;gap:10px;margin:8px 0 0;font-size:12px;line-height:18px;display:flex}.n6PEuW_retryButton{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:12px;justify-content:center;align-items:center;padding:0 10px;font-size:12px;line-height:18px;display:inline-flex}.n6PEuW_retryButton:hover{color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l3)}.n6PEuW_loginPrompt{align-items:flex-start;gap:10px;display:flex}.n6PEuW_promptText{min-width:0;color:var(--dsw-alias-label-tertiary);overflow-wrap:anywhere;flex:1;font-size:12px;line-height:18px}.n6PEuW_codeInput{border:1px solid var(--dsw-alias-line-normal,currentColor);min-width:0;color:inherit;background:0 0;border-radius:6px;flex:1;padding:4px 8px;font-size:12px;line-height:18px}.n6PEuW_openPage{color:var(--dsw-alias-accent-link);flex:none;font-size:12px;line-height:18px;text-decoration:none}.n6PEuW_openPage:hover{text-decoration:underline}";
237
237
  const tagId$2 = "@khorsheed/dsh-local-agent-claude-code/ProviderAuthBlock.module.css";
238
238
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
239
239
  const tag = document.createElement("style");
@@ -243,30 +243,30 @@ window.__ModuleLoader__.load({
243
243
  document.head.appendChild(tag);
244
244
  }
245
245
  var ProviderAuthBlock_module_css_default = {
246
- "rowHead": "On5p7W_rowHead",
247
- "rowActions": "On5p7W_rowActions",
248
- "loginPrompt": "On5p7W_loginPrompt",
249
- "promptText": "On5p7W_promptText",
250
- "codeInput": "On5p7W_codeInput",
251
- "retryButton": "On5p7W_retryButton",
252
- "logoutButton": "On5p7W_logoutButton",
253
- "rowName": "On5p7W_rowName",
254
- "rowCard": "On5p7W_rowCard",
255
- "rowTag": "On5p7W_rowTag",
256
- "rowPending": "On5p7W_rowPending",
257
- "status": "On5p7W_status",
258
- "rowIdentity": "On5p7W_rowIdentity",
259
- "dotOff": "On5p7W_dotOff",
260
- "loginButton": "On5p7W_loginButton",
261
- "credentialDot": "On5p7W_credentialDot",
262
- "section": "On5p7W_section",
263
- "title": "On5p7W_title",
264
- "rosterError": "On5p7W_rosterError",
265
- "openPage": "On5p7W_openPage",
266
- "dotOn": "On5p7W_dotOn",
267
- "dotPending": "On5p7W_dotPending",
268
- "intro": "On5p7W_intro",
269
- "rows": "On5p7W_rows"
246
+ "rows": "n6PEuW_rows",
247
+ "status": "n6PEuW_status",
248
+ "dotOn": "n6PEuW_dotOn",
249
+ "loginButton": "n6PEuW_loginButton",
250
+ "rowTag": "n6PEuW_rowTag",
251
+ "codeInput": "n6PEuW_codeInput",
252
+ "title": "n6PEuW_title",
253
+ "rowName": "n6PEuW_rowName",
254
+ "credentialDot": "n6PEuW_credentialDot",
255
+ "dotPending": "n6PEuW_dotPending",
256
+ "rowIdentity": "n6PEuW_rowIdentity",
257
+ "intro": "n6PEuW_intro",
258
+ "dotOff": "n6PEuW_dotOff",
259
+ "rowHead": "n6PEuW_rowHead",
260
+ "rowPending": "n6PEuW_rowPending",
261
+ "rowActions": "n6PEuW_rowActions",
262
+ "logoutButton": "n6PEuW_logoutButton",
263
+ "retryButton": "n6PEuW_retryButton",
264
+ "loginPrompt": "n6PEuW_loginPrompt",
265
+ "rowCard": "n6PEuW_rowCard",
266
+ "openPage": "n6PEuW_openPage",
267
+ "section": "n6PEuW_section",
268
+ "promptText": "n6PEuW_promptText",
269
+ "rosterError": "n6PEuW_rosterError"
270
270
  };
271
271
  //#endregion
272
272
  //#region ../local-agent/src/client/ProviderAuthBlock.tsx
@@ -529,7 +529,7 @@ window.__ModuleLoader__.load({
529
529
  }
530
530
  //#endregion
531
531
  //#region \0dsh-css:../local-agent/src/client/AuthStatusDot.module.css.mjs
532
- const css$1 = ".OFjNUG_credentialDot{box-sizing:border-box;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.OFjNUG_dotOn{background:var(--dsw-alias-state-success-primary)}.OFjNUG_dotOff{background:var(--dsw-alias-state-error-primary)}.OFjNUG_dotPending{background:var(--dsw-alias-fill-l3)}";
532
+ const css$1 = ".TFxvHa_credentialDot{box-sizing:border-box;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.TFxvHa_dotOn{background:var(--dsw-alias-state-success-primary)}.TFxvHa_dotOff{background:var(--dsw-alias-state-error-primary)}.TFxvHa_dotPending{background:var(--dsw-alias-fill-l3)}";
533
533
  const tagId$1 = "@khorsheed/dsh-local-agent-claude-code/AuthStatusDot.module.css";
534
534
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
535
535
  const tag = document.createElement("style");
@@ -539,10 +539,10 @@ window.__ModuleLoader__.load({
539
539
  document.head.appendChild(tag);
540
540
  }
541
541
  var AuthStatusDot_module_css_default = {
542
- "dotOn": "OFjNUG_dotOn",
543
- "credentialDot": "OFjNUG_credentialDot",
544
- "dotPending": "OFjNUG_dotPending",
545
- "dotOff": "OFjNUG_dotOff"
542
+ "dotOn": "TFxvHa_dotOn",
543
+ "credentialDot": "TFxvHa_credentialDot",
544
+ "dotOff": "TFxvHa_dotOff",
545
+ "dotPending": "TFxvHa_dotPending"
546
546
  };
547
547
  //#endregion
548
548
  //#region ../local-agent/src/client/AuthStatusDot.tsx
@@ -558,7 +558,7 @@ window.__ModuleLoader__.load({
558
558
  }
559
559
  //#endregion
560
560
  //#region \0dsh-css:src/client/SettingsCard.module.css.mjs
561
- const css = ".C-VWHa_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.C-VWHa_card:hover{border-color:var(--dsw-alias-label-dimmed)}.C-VWHa_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.C-VWHa_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.C-VWHa_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.C-VWHa_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.C-VWHa_nameRow{align-items:center;gap:6px;display:flex}.C-VWHa_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.C-VWHa_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.C-VWHa_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.C-VWHa_chevronOpen{transform:rotate(180deg)}.C-VWHa_body{border-top:1px solid var(--dsw-alias-border-l2);flex-direction:column;gap:14px;margin:0 16px;padding:12px 0 8px;display:flex}.C-VWHa_block{flex-direction:column;gap:10px;display:flex}.C-VWHa_blockTitle{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;margin:0;font-size:13px;font-weight:500;line-height:1.4;display:flex}.C-VWHa_info{appearance:none;color:var(--dsw-alias-label-tertiary);cursor:help;background:0 0;border:0;border-radius:50%;padding:0 2px;font-size:12px;line-height:1}.C-VWHa_info:hover,.C-VWHa_info:focus-visible{color:var(--dsw-alias-label-primary)}.C-VWHa_row{align-items:center;gap:12px;display:flex}.C-VWHa_rowLabel{color:var(--dsw-alias-label-primary);align-items:center;gap:4px;font-size:13px;line-height:1.4;display:inline-flex}.C-VWHa_switch{border:1px solid color-mix(in srgb, currentColor 30%, transparent);background:color-mix(in srgb, currentColor 12%, transparent);cursor:pointer;width:2.25rem;height:1.25rem;color:var(--dsw-alias-label-primary);border-radius:999px;flex:none;align-self:center;padding:.125rem;transition:background .12s}.C-VWHa_switch:disabled{opacity:.5;cursor:default}.C-VWHa_switchOn{background:color-mix(in srgb, var(--dsh-accent,#4f8cff) 70%, transparent)}.C-VWHa_knob{background:var(--dsh-surface,#fff);border-radius:999px;width:.9375rem;height:.9375rem;transition:transform .12s;display:block}.C-VWHa_switchOn .C-VWHa_knob{transform:translate(.9375rem)}.C-VWHa_saved{color:var(--dsw-alias-state-success-primary);font-size:12px}.C-VWHa_errorText{color:var(--dsw-alias-state-error-primary);font-size:12px}.C-VWHa_hint{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5}.C-VWHa_modelInput{min-width:0;font:inherit;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:5px 8px;font-size:13px;line-height:1.4}.C-VWHa_modelInput::placeholder{color:var(--dsw-alias-label-caption);opacity:1}.C-VWHa_modelInput:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.C-VWHa_modelInput:disabled{opacity:.5}.C-VWHa_modelField{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex:1;align-items:center;min-width:0;display:flex;position:relative}.C-VWHa_modelField:focus-within{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.C-VWHa_modelField .C-VWHa_modelInput{background:0 0;border:0;border-radius:0}.C-VWHa_modelField .C-VWHa_modelInput:focus-visible{outline:none}.C-VWHa_modelMenuButton{width:24px;height:24px;color:var(--dsw-alias-label-caption);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;margin-right:4px;display:flex}.C-VWHa_modelMenuButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.C-VWHa_modelMenuButton:disabled{opacity:.5;cursor:default}.C-VWHa_modelMenuChevron{transition:transform .16s}.C-VWHa_modelMenuChevronOpen{transform:rotate(180deg)}.C-VWHa_modelMenu{z-index:10;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l2));background:var(--dsw-specific-menu,var(--dsw-alias-bg-layer-2,var(--dsw-alias-bg-layer-1,#fff)));min-width:160px;max-height:240px;backdrop-filter:var(--dsw-menu-backdrop-filter,blur(20px));box-shadow:var(--dsw-elevation-prominent,var(--dsw-shadow-lv3,0 0 1px 0 #0003, 0 0 4px 0 #00000005, 0 12px 32px 0 #00000014));border-radius:12px;flex-direction:column;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow-y:auto}.C-VWHa_modelMenuUp{top:auto;bottom:calc(100% + 6px)}.C-VWHa_modelItem,.C-VWHa_modelItemCurrent,.C-VWHa_modelItemDefault{color:var(--dsw-alias-label-primary);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;line-height:18px;display:flex;overflow:hidden}.C-VWHa_modelItem:hover,.C-VWHa_modelItemCurrent:hover,.C-VWHa_modelItemDefault:hover{background:var(--dsw-alias-interactive-bg-hover)}.C-VWHa_modelItemCurrent{font-weight:560}.C-VWHa_modelItemLabel{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.C-VWHa_modelItemCheck{text-align:center;width:14px;color:var(--dsw-alias-label-secondary);flex:none}.C-VWHa_modelItemDefault{color:var(--dsw-alias-label-secondary);box-shadow:0 1px 0 var(--dsw-alias-border-l2);border-radius:8px 8px 0 0;margin-bottom:2px;padding-bottom:7px}.C-VWHa_modelSave{appearance:none;font:inherit;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;flex:none;padding:5px 10px;font-size:13px;line-height:1.4}.C-VWHa_modelSave:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed)}.C-VWHa_modelSave:disabled{opacity:.5;cursor:default}";
561
+ const css = ".fVJ3ya_card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.fVJ3ya_card:hover{border-color:var(--dsw-alias-label-dimmed)}.fVJ3ya_cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.fVJ3ya_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.fVJ3ya_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.fVJ3ya_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.fVJ3ya_nameRow{align-items:center;gap:6px;display:flex}.fVJ3ya_name{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.fVJ3ya_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.fVJ3ya_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.fVJ3ya_chevronOpen{transform:rotate(180deg)}.fVJ3ya_body{border-top:1px solid var(--dsw-alias-border-l2);flex-direction:column;gap:14px;margin:0 16px;padding:12px 0 8px;display:flex}.fVJ3ya_block{flex-direction:column;gap:10px;display:flex}.fVJ3ya_blockTitle{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;margin:0;font-size:13px;font-weight:500;line-height:1.4;display:flex}.fVJ3ya_info{appearance:none;color:var(--dsw-alias-label-tertiary);cursor:help;background:0 0;border:0;border-radius:50%;padding:0 2px;font-size:12px;line-height:1}.fVJ3ya_info:hover,.fVJ3ya_info:focus-visible{color:var(--dsw-alias-label-primary)}.fVJ3ya_row{align-items:center;gap:12px;display:flex}.fVJ3ya_rowLabel{color:var(--dsw-alias-label-primary);align-items:center;gap:4px;font-size:13px;line-height:1.4;display:inline-flex}.fVJ3ya_switch{border:1px solid color-mix(in srgb, currentColor 30%, transparent);background:color-mix(in srgb, currentColor 12%, transparent);cursor:pointer;width:2.25rem;height:1.25rem;color:var(--dsw-alias-label-primary);border-radius:999px;flex:none;align-self:center;padding:.125rem;transition:background .12s}.fVJ3ya_switch:disabled{opacity:.5;cursor:default}.fVJ3ya_switchOn{background:color-mix(in srgb, var(--dsh-accent,#4f8cff) 70%, transparent)}.fVJ3ya_knob{background:var(--dsh-surface,#fff);border-radius:999px;width:.9375rem;height:.9375rem;transition:transform .12s;display:block}.fVJ3ya_switchOn .fVJ3ya_knob{transform:translate(.9375rem)}.fVJ3ya_saved{color:var(--dsw-alias-state-success-primary);font-size:12px}.fVJ3ya_errorText{color:var(--dsw-alias-state-error-primary);font-size:12px}.fVJ3ya_hint{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5}.fVJ3ya_modelInput{min-width:0;font:inherit;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);border-radius:8px;flex:1;padding:5px 8px;font-size:13px;line-height:1.4}.fVJ3ya_modelInput::placeholder{color:var(--dsw-alias-label-caption);opacity:1}.fVJ3ya_modelInput:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.fVJ3ya_modelInput:disabled{opacity:.5}.fVJ3ya_modelField{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:8px;flex:1;align-items:center;min-width:0;display:flex;position:relative}.fVJ3ya_modelField:focus-within{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.fVJ3ya_modelField .fVJ3ya_modelInput{background:0 0;border:0;border-radius:0}.fVJ3ya_modelField .fVJ3ya_modelInput:focus-visible{outline:none}.fVJ3ya_modelMenuButton{width:24px;height:24px;color:var(--dsw-alias-label-caption);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;justify-content:center;align-items:center;margin-right:4px;display:flex}.fVJ3ya_modelMenuButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.fVJ3ya_modelMenuButton:disabled{opacity:.5;cursor:default}.fVJ3ya_modelMenuChevron{transition:transform .16s}.fVJ3ya_modelMenuChevronOpen{transform:rotate(180deg)}.fVJ3ya_modelMenu{z-index:10;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l2));background:var(--dsw-specific-menu,var(--dsw-alias-bg-layer-2,var(--dsw-alias-bg-layer-1,#fff)));min-width:160px;max-height:240px;backdrop-filter:var(--dsw-menu-backdrop-filter,blur(20px));box-shadow:var(--dsw-elevation-prominent,var(--dsw-shadow-lv3,0 0 1px 0 #0003, 0 0 4px 0 #00000005, 0 12px 32px 0 #00000014));border-radius:12px;flex-direction:column;padding:4px;display:flex;position:absolute;top:calc(100% + 6px);left:0;right:0;overflow-y:auto}.fVJ3ya_modelMenuUp{top:auto;bottom:calc(100% + 6px)}.fVJ3ya_modelItem,.fVJ3ya_modelItemCurrent,.fVJ3ya_modelItemDefault{color:var(--dsw-alias-label-primary);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:8px;align-items:center;gap:8px;padding:6px 10px;font-size:12px;line-height:18px;display:flex;overflow:hidden}.fVJ3ya_modelItem:hover,.fVJ3ya_modelItemCurrent:hover,.fVJ3ya_modelItemDefault:hover{background:var(--dsw-alias-interactive-bg-hover)}.fVJ3ya_modelItemCurrent{font-weight:560}.fVJ3ya_modelItemLabel{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.fVJ3ya_modelItemCheck{text-align:center;width:14px;color:var(--dsw-alias-label-secondary);flex:none}.fVJ3ya_modelItemDefault{color:var(--dsw-alias-label-secondary);box-shadow:0 1px 0 var(--dsw-alias-border-l2);border-radius:8px 8px 0 0;margin-bottom:2px;padding-bottom:7px}.fVJ3ya_modelSave{appearance:none;font:inherit;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);cursor:pointer;border-radius:8px;flex:none;padding:5px 10px;font-size:13px;line-height:1.4}.fVJ3ya_modelSave:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed)}.fVJ3ya_modelSave:disabled{opacity:.5;cursor:default}";
562
562
  const tagId = "@khorsheed/dsh-local-agent-claude-code/SettingsCard.module.css";
563
563
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
564
564
  const tag = document.createElement("style");
@@ -568,40 +568,40 @@ window.__ModuleLoader__.load({
568
568
  document.head.appendChild(tag);
569
569
  }
570
570
  var SettingsCard_module_css_default = {
571
- "chevronOpen": "C-VWHa_chevronOpen",
572
- "errorText": "C-VWHa_errorText",
573
- "modelMenuUp": "C-VWHa_modelMenuUp",
574
- "info": "C-VWHa_info",
575
- "knob": "C-VWHa_knob",
576
- "switch": "C-VWHa_switch",
577
- "blockTitle": "C-VWHa_blockTitle",
578
- "saved": "C-VWHa_saved",
579
- "modelMenuButton": "C-VWHa_modelMenuButton",
580
- "modelItemDefault": "C-VWHa_modelItemDefault",
581
- "description": "C-VWHa_description",
582
- "block": "C-VWHa_block",
583
- "rowLabel": "C-VWHa_rowLabel",
584
- "modelItem": "C-VWHa_modelItem",
585
- "modelItemLabel": "C-VWHa_modelItemLabel",
586
- "modelSave": "C-VWHa_modelSave",
587
- "modelMenu": "C-VWHa_modelMenu",
588
- "card": "C-VWHa_card",
589
- "header": "C-VWHa_header",
590
- "modelField": "C-VWHa_modelField",
591
- "row": "C-VWHa_row",
592
- "nameRow": "C-VWHa_nameRow",
593
- "body": "C-VWHa_body",
594
- "cardOpen": "C-VWHa_cardOpen",
595
- "modelMenuChevronOpen": "C-VWHa_modelMenuChevronOpen",
596
- "chevron": "C-VWHa_chevron",
597
- "modelMenuChevron": "C-VWHa_modelMenuChevron",
598
- "name": "C-VWHa_name",
599
- "headText": "C-VWHa_headText",
600
- "modelItemCurrent": "C-VWHa_modelItemCurrent",
601
- "modelItemCheck": "C-VWHa_modelItemCheck",
602
- "hint": "C-VWHa_hint",
603
- "modelInput": "C-VWHa_modelInput",
604
- "switchOn": "C-VWHa_switchOn"
571
+ "saved": "fVJ3ya_saved",
572
+ "chevronOpen": "fVJ3ya_chevronOpen",
573
+ "cardOpen": "fVJ3ya_cardOpen",
574
+ "modelField": "fVJ3ya_modelField",
575
+ "chevron": "fVJ3ya_chevron",
576
+ "card": "fVJ3ya_card",
577
+ "modelMenuUp": "fVJ3ya_modelMenuUp",
578
+ "headText": "fVJ3ya_headText",
579
+ "modelMenuButton": "fVJ3ya_modelMenuButton",
580
+ "errorText": "fVJ3ya_errorText",
581
+ "row": "fVJ3ya_row",
582
+ "name": "fVJ3ya_name",
583
+ "nameRow": "fVJ3ya_nameRow",
584
+ "info": "fVJ3ya_info",
585
+ "modelItemCurrent": "fVJ3ya_modelItemCurrent",
586
+ "description": "fVJ3ya_description",
587
+ "blockTitle": "fVJ3ya_blockTitle",
588
+ "modelSave": "fVJ3ya_modelSave",
589
+ "modelMenuChevron": "fVJ3ya_modelMenuChevron",
590
+ "modelMenu": "fVJ3ya_modelMenu",
591
+ "modelMenuChevronOpen": "fVJ3ya_modelMenuChevronOpen",
592
+ "header": "fVJ3ya_header",
593
+ "rowLabel": "fVJ3ya_rowLabel",
594
+ "modelInput": "fVJ3ya_modelInput",
595
+ "modelItemCheck": "fVJ3ya_modelItemCheck",
596
+ "body": "fVJ3ya_body",
597
+ "knob": "fVJ3ya_knob",
598
+ "switch": "fVJ3ya_switch",
599
+ "switchOn": "fVJ3ya_switchOn",
600
+ "modelItemDefault": "fVJ3ya_modelItemDefault",
601
+ "modelItem": "fVJ3ya_modelItem",
602
+ "modelItemLabel": "fVJ3ya_modelItemLabel",
603
+ "block": "fVJ3ya_block",
604
+ "hint": "fVJ3ya_hint"
605
605
  };
606
606
  //#endregion
607
607
  //#region src/client/SettingsCard.tsx
package/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "local-agent",
9
9
  "claude-code"
10
10
  ],
11
- "version": "0.1.0-rc.6",
11
+ "version": "0.1.0-rc.7",
12
12
  "type": "module",
13
13
  "main": "lib/index.js",
14
14
  "types": "lib/types/index.d.ts",
@@ -60,12 +60,13 @@
60
60
  "files": [
61
61
  "lib",
62
62
  "cordis.patch.yml",
63
- "locale/*.json"
63
+ "locale/*.json",
64
+ "CHANGELOG.md"
64
65
  ],
65
66
  "license": "MIT",
66
67
  "dependencies": {
67
- "@khorsheed/dsh-local-agent": "^0.1.0-rc.6",
68
- "@khorsheed/dsh-local-agent-tool-subagent": "^0.1.0-rc.6"
68
+ "@khorsheed/dsh-local-agent": "^0.1.0-rc.7",
69
+ "@khorsheed/dsh-local-agent-tool-subagent": "^0.1.0-rc.7"
69
70
  },
70
71
  "peerDependencies": {
71
72
  "@deepseek-ai/cordis": "^4.0.1",