telegram-dev 0.6.0__tar.gz → 0.6.1__tar.gz

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 (72) hide show
  1. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.claude-plugin/marketplace.json +2 -2
  2. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.claude-plugin/plugin.json +1 -1
  3. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.codex-plugin/plugin.json +1 -1
  4. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.cursor-plugin/plugin.json +1 -1
  5. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/CHANGELOG.md +8 -0
  6. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/PKG-INFO +1 -1
  7. telegram_dev-0.6.1/glama.json +8 -0
  8. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/pyproject.toml +1 -1
  9. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/server.json +2 -2
  10. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/PKG-INFO +1 -1
  11. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_knowledge.py +47 -13
  12. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_knowledge.py +18 -0
  13. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/uv.lock +1 -1
  14. telegram_dev-0.6.0/glama.json +0 -4
  15. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.agents/plugins/marketplace.json +0 -0
  16. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.dockerignore +0 -0
  17. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.mcp.json +0 -0
  18. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/AGENTS.md +0 -0
  19. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/Dockerfile +0 -0
  20. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/LICENSE +0 -0
  21. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/MANIFEST.in +0 -0
  22. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/NOTICE +0 -0
  23. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/README.md +0 -0
  24. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/README.ru.md +0 -0
  25. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/icon-dark.svg +0 -0
  26. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/icon.svg +0 -0
  27. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/logo-dark.svg +0 -0
  28. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/logo.svg +0 -0
  29. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/.env.example +0 -0
  30. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/Caddyfile +0 -0
  31. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/challenges/.gitkeep +0 -0
  32. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/compose.yml +0 -0
  33. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/catalog-submissions.md +0 -0
  34. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/deployment.md +0 -0
  35. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/maintenance.md +0 -0
  36. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/privacy.md +0 -0
  37. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/runtime.md +0 -0
  38. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/support.md +0 -0
  39. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/terms.md +0 -0
  40. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/validation.md +0 -0
  41. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/scripts/check_sources.py +0 -0
  42. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/scripts/install.py +0 -0
  43. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/scripts/package_openai.py +0 -0
  44. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/setup.cfg +0 -0
  45. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/SKILL.md +0 -0
  46. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/agents/openai.yaml +0 -0
  47. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/bot-libraries.md +0 -0
  48. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/bot-operations.md +0 -0
  49. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/business-and-commerce.md +0 -0
  50. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/buttons-and-custom-emoji.md +0 -0
  51. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/client-development.md +0 -0
  52. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/feature-checks.md +0 -0
  53. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/groups-and-channels.md +0 -0
  54. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/mini-apps-and-web.md +0 -0
  55. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/surface-map.md +0 -0
  56. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/ton-and-blockchain.md +0 -0
  57. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/SOURCES.txt +0 -0
  58. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/dependency_links.txt +0 -0
  59. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/entry_points.txt +0 -0
  60. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/requires.txt +0 -0
  61. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/top_level.txt +0 -0
  62. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev_install.py +0 -0
  63. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/behavioral-cases.json +0 -0
  64. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_evals.py +0 -0
  65. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_fetch.py +0 -0
  66. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_http.py +0 -0
  67. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_install.py +0 -0
  68. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_libraries.py +0 -0
  69. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_package.py +0 -0
  70. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_refresh.py +0 -0
  71. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_sources.py +0 -0
  72. {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_ton.py +0 -0
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "telegram-dev-tools",
3
3
  "owner": {"name": "Kay0k1"},
4
- "metadata": {"description": "Independent Telegram development tools with official documentation", "version": "0.6.0"},
4
+ "metadata": {"description": "Independent Telegram development tools with official documentation", "version": "0.6.1"},
5
5
  "plugins": [
6
6
  {
7
7
  "name": "telegram-dev",
8
8
  "source": "./",
9
9
  "description": "Source-verified Telegram and TON development with official documentation search",
10
- "version": "0.6.0",
10
+ "version": "0.6.1",
11
11
  "homepage": "https://github.com/Kay0k1/telegram-dev",
12
12
  "repository": "https://github.com/Kay0k1/telegram-dev",
13
13
  "license": "MIT",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "telegram-dev",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "displayName": "Telegram Dev",
5
5
  "description": "Source-verified Telegram and TON development across Bot API, Mini Apps, MTProto, TDLib, TON Connect, Tolk and public releases. Independent project by Kay0k1.",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "telegram-dev",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Source-verified Telegram and TON development across Bot API, Mini Apps, MTProto, TDLib, TON Connect, Tolk and public release history",
5
5
  "author": {
6
6
  "name": "Kay0k1",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "telegram-dev",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "Source-verified Telegram and TON development: Bot API, Mini Apps, MTProto, TDLib, TON Connect, Tolk and public releases",
5
5
  "author": {"name": "Kay0k1"},
6
6
  "license": "MIT",
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project. Versions follow [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## [0.6.1] - 2026-11-10
6
+
7
+ ### Changed
8
+
9
+ - MCP tool definitions: every tool has a short title and a description of when to use it and what it returns; every parameter has a description, examples and limits (`limit` 1–20, `length` 100–40000, `offset` ≥ 0); `area` is a list of allowed values instead of free text.
10
+ - `glama.json` pins the Glama build spec (Python 3.14 until dependencies support 3.15).
11
+
5
12
  ## [0.6.0] - 2026-11-10
6
13
 
7
14
  ### Added
@@ -62,6 +69,7 @@ All notable changes to this project. Versions follow [Semantic Versioning](https
62
69
 
63
70
  - First public release: documentation MCP server with an on-demand local cache, agent skill, project installer for Codex, Claude Code and Cursor, and a Claude Code plugin catalog.
64
71
 
72
+ [0.6.1]: https://github.com/Kay0k1/telegram-dev/compare/v0.6.0...v0.6.1
65
73
  [0.6.0]: https://github.com/Kay0k1/telegram-dev/compare/v0.5.1...v0.6.0
66
74
  [0.5.1]: https://github.com/Kay0k1/telegram-dev/compare/v0.5.0...v0.5.1
67
75
  [0.5.0]: https://github.com/Kay0k1/telegram-dev/compare/v0.4.0...v0.5.0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: telegram-dev
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Source-grounded Telegram development skills and documentation MCP
5
5
  License-Expression: MIT
6
6
  Requires-Python: <3.15,>=3.10
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "https://glama.ai/mcp/schemas/server.json",
3
+ "maintainers": ["Kay0k1"],
4
+ "transport": "stdio",
5
+ "buildSteps": ["uv sync --frozen --python 3.14"],
6
+ "cmdArguments": ["mcp-proxy", "--", "uv", "run", "--frozen", "telegram-dev", "serve"],
7
+ "placeholderArguments": {}
8
+ }
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "telegram-dev"
7
- version = "0.6.0"
7
+ version = "0.6.1"
8
8
  description = "Source-grounded Telegram development skills and documentation MCP"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10,<3.15"
@@ -8,12 +8,12 @@
8
8
  "source": "github"
9
9
  },
10
10
  "websiteUrl": "https://github.com/Kay0k1/telegram-dev",
11
- "version": "0.6.0",
11
+ "version": "0.6.1",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "pypi",
15
15
  "identifier": "telegram-dev",
16
- "version": "0.6.0",
16
+ "version": "0.6.1",
17
17
  "runtimeHint": "uvx",
18
18
  "transport": {
19
19
  "type": "stdio"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: telegram-dev
3
- Version: 0.6.0
3
+ Version: 0.6.1
4
4
  Summary: Source-grounded Telegram development skills and documentation MCP
5
5
  License-Expression: MIT
6
6
  Requires-Python: <3.15,>=3.10
@@ -14,12 +14,14 @@ import sys
14
14
  import threading
15
15
  import time
16
16
  from datetime import datetime, timezone
17
+ from typing import Annotated, Literal
17
18
  from urllib.parse import urljoin, urlsplit, urlunsplit
18
19
 
19
20
  import httpx
20
21
  from bs4 import BeautifulSoup
21
22
  from markdownify import markdownify
22
23
  from platformdirs import user_cache_path
24
+ from pydantic import Field
23
25
 
24
26
  ROOT = Path(__file__).resolve().parent
25
27
  DB = Path(os.environ.get("TELEGRAM_KNOWLEDGE_DB", str(user_cache_path("telegram-dev") / "corpus.sqlite3")))
@@ -794,6 +796,10 @@ def document(url, offset=0, length=16000, refresh=False):
794
796
  return result
795
797
 
796
798
 
799
+ Area = Literal["", "bot-api", "mini-apps", "telegram-api", "tdlib", "releases", "product-releases", "gateway",
800
+ "web-integrations", "media-design", "ton", "ton-releases", "aiogram", "python-telegram-bot", "grammy"]
801
+
802
+
797
803
  def create_server(transport="stdio", host="127.0.0.1", port=8000):
798
804
  from mcp.server.fastmcp import FastMCP
799
805
  from mcp.server.transport_security import TransportSecuritySettings
@@ -832,27 +838,53 @@ def create_server(transport="stdio", host="127.0.0.1", port=8000):
832
838
  return JSONResponse({"status": "ok", "pages": status["pages"],
833
839
  "stale_pages": status["stale_pages"], "source_errors": len(status["errors"])})
834
840
 
835
- @server.tool(annotations=annotations)
836
- def search_telegram_docs(query: str, area: str = "", limit: int = 6) -> dict:
837
- """Search public Telegram docs, preferring exact English API symbols. Areas: bot-api, mini-apps, telegram-api, tdlib, releases, product-releases, gateway, web-integrations, media-design, ton (docs.ton.org, TON Connect, Tolk, TVM, TEPs), ton-releases, aiogram, python-telegram-bot (docs and wiki), grammy. Core Telegram docs rank first unless the query names a library (aiogram, PTB/python-telegram-bot/telegram.ext, grammY). Russian feature aliases supported for common media topics."""
841
+ @server.tool(title="Search Telegram and TON docs", annotations=annotations)
842
+ def search_telegram_docs(
843
+ query: Annotated[str, Field(min_length=1, description=(
844
+ "Exact API names or short English keywords work best, e.g. 'InlineKeyboardButton style', "
845
+ "'sendVideoNote', 'ton_proof', 'jetton transfer', 'aiogram Router callback_query'. "
846
+ "Common Russian feature words (кнопка, кружок, кошелек) are expanded automatically."))],
847
+ area: Annotated[Area, Field(description=(
848
+ "Limit results to one documentation area; empty searches all areas. Core Telegram docs rank above "
849
+ "library docs unless the query names a library."))] = "",
850
+ limit: Annotated[int, Field(ge=1, le=20, description="Maximum number of matching sections to return.")] = 6,
851
+ ) -> dict:
852
+ """Find the official documentation sections that answer a Telegram or TON development question.
853
+
854
+ Use it before writing or reviewing code that calls the Bot API, Mini Apps JS, Telegram API/MTProto, TDLib, TON Connect, Tolk contracts or the aiogram, python-telegram-bot and grammY libraries. Returns up to `limit` sections with page URL, heading, excerpt, `document_offset` and freshness. Excerpts are partial: open the page with `get_telegram_document` at `document_offset` before relying on details. Stale matching pages are re-fetched first. An empty result is not proof that a feature does not exist; if the cache is empty, the response suggests pages to fetch."""
838
855
  result = search(query, area, limit, refresh_results=True)
839
856
  if not result['results'] and coverage()['pages'] == 0:
840
857
  result['note'] = 'The cache is empty. Fetch a relevant official URL with get_telegram_document first, then search again. Suggested starts: https://core.telegram.org/bots/api ; https://core.telegram.org/api ; https://core.telegram.org/bots/webapps ; TON: https://docs.ton.org/llms.txt (index of all TON pages) ; libraries: https://docs.aiogram.dev/en/latest/ ; https://docs.python-telegram-bot.org/en/stable/ ; https://grammy.dev/sitemap.xml.'
841
858
  return result
842
859
 
843
- @server.tool(annotations=annotations)
844
- def get_telegram_document(url: str, offset: int = 0, length: int = 16000, refresh: bool = False) -> dict:
845
- """Read paginated official documentation. Missing/stale pages refresh automatically; refresh=True forces a live check. Failures preserve cached content with freshness.stale and refresh_error. Includes hash and observation date, not release date. URL fragments do not change pagination."""
860
+ @server.tool(title="Read an official documentation page", annotations=annotations)
861
+ def get_telegram_document(
862
+ url: Annotated[str, Field(description=(
863
+ "Official page URL from search results or telegram_sources, e.g. https://core.telegram.org/bots/api "
864
+ "or https://docs.ton.org/applications/ton-connect/overview. Pages outside the official sources are rejected."))],
865
+ offset: Annotated[int, Field(ge=0, description="Character offset to start from; use a search result's document_offset or the previous next_offset.")] = 0,
866
+ length: Annotated[int, Field(ge=100, le=40000, description="Number of characters to return.")] = 16000,
867
+ refresh: Annotated[bool, Field(description="Force a live check of the source even if the cached copy is fresh.")] = False,
868
+ ) -> dict:
869
+ """Read the text of an official Telegram, TON or bot-library documentation page, one window at a time.
870
+
871
+ Use it to read requirements, parameters and limits in full after search, or to load an entry page into an empty cache. Pages missing from the cache or older than the freshness limit (6 hours by default) are fetched first. Returns title, URL, Markdown `body` for the requested window, `next_offset` (null at the end), `total_characters`, content hash and freshness. If the live source fails, the cached text is returned with `freshness.stale` and `refresh_error` set. The observation date is when this installation read the page, not when Telegram changed it."""
846
872
  return document(url, offset, length, refresh)
847
873
 
848
- @server.tool(annotations=ToolAnnotations(readOnlyHint=True, destructiveHint=False, idempotentHint=True, openWorldHint=False))
874
+ @server.tool(title="Cache coverage and freshness", annotations=ToolAnnotations(readOnlyHint=True, destructiveHint=False, idempotentHint=True, openWorldHint=False))
849
875
  def telegram_corpus_status() -> dict:
850
- """Report indexed scope, coverage gaps, source errors, and last successful check. Never equate indexed pages with all Telegram knowledge."""
876
+ """Report what the local documentation cache contains and how current it is.
877
+
878
+ Use it at the start of a task or when results look incomplete. Returns page counts per area, crawl queue state, stale page count, last and oldest successful checks, refresh policy and the latest source errors. Indexed pages are not all of Telegram's knowledge: absence from the cache is not evidence that a feature does not exist."""
851
879
  return coverage()
852
880
 
853
- @server.tool(annotations=ToolAnnotations(readOnlyHint=True, destructiveHint=False, idempotentHint=True, openWorldHint=False))
854
- def telegram_document_history(url: str) -> dict:
855
- """List locally observed revisions of a source. Does not reconstruct versions predating this corpus."""
881
+ @server.tool(title="Observed revisions of a page", annotations=ToolAnnotations(readOnlyHint=True, destructiveHint=False, idempotentHint=True, openWorldHint=False))
882
+ def telegram_document_history(
883
+ url: Annotated[str, Field(description="Official page URL, the same form accepted by get_telegram_document.")],
884
+ ) -> dict:
885
+ """List the versions of a documentation page that this installation has observed, newest first.
886
+
887
+ Use it to see whether a page changed since an earlier read. Returns content hash, capture time and length for each revision. It does not reconstruct history before the page was first fetched here; for Telegram release history read the official changelogs (area `releases` or `ton-releases`)."""
856
888
  with connect() as conn:
857
889
  base = canonical(url)
858
890
  if base is None:
@@ -860,9 +892,11 @@ def create_server(transport="stdio", host="127.0.0.1", port=8000):
860
892
  target = conn.execute("SELECT target FROM aliases WHERE url=?", (base,)).fetchone()
861
893
  return {"revisions": [dict(r) for r in conn.execute("SELECT sha,captured_at,length(body) AS characters FROM revisions WHERE url=? ORDER BY captured_at DESC", (target[0] if target else base,))]}
862
894
 
863
- @server.tool(annotations=ToolAnnotations(readOnlyHint=True, destructiveHint=False, idempotentHint=True, openWorldHint=False))
895
+ @server.tool(title="Official documentation entry points", annotations=ToolAnnotations(readOnlyHint=True, destructiveHint=False, idempotentHint=True, openWorldHint=False))
864
896
  def telegram_sources() -> dict:
865
- """List configured official entrypoints by API family; use the relevant index to discover current feature pages. This is source configuration, not proof of complete cached coverage."""
897
+ """List the official entry points this server crawls, each with its documentation area.
898
+
899
+ Use it to find where to start reading for an unfamiliar area (for example the Bot API index, docs.ton.org/llms.txt or a library's docs) and pass the URL to get_telegram_document. This is the source configuration, not proof that every page below it is already cached."""
866
900
  return {"sources": [{"url": url, "area": family(url)} for url in SEEDS],
867
901
  "scope": "Entry points for discovery. Follow each official API index and schema for additional features."}
868
902
 
@@ -121,3 +121,21 @@ class CliTests(unittest.TestCase):
121
121
  with patch("builtins.print") as printed:
122
122
  k.main(["--version"])
123
123
  self.assertRegex(printed.call_args.args[0], r"^\d+\.\d+\.\d+")
124
+
125
+
126
+ class ToolDefinitionTests(unittest.TestCase):
127
+ def test_every_tool_has_a_title_and_documented_parameters(self):
128
+ async def tools():
129
+ return await k.create_server().list_tools()
130
+ with patch.dict(os.environ, {"TELEGRAM_DOC_AUTO_SYNC": "0"}):
131
+ listing = asyncio.run(tools())
132
+ self.assertEqual(len(listing), 5)
133
+ for tool in listing:
134
+ with self.subTest(tool=tool.name):
135
+ self.assertTrue(tool.title)
136
+ self.assertGreater(len(tool.description), 150)
137
+ for name, schema in tool.inputSchema.get("properties", {}).items():
138
+ self.assertTrue(schema.get("description"), name)
139
+ search = next(tool for tool in listing if tool.name == "search_telegram_docs")
140
+ areas = set(search.inputSchema["properties"]["area"]["enum"])
141
+ self.assertEqual(areas - {""}, {k.family(url) for url in k.SEEDS} | {"media-design", "gateway"})
@@ -946,7 +946,7 @@ wheels = [
946
946
 
947
947
  [[package]]
948
948
  name = "telegram-dev"
949
- version = "0.6.0"
949
+ version = "0.6.1"
950
950
  source = { editable = "." }
951
951
  dependencies = [
952
952
  { name = "beautifulsoup4" },
@@ -1,4 +0,0 @@
1
- {
2
- "$schema": "https://glama.ai/mcp/schemas/server.json",
3
- "maintainers": ["Kay0k1"]
4
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes