relay-dsh-plugin-claude 0.1.0

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.
@@ -0,0 +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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"}
@@ -0,0 +1,16 @@
1
+ //#region typert.host.js
2
+ const TYPERT = {
3
+ package: "relay-dsh-plugin-claude",
4
+ face: "host",
5
+ schemas: [],
6
+ invocations: [],
7
+ model: {
8
+ services: [],
9
+ events: [],
10
+ objects: []
11
+ }
12
+ };
13
+ //#endregion
14
+ export { TYPERT };
15
+
16
+ //# sourceMappingURL=typert.host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typert.host.js","names":[],"sources":["../typert.host.js"],"sourcesContent":["export const TYPERT = { package: \"relay-dsh-plugin-claude\", face: \"host\", schemas: [], invocations: [], model: { services: [], events: [], objects: [] } };\n"],"mappings":";AAAA,MAAa,SAAS;CAAE,SAAS;CAA2B,MAAM;CAAQ,SAAS,CAAC;CAAG,aAAa,CAAC;CAAG,OAAO;EAAE,UAAU,CAAC;EAAG,QAAQ,CAAC;EAAG,SAAS,CAAC;CAAE;AAAE"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "relay-dsh-plugin-claude",
3
+ "version": "0.1.0",
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
+ "type": "module",
6
+ "main": "lib/host-plugin.js",
7
+ "repository": { "type": "git", "url": "git+https://github.com/yangbobo2021/relay-dsh-plugin-claude.git" },
8
+ "homepage": "https://github.com/yangbobo2021/relay-dsh-plugin-claude#readme",
9
+ "bugs": { "url": "https://github.com/yangbobo2021/relay-dsh-plugin-claude/issues" },
10
+ "engines": { "node": ">=22.13" },
11
+ "publishConfig": { "access": "public" },
12
+ "scripts": {
13
+ "prepare:dsh": "bash scripts/link-dsh-development-peers.sh",
14
+ "prebuild": "npm run prepare:dsh && node -e \"require('node:fs').rmSync('lib',{recursive:true,force:true})\"",
15
+ "build": "tsdown --config tsdown.config.ts",
16
+ "postbuild": "node normalize-build.mjs",
17
+ "pretypecheck": "npm run prepare:dsh",
18
+ "typecheck": "tsc -p tsconfig.json",
19
+ "test": "npm run prepare:dsh && node --test test/*.test.mjs",
20
+ "verify": "npm run typecheck && npm test && npm run build"
21
+ },
22
+ "exports": { ".": "./lib/host-plugin.js", "./client": "./lib/client.js", "./typert": "./lib/typert.host.js", "./package.json": "./package.json" },
23
+ "files": ["README.zh.md", "docs/images", "cordis.patch.yml", "presets", "lib/client.js", "lib/client.js.map", "lib/host-plugin.js", "lib/host-plugin.js.map", "lib/typert.host.js", "lib/typert.host.js.map"],
24
+ "dsh": {
25
+ "client": { "inject": ["@deepseek-ai/dsh-api-remotes", "@deepseek-ai/dsh-client-connection", "@deepseek-ai/dsh-client-locale", "@deepseek-ai/dsh-client-runtime", "@deepseek-ai/dsh-client-ui-conversation", "@deepseek-ai/dsh-client-ui-primitives", "@deepseek-ai/dsh-client-ui-settings", "@deepseek-ai/dsh-client-ui-slots", "@deepseek-ai/dsh-client-ui-theme"], "platform": "web" },
26
+ "bundle": { "patch": "./cordis.patch.yml" }
27
+ },
28
+ "dependencies": { "@anthropic-ai/claude-agent-sdk": "^0.3.233", "zod": "4.4.3" },
29
+ "peerDependencies": {
30
+ "@deepseek-ai/dsh-llm": ">=0.1.0-rc.5 <0.1.1 || >=0.1.1-rc.0 <0.2.0",
31
+ "@deepseek-ai/dsh-session": ">=0.1.0-rc.5 <0.1.1 || >=0.1.1-rc.0 <0.2.0",
32
+ "@deepseek-ai/dsh-typert-protocol": ">=0.1.0-rc.5 <0.1.1 || >=0.1.1-rc.0 <0.2.0",
33
+ "react": "^18.2.0"
34
+ },
35
+ "peerDependenciesMeta": {
36
+ "@deepseek-ai/dsh-llm": { "optional": true },
37
+ "@deepseek-ai/dsh-session": { "optional": true },
38
+ "@deepseek-ai/dsh-typert-protocol": { "optional": true },
39
+ "react": { "optional": true }
40
+ },
41
+ "devDependencies": { "@types/react": "~18.3.1", "lightningcss": "1.32.0", "react": "^18.2.0", "tsdown": "0.22.2", "typescript": "6.0.3" }
42
+ }
@@ -0,0 +1 @@
1
+ Managed by Relay. Local edits are replaced.
@@ -0,0 +1,4 @@
1
+ # Claude Code owns the model context, tools, settings, skills, MCP, and command
2
+ # execution. Relay's host adapter binds this otherwise-empty DSH presentation
3
+ # Session to a Claude Code session.
4
+ []
@@ -0,0 +1,3 @@
1
+ name: Claude Code
2
+ description: Run and resume a Claude Code session in DSH. 在 DSH 中运行并继续 Claude Code session。
3
+ order: 3