@tomaspavlin/rohlik-mcp 2.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +207 -3
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/locale.d.ts +3 -0
- package/dist/locale.d.ts.map +1 -0
- package/dist/locale.js +27 -0
- package/dist/locale.js.map +1 -0
- package/dist/rohlik-api.d.ts +10 -0
- package/dist/rohlik-api.d.ts.map +1 -1
- package/dist/rohlik-api.js +146 -11
- package/dist/rohlik-api.js.map +1 -1
- package/dist/tools/account-data.d.ts.map +1 -1
- package/dist/tools/account-data.js +2 -1
- package/dist/tools/account-data.js.map +1 -1
- package/dist/tools/cart-management.d.ts.map +1 -1
- package/dist/tools/cart-management.js +3 -2
- package/dist/tools/cart-management.js.map +1 -1
- package/dist/tools/delivery-info.d.ts.map +1 -1
- package/dist/tools/delivery-info.js +3 -2
- package/dist/tools/delivery-info.js.map +1 -1
- package/dist/tools/delivery-slots.d.ts.map +1 -1
- package/dist/tools/delivery-slots.js +2 -1
- package/dist/tools/delivery-slots.js.map +1 -1
- package/dist/tools/discounted-items.d.ts +36 -0
- package/dist/tools/discounted-items.d.ts.map +1 -0
- package/dist/tools/discounted-items.js +69 -0
- package/dist/tools/discounted-items.js.map +1 -0
- package/dist/tools/frequent-items.d.ts +34 -0
- package/dist/tools/frequent-items.d.ts.map +1 -0
- package/dist/tools/frequent-items.js +184 -0
- package/dist/tools/frequent-items.js.map +1 -0
- package/dist/tools/meal-suggestions.d.ts +36 -0
- package/dist/tools/meal-suggestions.d.ts.map +1 -0
- package/dist/tools/meal-suggestions.js +243 -0
- package/dist/tools/meal-suggestions.js.map +1 -0
- package/dist/tools/order-detail.d.ts +28 -0
- package/dist/tools/order-detail.d.ts.map +1 -0
- package/dist/tools/order-detail.js +79 -0
- package/dist/tools/order-detail.js.map +1 -0
- package/dist/tools/order-history.d.ts.map +1 -1
- package/dist/tools/order-history.js +2 -1
- package/dist/tools/order-history.js.map +1 -1
- package/dist/tools/premium-info.d.ts.map +1 -1
- package/dist/tools/premium-info.js +4 -3
- package/dist/tools/premium-info.js.map +1 -1
- package/dist/tools/shopping-scenarios.d.ts +15 -0
- package/dist/tools/shopping-scenarios.d.ts.map +1 -0
- package/dist/tools/shopping-scenarios.js +143 -0
- package/dist/tools/shopping-scenarios.js.map +1 -0
- package/dist/tools/upcoming-orders.d.ts.map +1 -1
- package/dist/tools/upcoming-orders.js +2 -1
- package/dist/tools/upcoming-orders.js.map +1 -1
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +8 -3
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getCurrency } from "../locale.js";
|
|
1
2
|
export function createAccountDataTool(createRohlikAPI) {
|
|
2
3
|
return {
|
|
3
4
|
name: "get_account_data",
|
|
@@ -24,7 +25,7 @@ export function createAccountDataTool(createRohlikAPI) {
|
|
|
24
25
|
if (accountData.cart) {
|
|
25
26
|
sections.push(`🛒 CART SUMMARY:
|
|
26
27
|
• Total items: ${accountData.cart.total_items}
|
|
27
|
-
• Total price: ${accountData.cart.total_price}
|
|
28
|
+
• Total price: ${accountData.cart.total_price} ${getCurrency()}
|
|
28
29
|
• Can order: ${accountData.cart.can_make_order ? 'Yes' : 'No'}`);
|
|
29
30
|
}
|
|
30
31
|
// Delivery info
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"account-data.js","sourceRoot":"","sources":["../../src/tools/account-data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"account-data.js","sourceRoot":"","sources":["../../src/tools/account-data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cart-management.d.ts","sourceRoot":"","sources":["../../src/tools/cart-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"cart-management.d.ts","sourceRoot":"","sources":["../../src/tools/cart-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;;;;;;;;gCActC;YAC5B,QAAQ,EAAE,KAAK,CAAC;gBAAE,UAAU,EAAE,MAAM,CAAC;gBAAC,QAAQ,EAAE,MAAM,CAAA;aAAE,CAAC,CAAC;SAC3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAgGmC;YAAE,cAAc,EAAE,MAAM,CAAA;SAAE;;;;;;;;;;;;;;EA+BnE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { getCurrency } from "../locale.js";
|
|
2
3
|
export function createCartManagementTools(createRohlikAPI) {
|
|
3
4
|
return {
|
|
4
5
|
addToCart: {
|
|
@@ -66,11 +67,11 @@ export function createCartManagementTools(createRohlikAPI) {
|
|
|
66
67
|
}
|
|
67
68
|
const output = `Cart Summary:
|
|
68
69
|
• Total items: ${cartContent.total_items}
|
|
69
|
-
• Total price: ${cartContent.total_price}
|
|
70
|
+
• Total price: ${cartContent.total_price} ${getCurrency()}
|
|
70
71
|
• Can order: ${cartContent.can_make_order ? 'Yes' : 'No'}
|
|
71
72
|
|
|
72
73
|
Products in cart:
|
|
73
|
-
${cartContent.products.map(product => `• ${product.name} (${product.brand})\n Quantity: ${product.quantity}\n Price: ${product.price}
|
|
74
|
+
${cartContent.products.map(product => `• ${product.name} (${product.brand})\n Quantity: ${product.quantity}\n Price: ${product.price} ${getCurrency()}\n Category: ${product.category_name}\n Cart ID: ${product.cart_item_id}`).join('\n\n')}`;
|
|
74
75
|
return {
|
|
75
76
|
content: [
|
|
76
77
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cart-management.js","sourceRoot":"","sources":["../../src/tools/cart-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"cart-management.js","sourceRoot":"","sources":["../../src/tools/cart-management.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,yBAAyB,CAAC,eAAgC;IACxE,OAAO;QACL,SAAS,EAAE;YACT,IAAI,EAAE,aAAa;YACnB,UAAU,EAAE;gBACV,KAAK,EAAE,aAAa;gBACpB,WAAW,EAAE,mCAAmC;gBAChD,WAAW,EAAE;oBACX,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;wBACzB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;wBAC/D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;qBACvE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;iBAC5F;aACF;YACD,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,EAEzB,EAAE,EAAE;gBACH,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;oBAC9B,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;oBACpD,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;oBAC1C,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;oBAEvC,MAAM,MAAM,GAAG,sBAAsB,YAAY,IAAI,cAAc,sBAAsB;wBACvF,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;oBAE5G,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,MAAM;6BACb;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC7D;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;SACF;QAED,cAAc,EAAE;YACd,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE;gBACV,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,+CAA+C;gBAC5D,WAAW,EAAE,EAAE;aAChB;YACD,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;oBAC9B,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC;oBAE/C,IAAI,WAAW,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;wBAClC,OAAO;4BACL,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAe;oCACrB,IAAI,EAAE,qBAAqB;iCAC5B;6BACF;yBACF,CAAC;oBACJ,CAAC;oBAED,MAAM,MAAM,GAAG;iBACR,WAAW,CAAC,WAAW;iBACvB,WAAW,CAAC,WAAW,IAAI,WAAW,EAAE;eAC1C,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;;;EAGtD,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CACnC,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,kBAAkB,OAAO,CAAC,QAAQ,cAAc,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,iBAAiB,OAAO,CAAC,aAAa,gBAAgB,OAAO,CAAC,YAAY,EAAE,CAC9L,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBAEP,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,MAAM;6BACb;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC7D;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;SACF;QAED,cAAc,EAAE;YACd,IAAI,EAAE,kBAAkB;YACxB,UAAU,EAAE;gBACV,KAAK,EAAE,kBAAkB;gBACzB,WAAW,EAAE,uCAAuC;gBACpD,WAAW,EAAE;oBACX,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,QAAQ,CAAC,2EAA2E,CAAC;iBACtJ;aACF;YACD,OAAO,EAAE,KAAK,EAAE,EAAE,cAAc,EAA8B,EAAE,EAAE;gBAChE,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;oBAEzD,MAAM,MAAM,GAAG,OAAO;wBACpB,CAAC,CAAC,qCAAqC,cAAc,aAAa;wBAClE,CAAC,CAAC,iCAAiC,cAAc,aAAa,CAAC;oBAEjE,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,MAAM;6BACb;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC7D;yBACF;wBACD,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;YACH,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-info.d.ts","sourceRoot":"","sources":["../../src/tools/delivery-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery-info.d.ts","sourceRoot":"","sources":["../../src/tools/delivery-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EA4EtE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getCurrency } from "../locale.js";
|
|
1
2
|
export function createDeliveryInfoTool(createRohlikAPI) {
|
|
2
3
|
return {
|
|
3
4
|
name: "get_delivery_info",
|
|
@@ -28,10 +29,10 @@ export function createDeliveryInfoTool(createRohlikAPI) {
|
|
|
28
29
|
Time: ${data.nextAvailableDelivery.time || 'Not available'}`);
|
|
29
30
|
}
|
|
30
31
|
if (data.deliveryFee !== undefined) {
|
|
31
|
-
sections.push(`💰 DELIVERY FEE: ${data.deliveryFee}
|
|
32
|
+
sections.push(`💰 DELIVERY FEE: ${data.deliveryFee} ${getCurrency()}`);
|
|
32
33
|
}
|
|
33
34
|
if (data.minimumOrder !== undefined) {
|
|
34
|
-
sections.push(`📦 MINIMUM ORDER: ${data.minimumOrder}
|
|
35
|
+
sections.push(`📦 MINIMUM ORDER: ${data.minimumOrder} ${getCurrency()}`);
|
|
35
36
|
}
|
|
36
37
|
if (data.deliveryArea) {
|
|
37
38
|
sections.push(`📍 DELIVERY AREA: ${data.deliveryArea}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-info.js","sourceRoot":"","sources":["../../src/tools/delivery-info.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delivery-info.js","sourceRoot":"","sources":["../../src/tools/delivery-info.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,sBAAsB,CAAC,eAAgC;IACrE,OAAO;QACL,IAAI,EAAE,mBAAmB;QACzB,UAAU,EAAE;YACV,KAAK,EAAE,mBAAmB;YAC1B,WAAW,EAAE,2DAA2D;YACxE,WAAW,EAAE,EAAE;SAChB;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,eAAe,EAAE,CAAC;gBAEjD,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,oCAAoC;6BAC3C;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,kBAAkB,GAAG,CAAC,IAAS,EAAU,EAAE;oBAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;oBAE9B,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;wBAC/B,QAAQ,CAAC,IAAI,CAAC;WACf,IAAI,CAAC,qBAAqB,CAAC,IAAI,IAAI,eAAe;WAClD,IAAI,CAAC,qBAAqB,CAAC,IAAI,IAAI,eAAe,EAAE,CAAC,CAAC;oBACvD,CAAC;oBAED,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;wBACnC,QAAQ,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,WAAW,IAAI,WAAW,EAAE,EAAE,CAAC,CAAC;oBACzE,CAAC;oBAED,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;wBACpC,QAAQ,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,YAAY,IAAI,WAAW,EAAE,EAAE,CAAC,CAAC;oBAC3E,CAAC;oBAED,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,QAAQ,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;oBAC1D,CAAC;oBAED,uCAAuC;oBACvC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAC1B,QAAQ,CAAC,IAAI,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;oBACvE,CAAC;oBAED,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/B,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;gBAEhD,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-slots.d.ts","sourceRoot":"","sources":["../../src/tools/delivery-slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"delivery-slots.d.ts","sourceRoot":"","sources":["../../src/tools/delivery-slots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;EA2DvE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getCurrency } from "../locale.js";
|
|
1
2
|
export function createDeliverySlotsTool(createRohlikAPI) {
|
|
2
3
|
return {
|
|
3
4
|
name: "get_delivery_slots",
|
|
@@ -23,7 +24,7 @@ export function createDeliverySlotsTool(createRohlikAPI) {
|
|
|
23
24
|
const formatSlots = (data) => {
|
|
24
25
|
if (Array.isArray(data)) {
|
|
25
26
|
return `⏰ AVAILABLE DELIVERY SLOTS:\n\n${data.map((slot, index) => `${index + 1}. ${slot.date || 'Unknown date'} ${slot.time || slot.timeRange || 'Unknown time'}
|
|
26
|
-
Price: ${slot.price || slot.deliveryFee || 'Free'}
|
|
27
|
+
Price: ${slot.price || slot.deliveryFee || 'Free'} ${getCurrency()}
|
|
27
28
|
Available: ${slot.available ? 'Yes' : 'No'}`).join('\n\n')}`;
|
|
28
29
|
}
|
|
29
30
|
return `⏰ DELIVERY SLOTS:\n${JSON.stringify(data, null, 2)}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-slots.js","sourceRoot":"","sources":["../../src/tools/delivery-slots.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"delivery-slots.js","sourceRoot":"","sources":["../../src/tools/delivery-slots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,UAAU,uBAAuB,CAAC,eAAgC;IACtE,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,UAAU,EAAE;YACV,KAAK,EAAE,oBAAoB;YAC3B,WAAW,EAAE,oDAAoD;YACjE,WAAW,EAAE,EAAE;SAChB;QACD,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,eAAe,EAAE,CAAC;gBAC9B,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBAEnD,IAAI,CAAC,aAAa,EAAE,CAAC;oBACnB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,8BAA8B;6BACrC;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,WAAW,GAAG,CAAC,IAAS,EAAU,EAAE;oBACxC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBACxB,OAAO,kCAAkC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAChE,GAAG,KAAK,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,cAAc,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,cAAc;YAC/F,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,WAAW,IAAI,MAAM,IAAI,WAAW,EAAE;gBACrD,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAClC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnB,CAAC;oBAED,OAAO,sBAAsB,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC/D,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;gBAE1C,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,MAAM;yBACb;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;yBAC7D;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RohlikAPI } from "../rohlik-api.js";
|
|
3
|
+
export declare function createDiscountedItemsTool(createRohlikAPI: () => RohlikAPI): {
|
|
4
|
+
name: string;
|
|
5
|
+
definition: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
category_id: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
page: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
sort: z.ZodDefault<z.ZodEnum<["recommended", "price-asc", "price-desc", "unit-price-asc"]>>;
|
|
13
|
+
list_categories: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
handler: (args: {
|
|
17
|
+
category_id?: number;
|
|
18
|
+
limit?: number;
|
|
19
|
+
page?: number;
|
|
20
|
+
sort?: string;
|
|
21
|
+
list_categories?: boolean;
|
|
22
|
+
}) => Promise<{
|
|
23
|
+
content: {
|
|
24
|
+
type: "text";
|
|
25
|
+
text: string;
|
|
26
|
+
}[];
|
|
27
|
+
isError?: undefined;
|
|
28
|
+
} | {
|
|
29
|
+
content: {
|
|
30
|
+
type: "text";
|
|
31
|
+
text: string;
|
|
32
|
+
}[];
|
|
33
|
+
isError: boolean;
|
|
34
|
+
}>;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=discounted-items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discounted-items.d.ts","sourceRoot":"","sources":["../../src/tools/discounted-items.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;;oBAchD;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;EAiE1H"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function createDiscountedItemsTool(createRohlikAPI) {
|
|
3
|
+
return {
|
|
4
|
+
name: "get_discounted_items",
|
|
5
|
+
definition: {
|
|
6
|
+
title: "Get Discounted Items",
|
|
7
|
+
description: "Get currently discounted items (cenové trháky / sales). Returns products on sale, optionally filtered by food category. Without a category, returns deals across all categories. Call with list_categories=true to see available category IDs.",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
category_id: z.number().optional().describe("Food category ID to filter by. Use list_categories=true first to see available categories and their IDs. If omitted, returns discounted items across all categories."),
|
|
10
|
+
limit: z.number().min(1).max(50).default(14).describe("Maximum number of products to return (1-50, default: 14)"),
|
|
11
|
+
page: z.number().min(0).default(0).describe("Page number for pagination (0-based, default: 0)"),
|
|
12
|
+
sort: z.enum(["recommended", "price-asc", "price-desc", "unit-price-asc"]).default("recommended").describe("Sort order (default: recommended)"),
|
|
13
|
+
list_categories: z.boolean().default(false).describe("If true, returns the list of available sales categories instead of products")
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
handler: async (args) => {
|
|
17
|
+
const { category_id, limit = 14, page = 0, sort = "recommended", list_categories = false } = args;
|
|
18
|
+
try {
|
|
19
|
+
const api = createRohlikAPI();
|
|
20
|
+
if (list_categories) {
|
|
21
|
+
const categories = await api.getSalesCategories();
|
|
22
|
+
if (categories.length === 0) {
|
|
23
|
+
return {
|
|
24
|
+
content: [{ type: "text", text: "No sales categories found." }]
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const output = `Available sales categories:\n\n` +
|
|
28
|
+
categories.map(c => `• ${c.name} (ID: ${c.id})`).join('\n');
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: "text", text: output }]
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const products = await api.getDiscountedProducts(category_id ?? null, page, limit, sort);
|
|
34
|
+
if (products.length === 0) {
|
|
35
|
+
return {
|
|
36
|
+
content: [{ type: "text", text: "No discounted items found." }]
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const output = `Found ${products.length} discounted items${category_id ? ` in category ${category_id}` : ' across all categories'} (page ${page}):\n\n` +
|
|
40
|
+
products.map(p => {
|
|
41
|
+
const badge = p.badges?.find((b) => b.position === 'PRICE');
|
|
42
|
+
const discount = badge?.text ? ` (${badge.text})` : '';
|
|
43
|
+
const originalPrice = p.prices?.originalPrice ? `${p.prices.originalPrice} ${p.prices?.currency || ''}` : null;
|
|
44
|
+
const salePrice = p.prices?.salePrice ? `${p.prices.salePrice} ${p.prices?.currency || ''}` : null;
|
|
45
|
+
const price = salePrice || `${p.prices?.originalPrice || '?'} ${p.prices?.currency || ''}`;
|
|
46
|
+
const priceInfo = originalPrice && salePrice
|
|
47
|
+
? `Price: ${salePrice} (was ${originalPrice})`
|
|
48
|
+
: `Price: ${price}`;
|
|
49
|
+
return `• ${p.name}${discount}\n ${priceInfo}\n Unit price: ${p.prices?.unitPrice || '?'} ${p.prices?.currency || ''}/${p.unit || 'unit'}\n Amount: ${p.textualAmount || '?'}\n ID: ${p.productId}`;
|
|
50
|
+
}).join('\n\n');
|
|
51
|
+
return {
|
|
52
|
+
content: [{ type: "text", text: output }]
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: "text",
|
|
60
|
+
text: error instanceof Error ? error.message : String(error)
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
isError: true
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=discounted-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discounted-items.js","sourceRoot":"","sources":["../../src/tools/discounted-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RohlikAPI } from "../rohlik-api.js";
|
|
3
|
+
export declare function createFrequentItemsTool(createRohlikAPI: () => RohlikAPI): {
|
|
4
|
+
name: string;
|
|
5
|
+
definition: {
|
|
6
|
+
title: string;
|
|
7
|
+
description: string;
|
|
8
|
+
inputSchema: {
|
|
9
|
+
orders_to_analyze: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
top_items: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
top_per_category: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
show_categories: z.ZodDefault<z.ZodBoolean>;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
handler: (args: {
|
|
16
|
+
orders_to_analyze?: number;
|
|
17
|
+
top_items?: number;
|
|
18
|
+
top_per_category?: number;
|
|
19
|
+
show_categories?: boolean;
|
|
20
|
+
}) => Promise<{
|
|
21
|
+
content: {
|
|
22
|
+
type: "text";
|
|
23
|
+
text: string;
|
|
24
|
+
}[];
|
|
25
|
+
isError?: undefined;
|
|
26
|
+
} | {
|
|
27
|
+
content: {
|
|
28
|
+
type: "text";
|
|
29
|
+
text: string;
|
|
30
|
+
}[];
|
|
31
|
+
isError: boolean;
|
|
32
|
+
}>;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=frequent-items.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frequent-items.d.ts","sourceRoot":"","sources":["../../src/tools/frequent-items.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAoB7C,wBAAgB,uBAAuB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;oBAa9C;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE;;;;;;;;;;;;;EAiMjI"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export function createFrequentItemsTool(createRohlikAPI) {
|
|
3
|
+
return {
|
|
4
|
+
name: "get_frequent_items",
|
|
5
|
+
definition: {
|
|
6
|
+
title: "Get Frequent Items",
|
|
7
|
+
description: "Analyze your order history to find the most frequently purchased items",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
orders_to_analyze: z.number().min(1).max(20).default(5).describe("Number of recent orders to analyze (1-20, default: 5)"),
|
|
10
|
+
top_items: z.number().min(3).max(30).default(10).describe("Number of top items to return overall (3-30, default: 10)"),
|
|
11
|
+
top_per_category: z.number().min(1).max(20).default(10).describe("Number of top items to show per category (1-20, default: 10)"),
|
|
12
|
+
show_categories: z.boolean().default(true).describe("Whether to show per-category breakdown (default: true)")
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
handler: async (args) => {
|
|
16
|
+
const { orders_to_analyze = 5, top_items = 10, top_per_category = 10, show_categories = true } = args;
|
|
17
|
+
try {
|
|
18
|
+
const api = createRohlikAPI();
|
|
19
|
+
// Step 1: Get order history
|
|
20
|
+
const orderHistory = await api.getOrderHistory(orders_to_analyze);
|
|
21
|
+
if (!orderHistory || (Array.isArray(orderHistory) && orderHistory.length === 0)) {
|
|
22
|
+
return {
|
|
23
|
+
content: [
|
|
24
|
+
{
|
|
25
|
+
type: "text",
|
|
26
|
+
text: "No order history found. You need to have past orders to analyze frequent items."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const orders = Array.isArray(orderHistory) ? orderHistory : [orderHistory];
|
|
32
|
+
// Step 2: Get detailed information for each order
|
|
33
|
+
const productMap = new Map();
|
|
34
|
+
let processedOrders = 0;
|
|
35
|
+
let totalProducts = 0;
|
|
36
|
+
for (const order of orders) {
|
|
37
|
+
try {
|
|
38
|
+
const orderId = order.id || order.orderNumber;
|
|
39
|
+
if (!orderId)
|
|
40
|
+
continue;
|
|
41
|
+
const orderDetail = await api.getOrderDetail(String(orderId));
|
|
42
|
+
if (!orderDetail)
|
|
43
|
+
continue;
|
|
44
|
+
processedOrders++;
|
|
45
|
+
const products = orderDetail.products || orderDetail.items || [];
|
|
46
|
+
const orderDate = orderDetail.deliveredAt || orderDetail.createdAt;
|
|
47
|
+
for (const product of products) {
|
|
48
|
+
const productId = product.productId || product.id;
|
|
49
|
+
const productName = product.productName || product.name;
|
|
50
|
+
if (!productId || !productName)
|
|
51
|
+
continue;
|
|
52
|
+
totalProducts++;
|
|
53
|
+
const key = `${productId}`;
|
|
54
|
+
// Extract category (use level 1 - mid-level category for grouping)
|
|
55
|
+
const categories = product.categories || [];
|
|
56
|
+
const mainCategory = categories.find((cat) => cat.level === 1) || categories[0];
|
|
57
|
+
const categoryName = mainCategory?.name || 'Uncategorized';
|
|
58
|
+
const categoryId = mainCategory?.id || 0;
|
|
59
|
+
if (productMap.has(key)) {
|
|
60
|
+
const existing = productMap.get(key);
|
|
61
|
+
existing.frequency++;
|
|
62
|
+
existing.totalQuantity += (product.quantity || 1);
|
|
63
|
+
// Update average price
|
|
64
|
+
if (product.price) {
|
|
65
|
+
const currentAvg = existing.averagePrice || 0;
|
|
66
|
+
existing.averagePrice = (currentAvg * (existing.frequency - 1) + product.price) / existing.frequency;
|
|
67
|
+
}
|
|
68
|
+
// Update last order date if newer
|
|
69
|
+
if (orderDate && (!existing.lastOrderDate || orderDate > existing.lastOrderDate)) {
|
|
70
|
+
existing.lastOrderDate = orderDate;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
productMap.set(key, {
|
|
75
|
+
productId: String(productId),
|
|
76
|
+
productName,
|
|
77
|
+
brand: product.brand || '',
|
|
78
|
+
frequency: 1,
|
|
79
|
+
totalQuantity: product.quantity || 1,
|
|
80
|
+
lastOrderDate: orderDate,
|
|
81
|
+
averagePrice: product.price || 0,
|
|
82
|
+
category: categoryName,
|
|
83
|
+
categoryId: categoryId
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
// Skip orders that fail to load
|
|
90
|
+
console.error(`Failed to process order: ${error}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
// Step 3: Sort by frequency and get top items
|
|
94
|
+
const sortedProducts = Array.from(productMap.values())
|
|
95
|
+
.sort((a, b) => b.frequency - a.frequency)
|
|
96
|
+
.slice(0, top_items);
|
|
97
|
+
if (sortedProducts.length === 0) {
|
|
98
|
+
return {
|
|
99
|
+
content: [
|
|
100
|
+
{
|
|
101
|
+
type: "text",
|
|
102
|
+
text: `Analyzed ${processedOrders} orders but found no products. This might be due to API changes or data format issues.`
|
|
103
|
+
}
|
|
104
|
+
]
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// Step 4: Group by category
|
|
108
|
+
const categoryMap = new Map();
|
|
109
|
+
for (const product of Array.from(productMap.values())) {
|
|
110
|
+
const catId = product.categoryId || 0;
|
|
111
|
+
const catName = product.category || 'Uncategorized';
|
|
112
|
+
if (!categoryMap.has(catId)) {
|
|
113
|
+
categoryMap.set(catId, {
|
|
114
|
+
categoryId: catId,
|
|
115
|
+
categoryName: catName,
|
|
116
|
+
products: []
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
categoryMap.get(catId).products.push(product);
|
|
120
|
+
}
|
|
121
|
+
// Sort products within each category
|
|
122
|
+
for (const category of categoryMap.values()) {
|
|
123
|
+
category.products.sort((a, b) => b.frequency - a.frequency);
|
|
124
|
+
}
|
|
125
|
+
// Step 5: Format output
|
|
126
|
+
const formatItem = (item, index, showCategory = false) => {
|
|
127
|
+
const brand = item.brand ? ` (${item.brand})` : '';
|
|
128
|
+
const avgPrice = item.averagePrice ? `${item.averagePrice.toFixed(2)} Kč` : 'N/A';
|
|
129
|
+
const lastOrder = item.lastOrderDate ? new Date(item.lastOrderDate).toLocaleDateString() : 'N/A';
|
|
130
|
+
const category = showCategory && item.category ? ` • ${item.category}` : '';
|
|
131
|
+
return `${index + 1}. ${item.productName}${brand}${category}
|
|
132
|
+
📊 ${item.frequency}× orders • ${item.totalQuantity} units • 💰 Avg: ${avgPrice} • 📅 Last: ${lastOrder}
|
|
133
|
+
🆔 ${item.productId}`;
|
|
134
|
+
};
|
|
135
|
+
// Build overall top items section
|
|
136
|
+
let output = `🛒 MOST FREQUENTLY PURCHASED ITEMS
|
|
137
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
138
|
+
📈 Analysis: ${processedOrders} orders • ${totalProducts} total items
|
|
139
|
+
|
|
140
|
+
🏆 TOP ${sortedProducts.length} OVERALL:
|
|
141
|
+
|
|
142
|
+
${sortedProducts.map((item, idx) => formatItem(item, idx, true)).join('\n\n')}`;
|
|
143
|
+
// Add category breakdown if requested
|
|
144
|
+
if (show_categories) {
|
|
145
|
+
// Sort categories by total frequency
|
|
146
|
+
const sortedCategories = Array.from(categoryMap.values())
|
|
147
|
+
.sort((a, b) => {
|
|
148
|
+
const aTotal = a.products.reduce((sum, p) => sum + p.frequency, 0);
|
|
149
|
+
const bTotal = b.products.reduce((sum, p) => sum + p.frequency, 0);
|
|
150
|
+
return bTotal - aTotal;
|
|
151
|
+
});
|
|
152
|
+
output += '\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n📂 TOP ITEMS BY CATEGORY:\n';
|
|
153
|
+
for (const category of sortedCategories) {
|
|
154
|
+
const topCategoryProducts = category.products.slice(0, top_per_category);
|
|
155
|
+
const totalCategoryFrequency = category.products.reduce((sum, p) => sum + p.frequency, 0);
|
|
156
|
+
output += `\n\n📦 ${category.categoryName.toUpperCase()} (${totalCategoryFrequency} total orders)\n${'─'.repeat(40)}\n`;
|
|
157
|
+
output += topCategoryProducts.map((item, idx) => formatItem(item, idx, false)).join('\n\n');
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
output += '\n\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n💡 Tip: Use product IDs with add_to_cart to quickly reorder your favorites!';
|
|
161
|
+
return {
|
|
162
|
+
content: [
|
|
163
|
+
{
|
|
164
|
+
type: "text",
|
|
165
|
+
text: output
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
return {
|
|
172
|
+
content: [
|
|
173
|
+
{
|
|
174
|
+
type: "text",
|
|
175
|
+
text: error instanceof Error ? error.message : String(error)
|
|
176
|
+
}
|
|
177
|
+
],
|
|
178
|
+
isError: true
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=frequent-items.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frequent-items.js","sourceRoot":"","sources":["../../src/tools/frequent-items.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { RohlikAPI } from "../rohlik-api.js";
|
|
3
|
+
declare const MEAL_CATEGORY_MAPPINGS: Record<string, string[]>;
|
|
4
|
+
export declare function createMealSuggestionsTool(createRohlikAPI: () => RohlikAPI): {
|
|
5
|
+
name: string;
|
|
6
|
+
definition: {
|
|
7
|
+
title: string;
|
|
8
|
+
description: string;
|
|
9
|
+
inputSchema: {
|
|
10
|
+
meal_type: z.ZodEnum<["breakfast", "lunch", "dinner", "snack", "baking", "drinks", "healthy"]>;
|
|
11
|
+
items_count: z.ZodDefault<z.ZodNumber>;
|
|
12
|
+
orders_to_analyze: z.ZodDefault<z.ZodNumber>;
|
|
13
|
+
prefer_frequent: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
handler: (args: {
|
|
17
|
+
meal_type: keyof typeof MEAL_CATEGORY_MAPPINGS;
|
|
18
|
+
items_count?: number;
|
|
19
|
+
orders_to_analyze?: number;
|
|
20
|
+
prefer_frequent?: boolean;
|
|
21
|
+
}) => Promise<{
|
|
22
|
+
content: {
|
|
23
|
+
type: "text";
|
|
24
|
+
text: string;
|
|
25
|
+
}[];
|
|
26
|
+
isError: boolean;
|
|
27
|
+
} | {
|
|
28
|
+
content: {
|
|
29
|
+
type: "text";
|
|
30
|
+
text: string;
|
|
31
|
+
}[];
|
|
32
|
+
isError?: undefined;
|
|
33
|
+
}>;
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=meal-suggestions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meal-suggestions.d.ts","sourceRoot":"","sources":["../../src/tools/meal-suggestions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAa7C,QAAA,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAsEpD,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,SAAS;;;;;;;;;;;;oBAiBhD;QACpB,SAAS,EAAE,MAAM,OAAO,sBAAsB,CAAC;QAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B;;;;;;;;;;;;;EAgLJ"}
|