@hivemind-os/collective-mcp-server 0.2.4 → 0.2.6
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/.turbo/turbo-build.log +4 -4
- package/dist/index.js +21 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +23 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -6,9 +6,9 @@ $ tsup
|
|
|
6
6
|
[34mCLI[39m Target: es2022
|
|
7
7
|
[34mCLI[39m Cleaning output folder
|
|
8
8
|
[34mESM[39m Build start
|
|
9
|
-
[32mESM[39m [1mdist/index.js [22m[
|
|
10
|
-
[32mESM[39m [1mdist/index.js.map [22m[
|
|
11
|
-
[32mESM[39m ⚡️ Build success in
|
|
9
|
+
[32mESM[39m [1mdist/index.js [22m[32m76.42 KB[39m
|
|
10
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m146.05 KB[39m
|
|
11
|
+
[32mESM[39m ⚡️ Build success in 142ms
|
|
12
12
|
[34mDTS[39m Build start
|
|
13
|
-
[32mDTS[39m ⚡️ Build success in
|
|
13
|
+
[32mDTS[39m ⚡️ Build success in 7515ms
|
|
14
14
|
[32mDTS[39m [1mdist/index.d.ts [22m[32m13.47 KB[39m
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// src/index.ts
|
|
2
|
+
import { createRequire } from "module";
|
|
2
3
|
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
4
|
|
|
4
5
|
// src/resources/index.ts
|
|
@@ -2127,6 +2128,23 @@ function bigintReplacer2(_key, value) {
|
|
|
2127
2128
|
}
|
|
2128
2129
|
|
|
2129
2130
|
// src/index.ts
|
|
2131
|
+
var require2 = createRequire(import.meta.url);
|
|
2132
|
+
var { version: PKG_VERSION } = require2("../package.json");
|
|
2133
|
+
var SERVER_INSTRUCTIONS = [
|
|
2134
|
+
`HiveMind Collective v${PKG_VERSION} \u2014 a decentralized mesh network where AI agents discover, delegate, and pay each other for tasks on the Sui blockchain.`,
|
|
2135
|
+
"",
|
|
2136
|
+
"Key capabilities:",
|
|
2137
|
+
"\u2022 Discover other agents on the mesh (collective_discover)",
|
|
2138
|
+
"\u2022 Execute tasks on remote agents (collective_execute, collective_metered_execute)",
|
|
2139
|
+
"\u2022 Post and accept tasks with SUI escrow (collective_post_task, collective_accept_task)",
|
|
2140
|
+
"\u2022 Relay messages between agents (collective_relay_send)",
|
|
2141
|
+
"\u2022 View wallet balance and transaction history (collective_wallet_balance)",
|
|
2142
|
+
"",
|
|
2143
|
+
"Settings & Configuration:",
|
|
2144
|
+
"\u2022 Use the collective_settings tool to open the settings dashboard in the user's browser",
|
|
2145
|
+
"\u2022 The dashboard lets users configure network presets, view wallet info, manage spending limits, and discover agents",
|
|
2146
|
+
"\u2022 Proactively suggest opening settings when the user asks about configuration, wallet setup, or network options"
|
|
2147
|
+
].join("\n");
|
|
2130
2148
|
function registerMeshTools(server, context) {
|
|
2131
2149
|
registerToolHandlers(server, context);
|
|
2132
2150
|
registerResourceHandlers(server, context);
|
|
@@ -2135,13 +2153,14 @@ function createMeshMcpServer(context) {
|
|
|
2135
2153
|
const server = new Server(
|
|
2136
2154
|
{
|
|
2137
2155
|
name: "@hivemind-os/collective-mcp-server",
|
|
2138
|
-
version:
|
|
2156
|
+
version: PKG_VERSION
|
|
2139
2157
|
},
|
|
2140
2158
|
{
|
|
2141
2159
|
capabilities: {
|
|
2142
2160
|
tools: {},
|
|
2143
2161
|
resources: {}
|
|
2144
|
-
}
|
|
2162
|
+
},
|
|
2163
|
+
instructions: SERVER_INSTRUCTIONS
|
|
2145
2164
|
}
|
|
2146
2165
|
);
|
|
2147
2166
|
registerMeshTools(server, context);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/resources/index.ts","../src/resources/agent.ts","../src/resources/capabilities.ts","../src/resources/task.ts","../src/encryption.ts","../src/resources/wallet.ts","../src/tools/balance.ts","../src/tools/index.ts","../src/tools/indexer-client.ts","../src/tools/analytics.ts","../src/tools/deactivate.ts","../src/tools/discover.ts","../src/tools/dispute.ts","../src/tools/execute.ts","../src/tools/execute-async.ts","../src/tools/metering.ts","../src/tools/marketplace-accept-bid.ts","../src/tools/marketplace-bid.ts","../src/tools/marketplace-browse.ts","../src/tools/marketplace-post.ts","../src/tools/multi-execute.ts","../src/tools/policy-update.ts","../src/tools/register.ts","../src/tools/relay-registry.ts","../src/tools/settings.ts","../src/tools/stake.ts","../src/tools/task-history.ts","../src/tools/task-status.ts"],"sourcesContent":["import { Server } from '@modelcontextprotocol/sdk/server/index.js';\n\nimport type { MeshToolContext } from './context.js';\nimport { registerResourceHandlers } from './resources/index.js';\nimport { registerToolHandlers } from './tools/index.js';\n\nexport type { MeshToolContext } from './context.js';\nexport { meshToolDefinitions, meshToolHandlers, type MeshToolHandler } from './tools/index.js';\nexport { registerResourceHandlers } from './resources/index.js';\nexport { meshMultiExecuteTool, runMeshMultiExecute, type MeshMultiExecuteParams, type MeshMultiExecuteResult } from './tools/multi-execute.js';\nexport {\n meshMeteredExecuteTool,\n meshVerifyResultTool,\n runMeshMeteredExecute,\n runMeshVerifyResult,\n type MeshMeteredExecuteParams,\n type MeshVerifyResultParams,\n} from './tools/metering.js';\n\nexport function registerMeshTools(server: Server, context: MeshToolContext): void {\n registerToolHandlers(server, context);\n registerResourceHandlers(server, context);\n}\n\nexport function createMeshMcpServer(context: MeshToolContext): Server {\n const server = new Server(\n {\n name: '@hivemind-os/collective-mcp-server',\n version: '0.1.0',\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n },\n );\n\n registerMeshTools(server, context);\n return server;\n}\n","import type { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport {\n ListResourcesRequestSchema,\n ListResourceTemplatesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport type { MeshToolContext } from '../context.js';\nimport { readAgentResource, meshAgentResourceTemplate } from './agent.js';\nimport { readCapabilitiesResource, meshCapabilitiesResource } from './capabilities.js';\nimport { readTaskResource, meshTaskResourceTemplate } from './task.js';\nimport { readWalletResource, meshWalletResource } from './wallet.js';\n\nconst staticResources = [meshCapabilitiesResource, meshWalletResource];\nconst resourceTemplates = [meshAgentResourceTemplate, meshTaskResourceTemplate];\n\nexport function registerResourceHandlers(server: Server, context: MeshToolContext): void {\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: staticResources,\n }));\n\n server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({\n resourceTemplates,\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const uri = request.params.uri;\n const data = await routeResourceRead(uri, context);\n\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: serialize(data),\n },\n ],\n };\n });\n}\n\nexport const meshResourceDefinitions = {\n resources: staticResources,\n templates: resourceTemplates,\n};\n\nasync function routeResourceRead(uri: string, context: MeshToolContext): Promise<unknown> {\n const parsed = new URL(uri);\n\n switch (parsed.host) {\n case 'capabilities':\n return readCapabilitiesResource(context);\n case 'wallet':\n return readWalletResource(context);\n case 'agent':\n return readAgentResource(decodeURIComponent(parsed.pathname.replace(/^\\//, '')), context);\n case 'task':\n return readTaskResource(decodeURIComponent(parsed.pathname.replace(/^\\//, '')), context);\n default:\n throw new Error(`Unknown resource: ${uri}`);\n }\n}\n\nfunction serialize(payload: unknown): string {\n return JSON.stringify(payload, bigintReplacer, 2);\n}\n\nfunction bigintReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value;\n}\n","import type { AgentCard } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport const meshAgentResourceTemplate = {\n uriTemplate: 'mesh://agent/{did}',\n name: 'Agent Profile',\n description: 'Resolve a mesh agent profile by DID',\n mimeType: 'application/json',\n};\n\nexport async function readAgentResource(did: string, context: MeshToolContext): Promise<AgentCard> {\n const cached = context.agentCache.getAgentByDID(did);\n if (cached) {\n return cached;\n }\n\n const discovered = await findAgentByDidOnChain(did, context);\n if (!discovered) {\n throw new Error(`Agent ${did} was not found.`);\n }\n\n context.agentCache.upsertAgent(discovered);\n return discovered;\n}\n\nasync function findAgentByDidOnChain(\n did: string,\n context: MeshToolContext,\n): Promise<AgentCard | null> {\n const eventType = `${context.networkConfig.packageId}::registry::AgentRegistered`;\n let cursor: unknown = null;\n\n while (true) {\n const page = await context.suiClient.queryEvents(eventType, cursor as never, 50);\n for (const event of page.events) {\n if (!isRecord(event.parsedJson)) {\n continue;\n }\n\n if (!stringEquals(readString(event.parsedJson.did), did)) {\n continue;\n }\n\n const cardId = readString(event.parsedJson.id, event.parsedJson.card_id, event.parsedJson.cardId);\n if (!cardId) {\n continue;\n }\n\n const card = await context.registryClient.getAgentCard(cardId);\n if (card) {\n return card;\n }\n }\n\n if (!page.hasMore || !page.nextCursor) {\n break;\n }\n\n cursor = page.nextCursor;\n }\n\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction readString(...values: unknown[]): string {\n const match = values.find((value) => typeof value === 'string');\n return typeof match === 'string' ? match : '';\n}\n\nfunction stringEquals(left: string, right: string): boolean {\n return left.toLowerCase() === right.toLowerCase();\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport const meshCapabilitiesResource = {\n uri: 'mesh://capabilities',\n name: 'Capability Directory',\n description: 'Known mesh capabilities aggregated from the local agent cache',\n mimeType: 'application/json',\n};\n\nexport async function readCapabilitiesResource(\n context: MeshToolContext,\n): Promise<Array<{ capability: string; agent_count: number }>> {\n const counts = new Map<string, number>();\n\n for (const agent of context.agentCache.getAllActive(1_000)) {\n for (const capability of agent.capabilities) {\n counts.set(capability.name, (counts.get(capability.name) ?? 0) + 1);\n }\n }\n\n return [...counts.entries()]\n .map(([capability, agent_count]) => ({ capability, agent_count }))\n .sort((left, right) => left.capability.localeCompare(right.capability));\n}\n","import { TaskStatus } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob } from '../encryption.js';\n\nconst decoder = new TextDecoder();\n\nexport const meshTaskResourceTemplate = {\n uriTemplate: 'mesh://task/{id}',\n name: 'Task Details',\n description: 'Resolve task details and result payload by task id',\n mimeType: 'application/json',\n};\n\nexport async function readTaskResource(taskId: string, context: MeshToolContext): Promise<{\n id: string;\n requester: string;\n provider?: string;\n capability: string;\n input_blob_id: string;\n result_blob_id?: string;\n price_mist: string;\n status: string;\n created_at: number;\n accepted_at?: number;\n completed_at?: number;\n expires_at: number;\n agreement_hash?: string;\n result?: string;\n}> {\n const task = await context.taskClient.getTask(taskId);\n if (!task) {\n throw new Error(`Task ${taskId} was not found.`);\n }\n\n let result: string | undefined;\n if ((task.status === TaskStatus.COMPLETED || task.status === TaskStatus.RELEASED) && task.resultBlobId) {\n const bytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n result = bytes ? decoder.decode(bytes) : undefined;\n }\n\n return {\n id: task.id,\n requester: task.requester,\n provider: task.provider,\n capability: task.capability,\n input_blob_id: task.inputBlobId,\n result_blob_id: task.resultBlobId,\n price_mist: task.price.toString(),\n status: TaskStatus[task.status] ?? 'UNKNOWN',\n created_at: task.createdAt,\n accepted_at: task.acceptedAt,\n completed_at: task.completedAt,\n expires_at: task.expiresAt,\n agreement_hash: task.agreementHash,\n result,\n };\n}\n","import type { BlobStore } from '@hivemind-os/collective-core';\n\nexport interface EncryptedBlobStoreLike extends BlobStore {\n storeEncrypted(data: Uint8Array, recipientPublicKey: Uint8Array): Promise<{ blobId: string; hash: string }>;\n fetchDecrypted(blobId: string): Promise<Uint8Array | null>;\n}\n\nexport function supportsEncryptedBlobs(blobStore: BlobStore): blobStore is EncryptedBlobStoreLike {\n return typeof (blobStore as Partial<EncryptedBlobStoreLike>).storeEncrypted === 'function'\n && typeof (blobStore as Partial<EncryptedBlobStoreLike>).fetchDecrypted === 'function';\n}\n\nexport async function fetchMeshBlob(blobStore: BlobStore, blobId: string): Promise<Uint8Array | null> {\n return supportsEncryptedBlobs(blobStore)\n ? await blobStore.fetchDecrypted(blobId)\n : await blobStore.fetch(blobId);\n}\n\nexport function hexToBytes(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","import { PaymentRail } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { formatMistToSui } from '../tools/balance.js';\n\nexport const meshWalletResource = {\n uri: 'mesh://wallet',\n name: 'Wallet Overview',\n description: 'Current wallet balance and local spending totals',\n mimeType: 'application/json',\n};\n\nexport async function readWalletResource(context: MeshToolContext): Promise<{\n address: string;\n balance_mist: string;\n balance_sui: string;\n spent_today_mist: string;\n spent_month_mist: string;\n rail: PaymentRail;\n}> {\n const address = context.keypair.getPublicKey().toSuiAddress();\n const balance = await context.suiClient.getBalance(address);\n\n return {\n address,\n balance_mist: balance.toString(),\n balance_sui: formatMistToSui(balance),\n spent_today_mist: context.spendingPolicy.getSpent('day', PaymentRail.SUI_ESCROW).toString(),\n spent_month_mist: context.spendingPolicy.getSpent('month', PaymentRail.SUI_ESCROW).toString(),\n rail: PaymentRail.SUI_ESCROW,\n };\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport const meshBalanceTool = {\n name: 'collective_balance',\n description: 'Get the current wallet balance in MIST and SUI',\n inputSchema: {\n type: 'object' as const,\n properties: {},\n required: [],\n },\n};\n\nexport async function runMeshBalance(\n _params: Record<string, never>,\n context: MeshToolContext,\n): Promise<{ address: string; balance_mist: string; balance_sui: string }> {\n const address = context.keypair.getPublicKey().toSuiAddress();\n const balanceMist = await context.suiClient.getBalance(address);\n\n return {\n address,\n balance_mist: balanceMist.toString(),\n balance_sui: formatMistToSui(balanceMist),\n };\n}\n\nexport function formatMistToSui(balanceMist: bigint): string {\n const whole = balanceMist / 1_000_000_000n;\n const fraction = balanceMist % 1_000_000_000n;\n if (fraction === 0n) {\n return whole.toString();\n }\n\n const fractionText = fraction.toString().padStart(9, '0').replace(/0+$/, '');\n return `${whole.toString()}.${fractionText}`;\n}\n","import type { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\n\nimport { SessionExpiredError } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { meshAnalyticsTool, runMeshAnalytics } from './analytics.js';\nimport { meshBalanceTool, runMeshBalance } from './balance.js';\nimport { meshDeactivateTool, runMeshDeactivate } from './deactivate.js';\nimport { meshDiscoverTool, runMeshDiscover } from './discover.js';\nimport { meshDisputeTool, runMeshDispute } from './dispute.js';\nimport { meshExecuteAsyncTool, runMeshExecuteAsync } from './execute-async.js';\nimport { meshExecuteTool, runMeshExecute } from './execute.js';\nimport { meshMeteredExecuteTool, meshVerifyResultTool, runMeshMeteredExecute, runMeshVerifyResult } from './metering.js';\nimport { meshMarketplaceAcceptBidTool, runMeshMarketplaceAcceptBid } from './marketplace-accept-bid.js';\nimport { meshMarketplaceBidTool, runMeshMarketplaceBid } from './marketplace-bid.js';\nimport { meshMarketplaceBrowseTool, runMeshMarketplaceBrowse } from './marketplace-browse.js';\nimport { meshMarketplacePostTool, runMeshMarketplacePost } from './marketplace-post.js';\nimport { meshMultiExecuteTool, runMeshMultiExecute } from './multi-execute.js';\nimport { meshPolicyUpdateTool, runMeshPolicyUpdate } from './policy-update.js';\nimport { meshRegisterTool, runMeshRegister } from './register.js';\nimport { meshRelayRegistryTool, runMeshRelayRegistry } from './relay-registry.js';\nimport { meshSettingsTool, runMeshSettings } from './settings.js';\nimport { meshStakeTool, runMeshStake } from './stake.js';\nimport { meshTaskHistoryTool, runMeshTaskHistory } from './task-history.js';\nimport { meshTaskStatusTool, runMeshTaskStatus } from './task-status.js';\n\nconst toolDefinitions = [\n meshAnalyticsTool,\n meshDiscoverTool,\n meshDisputeTool,\n meshExecuteTool,\n meshExecuteAsyncTool,\n meshMeteredExecuteTool,\n meshVerifyResultTool,\n meshMarketplacePostTool,\n meshMarketplaceBrowseTool,\n meshMultiExecuteTool,\n meshMarketplaceBidTool,\n meshMarketplaceAcceptBidTool,\n meshTaskStatusTool,\n meshRegisterTool,\n meshDeactivateTool,\n meshBalanceTool,\n meshPolicyUpdateTool,\n meshStakeTool,\n meshRelayRegistryTool,\n meshTaskHistoryTool,\n meshSettingsTool,\n];\n\nexport type MeshToolHandler = (params: never, context: MeshToolContext) => Promise<unknown>;\n\nexport const meshToolHandlers: Record<string, MeshToolHandler> = {\n [meshAnalyticsTool.name]: runMeshAnalytics,\n [meshDiscoverTool.name]: runMeshDiscover,\n [meshDisputeTool.name]: runMeshDispute,\n [meshExecuteTool.name]: runMeshExecute,\n [meshExecuteAsyncTool.name]: runMeshExecuteAsync,\n [meshMeteredExecuteTool.name]: runMeshMeteredExecute,\n [meshVerifyResultTool.name]: runMeshVerifyResult,\n [meshMarketplacePostTool.name]: runMeshMarketplacePost,\n [meshMarketplaceBrowseTool.name]: runMeshMarketplaceBrowse,\n [meshMultiExecuteTool.name]: runMeshMultiExecute,\n [meshMarketplaceBidTool.name]: runMeshMarketplaceBid,\n [meshMarketplaceAcceptBidTool.name]: runMeshMarketplaceAcceptBid,\n [meshTaskStatusTool.name]: runMeshTaskStatus,\n [meshRegisterTool.name]: runMeshRegister,\n [meshDeactivateTool.name]: runMeshDeactivate,\n [meshBalanceTool.name]: runMeshBalance,\n [meshPolicyUpdateTool.name]: runMeshPolicyUpdate,\n [meshStakeTool.name]: runMeshStake,\n [meshRelayRegistryTool.name]: runMeshRelayRegistry,\n [meshTaskHistoryTool.name]: runMeshTaskHistory,\n [meshSettingsTool.name]: runMeshSettings,\n};\n\nexport function registerToolHandlers(server: Server, context: MeshToolContext): void {\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: toolDefinitions,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const handler = meshToolHandlers[request.params.name];\n if (!handler) {\n return createErrorResult(`Unknown tool: ${request.params.name}`);\n }\n\n try {\n const response = await handler((request.params.arguments ?? {}) as never, context);\n return createSuccessResult(response);\n } catch (error) {\n const message =\n error instanceof SessionExpiredError\n ? 'Authentication expired. Please re-authenticate via the daemon portal.'\n : error instanceof Error\n ? error.message\n : String(error);\n const sessionState = await getSessionState(context);\n return createErrorResult(\n sessionState ? `${message} (session state: ${sessionState})` : message,\n sessionState ? { session_state: sessionState, reauth_required: error instanceof SessionExpiredError } : undefined,\n );\n }\n });\n}\n\nexport const meshToolDefinitions = toolDefinitions;\n\nfunction createSuccessResult(payload: unknown): { content: Array<{ type: 'text'; text: string }> } {\n return {\n content: [\n {\n type: 'text',\n text: serialize(payload),\n },\n ],\n };\n}\n\nfunction createErrorResult(\n message: string,\n details?: Record<string, unknown>,\n): {\n isError: true;\n content: Array<{ type: 'text'; text: string }>;\n} {\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: serialize({ error: message, ...details }),\n },\n ],\n };\n}\n\nasync function getSessionState(context: MeshToolContext): Promise<string | null> {\n const provider = context.authProvider;\n if (!provider?.getSessionState) {\n return null;\n }\n\n const state = await provider.getSessionState();\n return typeof state === 'string' ? state : null;\n}\n\nfunction serialize(payload: unknown): string {\n return JSON.stringify(payload, bigintReplacer, 2);\n}\n\nfunction bigintReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value;\n}\n","import type { AgentCard, Capability } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\n\ninterface GraphQLResponse<T> {\n data?: T;\n errors?: Array<{ message?: string }>;\n}\n\ninterface GraphQLAgentNode {\n id: string;\n owner: string;\n did: string;\n name: string;\n description: string;\n endpoint?: string | null;\n active: boolean;\n version: number;\n registeredAt: string;\n updatedAt: string;\n totalTasksCompleted: number;\n totalTasksFailed: number;\n totalTasksDisputed: number;\n totalEarningsMist: string;\n hasStake: boolean;\n stakeMist?: string | null;\n stakeType?: 'agent' | 'relay' | null;\n capabilities: Array<{\n name: string;\n description: string;\n version: string;\n executionMode?: 'sync' | 'async' | null;\n paymentRails?: string[] | null;\n pricing: {\n rail: Capability['pricing']['rail'];\n amount: string;\n currency: string;\n };\n }>;\n}\n\nexport async function executeIndexerQuery<TData>(\n context: Pick<MeshToolContext, 'indexer'>,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<TData> {\n const endpoint = resolveIndexerUrl(context);\n if (!endpoint) {\n throw new Error('Indexer is not configured.');\n }\n\n const fetchImpl = context.indexer?.fetch ?? globalThis.fetch;\n const response = await fetchImpl(endpoint, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ query, variables }),\n });\n if (!response.ok) {\n throw new Error(`Indexer query failed with status ${response.status}.`);\n }\n\n const payload = (await response.json()) as GraphQLResponse<TData>;\n if (payload.errors && payload.errors.length > 0) {\n throw new Error(payload.errors.map((entry) => entry.message ?? 'Unknown GraphQL error').join('; '));\n }\n if (!payload.data) {\n throw new Error('Indexer query returned no data.');\n }\n return payload.data;\n}\n\nexport async function queryIndexerAgents(\n context: Pick<MeshToolContext, 'indexer'>,\n params: { capability: string; limit: number; minReputation?: number; category?: string },\n): Promise<AgentCard[]> {\n const data = await executeIndexerQuery<{ agents: { nodes: GraphQLAgentNode[] } }>(\n context,\n `query IndexedAgents($capability: String, $limit: Int, $minReputation: Float, $category: String) {\n agents(capability: $capability, limit: $limit, minReputation: $minReputation, category: $category) {\n nodes {\n id\n owner\n did\n name\n description\n endpoint\n active\n version\n registeredAt\n updatedAt\n totalTasksCompleted\n totalTasksFailed\n totalTasksDisputed\n totalEarningsMist\n hasStake\n stakeMist\n stakeType\n capabilities {\n name\n description\n version\n executionMode\n paymentRails\n pricing {\n rail\n amount\n currency\n }\n }\n }\n }\n }`,\n {\n capability: params.capability,\n limit: params.limit,\n minReputation: params.minReputation,\n category: params.category,\n },\n );\n\n return data.agents.nodes.map(mapGraphqlAgent);\n}\n\nexport function resolveIndexerUrl(context: Pick<MeshToolContext, 'indexer'>): string | null {\n const value = context.indexer?.graphqlUrl ?? process.env.COLLECTIVE_INDEXER_URL;\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction mapGraphqlAgent(agent: GraphQLAgentNode): AgentCard {\n return {\n id: agent.id,\n owner: agent.owner,\n did: agent.did as AgentCard['did'],\n name: agent.name,\n description: agent.description,\n endpoint: agent.endpoint ?? undefined,\n active: agent.active,\n version: agent.version,\n registeredAt: Number(agent.registeredAt),\n updatedAt: Number(agent.updatedAt),\n totalTasksCompleted: agent.totalTasksCompleted,\n totalTasksFailed: agent.totalTasksFailed,\n totalTasksDisputed: agent.totalTasksDisputed,\n totalEarningsMist: BigInt(agent.totalEarningsMist),\n hasStake: agent.hasStake,\n stakeMist: agent.stakeMist ? BigInt(agent.stakeMist) : undefined,\n stakeType: agent.stakeType ?? undefined,\n capabilities: agent.capabilities.map((capability) => ({\n name: capability.name,\n description: capability.description,\n version: capability.version,\n executionMode: capability.executionMode ?? undefined,\n paymentRails: capability.paymentRails ?? undefined,\n pricing: {\n rail: capability.pricing.rail,\n amount: BigInt(capability.pricing.amount),\n currency: capability.pricing.currency,\n },\n })),\n };\n}\n","import type { MeshToolContext } from '../context.js';\nimport { executeIndexerQuery } from './indexer-client.js';\n\nexport interface MeshAnalyticsParams {\n view?: 'summary' | 'task-volume' | 'top-providers' | 'marketplace';\n period?: 'HOUR' | 'DAY' | 'WEEK';\n buckets?: number;\n limit?: number;\n sort_by?: 'COMPLETED_TASKS' | 'EARNINGS' | 'REPUTATION';\n}\n\nexport const meshAnalyticsTool = {\n name: 'collective_analytics',\n description: 'Query task volume, top providers, and marketplace analytics from the Agentic Mesh indexer',\n inputSchema: {\n type: 'object' as const,\n properties: {\n view: { type: 'string', enum: ['summary', 'task-volume', 'top-providers', 'marketplace'] },\n period: { type: 'string', enum: ['HOUR', 'DAY', 'WEEK'] },\n buckets: { type: 'number' },\n limit: { type: 'number' },\n sort_by: { type: 'string', enum: ['COMPLETED_TASKS', 'EARNINGS', 'REPUTATION'] },\n },\n },\n};\n\nexport async function runMeshAnalytics(\n params: MeshAnalyticsParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const view = params.view ?? 'summary';\n\n switch (view) {\n case 'task-volume': {\n const data = await executeIndexerQuery<{ taskVolume: unknown[] }>(\n context,\n `query TaskVolume($period: TimePeriod!, $buckets: Int) {\n taskVolume(period: $period, buckets: $buckets) {\n label\n count\n volumeMist\n }\n }`,\n {\n period: params.period ?? 'DAY',\n buckets: params.buckets ?? 14,\n },\n );\n return { view, period: params.period ?? 'DAY', buckets: params.buckets ?? 14, data: data.taskVolume };\n }\n case 'top-providers': {\n const data = await executeIndexerQuery<{ topProviders: unknown[] }>(\n context,\n `query TopProviders($limit: Int, $sortBy: ProviderSortField) {\n topProviders(limit: $limit, sortBy: $sortBy) {\n did\n owner\n name\n completedTasks\n earningsMist\n disputeCount\n successRate\n reputation\n }\n }`,\n {\n limit: params.limit ?? 10,\n sortBy: params.sort_by ?? 'COMPLETED_TASKS',\n },\n );\n return { view, limit: params.limit ?? 10, sort_by: params.sort_by ?? 'COMPLETED_TASKS', data: data.topProviders };\n }\n case 'marketplace': {\n const data = await executeIndexerQuery<{ analytics: { marketplace: unknown } }>(\n context,\n `query MarketplaceAnalytics {\n analytics {\n marketplace {\n averageBidCount\n acceptanceRate\n categoryPopularity {\n category\n taskCount\n }\n }\n }\n }`,\n );\n return { view, data: data.analytics.marketplace };\n }\n case 'summary':\n default: {\n const data = await executeIndexerQuery<{ analytics: unknown }>(\n context,\n `query AnalyticsSummary {\n analytics {\n totalAgents\n activeAgents\n totalTasks\n completedTasks\n disputedTasks\n totalVolumeMist\n averageGasCosts {\n capability\n averageGasMist\n taskCount\n }\n marketplace {\n averageBidCount\n acceptanceRate\n categoryPopularity {\n category\n taskCount\n }\n }\n }\n }`,\n );\n return { view: 'summary', data: data.analytics };\n }\n }\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport interface MeshDeactivateParams {\n agent_card_id: string;\n}\n\nexport const meshDeactivateTool = {\n name: 'collective_deactivate',\n description: 'Deactivate an existing agent card',\n inputSchema: {\n type: 'object' as const,\n properties: {\n agent_card_id: { type: 'string', description: 'Agent card object id' },\n },\n required: ['agent_card_id'],\n },\n};\n\nexport async function runMeshDeactivate(\n params: MeshDeactivateParams,\n context: MeshToolContext,\n): Promise<{ tx_digest: string; status: 'deactivated' }> {\n const result = await context.registryClient.deactivateAgent({\n cardId: params.agent_card_id,\n keypair: context.keypair,\n });\n context.agentCache.removeAgent(params.agent_card_id);\n\n return {\n tx_digest: result.txDigest,\n status: 'deactivated',\n };\n}\n","import type { AgentCard, Capability } from '@hivemind-os/collective-types';\nimport { ReputationScoreCalculator } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { queryIndexerAgents, resolveIndexerUrl } from './indexer-client.js';\n\nconst scoreCalculator = new ReputationScoreCalculator();\n\nexport interface MeshDiscoverParams {\n capability: string;\n limit?: number;\n sort_by?: 'price' | 'reputation';\n useIndexer?: boolean;\n}\n\nexport const meshDiscoverTool = {\n name: 'collective_discover',\n description: 'Find agents by capability on the Agentic Mesh network',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to search for' },\n limit: { type: 'number', description: 'Max results (default 10)' },\n sort_by: { type: 'string', enum: ['price', 'reputation'], description: 'Sort results by price or reputation' },\n useIndexer: { type: 'boolean', description: 'Prefer the indexer GraphQL API when available' },\n },\n required: ['capability'],\n },\n};\n\nexport async function runMeshDiscover(\n params: MeshDiscoverParams,\n context: MeshToolContext,\n): Promise<{ capability: string; source: 'indexer' | 'cache' | 'registry'; agents: ReturnType<typeof summarizeAgent>[] }> {\n const capability = params.capability.trim();\n const limit = normalizeLimit(params.limit);\n const sortBy = params.sort_by ?? 'price';\n const { agents, source } = await discoverAgentsByCapability(capability, context, limit, sortBy, params.useIndexer);\n\n return {\n capability,\n source,\n agents: agents.map((agent) => summarizeAgent(agent, capability)),\n };\n}\n\nexport async function discoverAgentsByCapability(\n capability: string,\n context: MeshToolContext,\n limit = 10,\n sortBy: 'price' | 'reputation' = 'price',\n useIndexer?: boolean,\n): Promise<{ agents: AgentCard[]; source: 'indexer' | 'cache' | 'registry' }> {\n const normalizedCapability = capability.trim();\n if (!normalizedCapability) {\n return { agents: [], source: 'cache' };\n }\n\n if (shouldUseIndexer(context, useIndexer)) {\n try {\n const indexed = await queryIndexerAgents(context, {\n capability: normalizedCapability,\n limit,\n });\n if (indexed.length > 0) {\n return {\n agents: sortBy === 'reputation' ? indexed.slice(0, limit) : sortByPrice(indexed, normalizedCapability).slice(0, limit),\n source: 'indexer',\n };\n }\n } catch (error) {\n context.logger?.warn?.({ err: error }, 'Indexer discovery failed; falling back to local cache.');\n }\n }\n\n const cached = (await queryLocalCache(context, normalizedCapability, Math.max(limit * 2, limit), sortBy))\n .filter((agent) => hasCapability(agent, normalizedCapability))\n .slice(0, limit);\n\n if (cached.length > 0) {\n return {\n agents: sortBy === 'reputation' ? cached : sortByPrice(cached, normalizedCapability).slice(0, limit),\n source: 'cache',\n };\n }\n\n const discovered = await context.registryClient.discoverByCapability(normalizedCapability, limit, {\n sortByReputation: sortBy === 'reputation',\n });\n for (const agent of discovered) {\n context.agentCache.upsertAgent(agent);\n }\n\n const ranked = sortBy === 'reputation' ? discovered : sortByPrice(discovered, normalizedCapability);\n return { agents: ranked.slice(0, limit), source: 'registry' };\n}\n\nexport async function resolveProviderCapability(\n capability: string,\n context: MeshToolContext,\n providerDid?: string,\n): Promise<{ agent: AgentCard; capability: Capability }> {\n const normalizedCapability = capability.trim();\n if (!normalizedCapability) {\n throw new Error('Capability is required.');\n }\n\n if (providerDid) {\n const cachedAgent = context.agentCache.getAgentByDID(providerDid);\n const cachedCapability = cachedAgent ? findCapability(cachedAgent, normalizedCapability) : undefined;\n if (cachedAgent?.active && cachedCapability) {\n return { agent: cachedAgent, capability: cachedCapability };\n }\n\n const { agents } = await discoverAgentsByCapability(normalizedCapability, context, 50);\n const matched = agents.find((entry) => entry.did === providerDid);\n const matchedCapability = matched ? findCapability(matched, normalizedCapability) : undefined;\n if (!matched || !matchedCapability) {\n throw new Error(`Provider ${providerDid} was not found for capability ${normalizedCapability}.`);\n }\n\n return { agent: matched, capability: matchedCapability };\n }\n\n const { agents } = await discoverAgentsByCapability(normalizedCapability, context, 20);\n const ranked = agents\n .map((agent) => ({ agent, capability: findCapability(agent, normalizedCapability) }))\n .filter((entry): entry is { agent: AgentCard; capability: Capability } => Boolean(entry.capability))\n .sort((left, right) => compareBigInt(left.capability.pricing.amount, right.capability.pricing.amount));\n\n if (ranked.length === 0) {\n throw new Error(`No providers found for capability ${normalizedCapability}.`);\n }\n\n return ranked[0];\n}\n\nexport function summarizeAgent(agent: AgentCard, capability?: string): {\n name: string;\n did: AgentCard['did'];\n capabilities: string[];\n pricing: Array<{\n capability: string;\n price_mist: string;\n rail: string;\n currency: string;\n }>;\n reputation: {\n success_rate: number;\n total_tasks: number;\n total_disputes: number;\n total_earnings_mist: string;\n };\n endpoint?: string;\n} {\n const scopedCapabilities = capability\n ? agent.capabilities.filter((entry) => capabilityNameEquals(entry.name, capability))\n : agent.capabilities;\n const reputation = scoreCalculator.computeScore(agent, []);\n\n return {\n name: agent.name,\n did: agent.did,\n capabilities: scopedCapabilities.map((entry) => entry.name),\n pricing: scopedCapabilities.map((entry) => ({\n capability: entry.name,\n price_mist: entry.pricing.amount.toString(),\n rail: entry.pricing.rail,\n currency: entry.pricing.currency,\n })),\n reputation: {\n success_rate: reputation.successRate,\n total_tasks: reputation.totalTasks,\n total_disputes: reputation.totalDisputes,\n total_earnings_mist: reputation.totalEarningsMist.toString(),\n },\n endpoint: agent.endpoint,\n };\n}\n\nasync function queryLocalCache(\n context: MeshToolContext,\n capability: string,\n limit: number,\n sortBy: 'price' | 'reputation',\n): Promise<AgentCard[]> {\n const cache = context.agentCache as MeshToolContext['agentCache'] & {\n queryAgentsAdvanced?: (filters: {\n capability?: string;\n limit?: number;\n sortBy?: 'stake' | 'reputation';\n }) => Promise<AgentCard[]>;\n };\n\n if (typeof cache.queryAgentsAdvanced === 'function') {\n return await cache.queryAgentsAdvanced({\n capability,\n limit,\n sortBy: sortBy === 'reputation' ? 'reputation' : 'stake',\n });\n }\n\n return context.agentCache.searchByCapability(capability, limit, { sortByReputation: sortBy === 'reputation' });\n}\n\nfunction shouldUseIndexer(context: MeshToolContext, useIndexer?: boolean): boolean {\n if (useIndexer === false) {\n return false;\n }\n return Boolean(resolveIndexerUrl(context));\n}\n\nfunction findCapability(agent: AgentCard, capability: string): Capability | undefined {\n return agent.capabilities.find((entry) => capabilityNameEquals(entry.name, capability));\n}\n\nfunction hasCapability(agent: AgentCard, capability: string): boolean {\n return findCapability(agent, capability) !== undefined;\n}\n\nfunction capabilityNameEquals(left: string, right: string): boolean {\n return left.toLowerCase() === right.toLowerCase();\n}\n\nfunction compareBigInt(left: bigint, right: bigint): number {\n if (left === right) {\n return 0;\n }\n\n return left < right ? -1 : 1;\n}\n\nfunction normalizeLimit(limit?: number): number {\n if (typeof limit !== 'number' || Number.isNaN(limit)) {\n return 10;\n }\n\n return Math.max(1, Math.floor(limit));\n}\n\nfunction sortByPrice(agents: AgentCard[], capability: string): AgentCard[] {\n return [...agents].sort((left, right) => {\n const leftCapability = findCapability(left, capability);\n const rightCapability = findCapability(right, capability);\n if (!leftCapability && !rightCapability) {\n return 0;\n }\n if (!leftCapability) {\n return 1;\n }\n if (!rightCapability) {\n return -1;\n }\n return compareBigInt(leftCapability.pricing.amount, rightCapability.pricing.amount);\n });\n}\n","import { DisputeClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshDisputeParams {\n action: 'open' | 'respond' | 'accept' | 'status';\n task_id?: string;\n dispute_id?: string;\n evidence?: string;\n evidence_blob_id?: string;\n proposed_split_mist?: string | number;\n arbitrator_address?: string;\n}\n\nexport const meshDisputeTool = {\n name: 'collective_dispute',\n description: 'Open, respond to, accept, or inspect on-chain task disputes',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: { type: 'string', enum: ['open', 'respond', 'accept', 'status'] },\n task_id: { type: 'string', description: 'Task object id' },\n dispute_id: { type: 'string', description: 'Dispute object id' },\n evidence: { type: 'string', description: 'Plain text or JSON-encoded evidence to store before opening/responding' },\n evidence_blob_id: { type: 'string', description: 'Existing Walrus/blobstore blob id containing dispute evidence' },\n proposed_split_mist: { type: 'string', description: 'Amount, in MIST, to allocate back to the requester' },\n arbitrator_address: { type: 'string', description: 'Optional arbitrator address for open actions' },\n },\n required: ['action'],\n },\n};\n\nexport async function runMeshDispute(params: MeshDisputeParams, context: MeshToolContext): Promise<Record<string, unknown>> {\n const client = context.disputeClient ?? new DisputeClient(context.suiClient, context.networkConfig);\n\n switch (params.action) {\n case 'open': {\n if (!params.task_id) {\n throw new Error('task_id is required when action=open');\n }\n const evidenceBlobId = await resolveEvidenceBlobId(params, context);\n const result = await client.openDispute({\n taskId: params.task_id,\n evidenceBlobId,\n proposedSplitMist: parseMist(params.proposed_split_mist, 'proposed_split_mist'),\n arbitratorAddress: params.arbitrator_address,\n signer: context.keypair as never,\n });\n return {\n action: 'open',\n dispute_id: result.disputeId,\n task_id: params.task_id,\n evidence_blob_id: evidenceBlobId,\n tx_digest: result.txDigest,\n };\n }\n case 'respond': {\n if (!params.dispute_id) {\n throw new Error('dispute_id is required when action=respond');\n }\n const evidenceBlobId = await resolveEvidenceBlobId(params, context);\n const result = await client.respondToDispute({\n disputeId: params.dispute_id,\n evidenceBlobId,\n proposedSplitMist: parseMist(params.proposed_split_mist, 'proposed_split_mist'),\n signer: context.keypair as never,\n });\n return {\n action: 'respond',\n dispute_id: params.dispute_id,\n evidence_blob_id: evidenceBlobId,\n tx_digest: result.txDigest,\n };\n }\n case 'accept': {\n if (!params.dispute_id || !params.task_id) {\n throw new Error('dispute_id and task_id are required when action=accept');\n }\n const result = await client.acceptResolution({\n disputeId: params.dispute_id,\n taskId: params.task_id,\n signer: context.keypair as never,\n });\n return {\n action: 'accept',\n dispute_id: params.dispute_id,\n task_id: params.task_id,\n requester_amount_mist: result.requesterAmount.toString(),\n provider_amount_mist: result.providerAmount.toString(),\n tx_digest: result.txDigest,\n };\n }\n case 'status': {\n if ((params.dispute_id ? 1 : 0) + (params.task_id ? 1 : 0) !== 1) {\n throw new Error('Provide exactly one of dispute_id or task_id when action=status');\n }\n const dispute = params.dispute_id\n ? await client.getDispute(params.dispute_id)\n : await client.getDisputeByTask(params.task_id as string);\n if (!dispute) {\n throw new Error(params.task_id ? `No dispute found for task ${params.task_id}.` : `Dispute ${params.dispute_id ?? ''} was not found.`);\n }\n return {\n action: 'status',\n dispute,\n };\n }\n default:\n throw new Error(`Unknown dispute action: ${String(params.action)}`);\n }\n}\n\nasync function resolveEvidenceBlobId(params: MeshDisputeParams, context: MeshToolContext): Promise<string> {\n if ((params.evidence_blob_id ? 1 : 0) + (params.evidence ? 1 : 0) !== 1) {\n throw new Error('Provide exactly one of evidence or evidence_blob_id for dispute open/respond actions');\n }\n if (params.evidence_blob_id) {\n return params.evidence_blob_id;\n }\n if (!params.evidence) {\n throw new Error('evidence or evidence_blob_id is required for dispute open/respond actions');\n }\n const stored = await context.blobStore.store(new TextEncoder().encode(params.evidence));\n return stored.blobId;\n}\n\nfunction parseMist(value: string | number | undefined, field: string): bigint {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error(`${field} must be a non-negative integer string.`);\n}\n","import { PaymentRail, TaskStatus, type AgentCard, type Capability, type Task } from '@hivemind-os/collective-types';\nimport { PaymentRailSelector, RelayConsumerClient, ReputationEventPublisher, type SelectedPaymentRail } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob, hexToBytes, supportsEncryptedBlobs } from '../encryption.js';\nimport { resolveProviderCapability } from './discover.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst DEFAULT_TIMEOUT_SECONDS = 120;\nconst DEFAULT_DISPUTE_WINDOW_MS = 5 * 60_000;\nconst DEFAULT_EXPIRY_HOURS = 24;\n\nexport interface MeshExecuteParams {\n capability: string;\n provider_did?: string;\n input: string;\n max_price_mist?: number;\n timeout_seconds?: number;\n mode?: 'auto' | 'sync' | 'async';\n}\n\nexport const meshExecuteTool = {\n name: 'collective_execute',\n description: 'Execute a mesh task. Returns a task handle (async) if the client supports MCP Tasks, otherwise blocks until completion.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n provider_did: { type: 'string', description: 'Specific provider DID to use' },\n input: { type: 'string', description: 'Task input payload' },\n max_price_mist: { type: 'number', description: 'Maximum spend in MIST' },\n timeout_seconds: { type: 'number', description: 'Polling timeout in seconds (default 120)' },\n mode: { type: 'string', enum: ['auto', 'sync', 'async'], description: 'Execution preference (default auto)' },\n },\n required: ['capability', 'input'],\n },\n};\n\nexport async function runMeshExecute(\n params: MeshExecuteParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n result: string;\n provider_did: string;\n price_mist: string;\n status: string;\n execution_mode: 'sync' | 'async';\n payment_rail: PaymentRail;\n payment_receipt?: string;\n latency_ms?: number;\n}> {\n const resolved = await resolveProviderCapability(params.capability, context, params.provider_did);\n const priceMist = resolved.capability.pricing.amount;\n const maxPrice = toOptionalBigInt(params.max_price_mist);\n\n if (maxPrice !== undefined && priceMist > maxPrice) {\n throw new Error(`Provider price ${priceMist.toString()} exceeds max_price_mist ${maxPrice.toString()}.`);\n }\n\n const mode = params.mode ?? 'auto';\n if (mode !== 'async') {\n const relayResult = await tryRelayExecution(params, context, resolved, priceMist);\n if (relayResult) {\n await publishSuccessfulReputationEvent(context, {\n providerDid: relayResult.provider_did,\n taskId: relayResult.task_id,\n capability: resolved.capability.name,\n priceMist,\n latencyMs: relayResult.latency_ms,\n });\n return relayResult;\n }\n }\n\n const prepared = await prepareAsyncExecution(params, context, resolved, priceMist);\n const task = await waitForTaskCompletion(prepared.taskId, context, params.timeout_seconds);\n\n if (!task.resultBlobId) {\n throw new Error(`Task ${prepared.taskId} completed without a result blob.`);\n }\n\n const resultBytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n if (!resultBytes) {\n throw new Error(`Result blob ${task.resultBlobId} was not found.`);\n }\n\n await context.taskClient.releasePayment({\n taskId: prepared.taskId,\n keypair: context.keypair,\n });\n context.spendingPolicy.record({\n amountMist: prepared.priceMist,\n rail: prepared.rail,\n taskId: prepared.taskId,\n appId: prepared.providerDid,\n originAppName: context.originAppName,\n });\n\n await publishSuccessfulReputationEvent(context, {\n providerDid: prepared.providerDid,\n taskId: prepared.taskId,\n capability: resolved.capability.name,\n priceMist: prepared.priceMist,\n latencyMs: task.acceptedAt && task.completedAt ? task.completedAt - task.acceptedAt : undefined,\n });\n\n return {\n task_id: prepared.taskId,\n result: decoder.decode(resultBytes),\n provider_did: prepared.providerDid,\n price_mist: prepared.priceMist.toString(),\n status: TaskStatus[TaskStatus.RELEASED],\n execution_mode: 'async',\n payment_rail: prepared.rail,\n };\n}\n\nexport async function prepareMeshExecution(\n params: Pick<MeshExecuteParams, 'capability' | 'provider_did' | 'input' | 'max_price_mist'>,\n context: MeshToolContext,\n): Promise<{\n taskId: string;\n providerDid: string;\n priceMist: bigint;\n rail: PaymentRail;\n}> {\n const resolved = await resolveProviderCapability(params.capability, context, params.provider_did);\n return prepareAsyncExecution(params, context, resolved, resolved.capability.pricing.amount);\n}\n\nasync function prepareAsyncExecution(\n params: Pick<MeshExecuteParams, 'input' | 'max_price_mist'>,\n context: MeshToolContext,\n resolved: Awaited<ReturnType<typeof resolveProviderCapability>>,\n priceMist: bigint,\n): Promise<{\n taskId: string;\n providerDid: string;\n priceMist: bigint;\n rail: PaymentRail;\n}> {\n if (resolved.capability.pricing.rail !== PaymentRail.SUI_ESCROW) {\n throw new Error(`Capability ${resolved.capability.name} does not support SUI escrow execution.`);\n }\n\n approveSpend(context, priceMist, resolved.capability.pricing.rail, resolved.agent.did);\n\n const { blobId } = await storeTaskInput(context, resolved.agent, encoder.encode(params.input));\n const posted = await context.taskClient.postTask({\n capability: resolved.capability.name,\n category: 'general',\n inputBlobId: blobId,\n priceMist,\n disputeWindowMs: DEFAULT_DISPUTE_WINDOW_MS,\n expiryHours: DEFAULT_EXPIRY_HOURS,\n keypair: context.keypair,\n });\n\n return {\n taskId: posted.taskId,\n providerDid: resolved.agent.did,\n priceMist,\n rail: resolved.capability.pricing.rail,\n };\n}\n\nasync function tryRelayExecution(\n params: MeshExecuteParams,\n context: MeshToolContext,\n resolved: Awaited<ReturnType<typeof resolveProviderCapability>>,\n priceMist: bigint,\n) {\n const relayUrl = getRelayUrl(resolved.agent);\n if (!relayUrl || !context.relayAuthProvider) {\n return null;\n }\n\n try {\n const selector = context.paymentRailSelector ?? new PaymentRailSelector();\n const selectedRail = selector.selectRail({\n executionMode: 'sync',\n consumerHasSuiWallet: Boolean(context.relayAuthProvider),\n consumerHasEvmWallet: Boolean(context.x402Client),\n providerAcceptsSui: providerAcceptsSui(resolved.capability),\n providerAcceptsX402: providerAcceptsX402(resolved.agent, resolved.capability),\n amount: priceMist,\n currency: resolved.capability.pricing.currency,\n });\n const rail = toPaymentRail(selectedRail);\n\n approveSpend(context, priceMist, rail, resolved.agent.did);\n\n const client = new RelayConsumerClient(context.x402Client ?? null, context.relayAuthProvider, { relayUrl });\n const response = await client.executeSync({\n providerDid: resolved.agent.did,\n capability: resolved.capability.name,\n input: params.input,\n paymentRail: rail,\n timeoutMs: normalizeTimeoutMs(params.timeout_seconds),\n });\n\n const taskId = response.taskId ?? `relay-${resolved.agent.did}-${Date.now()}`;\n context.spendingPolicy.record({\n amountMist: priceMist,\n rail,\n taskId,\n appId: resolved.agent.did,\n originAppName: context.originAppName,\n });\n\n return {\n task_id: taskId,\n result: stringifyRelayResult(response.result),\n provider_did: response.providerDid ?? resolved.agent.did,\n price_mist: priceMist.toString(),\n status: 'COMPLETED',\n execution_mode: 'sync' as const,\n payment_rail: rail,\n payment_receipt: response.paymentReceipt,\n latency_ms: response.latencyMs,\n };\n } catch (error) {\n if (!shouldFallbackToAsync(error)) {\n throw error;\n }\n\n context.logger?.warn?.(\n { err: error, providerDid: resolved.agent.did, capability: resolved.capability.name },\n 'Relay execution unavailable; falling back to async Sui flow.',\n );\n return null;\n }\n}\n\nexport async function waitForTaskCompletion(\n taskId: string,\n context: MeshToolContext,\n timeoutSeconds = DEFAULT_TIMEOUT_SECONDS,\n): Promise<Task> {\n const timeoutMs = normalizeTimeoutMs(timeoutSeconds);\n const startedAt = Date.now();\n\n while (true) {\n const task = await context.taskClient.getTask(taskId);\n if (!task) {\n throw new Error(`Task ${taskId} was not found.`);\n }\n\n if (task.status === TaskStatus.COMPLETED || task.status === TaskStatus.RELEASED) {\n return task;\n }\n\n if (task.status === TaskStatus.CANCELLED || task.status === TaskStatus.DISPUTED) {\n throw new Error(`Task ${taskId} ended with status ${taskStatusLabel(task.status)}.`);\n }\n\n const elapsedMs = Date.now() - startedAt;\n if (elapsedMs >= timeoutMs) {\n throw new Error(`Timed out waiting for task ${taskId} to complete.`);\n }\n\n const remainingMs = timeoutMs - elapsedMs;\n await delay(Math.min(remainingMs, 1_000));\n }\n}\n\nfunction approveSpend(context: MeshToolContext, amountMist: bigint, rail: PaymentRail, appId: string): void {\n const decision = context.spendingPolicy.evaluate({\n amountMist,\n rail,\n appId,\n originAppName: context.originAppName,\n });\n if (!decision.approved) {\n throw new Error(decision.reason ?? 'Spending policy rejected the request.');\n }\n}\n\nfunction getRelayUrl(agent: AgentCard): string | undefined {\n const relayEndpoint = agent.relayEndpoints?.find((endpoint) => !endpoint.modes || endpoint.modes.includes('sync'));\n if (relayEndpoint?.endpoint) {\n return relayEndpoint.endpoint;\n }\n\n if (agent.endpoint && /^(https?|wss?):\\/\\//i.test(agent.endpoint)) {\n return agent.endpoint;\n }\n\n return undefined;\n}\n\nfunction providerAcceptsSui(capability: Capability): boolean {\n return capability.paymentRails?.includes(PaymentRail.SUI_TRANSFER) ?? capability.pricing.rail !== PaymentRail.X402_BASE;\n}\n\nfunction providerAcceptsX402(agent: AgentCard, capability: Capability): boolean {\n return capability.paymentRails?.includes(PaymentRail.X402_BASE) ?? Boolean(getRelayUrl(agent));\n}\n\nfunction toPaymentRail(selectedRail: SelectedPaymentRail): PaymentRail {\n switch (selectedRail) {\n case 'sui-escrow':\n return PaymentRail.SUI_ESCROW;\n case 'sui-transfer':\n return PaymentRail.SUI_TRANSFER;\n case 'x402-base':\n return PaymentRail.X402_BASE;\n }\n}\n\nfunction shouldFallbackToAsync(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return /relay request timed out|fetch failed|provider .* is not connected to the relay|provider not found|payment challenge required|relay execution unavailable/i.test(\n error.message,\n );\n}\n\nfunction stringifyRelayResult(result: unknown): string {\n return typeof result === 'string' ? result : JSON.stringify(result);\n}\n\nfunction normalizeTimeoutMs(timeoutSeconds?: number): number {\n if (typeof timeoutSeconds !== 'number' || Number.isNaN(timeoutSeconds)) {\n return DEFAULT_TIMEOUT_SECONDS * 1_000;\n }\n\n return Math.max(0, Math.floor(timeoutSeconds * 1_000));\n}\n\nfunction toOptionalBigInt(value?: number): bigint | undefined {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return undefined;\n }\n\n return BigInt(Math.max(0, Math.floor(value)));\n}\n\nasync function storeTaskInput(\n context: MeshToolContext,\n provider: AgentCard,\n input: Uint8Array,\n): Promise<{ blobId: string }> {\n const providerEncryptionKey = hexToBytes(provider.encryptionPublicKey);\n const encryptionEnabled = context.encryption?.enabled ?? supportsEncryptedBlobs(context.blobStore);\n const requireEncryption = context.encryption?.requireEncryption ?? false;\n\n if (encryptionEnabled && providerEncryptionKey) {\n if (!supportsEncryptedBlobs(context.blobStore)) {\n throw new Error('Encryption is enabled, but the configured blobstore does not support encrypted payloads.');\n }\n\n return await context.blobStore.storeEncrypted(input, providerEncryptionKey);\n }\n\n if (requireEncryption) {\n throw new Error(`Provider ${provider.did} does not publish an encryption key.`);\n }\n\n return await context.blobStore.store(input);\n}\n\nfunction taskStatusLabel(status: TaskStatus): string {\n return TaskStatus[status] ?? 'UNKNOWN';\n}\n\nasync function publishSuccessfulReputationEvent(\n context: MeshToolContext,\n params: {\n providerDid: string;\n taskId: string;\n capability: string;\n priceMist: bigint;\n latencyMs?: number;\n },\n): Promise<void> {\n const publisher = context.reputationPublisher ?? (\n hasSigningIdentity(context.relayAuthProvider)\n ? new ReputationEventPublisher(context.blobStore, context.relayAuthProvider)\n : null\n );\n if (!publisher) {\n return;\n }\n\n try {\n const event = await publisher.createEvent({\n type: 'task_completion',\n subject: params.providerDid,\n taskId: params.taskId,\n outcome: 'success',\n capability: params.capability,\n latencyMs: params.latencyMs,\n paymentAmount: {\n amount: params.priceMist.toString(),\n currency: 'MIST',\n },\n });\n await context.reputationStore?.addEvent(event);\n await publisher.publishEvent(event);\n } catch (error) {\n context.logger?.warn?.({ err: error, taskId: params.taskId }, 'Failed to publish reputation event.');\n }\n}\n\nfunction hasSigningIdentity(identity: MeshToolContext['relayAuthProvider']): identity is NonNullable<MeshToolContext['relayAuthProvider']> {\n return Boolean(identity && typeof identity.getDID === 'function' && typeof identity.signPersonalMessage === 'function');\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolvePromise) => {\n setTimeout(resolvePromise, ms);\n });\n}\n","import type { MeshToolContext } from '../context.js';\nimport { prepareMeshExecution, type MeshExecuteParams } from './execute.js';\n\nexport interface MeshExecuteAsyncParams\n extends Pick<MeshExecuteParams, 'capability' | 'provider_did' | 'input' | 'max_price_mist'> {}\n\nexport const meshExecuteAsyncTool = {\n name: 'collective_execute_async',\n description: 'Submit a mesh task and return immediately',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n provider_did: { type: 'string', description: 'Specific provider DID to use' },\n input: { type: 'string', description: 'Task input payload' },\n max_price_mist: { type: 'number', description: 'Maximum spend in MIST' },\n },\n required: ['capability', 'input'],\n },\n};\n\nexport async function runMeshExecuteAsync(\n params: MeshExecuteAsyncParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n provider_did: string;\n price_mist: string;\n status: 'OPEN';\n}> {\n const prepared = await prepareMeshExecution(params, context);\n\n return {\n task_id: prepared.taskId,\n provider_did: prepared.providerDid,\n price_mist: prepared.priceMist.toString(),\n status: 'OPEN',\n };\n}\n","import { decodeMeteredResult, getMeteredResultUnits, parseMeteredResultEnvelope, ResultVerifier } from '@hivemind-os/collective-core';\nimport { PaymentRail, PaymentScheme, TaskStatus } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob, hexToBytes, supportsEncryptedBlobs } from '../encryption.js';\nimport { resolveProviderCapability } from './discover.js';\nimport { waitForTaskCompletion } from './execute.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst DEFAULT_TIMEOUT_SECONDS = 120;\nconst DEFAULT_DISPUTE_WINDOW_MS = 5 * 60_000;\nconst DEFAULT_EXPIRY_HOURS = 24;\n\nexport interface MeshMeteredExecuteParams {\n capability: string;\n provider_did?: string;\n input: string;\n max_price_mist: number;\n unit_price_mist: number;\n timeout_seconds?: number;\n}\n\nexport interface MeshVerifyResultParams {\n task_id: string;\n}\n\nexport const meshMeteredExecuteTool = {\n name: 'collective_metered_execute',\n description: 'Execute a metered mesh task with capped escrow and result verification',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n provider_did: { type: 'string', description: 'Specific provider DID to use' },\n input: { type: 'string', description: 'Task input payload' },\n max_price_mist: { type: 'number', description: 'Maximum escrow in MIST' },\n unit_price_mist: { type: 'number', description: 'Price per metered unit in MIST' },\n timeout_seconds: { type: 'number', description: 'Polling timeout in seconds (default 120)' },\n },\n required: ['capability', 'input', 'max_price_mist', 'unit_price_mist'],\n },\n};\n\nexport const meshVerifyResultTool = {\n name: 'collective_verify_result',\n description: 'Verify a metered task result blob against its on-chain hash chain root',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Task object id' },\n },\n required: ['task_id'],\n },\n};\n\nexport async function runMeshMeteredExecute(\n params: MeshMeteredExecuteParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n provider_did: string;\n result: string;\n status: string;\n payment_rail: PaymentRail;\n payment_scheme: PaymentScheme.UPTO;\n max_price_mist: string;\n actual_price_mist: string;\n unit_price_mist: string;\n metered_units: number;\n verification_hash: string;\n verified: boolean;\n}> {\n const resolved = await resolveProviderCapability(params.capability, context, params.provider_did);\n if (resolved.capability.pricing.rail !== PaymentRail.SUI_ESCROW) {\n throw new Error(`Capability ${resolved.capability.name} does not support SUI escrow execution.`);\n }\n\n const maxPriceMist = toRequiredBigInt(params.max_price_mist, 'max_price_mist');\n const unitPriceMist = toRequiredBigInt(params.unit_price_mist, 'unit_price_mist');\n const spendingDecision = context.spendingPolicy.evaluate({\n amountMist: maxPriceMist,\n rail: PaymentRail.SUI_ESCROW,\n appId: resolved.agent.did,\n originAppName: context.originAppName,\n });\n if (!spendingDecision.approved) {\n throw new Error(spendingDecision.reason ?? 'Spending policy rejected the request.');\n }\n\n const inputBlob = await storeTaskInput(context, resolved.agent, encoder.encode(params.input));\n const posted = await context.taskClient.postMeteredTask({\n capability: resolved.capability.name,\n category: 'general',\n inputBlobId: inputBlob.blobId,\n agreementHash: `metered:${resolved.capability.name}`,\n maxPriceMist,\n unitPriceMist,\n disputeWindowMs: DEFAULT_DISPUTE_WINDOW_MS,\n expiryHours: DEFAULT_EXPIRY_HOURS,\n keypair: context.keypair,\n });\n const task = await waitForTaskCompletion(posted.taskId, context, params.timeout_seconds ?? DEFAULT_TIMEOUT_SECONDS);\n const verification = await verifyMeteredTaskResult(task.id, context);\n\n await context.taskClient.releaseMeteredPayment({\n taskId: task.id,\n keypair: context.keypair,\n });\n context.spendingPolicy.record({\n amountMist: task.price,\n rail: PaymentRail.SUI_ESCROW,\n taskId: task.id,\n appId: resolved.agent.did,\n originAppName: context.originAppName,\n });\n\n return {\n task_id: task.id,\n provider_did: resolved.agent.did,\n result: verification.result,\n status: TaskStatus[TaskStatus.RELEASED],\n payment_rail: PaymentRail.SUI_ESCROW,\n payment_scheme: PaymentScheme.UPTO,\n max_price_mist: (task.maxPrice ?? maxPriceMist).toString(),\n actual_price_mist: task.price.toString(),\n unit_price_mist: (task.unitPrice ?? unitPriceMist).toString(),\n metered_units: task.meteredUnits ?? verification.metered_units,\n verification_hash: verification.verification_hash,\n verified: verification.verified,\n };\n}\n\nexport async function runMeshVerifyResult(\n params: MeshVerifyResultParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n verified: boolean;\n verification_hash: string;\n metered_units: number;\n result: string;\n}> {\n return await verifyMeteredTaskResult(params.task_id, context);\n}\n\nasync function verifyMeteredTaskResult(\n taskId: string,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n verified: boolean;\n verification_hash: string;\n metered_units: number;\n result: string;\n}> {\n const task = await context.taskClient.getTask(taskId);\n if (!task) {\n throw new Error(`Task ${taskId} was not found.`);\n }\n if (!task.resultBlobId) {\n throw new Error(`Task ${taskId} does not have a result blob.`);\n }\n\n const resultBytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n if (!resultBytes) {\n throw new Error(`Result blob ${task.resultBlobId} was not found.`);\n }\n\n const envelope = parseMeteredResultEnvelope(resultBytes);\n if (!envelope) {\n throw new Error(`Result blob ${task.resultBlobId} is not a metered result envelope.`);\n }\n\n const verifier = new ResultVerifier();\n const verified = verifier.verify(task, envelope.proof, getMeteredResultUnits(envelope));\n return {\n task_id: task.id,\n verified,\n verification_hash: task.verificationHash ?? envelope.proof.root,\n metered_units: task.meteredUnits ?? envelope.proof.unitCount,\n result: decoder.decode(decodeMeteredResult(envelope)),\n };\n}\n\nfunction toRequiredBigInt(value: number, name: string): bigint {\n if (typeof value !== 'number' || Number.isNaN(value) || value < 0) {\n throw new Error(`Invalid ${name}.`);\n }\n\n return BigInt(Math.floor(value));\n}\n\nasync function storeTaskInput(\n context: MeshToolContext,\n provider: Awaited<ReturnType<typeof resolveProviderCapability>>['agent'],\n input: Uint8Array,\n): Promise<{ blobId: string }> {\n const providerEncryptionKey = hexToBytes(provider.encryptionPublicKey) ?? undefined;\n const encryptionEnabled = context.encryption?.enabled ?? supportsEncryptedBlobs(context.blobStore);\n const requireEncryption = context.encryption?.requireEncryption ?? false;\n\n if (encryptionEnabled && providerEncryptionKey) {\n if (!supportsEncryptedBlobs(context.blobStore)) {\n throw new Error('Encryption is enabled, but the configured blobstore does not support encrypted payloads.');\n }\n\n return await context.blobStore.storeEncrypted(input, providerEncryptionKey);\n }\n if (requireEncryption) {\n throw new Error(`Provider ${provider.did} does not publish an encryption key.`);\n }\n return await context.blobStore.store(input);\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshMarketplaceAcceptBidParams {\n task_id: string;\n bid_id: string;\n reject_competing?: boolean;\n}\n\nexport const meshMarketplaceAcceptBidTool = {\n name: 'collective_marketplace_accept_bid',\n description: 'Accept a marketplace bid and optionally reject competing bids',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Marketplace task id' },\n bid_id: { type: 'string', description: 'Bid id to accept' },\n reject_competing: { type: 'boolean', description: 'Reject other active bids in the same transaction (default true)' },\n },\n required: ['task_id', 'bid_id'],\n },\n};\n\nexport async function runMeshMarketplaceAcceptBid(\n params: MeshMarketplaceAcceptBidParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const result = await client.acceptBid({\n taskId: params.task_id,\n bidId: params.bid_id,\n rejectCompeting: params.reject_competing,\n signer: context.keypair,\n });\n\n return {\n task_id: params.task_id,\n bid_id: params.bid_id,\n rejected_bid_ids: result.rejectedBidIds,\n tx_digest: result.txDigest,\n };\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshMarketplaceBidParams {\n task_id: string;\n bid_price_mist: string | number;\n reputation_score?: string | number;\n evidence?: string;\n}\n\nexport const meshMarketplaceBidTool = {\n name: 'collective_marketplace_bid',\n description: 'Place a marketplace bid on an open task',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Open task object id' },\n bid_price_mist: { type: 'string', description: 'Bid price in MIST' },\n reputation_score: { type: 'string', description: 'Optional reputation score override' },\n evidence: { type: 'string', description: 'Optional proposal or qualifications blob content' },\n },\n required: ['task_id', 'bid_price_mist'],\n },\n};\n\nexport async function runMeshMarketplaceBid(\n params: MeshMarketplaceBidParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const result = await client.placeBid({\n taskId: params.task_id,\n bidPriceMist: parseMist(params.bid_price_mist, 'bid_price_mist'),\n reputationScore: params.reputation_score == null ? undefined : parseMist(params.reputation_score, 'reputation_score'),\n evidenceBlob: params.evidence,\n signer: context.keypair,\n });\n\n return {\n bid_id: result.bidId,\n task_id: params.task_id,\n tx_digest: result.txDigest,\n reputation_score: result.reputationScore.toString(),\n };\n}\n\nfunction parseMist(value: string | number, field: string): bigint {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error(`${field} must be a non-negative integer string.`);\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshMarketplaceBrowseParams {\n category?: string;\n min_price_mist?: string | number;\n max_price_mist?: string | number;\n limit?: number;\n}\n\nexport const meshMarketplaceBrowseTool = {\n name: 'collective_marketplace_browse',\n description: 'Browse open marketplace tasks by category and price filters',\n inputSchema: {\n type: 'object' as const,\n properties: {\n category: { type: 'string', description: 'Optional marketplace category filter' },\n min_price_mist: { type: 'string', description: 'Optional minimum escrow budget in MIST' },\n max_price_mist: { type: 'string', description: 'Optional maximum escrow budget in MIST' },\n limit: { type: 'number', description: 'Maximum number of open tasks to return (default 20)' },\n },\n required: [],\n },\n};\n\nexport async function runMeshMarketplaceBrowse(\n params: MeshMarketplaceBrowseParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const tasks = await client.browseOpenTasks({\n category: params.category,\n minPriceMist: parseOptionalMist(params.min_price_mist),\n maxPriceMist: parseOptionalMist(params.max_price_mist),\n limit: normalizeLimit(params.limit),\n });\n\n return {\n tasks,\n count: tasks.length,\n };\n}\n\nfunction parseOptionalMist(value: string | number | undefined): bigint | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error('Price filters must be non-negative integer strings.');\n}\n\nfunction normalizeLimit(limit?: number): number {\n if (limit == null) {\n return 20;\n }\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error('limit must be a positive integer.');\n }\n return limit;\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nconst DEFAULT_DISPUTE_WINDOW_MS = 60_000;\nconst DEFAULT_EXPIRY_HOURS = 24;\n\nexport interface MeshMarketplacePostParams {\n capability: string;\n category: string;\n price_mist: string | number;\n input?: string;\n input_blob_id?: string;\n agreement_hash?: string;\n dispute_window_ms?: number;\n expiry_hours?: number;\n}\n\nexport const meshMarketplacePostTool = {\n name: 'collective_marketplace_post',\n description: 'Post an open marketplace task with category metadata',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability requested for the task' },\n category: { type: 'string', description: 'Marketplace category used for browsing' },\n price_mist: { type: 'string', description: 'Escrowed task budget in MIST' },\n input: { type: 'string', description: 'Inline task input to upload to blob storage' },\n input_blob_id: { type: 'string', description: 'Existing blob id containing task input' },\n agreement_hash: { type: 'string', description: 'Optional agreement hash or plaintext summary' },\n dispute_window_ms: { type: 'number', description: 'Optional dispute window override in milliseconds' },\n expiry_hours: { type: 'number', description: 'Optional task expiry in hours' },\n },\n required: ['capability', 'category', 'price_mist'],\n },\n};\n\nexport async function runMeshMarketplacePost(\n params: MeshMarketplacePostParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const inputBlobId = await resolveInputBlobId(params, context);\n const result = await client.postOpenTask({\n capability: params.capability,\n category: params.category,\n inputBlobId,\n agreementHash: params.agreement_hash,\n priceMist: parseMist(params.price_mist, 'price_mist'),\n disputeWindowMs: normalizeNonNegativeInteger(params.dispute_window_ms, DEFAULT_DISPUTE_WINDOW_MS, 'dispute_window_ms'),\n expiryHours: normalizeNonNegativeInteger(params.expiry_hours, DEFAULT_EXPIRY_HOURS, 'expiry_hours'),\n signer: context.keypair,\n });\n\n return {\n task_id: result.taskId,\n tx_digest: result.txDigest,\n capability: params.capability,\n category: params.category,\n input_blob_id: inputBlobId,\n };\n}\n\nasync function resolveInputBlobId(params: MeshMarketplacePostParams, context: MeshToolContext): Promise<string> {\n if ((params.input_blob_id ? 1 : 0) + (params.input ? 1 : 0) !== 1) {\n throw new Error('Provide exactly one of input or input_blob_id when posting a marketplace task');\n }\n if (params.input_blob_id) {\n return params.input_blob_id;\n }\n if (!params.input) {\n throw new Error('input or input_blob_id is required when posting a marketplace task');\n }\n const stored = await context.blobStore.store(new TextEncoder().encode(params.input));\n return stored.blobId;\n}\n\nfunction parseMist(value: string | number, field: string): bigint {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error(`${field} must be a non-negative integer string.`);\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number, field: string): number {\n if (value == null) {\n return fallback;\n }\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${field} must be a non-negative integer.`);\n }\n return value;\n}\n","import {\n AggregationMode,\n ProviderSelectionStrategy,\n type AgentCard,\n type MultiProviderRequest,\n} from '@hivemind-os/collective-types';\nimport {\n CircuitBreaker,\n FanOutExecutor,\n PerformanceTracker,\n ProviderSelector,\n} from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { discoverAgentsByCapability } from './discover.js';\nimport { runMeshExecute } from './execute.js';\n\nconst routingCircuitBreaker = new CircuitBreaker();\nconst routingPerformanceTracker = new PerformanceTracker();\nconst providerSelector = new ProviderSelector({\n circuitBreaker: routingCircuitBreaker,\n performanceTracker: routingPerformanceTracker,\n});\n\nexport interface MeshMultiExecuteParams {\n capability: string;\n input: unknown;\n fanOutCount?: number;\n strategy?: ProviderSelectionStrategy | `${ProviderSelectionStrategy}`;\n aggregation?: AggregationMode | `${AggregationMode}`;\n timeout?: number;\n maxPricePerProvider?: number;\n}\n\nexport const meshMultiExecuteTool = {\n name: 'collective_multi_execute',\n description: 'Execute a mesh task across multiple providers and aggregate the results',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n input: { description: 'Task input payload' },\n fanOutCount: { type: 'number', description: 'How many providers to fan out to (default 3)' },\n strategy: {\n type: 'string',\n enum: Object.values(ProviderSelectionStrategy),\n description: 'Provider selection strategy (default weighted)',\n },\n aggregation: {\n type: 'string',\n enum: Object.values(AggregationMode),\n description: 'Aggregation mode (default first_success)',\n },\n timeout: { type: 'number', description: 'Per-provider timeout in milliseconds' },\n maxPricePerProvider: { type: 'number', description: 'Maximum price per provider in MIST' },\n },\n required: ['capability', 'input'],\n },\n};\n\nexport interface MeshMultiExecuteResult {\n capability: string;\n strategy: ProviderSelectionStrategy;\n aggregation: AggregationMode;\n providers: Array<{\n did: string;\n price_mist: string;\n reputation: number;\n estimated_latency_ms?: number;\n composite_score: number;\n }>;\n results: Array<{\n provider: string;\n status: 'success' | 'failure' | 'timeout';\n result?: unknown;\n duration_ms: number;\n error?: string;\n }>;\n aggregated_result?: unknown;\n total_cost_mist: string;\n}\n\nexport async function runMeshMultiExecute(\n params: MeshMultiExecuteParams,\n context: MeshToolContext,\n): Promise<MeshMultiExecuteResult> {\n const capability = params.capability.trim();\n if (!capability) {\n throw new Error('Capability is required.');\n }\n\n const fanOutCount = normalizePositiveInteger(params.fanOutCount, 3);\n const strategy = parseSelectionStrategy(params.strategy);\n const aggregation = parseAggregation(params.aggregation);\n const request: MultiProviderRequest = {\n capability,\n input: params.input,\n fanOutCount,\n strategy,\n aggregation,\n timeout: normalizeOptionalInteger(params.timeout),\n maxPricePerProvider: toOptionalBigInt(params.maxPricePerProvider),\n };\n\n const { agents: discoveredAgents } = await discoverAgentsByCapability(\n capability,\n context,\n Math.max(fanOutCount * 3, fanOutCount),\n 'reputation',\n );\n const candidates = filterByMaxPrice(discoveredAgents, capability, request.maxPricePerProvider);\n const selected = providerSelector.selectProviders(candidates, capability, strategy, fanOutCount);\n if (selected.length === 0) {\n throw new Error(`No eligible providers found for capability ${capability}.`);\n }\n\n const executor = new FanOutExecutor({\n circuitBreaker: routingCircuitBreaker,\n performanceTracker: routingPerformanceTracker,\n executeProvider: async (provider, executionRequest, executionContext) => {\n if (executionContext.signal.aborted) {\n throw executionContext.signal.reason ?? new Error('Provider execution aborted.');\n }\n\n const value = await runMeshExecute({\n capability: executionRequest.capability,\n provider_did: provider.did,\n input: serializeInput(executionRequest.input),\n timeout_seconds: executionRequest.timeout ? Math.max(1, Math.ceil(executionRequest.timeout / 1_000)) : undefined,\n }, context);\n return {\n value,\n aggregateValue: value.result,\n cost: BigInt(value.price_mist),\n };\n },\n });\n\n const result = await executor.execute(request, selected);\n\n return {\n capability,\n strategy,\n aggregation,\n providers: selected.map((provider) => ({\n did: provider.did,\n price_mist: provider.price.toString(),\n reputation: provider.reputation,\n estimated_latency_ms: provider.estimatedLatency,\n composite_score: provider.compositeScore,\n })),\n results: result.results.map((entry) => ({\n provider: entry.provider,\n status: entry.status,\n result: entry.result,\n duration_ms: entry.durationMs,\n error: entry.error,\n })),\n aggregated_result: result.aggregatedResult,\n total_cost_mist: result.totalCost.toString(),\n };\n}\n\nfunction filterByMaxPrice(agents: AgentCard[], capability: string, maxPricePerProvider?: bigint): AgentCard[] {\n if (maxPricePerProvider === undefined) {\n return agents;\n }\n\n return agents.filter((agent) => {\n const matched = agent.capabilities.find((entry) => entry.name.toLowerCase() === capability.toLowerCase());\n return matched ? matched.pricing.amount <= maxPricePerProvider : false;\n });\n}\n\nfunction parseSelectionStrategy(strategy?: MeshMultiExecuteParams['strategy']): ProviderSelectionStrategy {\n if (!strategy) {\n return ProviderSelectionStrategy.WEIGHTED;\n }\n if (Object.values(ProviderSelectionStrategy).includes(strategy as ProviderSelectionStrategy)) {\n return strategy as ProviderSelectionStrategy;\n }\n throw new Error(`Unsupported provider selection strategy: ${String(strategy)}.`);\n}\n\nfunction parseAggregation(aggregation?: MeshMultiExecuteParams['aggregation']): AggregationMode {\n if (!aggregation) {\n return AggregationMode.FIRST_SUCCESS;\n }\n if (Object.values(AggregationMode).includes(aggregation as AggregationMode)) {\n return aggregation as AggregationMode;\n }\n throw new Error(`Unsupported aggregation mode: ${String(aggregation)}.`);\n}\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return fallback;\n }\n return Math.max(1, Math.floor(value));\n}\n\nfunction normalizeOptionalInteger(value?: number): number | undefined {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return undefined;\n }\n return Math.max(1, Math.floor(value));\n}\n\nfunction toOptionalBigInt(value?: number): bigint | undefined {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return undefined;\n }\n return BigInt(Math.max(0, Math.floor(value)));\n}\n\nfunction serializeInput(input: unknown): string {\n return typeof input === 'string' ? input : JSON.stringify(input);\n}\n","import { PaymentRail, type SpendingPolicy } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshPolicyUpdateParams {\n daily_limit_mist?: number;\n monthly_limit_mist?: number;\n per_task_limit_mist?: number;\n}\n\nexport const meshPolicyUpdateTool = {\n name: 'collective_policy_update',\n description: 'Update local spending policy limits',\n inputSchema: {\n type: 'object' as const,\n properties: {\n daily_limit_mist: { type: 'number', description: 'Daily MIST limit' },\n monthly_limit_mist: { type: 'number', description: 'Monthly MIST limit' },\n per_task_limit_mist: { type: 'number', description: 'Per-task MIST limit' },\n },\n required: [],\n },\n};\n\nexport async function runMeshPolicyUpdate(\n params: MeshPolicyUpdateParams,\n context: MeshToolContext,\n): Promise<{\n updated: true;\n limits: Array<{ interval: string; amount_mist: string; rail: string }>;\n}> {\n const currentPolicy = clonePolicy(readPolicySnapshot(context));\n const nextLimits = [...currentPolicy.limits];\n\n applyLimit(nextLimits, 'transaction', params.per_task_limit_mist);\n applyLimit(nextLimits, 'day', params.daily_limit_mist);\n applyLimit(nextLimits, 'month', params.monthly_limit_mist);\n\n const updatedPolicy: SpendingPolicy = {\n ...currentPolicy,\n limits: nextLimits,\n };\n\n context.spendingPolicy.updatePolicy(updatedPolicy);\n\n return {\n updated: true,\n limits: updatedPolicy.limits.map((limit) => ({\n interval: limit.interval,\n amount_mist: limit.amount.toString(),\n rail: limit.rail ?? PaymentRail.SUI_ESCROW,\n })),\n };\n}\n\nfunction readPolicySnapshot(context: MeshToolContext): SpendingPolicy {\n const engineWithPolicy = context.spendingPolicy as unknown as { policy?: SpendingPolicy };\n return engineWithPolicy.policy ?? { limits: [] };\n}\n\nfunction clonePolicy(policy: SpendingPolicy): SpendingPolicy {\n return {\n ...policy,\n limits: policy.limits.map((limit) => ({ ...limit })),\n allowlist: policy.allowlist ? [...policy.allowlist] : undefined,\n denylist: policy.denylist ? [...policy.denylist] : undefined,\n };\n}\n\nfunction applyLimit(\n limits: SpendingPolicy['limits'],\n interval: 'transaction' | 'day' | 'month',\n amount?: number,\n): void {\n if (typeof amount !== 'number' || Number.isNaN(amount)) {\n return;\n }\n\n const nextLimit = {\n amount: BigInt(Math.max(0, Math.floor(amount))),\n interval,\n rail: PaymentRail.SUI_ESCROW,\n } as const;\n const index = limits.findIndex(\n (entry) => entry.interval === interval && (entry.rail ?? PaymentRail.SUI_ESCROW) === PaymentRail.SUI_ESCROW,\n );\n\n if (index >= 0) {\n limits[index] = nextLimit;\n return;\n }\n\n limits.push(nextLimit);\n}\n","import { PaymentRail, type Capability } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { hexToBytes } from '../encryption.js';\n\nexport interface MeshRegisterParams {\n name: string;\n description: string;\n capabilities: Array<{\n name: string;\n description: string;\n version: string;\n price_mist: number;\n }>;\n}\n\nexport const meshRegisterTool = {\n name: 'collective_register',\n description: 'Register the current daemon identity as a provider',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Display name for the agent' },\n description: { type: 'string', description: 'Agent description' },\n capabilities: {\n type: 'array' as const,\n items: {\n type: 'object' as const,\n properties: {\n name: { type: 'string' },\n description: { type: 'string' },\n version: { type: 'string' },\n price_mist: { type: 'number' },\n },\n required: ['name', 'description', 'version', 'price_mist'],\n },\n },\n },\n required: ['name', 'description', 'capabilities'],\n },\n};\n\nexport async function runMeshRegister(\n params: MeshRegisterParams,\n context: MeshToolContext,\n): Promise<{ agent_card_id: string; did: string; tx_digest: string }> {\n const capabilities: Capability[] = params.capabilities.map((entry) => ({\n name: entry.name,\n description: entry.description,\n version: entry.version,\n pricing: {\n rail: PaymentRail.SUI_ESCROW,\n amount: BigInt(Math.max(0, Math.floor(entry.price_mist))),\n currency: 'MIST',\n },\n }));\n\n const result = await context.registryClient.registerAgent({\n name: params.name,\n did: context.did,\n description: params.description,\n capabilities,\n endpoint: `mesh://agent/${context.did}`,\n encryptionPublicKey: context.encryption?.enabled ? (hexToBytes(context.encryption.publicKey) ?? undefined) : undefined,\n keypair: context.keypair,\n });\n\n const card = await context.registryClient.getAgentCard(result.agentCardId);\n if (card) {\n context.agentCache.upsertAgent(card);\n }\n\n return {\n agent_card_id: result.agentCardId,\n did: context.did,\n tx_digest: result.txDigest,\n };\n}\n","import { RelayRegistryClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshRelayRegistryParams {\n action: 'list' | 'register';\n endpoint?: string;\n stake_id?: string;\n region?: string;\n routing_fee_bps?: number;\n capabilities?: string[];\n}\n\nexport const meshRelayRegistryTool = {\n name: 'collective_relay_registry',\n description: 'List registered community relays or register this node as a relay operator',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: { type: 'string', enum: ['list', 'register'] },\n endpoint: { type: 'string', description: 'Relay websocket or HTTPS endpoint when action=register' },\n stake_id: { type: 'string', description: 'Relay stake position object id when action=register' },\n region: { type: 'string', description: 'Relay region label when action=register' },\n routing_fee_bps: { type: 'number', description: 'Routing fee in basis points when action=register' },\n capabilities: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional relay capabilities when action=register (defaults to [\"routing\"])',\n },\n },\n required: ['action'],\n },\n};\n\nexport async function runMeshRelayRegistry(\n params: MeshRelayRegistryParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.relayRegistryClient ?? new RelayRegistryClient(context.suiClient, context.networkConfig);\n\n switch (params.action) {\n case 'list': {\n const relays = await client.listRelays();\n return {\n action: 'list',\n count: relays.length,\n relays,\n };\n }\n case 'register': {\n const endpoint = requireNonEmpty(params.endpoint, 'endpoint');\n const stakeId = requireNonEmpty(params.stake_id, 'stake_id');\n const region = requireNonEmpty(params.region, 'region');\n if (params.routing_fee_bps === undefined) {\n throw new Error('routing_fee_bps is required when action=register');\n }\n if (!Number.isInteger(params.routing_fee_bps) || params.routing_fee_bps < 0 || params.routing_fee_bps > 10_000) {\n throw new Error('routing_fee_bps must be an integer between 0 and 10000');\n }\n const capabilities = normalizeCapabilities(params.capabilities);\n const result = await client.registerRelay({\n endpoint,\n stakeId,\n region,\n routingFeeBps: params.routing_fee_bps,\n capabilities,\n signer: context.keypair as never,\n });\n return {\n action: 'register',\n relay_id: result.relayId,\n tx_digest: result.txDigest,\n endpoint,\n region,\n routing_fee_bps: params.routing_fee_bps,\n capabilities,\n };\n }\n default:\n throw new Error(`Unknown relay registry action: ${String(params.action)}`);\n }\n}\n\nfunction requireNonEmpty(value: string | undefined, field: string): string {\n const normalized = value?.trim();\n if (!normalized) {\n throw new Error(`${field} is required when action=register`);\n }\n return normalized;\n}\n\nfunction normalizeCapabilities(capabilities: string[] | undefined): string[] {\n const normalized = capabilities?.map((capability) => capability.trim()).filter(Boolean) ?? [];\n return normalized.length > 0 ? [...new Set(normalized)] : ['routing'];\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport const meshSettingsTool = {\n name: 'collective_settings',\n description:\n 'Open the HiveMind Collective settings dashboard in the browser. ' +\n 'Shows wallet balance, spending limits, identity, network config, and agent discovery.',\n inputSchema: {\n type: 'object' as const,\n properties: {},\n required: [],\n },\n};\n\nexport async function runMeshSettings(\n _params: Record<string, never>,\n context: MeshToolContext,\n): Promise<{ url: string; opened: boolean; message: string }> {\n if (!context.portalUrl) {\n return {\n url: '',\n opened: false,\n message: 'Settings dashboard is not available. The daemon portal server may not be running.',\n };\n }\n\n let opened = false;\n if (context.openUrl) {\n try {\n opened = await context.openUrl(context.portalUrl);\n } catch {\n // Browser open failed — user can open URL manually\n }\n }\n\n return {\n url: context.portalUrl,\n opened,\n message: opened\n ? `Settings dashboard opened at ${context.portalUrl}`\n : `Open the settings dashboard in your browser: ${context.portalUrl}`,\n };\n}\n","import { StakingClient, STAKING_COOLDOWN_MS } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshStakeParams {\n action: 'deposit' | 'status' | 'withdraw';\n amount_sui?: string;\n stake_type?: 'agent' | 'relay';\n}\n\nexport const meshStakeTool = {\n name: 'collective_stake',\n description: 'Manage stake deposits, status, and withdrawals for the local Agentic Mesh identity',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: { type: 'string', enum: ['deposit', 'status', 'withdraw'] },\n amount_sui: { type: 'string', description: 'SUI amount to deposit when action=deposit' },\n stake_type: { type: 'string', enum: ['agent', 'relay'], description: 'Stake type for deposits (default agent)' },\n },\n required: ['action'],\n },\n};\n\nexport async function runMeshStake(params: MeshStakeParams, context: MeshToolContext): Promise<Record<string, unknown>> {\n const client = context.stakingClient ?? new StakingClient(context.suiClient, context.networkConfig);\n const owner = context.keypair.getPublicKey().toSuiAddress();\n\n switch (params.action) {\n case 'deposit': {\n if (!params.amount_sui) {\n throw new Error('amount_sui is required when action=deposit');\n }\n const amountMist = parseSuiToMist(params.amount_sui);\n const result = await client.depositStake({\n amountMist,\n stakeType: params.stake_type ?? 'agent',\n signer: context.keypair as never,\n });\n return {\n action: 'deposit',\n stake_id: result.stakeId,\n tx_digest: result.txDigest,\n amount_mist: amountMist.toString(),\n amount_sui: params.amount_sui,\n stake_type: params.stake_type ?? 'agent',\n };\n }\n case 'status': {\n const stake = await client.getStakeByOwner(owner);\n return {\n action: 'status',\n owner,\n staked: Boolean(stake),\n stake,\n };\n }\n case 'withdraw': {\n const stake = await client.getStakeByOwner(owner);\n if (!stake) {\n throw new Error('No stake position found for this wallet.');\n }\n if (stake.deactivatedAt === 0) {\n const result = await client.startDeactivation({ stakeId: stake.id, signer: context.keypair as never });\n return {\n action: 'deactivation_started',\n stake_id: stake.id,\n cooldown_ends_at: result.cooldownEndsAt,\n tx_digest: result.txDigest,\n };\n }\n\n const cooldownEndsAt = stake.deactivatedAt + STAKING_COOLDOWN_MS;\n if (Date.now() < cooldownEndsAt) {\n return {\n action: 'cooling_down',\n stake_id: stake.id,\n cooldown_ends_at: cooldownEndsAt,\n cooldown_remaining_ms: Math.max(cooldownEndsAt - Date.now(), 0),\n };\n }\n\n const result = await client.withdrawStake({ stakeId: stake.id, signer: context.keypair as never });\n return {\n action: 'withdrawn',\n stake_id: stake.id,\n amount_returned_mist: result.amountReturned.toString(),\n tx_digest: result.txDigest,\n };\n }\n default:\n throw new Error(`Unknown staking action: ${String(params.action)}`);\n }\n}\n\nfunction parseSuiToMist(input: string): bigint {\n const trimmed = input.trim();\n if (!/^\\d+(?:\\.\\d{1,9})?$/.test(trimmed)) {\n throw new Error(`Invalid SUI amount: ${input}`);\n }\n const [whole, fraction = ''] = trimmed.split('.');\n return BigInt(whole) * 1_000_000_000n + BigInt(fraction.padEnd(9, '0'));\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport interface MeshTaskHistoryParams {\n limit?: number;\n status_filter?: string;\n}\n\nexport const meshTaskHistoryTool = {\n name: 'collective_task_history',\n description: 'Query locally persisted task history',\n inputSchema: {\n type: 'object' as const,\n properties: {\n limit: { type: 'number', description: 'Max task rows to return (default 20)' },\n status_filter: { type: 'string', description: 'Optional task status filter' },\n },\n required: [],\n },\n};\n\nexport async function runMeshTaskHistory(\n params: MeshTaskHistoryParams,\n context: MeshToolContext,\n): Promise<{ tasks: unknown[]; note?: string }> {\n const db = context.taskHistoryDb as\n | {\n prepare?: (sql: string) => {\n all: (...args: unknown[]) => unknown[];\n };\n }\n | undefined;\n\n if (!db?.prepare) {\n return {\n tasks: [],\n note: 'Local task history is not initialized yet.',\n };\n }\n\n const limit = normalizeLimit(params.limit);\n const statusFilter = params.status_filter?.trim();\n\n try {\n const statement = statusFilter\n ? db.prepare(\n 'SELECT * FROM task_history WHERE status = ? ORDER BY created_at DESC LIMIT ?',\n )\n : db.prepare('SELECT * FROM task_history ORDER BY created_at DESC LIMIT ?');\n const rows = statusFilter ? statement.all(statusFilter, limit) : statement.all(limit);\n\n return {\n tasks: rows.map((row) => serializeBigInts(row)),\n };\n } catch {\n return {\n tasks: [],\n note: 'Local task history database is not available yet.',\n };\n }\n}\n\nfunction normalizeLimit(limit?: number): number {\n if (typeof limit !== 'number' || Number.isNaN(limit)) {\n return 20;\n }\n\n return Math.max(1, Math.floor(limit));\n}\n\nfunction serializeBigInts(value: unknown): unknown {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => serializeBigInts(entry));\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, serializeBigInts(entry)]),\n );\n }\n\n return value;\n}\n","import { decodeMeteredResult, parseMeteredResultEnvelope } from '@hivemind-os/collective-core';\nimport { TaskStatus } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob } from '../encryption.js';\n\nconst decoder = new TextDecoder();\n\nexport interface MeshTaskStatusParams {\n task_id: string;\n}\n\nexport const meshTaskStatusTool = {\n name: 'collective_task_status',\n description: 'Get task status and fetch the result if available',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Task object id' },\n },\n required: ['task_id'],\n },\n};\n\nexport async function runMeshTaskStatus(\n params: MeshTaskStatusParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n status: string;\n provider_did?: string;\n result?: string;\n price_mist: string;\n created_at: number;\n}> {\n const task = await context.taskClient.getTask(params.task_id);\n if (!task) {\n throw new Error(`Task ${params.task_id} was not found.`);\n }\n\n let result: string | undefined;\n if ((task.status === TaskStatus.COMPLETED || task.status === TaskStatus.RELEASED) && task.resultBlobId) {\n const resultBytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n if (resultBytes) {\n const envelope = parseMeteredResultEnvelope(resultBytes);\n result = decoder.decode(envelope ? decodeMeteredResult(envelope) : resultBytes);\n }\n }\n\n return {\n task_id: task.id,\n status: TaskStatus[task.status] ?? 'UNKNOWN',\n provider_did: findProviderDid(context, task.provider),\n result,\n price_mist: task.price.toString(),\n created_at: task.createdAt,\n };\n}\n\nfunction findProviderDid(context: MeshToolContext, owner?: string): string | undefined {\n if (!owner) {\n return undefined;\n }\n\n return context.agentCache.getAllActive(1_000).find((agent) => agent.owner === owner)?.did;\n}\n"],"mappings":"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","names":["agents","PaymentRail","TaskStatus","decoder","TaskStatus","PaymentRail","PaymentRail","TaskStatus","encoder","decoder","DEFAULT_TIMEOUT_SECONDS","DEFAULT_DISPUTE_WINDOW_MS","DEFAULT_EXPIRY_HOURS","PaymentRail","storeTaskInput","TaskStatus","MarketplaceClient","parseMist","MarketplaceClient","normalizeLimit","MarketplaceClient","DEFAULT_DISPUTE_WINDOW_MS","DEFAULT_EXPIRY_HOURS","parseMist","toOptionalBigInt","PaymentRail","PaymentRail","PaymentRail","result","normalizeLimit","decodeMeteredResult","parseMeteredResultEnvelope","TaskStatus","decoder","TaskStatus","parseMeteredResultEnvelope","decodeMeteredResult","serialize","bigintReplacer"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/resources/index.ts","../src/resources/agent.ts","../src/resources/capabilities.ts","../src/resources/task.ts","../src/encryption.ts","../src/resources/wallet.ts","../src/tools/balance.ts","../src/tools/index.ts","../src/tools/indexer-client.ts","../src/tools/analytics.ts","../src/tools/deactivate.ts","../src/tools/discover.ts","../src/tools/dispute.ts","../src/tools/execute.ts","../src/tools/execute-async.ts","../src/tools/metering.ts","../src/tools/marketplace-accept-bid.ts","../src/tools/marketplace-bid.ts","../src/tools/marketplace-browse.ts","../src/tools/marketplace-post.ts","../src/tools/multi-execute.ts","../src/tools/policy-update.ts","../src/tools/register.ts","../src/tools/relay-registry.ts","../src/tools/settings.ts","../src/tools/stake.ts","../src/tools/task-history.ts","../src/tools/task-status.ts"],"sourcesContent":["import { createRequire } from 'node:module';\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\n\nimport type { MeshToolContext } from './context.js';\nimport { registerResourceHandlers } from './resources/index.js';\nimport { registerToolHandlers } from './tools/index.js';\n\nconst require = createRequire(import.meta.url);\nconst { version: PKG_VERSION } = require('../package.json') as { version: string };\n\nconst SERVER_INSTRUCTIONS = [\n `HiveMind Collective v${PKG_VERSION} — a decentralized mesh network where AI agents discover, delegate, and pay each other for tasks on the Sui blockchain.`,\n '',\n 'Key capabilities:',\n '• Discover other agents on the mesh (collective_discover)',\n '• Execute tasks on remote agents (collective_execute, collective_metered_execute)',\n '• Post and accept tasks with SUI escrow (collective_post_task, collective_accept_task)',\n '• Relay messages between agents (collective_relay_send)',\n '• View wallet balance and transaction history (collective_wallet_balance)',\n '',\n 'Settings & Configuration:',\n '• Use the collective_settings tool to open the settings dashboard in the user\\'s browser',\n '• The dashboard lets users configure network presets, view wallet info, manage spending limits, and discover agents',\n '• Proactively suggest opening settings when the user asks about configuration, wallet setup, or network options',\n].join('\\n');\n\nexport type { MeshToolContext } from './context.js';\nexport { meshToolDefinitions, meshToolHandlers, type MeshToolHandler } from './tools/index.js';\nexport { registerResourceHandlers } from './resources/index.js';\nexport { meshMultiExecuteTool, runMeshMultiExecute, type MeshMultiExecuteParams, type MeshMultiExecuteResult } from './tools/multi-execute.js';\nexport {\n meshMeteredExecuteTool,\n meshVerifyResultTool,\n runMeshMeteredExecute,\n runMeshVerifyResult,\n type MeshMeteredExecuteParams,\n type MeshVerifyResultParams,\n} from './tools/metering.js';\n\nexport function registerMeshTools(server: Server, context: MeshToolContext): void {\n registerToolHandlers(server, context);\n registerResourceHandlers(server, context);\n}\n\nexport function createMeshMcpServer(context: MeshToolContext): Server {\n const server = new Server(\n {\n name: '@hivemind-os/collective-mcp-server',\n version: PKG_VERSION,\n },\n {\n capabilities: {\n tools: {},\n resources: {},\n },\n instructions: SERVER_INSTRUCTIONS,\n },\n );\n\n registerMeshTools(server, context);\n return server;\n}\n","import type { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport {\n ListResourcesRequestSchema,\n ListResourceTemplatesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport type { MeshToolContext } from '../context.js';\nimport { readAgentResource, meshAgentResourceTemplate } from './agent.js';\nimport { readCapabilitiesResource, meshCapabilitiesResource } from './capabilities.js';\nimport { readTaskResource, meshTaskResourceTemplate } from './task.js';\nimport { readWalletResource, meshWalletResource } from './wallet.js';\n\nconst staticResources = [meshCapabilitiesResource, meshWalletResource];\nconst resourceTemplates = [meshAgentResourceTemplate, meshTaskResourceTemplate];\n\nexport function registerResourceHandlers(server: Server, context: MeshToolContext): void {\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: staticResources,\n }));\n\n server.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({\n resourceTemplates,\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const uri = request.params.uri;\n const data = await routeResourceRead(uri, context);\n\n return {\n contents: [\n {\n uri,\n mimeType: 'application/json',\n text: serialize(data),\n },\n ],\n };\n });\n}\n\nexport const meshResourceDefinitions = {\n resources: staticResources,\n templates: resourceTemplates,\n};\n\nasync function routeResourceRead(uri: string, context: MeshToolContext): Promise<unknown> {\n const parsed = new URL(uri);\n\n switch (parsed.host) {\n case 'capabilities':\n return readCapabilitiesResource(context);\n case 'wallet':\n return readWalletResource(context);\n case 'agent':\n return readAgentResource(decodeURIComponent(parsed.pathname.replace(/^\\//, '')), context);\n case 'task':\n return readTaskResource(decodeURIComponent(parsed.pathname.replace(/^\\//, '')), context);\n default:\n throw new Error(`Unknown resource: ${uri}`);\n }\n}\n\nfunction serialize(payload: unknown): string {\n return JSON.stringify(payload, bigintReplacer, 2);\n}\n\nfunction bigintReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value;\n}\n","import type { AgentCard } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport const meshAgentResourceTemplate = {\n uriTemplate: 'mesh://agent/{did}',\n name: 'Agent Profile',\n description: 'Resolve a mesh agent profile by DID',\n mimeType: 'application/json',\n};\n\nexport async function readAgentResource(did: string, context: MeshToolContext): Promise<AgentCard> {\n const cached = context.agentCache.getAgentByDID(did);\n if (cached) {\n return cached;\n }\n\n const discovered = await findAgentByDidOnChain(did, context);\n if (!discovered) {\n throw new Error(`Agent ${did} was not found.`);\n }\n\n context.agentCache.upsertAgent(discovered);\n return discovered;\n}\n\nasync function findAgentByDidOnChain(\n did: string,\n context: MeshToolContext,\n): Promise<AgentCard | null> {\n const eventType = `${context.networkConfig.packageId}::registry::AgentRegistered`;\n let cursor: unknown = null;\n\n while (true) {\n const page = await context.suiClient.queryEvents(eventType, cursor as never, 50);\n for (const event of page.events) {\n if (!isRecord(event.parsedJson)) {\n continue;\n }\n\n if (!stringEquals(readString(event.parsedJson.did), did)) {\n continue;\n }\n\n const cardId = readString(event.parsedJson.id, event.parsedJson.card_id, event.parsedJson.cardId);\n if (!cardId) {\n continue;\n }\n\n const card = await context.registryClient.getAgentCard(cardId);\n if (card) {\n return card;\n }\n }\n\n if (!page.hasMore || !page.nextCursor) {\n break;\n }\n\n cursor = page.nextCursor;\n }\n\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction readString(...values: unknown[]): string {\n const match = values.find((value) => typeof value === 'string');\n return typeof match === 'string' ? match : '';\n}\n\nfunction stringEquals(left: string, right: string): boolean {\n return left.toLowerCase() === right.toLowerCase();\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport const meshCapabilitiesResource = {\n uri: 'mesh://capabilities',\n name: 'Capability Directory',\n description: 'Known mesh capabilities aggregated from the local agent cache',\n mimeType: 'application/json',\n};\n\nexport async function readCapabilitiesResource(\n context: MeshToolContext,\n): Promise<Array<{ capability: string; agent_count: number }>> {\n const counts = new Map<string, number>();\n\n for (const agent of context.agentCache.getAllActive(1_000)) {\n for (const capability of agent.capabilities) {\n counts.set(capability.name, (counts.get(capability.name) ?? 0) + 1);\n }\n }\n\n return [...counts.entries()]\n .map(([capability, agent_count]) => ({ capability, agent_count }))\n .sort((left, right) => left.capability.localeCompare(right.capability));\n}\n","import { TaskStatus } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob } from '../encryption.js';\n\nconst decoder = new TextDecoder();\n\nexport const meshTaskResourceTemplate = {\n uriTemplate: 'mesh://task/{id}',\n name: 'Task Details',\n description: 'Resolve task details and result payload by task id',\n mimeType: 'application/json',\n};\n\nexport async function readTaskResource(taskId: string, context: MeshToolContext): Promise<{\n id: string;\n requester: string;\n provider?: string;\n capability: string;\n input_blob_id: string;\n result_blob_id?: string;\n price_mist: string;\n status: string;\n created_at: number;\n accepted_at?: number;\n completed_at?: number;\n expires_at: number;\n agreement_hash?: string;\n result?: string;\n}> {\n const task = await context.taskClient.getTask(taskId);\n if (!task) {\n throw new Error(`Task ${taskId} was not found.`);\n }\n\n let result: string | undefined;\n if ((task.status === TaskStatus.COMPLETED || task.status === TaskStatus.RELEASED) && task.resultBlobId) {\n const bytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n result = bytes ? decoder.decode(bytes) : undefined;\n }\n\n return {\n id: task.id,\n requester: task.requester,\n provider: task.provider,\n capability: task.capability,\n input_blob_id: task.inputBlobId,\n result_blob_id: task.resultBlobId,\n price_mist: task.price.toString(),\n status: TaskStatus[task.status] ?? 'UNKNOWN',\n created_at: task.createdAt,\n accepted_at: task.acceptedAt,\n completed_at: task.completedAt,\n expires_at: task.expiresAt,\n agreement_hash: task.agreementHash,\n result,\n };\n}\n","import type { BlobStore } from '@hivemind-os/collective-core';\n\nexport interface EncryptedBlobStoreLike extends BlobStore {\n storeEncrypted(data: Uint8Array, recipientPublicKey: Uint8Array): Promise<{ blobId: string; hash: string }>;\n fetchDecrypted(blobId: string): Promise<Uint8Array | null>;\n}\n\nexport function supportsEncryptedBlobs(blobStore: BlobStore): blobStore is EncryptedBlobStoreLike {\n return typeof (blobStore as Partial<EncryptedBlobStoreLike>).storeEncrypted === 'function'\n && typeof (blobStore as Partial<EncryptedBlobStoreLike>).fetchDecrypted === 'function';\n}\n\nexport async function fetchMeshBlob(blobStore: BlobStore, blobId: string): Promise<Uint8Array | null> {\n return supportsEncryptedBlobs(blobStore)\n ? await blobStore.fetchDecrypted(blobId)\n : await blobStore.fetch(blobId);\n}\n\nexport function hexToBytes(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","import { PaymentRail } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { formatMistToSui } from '../tools/balance.js';\n\nexport const meshWalletResource = {\n uri: 'mesh://wallet',\n name: 'Wallet Overview',\n description: 'Current wallet balance and local spending totals',\n mimeType: 'application/json',\n};\n\nexport async function readWalletResource(context: MeshToolContext): Promise<{\n address: string;\n balance_mist: string;\n balance_sui: string;\n spent_today_mist: string;\n spent_month_mist: string;\n rail: PaymentRail;\n}> {\n const address = context.keypair.getPublicKey().toSuiAddress();\n const balance = await context.suiClient.getBalance(address);\n\n return {\n address,\n balance_mist: balance.toString(),\n balance_sui: formatMistToSui(balance),\n spent_today_mist: context.spendingPolicy.getSpent('day', PaymentRail.SUI_ESCROW).toString(),\n spent_month_mist: context.spendingPolicy.getSpent('month', PaymentRail.SUI_ESCROW).toString(),\n rail: PaymentRail.SUI_ESCROW,\n };\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport const meshBalanceTool = {\n name: 'collective_balance',\n description: 'Get the current wallet balance in MIST and SUI',\n inputSchema: {\n type: 'object' as const,\n properties: {},\n required: [],\n },\n};\n\nexport async function runMeshBalance(\n _params: Record<string, never>,\n context: MeshToolContext,\n): Promise<{ address: string; balance_mist: string; balance_sui: string }> {\n const address = context.keypair.getPublicKey().toSuiAddress();\n const balanceMist = await context.suiClient.getBalance(address);\n\n return {\n address,\n balance_mist: balanceMist.toString(),\n balance_sui: formatMistToSui(balanceMist),\n };\n}\n\nexport function formatMistToSui(balanceMist: bigint): string {\n const whole = balanceMist / 1_000_000_000n;\n const fraction = balanceMist % 1_000_000_000n;\n if (fraction === 0n) {\n return whole.toString();\n }\n\n const fractionText = fraction.toString().padStart(9, '0').replace(/0+$/, '');\n return `${whole.toString()}.${fractionText}`;\n}\n","import type { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';\n\nimport { SessionExpiredError } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { meshAnalyticsTool, runMeshAnalytics } from './analytics.js';\nimport { meshBalanceTool, runMeshBalance } from './balance.js';\nimport { meshDeactivateTool, runMeshDeactivate } from './deactivate.js';\nimport { meshDiscoverTool, runMeshDiscover } from './discover.js';\nimport { meshDisputeTool, runMeshDispute } from './dispute.js';\nimport { meshExecuteAsyncTool, runMeshExecuteAsync } from './execute-async.js';\nimport { meshExecuteTool, runMeshExecute } from './execute.js';\nimport { meshMeteredExecuteTool, meshVerifyResultTool, runMeshMeteredExecute, runMeshVerifyResult } from './metering.js';\nimport { meshMarketplaceAcceptBidTool, runMeshMarketplaceAcceptBid } from './marketplace-accept-bid.js';\nimport { meshMarketplaceBidTool, runMeshMarketplaceBid } from './marketplace-bid.js';\nimport { meshMarketplaceBrowseTool, runMeshMarketplaceBrowse } from './marketplace-browse.js';\nimport { meshMarketplacePostTool, runMeshMarketplacePost } from './marketplace-post.js';\nimport { meshMultiExecuteTool, runMeshMultiExecute } from './multi-execute.js';\nimport { meshPolicyUpdateTool, runMeshPolicyUpdate } from './policy-update.js';\nimport { meshRegisterTool, runMeshRegister } from './register.js';\nimport { meshRelayRegistryTool, runMeshRelayRegistry } from './relay-registry.js';\nimport { meshSettingsTool, runMeshSettings } from './settings.js';\nimport { meshStakeTool, runMeshStake } from './stake.js';\nimport { meshTaskHistoryTool, runMeshTaskHistory } from './task-history.js';\nimport { meshTaskStatusTool, runMeshTaskStatus } from './task-status.js';\n\nconst toolDefinitions = [\n meshAnalyticsTool,\n meshDiscoverTool,\n meshDisputeTool,\n meshExecuteTool,\n meshExecuteAsyncTool,\n meshMeteredExecuteTool,\n meshVerifyResultTool,\n meshMarketplacePostTool,\n meshMarketplaceBrowseTool,\n meshMultiExecuteTool,\n meshMarketplaceBidTool,\n meshMarketplaceAcceptBidTool,\n meshTaskStatusTool,\n meshRegisterTool,\n meshDeactivateTool,\n meshBalanceTool,\n meshPolicyUpdateTool,\n meshStakeTool,\n meshRelayRegistryTool,\n meshTaskHistoryTool,\n meshSettingsTool,\n];\n\nexport type MeshToolHandler = (params: never, context: MeshToolContext) => Promise<unknown>;\n\nexport const meshToolHandlers: Record<string, MeshToolHandler> = {\n [meshAnalyticsTool.name]: runMeshAnalytics,\n [meshDiscoverTool.name]: runMeshDiscover,\n [meshDisputeTool.name]: runMeshDispute,\n [meshExecuteTool.name]: runMeshExecute,\n [meshExecuteAsyncTool.name]: runMeshExecuteAsync,\n [meshMeteredExecuteTool.name]: runMeshMeteredExecute,\n [meshVerifyResultTool.name]: runMeshVerifyResult,\n [meshMarketplacePostTool.name]: runMeshMarketplacePost,\n [meshMarketplaceBrowseTool.name]: runMeshMarketplaceBrowse,\n [meshMultiExecuteTool.name]: runMeshMultiExecute,\n [meshMarketplaceBidTool.name]: runMeshMarketplaceBid,\n [meshMarketplaceAcceptBidTool.name]: runMeshMarketplaceAcceptBid,\n [meshTaskStatusTool.name]: runMeshTaskStatus,\n [meshRegisterTool.name]: runMeshRegister,\n [meshDeactivateTool.name]: runMeshDeactivate,\n [meshBalanceTool.name]: runMeshBalance,\n [meshPolicyUpdateTool.name]: runMeshPolicyUpdate,\n [meshStakeTool.name]: runMeshStake,\n [meshRelayRegistryTool.name]: runMeshRelayRegistry,\n [meshTaskHistoryTool.name]: runMeshTaskHistory,\n [meshSettingsTool.name]: runMeshSettings,\n};\n\nexport function registerToolHandlers(server: Server, context: MeshToolContext): void {\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: toolDefinitions,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const handler = meshToolHandlers[request.params.name];\n if (!handler) {\n return createErrorResult(`Unknown tool: ${request.params.name}`);\n }\n\n try {\n const response = await handler((request.params.arguments ?? {}) as never, context);\n return createSuccessResult(response);\n } catch (error) {\n const message =\n error instanceof SessionExpiredError\n ? 'Authentication expired. Please re-authenticate via the daemon portal.'\n : error instanceof Error\n ? error.message\n : String(error);\n const sessionState = await getSessionState(context);\n return createErrorResult(\n sessionState ? `${message} (session state: ${sessionState})` : message,\n sessionState ? { session_state: sessionState, reauth_required: error instanceof SessionExpiredError } : undefined,\n );\n }\n });\n}\n\nexport const meshToolDefinitions = toolDefinitions;\n\nfunction createSuccessResult(payload: unknown): { content: Array<{ type: 'text'; text: string }> } {\n return {\n content: [\n {\n type: 'text',\n text: serialize(payload),\n },\n ],\n };\n}\n\nfunction createErrorResult(\n message: string,\n details?: Record<string, unknown>,\n): {\n isError: true;\n content: Array<{ type: 'text'; text: string }>;\n} {\n return {\n isError: true,\n content: [\n {\n type: 'text',\n text: serialize({ error: message, ...details }),\n },\n ],\n };\n}\n\nasync function getSessionState(context: MeshToolContext): Promise<string | null> {\n const provider = context.authProvider;\n if (!provider?.getSessionState) {\n return null;\n }\n\n const state = await provider.getSessionState();\n return typeof state === 'string' ? state : null;\n}\n\nfunction serialize(payload: unknown): string {\n return JSON.stringify(payload, bigintReplacer, 2);\n}\n\nfunction bigintReplacer(_key: string, value: unknown): unknown {\n return typeof value === 'bigint' ? value.toString() : value;\n}\n","import type { AgentCard, Capability } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\n\ninterface GraphQLResponse<T> {\n data?: T;\n errors?: Array<{ message?: string }>;\n}\n\ninterface GraphQLAgentNode {\n id: string;\n owner: string;\n did: string;\n name: string;\n description: string;\n endpoint?: string | null;\n active: boolean;\n version: number;\n registeredAt: string;\n updatedAt: string;\n totalTasksCompleted: number;\n totalTasksFailed: number;\n totalTasksDisputed: number;\n totalEarningsMist: string;\n hasStake: boolean;\n stakeMist?: string | null;\n stakeType?: 'agent' | 'relay' | null;\n capabilities: Array<{\n name: string;\n description: string;\n version: string;\n executionMode?: 'sync' | 'async' | null;\n paymentRails?: string[] | null;\n pricing: {\n rail: Capability['pricing']['rail'];\n amount: string;\n currency: string;\n };\n }>;\n}\n\nexport async function executeIndexerQuery<TData>(\n context: Pick<MeshToolContext, 'indexer'>,\n query: string,\n variables?: Record<string, unknown>,\n): Promise<TData> {\n const endpoint = resolveIndexerUrl(context);\n if (!endpoint) {\n throw new Error('Indexer is not configured.');\n }\n\n const fetchImpl = context.indexer?.fetch ?? globalThis.fetch;\n const response = await fetchImpl(endpoint, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({ query, variables }),\n });\n if (!response.ok) {\n throw new Error(`Indexer query failed with status ${response.status}.`);\n }\n\n const payload = (await response.json()) as GraphQLResponse<TData>;\n if (payload.errors && payload.errors.length > 0) {\n throw new Error(payload.errors.map((entry) => entry.message ?? 'Unknown GraphQL error').join('; '));\n }\n if (!payload.data) {\n throw new Error('Indexer query returned no data.');\n }\n return payload.data;\n}\n\nexport async function queryIndexerAgents(\n context: Pick<MeshToolContext, 'indexer'>,\n params: { capability: string; limit: number; minReputation?: number; category?: string },\n): Promise<AgentCard[]> {\n const data = await executeIndexerQuery<{ agents: { nodes: GraphQLAgentNode[] } }>(\n context,\n `query IndexedAgents($capability: String, $limit: Int, $minReputation: Float, $category: String) {\n agents(capability: $capability, limit: $limit, minReputation: $minReputation, category: $category) {\n nodes {\n id\n owner\n did\n name\n description\n endpoint\n active\n version\n registeredAt\n updatedAt\n totalTasksCompleted\n totalTasksFailed\n totalTasksDisputed\n totalEarningsMist\n hasStake\n stakeMist\n stakeType\n capabilities {\n name\n description\n version\n executionMode\n paymentRails\n pricing {\n rail\n amount\n currency\n }\n }\n }\n }\n }`,\n {\n capability: params.capability,\n limit: params.limit,\n minReputation: params.minReputation,\n category: params.category,\n },\n );\n\n return data.agents.nodes.map(mapGraphqlAgent);\n}\n\nexport function resolveIndexerUrl(context: Pick<MeshToolContext, 'indexer'>): string | null {\n const value = context.indexer?.graphqlUrl ?? process.env.COLLECTIVE_INDEXER_URL;\n return typeof value === 'string' && value.trim().length > 0 ? value.trim() : null;\n}\n\nfunction mapGraphqlAgent(agent: GraphQLAgentNode): AgentCard {\n return {\n id: agent.id,\n owner: agent.owner,\n did: agent.did as AgentCard['did'],\n name: agent.name,\n description: agent.description,\n endpoint: agent.endpoint ?? undefined,\n active: agent.active,\n version: agent.version,\n registeredAt: Number(agent.registeredAt),\n updatedAt: Number(agent.updatedAt),\n totalTasksCompleted: agent.totalTasksCompleted,\n totalTasksFailed: agent.totalTasksFailed,\n totalTasksDisputed: agent.totalTasksDisputed,\n totalEarningsMist: BigInt(agent.totalEarningsMist),\n hasStake: agent.hasStake,\n stakeMist: agent.stakeMist ? BigInt(agent.stakeMist) : undefined,\n stakeType: agent.stakeType ?? undefined,\n capabilities: agent.capabilities.map((capability) => ({\n name: capability.name,\n description: capability.description,\n version: capability.version,\n executionMode: capability.executionMode ?? undefined,\n paymentRails: capability.paymentRails ?? undefined,\n pricing: {\n rail: capability.pricing.rail,\n amount: BigInt(capability.pricing.amount),\n currency: capability.pricing.currency,\n },\n })),\n };\n}\n","import type { MeshToolContext } from '../context.js';\nimport { executeIndexerQuery } from './indexer-client.js';\n\nexport interface MeshAnalyticsParams {\n view?: 'summary' | 'task-volume' | 'top-providers' | 'marketplace';\n period?: 'HOUR' | 'DAY' | 'WEEK';\n buckets?: number;\n limit?: number;\n sort_by?: 'COMPLETED_TASKS' | 'EARNINGS' | 'REPUTATION';\n}\n\nexport const meshAnalyticsTool = {\n name: 'collective_analytics',\n description: 'Query task volume, top providers, and marketplace analytics from the Agentic Mesh indexer',\n inputSchema: {\n type: 'object' as const,\n properties: {\n view: { type: 'string', enum: ['summary', 'task-volume', 'top-providers', 'marketplace'] },\n period: { type: 'string', enum: ['HOUR', 'DAY', 'WEEK'] },\n buckets: { type: 'number' },\n limit: { type: 'number' },\n sort_by: { type: 'string', enum: ['COMPLETED_TASKS', 'EARNINGS', 'REPUTATION'] },\n },\n },\n};\n\nexport async function runMeshAnalytics(\n params: MeshAnalyticsParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const view = params.view ?? 'summary';\n\n switch (view) {\n case 'task-volume': {\n const data = await executeIndexerQuery<{ taskVolume: unknown[] }>(\n context,\n `query TaskVolume($period: TimePeriod!, $buckets: Int) {\n taskVolume(period: $period, buckets: $buckets) {\n label\n count\n volumeMist\n }\n }`,\n {\n period: params.period ?? 'DAY',\n buckets: params.buckets ?? 14,\n },\n );\n return { view, period: params.period ?? 'DAY', buckets: params.buckets ?? 14, data: data.taskVolume };\n }\n case 'top-providers': {\n const data = await executeIndexerQuery<{ topProviders: unknown[] }>(\n context,\n `query TopProviders($limit: Int, $sortBy: ProviderSortField) {\n topProviders(limit: $limit, sortBy: $sortBy) {\n did\n owner\n name\n completedTasks\n earningsMist\n disputeCount\n successRate\n reputation\n }\n }`,\n {\n limit: params.limit ?? 10,\n sortBy: params.sort_by ?? 'COMPLETED_TASKS',\n },\n );\n return { view, limit: params.limit ?? 10, sort_by: params.sort_by ?? 'COMPLETED_TASKS', data: data.topProviders };\n }\n case 'marketplace': {\n const data = await executeIndexerQuery<{ analytics: { marketplace: unknown } }>(\n context,\n `query MarketplaceAnalytics {\n analytics {\n marketplace {\n averageBidCount\n acceptanceRate\n categoryPopularity {\n category\n taskCount\n }\n }\n }\n }`,\n );\n return { view, data: data.analytics.marketplace };\n }\n case 'summary':\n default: {\n const data = await executeIndexerQuery<{ analytics: unknown }>(\n context,\n `query AnalyticsSummary {\n analytics {\n totalAgents\n activeAgents\n totalTasks\n completedTasks\n disputedTasks\n totalVolumeMist\n averageGasCosts {\n capability\n averageGasMist\n taskCount\n }\n marketplace {\n averageBidCount\n acceptanceRate\n categoryPopularity {\n category\n taskCount\n }\n }\n }\n }`,\n );\n return { view: 'summary', data: data.analytics };\n }\n }\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport interface MeshDeactivateParams {\n agent_card_id: string;\n}\n\nexport const meshDeactivateTool = {\n name: 'collective_deactivate',\n description: 'Deactivate an existing agent card',\n inputSchema: {\n type: 'object' as const,\n properties: {\n agent_card_id: { type: 'string', description: 'Agent card object id' },\n },\n required: ['agent_card_id'],\n },\n};\n\nexport async function runMeshDeactivate(\n params: MeshDeactivateParams,\n context: MeshToolContext,\n): Promise<{ tx_digest: string; status: 'deactivated' }> {\n const result = await context.registryClient.deactivateAgent({\n cardId: params.agent_card_id,\n keypair: context.keypair,\n });\n context.agentCache.removeAgent(params.agent_card_id);\n\n return {\n tx_digest: result.txDigest,\n status: 'deactivated',\n };\n}\n","import type { AgentCard, Capability } from '@hivemind-os/collective-types';\nimport { ReputationScoreCalculator } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { queryIndexerAgents, resolveIndexerUrl } from './indexer-client.js';\n\nconst scoreCalculator = new ReputationScoreCalculator();\n\nexport interface MeshDiscoverParams {\n capability: string;\n limit?: number;\n sort_by?: 'price' | 'reputation';\n useIndexer?: boolean;\n}\n\nexport const meshDiscoverTool = {\n name: 'collective_discover',\n description: 'Find agents by capability on the Agentic Mesh network',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to search for' },\n limit: { type: 'number', description: 'Max results (default 10)' },\n sort_by: { type: 'string', enum: ['price', 'reputation'], description: 'Sort results by price or reputation' },\n useIndexer: { type: 'boolean', description: 'Prefer the indexer GraphQL API when available' },\n },\n required: ['capability'],\n },\n};\n\nexport async function runMeshDiscover(\n params: MeshDiscoverParams,\n context: MeshToolContext,\n): Promise<{ capability: string; source: 'indexer' | 'cache' | 'registry'; agents: ReturnType<typeof summarizeAgent>[] }> {\n const capability = params.capability.trim();\n const limit = normalizeLimit(params.limit);\n const sortBy = params.sort_by ?? 'price';\n const { agents, source } = await discoverAgentsByCapability(capability, context, limit, sortBy, params.useIndexer);\n\n return {\n capability,\n source,\n agents: agents.map((agent) => summarizeAgent(agent, capability)),\n };\n}\n\nexport async function discoverAgentsByCapability(\n capability: string,\n context: MeshToolContext,\n limit = 10,\n sortBy: 'price' | 'reputation' = 'price',\n useIndexer?: boolean,\n): Promise<{ agents: AgentCard[]; source: 'indexer' | 'cache' | 'registry' }> {\n const normalizedCapability = capability.trim();\n if (!normalizedCapability) {\n return { agents: [], source: 'cache' };\n }\n\n if (shouldUseIndexer(context, useIndexer)) {\n try {\n const indexed = await queryIndexerAgents(context, {\n capability: normalizedCapability,\n limit,\n });\n if (indexed.length > 0) {\n return {\n agents: sortBy === 'reputation' ? indexed.slice(0, limit) : sortByPrice(indexed, normalizedCapability).slice(0, limit),\n source: 'indexer',\n };\n }\n } catch (error) {\n context.logger?.warn?.({ err: error }, 'Indexer discovery failed; falling back to local cache.');\n }\n }\n\n const cached = (await queryLocalCache(context, normalizedCapability, Math.max(limit * 2, limit), sortBy))\n .filter((agent) => hasCapability(agent, normalizedCapability))\n .slice(0, limit);\n\n if (cached.length > 0) {\n return {\n agents: sortBy === 'reputation' ? cached : sortByPrice(cached, normalizedCapability).slice(0, limit),\n source: 'cache',\n };\n }\n\n const discovered = await context.registryClient.discoverByCapability(normalizedCapability, limit, {\n sortByReputation: sortBy === 'reputation',\n });\n for (const agent of discovered) {\n context.agentCache.upsertAgent(agent);\n }\n\n const ranked = sortBy === 'reputation' ? discovered : sortByPrice(discovered, normalizedCapability);\n return { agents: ranked.slice(0, limit), source: 'registry' };\n}\n\nexport async function resolveProviderCapability(\n capability: string,\n context: MeshToolContext,\n providerDid?: string,\n): Promise<{ agent: AgentCard; capability: Capability }> {\n const normalizedCapability = capability.trim();\n if (!normalizedCapability) {\n throw new Error('Capability is required.');\n }\n\n if (providerDid) {\n const cachedAgent = context.agentCache.getAgentByDID(providerDid);\n const cachedCapability = cachedAgent ? findCapability(cachedAgent, normalizedCapability) : undefined;\n if (cachedAgent?.active && cachedCapability) {\n return { agent: cachedAgent, capability: cachedCapability };\n }\n\n const { agents } = await discoverAgentsByCapability(normalizedCapability, context, 50);\n const matched = agents.find((entry) => entry.did === providerDid);\n const matchedCapability = matched ? findCapability(matched, normalizedCapability) : undefined;\n if (!matched || !matchedCapability) {\n throw new Error(`Provider ${providerDid} was not found for capability ${normalizedCapability}.`);\n }\n\n return { agent: matched, capability: matchedCapability };\n }\n\n const { agents } = await discoverAgentsByCapability(normalizedCapability, context, 20);\n const ranked = agents\n .map((agent) => ({ agent, capability: findCapability(agent, normalizedCapability) }))\n .filter((entry): entry is { agent: AgentCard; capability: Capability } => Boolean(entry.capability))\n .sort((left, right) => compareBigInt(left.capability.pricing.amount, right.capability.pricing.amount));\n\n if (ranked.length === 0) {\n throw new Error(`No providers found for capability ${normalizedCapability}.`);\n }\n\n return ranked[0];\n}\n\nexport function summarizeAgent(agent: AgentCard, capability?: string): {\n name: string;\n did: AgentCard['did'];\n capabilities: string[];\n pricing: Array<{\n capability: string;\n price_mist: string;\n rail: string;\n currency: string;\n }>;\n reputation: {\n success_rate: number;\n total_tasks: number;\n total_disputes: number;\n total_earnings_mist: string;\n };\n endpoint?: string;\n} {\n const scopedCapabilities = capability\n ? agent.capabilities.filter((entry) => capabilityNameEquals(entry.name, capability))\n : agent.capabilities;\n const reputation = scoreCalculator.computeScore(agent, []);\n\n return {\n name: agent.name,\n did: agent.did,\n capabilities: scopedCapabilities.map((entry) => entry.name),\n pricing: scopedCapabilities.map((entry) => ({\n capability: entry.name,\n price_mist: entry.pricing.amount.toString(),\n rail: entry.pricing.rail,\n currency: entry.pricing.currency,\n })),\n reputation: {\n success_rate: reputation.successRate,\n total_tasks: reputation.totalTasks,\n total_disputes: reputation.totalDisputes,\n total_earnings_mist: reputation.totalEarningsMist.toString(),\n },\n endpoint: agent.endpoint,\n };\n}\n\nasync function queryLocalCache(\n context: MeshToolContext,\n capability: string,\n limit: number,\n sortBy: 'price' | 'reputation',\n): Promise<AgentCard[]> {\n const cache = context.agentCache as MeshToolContext['agentCache'] & {\n queryAgentsAdvanced?: (filters: {\n capability?: string;\n limit?: number;\n sortBy?: 'stake' | 'reputation';\n }) => Promise<AgentCard[]>;\n };\n\n if (typeof cache.queryAgentsAdvanced === 'function') {\n return await cache.queryAgentsAdvanced({\n capability,\n limit,\n sortBy: sortBy === 'reputation' ? 'reputation' : 'stake',\n });\n }\n\n return context.agentCache.searchByCapability(capability, limit, { sortByReputation: sortBy === 'reputation' });\n}\n\nfunction shouldUseIndexer(context: MeshToolContext, useIndexer?: boolean): boolean {\n if (useIndexer === false) {\n return false;\n }\n return Boolean(resolveIndexerUrl(context));\n}\n\nfunction findCapability(agent: AgentCard, capability: string): Capability | undefined {\n return agent.capabilities.find((entry) => capabilityNameEquals(entry.name, capability));\n}\n\nfunction hasCapability(agent: AgentCard, capability: string): boolean {\n return findCapability(agent, capability) !== undefined;\n}\n\nfunction capabilityNameEquals(left: string, right: string): boolean {\n return left.toLowerCase() === right.toLowerCase();\n}\n\nfunction compareBigInt(left: bigint, right: bigint): number {\n if (left === right) {\n return 0;\n }\n\n return left < right ? -1 : 1;\n}\n\nfunction normalizeLimit(limit?: number): number {\n if (typeof limit !== 'number' || Number.isNaN(limit)) {\n return 10;\n }\n\n return Math.max(1, Math.floor(limit));\n}\n\nfunction sortByPrice(agents: AgentCard[], capability: string): AgentCard[] {\n return [...agents].sort((left, right) => {\n const leftCapability = findCapability(left, capability);\n const rightCapability = findCapability(right, capability);\n if (!leftCapability && !rightCapability) {\n return 0;\n }\n if (!leftCapability) {\n return 1;\n }\n if (!rightCapability) {\n return -1;\n }\n return compareBigInt(leftCapability.pricing.amount, rightCapability.pricing.amount);\n });\n}\n","import { DisputeClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshDisputeParams {\n action: 'open' | 'respond' | 'accept' | 'status';\n task_id?: string;\n dispute_id?: string;\n evidence?: string;\n evidence_blob_id?: string;\n proposed_split_mist?: string | number;\n arbitrator_address?: string;\n}\n\nexport const meshDisputeTool = {\n name: 'collective_dispute',\n description: 'Open, respond to, accept, or inspect on-chain task disputes',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: { type: 'string', enum: ['open', 'respond', 'accept', 'status'] },\n task_id: { type: 'string', description: 'Task object id' },\n dispute_id: { type: 'string', description: 'Dispute object id' },\n evidence: { type: 'string', description: 'Plain text or JSON-encoded evidence to store before opening/responding' },\n evidence_blob_id: { type: 'string', description: 'Existing Walrus/blobstore blob id containing dispute evidence' },\n proposed_split_mist: { type: 'string', description: 'Amount, in MIST, to allocate back to the requester' },\n arbitrator_address: { type: 'string', description: 'Optional arbitrator address for open actions' },\n },\n required: ['action'],\n },\n};\n\nexport async function runMeshDispute(params: MeshDisputeParams, context: MeshToolContext): Promise<Record<string, unknown>> {\n const client = context.disputeClient ?? new DisputeClient(context.suiClient, context.networkConfig);\n\n switch (params.action) {\n case 'open': {\n if (!params.task_id) {\n throw new Error('task_id is required when action=open');\n }\n const evidenceBlobId = await resolveEvidenceBlobId(params, context);\n const result = await client.openDispute({\n taskId: params.task_id,\n evidenceBlobId,\n proposedSplitMist: parseMist(params.proposed_split_mist, 'proposed_split_mist'),\n arbitratorAddress: params.arbitrator_address,\n signer: context.keypair as never,\n });\n return {\n action: 'open',\n dispute_id: result.disputeId,\n task_id: params.task_id,\n evidence_blob_id: evidenceBlobId,\n tx_digest: result.txDigest,\n };\n }\n case 'respond': {\n if (!params.dispute_id) {\n throw new Error('dispute_id is required when action=respond');\n }\n const evidenceBlobId = await resolveEvidenceBlobId(params, context);\n const result = await client.respondToDispute({\n disputeId: params.dispute_id,\n evidenceBlobId,\n proposedSplitMist: parseMist(params.proposed_split_mist, 'proposed_split_mist'),\n signer: context.keypair as never,\n });\n return {\n action: 'respond',\n dispute_id: params.dispute_id,\n evidence_blob_id: evidenceBlobId,\n tx_digest: result.txDigest,\n };\n }\n case 'accept': {\n if (!params.dispute_id || !params.task_id) {\n throw new Error('dispute_id and task_id are required when action=accept');\n }\n const result = await client.acceptResolution({\n disputeId: params.dispute_id,\n taskId: params.task_id,\n signer: context.keypair as never,\n });\n return {\n action: 'accept',\n dispute_id: params.dispute_id,\n task_id: params.task_id,\n requester_amount_mist: result.requesterAmount.toString(),\n provider_amount_mist: result.providerAmount.toString(),\n tx_digest: result.txDigest,\n };\n }\n case 'status': {\n if ((params.dispute_id ? 1 : 0) + (params.task_id ? 1 : 0) !== 1) {\n throw new Error('Provide exactly one of dispute_id or task_id when action=status');\n }\n const dispute = params.dispute_id\n ? await client.getDispute(params.dispute_id)\n : await client.getDisputeByTask(params.task_id as string);\n if (!dispute) {\n throw new Error(params.task_id ? `No dispute found for task ${params.task_id}.` : `Dispute ${params.dispute_id ?? ''} was not found.`);\n }\n return {\n action: 'status',\n dispute,\n };\n }\n default:\n throw new Error(`Unknown dispute action: ${String(params.action)}`);\n }\n}\n\nasync function resolveEvidenceBlobId(params: MeshDisputeParams, context: MeshToolContext): Promise<string> {\n if ((params.evidence_blob_id ? 1 : 0) + (params.evidence ? 1 : 0) !== 1) {\n throw new Error('Provide exactly one of evidence or evidence_blob_id for dispute open/respond actions');\n }\n if (params.evidence_blob_id) {\n return params.evidence_blob_id;\n }\n if (!params.evidence) {\n throw new Error('evidence or evidence_blob_id is required for dispute open/respond actions');\n }\n const stored = await context.blobStore.store(new TextEncoder().encode(params.evidence));\n return stored.blobId;\n}\n\nfunction parseMist(value: string | number | undefined, field: string): bigint {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error(`${field} must be a non-negative integer string.`);\n}\n","import { PaymentRail, TaskStatus, type AgentCard, type Capability, type Task } from '@hivemind-os/collective-types';\nimport { PaymentRailSelector, RelayConsumerClient, ReputationEventPublisher, type SelectedPaymentRail } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob, hexToBytes, supportsEncryptedBlobs } from '../encryption.js';\nimport { resolveProviderCapability } from './discover.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst DEFAULT_TIMEOUT_SECONDS = 120;\nconst DEFAULT_DISPUTE_WINDOW_MS = 5 * 60_000;\nconst DEFAULT_EXPIRY_HOURS = 24;\n\nexport interface MeshExecuteParams {\n capability: string;\n provider_did?: string;\n input: string;\n max_price_mist?: number;\n timeout_seconds?: number;\n mode?: 'auto' | 'sync' | 'async';\n}\n\nexport const meshExecuteTool = {\n name: 'collective_execute',\n description: 'Execute a mesh task. Returns a task handle (async) if the client supports MCP Tasks, otherwise blocks until completion.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n provider_did: { type: 'string', description: 'Specific provider DID to use' },\n input: { type: 'string', description: 'Task input payload' },\n max_price_mist: { type: 'number', description: 'Maximum spend in MIST' },\n timeout_seconds: { type: 'number', description: 'Polling timeout in seconds (default 120)' },\n mode: { type: 'string', enum: ['auto', 'sync', 'async'], description: 'Execution preference (default auto)' },\n },\n required: ['capability', 'input'],\n },\n};\n\nexport async function runMeshExecute(\n params: MeshExecuteParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n result: string;\n provider_did: string;\n price_mist: string;\n status: string;\n execution_mode: 'sync' | 'async';\n payment_rail: PaymentRail;\n payment_receipt?: string;\n latency_ms?: number;\n}> {\n const resolved = await resolveProviderCapability(params.capability, context, params.provider_did);\n const priceMist = resolved.capability.pricing.amount;\n const maxPrice = toOptionalBigInt(params.max_price_mist);\n\n if (maxPrice !== undefined && priceMist > maxPrice) {\n throw new Error(`Provider price ${priceMist.toString()} exceeds max_price_mist ${maxPrice.toString()}.`);\n }\n\n const mode = params.mode ?? 'auto';\n if (mode !== 'async') {\n const relayResult = await tryRelayExecution(params, context, resolved, priceMist);\n if (relayResult) {\n await publishSuccessfulReputationEvent(context, {\n providerDid: relayResult.provider_did,\n taskId: relayResult.task_id,\n capability: resolved.capability.name,\n priceMist,\n latencyMs: relayResult.latency_ms,\n });\n return relayResult;\n }\n }\n\n const prepared = await prepareAsyncExecution(params, context, resolved, priceMist);\n const task = await waitForTaskCompletion(prepared.taskId, context, params.timeout_seconds);\n\n if (!task.resultBlobId) {\n throw new Error(`Task ${prepared.taskId} completed without a result blob.`);\n }\n\n const resultBytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n if (!resultBytes) {\n throw new Error(`Result blob ${task.resultBlobId} was not found.`);\n }\n\n await context.taskClient.releasePayment({\n taskId: prepared.taskId,\n keypair: context.keypair,\n });\n context.spendingPolicy.record({\n amountMist: prepared.priceMist,\n rail: prepared.rail,\n taskId: prepared.taskId,\n appId: prepared.providerDid,\n originAppName: context.originAppName,\n });\n\n await publishSuccessfulReputationEvent(context, {\n providerDid: prepared.providerDid,\n taskId: prepared.taskId,\n capability: resolved.capability.name,\n priceMist: prepared.priceMist,\n latencyMs: task.acceptedAt && task.completedAt ? task.completedAt - task.acceptedAt : undefined,\n });\n\n return {\n task_id: prepared.taskId,\n result: decoder.decode(resultBytes),\n provider_did: prepared.providerDid,\n price_mist: prepared.priceMist.toString(),\n status: TaskStatus[TaskStatus.RELEASED],\n execution_mode: 'async',\n payment_rail: prepared.rail,\n };\n}\n\nexport async function prepareMeshExecution(\n params: Pick<MeshExecuteParams, 'capability' | 'provider_did' | 'input' | 'max_price_mist'>,\n context: MeshToolContext,\n): Promise<{\n taskId: string;\n providerDid: string;\n priceMist: bigint;\n rail: PaymentRail;\n}> {\n const resolved = await resolveProviderCapability(params.capability, context, params.provider_did);\n return prepareAsyncExecution(params, context, resolved, resolved.capability.pricing.amount);\n}\n\nasync function prepareAsyncExecution(\n params: Pick<MeshExecuteParams, 'input' | 'max_price_mist'>,\n context: MeshToolContext,\n resolved: Awaited<ReturnType<typeof resolveProviderCapability>>,\n priceMist: bigint,\n): Promise<{\n taskId: string;\n providerDid: string;\n priceMist: bigint;\n rail: PaymentRail;\n}> {\n if (resolved.capability.pricing.rail !== PaymentRail.SUI_ESCROW) {\n throw new Error(`Capability ${resolved.capability.name} does not support SUI escrow execution.`);\n }\n\n approveSpend(context, priceMist, resolved.capability.pricing.rail, resolved.agent.did);\n\n const { blobId } = await storeTaskInput(context, resolved.agent, encoder.encode(params.input));\n const posted = await context.taskClient.postTask({\n capability: resolved.capability.name,\n category: 'general',\n inputBlobId: blobId,\n priceMist,\n disputeWindowMs: DEFAULT_DISPUTE_WINDOW_MS,\n expiryHours: DEFAULT_EXPIRY_HOURS,\n keypair: context.keypair,\n });\n\n return {\n taskId: posted.taskId,\n providerDid: resolved.agent.did,\n priceMist,\n rail: resolved.capability.pricing.rail,\n };\n}\n\nasync function tryRelayExecution(\n params: MeshExecuteParams,\n context: MeshToolContext,\n resolved: Awaited<ReturnType<typeof resolveProviderCapability>>,\n priceMist: bigint,\n) {\n const relayUrl = getRelayUrl(resolved.agent);\n if (!relayUrl || !context.relayAuthProvider) {\n return null;\n }\n\n try {\n const selector = context.paymentRailSelector ?? new PaymentRailSelector();\n const selectedRail = selector.selectRail({\n executionMode: 'sync',\n consumerHasSuiWallet: Boolean(context.relayAuthProvider),\n consumerHasEvmWallet: Boolean(context.x402Client),\n providerAcceptsSui: providerAcceptsSui(resolved.capability),\n providerAcceptsX402: providerAcceptsX402(resolved.agent, resolved.capability),\n amount: priceMist,\n currency: resolved.capability.pricing.currency,\n });\n const rail = toPaymentRail(selectedRail);\n\n approveSpend(context, priceMist, rail, resolved.agent.did);\n\n const client = new RelayConsumerClient(context.x402Client ?? null, context.relayAuthProvider, { relayUrl });\n const response = await client.executeSync({\n providerDid: resolved.agent.did,\n capability: resolved.capability.name,\n input: params.input,\n paymentRail: rail,\n timeoutMs: normalizeTimeoutMs(params.timeout_seconds),\n });\n\n const taskId = response.taskId ?? `relay-${resolved.agent.did}-${Date.now()}`;\n context.spendingPolicy.record({\n amountMist: priceMist,\n rail,\n taskId,\n appId: resolved.agent.did,\n originAppName: context.originAppName,\n });\n\n return {\n task_id: taskId,\n result: stringifyRelayResult(response.result),\n provider_did: response.providerDid ?? resolved.agent.did,\n price_mist: priceMist.toString(),\n status: 'COMPLETED',\n execution_mode: 'sync' as const,\n payment_rail: rail,\n payment_receipt: response.paymentReceipt,\n latency_ms: response.latencyMs,\n };\n } catch (error) {\n if (!shouldFallbackToAsync(error)) {\n throw error;\n }\n\n context.logger?.warn?.(\n { err: error, providerDid: resolved.agent.did, capability: resolved.capability.name },\n 'Relay execution unavailable; falling back to async Sui flow.',\n );\n return null;\n }\n}\n\nexport async function waitForTaskCompletion(\n taskId: string,\n context: MeshToolContext,\n timeoutSeconds = DEFAULT_TIMEOUT_SECONDS,\n): Promise<Task> {\n const timeoutMs = normalizeTimeoutMs(timeoutSeconds);\n const startedAt = Date.now();\n\n while (true) {\n const task = await context.taskClient.getTask(taskId);\n if (!task) {\n throw new Error(`Task ${taskId} was not found.`);\n }\n\n if (task.status === TaskStatus.COMPLETED || task.status === TaskStatus.RELEASED) {\n return task;\n }\n\n if (task.status === TaskStatus.CANCELLED || task.status === TaskStatus.DISPUTED) {\n throw new Error(`Task ${taskId} ended with status ${taskStatusLabel(task.status)}.`);\n }\n\n const elapsedMs = Date.now() - startedAt;\n if (elapsedMs >= timeoutMs) {\n throw new Error(`Timed out waiting for task ${taskId} to complete.`);\n }\n\n const remainingMs = timeoutMs - elapsedMs;\n await delay(Math.min(remainingMs, 1_000));\n }\n}\n\nfunction approveSpend(context: MeshToolContext, amountMist: bigint, rail: PaymentRail, appId: string): void {\n const decision = context.spendingPolicy.evaluate({\n amountMist,\n rail,\n appId,\n originAppName: context.originAppName,\n });\n if (!decision.approved) {\n throw new Error(decision.reason ?? 'Spending policy rejected the request.');\n }\n}\n\nfunction getRelayUrl(agent: AgentCard): string | undefined {\n const relayEndpoint = agent.relayEndpoints?.find((endpoint) => !endpoint.modes || endpoint.modes.includes('sync'));\n if (relayEndpoint?.endpoint) {\n return relayEndpoint.endpoint;\n }\n\n if (agent.endpoint && /^(https?|wss?):\\/\\//i.test(agent.endpoint)) {\n return agent.endpoint;\n }\n\n return undefined;\n}\n\nfunction providerAcceptsSui(capability: Capability): boolean {\n return capability.paymentRails?.includes(PaymentRail.SUI_TRANSFER) ?? capability.pricing.rail !== PaymentRail.X402_BASE;\n}\n\nfunction providerAcceptsX402(agent: AgentCard, capability: Capability): boolean {\n return capability.paymentRails?.includes(PaymentRail.X402_BASE) ?? Boolean(getRelayUrl(agent));\n}\n\nfunction toPaymentRail(selectedRail: SelectedPaymentRail): PaymentRail {\n switch (selectedRail) {\n case 'sui-escrow':\n return PaymentRail.SUI_ESCROW;\n case 'sui-transfer':\n return PaymentRail.SUI_TRANSFER;\n case 'x402-base':\n return PaymentRail.X402_BASE;\n }\n}\n\nfunction shouldFallbackToAsync(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return /relay request timed out|fetch failed|provider .* is not connected to the relay|provider not found|payment challenge required|relay execution unavailable/i.test(\n error.message,\n );\n}\n\nfunction stringifyRelayResult(result: unknown): string {\n return typeof result === 'string' ? result : JSON.stringify(result);\n}\n\nfunction normalizeTimeoutMs(timeoutSeconds?: number): number {\n if (typeof timeoutSeconds !== 'number' || Number.isNaN(timeoutSeconds)) {\n return DEFAULT_TIMEOUT_SECONDS * 1_000;\n }\n\n return Math.max(0, Math.floor(timeoutSeconds * 1_000));\n}\n\nfunction toOptionalBigInt(value?: number): bigint | undefined {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return undefined;\n }\n\n return BigInt(Math.max(0, Math.floor(value)));\n}\n\nasync function storeTaskInput(\n context: MeshToolContext,\n provider: AgentCard,\n input: Uint8Array,\n): Promise<{ blobId: string }> {\n const providerEncryptionKey = hexToBytes(provider.encryptionPublicKey);\n const encryptionEnabled = context.encryption?.enabled ?? supportsEncryptedBlobs(context.blobStore);\n const requireEncryption = context.encryption?.requireEncryption ?? false;\n\n if (encryptionEnabled && providerEncryptionKey) {\n if (!supportsEncryptedBlobs(context.blobStore)) {\n throw new Error('Encryption is enabled, but the configured blobstore does not support encrypted payloads.');\n }\n\n return await context.blobStore.storeEncrypted(input, providerEncryptionKey);\n }\n\n if (requireEncryption) {\n throw new Error(`Provider ${provider.did} does not publish an encryption key.`);\n }\n\n return await context.blobStore.store(input);\n}\n\nfunction taskStatusLabel(status: TaskStatus): string {\n return TaskStatus[status] ?? 'UNKNOWN';\n}\n\nasync function publishSuccessfulReputationEvent(\n context: MeshToolContext,\n params: {\n providerDid: string;\n taskId: string;\n capability: string;\n priceMist: bigint;\n latencyMs?: number;\n },\n): Promise<void> {\n const publisher = context.reputationPublisher ?? (\n hasSigningIdentity(context.relayAuthProvider)\n ? new ReputationEventPublisher(context.blobStore, context.relayAuthProvider)\n : null\n );\n if (!publisher) {\n return;\n }\n\n try {\n const event = await publisher.createEvent({\n type: 'task_completion',\n subject: params.providerDid,\n taskId: params.taskId,\n outcome: 'success',\n capability: params.capability,\n latencyMs: params.latencyMs,\n paymentAmount: {\n amount: params.priceMist.toString(),\n currency: 'MIST',\n },\n });\n await context.reputationStore?.addEvent(event);\n await publisher.publishEvent(event);\n } catch (error) {\n context.logger?.warn?.({ err: error, taskId: params.taskId }, 'Failed to publish reputation event.');\n }\n}\n\nfunction hasSigningIdentity(identity: MeshToolContext['relayAuthProvider']): identity is NonNullable<MeshToolContext['relayAuthProvider']> {\n return Boolean(identity && typeof identity.getDID === 'function' && typeof identity.signPersonalMessage === 'function');\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolvePromise) => {\n setTimeout(resolvePromise, ms);\n });\n}\n","import type { MeshToolContext } from '../context.js';\nimport { prepareMeshExecution, type MeshExecuteParams } from './execute.js';\n\nexport interface MeshExecuteAsyncParams\n extends Pick<MeshExecuteParams, 'capability' | 'provider_did' | 'input' | 'max_price_mist'> {}\n\nexport const meshExecuteAsyncTool = {\n name: 'collective_execute_async',\n description: 'Submit a mesh task and return immediately',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n provider_did: { type: 'string', description: 'Specific provider DID to use' },\n input: { type: 'string', description: 'Task input payload' },\n max_price_mist: { type: 'number', description: 'Maximum spend in MIST' },\n },\n required: ['capability', 'input'],\n },\n};\n\nexport async function runMeshExecuteAsync(\n params: MeshExecuteAsyncParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n provider_did: string;\n price_mist: string;\n status: 'OPEN';\n}> {\n const prepared = await prepareMeshExecution(params, context);\n\n return {\n task_id: prepared.taskId,\n provider_did: prepared.providerDid,\n price_mist: prepared.priceMist.toString(),\n status: 'OPEN',\n };\n}\n","import { decodeMeteredResult, getMeteredResultUnits, parseMeteredResultEnvelope, ResultVerifier } from '@hivemind-os/collective-core';\nimport { PaymentRail, PaymentScheme, TaskStatus } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob, hexToBytes, supportsEncryptedBlobs } from '../encryption.js';\nimport { resolveProviderCapability } from './discover.js';\nimport { waitForTaskCompletion } from './execute.js';\n\nconst encoder = new TextEncoder();\nconst decoder = new TextDecoder();\nconst DEFAULT_TIMEOUT_SECONDS = 120;\nconst DEFAULT_DISPUTE_WINDOW_MS = 5 * 60_000;\nconst DEFAULT_EXPIRY_HOURS = 24;\n\nexport interface MeshMeteredExecuteParams {\n capability: string;\n provider_did?: string;\n input: string;\n max_price_mist: number;\n unit_price_mist: number;\n timeout_seconds?: number;\n}\n\nexport interface MeshVerifyResultParams {\n task_id: string;\n}\n\nexport const meshMeteredExecuteTool = {\n name: 'collective_metered_execute',\n description: 'Execute a metered mesh task with capped escrow and result verification',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n provider_did: { type: 'string', description: 'Specific provider DID to use' },\n input: { type: 'string', description: 'Task input payload' },\n max_price_mist: { type: 'number', description: 'Maximum escrow in MIST' },\n unit_price_mist: { type: 'number', description: 'Price per metered unit in MIST' },\n timeout_seconds: { type: 'number', description: 'Polling timeout in seconds (default 120)' },\n },\n required: ['capability', 'input', 'max_price_mist', 'unit_price_mist'],\n },\n};\n\nexport const meshVerifyResultTool = {\n name: 'collective_verify_result',\n description: 'Verify a metered task result blob against its on-chain hash chain root',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Task object id' },\n },\n required: ['task_id'],\n },\n};\n\nexport async function runMeshMeteredExecute(\n params: MeshMeteredExecuteParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n provider_did: string;\n result: string;\n status: string;\n payment_rail: PaymentRail;\n payment_scheme: PaymentScheme.UPTO;\n max_price_mist: string;\n actual_price_mist: string;\n unit_price_mist: string;\n metered_units: number;\n verification_hash: string;\n verified: boolean;\n}> {\n const resolved = await resolveProviderCapability(params.capability, context, params.provider_did);\n if (resolved.capability.pricing.rail !== PaymentRail.SUI_ESCROW) {\n throw new Error(`Capability ${resolved.capability.name} does not support SUI escrow execution.`);\n }\n\n const maxPriceMist = toRequiredBigInt(params.max_price_mist, 'max_price_mist');\n const unitPriceMist = toRequiredBigInt(params.unit_price_mist, 'unit_price_mist');\n const spendingDecision = context.spendingPolicy.evaluate({\n amountMist: maxPriceMist,\n rail: PaymentRail.SUI_ESCROW,\n appId: resolved.agent.did,\n originAppName: context.originAppName,\n });\n if (!spendingDecision.approved) {\n throw new Error(spendingDecision.reason ?? 'Spending policy rejected the request.');\n }\n\n const inputBlob = await storeTaskInput(context, resolved.agent, encoder.encode(params.input));\n const posted = await context.taskClient.postMeteredTask({\n capability: resolved.capability.name,\n category: 'general',\n inputBlobId: inputBlob.blobId,\n agreementHash: `metered:${resolved.capability.name}`,\n maxPriceMist,\n unitPriceMist,\n disputeWindowMs: DEFAULT_DISPUTE_WINDOW_MS,\n expiryHours: DEFAULT_EXPIRY_HOURS,\n keypair: context.keypair,\n });\n const task = await waitForTaskCompletion(posted.taskId, context, params.timeout_seconds ?? DEFAULT_TIMEOUT_SECONDS);\n const verification = await verifyMeteredTaskResult(task.id, context);\n\n await context.taskClient.releaseMeteredPayment({\n taskId: task.id,\n keypair: context.keypair,\n });\n context.spendingPolicy.record({\n amountMist: task.price,\n rail: PaymentRail.SUI_ESCROW,\n taskId: task.id,\n appId: resolved.agent.did,\n originAppName: context.originAppName,\n });\n\n return {\n task_id: task.id,\n provider_did: resolved.agent.did,\n result: verification.result,\n status: TaskStatus[TaskStatus.RELEASED],\n payment_rail: PaymentRail.SUI_ESCROW,\n payment_scheme: PaymentScheme.UPTO,\n max_price_mist: (task.maxPrice ?? maxPriceMist).toString(),\n actual_price_mist: task.price.toString(),\n unit_price_mist: (task.unitPrice ?? unitPriceMist).toString(),\n metered_units: task.meteredUnits ?? verification.metered_units,\n verification_hash: verification.verification_hash,\n verified: verification.verified,\n };\n}\n\nexport async function runMeshVerifyResult(\n params: MeshVerifyResultParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n verified: boolean;\n verification_hash: string;\n metered_units: number;\n result: string;\n}> {\n return await verifyMeteredTaskResult(params.task_id, context);\n}\n\nasync function verifyMeteredTaskResult(\n taskId: string,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n verified: boolean;\n verification_hash: string;\n metered_units: number;\n result: string;\n}> {\n const task = await context.taskClient.getTask(taskId);\n if (!task) {\n throw new Error(`Task ${taskId} was not found.`);\n }\n if (!task.resultBlobId) {\n throw new Error(`Task ${taskId} does not have a result blob.`);\n }\n\n const resultBytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n if (!resultBytes) {\n throw new Error(`Result blob ${task.resultBlobId} was not found.`);\n }\n\n const envelope = parseMeteredResultEnvelope(resultBytes);\n if (!envelope) {\n throw new Error(`Result blob ${task.resultBlobId} is not a metered result envelope.`);\n }\n\n const verifier = new ResultVerifier();\n const verified = verifier.verify(task, envelope.proof, getMeteredResultUnits(envelope));\n return {\n task_id: task.id,\n verified,\n verification_hash: task.verificationHash ?? envelope.proof.root,\n metered_units: task.meteredUnits ?? envelope.proof.unitCount,\n result: decoder.decode(decodeMeteredResult(envelope)),\n };\n}\n\nfunction toRequiredBigInt(value: number, name: string): bigint {\n if (typeof value !== 'number' || Number.isNaN(value) || value < 0) {\n throw new Error(`Invalid ${name}.`);\n }\n\n return BigInt(Math.floor(value));\n}\n\nasync function storeTaskInput(\n context: MeshToolContext,\n provider: Awaited<ReturnType<typeof resolveProviderCapability>>['agent'],\n input: Uint8Array,\n): Promise<{ blobId: string }> {\n const providerEncryptionKey = hexToBytes(provider.encryptionPublicKey) ?? undefined;\n const encryptionEnabled = context.encryption?.enabled ?? supportsEncryptedBlobs(context.blobStore);\n const requireEncryption = context.encryption?.requireEncryption ?? false;\n\n if (encryptionEnabled && providerEncryptionKey) {\n if (!supportsEncryptedBlobs(context.blobStore)) {\n throw new Error('Encryption is enabled, but the configured blobstore does not support encrypted payloads.');\n }\n\n return await context.blobStore.storeEncrypted(input, providerEncryptionKey);\n }\n if (requireEncryption) {\n throw new Error(`Provider ${provider.did} does not publish an encryption key.`);\n }\n return await context.blobStore.store(input);\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshMarketplaceAcceptBidParams {\n task_id: string;\n bid_id: string;\n reject_competing?: boolean;\n}\n\nexport const meshMarketplaceAcceptBidTool = {\n name: 'collective_marketplace_accept_bid',\n description: 'Accept a marketplace bid and optionally reject competing bids',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Marketplace task id' },\n bid_id: { type: 'string', description: 'Bid id to accept' },\n reject_competing: { type: 'boolean', description: 'Reject other active bids in the same transaction (default true)' },\n },\n required: ['task_id', 'bid_id'],\n },\n};\n\nexport async function runMeshMarketplaceAcceptBid(\n params: MeshMarketplaceAcceptBidParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const result = await client.acceptBid({\n taskId: params.task_id,\n bidId: params.bid_id,\n rejectCompeting: params.reject_competing,\n signer: context.keypair,\n });\n\n return {\n task_id: params.task_id,\n bid_id: params.bid_id,\n rejected_bid_ids: result.rejectedBidIds,\n tx_digest: result.txDigest,\n };\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshMarketplaceBidParams {\n task_id: string;\n bid_price_mist: string | number;\n reputation_score?: string | number;\n evidence?: string;\n}\n\nexport const meshMarketplaceBidTool = {\n name: 'collective_marketplace_bid',\n description: 'Place a marketplace bid on an open task',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Open task object id' },\n bid_price_mist: { type: 'string', description: 'Bid price in MIST' },\n reputation_score: { type: 'string', description: 'Optional reputation score override' },\n evidence: { type: 'string', description: 'Optional proposal or qualifications blob content' },\n },\n required: ['task_id', 'bid_price_mist'],\n },\n};\n\nexport async function runMeshMarketplaceBid(\n params: MeshMarketplaceBidParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const result = await client.placeBid({\n taskId: params.task_id,\n bidPriceMist: parseMist(params.bid_price_mist, 'bid_price_mist'),\n reputationScore: params.reputation_score == null ? undefined : parseMist(params.reputation_score, 'reputation_score'),\n evidenceBlob: params.evidence,\n signer: context.keypair,\n });\n\n return {\n bid_id: result.bidId,\n task_id: params.task_id,\n tx_digest: result.txDigest,\n reputation_score: result.reputationScore.toString(),\n };\n}\n\nfunction parseMist(value: string | number, field: string): bigint {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error(`${field} must be a non-negative integer string.`);\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshMarketplaceBrowseParams {\n category?: string;\n min_price_mist?: string | number;\n max_price_mist?: string | number;\n limit?: number;\n}\n\nexport const meshMarketplaceBrowseTool = {\n name: 'collective_marketplace_browse',\n description: 'Browse open marketplace tasks by category and price filters',\n inputSchema: {\n type: 'object' as const,\n properties: {\n category: { type: 'string', description: 'Optional marketplace category filter' },\n min_price_mist: { type: 'string', description: 'Optional minimum escrow budget in MIST' },\n max_price_mist: { type: 'string', description: 'Optional maximum escrow budget in MIST' },\n limit: { type: 'number', description: 'Maximum number of open tasks to return (default 20)' },\n },\n required: [],\n },\n};\n\nexport async function runMeshMarketplaceBrowse(\n params: MeshMarketplaceBrowseParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const tasks = await client.browseOpenTasks({\n category: params.category,\n minPriceMist: parseOptionalMist(params.min_price_mist),\n maxPriceMist: parseOptionalMist(params.max_price_mist),\n limit: normalizeLimit(params.limit),\n });\n\n return {\n tasks,\n count: tasks.length,\n };\n}\n\nfunction parseOptionalMist(value: string | number | undefined): bigint | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error('Price filters must be non-negative integer strings.');\n}\n\nfunction normalizeLimit(limit?: number): number {\n if (limit == null) {\n return 20;\n }\n if (!Number.isSafeInteger(limit) || limit <= 0) {\n throw new Error('limit must be a positive integer.');\n }\n return limit;\n}\n","import { MarketplaceClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nconst DEFAULT_DISPUTE_WINDOW_MS = 60_000;\nconst DEFAULT_EXPIRY_HOURS = 24;\n\nexport interface MeshMarketplacePostParams {\n capability: string;\n category: string;\n price_mist: string | number;\n input?: string;\n input_blob_id?: string;\n agreement_hash?: string;\n dispute_window_ms?: number;\n expiry_hours?: number;\n}\n\nexport const meshMarketplacePostTool = {\n name: 'collective_marketplace_post',\n description: 'Post an open marketplace task with category metadata',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability requested for the task' },\n category: { type: 'string', description: 'Marketplace category used for browsing' },\n price_mist: { type: 'string', description: 'Escrowed task budget in MIST' },\n input: { type: 'string', description: 'Inline task input to upload to blob storage' },\n input_blob_id: { type: 'string', description: 'Existing blob id containing task input' },\n agreement_hash: { type: 'string', description: 'Optional agreement hash or plaintext summary' },\n dispute_window_ms: { type: 'number', description: 'Optional dispute window override in milliseconds' },\n expiry_hours: { type: 'number', description: 'Optional task expiry in hours' },\n },\n required: ['capability', 'category', 'price_mist'],\n },\n};\n\nexport async function runMeshMarketplacePost(\n params: MeshMarketplacePostParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.marketplaceClient ?? new MarketplaceClient(context.suiClient, context.networkConfig);\n const inputBlobId = await resolveInputBlobId(params, context);\n const result = await client.postOpenTask({\n capability: params.capability,\n category: params.category,\n inputBlobId,\n agreementHash: params.agreement_hash,\n priceMist: parseMist(params.price_mist, 'price_mist'),\n disputeWindowMs: normalizeNonNegativeInteger(params.dispute_window_ms, DEFAULT_DISPUTE_WINDOW_MS, 'dispute_window_ms'),\n expiryHours: normalizeNonNegativeInteger(params.expiry_hours, DEFAULT_EXPIRY_HOURS, 'expiry_hours'),\n signer: context.keypair,\n });\n\n return {\n task_id: result.taskId,\n tx_digest: result.txDigest,\n capability: params.capability,\n category: params.category,\n input_blob_id: inputBlobId,\n };\n}\n\nasync function resolveInputBlobId(params: MeshMarketplacePostParams, context: MeshToolContext): Promise<string> {\n if ((params.input_blob_id ? 1 : 0) + (params.input ? 1 : 0) !== 1) {\n throw new Error('Provide exactly one of input or input_blob_id when posting a marketplace task');\n }\n if (params.input_blob_id) {\n return params.input_blob_id;\n }\n if (!params.input) {\n throw new Error('input or input_blob_id is required when posting a marketplace task');\n }\n const stored = await context.blobStore.store(new TextEncoder().encode(params.input));\n return stored.blobId;\n}\n\nfunction parseMist(value: string | number, field: string): bigint {\n if (typeof value === 'number' && Number.isSafeInteger(value) && value >= 0) {\n return BigInt(value);\n }\n if (typeof value === 'string' && /^\\d+$/.test(value.trim())) {\n return BigInt(value.trim());\n }\n throw new Error(`${field} must be a non-negative integer string.`);\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number, field: string): number {\n if (value == null) {\n return fallback;\n }\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new Error(`${field} must be a non-negative integer.`);\n }\n return value;\n}\n","import {\n AggregationMode,\n ProviderSelectionStrategy,\n type AgentCard,\n type MultiProviderRequest,\n} from '@hivemind-os/collective-types';\nimport {\n CircuitBreaker,\n FanOutExecutor,\n PerformanceTracker,\n ProviderSelector,\n} from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\nimport { discoverAgentsByCapability } from './discover.js';\nimport { runMeshExecute } from './execute.js';\n\nconst routingCircuitBreaker = new CircuitBreaker();\nconst routingPerformanceTracker = new PerformanceTracker();\nconst providerSelector = new ProviderSelector({\n circuitBreaker: routingCircuitBreaker,\n performanceTracker: routingPerformanceTracker,\n});\n\nexport interface MeshMultiExecuteParams {\n capability: string;\n input: unknown;\n fanOutCount?: number;\n strategy?: ProviderSelectionStrategy | `${ProviderSelectionStrategy}`;\n aggregation?: AggregationMode | `${AggregationMode}`;\n timeout?: number;\n maxPricePerProvider?: number;\n}\n\nexport const meshMultiExecuteTool = {\n name: 'collective_multi_execute',\n description: 'Execute a mesh task across multiple providers and aggregate the results',\n inputSchema: {\n type: 'object' as const,\n properties: {\n capability: { type: 'string', description: 'Capability name to execute' },\n input: { description: 'Task input payload' },\n fanOutCount: { type: 'number', description: 'How many providers to fan out to (default 3)' },\n strategy: {\n type: 'string',\n enum: Object.values(ProviderSelectionStrategy),\n description: 'Provider selection strategy (default weighted)',\n },\n aggregation: {\n type: 'string',\n enum: Object.values(AggregationMode),\n description: 'Aggregation mode (default first_success)',\n },\n timeout: { type: 'number', description: 'Per-provider timeout in milliseconds' },\n maxPricePerProvider: { type: 'number', description: 'Maximum price per provider in MIST' },\n },\n required: ['capability', 'input'],\n },\n};\n\nexport interface MeshMultiExecuteResult {\n capability: string;\n strategy: ProviderSelectionStrategy;\n aggregation: AggregationMode;\n providers: Array<{\n did: string;\n price_mist: string;\n reputation: number;\n estimated_latency_ms?: number;\n composite_score: number;\n }>;\n results: Array<{\n provider: string;\n status: 'success' | 'failure' | 'timeout';\n result?: unknown;\n duration_ms: number;\n error?: string;\n }>;\n aggregated_result?: unknown;\n total_cost_mist: string;\n}\n\nexport async function runMeshMultiExecute(\n params: MeshMultiExecuteParams,\n context: MeshToolContext,\n): Promise<MeshMultiExecuteResult> {\n const capability = params.capability.trim();\n if (!capability) {\n throw new Error('Capability is required.');\n }\n\n const fanOutCount = normalizePositiveInteger(params.fanOutCount, 3);\n const strategy = parseSelectionStrategy(params.strategy);\n const aggregation = parseAggregation(params.aggregation);\n const request: MultiProviderRequest = {\n capability,\n input: params.input,\n fanOutCount,\n strategy,\n aggregation,\n timeout: normalizeOptionalInteger(params.timeout),\n maxPricePerProvider: toOptionalBigInt(params.maxPricePerProvider),\n };\n\n const { agents: discoveredAgents } = await discoverAgentsByCapability(\n capability,\n context,\n Math.max(fanOutCount * 3, fanOutCount),\n 'reputation',\n );\n const candidates = filterByMaxPrice(discoveredAgents, capability, request.maxPricePerProvider);\n const selected = providerSelector.selectProviders(candidates, capability, strategy, fanOutCount);\n if (selected.length === 0) {\n throw new Error(`No eligible providers found for capability ${capability}.`);\n }\n\n const executor = new FanOutExecutor({\n circuitBreaker: routingCircuitBreaker,\n performanceTracker: routingPerformanceTracker,\n executeProvider: async (provider, executionRequest, executionContext) => {\n if (executionContext.signal.aborted) {\n throw executionContext.signal.reason ?? new Error('Provider execution aborted.');\n }\n\n const value = await runMeshExecute({\n capability: executionRequest.capability,\n provider_did: provider.did,\n input: serializeInput(executionRequest.input),\n timeout_seconds: executionRequest.timeout ? Math.max(1, Math.ceil(executionRequest.timeout / 1_000)) : undefined,\n }, context);\n return {\n value,\n aggregateValue: value.result,\n cost: BigInt(value.price_mist),\n };\n },\n });\n\n const result = await executor.execute(request, selected);\n\n return {\n capability,\n strategy,\n aggregation,\n providers: selected.map((provider) => ({\n did: provider.did,\n price_mist: provider.price.toString(),\n reputation: provider.reputation,\n estimated_latency_ms: provider.estimatedLatency,\n composite_score: provider.compositeScore,\n })),\n results: result.results.map((entry) => ({\n provider: entry.provider,\n status: entry.status,\n result: entry.result,\n duration_ms: entry.durationMs,\n error: entry.error,\n })),\n aggregated_result: result.aggregatedResult,\n total_cost_mist: result.totalCost.toString(),\n };\n}\n\nfunction filterByMaxPrice(agents: AgentCard[], capability: string, maxPricePerProvider?: bigint): AgentCard[] {\n if (maxPricePerProvider === undefined) {\n return agents;\n }\n\n return agents.filter((agent) => {\n const matched = agent.capabilities.find((entry) => entry.name.toLowerCase() === capability.toLowerCase());\n return matched ? matched.pricing.amount <= maxPricePerProvider : false;\n });\n}\n\nfunction parseSelectionStrategy(strategy?: MeshMultiExecuteParams['strategy']): ProviderSelectionStrategy {\n if (!strategy) {\n return ProviderSelectionStrategy.WEIGHTED;\n }\n if (Object.values(ProviderSelectionStrategy).includes(strategy as ProviderSelectionStrategy)) {\n return strategy as ProviderSelectionStrategy;\n }\n throw new Error(`Unsupported provider selection strategy: ${String(strategy)}.`);\n}\n\nfunction parseAggregation(aggregation?: MeshMultiExecuteParams['aggregation']): AggregationMode {\n if (!aggregation) {\n return AggregationMode.FIRST_SUCCESS;\n }\n if (Object.values(AggregationMode).includes(aggregation as AggregationMode)) {\n return aggregation as AggregationMode;\n }\n throw new Error(`Unsupported aggregation mode: ${String(aggregation)}.`);\n}\n\nfunction normalizePositiveInteger(value: number | undefined, fallback: number): number {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return fallback;\n }\n return Math.max(1, Math.floor(value));\n}\n\nfunction normalizeOptionalInteger(value?: number): number | undefined {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return undefined;\n }\n return Math.max(1, Math.floor(value));\n}\n\nfunction toOptionalBigInt(value?: number): bigint | undefined {\n if (typeof value !== 'number' || Number.isNaN(value)) {\n return undefined;\n }\n return BigInt(Math.max(0, Math.floor(value)));\n}\n\nfunction serializeInput(input: unknown): string {\n return typeof input === 'string' ? input : JSON.stringify(input);\n}\n","import { PaymentRail, type SpendingPolicy } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshPolicyUpdateParams {\n daily_limit_mist?: number;\n monthly_limit_mist?: number;\n per_task_limit_mist?: number;\n}\n\nexport const meshPolicyUpdateTool = {\n name: 'collective_policy_update',\n description: 'Update local spending policy limits',\n inputSchema: {\n type: 'object' as const,\n properties: {\n daily_limit_mist: { type: 'number', description: 'Daily MIST limit' },\n monthly_limit_mist: { type: 'number', description: 'Monthly MIST limit' },\n per_task_limit_mist: { type: 'number', description: 'Per-task MIST limit' },\n },\n required: [],\n },\n};\n\nexport async function runMeshPolicyUpdate(\n params: MeshPolicyUpdateParams,\n context: MeshToolContext,\n): Promise<{\n updated: true;\n limits: Array<{ interval: string; amount_mist: string; rail: string }>;\n}> {\n const currentPolicy = clonePolicy(readPolicySnapshot(context));\n const nextLimits = [...currentPolicy.limits];\n\n applyLimit(nextLimits, 'transaction', params.per_task_limit_mist);\n applyLimit(nextLimits, 'day', params.daily_limit_mist);\n applyLimit(nextLimits, 'month', params.monthly_limit_mist);\n\n const updatedPolicy: SpendingPolicy = {\n ...currentPolicy,\n limits: nextLimits,\n };\n\n context.spendingPolicy.updatePolicy(updatedPolicy);\n\n return {\n updated: true,\n limits: updatedPolicy.limits.map((limit) => ({\n interval: limit.interval,\n amount_mist: limit.amount.toString(),\n rail: limit.rail ?? PaymentRail.SUI_ESCROW,\n })),\n };\n}\n\nfunction readPolicySnapshot(context: MeshToolContext): SpendingPolicy {\n const engineWithPolicy = context.spendingPolicy as unknown as { policy?: SpendingPolicy };\n return engineWithPolicy.policy ?? { limits: [] };\n}\n\nfunction clonePolicy(policy: SpendingPolicy): SpendingPolicy {\n return {\n ...policy,\n limits: policy.limits.map((limit) => ({ ...limit })),\n allowlist: policy.allowlist ? [...policy.allowlist] : undefined,\n denylist: policy.denylist ? [...policy.denylist] : undefined,\n };\n}\n\nfunction applyLimit(\n limits: SpendingPolicy['limits'],\n interval: 'transaction' | 'day' | 'month',\n amount?: number,\n): void {\n if (typeof amount !== 'number' || Number.isNaN(amount)) {\n return;\n }\n\n const nextLimit = {\n amount: BigInt(Math.max(0, Math.floor(amount))),\n interval,\n rail: PaymentRail.SUI_ESCROW,\n } as const;\n const index = limits.findIndex(\n (entry) => entry.interval === interval && (entry.rail ?? PaymentRail.SUI_ESCROW) === PaymentRail.SUI_ESCROW,\n );\n\n if (index >= 0) {\n limits[index] = nextLimit;\n return;\n }\n\n limits.push(nextLimit);\n}\n","import { PaymentRail, type Capability } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { hexToBytes } from '../encryption.js';\n\nexport interface MeshRegisterParams {\n name: string;\n description: string;\n capabilities: Array<{\n name: string;\n description: string;\n version: string;\n price_mist: number;\n }>;\n}\n\nexport const meshRegisterTool = {\n name: 'collective_register',\n description: 'Register the current daemon identity as a provider',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Display name for the agent' },\n description: { type: 'string', description: 'Agent description' },\n capabilities: {\n type: 'array' as const,\n items: {\n type: 'object' as const,\n properties: {\n name: { type: 'string' },\n description: { type: 'string' },\n version: { type: 'string' },\n price_mist: { type: 'number' },\n },\n required: ['name', 'description', 'version', 'price_mist'],\n },\n },\n },\n required: ['name', 'description', 'capabilities'],\n },\n};\n\nexport async function runMeshRegister(\n params: MeshRegisterParams,\n context: MeshToolContext,\n): Promise<{ agent_card_id: string; did: string; tx_digest: string }> {\n const capabilities: Capability[] = params.capabilities.map((entry) => ({\n name: entry.name,\n description: entry.description,\n version: entry.version,\n pricing: {\n rail: PaymentRail.SUI_ESCROW,\n amount: BigInt(Math.max(0, Math.floor(entry.price_mist))),\n currency: 'MIST',\n },\n }));\n\n const result = await context.registryClient.registerAgent({\n name: params.name,\n did: context.did,\n description: params.description,\n capabilities,\n endpoint: `mesh://agent/${context.did}`,\n encryptionPublicKey: context.encryption?.enabled ? (hexToBytes(context.encryption.publicKey) ?? undefined) : undefined,\n keypair: context.keypair,\n });\n\n const card = await context.registryClient.getAgentCard(result.agentCardId);\n if (card) {\n context.agentCache.upsertAgent(card);\n }\n\n return {\n agent_card_id: result.agentCardId,\n did: context.did,\n tx_digest: result.txDigest,\n };\n}\n","import { RelayRegistryClient } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshRelayRegistryParams {\n action: 'list' | 'register';\n endpoint?: string;\n stake_id?: string;\n region?: string;\n routing_fee_bps?: number;\n capabilities?: string[];\n}\n\nexport const meshRelayRegistryTool = {\n name: 'collective_relay_registry',\n description: 'List registered community relays or register this node as a relay operator',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: { type: 'string', enum: ['list', 'register'] },\n endpoint: { type: 'string', description: 'Relay websocket or HTTPS endpoint when action=register' },\n stake_id: { type: 'string', description: 'Relay stake position object id when action=register' },\n region: { type: 'string', description: 'Relay region label when action=register' },\n routing_fee_bps: { type: 'number', description: 'Routing fee in basis points when action=register' },\n capabilities: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional relay capabilities when action=register (defaults to [\"routing\"])',\n },\n },\n required: ['action'],\n },\n};\n\nexport async function runMeshRelayRegistry(\n params: MeshRelayRegistryParams,\n context: MeshToolContext,\n): Promise<Record<string, unknown>> {\n const client = context.relayRegistryClient ?? new RelayRegistryClient(context.suiClient, context.networkConfig);\n\n switch (params.action) {\n case 'list': {\n const relays = await client.listRelays();\n return {\n action: 'list',\n count: relays.length,\n relays,\n };\n }\n case 'register': {\n const endpoint = requireNonEmpty(params.endpoint, 'endpoint');\n const stakeId = requireNonEmpty(params.stake_id, 'stake_id');\n const region = requireNonEmpty(params.region, 'region');\n if (params.routing_fee_bps === undefined) {\n throw new Error('routing_fee_bps is required when action=register');\n }\n if (!Number.isInteger(params.routing_fee_bps) || params.routing_fee_bps < 0 || params.routing_fee_bps > 10_000) {\n throw new Error('routing_fee_bps must be an integer between 0 and 10000');\n }\n const capabilities = normalizeCapabilities(params.capabilities);\n const result = await client.registerRelay({\n endpoint,\n stakeId,\n region,\n routingFeeBps: params.routing_fee_bps,\n capabilities,\n signer: context.keypair as never,\n });\n return {\n action: 'register',\n relay_id: result.relayId,\n tx_digest: result.txDigest,\n endpoint,\n region,\n routing_fee_bps: params.routing_fee_bps,\n capabilities,\n };\n }\n default:\n throw new Error(`Unknown relay registry action: ${String(params.action)}`);\n }\n}\n\nfunction requireNonEmpty(value: string | undefined, field: string): string {\n const normalized = value?.trim();\n if (!normalized) {\n throw new Error(`${field} is required when action=register`);\n }\n return normalized;\n}\n\nfunction normalizeCapabilities(capabilities: string[] | undefined): string[] {\n const normalized = capabilities?.map((capability) => capability.trim()).filter(Boolean) ?? [];\n return normalized.length > 0 ? [...new Set(normalized)] : ['routing'];\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport const meshSettingsTool = {\n name: 'collective_settings',\n description:\n 'Open the HiveMind Collective settings dashboard in the browser. ' +\n 'Shows wallet balance, spending limits, identity, network config, and agent discovery.',\n inputSchema: {\n type: 'object' as const,\n properties: {},\n required: [],\n },\n};\n\nexport async function runMeshSettings(\n _params: Record<string, never>,\n context: MeshToolContext,\n): Promise<{ url: string; opened: boolean; message: string }> {\n if (!context.portalUrl) {\n return {\n url: '',\n opened: false,\n message: 'Settings dashboard is not available. The daemon portal server may not be running.',\n };\n }\n\n let opened = false;\n if (context.openUrl) {\n try {\n opened = await context.openUrl(context.portalUrl);\n } catch {\n // Browser open failed — user can open URL manually\n }\n }\n\n return {\n url: context.portalUrl,\n opened,\n message: opened\n ? `Settings dashboard opened at ${context.portalUrl}`\n : `Open the settings dashboard in your browser: ${context.portalUrl}`,\n };\n}\n","import { StakingClient, STAKING_COOLDOWN_MS } from '@hivemind-os/collective-core';\n\nimport type { MeshToolContext } from '../context.js';\n\nexport interface MeshStakeParams {\n action: 'deposit' | 'status' | 'withdraw';\n amount_sui?: string;\n stake_type?: 'agent' | 'relay';\n}\n\nexport const meshStakeTool = {\n name: 'collective_stake',\n description: 'Manage stake deposits, status, and withdrawals for the local Agentic Mesh identity',\n inputSchema: {\n type: 'object' as const,\n properties: {\n action: { type: 'string', enum: ['deposit', 'status', 'withdraw'] },\n amount_sui: { type: 'string', description: 'SUI amount to deposit when action=deposit' },\n stake_type: { type: 'string', enum: ['agent', 'relay'], description: 'Stake type for deposits (default agent)' },\n },\n required: ['action'],\n },\n};\n\nexport async function runMeshStake(params: MeshStakeParams, context: MeshToolContext): Promise<Record<string, unknown>> {\n const client = context.stakingClient ?? new StakingClient(context.suiClient, context.networkConfig);\n const owner = context.keypair.getPublicKey().toSuiAddress();\n\n switch (params.action) {\n case 'deposit': {\n if (!params.amount_sui) {\n throw new Error('amount_sui is required when action=deposit');\n }\n const amountMist = parseSuiToMist(params.amount_sui);\n const result = await client.depositStake({\n amountMist,\n stakeType: params.stake_type ?? 'agent',\n signer: context.keypair as never,\n });\n return {\n action: 'deposit',\n stake_id: result.stakeId,\n tx_digest: result.txDigest,\n amount_mist: amountMist.toString(),\n amount_sui: params.amount_sui,\n stake_type: params.stake_type ?? 'agent',\n };\n }\n case 'status': {\n const stake = await client.getStakeByOwner(owner);\n return {\n action: 'status',\n owner,\n staked: Boolean(stake),\n stake,\n };\n }\n case 'withdraw': {\n const stake = await client.getStakeByOwner(owner);\n if (!stake) {\n throw new Error('No stake position found for this wallet.');\n }\n if (stake.deactivatedAt === 0) {\n const result = await client.startDeactivation({ stakeId: stake.id, signer: context.keypair as never });\n return {\n action: 'deactivation_started',\n stake_id: stake.id,\n cooldown_ends_at: result.cooldownEndsAt,\n tx_digest: result.txDigest,\n };\n }\n\n const cooldownEndsAt = stake.deactivatedAt + STAKING_COOLDOWN_MS;\n if (Date.now() < cooldownEndsAt) {\n return {\n action: 'cooling_down',\n stake_id: stake.id,\n cooldown_ends_at: cooldownEndsAt,\n cooldown_remaining_ms: Math.max(cooldownEndsAt - Date.now(), 0),\n };\n }\n\n const result = await client.withdrawStake({ stakeId: stake.id, signer: context.keypair as never });\n return {\n action: 'withdrawn',\n stake_id: stake.id,\n amount_returned_mist: result.amountReturned.toString(),\n tx_digest: result.txDigest,\n };\n }\n default:\n throw new Error(`Unknown staking action: ${String(params.action)}`);\n }\n}\n\nfunction parseSuiToMist(input: string): bigint {\n const trimmed = input.trim();\n if (!/^\\d+(?:\\.\\d{1,9})?$/.test(trimmed)) {\n throw new Error(`Invalid SUI amount: ${input}`);\n }\n const [whole, fraction = ''] = trimmed.split('.');\n return BigInt(whole) * 1_000_000_000n + BigInt(fraction.padEnd(9, '0'));\n}\n","import type { MeshToolContext } from '../context.js';\n\nexport interface MeshTaskHistoryParams {\n limit?: number;\n status_filter?: string;\n}\n\nexport const meshTaskHistoryTool = {\n name: 'collective_task_history',\n description: 'Query locally persisted task history',\n inputSchema: {\n type: 'object' as const,\n properties: {\n limit: { type: 'number', description: 'Max task rows to return (default 20)' },\n status_filter: { type: 'string', description: 'Optional task status filter' },\n },\n required: [],\n },\n};\n\nexport async function runMeshTaskHistory(\n params: MeshTaskHistoryParams,\n context: MeshToolContext,\n): Promise<{ tasks: unknown[]; note?: string }> {\n const db = context.taskHistoryDb as\n | {\n prepare?: (sql: string) => {\n all: (...args: unknown[]) => unknown[];\n };\n }\n | undefined;\n\n if (!db?.prepare) {\n return {\n tasks: [],\n note: 'Local task history is not initialized yet.',\n };\n }\n\n const limit = normalizeLimit(params.limit);\n const statusFilter = params.status_filter?.trim();\n\n try {\n const statement = statusFilter\n ? db.prepare(\n 'SELECT * FROM task_history WHERE status = ? ORDER BY created_at DESC LIMIT ?',\n )\n : db.prepare('SELECT * FROM task_history ORDER BY created_at DESC LIMIT ?');\n const rows = statusFilter ? statement.all(statusFilter, limit) : statement.all(limit);\n\n return {\n tasks: rows.map((row) => serializeBigInts(row)),\n };\n } catch {\n return {\n tasks: [],\n note: 'Local task history database is not available yet.',\n };\n }\n}\n\nfunction normalizeLimit(limit?: number): number {\n if (typeof limit !== 'number' || Number.isNaN(limit)) {\n return 20;\n }\n\n return Math.max(1, Math.floor(limit));\n}\n\nfunction serializeBigInts(value: unknown): unknown {\n if (typeof value === 'bigint') {\n return value.toString();\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => serializeBigInts(entry));\n }\n\n if (value && typeof value === 'object') {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, serializeBigInts(entry)]),\n );\n }\n\n return value;\n}\n","import { decodeMeteredResult, parseMeteredResultEnvelope } from '@hivemind-os/collective-core';\nimport { TaskStatus } from '@hivemind-os/collective-types';\n\nimport type { MeshToolContext } from '../context.js';\nimport { fetchMeshBlob } from '../encryption.js';\n\nconst decoder = new TextDecoder();\n\nexport interface MeshTaskStatusParams {\n task_id: string;\n}\n\nexport const meshTaskStatusTool = {\n name: 'collective_task_status',\n description: 'Get task status and fetch the result if available',\n inputSchema: {\n type: 'object' as const,\n properties: {\n task_id: { type: 'string', description: 'Task object id' },\n },\n required: ['task_id'],\n },\n};\n\nexport async function runMeshTaskStatus(\n params: MeshTaskStatusParams,\n context: MeshToolContext,\n): Promise<{\n task_id: string;\n status: string;\n provider_did?: string;\n result?: string;\n price_mist: string;\n created_at: number;\n}> {\n const task = await context.taskClient.getTask(params.task_id);\n if (!task) {\n throw new Error(`Task ${params.task_id} was not found.`);\n }\n\n let result: string | undefined;\n if ((task.status === TaskStatus.COMPLETED || task.status === TaskStatus.RELEASED) && task.resultBlobId) {\n const resultBytes = await fetchMeshBlob(context.blobStore, task.resultBlobId);\n if (resultBytes) {\n const envelope = parseMeteredResultEnvelope(resultBytes);\n result = decoder.decode(envelope ? decodeMeteredResult(envelope) : resultBytes);\n }\n }\n\n return {\n task_id: task.id,\n status: TaskStatus[task.status] ?? 'UNKNOWN',\n provider_did: findProviderDid(context, task.provider),\n result,\n price_mist: task.price.toString(),\n created_at: task.createdAt,\n };\n}\n\nfunction findProviderDid(context: MeshToolContext, owner?: string): string | undefined {\n if (!owner) {\n return undefined;\n }\n\n return context.agentCache.getAllActive(1_000).find((agent) => agent.owner === owner)?.did;\n}\n"],"mappings":";AAAA,SAAS,qBAAqB;AAE9B,SAAS,cAAc;;;ACDvB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACDA,IAAM,4BAA4B;AAAA,EACvC,aAAa;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACZ;AAEA,eAAsB,kBAAkB,KAAa,SAA8C;AACjG,QAAM,SAAS,QAAQ,WAAW,cAAc,GAAG;AACnD,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,MAAM,sBAAsB,KAAK,OAAO;AAC3D,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,SAAS,GAAG,iBAAiB;AAAA,EAC/C;AAEA,UAAQ,WAAW,YAAY,UAAU;AACzC,SAAO;AACT;AAEA,eAAe,sBACb,KACA,SAC2B;AAC3B,QAAM,YAAY,GAAG,QAAQ,cAAc,SAAS;AACpD,MAAI,SAAkB;AAEtB,SAAO,MAAM;AACX,UAAM,OAAO,MAAM,QAAQ,UAAU,YAAY,WAAW,QAAiB,EAAE;AAC/E,eAAW,SAAS,KAAK,QAAQ;AAC/B,UAAI,CAAC,SAAS,MAAM,UAAU,GAAG;AAC/B;AAAA,MACF;AAEA,UAAI,CAAC,aAAa,WAAW,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG;AACxD;AAAA,MACF;AAEA,YAAM,SAAS,WAAW,MAAM,WAAW,IAAI,MAAM,WAAW,SAAS,MAAM,WAAW,MAAM;AAChG,UAAI,CAAC,QAAQ;AACX;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,QAAQ,eAAe,aAAa,MAAM;AAC7D,UAAI,MAAM;AACR,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,CAAC,KAAK,WAAW,CAAC,KAAK,YAAY;AACrC;AAAA,IACF;AAEA,aAAS,KAAK;AAAA,EAChB;AAEA,SAAO;AACT;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,cAAc,QAA2B;AAChD,QAAM,QAAQ,OAAO,KAAK,CAAC,UAAU,OAAO,UAAU,QAAQ;AAC9D,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAAS,aAAa,MAAc,OAAwB;AAC1D,SAAO,KAAK,YAAY,MAAM,MAAM,YAAY;AAClD;;;AC1EO,IAAM,2BAA2B;AAAA,EACtC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACZ;AAEA,eAAsB,yBACpB,SAC6D;AAC7D,QAAM,SAAS,oBAAI,IAAoB;AAEvC,aAAW,SAAS,QAAQ,WAAW,aAAa,GAAK,GAAG;AAC1D,eAAW,cAAc,MAAM,cAAc;AAC3C,aAAO,IAAI,WAAW,OAAO,OAAO,IAAI,WAAW,IAAI,KAAK,KAAK,CAAC;AAAA,IACpE;AAAA,EACF;AAEA,SAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,EACxB,IAAI,CAAC,CAAC,YAAY,WAAW,OAAO,EAAE,YAAY,YAAY,EAAE,EAChE,KAAK,CAAC,MAAM,UAAU,KAAK,WAAW,cAAc,MAAM,UAAU,CAAC;AAC1E;;;ACvBA,SAAS,kBAAkB;;;ACOpB,SAAS,uBAAuB,WAA2D;AAChG,SAAO,OAAQ,UAA8C,mBAAmB,cAC3E,OAAQ,UAA8C,mBAAmB;AAChF;AAEA,eAAsB,cAAc,WAAsB,QAA4C;AACpG,SAAO,uBAAuB,SAAS,IACnC,MAAM,UAAU,eAAe,MAAM,IACrC,MAAM,UAAU,MAAM,MAAM;AAClC;AAEO,SAAS,WAAW,OAAmC;AAC5D,MAAI,CAAC,SAAS,MAAM,WAAW,MAAM,CAAC,eAAe,KAAK,KAAK,GAAG;AAChE,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,WAAW,OAAO,KAAK,OAAO,KAAK,CAAC;AACjD;;;ADnBA,IAAM,UAAU,IAAI,YAAY;AAEzB,IAAM,2BAA2B;AAAA,EACtC,aAAa;AAAA,EACb,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACZ;AAEA,eAAsB,iBAAiB,QAAgB,SAepD;AACD,QAAM,OAAO,MAAM,QAAQ,WAAW,QAAQ,MAAM;AACpD,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,QAAQ,MAAM,iBAAiB;AAAA,EACjD;AAEA,MAAI;AACJ,OAAK,KAAK,WAAW,WAAW,aAAa,KAAK,WAAW,WAAW,aAAa,KAAK,cAAc;AACtG,UAAM,QAAQ,MAAM,cAAc,QAAQ,WAAW,KAAK,YAAY;AACtE,aAAS,QAAQ,QAAQ,OAAO,KAAK,IAAI;AAAA,EAC3C;AAEA,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,WAAW,KAAK;AAAA,IAChB,UAAU,KAAK;AAAA,IACf,YAAY,KAAK;AAAA,IACjB,eAAe,KAAK;AAAA,IACpB,gBAAgB,KAAK;AAAA,IACrB,YAAY,KAAK,MAAM,SAAS;AAAA,IAChC,QAAQ,WAAW,KAAK,MAAM,KAAK;AAAA,IACnC,YAAY,KAAK;AAAA,IACjB,aAAa,KAAK;AAAA,IAClB,cAAc,KAAK;AAAA,IACnB,YAAY,KAAK;AAAA,IACjB,gBAAgB,KAAK;AAAA,IACrB;AAAA,EACF;AACF;;;AEzDA,SAAS,mBAAmB;;;ACErB,IAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,EACb;AACF;AAEA,eAAsB,eACpB,SACA,SACyE;AACzE,QAAM,UAAU,QAAQ,QAAQ,aAAa,EAAE,aAAa;AAC5D,QAAM,cAAc,MAAM,QAAQ,UAAU,WAAW,OAAO;AAE9D,SAAO;AAAA,IACL;AAAA,IACA,cAAc,YAAY,SAAS;AAAA,IACnC,aAAa,gBAAgB,WAAW;AAAA,EAC1C;AACF;AAEO,SAAS,gBAAgB,aAA6B;AAC3D,QAAM,QAAQ,cAAc;AAC5B,QAAM,WAAW,cAAc;AAC/B,MAAI,aAAa,IAAI;AACnB,WAAO,MAAM,SAAS;AAAA,EACxB;AAEA,QAAM,eAAe,SAAS,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,QAAQ,OAAO,EAAE;AAC3E,SAAO,GAAG,MAAM,SAAS,CAAC,IAAI,YAAY;AAC5C;;;AD9BO,IAAM,qBAAqB;AAAA,EAChC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACZ;AAEA,eAAsB,mBAAmB,SAOtC;AACD,QAAM,UAAU,QAAQ,QAAQ,aAAa,EAAE,aAAa;AAC5D,QAAM,UAAU,MAAM,QAAQ,UAAU,WAAW,OAAO;AAE1D,SAAO;AAAA,IACL;AAAA,IACA,cAAc,QAAQ,SAAS;AAAA,IAC/B,aAAa,gBAAgB,OAAO;AAAA,IACpC,kBAAkB,QAAQ,eAAe,SAAS,OAAO,YAAY,UAAU,EAAE,SAAS;AAAA,IAC1F,kBAAkB,QAAQ,eAAe,SAAS,SAAS,YAAY,UAAU,EAAE,SAAS;AAAA,IAC5F,MAAM,YAAY;AAAA,EACpB;AACF;;;ALlBA,IAAM,kBAAkB,CAAC,0BAA0B,kBAAkB;AACrE,IAAM,oBAAoB,CAAC,2BAA2B,wBAAwB;AAEvE,SAAS,yBAAyB,QAAgB,SAAgC;AACvF,SAAO,kBAAkB,4BAA4B,aAAa;AAAA,IAChE,WAAW;AAAA,EACb,EAAE;AAEF,SAAO,kBAAkB,oCAAoC,aAAa;AAAA,IACxE;AAAA,EACF,EAAE;AAEF,SAAO,kBAAkB,2BAA2B,OAAO,YAAY;AACrE,UAAM,MAAM,QAAQ,OAAO;AAC3B,UAAM,OAAO,MAAM,kBAAkB,KAAK,OAAO;AAEjD,WAAO;AAAA,MACL,UAAU;AAAA,QACR;AAAA,UACE;AAAA,UACA,UAAU;AAAA,UACV,MAAM,UAAU,IAAI;AAAA,QACtB;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAOA,eAAe,kBAAkB,KAAa,SAA4C;AACxF,QAAM,SAAS,IAAI,IAAI,GAAG;AAE1B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO,yBAAyB,OAAO;AAAA,IACzC,KAAK;AACH,aAAO,mBAAmB,OAAO;AAAA,IACnC,KAAK;AACH,aAAO,kBAAkB,mBAAmB,OAAO,SAAS,QAAQ,OAAO,EAAE,CAAC,GAAG,OAAO;AAAA,IAC1F,KAAK;AACH,aAAO,iBAAiB,mBAAmB,OAAO,SAAS,QAAQ,OAAO,EAAE,CAAC,GAAG,OAAO;AAAA,IACzF;AACE,YAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE;AAAA,EAC9C;AACF;AAEA,SAAS,UAAU,SAA0B;AAC3C,SAAO,KAAK,UAAU,SAAS,gBAAgB,CAAC;AAClD;AAEA,SAAS,eAAe,MAAc,OAAyB;AAC7D,SAAO,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI;AACxD;;;AOpEA,SAAS,uBAAuB,8BAA8B;AAE9D,SAAS,2BAA2B;;;ACsCpC,eAAsB,oBACpB,SACA,OACA,WACgB;AAChB,QAAM,WAAW,kBAAkB,OAAO;AAC1C,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,4BAA4B;AAAA,EAC9C;AAEA,QAAM,YAAY,QAAQ,SAAS,SAAS,WAAW;AACvD,QAAM,WAAW,MAAM,UAAU,UAAU;AAAA,IACzC,QAAQ;AAAA,IACR,SAAS;AAAA,MACP,gBAAgB;AAAA,IAClB;AAAA,IACA,MAAM,KAAK,UAAU,EAAE,OAAO,UAAU,CAAC;AAAA,EAC3C,CAAC;AACD,MAAI,CAAC,SAAS,IAAI;AAChB,UAAM,IAAI,MAAM,oCAAoC,SAAS,MAAM,GAAG;AAAA,EACxE;AAEA,QAAM,UAAW,MAAM,SAAS,KAAK;AACrC,MAAI,QAAQ,UAAU,QAAQ,OAAO,SAAS,GAAG;AAC/C,UAAM,IAAI,MAAM,QAAQ,OAAO,IAAI,CAAC,UAAU,MAAM,WAAW,uBAAuB,EAAE,KAAK,IAAI,CAAC;AAAA,EACpG;AACA,MAAI,CAAC,QAAQ,MAAM;AACjB,UAAM,IAAI,MAAM,iCAAiC;AAAA,EACnD;AACA,SAAO,QAAQ;AACjB;AAEA,eAAsB,mBACpB,SACA,QACsB;AACtB,QAAM,OAAO,MAAM;AAAA,IACjB;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAmCA;AAAA,MACE,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO;AAAA,MACd,eAAe,OAAO;AAAA,MACtB,UAAU,OAAO;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,KAAK,OAAO,MAAM,IAAI,eAAe;AAC9C;AAEO,SAAS,kBAAkB,SAA0D;AAC1F,QAAM,QAAQ,QAAQ,SAAS,cAAc,QAAQ,IAAI;AACzD,SAAO,OAAO,UAAU,YAAY,MAAM,KAAK,EAAE,SAAS,IAAI,MAAM,KAAK,IAAI;AAC/E;AAEA,SAAS,gBAAgB,OAAoC;AAC3D,SAAO;AAAA,IACL,IAAI,MAAM;AAAA,IACV,OAAO,MAAM;AAAA,IACb,KAAK,MAAM;AAAA,IACX,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM;AAAA,IACnB,UAAU,MAAM,YAAY;AAAA,IAC5B,QAAQ,MAAM;AAAA,IACd,SAAS,MAAM;AAAA,IACf,cAAc,OAAO,MAAM,YAAY;AAAA,IACvC,WAAW,OAAO,MAAM,SAAS;AAAA,IACjC,qBAAqB,MAAM;AAAA,IAC3B,kBAAkB,MAAM;AAAA,IACxB,oBAAoB,MAAM;AAAA,IAC1B,mBAAmB,OAAO,MAAM,iBAAiB;AAAA,IACjD,UAAU,MAAM;AAAA,IAChB,WAAW,MAAM,YAAY,OAAO,MAAM,SAAS,IAAI;AAAA,IACvD,WAAW,MAAM,aAAa;AAAA,IAC9B,cAAc,MAAM,aAAa,IAAI,CAAC,gBAAgB;AAAA,MACpD,MAAM,WAAW;AAAA,MACjB,aAAa,WAAW;AAAA,MACxB,SAAS,WAAW;AAAA,MACpB,eAAe,WAAW,iBAAiB;AAAA,MAC3C,cAAc,WAAW,gBAAgB;AAAA,MACzC,SAAS;AAAA,QACP,MAAM,WAAW,QAAQ;AAAA,QACzB,QAAQ,OAAO,WAAW,QAAQ,MAAM;AAAA,QACxC,UAAU,WAAW,QAAQ;AAAA,MAC/B;AAAA,IACF,EAAE;AAAA,EACJ;AACF;;;ACvJO,IAAM,oBAAoB;AAAA,EAC/B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,eAAe,iBAAiB,aAAa,EAAE;AAAA,MACzF,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,OAAO,MAAM,EAAE;AAAA,MACxD,SAAS,EAAE,MAAM,SAAS;AAAA,MAC1B,OAAO,EAAE,MAAM,SAAS;AAAA,MACxB,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,mBAAmB,YAAY,YAAY,EAAE;AAAA,IACjF;AAAA,EACF;AACF;AAEA,eAAsB,iBACpB,QACA,SACkC;AAClC,QAAM,OAAO,OAAO,QAAQ;AAE5B,UAAQ,MAAM;AAAA,IACZ,KAAK,eAAe;AAClB,YAAM,OAAO,MAAM;AAAA,QACjB;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOA;AAAA,UACE,QAAQ,OAAO,UAAU;AAAA,UACzB,SAAS,OAAO,WAAW;AAAA,QAC7B;AAAA,MACF;AACA,aAAO,EAAE,MAAM,QAAQ,OAAO,UAAU,OAAO,SAAS,OAAO,WAAW,IAAI,MAAM,KAAK,WAAW;AAAA,IACtG;AAAA,IACA,KAAK,iBAAiB;AACpB,YAAM,OAAO,MAAM;AAAA,QACjB;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYA;AAAA,UACE,OAAO,OAAO,SAAS;AAAA,UACvB,QAAQ,OAAO,WAAW;AAAA,QAC5B;AAAA,MACF;AACA,aAAO,EAAE,MAAM,OAAO,OAAO,SAAS,IAAI,SAAS,OAAO,WAAW,mBAAmB,MAAM,KAAK,aAAa;AAAA,IAClH;AAAA,IACA,KAAK,eAAe;AAClB,YAAM,OAAO,MAAM;AAAA,QACjB;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYF;AACA,aAAO,EAAE,MAAM,MAAM,KAAK,UAAU,YAAY;AAAA,IAClD;AAAA,IACA,KAAK;AAAA,IACL,SAAS;AACP,YAAM,OAAO,MAAM;AAAA,QACjB;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBF;AACA,aAAO,EAAE,MAAM,WAAW,MAAM,KAAK,UAAU;AAAA,IACjD;AAAA,EACF;AACF;;;ACnHO,IAAM,qBAAqB;AAAA,EAChC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,eAAe,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,IACvE;AAAA,IACA,UAAU,CAAC,eAAe;AAAA,EAC5B;AACF;AAEA,eAAsB,kBACpB,QACA,SACuD;AACvD,QAAM,SAAS,MAAM,QAAQ,eAAe,gBAAgB;AAAA,IAC1D,QAAQ,OAAO;AAAA,IACf,SAAS,QAAQ;AAAA,EACnB,CAAC;AACD,UAAQ,WAAW,YAAY,OAAO,aAAa;AAEnD,SAAO;AAAA,IACL,WAAW,OAAO;AAAA,IAClB,QAAQ;AAAA,EACV;AACF;;;AC/BA,SAAS,iCAAiC;AAK1C,IAAM,kBAAkB,IAAI,0BAA0B;AAS/C,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,YAAY,EAAE,MAAM,UAAU,aAAa,gCAAgC;AAAA,MAC3E,OAAO,EAAE,MAAM,UAAU,aAAa,2BAA2B;AAAA,MACjE,SAAS,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,YAAY,GAAG,aAAa,sCAAsC;AAAA,MAC7G,YAAY,EAAE,MAAM,WAAW,aAAa,gDAAgD;AAAA,IAC9F;AAAA,IACA,UAAU,CAAC,YAAY;AAAA,EACzB;AACF;AAEA,eAAsB,gBACpB,QACA,SACwH;AACxH,QAAM,aAAa,OAAO,WAAW,KAAK;AAC1C,QAAM,QAAQ,eAAe,OAAO,KAAK;AACzC,QAAM,SAAS,OAAO,WAAW;AACjC,QAAM,EAAE,QAAQ,OAAO,IAAI,MAAM,2BAA2B,YAAY,SAAS,OAAO,QAAQ,OAAO,UAAU;AAEjH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ,OAAO,IAAI,CAAC,UAAU,eAAe,OAAO,UAAU,CAAC;AAAA,EACjE;AACF;AAEA,eAAsB,2BACpB,YACA,SACA,QAAQ,IACR,SAAiC,SACjC,YAC4E;AAC5E,QAAM,uBAAuB,WAAW,KAAK;AAC7C,MAAI,CAAC,sBAAsB;AACzB,WAAO,EAAE,QAAQ,CAAC,GAAG,QAAQ,QAAQ;AAAA,EACvC;AAEA,MAAI,iBAAiB,SAAS,UAAU,GAAG;AACzC,QAAI;AACF,YAAM,UAAU,MAAM,mBAAmB,SAAS;AAAA,QAChD,YAAY;AAAA,QACZ;AAAA,MACF,CAAC;AACD,UAAI,QAAQ,SAAS,GAAG;AACtB,eAAO;AAAA,UACL,QAAQ,WAAW,eAAe,QAAQ,MAAM,GAAG,KAAK,IAAI,YAAY,SAAS,oBAAoB,EAAE,MAAM,GAAG,KAAK;AAAA,UACrH,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,QAAQ,OAAO,EAAE,KAAK,MAAM,GAAG,wDAAwD;AAAA,IACjG;AAAA,EACF;AAEA,QAAM,UAAU,MAAM,gBAAgB,SAAS,sBAAsB,KAAK,IAAI,QAAQ,GAAG,KAAK,GAAG,MAAM,GACpG,OAAO,CAAC,UAAU,cAAc,OAAO,oBAAoB,CAAC,EAC5D,MAAM,GAAG,KAAK;AAEjB,MAAI,OAAO,SAAS,GAAG;AACrB,WAAO;AAAA,MACL,QAAQ,WAAW,eAAe,SAAS,YAAY,QAAQ,oBAAoB,EAAE,MAAM,GAAG,KAAK;AAAA,MACnG,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,QAAM,aAAa,MAAM,QAAQ,eAAe,qBAAqB,sBAAsB,OAAO;AAAA,IAChG,kBAAkB,WAAW;AAAA,EAC/B,CAAC;AACD,aAAW,SAAS,YAAY;AAC9B,YAAQ,WAAW,YAAY,KAAK;AAAA,EACtC;AAEA,QAAM,SAAS,WAAW,eAAe,aAAa,YAAY,YAAY,oBAAoB;AAClG,SAAO,EAAE,QAAQ,OAAO,MAAM,GAAG,KAAK,GAAG,QAAQ,WAAW;AAC9D;AAEA,eAAsB,0BACpB,YACA,SACA,aACuD;AACvD,QAAM,uBAAuB,WAAW,KAAK;AAC7C,MAAI,CAAC,sBAAsB;AACzB,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,MAAI,aAAa;AACf,UAAM,cAAc,QAAQ,WAAW,cAAc,WAAW;AAChE,UAAM,mBAAmB,cAAc,eAAe,aAAa,oBAAoB,IAAI;AAC3F,QAAI,aAAa,UAAU,kBAAkB;AAC3C,aAAO,EAAE,OAAO,aAAa,YAAY,iBAAiB;AAAA,IAC5D;AAEA,UAAM,EAAE,QAAAA,QAAO,IAAI,MAAM,2BAA2B,sBAAsB,SAAS,EAAE;AACrF,UAAM,UAAUA,QAAO,KAAK,CAAC,UAAU,MAAM,QAAQ,WAAW;AAChE,UAAM,oBAAoB,UAAU,eAAe,SAAS,oBAAoB,IAAI;AACpF,QAAI,CAAC,WAAW,CAAC,mBAAmB;AAClC,YAAM,IAAI,MAAM,YAAY,WAAW,iCAAiC,oBAAoB,GAAG;AAAA,IACjG;AAEA,WAAO,EAAE,OAAO,SAAS,YAAY,kBAAkB;AAAA,EACzD;AAEA,QAAM,EAAE,OAAO,IAAI,MAAM,2BAA2B,sBAAsB,SAAS,EAAE;AACrF,QAAM,SAAS,OACZ,IAAI,CAAC,WAAW,EAAE,OAAO,YAAY,eAAe,OAAO,oBAAoB,EAAE,EAAE,EACnF,OAAO,CAAC,UAAiE,QAAQ,MAAM,UAAU,CAAC,EAClG,KAAK,CAAC,MAAM,UAAU,cAAc,KAAK,WAAW,QAAQ,QAAQ,MAAM,WAAW,QAAQ,MAAM,CAAC;AAEvG,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,qCAAqC,oBAAoB,GAAG;AAAA,EAC9E;AAEA,SAAO,OAAO,CAAC;AACjB;AAEO,SAAS,eAAe,OAAkB,YAiB/C;AACA,QAAM,qBAAqB,aACvB,MAAM,aAAa,OAAO,CAAC,UAAU,qBAAqB,MAAM,MAAM,UAAU,CAAC,IACjF,MAAM;AACV,QAAM,aAAa,gBAAgB,aAAa,OAAO,CAAC,CAAC;AAEzD,SAAO;AAAA,IACL,MAAM,MAAM;AAAA,IACZ,KAAK,MAAM;AAAA,IACX,cAAc,mBAAmB,IAAI,CAAC,UAAU,MAAM,IAAI;AAAA,IAC1D,SAAS,mBAAmB,IAAI,CAAC,WAAW;AAAA,MAC1C,YAAY,MAAM;AAAA,MAClB,YAAY,MAAM,QAAQ,OAAO,SAAS;AAAA,MAC1C,MAAM,MAAM,QAAQ;AAAA,MACpB,UAAU,MAAM,QAAQ;AAAA,IAC1B,EAAE;AAAA,IACF,YAAY;AAAA,MACV,cAAc,WAAW;AAAA,MACzB,aAAa,WAAW;AAAA,MACxB,gBAAgB,WAAW;AAAA,MAC3B,qBAAqB,WAAW,kBAAkB,SAAS;AAAA,IAC7D;AAAA,IACA,UAAU,MAAM;AAAA,EAClB;AACF;AAEA,eAAe,gBACb,SACA,YACA,OACA,QACsB;AACtB,QAAM,QAAQ,QAAQ;AAQtB,MAAI,OAAO,MAAM,wBAAwB,YAAY;AACnD,WAAO,MAAM,MAAM,oBAAoB;AAAA,MACrC;AAAA,MACA;AAAA,MACA,QAAQ,WAAW,eAAe,eAAe;AAAA,IACnD,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,WAAW,mBAAmB,YAAY,OAAO,EAAE,kBAAkB,WAAW,aAAa,CAAC;AAC/G;AAEA,SAAS,iBAAiB,SAA0B,YAA+B;AACjF,MAAI,eAAe,OAAO;AACxB,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,kBAAkB,OAAO,CAAC;AAC3C;AAEA,SAAS,eAAe,OAAkB,YAA4C;AACpF,SAAO,MAAM,aAAa,KAAK,CAAC,UAAU,qBAAqB,MAAM,MAAM,UAAU,CAAC;AACxF;AAEA,SAAS,cAAc,OAAkB,YAA6B;AACpE,SAAO,eAAe,OAAO,UAAU,MAAM;AAC/C;AAEA,SAAS,qBAAqB,MAAc,OAAwB;AAClE,SAAO,KAAK,YAAY,MAAM,MAAM,YAAY;AAClD;AAEA,SAAS,cAAc,MAAc,OAAuB;AAC1D,MAAI,SAAS,OAAO;AAClB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,QAAQ,KAAK;AAC7B;AAEA,SAAS,eAAe,OAAwB;AAC9C,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;AAEA,SAAS,YAAY,QAAqB,YAAiC;AACzE,SAAO,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,UAAU;AACvC,UAAM,iBAAiB,eAAe,MAAM,UAAU;AACtD,UAAM,kBAAkB,eAAe,OAAO,UAAU;AACxD,QAAI,CAAC,kBAAkB,CAAC,iBAAiB;AACvC,aAAO;AAAA,IACT;AACA,QAAI,CAAC,gBAAgB;AACnB,aAAO;AAAA,IACT;AACA,QAAI,CAAC,iBAAiB;AACpB,aAAO;AAAA,IACT;AACA,WAAO,cAAc,eAAe,QAAQ,QAAQ,gBAAgB,QAAQ,MAAM;AAAA,EACpF,CAAC;AACH;;;AC/PA,SAAS,qBAAqB;AAcvB,IAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,WAAW,UAAU,QAAQ,EAAE;AAAA,MACxE,SAAS,EAAE,MAAM,UAAU,aAAa,iBAAiB;AAAA,MACzD,YAAY,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,MAC/D,UAAU,EAAE,MAAM,UAAU,aAAa,yEAAyE;AAAA,MAClH,kBAAkB,EAAE,MAAM,UAAU,aAAa,gEAAgE;AAAA,MACjH,qBAAqB,EAAE,MAAM,UAAU,aAAa,qDAAqD;AAAA,MACzG,oBAAoB,EAAE,MAAM,UAAU,aAAa,+CAA+C;AAAA,IACpG;AAAA,IACA,UAAU,CAAC,QAAQ;AAAA,EACrB;AACF;AAEA,eAAsB,eAAe,QAA2B,SAA4D;AAC1H,QAAM,SAAS,QAAQ,iBAAiB,IAAI,cAAc,QAAQ,WAAW,QAAQ,aAAa;AAElG,UAAQ,OAAO,QAAQ;AAAA,IACrB,KAAK,QAAQ;AACX,UAAI,CAAC,OAAO,SAAS;AACnB,cAAM,IAAI,MAAM,sCAAsC;AAAA,MACxD;AACA,YAAM,iBAAiB,MAAM,sBAAsB,QAAQ,OAAO;AAClE,YAAM,SAAS,MAAM,OAAO,YAAY;AAAA,QACtC,QAAQ,OAAO;AAAA,QACf;AAAA,QACA,mBAAmB,UAAU,OAAO,qBAAqB,qBAAqB;AAAA,QAC9E,mBAAmB,OAAO;AAAA,QAC1B,QAAQ,QAAQ;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO;AAAA,QAChB,kBAAkB;AAAA,QAClB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA,KAAK,WAAW;AACd,UAAI,CAAC,OAAO,YAAY;AACtB,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AACA,YAAM,iBAAiB,MAAM,sBAAsB,QAAQ,OAAO;AAClE,YAAM,SAAS,MAAM,OAAO,iBAAiB;AAAA,QAC3C,WAAW,OAAO;AAAA,QAClB;AAAA,QACA,mBAAmB,UAAU,OAAO,qBAAqB,qBAAqB;AAAA,QAC9E,QAAQ,QAAQ;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,YAAY,OAAO;AAAA,QACnB,kBAAkB;AAAA,QAClB,WAAW,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACb,UAAI,CAAC,OAAO,cAAc,CAAC,OAAO,SAAS;AACzC,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AACA,YAAM,SAAS,MAAM,OAAO,iBAAiB;AAAA,QAC3C,WAAW,OAAO;AAAA,QAClB,QAAQ,OAAO;AAAA,QACf,QAAQ,QAAQ;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,YAAY,OAAO;AAAA,QACnB,SAAS,OAAO;AAAA,QAChB,uBAAuB,OAAO,gBAAgB,SAAS;AAAA,QACvD,sBAAsB,OAAO,eAAe,SAAS;AAAA,QACrD,WAAW,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACb,WAAK,OAAO,aAAa,IAAI,MAAM,OAAO,UAAU,IAAI,OAAO,GAAG;AAChE,cAAM,IAAI,MAAM,iEAAiE;AAAA,MACnF;AACA,YAAM,UAAU,OAAO,aACnB,MAAM,OAAO,WAAW,OAAO,UAAU,IACzC,MAAM,OAAO,iBAAiB,OAAO,OAAiB;AAC1D,UAAI,CAAC,SAAS;AACZ,cAAM,IAAI,MAAM,OAAO,UAAU,6BAA6B,OAAO,OAAO,MAAM,WAAW,OAAO,cAAc,EAAE,iBAAiB;AAAA,MACvI;AACA,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,IACA;AACE,YAAM,IAAI,MAAM,2BAA2B,OAAO,OAAO,MAAM,CAAC,EAAE;AAAA,EACtE;AACF;AAEA,eAAe,sBAAsB,QAA2B,SAA2C;AACzG,OAAK,OAAO,mBAAmB,IAAI,MAAM,OAAO,WAAW,IAAI,OAAO,GAAG;AACvE,UAAM,IAAI,MAAM,sFAAsF;AAAA,EACxG;AACA,MAAI,OAAO,kBAAkB;AAC3B,WAAO,OAAO;AAAA,EAChB;AACA,MAAI,CAAC,OAAO,UAAU;AACpB,UAAM,IAAI,MAAM,2EAA2E;AAAA,EAC7F;AACA,QAAM,SAAS,MAAM,QAAQ,UAAU,MAAM,IAAI,YAAY,EAAE,OAAO,OAAO,QAAQ,CAAC;AACtF,SAAO,OAAO;AAChB;AAEA,SAAS,UAAU,OAAoC,OAAuB;AAC5E,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAC1E,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,OAAO,UAAU,YAAY,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG;AAC3D,WAAO,OAAO,MAAM,KAAK,CAAC;AAAA,EAC5B;AACA,QAAM,IAAI,MAAM,GAAG,KAAK,yCAAyC;AACnE;;;ACtIA,SAAS,eAAAC,cAAa,cAAAC,mBAA8D;AACpF,SAAS,qBAAqB,qBAAqB,gCAA0D;AAM7G,IAAM,UAAU,IAAI,YAAY;AAChC,IAAMC,WAAU,IAAI,YAAY;AAChC,IAAM,0BAA0B;AAChC,IAAM,4BAA4B,IAAI;AACtC,IAAM,uBAAuB;AAWtB,IAAM,kBAAkB;AAAA,EAC7B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,YAAY,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,MACxE,cAAc,EAAE,MAAM,UAAU,aAAa,+BAA+B;AAAA,MAC5E,OAAO,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,MAC3D,gBAAgB,EAAE,MAAM,UAAU,aAAa,wBAAwB;AAAA,MACvE,iBAAiB,EAAE,MAAM,UAAU,aAAa,2CAA2C;AAAA,MAC3F,MAAM,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,QAAQ,OAAO,GAAG,aAAa,sCAAsC;AAAA,IAC9G;AAAA,IACA,UAAU,CAAC,cAAc,OAAO;AAAA,EAClC;AACF;AAEA,eAAsB,eACpB,QACA,SAWC;AACD,QAAM,WAAW,MAAM,0BAA0B,OAAO,YAAY,SAAS,OAAO,YAAY;AAChG,QAAM,YAAY,SAAS,WAAW,QAAQ;AAC9C,QAAM,WAAW,iBAAiB,OAAO,cAAc;AAEvD,MAAI,aAAa,UAAa,YAAY,UAAU;AAClD,UAAM,IAAI,MAAM,kBAAkB,UAAU,SAAS,CAAC,2BAA2B,SAAS,SAAS,CAAC,GAAG;AAAA,EACzG;AAEA,QAAM,OAAO,OAAO,QAAQ;AAC5B,MAAI,SAAS,SAAS;AACpB,UAAM,cAAc,MAAM,kBAAkB,QAAQ,SAAS,UAAU,SAAS;AAChF,QAAI,aAAa;AACf,YAAM,iCAAiC,SAAS;AAAA,QAC9C,aAAa,YAAY;AAAA,QACzB,QAAQ,YAAY;AAAA,QACpB,YAAY,SAAS,WAAW;AAAA,QAChC;AAAA,QACA,WAAW,YAAY;AAAA,MACzB,CAAC;AACD,aAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,WAAW,MAAM,sBAAsB,QAAQ,SAAS,UAAU,SAAS;AACjF,QAAM,OAAO,MAAM,sBAAsB,SAAS,QAAQ,SAAS,OAAO,eAAe;AAEzF,MAAI,CAAC,KAAK,cAAc;AACtB,UAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,mCAAmC;AAAA,EAC5E;AAEA,QAAM,cAAc,MAAM,cAAc,QAAQ,WAAW,KAAK,YAAY;AAC5E,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,eAAe,KAAK,YAAY,iBAAiB;AAAA,EACnE;AAEA,QAAM,QAAQ,WAAW,eAAe;AAAA,IACtC,QAAQ,SAAS;AAAA,IACjB,SAAS,QAAQ;AAAA,EACnB,CAAC;AACD,UAAQ,eAAe,OAAO;AAAA,IAC5B,YAAY,SAAS;AAAA,IACrB,MAAM,SAAS;AAAA,IACf,QAAQ,SAAS;AAAA,IACjB,OAAO,SAAS;AAAA,IAChB,eAAe,QAAQ;AAAA,EACzB,CAAC;AAED,QAAM,iCAAiC,SAAS;AAAA,IAC9C,aAAa,SAAS;AAAA,IACtB,QAAQ,SAAS;AAAA,IACjB,YAAY,SAAS,WAAW;AAAA,IAChC,WAAW,SAAS;AAAA,IACpB,WAAW,KAAK,cAAc,KAAK,cAAc,KAAK,cAAc,KAAK,aAAa;AAAA,EACxF,CAAC;AAED,SAAO;AAAA,IACL,SAAS,SAAS;AAAA,IAClB,QAAQA,SAAQ,OAAO,WAAW;AAAA,IAClC,cAAc,SAAS;AAAA,IACvB,YAAY,SAAS,UAAU,SAAS;AAAA,IACxC,QAAQC,YAAWA,YAAW,QAAQ;AAAA,IACtC,gBAAgB;AAAA,IAChB,cAAc,SAAS;AAAA,EACzB;AACF;AAEA,eAAsB,qBACpB,QACA,SAMC;AACD,QAAM,WAAW,MAAM,0BAA0B,OAAO,YAAY,SAAS,OAAO,YAAY;AAChG,SAAO,sBAAsB,QAAQ,SAAS,UAAU,SAAS,WAAW,QAAQ,MAAM;AAC5F;AAEA,eAAe,sBACb,QACA,SACA,UACA,WAMC;AACD,MAAI,SAAS,WAAW,QAAQ,SAASC,aAAY,YAAY;AAC/D,UAAM,IAAI,MAAM,cAAc,SAAS,WAAW,IAAI,yCAAyC;AAAA,EACjG;AAEA,eAAa,SAAS,WAAW,SAAS,WAAW,QAAQ,MAAM,SAAS,MAAM,GAAG;AAErF,QAAM,EAAE,OAAO,IAAI,MAAM,eAAe,SAAS,SAAS,OAAO,QAAQ,OAAO,OAAO,KAAK,CAAC;AAC7F,QAAM,SAAS,MAAM,QAAQ,WAAW,SAAS;AAAA,IAC/C,YAAY,SAAS,WAAW;AAAA,IAChC,UAAU;AAAA,IACV,aAAa;AAAA,IACb;AAAA,IACA,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,SAAS,QAAQ;AAAA,EACnB,CAAC;AAED,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,aAAa,SAAS,MAAM;AAAA,IAC5B;AAAA,IACA,MAAM,SAAS,WAAW,QAAQ;AAAA,EACpC;AACF;AAEA,eAAe,kBACb,QACA,SACA,UACA,WACA;AACA,QAAM,WAAW,YAAY,SAAS,KAAK;AAC3C,MAAI,CAAC,YAAY,CAAC,QAAQ,mBAAmB;AAC3C,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,WAAW,QAAQ,uBAAuB,IAAI,oBAAoB;AACxE,UAAM,eAAe,SAAS,WAAW;AAAA,MACvC,eAAe;AAAA,MACf,sBAAsB,QAAQ,QAAQ,iBAAiB;AAAA,MACvD,sBAAsB,QAAQ,QAAQ,UAAU;AAAA,MAChD,oBAAoB,mBAAmB,SAAS,UAAU;AAAA,MAC1D,qBAAqB,oBAAoB,SAAS,OAAO,SAAS,UAAU;AAAA,MAC5E,QAAQ;AAAA,MACR,UAAU,SAAS,WAAW,QAAQ;AAAA,IACxC,CAAC;AACD,UAAM,OAAO,cAAc,YAAY;AAEvC,iBAAa,SAAS,WAAW,MAAM,SAAS,MAAM,GAAG;AAEzD,UAAM,SAAS,IAAI,oBAAoB,QAAQ,cAAc,MAAM,QAAQ,mBAAmB,EAAE,SAAS,CAAC;AAC1G,UAAM,WAAW,MAAM,OAAO,YAAY;AAAA,MACxC,aAAa,SAAS,MAAM;AAAA,MAC5B,YAAY,SAAS,WAAW;AAAA,MAChC,OAAO,OAAO;AAAA,MACd,aAAa;AAAA,MACb,WAAW,mBAAmB,OAAO,eAAe;AAAA,IACtD,CAAC;AAED,UAAM,SAAS,SAAS,UAAU,SAAS,SAAS,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;AAC3E,YAAQ,eAAe,OAAO;AAAA,MAC5B,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,MACA,OAAO,SAAS,MAAM;AAAA,MACtB,eAAe,QAAQ;AAAA,IACzB,CAAC;AAED,WAAO;AAAA,MACL,SAAS;AAAA,MACT,QAAQ,qBAAqB,SAAS,MAAM;AAAA,MAC5C,cAAc,SAAS,eAAe,SAAS,MAAM;AAAA,MACrD,YAAY,UAAU,SAAS;AAAA,MAC/B,QAAQ;AAAA,MACR,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,iBAAiB,SAAS;AAAA,MAC1B,YAAY,SAAS;AAAA,IACvB;AAAA,EACF,SAAS,OAAO;AACd,QAAI,CAAC,sBAAsB,KAAK,GAAG;AACjC,YAAM;AAAA,IACR;AAEA,YAAQ,QAAQ;AAAA,MACd,EAAE,KAAK,OAAO,aAAa,SAAS,MAAM,KAAK,YAAY,SAAS,WAAW,KAAK;AAAA,MACpF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACF;AAEA,eAAsB,sBACpB,QACA,SACA,iBAAiB,yBACF;AACf,QAAM,YAAY,mBAAmB,cAAc;AACnD,QAAM,YAAY,KAAK,IAAI;AAE3B,SAAO,MAAM;AACX,UAAM,OAAO,MAAM,QAAQ,WAAW,QAAQ,MAAM;AACpD,QAAI,CAAC,MAAM;AACT,YAAM,IAAI,MAAM,QAAQ,MAAM,iBAAiB;AAAA,IACjD;AAEA,QAAI,KAAK,WAAWD,YAAW,aAAa,KAAK,WAAWA,YAAW,UAAU;AAC/E,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,WAAWA,YAAW,aAAa,KAAK,WAAWA,YAAW,UAAU;AAC/E,YAAM,IAAI,MAAM,QAAQ,MAAM,sBAAsB,gBAAgB,KAAK,MAAM,CAAC,GAAG;AAAA,IACrF;AAEA,UAAM,YAAY,KAAK,IAAI,IAAI;AAC/B,QAAI,aAAa,WAAW;AAC1B,YAAM,IAAI,MAAM,8BAA8B,MAAM,eAAe;AAAA,IACrE;AAEA,UAAM,cAAc,YAAY;AAChC,UAAM,MAAM,KAAK,IAAI,aAAa,GAAK,CAAC;AAAA,EAC1C;AACF;AAEA,SAAS,aAAa,SAA0B,YAAoB,MAAmB,OAAqB;AAC1G,QAAM,WAAW,QAAQ,eAAe,SAAS;AAAA,IAC/C;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,MAAI,CAAC,SAAS,UAAU;AACtB,UAAM,IAAI,MAAM,SAAS,UAAU,uCAAuC;AAAA,EAC5E;AACF;AAEA,SAAS,YAAY,OAAsC;AACzD,QAAM,gBAAgB,MAAM,gBAAgB,KAAK,CAAC,aAAa,CAAC,SAAS,SAAS,SAAS,MAAM,SAAS,MAAM,CAAC;AACjH,MAAI,eAAe,UAAU;AAC3B,WAAO,cAAc;AAAA,EACvB;AAEA,MAAI,MAAM,YAAY,uBAAuB,KAAK,MAAM,QAAQ,GAAG;AACjE,WAAO,MAAM;AAAA,EACf;AAEA,SAAO;AACT;AAEA,SAAS,mBAAmB,YAAiC;AAC3D,SAAO,WAAW,cAAc,SAASC,aAAY,YAAY,KAAK,WAAW,QAAQ,SAASA,aAAY;AAChH;AAEA,SAAS,oBAAoB,OAAkB,YAAiC;AAC9E,SAAO,WAAW,cAAc,SAASA,aAAY,SAAS,KAAK,QAAQ,YAAY,KAAK,CAAC;AAC/F;AAEA,SAAS,cAAc,cAAgD;AACrE,UAAQ,cAAc;AAAA,IACpB,KAAK;AACH,aAAOA,aAAY;AAAA,IACrB,KAAK;AACH,aAAOA,aAAY;AAAA,IACrB,KAAK;AACH,aAAOA,aAAY;AAAA,EACvB;AACF;AAEA,SAAS,sBAAsB,OAAyB;AACtD,MAAI,EAAE,iBAAiB,QAAQ;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO,4JAA4J;AAAA,IACjK,MAAM;AAAA,EACR;AACF;AAEA,SAAS,qBAAqB,QAAyB;AACrD,SAAO,OAAO,WAAW,WAAW,SAAS,KAAK,UAAU,MAAM;AACpE;AAEA,SAAS,mBAAmB,gBAAiC;AAC3D,MAAI,OAAO,mBAAmB,YAAY,OAAO,MAAM,cAAc,GAAG;AACtE,WAAO,0BAA0B;AAAA,EACnC;AAEA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,iBAAiB,GAAK,CAAC;AACvD;AAEA,SAAS,iBAAiB,OAAoC;AAC5D,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC9C;AAEA,eAAe,eACb,SACA,UACA,OAC6B;AAC7B,QAAM,wBAAwB,WAAW,SAAS,mBAAmB;AACrE,QAAM,oBAAoB,QAAQ,YAAY,WAAW,uBAAuB,QAAQ,SAAS;AACjG,QAAM,oBAAoB,QAAQ,YAAY,qBAAqB;AAEnE,MAAI,qBAAqB,uBAAuB;AAC9C,QAAI,CAAC,uBAAuB,QAAQ,SAAS,GAAG;AAC9C,YAAM,IAAI,MAAM,0FAA0F;AAAA,IAC5G;AAEA,WAAO,MAAM,QAAQ,UAAU,eAAe,OAAO,qBAAqB;AAAA,EAC5E;AAEA,MAAI,mBAAmB;AACrB,UAAM,IAAI,MAAM,YAAY,SAAS,GAAG,sCAAsC;AAAA,EAChF;AAEA,SAAO,MAAM,QAAQ,UAAU,MAAM,KAAK;AAC5C;AAEA,SAAS,gBAAgB,QAA4B;AACnD,SAAOD,YAAW,MAAM,KAAK;AAC/B;AAEA,eAAe,iCACb,SACA,QAOe;AACf,QAAM,YAAY,QAAQ,wBACxB,mBAAmB,QAAQ,iBAAiB,IACxC,IAAI,yBAAyB,QAAQ,WAAW,QAAQ,iBAAiB,IACzE;AAEN,MAAI,CAAC,WAAW;AACd;AAAA,EACF;AAEA,MAAI;AACF,UAAM,QAAQ,MAAM,UAAU,YAAY;AAAA,MACxC,MAAM;AAAA,MACN,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,SAAS;AAAA,MACT,YAAY,OAAO;AAAA,MACnB,WAAW,OAAO;AAAA,MAClB,eAAe;AAAA,QACb,QAAQ,OAAO,UAAU,SAAS;AAAA,QAClC,UAAU;AAAA,MACZ;AAAA,IACF,CAAC;AACD,UAAM,QAAQ,iBAAiB,SAAS,KAAK;AAC7C,UAAM,UAAU,aAAa,KAAK;AAAA,EACpC,SAAS,OAAO;AACd,YAAQ,QAAQ,OAAO,EAAE,KAAK,OAAO,QAAQ,OAAO,OAAO,GAAG,qCAAqC;AAAA,EACrG;AACF;AAEA,SAAS,mBAAmB,UAA+G;AACzI,SAAO,QAAQ,YAAY,OAAO,SAAS,WAAW,cAAc,OAAO,SAAS,wBAAwB,UAAU;AACxH;AAEA,SAAS,MAAM,IAA2B;AACxC,SAAO,IAAI,QAAQ,CAAC,mBAAmB;AACrC,eAAW,gBAAgB,EAAE;AAAA,EAC/B,CAAC;AACH;;;AC3ZO,IAAM,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,YAAY,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,MACxE,cAAc,EAAE,MAAM,UAAU,aAAa,+BAA+B;AAAA,MAC5E,OAAO,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,MAC3D,gBAAgB,EAAE,MAAM,UAAU,aAAa,wBAAwB;AAAA,IACzE;AAAA,IACA,UAAU,CAAC,cAAc,OAAO;AAAA,EAClC;AACF;AAEA,eAAsB,oBACpB,QACA,SAMC;AACD,QAAM,WAAW,MAAM,qBAAqB,QAAQ,OAAO;AAE3D,SAAO;AAAA,IACL,SAAS,SAAS;AAAA,IAClB,cAAc,SAAS;AAAA,IACvB,YAAY,SAAS,UAAU,SAAS;AAAA,IACxC,QAAQ;AAAA,EACV;AACF;;;ACtCA,SAAS,qBAAqB,uBAAuB,4BAA4B,sBAAsB;AACvG,SAAS,eAAAE,cAAa,eAAe,cAAAC,mBAAkB;AAOvD,IAAMC,WAAU,IAAI,YAAY;AAChC,IAAMC,WAAU,IAAI,YAAY;AAChC,IAAMC,2BAA0B;AAChC,IAAMC,6BAA4B,IAAI;AACtC,IAAMC,wBAAuB;AAetB,IAAM,yBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,YAAY,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,MACxE,cAAc,EAAE,MAAM,UAAU,aAAa,+BAA+B;AAAA,MAC5E,OAAO,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,MAC3D,gBAAgB,EAAE,MAAM,UAAU,aAAa,yBAAyB;AAAA,MACxE,iBAAiB,EAAE,MAAM,UAAU,aAAa,iCAAiC;AAAA,MACjF,iBAAiB,EAAE,MAAM,UAAU,aAAa,2CAA2C;AAAA,IAC7F;AAAA,IACA,UAAU,CAAC,cAAc,SAAS,kBAAkB,iBAAiB;AAAA,EACvE;AACF;AAEO,IAAM,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,iBAAiB;AAAA,IAC3D;AAAA,IACA,UAAU,CAAC,SAAS;AAAA,EACtB;AACF;AAEA,eAAsB,sBACpB,QACA,SAcC;AACD,QAAM,WAAW,MAAM,0BAA0B,OAAO,YAAY,SAAS,OAAO,YAAY;AAChG,MAAI,SAAS,WAAW,QAAQ,SAASC,aAAY,YAAY;AAC/D,UAAM,IAAI,MAAM,cAAc,SAAS,WAAW,IAAI,yCAAyC;AAAA,EACjG;AAEA,QAAM,eAAe,iBAAiB,OAAO,gBAAgB,gBAAgB;AAC7E,QAAM,gBAAgB,iBAAiB,OAAO,iBAAiB,iBAAiB;AAChF,QAAM,mBAAmB,QAAQ,eAAe,SAAS;AAAA,IACvD,YAAY;AAAA,IACZ,MAAMA,aAAY;AAAA,IAClB,OAAO,SAAS,MAAM;AAAA,IACtB,eAAe,QAAQ;AAAA,EACzB,CAAC;AACD,MAAI,CAAC,iBAAiB,UAAU;AAC9B,UAAM,IAAI,MAAM,iBAAiB,UAAU,uCAAuC;AAAA,EACpF;AAEA,QAAM,YAAY,MAAMC,gBAAe,SAAS,SAAS,OAAON,SAAQ,OAAO,OAAO,KAAK,CAAC;AAC5F,QAAM,SAAS,MAAM,QAAQ,WAAW,gBAAgB;AAAA,IACtD,YAAY,SAAS,WAAW;AAAA,IAChC,UAAU;AAAA,IACV,aAAa,UAAU;AAAA,IACvB,eAAe,WAAW,SAAS,WAAW,IAAI;AAAA,IAClD;AAAA,IACA;AAAA,IACA,iBAAiBG;AAAA,IACjB,aAAaC;AAAA,IACb,SAAS,QAAQ;AAAA,EACnB,CAAC;AACD,QAAM,OAAO,MAAM,sBAAsB,OAAO,QAAQ,SAAS,OAAO,mBAAmBF,wBAAuB;AAClH,QAAM,eAAe,MAAM,wBAAwB,KAAK,IAAI,OAAO;AAEnE,QAAM,QAAQ,WAAW,sBAAsB;AAAA,IAC7C,QAAQ,KAAK;AAAA,IACb,SAAS,QAAQ;AAAA,EACnB,CAAC;AACD,UAAQ,eAAe,OAAO;AAAA,IAC5B,YAAY,KAAK;AAAA,IACjB,MAAMG,aAAY;AAAA,IAClB,QAAQ,KAAK;AAAA,IACb,OAAO,SAAS,MAAM;AAAA,IACtB,eAAe,QAAQ;AAAA,EACzB,CAAC;AAED,SAAO;AAAA,IACL,SAAS,KAAK;AAAA,IACd,cAAc,SAAS,MAAM;AAAA,IAC7B,QAAQ,aAAa;AAAA,IACrB,QAAQE,YAAWA,YAAW,QAAQ;AAAA,IACtC,cAAcF,aAAY;AAAA,IAC1B,gBAAgB,cAAc;AAAA,IAC9B,iBAAiB,KAAK,YAAY,cAAc,SAAS;AAAA,IACzD,mBAAmB,KAAK,MAAM,SAAS;AAAA,IACvC,kBAAkB,KAAK,aAAa,eAAe,SAAS;AAAA,IAC5D,eAAe,KAAK,gBAAgB,aAAa;AAAA,IACjD,mBAAmB,aAAa;AAAA,IAChC,UAAU,aAAa;AAAA,EACzB;AACF;AAEA,eAAsB,oBACpB,QACA,SAOC;AACD,SAAO,MAAM,wBAAwB,OAAO,SAAS,OAAO;AAC9D;AAEA,eAAe,wBACb,QACA,SAOC;AACD,QAAM,OAAO,MAAM,QAAQ,WAAW,QAAQ,MAAM;AACpD,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,QAAQ,MAAM,iBAAiB;AAAA,EACjD;AACA,MAAI,CAAC,KAAK,cAAc;AACtB,UAAM,IAAI,MAAM,QAAQ,MAAM,+BAA+B;AAAA,EAC/D;AAEA,QAAM,cAAc,MAAM,cAAc,QAAQ,WAAW,KAAK,YAAY;AAC5E,MAAI,CAAC,aAAa;AAChB,UAAM,IAAI,MAAM,eAAe,KAAK,YAAY,iBAAiB;AAAA,EACnE;AAEA,QAAM,WAAW,2BAA2B,WAAW;AACvD,MAAI,CAAC,UAAU;AACb,UAAM,IAAI,MAAM,eAAe,KAAK,YAAY,oCAAoC;AAAA,EACtF;AAEA,QAAM,WAAW,IAAI,eAAe;AACpC,QAAM,WAAW,SAAS,OAAO,MAAM,SAAS,OAAO,sBAAsB,QAAQ,CAAC;AACtF,SAAO;AAAA,IACL,SAAS,KAAK;AAAA,IACd;AAAA,IACA,mBAAmB,KAAK,oBAAoB,SAAS,MAAM;AAAA,IAC3D,eAAe,KAAK,gBAAgB,SAAS,MAAM;AAAA,IACnD,QAAQJ,SAAQ,OAAO,oBAAoB,QAAQ,CAAC;AAAA,EACtD;AACF;AAEA,SAAS,iBAAiB,OAAe,MAAsB;AAC7D,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,KAAK,QAAQ,GAAG;AACjE,UAAM,IAAI,MAAM,WAAW,IAAI,GAAG;AAAA,EACpC;AAEA,SAAO,OAAO,KAAK,MAAM,KAAK,CAAC;AACjC;AAEA,eAAeK,gBACb,SACA,UACA,OAC6B;AAC7B,QAAM,wBAAwB,WAAW,SAAS,mBAAmB,KAAK;AAC1E,QAAM,oBAAoB,QAAQ,YAAY,WAAW,uBAAuB,QAAQ,SAAS;AACjG,QAAM,oBAAoB,QAAQ,YAAY,qBAAqB;AAEnE,MAAI,qBAAqB,uBAAuB;AAC9C,QAAI,CAAC,uBAAuB,QAAQ,SAAS,GAAG;AAC9C,YAAM,IAAI,MAAM,0FAA0F;AAAA,IAC5G;AAEA,WAAO,MAAM,QAAQ,UAAU,eAAe,OAAO,qBAAqB;AAAA,EAC5E;AACA,MAAI,mBAAmB;AACrB,UAAM,IAAI,MAAM,YAAY,SAAS,GAAG,sCAAsC;AAAA,EAChF;AACA,SAAO,MAAM,QAAQ,UAAU,MAAM,KAAK;AAC5C;;;ACrNA,SAAS,yBAAyB;AAU3B,IAAM,+BAA+B;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,MAC9D,QAAQ,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,MAC1D,kBAAkB,EAAE,MAAM,WAAW,aAAa,kEAAkE;AAAA,IACtH;AAAA,IACA,UAAU,CAAC,WAAW,QAAQ;AAAA,EAChC;AACF;AAEA,eAAsB,4BACpB,QACA,SACkC;AAClC,QAAM,SAAS,QAAQ,qBAAqB,IAAI,kBAAkB,QAAQ,WAAW,QAAQ,aAAa;AAC1G,QAAM,SAAS,MAAM,OAAO,UAAU;AAAA,IACpC,QAAQ,OAAO;AAAA,IACf,OAAO,OAAO;AAAA,IACd,iBAAiB,OAAO;AAAA,IACxB,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,SAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,QAAQ,OAAO;AAAA,IACf,kBAAkB,OAAO;AAAA,IACzB,WAAW,OAAO;AAAA,EACpB;AACF;;;AC1CA,SAAS,qBAAAE,0BAAyB;AAW3B,IAAM,yBAAyB;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,MAC9D,gBAAgB,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,MACnE,kBAAkB,EAAE,MAAM,UAAU,aAAa,qCAAqC;AAAA,MACtF,UAAU,EAAE,MAAM,UAAU,aAAa,mDAAmD;AAAA,IAC9F;AAAA,IACA,UAAU,CAAC,WAAW,gBAAgB;AAAA,EACxC;AACF;AAEA,eAAsB,sBACpB,QACA,SACkC;AAClC,QAAM,SAAS,QAAQ,qBAAqB,IAAIA,mBAAkB,QAAQ,WAAW,QAAQ,aAAa;AAC1G,QAAM,SAAS,MAAM,OAAO,SAAS;AAAA,IACnC,QAAQ,OAAO;AAAA,IACf,cAAcC,WAAU,OAAO,gBAAgB,gBAAgB;AAAA,IAC/D,iBAAiB,OAAO,oBAAoB,OAAO,SAAYA,WAAU,OAAO,kBAAkB,kBAAkB;AAAA,IACpH,cAAc,OAAO;AAAA,IACrB,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO;AAAA,IAClB,kBAAkB,OAAO,gBAAgB,SAAS;AAAA,EACpD;AACF;AAEA,SAASA,WAAU,OAAwB,OAAuB;AAChE,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAC1E,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,OAAO,UAAU,YAAY,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG;AAC3D,WAAO,OAAO,MAAM,KAAK,CAAC;AAAA,EAC5B;AACA,QAAM,IAAI,MAAM,GAAG,KAAK,yCAAyC;AACnE;;;ACvDA,SAAS,qBAAAC,0BAAyB;AAW3B,IAAM,4BAA4B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,UAAU,EAAE,MAAM,UAAU,aAAa,uCAAuC;AAAA,MAChF,gBAAgB,EAAE,MAAM,UAAU,aAAa,yCAAyC;AAAA,MACxF,gBAAgB,EAAE,MAAM,UAAU,aAAa,yCAAyC;AAAA,MACxF,OAAO,EAAE,MAAM,UAAU,aAAa,sDAAsD;AAAA,IAC9F;AAAA,IACA,UAAU,CAAC;AAAA,EACb;AACF;AAEA,eAAsB,yBACpB,QACA,SACkC;AAClC,QAAM,SAAS,QAAQ,qBAAqB,IAAIA,mBAAkB,QAAQ,WAAW,QAAQ,aAAa;AAC1G,QAAM,QAAQ,MAAM,OAAO,gBAAgB;AAAA,IACzC,UAAU,OAAO;AAAA,IACjB,cAAc,kBAAkB,OAAO,cAAc;AAAA,IACrD,cAAc,kBAAkB,OAAO,cAAc;AAAA,IACrD,OAAOC,gBAAe,OAAO,KAAK;AAAA,EACpC,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,OAAO,MAAM;AAAA,EACf;AACF;AAEA,SAAS,kBAAkB,OAAwD;AACjF,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AACA,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAC1E,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,OAAO,UAAU,YAAY,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG;AAC3D,WAAO,OAAO,MAAM,KAAK,CAAC;AAAA,EAC5B;AACA,QAAM,IAAI,MAAM,qDAAqD;AACvE;AAEA,SAASA,gBAAe,OAAwB;AAC9C,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAC9C,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AACA,SAAO;AACT;;;ACjEA,SAAS,qBAAAC,0BAAyB;AAIlC,IAAMC,6BAA4B;AAClC,IAAMC,wBAAuB;AAatB,IAAM,0BAA0B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,YAAY,EAAE,MAAM,UAAU,aAAa,oCAAoC;AAAA,MAC/E,UAAU,EAAE,MAAM,UAAU,aAAa,yCAAyC;AAAA,MAClF,YAAY,EAAE,MAAM,UAAU,aAAa,+BAA+B;AAAA,MAC1E,OAAO,EAAE,MAAM,UAAU,aAAa,8CAA8C;AAAA,MACpF,eAAe,EAAE,MAAM,UAAU,aAAa,yCAAyC;AAAA,MACvF,gBAAgB,EAAE,MAAM,UAAU,aAAa,+CAA+C;AAAA,MAC9F,mBAAmB,EAAE,MAAM,UAAU,aAAa,mDAAmD;AAAA,MACrG,cAAc,EAAE,MAAM,UAAU,aAAa,gCAAgC;AAAA,IAC/E;AAAA,IACA,UAAU,CAAC,cAAc,YAAY,YAAY;AAAA,EACnD;AACF;AAEA,eAAsB,uBACpB,QACA,SACkC;AAClC,QAAM,SAAS,QAAQ,qBAAqB,IAAIF,mBAAkB,QAAQ,WAAW,QAAQ,aAAa;AAC1G,QAAM,cAAc,MAAM,mBAAmB,QAAQ,OAAO;AAC5D,QAAM,SAAS,MAAM,OAAO,aAAa;AAAA,IACvC,YAAY,OAAO;AAAA,IACnB,UAAU,OAAO;AAAA,IACjB;AAAA,IACA,eAAe,OAAO;AAAA,IACtB,WAAWG,WAAU,OAAO,YAAY,YAAY;AAAA,IACpD,iBAAiB,4BAA4B,OAAO,mBAAmBF,4BAA2B,mBAAmB;AAAA,IACrH,aAAa,4BAA4B,OAAO,cAAcC,uBAAsB,cAAc;AAAA,IAClG,QAAQ,QAAQ;AAAA,EAClB,CAAC;AAED,SAAO;AAAA,IACL,SAAS,OAAO;AAAA,IAChB,WAAW,OAAO;AAAA,IAClB,YAAY,OAAO;AAAA,IACnB,UAAU,OAAO;AAAA,IACjB,eAAe;AAAA,EACjB;AACF;AAEA,eAAe,mBAAmB,QAAmC,SAA2C;AAC9G,OAAK,OAAO,gBAAgB,IAAI,MAAM,OAAO,QAAQ,IAAI,OAAO,GAAG;AACjE,UAAM,IAAI,MAAM,+EAA+E;AAAA,EACjG;AACA,MAAI,OAAO,eAAe;AACxB,WAAO,OAAO;AAAA,EAChB;AACA,MAAI,CAAC,OAAO,OAAO;AACjB,UAAM,IAAI,MAAM,oEAAoE;AAAA,EACtF;AACA,QAAM,SAAS,MAAM,QAAQ,UAAU,MAAM,IAAI,YAAY,EAAE,OAAO,OAAO,KAAK,CAAC;AACnF,SAAO,OAAO;AAChB;AAEA,SAASC,WAAU,OAAwB,OAAuB;AAChE,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,KAAK,SAAS,GAAG;AAC1E,WAAO,OAAO,KAAK;AAAA,EACrB;AACA,MAAI,OAAO,UAAU,YAAY,QAAQ,KAAK,MAAM,KAAK,CAAC,GAAG;AAC3D,WAAO,OAAO,MAAM,KAAK,CAAC;AAAA,EAC5B;AACA,QAAM,IAAI,MAAM,GAAG,KAAK,yCAAyC;AACnE;AAEA,SAAS,4BAA4B,OAA2B,UAAkB,OAAuB;AACvG,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AACA,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,GAAG;AAC7C,UAAM,IAAI,MAAM,GAAG,KAAK,kCAAkC;AAAA,EAC5D;AACA,SAAO;AACT;;;AC/FA;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAMP,IAAM,wBAAwB,IAAI,eAAe;AACjD,IAAM,4BAA4B,IAAI,mBAAmB;AACzD,IAAM,mBAAmB,IAAI,iBAAiB;AAAA,EAC5C,gBAAgB;AAAA,EAChB,oBAAoB;AACtB,CAAC;AAYM,IAAM,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,YAAY,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,MACxE,OAAO,EAAE,aAAa,qBAAqB;AAAA,MAC3C,aAAa,EAAE,MAAM,UAAU,aAAa,+CAA+C;AAAA,MAC3F,UAAU;AAAA,QACR,MAAM;AAAA,QACN,MAAM,OAAO,OAAO,yBAAyB;AAAA,QAC7C,aAAa;AAAA,MACf;AAAA,MACA,aAAa;AAAA,QACX,MAAM;AAAA,QACN,MAAM,OAAO,OAAO,eAAe;AAAA,QACnC,aAAa;AAAA,MACf;AAAA,MACA,SAAS,EAAE,MAAM,UAAU,aAAa,uCAAuC;AAAA,MAC/E,qBAAqB,EAAE,MAAM,UAAU,aAAa,qCAAqC;AAAA,IAC3F;AAAA,IACA,UAAU,CAAC,cAAc,OAAO;AAAA,EAClC;AACF;AAwBA,eAAsB,oBACpB,QACA,SACiC;AACjC,QAAM,aAAa,OAAO,WAAW,KAAK;AAC1C,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAEA,QAAM,cAAc,yBAAyB,OAAO,aAAa,CAAC;AAClE,QAAM,WAAW,uBAAuB,OAAO,QAAQ;AACvD,QAAM,cAAc,iBAAiB,OAAO,WAAW;AACvD,QAAM,UAAgC;AAAA,IACpC;AAAA,IACA,OAAO,OAAO;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,yBAAyB,OAAO,OAAO;AAAA,IAChD,qBAAqBC,kBAAiB,OAAO,mBAAmB;AAAA,EAClE;AAEA,QAAM,EAAE,QAAQ,iBAAiB,IAAI,MAAM;AAAA,IACzC;AAAA,IACA;AAAA,IACA,KAAK,IAAI,cAAc,GAAG,WAAW;AAAA,IACrC;AAAA,EACF;AACA,QAAM,aAAa,iBAAiB,kBAAkB,YAAY,QAAQ,mBAAmB;AAC7F,QAAM,WAAW,iBAAiB,gBAAgB,YAAY,YAAY,UAAU,WAAW;AAC/F,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,IAAI,MAAM,8CAA8C,UAAU,GAAG;AAAA,EAC7E;AAEA,QAAM,WAAW,IAAI,eAAe;AAAA,IAClC,gBAAgB;AAAA,IAChB,oBAAoB;AAAA,IACpB,iBAAiB,OAAO,UAAU,kBAAkB,qBAAqB;AACvE,UAAI,iBAAiB,OAAO,SAAS;AACnC,cAAM,iBAAiB,OAAO,UAAU,IAAI,MAAM,6BAA6B;AAAA,MACjF;AAEA,YAAM,QAAQ,MAAM,eAAe;AAAA,QACjC,YAAY,iBAAiB;AAAA,QAC7B,cAAc,SAAS;AAAA,QACvB,OAAO,eAAe,iBAAiB,KAAK;AAAA,QAC5C,iBAAiB,iBAAiB,UAAU,KAAK,IAAI,GAAG,KAAK,KAAK,iBAAiB,UAAU,GAAK,CAAC,IAAI;AAAA,MACzG,GAAG,OAAO;AACV,aAAO;AAAA,QACL;AAAA,QACA,gBAAgB,MAAM;AAAA,QACtB,MAAM,OAAO,MAAM,UAAU;AAAA,MAC/B;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,SAAS,MAAM,SAAS,QAAQ,SAAS,QAAQ;AAEvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,SAAS,IAAI,CAAC,cAAc;AAAA,MACrC,KAAK,SAAS;AAAA,MACd,YAAY,SAAS,MAAM,SAAS;AAAA,MACpC,YAAY,SAAS;AAAA,MACrB,sBAAsB,SAAS;AAAA,MAC/B,iBAAiB,SAAS;AAAA,IAC5B,EAAE;AAAA,IACF,SAAS,OAAO,QAAQ,IAAI,CAAC,WAAW;AAAA,MACtC,UAAU,MAAM;AAAA,MAChB,QAAQ,MAAM;AAAA,MACd,QAAQ,MAAM;AAAA,MACd,aAAa,MAAM;AAAA,MACnB,OAAO,MAAM;AAAA,IACf,EAAE;AAAA,IACF,mBAAmB,OAAO;AAAA,IAC1B,iBAAiB,OAAO,UAAU,SAAS;AAAA,EAC7C;AACF;AAEA,SAAS,iBAAiB,QAAqB,YAAoB,qBAA2C;AAC5G,MAAI,wBAAwB,QAAW;AACrC,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,OAAO,CAAC,UAAU;AAC9B,UAAM,UAAU,MAAM,aAAa,KAAK,CAAC,UAAU,MAAM,KAAK,YAAY,MAAM,WAAW,YAAY,CAAC;AACxG,WAAO,UAAU,QAAQ,QAAQ,UAAU,sBAAsB;AAAA,EACnE,CAAC;AACH;AAEA,SAAS,uBAAuB,UAA0E;AACxG,MAAI,CAAC,UAAU;AACb,WAAO,0BAA0B;AAAA,EACnC;AACA,MAAI,OAAO,OAAO,yBAAyB,EAAE,SAAS,QAAqC,GAAG;AAC5F,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,4CAA4C,OAAO,QAAQ,CAAC,GAAG;AACjF;AAEA,SAAS,iBAAiB,aAAsE;AAC9F,MAAI,CAAC,aAAa;AAChB,WAAO,gBAAgB;AAAA,EACzB;AACA,MAAI,OAAO,OAAO,eAAe,EAAE,SAAS,WAA8B,GAAG;AAC3E,WAAO;AAAA,EACT;AACA,QAAM,IAAI,MAAM,iCAAiC,OAAO,WAAW,CAAC,GAAG;AACzE;AAEA,SAAS,yBAAyB,OAA2B,UAA0B;AACrF,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;AAEA,SAAS,yBAAyB,OAAoC;AACpE,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AACA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;AAEA,SAASA,kBAAiB,OAAoC;AAC5D,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AACA,SAAO,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,CAAC;AAC9C;AAEA,SAAS,eAAe,OAAwB;AAC9C,SAAO,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,KAAK;AACjE;;;ACzNA,SAAS,eAAAC,oBAAwC;AAU1C,IAAM,uBAAuB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,kBAAkB,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,MACpE,oBAAoB,EAAE,MAAM,UAAU,aAAa,qBAAqB;AAAA,MACxE,qBAAqB,EAAE,MAAM,UAAU,aAAa,sBAAsB;AAAA,IAC5E;AAAA,IACA,UAAU,CAAC;AAAA,EACb;AACF;AAEA,eAAsB,oBACpB,QACA,SAIC;AACD,QAAM,gBAAgB,YAAY,mBAAmB,OAAO,CAAC;AAC7D,QAAM,aAAa,CAAC,GAAG,cAAc,MAAM;AAE3C,aAAW,YAAY,eAAe,OAAO,mBAAmB;AAChE,aAAW,YAAY,OAAO,OAAO,gBAAgB;AACrD,aAAW,YAAY,SAAS,OAAO,kBAAkB;AAEzD,QAAM,gBAAgC;AAAA,IACpC,GAAG;AAAA,IACH,QAAQ;AAAA,EACV;AAEA,UAAQ,eAAe,aAAa,aAAa;AAEjD,SAAO;AAAA,IACL,SAAS;AAAA,IACT,QAAQ,cAAc,OAAO,IAAI,CAAC,WAAW;AAAA,MAC3C,UAAU,MAAM;AAAA,MAChB,aAAa,MAAM,OAAO,SAAS;AAAA,MACnC,MAAM,MAAM,QAAQA,aAAY;AAAA,IAClC,EAAE;AAAA,EACJ;AACF;AAEA,SAAS,mBAAmB,SAA0C;AACpE,QAAM,mBAAmB,QAAQ;AACjC,SAAO,iBAAiB,UAAU,EAAE,QAAQ,CAAC,EAAE;AACjD;AAEA,SAAS,YAAY,QAAwC;AAC3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,QAAQ,OAAO,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,EAAE;AAAA,IACnD,WAAW,OAAO,YAAY,CAAC,GAAG,OAAO,SAAS,IAAI;AAAA,IACtD,UAAU,OAAO,WAAW,CAAC,GAAG,OAAO,QAAQ,IAAI;AAAA,EACrD;AACF;AAEA,SAAS,WACP,QACA,UACA,QACM;AACN,MAAI,OAAO,WAAW,YAAY,OAAO,MAAM,MAAM,GAAG;AACtD;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB,QAAQ,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;AAAA,IAC9C;AAAA,IACA,MAAMA,aAAY;AAAA,EACpB;AACA,QAAM,QAAQ,OAAO;AAAA,IACnB,CAAC,UAAU,MAAM,aAAa,aAAa,MAAM,QAAQA,aAAY,gBAAgBA,aAAY;AAAA,EACnG;AAEA,MAAI,SAAS,GAAG;AACd,WAAO,KAAK,IAAI;AAChB;AAAA,EACF;AAEA,SAAO,KAAK,SAAS;AACvB;;;AC7FA,SAAS,eAAAC,oBAAoC;AAgBtC,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,MAAM,EAAE,MAAM,UAAU,aAAa,6BAA6B;AAAA,MAClE,aAAa,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,MAChE,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,UACL,MAAM;AAAA,UACN,YAAY;AAAA,YACV,MAAM,EAAE,MAAM,SAAS;AAAA,YACvB,aAAa,EAAE,MAAM,SAAS;AAAA,YAC9B,SAAS,EAAE,MAAM,SAAS;AAAA,YAC1B,YAAY,EAAE,MAAM,SAAS;AAAA,UAC/B;AAAA,UACA,UAAU,CAAC,QAAQ,eAAe,WAAW,YAAY;AAAA,QAC3D;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU,CAAC,QAAQ,eAAe,cAAc;AAAA,EAClD;AACF;AAEA,eAAsB,gBACpB,QACA,SACoE;AACpE,QAAM,eAA6B,OAAO,aAAa,IAAI,CAAC,WAAW;AAAA,IACrE,MAAM,MAAM;AAAA,IACZ,aAAa,MAAM;AAAA,IACnB,SAAS,MAAM;AAAA,IACf,SAAS;AAAA,MACP,MAAMC,aAAY;AAAA,MAClB,QAAQ,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,UAAU,CAAC,CAAC;AAAA,MACxD,UAAU;AAAA,IACZ;AAAA,EACF,EAAE;AAEF,QAAM,SAAS,MAAM,QAAQ,eAAe,cAAc;AAAA,IACxD,MAAM,OAAO;AAAA,IACb,KAAK,QAAQ;AAAA,IACb,aAAa,OAAO;AAAA,IACpB;AAAA,IACA,UAAU,gBAAgB,QAAQ,GAAG;AAAA,IACrC,qBAAqB,QAAQ,YAAY,UAAW,WAAW,QAAQ,WAAW,SAAS,KAAK,SAAa;AAAA,IAC7G,SAAS,QAAQ;AAAA,EACnB,CAAC;AAED,QAAM,OAAO,MAAM,QAAQ,eAAe,aAAa,OAAO,WAAW;AACzE,MAAI,MAAM;AACR,YAAQ,WAAW,YAAY,IAAI;AAAA,EACrC;AAEA,SAAO;AAAA,IACL,eAAe,OAAO;AAAA,IACtB,KAAK,QAAQ;AAAA,IACb,WAAW,OAAO;AAAA,EACpB;AACF;;;AC7EA,SAAS,2BAA2B;AAa7B,IAAM,wBAAwB;AAAA,EACnC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,QAAQ,UAAU,EAAE;AAAA,MACrD,UAAU,EAAE,MAAM,UAAU,aAAa,yDAAyD;AAAA,MAClG,UAAU,EAAE,MAAM,UAAU,aAAa,sDAAsD;AAAA,MAC/F,QAAQ,EAAE,MAAM,UAAU,aAAa,0CAA0C;AAAA,MACjF,iBAAiB,EAAE,MAAM,UAAU,aAAa,mDAAmD;AAAA,MACnG,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,OAAO,EAAE,MAAM,SAAS;AAAA,QACxB,aAAa;AAAA,MACf;AAAA,IACF;AAAA,IACA,UAAU,CAAC,QAAQ;AAAA,EACrB;AACF;AAEA,eAAsB,qBACpB,QACA,SACkC;AAClC,QAAM,SAAS,QAAQ,uBAAuB,IAAI,oBAAoB,QAAQ,WAAW,QAAQ,aAAa;AAE9G,UAAQ,OAAO,QAAQ;AAAA,IACrB,KAAK,QAAQ;AACX,YAAM,SAAS,MAAM,OAAO,WAAW;AACvC,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAO,OAAO;AAAA,QACd;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,YAAM,WAAW,gBAAgB,OAAO,UAAU,UAAU;AAC5D,YAAM,UAAU,gBAAgB,OAAO,UAAU,UAAU;AAC3D,YAAM,SAAS,gBAAgB,OAAO,QAAQ,QAAQ;AACtD,UAAI,OAAO,oBAAoB,QAAW;AACxC,cAAM,IAAI,MAAM,kDAAkD;AAAA,MACpE;AACA,UAAI,CAAC,OAAO,UAAU,OAAO,eAAe,KAAK,OAAO,kBAAkB,KAAK,OAAO,kBAAkB,KAAQ;AAC9G,cAAM,IAAI,MAAM,wDAAwD;AAAA,MAC1E;AACA,YAAM,eAAe,sBAAsB,OAAO,YAAY;AAC9D,YAAM,SAAS,MAAM,OAAO,cAAc;AAAA,QACxC;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAe,OAAO;AAAA,QACtB;AAAA,QACA,QAAQ,QAAQ;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,OAAO;AAAA,QACjB,WAAW,OAAO;AAAA,QAClB;AAAA,QACA;AAAA,QACA,iBAAiB,OAAO;AAAA,QACxB;AAAA,MACF;AAAA,IACF;AAAA,IACA;AACE,YAAM,IAAI,MAAM,kCAAkC,OAAO,OAAO,MAAM,CAAC,EAAE;AAAA,EAC7E;AACF;AAEA,SAAS,gBAAgB,OAA2B,OAAuB;AACzE,QAAM,aAAa,OAAO,KAAK;AAC/B,MAAI,CAAC,YAAY;AACf,UAAM,IAAI,MAAM,GAAG,KAAK,mCAAmC;AAAA,EAC7D;AACA,SAAO;AACT;AAEA,SAAS,sBAAsB,cAA8C;AAC3E,QAAM,aAAa,cAAc,IAAI,CAAC,eAAe,WAAW,KAAK,CAAC,EAAE,OAAO,OAAO,KAAK,CAAC;AAC5F,SAAO,WAAW,SAAS,IAAI,CAAC,GAAG,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS;AACtE;;;AC5FO,IAAM,mBAAmB;AAAA,EAC9B,MAAM;AAAA,EACN,aACE;AAAA,EAEF,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY,CAAC;AAAA,IACb,UAAU,CAAC;AAAA,EACb;AACF;AAEA,eAAsB,gBACpB,SACA,SAC4D;AAC5D,MAAI,CAAC,QAAQ,WAAW;AACtB,WAAO;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,SAAS;AAAA,IACX;AAAA,EACF;AAEA,MAAI,SAAS;AACb,MAAI,QAAQ,SAAS;AACnB,QAAI;AACF,eAAS,MAAM,QAAQ,QAAQ,QAAQ,SAAS;AAAA,IAClD,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO;AAAA,IACL,KAAK,QAAQ;AAAA,IACb;AAAA,IACA,SAAS,SACL,gCAAgC,QAAQ,SAAS,KACjD,gDAAgD,QAAQ,SAAS;AAAA,EACvE;AACF;;;AC1CA,SAAS,eAAe,2BAA2B;AAU5C,IAAM,gBAAgB;AAAA,EAC3B,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,QAAQ,EAAE,MAAM,UAAU,MAAM,CAAC,WAAW,UAAU,UAAU,EAAE;AAAA,MAClE,YAAY,EAAE,MAAM,UAAU,aAAa,4CAA4C;AAAA,MACvF,YAAY,EAAE,MAAM,UAAU,MAAM,CAAC,SAAS,OAAO,GAAG,aAAa,0CAA0C;AAAA,IACjH;AAAA,IACA,UAAU,CAAC,QAAQ;AAAA,EACrB;AACF;AAEA,eAAsB,aAAa,QAAyB,SAA4D;AACtH,QAAM,SAAS,QAAQ,iBAAiB,IAAI,cAAc,QAAQ,WAAW,QAAQ,aAAa;AAClG,QAAM,QAAQ,QAAQ,QAAQ,aAAa,EAAE,aAAa;AAE1D,UAAQ,OAAO,QAAQ;AAAA,IACrB,KAAK,WAAW;AACd,UAAI,CAAC,OAAO,YAAY;AACtB,cAAM,IAAI,MAAM,4CAA4C;AAAA,MAC9D;AACA,YAAM,aAAa,eAAe,OAAO,UAAU;AACnD,YAAM,SAAS,MAAM,OAAO,aAAa;AAAA,QACvC;AAAA,QACA,WAAW,OAAO,cAAc;AAAA,QAChC,QAAQ,QAAQ;AAAA,MAClB,CAAC;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,OAAO;AAAA,QACjB,WAAW,OAAO;AAAA,QAClB,aAAa,WAAW,SAAS;AAAA,QACjC,YAAY,OAAO;AAAA,QACnB,YAAY,OAAO,cAAc;AAAA,MACnC;AAAA,IACF;AAAA,IACA,KAAK,UAAU;AACb,YAAM,QAAQ,MAAM,OAAO,gBAAgB,KAAK;AAChD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR;AAAA,QACA,QAAQ,QAAQ,KAAK;AAAA,QACrB;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,YAAY;AACf,YAAM,QAAQ,MAAM,OAAO,gBAAgB,KAAK;AAChD,UAAI,CAAC,OAAO;AACV,cAAM,IAAI,MAAM,0CAA0C;AAAA,MAC5D;AACA,UAAI,MAAM,kBAAkB,GAAG;AAC7B,cAAMC,UAAS,MAAM,OAAO,kBAAkB,EAAE,SAAS,MAAM,IAAI,QAAQ,QAAQ,QAAiB,CAAC;AACrG,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,UAAU,MAAM;AAAA,UAChB,kBAAkBA,QAAO;AAAA,UACzB,WAAWA,QAAO;AAAA,QACpB;AAAA,MACF;AAEA,YAAM,iBAAiB,MAAM,gBAAgB;AAC7C,UAAI,KAAK,IAAI,IAAI,gBAAgB;AAC/B,eAAO;AAAA,UACL,QAAQ;AAAA,UACR,UAAU,MAAM;AAAA,UAChB,kBAAkB;AAAA,UAClB,uBAAuB,KAAK,IAAI,iBAAiB,KAAK,IAAI,GAAG,CAAC;AAAA,QAChE;AAAA,MACF;AAEA,YAAM,SAAS,MAAM,OAAO,cAAc,EAAE,SAAS,MAAM,IAAI,QAAQ,QAAQ,QAAiB,CAAC;AACjG,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,UAAU,MAAM;AAAA,QAChB,sBAAsB,OAAO,eAAe,SAAS;AAAA,QACrD,WAAW,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA;AACE,YAAM,IAAI,MAAM,2BAA2B,OAAO,OAAO,MAAM,CAAC,EAAE;AAAA,EACtE;AACF;AAEA,SAAS,eAAe,OAAuB;AAC7C,QAAM,UAAU,MAAM,KAAK;AAC3B,MAAI,CAAC,sBAAsB,KAAK,OAAO,GAAG;AACxC,UAAM,IAAI,MAAM,uBAAuB,KAAK,EAAE;AAAA,EAChD;AACA,QAAM,CAAC,OAAO,WAAW,EAAE,IAAI,QAAQ,MAAM,GAAG;AAChD,SAAO,OAAO,KAAK,IAAI,cAAiB,OAAO,SAAS,OAAO,GAAG,GAAG,CAAC;AACxE;;;AC/FO,IAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,OAAO,EAAE,MAAM,UAAU,aAAa,uCAAuC;AAAA,MAC7E,eAAe,EAAE,MAAM,UAAU,aAAa,8BAA8B;AAAA,IAC9E;AAAA,IACA,UAAU,CAAC;AAAA,EACb;AACF;AAEA,eAAsB,mBACpB,QACA,SAC8C;AAC9C,QAAM,KAAK,QAAQ;AAQnB,MAAI,CAAC,IAAI,SAAS;AAChB,WAAO;AAAA,MACL,OAAO,CAAC;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AAEA,QAAM,QAAQC,gBAAe,OAAO,KAAK;AACzC,QAAM,eAAe,OAAO,eAAe,KAAK;AAEhD,MAAI;AACF,UAAM,YAAY,eACd,GAAG;AAAA,MACD;AAAA,IACF,IACA,GAAG,QAAQ,6DAA6D;AAC5E,UAAM,OAAO,eAAe,UAAU,IAAI,cAAc,KAAK,IAAI,UAAU,IAAI,KAAK;AAEpF,WAAO;AAAA,MACL,OAAO,KAAK,IAAI,CAAC,QAAQ,iBAAiB,GAAG,CAAC;AAAA,IAChD;AAAA,EACF,QAAQ;AACN,WAAO;AAAA,MACL,OAAO,CAAC;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAASA,gBAAe,OAAwB;AAC9C,MAAI,OAAO,UAAU,YAAY,OAAO,MAAM,KAAK,GAAG;AACpD,WAAO;AAAA,EACT;AAEA,SAAO,KAAK,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC;AACtC;AAEA,SAAS,iBAAiB,OAAyB;AACjD,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,MAAM,SAAS;AAAA,EACxB;AAEA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM,IAAI,CAAC,UAAU,iBAAiB,KAAK,CAAC;AAAA,EACrD;AAEA,MAAI,SAAS,OAAO,UAAU,UAAU;AACtC,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,iBAAiB,KAAK,CAAC,CAAC;AAAA,IAC5E;AAAA,EACF;AAEA,SAAO;AACT;;;ACrFA,SAAS,uBAAAC,sBAAqB,8BAAAC,mCAAkC;AAChE,SAAS,cAAAC,mBAAkB;AAK3B,IAAMC,WAAU,IAAI,YAAY;AAMzB,IAAM,qBAAqB;AAAA,EAChC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,aAAa;AAAA,IACX,MAAM;AAAA,IACN,YAAY;AAAA,MACV,SAAS,EAAE,MAAM,UAAU,aAAa,iBAAiB;AAAA,IAC3D;AAAA,IACA,UAAU,CAAC,SAAS;AAAA,EACtB;AACF;AAEA,eAAsB,kBACpB,QACA,SAQC;AACD,QAAM,OAAO,MAAM,QAAQ,WAAW,QAAQ,OAAO,OAAO;AAC5D,MAAI,CAAC,MAAM;AACT,UAAM,IAAI,MAAM,QAAQ,OAAO,OAAO,iBAAiB;AAAA,EACzD;AAEA,MAAI;AACJ,OAAK,KAAK,WAAWC,YAAW,aAAa,KAAK,WAAWA,YAAW,aAAa,KAAK,cAAc;AACtG,UAAM,cAAc,MAAM,cAAc,QAAQ,WAAW,KAAK,YAAY;AAC5E,QAAI,aAAa;AACf,YAAM,WAAWC,4BAA2B,WAAW;AACvD,eAASF,SAAQ,OAAO,WAAWG,qBAAoB,QAAQ,IAAI,WAAW;AAAA,IAChF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,SAAS,KAAK;AAAA,IACd,QAAQF,YAAW,KAAK,MAAM,KAAK;AAAA,IACnC,cAAc,gBAAgB,SAAS,KAAK,QAAQ;AAAA,IACpD;AAAA,IACA,YAAY,KAAK,MAAM,SAAS;AAAA,IAChC,YAAY,KAAK;AAAA,EACnB;AACF;AAEA,SAAS,gBAAgB,SAA0B,OAAoC;AACrF,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,WAAW,aAAa,GAAK,EAAE,KAAK,CAAC,UAAU,MAAM,UAAU,KAAK,GAAG;AACxF;;;ApBtCA,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,mBAAoD;AAAA,EAC/D,CAAC,kBAAkB,IAAI,GAAG;AAAA,EAC1B,CAAC,iBAAiB,IAAI,GAAG;AAAA,EACzB,CAAC,gBAAgB,IAAI,GAAG;AAAA,EACxB,CAAC,gBAAgB,IAAI,GAAG;AAAA,EACxB,CAAC,qBAAqB,IAAI,GAAG;AAAA,EAC7B,CAAC,uBAAuB,IAAI,GAAG;AAAA,EAC/B,CAAC,qBAAqB,IAAI,GAAG;AAAA,EAC7B,CAAC,wBAAwB,IAAI,GAAG;AAAA,EAChC,CAAC,0BAA0B,IAAI,GAAG;AAAA,EAClC,CAAC,qBAAqB,IAAI,GAAG;AAAA,EAC7B,CAAC,uBAAuB,IAAI,GAAG;AAAA,EAC/B,CAAC,6BAA6B,IAAI,GAAG;AAAA,EACrC,CAAC,mBAAmB,IAAI,GAAG;AAAA,EAC3B,CAAC,iBAAiB,IAAI,GAAG;AAAA,EACzB,CAAC,mBAAmB,IAAI,GAAG;AAAA,EAC3B,CAAC,gBAAgB,IAAI,GAAG;AAAA,EACxB,CAAC,qBAAqB,IAAI,GAAG;AAAA,EAC7B,CAAC,cAAc,IAAI,GAAG;AAAA,EACtB,CAAC,sBAAsB,IAAI,GAAG;AAAA,EAC9B,CAAC,oBAAoB,IAAI,GAAG;AAAA,EAC5B,CAAC,iBAAiB,IAAI,GAAG;AAC3B;AAEO,SAAS,qBAAqB,QAAgB,SAAgC;AACnF,SAAO,kBAAkB,wBAAwB,aAAa;AAAA,IAC5D,OAAO;AAAA,EACT,EAAE;AAEF,SAAO,kBAAkB,uBAAuB,OAAO,YAAY;AACjE,UAAM,UAAU,iBAAiB,QAAQ,OAAO,IAAI;AACpD,QAAI,CAAC,SAAS;AACZ,aAAO,kBAAkB,iBAAiB,QAAQ,OAAO,IAAI,EAAE;AAAA,IACjE;AAEA,QAAI;AACF,YAAM,WAAW,MAAM,QAAS,QAAQ,OAAO,aAAa,CAAC,GAAa,OAAO;AACjF,aAAO,oBAAoB,QAAQ;AAAA,IACrC,SAAS,OAAO;AACd,YAAM,UACJ,iBAAiB,sBACb,0EACA,iBAAiB,QACf,MAAM,UACN,OAAO,KAAK;AACpB,YAAM,eAAe,MAAM,gBAAgB,OAAO;AAClD,aAAO;AAAA,QACL,eAAe,GAAG,OAAO,oBAAoB,YAAY,MAAM;AAAA,QAC/D,eAAe,EAAE,eAAe,cAAc,iBAAiB,iBAAiB,oBAAoB,IAAI;AAAA,MAC1G;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,sBAAsB;AAEnC,SAAS,oBAAoB,SAAsE;AACjG,SAAO;AAAA,IACL,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAMG,WAAU,OAAO;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,kBACP,SACA,SAIA;AACA,SAAO;AAAA,IACL,SAAS;AAAA,IACT,SAAS;AAAA,MACP;AAAA,QACE,MAAM;AAAA,QACN,MAAMA,WAAU,EAAE,OAAO,SAAS,GAAG,QAAQ,CAAC;AAAA,MAChD;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,gBAAgB,SAAkD;AAC/E,QAAM,WAAW,QAAQ;AACzB,MAAI,CAAC,UAAU,iBAAiB;AAC9B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,MAAM,SAAS,gBAAgB;AAC7C,SAAO,OAAO,UAAU,WAAW,QAAQ;AAC7C;AAEA,SAASA,WAAU,SAA0B;AAC3C,SAAO,KAAK,UAAU,SAASC,iBAAgB,CAAC;AAClD;AAEA,SAASA,gBAAe,MAAc,OAAyB;AAC7D,SAAO,OAAO,UAAU,WAAW,MAAM,SAAS,IAAI;AACxD;;;ARlJA,IAAMC,WAAU,cAAc,YAAY,GAAG;AAC7C,IAAM,EAAE,SAAS,YAAY,IAAIA,SAAQ,iBAAiB;AAE1D,IAAM,sBAAsB;AAAA,EAC1B,wBAAwB,WAAW;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,IAAI;AAeJ,SAAS,kBAAkB,QAAgB,SAAgC;AAChF,uBAAqB,QAAQ,OAAO;AACpC,2BAAyB,QAAQ,OAAO;AAC1C;AAEO,SAAS,oBAAoB,SAAkC;AACpE,QAAM,SAAS,IAAI;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,cAAc;AAAA,QACZ,OAAO,CAAC;AAAA,QACR,WAAW,CAAC;AAAA,MACd;AAAA,MACA,cAAc;AAAA,IAChB;AAAA,EACF;AAEA,oBAAkB,QAAQ,OAAO;AACjC,SAAO;AACT;","names":["agents","PaymentRail","TaskStatus","decoder","TaskStatus","PaymentRail","PaymentRail","TaskStatus","encoder","decoder","DEFAULT_TIMEOUT_SECONDS","DEFAULT_DISPUTE_WINDOW_MS","DEFAULT_EXPIRY_HOURS","PaymentRail","storeTaskInput","TaskStatus","MarketplaceClient","parseMist","MarketplaceClient","normalizeLimit","MarketplaceClient","DEFAULT_DISPUTE_WINDOW_MS","DEFAULT_EXPIRY_HOURS","parseMist","toOptionalBigInt","PaymentRail","PaymentRail","PaymentRail","result","normalizeLimit","decodeMeteredResult","parseMeteredResultEnvelope","TaskStatus","decoder","TaskStatus","parseMeteredResultEnvelope","decodeMeteredResult","serialize","bigintReplacer","require"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hivemind-os/collective-mcp-server",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"@mysten/sui": "^1.30.0",
|
|
16
16
|
"pino": "^9.0.0",
|
|
17
17
|
"viem": "^2.48.11",
|
|
18
|
-
"@hivemind-os/collective-types": "0.2.
|
|
19
|
-
"@hivemind-os/collective-core": "0.2.
|
|
18
|
+
"@hivemind-os/collective-types": "0.2.6",
|
|
19
|
+
"@hivemind-os/collective-core": "0.2.6"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"vitest": "^3.0.0",
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,30 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
|
|
1
3
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
4
|
|
|
3
5
|
import type { MeshToolContext } from './context.js';
|
|
4
6
|
import { registerResourceHandlers } from './resources/index.js';
|
|
5
7
|
import { registerToolHandlers } from './tools/index.js';
|
|
6
8
|
|
|
9
|
+
const require = createRequire(import.meta.url);
|
|
10
|
+
const { version: PKG_VERSION } = require('../package.json') as { version: string };
|
|
11
|
+
|
|
12
|
+
const SERVER_INSTRUCTIONS = [
|
|
13
|
+
`HiveMind Collective v${PKG_VERSION} — a decentralized mesh network where AI agents discover, delegate, and pay each other for tasks on the Sui blockchain.`,
|
|
14
|
+
'',
|
|
15
|
+
'Key capabilities:',
|
|
16
|
+
'• Discover other agents on the mesh (collective_discover)',
|
|
17
|
+
'• Execute tasks on remote agents (collective_execute, collective_metered_execute)',
|
|
18
|
+
'• Post and accept tasks with SUI escrow (collective_post_task, collective_accept_task)',
|
|
19
|
+
'• Relay messages between agents (collective_relay_send)',
|
|
20
|
+
'• View wallet balance and transaction history (collective_wallet_balance)',
|
|
21
|
+
'',
|
|
22
|
+
'Settings & Configuration:',
|
|
23
|
+
'• Use the collective_settings tool to open the settings dashboard in the user\'s browser',
|
|
24
|
+
'• The dashboard lets users configure network presets, view wallet info, manage spending limits, and discover agents',
|
|
25
|
+
'• Proactively suggest opening settings when the user asks about configuration, wallet setup, or network options',
|
|
26
|
+
].join('\n');
|
|
27
|
+
|
|
7
28
|
export type { MeshToolContext } from './context.js';
|
|
8
29
|
export { meshToolDefinitions, meshToolHandlers, type MeshToolHandler } from './tools/index.js';
|
|
9
30
|
export { registerResourceHandlers } from './resources/index.js';
|
|
@@ -26,13 +47,14 @@ export function createMeshMcpServer(context: MeshToolContext): Server {
|
|
|
26
47
|
const server = new Server(
|
|
27
48
|
{
|
|
28
49
|
name: '@hivemind-os/collective-mcp-server',
|
|
29
|
-
version:
|
|
50
|
+
version: PKG_VERSION,
|
|
30
51
|
},
|
|
31
52
|
{
|
|
32
53
|
capabilities: {
|
|
33
54
|
tools: {},
|
|
34
55
|
resources: {},
|
|
35
56
|
},
|
|
57
|
+
instructions: SERVER_INSTRUCTIONS,
|
|
36
58
|
},
|
|
37
59
|
);
|
|
38
60
|
|