@hivemind-os/collective-daemon 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-57QD6553.js +803 -0
- package/dist/chunk-57QD6553.js.map +1 -0
- package/dist/chunk-BHN4GOYD.js +1196 -0
- package/dist/chunk-BHN4GOYD.js.map +1 -0
- package/dist/chunk-BJW47ZD5.js +341 -0
- package/dist/chunk-BJW47ZD5.js.map +1 -0
- package/dist/chunk-CJHYQ7RR.js +656 -0
- package/dist/chunk-CJHYQ7RR.js.map +1 -0
- package/dist/chunk-NXIFS427.js +183 -0
- package/dist/chunk-NXIFS427.js.map +1 -0
- package/dist/chunk-Q3V4V7UR.js +305 -0
- package/dist/chunk-Q3V4V7UR.js.map +1 -0
- package/dist/chunk-VHECO532.js +1005 -0
- package/dist/chunk-VHECO532.js.map +1 -0
- package/dist/config-SuloXL2_.d.ts +90 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.js +19 -0
- package/dist/config.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +523 -0
- package/dist/index.js.map +1 -0
- package/dist/ipc/server.d.ts +69 -0
- package/dist/ipc/server.js +8 -0
- package/dist/ipc/server.js.map +1 -0
- package/dist/portal/server.d.ts +72 -0
- package/dist/portal/server.js +10 -0
- package/dist/portal/server.js.map +1 -0
- package/dist/provider/index.d.ts +202 -0
- package/dist/provider/index.js +22 -0
- package/dist/provider/index.js.map +1 -0
- package/dist/relay/index.d.ts +55 -0
- package/dist/relay/index.js +7 -0
- package/dist/relay/index.js.map +1 -0
- package/dist/session-monitor-P9hNAFw4.d.ts +16 -0
- package/dist/state.d.ts +59 -0
- package/dist/state.js +11 -0
- package/dist/state.js.map +1 -0
- package/package.json +72 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/provider/adapters/echo.ts","../src/provider/adapters/local-fn.ts","../src/provider/adapters/mcp-sampling.ts","../src/provider/adapters/subprocess.ts","../src/provider/adapters/webhook.ts","../src/provider/capabilities.ts","../src/provider/runtime.ts","../src/provider/task-queue.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type { ExecutionAdapter } from './interface.js';\n\nconst decoder = new TextDecoder('utf-8', { fatal: true });\nconst encoder = new TextEncoder();\n\nexport class EchoAdapter implements ExecutionAdapter {\n readonly name = 'echo';\n\n async execute(params: {\n taskId: string;\n capability: string;\n inputData: Uint8Array;\n metadata?: Record<string, string>;\n }): Promise<{ resultData: Uint8Array; metadata?: Record<string, string> }> {\n const result = {\n echo: decodeInput(params.inputData),\n taskId: params.taskId,\n capability: params.capability,\n timestamp: Date.now(),\n inputHash: createHash('sha256').update(params.inputData).digest('hex'),\n };\n\n return {\n resultData: encoder.encode(JSON.stringify(result)),\n };\n }\n}\n\nfunction decodeInput(input: Uint8Array): string {\n try {\n return decoder.decode(input);\n } catch {\n return Buffer.from(input).toString('hex');\n }\n}\n","import type { ExecutionAdapter } from './interface.js';\n\nexport type LocalFunction = (input: Uint8Array, metadata?: Record<string, string>) => Promise<Uint8Array>;\n\nexport class LocalFunctionAdapter implements ExecutionAdapter {\n readonly name = 'local-function';\n\n constructor(private readonly fn: LocalFunction) {}\n\n async execute(params: {\n taskId: string;\n capability: string;\n inputData: Uint8Array;\n metadata?: Record<string, string>;\n }): Promise<{ resultData: Uint8Array; metadata?: Record<string, string> }> {\n return {\n resultData: await this.fn(params.inputData, params.metadata),\n };\n }\n}\n","import type { CreateMessageRequest, CreateMessageResult } from '@modelcontextprotocol/sdk/types.js';\n\nimport type { ExecutionAdapter } from './interface.js';\n\n/**\n * Narrow interface for MCP sampling. The provider runtime supplies an implementation\n * that looks up the correct connected MCP client and sends the sampling request.\n * This avoids exposing the full MCP Server to adapter code.\n */\nexport type McpSamplingFn = (\n appName: string,\n params: CreateMessageRequest['params'],\n) => Promise<CreateMessageResult>;\n\nexport interface McpSamplingAdapterConfig {\n appName: string;\n systemPrompt: string;\n maxTokens?: number;\n modelHint?: string;\n}\n\nconst DEFAULT_MAX_TOKENS = 4096;\nconst decoder = new TextDecoder('utf-8', { fatal: true });\nconst encoder = new TextEncoder();\n\nexport class McpSamplingAdapter implements ExecutionAdapter {\n readonly name = 'mcp-sampling';\n private readonly appName: string;\n private readonly systemPrompt: string;\n private readonly maxTokens: number;\n private readonly modelHint: string | undefined;\n\n constructor(\n config: McpSamplingAdapterConfig,\n private readonly sample: McpSamplingFn,\n ) {\n if (!config.appName || config.appName.trim().length === 0) {\n throw new Error('MCP sampling adapter requires a non-empty appName');\n }\n if (!config.systemPrompt || config.systemPrompt.trim().length === 0) {\n throw new Error('MCP sampling adapter requires a non-empty systemPrompt');\n }\n\n this.appName = config.appName.trim();\n this.systemPrompt = config.systemPrompt;\n this.maxTokens = config.maxTokens ?? DEFAULT_MAX_TOKENS;\n this.modelHint = config.modelHint;\n }\n\n async execute(params: {\n taskId: string;\n capability: string;\n inputData: Uint8Array;\n metadata?: Record<string, string>;\n }): Promise<{ resultData: Uint8Array; metadata?: Record<string, string> }> {\n let inputText: string;\n try {\n inputText = decoder.decode(params.inputData);\n } catch {\n throw new Error('MCP sampling adapter requires valid UTF-8 input');\n }\n\n const samplingParams: CreateMessageRequest['params'] = {\n messages: [\n {\n role: 'user',\n content: { type: 'text', text: inputText },\n },\n ],\n systemPrompt: this.systemPrompt,\n maxTokens: this.maxTokens,\n ...(this.modelHint\n ? { modelPreferences: { hints: [{ name: this.modelHint }] } }\n : {}),\n };\n\n const result = await this.sample(this.appName, samplingParams);\n\n const text = extractTextContent(result);\n if (text === undefined) {\n throw new Error('MCP sampling response contained no text content');\n }\n\n return {\n resultData: encoder.encode(text),\n metadata: {\n model: result.model,\n ...(result.stopReason ? { stopReason: result.stopReason } : {}),\n },\n };\n }\n}\n\nfunction extractTextContent(result: CreateMessageResult): string | undefined {\n const content = result.content;\n\n if (Array.isArray(content)) {\n for (const block of content) {\n if (block.type === 'text') {\n return block.text;\n }\n }\n return undefined;\n }\n\n if (content.type === 'text') {\n return content.text;\n }\n\n return undefined;\n}\n","import { spawn } from 'node:child_process';\n\nimport type { ExecutionAdapter } from './interface.js';\n\nexport interface SubprocessAdapterConfig {\n command: string;\n args?: string[];\n cwd?: string;\n env?: Record<string, string>;\n timeoutMs?: number;\n maxOutputBytes?: number;\n}\n\nconst DEFAULT_TIMEOUT_MS = 60_000;\nconst DEFAULT_MAX_OUTPUT_BYTES = 10 * 1024 * 1024; // 10 MB\n\nexport class SubprocessAdapter implements ExecutionAdapter {\n readonly name = 'subprocess';\n private readonly command: string;\n private readonly args: string[];\n private readonly cwd: string | undefined;\n private readonly env: Record<string, string>;\n private readonly timeoutMs: number;\n private readonly maxOutputBytes: number;\n\n constructor(config: SubprocessAdapterConfig) {\n if (!config.command || config.command.trim().length === 0) {\n throw new Error('Subprocess adapter requires a non-empty command');\n }\n\n this.command = config.command;\n this.args = config.args ?? [];\n this.cwd = config.cwd;\n this.env = { ...config.env };\n this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxOutputBytes = config.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;\n }\n\n async execute(params: {\n taskId: string;\n capability: string;\n inputData: Uint8Array;\n metadata?: Record<string, string>;\n }): Promise<{ resultData: Uint8Array; metadata?: Record<string, string> }> {\n return new Promise((resolve, reject) => {\n const child = spawn(this.command, this.args, {\n cwd: this.cwd,\n shell: false,\n stdio: ['pipe', 'pipe', 'pipe'],\n env: {\n ...process.env,\n ...this.env,\n COLLECTIVE_TASK_ID: params.taskId,\n COLLECTIVE_CAPABILITY: params.capability,\n },\n });\n\n const stdout: Buffer[] = [];\n const stderr: Buffer[] = [];\n let stdoutSize = 0;\n let stderrSize = 0;\n let settled = false;\n\n const settle = (fn: () => void) => {\n if (!settled) {\n settled = true;\n clearTimeout(timer);\n fn();\n }\n };\n\n const timer = setTimeout(() => {\n settle(() => {\n child.kill('SIGKILL');\n reject(new Error(`Subprocess timed out after ${this.timeoutMs}ms`));\n });\n }, this.timeoutMs);\n\n child.stdout.on('data', (chunk: Buffer) => {\n stdoutSize += chunk.length;\n if (stdoutSize > this.maxOutputBytes) {\n settle(() => {\n child.kill('SIGKILL');\n reject(new Error(`Subprocess stdout exceeded ${this.maxOutputBytes} byte limit`));\n });\n return;\n }\n stdout.push(chunk);\n });\n\n child.stderr.on('data', (chunk: Buffer) => {\n stderrSize += chunk.length;\n if (stderrSize <= 64 * 1024) {\n stderr.push(chunk);\n }\n });\n\n child.on('error', (error) => {\n settle(() => reject(new Error(`Subprocess failed to start: ${error.message}`)));\n });\n\n child.on('close', (code) => {\n settle(() => {\n if (code !== 0) {\n const stderrText = Buffer.concat(stderr).toString('utf-8').trim();\n const truncated = stderrText.length > 1024 ? stderrText.slice(0, 1024) + '...' : stderrText;\n reject(new Error(`Subprocess exited with code ${code ?? 'null'}${truncated ? `: ${truncated}` : ''}`));\n return;\n }\n\n resolve({\n resultData: new Uint8Array(Buffer.concat(stdout)),\n });\n });\n });\n\n child.stdin.on('error', (error) => {\n settle(() => reject(new Error(`Subprocess stdin error: ${error.message}`)));\n });\n child.stdin.end(Buffer.from(params.inputData));\n });\n }\n}\n","import type { ExecutionAdapter } from './interface.js';\n\nexport interface WebhookAdapterConfig {\n url: string;\n method?: string;\n headers?: Record<string, string>;\n timeoutMs?: number;\n maxResponseBytes?: number;\n}\n\nconst DEFAULT_TIMEOUT_MS = 30_000;\nconst DEFAULT_MAX_RESPONSE_BYTES = 10 * 1024 * 1024; // 10 MB\nconst BODY_METHODS = new Set(['POST', 'PUT', 'PATCH']);\n\nexport class WebhookAdapter implements ExecutionAdapter {\n readonly name = 'webhook';\n private readonly url: URL;\n private readonly method: string;\n private readonly headers: Record<string, string>;\n private readonly timeoutMs: number;\n private readonly maxResponseBytes: number;\n\n constructor(config: WebhookAdapterConfig) {\n this.url = parseUrl(config.url);\n this.method = (config.method ?? 'POST').toUpperCase();\n if (!BODY_METHODS.has(this.method)) {\n throw new Error(`Webhook method must be one of POST, PUT, PATCH (got ${this.method})`);\n }\n this.headers = { ...config.headers };\n this.timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxResponseBytes = config.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES;\n }\n\n async execute(params: {\n taskId: string;\n capability: string;\n inputData: Uint8Array;\n metadata?: Record<string, string>;\n }): Promise<{ resultData: Uint8Array; metadata?: Record<string, string> }> {\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const response = await fetch(this.url, {\n method: this.method,\n headers: {\n 'Content-Type': 'application/octet-stream',\n 'X-Mesh-Task-Id': params.taskId,\n 'X-Mesh-Capability': params.capability,\n ...this.headers,\n },\n body: params.inputData,\n signal: controller.signal,\n redirect: 'manual',\n });\n\n if (response.status >= 300 && response.status < 400) {\n throw new Error(`Webhook returned redirect (HTTP ${response.status}) which is not followed for security`);\n }\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n const truncated = body.length > 256 ? body.slice(0, 256) + '...' : body;\n throw new Error(`Webhook returned HTTP ${response.status}: ${truncated}`);\n }\n\n const resultData = await readLimitedResponse(response, this.maxResponseBytes);\n return { resultData };\n } catch (error: unknown) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new Error(`Webhook timed out after ${this.timeoutMs}ms`);\n }\n throw error;\n } finally {\n clearTimeout(timer);\n }\n }\n}\n\nasync function readLimitedResponse(response: Response, maxBytes: number): Promise<Uint8Array> {\n const contentLength = response.headers.get('content-length');\n if (contentLength && Number(contentLength) > maxBytes) {\n throw new Error(`Webhook response too large: ${contentLength} bytes (max ${maxBytes})`);\n }\n\n const chunks: Uint8Array[] = [];\n let total = 0;\n\n if (!response.body) {\n return new Uint8Array(0);\n }\n\n for await (const chunk of response.body as AsyncIterable<Uint8Array>) {\n total += chunk.byteLength;\n if (total > maxBytes) {\n throw new Error(`Webhook response exceeded ${maxBytes} byte limit`);\n }\n chunks.push(chunk);\n }\n\n const result = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n return result;\n}\n\nfunction parseUrl(input: string): URL {\n let url: URL;\n try {\n url = new URL(input);\n } catch {\n throw new Error(`Invalid webhook URL: ${input}`);\n }\n\n if (url.protocol !== 'http:' && url.protocol !== 'https:') {\n throw new Error(`Webhook URL must use http or https: ${input}`);\n }\n\n return url;\n}\n","import type { DaemonFullConfig } from '../config.js';\n\nexport interface ProviderCapabilityConfig {\n name: string;\n description: string;\n version: string;\n priceMist: number;\n currency?: string;\n adapter: string;\n adapterConfig?: Record<string, unknown>;\n}\n\nexport interface ProviderConfig {\n enabled: boolean;\n capabilities: ProviderCapabilityConfig[];\n maxConcurrency: number;\n autoRegister: boolean;\n}\n\nexport function loadProviderConfig(config: DaemonFullConfig): ProviderConfig | null {\n if (!config.provider) {\n return null;\n }\n\n return {\n enabled: config.provider.enabled,\n capabilities: config.provider.capabilities.map((capability) => ({\n name: capability.name,\n description: capability.description,\n version: capability.version,\n priceMist: capability.priceMist,\n currency: capability.currency,\n adapter: capability.adapter,\n adapterConfig: capability.adapterConfig,\n })),\n maxConcurrency: Math.max(1, config.provider.maxConcurrency ?? 1),\n autoRegister: config.provider.autoRegister ?? false,\n };\n}\n","import { randomUUID } from 'node:crypto';\n\nimport pino from 'pino';\n\nimport {\n EventSubscription,\n SqliteCursorStore,\n UsageMeter,\n createMeteredResultEnvelope,\n parseEncryptedPayload,\n parseRawEvent,\n serializeMeteredResultEnvelope,\n splitIntoMeteringUnits,\n} from '@hivemind-os/collective-core';\nimport { PaymentRail, PaymentScheme, type Capability, type RelayEndpoint, type Task, type TaskPostedEvent } from '@hivemind-os/collective-types';\nimport type { SuiEvent } from '@mysten/sui/client';\n\nimport type { DaemonFullConfig } from '../config.js';\nimport { RelayClient, type RelayClientConfig } from '../relay/relay-client.js';\nimport type { DaemonState } from '../state.js';\nimport { EchoAdapter } from './adapters/echo.js';\nimport type { ExecutionAdapter } from './adapters/interface.js';\nimport { LocalFunctionAdapter, type LocalFunction } from './adapters/local-fn.js';\nimport { McpSamplingAdapter, type McpSamplingFn } from './adapters/mcp-sampling.js';\nimport { SubprocessAdapter } from './adapters/subprocess.js';\nimport { WebhookAdapter } from './adapters/webhook.js';\nimport type { ProviderCapabilityConfig, ProviderConfig } from './capabilities.js';\nimport { TaskQueue } from './task-queue.js';\n\nconst logger = pino({ name: '@hivemind-os/collective-daemon:provider' });\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\n\nexport class ProviderRuntime {\n private subscription?: EventSubscription;\n private cursorStore?: SqliteCursorStore;\n private readonly taskQueue: TaskQueue;\n private readonly adapters = new Map<string, ExecutionAdapter>();\n private readonly capabilityConfigs = new Map<string, ProviderCapabilityConfig>();\n private readonly relayClients: RelayClient[] = [];\n private registeredCapabilities: string[] = [];\n private chainOperations: Promise<void> = Promise.resolve();\n private ownAgentCardId?: string;\n\n constructor(\n private readonly params: {\n state: DaemonState;\n providerConfig: ProviderConfig;\n cursorDbPath: string;\n relayConfig?: DaemonFullConfig['relay'];\n relayClientFactory?: (config: RelayClientConfig, identity: DaemonState['relayAuthProvider']) => RelayClient;\n mcpSamplingFn?: McpSamplingFn;\n broadcastNotification?: (method: string, params?: unknown) => void;\n },\n ) {\n this.taskQueue = new TaskQueue(params.providerConfig.maxConcurrency);\n }\n\n async start(): Promise<void> {\n if (this.subscription) {\n return;\n }\n\n this.initializeAdapters();\n await this.connectRelays();\n\n if (this.params.providerConfig.autoRegister) {\n await this.registerAgentCard();\n }\n\n await this.resolveOwnAgentCardId();\n\n const eventType = `${this.params.state.network.packageId}::task::TaskPosted`;\n this.cursorStore = new SqliteCursorStore(this.params.cursorDbPath);\n this.subscription = new EventSubscription({\n suiClient: this.params.state.suiClient,\n eventType,\n cursorStore: this.cursorStore,\n pollIntervalMs: 2_000,\n onEvent: async (event) => {\n await this.handleRawEvent(event);\n },\n onError: (error) => {\n logger.error({ err: error }, 'Provider subscription polling failed');\n },\n });\n this.subscription.start();\n }\n\n async stop(): Promise<void> {\n this.subscription?.stop();\n this.subscription = undefined;\n await Promise.all(this.relayClients.splice(0).map((client) => client.disconnect()));\n await this.taskQueue.drain();\n this.cursorStore?.close();\n this.cursorStore = undefined;\n }\n\n private async connectRelays(): Promise<void> {\n const relayConfig = this.params.relayConfig;\n if (!relayConfig?.enabled || !relayConfig.providerMode || !relayConfig.autoConnect) {\n return;\n }\n\n const factory = this.params.relayClientFactory ?? ((config, identity) => new RelayClient(config, identity));\n for (const endpoint of relayConfig.endpoints) {\n const client = factory(\n {\n relayUrl: endpoint.url,\n relayDid: endpoint.relayDid,\n reconnectIntervalMs: relayConfig.reconnectIntervalMs,\n heartbeatIntervalMs: relayConfig.heartbeatIntervalMs,\n },\n this.params.state.relayAuthProvider,\n );\n\n client.onTaskRequest(async (request) => {\n await client.sendProgress(request.taskId ?? 'relay-task', 0.1, 'Task accepted by provider runtime');\n const resultData = await this.executeLocalTask(\n request.taskId ?? randomUUID(),\n request.capability,\n encodeRelayInput(request.input),\n );\n await client.sendProgress(request.taskId ?? 'relay-task', 1, 'Task completed');\n\n return {\n taskId: request.taskId ?? randomUUID(),\n providerDid: this.params.state.did,\n sequence: 0,\n result: parseExecutionResult(resultData),\n };\n });\n\n await client.connect(this.registeredCapabilities);\n this.relayClients.push(client);\n }\n }\n\n private async handleRawEvent(event: SuiEvent): Promise<void> {\n const parsed = parseRawEvent(event, this.params.state.network.packageId);\n if (parsed?.type !== 'task.posted') {\n return;\n }\n\n await this.handleTaskPosted(parsed);\n }\n\n private async handleTaskPosted(event: TaskPostedEvent): Promise<void> {\n const capabilityKey = normalizeCapability(event.task.capability);\n if (!this.registeredCapabilities.some((registered) => normalizeCapability(registered) === capabilityKey)) {\n return;\n }\n\n if (this.taskQueue.isFull) {\n logger.warn({ taskId: event.task.id, capability: event.task.capability }, 'Provider queue is full');\n return;\n }\n\n // Notify connected MCP clients of inbound task request\n this.params.broadcastNotification?.('notifications/mesh/inbound_task', {\n taskId: event.task.id,\n capability: event.task.capability,\n requester: event.task.requester,\n priceMist: event.task.price.toString(),\n });\n\n const queued = await this.taskQueue.enqueue(event.task.id, async () => {\n try {\n await this.processTask(event.task);\n } catch (error) {\n logger.error({ err: error, taskId: event.task.id }, 'Task processing failed');\n }\n });\n\n if (!queued) {\n logger.warn({ taskId: event.task.id }, 'Task was not queued');\n }\n }\n\n private async processTask(task: Task): Promise<void> {\n const encryption = this.params.state.encryption ?? { enabled: false, requireEncryption: false };\n\n await this.runChainOperation(async () => {\n await this.params.state.taskClient.acceptTask({\n taskId: task.id,\n keypair: this.params.state.keypair,\n });\n });\n\n const rawInput = await this.params.state.blobStore.fetch(task.inputBlobId);\n if (!rawInput) {\n throw new Error(`Input blob ${task.inputBlobId} was not found.`);\n }\n\n const encryptedInput = parseEncryptedPayload(rawInput);\n if (encryption.requireEncryption && !encryptedInput) {\n throw new Error(`Task ${task.id} is missing an encrypted input payload.`);\n }\n\n const inputData = encryptedInput\n ? await fetchDecryptedPayload(this.params.state.blobStore, task.inputBlobId)\n : rawInput;\n const result = await this.executeLocalTask(task.id, task.capability, inputData);\n\n const requesterCard = await this.params.state.registryClient.getAgentCardByOwner(task.requester);\n const requesterEncryptionKey = decodeHexKey(requesterCard?.encryptionPublicKey);\n if (encryption.requireEncryption && !requesterEncryptionKey) {\n throw new Error(`Task ${task.id} requester does not publish an encryption key.`);\n }\n\n const completionPayload = prepareCompletionPayload(task, result);\n const storedResult = encryption.enabled && requesterEncryptionKey\n ? await storeEncryptedPayload(this.params.state.blobStore, completionPayload.resultData, requesterEncryptionKey)\n : await this.params.state.blobStore.store(completionPayload.resultData);\n\n await this.runChainOperation(async () => {\n if (completionPayload.metered) {\n await this.params.state.taskClient.completeMeteredTask({\n taskId: task.id,\n resultBlobId: storedResult.blobId,\n meteredUnits: completionPayload.metered.actualUnits,\n verificationHash: completionPayload.metered.verificationHash,\n keypair: this.params.state.keypair,\n providerCardId: this.ownAgentCardId,\n });\n return;\n }\n\n await this.params.state.taskClient.completeTask({\n taskId: task.id,\n resultBlobId: storedResult.blobId,\n keypair: this.params.state.keypair,\n providerCardId: this.ownAgentCardId,\n });\n });\n }\n\n private async executeLocalTask(taskId: string, capability: string, inputData: Uint8Array): Promise<Uint8Array> {\n const adapter = this.adapters.get(normalizeCapability(capability));\n if (!adapter) {\n throw new Error(`No adapter configured for capability ${capability}.`);\n }\n\n const result = await adapter.execute({\n taskId,\n capability,\n inputData,\n });\n\n return result.resultData;\n }\n\n private async runChainOperation<T>(operation: () => Promise<T>): Promise<T> {\n const pending = this.chainOperations.then(operation, operation);\n this.chainOperations = pending.then(\n () => undefined,\n () => undefined,\n );\n return pending;\n }\n\n private initializeAdapters(): void {\n this.adapters.clear();\n this.capabilityConfigs.clear();\n this.registeredCapabilities = [];\n\n const deps: AdapterDeps = {\n mcpSamplingFn: this.params.mcpSamplingFn,\n };\n\n for (const capability of this.params.providerConfig.capabilities) {\n try {\n const key = normalizeCapability(capability.name);\n const adapter = createAdapter(capability, deps);\n this.adapters.set(key, adapter);\n this.capabilityConfigs.set(key, capability);\n this.registeredCapabilities.push(capability.name);\n } catch (error) {\n logger.warn({ err: error, capability: capability.name }, 'Skipping invalid provider capability');\n }\n }\n }\n\n private async registerAgentCard(): Promise<void> {\n const encryption = this.params.state.encryption ?? { enabled: false, requireEncryption: false };\n const capabilities = this.params.providerConfig.capabilities\n .filter((capability) => this.capabilityConfigs.has(normalizeCapability(capability.name)))\n .map((capability) => toCapability(capability, this.hasRelaySupport));\n\n if (capabilities.length === 0) {\n logger.warn('Skipping auto-registration because no provider capabilities are available');\n return;\n }\n\n try {\n const registration = await this.params.state.registryClient.registerAgent({\n name: 'Agentic Mesh Provider',\n description: `Auto-registered provider for ${this.params.state.did}`,\n did: this.params.state.did,\n capabilities,\n endpoint: this.registrationEndpoint,\n encryptionPublicKey: encryption.enabled\n ? this.params.state.encryptionKeyPair?.publicKey\n : undefined,\n keypair: this.params.state.keypair,\n });\n this.ownAgentCardId = registration.agentCardId;\n const card = await this.params.state.registryClient.getAgentCard(registration.agentCardId);\n if (card) {\n this.params.state.agentCache.upsertAgent({\n ...card,\n endpoint: this.registrationEndpoint,\n relayEndpoints: this.relayMetadata,\n capabilities,\n });\n }\n logger.info({ agentCardId: registration.agentCardId }, 'Provider agent card registered');\n } catch (error) {\n logger.error({ err: error }, 'Provider auto-registration failed');\n }\n }\n\n private async resolveOwnAgentCardId(): Promise<void> {\n const cached = this.params.state.agentCache.getAgentByDID?.(this.params.state.did);\n if (cached?.id) {\n this.ownAgentCardId = cached.id;\n return;\n }\n\n const discovered = await this.params.state.registryClient.findAgentByDid?.(this.params.state.did);\n if (discovered?.id) {\n this.ownAgentCardId = discovered.id;\n this.params.state.agentCache.upsertAgent(discovered);\n }\n }\n\n private get hasRelaySupport(): boolean {\n return this.relayClients.length > 0 && this.relayMetadata.length > 0;\n }\n\n private get relayMetadata(): RelayEndpoint[] {\n const relayConfig = this.params.relayConfig;\n if (!relayConfig?.enabled || !relayConfig.providerMode) {\n return [];\n }\n\n return relayConfig.endpoints.map(\n (endpoint): RelayEndpoint => ({\n relayDid: endpoint.relayDid as DaemonState['did'] | undefined,\n endpoint: endpoint.url,\n modes: ['sync', 'streaming', 'fallback'],\n }),\n );\n }\n\n private get registrationEndpoint(): string {\n const relay = this.relayMetadata[0];\n if (!relay) {\n return `mesh://agent/${this.params.state.did}`;\n }\n\n return relay.endpoint.replace(/^wss:/i, 'https:').replace(/^ws:/i, 'http:').replace(/\\/v1\\/ws$/i, '');\n }\n}\n\ninterface AdapterDeps {\n mcpSamplingFn?: McpSamplingFn;\n}\n\nfunction createAdapter(capability: ProviderCapabilityConfig, deps: AdapterDeps): ExecutionAdapter {\n const config = capability.adapterConfig ?? {};\n\n switch (capability.adapter) {\n case 'echo':\n return new EchoAdapter();\n case 'local-function': {\n const fnCandidate = config.fn ?? config.function;\n if (typeof fnCandidate !== 'function') {\n throw new Error(`Capability ${capability.name} is missing a local function adapter.`);\n }\n return new LocalFunctionAdapter(fnCandidate as LocalFunction);\n }\n case 'webhook':\n return new WebhookAdapter({\n url: requireString(config.url, 'webhook url'),\n method: optionalString(config.method),\n headers: optionalStringRecord(config.headers),\n timeoutMs: optionalNumber(config.timeoutMs),\n maxResponseBytes: optionalNumber(config.maxResponseBytes),\n });\n case 'subprocess':\n return new SubprocessAdapter({\n command: requireString(config.command, 'subprocess command'),\n args: optionalStringArray(config.args),\n cwd: optionalString(config.cwd),\n env: optionalStringRecord(config.env),\n timeoutMs: optionalNumber(config.timeoutMs),\n maxOutputBytes: optionalNumber(config.maxOutputBytes),\n });\n case 'mcp-sampling': {\n if (!deps.mcpSamplingFn) {\n throw new Error('MCP sampling adapter requires an active IPC server with sampling support.');\n }\n return new McpSamplingAdapter(\n {\n appName: requireString(config.appName, 'mcp-sampling appName'),\n systemPrompt: requireString(config.systemPrompt, 'mcp-sampling systemPrompt'),\n maxTokens: optionalNumber(config.maxTokens),\n modelHint: optionalString(config.modelHint),\n },\n deps.mcpSamplingFn,\n );\n }\n default:\n throw new Error(`Unsupported execution adapter: ${capability.adapter}`);\n }\n}\n\nfunction requireString(value: unknown, label: string): string {\n if (typeof value !== 'string' || value.trim().length === 0) {\n throw new Error(`Missing required config field: ${label}`);\n }\n return value;\n}\n\nfunction optionalString(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined;\n}\n\nfunction optionalNumber(value: unknown): number | undefined {\n return typeof value === 'number' ? value : undefined;\n}\n\nfunction optionalStringArray(value: unknown): string[] | undefined {\n if (!Array.isArray(value)) return undefined;\n return value.filter((item): item is string => typeof item === 'string');\n}\n\nfunction optionalStringRecord(value: unknown): Record<string, string> | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const result: Record<string, string> = {};\n for (const [k, v] of Object.entries(value)) {\n if (typeof v === 'string') result[k] = v;\n }\n return result;\n}\n\nfunction toCapability(capability: ProviderCapabilityConfig, hasRelaySupport: boolean): Capability {\n return {\n name: capability.name,\n description: capability.description,\n version: capability.version,\n pricing: {\n rail: PaymentRail.SUI_ESCROW,\n amount: BigInt(capability.priceMist),\n currency: capability.currency ?? 'MIST',\n },\n executionMode: hasRelaySupport ? 'sync' : 'async',\n paymentRails: hasRelaySupport\n ? [PaymentRail.SUI_TRANSFER, PaymentRail.X402_BASE, PaymentRail.SUI_ESCROW]\n : [PaymentRail.SUI_ESCROW],\n };\n}\n\nfunction normalizeCapability(capability: string): string {\n return capability.trim().toLowerCase();\n}\n\nfunction prepareCompletionPayload(task: Task, resultData: Uint8Array): {\n resultData: Uint8Array;\n metered?: {\n actualUnits: number;\n verificationHash: string;\n };\n} {\n if (task.paymentScheme !== PaymentScheme.UPTO && task.paymentScheme !== PaymentScheme.STREAM) {\n return { resultData };\n }\n\n const meter = new UsageMeter({\n taskId: task.id,\n maxPrice: task.maxPrice ?? task.price,\n unitPrice: task.unitPrice ?? 0n,\n });\n for (const unit of splitIntoMeteringUnits(resultData)) {\n meter.recordUnit(unit);\n }\n\n const envelope = createMeteredResultEnvelope(resultData, meter.getProof());\n return {\n resultData: serializeMeteredResultEnvelope(envelope),\n metered: {\n actualUnits: meter.getActualUnits(),\n verificationHash: meter.getVerificationHash(),\n },\n };\n}\n\nfunction encodeRelayInput(input: unknown): Uint8Array {\n return encoder.encode(typeof input === 'string' ? input : JSON.stringify(input));\n}\n\ninterface EncryptedBlobStoreLike {\n storeEncrypted(data: Uint8Array, recipientPublicKey: Uint8Array): Promise<{ blobId: string; hash: string }>;\n fetchDecrypted(blobId: string): Promise<Uint8Array | null>;\n}\n\nfunction isEncryptedBlobStore(blobStore: DaemonState['blobStore']): blobStore is DaemonState['blobStore'] & EncryptedBlobStoreLike {\n return typeof (blobStore as Partial<EncryptedBlobStoreLike>).storeEncrypted === 'function'\n && typeof (blobStore as Partial<EncryptedBlobStoreLike>).fetchDecrypted === 'function';\n}\n\nasync function fetchDecryptedPayload(blobStore: DaemonState['blobStore'], blobId: string): Promise<Uint8Array> {\n if (!isEncryptedBlobStore(blobStore)) {\n throw new Error('Encrypted payloads require an encrypted blobstore.');\n }\n\n const data = await blobStore.fetchDecrypted(blobId);\n if (!data) {\n throw new Error(`Input blob ${blobId} was not found.`);\n }\n\n return data;\n}\n\nasync function storeEncryptedPayload(\n blobStore: DaemonState['blobStore'],\n data: Uint8Array,\n recipientPublicKey: Uint8Array,\n): Promise<{ blobId: string; hash: string }> {\n if (!isEncryptedBlobStore(blobStore)) {\n throw new Error('Encrypted payloads require an encrypted blobstore.');\n }\n\n return await blobStore.storeEncrypted(data, recipientPublicKey);\n}\n\nfunction decodeHexKey(value?: string): Uint8Array | null {\n if (!value || value.length !== 64 || !/^[a-f0-9]+$/i.test(value)) {\n return null;\n }\n\n return new Uint8Array(Buffer.from(value, 'hex'));\n}\n\nfunction parseExecutionResult(resultData: Uint8Array): unknown {\n const text = decoder.decode(resultData);\n try {\n return JSON.parse(text) as unknown;\n } catch {\n return text;\n }\n}\n","export class TaskQueue {\n private readonly running = new Map<string, Promise<void>>();\n\n constructor(private readonly maxConcurrency: number = 1) {}\n\n async enqueue(taskId: string, work: () => Promise<void>): Promise<boolean> {\n if (this.isFull || this.running.has(taskId)) {\n return false;\n }\n\n const runPromise = Promise.resolve()\n .then(work)\n .finally(() => {\n this.running.delete(taskId);\n });\n\n this.running.set(taskId, runPromise);\n return true;\n }\n\n get activeCount(): number {\n return this.running.size;\n }\n\n get isFull(): boolean {\n return this.activeCount >= this.maxConcurrency;\n }\n\n async drain(): Promise<void> {\n while (this.running.size > 0) {\n await Promise.allSettled(this.running.values());\n }\n }\n}\n"],"mappings":"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","names":["decoder","encoder","DEFAULT_TIMEOUT_MS","encoder","decoder"]}
|