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.
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.claude-plugin/marketplace.json +2 -2
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.claude-plugin/plugin.json +1 -1
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.codex-plugin/plugin.json +1 -1
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.cursor-plugin/plugin.json +1 -1
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/CHANGELOG.md +8 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/PKG-INFO +1 -1
- telegram_dev-0.6.1/glama.json +8 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/pyproject.toml +1 -1
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/server.json +2 -2
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/PKG-INFO +1 -1
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_knowledge.py +47 -13
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_knowledge.py +18 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/uv.lock +1 -1
- telegram_dev-0.6.0/glama.json +0 -4
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.agents/plugins/marketplace.json +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.dockerignore +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/.mcp.json +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/AGENTS.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/Dockerfile +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/LICENSE +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/MANIFEST.in +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/NOTICE +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/README.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/README.ru.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/icon-dark.svg +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/icon.svg +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/logo-dark.svg +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/assets/logo.svg +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/.env.example +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/Caddyfile +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/challenges/.gitkeep +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/deploy/compose.yml +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/catalog-submissions.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/deployment.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/maintenance.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/privacy.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/runtime.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/support.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/terms.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/docs/validation.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/scripts/check_sources.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/scripts/install.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/scripts/package_openai.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/setup.cfg +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/SKILL.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/agents/openai.yaml +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/bot-libraries.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/bot-operations.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/business-and-commerce.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/buttons-and-custom-emoji.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/client-development.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/feature-checks.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/groups-and-channels.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/mini-apps-and-web.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/surface-map.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/ton-and-blockchain.md +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/SOURCES.txt +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/dependency_links.txt +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/entry_points.txt +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/requires.txt +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev.egg-info/top_level.txt +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/telegram_dev_install.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/behavioral-cases.json +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_evals.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_fetch.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_http.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_install.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_libraries.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_package.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_refresh.py +0 -0
- {telegram_dev-0.6.0 → telegram_dev-0.6.1}/tests/test_sources.py +0 -0
- {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.
|
|
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.
|
|
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.
|
|
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": {
|
|
@@ -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
|
|
@@ -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
|
+
}
|
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
"source": "github"
|
|
9
9
|
},
|
|
10
10
|
"websiteUrl": "https://github.com/Kay0k1/telegram-dev",
|
|
11
|
-
"version": "0.6.
|
|
11
|
+
"version": "0.6.1",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "pypi",
|
|
15
15
|
"identifier": "telegram-dev",
|
|
16
|
-
"version": "0.6.
|
|
16
|
+
"version": "0.6.1",
|
|
17
17
|
"runtimeHint": "uvx",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
@@ -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(
|
|
837
|
-
|
|
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(
|
|
845
|
-
|
|
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
|
|
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(
|
|
855
|
-
|
|
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
|
|
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"})
|
telegram_dev-0.6.0/glama.json
DELETED
|
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
|
|
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
|
|
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
|
|
File without changes
|
{telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/business-and-commerce.md
RENAMED
|
File without changes
|
{telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/buttons-and-custom-emoji.md
RENAMED
|
File without changes
|
{telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/client-development.md
RENAMED
|
File without changes
|
|
File without changes
|
{telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/groups-and-channels.md
RENAMED
|
File without changes
|
{telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/mini-apps-and-web.md
RENAMED
|
File without changes
|
|
File without changes
|
{telegram_dev-0.6.0 → telegram_dev-0.6.1}/skills/telegram-dev/references/ton-and-blockchain.md
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|