relay-dsh-plugin-claude 0.2.3 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -25
- package/README.zh.md +27 -25
- package/docs/spec/claude-native-session-import.md +6 -4
- package/lib/host-plugin.js +4 -2
- package/lib/host-plugin.js.map +1 -1
- package/package.json +6 -6
package/lib/host-plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host-plugin.js","names":["#entries","#drainActive","#disposeActive","DEFAULT_MODELS","DEFAULT_MODELS","sessionImportUnavailable","CLAUDE_IMAGE_MEDIA_TYPES","requiredString","ToolCallId"],"sources":["../internal/plugin-sdk.mjs","../cli-client.mjs","../claude-plugin-config.mjs","../sdk-client.mjs","../session-runtime.mjs","../plugin.mjs","../dsh-compat.mjs","../claude-image-output.js","../claude-adapter.js","../claude-import.mjs","../claude-import-contract.mjs","../claude-import-route.js","../claude-link-store.js","../claude-tools.js","../dsh-import-target.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\", inputModalities: [\"text\"] },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\", inputModalities: [\"text\"] },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\", inputModalities: [\"text\"] },\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 assertSdkOnlyPluginsAbsent(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 assertSdkOnlyPluginsAbsent(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 assertSdkOnlyPluginsAbsent(message);\n if (message.content?.some(block => block?.type === \"image\")) {\n throw new Error(\"The Claude CLI backend cannot accept image input; use the Claude Agent SDK backend\");\n }\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 assertSdkOnlyPluginsAbsent(config) {\n if (Array.isArray(config.plugins) && config.plugins.length === 0) return;\n if (config.plugins !== undefined) {\n throw Object.assign(new Error(\"Local Claude plugins require the Claude Agent SDK backend\"), {\n code: \"CLAUDE_LOCAL_PLUGINS_REQUIRE_SDK\",\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","const CLAUDE_PLUGIN_KEYS = new Set([\"type\", \"path\", \"skipMcpDiscovery\"]);\n\nexport function normalizeClaudePlugins(value, label = \"Claude plugins\") {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) throw new TypeError(`${label} must be an array`);\n\n return value.map((plugin, index) => {\n const entryLabel = `${label}[${index}]`;\n if (!plugin || typeof plugin !== \"object\" || Array.isArray(plugin)) {\n throw new TypeError(`${entryLabel} must be an object`);\n }\n for (const key of Object.keys(plugin)) {\n if (!CLAUDE_PLUGIN_KEYS.has(key)) throw new TypeError(`${entryLabel}.${key} is not supported`);\n }\n if (plugin.type !== \"local\") throw new TypeError(`${entryLabel}.type must be \"local\"`);\n if (typeof plugin.path !== \"string\" || !plugin.path.trim()) {\n throw new TypeError(`${entryLabel}.path must be a non-empty string`);\n }\n if (plugin.skipMcpDiscovery !== undefined && typeof plugin.skipMcpDiscovery !== \"boolean\") {\n throw new TypeError(`${entryLabel}.skipMcpDiscovery must be a boolean`);\n }\n return {\n type: \"local\",\n path: plugin.path,\n ...(plugin.skipMcpDiscovery === undefined ? {} : { skipMcpDiscovery: plugin.skipMcpDiscovery }),\n };\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport { z } from \"zod\";\n\nimport { normalizeClaudePlugins } from \"./claude-plugin-config.mjs\";\n\nconst DEFAULT_MODELS = [\n { id: \"sonnet\", displayName: \"Claude Sonnet\", isDefault: true, defaultReasoningEffort: \"medium\", supportedReasoningEfforts: reasoningEfforts(), inputModalities: [\"text\", \"image\"] },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\", supportedReasoningEfforts: reasoningEfforts(), inputModalities: [\"text\", \"image\"] },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\", supportedReasoningEfforts: reasoningEfforts(), inputModalities: [\"text\", \"image\"] },\n];\n\nconst CLAUDE_SEARCH_TOOLS = [\"Glob\", \"Grep\"];\nconst SENSITIVE_ENV_NAME = /(?:^|_)(?:API_?KEY|ACCESS_?KEY|SECRET(?:_ACCESS_?KEY)?|TOKEN|PASSWORD|PASSWD|CREDENTIALS?|PRIVATE_?KEY)(?:$|_)/i;\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 supportsSessionImport() {\n return typeof this.sdk?.listSessions === \"function\"\n && typeof this.sdk?.getSessionInfo === \"function\"\n && typeof this.sdk?.getSessionMessages === \"function\";\n }\n\n async listWorkspaceSessions({ cwd }) {\n if (!this.supportsSessionImport()) {\n throw sessionImportUnavailable();\n }\n return this.sdk.listSessions({\n dir: cwd,\n includeWorktrees: false,\n includeProgrammatic: false,\n });\n }\n\n async readSession(sessionId, { cwd }) {\n if (!this.supportsSessionImport()) {\n throw sessionImportUnavailable();\n }\n const info = await this.sdk.getSessionInfo(sessionId, { dir: cwd });\n if (!info) return null;\n const messages = await this.sdk.getSessionMessages(sessionId, { dir: cwd });\n return { ...info, messages };\n }\n\n async createSession(config = {}) {\n config = normalizedSessionConfig(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 config = normalizedSessionConfig(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 if (message.plugins !== undefined) {\n throw new TypeError(\"Claude plugins must be configured when the Session is created or resumed\");\n }\n const session = this.sessions.get(sessionId) ?? (await this.resumeSession(sessionId, message));\n const turnId = randomUUID();\n const abortController = new AbortController();\n const options = await this.queryOptions(session, message, abortController);\n const query = this.sdk.query({ prompt: claudePrompt(message), 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 async queryOptions(session, message, abortController) {\n const plugins = normalizeClaudePlugins(session.config?.plugins);\n const cwd = message.cwd ?? session.cwd ?? process.cwd();\n const settingSources = message.settingSources ?? session.config?.settingSources ?? [\"user\", \"project\", \"local\"];\n const dshOptions = dshMcpOptions(\n this.sdk,\n message.dshTools,\n message.executeDshTool,\n abortController.signal,\n );\n const redactions = await sensitiveEnvironmentRedactions(this.sdk, cwd, settingSources);\n return {\n abortController,\n 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,\n systemPrompt: message.systemPrompt ?? session.config?.systemPrompt,\n pathToClaudeCodeExecutable: this.pathToClaudeCodeExecutable,\n includePartialMessages: true,\n ...(plugins === undefined ? {} : { plugins }),\n ...(session.created ? { resume: session.id } : { sessionId: session.id }),\n canUseTool: (toolName, input, options) => this.requestPermission(session.id, toolName, input, options),\n ...(redactions.length === 0 ? {} : { hooks: sensitiveOutputHooks(redactions) }),\n ...dshOptions,\n allowedTools: [...CLAUDE_SEARCH_TOOLS, ...(dshOptions.allowedTools ?? [])],\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 = {\n currentMessageId: null,\n text: new Map(),\n reasoning: new Map(),\n activities: new Set(),\n tools: new Map(),\n };\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\nasync function sensitiveEnvironmentRedactions(sdk, cwd, settingSources) {\n const environment = { ...process.env };\n const explicitSensitiveNames = new Set();\n if (typeof sdk.resolveSettings === \"function\") {\n const resolved = await sdk.resolveSettings({ cwd, settingSources });\n Object.assign(environment, resolved?.effective?.env ?? {});\n for (const entry of resolved?.effective?.sandbox?.credentials?.envVars ?? []) {\n if (typeof entry?.name === \"string\") explicitSensitiveNames.add(entry.name);\n }\n }\n\n const byValue = new Map();\n for (const [name, value] of Object.entries(environment)) {\n if (!SENSITIVE_ENV_NAME.test(name) && !explicitSensitiveNames.has(name)) continue;\n if (typeof value !== \"string\" || value.length === 0) continue;\n const current = byValue.get(value);\n if (current === undefined || name < current) byValue.set(value, name);\n }\n return [...byValue]\n .map(([value, name]) => ({ value, replacement: `[REDACTED_ENV:${name}]` }))\n .sort((left, right) => right.value.length - left.value.length || left.replacement.localeCompare(right.replacement));\n}\n\nfunction sensitiveOutputHooks(redactions) {\n return {\n PostToolUse: [{\n hooks: [async (input) => {\n const redacted = redactSensitiveToolOutput(input.tool_response, redactions);\n if (!redacted.changed) return { continue: true };\n return {\n continue: true,\n hookSpecificOutput: {\n hookEventName: \"PostToolUse\",\n updatedToolOutput: redacted.value,\n },\n };\n }],\n }],\n };\n}\n\nfunction redactSensitiveToolOutput(value, redactions) {\n if (typeof value === \"string\") {\n let redacted = value;\n for (const entry of redactions) redacted = redacted.replaceAll(entry.value, entry.replacement);\n return { value: redacted, changed: redacted !== value };\n }\n if (Array.isArray(value)) {\n let changed = false;\n const redacted = value.map((item) => {\n const result = redactSensitiveToolOutput(item, redactions);\n changed ||= result.changed;\n return result.value;\n });\n return { value: changed ? redacted : value, changed };\n }\n if (!value || typeof value !== \"object\") return { value, changed: false };\n\n let changed = false;\n const entries = Object.entries(value).map(([key, item]) => {\n const result = redactSensitiveToolOutput(item, redactions);\n changed ||= result.changed;\n return [key, result.value];\n });\n return { value: changed ? Object.fromEntries(entries) : value, changed };\n}\n\nfunction normalizedSessionConfig(config) {\n const plugins = normalizeClaudePlugins(config.plugins);\n const normalized = {\n ...config,\n ...(plugins === undefined ? {} : { plugins }),\n };\n if (plugins === undefined) delete normalized.plugins;\n return normalized;\n}\n\nfunction claudePrompt(message) {\n const content = Array.isArray(message.content) ? message.content : [];\n if (!content.some(block => block?.type === \"image\")) return message.text;\n const sdkContent = content.map((block) => {\n if (block?.type === \"text\") return { type: \"text\", text: String(block.text ?? \"\") };\n if (block?.type === \"image\" && CLAUDE_IMAGE_MEDIA_TYPES.has(block.mediaType) && typeof block.data === \"string\") {\n return {\n type: \"image\",\n source: { type: \"base64\", media_type: block.mediaType, data: block.data },\n };\n }\n throw Object.assign(new Error(\"Claude SDK received invalid multimodal message content.\"), {\n code: \"CLAUDE_IMAGE_INPUT_INVALID\",\n });\n });\n return oneUserMessage(sdkContent);\n}\n\nasync function* oneUserMessage(content) {\n yield {\n type: \"user\",\n message: { role: \"user\", content },\n parent_tool_use_id: null,\n };\n}\n\nconst CLAUDE_IMAGE_MEDIA_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"]);\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 state.tools.set(String(block.id), { name: block.name, input: block.input });\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 const tool = state.tools.get(String(block.tool_use_id)) ?? {};\n const images = structuredImagesFrom(block.content, message.tool_use_result);\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: block.tool_use_id,\n name: tool.name,\n input: tool.input,\n output: redactStructuredImages(block.content),\n ...(images.length > 0 ? { images } : {}),\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 structuredImagesFrom(...values) {\n const images = [];\n const seenObjects = new Set();\n const seenImages = new Set();\n const visit = (value) => {\n if (!value || typeof value !== \"object\" || seenObjects.has(value)) return;\n seenObjects.add(value);\n if (value.type === \"image\") {\n const mediaType = value.mediaType ?? value.mimeType ?? value.source?.media_type ?? value.file?.type;\n const data = value.data ?? value.source?.data ?? value.file?.base64;\n if (CLAUDE_IMAGE_MEDIA_TYPES.has(mediaType) && typeof data === \"string\") {\n const key = `${mediaType}:${data}`;\n if (!seenImages.has(key)) {\n seenImages.add(key);\n images.push({ mediaType, data, name: value.name ?? value.file?.name });\n }\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) visit(item);\n return;\n }\n for (const item of Object.values(value)) visit(item);\n };\n for (const value of values) visit(value);\n return images;\n}\n\nfunction redactStructuredImages(value) {\n if (Array.isArray(value)) return value.map(redactStructuredImages);\n if (!value || typeof value !== \"object\") return value;\n if (value.type === \"image\") {\n return {\n type: \"image\",\n mediaType: value.mediaType ?? value.mimeType ?? value.source?.media_type ?? value.file?.type ?? \"unknown\",\n omitted: true,\n };\n }\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, redactStructuredImages(item)]));\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 sessionImportUnavailable() {\n return Object.assign(\n new Error(\"The active Claude Agent SDK does not support native Session discovery and history import\"),\n { code: \"CLAUDE_SESSION_IMPORT_UNAVAILABLE\" },\n );\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\";\nimport { normalizeClaudePlugins } from \"./claude-plugin-config.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 plugins = undefined,\n } = {}) {\n super();\n this.client = client;\n this.cwd = cwd;\n this.plugins = normalizeClaudePlugins(plugins);\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 plugins = this.plugins,\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 normalizedPlugins = normalizeClaudePlugins(plugins);\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 ...(normalizedPlugins === undefined ? {} : { plugins: normalizedPlugins }),\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 plugins: normalizedPlugins,\n });\n if (!session.ephemeral) this.selectedSessionId = session.id;\n this.emitChange();\n return publicSession(session);\n }\n\n supportsSessionImport() {\n return this.client.supportsSessionImport?.() === true;\n }\n\n async listWorkspaceSessions({ cwd }) {\n if (!this.supportsSessionImport() || typeof this.client.listWorkspaceSessions !== \"function\") {\n throw sessionImportUnavailable();\n }\n return structuredClone(await this.client.listWorkspaceSessions({ cwd }));\n }\n\n async readSession(sessionId, { cwd }) {\n if (!this.supportsSessionImport() || typeof this.client.readSession !== \"function\") {\n throw sessionImportUnavailable();\n }\n const source = await this.client.readSession(sessionId, { cwd });\n return source === null ? null : structuredClone(source);\n }\n\n async resumeSession(sessionId, defaults = {}) {\n if (!sessionId?.trim()) throw new Error(\"sessionId is required\");\n const normalizedPlugins = normalizeClaudePlugins(defaults.plugins === undefined ? this.plugins : defaults.plugins);\n const resumeConfig = {\n cwd: defaults.cwd ?? this.cwd,\n ...defaults,\n ...(normalizedPlugins === undefined ? {} : { plugins: normalizedPlugins }),\n };\n if (normalizedPlugins === undefined) delete resumeConfig.plugins;\n const resumed = await this.client.resumeSession?.(sessionId, resumeConfig);\n const session = this.upsertSession(resumed ?? {}, { id: sessionId, ...resumeConfig });\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, message = {}) {\n const { text, content, model, effort, sandbox, approvalPolicy, cwd } = message;\n const session = this.requireSession(sessionId);\n const hasContent = Array.isArray(content) && content.some(block =>\n block?.type === \"image\" || (block?.type === \"text\" && String(block.text ?? \"\").trim()),\n );\n if (!text?.trim() && !hasContent) throw new Error(\"message content is required\");\n if (message.plugins !== undefined) {\n throw new TypeError(\"Claude plugins must be configured when the Session is created or resumed\");\n }\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, { ...message, text, content, ...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 plugins: defaults.plugins ?? input.plugins ?? existing.plugins,\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\nfunction sessionImportUnavailable() {\n return Object.assign(\n new Error(\"Native Claude Session import requires the Claude Agent SDK backend\"),\n { code: \"CLAUDE_SESSION_IMPORT_UNAVAILABLE\" },\n );\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({\n client,\n cwd: config.cwd ?? process.cwd(),\n plugins: config.plugins,\n });\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 supportsSessionImport: () => runtime.supportsSessionImport(),\n listWorkspaceSessions: runtime.listWorkspaceSessions.bind(runtime),\n readSession: runtime.readSession.bind(runtime),\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 supportsSessionImport(...args) { return this.active.supportsSessionImport?.(...args) === true; }\n listWorkspaceSessions(...args) { return this.active.listWorkspaceSessions?.(...args); }\n readSession(...args) { return this.active.readSession?.(...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 * as llm from '@deepseek-ai/dsh-llm';\n\n// Keep namespace access: a named import fails before this adapter can run on\n// the other official DSH generation. Both constructors have the same contract.\nexport function toolCallId(value) {\n const create = Reflect.get(llm, 'ToolCallId') ?? Reflect.get(llm, 'CallId');\n if (typeof create !== 'function') throw new Error('DSH does not provide a tool call ID constructor');\n return create(value);\n}\n\nexport function sessionEvents(session, from = 0) {\n if (!Number.isSafeInteger(from) || from < 0) throw new RangeError('session event offset must be a non-negative integer');\n const snapshot = Reflect.get(session, 'snapshotEvents');\n if (typeof snapshot === 'function') {\n return from === 0 ? Reflect.apply(snapshot, session, []) : Reflect.apply(snapshot, session, [from]);\n }\n const events = Reflect.get(session, 'events');\n if (!Array.isArray(events)) throw new TypeError('DSH Session exposes neither snapshotEvents() nor events');\n return from === 0 ? events : events.slice(from);\n}\n","import { basename, extname, isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { open, realpath, stat } from \"node:fs/promises\";\nimport sharp from \"sharp\";\n\nconst MEDIA_TYPES = new Map([\n [\".gif\", \"image/gif\"],\n [\".jpeg\", \"image/jpeg\"],\n [\".jpg\", \"image/jpeg\"],\n [\".png\", \"image/png\"],\n [\".webp\", \"image/webp\"],\n]);\n\nconst IMAGE_SUFFIX = String.raw`\\.(?:png|jpe?g|webp|gif|bmp|svg|tiff?|avif|heic)`;\nconst IMAGE_PATH_END = new RegExp(`${IMAGE_SUFFIX}$`, \"i\");\nconst BARE_PATH_BOUNDARY = String.raw`[\\s(\\[{:*=~(【《「『“‘,。;:!?、]`;\nconst BARE_PATH_END_CHAR = String.raw`[\\s)\\]}>,;:!?*~,。;:!?、)】》」』”’]`;\nconst BARE_PATH_END = String.raw`(?:${BARE_PATH_END_CHAR}|\\.(?=$|${BARE_PATH_END_CHAR}))`;\nconst BARE_PATH_CONTENT = String.raw`[^\\s<>\"'“”‘’「」『』*~()\\[\\]{}=:,;!?,。;:!?、()【】《》]+?`;\nconst MARKDOWN_PATH = new RegExp(String.raw`!?\\[[^\\]\\r\\n]*\\]\\(\\s*(?:<([^>]+)>|([^\\s)]+))(?:\\s+[\"'][^\"']*[\"'])?\\s*\\)`, \"gi\");\nconst INLINE_CODE_PATH = new RegExp(\"`([^`\\\\r\\\\n]+\" + IMAGE_SUFFIX + \")`\", \"gi\");\nconst QUOTED_PATH = new RegExp(\"[\\\"']([^\\\"'\\\\r\\\\n]+\" + IMAGE_SUFFIX + \")[\\\"']\", \"gi\");\nconst URI_REFERENCE = /(?!(?:[a-z]:[\\\\/]))(?:[a-z][a-z0-9+.-]*:\\/\\/|data:|file:|blob:|mailto:|\\/\\/)[^\\s<>\"'“”‘’]+/gi;\nconst SVG_EXTENSION = \".svg\";\nconst SVG_SOURCE_MAX_BYTES = 2 * 1024 * 1024;\nconst SVG_RASTER_DENSITY = 72;\nconst SVG_RASTER_TIMEOUT_SECONDS = 3;\nconst DEFAULT_MAX_IMAGE_PIXELS = 64_000_000;\nconst DEFAULT_MAX_IMAGE_DIMENSION = 8192;\n\nexport function extractFinalAnswerImagePaths(text) {\n const visible = withoutFencedCode(String(text ?? \"\"));\n const matches = [];\n collectMatches(matches, visible, MARKDOWN_PATH, 1, 2);\n collectMatches(matches, visible, INLINE_CODE_PATH, 1);\n collectMatches(matches, visible, QUOTED_PATH, 1);\n const bareVisible = maskMatches(visible, MARKDOWN_PATH, INLINE_CODE_PATH, QUOTED_PATH, URI_REFERENCE);\n collectMatches(\n matches,\n bareVisible,\n new RegExp(String.raw`(?:^|${BARE_PATH_BOUNDARY})((?:[a-z]:[\\\\/])?${BARE_PATH_CONTENT}${IMAGE_SUFFIX})(?=$|${BARE_PATH_END})`, \"gi\"),\n 1,\n );\n matches.sort((left, right) => left.index - right.index);\n const seen = new Set();\n return matches.flatMap(({ path }) => {\n const normalized = normalizeMention(path);\n if (!normalized || !IMAGE_PATH_END.test(normalized) || isRemoteReference(normalized) || seen.has(normalized)) return [];\n seen.add(normalized);\n return [normalized];\n });\n}\n\nexport async function promoteFinalAnswerImages({\n text,\n cwd,\n attachments,\n structuredImages = [],\n structuredImageData = [],\n signal,\n svgRasterizer = rasterizeSvgToPng,\n}) {\n const paths = extractFinalAnswerImagePaths(text);\n if (paths.length === 0) {\n const images = [...structuredImages];\n const failures = [];\n for (const [index, image] of deduplicateStructuredImages(structuredImageData).entries()) {\n try {\n images.push(await saveStructuredImage({ ...image, id: image.id ?? `structured-${index}` }, attachments, signal));\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n failures.push(failure(\n image.name ?? `Claude structured image ${index + 1}`,\n error.code ?? \"CLAUDE_IMAGE_OUTPUT_IMPORT_FAILED\",\n error.message ?? \"the structured image could not be imported\",\n ));\n }\n }\n const admitted = applyOutputLimits(deduplicateAttachments(images), attachments);\n return { paths, images: admitted.images, failures: [...failures, ...admitted.failures] };\n }\n if (typeof attachments?.saveImage !== \"function\") {\n return {\n paths,\n images: [],\n failures: paths.map(path => failure(path, \"CLAUDE_IMAGE_OUTPUT_ATTACHMENTS_UNAVAILABLE\", \"the DSH attachment service is unavailable\")),\n };\n }\n\n const images = [];\n const failures = [];\n for (const path of paths) {\n signal?.throwIfAborted();\n try {\n images.push(await snapshotWorkspaceImage(path, cwd, attachments, signal, svgRasterizer));\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n failures.push(failure(path, error.code ?? \"CLAUDE_IMAGE_OUTPUT_IMPORT_FAILED\", outputFailureReason(error)));\n }\n }\n const admitted = applyOutputLimits(deduplicateAttachments(images), attachments);\n return { paths, images: admitted.images, failures: [...failures, ...admitted.failures] };\n}\n\nexport async function saveStructuredImage(image, attachments, signal) {\n signal?.throwIfAborted();\n if (typeof attachments?.saveImage !== \"function\") {\n throw outputImageError(\"the DSH attachment service is unavailable\", \"CLAUDE_IMAGE_OUTPUT_ATTACHMENTS_UNAVAILABLE\");\n }\n if (!MEDIA_TYPES.has(extensionForMediaType(image?.mediaType)) || typeof image?.data !== \"string\") {\n throw outputImageError(\"Claude returned invalid structured image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n const data = decodeBase64(image.data);\n return attachments.saveImage({\n data,\n mediaType: image.mediaType,\n name: image.name ?? `claude-${image.id ?? \"image\"}.${extensionForMediaType(image.mediaType).slice(1)}`,\n });\n}\n\nexport async function materializeDshToolImages(result, attachments, signal) {\n const content = [];\n const attachmentsFound = [];\n for (const block of result?.content ?? []) {\n if (block?.type !== \"image\" || !block.attachment) {\n content.push(block);\n continue;\n }\n signal?.throwIfAborted();\n if (typeof attachments?.readImage !== \"function\") {\n throw outputImageError(\"the DSH attachment service is unavailable\", \"CLAUDE_IMAGE_OUTPUT_ATTACHMENTS_UNAVAILABLE\");\n }\n const stored = await attachments.readImage(block.attachment, signal);\n if (!(stored?.data instanceof Uint8Array) || !stored?.ref?.mediaType) {\n throw outputImageError(\"the DSH attachment store returned invalid image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n attachmentsFound.push(stored.ref);\n content.push({\n type: \"image\",\n data: Buffer.from(stored.data).toString(\"base64\"),\n mediaType: stored.ref.mediaType,\n });\n }\n return {\n result: { ...result, content },\n attachments: attachmentsFound,\n };\n}\n\nasync function snapshotWorkspaceImage(path, cwd, attachments, signal, svgRasterizer) {\n const root = await realpath(resolve(cwd ?? process.cwd()));\n const target = await realpath(resolve(root, path));\n const targetRelative = relative(root, target);\n if (targetRelative === \"..\" || targetRelative.startsWith(`..${sep}`) || isAbsolute(targetRelative)) {\n throw outputImageError(\"the path is outside the session workspace\", \"CLAUDE_IMAGE_OUTPUT_OUTSIDE_WORKSPACE\");\n }\n const extension = extname(target).toLowerCase();\n const mediaType = MEDIA_TYPES.get(extension);\n const isSvg = extension === SVG_EXTENSION;\n if (!mediaType && !isSvg) {\n throw outputImageError(\"the image type is unsupported\", \"CLAUDE_IMAGE_OUTPUT_TYPE_UNSUPPORTED\");\n }\n const handle = await open(target, \"r\");\n let data;\n try {\n const before = await handle.stat();\n if (!before.isFile()) throw outputImageError(\"the path is not a file\", \"CLAUDE_IMAGE_OUTPUT_NOT_FILE\");\n const configuredMaxBytes = attachments.imageLimits?.maxImageBytes;\n const maxBytes = isSvg\n ? Math.min(validLimit(configuredMaxBytes, Number.POSITIVE_INFINITY), SVG_SOURCE_MAX_BYTES)\n : configuredMaxBytes;\n if (Number.isSafeInteger(maxBytes) && before.size > maxBytes) {\n throw outputImageError(\"the image exceeds the configured size limit\", \"CLAUDE_IMAGE_OUTPUT_TOO_LARGE\");\n }\n signal?.throwIfAborted();\n data = await handle.readFile();\n signal?.throwIfAborted();\n const [after, pathAfter, realPathAfter] = await Promise.all([\n handle.stat(),\n stat(target),\n realpath(target),\n ]);\n if (\n before.size !== after.size\n || before.mtimeMs !== after.mtimeMs\n || before.ctimeMs !== after.ctimeMs\n || before.ino !== after.ino\n || after.ino !== pathAfter.ino\n || after.dev !== pathAfter.dev\n || data.byteLength !== after.size\n || realPathAfter !== target\n ) {\n throw outputImageError(\"the image changed while Claude was finishing its answer\", \"CLAUDE_IMAGE_OUTPUT_CHANGED_DURING_READ\");\n }\n } finally {\n await handle.close();\n }\n if (isSvg) {\n const rendered = await svgRasterizer(data, svgRasterLimits(attachments), signal);\n return attachments.saveImage({\n data: rendered,\n mediaType: \"image/png\",\n name: `${basename(target, extension)}.png`,\n });\n }\n return attachments.saveImage({ data, mediaType, name: basename(target) });\n}\n\nexport async function rasterizeSvgToPng(data, limits = {}, signal) {\n signal?.throwIfAborted();\n const maxPixels = validLimit(limits.maxPixels, DEFAULT_MAX_IMAGE_PIXELS);\n const maxDimension = validLimit(limits.maxDimension, DEFAULT_MAX_IMAGE_DIMENSION);\n const maxBytes = validLimit(limits.maxBytes, Number.POSITIVE_INFINITY);\n try {\n const pipeline = sharp(data, {\n density: SVG_RASTER_DENSITY,\n failOn: \"error\",\n limitInputPixels: maxPixels,\n sequentialRead: true,\n unlimited: false,\n }).timeout({ seconds: SVG_RASTER_TIMEOUT_SECONDS });\n const metadata = await pipeline.metadata();\n validateSvgMetadata(metadata, maxPixels, maxDimension);\n signal?.throwIfAborted();\n const { data: png, info } = await pipeline\n .png({ adaptiveFiltering: true, compressionLevel: 9 })\n .toBuffer({ resolveWithObject: true });\n signal?.throwIfAborted();\n validateRasterDimensions(info.width, info.height, maxPixels, maxDimension);\n if (png.byteLength > maxBytes) {\n throw outputImageError(\"the converted PNG exceeds the configured size limit\", \"CLAUDE_IMAGE_OUTPUT_TOO_LARGE\");\n }\n return png;\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n if (error?.code?.startsWith(\"CLAUDE_IMAGE_OUTPUT_\")) throw error;\n if (/timeout/i.test(error?.message ?? \"\")) {\n throw outputImageError(\"SVG conversion exceeded the time limit\", \"CLAUDE_IMAGE_OUTPUT_SVG_TIMEOUT\");\n }\n if (/pixel limit|dimensions? exceed|width or height/i.test(error?.message ?? \"\")) {\n throw outputImageError(\"the SVG exceeds the configured pixel dimensions\", \"CLAUDE_IMAGE_OUTPUT_SVG_DIMENSIONS\");\n }\n throw outputImageError(\"the SVG is invalid or cannot be rendered safely\", \"CLAUDE_IMAGE_OUTPUT_SVG_INVALID\");\n }\n}\n\nfunction svgRasterLimits(attachments) {\n return {\n maxBytes: validLimit(attachments?.imageLimits?.maxImageBytes, Number.POSITIVE_INFINITY),\n maxPixels: validLimit(attachments?.imageLimits?.maxImagePixels, DEFAULT_MAX_IMAGE_PIXELS),\n maxDimension: validLimit(attachments?.imageLimits?.maxImageDimension, DEFAULT_MAX_IMAGE_DIMENSION),\n };\n}\n\nfunction validateSvgMetadata(metadata, maxPixels, maxDimension) {\n if (metadata?.format !== \"svg\") {\n throw outputImageError(\"the file extension is SVG but its content is not\", \"CLAUDE_IMAGE_OUTPUT_SVG_INVALID\");\n }\n validateRasterDimensions(metadata.width, metadata.height, maxPixels, maxDimension);\n}\n\nfunction validateRasterDimensions(width, height, maxPixels, maxDimension) {\n if (!Number.isSafeInteger(width) || width <= 0 || !Number.isSafeInteger(height) || height <= 0) {\n throw outputImageError(\"the SVG does not have valid pixel dimensions\", \"CLAUDE_IMAGE_OUTPUT_SVG_INVALID\");\n }\n if (width > maxDimension || height > maxDimension || width * height > maxPixels) {\n throw outputImageError(\"the SVG exceeds the configured pixel dimensions\", \"CLAUDE_IMAGE_OUTPUT_SVG_DIMENSIONS\");\n }\n}\n\nfunction validLimit(value, fallback) {\n return Number.isSafeInteger(value) && value > 0 ? value : fallback;\n}\n\nfunction collectMatches(matches, text, expression, ...groups) {\n for (const match of text.matchAll(expression)) {\n const group = groups.find(index => match[index] !== undefined);\n if (group === undefined) continue;\n matches.push({ index: match.index + match[0].indexOf(match[group]), path: match[group] });\n }\n}\n\nfunction withoutFencedCode(text) {\n return text.replace(/(^|\\n)[ \\t]*(```|~~~)[^\\n]*\\n[\\s\\S]*?(?:\\n[ \\t]*\\2(?=\\n|$)|$)/g, match => match.replace(/[^\\n]/g, \" \"));\n}\n\nfunction maskMatches(text, ...expressions) {\n return expressions.reduce(\n (masked, expression) => masked.replace(expression, match => match.replace(/[^\\n]/g, \" \")),\n text,\n );\n}\n\nfunction normalizeMention(path) {\n return String(path ?? \"\").trim().replace(/^<|>$/g, \"\");\n}\n\nfunction isRemoteReference(path) {\n if (/^[a-z]:[\\\\/]/i.test(path)) return false;\n return /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(path);\n}\n\nfunction deduplicateAttachments(images) {\n const seen = new Set();\n return images.flatMap((attachment) => {\n const id = attachment?.attachmentId;\n if (!id || seen.has(String(id))) return [];\n seen.add(String(id));\n return [attachment];\n });\n}\n\nfunction deduplicateStructuredImages(images) {\n const seen = new Set();\n return images.flatMap((image) => {\n const key = `${image?.mediaType}:${image?.data}`;\n if (seen.has(key)) return [];\n seen.add(key);\n return [image];\n });\n}\n\nfunction applyOutputLimits(images, attachments) {\n const maxImages = attachments?.imageLimits?.maxImagesPerMessage;\n const maxBytes = attachments?.imageLimits?.maxMessageImageBytes;\n const accepted = [];\n const failures = [];\n let bytes = 0;\n for (const attachment of images) {\n if (Number.isSafeInteger(maxImages) && accepted.length >= maxImages) {\n failures.push(failure(\n attachment.name ?? String(attachment.attachmentId),\n \"CLAUDE_IMAGE_OUTPUT_COUNT_LIMIT\",\n \"the image count exceeds the configured message limit\",\n ));\n continue;\n }\n if (Number.isSafeInteger(maxBytes) && bytes + attachment.bytes > maxBytes) {\n failures.push(failure(\n attachment.name ?? String(attachment.attachmentId),\n \"CLAUDE_IMAGE_OUTPUT_MESSAGE_TOO_LARGE\",\n \"the images exceed the configured message byte limit\",\n ));\n continue;\n }\n accepted.push(attachment);\n bytes += attachment.bytes;\n }\n return { images: accepted, failures };\n}\n\nfunction decodeBase64(encoded) {\n const compact = encoded.replace(/\\s/g, \"\");\n if (!compact || !/^[A-Za-z0-9+/]+={0,2}$/.test(compact) || compact.length % 4 !== 0) {\n throw outputImageError(\"Claude returned invalid Base64 image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n const data = Buffer.from(compact, \"base64\");\n if (data.length === 0 || data.toString(\"base64\").replace(/=+$/, \"\") !== compact.replace(/=+$/, \"\")) {\n throw outputImageError(\"Claude returned invalid Base64 image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n return data;\n}\n\nfunction extensionForMediaType(mediaType) {\n if (mediaType === \"image/jpeg\") return \".jpg\";\n if (typeof mediaType !== \"string\" || !mediaType.startsWith(\"image/\")) return \"\";\n return `.${mediaType.slice(\"image/\".length)}`;\n}\n\nfunction failure(path, code, reason) {\n return { path, code, reason };\n}\n\nfunction outputFailureReason(error) {\n if (error?.code === \"ENOENT\") return \"the file does not exist\";\n if (error?.code === \"EACCES\") return \"the file cannot be read\";\n return error?.message ?? \"the image could not be imported\";\n}\n\nfunction outputImageError(message, code) {\n return Object.assign(new Error(message), { code });\n}\n","import { LlmAdapter } from \"@deepseek-ai/dsh-llm\";\nimport { sessionEvents } from \"./dsh-compat.mjs\";\nimport {\n materializeDshToolImages,\n promoteFinalAnswerImages,\n} from \"./claude-image-output.js\";\n\nexport const CLAUDE_PRESET = \"relay-claude\";\nexport const CLAUDE_PROVIDER = \"relay-claude\";\nexport const CLAUDE_ACTIVITY_EVENT = \"relay-claude/activity\";\nconst IMPORT_STATES = Object.freeze([\"reserved\", \"session-created\", \"hydrated\", \"attached\", \"committed\"]);\n\nexport class ClaudeDshAdapter extends LlmAdapter {\n constructor({ runtime, ready, linkStore = null, attachments = null, logger = console }) {\n super();\n this.runtime = runtime;\n this.ready = ready;\n this.logger = logger;\n this.linkStore = linkStore;\n this.attachments = attachments;\n this.links = new Map();\n this.settings = new Map();\n this.bindingModes = new Map();\n this.importStates = 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 this.bindingModes.set(sessionId, record.bindingMode === \"imported\" ? \"imported\" : \"native\");\n if (record.bindingMode === \"imported\" && IMPORT_STATES.includes(record.importState)) {\n this.importStates.set(sessionId, record.importState);\n }\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: model.inputModalities ?? [\"text\"],\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: info?.inputModalities ?? [\"text\"],\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 if (this.bindingModes.get(sessionId) === \"imported\") {\n throw Object.assign(\n new Error(`Relay could not resume imported Claude Session ${linked}`, { cause: error }),\n { code: \"CLAUDE_IMPORTED_SESSION_RESUME_FAILED\", claudeSessionId: linked },\n );\n }\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.bindingModes.set(sessionId, \"native\");\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 bindingMode: this.bindingModes.get(sessionId) ?? \"native\",\n ...(this.importStates.has(sessionId) ? { importState: this.importStates.get(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 bindingForClaudeSession(claudeSessionId) {\n const sessionId = this.dshSessionForClaudeSession(claudeSessionId);\n if (!sessionId) return null;\n return {\n sessionId,\n claudeSessionId,\n config: structuredClone(this.configuration(sessionId)),\n bindingMode: this.bindingModes.get(sessionId) ?? \"native\",\n importState: this.importStates.get(sessionId) ?? null,\n };\n }\n\n bindImportedSession(sessionId, claudeSessionId, config = {}) {\n const key = String(sessionId).trim();\n const source = String(claudeSessionId).trim();\n if (!key) throw new Error(\"DSH sessionId is required for an imported Claude binding\");\n if (!source) throw new Error(\"Claude sessionId is required for an imported binding\");\n const owner = this.dshSessionForClaudeSession(source);\n if (owner && owner !== key) throw new Error(`Claude Session ${source} is already bound to DSH session ${owner}`);\n const current = this.links.get(key);\n if (current && current !== source) throw new Error(`DSH session ${key} is already bound to Claude Session ${current}`);\n this.links.set(key, source);\n this.settings.set(key, { ...this.configuration(key, config.cwd), ...compact(config) });\n this.bindingModes.set(key, \"imported\");\n if (!this.importStates.has(key)) this.importStates.set(key, \"reserved\");\n this.persistLink(key);\n return this.bindingForClaudeSession(source);\n }\n\n markImportState(sessionId, state) {\n const key = String(sessionId);\n if (this.bindingModes.get(key) !== \"imported\") throw new Error(`DSH session ${key} is not an imported Claude binding`);\n const next = IMPORT_STATES.indexOf(state);\n if (next === -1) throw new Error(`unknown Claude import state ${state}`);\n const current = IMPORT_STATES.indexOf(this.importStates.get(key) ?? \"reserved\");\n if (next > current) {\n this.importStates.set(key, state);\n this.persistLink(key);\n }\n return this.bindingForClaudeSession(this.links.get(key));\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 candidate = latestUserContent(options.messages, this.attachments, options.signal);\n const content = Array.isArray(candidate) ? candidate : await candidate;\n if (content.length === 0) throw new Error(\"Relay Claude adapter received no user content\");\n const text = content.filter(block => block.type === \"text\").map(block => block.text).join(\"\\n\").trim();\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(sessionEvents(agent.session));\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 structuredImages = [];\n const structuredCallIds = new Set();\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 const result = await agent.ctx.tools.execute({\n callId,\n name,\n arguments: args,\n agent,\n signal: signal ?? options.signal ?? new AbortController().signal,\n });\n const materialized = await materializeDshToolImages(\n result,\n this.attachments,\n signal ?? options.signal,\n );\n if (materialized.attachments.length > 0) {\n structuredCallIds.add(String(callId));\n structuredImages.push(...materialized.attachments);\n }\n return materialized.result;\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, content, ...config, dshTools, executeDshTool });\n turnId = started.id;\n const state = createStreamState({ structuredImages, structuredCallIds });\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 await this.completeItem(agent, claudeSessionId, turnId, item, state, options.signal)) yield chunk;\n }\n completedTurn = params.turn;\n break;\n }\n for (const chunk of await this.projectActivity(agent, claudeSessionId, turnId, message, state, options.signal)) 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 const promotion = await promoteFinalAnswerImages({\n text: finalAssistantText(state),\n cwd: agent.session.header.cwd,\n attachments: this.attachments,\n structuredImages: state.structuredImages,\n structuredImageData: state.structuredImageData,\n signal: options.signal,\n });\n for (const chunk of imageOutputChunks(state, promotion.images, promotion.failures)) yield chunk;\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 plugins: [],\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 async projectActivity(agent, claudeSessionId, turnId, message, state, signal) {\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, signal);\n return [];\n }\n\n async completeItem(agent, claudeSessionId, turnId, item, state, signal) {\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 if (Array.isArray(item.images) && !state.structuredCallIds.has(String(item.id))) {\n for (const [index, image] of item.images.entries()) {\n state.structuredImageData.push({ ...image, id: `${item.id}-${index}` });\n }\n }\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({ structuredImages = [], structuredCallIds = new Set() } = {}) {\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 structuredImages,\n structuredImageData: [],\n structuredCallIds,\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 finalAssistantText(state) {\n return [...state.blocks.values()]\n .filter(block => block.type === \"text\" && block.text.trim())\n .sort((left, right) => right.index - left.index)[0]?.text ?? \"\";\n}\n\nfunction imageOutputChunks(state, images, failures) {\n const chunks = [];\n if (failures.length > 0) {\n const text = failures.map(({ path, reason }) => (\n `Image preview unavailable for ${JSON.stringify(path)}: ${reason}.`\n )).join(\"\\n\");\n const index = state.nextIndex++;\n chunks.push(\n { type: \"block-start\", index, blockType: \"text\" },\n { type: \"text-delta\", index, text },\n { type: \"block-end\", index, block: { type: \"text\", text } },\n );\n }\n for (const attachment of images) {\n const index = state.nextIndex++;\n chunks.push(\n { type: \"block-start\", index, blockType: \"image\" },\n { type: \"block-end\", index, block: { type: \"image\", attachment } },\n );\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 latestUserContent(messages, attachments, signal) {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role !== \"user\") continue;\n if (message.source?.kind !== \"user\" && !isRelayActivation(message.source)) continue;\n const blocks = message.content ?? [];\n const content = blocks.some(block => block?.type === \"image\")\n ? readClaudeContent(blocks, attachments, signal)\n : textContent(blocks);\n if (Array.isArray(content) && content.length === 0) continue;\n return content;\n }\n return [];\n}\n\nfunction textContent(blocks) {\n const text = blocks\n .filter(block => block?.type === \"text\")\n .map(block => String(block.text ?? \"\"))\n .join(\"\\n\")\n .trim();\n return text ? [{ type: \"text\", text }] : [];\n}\n\nasync function readClaudeContent(blocks, attachments, signal) {\n const content = [];\n for (const block of blocks) {\n if (block?.type === \"text\" && String(block.text ?? \"\").trim()) {\n content.push({ type: \"text\", text: String(block.text) });\n }\n if (block?.type === \"image\") content.push(await readClaudeImage(block, attachments, signal));\n }\n return content;\n}\n\nasync function readClaudeImage(block, attachments, signal) {\n signal?.throwIfAborted();\n const ref = block?.attachment;\n const id = String(ref?.attachmentId ?? \"unknown\");\n if (!ref || !CLAUDE_IMAGE_MEDIA_TYPES.has(ref.mediaType)) {\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: media type ${ref?.mediaType ?? \"unknown\"} is unsupported.`,\n \"CLAUDE_IMAGE_TYPE_UNSUPPORTED\",\n );\n }\n if (typeof attachments?.readImage !== \"function\") {\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: the DSH attachment service is unavailable.`,\n \"CLAUDE_IMAGE_ATTACHMENTS_UNAVAILABLE\",\n );\n }\n let stored;\n try {\n stored = await attachments.readImage(ref, signal);\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: the attachment is missing or corrupt.`,\n \"CLAUDE_IMAGE_READ_FAILED\",\n error,\n );\n }\n const mediaType = stored?.ref?.mediaType;\n if (!CLAUDE_IMAGE_MEDIA_TYPES.has(mediaType) || !(stored?.data instanceof Uint8Array)) {\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: the attachment store returned invalid image data.`,\n \"CLAUDE_IMAGE_READ_FAILED\",\n );\n }\n return { type: \"image\", mediaType, data: Buffer.from(stored.data).toString(\"base64\") };\n}\n\nfunction claudeImageError(message, code, cause) {\n return Object.assign(new Error(message, cause ? { cause } : undefined), { code });\n}\n\nconst CLAUDE_IMAGE_MEDIA_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"]);\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 const events = sessionEvents(session);\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const event = events[index];\n if (event.type === \"agent-preset/selected\") return event.data.agentPreset;\n }\n return session.header.agentPreset;\n}\n","import { createHash } from \"node:crypto\";\nimport { realpath } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nconst IMPORT_STATE_ORDER = Object.freeze([\n \"reserved\", \"session-created\", \"hydrated\", \"attached\", \"committed\",\n]);\n\nexport class ClaudeWorkspaceImporter {\n constructor({ runtime, adapter, target, logger = console }) {\n if (!runtime?.listWorkspaceSessions) throw new Error(\"Claude import requires Workspace Session inventory\");\n if (!adapter?.bindImportedSession) throw new Error(\"Claude import requires a DSH binding adapter\");\n if (![\"prepare\", \"hydrate\", \"attach\", \"finalize\"].every(method => typeof target?.[method] === \"function\")) {\n throw new Error(\"Claude import requires a complete DSH Session target\");\n }\n this.runtime = runtime;\n this.adapter = adapter;\n this.target = target;\n this.logger = logger;\n this.pendingSessions = new Map();\n }\n\n async scanWorkspace(cwd) {\n const canonicalCwd = await canonicalPath(cwd);\n const discovered = await this.runtime.listWorkspaceSessions({ cwd: canonicalCwd });\n const sessions = [];\n for (const session of discovered) {\n if (!session || typeof session.sessionId !== \"string\" || typeof session.cwd !== \"string\" || !session.cwd.trim()) continue;\n const sessionCwd = await canonicalPath(session.cwd);\n if (sessionCwd !== canonicalCwd) continue;\n sessions.push({ ...session, cwd: sessionCwd });\n }\n sessions.sort(compareInventorySessions);\n const entries = sessions.map((session) => {\n const binding = this.adapter.bindingForClaudeSession(session.sessionId);\n if (!binding) return { session, binding: null, status: \"ready\" };\n if (binding.bindingMode === \"imported\" && binding.importState !== \"committed\") {\n return { session, binding, status: \"recoverable\" };\n }\n return { session, binding, status: \"existing\" };\n });\n const existing = entries.filter(entry => entry.status === \"existing\").length;\n const recoverable = entries.filter(entry => entry.status === \"recoverable\").length;\n return {\n cwd: canonicalCwd,\n entries,\n summary: {\n found: entries.length,\n existing,\n recoverable,\n ready: entries.length - existing,\n },\n };\n }\n\n async importWorkspace(cwd, { sessionIds, onProgress } = {}) {\n const inventory = await this.scanWorkspace(cwd);\n const entries = selectedImportEntries(inventory.entries, sessionIds);\n const result = {\n found: sessionIds === undefined ? inventory.summary.found : entries.length,\n imported: 0,\n existing: 0,\n failed: 0,\n failures: [],\n };\n let completed = 0;\n\n for (const entry of entries) {\n if (entry.status === \"existing\") {\n result.existing += 1;\n } else {\n try {\n await this.importSession(entry.session, cwd, entry.binding);\n result.imported += 1;\n } catch (error) {\n result.failed += 1;\n const session = shortSessionId(entry.session.sessionId);\n const message = publicErrorMessage(error, entry.session.sessionId, session);\n result.failures.push({ session, message });\n this.logger.warn?.(`Claude import failed for ${session}: ${message}`);\n }\n }\n completed += 1;\n onProgress?.({ completed, total: entries.length, ...result });\n }\n\n return result;\n }\n\n async importSession(session, workspaceCwd, existingBinding = null) {\n const pending = this.pendingSessions.get(session.sessionId);\n if (pending) return pending;\n const operation = this.runImportSession(session, workspaceCwd, existingBinding)\n .finally(() => { this.pendingSessions.delete(session.sessionId); });\n this.pendingSessions.set(session.sessionId, operation);\n return operation;\n }\n\n async runImportSession(session, workspaceCwd, existingBinding = null) {\n const source = await this.runtime.readSession(session.sessionId, { cwd: workspaceCwd });\n if (!source || source.sessionId !== session.sessionId) {\n throw new Error(`Claude Session ${shortSessionId(session.sessionId)} is no longer available in this Workspace`);\n }\n if (await canonicalPath(source.cwd) !== await canonicalPath(workspaceCwd)) {\n throw new Error(`Claude Session ${shortSessionId(session.sessionId)} no longer belongs to this Workspace`);\n }\n let binding = existingBinding;\n if (!binding) {\n const sessionId = importedDshSessionId(session.sessionId);\n binding = this.adapter.bindImportedSession(sessionId, session.sessionId, {\n ...this.adapter.configuration(sessionId, session.cwd),\n cwd: session.cwd,\n });\n }\n if (binding.bindingMode !== \"imported\") return binding.sessionId;\n if (binding.importState === \"committed\") return binding.sessionId;\n\n let transaction = null;\n try {\n transaction = await this.target.prepare({ session, source, binding, workspaceCwd });\n binding = this.adapter.markImportState(binding.sessionId, \"session-created\");\n if (before(binding.importState, \"hydrated\")) {\n await this.target.hydrate(transaction);\n binding = this.adapter.markImportState(binding.sessionId, \"hydrated\");\n }\n if (before(binding.importState, \"attached\")) {\n await this.target.attach(transaction);\n binding = this.adapter.markImportState(binding.sessionId, \"attached\");\n }\n if (before(binding.importState, \"committed\")) {\n await this.target.finalize(transaction);\n binding = this.adapter.markImportState(binding.sessionId, \"committed\");\n }\n return binding.sessionId;\n } finally {\n if (transaction !== null) await this.target.release?.(transaction);\n }\n }\n}\n\nexport function importedDshSessionId(sessionId) {\n const digest = createHash(\"sha256\").update(String(sessionId)).digest(\"hex\").slice(0, 24);\n return `claude-import-${digest}`;\n}\n\nfunction before(current, target) {\n return IMPORT_STATE_ORDER.indexOf(current) < IMPORT_STATE_ORDER.indexOf(target);\n}\n\nfunction compareInventorySessions(left, right) {\n const updated = timestampValue(right.lastModified) - timestampValue(left.lastModified);\n return updated === 0 ? String(left.sessionId).localeCompare(String(right.sessionId)) : updated;\n}\n\nfunction timestampValue(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n const parsed = Date.parse(String(value ?? \"\"));\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction selectedImportEntries(entries, sessionIds) {\n if (sessionIds === undefined) return entries;\n if (!Array.isArray(sessionIds) || sessionIds.length === 0) {\n throw new Error(\"At least one Claude Session must be selected\");\n }\n const selected = new Set();\n for (const rawId of sessionIds) {\n if (typeof rawId !== \"string\") throw new Error(\"Selected Claude Session IDs must be non-empty strings\");\n const sessionId = rawId.trim();\n if (!sessionId) throw new Error(\"Selected Claude Session IDs must be non-empty strings\");\n if (selected.has(sessionId)) throw new Error(`Claude Session ${shortSessionId(sessionId)} was selected more than once`);\n selected.add(sessionId);\n }\n const inventory = new Map(entries.map(entry => [entry.session.sessionId, entry]));\n for (const sessionId of selected) {\n const entry = inventory.get(sessionId);\n if (!entry) throw new Error(`Claude Session ${shortSessionId(sessionId)} is not available in this Workspace`);\n if (entry.status === \"existing\") throw new Error(`Claude Session ${shortSessionId(sessionId)} is already bound to DSH`);\n }\n return entries.filter(entry => selected.has(entry.session.sessionId));\n}\n\nasync function canonicalPath(path) {\n const absolute = resolve(path);\n try {\n return await realpath(absolute);\n } catch {\n return absolute;\n }\n}\n\nfunction shortSessionId(sessionId) {\n const value = String(sessionId);\n return value.length > 12 ? `${value.slice(0, 8)}...${value.slice(-4)}` : value;\n}\n\nfunction publicErrorMessage(error, sessionId, shortId) {\n const message = error?.message ?? String(error);\n return String(message).replaceAll(String(sessionId), shortId);\n}\n","export const CLAUDE_IMPORT_PATH = \"/api/relay/claude/import\";\n","import { timingSafeEqual } from \"node:crypto\";\nimport { CLAUDE_IMPORT_PATH } from \"./claude-import-contract.mjs\";\n\nexport { CLAUDE_IMPORT_PATH } from \"./claude-import-contract.mjs\";\n\nexport function registerClaudeImportRoute(ctx, options) {\n return ctx.webServer.register({\n kind: \"exact\",\n path: CLAUDE_IMPORT_PATH,\n handler: createClaudeImportHandler({\n workspaceRegistry: ctx.workspaceRegistry,\n token: process.env.RELAY_CLAUDE_IMPORT_TOKEN,\n ...options,\n }),\n });\n}\n\nexport function createClaudeImportHandler({\n importer,\n workspaceRegistry,\n token,\n maxBodyBytes = 16_384,\n}) {\n if (!importer || !workspaceRegistry) throw new Error(\"Claude import route requires importer and Workspace registry\");\n return async (request, response) => {\n if (request.method !== \"POST\") {\n writeJson(response, 405, { error: \"method_not_allowed\" }, { allow: \"POST\" });\n return;\n }\n if (!authorized(request, token)) {\n writeJson(response, 403, { error: \"forbidden\" });\n return;\n }\n\n try {\n const body = await readJson(request, maxBodyBytes);\n const action = body?.action;\n const cwd = requiredString(body?.cwd, \"cwd\");\n if (action !== \"scan\" && action !== \"import\") {\n throw new ImportRouteError(400, \"action must be scan or import\");\n }\n const workspace = await workspaceRegistry.resolveByPath(cwd);\n if (!workspace) throw new ImportRouteError(404, \"Workspace is not registered in DSH\");\n\n if (action === \"scan\") {\n const inventory = await importer.scanWorkspace(workspace.path);\n writeJson(response, 200, {\n workspace: { title: workspace.title, path: workspace.path },\n summary: inventory.summary,\n candidates: publicCandidates(inventory.entries),\n });\n return;\n }\n\n const sessionIds = optionalSessionIds(body?.sessionIds);\n\n response.writeHead(200, {\n \"content-type\": \"application/x-ndjson; charset=utf-8\",\n \"cache-control\": \"no-store\",\n \"x-content-type-options\": \"nosniff\",\n });\n try {\n const result = await importer.importWorkspace(workspace.path, {\n sessionIds,\n onProgress: progress => writeLine(response, { type: \"progress\", ...progress }),\n });\n writeLine(response, { type: \"complete\", result });\n } catch (error) {\n writeLine(response, {\n type: \"error\",\n error: \"import_failed\",\n message: error?.message ?? String(error),\n });\n }\n response.end();\n } catch (error) {\n const status = error instanceof ImportRouteError ? error.statusCode : 500;\n writeJson(response, status, {\n error: status === 413\n ? \"payload_too_large\"\n : status === 404\n ? \"workspace_not_found\"\n : status < 500 ? \"invalid_request\" : \"import_failed\",\n message: error?.message ?? String(error),\n });\n }\n };\n}\n\nexport async function readJson(request, maxBodyBytes) {\n const contentType = String(request.headers?.[\"content-type\"] ?? \"\").split(\";\", 1)[0].trim();\n if (contentType !== \"application/json\") {\n throw new ImportRouteError(400, \"content-type must be application/json\");\n }\n const chunks = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n size += buffer.length;\n if (size > maxBodyBytes) throw new ImportRouteError(413, `request exceeds ${maxBodyBytes} bytes`);\n chunks.push(buffer);\n }\n if (size === 0) throw new ImportRouteError(400, \"request body is empty\");\n try {\n return JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n } catch {\n throw new ImportRouteError(400, \"request body is not valid JSON\");\n }\n}\n\nexport function authorized(request, token) {\n if (isLoopback(request.socket?.remoteAddress)) return true;\n if (!token) return false;\n const authorization = String(request.headers?.authorization ?? \"\");\n if (!authorization.startsWith(\"Bearer \")) return false;\n const supplied = Buffer.from(authorization.slice(7));\n const expected = Buffer.from(String(token));\n return supplied.length === expected.length && timingSafeEqual(supplied, expected);\n}\n\nfunction isLoopback(address) {\n return address === \"127.0.0.1\" || address === \"::1\" || address === \"::ffff:127.0.0.1\";\n}\n\nexport function requiredString(value, name) {\n if (typeof value !== \"string\" || !value.trim()) throw new ImportRouteError(400, `${name} is required`);\n return value.trim();\n}\n\nexport function optionalSessionIds(value) {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length === 0 || value.length > 100) {\n throw new ImportRouteError(400, \"sessionIds must contain between 1 and 100 IDs\");\n }\n const ids = value.map((sessionId) => requiredString(sessionId, \"sessionId\"));\n if (new Set(ids).size !== ids.length) throw new ImportRouteError(400, \"sessionIds must be unique\");\n return ids;\n}\n\nfunction publicCandidates(entries = []) {\n return entries\n .filter(entry => entry.status === \"ready\" || entry.status === \"recoverable\")\n .map(({ session, status }) => ({\n id: session.sessionId,\n title: publicSessionTitle(session),\n cwd: session.cwd,\n updatedAt: session.lastModified ?? session.createdAt ?? null,\n status,\n }));\n}\n\nfunction publicSessionTitle(session) {\n for (const value of [session.customTitle, session.summary, session.firstPrompt]) {\n if (typeof value !== \"string\") continue;\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized) return normalized.slice(0, 160);\n }\n return String(session.sessionId);\n}\n\nfunction writeLine(response, value) {\n response.write(`${JSON.stringify(value)}\\n`);\n}\n\nexport function writeJson(response, status, value, headers = {}) {\n response.writeHead(status, {\n \"content-type\": \"application/json; charset=utf-8\",\n \"cache-control\": \"no-store\",\n \"x-content-type-options\": \"nosniff\",\n ...headers,\n });\n response.end(`${JSON.stringify(value)}\\n`);\n}\n\nexport class ImportRouteError extends Error {\n constructor(statusCode, message) {\n super(message);\n this.statusCode = statusCode;\n }\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 && (record.bindingMode === undefined || record.bindingMode === \"native\" || record.bindingMode === \"imported\")\n && (record.importState === undefined || [\"reserved\", \"session-created\", \"hydrated\", \"attached\", \"committed\"].includes(record.importState));\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 ...(typeof question.detail === \"string\" ? { detail: question.detail } : {}),\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 ...(typeof option.description === \"string\" ? { description: option.description } : {}),\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 { toolCallId as ToolCallId } from \"./dsh-compat.mjs\";\nimport { createHash } from \"node:crypto\";\n\nimport { freezeMessage, MessageId } from \"@deepseek-ai/dsh-llm\";\nimport { SessionId } from \"@deepseek-ai/dsh-session\";\n\nimport { CLAUDE_PRESET, CLAUDE_PROVIDER } from \"./claude-adapter.js\";\n\nexport class DshClaudeImportTarget {\n constructor({ ctx, logger = console }) {\n this.ctx = ctx;\n this.logger = logger;\n this.persistedIds = null;\n }\n\n async prepare(input) {\n const sessionId = SessionId(input.binding.sessionId);\n const projection = claudeHistoryProjection(input.source.messages ?? []);\n const seed = buildClaudeHistorySeed(projection, input.source.lastModified, input.binding.config);\n const resident = this.ctx.agents.get(sessionId);\n if (resident) return { ...input, projection, seed, agent: resident, handle: null };\n\n const persistedIds = await this.loadPersistedIds();\n const agentOptions = {\n provider: CLAUDE_PROVIDER,\n model: input.binding.config.model,\n };\n const handle = persistedIds.has(sessionId)\n ? await this.ctx.agents.resume({ resumeSessionId: sessionId, agentOptions })\n : await this.ctx.agents.create({\n sessionId,\n seed,\n agentOptions,\n meta: {\n cwd: input.source.cwd,\n createdAt: importedCreatedAt(input.source, seed),\n agentPreset: CLAUDE_PRESET,\n },\n });\n return { ...input, projection, seed, agent: handle.agent, handle };\n }\n\n async hydrate(transaction) {\n applySessionTitle(this.ctx, transaction.agent.session, transaction.source);\n await this.ctx.sessions.flush(transaction.agent.session);\n (await this.loadPersistedIds()).add(SessionId(transaction.binding.sessionId));\n const projectionCache = this.ctx.get?.(\"sessionProjectionCache\");\n if (!projectionCache?.write) {\n throw new Error(\"Claude Session import requires DSH's sessionProjectionCache service\");\n }\n await projectionCache.write(transaction.agent.session);\n return projectionSummary(transaction.projection);\n }\n\n async attach(transaction) {\n const workspace = await this.ctx.workspaceRegistry.resolveByPath(transaction.workspaceCwd);\n if (!workspace) throw new Error(`No registered DSH Workspace matches ${transaction.workspaceCwd}`);\n await workspace.attachSession(SessionId(transaction.binding.sessionId));\n }\n\n async finalize(transaction) {\n await this.ctx.sessions.flush(transaction.agent.session);\n (await this.loadPersistedIds()).add(SessionId(transaction.binding.sessionId));\n }\n\n async release(transaction) {\n await transaction.handle?.dispose();\n }\n\n async loadPersistedIds() {\n if (this.persistedIds === null) {\n this.persistedIds = new Set(\n (await this.ctx.sessionPersistence.list()).map(header => SessionId(header.id)),\n );\n }\n return this.persistedIds;\n }\n}\n\nexport function buildClaudeHistorySeed(projection, updatedAt, config) {\n const time = timestampMs(updatedAt);\n const events = [];\n const append = (type, data, surfaceOp = null) => {\n events.push({\n type,\n seq: events.length,\n time,\n data,\n ...(surfaceOp === null ? {} : { surfaceOp }),\n });\n };\n\n append(\"request/header\", {\n header: {\n config: {\n provider: CLAUDE_PROVIDER,\n model: config.model,\n ...(config.effort ? { reasoningEffort: config.effort } : {}),\n },\n },\n reason: \"initial\",\n });\n\n let turn = 1;\n for (const sourceTurn of projection.turns) {\n if (sourceTurn.timeline.length === 0) continue;\n append(\"turn/start\", { turn });\n let step = 0;\n for (const entry of sourceTurn.timeline) {\n if (entry.kind === \"message\" && entry.role === \"user\") {\n append(\"user/message\", freezeMessage({\n id: MessageId(entry.id),\n role: \"user\",\n content: entry.content,\n source: { kind: \"user\" },\n }), \"append\");\n continue;\n }\n\n step += 1;\n append(\"step/start\", { turn, step });\n if (entry.kind === \"message\") {\n append(\"assistant/message\", {\n turn,\n step,\n stream: [],\n message: freezeMessage({\n id: MessageId(entry.id),\n role: \"assistant\",\n content: entry.content,\n source: { kind: \"model\", provider: CLAUDE_PROVIDER, model: \"imported\" },\n }),\n }, \"append\");\n } else {\n const callId = ToolCallId(entry.callId);\n append(\"assistant/message\", {\n turn,\n step,\n stream: [],\n message: freezeMessage({\n id: MessageId(entry.requestId),\n role: \"assistant\",\n content: [{ type: \"tool-call\", id: callId, name: entry.name, arguments: entry.arguments }],\n source: { kind: \"model\", provider: CLAUDE_PROVIDER, model: \"imported\" },\n }),\n }, \"append\");\n append(\"tool/call\", { turn, step, callId, name: entry.name, arguments: entry.arguments });\n append(\"tool/result\", {\n turn,\n step,\n message: freezeMessage({\n id: MessageId(entry.resultId),\n role: \"user\",\n content: [{\n type: \"tool-result\",\n toolCallId: callId,\n content: entry.content,\n isError: entry.isError,\n }],\n source: { kind: \"tool\", callId },\n }),\n }, \"append\");\n }\n append(\"step/end\", { turn, step });\n }\n append(\"turn/end\", { turn, reason: { kind: \"stop\" } });\n turn += 1;\n }\n return events;\n}\n\nexport function claudeHistoryProjection(messages) {\n const turns = [];\n const pendingTools = new Map();\n let current = null;\n let skippedBlocks = 0;\n\n for (const source of messages) {\n const content = sourceContentBlocks(source);\n if (source?.type === \"user\" && source.parent_tool_use_id == null) {\n const blocks = content\n .filter(block => block?.type === \"text\" && normalizedText(block.text))\n .map(block => ({ type: \"text\", text: normalizedText(block.text) }));\n if (blocks.length > 0) {\n skippedBlocks += content.filter(block => block?.type !== \"text\").length;\n current = { sourceId: source.uuid, timeline: [] };\n current.timeline.push({\n kind: \"message\",\n role: \"user\",\n id: projectionId(source, \"user\"),\n content: blocks,\n });\n turns.push(current);\n continue;\n }\n }\n if (!current) {\n skippedBlocks += content.length;\n continue;\n }\n\n if (source?.type === \"assistant\") {\n for (const [index, block] of content.entries()) {\n if (block?.type === \"thinking\" && normalizedText(block.thinking)) {\n current.timeline.push({\n kind: \"message\",\n role: \"assistant\",\n id: projectionId(source, `thinking-${index}`),\n content: [{ type: \"reasoning\", text: normalizedText(block.thinking) }],\n });\n } else if (block?.type === \"text\" && normalizedText(block.text)) {\n current.timeline.push({\n kind: \"message\",\n role: \"assistant\",\n id: projectionId(source, `text-${index}`),\n content: [{ type: \"text\", text: normalizedText(block.text) }],\n });\n } else if (block?.type === \"tool_use\" && normalizedText(block.id) && normalizedText(block.name)) {\n pendingTools.set(block.id, {\n turn: current,\n source,\n index,\n name: block.name,\n arguments: jsonText(block.input),\n });\n } else {\n skippedBlocks += 1;\n }\n }\n continue;\n }\n\n if (source?.type === \"user\") {\n for (const block of content) {\n if (block?.type !== \"tool_result\" || !pendingTools.has(block.tool_use_id)) {\n skippedBlocks += 1;\n continue;\n }\n const tool = pendingTools.get(block.tool_use_id);\n pendingTools.delete(block.tool_use_id);\n const result = toolResultContent(block.content);\n skippedBlocks += result.skipped;\n tool.turn.timeline.push({\n kind: \"activity\",\n requestId: projectionId(tool.source, `tool-${tool.index}-request`),\n resultId: projectionId(source, `tool-${tool.index}-result`),\n callId: `claude:${block.tool_use_id}`,\n name: tool.name,\n arguments: tool.arguments,\n content: result.content,\n isError: block.is_error === true,\n });\n }\n continue;\n }\n skippedBlocks += content.length;\n }\n skippedBlocks += pendingTools.size;\n return { turns, skippedBlocks };\n}\n\nfunction sourceContentBlocks(source) {\n const value = source?.message?.content;\n if (Array.isArray(value)) return value;\n if (source?.type === \"user\" && normalizedText(value)) {\n return [{ type: \"text\", text: value }];\n }\n return [];\n}\n\nfunction toolResultContent(value) {\n if (typeof value === \"string\") return {\n content: [{ type: \"text\", text: value }],\n skipped: 0,\n };\n if (!Array.isArray(value)) return { content: [], skipped: value == null ? 0 : 1 };\n const content = value\n .filter(block => block?.type === \"text\" && typeof block.text === \"string\")\n .map(block => ({ type: \"text\", text: block.text }));\n return { content, skipped: value.length - content.length };\n}\n\nfunction projectionSummary(projection) {\n return {\n projectedTurns: projection.turns.length,\n projectedMessages: projection.turns.reduce((count, turn) => count + turn.timeline.length, 0),\n skippedBlocks: projection.skippedBlocks,\n };\n}\n\nfunction projectionId(message, suffix) {\n const digest = createHash(\"sha256\")\n .update(`${message.session_id ?? \"session\"}:${message.uuid ?? \"message\"}:${suffix}`)\n .digest(\"hex\")\n .slice(0, 24);\n return `claude:${digest}`;\n}\n\nfunction importedCreatedAt(source, seed) {\n const updated = timestampMs(source.lastModified);\n if (!seed.some(event => event.type === \"user/message\")) return updated;\n return Math.min(timestampMs(source.createdAt, updated), updated);\n}\n\nfunction timestampMs(value, fallback = Date.now()) {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) return fallback;\n return Math.trunc(value < 1_000_000_000_000 ? value * 1000 : value);\n}\n\nfunction applySessionTitle(ctx, session, source) {\n const titles = ctx.get?.(\"sessionTitle\");\n if (!titles) throw new Error(\"Claude Session import requires DSH's sessionTitle service\");\n const title = summarizeTitle(source.customTitle)\n || summarizeTitle(source.summary)\n || summarizeTitle(source.firstPrompt)\n || `Claude ${String(source.sessionId).slice(0, 8)}`;\n if (titles.get(session)?.title !== title) titles.rename(session, title);\n}\n\nfunction summarizeTitle(value) {\n const text = normalizedText(value).replace(/\\s+/g, \" \");\n return text.length > 80 ? `${text.slice(0, 79)}...` : text;\n}\n\nfunction normalizedText(value) {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction jsonText(value) {\n try {\n return JSON.stringify(value ?? {}, null, 2);\n } catch {\n return \"{}\";\n }\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 { ClaudeWorkspaceImporter } from \"./claude-import.mjs\";\nimport { registerClaudeImportRoute } from \"./claude-import-route.js\";\nimport { ClaudeLinkStore } from \"./claude-link-store.js\";\nimport { handleClaudeSdkRequest } from \"./claude-tools.js\";\nimport { DshClaudeImportTarget } from \"./dsh-import-target.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\", \"dsh:web-server\"],\n },\n async activate({ capabilities, defer }) {\n installClaudeSessionEventType();\n const runtime = capabilities.require(\"relay.execution.claude.v1\");\n const linkStore = new ClaudeLinkStore(resolveLinkPath(config.claudeLinkPath));\n const adapter = new ClaudeDshAdapter({\n runtime, ready: runtime.whenReady(),\n linkStore,\n attachments: ctx.attachments, logger: ctx.logger,\n });\n const target = new DshClaudeImportTarget({ ctx, logger: ctx.logger });\n const importer = new ClaudeWorkspaceImporter({ runtime, adapter, target, logger: ctx.logger });\n defer(ctx.llm.registerAdapter([CLAUDE_PROVIDER], adapter));\n defer(registerClaudeImportRoute(ctx, {\n importer,\n token: config.claudeImportToken ?? process.env.RELAY_CLAUDE_IMPORT_TOKEN,\n }));\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 \"attachments\",\n \"llm\",\n \"sessions\",\n \"sessionPersistence\",\n \"tools\",\n \"typert\",\n \"userQuestions\",\n \"webServer\",\n \"workspaceRegistry\",\n \"sessionTitle\",\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 plugins: config.claudePlugins,\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","sessionImportUnavailable","CLAUDE_IMAGE_MEDIA_TYPES","requiredString","ToolCallId"],"sources":["../internal/plugin-sdk.mjs","../cli-client.mjs","../claude-plugin-config.mjs","../sdk-client.mjs","../session-runtime.mjs","../plugin.mjs","../dsh-compat.mjs","../claude-image-output.js","../claude-adapter.js","../claude-import.mjs","../claude-import-contract.mjs","../claude-import-route.js","../claude-link-store.js","../claude-tools.js","../dsh-import-target.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\", inputModalities: [\"text\"] },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\", inputModalities: [\"text\"] },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\", inputModalities: [\"text\"] },\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 assertSdkOnlyPluginsAbsent(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 assertSdkOnlyPluginsAbsent(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 assertSdkOnlyPluginsAbsent(message);\n if (message.content?.some(block => block?.type === \"image\")) {\n throw new Error(\"The Claude CLI backend cannot accept image input; use the Claude Agent SDK backend\");\n }\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 assertSdkOnlyPluginsAbsent(config) {\n if (Array.isArray(config.plugins) && config.plugins.length === 0) return;\n if (config.plugins !== undefined) {\n throw Object.assign(new Error(\"Local Claude plugins require the Claude Agent SDK backend\"), {\n code: \"CLAUDE_LOCAL_PLUGINS_REQUIRE_SDK\",\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","const CLAUDE_PLUGIN_KEYS = new Set([\"type\", \"path\", \"skipMcpDiscovery\"]);\n\nexport function normalizeClaudePlugins(value, label = \"Claude plugins\") {\n if (value === undefined) return undefined;\n if (!Array.isArray(value)) throw new TypeError(`${label} must be an array`);\n\n return value.map((plugin, index) => {\n const entryLabel = `${label}[${index}]`;\n if (!plugin || typeof plugin !== \"object\" || Array.isArray(plugin)) {\n throw new TypeError(`${entryLabel} must be an object`);\n }\n for (const key of Object.keys(plugin)) {\n if (!CLAUDE_PLUGIN_KEYS.has(key)) throw new TypeError(`${entryLabel}.${key} is not supported`);\n }\n if (plugin.type !== \"local\") throw new TypeError(`${entryLabel}.type must be \"local\"`);\n if (typeof plugin.path !== \"string\" || !plugin.path.trim()) {\n throw new TypeError(`${entryLabel}.path must be a non-empty string`);\n }\n if (plugin.skipMcpDiscovery !== undefined && typeof plugin.skipMcpDiscovery !== \"boolean\") {\n throw new TypeError(`${entryLabel}.skipMcpDiscovery must be a boolean`);\n }\n return {\n type: \"local\",\n path: plugin.path,\n ...(plugin.skipMcpDiscovery === undefined ? {} : { skipMcpDiscovery: plugin.skipMcpDiscovery }),\n };\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport { EventEmitter } from \"node:events\";\nimport { z } from \"zod\";\n\nimport { normalizeClaudePlugins } from \"./claude-plugin-config.mjs\";\n\nconst DEFAULT_MODELS = [\n { id: \"sonnet\", displayName: \"Claude Sonnet\", isDefault: true, defaultReasoningEffort: \"medium\", supportedReasoningEfforts: reasoningEfforts(), inputModalities: [\"text\", \"image\"] },\n { id: \"opus\", displayName: \"Claude Opus\", isDefault: false, defaultReasoningEffort: \"high\", supportedReasoningEfforts: reasoningEfforts(), inputModalities: [\"text\", \"image\"] },\n { id: \"haiku\", displayName: \"Claude Haiku\", isDefault: false, defaultReasoningEffort: \"low\", supportedReasoningEfforts: reasoningEfforts(), inputModalities: [\"text\", \"image\"] },\n];\n\nconst CLAUDE_SEARCH_TOOLS = [\"Glob\", \"Grep\"];\nconst SENSITIVE_ENV_NAME = /(?:^|_)(?:API_?KEY|ACCESS_?KEY|SECRET(?:_ACCESS_?KEY)?|TOKEN|PASSWORD|PASSWD|CREDENTIALS?|PRIVATE_?KEY)(?:$|_)/i;\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 supportsSessionImport() {\n return typeof this.sdk?.listSessions === \"function\"\n && typeof this.sdk?.getSessionInfo === \"function\"\n && typeof this.sdk?.getSessionMessages === \"function\";\n }\n\n async listWorkspaceSessions({ cwd }) {\n if (!this.supportsSessionImport()) {\n throw sessionImportUnavailable();\n }\n return this.sdk.listSessions({\n dir: cwd,\n includeWorktrees: false,\n includeProgrammatic: false,\n });\n }\n\n async readSession(sessionId, { cwd }) {\n if (!this.supportsSessionImport()) {\n throw sessionImportUnavailable();\n }\n const info = await this.sdk.getSessionInfo(sessionId, { dir: cwd });\n if (!info) return null;\n const messages = await this.sdk.getSessionMessages(sessionId, { dir: cwd });\n return { ...info, messages };\n }\n\n async createSession(config = {}) {\n config = normalizedSessionConfig(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 config = normalizedSessionConfig(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 if (message.plugins !== undefined) {\n throw new TypeError(\"Claude plugins must be configured when the Session is created or resumed\");\n }\n const session = this.sessions.get(sessionId) ?? (await this.resumeSession(sessionId, message));\n const turnId = randomUUID();\n const abortController = new AbortController();\n const options = await this.queryOptions(session, message, abortController);\n const query = this.sdk.query({ prompt: claudePrompt(message), 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 async queryOptions(session, message, abortController) {\n const plugins = normalizeClaudePlugins(session.config?.plugins);\n const cwd = message.cwd ?? session.cwd ?? process.cwd();\n const settingSources = message.settingSources ?? session.config?.settingSources ?? [\"user\", \"project\", \"local\"];\n const dshOptions = dshMcpOptions(\n this.sdk,\n message.dshTools,\n message.executeDshTool,\n abortController.signal,\n );\n const redactions = await sensitiveEnvironmentRedactions(this.sdk, cwd, settingSources);\n return {\n abortController,\n 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,\n systemPrompt: message.systemPrompt ?? session.config?.systemPrompt,\n pathToClaudeCodeExecutable: this.pathToClaudeCodeExecutable,\n includePartialMessages: true,\n ...(plugins === undefined ? {} : { plugins }),\n ...(session.created ? { resume: session.id } : { sessionId: session.id }),\n canUseTool: (toolName, input, options) => this.requestPermission(session.id, toolName, input, options),\n ...(redactions.length === 0 ? {} : { hooks: sensitiveOutputHooks(redactions) }),\n ...dshOptions,\n allowedTools: [...CLAUDE_SEARCH_TOOLS, ...(dshOptions.allowedTools ?? [])],\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 = {\n currentMessageId: null,\n text: new Map(),\n reasoning: new Map(),\n activities: new Set(),\n tools: new Map(),\n };\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\nasync function sensitiveEnvironmentRedactions(sdk, cwd, settingSources) {\n const environment = { ...process.env };\n const explicitSensitiveNames = new Set();\n if (typeof sdk.resolveSettings === \"function\") {\n const resolved = await sdk.resolveSettings({ cwd, settingSources });\n Object.assign(environment, resolved?.effective?.env ?? {});\n for (const entry of resolved?.effective?.sandbox?.credentials?.envVars ?? []) {\n if (typeof entry?.name === \"string\") explicitSensitiveNames.add(entry.name);\n }\n }\n\n const byValue = new Map();\n for (const [name, value] of Object.entries(environment)) {\n if (!SENSITIVE_ENV_NAME.test(name) && !explicitSensitiveNames.has(name)) continue;\n if (typeof value !== \"string\" || value.length === 0) continue;\n const current = byValue.get(value);\n if (current === undefined || name < current) byValue.set(value, name);\n }\n return [...byValue]\n .map(([value, name]) => ({ value, replacement: `[REDACTED_ENV:${name}]` }))\n .sort((left, right) => right.value.length - left.value.length || left.replacement.localeCompare(right.replacement));\n}\n\nfunction sensitiveOutputHooks(redactions) {\n return {\n PostToolUse: [{\n hooks: [async (input) => {\n const redacted = redactSensitiveToolOutput(input.tool_response, redactions);\n if (!redacted.changed) return { continue: true };\n return {\n continue: true,\n hookSpecificOutput: {\n hookEventName: \"PostToolUse\",\n updatedToolOutput: redacted.value,\n },\n };\n }],\n }],\n };\n}\n\nfunction redactSensitiveToolOutput(value, redactions) {\n if (typeof value === \"string\") {\n let redacted = value;\n for (const entry of redactions) redacted = redacted.replaceAll(entry.value, entry.replacement);\n return { value: redacted, changed: redacted !== value };\n }\n if (Array.isArray(value)) {\n let changed = false;\n const redacted = value.map((item) => {\n const result = redactSensitiveToolOutput(item, redactions);\n changed ||= result.changed;\n return result.value;\n });\n return { value: changed ? redacted : value, changed };\n }\n if (!value || typeof value !== \"object\") return { value, changed: false };\n\n let changed = false;\n const entries = Object.entries(value).map(([key, item]) => {\n const result = redactSensitiveToolOutput(item, redactions);\n changed ||= result.changed;\n return [key, result.value];\n });\n return { value: changed ? Object.fromEntries(entries) : value, changed };\n}\n\nfunction normalizedSessionConfig(config) {\n const plugins = normalizeClaudePlugins(config.plugins);\n const normalized = {\n ...config,\n ...(plugins === undefined ? {} : { plugins }),\n };\n if (plugins === undefined) delete normalized.plugins;\n return normalized;\n}\n\nfunction claudePrompt(message) {\n const content = Array.isArray(message.content) ? message.content : [];\n if (!content.some(block => block?.type === \"image\")) return message.text;\n const sdkContent = content.map((block) => {\n if (block?.type === \"text\") return { type: \"text\", text: String(block.text ?? \"\") };\n if (block?.type === \"image\" && CLAUDE_IMAGE_MEDIA_TYPES.has(block.mediaType) && typeof block.data === \"string\") {\n return {\n type: \"image\",\n source: { type: \"base64\", media_type: block.mediaType, data: block.data },\n };\n }\n throw Object.assign(new Error(\"Claude SDK received invalid multimodal message content.\"), {\n code: \"CLAUDE_IMAGE_INPUT_INVALID\",\n });\n });\n return oneUserMessage(sdkContent);\n}\n\nasync function* oneUserMessage(content) {\n yield {\n type: \"user\",\n message: { role: \"user\", content },\n parent_tool_use_id: null,\n };\n}\n\nconst CLAUDE_IMAGE_MEDIA_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"]);\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 state.tools.set(String(block.id), { name: block.name, input: block.input });\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 const tool = state.tools.get(String(block.tool_use_id)) ?? {};\n const images = structuredImagesFrom(block.content, message.tool_use_result);\n events.push({\n method: \"item/completed\",\n params: {\n item: {\n type: \"toolUse\",\n id: block.tool_use_id,\n name: tool.name,\n input: tool.input,\n output: redactStructuredImages(block.content),\n ...(images.length > 0 ? { images } : {}),\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 structuredImagesFrom(...values) {\n const images = [];\n const seenObjects = new Set();\n const seenImages = new Set();\n const visit = (value) => {\n if (!value || typeof value !== \"object\" || seenObjects.has(value)) return;\n seenObjects.add(value);\n if (value.type === \"image\") {\n const mediaType = value.mediaType ?? value.mimeType ?? value.source?.media_type ?? value.file?.type;\n const data = value.data ?? value.source?.data ?? value.file?.base64;\n if (CLAUDE_IMAGE_MEDIA_TYPES.has(mediaType) && typeof data === \"string\") {\n const key = `${mediaType}:${data}`;\n if (!seenImages.has(key)) {\n seenImages.add(key);\n images.push({ mediaType, data, name: value.name ?? value.file?.name });\n }\n }\n }\n if (Array.isArray(value)) {\n for (const item of value) visit(item);\n return;\n }\n for (const item of Object.values(value)) visit(item);\n };\n for (const value of values) visit(value);\n return images;\n}\n\nfunction redactStructuredImages(value) {\n if (Array.isArray(value)) return value.map(redactStructuredImages);\n if (!value || typeof value !== \"object\") return value;\n if (value.type === \"image\") {\n return {\n type: \"image\",\n mediaType: value.mediaType ?? value.mimeType ?? value.source?.media_type ?? value.file?.type ?? \"unknown\",\n omitted: true,\n };\n }\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, redactStructuredImages(item)]));\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 sessionImportUnavailable() {\n return Object.assign(\n new Error(\"The active Claude Agent SDK does not support native Session discovery and history import\"),\n { code: \"CLAUDE_SESSION_IMPORT_UNAVAILABLE\" },\n );\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\";\nimport { normalizeClaudePlugins } from \"./claude-plugin-config.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 plugins = undefined,\n } = {}) {\n super();\n this.client = client;\n this.cwd = cwd;\n this.plugins = normalizeClaudePlugins(plugins);\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 plugins = this.plugins,\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 normalizedPlugins = normalizeClaudePlugins(plugins);\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 ...(normalizedPlugins === undefined ? {} : { plugins: normalizedPlugins }),\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 plugins: normalizedPlugins,\n });\n if (!session.ephemeral) this.selectedSessionId = session.id;\n this.emitChange();\n return publicSession(session);\n }\n\n supportsSessionImport() {\n return this.client.supportsSessionImport?.() === true;\n }\n\n async listWorkspaceSessions({ cwd }) {\n if (!this.supportsSessionImport() || typeof this.client.listWorkspaceSessions !== \"function\") {\n throw sessionImportUnavailable();\n }\n return structuredClone(await this.client.listWorkspaceSessions({ cwd }));\n }\n\n async readSession(sessionId, { cwd }) {\n if (!this.supportsSessionImport() || typeof this.client.readSession !== \"function\") {\n throw sessionImportUnavailable();\n }\n const source = await this.client.readSession(sessionId, { cwd });\n return source === null ? null : structuredClone(source);\n }\n\n async resumeSession(sessionId, defaults = {}) {\n if (!sessionId?.trim()) throw new Error(\"sessionId is required\");\n const normalizedPlugins = normalizeClaudePlugins(defaults.plugins === undefined ? this.plugins : defaults.plugins);\n const resumeConfig = {\n cwd: defaults.cwd ?? this.cwd,\n ...defaults,\n ...(normalizedPlugins === undefined ? {} : { plugins: normalizedPlugins }),\n };\n if (normalizedPlugins === undefined) delete resumeConfig.plugins;\n const resumed = await this.client.resumeSession?.(sessionId, resumeConfig);\n const session = this.upsertSession(resumed ?? {}, { id: sessionId, ...resumeConfig });\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, message = {}) {\n const { text, content, model, effort, sandbox, approvalPolicy, cwd } = message;\n const session = this.requireSession(sessionId);\n const hasContent = Array.isArray(content) && content.some(block =>\n block?.type === \"image\" || (block?.type === \"text\" && String(block.text ?? \"\").trim()),\n );\n if (!text?.trim() && !hasContent) throw new Error(\"message content is required\");\n if (message.plugins !== undefined) {\n throw new TypeError(\"Claude plugins must be configured when the Session is created or resumed\");\n }\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, { ...message, text, content, ...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 plugins: defaults.plugins ?? input.plugins ?? existing.plugins,\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\nfunction sessionImportUnavailable() {\n return Object.assign(\n new Error(\"Native Claude Session import requires the Claude Agent SDK backend\"),\n { code: \"CLAUDE_SESSION_IMPORT_UNAVAILABLE\" },\n );\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({\n client,\n cwd: config.cwd ?? process.cwd(),\n plugins: config.plugins,\n });\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 supportsSessionImport: () => runtime.supportsSessionImport(),\n listWorkspaceSessions: runtime.listWorkspaceSessions.bind(runtime),\n readSession: runtime.readSession.bind(runtime),\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 supportsSessionImport(...args) { return this.active.supportsSessionImport?.(...args) === true; }\n listWorkspaceSessions(...args) { return this.active.listWorkspaceSessions?.(...args); }\n readSession(...args) { return this.active.readSession?.(...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 * as llm from '@deepseek-ai/dsh-llm';\n\n// Keep namespace access: a named import fails before this adapter can run on\n// the other official DSH generation. Both constructors have the same contract.\nexport function toolCallId(value) {\n const create = Reflect.get(llm, 'ToolCallId') ?? Reflect.get(llm, 'CallId');\n if (typeof create !== 'function') throw new Error('DSH does not provide a tool call ID constructor');\n return create(value);\n}\n\nexport function sessionEvents(session, from = 0) {\n if (!Number.isSafeInteger(from) || from < 0) throw new RangeError('session event offset must be a non-negative integer');\n const snapshot = Reflect.get(session, 'snapshotEvents');\n if (typeof snapshot === 'function') {\n return from === 0 ? Reflect.apply(snapshot, session, []) : Reflect.apply(snapshot, session, [from]);\n }\n const events = Reflect.get(session, 'events');\n if (!Array.isArray(events)) throw new TypeError('DSH Session exposes neither snapshotEvents() nor events');\n return from === 0 ? events : events.slice(from);\n}\n","import { basename, extname, isAbsolute, relative, resolve, sep } from \"node:path\";\nimport { open, realpath, stat } from \"node:fs/promises\";\nimport sharp from \"sharp\";\n\nconst MEDIA_TYPES = new Map([\n [\".gif\", \"image/gif\"],\n [\".jpeg\", \"image/jpeg\"],\n [\".jpg\", \"image/jpeg\"],\n [\".png\", \"image/png\"],\n [\".webp\", \"image/webp\"],\n]);\n\nconst IMAGE_SUFFIX = String.raw`\\.(?:png|jpe?g|webp|gif|bmp|svg|tiff?|avif|heic)`;\nconst IMAGE_PATH_END = new RegExp(`${IMAGE_SUFFIX}$`, \"i\");\nconst BARE_PATH_BOUNDARY = String.raw`[\\s(\\[{:*=~(【《「『“‘,。;:!?、]`;\nconst BARE_PATH_END_CHAR = String.raw`[\\s)\\]}>,;:!?*~,。;:!?、)】》」』”’]`;\nconst BARE_PATH_END = String.raw`(?:${BARE_PATH_END_CHAR}|\\.(?=$|${BARE_PATH_END_CHAR}))`;\nconst BARE_PATH_CONTENT = String.raw`[^\\s<>\"'“”‘’「」『』*~()\\[\\]{}=:,;!?,。;:!?、()【】《》]+?`;\nconst MARKDOWN_PATH = new RegExp(String.raw`!?\\[[^\\]\\r\\n]*\\]\\(\\s*(?:<([^>]+)>|([^\\s)]+))(?:\\s+[\"'][^\"']*[\"'])?\\s*\\)`, \"gi\");\nconst INLINE_CODE_PATH = new RegExp(\"`([^`\\\\r\\\\n]+\" + IMAGE_SUFFIX + \")`\", \"gi\");\nconst QUOTED_PATH = new RegExp(\"[\\\"']([^\\\"'\\\\r\\\\n]+\" + IMAGE_SUFFIX + \")[\\\"']\", \"gi\");\nconst URI_REFERENCE = /(?!(?:[a-z]:[\\\\/]))(?:[a-z][a-z0-9+.-]*:\\/\\/|data:|file:|blob:|mailto:|\\/\\/)[^\\s<>\"'“”‘’]+/gi;\nconst SVG_EXTENSION = \".svg\";\nconst SVG_SOURCE_MAX_BYTES = 2 * 1024 * 1024;\nconst SVG_RASTER_DENSITY = 72;\nconst SVG_RASTER_TIMEOUT_SECONDS = 3;\nconst DEFAULT_MAX_IMAGE_PIXELS = 64_000_000;\nconst DEFAULT_MAX_IMAGE_DIMENSION = 8192;\n\nexport function extractFinalAnswerImagePaths(text) {\n const visible = withoutFencedCode(String(text ?? \"\"));\n const matches = [];\n collectMatches(matches, visible, MARKDOWN_PATH, 1, 2);\n collectMatches(matches, visible, INLINE_CODE_PATH, 1);\n collectMatches(matches, visible, QUOTED_PATH, 1);\n const bareVisible = maskMatches(visible, MARKDOWN_PATH, INLINE_CODE_PATH, QUOTED_PATH, URI_REFERENCE);\n collectMatches(\n matches,\n bareVisible,\n new RegExp(String.raw`(?:^|${BARE_PATH_BOUNDARY})((?:[a-z]:[\\\\/])?${BARE_PATH_CONTENT}${IMAGE_SUFFIX})(?=$|${BARE_PATH_END})`, \"gi\"),\n 1,\n );\n matches.sort((left, right) => left.index - right.index);\n const seen = new Set();\n return matches.flatMap(({ path }) => {\n const normalized = normalizeMention(path);\n if (!normalized || !IMAGE_PATH_END.test(normalized) || isRemoteReference(normalized) || seen.has(normalized)) return [];\n seen.add(normalized);\n return [normalized];\n });\n}\n\nexport async function promoteFinalAnswerImages({\n text,\n cwd,\n attachments,\n structuredImages = [],\n structuredImageData = [],\n signal,\n svgRasterizer = rasterizeSvgToPng,\n}) {\n const paths = extractFinalAnswerImagePaths(text);\n if (paths.length === 0) {\n const images = [...structuredImages];\n const failures = [];\n for (const [index, image] of deduplicateStructuredImages(structuredImageData).entries()) {\n try {\n images.push(await saveStructuredImage({ ...image, id: image.id ?? `structured-${index}` }, attachments, signal));\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n failures.push(failure(\n image.name ?? `Claude structured image ${index + 1}`,\n error.code ?? \"CLAUDE_IMAGE_OUTPUT_IMPORT_FAILED\",\n error.message ?? \"the structured image could not be imported\",\n ));\n }\n }\n const admitted = applyOutputLimits(deduplicateAttachments(images), attachments);\n return { paths, images: admitted.images, failures: [...failures, ...admitted.failures] };\n }\n if (typeof attachments?.saveImage !== \"function\") {\n return {\n paths,\n images: [],\n failures: paths.map(path => failure(path, \"CLAUDE_IMAGE_OUTPUT_ATTACHMENTS_UNAVAILABLE\", \"the DSH attachment service is unavailable\")),\n };\n }\n\n const images = [];\n const failures = [];\n for (const path of paths) {\n signal?.throwIfAborted();\n try {\n images.push(await snapshotWorkspaceImage(path, cwd, attachments, signal, svgRasterizer));\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n failures.push(failure(path, error.code ?? \"CLAUDE_IMAGE_OUTPUT_IMPORT_FAILED\", outputFailureReason(error)));\n }\n }\n const admitted = applyOutputLimits(deduplicateAttachments(images), attachments);\n return { paths, images: admitted.images, failures: [...failures, ...admitted.failures] };\n}\n\nexport async function saveStructuredImage(image, attachments, signal) {\n signal?.throwIfAborted();\n if (typeof attachments?.saveImage !== \"function\") {\n throw outputImageError(\"the DSH attachment service is unavailable\", \"CLAUDE_IMAGE_OUTPUT_ATTACHMENTS_UNAVAILABLE\");\n }\n if (!MEDIA_TYPES.has(extensionForMediaType(image?.mediaType)) || typeof image?.data !== \"string\") {\n throw outputImageError(\"Claude returned invalid structured image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n const data = decodeBase64(image.data);\n return attachments.saveImage({\n data,\n mediaType: image.mediaType,\n name: image.name ?? `claude-${image.id ?? \"image\"}.${extensionForMediaType(image.mediaType).slice(1)}`,\n });\n}\n\nexport async function materializeDshToolImages(result, attachments, signal) {\n const content = [];\n const attachmentsFound = [];\n for (const block of result?.content ?? []) {\n if (block?.type !== \"image\" || !block.attachment) {\n content.push(block);\n continue;\n }\n signal?.throwIfAborted();\n if (typeof attachments?.readImage !== \"function\") {\n throw outputImageError(\"the DSH attachment service is unavailable\", \"CLAUDE_IMAGE_OUTPUT_ATTACHMENTS_UNAVAILABLE\");\n }\n const stored = await attachments.readImage(block.attachment, signal);\n if (!(stored?.data instanceof Uint8Array) || !stored?.ref?.mediaType) {\n throw outputImageError(\"the DSH attachment store returned invalid image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n attachmentsFound.push(stored.ref);\n content.push({\n type: \"image\",\n data: Buffer.from(stored.data).toString(\"base64\"),\n mediaType: stored.ref.mediaType,\n });\n }\n return {\n result: { ...result, content },\n attachments: attachmentsFound,\n };\n}\n\nasync function snapshotWorkspaceImage(path, cwd, attachments, signal, svgRasterizer) {\n const root = await realpath(resolve(cwd ?? process.cwd()));\n const target = await realpath(resolve(root, path));\n const targetRelative = relative(root, target);\n if (targetRelative === \"..\" || targetRelative.startsWith(`..${sep}`) || isAbsolute(targetRelative)) {\n throw outputImageError(\"the path is outside the session workspace\", \"CLAUDE_IMAGE_OUTPUT_OUTSIDE_WORKSPACE\");\n }\n const extension = extname(target).toLowerCase();\n const mediaType = MEDIA_TYPES.get(extension);\n const isSvg = extension === SVG_EXTENSION;\n if (!mediaType && !isSvg) {\n throw outputImageError(\"the image type is unsupported\", \"CLAUDE_IMAGE_OUTPUT_TYPE_UNSUPPORTED\");\n }\n const handle = await open(target, \"r\");\n let data;\n try {\n const before = await handle.stat();\n if (!before.isFile()) throw outputImageError(\"the path is not a file\", \"CLAUDE_IMAGE_OUTPUT_NOT_FILE\");\n const configuredMaxBytes = attachments.imageLimits?.maxImageBytes;\n const maxBytes = isSvg\n ? Math.min(validLimit(configuredMaxBytes, Number.POSITIVE_INFINITY), SVG_SOURCE_MAX_BYTES)\n : configuredMaxBytes;\n if (Number.isSafeInteger(maxBytes) && before.size > maxBytes) {\n throw outputImageError(\"the image exceeds the configured size limit\", \"CLAUDE_IMAGE_OUTPUT_TOO_LARGE\");\n }\n signal?.throwIfAborted();\n data = await handle.readFile();\n signal?.throwIfAborted();\n const [after, pathAfter, realPathAfter] = await Promise.all([\n handle.stat(),\n stat(target),\n realpath(target),\n ]);\n if (\n before.size !== after.size\n || before.mtimeMs !== after.mtimeMs\n || before.ctimeMs !== after.ctimeMs\n || before.ino !== after.ino\n || after.ino !== pathAfter.ino\n || after.dev !== pathAfter.dev\n || data.byteLength !== after.size\n || realPathAfter !== target\n ) {\n throw outputImageError(\"the image changed while Claude was finishing its answer\", \"CLAUDE_IMAGE_OUTPUT_CHANGED_DURING_READ\");\n }\n } finally {\n await handle.close();\n }\n if (isSvg) {\n const rendered = await svgRasterizer(data, svgRasterLimits(attachments), signal);\n return attachments.saveImage({\n data: rendered,\n mediaType: \"image/png\",\n name: `${basename(target, extension)}.png`,\n });\n }\n return attachments.saveImage({ data, mediaType, name: basename(target) });\n}\n\nexport async function rasterizeSvgToPng(data, limits = {}, signal) {\n signal?.throwIfAborted();\n const maxPixels = validLimit(limits.maxPixels, DEFAULT_MAX_IMAGE_PIXELS);\n const maxDimension = validLimit(limits.maxDimension, DEFAULT_MAX_IMAGE_DIMENSION);\n const maxBytes = validLimit(limits.maxBytes, Number.POSITIVE_INFINITY);\n try {\n const pipeline = sharp(data, {\n density: SVG_RASTER_DENSITY,\n failOn: \"error\",\n limitInputPixels: maxPixels,\n sequentialRead: true,\n unlimited: false,\n }).timeout({ seconds: SVG_RASTER_TIMEOUT_SECONDS });\n const metadata = await pipeline.metadata();\n validateSvgMetadata(metadata, maxPixels, maxDimension);\n signal?.throwIfAborted();\n const { data: png, info } = await pipeline\n .png({ adaptiveFiltering: true, compressionLevel: 9 })\n .toBuffer({ resolveWithObject: true });\n signal?.throwIfAborted();\n validateRasterDimensions(info.width, info.height, maxPixels, maxDimension);\n if (png.byteLength > maxBytes) {\n throw outputImageError(\"the converted PNG exceeds the configured size limit\", \"CLAUDE_IMAGE_OUTPUT_TOO_LARGE\");\n }\n return png;\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n if (error?.code?.startsWith(\"CLAUDE_IMAGE_OUTPUT_\")) throw error;\n if (/timeout/i.test(error?.message ?? \"\")) {\n throw outputImageError(\"SVG conversion exceeded the time limit\", \"CLAUDE_IMAGE_OUTPUT_SVG_TIMEOUT\");\n }\n if (/pixel limit|dimensions? exceed|width or height/i.test(error?.message ?? \"\")) {\n throw outputImageError(\"the SVG exceeds the configured pixel dimensions\", \"CLAUDE_IMAGE_OUTPUT_SVG_DIMENSIONS\");\n }\n throw outputImageError(\"the SVG is invalid or cannot be rendered safely\", \"CLAUDE_IMAGE_OUTPUT_SVG_INVALID\");\n }\n}\n\nfunction svgRasterLimits(attachments) {\n return {\n maxBytes: validLimit(attachments?.imageLimits?.maxImageBytes, Number.POSITIVE_INFINITY),\n maxPixels: validLimit(attachments?.imageLimits?.maxImagePixels, DEFAULT_MAX_IMAGE_PIXELS),\n maxDimension: validLimit(attachments?.imageLimits?.maxImageDimension, DEFAULT_MAX_IMAGE_DIMENSION),\n };\n}\n\nfunction validateSvgMetadata(metadata, maxPixels, maxDimension) {\n if (metadata?.format !== \"svg\") {\n throw outputImageError(\"the file extension is SVG but its content is not\", \"CLAUDE_IMAGE_OUTPUT_SVG_INVALID\");\n }\n validateRasterDimensions(metadata.width, metadata.height, maxPixels, maxDimension);\n}\n\nfunction validateRasterDimensions(width, height, maxPixels, maxDimension) {\n if (!Number.isSafeInteger(width) || width <= 0 || !Number.isSafeInteger(height) || height <= 0) {\n throw outputImageError(\"the SVG does not have valid pixel dimensions\", \"CLAUDE_IMAGE_OUTPUT_SVG_INVALID\");\n }\n if (width > maxDimension || height > maxDimension || width * height > maxPixels) {\n throw outputImageError(\"the SVG exceeds the configured pixel dimensions\", \"CLAUDE_IMAGE_OUTPUT_SVG_DIMENSIONS\");\n }\n}\n\nfunction validLimit(value, fallback) {\n return Number.isSafeInteger(value) && value > 0 ? value : fallback;\n}\n\nfunction collectMatches(matches, text, expression, ...groups) {\n for (const match of text.matchAll(expression)) {\n const group = groups.find(index => match[index] !== undefined);\n if (group === undefined) continue;\n matches.push({ index: match.index + match[0].indexOf(match[group]), path: match[group] });\n }\n}\n\nfunction withoutFencedCode(text) {\n return text.replace(/(^|\\n)[ \\t]*(```|~~~)[^\\n]*\\n[\\s\\S]*?(?:\\n[ \\t]*\\2(?=\\n|$)|$)/g, match => match.replace(/[^\\n]/g, \" \"));\n}\n\nfunction maskMatches(text, ...expressions) {\n return expressions.reduce(\n (masked, expression) => masked.replace(expression, match => match.replace(/[^\\n]/g, \" \")),\n text,\n );\n}\n\nfunction normalizeMention(path) {\n return String(path ?? \"\").trim().replace(/^<|>$/g, \"\");\n}\n\nfunction isRemoteReference(path) {\n if (/^[a-z]:[\\\\/]/i.test(path)) return false;\n return /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(path);\n}\n\nfunction deduplicateAttachments(images) {\n const seen = new Set();\n return images.flatMap((attachment) => {\n const id = attachment?.attachmentId;\n if (!id || seen.has(String(id))) return [];\n seen.add(String(id));\n return [attachment];\n });\n}\n\nfunction deduplicateStructuredImages(images) {\n const seen = new Set();\n return images.flatMap((image) => {\n const key = `${image?.mediaType}:${image?.data}`;\n if (seen.has(key)) return [];\n seen.add(key);\n return [image];\n });\n}\n\nfunction applyOutputLimits(images, attachments) {\n const maxImages = attachments?.imageLimits?.maxImagesPerMessage;\n const maxBytes = attachments?.imageLimits?.maxMessageImageBytes;\n const accepted = [];\n const failures = [];\n let bytes = 0;\n for (const attachment of images) {\n if (Number.isSafeInteger(maxImages) && accepted.length >= maxImages) {\n failures.push(failure(\n attachment.name ?? String(attachment.attachmentId),\n \"CLAUDE_IMAGE_OUTPUT_COUNT_LIMIT\",\n \"the image count exceeds the configured message limit\",\n ));\n continue;\n }\n if (Number.isSafeInteger(maxBytes) && bytes + attachment.bytes > maxBytes) {\n failures.push(failure(\n attachment.name ?? String(attachment.attachmentId),\n \"CLAUDE_IMAGE_OUTPUT_MESSAGE_TOO_LARGE\",\n \"the images exceed the configured message byte limit\",\n ));\n continue;\n }\n accepted.push(attachment);\n bytes += attachment.bytes;\n }\n return { images: accepted, failures };\n}\n\nfunction decodeBase64(encoded) {\n const compact = encoded.replace(/\\s/g, \"\");\n if (!compact || !/^[A-Za-z0-9+/]+={0,2}$/.test(compact) || compact.length % 4 !== 0) {\n throw outputImageError(\"Claude returned invalid Base64 image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n const data = Buffer.from(compact, \"base64\");\n if (data.length === 0 || data.toString(\"base64\").replace(/=+$/, \"\") !== compact.replace(/=+$/, \"\")) {\n throw outputImageError(\"Claude returned invalid Base64 image data\", \"CLAUDE_IMAGE_OUTPUT_INVALID\");\n }\n return data;\n}\n\nfunction extensionForMediaType(mediaType) {\n if (mediaType === \"image/jpeg\") return \".jpg\";\n if (typeof mediaType !== \"string\" || !mediaType.startsWith(\"image/\")) return \"\";\n return `.${mediaType.slice(\"image/\".length)}`;\n}\n\nfunction failure(path, code, reason) {\n return { path, code, reason };\n}\n\nfunction outputFailureReason(error) {\n if (error?.code === \"ENOENT\") return \"the file does not exist\";\n if (error?.code === \"EACCES\") return \"the file cannot be read\";\n return error?.message ?? \"the image could not be imported\";\n}\n\nfunction outputImageError(message, code) {\n return Object.assign(new Error(message), { code });\n}\n","import { LlmAdapter } from \"@deepseek-ai/dsh-llm\";\nimport { sessionEvents } from \"./dsh-compat.mjs\";\nimport {\n materializeDshToolImages,\n promoteFinalAnswerImages,\n} from \"./claude-image-output.js\";\n\nexport const CLAUDE_PRESET = \"relay-claude\";\nexport const CLAUDE_PROVIDER = \"relay-claude\";\nexport const CLAUDE_ACTIVITY_EVENT = \"relay-claude/activity\";\nconst IMPORT_STATES = Object.freeze([\"reserved\", \"session-created\", \"hydrated\", \"attached\", \"committed\"]);\n\nexport class ClaudeDshAdapter extends LlmAdapter {\n constructor({ runtime, ready, linkStore = null, attachments = null, logger = console }) {\n super();\n this.runtime = runtime;\n this.ready = ready;\n this.logger = logger;\n this.linkStore = linkStore;\n this.attachments = attachments;\n this.links = new Map();\n this.settings = new Map();\n this.bindingModes = new Map();\n this.importStates = 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 this.bindingModes.set(sessionId, record.bindingMode === \"imported\" ? \"imported\" : \"native\");\n if (record.bindingMode === \"imported\" && IMPORT_STATES.includes(record.importState)) {\n this.importStates.set(sessionId, record.importState);\n }\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: model.inputModalities ?? [\"text\"],\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: info?.inputModalities ?? [\"text\"],\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 if (this.bindingModes.get(sessionId) === \"imported\") {\n throw Object.assign(\n new Error(`Relay could not resume imported Claude Session ${linked}`, { cause: error }),\n { code: \"CLAUDE_IMPORTED_SESSION_RESUME_FAILED\", claudeSessionId: linked },\n );\n }\n throw Object.assign(\n new Error(`Relay could not resume Claude Session ${linked}; the original binding was kept for retry`, { cause: error }),\n { code: \"CLAUDE_SESSION_RESUME_FAILED\", claudeSessionId: linked },\n );\n }\n }\n const created = await this.runtime.createSession(settings);\n this.links.set(sessionId, created.id);\n this.bindingModes.set(sessionId, \"native\");\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 bindingMode: this.bindingModes.get(sessionId) ?? \"native\",\n ...(this.importStates.has(sessionId) ? { importState: this.importStates.get(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 bindingForClaudeSession(claudeSessionId) {\n const sessionId = this.dshSessionForClaudeSession(claudeSessionId);\n if (!sessionId) return null;\n return {\n sessionId,\n claudeSessionId,\n config: structuredClone(this.configuration(sessionId)),\n bindingMode: this.bindingModes.get(sessionId) ?? \"native\",\n importState: this.importStates.get(sessionId) ?? null,\n };\n }\n\n bindImportedSession(sessionId, claudeSessionId, config = {}) {\n const key = String(sessionId).trim();\n const source = String(claudeSessionId).trim();\n if (!key) throw new Error(\"DSH sessionId is required for an imported Claude binding\");\n if (!source) throw new Error(\"Claude sessionId is required for an imported binding\");\n const owner = this.dshSessionForClaudeSession(source);\n if (owner && owner !== key) throw new Error(`Claude Session ${source} is already bound to DSH session ${owner}`);\n const current = this.links.get(key);\n if (current && current !== source) throw new Error(`DSH session ${key} is already bound to Claude Session ${current}`);\n this.links.set(key, source);\n this.settings.set(key, { ...this.configuration(key, config.cwd), ...compact(config) });\n this.bindingModes.set(key, \"imported\");\n if (!this.importStates.has(key)) this.importStates.set(key, \"reserved\");\n this.persistLink(key);\n return this.bindingForClaudeSession(source);\n }\n\n markImportState(sessionId, state) {\n const key = String(sessionId);\n if (this.bindingModes.get(key) !== \"imported\") throw new Error(`DSH session ${key} is not an imported Claude binding`);\n const next = IMPORT_STATES.indexOf(state);\n if (next === -1) throw new Error(`unknown Claude import state ${state}`);\n const current = IMPORT_STATES.indexOf(this.importStates.get(key) ?? \"reserved\");\n if (next > current) {\n this.importStates.set(key, state);\n this.persistLink(key);\n }\n return this.bindingForClaudeSession(this.links.get(key));\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 candidate = latestUserContent(options.messages, this.attachments, options.signal);\n const content = Array.isArray(candidate) ? candidate : await candidate;\n if (content.length === 0) throw new Error(\"Relay Claude adapter received no user content\");\n const text = content.filter(block => block.type === \"text\").map(block => block.text).join(\"\\n\").trim();\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(sessionEvents(agent.session));\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 structuredImages = [];\n const structuredCallIds = new Set();\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 const result = await agent.ctx.tools.execute({\n callId,\n name,\n arguments: args,\n agent,\n signal: signal ?? options.signal ?? new AbortController().signal,\n });\n const materialized = await materializeDshToolImages(\n result,\n this.attachments,\n signal ?? options.signal,\n );\n if (materialized.attachments.length > 0) {\n structuredCallIds.add(String(callId));\n structuredImages.push(...materialized.attachments);\n }\n return materialized.result;\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, content, ...config, dshTools, executeDshTool });\n turnId = started.id;\n const state = createStreamState({ structuredImages, structuredCallIds });\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 await this.completeItem(agent, claudeSessionId, turnId, item, state, options.signal)) yield chunk;\n }\n completedTurn = params.turn;\n break;\n }\n for (const chunk of await this.projectActivity(agent, claudeSessionId, turnId, message, state, options.signal)) 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 const promotion = await promoteFinalAnswerImages({\n text: finalAssistantText(state),\n cwd: agent.session.header.cwd,\n attachments: this.attachments,\n structuredImages: state.structuredImages,\n structuredImageData: state.structuredImageData,\n signal: options.signal,\n });\n for (const chunk of imageOutputChunks(state, promotion.images, promotion.failures)) yield chunk;\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 plugins: [],\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 async projectActivity(agent, claudeSessionId, turnId, message, state, signal) {\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, signal);\n return [];\n }\n\n async completeItem(agent, claudeSessionId, turnId, item, state, signal) {\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 if (Array.isArray(item.images) && !state.structuredCallIds.has(String(item.id))) {\n for (const [index, image] of item.images.entries()) {\n state.structuredImageData.push({ ...image, id: `${item.id}-${index}` });\n }\n }\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({ structuredImages = [], structuredCallIds = new Set() } = {}) {\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 structuredImages,\n structuredImageData: [],\n structuredCallIds,\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 finalAssistantText(state) {\n return [...state.blocks.values()]\n .filter(block => block.type === \"text\" && block.text.trim())\n .sort((left, right) => right.index - left.index)[0]?.text ?? \"\";\n}\n\nfunction imageOutputChunks(state, images, failures) {\n const chunks = [];\n if (failures.length > 0) {\n const text = failures.map(({ path, reason }) => (\n `Image preview unavailable for ${JSON.stringify(path)}: ${reason}.`\n )).join(\"\\n\");\n const index = state.nextIndex++;\n chunks.push(\n { type: \"block-start\", index, blockType: \"text\" },\n { type: \"text-delta\", index, text },\n { type: \"block-end\", index, block: { type: \"text\", text } },\n );\n }\n for (const attachment of images) {\n const index = state.nextIndex++;\n chunks.push(\n { type: \"block-start\", index, blockType: \"image\" },\n { type: \"block-end\", index, block: { type: \"image\", attachment } },\n );\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 latestUserContent(messages, attachments, signal) {\n for (let index = messages.length - 1; index >= 0; index -= 1) {\n const message = messages[index];\n if (message?.role !== \"user\") continue;\n if (message.source?.kind !== \"user\" && !isRelayActivation(message.source)) continue;\n const blocks = message.content ?? [];\n const content = blocks.some(block => block?.type === \"image\")\n ? readClaudeContent(blocks, attachments, signal)\n : textContent(blocks);\n if (Array.isArray(content) && content.length === 0) continue;\n return content;\n }\n return [];\n}\n\nfunction textContent(blocks) {\n const text = blocks\n .filter(block => block?.type === \"text\")\n .map(block => String(block.text ?? \"\"))\n .join(\"\\n\")\n .trim();\n return text ? [{ type: \"text\", text }] : [];\n}\n\nasync function readClaudeContent(blocks, attachments, signal) {\n const content = [];\n for (const block of blocks) {\n if (block?.type === \"text\" && String(block.text ?? \"\").trim()) {\n content.push({ type: \"text\", text: String(block.text) });\n }\n if (block?.type === \"image\") content.push(await readClaudeImage(block, attachments, signal));\n }\n return content;\n}\n\nasync function readClaudeImage(block, attachments, signal) {\n signal?.throwIfAborted();\n const ref = block?.attachment;\n const id = String(ref?.attachmentId ?? \"unknown\");\n if (!ref || !CLAUDE_IMAGE_MEDIA_TYPES.has(ref.mediaType)) {\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: media type ${ref?.mediaType ?? \"unknown\"} is unsupported.`,\n \"CLAUDE_IMAGE_TYPE_UNSUPPORTED\",\n );\n }\n if (typeof attachments?.readImage !== \"function\") {\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: the DSH attachment service is unavailable.`,\n \"CLAUDE_IMAGE_ATTACHMENTS_UNAVAILABLE\",\n );\n }\n let stored;\n try {\n stored = await attachments.readImage(ref, signal);\n } catch (error) {\n if (signal?.aborted) throw signal.reason ?? error;\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: the attachment is missing or corrupt.`,\n \"CLAUDE_IMAGE_READ_FAILED\",\n error,\n );\n }\n const mediaType = stored?.ref?.mediaType;\n if (!CLAUDE_IMAGE_MEDIA_TYPES.has(mediaType) || !(stored?.data instanceof Uint8Array)) {\n throw claudeImageError(\n `Claude cannot read image attachment ${id}: the attachment store returned invalid image data.`,\n \"CLAUDE_IMAGE_READ_FAILED\",\n );\n }\n return { type: \"image\", mediaType, data: Buffer.from(stored.data).toString(\"base64\") };\n}\n\nfunction claudeImageError(message, code, cause) {\n return Object.assign(new Error(message, cause ? { cause } : undefined), { code });\n}\n\nconst CLAUDE_IMAGE_MEDIA_TYPES = new Set([\"image/png\", \"image/jpeg\", \"image/gif\", \"image/webp\"]);\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 const events = sessionEvents(session);\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const event = events[index];\n if (event.type === \"agent-preset/selected\") return event.data.agentPreset;\n }\n return session.header.agentPreset;\n}\n","import { createHash } from \"node:crypto\";\nimport { realpath } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\n\nconst IMPORT_STATE_ORDER = Object.freeze([\n \"reserved\", \"session-created\", \"hydrated\", \"attached\", \"committed\",\n]);\n\nexport class ClaudeWorkspaceImporter {\n constructor({ runtime, adapter, target, logger = console }) {\n if (!runtime?.listWorkspaceSessions) throw new Error(\"Claude import requires Workspace Session inventory\");\n if (!adapter?.bindImportedSession) throw new Error(\"Claude import requires a DSH binding adapter\");\n if (![\"prepare\", \"hydrate\", \"attach\", \"finalize\"].every(method => typeof target?.[method] === \"function\")) {\n throw new Error(\"Claude import requires a complete DSH Session target\");\n }\n this.runtime = runtime;\n this.adapter = adapter;\n this.target = target;\n this.logger = logger;\n this.pendingSessions = new Map();\n }\n\n async scanWorkspace(cwd) {\n const canonicalCwd = await canonicalPath(cwd);\n const discovered = await this.runtime.listWorkspaceSessions({ cwd: canonicalCwd });\n const sessions = [];\n for (const session of discovered) {\n if (!session || typeof session.sessionId !== \"string\" || typeof session.cwd !== \"string\" || !session.cwd.trim()) continue;\n const sessionCwd = await canonicalPath(session.cwd);\n if (sessionCwd !== canonicalCwd) continue;\n sessions.push({ ...session, cwd: sessionCwd });\n }\n sessions.sort(compareInventorySessions);\n const entries = sessions.map((session) => {\n const binding = this.adapter.bindingForClaudeSession(session.sessionId);\n if (!binding) return { session, binding: null, status: \"ready\" };\n if (binding.bindingMode === \"imported\" && binding.importState !== \"committed\") {\n return { session, binding, status: \"recoverable\" };\n }\n return { session, binding, status: \"existing\" };\n });\n const existing = entries.filter(entry => entry.status === \"existing\").length;\n const recoverable = entries.filter(entry => entry.status === \"recoverable\").length;\n return {\n cwd: canonicalCwd,\n entries,\n summary: {\n found: entries.length,\n existing,\n recoverable,\n ready: entries.length - existing,\n },\n };\n }\n\n async importWorkspace(cwd, { sessionIds, onProgress } = {}) {\n const inventory = await this.scanWorkspace(cwd);\n const entries = selectedImportEntries(inventory.entries, sessionIds);\n const result = {\n found: sessionIds === undefined ? inventory.summary.found : entries.length,\n imported: 0,\n existing: 0,\n failed: 0,\n failures: [],\n };\n let completed = 0;\n\n for (const entry of entries) {\n if (entry.status === \"existing\") {\n result.existing += 1;\n } else {\n try {\n await this.importSession(entry.session, cwd, entry.binding);\n result.imported += 1;\n } catch (error) {\n result.failed += 1;\n const session = shortSessionId(entry.session.sessionId);\n const message = publicErrorMessage(error, entry.session.sessionId, session);\n result.failures.push({ session, message });\n this.logger.warn?.(`Claude import failed for ${session}: ${message}`);\n }\n }\n completed += 1;\n onProgress?.({ completed, total: entries.length, ...result });\n }\n\n return result;\n }\n\n async importSession(session, workspaceCwd, existingBinding = null) {\n const pending = this.pendingSessions.get(session.sessionId);\n if (pending) return pending;\n const operation = this.runImportSession(session, workspaceCwd, existingBinding)\n .finally(() => { this.pendingSessions.delete(session.sessionId); });\n this.pendingSessions.set(session.sessionId, operation);\n return operation;\n }\n\n async runImportSession(session, workspaceCwd, existingBinding = null) {\n const source = await this.runtime.readSession(session.sessionId, { cwd: workspaceCwd });\n if (!source || source.sessionId !== session.sessionId) {\n throw new Error(`Claude Session ${shortSessionId(session.sessionId)} is no longer available in this Workspace`);\n }\n if (await canonicalPath(source.cwd) !== await canonicalPath(workspaceCwd)) {\n throw new Error(`Claude Session ${shortSessionId(session.sessionId)} no longer belongs to this Workspace`);\n }\n let binding = existingBinding;\n if (!binding) {\n const sessionId = importedDshSessionId(session.sessionId);\n binding = this.adapter.bindImportedSession(sessionId, session.sessionId, {\n ...this.adapter.configuration(sessionId, session.cwd),\n cwd: session.cwd,\n });\n }\n if (binding.bindingMode !== \"imported\") return binding.sessionId;\n if (binding.importState === \"committed\") return binding.sessionId;\n\n let transaction = null;\n try {\n transaction = await this.target.prepare({ session, source, binding, workspaceCwd });\n binding = this.adapter.markImportState(binding.sessionId, \"session-created\");\n if (before(binding.importState, \"hydrated\")) {\n await this.target.hydrate(transaction);\n binding = this.adapter.markImportState(binding.sessionId, \"hydrated\");\n }\n if (before(binding.importState, \"attached\")) {\n await this.target.attach(transaction);\n binding = this.adapter.markImportState(binding.sessionId, \"attached\");\n }\n if (before(binding.importState, \"committed\")) {\n await this.target.finalize(transaction);\n binding = this.adapter.markImportState(binding.sessionId, \"committed\");\n }\n return binding.sessionId;\n } finally {\n if (transaction !== null) await this.target.release?.(transaction);\n }\n }\n}\n\nexport function importedDshSessionId(sessionId) {\n const digest = createHash(\"sha256\").update(String(sessionId)).digest(\"hex\").slice(0, 24);\n return `claude-import-${digest}`;\n}\n\nfunction before(current, target) {\n return IMPORT_STATE_ORDER.indexOf(current) < IMPORT_STATE_ORDER.indexOf(target);\n}\n\nfunction compareInventorySessions(left, right) {\n const updated = timestampValue(right.lastModified) - timestampValue(left.lastModified);\n return updated === 0 ? String(left.sessionId).localeCompare(String(right.sessionId)) : updated;\n}\n\nfunction timestampValue(value) {\n if (typeof value === \"number\" && Number.isFinite(value)) return value;\n const parsed = Date.parse(String(value ?? \"\"));\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nfunction selectedImportEntries(entries, sessionIds) {\n if (sessionIds === undefined) return entries;\n if (!Array.isArray(sessionIds) || sessionIds.length === 0) {\n throw new Error(\"At least one Claude Session must be selected\");\n }\n const selected = new Set();\n for (const rawId of sessionIds) {\n if (typeof rawId !== \"string\") throw new Error(\"Selected Claude Session IDs must be non-empty strings\");\n const sessionId = rawId.trim();\n if (!sessionId) throw new Error(\"Selected Claude Session IDs must be non-empty strings\");\n if (selected.has(sessionId)) throw new Error(`Claude Session ${shortSessionId(sessionId)} was selected more than once`);\n selected.add(sessionId);\n }\n const inventory = new Map(entries.map(entry => [entry.session.sessionId, entry]));\n for (const sessionId of selected) {\n const entry = inventory.get(sessionId);\n if (!entry) throw new Error(`Claude Session ${shortSessionId(sessionId)} is not available in this Workspace`);\n if (entry.status === \"existing\") throw new Error(`Claude Session ${shortSessionId(sessionId)} is already bound to DSH`);\n }\n return entries.filter(entry => selected.has(entry.session.sessionId));\n}\n\nasync function canonicalPath(path) {\n const absolute = resolve(path);\n try {\n return await realpath(absolute);\n } catch {\n return absolute;\n }\n}\n\nfunction shortSessionId(sessionId) {\n const value = String(sessionId);\n return value.length > 12 ? `${value.slice(0, 8)}...${value.slice(-4)}` : value;\n}\n\nfunction publicErrorMessage(error, sessionId, shortId) {\n const message = error?.message ?? String(error);\n return String(message).replaceAll(String(sessionId), shortId);\n}\n","export const CLAUDE_IMPORT_PATH = \"/api/relay/claude/import\";\n","import { timingSafeEqual } from \"node:crypto\";\nimport { CLAUDE_IMPORT_PATH } from \"./claude-import-contract.mjs\";\n\nexport { CLAUDE_IMPORT_PATH } from \"./claude-import-contract.mjs\";\n\nexport function registerClaudeImportRoute(ctx, options) {\n return ctx.webServer.register({\n kind: \"exact\",\n path: CLAUDE_IMPORT_PATH,\n handler: createClaudeImportHandler({\n workspaceRegistry: ctx.workspaceRegistry,\n token: process.env.RELAY_CLAUDE_IMPORT_TOKEN,\n ...options,\n }),\n });\n}\n\nexport function createClaudeImportHandler({\n importer,\n workspaceRegistry,\n token,\n maxBodyBytes = 16_384,\n}) {\n if (!importer || !workspaceRegistry) throw new Error(\"Claude import route requires importer and Workspace registry\");\n return async (request, response) => {\n if (request.method !== \"POST\") {\n writeJson(response, 405, { error: \"method_not_allowed\" }, { allow: \"POST\" });\n return;\n }\n if (!authorized(request, token)) {\n writeJson(response, 403, { error: \"forbidden\" });\n return;\n }\n\n try {\n const body = await readJson(request, maxBodyBytes);\n const action = body?.action;\n const cwd = requiredString(body?.cwd, \"cwd\");\n if (action !== \"scan\" && action !== \"import\") {\n throw new ImportRouteError(400, \"action must be scan or import\");\n }\n const workspace = await workspaceRegistry.resolveByPath(cwd);\n if (!workspace) throw new ImportRouteError(404, \"Workspace is not registered in DSH\");\n\n if (action === \"scan\") {\n const inventory = await importer.scanWorkspace(workspace.path);\n writeJson(response, 200, {\n workspace: { title: workspace.title, path: workspace.path },\n summary: inventory.summary,\n candidates: publicCandidates(inventory.entries),\n });\n return;\n }\n\n const sessionIds = optionalSessionIds(body?.sessionIds);\n\n response.writeHead(200, {\n \"content-type\": \"application/x-ndjson; charset=utf-8\",\n \"cache-control\": \"no-store\",\n \"x-content-type-options\": \"nosniff\",\n });\n try {\n const result = await importer.importWorkspace(workspace.path, {\n sessionIds,\n onProgress: progress => writeLine(response, { type: \"progress\", ...progress }),\n });\n writeLine(response, { type: \"complete\", result });\n } catch (error) {\n writeLine(response, {\n type: \"error\",\n error: \"import_failed\",\n message: error?.message ?? String(error),\n });\n }\n response.end();\n } catch (error) {\n const status = error instanceof ImportRouteError ? error.statusCode : 500;\n writeJson(response, status, {\n error: status === 413\n ? \"payload_too_large\"\n : status === 404\n ? \"workspace_not_found\"\n : status < 500 ? \"invalid_request\" : \"import_failed\",\n message: error?.message ?? String(error),\n });\n }\n };\n}\n\nexport async function readJson(request, maxBodyBytes) {\n const contentType = String(request.headers?.[\"content-type\"] ?? \"\").split(\";\", 1)[0].trim();\n if (contentType !== \"application/json\") {\n throw new ImportRouteError(400, \"content-type must be application/json\");\n }\n const chunks = [];\n let size = 0;\n for await (const chunk of request) {\n const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n size += buffer.length;\n if (size > maxBodyBytes) throw new ImportRouteError(413, `request exceeds ${maxBodyBytes} bytes`);\n chunks.push(buffer);\n }\n if (size === 0) throw new ImportRouteError(400, \"request body is empty\");\n try {\n return JSON.parse(Buffer.concat(chunks).toString(\"utf8\"));\n } catch {\n throw new ImportRouteError(400, \"request body is not valid JSON\");\n }\n}\n\nexport function authorized(request, token) {\n if (isLoopback(request.socket?.remoteAddress)) return true;\n if (!token) return false;\n const authorization = String(request.headers?.authorization ?? \"\");\n if (!authorization.startsWith(\"Bearer \")) return false;\n const supplied = Buffer.from(authorization.slice(7));\n const expected = Buffer.from(String(token));\n return supplied.length === expected.length && timingSafeEqual(supplied, expected);\n}\n\nfunction isLoopback(address) {\n return address === \"127.0.0.1\" || address === \"::1\" || address === \"::ffff:127.0.0.1\";\n}\n\nexport function requiredString(value, name) {\n if (typeof value !== \"string\" || !value.trim()) throw new ImportRouteError(400, `${name} is required`);\n return value.trim();\n}\n\nexport function optionalSessionIds(value) {\n if (value === undefined) return undefined;\n if (!Array.isArray(value) || value.length === 0 || value.length > 100) {\n throw new ImportRouteError(400, \"sessionIds must contain between 1 and 100 IDs\");\n }\n const ids = value.map((sessionId) => requiredString(sessionId, \"sessionId\"));\n if (new Set(ids).size !== ids.length) throw new ImportRouteError(400, \"sessionIds must be unique\");\n return ids;\n}\n\nfunction publicCandidates(entries = []) {\n return entries\n .filter(entry => entry.status === \"ready\" || entry.status === \"recoverable\")\n .map(({ session, status }) => ({\n id: session.sessionId,\n title: publicSessionTitle(session),\n cwd: session.cwd,\n updatedAt: session.lastModified ?? session.createdAt ?? null,\n status,\n }));\n}\n\nfunction publicSessionTitle(session) {\n for (const value of [session.customTitle, session.summary, session.firstPrompt]) {\n if (typeof value !== \"string\") continue;\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized) return normalized.slice(0, 160);\n }\n return String(session.sessionId);\n}\n\nfunction writeLine(response, value) {\n response.write(`${JSON.stringify(value)}\\n`);\n}\n\nexport function writeJson(response, status, value, headers = {}) {\n response.writeHead(status, {\n \"content-type\": \"application/json; charset=utf-8\",\n \"cache-control\": \"no-store\",\n \"x-content-type-options\": \"nosniff\",\n ...headers,\n });\n response.end(`${JSON.stringify(value)}\\n`);\n}\n\nexport class ImportRouteError extends Error {\n constructor(statusCode, message) {\n super(message);\n this.statusCode = statusCode;\n }\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 && (record.bindingMode === undefined || record.bindingMode === \"native\" || record.bindingMode === \"imported\")\n && (record.importState === undefined || [\"reserved\", \"session-created\", \"hydrated\", \"attached\", \"committed\"].includes(record.importState));\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 ...(typeof question.detail === \"string\" ? { detail: question.detail } : {}),\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 ...(typeof option.description === \"string\" ? { description: option.description } : {}),\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 { toolCallId as ToolCallId } from \"./dsh-compat.mjs\";\nimport { createHash } from \"node:crypto\";\n\nimport { freezeMessage, MessageId } from \"@deepseek-ai/dsh-llm\";\nimport { SessionId } from \"@deepseek-ai/dsh-session\";\n\nimport { CLAUDE_PRESET, CLAUDE_PROVIDER } from \"./claude-adapter.js\";\n\nexport class DshClaudeImportTarget {\n constructor({ ctx, logger = console }) {\n this.ctx = ctx;\n this.logger = logger;\n this.persistedIds = null;\n }\n\n async prepare(input) {\n const sessionId = SessionId(input.binding.sessionId);\n const projection = claudeHistoryProjection(input.source.messages ?? []);\n const seed = buildClaudeHistorySeed(projection, input.source.lastModified, input.binding.config);\n const resident = this.ctx.agents.get(sessionId);\n if (resident) return { ...input, projection, seed, agent: resident, handle: null };\n\n const persistedIds = await this.loadPersistedIds();\n const agentOptions = {\n provider: CLAUDE_PROVIDER,\n model: input.binding.config.model,\n };\n const handle = persistedIds.has(sessionId)\n ? await this.ctx.agents.resume({ resumeSessionId: sessionId, agentOptions })\n : await this.ctx.agents.create({\n sessionId,\n seed,\n agentOptions,\n meta: {\n cwd: input.source.cwd,\n createdAt: importedCreatedAt(input.source, seed),\n agentPreset: CLAUDE_PRESET,\n },\n });\n return { ...input, projection, seed, agent: handle.agent, handle };\n }\n\n async hydrate(transaction) {\n applySessionTitle(this.ctx, transaction.agent.session, transaction.source);\n await this.ctx.sessions.flush(transaction.agent.session);\n (await this.loadPersistedIds()).add(SessionId(transaction.binding.sessionId));\n const projectionCache = this.ctx.get?.(\"sessionProjectionCache\");\n if (!projectionCache?.write) {\n throw new Error(\"Claude Session import requires DSH's sessionProjectionCache service\");\n }\n await projectionCache.write(transaction.agent.session);\n return projectionSummary(transaction.projection);\n }\n\n async attach(transaction) {\n const workspace = await this.ctx.workspaceRegistry.resolveByPath(transaction.workspaceCwd);\n if (!workspace) throw new Error(`No registered DSH Workspace matches ${transaction.workspaceCwd}`);\n await workspace.attachSession(SessionId(transaction.binding.sessionId));\n }\n\n async finalize(transaction) {\n await this.ctx.sessions.flush(transaction.agent.session);\n (await this.loadPersistedIds()).add(SessionId(transaction.binding.sessionId));\n }\n\n async release(transaction) {\n await transaction.handle?.dispose();\n }\n\n async loadPersistedIds() {\n if (this.persistedIds === null) {\n this.persistedIds = new Set(\n (await this.ctx.sessionPersistence.list()).map(header => SessionId(header.id)),\n );\n }\n return this.persistedIds;\n }\n}\n\nexport function buildClaudeHistorySeed(projection, updatedAt, config) {\n const time = timestampMs(updatedAt);\n const events = [];\n const append = (type, data, surfaceOp = null) => {\n events.push({\n type,\n seq: events.length,\n time,\n data,\n ...(surfaceOp === null ? {} : { surfaceOp }),\n });\n };\n\n append(\"request/header\", {\n header: {\n config: {\n provider: CLAUDE_PROVIDER,\n model: config.model,\n ...(config.effort ? { reasoningEffort: config.effort } : {}),\n },\n },\n reason: \"initial\",\n });\n\n let turn = 1;\n for (const sourceTurn of projection.turns) {\n if (sourceTurn.timeline.length === 0) continue;\n append(\"turn/start\", { turn });\n let step = 0;\n for (const entry of sourceTurn.timeline) {\n if (entry.kind === \"message\" && entry.role === \"user\") {\n append(\"user/message\", freezeMessage({\n id: MessageId(entry.id),\n role: \"user\",\n content: entry.content,\n source: { kind: \"user\" },\n }), \"append\");\n continue;\n }\n\n step += 1;\n append(\"step/start\", { turn, step });\n if (entry.kind === \"message\") {\n append(\"assistant/message\", {\n turn,\n step,\n stream: [],\n message: freezeMessage({\n id: MessageId(entry.id),\n role: \"assistant\",\n content: entry.content,\n source: { kind: \"model\", provider: CLAUDE_PROVIDER, model: \"imported\" },\n }),\n }, \"append\");\n } else {\n const callId = ToolCallId(entry.callId);\n append(\"assistant/message\", {\n turn,\n step,\n stream: [],\n message: freezeMessage({\n id: MessageId(entry.requestId),\n role: \"assistant\",\n content: [{ type: \"tool-call\", id: callId, name: entry.name, arguments: entry.arguments }],\n source: { kind: \"model\", provider: CLAUDE_PROVIDER, model: \"imported\" },\n }),\n }, \"append\");\n append(\"tool/call\", { turn, step, callId, name: entry.name, arguments: entry.arguments });\n append(\"tool/result\", {\n turn,\n step,\n message: freezeMessage({\n id: MessageId(entry.resultId),\n role: \"user\",\n content: [{\n type: \"tool-result\",\n toolCallId: callId,\n content: entry.content,\n isError: entry.isError,\n }],\n source: { kind: \"tool\", callId },\n }),\n }, \"append\");\n }\n append(\"step/end\", { turn, step });\n }\n append(\"turn/end\", { turn, reason: { kind: \"stop\" } });\n turn += 1;\n }\n return events;\n}\n\nexport function claudeHistoryProjection(messages) {\n const turns = [];\n const pendingTools = new Map();\n let current = null;\n let skippedBlocks = 0;\n\n for (const source of messages) {\n const content = sourceContentBlocks(source);\n if (source?.type === \"user\" && source.parent_tool_use_id == null) {\n const blocks = content\n .filter(block => block?.type === \"text\" && normalizedText(block.text))\n .map(block => ({ type: \"text\", text: normalizedText(block.text) }));\n if (blocks.length > 0) {\n skippedBlocks += content.filter(block => block?.type !== \"text\").length;\n current = { sourceId: source.uuid, timeline: [] };\n current.timeline.push({\n kind: \"message\",\n role: \"user\",\n id: projectionId(source, \"user\"),\n content: blocks,\n });\n turns.push(current);\n continue;\n }\n }\n if (!current) {\n skippedBlocks += content.length;\n continue;\n }\n\n if (source?.type === \"assistant\") {\n for (const [index, block] of content.entries()) {\n if (block?.type === \"thinking\" && normalizedText(block.thinking)) {\n current.timeline.push({\n kind: \"message\",\n role: \"assistant\",\n id: projectionId(source, `thinking-${index}`),\n content: [{ type: \"reasoning\", text: normalizedText(block.thinking) }],\n });\n } else if (block?.type === \"text\" && normalizedText(block.text)) {\n current.timeline.push({\n kind: \"message\",\n role: \"assistant\",\n id: projectionId(source, `text-${index}`),\n content: [{ type: \"text\", text: normalizedText(block.text) }],\n });\n } else if (block?.type === \"tool_use\" && normalizedText(block.id) && normalizedText(block.name)) {\n pendingTools.set(block.id, {\n turn: current,\n source,\n index,\n name: block.name,\n arguments: jsonText(block.input),\n });\n } else {\n skippedBlocks += 1;\n }\n }\n continue;\n }\n\n if (source?.type === \"user\") {\n for (const block of content) {\n if (block?.type !== \"tool_result\" || !pendingTools.has(block.tool_use_id)) {\n skippedBlocks += 1;\n continue;\n }\n const tool = pendingTools.get(block.tool_use_id);\n pendingTools.delete(block.tool_use_id);\n const result = toolResultContent(block.content);\n skippedBlocks += result.skipped;\n tool.turn.timeline.push({\n kind: \"activity\",\n requestId: projectionId(tool.source, `tool-${tool.index}-request`),\n resultId: projectionId(source, `tool-${tool.index}-result`),\n callId: `claude:${block.tool_use_id}`,\n name: tool.name,\n arguments: tool.arguments,\n content: result.content,\n isError: block.is_error === true,\n });\n }\n continue;\n }\n skippedBlocks += content.length;\n }\n skippedBlocks += pendingTools.size;\n return { turns, skippedBlocks };\n}\n\nfunction sourceContentBlocks(source) {\n const value = source?.message?.content;\n if (Array.isArray(value)) return value;\n if (source?.type === \"user\" && normalizedText(value)) {\n return [{ type: \"text\", text: value }];\n }\n return [];\n}\n\nfunction toolResultContent(value) {\n if (typeof value === \"string\") return {\n content: [{ type: \"text\", text: value }],\n skipped: 0,\n };\n if (!Array.isArray(value)) return { content: [], skipped: value == null ? 0 : 1 };\n const content = value\n .filter(block => block?.type === \"text\" && typeof block.text === \"string\")\n .map(block => ({ type: \"text\", text: block.text }));\n return { content, skipped: value.length - content.length };\n}\n\nfunction projectionSummary(projection) {\n return {\n projectedTurns: projection.turns.length,\n projectedMessages: projection.turns.reduce((count, turn) => count + turn.timeline.length, 0),\n skippedBlocks: projection.skippedBlocks,\n };\n}\n\nfunction projectionId(message, suffix) {\n const digest = createHash(\"sha256\")\n .update(`${message.session_id ?? \"session\"}:${message.uuid ?? \"message\"}:${suffix}`)\n .digest(\"hex\")\n .slice(0, 24);\n return `claude:${digest}`;\n}\n\nfunction importedCreatedAt(source, seed) {\n const updated = timestampMs(source.lastModified);\n if (!seed.some(event => event.type === \"user/message\")) return updated;\n return Math.min(timestampMs(source.createdAt, updated), updated);\n}\n\nfunction timestampMs(value, fallback = Date.now()) {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value < 0) return fallback;\n return Math.trunc(value < 1_000_000_000_000 ? value * 1000 : value);\n}\n\nfunction applySessionTitle(ctx, session, source) {\n const titles = ctx.get?.(\"sessionTitle\");\n if (!titles) throw new Error(\"Claude Session import requires DSH's sessionTitle service\");\n const title = summarizeTitle(source.customTitle)\n || summarizeTitle(source.summary)\n || summarizeTitle(source.firstPrompt)\n || `Claude ${String(source.sessionId).slice(0, 8)}`;\n if (titles.get(session)?.title !== title) titles.rename(session, title);\n}\n\nfunction summarizeTitle(value) {\n const text = normalizedText(value).replace(/\\s+/g, \" \");\n return text.length > 80 ? `${text.slice(0, 79)}...` : text;\n}\n\nfunction normalizedText(value) {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction jsonText(value) {\n try {\n return JSON.stringify(value ?? {}, null, 2);\n } catch {\n return \"{}\";\n }\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 { ClaudeWorkspaceImporter } from \"./claude-import.mjs\";\nimport { registerClaudeImportRoute } from \"./claude-import-route.js\";\nimport { ClaudeLinkStore } from \"./claude-link-store.js\";\nimport { handleClaudeSdkRequest } from \"./claude-tools.js\";\nimport { DshClaudeImportTarget } from \"./dsh-import-target.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\", \"dsh:web-server\"],\n },\n async activate({ capabilities, defer }) {\n installClaudeSessionEventType();\n const runtime = capabilities.require(\"relay.execution.claude.v1\");\n const linkStore = new ClaudeLinkStore(resolveLinkPath(config.claudeLinkPath));\n const adapter = new ClaudeDshAdapter({\n runtime, ready: runtime.whenReady(),\n linkStore,\n attachments: ctx.attachments, logger: ctx.logger,\n });\n const target = new DshClaudeImportTarget({ ctx, logger: ctx.logger });\n const importer = new ClaudeWorkspaceImporter({ runtime, adapter, target, logger: ctx.logger });\n defer(ctx.llm.registerAdapter([CLAUDE_PROVIDER], adapter));\n defer(registerClaudeImportRoute(ctx, {\n importer,\n token: config.claudeImportToken ?? process.env.RELAY_CLAUDE_IMPORT_TOKEN,\n }));\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 \"attachments\",\n \"llm\",\n \"sessions\",\n \"sessionPersistence\",\n \"tools\",\n \"typert\",\n \"userQuestions\",\n \"webServer\",\n \"workspaceRegistry\",\n \"sessionTitle\",\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 plugins: config.claudePlugins,\n }),\n createDshClaudePlugin(ctx, config),\n ]);\n } catch (error) { await release(); throw error; }\n}\n"],"mappings":"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"}
|