opentool 0.8.27 → 0.8.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
- import { I as InternalToolDefinition, T as ToolResponse } from './validate-C4a9tmrQ.js';
3
- export { B as BuildConfig, m as BuildMetadata, p as ConnectedApp, C as CronSpec, r as GetHandler, H as HTTP_METHODS, f as HttpHandlerDefinition, e as HttpMethod, h as McpConfig, M as Metadata, N as NormalizedSchedule, P as PaymentConfig, s as PostHandler, S as ScheduleType, i as ServerConfig, j as Tool, o as ToolAsset, n as ToolCategory, d as ToolContent, k as ToolMetadataOverrides, w as ToolModule, t as ToolModuleGET, u as ToolModulePOST, q as ToolProfile, b as generateMetadata, g as generateMetadataCommand, l as loadAndValidateTools, v as validateCommand } from './validate-C4a9tmrQ.js';
2
+ import { I as InternalToolDefinition, T as ToolResponse } from './validate-3WEA0Ezt.js';
3
+ export { B as BuildConfig, m as BuildMetadata, p as ConnectedApp, C as CronSpec, s as GetHandler, H as HTTP_METHODS, f as HttpHandlerDefinition, e as HttpMethod, h as McpConfig, M as Metadata, N as NormalizedSchedule, P as PaymentConfig, t as PostHandler, S as ScheduleType, i as ServerConfig, q as TemplatePreviewProfile, j as Tool, o as ToolAsset, n as ToolCategory, d as ToolContent, k as ToolMetadataOverrides, x as ToolModule, u as ToolModuleGET, w as ToolModulePOST, r as ToolProfile, b as generateMetadata, g as generateMetadataCommand, l as loadAndValidateTools, v as validateCommand } from './validate-3WEA0Ezt.js';
4
4
  export { CurrencySpec, DEFAULT_FACILITATOR, DefineX402PaymentConfig, EIP3009Authorization, PAYMENT_HEADERS, RequireX402PaymentOptions, RequireX402PaymentOutcome, RequireX402PaymentSuccess, SUPPORTED_CURRENCIES, X402BrowserClient, X402BrowserClientConfig, X402Client, X402ClientConfig, X402FacilitatorConfig, X402PayRequest, X402PayResult, X402Payment, X402PaymentContext, X402PaymentDefinition, X402PaymentRequiredError, X402VerificationResult, defineX402Payment, getX402PaymentContext, payX402, payX402WithWallet, requireX402Payment, withX402Payment } from './x402/index.js';
5
5
  export { DEFAULT_CHAIN, DEFAULT_TOKENS, chains, getRpcUrl, registry, tokens, wallet, walletToolkit } from './wallet/index.js';
6
6
  export { DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, HyperliquidAbstraction, HyperliquidAccountMode, HyperliquidApiError, HyperliquidApproveBuilderFeeOptions, HyperliquidApproveBuilderFeeResponse, HyperliquidBuilderApprovalError, HyperliquidBuilderApprovalRecordInput, HyperliquidBuilderFee, HyperliquidChain, HyperliquidClearinghouseState, HyperliquidDepositResult, HyperliquidEnvironment, HyperliquidExchangeClient, HyperliquidExchangeResponse, HyperliquidGrouping, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidMarketIdentityInput, HyperliquidMarketType, HyperliquidOrderIntent, HyperliquidOrderOptions, HyperliquidOrderResponse, HyperliquidOrderStatus, HyperliquidPerpMarketInfo, HyperliquidProfileAsset, HyperliquidProfileAssetInput, HyperliquidProfileChain, HyperliquidSpotMarketInfo, HyperliquidStoreNetwork, HyperliquidTermsError, HyperliquidTermsRecordInput, HyperliquidTickSize, HyperliquidTimeInForce, HyperliquidTriggerOptions, HyperliquidTriggerType, HyperliquidWithdrawResult, MarketIdentity, NonceSource, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, cancelAllHyperliquidOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, computeHyperliquidMarketIocLimitPrice, createHyperliquidSubAccount, createMonotonicNonceFactory, depositToHyperliquidBridge, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, getHyperliquidMaxBuilderFee, isHyperliquidSpotSymbol, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeSpotTokenName, parseSpotPairSymbol, placeHyperliquidOrder, placeHyperliquidTwapOrder, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, reserveHyperliquidRequestWeight, resolveHyperliquidAbstractionFromMode, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidErrorDetail, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolveSpotMidCandidates, resolveSpotTokenCandidates, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, withdrawFromHyperliquid } from './adapters/hyperliquid/index.js';
7
7
  import { c as WalletFullContext } from './types-BVLpaY4O.js';
8
8
  export { C as ChainMetadata, i as ChainReference, a as ChainTokenMap, H as Hex, g as HexAddress, R as RpcProviderOptions, h as RpcUrlResolver, T as TokenMetadata, l as TurnkeyOptions, k as TurnkeySignWith, r as WalletBaseContext, s as WalletContext, n as WalletOptions, m as WalletOptionsBase, b as WalletPrivateKeyOptions, j as WalletProviderType, f as WalletReadonlyContext, e as WalletReadonlyOptions, W as WalletRegistry, o as WalletSendTransactionParams, q as WalletSignerContext, p as WalletTransferParams, d as WalletTurnkeyOptions } from './types-BVLpaY4O.js';
9
9
  export { AIAbortError, AIClientConfig, AIError, AIFetchError, AIRequestMetadata, AIResponseError, ChatCompletionChoice, ChatCompletionLogProbs, ChatCompletionResponse, ChatCompletionUsage, ChatMessage, ChatMessageContentPart, ChatMessageContentPartImageUrl, ChatMessageContentPartText, ChatMessageRole, DEFAULT_BASE_URL, DEFAULT_MODEL, DEFAULT_TIMEOUT_MS, FunctionToolDefinition, GenerateTextOptions, GenerateTextResult, GenerationParameters, JsonSchema, ResolvedAIClientConfig, ResponseErrorDetails, StreamTextOptions, StreamTextResult, StreamingEventHandlers, ToolChoice, ToolDefinition, ToolExecutionPolicy, WEBSEARCH_TOOL_DEFINITION, WEBSEARCH_TOOL_NAME, WebSearchOptions, createAIClient, ensureTextContent, flattenMessageContent, generateText, getModelConfig, isStreamingSupported, isToolCallingSupported, listModels, normalizeModelName, resolveConfig, resolveToolset, streamText } from './ai/index.js';
10
- export { AgentDigestRequest, MyToolsResponse, StoreAction, StoreError, StoreEventInput, StoreEventLevel, StoreOptions, StoreResponse, StoreRetrieveParams, StoreRetrieveResult, ToolExecuteRequest, ToolExecuteResponse, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store } from './store/index.js';
11
- import { ZodSchema } from 'zod';
10
+ export { AgentDigestRequest, MyToolsResponse, StoreAction, StoreError, StoreEventInput, StoreEventLevel, StoreMode, StoreOptions, StoreResponse, StoreRetrieveParams, StoreRetrieveResult, StoreSimulationConfig, ToolExecuteRequest, ToolExecuteResponse, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store } from './store/index.js';
11
+ import { z, ZodSchema } from 'zod';
12
12
  import 'viem';
13
13
  import 'viem/accounts';
14
14
 
@@ -336,6 +336,19 @@ declare function fetchPolymarketPriceHistory(params: {
336
336
  environment?: PolymarketEnvironment;
337
337
  }): Promise<PolymarketPriceHistoryPoint[]>;
338
338
 
339
+ declare const backtestDecisionRequestSchema: z.ZodObject<{
340
+ mode: z.ZodLiteral<"backtest_decisions">;
341
+ source: z.ZodOptional<z.ZodString>;
342
+ symbol: z.ZodOptional<z.ZodString>;
343
+ lookbackDays: z.ZodOptional<z.ZodNumber>;
344
+ timeframeStart: z.ZodOptional<z.ZodString>;
345
+ timeframeEnd: z.ZodOptional<z.ZodString>;
346
+ from: z.ZodOptional<z.ZodNumber>;
347
+ to: z.ZodOptional<z.ZodNumber>;
348
+ initialEquityUsd: z.ZodOptional<z.ZodNumber>;
349
+ }, z.core.$strict>;
350
+ type BacktestDecisionRequest = z.infer<typeof backtestDecisionRequestSchema>;
351
+
339
352
  interface CreateMcpAdapterOptions {
340
353
  name: string;
341
354
  schema?: ZodSchema;
@@ -348,4 +361,4 @@ interface CreateMcpAdapterOptions {
348
361
  declare function createMcpAdapter(options: CreateMcpAdapterOptions): (rawArguments: unknown) => Promise<ToolResponse>;
349
362
  declare function responseToToolResponse(response: Response): Promise<ToolResponse>;
350
363
 
351
- export { InternalToolDefinition, POLYMARKET_CHAIN_ID, POLYMARKET_CLOB_AUTH_DOMAIN, POLYMARKET_CLOB_DOMAIN, POLYMARKET_ENDPOINTS, POLYMARKET_EXCHANGE_ADDRESSES, type PolymarketApiCredentials, PolymarketApiError, type PolymarketApiKeyResponse, PolymarketAuthError, type PolymarketEnvironment, PolymarketExchangeClient, PolymarketInfoClient, type PolymarketMarket, type PolymarketOrderIntent, type PolymarketOrderType, type PolymarketOrderbook, type PolymarketPlaceOrderResponse, type PolymarketPriceHistoryPoint, type PolymarketSide, type PolymarketSignatureType, type PolymarketSignedOrderPayload, ToolResponse, WalletFullContext, buildHmacSignature, buildL1Headers, buildL2Headers, buildPolymarketOrderAmounts, buildSignedOrderPayload, cancelAllPolymarketOrders, cancelMarketPolymarketOrders, cancelPolymarketOrder, cancelPolymarketOrders, createDevServer, createMcpAdapter, createPolymarketApiKey, createStdioServer, derivePolymarketApiKey, fetchPolymarketMarket, fetchPolymarketMarkets, fetchPolymarketMidpoint, fetchPolymarketOrderbook, fetchPolymarketPrice, fetchPolymarketPriceHistory, normalizeNumberArrayish, normalizeStringArrayish, placePolymarketOrder, resolveExchangeAddress, resolvePolymarketBaseUrl, resolveRuntimePath, responseToToolResponse };
364
+ export { type BacktestDecisionRequest, InternalToolDefinition, POLYMARKET_CHAIN_ID, POLYMARKET_CLOB_AUTH_DOMAIN, POLYMARKET_CLOB_DOMAIN, POLYMARKET_ENDPOINTS, POLYMARKET_EXCHANGE_ADDRESSES, type PolymarketApiCredentials, PolymarketApiError, type PolymarketApiKeyResponse, PolymarketAuthError, type PolymarketEnvironment, PolymarketExchangeClient, PolymarketInfoClient, type PolymarketMarket, type PolymarketOrderIntent, type PolymarketOrderType, type PolymarketOrderbook, type PolymarketPlaceOrderResponse, type PolymarketPriceHistoryPoint, type PolymarketSide, type PolymarketSignatureType, type PolymarketSignedOrderPayload, ToolResponse, WalletFullContext, backtestDecisionRequestSchema, buildHmacSignature, buildL1Headers, buildL2Headers, buildPolymarketOrderAmounts, buildSignedOrderPayload, cancelAllPolymarketOrders, cancelMarketPolymarketOrders, cancelPolymarketOrder, cancelPolymarketOrders, createDevServer, createMcpAdapter, createPolymarketApiKey, createStdioServer, derivePolymarketApiKey, fetchPolymarketMarket, fetchPolymarketMarkets, fetchPolymarketMidpoint, fetchPolymarketOrderbook, fetchPolymarketPrice, fetchPolymarketPriceHistory, normalizeNumberArrayish, normalizeStringArrayish, placePolymarketOrder, resolveExchangeAddress, resolvePolymarketBaseUrl, resolveRuntimePath, responseToToolResponse };
package/dist/index.js CHANGED
@@ -1761,8 +1761,14 @@ async function requestJson(url, options, init) {
1761
1761
  }
1762
1762
  async function store(input, options) {
1763
1763
  const normalizedInput = normalizeStoreInput(input);
1764
+ const mode = normalizedInput.mode ?? "live";
1764
1765
  const eventLevel = normalizedInput.eventLevel;
1765
1766
  const normalizedAction = normalizeAction(normalizedInput.action);
1767
+ if (mode === "backtest" && !normalizedInput.backtestRunId) {
1768
+ throw new StoreError(
1769
+ `backtestRunId is required when mode is "backtest"`
1770
+ );
1771
+ }
1766
1772
  if (eventLevel === "execution" || eventLevel === "lifecycle") {
1767
1773
  if (!normalizedAction || !EXECUTION_ACTIONS_SET.has(normalizedAction)) {
1768
1774
  throw new StoreError(
@@ -1782,7 +1788,8 @@ async function store(input, options) {
1782
1788
  );
1783
1789
  }
1784
1790
  const { baseUrl, apiKey, fetchFn } = resolveConfig(options);
1785
- const url = `${baseUrl}/apps/positions/tx`;
1791
+ const path8 = mode === "backtest" ? "/apps/backtests/tx" : "/apps/positions/tx";
1792
+ const url = `${baseUrl}${path8}`;
1786
1793
  let response;
1787
1794
  try {
1788
1795
  response = await fetchFn(url, {
@@ -1821,7 +1828,9 @@ async function store(input, options) {
1821
1828
  }
1822
1829
  async function retrieve(params, options) {
1823
1830
  const { baseUrl, apiKey, fetchFn } = resolveConfig(options);
1824
- const url = new URL(`${baseUrl}/apps/positions/tx`);
1831
+ const mode = params?.mode ?? "live";
1832
+ const path8 = mode === "backtest" ? "/apps/backtests/tx" : "/apps/positions/tx";
1833
+ const url = new URL(`${baseUrl}${path8}`);
1825
1834
  if (params?.source) url.searchParams.set("source", params.source);
1826
1835
  if (params?.walletAddress) url.searchParams.set("walletAddress", params.walletAddress);
1827
1836
  if (params?.symbol) url.searchParams.set("symbol", params.symbol);
@@ -1831,6 +1840,9 @@ async function retrieve(params, options) {
1831
1840
  if (typeof params?.limit === "number") url.searchParams.set("limit", params.limit.toString());
1832
1841
  if (params?.cursor) url.searchParams.set("cursor", params.cursor);
1833
1842
  if (params?.history) url.searchParams.set("history", "true");
1843
+ if (params?.backtestRunId) {
1844
+ url.searchParams.set("backtestRunId", params.backtestRunId);
1845
+ }
1834
1846
  let response;
1835
1847
  try {
1836
1848
  response = await fetchFn(url.toString(), {
@@ -6315,6 +6327,17 @@ function toAbortError(reason) {
6315
6327
  }
6316
6328
  return new AIAbortError(String(reason ?? "AI request aborted"));
6317
6329
  }
6330
+ var backtestDecisionRequestSchema = z.object({
6331
+ mode: z.literal("backtest_decisions"),
6332
+ source: z.string().min(1).optional(),
6333
+ symbol: z.string().min(1).optional(),
6334
+ lookbackDays: z.number().positive().optional(),
6335
+ timeframeStart: z.string().optional(),
6336
+ timeframeEnd: z.string().optional(),
6337
+ from: z.number().int().nonnegative().optional(),
6338
+ to: z.number().int().nonnegative().optional(),
6339
+ initialEquityUsd: z.number().positive().optional()
6340
+ }).strict();
6318
6341
  var METADATA_SPEC_VERSION = "1.1.0";
6319
6342
  var McpAnnotationsSchema = z.object({
6320
6343
  title: z.string().optional(),
@@ -6803,6 +6826,11 @@ var SUPPORTED_EXTENSIONS = [
6803
6826
  ".cjs"
6804
6827
  ];
6805
6828
  var MIN_TEMPLATE_CONFIG_VERSION = 2;
6829
+ var TEMPLATE_PREVIEW_TITLE_MAX = 80;
6830
+ var TEMPLATE_PREVIEW_SUBTITLE_MAX = 120;
6831
+ var TEMPLATE_PREVIEW_DESCRIPTION_MAX = 1200;
6832
+ var TEMPLATE_PREVIEW_MIN_LINES = 3;
6833
+ var TEMPLATE_PREVIEW_MAX_LINES = 8;
6806
6834
  function normalizeTemplateConfigVersion(value) {
6807
6835
  if (typeof value === "number" && Number.isFinite(value)) {
6808
6836
  return value;
@@ -6825,6 +6853,67 @@ function normalizeTemplateConfigVersion(value) {
6825
6853
  const major = Number.parseInt(majorMatch[1], 10);
6826
6854
  return Number.isFinite(major) ? major : null;
6827
6855
  }
6856
+ function parseNonEmptyString(value, fieldPath, opts = {}) {
6857
+ const { max, required = false } = opts;
6858
+ if (value == null) {
6859
+ if (required) {
6860
+ throw new Error(`${fieldPath} is required and must be a non-empty string.`);
6861
+ }
6862
+ return null;
6863
+ }
6864
+ if (typeof value !== "string") {
6865
+ throw new Error(`${fieldPath} must be a string.`);
6866
+ }
6867
+ const trimmed = value.trim();
6868
+ if (!trimmed) {
6869
+ throw new Error(`${fieldPath} must be a non-empty string.`);
6870
+ }
6871
+ if (typeof max === "number" && trimmed.length > max) {
6872
+ throw new Error(`${fieldPath} must be <= ${max} characters.`);
6873
+ }
6874
+ return trimmed;
6875
+ }
6876
+ function normalizeTemplatePreview(value, file, toolName, requirePreview) {
6877
+ const pathPrefix = `${file}: profile.templatePreview`;
6878
+ if (value == null) {
6879
+ if (requirePreview) {
6880
+ throw new Error(
6881
+ `${pathPrefix} is required for strategy tools and must define subtitle + description.`
6882
+ );
6883
+ }
6884
+ return null;
6885
+ }
6886
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
6887
+ throw new Error(`${pathPrefix} must be an object.`);
6888
+ }
6889
+ const record = value;
6890
+ const title = parseNonEmptyString(record.title, `${pathPrefix}.title`, {
6891
+ max: TEMPLATE_PREVIEW_TITLE_MAX
6892
+ }) ?? toolName;
6893
+ const subtitle = parseNonEmptyString(record.subtitle, `${pathPrefix}.subtitle`, {
6894
+ required: true,
6895
+ max: TEMPLATE_PREVIEW_SUBTITLE_MAX
6896
+ });
6897
+ const description = parseNonEmptyString(
6898
+ record.description,
6899
+ `${pathPrefix}.description`,
6900
+ {
6901
+ required: true,
6902
+ max: TEMPLATE_PREVIEW_DESCRIPTION_MAX
6903
+ }
6904
+ );
6905
+ const descriptionLineCount = description.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 0).length;
6906
+ if (descriptionLineCount < TEMPLATE_PREVIEW_MIN_LINES || descriptionLineCount > TEMPLATE_PREVIEW_MAX_LINES) {
6907
+ throw new Error(
6908
+ `${pathPrefix}.description must contain ${TEMPLATE_PREVIEW_MIN_LINES}-${TEMPLATE_PREVIEW_MAX_LINES} non-empty lines (target ~5 lines).`
6909
+ );
6910
+ }
6911
+ return {
6912
+ title,
6913
+ subtitle,
6914
+ description
6915
+ };
6916
+ }
6828
6917
  async function validateCommand(options) {
6829
6918
  console.log("\u{1F50D} Validating OpenTool metadata...");
6830
6919
  try {
@@ -6902,16 +6991,26 @@ async function loadAndValidateTools(toolsDir, options = {}) {
6902
6991
  throw new Error(`${file}: export exactly one of GET or POST`);
6903
6992
  }
6904
6993
  let normalizedSchedule = null;
6905
- const schedule = toolModule?.profile?.schedule;
6906
- const profileNotifyEmail = typeof toolModule?.profile?.notifyEmail === "boolean" ? toolModule.profile.notifyEmail : void 0;
6907
- const profileCategoryRaw = typeof toolModule?.profile?.category === "string" ? toolModule.profile.category : void 0;
6908
- const allowedProfileCategories = /* @__PURE__ */ new Set(["strategy", "tracker", "orchestrator"]);
6909
- if (profileCategoryRaw && !allowedProfileCategories.has(profileCategoryRaw)) {
6910
- throw new Error(
6911
- `${file}: profile.category must be one of ${Array.from(allowedProfileCategories).join(", ")}`
6912
- );
6994
+ const profileRaw = toolModule?.profile && typeof toolModule.profile === "object" ? toolModule.profile : null;
6995
+ const schedule = profileRaw?.schedule ?? null;
6996
+ const profileNotifyEmail = typeof profileRaw?.notifyEmail === "boolean" ? profileRaw.notifyEmail : void 0;
6997
+ const allowedProfileCategories = [
6998
+ "strategy",
6999
+ "tracker",
7000
+ "orchestrator"
7001
+ ];
7002
+ const profileCategoryCandidate = typeof profileRaw?.category === "string" ? profileRaw.category : void 0;
7003
+ let profileCategoryRaw;
7004
+ if (profileCategoryCandidate !== void 0) {
7005
+ const isAllowed = allowedProfileCategories.includes(profileCategoryCandidate);
7006
+ if (!isAllowed) {
7007
+ throw new Error(
7008
+ `${file}: profile.category must be one of ${allowedProfileCategories.join(", ")}`
7009
+ );
7010
+ }
7011
+ profileCategoryRaw = profileCategoryCandidate;
6913
7012
  }
6914
- const profileAssetsRaw = toolModule?.profile?.assets;
7013
+ const profileAssetsRaw = profileRaw?.assets;
6915
7014
  if (profileAssetsRaw !== void 0) {
6916
7015
  if (!Array.isArray(profileAssetsRaw)) {
6917
7016
  throw new Error(`${file}: profile.assets must be an array.`);
@@ -6969,7 +7068,7 @@ async function loadAndValidateTools(toolsDir, options = {}) {
6969
7068
  }
6970
7069
  });
6971
7070
  }
6972
- const templateConfigRaw = toolModule?.profile?.templateConfig;
7071
+ const templateConfigRaw = profileRaw?.templateConfig;
6973
7072
  if (templateConfigRaw !== void 0) {
6974
7073
  if (!templateConfigRaw || typeof templateConfigRaw !== "object") {
6975
7074
  throw new Error(`${file}: profile.templateConfig must be an object.`);
@@ -7006,6 +7105,13 @@ async function loadAndValidateTools(toolsDir, options = {}) {
7006
7105
  );
7007
7106
  }
7008
7107
  }
7108
+ const normalizedTemplatePreview = normalizeTemplatePreview(
7109
+ profileRaw?.templatePreview,
7110
+ file,
7111
+ toolName,
7112
+ profileCategoryRaw === "strategy"
7113
+ );
7114
+ const normalizedProfile = profileRaw && normalizedTemplatePreview ? { ...profileRaw, templatePreview: normalizedTemplatePreview } : profileRaw;
7009
7115
  if (hasGET && schedule && typeof schedule.cron === "string" && schedule.cron.trim().length > 0) {
7010
7116
  normalizedSchedule = normalizeScheduleExpression(schedule.cron, file);
7011
7117
  if (typeof schedule.enabled === "boolean") {
@@ -7075,9 +7181,9 @@ async function loadAndValidateTools(toolsDir, options = {}) {
7075
7181
  handler: async (params) => adapter(params),
7076
7182
  payment: paymentExport ?? null,
7077
7183
  schedule: normalizedSchedule,
7078
- profile: toolModule?.profile && typeof toolModule.profile === "object" ? toolModule.profile : null,
7184
+ profile: normalizedProfile,
7079
7185
  ...profileNotifyEmail !== void 0 ? { notifyEmail: profileNotifyEmail } : {},
7080
- profileDescription: typeof toolModule?.profile?.description === "string" ? toolModule.profile?.description ?? null : null,
7186
+ profileDescription: typeof profileRaw?.description === "string" ? profileRaw.description : null,
7081
7187
  ...profileCategoryRaw ? { profileCategory: profileCategoryRaw } : {}
7082
7188
  };
7083
7189
  tools.push(tool);
@@ -7310,6 +7416,6 @@ function timestamp() {
7310
7416
  return (/* @__PURE__ */ new Date()).toISOString().replace("T", " ").slice(0, 19);
7311
7417
  }
7312
7418
 
7313
- export { AIAbortError, AIError, AIFetchError, AIResponseError, DEFAULT_BASE_URL, DEFAULT_CHAIN, DEFAULT_FACILITATOR, DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, DEFAULT_MODEL, DEFAULT_TIMEOUT_MS, DEFAULT_TOKENS, HTTP_METHODS2 as HTTP_METHODS, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, PAYMENT_HEADERS, POLYMARKET_CHAIN_ID, POLYMARKET_CLOB_AUTH_DOMAIN, POLYMARKET_CLOB_DOMAIN, POLYMARKET_ENDPOINTS, POLYMARKET_EXCHANGE_ADDRESSES, PolymarketApiError, PolymarketAuthError, PolymarketExchangeClient, PolymarketInfoClient, SUPPORTED_CURRENCIES, StoreError, WEBSEARCH_TOOL_DEFINITION, WEBSEARCH_TOOL_NAME, X402BrowserClient, X402Client, X402PaymentRequiredError, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, batchModifyHyperliquidOrders, buildHmacSignature, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, buildL1Headers, buildL2Headers, buildPolymarketOrderAmounts, buildSignedOrderPayload, cancelAllHyperliquidOrders, cancelAllPolymarketOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, cancelMarketPolymarketOrders, cancelPolymarketOrder, cancelPolymarketOrders, chains, computeHyperliquidMarketIocLimitPrice, createAIClient, createDevServer, createHyperliquidSubAccount, createMcpAdapter, createMonotonicNonceFactory, createPolymarketApiKey, createStdioServer, defineX402Payment, depositToHyperliquidBridge, derivePolymarketApiKey, ensureTextContent, executeTool, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, fetchPolymarketMarket, fetchPolymarketMarkets, fetchPolymarketMidpoint, fetchPolymarketOrderbook, fetchPolymarketPrice, fetchPolymarketPriceHistory, flattenMessageContent, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, generateMetadata, generateMetadataCommand, generateText, getHyperliquidMaxBuilderFee, getModelConfig, getMyPerformance, getMyTools, getRpcUrl, getX402PaymentContext, isHyperliquidSpotSymbol, isStreamingSupported, isToolCallingSupported, listModels, loadAndValidateTools, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeModelName, normalizeNumberArrayish, normalizeSpotTokenName2 as normalizeSpotTokenName, normalizeStringArrayish, parseSpotPairSymbol, payX402, payX402WithWallet, placeHyperliquidOrder, placeHyperliquidTwapOrder, placePolymarketOrder, postAgentDigest, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, registry, requireX402Payment, reserveHyperliquidRequestWeight, resolveConfig2 as resolveConfig, resolveExchangeAddress, resolveHyperliquidAbstractionFromMode, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidErrorDetail, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolvePolymarketBaseUrl, resolveRuntimePath, resolveSpotMidCandidates, resolveSpotTokenCandidates, resolveToolset, responseToToolResponse, retrieve, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, store, streamText, tokens, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, validateCommand, wallet, walletToolkit, withX402Payment, withdrawFromHyperliquid };
7419
+ export { AIAbortError, AIError, AIFetchError, AIResponseError, DEFAULT_BASE_URL, DEFAULT_CHAIN, DEFAULT_FACILITATOR, DEFAULT_HYPERLIQUID_MARKET_SLIPPAGE_BPS, DEFAULT_MODEL, DEFAULT_TIMEOUT_MS, DEFAULT_TOKENS, HTTP_METHODS2 as HTTP_METHODS, HyperliquidApiError, HyperliquidBuilderApprovalError, HyperliquidExchangeClient, HyperliquidGuardError, HyperliquidInfoClient, HyperliquidTermsError, PAYMENT_HEADERS, POLYMARKET_CHAIN_ID, POLYMARKET_CLOB_AUTH_DOMAIN, POLYMARKET_CLOB_DOMAIN, POLYMARKET_ENDPOINTS, POLYMARKET_EXCHANGE_ADDRESSES, PolymarketApiError, PolymarketAuthError, PolymarketExchangeClient, PolymarketInfoClient, SUPPORTED_CURRENCIES, StoreError, WEBSEARCH_TOOL_DEFINITION, WEBSEARCH_TOOL_NAME, X402BrowserClient, X402Client, X402PaymentRequiredError, __hyperliquidInternals, __hyperliquidMarketDataInternals, approveHyperliquidBuilderFee, backtestDecisionRequestSchema, batchModifyHyperliquidOrders, buildHmacSignature, buildHyperliquidMarketIdentity, buildHyperliquidProfileAssets, buildHyperliquidSpotUsdPriceMap, buildL1Headers, buildL2Headers, buildPolymarketOrderAmounts, buildSignedOrderPayload, cancelAllHyperliquidOrders, cancelAllPolymarketOrders, cancelHyperliquidOrders, cancelHyperliquidOrdersByCloid, cancelHyperliquidTwapOrder, cancelMarketPolymarketOrders, cancelPolymarketOrder, cancelPolymarketOrders, chains, computeHyperliquidMarketIocLimitPrice, createAIClient, createDevServer, createHyperliquidSubAccount, createMcpAdapter, createMonotonicNonceFactory, createPolymarketApiKey, createStdioServer, defineX402Payment, depositToHyperliquidBridge, derivePolymarketApiKey, ensureTextContent, executeTool, extractHyperliquidDex, extractHyperliquidOrderIds, fetchHyperliquidAllMids, fetchHyperliquidAssetCtxs, fetchHyperliquidClearinghouseState, fetchHyperliquidFrontendOpenOrders, fetchHyperliquidHistoricalOrders, fetchHyperliquidMeta, fetchHyperliquidMetaAndAssetCtxs, fetchHyperliquidOpenOrders, fetchHyperliquidOrderStatus, fetchHyperliquidPerpMarketInfo, fetchHyperliquidPreTransferCheck, fetchHyperliquidSizeDecimals, fetchHyperliquidSpotAccountValue, fetchHyperliquidSpotAssetCtxs, fetchHyperliquidSpotClearinghouseState, fetchHyperliquidSpotMarketInfo, fetchHyperliquidSpotMeta, fetchHyperliquidSpotMetaAndAssetCtxs, fetchHyperliquidSpotTickSize, fetchHyperliquidSpotUsdPriceMap, fetchHyperliquidTickSize, fetchHyperliquidUserFills, fetchHyperliquidUserFillsByTime, fetchHyperliquidUserRateLimit, fetchPolymarketMarket, fetchPolymarketMarkets, fetchPolymarketMidpoint, fetchPolymarketOrderbook, fetchPolymarketPrice, fetchPolymarketPriceHistory, flattenMessageContent, formatHyperliquidMarketablePrice, formatHyperliquidOrderSize, formatHyperliquidPrice, formatHyperliquidSize, generateMetadata, generateMetadataCommand, generateText, getHyperliquidMaxBuilderFee, getModelConfig, getMyPerformance, getMyTools, getRpcUrl, getX402PaymentContext, isHyperliquidSpotSymbol, isStreamingSupported, isToolCallingSupported, listModels, loadAndValidateTools, modifyHyperliquidOrder, normalizeHyperliquidBaseSymbol, normalizeHyperliquidMetaSymbol, normalizeModelName, normalizeNumberArrayish, normalizeSpotTokenName2 as normalizeSpotTokenName, normalizeStringArrayish, parseSpotPairSymbol, payX402, payX402WithWallet, placeHyperliquidOrder, placeHyperliquidTwapOrder, placePolymarketOrder, postAgentDigest, readHyperliquidAccountValue, readHyperliquidNumber, readHyperliquidPerpPosition, readHyperliquidPerpPositionSize, readHyperliquidSpotAccountValue, readHyperliquidSpotBalance, readHyperliquidSpotBalanceSize, recordHyperliquidBuilderApproval, recordHyperliquidTermsAcceptance, registry, requireX402Payment, reserveHyperliquidRequestWeight, resolveConfig2 as resolveConfig, resolveExchangeAddress, resolveHyperliquidAbstractionFromMode, resolveHyperliquidChain, resolveHyperliquidChainConfig, resolveHyperliquidErrorDetail, resolveHyperliquidOrderRef, resolveHyperliquidOrderSymbol, resolveHyperliquidPair, resolveHyperliquidProfileChain, resolveHyperliquidRpcEnvVar, resolveHyperliquidStoreNetwork, resolveHyperliquidSymbol, resolvePolymarketBaseUrl, resolveRuntimePath, resolveSpotMidCandidates, resolveSpotTokenCandidates, resolveToolset, responseToToolResponse, retrieve, roundHyperliquidPriceToTick, scheduleHyperliquidCancel, sendHyperliquidSpot, setHyperliquidAccountAbstractionMode, setHyperliquidDexAbstraction, setHyperliquidPortfolioMargin, store, streamText, tokens, transferHyperliquidSubAccount, updateHyperliquidIsolatedMargin, updateHyperliquidLeverage, validateCommand, wallet, walletToolkit, withX402Payment, withdrawFromHyperliquid };
7314
7420
  //# sourceMappingURL=index.js.map
7315
7421
  //# sourceMappingURL=index.js.map