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 +21 -0
- package/README.md +59 -13
- package/README.zh.md +57 -11
- package/lib/client.js +44 -30
- package/lib/client.js.map +1 -1
- package/lib/host-plugin.js +7 -4
- package/lib/host-plugin.js.map +1 -1
- package/package.json +2 -1
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
|
+
[](https://www.npmjs.com/package/relay-dsh-plugin-claude)
|
|
4
|
+
[](https://github.com/yangbobo2021/relay-dsh-plugin-claude/actions/workflows/ci.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/relay-dsh-plugin-claude)
|
|
6
|
+
[](https://github.com/yangbobo2021/relay-dsh-plugin-claude/stargazers)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
9
|
+
[](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
|
+
[](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.
|
|
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
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
82
|
-
|
|
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
|
+
[](https://www.npmjs.com/package/relay-dsh-plugin-claude)
|
|
4
|
+
[](https://github.com/yangbobo2021/relay-dsh-plugin-claude/actions/workflows/ci.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/relay-dsh-plugin-claude)
|
|
6
|
+
[](https://github.com/yangbobo2021/relay-dsh-plugin-claude/stargazers)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://github.com/deepseek-ai/deepseek-harness)
|
|
9
|
+
[](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
|
+
[](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.
|
|
73
|
+
### 2. 选择安装来源并安装
|
|
74
|
+
|
|
75
|
+
修改 Profile 插件前,请先停止正在运行的 DSH Web,然后从以下来源中选择
|
|
76
|
+
一种。
|
|
57
77
|
|
|
58
|
-
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
88
|
+
本文更新时,`latest` 指向稳定版 `0.1.0`。最新版本请以链接中的 npm 页面
|
|
89
|
+
为准。
|
|
90
|
+
|
|
91
|
+
#### npm 预发布版(DSH 预览阶段推荐)
|
|
68
92
|
|
|
69
|
-
|
|
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
|
-
|
|
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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"}
|
package/lib/host-plugin.js
CHANGED
|
@@ -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 = {}) {
|
package/lib/host-plugin.js.map
CHANGED
|
@@ -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.
|
|
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" },
|