新增 ProcessManager 子系统 + 5 个 worker 执行面工具 (bg_run/bg_write/bg_list/bg_output/bg_kill),弥补 run_command 同步阻塞、超时即杀的不足;run_command 原路径零改动。 - 生命周期三决策:用户中断不影响后台进程;aibox 退出经 atexit 收尾(非 detach 全杀,detach=true 豁免);注册表跨会话/跨子代理 全局共享 - 交互式 I/O:stdin 管道 + watermark 写读对齐(bg_output(since= watermark) 必然且仅为本条输入的响应);wait_lines expect 式同步 等待;写入 watchdog 线程兜底防管道写满阻塞 - 输出缓冲:每进程 256KB 环形缓冲(单行截断 16KB);log_file=true 同步 tee 无界全档,可被原生工具 tail/cat 读取 - 三级优雅终止:关 stdin → SIGTERM 宽限 → SIGKILL 兜底 - 安全边界:运行上限 16/条目上限 32/单次写入 64KB;background_ processes 配置节双闸;proc_name 规整规避 execute_tool 首参撞名 - 测试:test_process_manager.py 39 项(生命周期/游标续读/环形淘汰/ watermark 对齐/EOF 优雅终止/log tee/工具分发),全量 532 passed / 4 failed(平台环境项,与基线一致)零回归
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
"""
|
||
subsystems - aibox 子系统模块(包)
|
||
|
||
抽离自 aibox.py 的基础设施子系统,按职责分文件。
|
||
当前包含(Wave 1):
|
||
- executors.py : CommandExecutor + SubprocessCommandExecutor
|
||
- prompt_manager.py : PromptManager(单例)
|
||
- db.py : MemoryDatabase + MemoDatabase
|
||
- skill_manager.py : SkillManager
|
||
Wave 2:
|
||
- conversation_history.py : ConversationHistory(对话历史管理)
|
||
- conversation_compressor.py : ConversationCompressor(对话压缩,注入 llm_client)
|
||
|
||
依赖方向:common <- subsystems <- aibox
|
||
不反向依赖 aibox 任何符号。
|
||
|
||
采用"重导出"策略:外部统一用 `from subsystems import MemoryDatabase`,
|
||
调用点无需关心具体子模块所在文件。
|
||
"""
|
||
|
||
from .executors import CommandExecutor, SubprocessCommandExecutor
|
||
from .prompt_manager import PromptManager
|
||
from .db import MemoryDatabase, MemoDatabase
|
||
from .skill_manager import SkillManager
|
||
from .conversation_history import ConversationHistory
|
||
from .conversation_compressor import ConversationCompressor
|
||
from .process_manager import (
|
||
ProcessManager,
|
||
get_process_manager,
|
||
reset_process_manager,
|
||
)
|
||
|
||
__all__ = [
|
||
"CommandExecutor",
|
||
"SubprocessCommandExecutor",
|
||
"PromptManager",
|
||
"MemoryDatabase",
|
||
"MemoDatabase",
|
||
"SkillManager",
|
||
"ConversationHistory",
|
||
"ConversationCompressor",
|
||
"ProcessManager",
|
||
"get_process_manager",
|
||
"reset_process_manager",
|
||
]
|