refactor(channels): make built-in channels self-contained (#4908)

* refactor(channels): own setup and instance contracts

* refactor(channels): isolate management contracts

* refactor(channels): normalize activation contracts

* fix(channels): enforce management contracts

* refactor(channels): finish setup ownership migration

* fix(channels): harden management contracts

* fix(channels): enforce lazy loading and runtime ownership

* fix(feishu): make multi-instance startup idempotent

* fix(webui): render channel setup contracts cleanly

* fix(feishu): stop websocket clients cleanly

* fix(channels): enforce persistence and activation gates

* fix(channels): preserve global feature action scope

* fix(channels): apply defaults for single plugins

* fix(channels): enforce management contract boundaries

* refactor(feishu): remove identity helper indirection

* fix(channels): preserve management setup contracts

* refactor(channels): generalize instance settings UI

* refactor(channels): package channel plugins with web UI metadata

* refactor(channels): make built-ins self-contained packages

* test(channels): colocate tests with channel packages

* fix(dingtalk): use official brand icon

* feat(channels): colocate webui translations

* docs(channels): clarify plugin ownership

* test(exec): remove output wait race

* refactor(channels): unify plugin descriptors

* fix(channels): enforce descriptor-owned contracts

* refactor(channels): finish package-owned plugin setup

* refactor(channels): use repository-owned packages only

* fix(channels): self-describe dependencies and runtime state

* fix(channels): warn about legacy entry points
This commit is contained in:
chengyongru
2026-07-19 23:30:49 +08:00
committed by GitHub
parent 7aaac37bca
commit 462a0dfb0f
388 changed files with 17093 additions and 5110 deletions
+4 -54
View File
@@ -67,9 +67,6 @@ azure = [
bedrock = [
"boto3>=1.43.0",
]
dingtalk = [
"dingtalk-stream>=0.24.0,<1.0.0",
]
documents = [
# Compatibility extra: document readers are bundled since v0.2.3.
"defusedxml>=0.7.1,<1.0.0",
@@ -78,56 +75,6 @@ documents = [
"openpyxl>=3.1.0,<4.0.0",
"python-pptx>=1.0.0,<2.0.0",
]
feishu = [
"lark-oapi>=1.5.0,<2.0.0",
]
mochat = [
"python-socketio>=5.16.0,<6.0.0",
"msgpack>=1.1.0,<2.0.0",
]
napcat = [
"aiohttp>=3.9.0,<4.0.0",
]
qq = [
"aiohttp>=3.9.0,<4.0.0",
"qq-botpy>=1.2.0,<2.0.0",
]
slack = [
"aiohttp>=3.9.0,<4.0.0",
"slack-sdk>=3.39.0,<4.0.0",
"slackify-markdown>=0.2.0,<1.0.0",
]
telegram = [
"python-telegram-bot[socks,webhooks]>=22.6,<23.0",
"socksio>=1.0.0,<2.0.0",
"python-socks[asyncio]>=2.8.0,<3.0.0; sys_platform != 'win32'",
]
wecom = [
"wecom-aibot-sdk-python>=0.1.5",
]
weixin = [
"qrcode[pil]>=8.0",
"pycryptodome>=3.20.0",
]
msteams = [
"PyJWT>=2.0,<3.0",
"cryptography>=41.0",
]
matrix = [
"matrix-nio[e2e]>=0.25.2; sys_platform != 'win32'",
"matrix-nio>=0.25.2; sys_platform == 'win32'",
"aiohttp>=3.9.0,<4.0.0",
"mistune>=3.0.0,<4.0.0",
"nh3>=0.2.17,<1.0.0",
]
discord = [
"discord.py>=2.5.2,<3.0.0",
]
whatsapp = [
"neonize>=0.3.18.post0,<0.4.0",
"segno>=1.6.1,<2.0.0",
]
langfuse = [
"langfuse>=3.0.0,<4.0.0",
]
@@ -177,6 +124,7 @@ include = [
"nanobot/templates/**/*.md",
"nanobot/skills/**/*.md",
"nanobot/skills/**/*.sh",
"nanobot/channels/*/webui/**/*",
"nanobot/web/dist/**/*",
]
# nanobot/web/dist/ is produced by `cd webui && bun run build` and is
@@ -188,6 +136,7 @@ artifacts = [
[tool.hatch.build.targets.wheel]
packages = ["nanobot"]
exclude = ["nanobot/channels/*/tests/**"]
[tool.hatch.build.targets.wheel.sources]
"nanobot" = "nanobot"
@@ -202,6 +151,7 @@ include = [
"THIRD_PARTY_NOTICES.md",
"pyproject.toml",
]
exclude = ["nanobot/channels/*/tests/**"]
[tool.ruff]
line-length = 100
@@ -213,7 +163,7 @@ ignore = ["E501"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
testpaths = ["tests"]
testpaths = ["tests", "nanobot/channels"]
[tool.coverage.run]
source = ["nanobot"]