Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
c530489
chore(cli): ruff rewrite
Dt8333 Oct 28, 2025
8b6d235
chore(cli): add missing type annotations
Dt8333 Oct 28, 2025
ffc535f
chore(core.agent): ruff rewrite
Dt8333 Oct 28, 2025
1e59225
chore(core.agent): add missing type annotations
Dt8333 Oct 28, 2025
a60d6fe
fix(core): 重命名__dict__方法避免类型冲突
Dt8333 Oct 28, 2025
5ea6e13
chore(core.config): ruff rewrite
Dt8333 Oct 28, 2025
c414039
chore(core.config): add missing type annotations
Dt8333 Oct 28, 2025
27c815d
chore(core.convmgr): ruff rewrite
Dt8333 Oct 28, 2025
d575969
chore(core.convmgr): add missing type annotations
Dt8333 Oct 28, 2025
b17f50f
chore(core.db): ruff rewrite
Dt8333 Oct 28, 2025
504c6d8
chore(core.db): add missing type annotations
Dt8333 Oct 28, 2025
4a54442
chore(core.kb): ruff rewrite
Dt8333 Oct 28, 2025
556cf55
chore(core.kb): add missing type annotations
Dt8333 Oct 28, 2025
a6bd814
chore(core.db): ruff rewrite missing file
Dt8333 Oct 29, 2025
f0b8020
chore(core.message): ruff rewrite
Dt8333 Oct 29, 2025
ef631ee
chore(core.message): add missing type annotations
Dt8333 Oct 29, 2025
9a6dd40
chore(core.pipeline): ruff rewrite
Dt8333 Oct 29, 2025
d85a395
chore(core.pipeline): add missing type annotations
Dt8333 Oct 29, 2025
9da5d1d
chore(core.platform): ruff rewrite
Dt8333 Oct 29, 2025
b71ba19
chore(core.provider): ruff rewrite
Dt8333 Oct 30, 2025
28d70db
chore(core.star): ruff rewrite
Dt8333 Oct 30, 2025
595f766
chore(core.message): ruff rewrite
Dt8333 Oct 30, 2025
932d76d
chore(core.utils): ruff rewrite
Dt8333 Oct 30, 2025
70a9186
refactor: 为大量构造方法及相关方法添加返回类型 None 注解
Dt8333 Dec 11, 2025
39463e9
refactor: 为大量函数添加返回 None 的类型注解
Dt8333 Dec 11, 2025
8d766f0
refactor: 为 save_mcp_config 添加返回类型注解 bool
Dt8333 Dec 11, 2025
1f2a16c
refactor: 统一 typing 导入顺序并将 NoReturn 导入提前
Dt8333 Dec 11, 2025
1b564f3
refactor: 为多处函数添加返回值/参数类型注解
Dt8333 Dec 11, 2025
dc873ae
feat: 为 build_plug_list 添加 PluginInfo TypedDict 与类型注解
Dt8333 Dec 11, 2025
c0babb0
refactor: 为 display_plugins 增加参数类型注解并导入 PluginInfo
Dt8333 Dec 11, 2025
fb45af4
Merge branch 'ann-old' into chore-ann-fix
Dt8333 Dec 11, 2025
c13f5ab
style: 统一多处函数参数换行与类型注释风格
Dt8333 Dec 11, 2025
1256a66
refactor: 增强类型注解并修正 MCP 客户端与消息模型签名
Dt8333 Dec 12, 2025
ee5eb7b
fix: 统一修复 ANN 注解问题,替换 Any 为 object,完善返回类型
Dt8333 Dec 12, 2025
c5db8a4
fix: 将 KnowledgeBaseQueryTool.call 的 kwargs 标注为 object,并将 query 转为 st…
Dt8333 Dec 12, 2025
9c84007
refactor: 将多处函数参数的 Any 改为 object,统一类型注解
Dt8333 Dec 12, 2025
eda5909
fix: 让 ContentPart.__init_subclass__ 使用 Unpack[ConfigDict] 与类型检查对齐
Dt8333 Dec 17, 2025
1539a3d
refactor: 用 TypedDict+Unpack 重构 HandoffTool __init__ 参数类型
Dt8333 Dec 17, 2025
a230bbd
chore: 移除未使用的 Any 导入并整理导入依赖
Dt8333 Dec 17, 2025
3bd0555
Merge branch 'master' into chore-ann-fix
Dt8333 Dec 17, 2025
80a7e37
refactor: 使用 TypedDict+Unpack 重构 get_filtered_conversations 的 kwargs 类型
Dt8333 Dec 17, 2025
14de584
style: 在 NOT_GIVEN 与 TxResult 之间添加空行以改善可读性
Dt8333 Dec 17, 2025
8fc7f3c
fix: 兼容 Unpack 的 typing 导入
Dt8333 Dec 17, 2025
280a3ed
refactor: 将 chunk 函数改为关键字参数并加入边界处理
Dt8333 Dec 17, 2025
7f89148
fix: 调整 FixedSizeChunker.chunk 签名并实现关键字参数与边界处理
Dt8333 Dec 17, 2025
681b6d1
fix: 将 any 替换为 Any,并导入 typing 的 Any
Dt8333 Dec 17, 2025
9d0a564
fix: 更新 ToolCall.model_dump 以兼容 Pydantic v2 并移除 None 的 extra_content
Dt8333 Dec 17, 2025
4c7a16d
refactor: 统一上下文与工具类型提示为 ContextWrapper[AstrAgentContext] 与 FunctionTo…
Dt8333 Dec 17, 2025
be5e202
fix: 将 FunctionTool 的泛型由 object 改为 AstrAgentContext
Dt8333 Dec 17, 2025
3bbac61
fix: 统一 ToolExecResult 签名与输入处理,调整泛型为 AstrAgentContext
Dt8333 Dec 17, 2025
cda77fb
feat: 新增 UpdateKwargs 类型定义并完善 insert_attachment/_apply_updates 的类型注解
Dt8333 Dec 17, 2025
d6c1524
refactor: 为 RateLimiter 与 KBHelper 增加类型注解并完善返回值
Dt8333 Dec 17, 2025
74257e0
style: 为 log.py 添加参数与返回值的类型注解
Dt8333 Dec 17, 2025
61daa1e
style: 增强类型注解并规范参数签名以通过 lint
Dt8333 Dec 17, 2025
eb20e04
refactor: 使用 cast 优化上下文参数与 agent_hooks/agent_context 类型判断
Dt8333 Dec 17, 2025
21f69ee
Merge branch 'master' into chore-ann-fix
Dt8333 Jan 4, 2026
be3fcde
fix(core.provider): fix get fallback value
Dt8333 Jan 4, 2026
c15e1a7
refactor: 将 llm_response 的类型从 object 改为 LLMResponse 并导入
Dt8333 Jan 4, 2026
5a99de2
refactor: 为多处代码添加类型注解与 AsyncGenerator 返回类型
Dt8333 Jan 4, 2026
a123621
refactor: 将回调改为异步可等待并更新序列化签名及多处类型注解
Dt8333 Jan 4, 2026
cb514c6
refactor: 提升类型提示与返回类型,统一平台初始化与 webhook 签名
Dt8333 Jan 5, 2026
ea757d1
fix: 取消对 AbstractProvider 的 TypeVar 绑定,避免循环导入
Dt8333 Jan 5, 2026
8a827c2
refactor: 在 TYPE_CHECKING 时将 T 绑定为 AbstractProvider 提升类型检查
Dt8333 Jan 5, 2026
1a09de5
refactor: 为 register_star 增加泛型注解并简化 star_handler 条件
Dt8333 Jan 5, 2026
b5ce191
refactor: 为 star_handler、star_manager、updator 增加类型注解与返回类型
Dt8333 Jan 5, 2026
c2e4431
refactor: 将 PluginManager 返回类型统一为 tuple[bool, str],成功时返回空字符串
Dt8333 Jan 5, 2026
ce13afa
refactor: 为多处函数添加类型注解与返回类型
Dt8333 Jan 5, 2026
7f51e2c
refactor: 增强类型注解与函数签名,统一返回与参数类型
Dt8333 Jan 6, 2026
751ba85
Merge branch 'master' into chore-ann-fix
Dt8333 Jan 6, 2026
858db32
refactor: 去掉 **kwargs 的类型注解
Dt8333 Jan 6, 2026
5adeafc
refactor: 增强 config.py 的类型注解,添加 overload 与 Literal 支持
Dt8333 Jan 6, 2026
37b8993
refactor: 为 _expect_type 增加类型注解并导入 types,扩展 expected_type 类型
Dt8333 Jan 6, 2026
95d4db3
refactor: 为多处路由方法添加返回值类型注解
Dt8333 Jan 6, 2026
1d336a7
refactor: 统一路由返回类型为 ResponseReturnValue 并更新签名
Dt8333 Jan 6, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions astrbot/builtin_stars/astrbot/long_term_memory.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,13 @@


class LongTermMemory:
def __init__(self, acm: AstrBotConfigManager, context: star.Context):
def __init__(self, acm: AstrBotConfigManager, context: star.Context) -> None:
self.acm = acm
self.context = context
self.session_chats = defaultdict(list)
"""记录群成员的群聊记录"""

def cfg(self, event: AstrMessageEvent):
def cfg(self, event: AstrMessageEvent) -> dict:
cfg = self.context.get_config(umo=event.unified_msg_origin)
try:
max_cnt = int(cfg["provider_ltm_settings"]["group_message_max_cnt"])
Expand Down Expand Up @@ -111,7 +111,7 @@ async def need_active_reply(self, event: AstrMessageEvent) -> bool:

return False

async def handle_message(self, event: AstrMessageEvent):
async def handle_message(self, event: AstrMessageEvent) -> None:
"""仅支持群聊"""
if event.get_message_type() == MessageType.GROUP_MESSAGE:
datetime_str = datetime.datetime.now().strftime("%H:%M:%S")
Expand Down Expand Up @@ -148,7 +148,7 @@ async def handle_message(self, event: AstrMessageEvent):
if len(self.session_chats[event.unified_msg_origin]) > cfg["max_cnt"]:
self.session_chats[event.unified_msg_origin].pop(0)

async def on_req_llm(self, event: AstrMessageEvent, req: ProviderRequest):
async def on_req_llm(self, event: AstrMessageEvent, req: ProviderRequest) -> None:
"""当触发 LLM 请求前,调用此方法修改 req"""
if event.unified_msg_origin not in self.session_chats:
return
Expand All @@ -171,7 +171,9 @@ async def on_req_llm(self, event: AstrMessageEvent, req: ProviderRequest):
)
req.system_prompt += chats_str

async def after_req_llm(self, event: AstrMessageEvent, llm_resp: LLMResponse):
async def after_req_llm(
self, event: AstrMessageEvent, llm_resp: LLMResponse
) -> None:
if event.unified_msg_origin not in self.session_chats:
return

Expand Down
17 changes: 12 additions & 5 deletions astrbot/builtin_stars/astrbot/main.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import traceback
from collections.abc import AsyncGenerator

from astrbot.api import star
from astrbot.api.event import AstrMessageEvent, filter
Expand All @@ -21,14 +22,16 @@ def __init__(self, context: star.Context) -> None:

self.proc_llm_req = ProcessLLMRequest(self.context)

def ltm_enabled(self, event: AstrMessageEvent):
def ltm_enabled(self, event: AstrMessageEvent) -> bool:
ltmse = self.context.get_config(umo=event.unified_msg_origin)[
"provider_ltm_settings"
]
return ltmse["group_icl_enable"] or ltmse["active_reply"]["enable"]

@filter.platform_adapter_type(filter.PlatformAdapterType.ALL)
async def on_message(self, event: AstrMessageEvent):
async def on_message(
self, event: AstrMessageEvent
) -> AsyncGenerator[ProviderRequest, None]:
"""群聊记忆增强"""
has_image_or_plain = False
for comp in event.message_obj.message:
Expand Down Expand Up @@ -89,7 +92,9 @@ async def on_message(self, event: AstrMessageEvent):
logger.error(f"主动回复失败: {e}")

@filter.on_llm_request()
async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest):
async def decorate_llm_req(
self, event: AstrMessageEvent, req: ProviderRequest
) -> None:
"""在请求 LLM 前注入人格信息、Identifier、时间、回复内容等 System Prompt"""
await self.proc_llm_req.process_llm_request(event, req)

Expand All @@ -100,7 +105,9 @@ async def decorate_llm_req(self, event: AstrMessageEvent, req: ProviderRequest):
logger.error(f"ltm: {e}")

@filter.on_llm_response()
async def record_llm_resp_to_ltm(self, event: AstrMessageEvent, resp: LLMResponse):
async def record_llm_resp_to_ltm(
self, event: AstrMessageEvent, resp: LLMResponse
) -> None:
"""在 LLM 响应后记录对话"""
if self.ltm and self.ltm_enabled(event):
try:
Expand All @@ -109,7 +116,7 @@ async def record_llm_resp_to_ltm(self, event: AstrMessageEvent, resp: LLMRespons
logger.error(f"ltm: {e}")

@filter.after_message_sent()
async def after_message_sent(self, event: AstrMessageEvent):
async def after_message_sent(self, event: AstrMessageEvent) -> None:
"""消息发送后处理"""
if self.ltm and self.ltm_enabled(event):
try:
Expand Down
10 changes: 6 additions & 4 deletions astrbot/builtin_stars/astrbot/process_llm_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@


class ProcessLLMRequest:
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.ctx = context
cfg = context.get_config()
self.timezone = cfg.get("timezone")
Expand All @@ -22,7 +22,7 @@ def __init__(self, context: star.Context):
else:
logger.info(f"Timezone set to: {self.timezone}")

async def _ensure_persona(self, req: ProviderRequest, cfg: dict, umo: str):
async def _ensure_persona(self, req: ProviderRequest, cfg: dict, umo: str) -> None:
"""确保用户人格已加载"""
if not req.conversation:
return
Expand Down Expand Up @@ -78,7 +78,7 @@ async def _ensure_img_caption(
req: ProviderRequest,
cfg: dict,
img_cap_prov_id: str,
):
) -> None:
try:
caption = await self._request_img_caption(
img_cap_prov_id,
Expand Down Expand Up @@ -118,7 +118,9 @@ async def _request_img_caption(
f"Cannot get image caption because provider `{provider_id}` is not exist.",
)

async def process_llm_request(self, event: AstrMessageEvent, req: ProviderRequest):
async def process_llm_request(
self, event: AstrMessageEvent, req: ProviderRequest
) -> None:
"""在请求 LLM 前注入人格信息、Identifier、时间、回复内容等 System Prompt"""
cfg: dict = self.ctx.get_config(umo=event.unified_msg_origin)[
"provider_settings"
Expand Down
12 changes: 6 additions & 6 deletions astrbot/builtin_stars/builtin_commands/commands/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@


class AdminCommands:
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.context = context

async def op(self, event: AstrMessageEvent, admin_id: str = ""):
async def op(self, event: AstrMessageEvent, admin_id: str = "") -> None:
"""授权管理员。op <admin_id>"""
if not admin_id:
event.set_result(
Expand All @@ -21,7 +21,7 @@ async def op(self, event: AstrMessageEvent, admin_id: str = ""):
self.context.get_config().save_config()
event.set_result(MessageEventResult().message("授权成功。"))

async def deop(self, event: AstrMessageEvent, admin_id: str = ""):
async def deop(self, event: AstrMessageEvent, admin_id: str = "") -> None:
"""取消授权管理员。deop <admin_id>"""
if not admin_id:
event.set_result(
Expand All @@ -39,7 +39,7 @@ async def deop(self, event: AstrMessageEvent, admin_id: str = ""):
MessageEventResult().message("此用户 ID 不在管理员名单内。"),
)

async def wl(self, event: AstrMessageEvent, sid: str = ""):
async def wl(self, event: AstrMessageEvent, sid: str = "") -> None:
"""添加白名单。wl <sid>"""
if not sid:
event.set_result(
Expand All @@ -53,7 +53,7 @@ async def wl(self, event: AstrMessageEvent, sid: str = ""):
cfg.save_config()
event.set_result(MessageEventResult().message("添加白名单成功。"))

async def dwl(self, event: AstrMessageEvent, sid: str = ""):
async def dwl(self, event: AstrMessageEvent, sid: str = "") -> None:
"""删除白名单。dwl <sid>"""
if not sid:
event.set_result(
Expand All @@ -70,7 +70,7 @@ async def dwl(self, event: AstrMessageEvent, sid: str = ""):
except ValueError:
event.set_result(MessageEventResult().message("此 SID 不在白名单内。"))

async def update_dashboard(self, event: AstrMessageEvent):
async def update_dashboard(self, event: AstrMessageEvent) -> None:
"""更新管理面板"""
await event.send(MessageChain().message("正在尝试更新管理面板..."))
await download_dashboard(version=f"v{VERSION}", latest=False)
Expand Down
6 changes: 3 additions & 3 deletions astrbot/builtin_stars/builtin_commands/commands/alter_cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@


class AlterCmdCommands(CommandParserMixin):
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.context = context

async def update_reset_permission(self, scene_key: str, perm_type: str):
async def update_reset_permission(self, scene_key: str, perm_type: str) -> None:
"""更新reset命令在特定场景下的权限设置"""
from astrbot.api import sp

Expand All @@ -26,7 +26,7 @@ async def update_reset_permission(self, scene_key: str, perm_type: str):
alter_cmd_cfg["astrbot"] = plugin_cfg
await sp.global_put("alter_cmd", alter_cmd_cfg)

async def alter_cmd(self, event: AstrMessageEvent):
async def alter_cmd(self, event: AstrMessageEvent) -> None:
token = self.parse_commands(event.message_str)
if token.len < 3:
await event.send(
Expand Down
20 changes: 10 additions & 10 deletions astrbot/builtin_stars/builtin_commands/commands/conversation.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@


class ConversationCommands:
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.context = context

async def _get_current_persona_id(self, session_id):
async def _get_current_persona_id(self, session_id: str) -> str | None:
curr = await self.context.conversation_manager.get_curr_conversation_id(
session_id,
)
Expand All @@ -33,7 +33,7 @@ async def _get_current_persona_id(self, session_id):
return None
return conv.persona_id

async def reset(self, message: AstrMessageEvent):
async def reset(self, message: AstrMessageEvent) -> None:
"""重置 LLM 会话"""
umo = message.unified_msg_origin
cfg = self.context.get_config(umo=message.unified_msg_origin)
Expand Down Expand Up @@ -98,7 +98,7 @@ async def reset(self, message: AstrMessageEvent):

message.set_result(MessageEventResult().message(ret))

async def his(self, message: AstrMessageEvent, page: int = 1):
async def his(self, message: AstrMessageEvent, page: int = 1) -> None:
"""查看对话记录"""
if not self.context.get_using_provider(message.unified_msg_origin):
message.set_result(
Expand Down Expand Up @@ -141,7 +141,7 @@ async def his(self, message: AstrMessageEvent, page: int = 1):

message.set_result(MessageEventResult().message(ret).use_t2i(False))

async def convs(self, message: AstrMessageEvent, page: int = 1):
async def convs(self, message: AstrMessageEvent, page: int = 1) -> None:
"""查看对话列表"""
cfg = self.context.get_config(umo=message.unified_msg_origin)
agent_runner_type = cfg["provider_settings"]["agent_runner_type"]
Expand Down Expand Up @@ -216,7 +216,7 @@ async def convs(self, message: AstrMessageEvent, page: int = 1):
message.set_result(MessageEventResult().message(ret).use_t2i(False))
return

async def new_conv(self, message: AstrMessageEvent):
async def new_conv(self, message: AstrMessageEvent) -> None:
"""创建新对话"""
cfg = self.context.get_config(umo=message.unified_msg_origin)
agent_runner_type = cfg["provider_settings"]["agent_runner_type"]
Expand All @@ -242,7 +242,7 @@ async def new_conv(self, message: AstrMessageEvent):
MessageEventResult().message(f"切换到新对话: 新对话({cid[:4]})。"),
)

async def groupnew_conv(self, message: AstrMessageEvent, sid: str = ""):
async def groupnew_conv(self, message: AstrMessageEvent, sid: str = "") -> None:
"""创建新群聊对话"""
if sid:
session = str(
Expand Down Expand Up @@ -273,7 +273,7 @@ async def switch_conv(
self,
message: AstrMessageEvent,
index: int | None = None,
):
) -> None:
"""通过 /ls 前面的序号切换对话"""
if not isinstance(index, int):
message.set_result(
Expand Down Expand Up @@ -308,7 +308,7 @@ async def switch_conv(
),
)

async def rename_conv(self, message: AstrMessageEvent, new_name: str = ""):
async def rename_conv(self, message: AstrMessageEvent, new_name: str = "") -> None:
"""重命名对话"""
if not new_name:
message.set_result(MessageEventResult().message("请输入新的对话名称。"))
Expand All @@ -319,7 +319,7 @@ async def rename_conv(self, message: AstrMessageEvent, new_name: str = ""):
)
message.set_result(MessageEventResult().message("重命名对话成功。"))

async def del_conv(self, message: AstrMessageEvent):
async def del_conv(self, message: AstrMessageEvent) -> None:
"""删除当前对话"""
cfg = self.context.get_config(umo=message.unified_msg_origin)
is_unique_session = cfg["platform_settings"]["unique_session"]
Expand Down
8 changes: 4 additions & 4 deletions astrbot/builtin_stars/builtin_commands/commands/help.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@


class HelpCommand:
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.context = context

async def _query_astrbot_notice(self):
async def _query_astrbot_notice(self) -> str:
try:
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get(
Expand All @@ -34,7 +34,7 @@ async def _build_reserved_command_lines(self) -> list[str]:
lines: list[str] = []
hidden_commands = {"set", "unset", "websearch"}

def walk(items: list[dict], indent: int = 0):
def walk(items: list[dict], indent: int = 0) -> None:
for item in items:
if not item.get("reserved") or not item.get("enabled"):
continue
Expand Down Expand Up @@ -62,7 +62,7 @@ def walk(items: list[dict], indent: int = 0):
walk(commands)
return lines

async def help(self, event: AstrMessageEvent):
async def help(self, event: AstrMessageEvent) -> None:
"""查看帮助"""
notice = ""
try:
Expand Down
4 changes: 2 additions & 2 deletions astrbot/builtin_stars/builtin_commands/commands/llm.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@


class LLMCommands:
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.context = context

async def llm(self, event: AstrMessageEvent):
async def llm(self, event: AstrMessageEvent) -> None:
"""开启/关闭 LLM"""
cfg = self.context.get_config(umo=event.unified_msg_origin)
enable = cfg["provider_settings"].get("enable", True)
Expand Down
4 changes: 2 additions & 2 deletions astrbot/builtin_stars/builtin_commands/commands/persona.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@


class PersonaCommands:
def __init__(self, context: star.Context):
def __init__(self, context: star.Context) -> None:
self.context = context

async def persona(self, message: AstrMessageEvent):
async def persona(self, message: AstrMessageEvent) -> None:
l = message.message_str.split(" ") # noqa: E741
umo = message.unified_msg_origin

Expand Down
Loading