@haven_ai/connect 0.1.0-alpha → 0.1.1-alpha
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 +5 -1
- package/dist/cli.cjs +159 -22
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +159 -22
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +159 -22
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -1
- package/dist/index.d.ts +7 -1
- package/dist/index.js +159 -22
- package/dist/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/api.ts","../src/key.ts","../src/redact.ts","../src/storage.ts","../src/config-writers.ts","../src/probes.ts","../src/runtime-registry.ts","../src/runtime-install.ts","../src/runtime.ts","../src/args.ts"],"names":["Wallet","crypto","mkdir","join","rm","homedir","resolve","writeFile","access","chmod","readFile","path","dirname","platform","promisify","execFile","signerReady"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface ConnectApiClient {\n resolveSetup(input: ResolveSetupInput): Promise<ResolvedSetup>\n registerSetup(input: RegisterSetupInput): Promise<RegisterSetupResponse>\n updateInstallStatus(\n setupId: string,\n apiKey: string,\n input: UpdateInstallStatusInput,\n ): Promise<void>\n}\n\nexport interface ResolveSetupInput {\n setupToken: string\n connectorVersion: string\n runtime?: string\n}\n\nexport interface RegisterSetupInput extends ResolveSetupInput {\n challengeId: string\n delegateAddress: string\n proofSignature: string\n apiKeyHash: string\n apiKeyPrefix: string\n connectorContext?: ConnectorContext\n installCapabilities?: {\n canWriteRuntimeConfig?: boolean\n restartRequired?: boolean\n }\n}\n\nexport interface UpdateInstallStatusInput {\n runtime?: string\n connectorVersion: string\n hostedMcpConfigured: boolean\n localSignerConfigured: boolean\n credentialFilesWritten?: boolean\n probeResult: string\n restartRequired: boolean\n nextUserAction: string\n errorCode?: string | null\n environmentLabel?: string\n}\n\nexport interface ConnectorContext {\n environment_label?: string\n runtime_version?: string\n config_target?: string\n}\n\nexport interface ResolvedSetup {\n setup_id: string\n status: string\n agent: {\n name: string\n description?: string | null\n }\n haven_wallet: {\n id: string\n name: string\n address: string\n chain_id: number\n network: string\n }\n agent_budget: Array<{\n token_address: string\n token_symbol: string\n allowance_amount: string\n reset_period_min: number\n }>\n hosted_mcp_url: string\n challenge: {\n id: string\n message: string\n expires_at: string\n }\n}\n\nexport interface RegisterSetupResponse {\n setup_id: string\n agent_id: string\n status: string\n agent_status: string\n api_key_prefix: string\n api_key_scope: string\n delegate_address: string\n hosted_mcp_url: string\n next_action: string\n}\n\nexport function createConnectApiClient(baseUrl: string, fetchImpl: typeof fetch = fetch): ConnectApiClient {\n const root = baseUrl.replace(/\\/+$/, '')\n return {\n resolveSetup: (input) =>\n request(fetchImpl, `${root}/agent-connection-setups/resolve`, {\n method: 'POST',\n body: JSON.stringify({\n setup_token: input.setupToken,\n connector_version: input.connectorVersion,\n runtime: input.runtime,\n }),\n }),\n\n registerSetup: (input) =>\n request(fetchImpl, `${root}/agent-connection-setups/register`, {\n method: 'POST',\n body: JSON.stringify({\n setup_token: input.setupToken,\n challenge_id: input.challengeId,\n delegate_address: input.delegateAddress,\n proof_signature: input.proofSignature,\n api_key_hash: input.apiKeyHash,\n api_key_prefix: input.apiKeyPrefix,\n runtime: input.runtime,\n connector_version: input.connectorVersion,\n connector_context: input.connectorContext,\n install_capabilities: input.installCapabilities && {\n can_write_runtime_config: input.installCapabilities.canWriteRuntimeConfig,\n restart_required: input.installCapabilities.restartRequired,\n },\n }),\n }),\n\n updateInstallStatus: async (setupId, apiKey, input) => {\n await request(fetchImpl, `${root}/agent-connection-setups/${encodeURIComponent(setupId)}/install-status`, {\n method: 'POST',\n headers: { Authorization: `Bearer ${apiKey}` },\n body: JSON.stringify({\n runtime: input.runtime,\n connector_version: input.connectorVersion,\n hosted_mcp_configured: input.hostedMcpConfigured,\n local_signer_configured: input.localSignerConfigured,\n credential_files_written: input.credentialFilesWritten,\n probe_result: input.probeResult,\n restart_required: input.restartRequired,\n next_user_action: input.nextUserAction,\n error_code: input.errorCode ?? null,\n environment_label: input.environmentLabel,\n }),\n })\n },\n }\n}\n\nasync function request<T>(\n fetchImpl: typeof fetch,\n url: string,\n init: RequestInit,\n): Promise<T> {\n const response = await fetchImpl(url, {\n ...init,\n headers: {\n 'Content-Type': 'application/json',\n ...(init.headers ?? {}),\n },\n })\n const text = await response.text()\n const body = text ? JSON.parse(text) : null\n if (!response.ok) {\n const message = body?.error ?? body?.message ?? `${response.status} ${response.statusText}`\n throw new Error(`Haven setup request failed: ${message}`)\n }\n return body as T\n}\n","import crypto from 'node:crypto'\nimport { Wallet } from 'ethers'\n\nexport interface LocalDelegateKey {\n privateKey: string\n address: string\n signChallenge(message: string): Promise<string>\n}\n\nexport function generateDelegateKey(): LocalDelegateKey {\n return delegateKeyFromPrivateKey(Wallet.createRandom().privateKey)\n}\n\nexport function delegateKeyFromPrivateKey(privateKey: string): LocalDelegateKey {\n const wallet = new Wallet(privateKey)\n return {\n privateKey: wallet.privateKey,\n address: wallet.address,\n signChallenge: (message: string) => wallet.signMessage(message),\n }\n}\n\nexport function generateAgentApiKey(): string {\n return `sk_agent_${crypto.randomBytes(24).toString('hex')}`\n}\n\nexport function hashAgentApiKey(apiKey: string): string {\n return crypto.createHash('sha256').update(apiKey).digest('hex')\n}\n\nexport function agentApiKeyPrefix(apiKey: string): string {\n return apiKey.slice(0, 12)\n}\n","const API_KEY_RE = /sk_agent_[A-Za-z0-9]+/g\nconst PRIVATE_KEY_RE = /0x[0-9a-fA-F]{64}/g\n\nexport function redactSecrets(value: string): string {\n return value\n .replace(API_KEY_RE, 'sk_agent_[redacted]')\n .replace(PRIVATE_KEY_RE, '0x[redacted-private-key]')\n}\n\nexport function shortAddress(address: string): string {\n if (!/^0x[0-9a-fA-F]{40}$/.test(address)) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n}\n","import { access, chmod, mkdir, rm, writeFile } from 'node:fs/promises'\nimport crypto from 'node:crypto'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\n\nexport interface StoredCredentialPaths {\n directory: string\n identityPath: string\n signerPath: string\n}\n\nexport interface WriteCredentialInput {\n baseDir?: string\n agentId: string\n apiKey: string\n delegateKey: string\n safeAddress?: string\n chainId?: number\n network?: string\n apiUrl: string\n hostedMcpUrl: string\n warn?: (message: string) => void\n}\n\nexport interface PreflightCredentialStorageInput {\n baseDir?: string\n warn?: (message: string) => void\n}\n\nexport async function preflightCredentialStorage(\n input: PreflightCredentialStorageInput = {},\n): Promise<string> {\n const directory = defaultCredentialRoot(input.baseDir)\n await mkdir(directory, { recursive: true, mode: 0o700 })\n await restrictPermissions(directory, 0o700, input.warn)\n\n const probePath = join(directory, `.haven-connect-preflight-${crypto.randomBytes(8).toString('hex')}`)\n try {\n await writeOwnerOnlyJson(probePath, { ok: true }, input.warn)\n } finally {\n await rm(probePath, { force: true }).catch(() => undefined)\n }\n\n return directory\n}\n\nexport async function writeCredentialFiles(input: WriteCredentialInput): Promise<StoredCredentialPaths> {\n const directory = defaultAgentDirectory(input.agentId, input.baseDir)\n await mkdir(directory, { recursive: true, mode: 0o700 })\n await restrictPermissions(directory, 0o700, input.warn)\n\n const identityPath = join(directory, 'identity.json')\n const signerPath = join(directory, 'signer.json')\n\n await assertDoesNotExist(identityPath)\n await assertDoesNotExist(signerPath)\n\n await writeOwnerOnlyJson(\n signerPath,\n {\n delegate_key: input.delegateKey,\n agent_id: input.agentId,\n safe_address: input.safeAddress,\n chain_id: input.chainId,\n network: input.network,\n note: 'Local signer credential. Haven backend never receives this private key.',\n },\n input.warn,\n )\n\n try {\n await writeOwnerOnlyJson(\n identityPath,\n {\n api_key: input.apiKey,\n agent_id: input.agentId,\n safe_address: input.safeAddress,\n chain_id: input.chainId,\n network: input.network,\n api_url: input.apiUrl,\n hosted_mcp_url: input.hostedMcpUrl,\n note: 'Haven API key identifies the agent only. It cannot spend without the local signer key and on-chain Haven wallet rules.',\n },\n input.warn,\n )\n } catch (err) {\n await rm(signerPath, { force: true }).catch(() => undefined)\n throw err\n }\n\n return { directory, identityPath, signerPath }\n}\n\nexport function defaultAgentDirectory(agentId: string, baseDir = join(homedir(), '.haven', 'agents')): string {\n return resolve(defaultCredentialRoot(baseDir), safePathPart(agentId))\n}\n\nexport function defaultCredentialRoot(baseDir = join(homedir(), '.haven', 'agents')): string {\n return resolve(baseDir)\n}\n\nasync function writeOwnerOnlyJson(\n path: string,\n value: Record<string, unknown>,\n warn: ((message: string) => void) | undefined,\n): Promise<void> {\n const json = JSON.stringify(dropUndefined(value), null, 2)\n await writeFile(path, `${json}\\n`, { mode: 0o600, flag: 'wx' })\n await restrictPermissions(path, 0o600, warn)\n}\n\nfunction safePathPart(value: string): string {\n return value.replace(/[^A-Za-z0-9_.-]/g, '_')\n}\n\nfunction dropUndefined(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, field]) => field !== undefined))\n}\n\nasync function assertDoesNotExist(path: string): Promise<void> {\n try {\n await access(path)\n } catch (err) {\n if (err && typeof err === 'object' && 'code' in err && err.code === 'ENOENT') return\n throw err\n }\n throw new Error(`Refusing to overwrite existing Haven credential file: ${path}`)\n}\n\nasync function restrictPermissions(\n path: string,\n mode: 0o600 | 0o700,\n warn: ((message: string) => void) | undefined,\n): Promise<void> {\n try {\n await chmod(path, mode)\n } catch (err) {\n warn?.(\n `Warning: could not restrict permissions on ${path} to ${mode.toString(8)}. ` +\n `Move this credential to a private location or run chmod ${mode.toString(8)} ${path}. ` +\n `${err instanceof Error ? err.message : String(err)}`,\n )\n }\n}\n","import { mkdir, readFile, writeFile, chmod } from 'node:fs/promises'\nimport { homedir, platform } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\nimport type { RuntimeId } from './runtime-registry.js'\n\nexport interface RuntimeConfigInput {\n runtime: RuntimeId\n hostedMcpUrl: string\n apiKey: string\n signerPath: string\n credentialDirectory: string\n homeDir?: string\n}\n\nexport interface RuntimeConfigWriteResult {\n hostedConfigured: boolean\n signerConfigured: boolean\n target: string\n changed: boolean\n restartRequired: boolean\n messages: string[]\n errorCode?: string\n}\n\nexport async function writeRuntimeConfig(input: RuntimeConfigInput): Promise<RuntimeConfigWriteResult> {\n switch (input.runtime) {\n case 'codex-cli':\n return writeCodexConfig(input)\n case 'cursor':\n return writeJsonRuntimeConfig(input, cursorConfigPath(input.homeDir), 'mcpServers')\n case 'vscode':\n return writeJsonRuntimeConfig(input, vscodeConfigPath(input.homeDir), 'servers')\n case 'claude-desktop':\n return writeJsonRuntimeConfig(input, claudeDesktopConfigPath(input.homeDir), 'mcpServers')\n default:\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: 'manual runtime setup',\n changed: false,\n restartRequired: true,\n messages: ['Runtime config needs to be added manually for this agent environment.'],\n errorCode: 'manual_runtime_setup_required',\n }\n }\n}\n\nexport function buildHostedServer(hostedMcpUrl: string, apiKey: string, runtime: RuntimeId): Record<string, unknown> {\n if (runtime === 'vscode') {\n return {\n type: 'http',\n url: hostedMcpUrl,\n headers: { Authorization: `Bearer ${apiKey}` },\n }\n }\n return {\n url: hostedMcpUrl,\n headers: { Authorization: `Bearer ${apiKey}` },\n }\n}\n\nexport function buildSignerServer(signerPath: string, runtime: RuntimeId): Record<string, unknown> {\n const server = {\n command: 'npx',\n args: ['-y', '@haven_ai/signer', '--credentials', signerPath],\n }\n if (runtime === 'vscode') return { type: 'stdio', ...server }\n return server\n}\n\nexport function mergeJsonMcpConfig(\n existingJson: string | null,\n serverRoot: 'mcpServers' | 'servers',\n hostedServer: Record<string, unknown>,\n signerServer: Record<string, unknown>,\n): string {\n const config = existingJson?.trim() ? parseJsonObject(existingJson) : {}\n const existingRoot = config[serverRoot]\n const servers = existingRoot && typeof existingRoot === 'object' && !Array.isArray(existingRoot)\n ? existingRoot as Record<string, unknown>\n : {}\n config[serverRoot] = {\n ...servers,\n haven: hostedServer,\n 'haven-signer': signerServer,\n }\n return `${JSON.stringify(config, null, 2)}\\n`\n}\n\nexport function mergeCodexToml(existingToml: string, hostedMcpUrl: string, signerPath: string): string {\n let next = removeTomlTable(removeTomlTable(existingToml, 'mcp_servers.haven'), 'mcp_servers.haven_signer')\n next = next.trimEnd()\n const block = [\n '[mcp_servers.haven]',\n `url = ${tomlString(hostedMcpUrl)}`,\n 'bearer_token_env_var = \"HAVEN_TOKEN\"',\n '',\n '[mcp_servers.haven_signer]',\n 'command = \"npx\"',\n `args = [\"-y\", \"@haven_ai/signer\", \"--credentials\", ${tomlString(signerPath)}]`,\n ].join('\\n')\n return `${next ? `${next}\\n\\n` : ''}${block}\\n`\n}\n\nasync function writeJsonRuntimeConfig(\n input: RuntimeConfigInput,\n target: string,\n serverRoot: 'mcpServers' | 'servers',\n): Promise<RuntimeConfigWriteResult> {\n try {\n const existing = await readOptional(target)\n const merged = mergeJsonMcpConfig(\n existing,\n serverRoot,\n buildHostedServer(input.hostedMcpUrl, input.apiKey, input.runtime),\n buildSignerServer(input.signerPath, input.runtime),\n )\n await writeOwnerOnlyText(target, merged)\n return {\n hostedConfigured: true,\n signerConfigured: true,\n target: configTargetLabel(input.runtime),\n changed: existing !== merged,\n restartRequired: input.runtime === 'claude-desktop',\n messages: [`Updated Haven MCP entries in ${configTargetLabel(input.runtime)}.`],\n }\n } catch (err) {\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: configTargetLabel(input.runtime),\n changed: false,\n restartRequired: true,\n messages: [`Could not update ${configTargetLabel(input.runtime)}: ${err instanceof Error ? err.message : String(err)}`],\n errorCode: 'runtime_config_write_failed',\n }\n }\n}\n\nasync function writeCodexConfig(input: RuntimeConfigInput): Promise<RuntimeConfigWriteResult> {\n const target = codexConfigPath(input.homeDir)\n const envTarget = join(input.credentialDirectory, 'identity.env')\n try {\n const existing = await readOptional(target)\n const merged = mergeCodexToml(existing ?? '', input.hostedMcpUrl, input.signerPath)\n await writeOwnerOnlyText(target, merged)\n await writeOwnerOnlyText(envTarget, `HAVEN_TOKEN=${shellToken(input.apiKey)}\\n`)\n return {\n hostedConfigured: false,\n signerConfigured: true,\n target: 'Codex CLI config',\n changed: existing !== merged,\n restartRequired: true,\n messages: [\n 'Updated Haven MCP entries in Codex CLI config.',\n 'Wrote the hosted MCP token to a private env file. Launch Codex with that env file before using Haven tools.',\n ],\n errorCode: 'codex_env_activation_required',\n }\n } catch (err) {\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: 'Codex CLI config',\n changed: false,\n restartRequired: true,\n messages: [`Could not update Codex CLI config: ${err instanceof Error ? err.message : String(err)}`],\n errorCode: 'runtime_config_write_failed',\n }\n }\n}\n\nasync function readOptional(path: string): Promise<string | null> {\n try {\n return await readFile(path, 'utf8')\n } catch (err) {\n if (err && typeof err === 'object' && 'code' in err && err.code === 'ENOENT') return null\n throw err\n }\n}\n\nasync function writeOwnerOnlyText(path: string, value: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true, mode: 0o700 })\n await writeFile(path, value, { mode: 0o600 })\n await chmod(path, 0o600).catch(() => undefined)\n}\n\nfunction parseJsonObject(value: string): Record<string, unknown> {\n const parsed = JSON.parse(value) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('runtime config must be a JSON object')\n }\n return parsed as Record<string, unknown>\n}\n\nfunction removeTomlTable(toml: string, table: string): string {\n const lines = toml.split(/\\r?\\n/)\n const start = `[${table}]`\n const kept: string[] = []\n let skipping = false\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed === start) {\n skipping = true\n continue\n }\n if (skipping && trimmed.startsWith('[') && trimmed.endsWith(']')) {\n skipping = false\n }\n if (!skipping) kept.push(line)\n }\n return kept.join('\\n')\n}\n\nfunction tomlString(value: string): string {\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction shellToken(value: string): string {\n return `'${value.replace(/'/g, `'\\\\''`)}'`\n}\n\nfunction cursorConfigPath(homeDir = homedir()): string {\n return resolve(homeDir, '.cursor', 'mcp.json')\n}\n\nfunction codexConfigPath(homeDir = homedir()): string {\n return resolve(homeDir, '.codex', 'config.toml')\n}\n\nfunction vscodeConfigPath(homeDir = homedir()): string {\n if (platform() === 'darwin') return resolve(homeDir, 'Library', 'Application Support', 'Code', 'User', 'mcp.json')\n if (platform() === 'win32') {\n return resolve(process.env.APPDATA ?? join(homeDir, 'AppData', 'Roaming'), 'Code', 'User', 'mcp.json')\n }\n return resolve(homeDir, '.config', 'Code', 'User', 'mcp.json')\n}\n\nfunction claudeDesktopConfigPath(homeDir = homedir()): string {\n if (platform() === 'darwin') {\n return resolve(homeDir, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json')\n }\n if (platform() === 'win32') {\n return resolve(process.env.APPDATA ?? join(homeDir, 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json')\n }\n return resolve(homeDir, '.config', 'Claude', 'claude_desktop_config.json')\n}\n\nfunction configTargetLabel(runtime: RuntimeId): string {\n switch (runtime) {\n case 'cursor':\n return 'Cursor MCP config'\n case 'vscode':\n return 'VS Code MCP config'\n case 'claude-desktop':\n return 'Claude Desktop config'\n default:\n return 'runtime MCP config'\n }\n}\n","import { readFile } from 'node:fs/promises'\n\nexport type HostedProbeStatus = 'ok' | 'unauthorized' | 'network_error' | 'bad_response'\n\nexport interface HostedProbeResult {\n status: HostedProbeStatus\n toolCount?: number\n}\n\nexport async function probeHostedMcpTools(\n apiKey: string,\n hostedMcpUrl: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<HostedProbeResult> {\n let response: Response\n try {\n response = await fetchWithTimeout(fetchImpl, hostedMcpUrl, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n },\n body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' }),\n })\n } catch {\n return { status: 'network_error' }\n }\n\n if (response.status === 401 || response.status === 403) return { status: 'unauthorized' }\n if (!response.ok) return { status: 'bad_response' }\n\n try {\n const payload = parseJsonRpcPayload(await response.text())\n if (!payload || payload.error) return { status: 'bad_response' }\n const tools = (payload.result as { tools?: unknown[] } | undefined)?.tools\n return { status: 'ok', toolCount: Array.isArray(tools) ? tools.length : undefined }\n } catch {\n return { status: 'bad_response' }\n }\n}\n\nexport async function probeLocalSignerCredential(signerPath: string): Promise<boolean> {\n try {\n const parsed = JSON.parse(await readFile(signerPath, 'utf8')) as unknown\n return Boolean(\n parsed &&\n typeof parsed === 'object' &&\n 'delegate_key' in parsed &&\n typeof (parsed as { delegate_key?: unknown }).delegate_key === 'string',\n )\n } catch {\n return false\n }\n}\n\ninterface JsonRpcEnvelope {\n result?: unknown\n error?: unknown\n}\n\nfunction parseJsonRpcPayload(raw: string): JsonRpcEnvelope | null {\n const trimmed = raw.trim()\n if (!trimmed) return null\n if (trimmed.startsWith('{')) {\n try {\n return JSON.parse(trimmed) as JsonRpcEnvelope\n } catch {\n return null\n }\n }\n const dataLines = trimmed\n .split(/\\r?\\n/)\n .filter((line) => line.startsWith('data:'))\n .map((line) => line.slice(5).trim())\n for (let i = dataLines.length - 1; i >= 0; i -= 1) {\n try {\n return JSON.parse(dataLines[i]) as JsonRpcEnvelope\n } catch {\n /* try previous SSE frame */\n }\n }\n return null\n}\n\nasync function fetchWithTimeout(fetchImpl: typeof fetch, url: string, init: RequestInit): Promise<Response> {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 3000)\n try {\n return await fetchImpl(url, { ...init, signal: controller.signal })\n } finally {\n clearTimeout(timeout)\n }\n}\n","export type RuntimeId =\n | 'claude-code'\n | 'codex-cli'\n | 'cursor'\n | 'vscode'\n | 'claude-desktop'\n | 'other'\n\nexport type RestartMode = 'restart-session' | 'restart-app' | 'hot-reload' | 'manual'\n\nexport interface RuntimeProfile {\n id: RuntimeId\n label: string\n restartMode: RestartMode\n canWriteRuntimeConfig: boolean\n}\n\nconst RUNTIME_PROFILES: Record<RuntimeId, RuntimeProfile> = {\n 'claude-code': {\n id: 'claude-code',\n label: 'Claude Code',\n restartMode: 'restart-session',\n canWriteRuntimeConfig: true,\n },\n 'codex-cli': {\n id: 'codex-cli',\n label: 'Codex CLI',\n restartMode: 'restart-session',\n canWriteRuntimeConfig: true,\n },\n cursor: {\n id: 'cursor',\n label: 'Cursor',\n restartMode: 'hot-reload',\n canWriteRuntimeConfig: true,\n },\n vscode: {\n id: 'vscode',\n label: 'VS Code',\n restartMode: 'hot-reload',\n canWriteRuntimeConfig: true,\n },\n 'claude-desktop': {\n id: 'claude-desktop',\n label: 'Claude Desktop',\n restartMode: 'restart-app',\n canWriteRuntimeConfig: true,\n },\n other: {\n id: 'other',\n label: 'Other agent runtime',\n restartMode: 'manual',\n canWriteRuntimeConfig: false,\n },\n}\n\nconst RUNTIME_ALIASES: Record<string, RuntimeId> = {\n claude: 'claude-code',\n 'claude-code': 'claude-code',\n claudecode: 'claude-code',\n 'claude_code': 'claude-code',\n codex: 'codex-cli',\n 'codex-cli': 'codex-cli',\n codexcli: 'codex-cli',\n 'codex_cli': 'codex-cli',\n cursor: 'cursor',\n vscode: 'vscode',\n 'vs-code': 'vscode',\n 'vs_code': 'vscode',\n code: 'vscode',\n 'claude-desktop': 'claude-desktop',\n 'claude_desktop': 'claude-desktop',\n claudesktop: 'claude-desktop',\n desktop: 'claude-desktop',\n other: 'other',\n manual: 'other',\n}\n\nexport function runtimeProfile(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): RuntimeProfile {\n return RUNTIME_PROFILES[normalizeRuntime(runtime, env)]\n}\n\nexport function normalizeRuntime(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): RuntimeId {\n const explicit = normalizeRuntimeName(runtime)\n if (explicit) return explicit\n return detectRuntime(env) ?? 'other'\n}\n\nexport function restartRequiredForRuntime(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): boolean {\n const mode = runtimeProfile(runtime, env).restartMode\n return mode === 'restart-session' || mode === 'restart-app'\n}\n\nfunction normalizeRuntimeName(runtime: string | undefined): RuntimeId | null {\n const key = runtime?.trim().toLowerCase()\n if (!key) return null\n return RUNTIME_ALIASES[key.replace(/\\s+/g, '-')] ?? null\n}\n\nfunction detectRuntime(env: NodeJS.ProcessEnv): RuntimeId | null {\n if (env.CLAUDECODE || env.CLAUDE_CODE || env.CLAUDECODE_CWD) return 'claude-code'\n if (env.CODEX_SANDBOX || env.CODEX_HOME || env.CODEX_CWD) return 'codex-cli'\n if (env.VSCODE_CWD || env.VSCODE_IPC_HOOK_CLI || env.TERM_PROGRAM === 'vscode') return 'vscode'\n return null\n}\n","import { execFile } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { writeRuntimeConfig } from './config-writers.js'\nimport { probeHostedMcpTools, probeLocalSignerCredential } from './probes.js'\nimport { normalizeRuntime, restartRequiredForRuntime, runtimeProfile, type RuntimeId } from './runtime-registry.js'\n\nconst execFileAsync = promisify(execFile)\n\nexport interface RuntimeInstallInput {\n runtime?: string\n hostedMcpUrl: string\n apiKey: string\n signerPath: string\n identityPath: string\n credentialDirectory: string\n environmentLabel?: string\n}\n\nexport interface RuntimeInstallResult {\n runtime: RuntimeId\n hostedMcpConfigured: boolean\n localSignerConfigured: boolean\n probeResult: string\n restartRequired: boolean\n nextUserAction: string\n errorCode?: string\n configTarget?: string\n runtimeVersion?: string\n messages: string[]\n}\n\nexport interface RuntimeInstallDeps {\n env?: NodeJS.ProcessEnv\n homeDir?: string\n fetch?: typeof fetch\n runCommand?: (command: string, args: string[]) => Promise<void>\n}\n\nexport async function installRuntime(\n input: RuntimeInstallInput,\n deps: RuntimeInstallDeps = {},\n): Promise<RuntimeInstallResult> {\n const runtime = normalizeRuntime(input.runtime, deps.env)\n const profile = runtimeProfile(runtime, deps.env)\n\n if (runtime === 'other') {\n const signerReady = await probeLocalSignerCredential(input.signerPath)\n return {\n runtime,\n hostedMcpConfigured: false,\n localSignerConfigured: false,\n probeResult: signerReady\n ? 'manual_runtime_setup_required_local_signer_ready'\n : 'manual_runtime_setup_required_local_signer_unavailable',\n restartRequired: true,\n nextUserAction: 'return_to_haven_for_wallet_approval_then_configure_runtime',\n errorCode: 'manual_runtime_setup_required',\n configTarget: 'manual runtime setup',\n messages: ['Runtime was not recognized. Keep the local credentials and add Haven MCP entries manually after wallet approval.'],\n }\n }\n\n const configResult = runtime === 'claude-code'\n ? await configureClaudeCode(input, deps)\n : await writeRuntimeConfig({\n runtime,\n hostedMcpUrl: input.hostedMcpUrl,\n apiKey: input.apiKey,\n signerPath: input.signerPath,\n credentialDirectory: input.credentialDirectory,\n homeDir: deps.homeDir,\n })\n\n const [hostedProbe, signerReady] = await Promise.all([\n configResult.hostedConfigured\n ? probeHostedMcpTools(input.apiKey, input.hostedMcpUrl, deps.fetch)\n : Promise.resolve({ status: 'bad_response' as const }),\n probeLocalSignerCredential(input.signerPath),\n ])\n\n const hostedOk = configResult.hostedConfigured && hostedProbe.status !== 'unauthorized'\n const signerOk = configResult.signerConfigured && signerReady\n const restartRequired = configResult.restartRequired || restartRequiredForRuntime(runtime, deps.env)\n\n return {\n runtime,\n hostedMcpConfigured: hostedOk,\n localSignerConfigured: signerOk,\n probeResult: buildProbeResult(configResult.hostedConfigured, hostedProbe.status, signerOk),\n restartRequired,\n nextUserAction: nextAction(profile.restartMode, configResult.errorCode),\n errorCode: configResult.errorCode,\n configTarget: configResult.target,\n messages: configResult.messages,\n }\n}\n\nexport function runtimeInstallCapabilities(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): {\n canWriteRuntimeConfig: boolean\n restartRequired: boolean\n} {\n const profile = runtimeProfile(runtime, env)\n return {\n canWriteRuntimeConfig: profile.canWriteRuntimeConfig,\n restartRequired: restartRequiredForRuntime(runtime, env),\n }\n}\n\nasync function configureClaudeCode(\n input: RuntimeInstallInput,\n deps: RuntimeInstallDeps,\n): Promise<{\n hostedConfigured: boolean\n signerConfigured: boolean\n target: string\n changed: boolean\n restartRequired: boolean\n messages: string[]\n errorCode?: string\n}> {\n const runCommand = deps.runCommand ?? defaultRunCommand\n try {\n await runCommand('claude', [\n 'mcp',\n 'add',\n '--transport',\n 'http',\n 'haven',\n input.hostedMcpUrl,\n '--header',\n `Authorization: Bearer ${input.apiKey}`,\n ])\n await runCommand('claude', [\n 'mcp',\n 'add',\n 'haven-signer',\n 'npx',\n '-y',\n '@haven_ai/signer',\n '--credentials',\n input.signerPath,\n ])\n return {\n hostedConfigured: true,\n signerConfigured: true,\n target: 'Claude Code MCP config',\n changed: true,\n restartRequired: true,\n messages: ['Updated Haven MCP entries with Claude Code.'],\n }\n } catch (err) {\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: 'Claude Code MCP config',\n changed: false,\n restartRequired: true,\n messages: [`Could not update Claude Code MCP config: ${err instanceof Error ? err.message : String(err)}`],\n errorCode: 'claude_code_config_failed',\n }\n }\n}\n\nasync function defaultRunCommand(command: string, args: string[]): Promise<void> {\n await execFileAsync(command, args, { timeout: 10_000 })\n}\n\nfunction buildProbeResult(hostedConfigured: boolean, hostedStatus: string, signerReady: boolean): string {\n const hostedPart = hostedConfigured ? `hosted_${hostedStatus}` : 'hosted_not_configured'\n const signerPart = signerReady ? 'local_signer_ready' : 'local_signer_unavailable'\n return `${hostedPart}_${signerPart}`.slice(0, 120)\n}\n\nfunction nextAction(\n restartMode: 'restart-session' | 'restart-app' | 'hot-reload' | 'manual',\n errorCode?: string,\n): string {\n if (errorCode) return 'return_to_haven_for_wallet_approval_then_finish_runtime_setup'\n if (restartMode === 'hot-reload') return 'return_to_haven_for_wallet_approval'\n if (restartMode === 'restart-app') return 'return_to_haven_for_wallet_approval_then_restart_app'\n if (restartMode === 'restart-session') return 'return_to_haven_for_wallet_approval_then_restart_agent_session'\n return 'return_to_haven_for_wallet_approval_then_configure_runtime'\n}\n","import { createConnectApiClient, type ConnectApiClient, type ResolvedSetup } from './api.js'\nimport {\n agentApiKeyPrefix,\n generateAgentApiKey,\n generateDelegateKey,\n hashAgentApiKey,\n type LocalDelegateKey,\n} from './key.js'\nimport { redactSecrets, shortAddress } from './redact.js'\nimport {\n preflightCredentialStorage,\n writeCredentialFiles,\n type StoredCredentialPaths,\n} from './storage.js'\nimport {\n installRuntime,\n runtimeInstallCapabilities,\n type RuntimeInstallResult,\n} from './runtime-install.js'\n\nexport const CONNECTOR_VERSION = '0.1.0'\n\nexport interface ConnectOptions {\n setupToken: string\n apiBaseUrl: string\n runtime?: string\n credentialsDir?: string\n environmentLabel?: string\n connectorVersion?: string\n}\n\nexport interface ConnectDeps {\n api?: ConnectApiClient\n generateKey?: () => LocalDelegateKey\n generateApiKey?: () => string\n preflightStorage?: typeof preflightCredentialStorage\n writeCredentials?: typeof writeCredentialFiles\n installRuntime?: typeof installRuntime\n log?: (message: string) => void\n}\n\nexport interface ConnectResult {\n setupId: string\n agentId: string\n delegateAddress: string\n credentialPaths: StoredCredentialPaths\n}\n\nexport async function runConnect(options: ConnectOptions, deps: ConnectDeps = {}): Promise<ConnectResult> {\n const connectorVersion = options.connectorVersion ?? CONNECTOR_VERSION\n const api = deps.api ?? createConnectApiClient(options.apiBaseUrl)\n const log = secureLogger(deps.log ?? ((message) => process.stdout.write(`${message}\\n`)))\n const writeCredentials = deps.writeCredentials ?? writeCredentialFiles\n const preflightStorage = deps.preflightStorage ?? preflightCredentialStorage\n const runRuntimeInstall = deps.installRuntime ?? installRuntime\n const generateKey = deps.generateKey ?? generateDelegateKey\n const generateLocalApiKey = deps.generateApiKey ?? generateAgentApiKey\n const installCapabilities = runtimeInstallCapabilities(options.runtime)\n\n const setup = await api.resolveSetup({\n setupToken: options.setupToken,\n connectorVersion,\n runtime: options.runtime,\n })\n printSetupSummary(setup, log)\n\n await preflightStorage({ baseDir: options.credentialsDir, warn: log })\n log('Checked local credential storage.')\n\n const localKey = generateKey()\n const localApiKey = generateLocalApiKey()\n log('Generated local signing key.')\n log('Generated local Haven API key.')\n const proofSignature = await localKey.signChallenge(setup.challenge.message)\n\n const registration = await api.registerSetup({\n setupToken: options.setupToken,\n connectorVersion,\n runtime: options.runtime,\n challengeId: setup.challenge.id,\n delegateAddress: localKey.address,\n proofSignature,\n apiKeyHash: hashAgentApiKey(localApiKey),\n apiKeyPrefix: agentApiKeyPrefix(localApiKey),\n connectorContext: {\n environment_label: options.environmentLabel ?? 'Local workspace',\n config_target: installCapabilities.canWriteRuntimeConfig\n ? 'agent runtime MCP config'\n : 'local credential files',\n },\n installCapabilities,\n })\n\n log(`Registered signing address with Haven: ${shortAddress(registration.delegate_address)}.`)\n\n const credentialPaths = await writeCredentials({\n baseDir: options.credentialsDir,\n agentId: registration.agent_id,\n apiKey: localApiKey,\n delegateKey: localKey.privateKey,\n safeAddress: setup.haven_wallet.address,\n chainId: setup.haven_wallet.chain_id,\n network: setup.haven_wallet.network,\n apiUrl: options.apiBaseUrl,\n hostedMcpUrl: registration.hosted_mcp_url,\n warn: log,\n })\n log(`Stored Haven identity credential locally: ${credentialPaths.identityPath}`)\n log(`Stored local signer credential locally: ${credentialPaths.signerPath}`)\n\n const runtimeInstall = await runRuntimeInstall({\n runtime: options.runtime,\n hostedMcpUrl: registration.hosted_mcp_url,\n apiKey: localApiKey,\n signerPath: credentialPaths.signerPath,\n identityPath: credentialPaths.identityPath,\n credentialDirectory: credentialPaths.directory,\n environmentLabel: options.environmentLabel ?? 'Local workspace',\n })\n printRuntimeInstall(runtimeInstall, log)\n\n try {\n await api.updateInstallStatus(registration.setup_id, localApiKey, {\n runtime: runtimeInstall.runtime,\n connectorVersion,\n hostedMcpConfigured: runtimeInstall.hostedMcpConfigured,\n localSignerConfigured: runtimeInstall.localSignerConfigured,\n credentialFilesWritten: true,\n probeResult: runtimeInstall.probeResult,\n restartRequired: runtimeInstall.restartRequired,\n nextUserAction: runtimeInstall.nextUserAction,\n errorCode: runtimeInstall.errorCode,\n environmentLabel: options.environmentLabel ?? 'Local workspace',\n })\n } catch (err) {\n log(`Could not report install status to Haven: ${err instanceof Error ? err.message : String(err)}`)\n }\n\n log('Return to Haven to approve the agent rules.')\n if (runtimeInstall.restartRequired) {\n log('Restart this agent session after approval if your runtime loads MCP tools at startup.')\n }\n\n return {\n setupId: registration.setup_id,\n agentId: registration.agent_id,\n delegateAddress: registration.delegate_address,\n credentialPaths,\n }\n}\n\nfunction printSetupSummary(setup: ResolvedSetup, log: (message: string) => void): void {\n log(`Fetched Haven setup for ${setup.agent.name}.`)\n log(`Haven wallet: ${setup.haven_wallet.name} on ${setup.haven_wallet.network}.`)\n if (setup.agent_budget.length > 0) {\n for (const budget of setup.agent_budget) {\n log(\n `Agent budget: ${budget.allowance_amount} atomic ${budget.token_symbol} / ${budget.reset_period_min} minute reset.`,\n )\n }\n }\n log(`Setup challenge expires at ${setup.challenge.expires_at}.`)\n}\n\nfunction secureLogger(log: (message: string) => void): (message: string) => void {\n return (message) => log(redactSecrets(message))\n}\n\nfunction printRuntimeInstall(result: RuntimeInstallResult, log: (message: string) => void): void {\n for (const message of result.messages) log(message)\n if (result.hostedMcpConfigured) {\n log('Configured hosted Haven MCP identity.')\n } else {\n log('Hosted Haven MCP identity still needs runtime setup.')\n }\n if (result.localSignerConfigured) {\n log('Configured local Haven signer.')\n } else {\n log('Local Haven signer still needs runtime setup.')\n }\n}\n","import { CONNECTOR_VERSION, type ConnectOptions } from './runtime.js'\n\nexport interface ParsedCli {\n options: ConnectOptions\n help: boolean\n}\n\nexport function parseArgs(argv: string[], env: NodeJS.ProcessEnv = process.env): ParsedCli {\n const options: Partial<ConnectOptions> = {\n apiBaseUrl: env.HAVEN_API_URL ?? 'http://localhost:3001',\n connectorVersion: CONNECTOR_VERSION,\n }\n let help = false\n\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i]\n if (arg === '--help' || arg === '-h') {\n help = true\n } else if (arg === '--setup' || arg === '--setup-token') {\n options.setupToken = requireValue(argv, ++i, arg)\n } else if (arg === '--api' || arg === '--api-url') {\n options.apiBaseUrl = requireValue(argv, ++i, arg)\n } else if (arg === '--runtime') {\n options.runtime = requireValue(argv, ++i, arg)\n } else if (arg === '--credentials-dir') {\n options.credentialsDir = requireValue(argv, ++i, arg)\n } else if (arg === '--environment-label') {\n options.environmentLabel = requireValue(argv, ++i, arg)\n } else if (arg === '--version') {\n process.stdout.write(`${CONNECTOR_VERSION}\\n`)\n process.exit(0)\n } else {\n throw new Error(`Unknown option: ${arg}`)\n }\n }\n\n if (help) {\n return { options: options as ConnectOptions, help }\n }\n\n if (!options.setupToken) {\n throw new Error('Missing --setup <hv_setup_...> setup token.')\n }\n if (!options.apiBaseUrl) {\n throw new Error('Missing --api <Haven API URL>.')\n }\n\n options.apiBaseUrl = options.apiBaseUrl.replace(/\\/+$/, '')\n return { options: options as ConnectOptions, help }\n}\n\nexport function helpText(): string {\n return [\n 'Haven Connect Agent 2 local connector',\n '',\n 'Generates the agent signing key locally, stores it on this machine, and',\n 'sends Haven only the public signing address plus a proof signature.',\n '',\n 'Usage:',\n ' npx -y @haven_ai/connect --setup hv_setup_... --api https://api.haven.example --runtime claude-code',\n '',\n 'Options:',\n ' --setup <token> Short-lived setup token from Haven.',\n ' --api <url> Haven backend API URL. Defaults to HAVEN_API_URL or http://localhost:3001.',\n ' --runtime <name> Agent runtime hint, such as claude-code, codex-cli, cursor, vscode, or claude-desktop.',\n ' --credentials-dir <path> Credential directory fallback. Defaults to ~/.haven/agents.',\n ' --environment-label <text> Non-sensitive label shown in Haven setup review.',\n ' --help Show this help.',\n '',\n 'The connector never prints the private key and never sends it to Haven.',\n ].join('\\n')\n}\n\nfunction requireValue(argv: string[], index: number, option: string): string {\n const value = argv[index]\n if (!value || value.startsWith('--')) {\n throw new Error(`Missing value for ${option}.`)\n }\n return value\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/api.ts","../src/key.ts","../src/redact.ts","../src/storage.ts","../src/config-writers.ts","../src/probes.ts","../src/runtime-registry.ts","../src/signer-consent.ts","../src/runtime-install.ts","../src/runtime.ts","../src/args.ts"],"names":["Wallet","crypto","mkdir","join","rm","homedir","resolve","writeFile","access","chmod","readFile","path","dirname","platform","SIGNER_VERSION","ensureSignerConsent","computeSignerConsentHash","loadSignerCredentials","signer","createEdgeSigner","toolSchemas","promisify","execFile","signerCredentialReady","signerPackageName"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface ConnectApiClient {\n resolveSetup(input: ResolveSetupInput): Promise<ResolvedSetup>\n registerSetup(input: RegisterSetupInput): Promise<RegisterSetupResponse>\n updateInstallStatus(\n setupId: string,\n apiKey: string,\n input: UpdateInstallStatusInput,\n ): Promise<void>\n}\n\nexport interface ResolveSetupInput {\n setupToken: string\n connectorVersion: string\n runtime?: string\n}\n\nexport interface RegisterSetupInput extends ResolveSetupInput {\n challengeId: string\n delegateAddress: string\n proofSignature: string\n apiKeyHash: string\n apiKeyPrefix: string\n connectorContext?: ConnectorContext\n installCapabilities?: {\n canWriteRuntimeConfig?: boolean\n restartRequired?: boolean\n }\n}\n\nexport interface UpdateInstallStatusInput {\n runtime?: string\n connectorVersion: string\n hostedMcpConfigured: boolean\n localSignerConfigured: boolean\n credentialFilesWritten?: boolean\n signerAcknowledged?: boolean\n activationCommandAvailable?: boolean\n probeResult: string\n restartRequired: boolean\n nextUserAction: string\n errorCode?: string | null\n environmentLabel?: string\n}\n\nexport interface ConnectorContext {\n environment_label?: string\n runtime_version?: string\n config_target?: string\n}\n\nexport interface ResolvedSetup {\n setup_id: string\n status: string\n agent: {\n name: string\n description?: string | null\n }\n haven_wallet: {\n id: string\n name: string\n address: string\n chain_id: number\n network: string\n }\n agent_budget: Array<{\n token_address: string\n token_symbol: string\n allowance_amount: string\n reset_period_min: number\n }>\n hosted_mcp_url: string\n challenge: {\n id: string\n message: string\n expires_at: string\n }\n}\n\nexport interface RegisterSetupResponse {\n setup_id: string\n agent_id: string\n status: string\n agent_status: string\n api_key_prefix: string\n api_key_scope: string\n delegate_address: string\n hosted_mcp_url: string\n next_action: string\n}\n\nexport function createConnectApiClient(baseUrl: string, fetchImpl: typeof fetch = fetch): ConnectApiClient {\n const root = baseUrl.replace(/\\/+$/, '')\n return {\n resolveSetup: (input) =>\n request(fetchImpl, `${root}/agent-connection-setups/resolve`, {\n method: 'POST',\n body: JSON.stringify({\n setup_token: input.setupToken,\n connector_version: input.connectorVersion,\n runtime: input.runtime,\n }),\n }),\n\n registerSetup: (input) =>\n request(fetchImpl, `${root}/agent-connection-setups/register`, {\n method: 'POST',\n body: JSON.stringify({\n setup_token: input.setupToken,\n challenge_id: input.challengeId,\n delegate_address: input.delegateAddress,\n proof_signature: input.proofSignature,\n api_key_hash: input.apiKeyHash,\n api_key_prefix: input.apiKeyPrefix,\n runtime: input.runtime,\n connector_version: input.connectorVersion,\n connector_context: input.connectorContext,\n install_capabilities: input.installCapabilities && {\n can_write_runtime_config: input.installCapabilities.canWriteRuntimeConfig,\n restart_required: input.installCapabilities.restartRequired,\n },\n }),\n }),\n\n updateInstallStatus: async (setupId, apiKey, input) => {\n await request(fetchImpl, `${root}/agent-connection-setups/${encodeURIComponent(setupId)}/install-status`, {\n method: 'POST',\n headers: { Authorization: `Bearer ${apiKey}` },\n body: JSON.stringify({\n runtime: input.runtime,\n connector_version: input.connectorVersion,\n hosted_mcp_configured: input.hostedMcpConfigured,\n local_signer_configured: input.localSignerConfigured,\n credential_files_written: input.credentialFilesWritten,\n signer_acknowledged: input.signerAcknowledged,\n activation_command_available: input.activationCommandAvailable,\n probe_result: input.probeResult,\n restart_required: input.restartRequired,\n next_user_action: input.nextUserAction,\n error_code: input.errorCode ?? null,\n environment_label: input.environmentLabel,\n }),\n })\n },\n }\n}\n\nasync function request<T>(\n fetchImpl: typeof fetch,\n url: string,\n init: RequestInit,\n): Promise<T> {\n const response = await fetchImpl(url, {\n ...init,\n headers: {\n 'Content-Type': 'application/json',\n ...(init.headers ?? {}),\n },\n })\n const text = await response.text()\n const body = text ? JSON.parse(text) : null\n if (!response.ok) {\n const message = body?.error ?? body?.message ?? `${response.status} ${response.statusText}`\n throw new Error(`Haven setup request failed: ${message}`)\n }\n return body as T\n}\n","import crypto from 'node:crypto'\nimport { Wallet } from 'ethers'\n\nexport interface LocalDelegateKey {\n privateKey: string\n address: string\n signChallenge(message: string): Promise<string>\n}\n\nexport function generateDelegateKey(): LocalDelegateKey {\n return delegateKeyFromPrivateKey(Wallet.createRandom().privateKey)\n}\n\nexport function delegateKeyFromPrivateKey(privateKey: string): LocalDelegateKey {\n const wallet = new Wallet(privateKey)\n return {\n privateKey: wallet.privateKey,\n address: wallet.address,\n signChallenge: (message: string) => wallet.signMessage(message),\n }\n}\n\nexport function generateAgentApiKey(): string {\n return `sk_agent_${crypto.randomBytes(24).toString('hex')}`\n}\n\nexport function hashAgentApiKey(apiKey: string): string {\n return crypto.createHash('sha256').update(apiKey).digest('hex')\n}\n\nexport function agentApiKeyPrefix(apiKey: string): string {\n return apiKey.slice(0, 12)\n}\n","const API_KEY_RE = /sk_agent_[A-Za-z0-9]+/g\nconst PRIVATE_KEY_RE = /0x[0-9a-fA-F]{64}/g\n\nexport function redactSecrets(value: string): string {\n return value\n .replace(API_KEY_RE, 'sk_agent_[redacted]')\n .replace(PRIVATE_KEY_RE, '0x[redacted-private-key]')\n}\n\nexport function shortAddress(address: string): string {\n if (!/^0x[0-9a-fA-F]{40}$/.test(address)) return address\n return `${address.slice(0, 6)}...${address.slice(-4)}`\n}\n","import { access, chmod, mkdir, rm, writeFile } from 'node:fs/promises'\nimport crypto from 'node:crypto'\nimport { homedir } from 'node:os'\nimport { join, resolve } from 'node:path'\n\nexport interface StoredCredentialPaths {\n directory: string\n identityPath: string\n signerPath: string\n}\n\nexport interface WriteCredentialInput {\n baseDir?: string\n agentId: string\n apiKey: string\n delegateKey: string\n safeAddress?: string\n chainId?: number\n network?: string\n apiUrl: string\n hostedMcpUrl: string\n warn?: (message: string) => void\n}\n\nexport interface PreflightCredentialStorageInput {\n baseDir?: string\n warn?: (message: string) => void\n}\n\nexport async function preflightCredentialStorage(\n input: PreflightCredentialStorageInput = {},\n): Promise<string> {\n const directory = defaultCredentialRoot(input.baseDir)\n await mkdir(directory, { recursive: true, mode: 0o700 })\n await restrictPermissions(directory, 0o700, input.warn)\n\n const probePath = join(directory, `.haven-connect-preflight-${crypto.randomBytes(8).toString('hex')}`)\n try {\n await writeOwnerOnlyJson(probePath, { ok: true }, input.warn)\n } finally {\n await rm(probePath, { force: true }).catch(() => undefined)\n }\n\n return directory\n}\n\nexport async function writeCredentialFiles(input: WriteCredentialInput): Promise<StoredCredentialPaths> {\n const directory = defaultAgentDirectory(input.agentId, input.baseDir)\n await mkdir(directory, { recursive: true, mode: 0o700 })\n await restrictPermissions(directory, 0o700, input.warn)\n\n const identityPath = join(directory, 'identity.json')\n const signerPath = join(directory, 'signer.json')\n\n await assertDoesNotExist(identityPath)\n await assertDoesNotExist(signerPath)\n\n await writeOwnerOnlyJson(\n signerPath,\n {\n delegate_key: input.delegateKey,\n agent_id: input.agentId,\n safe_address: input.safeAddress,\n chain_id: input.chainId,\n network: input.network,\n note: 'Local signer credential. Haven backend never receives this private key.',\n },\n input.warn,\n )\n\n try {\n await writeOwnerOnlyJson(\n identityPath,\n {\n api_key: input.apiKey,\n agent_id: input.agentId,\n safe_address: input.safeAddress,\n chain_id: input.chainId,\n network: input.network,\n api_url: input.apiUrl,\n hosted_mcp_url: input.hostedMcpUrl,\n note: 'Haven API key identifies the agent only. It cannot spend without the local signer key and on-chain Haven wallet rules.',\n },\n input.warn,\n )\n } catch (err) {\n await rm(signerPath, { force: true }).catch(() => undefined)\n throw err\n }\n\n return { directory, identityPath, signerPath }\n}\n\nexport function defaultAgentDirectory(agentId: string, baseDir = join(homedir(), '.haven', 'agents')): string {\n return resolve(defaultCredentialRoot(baseDir), safePathPart(agentId))\n}\n\nexport function defaultCredentialRoot(baseDir = join(homedir(), '.haven', 'agents')): string {\n return resolve(baseDir)\n}\n\nasync function writeOwnerOnlyJson(\n path: string,\n value: Record<string, unknown>,\n warn: ((message: string) => void) | undefined,\n): Promise<void> {\n const json = JSON.stringify(dropUndefined(value), null, 2)\n await writeFile(path, `${json}\\n`, { mode: 0o600, flag: 'wx' })\n await restrictPermissions(path, 0o600, warn)\n}\n\nfunction safePathPart(value: string): string {\n return value.replace(/[^A-Za-z0-9_.-]/g, '_')\n}\n\nfunction dropUndefined(value: Record<string, unknown>): Record<string, unknown> {\n return Object.fromEntries(Object.entries(value).filter(([, field]) => field !== undefined))\n}\n\nasync function assertDoesNotExist(path: string): Promise<void> {\n try {\n await access(path)\n } catch (err) {\n if (err && typeof err === 'object' && 'code' in err && err.code === 'ENOENT') return\n throw err\n }\n throw new Error(`Refusing to overwrite existing Haven credential file: ${path}`)\n}\n\nasync function restrictPermissions(\n path: string,\n mode: 0o600 | 0o700,\n warn: ((message: string) => void) | undefined,\n): Promise<void> {\n try {\n await chmod(path, mode)\n } catch (err) {\n warn?.(\n `Warning: could not restrict permissions on ${path} to ${mode.toString(8)}. ` +\n `Move this credential to a private location or run chmod ${mode.toString(8)} ${path}. ` +\n `${err instanceof Error ? err.message : String(err)}`,\n )\n }\n}\n","import { mkdir, readFile, writeFile, chmod } from 'node:fs/promises'\nimport { homedir, platform } from 'node:os'\nimport { dirname, join, resolve } from 'node:path'\nimport { SIGNER_VERSION } from '@haven_ai/signer'\nimport type { RuntimeId } from './runtime-registry.js'\n\nexport interface RuntimeConfigInput {\n runtime: RuntimeId\n hostedMcpUrl: string\n apiKey: string\n signerPath: string\n credentialDirectory: string\n homeDir?: string\n}\n\nexport interface RuntimeConfigWriteResult {\n hostedConfigured: boolean\n signerConfigured: boolean\n target: string\n changed: boolean\n restartRequired: boolean\n messages: string[]\n errorCode?: string\n activationCommand?: string\n}\n\nexport async function writeRuntimeConfig(input: RuntimeConfigInput): Promise<RuntimeConfigWriteResult> {\n switch (input.runtime) {\n case 'codex-cli':\n return writeCodexConfig(input)\n case 'cursor':\n return writeJsonRuntimeConfig(input, cursorConfigPath(input.homeDir), 'mcpServers')\n case 'vscode':\n return writeJsonRuntimeConfig(input, vscodeConfigPath(input.homeDir), 'servers')\n case 'claude-desktop':\n return writeJsonRuntimeConfig(input, claudeDesktopConfigPath(input.homeDir), 'mcpServers')\n default:\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: 'manual runtime setup',\n changed: false,\n restartRequired: true,\n messages: ['Runtime config needs to be added manually for this agent environment.'],\n errorCode: 'manual_runtime_setup_required',\n }\n }\n}\n\nexport function buildHostedServer(hostedMcpUrl: string, apiKey: string, runtime: RuntimeId): Record<string, unknown> {\n if (runtime === 'vscode') {\n return {\n type: 'http',\n url: hostedMcpUrl,\n headers: { Authorization: `Bearer ${apiKey}` },\n }\n }\n return {\n url: hostedMcpUrl,\n headers: { Authorization: `Bearer ${apiKey}` },\n }\n}\n\nexport function buildSignerServer(signerPath: string, runtime: RuntimeId): Record<string, unknown> {\n const server = {\n command: 'npx',\n args: ['-y', signerPackageName(), '--credentials', signerPath],\n }\n if (runtime === 'vscode') return { type: 'stdio', ...server }\n return server\n}\n\nexport function mergeJsonMcpConfig(\n existingJson: string | null,\n serverRoot: 'mcpServers' | 'servers',\n hostedServer: Record<string, unknown>,\n signerServer: Record<string, unknown>,\n): string {\n const config = existingJson?.trim() ? parseJsonObject(existingJson) : {}\n const existingRoot = config[serverRoot]\n const servers = existingRoot && typeof existingRoot === 'object' && !Array.isArray(existingRoot)\n ? existingRoot as Record<string, unknown>\n : {}\n config[serverRoot] = {\n ...servers,\n haven: hostedServer,\n 'haven-signer': signerServer,\n }\n return `${JSON.stringify(config, null, 2)}\\n`\n}\n\nexport function mergeCodexToml(existingToml: string, hostedMcpUrl: string, signerPath: string): string {\n let next = removeTomlTable(removeTomlTable(existingToml, 'mcp_servers.haven'), 'mcp_servers.haven_signer')\n next = next.trimEnd()\n const block = [\n '[mcp_servers.haven]',\n `url = ${tomlString(hostedMcpUrl)}`,\n 'bearer_token_env_var = \"HAVEN_TOKEN\"',\n '',\n '[mcp_servers.haven_signer]',\n 'command = \"npx\"',\n `args = [\"-y\", ${tomlString(signerPackageName())}, \"--credentials\", ${tomlString(signerPath)}]`,\n ].join('\\n')\n return `${next ? `${next}\\n\\n` : ''}${block}\\n`\n}\n\nasync function writeJsonRuntimeConfig(\n input: RuntimeConfigInput,\n target: string,\n serverRoot: 'mcpServers' | 'servers',\n): Promise<RuntimeConfigWriteResult> {\n try {\n const existing = await readOptional(target)\n const merged = mergeJsonMcpConfig(\n existing,\n serverRoot,\n buildHostedServer(input.hostedMcpUrl, input.apiKey, input.runtime),\n buildSignerServer(input.signerPath, input.runtime),\n )\n await writeOwnerOnlyText(target, merged)\n return {\n hostedConfigured: true,\n signerConfigured: true,\n target: configTargetLabel(input.runtime),\n changed: existing !== merged,\n restartRequired: input.runtime === 'claude-desktop',\n messages: [`Updated Haven MCP entries in ${configTargetLabel(input.runtime)}.`],\n }\n } catch (err) {\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: configTargetLabel(input.runtime),\n changed: false,\n restartRequired: true,\n messages: [`Could not update ${configTargetLabel(input.runtime)}: ${err instanceof Error ? err.message : String(err)}`],\n errorCode: 'runtime_config_write_failed',\n }\n }\n}\n\nasync function writeCodexConfig(input: RuntimeConfigInput): Promise<RuntimeConfigWriteResult> {\n const target = codexConfigPath(input.homeDir)\n const envTarget = join(input.credentialDirectory, 'identity.env')\n const launchTarget = join(input.credentialDirectory, 'start-codex.sh')\n try {\n const existing = await readOptional(target)\n const merged = mergeCodexToml(existing ?? '', input.hostedMcpUrl, input.signerPath)\n await writeOwnerOnlyText(target, merged)\n await writeOwnerOnlyText(envTarget, `export HAVEN_TOKEN=${shellToken(input.apiKey)}\\n`)\n await writeOwnerExecutableText(\n launchTarget,\n [\n '#!/bin/sh',\n 'set -eu',\n `. ${shellToken(envTarget)}`,\n 'exec codex \"$@\"',\n '',\n ].join('\\n'),\n )\n return {\n hostedConfigured: true,\n signerConfigured: true,\n target: 'Codex CLI config',\n changed: existing !== merged,\n restartRequired: true,\n activationCommand: shellToken(launchTarget),\n messages: [\n 'Updated Haven MCP entries in Codex CLI config.',\n 'Wrote the hosted MCP token to a private env file.',\n `Restart Codex with: ${shellToken(launchTarget)}`,\n ],\n }\n } catch (err) {\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: 'Codex CLI config',\n changed: false,\n restartRequired: true,\n messages: [`Could not update Codex CLI config: ${err instanceof Error ? err.message : String(err)}`],\n errorCode: 'runtime_config_write_failed',\n }\n }\n}\n\nasync function readOptional(path: string): Promise<string | null> {\n try {\n return await readFile(path, 'utf8')\n } catch (err) {\n if (err && typeof err === 'object' && 'code' in err && err.code === 'ENOENT') return null\n throw err\n }\n}\n\nasync function writeOwnerOnlyText(path: string, value: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true, mode: 0o700 })\n await writeFile(path, value, { mode: 0o600 })\n await chmod(path, 0o600).catch(() => undefined)\n}\n\nasync function writeOwnerExecutableText(path: string, value: string): Promise<void> {\n await mkdir(dirname(path), { recursive: true, mode: 0o700 })\n await writeFile(path, value, { mode: 0o700 })\n await chmod(path, 0o700).catch(() => undefined)\n}\n\nfunction parseJsonObject(value: string): Record<string, unknown> {\n const parsed = JSON.parse(value) as unknown\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw new Error('runtime config must be a JSON object')\n }\n return parsed as Record<string, unknown>\n}\n\nfunction removeTomlTable(toml: string, table: string): string {\n const lines = toml.split(/\\r?\\n/)\n const start = `[${table}]`\n const kept: string[] = []\n let skipping = false\n for (const line of lines) {\n const trimmed = line.trim()\n if (trimmed === start) {\n skipping = true\n continue\n }\n if (skipping && trimmed.startsWith('[') && trimmed.endsWith(']')) {\n skipping = false\n }\n if (!skipping) kept.push(line)\n }\n return kept.join('\\n')\n}\n\nfunction tomlString(value: string): string {\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`\n}\n\nfunction shellToken(value: string): string {\n return `'${value.replace(/'/g, `'\\\\''`)}'`\n}\n\nfunction cursorConfigPath(homeDir = homedir()): string {\n return resolve(homeDir, '.cursor', 'mcp.json')\n}\n\nfunction codexConfigPath(homeDir = homedir()): string {\n return resolve(homeDir, '.codex', 'config.toml')\n}\n\nfunction vscodeConfigPath(homeDir = homedir()): string {\n if (platform() === 'darwin') return resolve(homeDir, 'Library', 'Application Support', 'Code', 'User', 'mcp.json')\n if (platform() === 'win32') {\n return resolve(process.env.APPDATA ?? join(homeDir, 'AppData', 'Roaming'), 'Code', 'User', 'mcp.json')\n }\n return resolve(homeDir, '.config', 'Code', 'User', 'mcp.json')\n}\n\nfunction claudeDesktopConfigPath(homeDir = homedir()): string {\n if (platform() === 'darwin') {\n return resolve(homeDir, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json')\n }\n if (platform() === 'win32') {\n return resolve(process.env.APPDATA ?? join(homeDir, 'AppData', 'Roaming'), 'Claude', 'claude_desktop_config.json')\n }\n return resolve(homeDir, '.config', 'Claude', 'claude_desktop_config.json')\n}\n\nfunction configTargetLabel(runtime: RuntimeId): string {\n switch (runtime) {\n case 'cursor':\n return 'Cursor MCP config'\n case 'vscode':\n return 'VS Code MCP config'\n case 'claude-desktop':\n return 'Claude Desktop config'\n default:\n return 'runtime MCP config'\n }\n}\n\nfunction signerPackageName(): string {\n return `@haven_ai/signer@${SIGNER_VERSION}`\n}\n","import { readFile } from 'node:fs/promises'\n\nexport type HostedProbeStatus = 'ok' | 'unauthorized' | 'network_error' | 'bad_response'\n\nexport interface HostedProbeResult {\n status: HostedProbeStatus\n toolCount?: number\n}\n\nexport async function probeHostedMcpTools(\n apiKey: string,\n hostedMcpUrl: string,\n fetchImpl: typeof fetch = fetch,\n): Promise<HostedProbeResult> {\n let response: Response\n try {\n response = await fetchWithTimeout(fetchImpl, hostedMcpUrl, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n Accept: 'application/json, text/event-stream',\n },\n body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/list' }),\n })\n } catch {\n return { status: 'network_error' }\n }\n\n if (response.status === 401 || response.status === 403) return { status: 'unauthorized' }\n if (!response.ok) return { status: 'bad_response' }\n\n try {\n const payload = parseJsonRpcPayload(await response.text())\n if (!payload || payload.error) return { status: 'bad_response' }\n const tools = (payload.result as { tools?: unknown[] } | undefined)?.tools\n return { status: 'ok', toolCount: Array.isArray(tools) ? tools.length : undefined }\n } catch {\n return { status: 'bad_response' }\n }\n}\n\nexport async function probeLocalSignerCredential(signerPath: string): Promise<boolean> {\n try {\n const parsed = JSON.parse(await readFile(signerPath, 'utf8')) as unknown\n return Boolean(\n parsed &&\n typeof parsed === 'object' &&\n 'delegate_key' in parsed &&\n typeof (parsed as { delegate_key?: unknown }).delegate_key === 'string',\n )\n } catch {\n return false\n }\n}\n\ninterface JsonRpcEnvelope {\n result?: unknown\n error?: unknown\n}\n\nfunction parseJsonRpcPayload(raw: string): JsonRpcEnvelope | null {\n const trimmed = raw.trim()\n if (!trimmed) return null\n if (trimmed.startsWith('{')) {\n try {\n return JSON.parse(trimmed) as JsonRpcEnvelope\n } catch {\n return null\n }\n }\n const dataLines = trimmed\n .split(/\\r?\\n/)\n .filter((line) => line.startsWith('data:'))\n .map((line) => line.slice(5).trim())\n for (let i = dataLines.length - 1; i >= 0; i -= 1) {\n try {\n return JSON.parse(dataLines[i]) as JsonRpcEnvelope\n } catch {\n /* try previous SSE frame */\n }\n }\n return null\n}\n\nasync function fetchWithTimeout(fetchImpl: typeof fetch, url: string, init: RequestInit): Promise<Response> {\n const controller = new AbortController()\n const timeout = setTimeout(() => controller.abort(), 3000)\n try {\n return await fetchImpl(url, { ...init, signal: controller.signal })\n } finally {\n clearTimeout(timeout)\n }\n}\n","export type RuntimeId =\n | 'claude-code'\n | 'codex-cli'\n | 'cursor'\n | 'vscode'\n | 'claude-desktop'\n | 'other'\n\nexport type RestartMode = 'restart-session' | 'restart-app' | 'hot-reload' | 'manual'\n\nexport interface RuntimeProfile {\n id: RuntimeId\n label: string\n restartMode: RestartMode\n canWriteRuntimeConfig: boolean\n}\n\nconst RUNTIME_PROFILES: Record<RuntimeId, RuntimeProfile> = {\n 'claude-code': {\n id: 'claude-code',\n label: 'Claude Code',\n restartMode: 'restart-session',\n canWriteRuntimeConfig: true,\n },\n 'codex-cli': {\n id: 'codex-cli',\n label: 'Codex CLI',\n restartMode: 'restart-session',\n canWriteRuntimeConfig: true,\n },\n cursor: {\n id: 'cursor',\n label: 'Cursor',\n restartMode: 'hot-reload',\n canWriteRuntimeConfig: true,\n },\n vscode: {\n id: 'vscode',\n label: 'VS Code',\n restartMode: 'hot-reload',\n canWriteRuntimeConfig: true,\n },\n 'claude-desktop': {\n id: 'claude-desktop',\n label: 'Claude Desktop',\n restartMode: 'restart-app',\n canWriteRuntimeConfig: true,\n },\n other: {\n id: 'other',\n label: 'Other agent runtime',\n restartMode: 'manual',\n canWriteRuntimeConfig: false,\n },\n}\n\nconst RUNTIME_ALIASES: Record<string, RuntimeId> = {\n claude: 'claude-code',\n 'claude-code': 'claude-code',\n claudecode: 'claude-code',\n 'claude_code': 'claude-code',\n codex: 'codex-cli',\n 'codex-cli': 'codex-cli',\n codexcli: 'codex-cli',\n 'codex_cli': 'codex-cli',\n cursor: 'cursor',\n vscode: 'vscode',\n 'vs-code': 'vscode',\n 'vs_code': 'vscode',\n code: 'vscode',\n 'claude-desktop': 'claude-desktop',\n 'claude_desktop': 'claude-desktop',\n claudesktop: 'claude-desktop',\n desktop: 'claude-desktop',\n other: 'other',\n manual: 'other',\n}\n\nexport function runtimeProfile(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): RuntimeProfile {\n return RUNTIME_PROFILES[normalizeRuntime(runtime, env)]\n}\n\nexport function normalizeRuntime(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): RuntimeId {\n const explicit = normalizeRuntimeName(runtime)\n if (explicit) return explicit\n return detectRuntime(env) ?? 'other'\n}\n\nexport function restartRequiredForRuntime(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): boolean {\n const mode = runtimeProfile(runtime, env).restartMode\n return mode === 'restart-session' || mode === 'restart-app'\n}\n\nfunction normalizeRuntimeName(runtime: string | undefined): RuntimeId | null {\n const key = runtime?.trim().toLowerCase()\n if (!key) return null\n return RUNTIME_ALIASES[key.replace(/\\s+/g, '-')] ?? null\n}\n\nfunction detectRuntime(env: NodeJS.ProcessEnv): RuntimeId | null {\n if (env.CLAUDECODE || env.CLAUDE_CODE || env.CLAUDECODE_CWD) return 'claude-code'\n if (env.CODEX_SANDBOX || env.CODEX_HOME || env.CODEX_CWD) return 'codex-cli'\n if (env.VSCODE_CWD || env.VSCODE_IPC_HOOK_CLI || env.TERM_PROGRAM === 'vscode') return 'vscode'\n return null\n}\n","import { readFile } from 'node:fs/promises'\nimport { resolve } from 'node:path'\nimport {\n computeSignerConsentHash,\n createEdgeSigner,\n ensureSignerConsent,\n loadSignerCredentials,\n toolSchemas,\n type SignerConsentDecision,\n type SignerConsentInput,\n type SignerToolName,\n} from '@haven_ai/signer'\n\nexport interface LocalSignerConsentStatus {\n acknowledged: boolean\n hash?: string\n reason?: SignerConsentDecision['reason'] | 'ack_file_missing' | 'ack_file_mismatch'\n error?: string\n}\n\nexport async function acknowledgeLocalSignerConsent(\n signerPath: string,\n log?: (message: string) => void,\n): Promise<LocalSignerConsentStatus> {\n try {\n const input = await buildSignerConsentInput(signerPath)\n const decision = await ensureSignerConsent(input, {\n credentialsPath: signerPath,\n writeAck: true,\n out: log ? { write: (chunk) => writeLogChunk(log, chunk) } : undefined,\n })\n return {\n acknowledged: decision.ok,\n hash: decision.hash,\n reason: decision.reason,\n }\n } catch (err) {\n return {\n acknowledged: false,\n error: err instanceof Error ? err.message : String(err),\n }\n }\n}\n\nexport async function getLocalSignerConsentStatus(signerPath: string): Promise<LocalSignerConsentStatus> {\n try {\n const input = await buildSignerConsentInput(signerPath)\n const hash = computeSignerConsentHash(input)\n const stored = await readSignerAckFile(signerAckPath(signerPath))\n if (stored === hash) {\n return { acknowledged: true, hash, reason: 'ack_file_match' }\n }\n return {\n acknowledged: false,\n hash,\n reason: stored ? 'ack_file_mismatch' : 'ack_file_missing',\n }\n } catch (err) {\n return {\n acknowledged: false,\n error: err instanceof Error ? err.message : String(err),\n }\n }\n}\n\nexport function signerAckPath(signerPath: string): string {\n return resolve(`${signerPath}.signer-ack.json`)\n}\n\nasync function buildSignerConsentInput(signerPath: string): Promise<SignerConsentInput> {\n const credentials = await loadSignerCredentials(signerPath)\n const signer = createEdgeSigner(credentials.delegateKey, {\n x402BindingSigner: credentials.x402BindingSigner,\n })\n return {\n delegateAddress: signer.delegateAddress,\n safeAddress: credentials.safeAddress,\n agentId: credentials.agentId,\n chainId: credentials.chainId,\n network: credentials.network,\n toolNames: Object.keys(toolSchemas) as SignerToolName[],\n }\n}\n\nasync function readSignerAckFile(path: string): Promise<string | null> {\n try {\n const parsed = JSON.parse(await readFile(path, 'utf8')) as { ack?: unknown }\n return typeof parsed.ack === 'string' ? parsed.ack : null\n } catch {\n return null\n }\n}\n\nfunction writeLogChunk(log: (message: string) => void, chunk: string): void {\n const message = String(chunk).trimEnd()\n if (message) log(message)\n}\n","import { execFile } from 'node:child_process'\nimport { promisify } from 'node:util'\nimport { SIGNER_VERSION } from '@haven_ai/signer'\nimport { writeRuntimeConfig } from './config-writers.js'\nimport { probeHostedMcpTools, probeLocalSignerCredential } from './probes.js'\nimport { normalizeRuntime, restartRequiredForRuntime, runtimeProfile, type RuntimeId } from './runtime-registry.js'\nimport {\n acknowledgeLocalSignerConsent,\n getLocalSignerConsentStatus,\n type LocalSignerConsentStatus,\n} from './signer-consent.js'\n\nconst execFileAsync = promisify(execFile)\n\nexport interface RuntimeInstallInput {\n runtime?: string\n hostedMcpUrl: string\n apiKey: string\n signerPath: string\n identityPath: string\n credentialDirectory: string\n environmentLabel?: string\n ackSigner?: boolean\n}\n\nexport interface RuntimeInstallResult {\n runtime: RuntimeId\n hostedMcpConfigured: boolean\n localSignerConfigured: boolean\n probeResult: string\n restartRequired: boolean\n nextUserAction: string\n errorCode?: string\n configTarget?: string\n runtimeVersion?: string\n signerAcknowledged?: boolean\n activationCommand?: string\n messages: string[]\n}\n\nexport interface RuntimeInstallDeps {\n env?: NodeJS.ProcessEnv\n homeDir?: string\n fetch?: typeof fetch\n runCommand?: (command: string, args: string[]) => Promise<void>\n}\n\nexport async function installRuntime(\n input: RuntimeInstallInput,\n deps: RuntimeInstallDeps = {},\n): Promise<RuntimeInstallResult> {\n const runtime = normalizeRuntime(input.runtime, deps.env)\n const profile = runtimeProfile(runtime, deps.env)\n const signerConsentMessages: string[] = []\n const signerConsent = await resolveSignerConsent(input, signerConsentMessages)\n\n if (runtime === 'other') {\n const signerCredentialReady = await probeLocalSignerCredential(input.signerPath)\n const signerReady = signerCredentialReady && signerConsent.acknowledged\n return {\n runtime,\n hostedMcpConfigured: false,\n localSignerConfigured: false,\n probeResult: signerReady\n ? 'manual_runtime_setup_required_local_signer_ready'\n : 'manual_runtime_setup_required_local_signer_unavailable',\n restartRequired: true,\n nextUserAction: 'return_to_haven_for_wallet_approval_then_configure_runtime',\n errorCode: 'manual_runtime_setup_required',\n configTarget: 'manual runtime setup',\n signerAcknowledged: signerConsent.acknowledged,\n messages: [\n ...signerConsentMessages,\n 'Runtime was not recognized. Keep the local credentials and add Haven MCP entries manually after wallet approval.',\n ],\n }\n }\n\n const configResult = runtime === 'claude-code'\n ? await configureClaudeCode(input, deps)\n : await writeRuntimeConfig({\n runtime,\n hostedMcpUrl: input.hostedMcpUrl,\n apiKey: input.apiKey,\n signerPath: input.signerPath,\n credentialDirectory: input.credentialDirectory,\n homeDir: deps.homeDir,\n })\n\n const [hostedProbe, signerCredentialReady] = await Promise.all([\n configResult.hostedConfigured\n ? probeHostedMcpTools(input.apiKey, input.hostedMcpUrl, deps.fetch)\n : Promise.resolve({ status: 'bad_response' as const }),\n probeLocalSignerCredential(input.signerPath),\n ])\n\n const hostedOk = configResult.hostedConfigured && hostedProbe.status !== 'unauthorized'\n const signerOk = configResult.signerConfigured && signerCredentialReady && signerConsent.acknowledged\n const restartRequired = configResult.restartRequired || restartRequiredForRuntime(runtime, deps.env)\n const errorCode = configResult.errorCode ?? signerConsentErrorCode(signerCredentialReady, signerConsent)\n\n return {\n runtime,\n hostedMcpConfigured: hostedOk,\n localSignerConfigured: signerOk,\n probeResult: buildProbeResult(configResult.hostedConfigured, hostedProbe.status, signerOk),\n restartRequired,\n nextUserAction: nextAction(runtime, profile.restartMode, errorCode),\n errorCode,\n configTarget: configResult.target,\n signerAcknowledged: signerConsent.acknowledged,\n activationCommand: configResult.activationCommand,\n messages: [...signerConsentMessages, ...configResult.messages],\n }\n}\n\nexport function runtimeInstallCapabilities(runtime: string | undefined, env: NodeJS.ProcessEnv = process.env): {\n canWriteRuntimeConfig: boolean\n restartRequired: boolean\n} {\n const profile = runtimeProfile(runtime, env)\n return {\n canWriteRuntimeConfig: profile.canWriteRuntimeConfig,\n restartRequired: restartRequiredForRuntime(runtime, env),\n }\n}\n\nasync function configureClaudeCode(\n input: RuntimeInstallInput,\n deps: RuntimeInstallDeps,\n): Promise<{\n hostedConfigured: boolean\n signerConfigured: boolean\n target: string\n changed: boolean\n restartRequired: boolean\n messages: string[]\n errorCode?: string\n activationCommand?: string\n}> {\n const runCommand = deps.runCommand ?? defaultRunCommand\n try {\n await runCommand('claude', [\n 'mcp',\n 'add',\n '--transport',\n 'http',\n 'haven',\n input.hostedMcpUrl,\n '--header',\n `Authorization: Bearer ${input.apiKey}`,\n ])\n await runCommand('claude', [\n 'mcp',\n 'add',\n 'haven-signer',\n '--',\n 'npx',\n '-y',\n signerPackageName(),\n '--credentials',\n input.signerPath,\n ])\n return {\n hostedConfigured: true,\n signerConfigured: true,\n target: 'Claude Code MCP config',\n changed: true,\n restartRequired: true,\n messages: [\n 'Updated Haven MCP entries with Claude Code.',\n 'Restart Claude Code after Haven approval so it can load the Haven tools.',\n ],\n }\n } catch (err) {\n return {\n hostedConfigured: false,\n signerConfigured: false,\n target: 'Claude Code MCP config',\n changed: false,\n restartRequired: true,\n messages: [\n `Could not update Claude Code MCP config: ${err instanceof Error ? err.message : String(err)}`,\n 'Install Claude Code or rerun the Haven setup command inside a Claude Code terminal.',\n ],\n errorCode: 'claude_code_config_failed',\n }\n }\n}\n\nasync function defaultRunCommand(command: string, args: string[]): Promise<void> {\n await execFileAsync(command, args, { timeout: 10_000 })\n}\n\nfunction buildProbeResult(hostedConfigured: boolean, hostedStatus: string, signerReady: boolean): string {\n const hostedPart = hostedConfigured ? `hosted_${hostedStatus}` : 'hosted_not_configured'\n const signerPart = signerReady ? 'local_signer_ready' : 'local_signer_unavailable'\n return `${hostedPart}_${signerPart}`.slice(0, 120)\n}\n\nasync function resolveSignerConsent(\n input: RuntimeInstallInput,\n messages: string[],\n): Promise<LocalSignerConsentStatus> {\n if (input.ackSigner) {\n const status = await acknowledgeLocalSignerConsent(input.signerPath, (message) => messages.push(message))\n if (status.acknowledged) {\n messages.push('Prepared the local Haven signer acknowledgement.')\n } else {\n messages.push('Local Haven signer acknowledgement still needs attention.')\n }\n return status\n }\n return getLocalSignerConsentStatus(input.signerPath)\n}\n\nfunction signerConsentErrorCode(\n signerCredentialReady: boolean,\n signerConsent: LocalSignerConsentStatus,\n): string | undefined {\n if (!signerCredentialReady) return 'local_signer_credential_unavailable'\n if (!signerConsent.acknowledged) return 'local_signer_ack_required'\n return undefined\n}\n\nfunction nextAction(\n runtime: RuntimeId,\n restartMode: 'restart-session' | 'restart-app' | 'hot-reload' | 'manual',\n errorCode?: string,\n): string {\n if (errorCode) return 'return_to_haven_for_wallet_approval_then_finish_runtime_setup'\n if (restartMode === 'hot-reload') return 'return_to_haven_for_wallet_approval'\n if (runtime === 'codex-cli') return 'return_to_haven_for_wallet_approval_then_restart_codex_with_haven_env'\n if (runtime === 'claude-code') return 'return_to_haven_for_wallet_approval_then_restart_claude_code'\n if (restartMode === 'restart-app') return 'return_to_haven_for_wallet_approval_then_restart_app'\n if (restartMode === 'restart-session') return 'return_to_haven_for_wallet_approval_then_restart_agent_session'\n return 'return_to_haven_for_wallet_approval_then_configure_runtime'\n}\n\nfunction signerPackageName(): string {\n return `@haven_ai/signer@${SIGNER_VERSION}`\n}\n","import { createConnectApiClient, type ConnectApiClient, type ResolvedSetup } from './api.js'\nimport {\n agentApiKeyPrefix,\n generateAgentApiKey,\n generateDelegateKey,\n hashAgentApiKey,\n type LocalDelegateKey,\n} from './key.js'\nimport { redactSecrets, shortAddress } from './redact.js'\nimport {\n preflightCredentialStorage,\n writeCredentialFiles,\n type StoredCredentialPaths,\n} from './storage.js'\nimport {\n installRuntime,\n runtimeInstallCapabilities,\n type RuntimeInstallResult,\n} from './runtime-install.js'\n\nexport const CONNECTOR_VERSION = '0.1.1-alpha'\n\nexport interface ConnectOptions {\n setupToken: string\n apiBaseUrl: string\n runtime?: string\n credentialsDir?: string\n environmentLabel?: string\n connectorVersion?: string\n ackSigner?: boolean\n}\n\nexport interface ConnectDeps {\n api?: ConnectApiClient\n generateKey?: () => LocalDelegateKey\n generateApiKey?: () => string\n preflightStorage?: typeof preflightCredentialStorage\n writeCredentials?: typeof writeCredentialFiles\n installRuntime?: typeof installRuntime\n log?: (message: string) => void\n}\n\nexport interface ConnectResult {\n setupId: string\n agentId: string\n delegateAddress: string\n credentialPaths: StoredCredentialPaths\n}\n\nexport async function runConnect(options: ConnectOptions, deps: ConnectDeps = {}): Promise<ConnectResult> {\n const connectorVersion = options.connectorVersion ?? CONNECTOR_VERSION\n const api = deps.api ?? createConnectApiClient(options.apiBaseUrl)\n const log = secureLogger(deps.log ?? ((message) => process.stdout.write(`${message}\\n`)))\n const writeCredentials = deps.writeCredentials ?? writeCredentialFiles\n const preflightStorage = deps.preflightStorage ?? preflightCredentialStorage\n const runRuntimeInstall = deps.installRuntime ?? installRuntime\n const generateKey = deps.generateKey ?? generateDelegateKey\n const generateLocalApiKey = deps.generateApiKey ?? generateAgentApiKey\n const installCapabilities = runtimeInstallCapabilities(options.runtime)\n\n const setup = await api.resolveSetup({\n setupToken: options.setupToken,\n connectorVersion,\n runtime: options.runtime,\n })\n printSetupSummary(setup, log)\n\n await preflightStorage({ baseDir: options.credentialsDir, warn: log })\n log('Checked local credential storage.')\n\n const localKey = generateKey()\n const localApiKey = generateLocalApiKey()\n log('Generated local signing key.')\n log('Generated local Haven API key.')\n const proofSignature = await localKey.signChallenge(setup.challenge.message)\n\n const registration = await api.registerSetup({\n setupToken: options.setupToken,\n connectorVersion,\n runtime: options.runtime,\n challengeId: setup.challenge.id,\n delegateAddress: localKey.address,\n proofSignature,\n apiKeyHash: hashAgentApiKey(localApiKey),\n apiKeyPrefix: agentApiKeyPrefix(localApiKey),\n connectorContext: {\n environment_label: options.environmentLabel ?? 'Local workspace',\n config_target: installCapabilities.canWriteRuntimeConfig\n ? 'agent runtime MCP config'\n : 'local credential files',\n },\n installCapabilities,\n })\n\n log(`Registered signing address with Haven: ${shortAddress(registration.delegate_address)}.`)\n\n const credentialPaths = await writeCredentials({\n baseDir: options.credentialsDir,\n agentId: registration.agent_id,\n apiKey: localApiKey,\n delegateKey: localKey.privateKey,\n safeAddress: setup.haven_wallet.address,\n chainId: setup.haven_wallet.chain_id,\n network: setup.haven_wallet.network,\n apiUrl: options.apiBaseUrl,\n hostedMcpUrl: registration.hosted_mcp_url,\n warn: log,\n })\n log(`Stored Haven identity credential locally: ${credentialPaths.identityPath}`)\n log(`Stored local signer credential locally: ${credentialPaths.signerPath}`)\n\n const runtimeInstall = await runRuntimeInstall({\n runtime: options.runtime,\n hostedMcpUrl: registration.hosted_mcp_url,\n apiKey: localApiKey,\n signerPath: credentialPaths.signerPath,\n identityPath: credentialPaths.identityPath,\n credentialDirectory: credentialPaths.directory,\n environmentLabel: options.environmentLabel ?? 'Local workspace',\n ackSigner: options.ackSigner,\n })\n printRuntimeInstall(runtimeInstall, log)\n\n try {\n await api.updateInstallStatus(registration.setup_id, localApiKey, {\n runtime: runtimeInstall.runtime,\n connectorVersion,\n hostedMcpConfigured: runtimeInstall.hostedMcpConfigured,\n localSignerConfigured: runtimeInstall.localSignerConfigured,\n credentialFilesWritten: true,\n signerAcknowledged: runtimeInstall.signerAcknowledged,\n activationCommandAvailable: Boolean(runtimeInstall.activationCommand),\n probeResult: runtimeInstall.probeResult,\n restartRequired: runtimeInstall.restartRequired,\n nextUserAction: runtimeInstall.nextUserAction,\n errorCode: runtimeInstall.errorCode,\n environmentLabel: options.environmentLabel ?? 'Local workspace',\n })\n } catch (err) {\n log(`Could not report install status to Haven: ${err instanceof Error ? err.message : String(err)}`)\n }\n\n log('Return to Haven to approve the agent rules.')\n if (runtimeInstall.restartRequired) {\n log('Restart this agent session after approval if your runtime loads MCP tools at startup.')\n }\n\n return {\n setupId: registration.setup_id,\n agentId: registration.agent_id,\n delegateAddress: registration.delegate_address,\n credentialPaths,\n }\n}\n\nfunction printSetupSummary(setup: ResolvedSetup, log: (message: string) => void): void {\n log(`Fetched Haven setup for ${setup.agent.name}.`)\n log(`Haven wallet: ${setup.haven_wallet.name} on ${setup.haven_wallet.network}.`)\n if (setup.agent_budget.length > 0) {\n for (const budget of setup.agent_budget) {\n log(\n `Agent budget: ${budget.allowance_amount} atomic ${budget.token_symbol} / ${budget.reset_period_min} minute reset.`,\n )\n }\n }\n log(`Setup challenge expires at ${setup.challenge.expires_at}.`)\n}\n\nfunction secureLogger(log: (message: string) => void): (message: string) => void {\n return (message) => log(redactSecrets(message))\n}\n\nfunction printRuntimeInstall(result: RuntimeInstallResult, log: (message: string) => void): void {\n for (const message of result.messages) log(message)\n if (result.hostedMcpConfigured) {\n log('Configured hosted Haven MCP identity.')\n } else {\n log('Hosted Haven MCP identity still needs runtime setup.')\n }\n if (result.localSignerConfigured) {\n log('Configured local Haven signer.')\n } else {\n log('Local Haven signer still needs runtime setup.')\n }\n}\n","import { CONNECTOR_VERSION, type ConnectOptions } from './runtime.js'\n\nexport interface ParsedCli {\n options: ConnectOptions\n help: boolean\n}\n\nexport function parseArgs(argv: string[], env: NodeJS.ProcessEnv = process.env): ParsedCli {\n const options: Partial<ConnectOptions> = {\n apiBaseUrl: env.HAVEN_API_URL ?? 'http://localhost:3001',\n connectorVersion: CONNECTOR_VERSION,\n }\n let help = false\n\n for (let i = 0; i < argv.length; i += 1) {\n const arg = argv[i]\n if (arg === '--help' || arg === '-h') {\n help = true\n } else if (arg === '--setup' || arg === '--setup-token') {\n options.setupToken = requireValue(argv, ++i, arg)\n } else if (arg === '--api' || arg === '--api-url') {\n options.apiBaseUrl = requireValue(argv, ++i, arg)\n } else if (arg === '--runtime') {\n options.runtime = requireValue(argv, ++i, arg)\n } else if (arg === '--credentials-dir') {\n options.credentialsDir = requireValue(argv, ++i, arg)\n } else if (arg === '--environment-label') {\n options.environmentLabel = requireValue(argv, ++i, arg)\n } else if (arg === '--ack-signer') {\n options.ackSigner = true\n } else if (arg === '--version') {\n process.stdout.write(`${CONNECTOR_VERSION}\\n`)\n process.exit(0)\n } else {\n throw new Error(`Unknown option: ${arg}`)\n }\n }\n\n if (help) {\n return { options: options as ConnectOptions, help }\n }\n\n if (!options.setupToken) {\n throw new Error('Missing --setup <hv_setup_...> setup token.')\n }\n if (!options.apiBaseUrl) {\n throw new Error('Missing --api <Haven API URL>.')\n }\n\n options.apiBaseUrl = options.apiBaseUrl.replace(/\\/+$/, '')\n return { options: options as ConnectOptions, help }\n}\n\nexport function helpText(): string {\n return [\n 'Haven Connect Agent 2 local connector',\n '',\n 'Generates the agent signing key locally, stores it on this machine, and',\n 'sends Haven only the public signing address plus a proof signature.',\n '',\n 'Usage:',\n ' npx -y @haven_ai/connect --setup hv_setup_... --api https://api.haven.example --ack-signer --runtime claude-code',\n '',\n 'Options:',\n ' --setup <token> Short-lived setup token from Haven.',\n ' --api <url> Haven backend API URL. Defaults to HAVEN_API_URL or http://localhost:3001.',\n ' --runtime <name> Agent runtime hint, such as claude-code, codex-cli, cursor, vscode, or claude-desktop.',\n ' --credentials-dir <path> Credential directory fallback. Defaults to ~/.haven/agents.',\n ' --environment-label <text> Non-sensitive label shown in Haven setup review.',\n ' --ack-signer Write the one-time local signer acknowledgement during setup.',\n ' --help Show this help.',\n '',\n 'The connector never prints the private key and never sends it to Haven.',\n ].join('\\n')\n}\n\nfunction requireValue(argv: string[], index: number, option: string): string {\n const value = argv[index]\n if (!value || value.startsWith('--')) {\n throw new Error(`Missing value for ${option}.`)\n }\n return value\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -26,6 +26,8 @@ interface UpdateInstallStatusInput {
|
|
|
26
26
|
hostedMcpConfigured: boolean;
|
|
27
27
|
localSignerConfigured: boolean;
|
|
28
28
|
credentialFilesWritten?: boolean;
|
|
29
|
+
signerAcknowledged?: boolean;
|
|
30
|
+
activationCommandAvailable?: boolean;
|
|
29
31
|
probeResult: string;
|
|
30
32
|
restartRequired: boolean;
|
|
31
33
|
nextUserAction: string;
|
|
@@ -129,6 +131,7 @@ interface RuntimeInstallInput {
|
|
|
129
131
|
identityPath: string;
|
|
130
132
|
credentialDirectory: string;
|
|
131
133
|
environmentLabel?: string;
|
|
134
|
+
ackSigner?: boolean;
|
|
132
135
|
}
|
|
133
136
|
interface RuntimeInstallResult {
|
|
134
137
|
runtime: RuntimeId;
|
|
@@ -140,6 +143,8 @@ interface RuntimeInstallResult {
|
|
|
140
143
|
errorCode?: string;
|
|
141
144
|
configTarget?: string;
|
|
142
145
|
runtimeVersion?: string;
|
|
146
|
+
signerAcknowledged?: boolean;
|
|
147
|
+
activationCommand?: string;
|
|
143
148
|
messages: string[];
|
|
144
149
|
}
|
|
145
150
|
interface RuntimeInstallDeps {
|
|
@@ -154,7 +159,7 @@ declare function runtimeInstallCapabilities(runtime: string | undefined, env?: N
|
|
|
154
159
|
restartRequired: boolean;
|
|
155
160
|
};
|
|
156
161
|
|
|
157
|
-
declare const CONNECTOR_VERSION = "0.1.
|
|
162
|
+
declare const CONNECTOR_VERSION = "0.1.1-alpha";
|
|
158
163
|
interface ConnectOptions {
|
|
159
164
|
setupToken: string;
|
|
160
165
|
apiBaseUrl: string;
|
|
@@ -162,6 +167,7 @@ interface ConnectOptions {
|
|
|
162
167
|
credentialsDir?: string;
|
|
163
168
|
environmentLabel?: string;
|
|
164
169
|
connectorVersion?: string;
|
|
170
|
+
ackSigner?: boolean;
|
|
165
171
|
}
|
|
166
172
|
interface ConnectDeps {
|
|
167
173
|
api?: ConnectApiClient;
|
package/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,8 @@ interface UpdateInstallStatusInput {
|
|
|
26
26
|
hostedMcpConfigured: boolean;
|
|
27
27
|
localSignerConfigured: boolean;
|
|
28
28
|
credentialFilesWritten?: boolean;
|
|
29
|
+
signerAcknowledged?: boolean;
|
|
30
|
+
activationCommandAvailable?: boolean;
|
|
29
31
|
probeResult: string;
|
|
30
32
|
restartRequired: boolean;
|
|
31
33
|
nextUserAction: string;
|
|
@@ -129,6 +131,7 @@ interface RuntimeInstallInput {
|
|
|
129
131
|
identityPath: string;
|
|
130
132
|
credentialDirectory: string;
|
|
131
133
|
environmentLabel?: string;
|
|
134
|
+
ackSigner?: boolean;
|
|
132
135
|
}
|
|
133
136
|
interface RuntimeInstallResult {
|
|
134
137
|
runtime: RuntimeId;
|
|
@@ -140,6 +143,8 @@ interface RuntimeInstallResult {
|
|
|
140
143
|
errorCode?: string;
|
|
141
144
|
configTarget?: string;
|
|
142
145
|
runtimeVersion?: string;
|
|
146
|
+
signerAcknowledged?: boolean;
|
|
147
|
+
activationCommand?: string;
|
|
143
148
|
messages: string[];
|
|
144
149
|
}
|
|
145
150
|
interface RuntimeInstallDeps {
|
|
@@ -154,7 +159,7 @@ declare function runtimeInstallCapabilities(runtime: string | undefined, env?: N
|
|
|
154
159
|
restartRequired: boolean;
|
|
155
160
|
};
|
|
156
161
|
|
|
157
|
-
declare const CONNECTOR_VERSION = "0.1.
|
|
162
|
+
declare const CONNECTOR_VERSION = "0.1.1-alpha";
|
|
158
163
|
interface ConnectOptions {
|
|
159
164
|
setupToken: string;
|
|
160
165
|
apiBaseUrl: string;
|
|
@@ -162,6 +167,7 @@ interface ConnectOptions {
|
|
|
162
167
|
credentialsDir?: string;
|
|
163
168
|
environmentLabel?: string;
|
|
164
169
|
connectorVersion?: string;
|
|
170
|
+
ackSigner?: boolean;
|
|
165
171
|
}
|
|
166
172
|
interface ConnectDeps {
|
|
167
173
|
api?: ConnectApiClient;
|