relay-dsh-plugin-claude 0.1.0 → 0.1.1-rc.3

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 yangbobo2021 and Relay contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,7 +1,24 @@
1
1
  # Claude Code Conversations for DeepSeek Harness
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/relay-dsh-plugin-claude?label=npm)](https://www.npmjs.com/package/relay-dsh-plugin-claude)
4
+ [![CI](https://github.com/yangbobo2021/relay-dsh-plugin-claude/actions/workflows/ci.yml/badge.svg)](https://github.com/yangbobo2021/relay-dsh-plugin-claude/actions/workflows/ci.yml)
5
+ [![npm downloads](https://img.shields.io/npm/dm/relay-dsh-plugin-claude?label=downloads)](https://www.npmjs.com/package/relay-dsh-plugin-claude)
6
+ [![GitHub stars](https://img.shields.io/github/stars/yangbobo2021/relay-dsh-plugin-claude?style=flat)](https://github.com/yangbobo2021/relay-dsh-plugin-claude/stargazers)
7
+ [![MIT license](https://img.shields.io/github/license/yangbobo2021/relay-dsh-plugin-claude)](LICENSE)
8
+ [![DSH compatibility](https://img.shields.io/badge/DSH-0.1.1--rc.2-2f7d68)](https://github.com/deepseek-ai/deepseek-harness)
9
+ [![npm provenance](https://img.shields.io/badge/npm_provenance-verified-2f9e44)](https://www.npmjs.com/package/relay-dsh-plugin-claude/v/0.1.1-rc.2)
10
+
3
11
  English | [中文](README.zh.md)
4
12
 
13
+ **npm package:** [`relay-dsh-plugin-claude`](https://www.npmjs.com/package/relay-dsh-plugin-claude)
14
+ · [All Relay DSH plugins](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/dsh-plugins.md)
15
+
16
+ [![Live npm-installed Relay plugins in official DSH](https://raw.githubusercontent.com/yangbobo2021/Relay/codex/relay-foundation/docs/media/dsh-plugin-suite-demo.gif)](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/dsh-plugins.md)
17
+
18
+ *Real npm-installed demo on official DSH: live Codex and Claude replies, a
19
+ workspace file preview, and an executed terminal command. [Watch the H.264
20
+ MP4](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/media/dsh-plugin-suite-demo.mp4?raw=1).*
21
+
5
22
  `relay-dsh-plugin-claude` adds **Claude Code as a conversation backend** to the
6
23
  official [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)
7
24
  (DSH) Web UI. After installation, **Claude Code** appears in DSH's New Session
@@ -57,29 +74,58 @@ claude
57
74
  Credentials stay under Claude Code's normal local authentication mechanism; this
58
75
  plugin does not collect them.
59
76
 
60
- ### 2. Install from npm
77
+ ### 2. Choose a package source and install
78
+
79
+ Stop a running DSH Web process before changing Profile bundles. Choose one of
80
+ the following sources.
61
81
 
62
- Stop a running DSH Web process before changing Profile bundles. Then run:
82
+ #### Stable npm release
83
+
84
+ The published npm package name is
85
+ [`relay-dsh-plugin-claude`](https://www.npmjs.com/package/relay-dsh-plugin-claude).
86
+ Use `@latest` to install the current stable release:
63
87
 
64
88
  ```bash
65
- npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add relay-dsh-plugin-claude
89
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add relay-dsh-plugin-claude@latest
66
90
  ```
67
91
 
68
- The official DSH CLI initializes the `web` Profile if it does not exist, asks
69
- `pnpm` to install the npm package and Claude Agent SDK dependencies, and adds the
70
- plugin's bundle layer. No Relay checkout is required. The current npm release is
71
- `0.1.0`. The first installation can
72
- take longer while platform-specific Claude Agent SDK packages are downloaded;
73
- wait for pnpm's final `Done` message or an explicit error.
92
+ At the time of writing, `latest` resolves to stable version `0.1.0`. The linked
93
+ npm page is the source of truth for the current version.
94
+
95
+ #### npm prerelease (recommended during DSH preview)
74
96
 
75
- If you already installed the `dsh` command, the shorter equivalent is:
97
+ Use `@next` to try the newest release candidate that has passed the repository's
98
+ CI publishing and official DSH compatibility checks. The current candidate also
99
+ contains the latest model-selection synchronization fix:
76
100
 
77
101
  ```bash
78
- dsh plugin --profile web add relay-dsh-plugin-claude
102
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add relay-dsh-plugin-claude@next
79
103
  ```
80
104
 
81
- To test an unreleased commit instead, replace the package name with
82
- `github:yangbobo2021/relay-dsh-plugin-claude`.
105
+ At the time of writing, `next` resolves to `0.1.1-rc.2`.
106
+
107
+ #### GitHub development build
108
+
109
+ Install the current `main` branch when testing an unreleased change:
110
+
111
+ ```bash
112
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-claude#main
113
+ ```
114
+
115
+ `main` can change at any time. For a reproducible GitHub install, pin a Tag or
116
+ full Commit SHA instead. For example:
117
+
118
+ ```bash
119
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-claude#v0.1.1-rc.2
120
+ ```
121
+
122
+ The official DSH CLI initializes the `web` Profile if it does not exist, asks
123
+ `pnpm` to install the selected package and Claude Agent SDK dependencies, and
124
+ adds the plugin's bundle layer. No Relay checkout is required. The first
125
+ installation can take longer while platform-specific Claude Agent SDK packages
126
+ are downloaded; wait for pnpm's final `Done` message or an explicit error. If
127
+ you already installed the `dsh` command, replace the
128
+ `npx @deepseek-ai/dsh@0.1.1-rc.2` prefix with `dsh` in any command above.
83
129
 
84
130
  ### 3. Start or restart DSH Web
85
131
 
package/README.zh.md CHANGED
@@ -1,7 +1,24 @@
1
1
  # 在 DeepSeek Harness 中使用 Claude Code 对话
2
2
 
3
+ [![npm 版本](https://img.shields.io/npm/v/relay-dsh-plugin-claude?label=npm)](https://www.npmjs.com/package/relay-dsh-plugin-claude)
4
+ [![CI](https://github.com/yangbobo2021/relay-dsh-plugin-claude/actions/workflows/ci.yml/badge.svg)](https://github.com/yangbobo2021/relay-dsh-plugin-claude/actions/workflows/ci.yml)
5
+ [![npm 月下载量](https://img.shields.io/npm/dm/relay-dsh-plugin-claude?label=downloads)](https://www.npmjs.com/package/relay-dsh-plugin-claude)
6
+ [![GitHub Stars](https://img.shields.io/github/stars/yangbobo2021/relay-dsh-plugin-claude?style=flat)](https://github.com/yangbobo2021/relay-dsh-plugin-claude/stargazers)
7
+ [![MIT 许可证](https://img.shields.io/github/license/yangbobo2021/relay-dsh-plugin-claude)](LICENSE)
8
+ [![DSH 兼容版本](https://img.shields.io/badge/DSH-0.1.1--rc.2-2f7d68)](https://github.com/deepseek-ai/deepseek-harness)
9
+ [![npm 来源证明](https://img.shields.io/badge/npm_provenance-verified-2f9e44)](https://www.npmjs.com/package/relay-dsh-plugin-claude/v/0.1.1-rc.2)
10
+
3
11
  [English](README.md) | 中文
4
12
 
13
+ **npm 包名:** [`relay-dsh-plugin-claude`](https://www.npmjs.com/package/relay-dsh-plugin-claude)
14
+ · [全部 Relay DSH 插件](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/dsh-plugins.zh.md)
15
+
16
+ [![在官方 DSH 中实装运行的 Relay 插件](https://raw.githubusercontent.com/yangbobo2021/Relay/codex/relay-foundation/docs/media/dsh-plugin-suite-demo.gif)](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/dsh-plugins.zh.md)
17
+
18
+ *演示来自官方 DSH 上的真实 npm 安装:Codex 与 Claude 返回真实回复,Files
19
+ 预览工作区文件,Terminal 实际执行命令。[观看 H.264
20
+ MP4](https://github.com/yangbobo2021/Relay/blob/codex/relay-foundation/docs/media/dsh-plugin-suite-demo.mp4?raw=1)。*
21
+
5
22
  `relay-dsh-plugin-claude` 为官方
6
23
  [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness)(DSH)Web
7
24
  界面增加 **Claude Code 对话后端**。安装后,DSH 的新建会话模式菜单中会出现
@@ -53,27 +70,56 @@ claude
53
70
 
54
71
  认证信息仍由 Claude Code 原有的本地机制管理,本插件不会收集认证信息。
55
72
 
56
- ### 2. 从 npm 安装
73
+ ### 2. 选择安装来源并安装
74
+
75
+ 修改 Profile 插件前,请先停止正在运行的 DSH Web,然后从以下来源中选择
76
+ 一种。
57
77
 
58
- 修改 Profile 插件前,请先停止正在运行的 DSH Web,然后执行:
78
+ #### npm 正式版
79
+
80
+ 本插件发布到 npm 的正式包名是
81
+ [`relay-dsh-plugin-claude`](https://www.npmjs.com/package/relay-dsh-plugin-claude)。
82
+ 使用 `@latest` 安装当前稳定版本:
59
83
 
60
84
  ```bash
61
- npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add relay-dsh-plugin-claude
85
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add relay-dsh-plugin-claude@latest
62
86
  ```
63
87
 
64
- 官方 DSH CLI 会在需要时初始化 `web` Profile,通过 `pnpm` 安装 npm 包和
65
- Claude Agent SDK 依赖,并将插件加入 Bundle 配置。用户不需要下载 Relay
66
- 仓库。当前 npm 版本为 `0.1.0`。首次安装还会下载 Claude Agent SDK 的平台相关软件包,可能需要
67
- 更长时间;请等待 pnpm 最终显示 `Done` 或明确的错误信息。
88
+ 本文更新时,`latest` 指向稳定版 `0.1.0`。最新版本请以链接中的 npm 页面
89
+ 为准。
90
+
91
+ #### npm 预发布版(DSH 预览阶段推荐)
68
92
 
69
- 如果已经安装了持久可用的 `dsh` 命令,也可以使用:
93
+ 使用 `@next` 安装已经通过本仓库 CI 发布流程和官方 DSH 兼容性测试的最新
94
+ 候选版本。当前候选版本还包含最新的模型选择同步修复:
70
95
 
71
96
  ```bash
72
- dsh plugin --profile web add relay-dsh-plugin-claude
97
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add relay-dsh-plugin-claude@next
73
98
  ```
74
99
 
75
- 如需测试尚未发布的提交,可将包名替换为
76
- `github:yangbobo2021/relay-dsh-plugin-claude`。
100
+ 本文更新时,`next` 指向 `0.1.1-rc.2`。
101
+
102
+ #### GitHub 开发版
103
+
104
+ 如需测试尚未发布的修改,可以直接安装当前 `main` 分支:
105
+
106
+ ```bash
107
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-claude#main
108
+ ```
109
+
110
+ `main` 会持续变化。如需可复现的 GitHub 安装,请固定 Tag 或完整 Commit
111
+ SHA。例如:
112
+
113
+ ```bash
114
+ npx @deepseek-ai/dsh@0.1.1-rc.2 plugin --profile web add github:yangbobo2021/relay-dsh-plugin-claude#v0.1.1-rc.2
115
+ ```
116
+
117
+ 官方 DSH CLI 会在需要时初始化 `web` Profile,通过 `pnpm` 安装所选软件包和
118
+ Claude Agent SDK 依赖,并将插件加入 Bundle 配置。用户不需要下载 Relay
119
+ 仓库。首次安装还会下载 Claude Agent SDK 的平台相关软件包,可能需要更长
120
+ 时间;请等待 pnpm 最终显示 `Done` 或明确错误。如果已经安装了持久可用的
121
+ `dsh` 命令,可以将上述任一命令开头的
122
+ `npx @deepseek-ai/dsh@0.1.1-rc.2` 替换为 `dsh`。
77
123
 
78
124
  ### 3. 启动或重启 DSH Web
79
125
 
package/lib/client.js CHANGED
@@ -7,6 +7,49 @@ window.__ModuleLoader__.load({
7
7
  let react = require("react");
8
8
  let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
9
9
  let react_jsx_runtime = require("react/jsx-runtime");
10
+ //#region model-selection.mjs
11
+ function installModelSelection(ctx, preset, provider, otherProvider) {
12
+ const connection = ctx.get("connection");
13
+ const selecting = /* @__PURE__ */ new Set();
14
+ const pending = /* @__PURE__ */ new Set();
15
+ const sync = () => {
16
+ const list = ctx.sessions.list.getSnapshot();
17
+ const id = list.current;
18
+ if (id === void 0 || list.byId[id]?.blank !== true) return;
19
+ if (selecting.has(id)) {
20
+ pending.add(id);
21
+ return;
22
+ }
23
+ const selectedPreset = list.byId[id]?.agentPreset;
24
+ if (selectedPreset !== preset && selectedPreset === otherProvider) return;
25
+ selecting.add(id);
26
+ connection.api.sessions.models({ sessionId: id }).then(async (response) => {
27
+ const { result } = response;
28
+ if (!result.ok) return;
29
+ const latest = ctx.sessions.list.getSnapshot().byId[id];
30
+ if (latest?.blank !== true || latest.agentPreset !== selectedPreset) {
31
+ pending.add(id);
32
+ return;
33
+ }
34
+ const target = selectedPreset === preset ? result.value.groups.find((group) => group.id === provider) : result.value.current.provider === provider ? result.value.groups.find((group) => group.id !== provider && group.id !== otherProvider) : void 0;
35
+ const model = target?.models[0];
36
+ if (!target || !model) return;
37
+ await connection.api.sessions.selectModel({
38
+ sessionId: id,
39
+ provider: target.id,
40
+ model: model.id,
41
+ ...model.reasoning?.defaultEffort ? { reasoningEffort: model.reasoning.defaultEffort } : {}
42
+ });
43
+ }).catch(() => {}).finally(() => {
44
+ selecting.delete(id);
45
+ if (pending.delete(id)) sync();
46
+ });
47
+ };
48
+ const off = ctx.sessions.list.subscribe(sync);
49
+ sync();
50
+ return off;
51
+ }
52
+ //#endregion
10
53
  //#region \0relay-css-module:./src/client/ClaudeActivityView.module.css.mjs
11
54
  const css = ".ts8jCW_activity{width:min(100%,960px);color:var(--dsw-alias-label-secondary)}.ts8jCW_summary{min-width:0;color:var(--dsw-alias-label-tertiary);flex:1;align-items:center;gap:8px;font-size:13px;display:flex}.ts8jCW_summary :first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ts8jCW_detail{border-left:1px solid var(--dsw-alias-border-l2);margin:4px 0 8px 28px;padding-left:12px;overflow:hidden}.ts8jCW_detail pre{max-height:320px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-markdown-code-block-small);white-space:pre-wrap;word-break:break-word;margin:0 0 8px;overflow:auto}.ts8jCW_provenance{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;margin-bottom:8px;font-size:12px;line-height:18px;overflow:hidden}";
12
55
  const tagId = "relay-dsh-plugin-claude/ClaudeActivityView.module.css";
@@ -133,40 +176,11 @@ window.__ModuleLoader__.load({
133
176
  name: "conversation.chat.node",
134
177
  key: "relay-claude-activity"
135
178
  }, ClaudeActivityView));
136
- const unsubscribe = installModelSelection(ctx);
179
+ const unsubscribe = installModelSelection(ctx, "relay-claude", "relay-claude", "relay-codex");
137
180
  return async () => {
138
181
  unsubscribe();
139
182
  };
140
183
  }
141
- function installModelSelection(ctx) {
142
- const connection = ctx.get("connection");
143
- const selecting = /* @__PURE__ */ new Set();
144
- const sync = () => {
145
- const list = ctx.sessions.list.getSnapshot();
146
- const id = list.current;
147
- if (id === void 0 || list.byId[id]?.blank !== true || selecting.has(id)) return;
148
- const preset = list.byId[id]?.agentPreset;
149
- if (preset === "relay-codex") return;
150
- selecting.add(id);
151
- connection.api.sessions.models({ sessionId: id }).then(async (response) => {
152
- const { result } = response;
153
- if (!result.ok) return;
154
- const target = preset === "relay-claude" ? result.value.groups.find((group) => group.id === "relay-claude") : result.value.current.provider === "relay-claude" ? result.value.groups.find((group) => group.id !== "relay-claude" && group.id !== "relay-codex") : void 0;
155
- const model = target?.models[0];
156
- if (target && model) await connection.api.sessions.selectModel({
157
- sessionId: id,
158
- provider: target.id,
159
- model: model.id,
160
- ...model.reasoning?.defaultEffort ? { reasoningEffort: model.reasoning.defaultEffort } : {}
161
- });
162
- }).catch(() => {}).finally(() => {
163
- selecting.delete(id);
164
- });
165
- };
166
- const off = ctx.sessions.list.subscribe(sync);
167
- sync();
168
- return off;
169
- }
170
184
  //#endregion
171
185
  exports.apply = apply;
172
186
  exports.inject = inject;
package/lib/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["css","DisclosureRow","IconCodeOutline16","StateDot"],"sources":["../src/client/ClaudeActivityView.tsx","../src/client/claude-activity.ts","../src/client/index.ts"],"sourcesContent":["import { memo, useState } from 'react'\nimport {\n DisclosureRow,\n IconCodeOutline16,\n StateDot,\n type StateDotState,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { ClaudeActivityData } from './claude-activity.ts'\nimport css from './ClaudeActivityView.module.css'\n\ntype ClaudeActivityViewProps = PropsRuntime<'conversation.chat.node', 'relay-claude-activity'>\n\nfunction dotState(status: ClaudeActivityData['status']): StateDotState {\n if (status === 'running') return 'ongoing'\n if (status === 'error') return 'error'\n return 'done'\n}\n\nexport const ClaudeActivityView = memo(function ClaudeActivityView({ node }: ClaudeActivityViewProps) {\n const activity = node.data as ClaudeActivityData\n const [open, setOpen] = useState(false)\n const expandable = activity.input !== undefined || activity.output !== undefined || activity.provenance !== undefined\n return (\n <div className={css.activity} data-claude-activity={activity.type}>\n <DisclosureRow\n icon={<IconCodeOutline16 />}\n title={activity.title}\n open={open}\n expandable={expandable}\n onToggle={() => { setOpen(value => !value) }}\n expandOnRowClick\n collapsedContent={(\n <span className={css.summary}>\n <span>{activity.summary}</span>\n <StateDot state={dotState(activity.status)} size={8} />\n </span>\n )}\n >\n <div className={css.detail}>\n {activity.provenance !== undefined ? (\n <div\n className={css.provenance}\n title={`Claude Code · Session ${activity.provenance.claudeSessionId} · Turn ${activity.provenance.turnId}`}\n >\n Claude Code · Session {shortId(activity.provenance.claudeSessionId)} · Turn {shortId(activity.provenance.turnId)}\n </div>\n ) : null}\n {activity.input !== undefined ? <pre>{activity.input}</pre> : null}\n {activity.output !== undefined ? <pre>{activity.output}</pre> : null}\n </div>\n </DisclosureRow>\n </div>\n )\n})\n\nfunction shortId(value: string): string {\n return value.length > 15 ? `${value.slice(0, 8)}...${value.slice(-4)}` : value\n}\n","import type { ChatConversationViewNode, ConversationNodeDefinition } from '@deepseek-ai/dsh-client-runtime/client'\n\nexport type ClaudeActivityStatus = 'running' | 'completed' | 'error'\n\nexport interface ClaudeActivityData {\n readonly type: string\n readonly status: ClaudeActivityStatus\n readonly title: string\n readonly summary?: string\n readonly input?: string\n readonly output?: string\n readonly provenance?: {\n readonly claudeSessionId: string\n readonly turnId: string\n }\n}\n\nexport interface ClaudeActivityEventData {\n readonly version: 1\n readonly claudeSessionId: string\n readonly turnId: string\n readonly itemId: string\n readonly phase: 'started' | 'completed'\n readonly activity: ClaudeActivityData\n}\n\ndeclare module '@deepseek-ai/dsh-session/types' {\n interface SessionEventMap {\n 'relay-claude/activity': ClaudeActivityEventData\n }\n}\n\ndeclare module '@deepseek-ai/dsh-client-ui-conversation/client' {\n interface ChatNodeDataMap {\n 'relay-claude-activity': ClaudeActivityData\n }\n}\n\nexport const claudeActivityDefinition: ConversationNodeDefinition<ClaudeActivityData> = {\n kind: 'relay-claude-activity',\n target: 'chat',\n match: event => event.type === 'relay-claude/activity'\n ? { id: event.data.itemId, role: event.data.phase === 'started' ? 'start' : 'update' }\n : null,\n start: (_context, match) => {\n if (match.event.type !== 'relay-claude/activity') {\n throw new Error('Claude activity start requires relay-claude/activity')\n }\n return {\n ...match.event.data.activity,\n provenance: {\n claudeSessionId: match.event.data.claudeSessionId,\n turnId: match.event.data.turnId,\n },\n }\n },\n update: (context, match) => match.event.type === 'relay-claude/activity'\n ? {\n ...match.event.data.activity,\n provenance: {\n claudeSessionId: match.event.data.claudeSessionId,\n turnId: match.event.data.turnId,\n },\n }\n : context.state,\n buildViewNode: (context): ChatConversationViewNode | null => {\n if (context.start === undefined || context.state === undefined) return null\n return {\n key: context.key,\n kind: 'relay-claude-activity',\n id: context.id,\n target: 'chat',\n anchorSeq: context.start.event.seq,\n location: context.start.location,\n visibility: 'visible',\n data: context.state,\n }\n },\n}\n","import type { IApiClient } from '@deepseek-ai/dsh-api-remotes/client'\nimport type { ClientContext, SessionId } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport { ClaudeActivityView } from './ClaudeActivityView.tsx'\nimport { claudeActivityDefinition } from './claude-activity.ts'\n\ninterface ConnectionFace { api: { sessions: Pick<IApiClient['sessions'], 'models' | 'selectModel'> } }\ninterface ModelGroup { readonly id: string; readonly models: readonly { readonly id: string; readonly reasoning?: { readonly defaultEffort?: string } }[] }\n\nexport const inject = ['slots', 'theme', 'locale', 'remote', 'sessions', 'connection', 'conversationEvents']\n\nexport async function apply(ctx: ClientContext): Promise<() => Promise<void>> {\n ctx.conversationEvents.register(claudeActivityDefinition)\n ctx.slots.inject('conversation.chat.node', () => ctx.slots.register({\n name: 'conversation.chat.node', key: 'relay-claude-activity',\n }, ClaudeActivityView))\n const unsubscribe = installModelSelection(ctx)\n return async () => { unsubscribe() }\n}\n\nfunction installModelSelection(ctx: ClientContext): () => void {\n const connection = ctx.get('connection' as never) as unknown as ConnectionFace\n const selecting = new Set<string>()\n const sync = (): void => {\n const list = ctx.sessions.list.getSnapshot()\n const id = list.current\n if (id === undefined || list.byId[id]?.blank !== true || selecting.has(id)) return\n const preset = list.byId[id]?.agentPreset\n if (preset === 'relay-codex') return\n selecting.add(id)\n void connection.api.sessions.models({ sessionId: id }).then(async (response: Awaited<ReturnType<ConnectionFace['api']['sessions']['models']>>) => {\n const { result } = response\n if (!result.ok) return\n const target = preset === 'relay-claude'\n ? (result.value.groups as readonly ModelGroup[]).find(group => group.id === 'relay-claude')\n : result.value.current.provider === 'relay-claude'\n ? (result.value.groups as readonly ModelGroup[]).find(group => group.id !== 'relay-claude' && group.id !== 'relay-codex')\n : undefined\n const model = target?.models[0]\n if (target && model) await connection.api.sessions.selectModel({ sessionId: id as SessionId, provider: target.id, model: model.id, ...(model.reasoning?.defaultEffort ? { reasoningEffort: model.reasoning.defaultEffort } : {}) })\n }).catch(() => {}).finally(() => { selecting.delete(id) })\n }\n const off = ctx.sessions.list.subscribe(sync); sync(); return off\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["css","DisclosureRow","IconCodeOutline16","StateDot"],"sources":["../model-selection.mjs","../src/client/ClaudeActivityView.tsx","../src/client/claude-activity.ts","../src/client/index.ts"],"sourcesContent":["export function installModelSelection(ctx, preset, provider, otherProvider) {\n const connection = ctx.get(\"connection\");\n const selecting = new Set();\n const pending = new Set();\n\n const sync = () => {\n const list = ctx.sessions.list.getSnapshot();\n const id = list.current;\n if (id === undefined || list.byId[id]?.blank !== true) return;\n if (selecting.has(id)) {\n pending.add(id);\n return;\n }\n\n const selectedPreset = list.byId[id]?.agentPreset;\n if (selectedPreset !== preset && selectedPreset === otherProvider) return;\n selecting.add(id);\n void connection.api.sessions.models({ sessionId: id }).then(async (response) => {\n const { result } = response;\n if (!result.ok) return;\n const latest = ctx.sessions.list.getSnapshot().byId[id];\n if (latest?.blank !== true || latest.agentPreset !== selectedPreset) {\n pending.add(id);\n return;\n }\n const target = selectedPreset === preset\n ? result.value.groups.find((group) => group.id === provider)\n : result.value.current.provider === provider\n ? result.value.groups.find((group) => group.id !== provider && group.id !== otherProvider)\n : undefined;\n const model = target?.models[0];\n if (!target || !model) return;\n await connection.api.sessions.selectModel({\n sessionId: id,\n provider: target.id,\n model: model.id,\n ...(model.reasoning?.defaultEffort\n ? { reasoningEffort: model.reasoning.defaultEffort }\n : {}),\n });\n }).catch(() => {}).finally(() => {\n selecting.delete(id);\n if (pending.delete(id)) sync();\n });\n };\n\n const off = ctx.sessions.list.subscribe(sync);\n sync();\n return off;\n}\n","import { memo, useState } from 'react'\nimport {\n DisclosureRow,\n IconCodeOutline16,\n StateDot,\n type StateDotState,\n} from '@deepseek-ai/dsh-client-ui-primitives'\nimport type { PropsRuntime } from '@deepseek-ai/dsh-client-ui-slots'\nimport type { ClaudeActivityData } from './claude-activity.ts'\nimport css from './ClaudeActivityView.module.css'\n\ntype ClaudeActivityViewProps = PropsRuntime<'conversation.chat.node', 'relay-claude-activity'>\n\nfunction dotState(status: ClaudeActivityData['status']): StateDotState {\n if (status === 'running') return 'ongoing'\n if (status === 'error') return 'error'\n return 'done'\n}\n\nexport const ClaudeActivityView = memo(function ClaudeActivityView({ node }: ClaudeActivityViewProps) {\n const activity = node.data as ClaudeActivityData\n const [open, setOpen] = useState(false)\n const expandable = activity.input !== undefined || activity.output !== undefined || activity.provenance !== undefined\n return (\n <div className={css.activity} data-claude-activity={activity.type}>\n <DisclosureRow\n icon={<IconCodeOutline16 />}\n title={activity.title}\n open={open}\n expandable={expandable}\n onToggle={() => { setOpen(value => !value) }}\n expandOnRowClick\n collapsedContent={(\n <span className={css.summary}>\n <span>{activity.summary}</span>\n <StateDot state={dotState(activity.status)} size={8} />\n </span>\n )}\n >\n <div className={css.detail}>\n {activity.provenance !== undefined ? (\n <div\n className={css.provenance}\n title={`Claude Code · Session ${activity.provenance.claudeSessionId} · Turn ${activity.provenance.turnId}`}\n >\n Claude Code · Session {shortId(activity.provenance.claudeSessionId)} · Turn {shortId(activity.provenance.turnId)}\n </div>\n ) : null}\n {activity.input !== undefined ? <pre>{activity.input}</pre> : null}\n {activity.output !== undefined ? <pre>{activity.output}</pre> : null}\n </div>\n </DisclosureRow>\n </div>\n )\n})\n\nfunction shortId(value: string): string {\n return value.length > 15 ? `${value.slice(0, 8)}...${value.slice(-4)}` : value\n}\n","import type { ChatConversationViewNode, ConversationNodeDefinition } from '@deepseek-ai/dsh-client-runtime/client'\n\nexport type ClaudeActivityStatus = 'running' | 'completed' | 'error'\n\nexport interface ClaudeActivityData {\n readonly type: string\n readonly status: ClaudeActivityStatus\n readonly title: string\n readonly summary?: string\n readonly input?: string\n readonly output?: string\n readonly provenance?: {\n readonly claudeSessionId: string\n readonly turnId: string\n }\n}\n\nexport interface ClaudeActivityEventData {\n readonly version: 1\n readonly claudeSessionId: string\n readonly turnId: string\n readonly itemId: string\n readonly phase: 'started' | 'completed'\n readonly activity: ClaudeActivityData\n}\n\ndeclare module '@deepseek-ai/dsh-session/types' {\n interface SessionEventMap {\n 'relay-claude/activity': ClaudeActivityEventData\n }\n}\n\ndeclare module '@deepseek-ai/dsh-client-ui-conversation/client' {\n interface ChatNodeDataMap {\n 'relay-claude-activity': ClaudeActivityData\n }\n}\n\nexport const claudeActivityDefinition: ConversationNodeDefinition<ClaudeActivityData> = {\n kind: 'relay-claude-activity',\n target: 'chat',\n match: event => event.type === 'relay-claude/activity'\n ? { id: event.data.itemId, role: event.data.phase === 'started' ? 'start' : 'update' }\n : null,\n start: (_context, match) => {\n if (match.event.type !== 'relay-claude/activity') {\n throw new Error('Claude activity start requires relay-claude/activity')\n }\n return {\n ...match.event.data.activity,\n provenance: {\n claudeSessionId: match.event.data.claudeSessionId,\n turnId: match.event.data.turnId,\n },\n }\n },\n update: (context, match) => match.event.type === 'relay-claude/activity'\n ? {\n ...match.event.data.activity,\n provenance: {\n claudeSessionId: match.event.data.claudeSessionId,\n turnId: match.event.data.turnId,\n },\n }\n : context.state,\n buildViewNode: (context): ChatConversationViewNode | null => {\n if (context.start === undefined || context.state === undefined) return null\n return {\n key: context.key,\n kind: 'relay-claude-activity',\n id: context.id,\n target: 'chat',\n anchorSeq: context.start.event.seq,\n location: context.start.location,\n visibility: 'visible',\n data: context.state,\n }\n },\n}\n","import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client'\nimport type {} from '@deepseek-ai/dsh-client-ui-conversation/client'\nimport { installModelSelection, type ModelSelectionContext } from '../../model-selection.mjs'\nimport { ClaudeActivityView } from './ClaudeActivityView.tsx'\nimport { claudeActivityDefinition } from './claude-activity.ts'\n\nexport const inject = ['slots', 'theme', 'locale', 'remote', 'sessions', 'connection', 'conversationEvents']\n\nexport async function apply(ctx: ClientContext): Promise<() => Promise<void>> {\n ctx.conversationEvents.register(claudeActivityDefinition)\n ctx.slots.inject('conversation.chat.node', () => ctx.slots.register({\n name: 'conversation.chat.node', key: 'relay-claude-activity',\n }, ClaudeActivityView))\n const unsubscribe = installModelSelection(ctx as ModelSelectionContext, 'relay-claude', 'relay-claude', 'relay-codex')\n return async () => { unsubscribe() }\n}\n"],"mappings":"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"}
@@ -413,10 +413,7 @@ var ClaudeCliClient = class extends EventEmitter {
413
413
  "pipe",
414
414
  "pipe"
415
415
  ],
416
- env: {
417
- ...process.env,
418
- ...message.env ?? {}
419
- }
416
+ env: { ...process.env }
420
417
  });
421
418
  child.relayClaudeSessionId = session.id;
422
419
  session.created = true;
@@ -735,6 +732,10 @@ var ClaudeSdkClient = class extends EventEmitter {
735
732
  cwd: message.cwd ?? session.cwd ?? process.cwd(),
736
733
  model: message.model ?? session.config?.model,
737
734
  effort: message.effort ?? session.config?.effort,
735
+ thinking: {
736
+ type: "adaptive",
737
+ display: "summarized"
738
+ },
738
739
  permissionMode: sdkPermissionMode(message),
739
740
  settingSources: message.settingSources ?? session.config?.settingSources ?? [
740
741
  "user",
@@ -2230,11 +2231,13 @@ async function exists(path) {
2230
2231
  const name = "relay-dsh-plugin-claude";
2231
2232
  const inject = [
2232
2233
  "agents",
2234
+ "approval",
2233
2235
  "llm",
2234
2236
  "sessions",
2235
2237
  "sessionPersistence",
2236
2238
  "tools",
2237
2239
  "typert",
2240
+ "userQuestions",
2238
2241
  "webServer"
2239
2242
  ];
2240
2243
  async function apply(ctx, config = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"host-plugin.js","names":["#entries","#drainActive","#disposeActive","DEFAULT_MODELS","DEFAULT_MODELS"],"sources":["../internal/plugin-sdk.mjs","../cli-client.mjs","../sdk-client.mjs","../session-runtime.mjs","../plugin.mjs","../claude-adapter.js","../claude-link-store.js","../claude-tools.js","../dsh-plugin.js","../preset.js","../host-plugin.js"],"sourcesContent":["import assert from \"node:assert/strict\";\n\nconst SEMVER_PATTERN = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$/;\nconst PLUGIN_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/;\nconst CAPABILITY_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/;\n\nexport class CapabilityRegistry {\n #entries = new Map();\n\n register(name, version, value, providerId) {\n assertCapabilityName(name);\n assertSemanticVersion(version, `capability ${name}`);\n if (this.#entries.has(name)) {\n throw new Error(`capability ${name} is already available`);\n }\n this.#entries.set(name, Object.freeze({ name, version, value, providerId }));\n }\n\n unregisterProvider(providerId) {\n for (const [name, entry] of this.#entries) {\n if (entry.providerId === providerId) this.#entries.delete(name);\n }\n }\n\n require(name, range = \"*\") {\n const entry = this.#entries.get(name);\n if (!entry) throw new Error(`capability ${name} is not available`);\n if (!satisfiesVersion(entry.version, range)) {\n throw new Error(`capability ${name} ${entry.version} does not satisfy ${range}`);\n }\n return entry.value;\n }\n\n optional(name, range = \"*\") {\n if (!this.#entries.has(name)) return undefined;\n return this.require(name, range);\n }\n}\n\nexport class PluginHost {\n constructor() {\n this.capabilities = new CapabilityRegistry();\n this.active = [];\n this.disposed = false;\n }\n\n async activate(definitions) {\n if (this.active.length > 0) throw new Error(\"plugin host is already active\");\n if (this.disposed) throw new Error(\"plugin host is disposed\");\n\n const ordered = resolveActivationOrder(definitions);\n let current = null;\n try {\n for (const definition of ordered) {\n const access = createCapabilityAccess(definition.manifest, this.capabilities);\n const cleanups = [];\n let acceptingCleanups = true;\n const defer = (cleanup) => {\n assert.equal(typeof cleanup, \"function\", `plugin ${definition.manifest.id} cleanup must be a function`);\n assert.ok(acceptingCleanups, `plugin ${definition.manifest.id} cannot defer cleanup after activation`);\n cleanups.push(cleanup);\n return cleanup;\n };\n current = { id: definition.manifest.id, cleanups };\n let activation;\n try {\n activation = await definition.activate(Object.freeze({\n plugin: definition.manifest,\n capabilities: access,\n defer,\n })) ?? {};\n } finally {\n acceptingCleanups = false;\n }\n if (typeof activation.dispose === \"function\") cleanups.push(activation.dispose);\n const provided = activation.capabilities ?? {};\n validateProvidedCapabilities(definition.manifest, provided);\n for (const [name, version] of Object.entries(definition.manifest.provides)) {\n this.capabilities.register(name, version, provided[name], definition.manifest.id);\n }\n this.active.push(current);\n current = null;\n }\n } catch (error) {\n const rollbackErrors = [];\n if (current) {\n this.capabilities.unregisterProvider(current.id);\n rollbackErrors.push(...await disposeCleanups(current.cleanups));\n }\n rollbackErrors.push(...await this.#drainActive());\n if (rollbackErrors.length > 0) {\n throw new AggregateError(\n [error, ...rollbackErrors],\n `plugin activation failed: ${error?.message ?? error}; rollback also failed`,\n { cause: error },\n );\n }\n throw error;\n }\n return this;\n }\n\n async dispose() {\n if (this.disposed) return;\n this.disposed = true;\n await this.#disposeActive();\n }\n\n async #disposeActive() {\n const errors = await this.#drainActive();\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, \"multiple plugin cleanup operations failed\");\n }\n\n async #drainActive() {\n const errors = [];\n while (this.active.length > 0) {\n const plugin = this.active.pop();\n try {\n errors.push(...await disposeCleanups(plugin.cleanups));\n } finally {\n this.capabilities.unregisterProvider(plugin.id);\n }\n }\n return errors;\n }\n}\n\nasync function disposeCleanups(cleanups) {\n const errors = [];\n for (const cleanup of cleanups.reverse()) {\n try {\n await cleanup();\n } catch (error) {\n errors.push(error);\n }\n }\n return errors;\n}\n\nexport function definePlugin(definition) {\n assert.equal(typeof definition?.activate, \"function\", \"plugin activate must be a function\");\n const manifest = validateManifest(definition.manifest);\n return Object.freeze({ manifest, activate: definition.activate });\n}\n\nexport function validateManifest(input) {\n assert.ok(input && typeof input === \"object\" && !Array.isArray(input), \"plugin manifest is required\");\n assert.match(input.id ?? \"\", PLUGIN_ID_PATTERN, \"plugin id must be lowercase and stable\");\n assertSemanticVersion(input.version, `plugin ${input.id}`);\n const provides = validateCapabilityMap(input.provides, \"provides\", { ranges: false });\n const requires = validateCapabilityMap(input.requires, \"requires\", { ranges: true });\n const optional = validateCapabilityMap(input.optional, \"optional\", { ranges: true });\n for (const name of Object.keys(requires)) {\n assert.ok(!(name in optional), `capability ${name} cannot be both required and optional`);\n }\n const permissions = input.permissions ?? [];\n assert.ok(Array.isArray(permissions), \"plugin permissions must be an array\");\n assert.ok(permissions.every((permission) => typeof permission === \"string\" && permission.length > 0),\n \"plugin permissions must contain non-empty strings\");\n return Object.freeze({\n id: input.id,\n version: input.version,\n provides: Object.freeze(provides),\n requires: Object.freeze(requires),\n optional: Object.freeze(optional),\n permissions: Object.freeze([...permissions]),\n });\n}\n\nexport function satisfiesVersion(version, range) {\n const current = parseVersion(version);\n if (range === \"*\" || range === undefined) return true;\n if (SEMVER_PATTERN.test(range)) return compareVersions(current, parseVersion(range)) === 0;\n\n const majorWildcard = /^(0|[1-9]\\d*)\\.x$/.exec(range);\n if (majorWildcard) return current.major === Number(majorWildcard[1]);\n\n if (range.startsWith(\"^\")) {\n const minimum = parseVersion(range.slice(1));\n const upper = minimum.major > 0\n ? { major: minimum.major + 1, minor: 0, patch: 0 }\n : minimum.minor > 0\n ? { major: 0, minor: minimum.minor + 1, patch: 0 }\n : { major: 0, minor: 0, patch: minimum.patch + 1 };\n return compareVersions(current, minimum) >= 0 && compareVersions(current, upper) < 0;\n }\n throw new Error(`unsupported semantic version range ${range}`);\n}\n\nfunction resolveActivationOrder(definitions) {\n assert.ok(Array.isArray(definitions), \"plugin definitions must be an array\");\n const plugins = new Map();\n const providers = new Map();\n\n for (const definition of definitions) {\n assert.ok(definition?.manifest && typeof definition.activate === \"function\", \"invalid plugin definition\");\n const manifest = validateManifest(definition.manifest);\n if (plugins.has(manifest.id)) throw new Error(`duplicate plugin id ${manifest.id}`);\n plugins.set(manifest.id, definition);\n for (const [name, version] of Object.entries(manifest.provides)) {\n if (providers.has(name)) {\n throw new Error(`capability ${name} is provided by both ${providers.get(name).id} and ${manifest.id}`);\n }\n providers.set(name, { id: manifest.id, version });\n }\n }\n\n const dependencies = new Map([...plugins.keys()].map((id) => [id, new Set()]));\n for (const definition of plugins.values()) {\n const { manifest } = definition;\n for (const [name, range] of Object.entries(manifest.requires)) {\n const provider = providers.get(name);\n if (!provider || !satisfiesVersion(provider.version, range)) {\n const found = provider ? ` (found ${provider.version})` : \"\";\n throw new Error(`plugin ${manifest.id} requires ${name} ${range}${found}`);\n }\n dependencies.get(manifest.id).add(provider.id);\n }\n for (const [name, range] of Object.entries(manifest.optional)) {\n const provider = providers.get(name);\n if (!provider) continue;\n if (!satisfiesVersion(provider.version, range)) {\n throw new Error(`plugin ${manifest.id} optional capability ${name} requires ${range} (found ${provider.version})`);\n }\n dependencies.get(manifest.id).add(provider.id);\n }\n }\n\n const ordered = [];\n const visiting = new Set();\n const visited = new Set();\n const visit = (id) => {\n if (visiting.has(id)) throw new Error(`plugin dependency cycle includes ${id}`);\n if (visited.has(id)) return;\n visiting.add(id);\n for (const dependency of dependencies.get(id)) visit(dependency);\n visiting.delete(id);\n visited.add(id);\n ordered.push(plugins.get(id));\n };\n for (const id of plugins.keys()) visit(id);\n return ordered;\n}\n\nfunction createCapabilityAccess(manifest, registry) {\n return Object.freeze({\n require(name) {\n const range = manifest.requires[name];\n if (!range) throw new Error(`plugin ${manifest.id} did not declare required capability ${name}`);\n return registry.require(name, range);\n },\n optional(name) {\n const range = manifest.optional[name];\n if (!range) throw new Error(`plugin ${manifest.id} did not declare optional capability ${name}`);\n return registry.optional(name, range);\n },\n });\n}\n\nfunction validateProvidedCapabilities(manifest, provided) {\n assert.ok(provided && typeof provided === \"object\" && !Array.isArray(provided),\n `plugin ${manifest.id} capabilities must be an object`);\n const expected = Object.keys(manifest.provides).sort();\n const actual = Object.keys(provided).sort();\n assert.deepEqual(actual, expected, `plugin ${manifest.id} provided capabilities do not match its manifest`);\n for (const name of expected) {\n assert.notEqual(provided[name], undefined, `plugin ${manifest.id} did not provide ${name}`);\n }\n}\n\nfunction validateCapabilityMap(input, label, { ranges }) {\n const map = input ?? {};\n assert.ok(map && typeof map === \"object\" && !Array.isArray(map), `plugin ${label} must be an object`);\n const result = {};\n for (const [name, version] of Object.entries(map)) {\n assertCapabilityName(name);\n if (ranges) {\n satisfiesVersion(\"0.0.0\", version);\n } else {\n assertSemanticVersion(version, `capability ${name}`);\n }\n result[name] = version;\n }\n return result;\n}\n\nfunction assertCapabilityName(name) {\n assert.match(name ?? \"\", CAPABILITY_ID_PATTERN, \"capability id must be lowercase and stable\");\n}\n\nfunction assertSemanticVersion(version, label) {\n assert.match(version ?? \"\", SEMVER_PATTERN, `${label} must use a semantic version`);\n}\n\nfunction parseVersion(version) {\n assertSemanticVersion(version, \"version\");\n const [, major, minor, patch] = SEMVER_PATTERN.exec(version);\n return { major: Number(major), minor: Number(minor), patch: Number(patch) };\n}\n\nfunction compareVersions(left, right) {\n return left.major - right.major || left.minor - right.minor || left.patch - right.patch;\n}\n","import { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport readline from \"node:readline\";\n\nconst DEFAULT_MODELS = [\n { id: \"sonnet\", displayName: \"Claude Sonnet\", isDefault: true, defaultReasoningEffort: \"medium\" },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\" },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\" },\n];\n\nexport class ClaudeCliClient extends EventEmitter {\n constructor({ command = \"claude\", args = [], requestTimeoutMs = 30 * 60_000 } = {}) {\n super();\n this.command = command;\n this.args = args;\n this.requestTimeoutMs = requestTimeoutMs;\n this.sessions = new Map();\n this.processes = new Map();\n this.closed = false;\n }\n\n async start() {\n this.closed = false;\n }\n\n async listModels() {\n return DEFAULT_MODELS;\n }\n\n async createSession(config = {}) {\n const id = config.sessionId ?? randomUUID();\n const session = { id, cwd: config.cwd ?? process.cwd(), created: false, config: structuredClone(config) };\n this.sessions.set(id, session);\n return { id, cwd: session.cwd, turns: [] };\n }\n\n async resumeSession(sessionId, config = {}) {\n const existing = this.sessions.get(sessionId) ?? { id: sessionId, created: true };\n const session = { ...existing, cwd: config.cwd ?? existing.cwd ?? process.cwd(), config: { ...existing.config, ...config } };\n this.sessions.set(sessionId, session);\n return { id: sessionId, cwd: session.cwd, turns: [] };\n }\n\n async sendMessage(sessionId, message = {}) {\n if (Array.isArray(message.dshTools) && message.dshTools.length > 0) {\n throw new Error(\"The Claude CLI backend cannot expose DSH tools; use the Claude Agent SDK backend\");\n }\n const session = this.sessions.get(sessionId) ?? (await this.resumeSession(sessionId, message));\n const turnId = randomUUID();\n const child = this.spawnTurn(session, turnId, message);\n this.processes.set(turnId, child);\n return { id: turnId, status: \"inProgress\", items: [] };\n }\n\n async interruptTurn(_sessionId, turnId) {\n const child = this.processes.get(turnId);\n if (!child) return;\n child.kill(\"SIGTERM\");\n }\n\n async releaseSession(sessionId) {\n for (const [turnId, child] of this.processes) {\n if (child.relayClaudeSessionId === sessionId) {\n child.kill(\"SIGTERM\");\n this.processes.delete(turnId);\n }\n }\n this.sessions.delete(sessionId);\n }\n\n async close() {\n this.closed = true;\n for (const child of this.processes.values()) child.kill(\"SIGTERM\");\n this.processes.clear();\n }\n\n spawnTurn(session, turnId, message) {\n const settingSourceArgs = settingSourceArguments(message.settingSources ?? session.config?.settingSources);\n const systemPromptArgs = systemPromptArguments(message.systemPrompt ?? session.config?.systemPrompt);\n const cliArgs = [\n ...this.args,\n \"-p\",\n message.text,\n \"--output-format\",\n \"stream-json\",\n \"--verbose\",\n \"--include-partial-messages\",\n \"--model\",\n message.model ?? session.config?.model ?? \"sonnet\",\n \"--effort\",\n message.effort ?? session.config?.effort ?? \"medium\",\n \"--permission-mode\",\n permissionMode(message),\n ...settingSourceArgs,\n ...systemPromptArgs,\n ...(session.created ? [\"--resume\", session.id] : [\"--session-id\", session.id]),\n ];\n const child = spawn(this.command, cliArgs, {\n cwd: message.cwd ?? session.cwd ?? process.cwd(),\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env, ...(message.env ?? {}) },\n });\n child.relayClaudeSessionId = session.id;\n session.created = true;\n const state = { textItemId: null, text: \"\", activities: new Set() };\n const output = readline.createInterface({ input: child.stdout });\n output.on(\"line\", (line) => this.handleLine(session.id, turnId, line, state));\n child.stderr.setEncoding(\"utf8\");\n child.stderr.on(\"data\", chunk => this.emit(\"diagnostic\", String(chunk)));\n child.once(\"error\", error => {\n this.emit(\"diagnostic\", `Claude CLI failed: ${error.message}`);\n this.completeTurn(session.id, turnId, \"failed\", error);\n });\n child.once(\"exit\", (code, signal) => {\n this.processes.delete(turnId);\n if (signal || code) this.completeTurn(session.id, turnId, \"failed\", new Error(`claude exited (${signal ?? code})`));\n else this.completeTurn(session.id, turnId, \"completed\");\n });\n return child;\n }\n\n handleLine(sessionId, turnId, line, state) {\n let message;\n try {\n message = JSON.parse(line);\n } catch {\n this.emitText(sessionId, turnId, state, line);\n return;\n }\n for (const event of normalizeClaudeStreamMessage(message, state)) {\n this.emit(\"activity\", { method: event.method, params: { sessionId, turnId, ...event.params } });\n }\n }\n\n emitText(sessionId, turnId, state, text) {\n if (!text) return;\n state.textItemId ??= `answer-${turnId}`;\n this.emit(\"activity\", {\n method: \"item/agentMessage/delta\",\n params: { sessionId, turnId, itemId: state.textItemId, delta: `${text}\\n` },\n });\n }\n\n completeTurn(sessionId, turnId, status, error = null) {\n this.emit(\"activity\", {\n method: \"turn/completed\",\n params: {\n sessionId,\n turn: {\n id: turnId,\n status,\n error: error ? { message: error.message } : null,\n items: [],\n },\n },\n });\n }\n}\n\nfunction normalizeClaudeStreamMessage(message, state) {\n const events = [];\n const content = message.message?.content ?? message.content ?? [];\n for (const block of Array.isArray(content) ? content : []) {\n if (block.type === \"text\" && block.text) {\n state.textItemId ??= block.id ?? `answer-${message.message?.id ?? \"latest\"}`;\n const delta = block.text.startsWith(state.text) ? block.text.slice(state.text.length) : block.text;\n state.text = block.text;\n if (delta) events.push({ method: \"item/agentMessage/delta\", params: { itemId: state.textItemId, delta } });\n }\n if ((block.type === \"text_delta\" || block.type === \"content_block_delta\") && (block.text ?? block.delta?.text)) {\n state.textItemId ??= block.id ?? `answer-${message.message?.id ?? \"latest\"}`;\n const delta = block.text ?? block.delta.text;\n state.text += delta;\n events.push({ method: \"item/agentMessage/delta\", params: { itemId: state.textItemId, delta } });\n }\n if (block.type === \"thinking\" && block.thinking) {\n events.push({ method: \"item/reasoning/summaryTextDelta\", params: { itemId: block.id ?? \"reasoning\", delta: block.thinking } });\n }\n if (block.type === \"tool_use\") {\n const item = {\n type: \"toolUse\",\n id: block.id ?? block.name,\n name: block.name,\n input: block.input,\n status: \"inProgress\",\n };\n if (!state.activities.has(item.id)) {\n state.activities.add(item.id);\n events.push({ method: \"item/started\", params: { item } });\n }\n }\n if (block.type === \"tool_result\") {\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: block.tool_use_id ?? block.id,\n name: block.name,\n output: block.content,\n status: block.is_error ? \"failed\" : \"completed\",\n },\n },\n });\n }\n }\n if (message.type === \"result\" && message.result) {\n state.textItemId ??= `answer-${message.session_id ?? \"latest\"}`;\n const delta = String(message.result).startsWith(state.text)\n ? String(message.result).slice(state.text.length)\n : String(message.result);\n state.text = String(message.result);\n if (delta) events.push({ method: \"item/agentMessage/delta\", params: { itemId: state.textItemId, delta } });\n }\n return events;\n}\n\nfunction permissionMode(message) {\n if (message.permissionMode) return message.permissionMode;\n if (message.approvalPolicy === \"never\") return \"plan\";\n if (message.sandbox === \"read-only\") return \"plan\";\n return \"manual\";\n}\n\nfunction settingSourceArguments(value) {\n if (Array.isArray(value) && value.length === 0) return [\"--safe-mode\"];\n if (Array.isArray(value)) return [\"--setting-sources\", value.join(\",\")];\n if (typeof value === \"string\" && value.trim()) return [\"--setting-sources\", value];\n return [\"--setting-sources\", \"user,project,local\"];\n}\n\nfunction systemPromptArguments(value) {\n if (typeof value === \"string\" && value.trim()) return [\"--system-prompt\", value];\n return [];\n}\n","import { randomUUID } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport { z } from \"zod\";\n\nconst DEFAULT_MODELS = [\n { id: \"sonnet\", displayName: \"Claude Sonnet\", isDefault: true, defaultReasoningEffort: \"medium\", supportedReasoningEfforts: reasoningEfforts() },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\", supportedReasoningEfforts: reasoningEfforts() },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\", supportedReasoningEfforts: reasoningEfforts() },\n];\n\nfunction reasoningEfforts() {\n return [\"low\", \"medium\", \"high\"].map(reasoningEffort => ({ reasoningEffort }));\n}\n\nexport class ClaudeSdkClient extends EventEmitter {\n constructor({ sdk = null, pathToClaudeCodeExecutable = undefined, requestTimeoutMs = 30 * 60_000 } = {}) {\n super();\n this.sdk = sdk;\n this.pathToClaudeCodeExecutable = pathToClaudeCodeExecutable;\n this.requestTimeoutMs = requestTimeoutMs;\n this.sessions = new Map();\n this.queries = new Map();\n this.pendingRequests = new Map();\n this.closed = false;\n }\n\n async start() {\n this.sdk ??= await import(\"@anthropic-ai/claude-agent-sdk\");\n if (typeof this.sdk.query !== \"function\") throw new Error(\"Claude Agent SDK query() is unavailable\");\n this.closed = false;\n }\n\n async listModels() {\n return DEFAULT_MODELS;\n }\n\n async createSession(config = {}) {\n const id = config.sessionId ?? randomUUID();\n this.sessions.set(id, { id, cwd: config.cwd ?? process.cwd(), created: false, config: structuredClone(config) });\n return { id, cwd: config.cwd ?? process.cwd(), turns: [] };\n }\n\n async resumeSession(sessionId, config = {}) {\n const existing = this.sessions.get(sessionId) ?? { id: sessionId, created: true, config: {} };\n this.sessions.set(sessionId, {\n ...existing,\n cwd: config.cwd ?? existing.cwd ?? process.cwd(),\n config: { ...existing.config, ...structuredClone(config) },\n });\n return { id: sessionId, cwd: config.cwd ?? existing.cwd ?? process.cwd(), turns: [] };\n }\n\n async sendMessage(sessionId, message = {}) {\n const session = this.sessions.get(sessionId) ?? (await this.resumeSession(sessionId, message));\n const turnId = randomUUID();\n const abortController = new AbortController();\n const options = this.queryOptions(session, message, abortController);\n const query = this.sdk.query({ prompt: message.text, options });\n this.queries.set(turnId, { query, abortController, sessionId });\n void this.consumeQuery(session, turnId, query).catch((error) => {\n this.emit(\"diagnostic\", `Claude SDK query failed: ${error?.stack ?? error}`);\n this.completeTurn(session.id, turnId, \"failed\", error);\n });\n session.created = true;\n return { id: turnId, status: \"inProgress\", items: [] };\n }\n\n async interruptTurn(_sessionId, turnId) {\n const record = this.queries.get(turnId);\n if (!record) return;\n await record.query.interrupt?.().catch(() => {});\n record.abortController.abort();\n record.query.close?.();\n }\n\n async releaseSession(sessionId) {\n for (const [turnId, record] of this.queries) {\n if (record.sessionId === sessionId) {\n record.abortController.abort();\n record.query.close?.();\n this.queries.delete(turnId);\n }\n }\n this.sessions.delete(sessionId);\n }\n\n async close() {\n this.closed = true;\n for (const record of this.queries.values()) {\n record.abortController.abort();\n record.query.close?.();\n }\n this.queries.clear();\n for (const request of this.pendingRequests.values()) {\n request.resolve({ behavior: \"deny\", message: \"Relay Claude SDK client closed\" });\n }\n this.pendingRequests.clear();\n }\n\n resolveRequest(requestId, response = {}) {\n const request = this.pendingRequests.get(String(requestId));\n if (!request) throw new Error(`unknown pending Claude request ${requestId}`);\n this.pendingRequests.delete(String(requestId));\n request.resolve(responseForRequest(request, response));\n }\n\n rejectRequest(requestId, error) {\n const request = this.pendingRequests.get(String(requestId));\n if (!request) return;\n this.pendingRequests.delete(String(requestId));\n request.resolve({ behavior: \"deny\", message: error?.message ?? String(error) });\n }\n\n queryOptions(session, message, abortController) {\n return {\n abortController,\n cwd: message.cwd ?? session.cwd ?? process.cwd(),\n model: message.model ?? session.config?.model,\n effort: message.effort ?? session.config?.effort,\n permissionMode: sdkPermissionMode(message),\n settingSources: message.settingSources ?? session.config?.settingSources ?? [\"user\", \"project\", \"local\"],\n systemPrompt: message.systemPrompt ?? session.config?.systemPrompt,\n pathToClaudeCodeExecutable: this.pathToClaudeCodeExecutable,\n includePartialMessages: true,\n ...(session.created ? { resume: session.id } : { sessionId: session.id }),\n canUseTool: (toolName, input, options) => this.requestPermission(session.id, toolName, input, options),\n ...dshMcpOptions(this.sdk, message.dshTools, message.executeDshTool, abortController.signal),\n };\n }\n\n requestPermission(sessionId, toolName, input, options = {}) {\n const id = options.requestId ?? randomUUID();\n return new Promise((resolve) => {\n const request = {\n id,\n method: toolName === \"AskUserQuestion\" ? \"tool/requestUserInput\" : \"tool/requestApproval\",\n signal: options.signal,\n params: {\n sessionId,\n toolName,\n input: structuredClone(input ?? {}),\n title: options.title,\n displayName: options.displayName,\n description: options.description,\n decisionReason: options.decisionReason,\n blockedPath: options.blockedPath,\n toolUseID: options.toolUseID,\n suggestions: structuredClone(options.suggestions ?? []),\n },\n };\n this.pendingRequests.set(String(id), { request, resolve, input });\n options.signal?.addEventListener(\"abort\", () => this.rejectRequest(id, new Error(\"Claude permission request was cancelled\")), { once: true });\n this.emit(\"request\", request);\n });\n }\n\n async consumeQuery(session, turnId, query) {\n const state = { currentMessageId: null, text: new Map(), reasoning: new Map(), activities: new Set() };\n let completed = false;\n try {\n for await (const message of query) {\n for (const event of normalizeSdkMessage(message, state)) {\n this.emit(\"activity\", { method: event.method, params: { sessionId: session.id, turnId, ...event.params } });\n }\n if (message.type === \"result\") {\n completed = true;\n this.completeTurn(session.id, turnId, message.is_error ? \"failed\" : \"completed\", resultError(message));\n }\n }\n if (!completed) this.completeTurn(session.id, turnId, \"completed\");\n } finally {\n this.queries.delete(turnId);\n }\n }\n\n completeTurn(sessionId, turnId, status, error = null) {\n this.emit(\"activity\", {\n method: \"turn/completed\",\n params: {\n sessionId,\n turn: {\n id: turnId,\n status,\n error: error ? { message: error.message } : null,\n items: [],\n },\n },\n });\n }\n}\n\nfunction dshMcpOptions(sdk, schemas, execute, signal) {\n if (!Array.isArray(schemas) || schemas.length === 0) return {};\n if (typeof execute !== \"function\") throw new Error(\"Claude DSH tools require an execution callback\");\n if (typeof sdk.createSdkMcpServer !== \"function\" || typeof sdk.tool !== \"function\") {\n throw new Error(\"This Claude Agent SDK does not support in-process DSH tools\");\n }\n const tools = schemas.map(schema => sdk.tool(\n schema.name,\n schema.description,\n jsonSchemaShape(schema.parameters),\n async (args, extra = {}) => dshToolResult(await execute({\n name: schema.name,\n arguments: args,\n callId: extra.toolUseID ?? extra.toolUseId ?? randomUUID(),\n signal: extra.signal ?? signal,\n })),\n ));\n return {\n mcpServers: {\n dsh: sdk.createSdkMcpServer({ name: \"dsh\", version: \"1.0.0\", tools, alwaysLoad: true }),\n },\n allowedTools: schemas.map(schema => `mcp__dsh__${schema.name}`),\n };\n}\n\nfunction jsonSchemaShape(schema) {\n if (!schema || schema.type !== \"object\" || typeof schema.properties !== \"object\" || schema.properties === null) {\n if (schema?.type === \"object\" && schema.properties === undefined) return {};\n throw new Error(\"DSH tool parameters must use an object JSON Schema\");\n }\n const required = new Set(Array.isArray(schema.required) ? schema.required : []);\n return Object.fromEntries(Object.entries(schema.properties).map(([name, property]) => {\n let field;\n try {\n field = z.fromJSONSchema(property);\n } catch {\n field = z.unknown();\n }\n return [name, required.has(name) ? field : field.optional()];\n }));\n}\n\nfunction dshToolResult(result) {\n const content = (result.content ?? []).map(block => {\n if (block?.type === \"text\") return { type: \"text\", text: String(block.text ?? \"\") };\n if (block?.type === \"image\" && typeof block.data === \"string\" && typeof block.mediaType === \"string\") {\n return { type: \"image\", data: block.data, mimeType: block.mediaType };\n }\n return { type: \"text\", text: JSON.stringify(block) };\n });\n if (content.length === 0) content.push({ type: \"text\", text: result.isError ? \"DSH tool failed\" : \"DSH tool completed.\" });\n return { content, isError: Boolean(result.isError) };\n}\n\nfunction normalizeSdkMessage(message, state) {\n const events = [];\n if (message.type === \"stream_event\") {\n const event = message.event;\n if (event?.type === \"message_start\") {\n state.currentMessageId = event.message?.id ?? message.uuid ?? null;\n return events;\n }\n if (event?.type === \"content_block_delta\" && event.delta?.type === \"text_delta\") {\n const itemId = streamItemId(state, \"text\", event.index);\n state.text.set(itemId, `${state.text.get(itemId) ?? \"\"}${event.delta.text}`);\n events.push({ method: \"item/agentMessage/delta\", params: { itemId, delta: event.delta.text } });\n }\n if (event?.type === \"content_block_delta\" && event.delta?.type === \"thinking_delta\") {\n const itemId = streamItemId(state, \"reason\", event.index);\n state.reasoning.set(itemId, `${state.reasoning.get(itemId) ?? \"\"}${event.delta.thinking}`);\n events.push({ method: \"item/reasoning/summaryTextDelta\", params: { itemId, delta: event.delta.thinking } });\n }\n return events;\n }\n if (message.type === \"assistant\") {\n const content = message.message?.content ?? [];\n for (const [index, block] of content.entries()) {\n if (block.type === \"text\" && block.text) {\n const itemId = block.id ?? messageItemId(state.text, message, \"text\", content, index);\n const previous = state.text.get(itemId) ?? \"\";\n const delta = block.text.startsWith(previous) ? block.text.slice(previous.length) : block.text;\n state.text.set(itemId, block.text);\n if (delta) events.push({ method: \"item/agentMessage/delta\", params: { itemId, delta } });\n }\n if (block.type === \"thinking\" && block.thinking) {\n const itemId = block.id ?? messageItemId(state.reasoning, message, \"reason\", content, index);\n const previous = state.reasoning.get(itemId) ?? \"\";\n const delta = block.thinking.startsWith(previous) ? block.thinking.slice(previous.length) : block.thinking;\n state.reasoning.set(itemId, block.thinking);\n if (delta) events.push({ method: \"item/reasoning/summaryTextDelta\", params: { itemId, delta } });\n }\n if (block.type === \"tool_use\") {\n const item = { type: \"toolUse\", id: block.id, name: block.name, input: block.input, status: \"inProgress\" };\n if (!state.activities.has(item.id)) {\n state.activities.add(item.id);\n events.push({ method: \"item/started\", params: { item } });\n }\n }\n }\n }\n if (message.type === \"user\") {\n for (const block of message.message?.content ?? []) {\n if (block.type !== \"tool_result\") continue;\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: block.tool_use_id,\n output: block.content,\n status: block.is_error ? \"failed\" : \"completed\",\n },\n },\n });\n }\n }\n if (message.type === \"system\" && message.subtype === \"permission_denied\") {\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: message.tool_use_id,\n name: message.tool_name,\n output: message.message,\n status: \"failed\",\n },\n },\n });\n }\n return events;\n}\n\nfunction streamItemId(state, type, index) {\n return `${state.currentMessageId ?? \"message\"}-${type}-${index ?? 0}`;\n}\n\nfunction messageItemId(items, message, type, content, index) {\n const prefix = `${message.message?.id ?? message.uuid ?? \"message\"}-${type}-`;\n const ordinal = content.slice(0, index).filter(block => block.type === (type === \"reason\" ? \"thinking\" : type)).length;\n const existing = [...items.keys()]\n .filter(itemId => itemId.startsWith(prefix))\n .sort((left, right) => Number(left.slice(prefix.length)) - Number(right.slice(prefix.length)));\n return existing[ordinal] ?? `${prefix}${index}`;\n}\n\nfunction responseForRequest(pending, response) {\n if (response.action === \"accept\" || response.action === \"allow\") {\n return { behavior: \"allow\", updatedInput: response.updatedInput ?? pending.input };\n }\n if (response.action === \"answer\") {\n return { behavior: \"allow\", updatedInput: { ...pending.input, answers: response.answers ?? {} } };\n }\n return { behavior: \"deny\", message: response.message ?? \"User declined this Claude tool request\" };\n}\n\nfunction resultError(message) {\n if (!message?.is_error) return null;\n return new Error(message.errors?.join(\"\\n\") || message.subtype || \"Claude SDK turn failed\");\n}\n\nfunction sdkPermissionMode(message) {\n if (message.permissionMode) return message.permissionMode;\n if (message.approvalPolicy === \"never\") return \"dontAsk\";\n if (message.sandbox === \"read-only\") return \"plan\";\n return \"default\";\n}\n","import { EventEmitter } from \"node:events\";\n\nimport { ClaudeCliClient } from \"./cli-client.mjs\";\n\nconst DEFAULT_MODELS = [\n {\n id: \"sonnet\",\n displayName: \"Claude Sonnet\",\n description: \"Claude Code default balanced model\",\n isDefault: true,\n defaultReasoningEffort: \"medium\",\n supportedReasoningEfforts: [{ reasoningEffort: \"low\" }, { reasoningEffort: \"medium\" }, { reasoningEffort: \"high\" }],\n },\n {\n id: \"opus\",\n displayName: \"Claude Opus\",\n description: \"Claude Code high-capability model\",\n isDefault: false,\n defaultReasoningEffort: \"high\",\n supportedReasoningEfforts: [{ reasoningEffort: \"medium\" }, { reasoningEffort: \"high\" }],\n },\n {\n id: \"haiku\",\n displayName: \"Claude Haiku\",\n description: \"Claude Code fast model\",\n isDefault: false,\n defaultReasoningEffort: \"low\",\n supportedReasoningEfforts: [{ reasoningEffort: \"low\" }, { reasoningEffort: \"medium\" }],\n },\n];\n\nexport class ClaudeSessionRuntime extends EventEmitter {\n constructor({\n client = new ClaudeCliClient(),\n cwd = process.cwd(),\n } = {}) {\n super();\n this.client = client;\n this.cwd = cwd;\n this.sessions = new Map();\n this.models = DEFAULT_MODELS;\n this.selectedSessionId = null;\n this.diagnostics = [];\n this.closed = false;\n\n this.client.on?.(\"activity\", message => this.handleActivity(message));\n this.client.on?.(\"request\", request => this.emit(\"request\", request));\n this.client.on?.(\"diagnostic\", message => this.addDiagnostic(message));\n this.client.on?.(\"exit\", details => {\n this.addDiagnostic(`Claude backend exited: ${JSON.stringify(details)}`);\n this.emitChange();\n });\n }\n\n async initialize() {\n await this.client.start?.();\n const models = await this.client.listModels?.().catch((error) => {\n this.addDiagnostic(`Claude model list failed: ${error.message}`);\n return null;\n });\n if (Array.isArray(models) && models.length > 0) this.models = models;\n this.emitChange();\n return this.snapshot();\n }\n\n async createSession({\n model,\n effort,\n sandbox = \"workspace-write\",\n approvalPolicy = \"on-request\",\n cwd = this.cwd,\n ephemeral = false,\n settingSources = [\"user\", \"project\", \"local\"],\n systemPrompt = { type: \"preset\", preset: \"claude_code\" },\n } = {}) {\n const selectedModel = model ?? this.models.find(candidate => candidate.isDefault)?.id ?? \"sonnet\";\n const selectedEffort = effort\n ?? this.models.find(candidate => candidate.id === selectedModel)?.defaultReasoningEffort\n ?? \"medium\";\n const created = await this.client.createSession?.({\n model: selectedModel,\n effort: selectedEffort,\n sandbox,\n approvalPolicy,\n cwd,\n ephemeral,\n settingSources,\n systemPrompt,\n });\n const session = this.upsertSession(created ?? {}, {\n id: created?.id,\n model: selectedModel,\n effort: selectedEffort,\n sandbox,\n approvalPolicy,\n cwd,\n ephemeral,\n });\n if (!session.ephemeral) this.selectedSessionId = session.id;\n this.emitChange();\n return publicSession(session);\n }\n\n async resumeSession(sessionId, defaults = {}) {\n if (!sessionId?.trim()) throw new Error(\"sessionId is required\");\n const resumed = await this.client.resumeSession?.(sessionId, {\n cwd: defaults.cwd ?? this.cwd,\n ...defaults,\n });\n const session = this.upsertSession(resumed ?? {}, { id: sessionId, ...defaults });\n if (Array.isArray(resumed?.turns) && resumed.turns.length > 0) session.turns = structuredClone(resumed.turns);\n if (!session.ephemeral) this.selectedSessionId = sessionId;\n this.emitChange();\n return publicSession(session);\n }\n\n async sendMessage(sessionId, { text, model, effort, sandbox, approvalPolicy, cwd } = {}) {\n const session = this.requireSession(sessionId);\n if (!text?.trim()) throw new Error(\"message text is required\");\n const next = {\n model: model ?? session.model,\n effort: effort ?? session.effort,\n sandbox: sandbox ?? session.sandbox,\n approvalPolicy: approvalPolicy ?? session.approvalPolicy,\n cwd: cwd ?? session.cwd,\n };\n Object.assign(session, next, { updatedAt: nowSeconds() });\n const turn = await this.client.sendMessage(sessionId, { text, ...next });\n this.ensureTurn(session, turn);\n this.emitChange();\n return structuredClone(turn);\n }\n\n async interruptTurn(sessionId, turnId) {\n await this.client.interruptTurn?.(sessionId, turnId);\n }\n\n async resolveRequest(requestId, response = {}) {\n if (typeof this.client.resolveRequest !== \"function\") {\n throw new Error(\"Claude client does not support interactive request resolution\");\n }\n this.client.resolveRequest(requestId, response);\n }\n\n rejectRequest(requestId, error) {\n this.client.rejectRequest?.(requestId, error);\n }\n\n async releaseSession(sessionId) {\n if (!sessionId) return;\n await this.client.releaseSession?.(sessionId).catch((error) => {\n this.addDiagnostic(`Claude session release failed for ${sessionId}: ${error.message}`);\n });\n this.sessions.delete(sessionId);\n if (this.selectedSessionId === sessionId) this.selectedSessionId = null;\n this.emitChange();\n }\n\n getSession(sessionId) {\n const session = this.sessions.get(sessionId);\n return session ? publicSession(session) : null;\n }\n\n snapshot() {\n return {\n connected: !this.closed,\n selectedSessionId: this.selectedSessionId,\n cwd: this.cwd,\n models: structuredClone(this.models),\n sessions: [...this.sessions.values()]\n .sort((left, right) => right.updatedAt - left.updatedAt)\n .map(session => publicSession(session)),\n diagnostics: this.diagnostics.slice(-20),\n };\n }\n\n async close() {\n if (this.closed) return;\n this.closed = true;\n await this.client.close?.();\n }\n\n handleActivity(message) {\n const params = message.params ?? {};\n const sessionId = params.sessionId ?? params.session?.id ?? null;\n const session = sessionId ? this.sessions.get(sessionId) : null;\n if (message.method === \"turn/completed\" && session) {\n const turn = params.turn;\n if (turn?.id) this.ensureTurn(session, turn);\n }\n this.emit(\"activity\", message);\n this.emitChange();\n }\n\n upsertSession(input = {}, defaults = {}) {\n const id = input.id ?? defaults.id;\n if (!id) throw new Error(\"Claude session id is required\");\n const existing = this.sessions.get(id) ?? { id, turns: [], createdAt: nowSeconds() };\n Object.assign(existing, {\n model: defaults.model ?? input.model ?? existing.model ?? this.models.find(candidate => candidate.isDefault)?.id ?? \"sonnet\",\n effort: defaults.effort ?? input.effort ?? existing.effort ?? \"medium\",\n sandbox: defaults.sandbox ?? input.sandbox ?? existing.sandbox ?? \"workspace-write\",\n approvalPolicy: defaults.approvalPolicy ?? input.approvalPolicy ?? existing.approvalPolicy ?? \"on-request\",\n cwd: defaults.cwd ?? input.cwd ?? existing.cwd ?? this.cwd,\n ephemeral: Boolean(defaults.ephemeral ?? input.ephemeral ?? existing.ephemeral),\n updatedAt: input.updatedAt ?? nowSeconds(),\n });\n if (Array.isArray(input.turns) && input.turns.length > 0) existing.turns = structuredClone(input.turns);\n this.sessions.set(id, existing);\n return existing;\n }\n\n requireSession(sessionId) {\n const session = this.sessions.get(sessionId);\n if (!session) throw new Error(`unknown Claude session ${sessionId}`);\n return session;\n }\n\n ensureTurn(session, turn) {\n if (!turn?.id) return;\n const existing = session.turns.findIndex(candidate => candidate.id === turn.id);\n if (existing >= 0) {\n if (session.turns[existing].status !== \"inProgress\" && turn.status === \"inProgress\") return;\n session.turns[existing] = structuredClone(turn);\n }\n else session.turns.push(structuredClone(turn));\n session.updatedAt = nowSeconds();\n }\n\n addDiagnostic(message) {\n this.diagnostics.push(String(message));\n this.diagnostics.splice(0, Math.max(0, this.diagnostics.length - 50));\n }\n\n emitChange() {\n this.emit(\"change\", this.snapshot());\n }\n}\n\nfunction publicSession(session) {\n return structuredClone({\n id: session.id,\n model: session.model,\n effort: session.effort,\n sandbox: session.sandbox,\n approvalPolicy: session.approvalPolicy,\n cwd: session.cwd,\n ephemeral: session.ephemeral,\n turns: session.turns ?? [],\n });\n}\n\nfunction nowSeconds() {\n return Date.now() / 1000;\n}\n","import { definePlugin } from \"./internal/plugin-sdk.mjs\";\nimport { ClaudeCliClient } from \"./cli-client.mjs\";\nimport { ClaudeSdkClient } from \"./sdk-client.mjs\";\nimport { ClaudeSessionRuntime } from \"./session-runtime.mjs\";\n\nexport const CLAUDE_EXECUTION_CAPABILITY = \"relay.execution.claude.v1\";\n\nexport function createClaudeExecutionPlugin(config = {}) {\n return definePlugin({\n manifest: {\n id: \"relay.execution.claude\",\n version: \"1.0.0\",\n provides: { [CLAUDE_EXECUTION_CAPABILITY]: \"1.0.0\" },\n optional: { \"relay.logging.v1\": \"^1.0.0\" },\n permissions: [\"process:claude\", \"filesystem:workspace\"],\n },\n activate({ capabilities, defer }) {\n const logger = capabilities.optional(\"relay.logging.v1\") ?? console;\n const client = config.client ?? createClaudeClient(config);\n const runtime = new ClaudeSessionRuntime({ client, cwd: config.cwd ?? process.cwd() });\n defer(() => runtime.close());\n const ready = runtime.initialize();\n void ready.catch((error) => {\n logger.error?.(`Relay Claude backend failed to initialize: ${error?.stack ?? error}`);\n });\n return {\n capabilities: { [CLAUDE_EXECUTION_CAPABILITY]: executionCapability(runtime, ready) },\n };\n },\n });\n}\n\nfunction executionCapability(runtime, ready) {\n return Object.freeze({\n whenReady: () => ready,\n listModels: () => structuredClone(runtime.models),\n hasSession: (sessionId) => runtime.sessions.has(sessionId),\n getSession: runtime.getSession.bind(runtime),\n patchSession(sessionId, patch) {\n const session = runtime.sessions.get(sessionId);\n if (session) Object.assign(session, structuredClone(patch));\n return Boolean(session);\n },\n createSession: runtime.createSession.bind(runtime),\n resumeSession: runtime.resumeSession.bind(runtime),\n sendMessage: runtime.sendMessage.bind(runtime),\n interruptTurn: runtime.interruptTurn.bind(runtime),\n releaseSession: runtime.releaseSession.bind(runtime),\n resolveRequest: runtime.resolveRequest.bind(runtime),\n rejectRequest: runtime.rejectRequest.bind(runtime),\n subscribeActivity: (listener) => subscribe(runtime, \"activity\", listener),\n subscribeRequest: (listener) => subscribe(runtime, \"request\", listener),\n });\n}\n\nfunction createClaudeClient(config) {\n const backend = config.backend ?? \"auto\";\n if (backend === \"cli\") return createClaudeCliClient(config);\n const sdkClient = new ClaudeSdkClient({\n pathToClaudeCodeExecutable: config.codeExecutablePath,\n requestTimeoutMs: positiveInteger(config.requestTimeoutMs, 30 * 60_000),\n });\n if (backend === \"sdk\") return sdkClient;\n return new FallbackClaudeClient({ primary: sdkClient, fallback: createClaudeCliClient(config) });\n}\n\nfunction createClaudeCliClient(config) {\n return new ClaudeCliClient({\n command: config.command ?? \"claude\",\n args: config.args ?? [],\n requestTimeoutMs: positiveInteger(config.requestTimeoutMs, 30 * 60_000),\n });\n}\n\nclass FallbackClaudeClient extends ClaudeCliClient {\n constructor({ primary, fallback }) {\n super();\n this.primary = primary;\n this.fallback = fallback;\n this.active = primary;\n for (const event of [\"activity\", \"request\", \"diagnostic\", \"exit\"]) {\n primary.on(event, (...args) => this.emit(event, ...args));\n fallback.on(event, (...args) => this.emit(event, ...args));\n }\n }\n\n async start() {\n try {\n await this.primary.start();\n this.active = this.primary;\n } catch (error) {\n this.emit(\"diagnostic\", `Claude Agent SDK unavailable; falling back to CLI: ${error.message}`);\n await this.fallback.start();\n this.active = this.fallback;\n }\n }\n\n listModels(...args) { return this.active.listModels(...args); }\n createSession(...args) { return this.active.createSession(...args); }\n resumeSession(...args) { return this.active.resumeSession(...args); }\n sendMessage(...args) { return this.active.sendMessage(...args); }\n interruptTurn(...args) { return this.active.interruptTurn(...args); }\n releaseSession(...args) { return this.active.releaseSession(...args); }\n resolveRequest(...args) { return this.active.resolveRequest?.(...args); }\n rejectRequest(...args) { return this.active.rejectRequest?.(...args); }\n close(...args) { return this.active.close(...args); }\n}\n\nfunction subscribe(emitter, event, listener) {\n emitter.on(event, listener);\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n emitter.off(event, listener);\n };\n}\n\nfunction positiveInteger(value, fallback) {\n return Number.isSafeInteger(value) && value > 0 ? value : fallback;\n}\n","import { LlmAdapter } from \"@deepseek-ai/dsh-llm\";\n\nexport const CLAUDE_PRESET = \"relay-claude\";\nexport const CLAUDE_PROVIDER = \"relay-claude\";\nexport const CLAUDE_ACTIVITY_EVENT = \"relay-claude/activity\";\n\nexport class ClaudeDshAdapter extends LlmAdapter {\n constructor({ runtime, ready, linkStore = null, logger = console }) {\n super();\n this.runtime = runtime;\n this.ready = ready;\n this.logger = logger;\n this.linkStore = linkStore;\n this.links = new Map();\n this.settings = new Map();\n this.pendingSessions = new Map();\n this.agents = new Map();\n for (const [sessionId, record] of linkStore?.entries() ?? []) {\n const claudeSessionId = record.claudeSessionId ?? record.sessionId ?? record.threadId;\n if (claudeSessionId) this.links.set(sessionId, claudeSessionId);\n this.settings.set(sessionId, record.config);\n }\n }\n\n providerInfo() {\n return { id: CLAUDE_PROVIDER, name: \"Claude Code\" };\n }\n\n async listModels() {\n await this.ready;\n return runtimeModels(this.runtime)\n .sort((left, right) => Number(Boolean(right.isDefault)) - Number(Boolean(left.isDefault)))\n .map(model => ({\n provider: CLAUDE_PROVIDER,\n id: model.id,\n name: model.displayName ?? model.id,\n description: model.description,\n inputModalities: [\"text\", \"image\"],\n }));\n }\n\n async resolveModel(provider, model) {\n await this.ready;\n const info = runtimeModels(this.runtime).find(candidate => candidate.id === model);\n return {\n provider,\n id: model,\n name: info?.displayName ?? model,\n inputModalities: [\"text\", \"image\"],\n ...(Array.isArray(info?.supportedReasoningEfforts)\n ? {\n reasoning: {\n efforts: info.supportedReasoningEfforts.map(effort => ({\n id: effort.reasoningEffort ?? effort.id ?? effort,\n name: reasoningEffortName(effort.reasoningEffort ?? effort.id ?? effort),\n })),\n defaultEffort: info.defaultReasoningEffort,\n },\n }\n : {}),\n };\n }\n\n attachAgent(agent, requestedPreset = effectivePreset(agent.session)) {\n this.agents.set(String(agent.id), agent);\n if (requestedPreset !== CLAUDE_PRESET) return false;\n this.configuration(agent.id, agent.session.header.cwd);\n return true;\n }\n\n servesAgent(agent) {\n return effectivePreset(agent.session) === CLAUDE_PRESET;\n }\n\n detachAgent(sessionId) {\n this.agents.delete(String(sessionId));\n }\n\n configuration(sessionId, cwd) {\n const key = String(sessionId);\n const existing = this.settings.get(key);\n if (existing) return existing;\n const models = runtimeModels(this.runtime);\n const model = models.find(candidate => candidate.isDefault) ?? models[0];\n const config = {\n model: model?.id ?? \"sonnet\",\n effort: model?.defaultReasoningEffort ?? \"medium\",\n sandbox: \"workspace-write\",\n approvalPolicy: \"on-request\",\n cwd: cwd ?? process.cwd(),\n settingSources: [\"user\", \"project\", \"local\"],\n systemPrompt: { type: \"preset\", preset: \"claude_code\" },\n };\n this.settings.set(key, config);\n return config;\n }\n\n configure(sessionId, patch = {}) {\n const key = String(sessionId);\n const next = { ...this.configuration(key), ...compact(patch) };\n this.settings.set(key, next);\n const claudeSessionId = this.links.get(key);\n if (claudeSessionId) {\n patchRuntimeSession(this.runtime, claudeSessionId, next);\n }\n this.persistLink(key);\n return structuredClone(next);\n }\n\n async ensureSession(sessionId) {\n const key = String(sessionId);\n const pending = this.pendingSessions.get(key);\n if (pending) return pending;\n const operation = this.createOrResumeSession(key).finally(() => {\n this.pendingSessions.delete(key);\n });\n this.pendingSessions.set(key, operation);\n return operation;\n }\n\n async createOrResumeSession(sessionId) {\n await this.ready;\n const settings = { ...this.configuration(sessionId) };\n const linked = this.links.get(sessionId);\n if (linked && hasRuntimeSession(this.runtime, linked)) return linked;\n if (linked) {\n try {\n await this.runtime.resumeSession(linked, settings);\n return linked;\n } catch (error) {\n this.logger.warn(`Relay could not resume Claude session ${linked}; creating a replacement: ${error.message}`);\n this.links.delete(sessionId);\n }\n }\n const created = await this.runtime.createSession(settings);\n this.links.set(sessionId, created.id);\n this.persistLink(sessionId);\n return created.id;\n }\n\n persistLink(sessionId) {\n this.linkStore?.set(sessionId, {\n claudeSessionId: this.links.get(sessionId) ?? null,\n config: this.configuration(sessionId),\n });\n }\n\n sessionFor(sessionId) {\n return this.links.get(String(sessionId)) ?? null;\n }\n\n dshSessionForClaudeSession(claudeSessionId) {\n for (const [sessionId, candidate] of this.links) {\n if (candidate === claudeSessionId) return sessionId;\n }\n return null;\n }\n\n async *stream(options) {\n if (options.purpose) {\n yield* this.streamAuxiliary(options);\n return;\n }\n const sessionId = String(options.sessionId ?? \"\");\n if (!sessionId) throw new Error(\"Relay Claude adapter requires a DSH session id\");\n const text = latestUserText(options.messages);\n if (!text) throw new Error(\"Relay Claude adapter received no user text\");\n const agent = this.agents.get(sessionId);\n if (!agent) throw new Error(`Relay Claude adapter has no attached agent for ${sessionId}`);\n const nativePermissions = permissionConfiguration(agent.session.events);\n const config = this.configure(sessionId, {\n ...(options.provider === CLAUDE_PROVIDER ? { model: options.model } : {}),\n ...(options.provider === CLAUDE_PROVIDER ? { effort: options.reasoningEffort } : {}),\n ...nativePermissions,\n cwd: agent.session.header.cwd,\n });\n const dshTools = structuredClone(options.tools ?? []);\n const availableTools = new Set(dshTools.map(tool => tool.name));\n const executeDshTool = async ({ name, arguments: args, callId, signal }) => {\n if (!availableTools.has(name)) throw new Error(`DSH tool ${name} is not available for this DSH turn.`);\n if (!agent.ctx?.tools?.execute) throw new Error(\"The owning DSH Agent has no tool runtime\");\n return agent.ctx.tools.execute({\n callId,\n name,\n arguments: args,\n agent,\n signal: signal ?? options.signal ?? new AbortController().signal,\n });\n };\n const claudeSessionId = await this.ensureSession(sessionId);\n const queue = new ActivityQueue(options.signal, \"Claude\");\n const onActivity = (message) => {\n const candidate = message.params?.sessionId ?? message.params?.session?.id;\n if (candidate === claudeSessionId) queue.push(message);\n };\n const stopActivity = subscribeRuntimeActivity(this.runtime, onActivity);\n\n let turnId = null;\n try {\n const started = await this.runtime.sendMessage(claudeSessionId, { text, ...config, dshTools, executeDshTool });\n turnId = started.id;\n const state = createStreamState();\n let completedTurn = null;\n while (!completedTurn) {\n const message = await queue.next();\n const params = message.params ?? {};\n if (params.turnId && params.turnId !== turnId) continue;\n if (message.method === \"turn/completed\") {\n if (params.turn?.id !== turnId) continue;\n for (const item of params.turn.items ?? []) {\n for (const chunk of this.completeItem(agent, claudeSessionId, turnId, item, state)) yield chunk;\n }\n completedTurn = params.turn;\n break;\n }\n for (const chunk of this.projectActivity(agent, claudeSessionId, turnId, message, state)) yield chunk;\n }\n for (const block of state.blocks.values()) {\n if (block.closed) continue;\n block.closed = true;\n yield { type: \"block-end\", index: block.index, block: { type: block.type, text: block.text } };\n }\n if (completedTurn.status === \"failed\") {\n yield {\n type: \"finish\",\n reason: { kind: \"error\", failure: { message: completedTurn.error?.message ?? \"Claude turn failed\", code: \"CLAUDE_TURN_FAILED\" } },\n };\n } else {\n yield { type: \"finish\", reason: { kind: \"stop\" }, replayState: { claudeSessionId, turnId } };\n }\n } catch (error) {\n if (options.signal?.aborted) {\n if (turnId) await this.runtime.interruptTurn(claudeSessionId, turnId).catch(() => {});\n yield { type: \"finish\", reason: { kind: \"aborted\", failure: { message: \"Claude turn cancelled\", code: \"ABORTED\" } } };\n return;\n }\n throw error;\n } finally {\n stopActivity();\n queue.close();\n }\n }\n\n async *streamAuxiliary(options) {\n await this.ready;\n const text = auxiliaryInput(options.messages);\n if (!text) throw new Error(`Relay Claude adapter received no ${options.purpose} input`);\n const sessionId = String(options.sessionId ?? \"\");\n const agent = this.agents.get(sessionId);\n const cwd = agent?.session.header.cwd ?? this.settings.get(sessionId)?.cwd ?? process.cwd();\n const created = await this.runtime.createSession({\n model: options.model,\n effort: options.reasoningEffort,\n sandbox: \"read-only\",\n approvalPolicy: \"never\",\n cwd,\n ephemeral: true,\n settingSources: [\"user\"],\n systemPrompt: options.system,\n });\n const claudeSessionId = created.id;\n const queue = new ActivityQueue(options.signal, \"Claude\");\n const onActivity = (message) => {\n const candidate = message.params?.sessionId ?? message.params?.session?.id;\n if (candidate === claudeSessionId) queue.push(message);\n };\n const stopActivity = subscribeRuntimeActivity(this.runtime, onActivity);\n let turnId = null;\n try {\n const started = await this.runtime.sendMessage(claudeSessionId, {\n text,\n model: options.model,\n effort: options.reasoningEffort,\n sandbox: \"read-only\",\n approvalPolicy: \"never\",\n });\n turnId = started.id;\n const state = createStreamState();\n let completedTurn = null;\n while (!completedTurn) {\n const message = await queue.next();\n const params = message.params ?? {};\n if (params.turnId && params.turnId !== turnId) continue;\n if (message.method === \"turn/completed\") {\n if (params.turn?.id !== turnId) continue;\n for (const item of params.turn.items ?? []) {\n for (const chunk of completeAuxiliaryItem(state, item)) yield chunk;\n }\n completedTurn = params.turn;\n break;\n }\n for (const chunk of projectAuxiliaryActivity(message, state)) yield chunk;\n }\n for (const block of state.blocks.values()) {\n if (block.closed) continue;\n block.closed = true;\n yield { type: \"block-end\", index: block.index, block: { type: block.type, text: block.text } };\n }\n yield completedTurn.status === \"failed\"\n ? { type: \"finish\", reason: { kind: \"error\", failure: { message: completedTurn.error?.message ?? `Claude ${options.purpose} failed`, code: \"CLAUDE_AUXILIARY_FAILED\" } } }\n : { type: \"finish\", reason: { kind: \"stop\" } };\n } finally {\n stopActivity();\n queue.close();\n await this.runtime.releaseSession(claudeSessionId);\n }\n }\n\n projectActivity(agent, claudeSessionId, turnId, message, state) {\n const params = message.params ?? {};\n if (message.method === \"item/reasoning/summaryTextDelta\" || message.method === \"item/reasoning/textDelta\") {\n return textDelta(state, params.itemId, \"reasoning\", params.delta ?? \"\");\n }\n if (message.method === \"item/agentMessage/delta\") {\n return textDelta(state, params.itemId, \"text\", params.delta ?? \"\");\n }\n if (message.method === \"item/started\") {\n if (isActivityItem(params.item)) this.appendActivity(agent, claudeSessionId, turnId, params.item, \"started\", state);\n return [];\n }\n if (message.method === \"item/completed\") return this.completeItem(agent, claudeSessionId, turnId, params.item, state);\n return [];\n }\n\n completeItem(agent, claudeSessionId, turnId, item, state) {\n if (!item?.id || state.completed.has(item.id)) return [];\n state.completed.add(item.id);\n if (item.type === \"reasoning\") return completeTextItem(state, item.id, \"reasoning\", reasoningText(item));\n if (item.type === \"agentMessage\") return completeTextItem(state, item.id, \"text\", item.text ?? \"\");\n if (isActivityItem(item)) this.appendActivity(agent, claudeSessionId, turnId, item, \"completed\", state);\n return [];\n }\n\n appendActivity(agent, claudeSessionId, turnId, item, phase, state) {\n const previous = state.activityItems.get(item.id) ?? {};\n const merged = {\n ...previous,\n ...item,\n input: item.input ?? previous.input,\n arguments: item.arguments ?? previous.arguments,\n name: item.name ?? previous.name,\n tool: item.tool ?? previous.tool,\n };\n state.activityItems.set(item.id, merged);\n if (!state.startedActivities.has(item.id)) {\n state.startedActivities.add(item.id);\n agent.session.append(CLAUDE_ACTIVITY_EVENT, activityPayload(claudeSessionId, turnId, merged, \"started\"));\n }\n if (phase === \"completed\" && !state.completedActivities.has(item.id)) {\n state.completedActivities.add(item.id);\n agent.session.append(CLAUDE_ACTIVITY_EVENT, activityPayload(claudeSessionId, turnId, merged, \"completed\"));\n }\n }\n}\n\nclass ActivityQueue {\n constructor(signal, label) {\n this.signal = signal;\n this.label = label;\n this.values = [];\n this.waiters = [];\n this.closed = false;\n }\n\n push(value) {\n if (this.closed) return;\n const waiter = this.waiters.shift();\n if (waiter) waiter.resolve(value);\n else this.values.push(value);\n }\n\n next() {\n if (this.values.length) return Promise.resolve(this.values.shift());\n if (this.closed) return Promise.reject(new Error(`${this.label} activity stream closed`));\n if (this.signal?.aborted) return Promise.reject(this.signal.reason ?? new Error(\"aborted\"));\n return new Promise((resolve, reject) => {\n const waiter = { resolve, reject };\n this.waiters.push(waiter);\n if (this.signal) {\n const abort = () => {\n const index = this.waiters.indexOf(waiter);\n if (index >= 0) this.waiters.splice(index, 1);\n reject(this.signal.reason ?? new Error(\"aborted\"));\n };\n this.signal.addEventListener(\"abort\", abort, { once: true });\n waiter.resolve = (value) => {\n this.signal.removeEventListener(\"abort\", abort);\n resolve(value);\n };\n }\n });\n }\n\n close() {\n this.closed = true;\n for (const waiter of this.waiters.splice(0)) waiter.reject(new Error(`${this.label} activity stream closed`));\n }\n}\n\nfunction createStreamState() {\n return {\n nextIndex: 0,\n blocks: new Map(),\n completed: new Set(),\n activityItems: new Map(),\n startedActivities: new Set(),\n completedActivities: new Set(),\n };\n}\n\nfunction textDelta(state, id, type, delta) {\n if (!id || !delta) return [];\n let block = state.blocks.get(id);\n const chunks = [];\n if (!block) {\n block = { index: state.nextIndex++, type, text: \"\", closed: false };\n state.blocks.set(id, block);\n chunks.push({ type: \"block-start\", index: block.index, blockType: type });\n }\n if (block.closed) return chunks;\n block.text += delta;\n chunks.push({ type: type === \"reasoning\" ? \"reasoning-delta\" : \"text-delta\", index: block.index, text: delta });\n return chunks;\n}\n\nfunction completeTextItem(state, id, type, completeText) {\n const chunks = [];\n let block = state.blocks.get(id);\n if (!block) {\n block = { index: state.nextIndex++, type, text: \"\", closed: false };\n state.blocks.set(id, block);\n chunks.push({ type: \"block-start\", index: block.index, blockType: type });\n }\n if (completeText && completeText.startsWith(block.text) && completeText.length > block.text.length) {\n const delta = completeText.slice(block.text.length);\n block.text = completeText;\n chunks.push({ type: type === \"reasoning\" ? \"reasoning-delta\" : \"text-delta\", index: block.index, text: delta });\n }\n if (!block.closed) {\n block.closed = true;\n chunks.push({ type: \"block-end\", index: block.index, block: { type, text: block.text } });\n }\n return chunks;\n}\n\nfunction activityPayload(claudeSessionId, turnId, item, phase) {\n const activity = normalizeActivity(item, phase);\n return { version: 1, claudeSessionId, turnId, itemId: String(item.id), phase, activity };\n}\n\nfunction normalizeActivity(item, phase) {\n const type = String(item.type ?? \"toolUse\");\n const status = phase === \"started\" ? \"running\" : item.status === \"failed\" ? \"error\" : \"completed\";\n const title = item.tool ?? item.name ?? humanize(type);\n return bounded({\n type,\n status,\n title,\n summary: summarizeValue(item.arguments ?? item.input ?? item.prompt),\n input: item.arguments ?? item.input,\n output: item.output ?? item.result ?? item.error,\n });\n}\n\nfunction bounded(value) {\n return Object.fromEntries(Object.entries(value).flatMap(([key, entry]) => {\n if (entry === undefined || entry === null || entry === \"\") return [];\n const text = typeof entry === \"string\" ? entry : JSON.stringify(entry, null, 2);\n return [[key, text.length > 20_000 ? `${text.slice(0, 20_000)}\\n...` : text]];\n }));\n}\n\nfunction isActivityItem(item) {\n return item?.id && ![\"userMessage\", \"agentMessage\", \"reasoning\"].includes(item.type);\n}\n\nfunction permissionConfiguration(events) {\n let sandbox = \"workspace-write\";\n let approvalPolicy = \"on-request\";\n for (const event of events) {\n if (event.type === \"sandbox/mode\") sandbox = event.data.mode;\n if (event.type === \"approval/policy\") approvalPolicy = event.data.policy === \"never\" ? \"never\" : \"on-request\";\n if (event.type === \"permission/preset\") sandbox = event.data.preset;\n }\n return { sandbox, approvalPolicy };\n}\n\nfunction reasoningText(item) {\n return [...(item.summary ?? []), ...(item.content ?? [])].filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction summarizeValue(value) {\n if (value === undefined || value === null) return \"\";\n return firstLine(typeof value === \"string\" ? value : JSON.stringify(value));\n}\n\nfunction firstLine(value) {\n return String(value ?? \"\").split(\"\\n\")[0].slice(0, 240);\n}\n\nfunction humanize(value) {\n return String(value).replace(/([a-z])([A-Z])/g, \"$1 $2\").replace(/^./, letter => letter.toUpperCase());\n}\n\nfunction reasoningEffortName(value) {\n return String(value) === \"xhigh\" ? \"Extra high\" : humanize(value);\n}\n\nfunction latestUserText(messages) {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role !== \"user\") continue;\n const text = (message.content ?? [])\n .filter(block => block.type === \"text\")\n .map(block => block.text)\n .join(\"\\n\")\n .trim();\n if (!text) continue;\n if (message.source?.kind === \"user\" || isRelayActivation(message.source)) return text;\n }\n return \"\";\n}\n\nfunction auxiliaryInput(messages) {\n return messages.map((message) => {\n const text = (message?.content ?? [])\n .filter(block => block.type === \"text\")\n .map(block => block.text)\n .join(\"\\n\")\n .trim();\n return text ? `${message.role ?? \"user\"}: ${text}` : \"\";\n }).filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction projectAuxiliaryActivity(message, state) {\n const params = message.params ?? {};\n if (message.method === \"item/reasoning/summaryTextDelta\" || message.method === \"item/reasoning/textDelta\") {\n return textDelta(state, params.itemId, \"reasoning\", params.delta ?? \"\");\n }\n if (message.method === \"item/agentMessage/delta\") return textDelta(state, params.itemId, \"text\", params.delta ?? \"\");\n if (message.method === \"item/completed\") return completeAuxiliaryItem(state, params.item);\n return [];\n}\n\nfunction completeAuxiliaryItem(state, item) {\n if (!item?.id || state.completed.has(item.id)) return [];\n state.completed.add(item.id);\n if (item.type === \"reasoning\") return completeTextItem(state, item.id, \"reasoning\", reasoningText(item));\n if (item.type === \"agentMessage\") return completeTextItem(state, item.id, \"text\", item.text ?? \"\");\n return [];\n}\n\nfunction isRelayActivation(source) {\n return source?.kind === \"plugin\" && source.plugin === \"relay\";\n}\n\nfunction compact(value) {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined && item !== null));\n}\n\nfunction runtimeModels(runtime) {\n return typeof runtime.listModels === \"function\" ? runtime.listModels() : [...runtime.models];\n}\n\nfunction hasRuntimeSession(runtime, sessionId) {\n return typeof runtime.hasSession === \"function\"\n ? runtime.hasSession(sessionId)\n : runtime.sessions.has(sessionId);\n}\n\nfunction patchRuntimeSession(runtime, sessionId, patch) {\n if (typeof runtime.patchSession === \"function\") return runtime.patchSession(sessionId, patch);\n const session = runtime.sessions.get(sessionId);\n if (session) Object.assign(session, patch);\n return Boolean(session);\n}\n\nfunction subscribeRuntimeActivity(runtime, listener) {\n if (typeof runtime.subscribeActivity === \"function\") return runtime.subscribeActivity(listener);\n runtime.on(\"activity\", listener);\n return () => runtime.off(\"activity\", listener);\n}\n\nfunction effectivePreset(session) {\n for (let index = session.events.length - 1; index >= 0; index -= 1) {\n const event = session.events[index];\n if (event.type === \"agent-preset/selected\") return event.data.agentPreset;\n }\n return session.header.agentPreset;\n}\n","import { mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport class ClaudeLinkStore {\n constructor(path) {\n this.path = path;\n this.records = loadRecords(path);\n }\n\n entries() {\n return [...this.records.entries()].map(([sessionId, record]) => [sessionId, structuredClone(record)]);\n }\n\n set(sessionId, record) {\n this.records.set(String(sessionId), structuredClone(record));\n this.persist();\n }\n\n delete(sessionId) {\n if (!this.records.delete(String(sessionId))) return;\n this.persist();\n }\n\n persist() {\n mkdirSync(dirname(this.path), { recursive: true });\n const temporary = `${this.path}.${process.pid}.tmp`;\n const value = Object.fromEntries([...this.records.entries()].sort(([left], [right]) => left.localeCompare(right)));\n writeFileSync(temporary, `${JSON.stringify({ version: 1, sessions: value }, null, 2)}\\n`, { mode: 0o600 });\n renameSync(temporary, this.path);\n }\n}\n\nfunction loadRecords(path) {\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\"));\n if (parsed?.version !== 1 || !isObject(parsed.sessions)) return new Map();\n return new Map(Object.entries(parsed.sessions).filter(([, record]) => validRecord(record)));\n } catch (error) {\n if (error?.code === \"ENOENT\") return new Map();\n throw new Error(`Unable to read Claude DSH links from ${path}: ${error.message}`, { cause: error });\n }\n}\n\nfunction validRecord(record) {\n return isObject(record)\n && (record.claudeSessionId === null || typeof record.claudeSessionId === \"string\")\n && isObject(record.config);\n}\n\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","export async function handleClaudeSdkRequest(ctx, { adapter, runtime, request }) {\n const claudeSessionId = request.params?.sessionId;\n const dshSessionId = claudeSessionId ? adapter.dshSessionForClaudeSession(claudeSessionId) : null;\n const agent = dshSessionId ? ctx.agents.get(dshSessionId) : null;\n if (!agent) {\n runtime.rejectRequest(request.id, new Error(\"Claude request has no owning live DSH Session\"));\n return;\n }\n\n try {\n if (request.method === \"tool/requestApproval\") {\n const outcome = await ctx.approval.request({\n agent,\n toolName: approvalToolName(request),\n reason: approvalReason(request),\n signal: request.signal,\n });\n await runtime.resolveRequest(request.id, {\n action: outcome === \"allowed-once\" ? \"accept\" : \"decline\",\n updatedInput: request.params?.input,\n message: `DSH approval returned ${outcome}.`,\n });\n return;\n }\n if (request.method === \"tool/requestUserInput\") {\n const questions = normalizeQuestions(request.params?.input?.questions ?? []);\n const answer = await ctx.userQuestions.ask({ agent, questions, signal: request.signal });\n await runtime.resolveRequest(request.id, {\n action: \"answer\",\n answers: normalizeAnswers(answer, questions),\n });\n return;\n }\n runtime.rejectRequest(request.id, new Error(`Unsupported Claude interaction ${request.method}`));\n } catch (error) {\n runtime.rejectRequest(request.id, error);\n }\n}\n\nfunction approvalToolName(request) {\n const display = request.params?.displayName;\n if (typeof display === \"string\" && display.trim()) return `Claude ${display.trim()}`;\n const tool = request.params?.toolName;\n return tool ? `Claude ${tool}` : \"Claude tool\";\n}\n\nfunction approvalReason(request) {\n const params = request.params ?? {};\n const input = plainObject(params.input);\n if (typeof params.title === \"string\" && params.title.trim()) return params.title.trim();\n if (typeof params.description === \"string\" && params.description.trim()) return params.description.trim();\n if (typeof params.decisionReason === \"string\" && params.decisionReason.trim()) return params.decisionReason.trim();\n if (typeof input.command === \"string\" && input.command.trim()) return input.command.trim();\n if (typeof input.file_path === \"string\" && input.file_path.trim()) return input.file_path.trim();\n return `${params.toolName ?? \"Claude\"} requires permission to continue.`;\n}\n\nfunction normalizeQuestions(input) {\n return input.slice(0, 3).map((question, index) => ({\n id: `question-${index + 1}`,\n question: requiredString(question.question ?? question.header ?? `Question ${index + 1}`, \"question\"),\n header: String(question.header ?? \"Claude\").slice(0, 12),\n options: normalizeOptions(question.options ?? []),\n multiSelect: Boolean(question.multiSelect),\n detail: typeof question.detail === \"string\" ? question.detail : undefined,\n }));\n}\n\nfunction normalizeOptions(input) {\n if (!Array.isArray(input) || input.length === 0) {\n return [{ label: \"Continue\" }, { label: \"Cancel\" }];\n }\n return input.slice(0, 4).map(option => ({\n label: requiredString(option.label ?? option, \"option label\"),\n description: typeof option.description === \"string\" ? option.description : undefined,\n }));\n}\n\nfunction normalizeAnswers(answer, questions) {\n const byId = new Map(questions.map(question => [question.id, question]));\n return Object.fromEntries((answer.answers ?? []).flatMap((entry) => {\n const question = byId.get(entry.id);\n if (!question) return [];\n const selected = [...(entry.selected ?? []), ...(entry.custom ? [entry.custom] : [])].filter(Boolean);\n return [[question.question, question.multiSelect ? selected : selected[0] ?? \"\"]];\n }));\n}\n\nfunction requiredString(value, label) {\n const text = String(value ?? \"\").trim();\n if (!text) throw new Error(`Claude ${label} is required`);\n return text;\n}\n\nfunction plainObject(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) ? value : {};\n}\n","import { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { KNOWN_SESSION_EVENT_TYPES } from \"@deepseek-ai/dsh-session\";\nimport { definePlugin } from \"./internal/plugin-sdk.mjs\";\nimport { ClaudeDshAdapter, CLAUDE_ACTIVITY_EVENT, CLAUDE_PROVIDER } from \"./claude-adapter.js\";\nimport { ClaudeLinkStore } from \"./claude-link-store.js\";\nimport { handleClaudeSdkRequest } from \"./claude-tools.js\";\n\nexport function createDshClaudePlugin(ctx, config = {}) {\n return definePlugin({\n manifest: {\n id: \"relay.dsh.claude\", version: \"1.0.0\", provides: { \"relay.dsh.claude.v1\": \"1.0.0\" },\n requires: { \"relay.execution.claude.v1\": \"^1.0.0\" }, permissions: [\"dsh:llm\", \"dsh:agents\"],\n },\n async activate({ capabilities, defer }) {\n installClaudeSessionEventType();\n const runtime = capabilities.require(\"relay.execution.claude.v1\");\n const adapter = new ClaudeDshAdapter({\n runtime, ready: runtime.whenReady(),\n linkStore: new ClaudeLinkStore(resolveLinkPath(config.claudeLinkPath)), logger: ctx.logger,\n });\n defer(ctx.llm.registerAdapter([CLAUDE_PROVIDER], adapter));\n defer(runtime.subscribeRequest(request => {\n void handleClaudeSdkRequest(ctx, { adapter, runtime, request })\n .catch(error => ctx.logger.error(`Relay failed to handle a Claude interaction: ${error?.stack ?? error}`));\n }));\n defer(ctx.on(\"llm/stream\", (options, next) => {\n if (options.purpose || !options.sessionId) return next();\n const agent = ctx.agents.get(options.sessionId);\n return agent && adapter.servesAgent(agent) ? adapter.stream(options) : next();\n }, { global: true, prepend: true }));\n defer(ctx.on(\"agent/created\", ({ agent }) => { adapter.attachAgent(agent); }));\n defer(ctx.on(\"agent-preset/selected\", (sessionId, preset) => {\n const agent = ctx.agents.get(sessionId); if (agent) adapter.attachAgent(agent, preset);\n }, { global: true }));\n defer(ctx.on(\"agent/disposed\", ({ agent }) => { adapter.detachAgent(agent.id); }));\n for (const agent of ctx.agents.list()) adapter.attachAgent(agent);\n return { capabilities: { \"relay.dsh.claude.v1\": Object.freeze({ provider: CLAUDE_PROVIDER }) } };\n },\n });\n}\n\nexport function installClaudeSessionEventType() {\n if (KNOWN_SESSION_EVENT_TYPES.has(CLAUDE_ACTIVITY_EVENT)) return;\n if (typeof KNOWN_SESSION_EVENT_TYPES.add !== \"function\") throw new Error(\"This DSH build cannot register Relay Claude session events\");\n KNOWN_SESSION_EVENT_TYPES.add(CLAUDE_ACTIVITY_EVENT);\n}\n\nfunction resolveLinkPath(value) {\n const configured = value ?? process.env.RELAY_CLAUDE_LINK_PATH;\n return configured ? resolve(configured) : join(homedir(), \".relay\", \"claude-dsh-links.json\");\n}\n","import { cp, mkdir, stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nexport async function installManagedPreset(source, id) {\n const home = resolve(process.env.DSH_HOME?.trim() || join(homedir(), \".dsh\"));\n const target = join(home, \".agent-presets\", id);\n await mkdir(join(home, \".agent-presets\"), { recursive: true });\n if (await exists(target)) {\n if (!await exists(join(target, \".relay-managed\"))) {\n throw new Error(`Relay preset ${id} already exists and is not Relay-managed`);\n }\n } else {\n await mkdir(target, { recursive: true });\n }\n for (const file of [\"agent.cordis.yml\", \"preset.yml\", \".relay-managed\"]) {\n await cp(join(source, file), join(target, file));\n }\n return target;\n}\n\nasync function exists(path) {\n try { await stat(path); return true; } catch (error) {\n if (error?.code === \"ENOENT\") return false;\n throw error;\n }\n}\n","import { fileURLToPath } from \"node:url\";\nimport { PluginHost } from \"./internal/plugin-sdk.mjs\";\nimport { createClaudeExecutionPlugin } from \"./plugin.mjs\";\nimport { createDshClaudePlugin } from \"./dsh-plugin.js\";\nimport { installManagedPreset } from \"./preset.js\";\nexport { installClaudeSessionEventType } from \"./dsh-plugin.js\";\n\nexport const name = \"relay-dsh-plugin-claude\";\nexport const inject = [\"agents\", \"llm\", \"sessions\", \"sessionPersistence\", \"tools\", \"typert\", \"webServer\"];\n\nexport async function apply(ctx, config = {}) {\n const host = new PluginHost();\n const release = ctx.effect(() => () => host.dispose(), \"relay.claude()\");\n try {\n await installManagedPreset(fileURLToPath(new URL(\"../presets/relay-claude\", import.meta.url)), \"relay-claude\");\n await host.activate([\n createClaudeExecutionPlugin({\n client: config.claude?.client, backend: config.claudeBackend, command: config.claudeCommand,\n args: config.claudeArgs, codeExecutablePath: config.claudeCodeExecutablePath,\n requestTimeoutMs: config.claudeRequestTimeoutMs, cwd: config.cwd,\n }),\n createDshClaudePlugin(ctx, config),\n ]);\n } catch (error) { await release(); throw error; }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"host-plugin.js","names":["#entries","#drainActive","#disposeActive","DEFAULT_MODELS","DEFAULT_MODELS"],"sources":["../internal/plugin-sdk.mjs","../cli-client.mjs","../sdk-client.mjs","../session-runtime.mjs","../plugin.mjs","../claude-adapter.js","../claude-link-store.js","../claude-tools.js","../dsh-plugin.js","../preset.js","../host-plugin.js"],"sourcesContent":["import assert from \"node:assert/strict\";\n\nconst SEMVER_PATTERN = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$/;\nconst PLUGIN_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/;\nconst CAPABILITY_ID_PATTERN = /^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/;\n\nexport class CapabilityRegistry {\n #entries = new Map();\n\n register(name, version, value, providerId) {\n assertCapabilityName(name);\n assertSemanticVersion(version, `capability ${name}`);\n if (this.#entries.has(name)) {\n throw new Error(`capability ${name} is already available`);\n }\n this.#entries.set(name, Object.freeze({ name, version, value, providerId }));\n }\n\n unregisterProvider(providerId) {\n for (const [name, entry] of this.#entries) {\n if (entry.providerId === providerId) this.#entries.delete(name);\n }\n }\n\n require(name, range = \"*\") {\n const entry = this.#entries.get(name);\n if (!entry) throw new Error(`capability ${name} is not available`);\n if (!satisfiesVersion(entry.version, range)) {\n throw new Error(`capability ${name} ${entry.version} does not satisfy ${range}`);\n }\n return entry.value;\n }\n\n optional(name, range = \"*\") {\n if (!this.#entries.has(name)) return undefined;\n return this.require(name, range);\n }\n}\n\nexport class PluginHost {\n constructor() {\n this.capabilities = new CapabilityRegistry();\n this.active = [];\n this.disposed = false;\n }\n\n async activate(definitions) {\n if (this.active.length > 0) throw new Error(\"plugin host is already active\");\n if (this.disposed) throw new Error(\"plugin host is disposed\");\n\n const ordered = resolveActivationOrder(definitions);\n let current = null;\n try {\n for (const definition of ordered) {\n const access = createCapabilityAccess(definition.manifest, this.capabilities);\n const cleanups = [];\n let acceptingCleanups = true;\n const defer = (cleanup) => {\n assert.equal(typeof cleanup, \"function\", `plugin ${definition.manifest.id} cleanup must be a function`);\n assert.ok(acceptingCleanups, `plugin ${definition.manifest.id} cannot defer cleanup after activation`);\n cleanups.push(cleanup);\n return cleanup;\n };\n current = { id: definition.manifest.id, cleanups };\n let activation;\n try {\n activation = await definition.activate(Object.freeze({\n plugin: definition.manifest,\n capabilities: access,\n defer,\n })) ?? {};\n } finally {\n acceptingCleanups = false;\n }\n if (typeof activation.dispose === \"function\") cleanups.push(activation.dispose);\n const provided = activation.capabilities ?? {};\n validateProvidedCapabilities(definition.manifest, provided);\n for (const [name, version] of Object.entries(definition.manifest.provides)) {\n this.capabilities.register(name, version, provided[name], definition.manifest.id);\n }\n this.active.push(current);\n current = null;\n }\n } catch (error) {\n const rollbackErrors = [];\n if (current) {\n this.capabilities.unregisterProvider(current.id);\n rollbackErrors.push(...await disposeCleanups(current.cleanups));\n }\n rollbackErrors.push(...await this.#drainActive());\n if (rollbackErrors.length > 0) {\n throw new AggregateError(\n [error, ...rollbackErrors],\n `plugin activation failed: ${error?.message ?? error}; rollback also failed`,\n { cause: error },\n );\n }\n throw error;\n }\n return this;\n }\n\n async dispose() {\n if (this.disposed) return;\n this.disposed = true;\n await this.#disposeActive();\n }\n\n async #disposeActive() {\n const errors = await this.#drainActive();\n if (errors.length === 1) throw errors[0];\n if (errors.length > 1) throw new AggregateError(errors, \"multiple plugin cleanup operations failed\");\n }\n\n async #drainActive() {\n const errors = [];\n while (this.active.length > 0) {\n const plugin = this.active.pop();\n try {\n errors.push(...await disposeCleanups(plugin.cleanups));\n } finally {\n this.capabilities.unregisterProvider(plugin.id);\n }\n }\n return errors;\n }\n}\n\nasync function disposeCleanups(cleanups) {\n const errors = [];\n for (const cleanup of cleanups.reverse()) {\n try {\n await cleanup();\n } catch (error) {\n errors.push(error);\n }\n }\n return errors;\n}\n\nexport function definePlugin(definition) {\n assert.equal(typeof definition?.activate, \"function\", \"plugin activate must be a function\");\n const manifest = validateManifest(definition.manifest);\n return Object.freeze({ manifest, activate: definition.activate });\n}\n\nexport function validateManifest(input) {\n assert.ok(input && typeof input === \"object\" && !Array.isArray(input), \"plugin manifest is required\");\n assert.match(input.id ?? \"\", PLUGIN_ID_PATTERN, \"plugin id must be lowercase and stable\");\n assertSemanticVersion(input.version, `plugin ${input.id}`);\n const provides = validateCapabilityMap(input.provides, \"provides\", { ranges: false });\n const requires = validateCapabilityMap(input.requires, \"requires\", { ranges: true });\n const optional = validateCapabilityMap(input.optional, \"optional\", { ranges: true });\n for (const name of Object.keys(requires)) {\n assert.ok(!(name in optional), `capability ${name} cannot be both required and optional`);\n }\n const permissions = input.permissions ?? [];\n assert.ok(Array.isArray(permissions), \"plugin permissions must be an array\");\n assert.ok(permissions.every((permission) => typeof permission === \"string\" && permission.length > 0),\n \"plugin permissions must contain non-empty strings\");\n return Object.freeze({\n id: input.id,\n version: input.version,\n provides: Object.freeze(provides),\n requires: Object.freeze(requires),\n optional: Object.freeze(optional),\n permissions: Object.freeze([...permissions]),\n });\n}\n\nexport function satisfiesVersion(version, range) {\n const current = parseVersion(version);\n if (range === \"*\" || range === undefined) return true;\n if (SEMVER_PATTERN.test(range)) return compareVersions(current, parseVersion(range)) === 0;\n\n const majorWildcard = /^(0|[1-9]\\d*)\\.x$/.exec(range);\n if (majorWildcard) return current.major === Number(majorWildcard[1]);\n\n if (range.startsWith(\"^\")) {\n const minimum = parseVersion(range.slice(1));\n const upper = minimum.major > 0\n ? { major: minimum.major + 1, minor: 0, patch: 0 }\n : minimum.minor > 0\n ? { major: 0, minor: minimum.minor + 1, patch: 0 }\n : { major: 0, minor: 0, patch: minimum.patch + 1 };\n return compareVersions(current, minimum) >= 0 && compareVersions(current, upper) < 0;\n }\n throw new Error(`unsupported semantic version range ${range}`);\n}\n\nfunction resolveActivationOrder(definitions) {\n assert.ok(Array.isArray(definitions), \"plugin definitions must be an array\");\n const plugins = new Map();\n const providers = new Map();\n\n for (const definition of definitions) {\n assert.ok(definition?.manifest && typeof definition.activate === \"function\", \"invalid plugin definition\");\n const manifest = validateManifest(definition.manifest);\n if (plugins.has(manifest.id)) throw new Error(`duplicate plugin id ${manifest.id}`);\n plugins.set(manifest.id, definition);\n for (const [name, version] of Object.entries(manifest.provides)) {\n if (providers.has(name)) {\n throw new Error(`capability ${name} is provided by both ${providers.get(name).id} and ${manifest.id}`);\n }\n providers.set(name, { id: manifest.id, version });\n }\n }\n\n const dependencies = new Map([...plugins.keys()].map((id) => [id, new Set()]));\n for (const definition of plugins.values()) {\n const { manifest } = definition;\n for (const [name, range] of Object.entries(manifest.requires)) {\n const provider = providers.get(name);\n if (!provider || !satisfiesVersion(provider.version, range)) {\n const found = provider ? ` (found ${provider.version})` : \"\";\n throw new Error(`plugin ${manifest.id} requires ${name} ${range}${found}`);\n }\n dependencies.get(manifest.id).add(provider.id);\n }\n for (const [name, range] of Object.entries(manifest.optional)) {\n const provider = providers.get(name);\n if (!provider) continue;\n if (!satisfiesVersion(provider.version, range)) {\n throw new Error(`plugin ${manifest.id} optional capability ${name} requires ${range} (found ${provider.version})`);\n }\n dependencies.get(manifest.id).add(provider.id);\n }\n }\n\n const ordered = [];\n const visiting = new Set();\n const visited = new Set();\n const visit = (id) => {\n if (visiting.has(id)) throw new Error(`plugin dependency cycle includes ${id}`);\n if (visited.has(id)) return;\n visiting.add(id);\n for (const dependency of dependencies.get(id)) visit(dependency);\n visiting.delete(id);\n visited.add(id);\n ordered.push(plugins.get(id));\n };\n for (const id of plugins.keys()) visit(id);\n return ordered;\n}\n\nfunction createCapabilityAccess(manifest, registry) {\n return Object.freeze({\n require(name) {\n const range = manifest.requires[name];\n if (!range) throw new Error(`plugin ${manifest.id} did not declare required capability ${name}`);\n return registry.require(name, range);\n },\n optional(name) {\n const range = manifest.optional[name];\n if (!range) throw new Error(`plugin ${manifest.id} did not declare optional capability ${name}`);\n return registry.optional(name, range);\n },\n });\n}\n\nfunction validateProvidedCapabilities(manifest, provided) {\n assert.ok(provided && typeof provided === \"object\" && !Array.isArray(provided),\n `plugin ${manifest.id} capabilities must be an object`);\n const expected = Object.keys(manifest.provides).sort();\n const actual = Object.keys(provided).sort();\n assert.deepEqual(actual, expected, `plugin ${manifest.id} provided capabilities do not match its manifest`);\n for (const name of expected) {\n assert.notEqual(provided[name], undefined, `plugin ${manifest.id} did not provide ${name}`);\n }\n}\n\nfunction validateCapabilityMap(input, label, { ranges }) {\n const map = input ?? {};\n assert.ok(map && typeof map === \"object\" && !Array.isArray(map), `plugin ${label} must be an object`);\n const result = {};\n for (const [name, version] of Object.entries(map)) {\n assertCapabilityName(name);\n if (ranges) {\n satisfiesVersion(\"0.0.0\", version);\n } else {\n assertSemanticVersion(version, `capability ${name}`);\n }\n result[name] = version;\n }\n return result;\n}\n\nfunction assertCapabilityName(name) {\n assert.match(name ?? \"\", CAPABILITY_ID_PATTERN, \"capability id must be lowercase and stable\");\n}\n\nfunction assertSemanticVersion(version, label) {\n assert.match(version ?? \"\", SEMVER_PATTERN, `${label} must use a semantic version`);\n}\n\nfunction parseVersion(version) {\n assertSemanticVersion(version, \"version\");\n const [, major, minor, patch] = SEMVER_PATTERN.exec(version);\n return { major: Number(major), minor: Number(minor), patch: Number(patch) };\n}\n\nfunction compareVersions(left, right) {\n return left.major - right.major || left.minor - right.minor || left.patch - right.patch;\n}\n","import { spawn } from \"node:child_process\";\nimport { randomUUID } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport readline from \"node:readline\";\n\nconst DEFAULT_MODELS = [\n { id: \"sonnet\", displayName: \"Claude Sonnet\", isDefault: true, defaultReasoningEffort: \"medium\" },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\" },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\" },\n];\n\nexport class ClaudeCliClient extends EventEmitter {\n constructor({ command = \"claude\", args = [], requestTimeoutMs = 30 * 60_000 } = {}) {\n super();\n this.command = command;\n this.args = args;\n this.requestTimeoutMs = requestTimeoutMs;\n this.sessions = new Map();\n this.processes = new Map();\n this.closed = false;\n }\n\n async start() {\n this.closed = false;\n }\n\n async listModels() {\n return DEFAULT_MODELS;\n }\n\n async createSession(config = {}) {\n const id = config.sessionId ?? randomUUID();\n const session = { id, cwd: config.cwd ?? process.cwd(), created: false, config: structuredClone(config) };\n this.sessions.set(id, session);\n return { id, cwd: session.cwd, turns: [] };\n }\n\n async resumeSession(sessionId, config = {}) {\n const existing = this.sessions.get(sessionId) ?? { id: sessionId, created: true };\n const session = { ...existing, cwd: config.cwd ?? existing.cwd ?? process.cwd(), config: { ...existing.config, ...config } };\n this.sessions.set(sessionId, session);\n return { id: sessionId, cwd: session.cwd, turns: [] };\n }\n\n async sendMessage(sessionId, message = {}) {\n if (Array.isArray(message.dshTools) && message.dshTools.length > 0) {\n throw new Error(\"The Claude CLI backend cannot expose DSH tools; use the Claude Agent SDK backend\");\n }\n const session = this.sessions.get(sessionId) ?? (await this.resumeSession(sessionId, message));\n const turnId = randomUUID();\n const child = this.spawnTurn(session, turnId, message);\n this.processes.set(turnId, child);\n return { id: turnId, status: \"inProgress\", items: [] };\n }\n\n async interruptTurn(_sessionId, turnId) {\n const child = this.processes.get(turnId);\n if (!child) return;\n child.kill(\"SIGTERM\");\n }\n\n async releaseSession(sessionId) {\n for (const [turnId, child] of this.processes) {\n if (child.relayClaudeSessionId === sessionId) {\n child.kill(\"SIGTERM\");\n this.processes.delete(turnId);\n }\n }\n this.sessions.delete(sessionId);\n }\n\n async close() {\n this.closed = true;\n for (const child of this.processes.values()) child.kill(\"SIGTERM\");\n this.processes.clear();\n }\n\n spawnTurn(session, turnId, message) {\n const settingSourceArgs = settingSourceArguments(message.settingSources ?? session.config?.settingSources);\n const systemPromptArgs = systemPromptArguments(message.systemPrompt ?? session.config?.systemPrompt);\n const cliArgs = [\n ...this.args,\n \"-p\",\n message.text,\n \"--output-format\",\n \"stream-json\",\n \"--verbose\",\n \"--include-partial-messages\",\n \"--model\",\n message.model ?? session.config?.model ?? \"sonnet\",\n \"--effort\",\n message.effort ?? session.config?.effort ?? \"medium\",\n \"--permission-mode\",\n permissionMode(message),\n ...settingSourceArgs,\n ...systemPromptArgs,\n ...(session.created ? [\"--resume\", session.id] : [\"--session-id\", session.id]),\n ];\n const child = spawn(this.command, cliArgs, {\n cwd: message.cwd ?? session.cwd ?? process.cwd(),\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n env: { ...process.env },\n });\n child.relayClaudeSessionId = session.id;\n session.created = true;\n const state = { textItemId: null, text: \"\", activities: new Set() };\n const output = readline.createInterface({ input: child.stdout });\n output.on(\"line\", (line) => this.handleLine(session.id, turnId, line, state));\n child.stderr.setEncoding(\"utf8\");\n child.stderr.on(\"data\", chunk => this.emit(\"diagnostic\", String(chunk)));\n child.once(\"error\", error => {\n this.emit(\"diagnostic\", `Claude CLI failed: ${error.message}`);\n this.completeTurn(session.id, turnId, \"failed\", error);\n });\n child.once(\"exit\", (code, signal) => {\n this.processes.delete(turnId);\n if (signal || code) this.completeTurn(session.id, turnId, \"failed\", new Error(`claude exited (${signal ?? code})`));\n else this.completeTurn(session.id, turnId, \"completed\");\n });\n return child;\n }\n\n handleLine(sessionId, turnId, line, state) {\n let message;\n try {\n message = JSON.parse(line);\n } catch {\n this.emitText(sessionId, turnId, state, line);\n return;\n }\n for (const event of normalizeClaudeStreamMessage(message, state)) {\n this.emit(\"activity\", { method: event.method, params: { sessionId, turnId, ...event.params } });\n }\n }\n\n emitText(sessionId, turnId, state, text) {\n if (!text) return;\n state.textItemId ??= `answer-${turnId}`;\n this.emit(\"activity\", {\n method: \"item/agentMessage/delta\",\n params: { sessionId, turnId, itemId: state.textItemId, delta: `${text}\\n` },\n });\n }\n\n completeTurn(sessionId, turnId, status, error = null) {\n this.emit(\"activity\", {\n method: \"turn/completed\",\n params: {\n sessionId,\n turn: {\n id: turnId,\n status,\n error: error ? { message: error.message } : null,\n items: [],\n },\n },\n });\n }\n}\n\nfunction normalizeClaudeStreamMessage(message, state) {\n const events = [];\n const content = message.message?.content ?? message.content ?? [];\n for (const block of Array.isArray(content) ? content : []) {\n if (block.type === \"text\" && block.text) {\n state.textItemId ??= block.id ?? `answer-${message.message?.id ?? \"latest\"}`;\n const delta = block.text.startsWith(state.text) ? block.text.slice(state.text.length) : block.text;\n state.text = block.text;\n if (delta) events.push({ method: \"item/agentMessage/delta\", params: { itemId: state.textItemId, delta } });\n }\n if ((block.type === \"text_delta\" || block.type === \"content_block_delta\") && (block.text ?? block.delta?.text)) {\n state.textItemId ??= block.id ?? `answer-${message.message?.id ?? \"latest\"}`;\n const delta = block.text ?? block.delta.text;\n state.text += delta;\n events.push({ method: \"item/agentMessage/delta\", params: { itemId: state.textItemId, delta } });\n }\n if (block.type === \"thinking\" && block.thinking) {\n events.push({ method: \"item/reasoning/summaryTextDelta\", params: { itemId: block.id ?? \"reasoning\", delta: block.thinking } });\n }\n if (block.type === \"tool_use\") {\n const item = {\n type: \"toolUse\",\n id: block.id ?? block.name,\n name: block.name,\n input: block.input,\n status: \"inProgress\",\n };\n if (!state.activities.has(item.id)) {\n state.activities.add(item.id);\n events.push({ method: \"item/started\", params: { item } });\n }\n }\n if (block.type === \"tool_result\") {\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: block.tool_use_id ?? block.id,\n name: block.name,\n output: block.content,\n status: block.is_error ? \"failed\" : \"completed\",\n },\n },\n });\n }\n }\n if (message.type === \"result\" && message.result) {\n state.textItemId ??= `answer-${message.session_id ?? \"latest\"}`;\n const delta = String(message.result).startsWith(state.text)\n ? String(message.result).slice(state.text.length)\n : String(message.result);\n state.text = String(message.result);\n if (delta) events.push({ method: \"item/agentMessage/delta\", params: { itemId: state.textItemId, delta } });\n }\n return events;\n}\n\nfunction permissionMode(message) {\n if (message.permissionMode) return message.permissionMode;\n if (message.approvalPolicy === \"never\") return \"plan\";\n if (message.sandbox === \"read-only\") return \"plan\";\n return \"manual\";\n}\n\nfunction settingSourceArguments(value) {\n if (Array.isArray(value) && value.length === 0) return [\"--safe-mode\"];\n if (Array.isArray(value)) return [\"--setting-sources\", value.join(\",\")];\n if (typeof value === \"string\" && value.trim()) return [\"--setting-sources\", value];\n return [\"--setting-sources\", \"user,project,local\"];\n}\n\nfunction systemPromptArguments(value) {\n if (typeof value === \"string\" && value.trim()) return [\"--system-prompt\", value];\n return [];\n}\n","import { randomUUID } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport { z } from \"zod\";\n\nconst DEFAULT_MODELS = [\n { id: \"sonnet\", displayName: \"Claude Sonnet\", isDefault: true, defaultReasoningEffort: \"medium\", supportedReasoningEfforts: reasoningEfforts() },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\", supportedReasoningEfforts: reasoningEfforts() },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\", supportedReasoningEfforts: reasoningEfforts() },\n];\n\nfunction reasoningEfforts() {\n return [\"low\", \"medium\", \"high\"].map(reasoningEffort => ({ reasoningEffort }));\n}\n\nexport class ClaudeSdkClient extends EventEmitter {\n constructor({ sdk = null, pathToClaudeCodeExecutable = undefined, requestTimeoutMs = 30 * 60_000 } = {}) {\n super();\n this.sdk = sdk;\n this.pathToClaudeCodeExecutable = pathToClaudeCodeExecutable;\n this.requestTimeoutMs = requestTimeoutMs;\n this.sessions = new Map();\n this.queries = new Map();\n this.pendingRequests = new Map();\n this.closed = false;\n }\n\n async start() {\n this.sdk ??= await import(\"@anthropic-ai/claude-agent-sdk\");\n if (typeof this.sdk.query !== \"function\") throw new Error(\"Claude Agent SDK query() is unavailable\");\n this.closed = false;\n }\n\n async listModels() {\n return DEFAULT_MODELS;\n }\n\n async createSession(config = {}) {\n const id = config.sessionId ?? randomUUID();\n this.sessions.set(id, { id, cwd: config.cwd ?? process.cwd(), created: false, config: structuredClone(config) });\n return { id, cwd: config.cwd ?? process.cwd(), turns: [] };\n }\n\n async resumeSession(sessionId, config = {}) {\n const existing = this.sessions.get(sessionId) ?? { id: sessionId, created: true, config: {} };\n this.sessions.set(sessionId, {\n ...existing,\n cwd: config.cwd ?? existing.cwd ?? process.cwd(),\n config: { ...existing.config, ...structuredClone(config) },\n });\n return { id: sessionId, cwd: config.cwd ?? existing.cwd ?? process.cwd(), turns: [] };\n }\n\n async sendMessage(sessionId, message = {}) {\n const session = this.sessions.get(sessionId) ?? (await this.resumeSession(sessionId, message));\n const turnId = randomUUID();\n const abortController = new AbortController();\n const options = this.queryOptions(session, message, abortController);\n const query = this.sdk.query({ prompt: message.text, options });\n this.queries.set(turnId, { query, abortController, sessionId });\n void this.consumeQuery(session, turnId, query).catch((error) => {\n this.emit(\"diagnostic\", `Claude SDK query failed: ${error?.stack ?? error}`);\n this.completeTurn(session.id, turnId, \"failed\", error);\n });\n session.created = true;\n return { id: turnId, status: \"inProgress\", items: [] };\n }\n\n async interruptTurn(_sessionId, turnId) {\n const record = this.queries.get(turnId);\n if (!record) return;\n await record.query.interrupt?.().catch(() => {});\n record.abortController.abort();\n record.query.close?.();\n }\n\n async releaseSession(sessionId) {\n for (const [turnId, record] of this.queries) {\n if (record.sessionId === sessionId) {\n record.abortController.abort();\n record.query.close?.();\n this.queries.delete(turnId);\n }\n }\n this.sessions.delete(sessionId);\n }\n\n async close() {\n this.closed = true;\n for (const record of this.queries.values()) {\n record.abortController.abort();\n record.query.close?.();\n }\n this.queries.clear();\n for (const request of this.pendingRequests.values()) {\n request.resolve({ behavior: \"deny\", message: \"Relay Claude SDK client closed\" });\n }\n this.pendingRequests.clear();\n }\n\n resolveRequest(requestId, response = {}) {\n const request = this.pendingRequests.get(String(requestId));\n if (!request) throw new Error(`unknown pending Claude request ${requestId}`);\n this.pendingRequests.delete(String(requestId));\n request.resolve(responseForRequest(request, response));\n }\n\n rejectRequest(requestId, error) {\n const request = this.pendingRequests.get(String(requestId));\n if (!request) return;\n this.pendingRequests.delete(String(requestId));\n request.resolve({ behavior: \"deny\", message: error?.message ?? String(error) });\n }\n\n queryOptions(session, message, abortController) {\n return {\n abortController,\n cwd: message.cwd ?? session.cwd ?? process.cwd(),\n model: message.model ?? session.config?.model,\n effort: message.effort ?? session.config?.effort,\n // Without a summarized display the model streams thinking blocks whose text is empty, so the\n // reasoning projection below receives a signature and a token count and has nothing to show.\n // Effort still decides how much thinking happens; display decides whether it is readable.\n thinking: { type: \"adaptive\", display: \"summarized\" },\n permissionMode: sdkPermissionMode(message),\n settingSources: message.settingSources ?? session.config?.settingSources ?? [\"user\", \"project\", \"local\"],\n systemPrompt: message.systemPrompt ?? session.config?.systemPrompt,\n pathToClaudeCodeExecutable: this.pathToClaudeCodeExecutable,\n includePartialMessages: true,\n ...(session.created ? { resume: session.id } : { sessionId: session.id }),\n canUseTool: (toolName, input, options) => this.requestPermission(session.id, toolName, input, options),\n ...dshMcpOptions(this.sdk, message.dshTools, message.executeDshTool, abortController.signal),\n };\n }\n\n requestPermission(sessionId, toolName, input, options = {}) {\n const id = options.requestId ?? randomUUID();\n return new Promise((resolve) => {\n const request = {\n id,\n method: toolName === \"AskUserQuestion\" ? \"tool/requestUserInput\" : \"tool/requestApproval\",\n signal: options.signal,\n params: {\n sessionId,\n toolName,\n input: structuredClone(input ?? {}),\n title: options.title,\n displayName: options.displayName,\n description: options.description,\n decisionReason: options.decisionReason,\n blockedPath: options.blockedPath,\n toolUseID: options.toolUseID,\n suggestions: structuredClone(options.suggestions ?? []),\n },\n };\n this.pendingRequests.set(String(id), { request, resolve, input });\n options.signal?.addEventListener(\"abort\", () => this.rejectRequest(id, new Error(\"Claude permission request was cancelled\")), { once: true });\n this.emit(\"request\", request);\n });\n }\n\n async consumeQuery(session, turnId, query) {\n const state = { currentMessageId: null, text: new Map(), reasoning: new Map(), activities: new Set() };\n let completed = false;\n try {\n for await (const message of query) {\n for (const event of normalizeSdkMessage(message, state)) {\n this.emit(\"activity\", { method: event.method, params: { sessionId: session.id, turnId, ...event.params } });\n }\n if (message.type === \"result\") {\n completed = true;\n this.completeTurn(session.id, turnId, message.is_error ? \"failed\" : \"completed\", resultError(message));\n }\n }\n if (!completed) this.completeTurn(session.id, turnId, \"completed\");\n } finally {\n this.queries.delete(turnId);\n }\n }\n\n completeTurn(sessionId, turnId, status, error = null) {\n this.emit(\"activity\", {\n method: \"turn/completed\",\n params: {\n sessionId,\n turn: {\n id: turnId,\n status,\n error: error ? { message: error.message } : null,\n items: [],\n },\n },\n });\n }\n}\n\nfunction dshMcpOptions(sdk, schemas, execute, signal) {\n if (!Array.isArray(schemas) || schemas.length === 0) return {};\n if (typeof execute !== \"function\") throw new Error(\"Claude DSH tools require an execution callback\");\n if (typeof sdk.createSdkMcpServer !== \"function\" || typeof sdk.tool !== \"function\") {\n throw new Error(\"This Claude Agent SDK does not support in-process DSH tools\");\n }\n const tools = schemas.map(schema => sdk.tool(\n schema.name,\n schema.description,\n jsonSchemaShape(schema.parameters),\n async (args, extra = {}) => dshToolResult(await execute({\n name: schema.name,\n arguments: args,\n callId: extra.toolUseID ?? extra.toolUseId ?? randomUUID(),\n signal: extra.signal ?? signal,\n })),\n ));\n return {\n mcpServers: {\n dsh: sdk.createSdkMcpServer({ name: \"dsh\", version: \"1.0.0\", tools, alwaysLoad: true }),\n },\n allowedTools: schemas.map(schema => `mcp__dsh__${schema.name}`),\n };\n}\n\nfunction jsonSchemaShape(schema) {\n if (!schema || schema.type !== \"object\" || typeof schema.properties !== \"object\" || schema.properties === null) {\n if (schema?.type === \"object\" && schema.properties === undefined) return {};\n throw new Error(\"DSH tool parameters must use an object JSON Schema\");\n }\n const required = new Set(Array.isArray(schema.required) ? schema.required : []);\n return Object.fromEntries(Object.entries(schema.properties).map(([name, property]) => {\n let field;\n try {\n field = z.fromJSONSchema(property);\n } catch {\n field = z.unknown();\n }\n return [name, required.has(name) ? field : field.optional()];\n }));\n}\n\nfunction dshToolResult(result) {\n const content = (result.content ?? []).map(block => {\n if (block?.type === \"text\") return { type: \"text\", text: String(block.text ?? \"\") };\n if (block?.type === \"image\" && typeof block.data === \"string\" && typeof block.mediaType === \"string\") {\n return { type: \"image\", data: block.data, mimeType: block.mediaType };\n }\n return { type: \"text\", text: JSON.stringify(block) };\n });\n if (content.length === 0) content.push({ type: \"text\", text: result.isError ? \"DSH tool failed\" : \"DSH tool completed.\" });\n return { content, isError: Boolean(result.isError) };\n}\n\nfunction normalizeSdkMessage(message, state) {\n const events = [];\n if (message.type === \"stream_event\") {\n const event = message.event;\n if (event?.type === \"message_start\") {\n state.currentMessageId = event.message?.id ?? message.uuid ?? null;\n return events;\n }\n if (event?.type === \"content_block_delta\" && event.delta?.type === \"text_delta\") {\n const itemId = streamItemId(state, \"text\", event.index);\n state.text.set(itemId, `${state.text.get(itemId) ?? \"\"}${event.delta.text}`);\n events.push({ method: \"item/agentMessage/delta\", params: { itemId, delta: event.delta.text } });\n }\n if (event?.type === \"content_block_delta\" && event.delta?.type === \"thinking_delta\") {\n const itemId = streamItemId(state, \"reason\", event.index);\n state.reasoning.set(itemId, `${state.reasoning.get(itemId) ?? \"\"}${event.delta.thinking}`);\n events.push({ method: \"item/reasoning/summaryTextDelta\", params: { itemId, delta: event.delta.thinking } });\n }\n return events;\n }\n if (message.type === \"assistant\") {\n const content = message.message?.content ?? [];\n for (const [index, block] of content.entries()) {\n if (block.type === \"text\" && block.text) {\n const itemId = block.id ?? messageItemId(state.text, message, \"text\", content, index);\n const previous = state.text.get(itemId) ?? \"\";\n const delta = block.text.startsWith(previous) ? block.text.slice(previous.length) : block.text;\n state.text.set(itemId, block.text);\n if (delta) events.push({ method: \"item/agentMessage/delta\", params: { itemId, delta } });\n }\n if (block.type === \"thinking\" && block.thinking) {\n const itemId = block.id ?? messageItemId(state.reasoning, message, \"reason\", content, index);\n const previous = state.reasoning.get(itemId) ?? \"\";\n const delta = block.thinking.startsWith(previous) ? block.thinking.slice(previous.length) : block.thinking;\n state.reasoning.set(itemId, block.thinking);\n if (delta) events.push({ method: \"item/reasoning/summaryTextDelta\", params: { itemId, delta } });\n }\n if (block.type === \"tool_use\") {\n const item = { type: \"toolUse\", id: block.id, name: block.name, input: block.input, status: \"inProgress\" };\n if (!state.activities.has(item.id)) {\n state.activities.add(item.id);\n events.push({ method: \"item/started\", params: { item } });\n }\n }\n }\n }\n if (message.type === \"user\") {\n for (const block of message.message?.content ?? []) {\n if (block.type !== \"tool_result\") continue;\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: block.tool_use_id,\n output: block.content,\n status: block.is_error ? \"failed\" : \"completed\",\n },\n },\n });\n }\n }\n if (message.type === \"system\" && message.subtype === \"permission_denied\") {\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: message.tool_use_id,\n name: message.tool_name,\n output: message.message,\n status: \"failed\",\n },\n },\n });\n }\n return events;\n}\n\nfunction streamItemId(state, type, index) {\n return `${state.currentMessageId ?? \"message\"}-${type}-${index ?? 0}`;\n}\n\nfunction messageItemId(items, message, type, content, index) {\n const prefix = `${message.message?.id ?? message.uuid ?? \"message\"}-${type}-`;\n const ordinal = content.slice(0, index).filter(block => block.type === (type === \"reason\" ? \"thinking\" : type)).length;\n const existing = [...items.keys()]\n .filter(itemId => itemId.startsWith(prefix))\n .sort((left, right) => Number(left.slice(prefix.length)) - Number(right.slice(prefix.length)));\n return existing[ordinal] ?? `${prefix}${index}`;\n}\n\nfunction responseForRequest(pending, response) {\n if (response.action === \"accept\" || response.action === \"allow\") {\n return { behavior: \"allow\", updatedInput: response.updatedInput ?? pending.input };\n }\n if (response.action === \"answer\") {\n return { behavior: \"allow\", updatedInput: { ...pending.input, answers: response.answers ?? {} } };\n }\n return { behavior: \"deny\", message: response.message ?? \"User declined this Claude tool request\" };\n}\n\nfunction resultError(message) {\n if (!message?.is_error) return null;\n return new Error(message.errors?.join(\"\\n\") || message.subtype || \"Claude SDK turn failed\");\n}\n\nfunction sdkPermissionMode(message) {\n if (message.permissionMode) return message.permissionMode;\n if (message.approvalPolicy === \"never\") return \"dontAsk\";\n if (message.sandbox === \"read-only\") return \"plan\";\n return \"default\";\n}\n","import { EventEmitter } from \"node:events\";\n\nimport { ClaudeCliClient } from \"./cli-client.mjs\";\n\nconst DEFAULT_MODELS = [\n {\n id: \"sonnet\",\n displayName: \"Claude Sonnet\",\n description: \"Claude Code default balanced model\",\n isDefault: true,\n defaultReasoningEffort: \"medium\",\n supportedReasoningEfforts: [{ reasoningEffort: \"low\" }, { reasoningEffort: \"medium\" }, { reasoningEffort: \"high\" }],\n },\n {\n id: \"opus\",\n displayName: \"Claude Opus\",\n description: \"Claude Code high-capability model\",\n isDefault: false,\n defaultReasoningEffort: \"high\",\n supportedReasoningEfforts: [{ reasoningEffort: \"medium\" }, { reasoningEffort: \"high\" }],\n },\n {\n id: \"haiku\",\n displayName: \"Claude Haiku\",\n description: \"Claude Code fast model\",\n isDefault: false,\n defaultReasoningEffort: \"low\",\n supportedReasoningEfforts: [{ reasoningEffort: \"low\" }, { reasoningEffort: \"medium\" }],\n },\n];\n\nexport class ClaudeSessionRuntime extends EventEmitter {\n constructor({\n client = new ClaudeCliClient(),\n cwd = process.cwd(),\n } = {}) {\n super();\n this.client = client;\n this.cwd = cwd;\n this.sessions = new Map();\n this.models = DEFAULT_MODELS;\n this.selectedSessionId = null;\n this.diagnostics = [];\n this.closed = false;\n\n this.client.on?.(\"activity\", message => this.handleActivity(message));\n this.client.on?.(\"request\", request => this.emit(\"request\", request));\n this.client.on?.(\"diagnostic\", message => this.addDiagnostic(message));\n this.client.on?.(\"exit\", details => {\n this.addDiagnostic(`Claude backend exited: ${JSON.stringify(details)}`);\n this.emitChange();\n });\n }\n\n async initialize() {\n await this.client.start?.();\n const models = await this.client.listModels?.().catch((error) => {\n this.addDiagnostic(`Claude model list failed: ${error.message}`);\n return null;\n });\n if (Array.isArray(models) && models.length > 0) this.models = models;\n this.emitChange();\n return this.snapshot();\n }\n\n async createSession({\n model,\n effort,\n sandbox = \"workspace-write\",\n approvalPolicy = \"on-request\",\n cwd = this.cwd,\n ephemeral = false,\n settingSources = [\"user\", \"project\", \"local\"],\n systemPrompt = { type: \"preset\", preset: \"claude_code\" },\n } = {}) {\n const selectedModel = model ?? this.models.find(candidate => candidate.isDefault)?.id ?? \"sonnet\";\n const selectedEffort = effort\n ?? this.models.find(candidate => candidate.id === selectedModel)?.defaultReasoningEffort\n ?? \"medium\";\n const created = await this.client.createSession?.({\n model: selectedModel,\n effort: selectedEffort,\n sandbox,\n approvalPolicy,\n cwd,\n ephemeral,\n settingSources,\n systemPrompt,\n });\n const session = this.upsertSession(created ?? {}, {\n id: created?.id,\n model: selectedModel,\n effort: selectedEffort,\n sandbox,\n approvalPolicy,\n cwd,\n ephemeral,\n });\n if (!session.ephemeral) this.selectedSessionId = session.id;\n this.emitChange();\n return publicSession(session);\n }\n\n async resumeSession(sessionId, defaults = {}) {\n if (!sessionId?.trim()) throw new Error(\"sessionId is required\");\n const resumed = await this.client.resumeSession?.(sessionId, {\n cwd: defaults.cwd ?? this.cwd,\n ...defaults,\n });\n const session = this.upsertSession(resumed ?? {}, { id: sessionId, ...defaults });\n if (Array.isArray(resumed?.turns) && resumed.turns.length > 0) session.turns = structuredClone(resumed.turns);\n if (!session.ephemeral) this.selectedSessionId = sessionId;\n this.emitChange();\n return publicSession(session);\n }\n\n async sendMessage(sessionId, { text, model, effort, sandbox, approvalPolicy, cwd } = {}) {\n const session = this.requireSession(sessionId);\n if (!text?.trim()) throw new Error(\"message text is required\");\n const next = {\n model: model ?? session.model,\n effort: effort ?? session.effort,\n sandbox: sandbox ?? session.sandbox,\n approvalPolicy: approvalPolicy ?? session.approvalPolicy,\n cwd: cwd ?? session.cwd,\n };\n Object.assign(session, next, { updatedAt: nowSeconds() });\n const turn = await this.client.sendMessage(sessionId, { text, ...next });\n this.ensureTurn(session, turn);\n this.emitChange();\n return structuredClone(turn);\n }\n\n async interruptTurn(sessionId, turnId) {\n await this.client.interruptTurn?.(sessionId, turnId);\n }\n\n async resolveRequest(requestId, response = {}) {\n if (typeof this.client.resolveRequest !== \"function\") {\n throw new Error(\"Claude client does not support interactive request resolution\");\n }\n this.client.resolveRequest(requestId, response);\n }\n\n rejectRequest(requestId, error) {\n this.client.rejectRequest?.(requestId, error);\n }\n\n async releaseSession(sessionId) {\n if (!sessionId) return;\n await this.client.releaseSession?.(sessionId).catch((error) => {\n this.addDiagnostic(`Claude session release failed for ${sessionId}: ${error.message}`);\n });\n this.sessions.delete(sessionId);\n if (this.selectedSessionId === sessionId) this.selectedSessionId = null;\n this.emitChange();\n }\n\n getSession(sessionId) {\n const session = this.sessions.get(sessionId);\n return session ? publicSession(session) : null;\n }\n\n snapshot() {\n return {\n connected: !this.closed,\n selectedSessionId: this.selectedSessionId,\n cwd: this.cwd,\n models: structuredClone(this.models),\n sessions: [...this.sessions.values()]\n .sort((left, right) => right.updatedAt - left.updatedAt)\n .map(session => publicSession(session)),\n diagnostics: this.diagnostics.slice(-20),\n };\n }\n\n async close() {\n if (this.closed) return;\n this.closed = true;\n await this.client.close?.();\n }\n\n handleActivity(message) {\n const params = message.params ?? {};\n const sessionId = params.sessionId ?? params.session?.id ?? null;\n const session = sessionId ? this.sessions.get(sessionId) : null;\n if (message.method === \"turn/completed\" && session) {\n const turn = params.turn;\n if (turn?.id) this.ensureTurn(session, turn);\n }\n this.emit(\"activity\", message);\n this.emitChange();\n }\n\n upsertSession(input = {}, defaults = {}) {\n const id = input.id ?? defaults.id;\n if (!id) throw new Error(\"Claude session id is required\");\n const existing = this.sessions.get(id) ?? { id, turns: [], createdAt: nowSeconds() };\n Object.assign(existing, {\n model: defaults.model ?? input.model ?? existing.model ?? this.models.find(candidate => candidate.isDefault)?.id ?? \"sonnet\",\n effort: defaults.effort ?? input.effort ?? existing.effort ?? \"medium\",\n sandbox: defaults.sandbox ?? input.sandbox ?? existing.sandbox ?? \"workspace-write\",\n approvalPolicy: defaults.approvalPolicy ?? input.approvalPolicy ?? existing.approvalPolicy ?? \"on-request\",\n cwd: defaults.cwd ?? input.cwd ?? existing.cwd ?? this.cwd,\n ephemeral: Boolean(defaults.ephemeral ?? input.ephemeral ?? existing.ephemeral),\n updatedAt: input.updatedAt ?? nowSeconds(),\n });\n if (Array.isArray(input.turns) && input.turns.length > 0) existing.turns = structuredClone(input.turns);\n this.sessions.set(id, existing);\n return existing;\n }\n\n requireSession(sessionId) {\n const session = this.sessions.get(sessionId);\n if (!session) throw new Error(`unknown Claude session ${sessionId}`);\n return session;\n }\n\n ensureTurn(session, turn) {\n if (!turn?.id) return;\n const existing = session.turns.findIndex(candidate => candidate.id === turn.id);\n if (existing >= 0) {\n if (session.turns[existing].status !== \"inProgress\" && turn.status === \"inProgress\") return;\n session.turns[existing] = structuredClone(turn);\n }\n else session.turns.push(structuredClone(turn));\n session.updatedAt = nowSeconds();\n }\n\n addDiagnostic(message) {\n this.diagnostics.push(String(message));\n this.diagnostics.splice(0, Math.max(0, this.diagnostics.length - 50));\n }\n\n emitChange() {\n this.emit(\"change\", this.snapshot());\n }\n}\n\nfunction publicSession(session) {\n return structuredClone({\n id: session.id,\n model: session.model,\n effort: session.effort,\n sandbox: session.sandbox,\n approvalPolicy: session.approvalPolicy,\n cwd: session.cwd,\n ephemeral: session.ephemeral,\n turns: session.turns ?? [],\n });\n}\n\nfunction nowSeconds() {\n return Date.now() / 1000;\n}\n","import { definePlugin } from \"./internal/plugin-sdk.mjs\";\nimport { ClaudeCliClient } from \"./cli-client.mjs\";\nimport { ClaudeSdkClient } from \"./sdk-client.mjs\";\nimport { ClaudeSessionRuntime } from \"./session-runtime.mjs\";\n\nexport const CLAUDE_EXECUTION_CAPABILITY = \"relay.execution.claude.v1\";\n\nexport function createClaudeExecutionPlugin(config = {}) {\n return definePlugin({\n manifest: {\n id: \"relay.execution.claude\",\n version: \"1.0.0\",\n provides: { [CLAUDE_EXECUTION_CAPABILITY]: \"1.0.0\" },\n optional: { \"relay.logging.v1\": \"^1.0.0\" },\n permissions: [\"process:claude\", \"filesystem:workspace\"],\n },\n activate({ capabilities, defer }) {\n const logger = capabilities.optional(\"relay.logging.v1\") ?? console;\n const client = config.client ?? createClaudeClient(config);\n const runtime = new ClaudeSessionRuntime({ client, cwd: config.cwd ?? process.cwd() });\n defer(() => runtime.close());\n const ready = runtime.initialize();\n void ready.catch((error) => {\n logger.error?.(`Relay Claude backend failed to initialize: ${error?.stack ?? error}`);\n });\n return {\n capabilities: { [CLAUDE_EXECUTION_CAPABILITY]: executionCapability(runtime, ready) },\n };\n },\n });\n}\n\nfunction executionCapability(runtime, ready) {\n return Object.freeze({\n whenReady: () => ready,\n listModels: () => structuredClone(runtime.models),\n hasSession: (sessionId) => runtime.sessions.has(sessionId),\n getSession: runtime.getSession.bind(runtime),\n patchSession(sessionId, patch) {\n const session = runtime.sessions.get(sessionId);\n if (session) Object.assign(session, structuredClone(patch));\n return Boolean(session);\n },\n createSession: runtime.createSession.bind(runtime),\n resumeSession: runtime.resumeSession.bind(runtime),\n sendMessage: runtime.sendMessage.bind(runtime),\n interruptTurn: runtime.interruptTurn.bind(runtime),\n releaseSession: runtime.releaseSession.bind(runtime),\n resolveRequest: runtime.resolveRequest.bind(runtime),\n rejectRequest: runtime.rejectRequest.bind(runtime),\n subscribeActivity: (listener) => subscribe(runtime, \"activity\", listener),\n subscribeRequest: (listener) => subscribe(runtime, \"request\", listener),\n });\n}\n\nfunction createClaudeClient(config) {\n const backend = config.backend ?? \"auto\";\n if (backend === \"cli\") return createClaudeCliClient(config);\n const sdkClient = new ClaudeSdkClient({\n pathToClaudeCodeExecutable: config.codeExecutablePath,\n requestTimeoutMs: positiveInteger(config.requestTimeoutMs, 30 * 60_000),\n });\n if (backend === \"sdk\") return sdkClient;\n return new FallbackClaudeClient({ primary: sdkClient, fallback: createClaudeCliClient(config) });\n}\n\nfunction createClaudeCliClient(config) {\n return new ClaudeCliClient({\n command: config.command ?? \"claude\",\n args: config.args ?? [],\n requestTimeoutMs: positiveInteger(config.requestTimeoutMs, 30 * 60_000),\n });\n}\n\nclass FallbackClaudeClient extends ClaudeCliClient {\n constructor({ primary, fallback }) {\n super();\n this.primary = primary;\n this.fallback = fallback;\n this.active = primary;\n for (const event of [\"activity\", \"request\", \"diagnostic\", \"exit\"]) {\n primary.on(event, (...args) => this.emit(event, ...args));\n fallback.on(event, (...args) => this.emit(event, ...args));\n }\n }\n\n async start() {\n try {\n await this.primary.start();\n this.active = this.primary;\n } catch (error) {\n this.emit(\"diagnostic\", `Claude Agent SDK unavailable; falling back to CLI: ${error.message}`);\n await this.fallback.start();\n this.active = this.fallback;\n }\n }\n\n listModels(...args) { return this.active.listModels(...args); }\n createSession(...args) { return this.active.createSession(...args); }\n resumeSession(...args) { return this.active.resumeSession(...args); }\n sendMessage(...args) { return this.active.sendMessage(...args); }\n interruptTurn(...args) { return this.active.interruptTurn(...args); }\n releaseSession(...args) { return this.active.releaseSession(...args); }\n resolveRequest(...args) { return this.active.resolveRequest?.(...args); }\n rejectRequest(...args) { return this.active.rejectRequest?.(...args); }\n close(...args) { return this.active.close(...args); }\n}\n\nfunction subscribe(emitter, event, listener) {\n emitter.on(event, listener);\n let active = true;\n return () => {\n if (!active) return;\n active = false;\n emitter.off(event, listener);\n };\n}\n\nfunction positiveInteger(value, fallback) {\n return Number.isSafeInteger(value) && value > 0 ? value : fallback;\n}\n","import { LlmAdapter } from \"@deepseek-ai/dsh-llm\";\n\nexport const CLAUDE_PRESET = \"relay-claude\";\nexport const CLAUDE_PROVIDER = \"relay-claude\";\nexport const CLAUDE_ACTIVITY_EVENT = \"relay-claude/activity\";\n\nexport class ClaudeDshAdapter extends LlmAdapter {\n constructor({ runtime, ready, linkStore = null, logger = console }) {\n super();\n this.runtime = runtime;\n this.ready = ready;\n this.logger = logger;\n this.linkStore = linkStore;\n this.links = new Map();\n this.settings = new Map();\n this.pendingSessions = new Map();\n this.agents = new Map();\n for (const [sessionId, record] of linkStore?.entries() ?? []) {\n const claudeSessionId = record.claudeSessionId ?? record.sessionId ?? record.threadId;\n if (claudeSessionId) this.links.set(sessionId, claudeSessionId);\n this.settings.set(sessionId, record.config);\n }\n }\n\n providerInfo() {\n return { id: CLAUDE_PROVIDER, name: \"Claude Code\" };\n }\n\n async listModels() {\n await this.ready;\n return runtimeModels(this.runtime)\n .sort((left, right) => Number(Boolean(right.isDefault)) - Number(Boolean(left.isDefault)))\n .map(model => ({\n provider: CLAUDE_PROVIDER,\n id: model.id,\n name: model.displayName ?? model.id,\n description: model.description,\n inputModalities: [\"text\", \"image\"],\n }));\n }\n\n async resolveModel(provider, model) {\n await this.ready;\n const info = runtimeModels(this.runtime).find(candidate => candidate.id === model);\n return {\n provider,\n id: model,\n name: info?.displayName ?? model,\n inputModalities: [\"text\", \"image\"],\n ...(Array.isArray(info?.supportedReasoningEfforts)\n ? {\n reasoning: {\n efforts: info.supportedReasoningEfforts.map(effort => ({\n id: effort.reasoningEffort ?? effort.id ?? effort,\n name: reasoningEffortName(effort.reasoningEffort ?? effort.id ?? effort),\n })),\n defaultEffort: info.defaultReasoningEffort,\n },\n }\n : {}),\n };\n }\n\n attachAgent(agent, requestedPreset = effectivePreset(agent.session)) {\n this.agents.set(String(agent.id), agent);\n if (requestedPreset !== CLAUDE_PRESET) return false;\n this.configuration(agent.id, agent.session.header.cwd);\n return true;\n }\n\n servesAgent(agent) {\n return effectivePreset(agent.session) === CLAUDE_PRESET;\n }\n\n detachAgent(sessionId) {\n this.agents.delete(String(sessionId));\n }\n\n configuration(sessionId, cwd) {\n const key = String(sessionId);\n const existing = this.settings.get(key);\n if (existing) return existing;\n const models = runtimeModels(this.runtime);\n const model = models.find(candidate => candidate.isDefault) ?? models[0];\n const config = {\n model: model?.id ?? \"sonnet\",\n effort: model?.defaultReasoningEffort ?? \"medium\",\n sandbox: \"workspace-write\",\n approvalPolicy: \"on-request\",\n cwd: cwd ?? process.cwd(),\n settingSources: [\"user\", \"project\", \"local\"],\n systemPrompt: { type: \"preset\", preset: \"claude_code\" },\n };\n this.settings.set(key, config);\n return config;\n }\n\n configure(sessionId, patch = {}) {\n const key = String(sessionId);\n const next = { ...this.configuration(key), ...compact(patch) };\n this.settings.set(key, next);\n const claudeSessionId = this.links.get(key);\n if (claudeSessionId) {\n patchRuntimeSession(this.runtime, claudeSessionId, next);\n }\n this.persistLink(key);\n return structuredClone(next);\n }\n\n async ensureSession(sessionId) {\n const key = String(sessionId);\n const pending = this.pendingSessions.get(key);\n if (pending) return pending;\n const operation = this.createOrResumeSession(key).finally(() => {\n this.pendingSessions.delete(key);\n });\n this.pendingSessions.set(key, operation);\n return operation;\n }\n\n async createOrResumeSession(sessionId) {\n await this.ready;\n const settings = { ...this.configuration(sessionId) };\n const linked = this.links.get(sessionId);\n if (linked && hasRuntimeSession(this.runtime, linked)) return linked;\n if (linked) {\n try {\n await this.runtime.resumeSession(linked, settings);\n return linked;\n } catch (error) {\n this.logger.warn(`Relay could not resume Claude session ${linked}; creating a replacement: ${error.message}`);\n this.links.delete(sessionId);\n }\n }\n const created = await this.runtime.createSession(settings);\n this.links.set(sessionId, created.id);\n this.persistLink(sessionId);\n return created.id;\n }\n\n persistLink(sessionId) {\n this.linkStore?.set(sessionId, {\n claudeSessionId: this.links.get(sessionId) ?? null,\n config: this.configuration(sessionId),\n });\n }\n\n sessionFor(sessionId) {\n return this.links.get(String(sessionId)) ?? null;\n }\n\n dshSessionForClaudeSession(claudeSessionId) {\n for (const [sessionId, candidate] of this.links) {\n if (candidate === claudeSessionId) return sessionId;\n }\n return null;\n }\n\n async *stream(options) {\n if (options.purpose) {\n yield* this.streamAuxiliary(options);\n return;\n }\n const sessionId = String(options.sessionId ?? \"\");\n if (!sessionId) throw new Error(\"Relay Claude adapter requires a DSH session id\");\n const text = latestUserText(options.messages);\n if (!text) throw new Error(\"Relay Claude adapter received no user text\");\n const agent = this.agents.get(sessionId);\n if (!agent) throw new Error(`Relay Claude adapter has no attached agent for ${sessionId}`);\n const nativePermissions = permissionConfiguration(agent.session.events);\n const config = this.configure(sessionId, {\n ...(options.provider === CLAUDE_PROVIDER ? { model: options.model } : {}),\n ...(options.provider === CLAUDE_PROVIDER ? { effort: options.reasoningEffort } : {}),\n ...nativePermissions,\n cwd: agent.session.header.cwd,\n });\n const dshTools = structuredClone(options.tools ?? []);\n const availableTools = new Set(dshTools.map(tool => tool.name));\n const executeDshTool = async ({ name, arguments: args, callId, signal }) => {\n if (!availableTools.has(name)) throw new Error(`DSH tool ${name} is not available for this DSH turn.`);\n if (!agent.ctx?.tools?.execute) throw new Error(\"The owning DSH Agent has no tool runtime\");\n return agent.ctx.tools.execute({\n callId,\n name,\n arguments: args,\n agent,\n signal: signal ?? options.signal ?? new AbortController().signal,\n });\n };\n const claudeSessionId = await this.ensureSession(sessionId);\n const queue = new ActivityQueue(options.signal, \"Claude\");\n const onActivity = (message) => {\n const candidate = message.params?.sessionId ?? message.params?.session?.id;\n if (candidate === claudeSessionId) queue.push(message);\n };\n const stopActivity = subscribeRuntimeActivity(this.runtime, onActivity);\n\n let turnId = null;\n try {\n const started = await this.runtime.sendMessage(claudeSessionId, { text, ...config, dshTools, executeDshTool });\n turnId = started.id;\n const state = createStreamState();\n let completedTurn = null;\n while (!completedTurn) {\n const message = await queue.next();\n const params = message.params ?? {};\n if (params.turnId && params.turnId !== turnId) continue;\n if (message.method === \"turn/completed\") {\n if (params.turn?.id !== turnId) continue;\n for (const item of params.turn.items ?? []) {\n for (const chunk of this.completeItem(agent, claudeSessionId, turnId, item, state)) yield chunk;\n }\n completedTurn = params.turn;\n break;\n }\n for (const chunk of this.projectActivity(agent, claudeSessionId, turnId, message, state)) yield chunk;\n }\n for (const block of state.blocks.values()) {\n if (block.closed) continue;\n block.closed = true;\n yield { type: \"block-end\", index: block.index, block: { type: block.type, text: block.text } };\n }\n if (completedTurn.status === \"failed\") {\n yield {\n type: \"finish\",\n reason: { kind: \"error\", failure: { message: completedTurn.error?.message ?? \"Claude turn failed\", code: \"CLAUDE_TURN_FAILED\" } },\n };\n } else {\n yield { type: \"finish\", reason: { kind: \"stop\" }, replayState: { claudeSessionId, turnId } };\n }\n } catch (error) {\n if (options.signal?.aborted) {\n if (turnId) await this.runtime.interruptTurn(claudeSessionId, turnId).catch(() => {});\n yield { type: \"finish\", reason: { kind: \"aborted\", failure: { message: \"Claude turn cancelled\", code: \"ABORTED\" } } };\n return;\n }\n throw error;\n } finally {\n stopActivity();\n queue.close();\n }\n }\n\n async *streamAuxiliary(options) {\n await this.ready;\n const text = auxiliaryInput(options.messages);\n if (!text) throw new Error(`Relay Claude adapter received no ${options.purpose} input`);\n const sessionId = String(options.sessionId ?? \"\");\n const agent = this.agents.get(sessionId);\n const cwd = agent?.session.header.cwd ?? this.settings.get(sessionId)?.cwd ?? process.cwd();\n const created = await this.runtime.createSession({\n model: options.model,\n effort: options.reasoningEffort,\n sandbox: \"read-only\",\n approvalPolicy: \"never\",\n cwd,\n ephemeral: true,\n settingSources: [\"user\"],\n systemPrompt: options.system,\n });\n const claudeSessionId = created.id;\n const queue = new ActivityQueue(options.signal, \"Claude\");\n const onActivity = (message) => {\n const candidate = message.params?.sessionId ?? message.params?.session?.id;\n if (candidate === claudeSessionId) queue.push(message);\n };\n const stopActivity = subscribeRuntimeActivity(this.runtime, onActivity);\n let turnId = null;\n try {\n const started = await this.runtime.sendMessage(claudeSessionId, {\n text,\n model: options.model,\n effort: options.reasoningEffort,\n sandbox: \"read-only\",\n approvalPolicy: \"never\",\n });\n turnId = started.id;\n const state = createStreamState();\n let completedTurn = null;\n while (!completedTurn) {\n const message = await queue.next();\n const params = message.params ?? {};\n if (params.turnId && params.turnId !== turnId) continue;\n if (message.method === \"turn/completed\") {\n if (params.turn?.id !== turnId) continue;\n for (const item of params.turn.items ?? []) {\n for (const chunk of completeAuxiliaryItem(state, item)) yield chunk;\n }\n completedTurn = params.turn;\n break;\n }\n for (const chunk of projectAuxiliaryActivity(message, state)) yield chunk;\n }\n for (const block of state.blocks.values()) {\n if (block.closed) continue;\n block.closed = true;\n yield { type: \"block-end\", index: block.index, block: { type: block.type, text: block.text } };\n }\n yield completedTurn.status === \"failed\"\n ? { type: \"finish\", reason: { kind: \"error\", failure: { message: completedTurn.error?.message ?? `Claude ${options.purpose} failed`, code: \"CLAUDE_AUXILIARY_FAILED\" } } }\n : { type: \"finish\", reason: { kind: \"stop\" } };\n } finally {\n stopActivity();\n queue.close();\n await this.runtime.releaseSession(claudeSessionId);\n }\n }\n\n projectActivity(agent, claudeSessionId, turnId, message, state) {\n const params = message.params ?? {};\n if (message.method === \"item/reasoning/summaryTextDelta\" || message.method === \"item/reasoning/textDelta\") {\n return textDelta(state, params.itemId, \"reasoning\", params.delta ?? \"\");\n }\n if (message.method === \"item/agentMessage/delta\") {\n return textDelta(state, params.itemId, \"text\", params.delta ?? \"\");\n }\n if (message.method === \"item/started\") {\n if (isActivityItem(params.item)) this.appendActivity(agent, claudeSessionId, turnId, params.item, \"started\", state);\n return [];\n }\n if (message.method === \"item/completed\") return this.completeItem(agent, claudeSessionId, turnId, params.item, state);\n return [];\n }\n\n completeItem(agent, claudeSessionId, turnId, item, state) {\n if (!item?.id || state.completed.has(item.id)) return [];\n state.completed.add(item.id);\n if (item.type === \"reasoning\") return completeTextItem(state, item.id, \"reasoning\", reasoningText(item));\n if (item.type === \"agentMessage\") return completeTextItem(state, item.id, \"text\", item.text ?? \"\");\n if (isActivityItem(item)) this.appendActivity(agent, claudeSessionId, turnId, item, \"completed\", state);\n return [];\n }\n\n appendActivity(agent, claudeSessionId, turnId, item, phase, state) {\n const previous = state.activityItems.get(item.id) ?? {};\n const merged = {\n ...previous,\n ...item,\n input: item.input ?? previous.input,\n arguments: item.arguments ?? previous.arguments,\n name: item.name ?? previous.name,\n tool: item.tool ?? previous.tool,\n };\n state.activityItems.set(item.id, merged);\n if (!state.startedActivities.has(item.id)) {\n state.startedActivities.add(item.id);\n agent.session.append(CLAUDE_ACTIVITY_EVENT, activityPayload(claudeSessionId, turnId, merged, \"started\"));\n }\n if (phase === \"completed\" && !state.completedActivities.has(item.id)) {\n state.completedActivities.add(item.id);\n agent.session.append(CLAUDE_ACTIVITY_EVENT, activityPayload(claudeSessionId, turnId, merged, \"completed\"));\n }\n }\n}\n\nclass ActivityQueue {\n constructor(signal, label) {\n this.signal = signal;\n this.label = label;\n this.values = [];\n this.waiters = [];\n this.closed = false;\n }\n\n push(value) {\n if (this.closed) return;\n const waiter = this.waiters.shift();\n if (waiter) waiter.resolve(value);\n else this.values.push(value);\n }\n\n next() {\n if (this.values.length) return Promise.resolve(this.values.shift());\n if (this.closed) return Promise.reject(new Error(`${this.label} activity stream closed`));\n if (this.signal?.aborted) return Promise.reject(this.signal.reason ?? new Error(\"aborted\"));\n return new Promise((resolve, reject) => {\n const waiter = { resolve, reject };\n this.waiters.push(waiter);\n if (this.signal) {\n const abort = () => {\n const index = this.waiters.indexOf(waiter);\n if (index >= 0) this.waiters.splice(index, 1);\n reject(this.signal.reason ?? new Error(\"aborted\"));\n };\n this.signal.addEventListener(\"abort\", abort, { once: true });\n waiter.resolve = (value) => {\n this.signal.removeEventListener(\"abort\", abort);\n resolve(value);\n };\n }\n });\n }\n\n close() {\n this.closed = true;\n for (const waiter of this.waiters.splice(0)) waiter.reject(new Error(`${this.label} activity stream closed`));\n }\n}\n\nfunction createStreamState() {\n return {\n nextIndex: 0,\n blocks: new Map(),\n completed: new Set(),\n activityItems: new Map(),\n startedActivities: new Set(),\n completedActivities: new Set(),\n };\n}\n\nfunction textDelta(state, id, type, delta) {\n if (!id || !delta) return [];\n let block = state.blocks.get(id);\n const chunks = [];\n if (!block) {\n block = { index: state.nextIndex++, type, text: \"\", closed: false };\n state.blocks.set(id, block);\n chunks.push({ type: \"block-start\", index: block.index, blockType: type });\n }\n if (block.closed) return chunks;\n block.text += delta;\n chunks.push({ type: type === \"reasoning\" ? \"reasoning-delta\" : \"text-delta\", index: block.index, text: delta });\n return chunks;\n}\n\nfunction completeTextItem(state, id, type, completeText) {\n const chunks = [];\n let block = state.blocks.get(id);\n if (!block) {\n block = { index: state.nextIndex++, type, text: \"\", closed: false };\n state.blocks.set(id, block);\n chunks.push({ type: \"block-start\", index: block.index, blockType: type });\n }\n if (completeText && completeText.startsWith(block.text) && completeText.length > block.text.length) {\n const delta = completeText.slice(block.text.length);\n block.text = completeText;\n chunks.push({ type: type === \"reasoning\" ? \"reasoning-delta\" : \"text-delta\", index: block.index, text: delta });\n }\n if (!block.closed) {\n block.closed = true;\n chunks.push({ type: \"block-end\", index: block.index, block: { type, text: block.text } });\n }\n return chunks;\n}\n\nfunction activityPayload(claudeSessionId, turnId, item, phase) {\n const activity = normalizeActivity(item, phase);\n return { version: 1, claudeSessionId, turnId, itemId: String(item.id), phase, activity };\n}\n\nfunction normalizeActivity(item, phase) {\n const type = String(item.type ?? \"toolUse\");\n const status = phase === \"started\" ? \"running\" : item.status === \"failed\" ? \"error\" : \"completed\";\n const title = item.tool ?? item.name ?? humanize(type);\n return bounded({\n type,\n status,\n title,\n summary: summarizeValue(item.arguments ?? item.input ?? item.prompt),\n input: item.arguments ?? item.input,\n output: item.output ?? item.result ?? item.error,\n });\n}\n\nfunction bounded(value) {\n return Object.fromEntries(Object.entries(value).flatMap(([key, entry]) => {\n if (entry === undefined || entry === null || entry === \"\") return [];\n const text = typeof entry === \"string\" ? entry : JSON.stringify(entry, null, 2);\n return [[key, text.length > 20_000 ? `${text.slice(0, 20_000)}\\n...` : text]];\n }));\n}\n\nfunction isActivityItem(item) {\n return item?.id && ![\"userMessage\", \"agentMessage\", \"reasoning\"].includes(item.type);\n}\n\nfunction permissionConfiguration(events) {\n let sandbox = \"workspace-write\";\n let approvalPolicy = \"on-request\";\n for (const event of events) {\n if (event.type === \"sandbox/mode\") sandbox = event.data.mode;\n if (event.type === \"approval/policy\") approvalPolicy = event.data.policy === \"never\" ? \"never\" : \"on-request\";\n if (event.type === \"permission/preset\") sandbox = event.data.preset;\n }\n return { sandbox, approvalPolicy };\n}\n\nfunction reasoningText(item) {\n return [...(item.summary ?? []), ...(item.content ?? [])].filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction summarizeValue(value) {\n if (value === undefined || value === null) return \"\";\n return firstLine(typeof value === \"string\" ? value : JSON.stringify(value));\n}\n\nfunction firstLine(value) {\n return String(value ?? \"\").split(\"\\n\")[0].slice(0, 240);\n}\n\nfunction humanize(value) {\n return String(value).replace(/([a-z])([A-Z])/g, \"$1 $2\").replace(/^./, letter => letter.toUpperCase());\n}\n\nfunction reasoningEffortName(value) {\n return String(value) === \"xhigh\" ? \"Extra high\" : humanize(value);\n}\n\nfunction latestUserText(messages) {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role !== \"user\") continue;\n const text = (message.content ?? [])\n .filter(block => block.type === \"text\")\n .map(block => block.text)\n .join(\"\\n\")\n .trim();\n if (!text) continue;\n if (message.source?.kind === \"user\" || isRelayActivation(message.source)) return text;\n }\n return \"\";\n}\n\nfunction auxiliaryInput(messages) {\n return messages.map((message) => {\n const text = (message?.content ?? [])\n .filter(block => block.type === \"text\")\n .map(block => block.text)\n .join(\"\\n\")\n .trim();\n return text ? `${message.role ?? \"user\"}: ${text}` : \"\";\n }).filter(Boolean).join(\"\\n\\n\");\n}\n\nfunction projectAuxiliaryActivity(message, state) {\n const params = message.params ?? {};\n if (message.method === \"item/reasoning/summaryTextDelta\" || message.method === \"item/reasoning/textDelta\") {\n return textDelta(state, params.itemId, \"reasoning\", params.delta ?? \"\");\n }\n if (message.method === \"item/agentMessage/delta\") return textDelta(state, params.itemId, \"text\", params.delta ?? \"\");\n if (message.method === \"item/completed\") return completeAuxiliaryItem(state, params.item);\n return [];\n}\n\nfunction completeAuxiliaryItem(state, item) {\n if (!item?.id || state.completed.has(item.id)) return [];\n state.completed.add(item.id);\n if (item.type === \"reasoning\") return completeTextItem(state, item.id, \"reasoning\", reasoningText(item));\n if (item.type === \"agentMessage\") return completeTextItem(state, item.id, \"text\", item.text ?? \"\");\n return [];\n}\n\nfunction isRelayActivation(source) {\n return source?.kind === \"plugin\" && source.plugin === \"relay\";\n}\n\nfunction compact(value) {\n return Object.fromEntries(Object.entries(value).filter(([, item]) => item !== undefined && item !== null));\n}\n\nfunction runtimeModels(runtime) {\n return typeof runtime.listModels === \"function\" ? runtime.listModels() : [...runtime.models];\n}\n\nfunction hasRuntimeSession(runtime, sessionId) {\n return typeof runtime.hasSession === \"function\"\n ? runtime.hasSession(sessionId)\n : runtime.sessions.has(sessionId);\n}\n\nfunction patchRuntimeSession(runtime, sessionId, patch) {\n if (typeof runtime.patchSession === \"function\") return runtime.patchSession(sessionId, patch);\n const session = runtime.sessions.get(sessionId);\n if (session) Object.assign(session, patch);\n return Boolean(session);\n}\n\nfunction subscribeRuntimeActivity(runtime, listener) {\n if (typeof runtime.subscribeActivity === \"function\") return runtime.subscribeActivity(listener);\n runtime.on(\"activity\", listener);\n return () => runtime.off(\"activity\", listener);\n}\n\nfunction effectivePreset(session) {\n for (let index = session.events.length - 1; index >= 0; index -= 1) {\n const event = session.events[index];\n if (event.type === \"agent-preset/selected\") return event.data.agentPreset;\n }\n return session.header.agentPreset;\n}\n","import { mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\n\nexport class ClaudeLinkStore {\n constructor(path) {\n this.path = path;\n this.records = loadRecords(path);\n }\n\n entries() {\n return [...this.records.entries()].map(([sessionId, record]) => [sessionId, structuredClone(record)]);\n }\n\n set(sessionId, record) {\n this.records.set(String(sessionId), structuredClone(record));\n this.persist();\n }\n\n delete(sessionId) {\n if (!this.records.delete(String(sessionId))) return;\n this.persist();\n }\n\n persist() {\n mkdirSync(dirname(this.path), { recursive: true });\n const temporary = `${this.path}.${process.pid}.tmp`;\n const value = Object.fromEntries([...this.records.entries()].sort(([left], [right]) => left.localeCompare(right)));\n writeFileSync(temporary, `${JSON.stringify({ version: 1, sessions: value }, null, 2)}\\n`, { mode: 0o600 });\n renameSync(temporary, this.path);\n }\n}\n\nfunction loadRecords(path) {\n try {\n const parsed = JSON.parse(readFileSync(path, \"utf8\"));\n if (parsed?.version !== 1 || !isObject(parsed.sessions)) return new Map();\n return new Map(Object.entries(parsed.sessions).filter(([, record]) => validRecord(record)));\n } catch (error) {\n if (error?.code === \"ENOENT\") return new Map();\n throw new Error(`Unable to read Claude DSH links from ${path}: ${error.message}`, { cause: error });\n }\n}\n\nfunction validRecord(record) {\n return isObject(record)\n && (record.claudeSessionId === null || typeof record.claudeSessionId === \"string\")\n && isObject(record.config);\n}\n\nfunction isObject(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","export async function handleClaudeSdkRequest(ctx, { adapter, runtime, request }) {\n const claudeSessionId = request.params?.sessionId;\n const dshSessionId = claudeSessionId ? adapter.dshSessionForClaudeSession(claudeSessionId) : null;\n const agent = dshSessionId ? ctx.agents.get(dshSessionId) : null;\n if (!agent) {\n runtime.rejectRequest(request.id, new Error(\"Claude request has no owning live DSH Session\"));\n return;\n }\n\n try {\n if (request.method === \"tool/requestApproval\") {\n const outcome = await ctx.approval.request({\n agent,\n toolName: approvalToolName(request),\n reason: approvalReason(request),\n signal: request.signal,\n });\n await runtime.resolveRequest(request.id, {\n action: outcome === \"allowed-once\" ? \"accept\" : \"decline\",\n updatedInput: request.params?.input,\n message: `DSH approval returned ${outcome}.`,\n });\n return;\n }\n if (request.method === \"tool/requestUserInput\") {\n const questions = normalizeQuestions(request.params?.input?.questions ?? []);\n const answer = await ctx.userQuestions.ask({ agent, questions, signal: request.signal });\n await runtime.resolveRequest(request.id, {\n action: \"answer\",\n answers: normalizeAnswers(answer, questions),\n });\n return;\n }\n runtime.rejectRequest(request.id, new Error(`Unsupported Claude interaction ${request.method}`));\n } catch (error) {\n runtime.rejectRequest(request.id, error);\n }\n}\n\nfunction approvalToolName(request) {\n const display = request.params?.displayName;\n if (typeof display === \"string\" && display.trim()) return `Claude ${display.trim()}`;\n const tool = request.params?.toolName;\n return tool ? `Claude ${tool}` : \"Claude tool\";\n}\n\nfunction approvalReason(request) {\n const params = request.params ?? {};\n const input = plainObject(params.input);\n if (typeof params.title === \"string\" && params.title.trim()) return params.title.trim();\n if (typeof params.description === \"string\" && params.description.trim()) return params.description.trim();\n if (typeof params.decisionReason === \"string\" && params.decisionReason.trim()) return params.decisionReason.trim();\n if (typeof input.command === \"string\" && input.command.trim()) return input.command.trim();\n if (typeof input.file_path === \"string\" && input.file_path.trim()) return input.file_path.trim();\n return `${params.toolName ?? \"Claude\"} requires permission to continue.`;\n}\n\nfunction normalizeQuestions(input) {\n return input.slice(0, 3).map((question, index) => ({\n id: `question-${index + 1}`,\n question: requiredString(question.question ?? question.header ?? `Question ${index + 1}`, \"question\"),\n header: String(question.header ?? \"Claude\").slice(0, 12),\n options: normalizeOptions(question.options ?? []),\n multiSelect: Boolean(question.multiSelect),\n detail: typeof question.detail === \"string\" ? question.detail : undefined,\n }));\n}\n\nfunction normalizeOptions(input) {\n if (!Array.isArray(input) || input.length === 0) {\n return [{ label: \"Continue\" }, { label: \"Cancel\" }];\n }\n return input.slice(0, 4).map(option => ({\n label: requiredString(option.label ?? option, \"option label\"),\n description: typeof option.description === \"string\" ? option.description : undefined,\n }));\n}\n\nfunction normalizeAnswers(answer, questions) {\n const byId = new Map(questions.map(question => [question.id, question]));\n return Object.fromEntries((answer.answers ?? []).flatMap((entry) => {\n const question = byId.get(entry.id);\n if (!question) return [];\n const selected = [...(entry.selected ?? []), ...(entry.custom ? [entry.custom] : [])].filter(Boolean);\n return [[question.question, question.multiSelect ? selected : selected[0] ?? \"\"]];\n }));\n}\n\nfunction requiredString(value, label) {\n const text = String(value ?? \"\").trim();\n if (!text) throw new Error(`Claude ${label} is required`);\n return text;\n}\n\nfunction plainObject(value) {\n return typeof value === \"object\" && value !== null && !Array.isArray(value) ? value : {};\n}\n","import { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { KNOWN_SESSION_EVENT_TYPES } from \"@deepseek-ai/dsh-session\";\nimport { definePlugin } from \"./internal/plugin-sdk.mjs\";\nimport { ClaudeDshAdapter, CLAUDE_ACTIVITY_EVENT, CLAUDE_PROVIDER } from \"./claude-adapter.js\";\nimport { ClaudeLinkStore } from \"./claude-link-store.js\";\nimport { handleClaudeSdkRequest } from \"./claude-tools.js\";\n\nexport function createDshClaudePlugin(ctx, config = {}) {\n return definePlugin({\n manifest: {\n id: \"relay.dsh.claude\", version: \"1.0.0\", provides: { \"relay.dsh.claude.v1\": \"1.0.0\" },\n requires: { \"relay.execution.claude.v1\": \"^1.0.0\" }, permissions: [\"dsh:llm\", \"dsh:agents\"],\n },\n async activate({ capabilities, defer }) {\n installClaudeSessionEventType();\n const runtime = capabilities.require(\"relay.execution.claude.v1\");\n const adapter = new ClaudeDshAdapter({\n runtime, ready: runtime.whenReady(),\n linkStore: new ClaudeLinkStore(resolveLinkPath(config.claudeLinkPath)), logger: ctx.logger,\n });\n defer(ctx.llm.registerAdapter([CLAUDE_PROVIDER], adapter));\n defer(runtime.subscribeRequest(request => {\n void handleClaudeSdkRequest(ctx, { adapter, runtime, request })\n .catch(error => ctx.logger.error(`Relay failed to handle a Claude interaction: ${error?.stack ?? error}`));\n }));\n defer(ctx.on(\"llm/stream\", (options, next) => {\n if (options.purpose || !options.sessionId) return next();\n const agent = ctx.agents.get(options.sessionId);\n return agent && adapter.servesAgent(agent) ? adapter.stream(options) : next();\n }, { global: true, prepend: true }));\n defer(ctx.on(\"agent/created\", ({ agent }) => { adapter.attachAgent(agent); }));\n defer(ctx.on(\"agent-preset/selected\", (sessionId, preset) => {\n const agent = ctx.agents.get(sessionId); if (agent) adapter.attachAgent(agent, preset);\n }, { global: true }));\n defer(ctx.on(\"agent/disposed\", ({ agent }) => { adapter.detachAgent(agent.id); }));\n for (const agent of ctx.agents.list()) adapter.attachAgent(agent);\n return { capabilities: { \"relay.dsh.claude.v1\": Object.freeze({ provider: CLAUDE_PROVIDER }) } };\n },\n });\n}\n\nexport function installClaudeSessionEventType() {\n if (KNOWN_SESSION_EVENT_TYPES.has(CLAUDE_ACTIVITY_EVENT)) return;\n if (typeof KNOWN_SESSION_EVENT_TYPES.add !== \"function\") throw new Error(\"This DSH build cannot register Relay Claude session events\");\n KNOWN_SESSION_EVENT_TYPES.add(CLAUDE_ACTIVITY_EVENT);\n}\n\nfunction resolveLinkPath(value) {\n const configured = value ?? process.env.RELAY_CLAUDE_LINK_PATH;\n return configured ? resolve(configured) : join(homedir(), \".relay\", \"claude-dsh-links.json\");\n}\n","import { cp, mkdir, stat } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\n\nexport async function installManagedPreset(source, id) {\n const home = resolve(process.env.DSH_HOME?.trim() || join(homedir(), \".dsh\"));\n const target = join(home, \".agent-presets\", id);\n await mkdir(join(home, \".agent-presets\"), { recursive: true });\n if (await exists(target)) {\n if (!await exists(join(target, \".relay-managed\"))) {\n throw new Error(`Relay preset ${id} already exists and is not Relay-managed`);\n }\n } else {\n await mkdir(target, { recursive: true });\n }\n for (const file of [\"agent.cordis.yml\", \"preset.yml\", \".relay-managed\"]) {\n await cp(join(source, file), join(target, file));\n }\n return target;\n}\n\nasync function exists(path) {\n try { await stat(path); return true; } catch (error) {\n if (error?.code === \"ENOENT\") return false;\n throw error;\n }\n}\n","import { fileURLToPath } from \"node:url\";\nimport { PluginHost } from \"./internal/plugin-sdk.mjs\";\nimport { createClaudeExecutionPlugin } from \"./plugin.mjs\";\nimport { createDshClaudePlugin } from \"./dsh-plugin.js\";\nimport { installManagedPreset } from \"./preset.js\";\nexport { installClaudeSessionEventType } from \"./dsh-plugin.js\";\n\nexport const name = \"relay-dsh-plugin-claude\";\nexport const inject = [\n \"agents\",\n \"approval\",\n \"llm\",\n \"sessions\",\n \"sessionPersistence\",\n \"tools\",\n \"typert\",\n \"userQuestions\",\n \"webServer\",\n];\n\nexport async function apply(ctx, config = {}) {\n const host = new PluginHost();\n const release = ctx.effect(() => () => host.dispose(), \"relay.claude()\");\n try {\n await installManagedPreset(fileURLToPath(new URL(\"../presets/relay-claude\", import.meta.url)), \"relay-claude\");\n await host.activate([\n createClaudeExecutionPlugin({\n client: config.claude?.client, backend: config.claudeBackend, command: config.claudeCommand,\n args: config.claudeArgs, codeExecutablePath: config.claudeCodeExecutablePath,\n requestTimeoutMs: config.claudeRequestTimeoutMs, cwd: config.cwd,\n }),\n createDshClaudePlugin(ctx, config),\n ]);\n } catch (error) { await release(); throw error; }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "relay-dsh-plugin-claude",
3
- "version": "0.1.0",
3
+ "version": "0.1.1-rc.3",
4
4
  "description": "Claude Code integration plugin for DeepSeek Harness, providing native Claude conversations powered by the Claude Agent SDK, with model selection, approvals, questions, tools, and session continuation.",
5
+ "license": "MIT",
5
6
  "type": "module",
6
7
  "main": "lib/host-plugin.js",
7
8
  "repository": { "type": "git", "url": "git+https://github.com/yangbobo2021/relay-dsh-plugin-claude.git" },