@quantish/agent 0.1.50 → 0.1.51

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.
Files changed (3) hide show
  1. package/LICENSE +0 -2
  2. package/dist/index.js +1 -221
  3. package/package.json +1 -1
package/LICENSE CHANGED
@@ -142,5 +142,3 @@ please contact Quantish Inc. for a commercial license:
142
142
 
143
143
  Email: hello@quantish.live
144
144
  Website: https://quantish.live
145
-
146
-
package/dist/index.js CHANGED
@@ -3579,192 +3579,6 @@ function createLLMProvider(config) {
3579
3579
  }
3580
3580
 
3581
3581
  // src/agent/loop.ts
3582
- var MAX_TOOL_RESULT_CHARS = 8e3;
3583
- function truncateToolResult(result, toolName) {
3584
- const resultStr = JSON.stringify(result);
3585
- if (resultStr.length <= MAX_TOOL_RESULT_CHARS) {
3586
- return result;
3587
- }
3588
- if (typeof result === "object" && result !== null) {
3589
- const obj = result;
3590
- if (Array.isArray(obj.content) && obj.content.length > 0) {
3591
- const firstContent = obj.content[0];
3592
- if (firstContent?.type === "text" && typeof firstContent.text === "string") {
3593
- try {
3594
- const innerData = JSON.parse(firstContent.text);
3595
- const truncatedInner = truncateDataObject(innerData);
3596
- return {
3597
- content: [{
3598
- type: "text",
3599
- text: JSON.stringify(truncatedInner)
3600
- }]
3601
- };
3602
- } catch {
3603
- const truncatedText = firstContent.text.length > MAX_TOOL_RESULT_CHARS ? firstContent.text.substring(0, MAX_TOOL_RESULT_CHARS) + "... [truncated]" : firstContent.text;
3604
- return {
3605
- content: [{
3606
- type: "text",
3607
- text: truncatedText
3608
- }]
3609
- };
3610
- }
3611
- }
3612
- }
3613
- }
3614
- if (Array.isArray(result)) {
3615
- return truncateArray(result);
3616
- }
3617
- if (typeof result === "object" && result !== null) {
3618
- return truncateDataObject(result);
3619
- }
3620
- if (typeof result === "string" && result.length > MAX_TOOL_RESULT_CHARS) {
3621
- return result.substring(0, MAX_TOOL_RESULT_CHARS) + "... [truncated]";
3622
- }
3623
- return result;
3624
- }
3625
- function truncateArray(arr) {
3626
- const MAX_ITEMS = 5;
3627
- const truncated = arr.slice(0, MAX_ITEMS).map(
3628
- (item) => typeof item === "object" && item !== null ? truncateObject(item) : item
3629
- );
3630
- return {
3631
- _truncated: arr.length > MAX_ITEMS,
3632
- _originalCount: arr.length,
3633
- _note: arr.length > MAX_ITEMS ? `Showing ${MAX_ITEMS} of ${arr.length} items.` : void 0,
3634
- items: truncated
3635
- };
3636
- }
3637
- function truncateDataObject(obj) {
3638
- const truncated = {};
3639
- const MAX_ARRAY_ITEMS = 5;
3640
- for (const [key, value] of Object.entries(obj)) {
3641
- if (Array.isArray(value)) {
3642
- if (value.length > MAX_ARRAY_ITEMS) {
3643
- truncated[key] = value.slice(0, MAX_ARRAY_ITEMS).map(
3644
- (item) => typeof item === "object" && item !== null ? truncateObject(item) : item
3645
- );
3646
- truncated[`_${key}Count`] = value.length;
3647
- truncated["_truncated"] = true;
3648
- } else {
3649
- truncated[key] = value.map(
3650
- (item) => typeof item === "object" && item !== null ? truncateObject(item) : item
3651
- );
3652
- }
3653
- } else if (typeof value === "object" && value !== null) {
3654
- truncated[key] = truncateObject(value);
3655
- } else if (typeof value === "string" && value.length > 500) {
3656
- truncated[key] = value.substring(0, 500) + "...";
3657
- } else {
3658
- truncated[key] = value;
3659
- }
3660
- }
3661
- return truncated;
3662
- }
3663
- var ACTIONABLE_FIELDS = /* @__PURE__ */ new Set([
3664
- // Market identifiers (required for trading)
3665
- "conditionId",
3666
- "tokenId",
3667
- "marketId",
3668
- "id",
3669
- "ticker",
3670
- // Token info (required for order placement)
3671
- "token_id",
3672
- "clobTokenIds",
3673
- "tokens",
3674
- // Pricing (required for trading decisions)
3675
- "price",
3676
- "probability",
3677
- "outcomePrices",
3678
- "bestBid",
3679
- "bestAsk",
3680
- // Market identity (for user understanding)
3681
- "title",
3682
- "question",
3683
- "slug",
3684
- "outcome",
3685
- "name",
3686
- // Status info (affects tradability)
3687
- "active",
3688
- "closed",
3689
- "status",
3690
- "endDate",
3691
- // Platform (for multi-platform support)
3692
- "platform",
3693
- // Nested structures containing price data (Discovery MCP response)
3694
- "markets",
3695
- "outcomes"
3696
- ]);
3697
- var SUMMARY_FIELDS = /* @__PURE__ */ new Set([
3698
- "volume",
3699
- "liquidity",
3700
- "volume24hr"
3701
- ]);
3702
- var DROP_FIELDS = /* @__PURE__ */ new Set([
3703
- "description",
3704
- "rules",
3705
- "resolutionSource",
3706
- "image",
3707
- "icon",
3708
- "createdAt",
3709
- "updatedAt",
3710
- "lastTradePrice",
3711
- "spread",
3712
- "acceptingOrders",
3713
- "acceptingOrdersTimestamp",
3714
- "minimum_tick_size",
3715
- "minimum_order_size",
3716
- "maker_base_fee",
3717
- "taker_base_fee",
3718
- "neg_risk",
3719
- "neg_risk_market_id",
3720
- "neg_risk_request_id",
3721
- "notifications_enabled",
3722
- "is_50_50_outcome",
3723
- "game_start_time",
3724
- "seconds_delay",
3725
- "icon",
3726
- "fpmm",
3727
- "rewards",
3728
- "competitive"
3729
- ]);
3730
- function truncateObject(obj) {
3731
- const truncated = {};
3732
- for (const [key, value] of Object.entries(obj)) {
3733
- if (DROP_FIELDS.has(key)) continue;
3734
- if (ACTIONABLE_FIELDS.has(key)) {
3735
- if (typeof value === "string" && value.length > 150) {
3736
- truncated[key] = value.substring(0, 150) + "...";
3737
- } else if (Array.isArray(value)) {
3738
- truncated[key] = value.slice(0, 10).map((item) => {
3739
- if (typeof item === "object" && item !== null) {
3740
- return extractTokenInfo(item);
3741
- }
3742
- return item;
3743
- });
3744
- } else {
3745
- truncated[key] = value;
3746
- }
3747
- continue;
3748
- }
3749
- if (SUMMARY_FIELDS.has(key)) {
3750
- if (typeof value === "number" || typeof value === "string") {
3751
- truncated[key] = value;
3752
- }
3753
- continue;
3754
- }
3755
- if (typeof value !== "object" && JSON.stringify(truncated).length < 800) {
3756
- truncated[key] = value;
3757
- }
3758
- }
3759
- return truncated;
3760
- }
3761
- function extractTokenInfo(token) {
3762
- return {
3763
- token_id: token.token_id ?? token.tokenId,
3764
- outcome: token.outcome ?? token.name,
3765
- price: token.price ?? token.probability
3766
- };
3767
- }
3768
3582
  var DEFAULT_SYSTEM_PROMPT = `You are Quantish, an AI trading agent for prediction markets (Polymarket, Kalshi).
3769
3583
 
3770
3584
  You have tools to search markets and place trades. When showing market data, display ALL relevant information from the response including prices/probabilities.
@@ -4270,41 +4084,7 @@ ${userMessage}`;
4270
4084
  * - Future turns: Only actionable data (IDs, prices) is in context
4271
4085
  */
4272
4086
  truncateLastToolResults() {
4273
- for (let i = this.conversationHistory.length - 1; i >= 0; i--) {
4274
- const message = this.conversationHistory[i];
4275
- if (message.role === "user" && Array.isArray(message.content)) {
4276
- const toolResults = message.content.filter(
4277
- (block) => block.type === "tool_result"
4278
- );
4279
- if (toolResults.length > 0) {
4280
- const truncatedContent = message.content.map((block) => {
4281
- if (block.type === "tool_result" && typeof block.content === "string") {
4282
- try {
4283
- const fullResult = JSON.parse(block.content);
4284
- const truncatedResult = truncateToolResult(fullResult, "unknown");
4285
- return {
4286
- ...block,
4287
- content: JSON.stringify(truncatedResult)
4288
- };
4289
- } catch {
4290
- if (block.content.length > MAX_TOOL_RESULT_CHARS) {
4291
- return {
4292
- ...block,
4293
- content: block.content.substring(0, MAX_TOOL_RESULT_CHARS) + "... [truncated for context]"
4294
- };
4295
- }
4296
- }
4297
- }
4298
- return block;
4299
- });
4300
- this.conversationHistory[i] = {
4301
- ...message,
4302
- content: truncatedContent
4303
- };
4304
- break;
4305
- }
4306
- }
4307
- }
4087
+ return;
4308
4088
  }
4309
4089
  /**
4310
4090
  * Update cumulative token usage from API response
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@quantish/agent",
3
- "version": "0.1.50",
3
+ "version": "0.1.51",
4
4
  "description": "AI-powered agent for trading on Polymarket and Kalshi",
5
5
  "type": "module",
6
6
  "bin": {