switchroom 0.21.8 → 0.21.9

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 (29) hide show
  1. package/dist/cli/switchroom.js +100 -39
  2. package/dist/host-control/main.js +1 -1
  3. package/package.json +2 -2
  4. package/skills/switchroom-architecture/telegram.md +12 -10
  5. package/skills/switchroom-cli/SKILL.md +1 -1
  6. package/telegram-plugin/README.md +3 -1
  7. package/telegram-plugin/dist/gateway/gateway.js +151 -86
  8. package/telegram-plugin/format.ts +12 -4
  9. package/telegram-plugin/package.json +1 -1
  10. package/telegram-plugin/render/code-segments.ts +38 -4
  11. package/telegram-plugin/render/dollar-math-guard.ts +16 -1
  12. package/telegram-plugin/render/ir.ts +53 -3
  13. package/telegram-plugin/render/parse.ts +73 -14
  14. package/telegram-plugin/render/render.ts +53 -15
  15. package/telegram-plugin/render/unsupported-token-guard.ts +45 -80
  16. package/telegram-plugin/rich-send.ts +22 -7
  17. package/telegram-plugin/shared/bot-runtime.ts +3 -2
  18. package/telegram-plugin/telegraph.ts +6 -4
  19. package/telegram-plugin/tests/grammy-rich-message-types.test.ts +199 -0
  20. package/telegram-plugin/tests/render/dollar-math-guard.test.ts +43 -0
  21. package/telegram-plugin/tests/render/guard-composition.test.ts +102 -0
  22. package/telegram-plugin/tests/render/parse.test.ts +30 -5
  23. package/telegram-plugin/tests/render/render.test.ts +9 -4
  24. package/telegram-plugin/tests/render/rich-render.test.ts +46 -5
  25. package/telegram-plugin/tests/render/tg-entity.test.ts +242 -0
  26. package/telegram-plugin/tests/render/unsupported-token-guard.test.ts +66 -66
  27. package/telegram-plugin/tests/sent-text-capture.test.ts +3 -3
  28. package/telegram-plugin/tests/telegraph.test.ts +1 -1
  29. package/telegram-plugin/uat/scenarios/jtbd-rich-formatting-render-dm.test.ts +17 -8
@@ -66,7 +66,7 @@ var __export = (target, all) => {
66
66
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
67
67
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
68
68
 
69
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/filter.js
69
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/filter.js
70
70
  var require_filter = __commonJS((exports) => {
71
71
  Object.defineProperty(exports, "__esModule", { value: true });
72
72
  exports.matchFilter = matchFilter;
@@ -357,6 +357,8 @@ var require_filter = __commonJS((exports) => {
357
357
  checklist: { others_can_add_tasks: {}, others_can_mark_tasks_as_done: {} },
358
358
  checklist_tasks_done: {},
359
359
  checklist_tasks_added: {},
360
+ community_chat_added: {},
361
+ community_chat_removed: {},
360
362
  poll_option_added: {},
361
363
  poll_option_deleted: {},
362
364
  suggested_post_info: {},
@@ -411,7 +413,8 @@ var require_filter = __commonJS((exports) => {
411
413
  message_reaction_count: MESSAGE_REACTION_COUNT_UPDATED_KEYS,
412
414
  chat_boost: {},
413
415
  removed_chat_boost: {},
414
- purchased_paid_media: {}
416
+ purchased_paid_media: {},
417
+ subscription: { state: { canceled: {}, active: {}, failed: {} } }
415
418
  };
416
419
  var L1_SHORTCUTS = {
417
420
  "": ["message", "channel_post"],
@@ -435,7 +438,7 @@ var require_filter = __commonJS((exports) => {
435
438
  };
436
439
  });
437
440
 
438
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/context.js
441
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/context.js
439
442
  var require_context = __commonJS((exports) => {
440
443
  Object.defineProperty(exports, "__esModule", { value: true });
441
444
  exports.Context = undefined;
@@ -676,6 +679,9 @@ var require_context = __commonJS((exports) => {
676
679
  get purchasedPaidMedia() {
677
680
  return this.update.purchased_paid_media;
678
681
  }
682
+ get subscription() {
683
+ return this.update.subscription;
684
+ }
679
685
  get msg() {
680
686
  var _a, _b, _c, _d, _e, _f, _g, _h;
681
687
  return (_g = (_f = (_e = (_d = (_c = (_b = (_a = this.message) !== null && _a !== undefined ? _a : this.editedMessage) !== null && _b !== undefined ? _b : this.channelPost) !== null && _c !== undefined ? _c : this.editedChannelPost) !== null && _d !== undefined ? _d : this.businessMessage) !== null && _e !== undefined ? _e : this.editedBusinessMessage) !== null && _f !== undefined ? _f : this.guestMessage) !== null && _g !== undefined ? _g : (_h = this.callbackQuery) === null || _h === undefined ? undefined : _h.message;
@@ -689,8 +695,8 @@ var require_context = __commonJS((exports) => {
689
695
  return (_a = this.msg) === null || _a === undefined ? undefined : _a.sender_chat;
690
696
  }
691
697
  get from() {
692
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
693
- return (_h = (_g = (_c = (_b = (_a = this.businessConnection) !== null && _a !== undefined ? _a : this.messageReaction) !== null && _b !== undefined ? _b : this.managedBot) !== null && _c !== undefined ? _c : (_f = (_e = (_d = this.chatBoost) === null || _d === undefined ? undefined : _d.boost) !== null && _e !== undefined ? _e : this.removedChatBoost) === null || _f === undefined ? undefined : _f.source) === null || _g === undefined ? undefined : _g.user) !== null && _h !== undefined ? _h : (_t = (_s = (_r = (_q = (_p = (_o = (_m = (_l = (_k = (_j = this.callbackQuery) !== null && _j !== undefined ? _j : this.msg) !== null && _k !== undefined ? _k : this.inlineQuery) !== null && _l !== undefined ? _l : this.chosenInlineResult) !== null && _m !== undefined ? _m : this.shippingQuery) !== null && _o !== undefined ? _o : this.preCheckoutQuery) !== null && _p !== undefined ? _p : this.myChatMember) !== null && _q !== undefined ? _q : this.chatMember) !== null && _r !== undefined ? _r : this.chatJoinRequest) !== null && _s !== undefined ? _s : this.purchasedPaidMedia) === null || _t === undefined ? undefined : _t.from;
698
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
699
+ return (_j = (_h = (_g = (_c = (_b = (_a = this.businessConnection) !== null && _a !== undefined ? _a : this.messageReaction) !== null && _b !== undefined ? _b : this.managedBot) !== null && _c !== undefined ? _c : (_f = (_e = (_d = this.chatBoost) === null || _d === undefined ? undefined : _d.boost) !== null && _e !== undefined ? _e : this.removedChatBoost) === null || _f === undefined ? undefined : _f.source) !== null && _g !== undefined ? _g : this.subscription) === null || _h === undefined ? undefined : _h.user) !== null && _j !== undefined ? _j : (_u = (_t = (_s = (_r = (_q = (_p = (_o = (_m = (_l = (_k = this.callbackQuery) !== null && _k !== undefined ? _k : this.msg) !== null && _l !== undefined ? _l : this.inlineQuery) !== null && _m !== undefined ? _m : this.chosenInlineResult) !== null && _o !== undefined ? _o : this.shippingQuery) !== null && _p !== undefined ? _p : this.preCheckoutQuery) !== null && _q !== undefined ? _q : this.myChatMember) !== null && _r !== undefined ? _r : this.chatMember) !== null && _s !== undefined ? _s : this.chatJoinRequest) !== null && _t !== undefined ? _t : this.purchasedPaidMedia) === null || _u === undefined ? undefined : _u.from;
694
700
  }
695
701
  get msgId() {
696
702
  var _a, _b, _c, _d, _e;
@@ -1349,6 +1355,22 @@ var require_context = __commonJS((exports) => {
1349
1355
  var _a, _b, _c, _d, _e;
1350
1356
  return this.api.stopPoll(orThrow(this.chatId, "stopPoll"), orThrow((_d = (_b = (_a = this.msg) === null || _a === undefined ? undefined : _a.message_id) !== null && _b !== undefined ? _b : (_c = this.messageReaction) === null || _c === undefined ? undefined : _c.message_id) !== null && _d !== undefined ? _d : (_e = this.messageReactionCount) === null || _e === undefined ? undefined : _e.message_id, "stopPoll"), { business_connection_id: this.businessConnectionId, ...other }, signal);
1351
1357
  }
1358
+ editEphemeralMessageText(text, other, signal) {
1359
+ const msg = orThrow(this.msg, "editEphemeralMessageText");
1360
+ return this.api.editEphemeralMessageText(msg.chat.id, orThrow(msg.receiver_user, "editEphemeralMessageText").id, orThrow(msg.ephemeral_message_id, "editEphemeralMessageText"), text, other, signal);
1361
+ }
1362
+ editEphemeralMessageMedia(media, other, signal) {
1363
+ const msg = orThrow(this.msg, "editEphemeralMessageMedia");
1364
+ return this.api.editEphemeralMessageMedia(msg.chat.id, orThrow(msg.receiver_user, "editEphemeralMessageMedia").id, orThrow(msg.ephemeral_message_id, "editEphemeralMessageMedia"), media, other, signal);
1365
+ }
1366
+ editEphemeralMessageCaption(caption, other, signal) {
1367
+ const msg = orThrow(this.msg, "editEphemeralMessageCaption");
1368
+ return this.api.editEphemeralMessageCaption(msg.chat.id, orThrow(msg.receiver_user, "editEphemeralMessageCaption").id, orThrow(msg.ephemeral_message_id, "editEphemeralMessageCaption"), caption, other, signal);
1369
+ }
1370
+ editEphemeralMessageReplyMarkup(other, signal) {
1371
+ const msg = orThrow(this.msg, "editEphemeralMessageReplyMarkup");
1372
+ return this.api.editEphemeralMessageReplyMarkup(msg.chat.id, orThrow(msg.receiver_user, "editEphemeralMessageReplyMarkup").id, orThrow(msg.ephemeral_message_id, "editEphemeralMessageReplyMarkup"), other, signal);
1373
+ }
1352
1374
  deleteMessage(signal) {
1353
1375
  var _a, _b, _c, _d, _e;
1354
1376
  return this.api.deleteMessage(orThrow(this.chatId, "deleteMessage"), orThrow((_d = (_b = (_a = this.msg) === null || _a === undefined ? undefined : _a.message_id) !== null && _b !== undefined ? _b : (_c = this.messageReaction) === null || _c === undefined ? undefined : _c.message_id) !== null && _d !== undefined ? _d : (_e = this.messageReactionCount) === null || _e === undefined ? undefined : _e.message_id, "deleteMessage"), signal);
@@ -1356,6 +1378,10 @@ var require_context = __commonJS((exports) => {
1356
1378
  deleteMessages(message_ids, signal) {
1357
1379
  return this.api.deleteMessages(orThrow(this.chatId, "deleteMessages"), message_ids, signal);
1358
1380
  }
1381
+ deleteEphemeralMessage(signal) {
1382
+ const msg = orThrow(this.msg, "deleteEphemeralMessage");
1383
+ return this.api.deleteEphemeralMessage(msg.chat.id, orThrow(msg.receiver_user, "deleteEphemeralMessage").id, orThrow(msg.ephemeral_message_id, "deleteEphemeralMessage"), signal);
1384
+ }
1359
1385
  deleteMessageReaction(other, signal) {
1360
1386
  const reaction = orThrow(this.messageReaction, "deleteMessageReaction");
1361
1387
  if (reaction.user !== undefined) {
@@ -1548,7 +1574,7 @@ var require_context = __commonJS((exports) => {
1548
1574
  }
1549
1575
  });
1550
1576
 
1551
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/composer.js
1577
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/composer.js
1552
1578
  var require_composer = __commonJS((exports) => {
1553
1579
  Object.defineProperty(exports, "__esModule", { value: true });
1554
1580
  exports.Composer = exports.BotError = undefined;
@@ -2444,7 +2470,7 @@ var require_src = __commonJS((exports, module) => {
2444
2470
  }
2445
2471
  });
2446
2472
 
2447
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/platform.node.js
2473
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/platform.node.js
2448
2474
  var require_platform_node = __commonJS((exports) => {
2449
2475
  Object.defineProperty(exports, "__esModule", { value: true });
2450
2476
  exports.defaultAdapter = exports.itrToStream = exports.debug = undefined;
@@ -2472,19 +2498,21 @@ var require_platform_node = __commonJS((exports) => {
2472
2498
  if (apiRoot.startsWith("https:")) {
2473
2499
  return {
2474
2500
  compress: true,
2475
- agent: getCached(httpsAgents, apiRoot, () => new https_1.Agent({ keepAlive: true }))
2501
+ agent: getCached(httpsAgents, apiRoot, () => new https_1.Agent({ keepAlive: true })),
2502
+ duplex: "half"
2476
2503
  };
2477
2504
  } else if (apiRoot.startsWith("http:")) {
2478
2505
  return {
2479
- agent: getCached(httpAgents, apiRoot, () => new http_1.Agent({ keepAlive: true }))
2506
+ agent: getCached(httpAgents, apiRoot, () => new http_1.Agent({ keepAlive: true })),
2507
+ duplex: "half"
2480
2508
  };
2481
2509
  } else
2482
- return {};
2510
+ return { duplex: "half" };
2483
2511
  }
2484
2512
  exports.defaultAdapter = "express";
2485
2513
  });
2486
2514
 
2487
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/core/error.js
2515
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/core/error.js
2488
2516
  var require_error = __commonJS((exports) => {
2489
2517
  Object.defineProperty(exports, "__esModule", { value: true });
2490
2518
  exports.HttpError = exports.GrammyError = undefined;
@@ -2540,10 +2568,10 @@ var require_error = __commonJS((exports) => {
2540
2568
  }
2541
2569
  });
2542
2570
 
2543
- // ../node_modules/.bun/@grammyjs+types@3.28.0/node_modules/@grammyjs/types/mod.js
2571
+ // ../node_modules/.bun/@grammyjs+types@4.0.0/node_modules/@grammyjs/types/mod.js
2544
2572
  var exports_mod = {};
2545
2573
 
2546
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/types.node.js
2574
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/types.node.js
2547
2575
  var require_types_node = __commonJS((exports) => {
2548
2576
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
2549
2577
  if (k2 === undefined)
@@ -2634,7 +2662,7 @@ var require_types_node = __commonJS((exports) => {
2634
2662
  }
2635
2663
  });
2636
2664
 
2637
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/types.js
2665
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/types.js
2638
2666
  var require_types = __commonJS((exports) => {
2639
2667
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
2640
2668
  if (k2 === undefined)
@@ -2660,7 +2688,7 @@ var require_types = __commonJS((exports) => {
2660
2688
  __exportStar(require_types_node(), exports);
2661
2689
  });
2662
2690
 
2663
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/core/payload.js
2691
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/core/payload.js
2664
2692
  var require_payload = __commonJS((exports) => {
2665
2693
  Object.defineProperty(exports, "__esModule", { value: true });
2666
2694
  exports.requiresFormDataUpload = requiresFormDataUpload;
@@ -3320,7 +3348,7 @@ var require_abort_controller = __commonJS((exports, module) => {
3320
3348
  module.exports.AbortSignal = AbortSignal2;
3321
3349
  });
3322
3350
 
3323
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/shim.node.js
3351
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/shim.node.js
3324
3352
  var require_shim_node = __commonJS((exports) => {
3325
3353
  Object.defineProperty(exports, "__esModule", { value: true });
3326
3354
  exports.fetch = exports.AbortController = undefined;
@@ -3334,7 +3362,7 @@ var require_shim_node = __commonJS((exports) => {
3334
3362
  } });
3335
3363
  });
3336
3364
 
3337
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/core/client.js
3365
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/core/client.js
3338
3366
  var require_client = __commonJS((exports) => {
3339
3367
  Object.defineProperty(exports, "__esModule", { value: true });
3340
3368
  exports.createRawApi = createRawApi;
@@ -3514,7 +3542,7 @@ If you want to prevent such mistakes in the future, consider using TypeScript. h
3514
3542
  var shim_node_js_1 = require_shim_node();
3515
3543
  });
3516
3544
 
3517
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/core/api.js
3545
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/core/api.js
3518
3546
  var require_api = __commonJS((exports) => {
3519
3547
  Object.defineProperty(exports, "__esModule", { value: true });
3520
3548
  exports.Api = undefined;
@@ -3955,12 +3983,39 @@ var require_api = __commonJS((exports) => {
3955
3983
  stopPoll(chat_id, message_id, other, signal) {
3956
3984
  return this.raw.stopPoll({ chat_id, message_id, ...other }, signal);
3957
3985
  }
3986
+ editEphemeralMessageText(chat_id, receiver_user_id, ephemeral_message_id, text, other, signal) {
3987
+ return this.raw.editEphemeralMessageText({ chat_id, receiver_user_id, ephemeral_message_id, text, ...other }, signal);
3988
+ }
3989
+ editEphemeralMessageMedia(chat_id, receiver_user_id, ephemeral_message_id, media, other, signal) {
3990
+ return this.raw.editEphemeralMessageMedia({
3991
+ chat_id,
3992
+ receiver_user_id,
3993
+ ephemeral_message_id,
3994
+ media,
3995
+ ...other
3996
+ }, signal);
3997
+ }
3998
+ editEphemeralMessageCaption(chat_id, receiver_user_id, ephemeral_message_id, caption, other, signal) {
3999
+ return this.raw.editEphemeralMessageCaption({
4000
+ chat_id,
4001
+ receiver_user_id,
4002
+ ephemeral_message_id,
4003
+ caption,
4004
+ ...other
4005
+ }, signal);
4006
+ }
4007
+ editEphemeralMessageReplyMarkup(chat_id, receiver_user_id, ephemeral_message_id, other, signal) {
4008
+ return this.raw.editEphemeralMessageReplyMarkup({ chat_id, receiver_user_id, ephemeral_message_id, ...other }, signal);
4009
+ }
3958
4010
  deleteMessage(chat_id, message_id, signal) {
3959
4011
  return this.raw.deleteMessage({ chat_id, message_id }, signal);
3960
4012
  }
3961
4013
  deleteMessages(chat_id, message_ids, signal) {
3962
4014
  return this.raw.deleteMessages({ chat_id, message_ids }, signal);
3963
4015
  }
4016
+ deleteEphemeralMessage(chat_id, receiver_user_id, ephemeral_message_id, signal) {
4017
+ return this.raw.deleteEphemeralMessage({ chat_id, receiver_user_id, ephemeral_message_id }, signal);
4018
+ }
3964
4019
  deleteMessageReactionUser(chat_id, message_id, user_id, other, signal) {
3965
4020
  return this.raw.deleteMessageReaction({
3966
4021
  chat_id,
@@ -4202,7 +4257,7 @@ var require_api = __commonJS((exports) => {
4202
4257
  exports.Api = Api;
4203
4258
  });
4204
4259
 
4205
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/bot.js
4260
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/bot.js
4206
4261
  var require_bot = __commonJS((exports) => {
4207
4262
  Object.defineProperty(exports, "__esModule", { value: true });
4208
4263
  exports.Bot = exports.BotError = exports.DEFAULT_UPDATE_TYPES = undefined;
@@ -4240,7 +4295,8 @@ var require_bot = __commonJS((exports) => {
4240
4295
  "managed_bot",
4241
4296
  "chat_join_request",
4242
4297
  "chat_boost",
4243
- "removed_chat_boost"
4298
+ "removed_chat_boost",
4299
+ "subscription"
4244
4300
  ];
4245
4301
 
4246
4302
  class Bot extends composer_js_1.Composer {
@@ -4532,7 +4588,7 @@ On the other hand, if you actually know what you're doing and you do need to ins
4532
4588
  var shim_node_js_1 = require_shim_node();
4533
4589
  });
4534
4590
 
4535
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/constants.js
4591
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/constants.js
4536
4592
  var require_constants = __commonJS((exports) => {
4537
4593
  Object.defineProperty(exports, "__esModule", { value: true });
4538
4594
  exports.API_CONSTANTS = undefined;
@@ -4569,7 +4625,7 @@ var require_constants = __commonJS((exports) => {
4569
4625
  Object.freeze(exports.API_CONSTANTS);
4570
4626
  });
4571
4627
 
4572
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/inline_query.js
4628
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/inline_query.js
4573
4629
  var require_inline_query = __commonJS((exports) => {
4574
4630
  Object.defineProperty(exports, "__esModule", { value: true });
4575
4631
  exports.InlineQueryResultBuilder = undefined;
@@ -4774,7 +4830,7 @@ var require_inline_query = __commonJS((exports) => {
4774
4830
  };
4775
4831
  });
4776
4832
 
4777
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/input_media.js
4833
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/input_media.js
4778
4834
  var require_input_media = __commonJS((exports) => {
4779
4835
  Object.defineProperty(exports, "__esModule", { value: true });
4780
4836
  exports.InputMediaBuilder = undefined;
@@ -4797,7 +4853,7 @@ var require_input_media = __commonJS((exports) => {
4797
4853
  };
4798
4854
  });
4799
4855
 
4800
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/keyboard.js
4856
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/keyboard.js
4801
4857
  var require_keyboard = __commonJS((exports) => {
4802
4858
  Object.defineProperty(exports, "__esModule", { value: true });
4803
4859
  exports.InlineKeyboard = exports.Keyboard = undefined;
@@ -5155,7 +5211,7 @@ var require_keyboard = __commonJS((exports) => {
5155
5211
  }
5156
5212
  });
5157
5213
 
5158
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/session.js
5214
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/session.js
5159
5215
  var require_session = __commonJS((exports) => {
5160
5216
  Object.defineProperty(exports, "__esModule", { value: true });
5161
5217
  exports.MemorySessionStorage = undefined;
@@ -5455,7 +5511,7 @@ var require_session = __commonJS((exports) => {
5455
5511
  }
5456
5512
  });
5457
5513
 
5458
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/frameworks.js
5514
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/frameworks.js
5459
5515
  var require_frameworks = __commonJS((exports) => {
5460
5516
  Object.defineProperty(exports, "__esModule", { value: true });
5461
5517
  exports.adapters = undefined;
@@ -5827,7 +5883,7 @@ var require_frameworks = __commonJS((exports) => {
5827
5883
  };
5828
5884
  });
5829
5885
 
5830
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/convenience/webhook.js
5886
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/convenience/webhook.js
5831
5887
  var require_webhook = __commonJS((exports) => {
5832
5888
  Object.defineProperty(exports, "__esModule", { value: true });
5833
5889
  exports.webhookCallback = webhookCallback;
@@ -5921,7 +5977,7 @@ var require_webhook = __commonJS((exports) => {
5921
5977
  }
5922
5978
  });
5923
5979
 
5924
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/mod.js
5980
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/mod.js
5925
5981
  var require_mod = __commonJS((exports) => {
5926
5982
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
5927
5983
  if (k2 === undefined)
@@ -5987,7 +6043,7 @@ var require_mod = __commonJS((exports) => {
5987
6043
  } });
5988
6044
  });
5989
6045
 
5990
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/platform.node.js
6046
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/platform.node.js
5991
6047
  var require_platform_node2 = __commonJS((exports) => {
5992
6048
  Object.defineProperty(exports, "__esModule", { value: true });
5993
6049
  exports.parentThread = exports.createThread = undefined;
@@ -6018,7 +6074,7 @@ var require_platform_node2 = __commonJS((exports) => {
6018
6074
  exports.parentThread = parentThread;
6019
6075
  });
6020
6076
 
6021
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/distribute.js
6077
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/distribute.js
6022
6078
  var require_distribute = __commonJS((exports) => {
6023
6079
  Object.defineProperty(exports, "__esModule", { value: true });
6024
6080
  exports.distribute = undefined;
@@ -6063,7 +6119,7 @@ var require_distribute = __commonJS((exports) => {
6063
6119
  exports.distribute = distribute;
6064
6120
  });
6065
6121
 
6066
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/queue.js
6122
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/queue.js
6067
6123
  var require_queue = __commonJS((exports) => {
6068
6124
  Object.defineProperty(exports, "__esModule", { value: true });
6069
6125
  exports.DecayingDeque = undefined;
@@ -6207,7 +6263,7 @@ var require_queue = __commonJS((exports) => {
6207
6263
  exports.DecayingDeque = DecayingDeque;
6208
6264
  });
6209
6265
 
6210
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/sink.js
6266
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/sink.js
6211
6267
  var require_sink = __commonJS((exports) => {
6212
6268
  Object.defineProperty(exports, "__esModule", { value: true });
6213
6269
  exports.createConcurrentSink = exports.createBatchSink = exports.createSequentialSink = undefined;
@@ -6252,7 +6308,7 @@ var require_sink = __commonJS((exports) => {
6252
6308
  exports.createConcurrentSink = createConcurrentSink;
6253
6309
  });
6254
6310
 
6255
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/node-shim.js
6311
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/node-shim.js
6256
6312
  var require_node_shim = __commonJS((exports) => {
6257
6313
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
6258
6314
  if (k2 === undefined)
@@ -6278,7 +6334,7 @@ var require_node_shim = __commonJS((exports) => {
6278
6334
  __exportStar(require_abort_controller(), exports);
6279
6335
  });
6280
6336
 
6281
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/source.js
6337
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/source.js
6282
6338
  var require_source = __commonJS((exports) => {
6283
6339
  Object.defineProperty(exports, "__esModule", { value: true });
6284
6340
  exports.createSource = undefined;
@@ -6358,7 +6414,7 @@ var require_source = __commonJS((exports) => {
6358
6414
  var node_shim_js_1 = require_node_shim();
6359
6415
  });
6360
6416
 
6361
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/runner.js
6417
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/runner.js
6362
6418
  var require_runner = __commonJS((exports) => {
6363
6419
  Object.defineProperty(exports, "__esModule", { value: true });
6364
6420
  exports.createRunner = exports.createUpdateFetcher = exports.run = undefined;
@@ -6510,7 +6566,7 @@ var require_runner = __commonJS((exports) => {
6510
6566
  }
6511
6567
  });
6512
6568
 
6513
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/sequentialize.js
6569
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/sequentialize.js
6514
6570
  var require_sequentialize = __commonJS((exports) => {
6515
6571
  Object.defineProperty(exports, "__esModule", { value: true });
6516
6572
  exports.sequentialize = undefined;
@@ -6553,7 +6609,7 @@ var require_sequentialize = __commonJS((exports) => {
6553
6609
  exports.sequentialize = sequentialize;
6554
6610
  });
6555
6611
 
6556
- // ../node_modules/.bun/grammy@1.44.0/node_modules/grammy/out/mod.js
6612
+ // ../node_modules/.bun/grammy@1.45.1/node_modules/grammy/out/mod.js
6557
6613
  var require_mod2 = __commonJS((exports) => {
6558
6614
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
6559
6615
  if (k2 === undefined)
@@ -6619,7 +6675,7 @@ var require_mod2 = __commonJS((exports) => {
6619
6675
  } });
6620
6676
  });
6621
6677
 
6622
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/deps.node.js
6678
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/deps.node.js
6623
6679
  var require_deps_node = __commonJS((exports) => {
6624
6680
  Object.defineProperty(exports, "__esModule", { value: true });
6625
6681
  exports.BotError = exports.Bot = undefined;
@@ -6632,7 +6688,7 @@ var require_deps_node = __commonJS((exports) => {
6632
6688
  } });
6633
6689
  });
6634
6690
 
6635
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/worker.js
6691
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/worker.js
6636
6692
  var require_worker = __commonJS((exports) => {
6637
6693
  Object.defineProperty(exports, "__esModule", { value: true });
6638
6694
  exports.BotWorker = undefined;
@@ -6674,7 +6730,7 @@ var require_worker = __commonJS((exports) => {
6674
6730
  exports.BotWorker = BotWorker;
6675
6731
  });
6676
6732
 
6677
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/mod.js
6733
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/mod.js
6678
6734
  var require_mod3 = __commonJS((exports) => {
6679
6735
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
6680
6736
  if (k2 === undefined)
@@ -7283,7 +7339,7 @@ var init_format = __esm(() => {
7283
7339
  /\*\*[^*\n]+\*\*/g,
7284
7340
  /__[^_\n]+__/g,
7285
7341
  /(?<![\w*])_[^_\n]+_(?![\w*])/g,
7286
- /\[[^\]\n]*\]\([^)\n]*\)/g,
7342
+ /!?\[[^\]\n]*\]\([^)\n]*\)/g,
7287
7343
  /~~[^~\n]+~~/g,
7288
7344
  /\|\|[^|\n]+\|\|/g
7289
7345
  ];
@@ -13444,6 +13500,15 @@ function splitProseProtected(text) {
13444
13500
  continue;
13445
13501
  }
13446
13502
  }
13503
+ if (ch === "$") {
13504
+ const m = COMPACT_MATH_PAIR.exec(text.slice(i));
13505
+ if (m && !CURRENCY_SHAPED_INNER.test(m[1])) {
13506
+ const end = i + m[0].length;
13507
+ pushProtected(i, end);
13508
+ i = end;
13509
+ continue;
13510
+ }
13511
+ }
13447
13512
  i++;
13448
13513
  }
13449
13514
  if (plainStart < text.length)
@@ -13462,6 +13527,11 @@ function splitProtectedSegments(text) {
13462
13527
  }
13463
13528
  return out;
13464
13529
  }
13530
+ var COMPACT_MATH_PAIR, CURRENCY_SHAPED_INNER;
13531
+ var init_code_segments = __esm(() => {
13532
+ COMPACT_MATH_PAIR = /^\$([^\s$]+)\$/;
13533
+ CURRENCY_SHAPED_INNER = /^[0-9.,+\-kKmMbB]+$/;
13534
+ });
13465
13535
 
13466
13536
  // render/dollar-math-guard.ts
13467
13537
  function guardDollarMath(text) {
@@ -13483,6 +13553,7 @@ function guardDollarMath(text) {
13483
13553
  }
13484
13554
  var ANY_DOLLAR, CURRENCY_SIGNAL, UNESCAPED_DOLLAR;
13485
13555
  var init_dollar_math_guard = __esm(() => {
13556
+ init_code_segments();
13486
13557
  ANY_DOLLAR = /\$/g;
13487
13558
  CURRENCY_SIGNAL = /\$\.?\d|\d\s?\$/;
13488
13559
  UNESCAPED_DOLLAR = /(?<!\\)\$/g;
@@ -13554,6 +13625,7 @@ function guardAccidentalEmphasis(text) {
13554
13625
  }
13555
13626
  var INTRA_WORD_UNDERSCORE, INTRA_WORD_ASTERISK, BOUNDARY_FLANKED_ASTERISK, ANY_UNDERSCORE, ANY_ASTERISK;
13556
13627
  var init_emphasis_guard = __esm(() => {
13628
+ init_code_segments();
13557
13629
  INTRA_WORD_UNDERSCORE = /(?<=[A-Za-z0-9])_(?=[A-Za-z0-9])/g;
13558
13630
  INTRA_WORD_ASTERISK = /(?<=[A-Za-z0-9])\*(?=[A-Za-z0-9])/g;
13559
13631
  BOUNDARY_FLANKED_ASTERISK = /(?<=^|\s)\*(?=\s|$)/g;
@@ -13639,6 +13711,7 @@ function guardAccidentalHeading(text) {
13639
13711
  }
13640
13712
  var ACCIDENTAL_BLOCKQUOTE, ACCIDENTAL_ORDERED_LIST, ACCIDENTAL_HEADING, ACCIDENTAL_HEADING_AFTER_MARKER;
13641
13713
  var init_line_start_guard = __esm(() => {
13714
+ init_code_segments();
13642
13715
  ACCIDENTAL_BLOCKQUOTE = /^>[0-9=]/;
13643
13716
  ACCIDENTAL_ORDERED_LIST = /^(\d{4,})([.)])(\s|$)/;
13644
13717
  ACCIDENTAL_HEADING = /^([ \t]{0,3})(#{1,6})(?=[^\s#])/;
@@ -13683,50 +13756,25 @@ function guardAccidentalInlinePairs(text) {
13683
13756
  }
13684
13757
  var TILDE_APPROX, MARK_OP, SPOILER_OP;
13685
13758
  var init_inline_pairs_guard = __esm(() => {
13759
+ init_code_segments();
13686
13760
  TILDE_APPROX = /(?<!\\)~(?=\$?\.?\d)/g;
13687
13761
  MARK_OP = /(?<=\w)==(?=\w)/g;
13688
13762
  SPOILER_OP = /(?<=\w)\|\|(?=\w)/g;
13689
13763
  });
13690
13764
 
13691
13765
  // render/unsupported-token-guard.ts
13692
- function toExpandableBlockquote(title, body) {
13693
- const lines = [];
13694
- const t = title.trim();
13695
- if (t)
13696
- lines.push(t);
13697
- for (const raw of body.split(`
13698
- `)) {
13699
- const line = raw.trimEnd();
13700
- if (line.trim() === "" && lines.length === 0)
13701
- continue;
13702
- lines.push(line);
13703
- }
13704
- while (lines.length > 0 && lines[lines.length - 1].trim() === "")
13705
- lines.pop();
13706
- if (lines.length === 0)
13707
- return "";
13708
- return lines.map((line, i) => i === 0 ? `**> ${line}` : `> ${line}`).join(`
13709
- `);
13710
- }
13711
13766
  function repairProse(text) {
13712
- let out = text;
13713
- out = out.replace(DETAILS_BLOCK, (_m, summary, body) => toExpandableBlockquote(summary ?? "", body ?? ""));
13714
- out = out.replace(ORPHAN_TAGS, "");
13715
- out = out.replace(CARET_PAIR, (_m, inner) => inner);
13716
- out = out.replace(FOOTNOTE_MARKER, "");
13717
- return out;
13767
+ return text.replace(CARET_PAIR, (_m, inner) => inner);
13718
13768
  }
13719
13769
  function guardUnsupportedTokens(text) {
13720
- if (!/[\^]|<details|<\/details|<summary/i.test(text))
13770
+ if (!text.includes("^"))
13721
13771
  return text;
13722
13772
  return splitProtectedSegments(text).map((seg) => seg.code ? seg.text : repairProse(seg.text)).join("");
13723
13773
  }
13724
- var CARET_PAIR, FOOTNOTE_MARKER, DETAILS_BLOCK, ORPHAN_TAGS;
13774
+ var CARET_PAIR;
13725
13775
  var init_unsupported_token_guard = __esm(() => {
13776
+ init_code_segments();
13726
13777
  CARET_PAIR = /\^([A-Za-z0-9]+)\^/g;
13727
- FOOTNOTE_MARKER = /\[\^[A-Za-z0-9]{1,10}\](?!:)/g;
13728
- DETAILS_BLOCK = /<details[^>]*>\s*(?:<summary[^>]*>([\s\S]*?)<\/summary>)?([\s\S]*?)<\/details>/gi;
13729
- ORPHAN_TAGS = /<\/?(?:details|summary)[^>]*>/gi;
13730
13778
  });
13731
13779
 
13732
13780
  // rich-send.ts
@@ -13767,7 +13815,7 @@ var init_rich_send = __esm(() => {
13767
13815
  import_grammy = __toESM(require_mod2(), 1);
13768
13816
  });
13769
13817
 
13770
- // ../node_modules/.bun/@grammyjs+runner@2.0.3+061f65c8e99495c7/node_modules/@grammyjs/runner/out/mod.js
13818
+ // ../node_modules/.bun/@grammyjs+runner@2.0.3+a732625cbf2c154c/node_modules/@grammyjs/runner/out/mod.js
13771
13819
  var require_mod4 = __commonJS((exports) => {
13772
13820
  var __createBinding = exports && exports.__createBinding || (Object.create ? function(o, m, k, k2) {
13773
13821
  if (k2 === undefined)
@@ -64970,6 +65018,11 @@ function slice(source, node2) {
64970
65018
  return source.slice(start, end);
64971
65019
  }
64972
65020
  var EXPANDABLE_MARKER_RE = /^\*\*>/;
65021
+ var TG_INLINE_ENTITY_HREFS = ["tg://emoji", "tg://time"];
65022
+ function isTgInlineEntityHref(href) {
65023
+ const h = href.toLowerCase();
65024
+ return TG_INLINE_ENTITY_HREFS.some((base) => h === base || h.startsWith(`${base}?`));
65025
+ }
64973
65026
  function markExpandableQuotes(markdown) {
64974
65027
  const expandableLineStarts = new Set;
64975
65028
  let out = "";
@@ -65021,6 +65074,14 @@ function foldInline(node2, source) {
65021
65074
  children: foldInlineChildren(node2, source),
65022
65075
  ...pos(node2)
65023
65076
  };
65077
+ case "image": {
65078
+ if (isTgInlineEntityHref(node2.url)) {
65079
+ return { type: "tg-entity", label: node2.alt ?? "", href: node2.url, ...pos(node2) };
65080
+ }
65081
+ return { type: "plain", text: slice(source, node2), ...pos(node2) };
65082
+ }
65083
+ case "footnoteReference":
65084
+ return { type: "raw", text: slice(source, node2), ...pos(node2) };
65024
65085
  default:
65025
65086
  return { type: "plain", text: slice(source, node2), ...pos(node2) };
65026
65087
  }
@@ -65136,6 +65197,12 @@ function foldBlock(node2, source, expandableLineStarts) {
65136
65197
  ...pos(node2)
65137
65198
  };
65138
65199
  }
65200
+ case "footnoteDefinition":
65201
+ return {
65202
+ type: "paragraph",
65203
+ children: [{ type: "raw", text: slice(source, node2), ...pos(node2) }],
65204
+ ...pos(node2)
65205
+ };
65139
65206
  default:
65140
65207
  return {
65141
65208
  type: "paragraph",
@@ -65157,6 +65224,9 @@ function parse2(markdown) {
65157
65224
 
65158
65225
  // render/render.ts
65159
65226
  init_format();
65227
+ function collapseLabelBreaks(label) {
65228
+ return label.replace(/[ \t]*\r?\n[ \t\r\n]*/g, " ");
65229
+ }
65160
65230
  function renderInline(node2, ctx = {}) {
65161
65231
  switch (node2.type) {
65162
65232
  case "plain":
@@ -65179,6 +65249,10 @@ function renderInline(node2, ctx = {}) {
65179
65249
  }
65180
65250
  case "link":
65181
65251
  return `[${renderInlineChildren(node2.children, ctx)}](${escapeLinkHref(node2.href)})`;
65252
+ case "tg-entity":
65253
+ return `![${escapeMarkdown(collapseLabelBreaks(node2.label))}](${escapeLinkHref(node2.href)})`;
65254
+ case "raw":
65255
+ return node2.text;
65182
65256
  default: {
65183
65257
  const _exhaustive = node2;
65184
65258
  return escapeMarkdown(_exhaustive.text ?? "");
@@ -65195,15 +65269,6 @@ function prefixLines(text4, prefix) {
65195
65269
  }
65196
65270
  function renderBlockquote(node2) {
65197
65271
  const inner = renderBlocks3(node2.children);
65198
- if (node2.expandable) {
65199
- const lines = inner.split(`
65200
- `);
65201
- return lines.map((line, i) => {
65202
- const marker = i === 0 ? "**> " : "> ";
65203
- return line.length > 0 ? `${marker}${line}` : marker.trimEnd();
65204
- }).join(`
65205
- `);
65206
- }
65207
65272
  return prefixLines(inner, "> ");
65208
65273
  }
65209
65274
  function renderCodeBlock(node2) {
@@ -79383,7 +79448,7 @@ var INLINE_SPAN_PATTERNS2 = [
79383
79448
  /\*\*[^*\n]+\*\*/g,
79384
79449
  /__[^_\n]+__/g,
79385
79450
  /(?<![\w*])_[^_\n]+_(?![\w*])/g,
79386
- /\[[^\]\n]*\]\([^)\n]*\)/g,
79451
+ /!?\[[^\]\n]*\]\([^)\n]*\)/g,
79387
79452
  /~~[^~\n]+~~/g,
79388
79453
  /\|\|[^|\n]+\|\|/g
79389
79454
  ];
@@ -104836,10 +104901,10 @@ function startOutboxSweep(deps) {
104836
104901
  }
104837
104902
 
104838
104903
  // ../src/build-info.ts
104839
- var VERSION2 = "0.21.8";
104840
- var COMMIT_SHA = "d778afb6";
104841
- var COMMIT_DATE = "2026-08-13T03:44:10Z";
104842
- var LATEST_PR = 4677;
104904
+ var VERSION2 = "0.21.9";
104905
+ var COMMIT_SHA = "08262924";
104906
+ var COMMIT_DATE = "2026-08-13T12:13:46Z";
104907
+ var LATEST_PR = 4686;
104843
104908
  var COMMITS_AHEAD_OF_TAG = 0;
104844
104909
 
104845
104910
  // gateway/boot-version.ts