muli-agent 2.0.0__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.
- muli_agent-2.0.0/.github/workflows/ci.yml +60 -0
- muli_agent-2.0.0/.github/workflows/release.yml +70 -0
- muli_agent-2.0.0/.gitignore +25 -0
- muli_agent-2.0.0/.python-version +1 -0
- muli_agent-2.0.0/CHANGELOG.md +64 -0
- muli_agent-2.0.0/LICENSE +21 -0
- muli_agent-2.0.0/PKG-INFO +143 -0
- muli_agent-2.0.0/README.md +122 -0
- muli_agent-2.0.0/config.json.example +451 -0
- muli_agent-2.0.0/docs/architecture.md +37 -0
- muli_agent-2.0.0/docs/attention.md +51 -0
- muli_agent-2.0.0/docs/channels.md +146 -0
- muli_agent-2.0.0/docs/chiliarch.md +171 -0
- muli_agent-2.0.0/docs/context.md +57 -0
- muli_agent-2.0.0/docs/continuous-life-design.md +37 -0
- muli_agent-2.0.0/docs/frontend.md +113 -0
- muli_agent-2.0.0/docs/iterations.md +60 -0
- muli_agent-2.0.0/docs/mcp.md +60 -0
- muli_agent-2.0.0/docs/memory.md +107 -0
- muli_agent-2.0.0/docs/notifications.md +44 -0
- muli_agent-2.0.0/docs/operations.md +73 -0
- muli_agent-2.0.0/docs/platforms.md +44 -0
- muli_agent-2.0.0/docs/providers.md +176 -0
- muli_agent-2.0.0/docs/publishing.md +11 -0
- muli_agent-2.0.0/docs/review-round-1.md +69 -0
- muli_agent-2.0.0/docs/review-v2.md +35 -0
- muli_agent-2.0.0/docs/screenshots/workbench-desktop.jpg +0 -0
- muli_agent-2.0.0/docs/screenshots/workbench-mobile.jpg +0 -0
- muli_agent-2.0.0/docs/self-management.md +40 -0
- muli_agent-2.0.0/docs/voice.md +65 -0
- muli_agent-2.0.0/docs/workflows.md +85 -0
- muli_agent-2.0.0/img/standby.png +0 -0
- muli_agent-2.0.0/main.py +12 -0
- muli_agent-2.0.0/pyproject.toml +53 -0
- muli_agent-2.0.0/scripts/check_wheel.py +90 -0
- muli_agent-2.0.0/scripts/release.py +77 -0
- muli_agent-2.0.0/src/muli/__init__.py +3 -0
- muli_agent-2.0.0/src/muli/__main__.py +118 -0
- muli_agent-2.0.0/src/muli/attachments.py +176 -0
- muli_agent-2.0.0/src/muli/attention.py +322 -0
- muli_agent-2.0.0/src/muli/auth.py +84 -0
- muli_agent-2.0.0/src/muli/capture.py +197 -0
- muli_agent-2.0.0/src/muli/channel_application.py +103 -0
- muli_agent-2.0.0/src/muli/channels/__init__.py +21 -0
- muli_agent-2.0.0/src/muli/channels/adapters.py +510 -0
- muli_agent-2.0.0/src/muli/channels/crypto.py +68 -0
- muli_agent-2.0.0/src/muli/channels/http.py +86 -0
- muli_agent-2.0.0/src/muli/channels/manager.py +756 -0
- muli_agent-2.0.0/src/muli/channels/types.py +180 -0
- muli_agent-2.0.0/src/muli/channels/weixin.py +253 -0
- muli_agent-2.0.0/src/muli/commitments.py +128 -0
- muli_agent-2.0.0/src/muli/compaction.py +316 -0
- muli_agent-2.0.0/src/muli/config.py +603 -0
- muli_agent-2.0.0/src/muli/context.py +149 -0
- muli_agent-2.0.0/src/muli/conversation.py +88 -0
- muli_agent-2.0.0/src/muli/events.py +53 -0
- muli_agent-2.0.0/src/muli/initialization.py +150 -0
- muli_agent-2.0.0/src/muli/integrations/chiliarch.py +505 -0
- muli_agent-2.0.0/src/muli/integrations/manager.py +488 -0
- muli_agent-2.0.0/src/muli/local_services.py +202 -0
- muli_agent-2.0.0/src/muli/management.py +263 -0
- muli_agent-2.0.0/src/muli/media.py +506 -0
- muli_agent-2.0.0/src/muli/memory.py +1106 -0
- muli_agent-2.0.0/src/muli/memory_application.py +160 -0
- muli_agent-2.0.0/src/muli/memory_pipeline.py +684 -0
- muli_agent-2.0.0/src/muli/memory_schema.py +78 -0
- muli_agent-2.0.0/src/muli/middleware.py +44 -0
- muli_agent-2.0.0/src/muli/notifications.py +224 -0
- muli_agent-2.0.0/src/muli/permissions.py +96 -0
- muli_agent-2.0.0/src/muli/personal_io.py +143 -0
- muli_agent-2.0.0/src/muli/platforms/__init__.py +1 -0
- muli_agent-2.0.0/src/muli/platforms/files.py +111 -0
- muli_agent-2.0.0/src/muli/platforms/restart_service.py +60 -0
- muli_agent-2.0.0/src/muli/platforms/service_runner.py +57 -0
- muli_agent-2.0.0/src/muli/plugins.py +239 -0
- muli_agent-2.0.0/src/muli/process.py +116 -0
- muli_agent-2.0.0/src/muli/prompts/system.txt +17 -0
- muli_agent-2.0.0/src/muli/providers/__init__.py +29 -0
- muli_agent-2.0.0/src/muli/providers/client.py +185 -0
- muli_agent-2.0.0/src/muli/providers/codecs.py +458 -0
- muli_agent-2.0.0/src/muli/providers/http.py +17 -0
- muli_agent-2.0.0/src/muli/providers/streaming.py +357 -0
- muli_agent-2.0.0/src/muli/providers/types.py +196 -0
- muli_agent-2.0.0/src/muli/reminders.py +140 -0
- muli_agent-2.0.0/src/muli/runtime.py +1288 -0
- muli_agent-2.0.0/src/muli/server.py +799 -0
- muli_agent-2.0.0/src/muli/service.py +385 -0
- muli_agent-2.0.0/src/muli/store.py +421 -0
- muli_agent-2.0.0/src/muli/team.py +558 -0
- muli_agent-2.0.0/src/muli/tools/__init__.py +42 -0
- muli_agent-2.0.0/src/muli/tools/atspi_helper.py +122 -0
- muli_agent-2.0.0/src/muli/tools/computer.py +164 -0
- muli_agent-2.0.0/src/muli/tools/files.py +333 -0
- muli_agent-2.0.0/src/muli/tools/mcp.py +390 -0
- muli_agent-2.0.0/src/muli/tools/web.py +181 -0
- muli_agent-2.0.0/src/muli/updates.py +139 -0
- muli_agent-2.0.0/src/muli/voice.py +610 -0
- muli_agent-2.0.0/src/muli/workflows.py +449 -0
- muli_agent-2.0.0/tests/frontend/api-docs.test.mjs +20 -0
- muli_agent-2.0.0/tests/frontend/api.test.mjs +82 -0
- muli_agent-2.0.0/tests/frontend/attachments.test.mjs +23 -0
- muli_agent-2.0.0/tests/frontend/contrast.test.mjs +28 -0
- muli_agent-2.0.0/tests/frontend/management.test.mjs +75 -0
- muli_agent-2.0.0/tests/frontend/settings.test.mjs +90 -0
- muli_agent-2.0.0/tests/frontend/state.test.mjs +197 -0
- muli_agent-2.0.0/tests/frontend/theme.test.mjs +10 -0
- muli_agent-2.0.0/tests/test_application_integrations.py +380 -0
- muli_agent-2.0.0/tests/test_attention.py +973 -0
- muli_agent-2.0.0/tests/test_auth_uploads.py +178 -0
- muli_agent-2.0.0/tests/test_capture.py +211 -0
- muli_agent-2.0.0/tests/test_channels.py +935 -0
- muli_agent-2.0.0/tests/test_chiliarch.py +397 -0
- muli_agent-2.0.0/tests/test_cli.py +80 -0
- muli_agent-2.0.0/tests/test_compaction.py +360 -0
- muli_agent-2.0.0/tests/test_config_concurrency.py +225 -0
- muli_agent-2.0.0/tests/test_context.py +310 -0
- muli_agent-2.0.0/tests/test_conversation.py +426 -0
- muli_agent-2.0.0/tests/test_documented_config.py +49 -0
- muli_agent-2.0.0/tests/test_initialization.py +116 -0
- muli_agent-2.0.0/tests/test_integration_manager.py +395 -0
- muli_agent-2.0.0/tests/test_local_services.py +99 -0
- muli_agent-2.0.0/tests/test_management.py +279 -0
- muli_agent-2.0.0/tests/test_mcp.py +319 -0
- muli_agent-2.0.0/tests/test_media.py +619 -0
- muli_agent-2.0.0/tests/test_memory.py +278 -0
- muli_agent-2.0.0/tests/test_memory_application.py +102 -0
- muli_agent-2.0.0/tests/test_memory_pipeline.py +543 -0
- muli_agent-2.0.0/tests/test_notifications.py +391 -0
- muli_agent-2.0.0/tests/test_process_cleanup.py +41 -0
- muli_agent-2.0.0/tests/test_providers.py +860 -0
- muli_agent-2.0.0/tests/test_readonly_source.py +27 -0
- muli_agent-2.0.0/tests/test_release.py +73 -0
- muli_agent-2.0.0/tests/test_reminders.py +116 -0
- muli_agent-2.0.0/tests/test_runtime.py +495 -0
- muli_agent-2.0.0/tests/test_safety.py +521 -0
- muli_agent-2.0.0/tests/test_server.py +168 -0
- muli_agent-2.0.0/tests/test_service.py +259 -0
- muli_agent-2.0.0/tests/test_store_replay.py +115 -0
- muli_agent-2.0.0/tests/test_team.py +232 -0
- muli_agent-2.0.0/tests/test_voice.py +692 -0
- muli_agent-2.0.0/tests/test_workflows.py +546 -0
- muli_agent-2.0.0/uv.lock +1430 -0
- muli_agent-2.0.0/web/api-docs.html +23 -0
- muli_agent-2.0.0/web/api-docs.mjs +138 -0
- muli_agent-2.0.0/web/api.mjs +114 -0
- muli_agent-2.0.0/web/app.mjs +1452 -0
- muli_agent-2.0.0/web/assets/mark.svg +1 -0
- muli_agent-2.0.0/web/assets/muli-avatar.svg +20 -0
- muli_agent-2.0.0/web/assets/muli-empty.svg +38 -0
- muli_agent-2.0.0/web/assets/standby.webp +0 -0
- muli_agent-2.0.0/web/attachments.mjs +21 -0
- muli_agent-2.0.0/web/index.html +61 -0
- muli_agent-2.0.0/web/management.mjs +43 -0
- muli_agent-2.0.0/web/markdown.mjs +66 -0
- muli_agent-2.0.0/web/settings.mjs +50 -0
- muli_agent-2.0.0/web/state.mjs +179 -0
- muli_agent-2.0.0/web/styles.css +581 -0
- muli_agent-2.0.0/web/theme.mjs +28 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches: [main]
|
|
5
|
+
pull_request:
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
workflow_call:
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ci-${{ github.workflow }}-${{ github.head_ref || github.ref_name }}
|
|
12
|
+
cancel-in-progress: true
|
|
13
|
+
jobs:
|
|
14
|
+
quality:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
timeout-minutes: 10
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
- uses: astral-sh/setup-uv@v6
|
|
20
|
+
with:
|
|
21
|
+
python-version: '3.13'
|
|
22
|
+
- run: uv sync --locked
|
|
23
|
+
- run: uv run ruff check .
|
|
24
|
+
- run: uv run ruff format --check .
|
|
25
|
+
- run: uv run mypy
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: '22'
|
|
29
|
+
- run: node --test tests/frontend/*.test.mjs
|
|
30
|
+
- run: uv build
|
|
31
|
+
- run: uv run python scripts/check_wheel.py
|
|
32
|
+
- uses: actions/upload-artifact@v4
|
|
33
|
+
with:
|
|
34
|
+
name: python-package
|
|
35
|
+
path: dist/*
|
|
36
|
+
tests:
|
|
37
|
+
timeout-minutes: 10
|
|
38
|
+
strategy:
|
|
39
|
+
fail-fast: false
|
|
40
|
+
matrix:
|
|
41
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
42
|
+
python: ['3.12', '3.13']
|
|
43
|
+
runs-on: ${{ matrix.os }}
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
- uses: astral-sh/setup-uv@v6
|
|
47
|
+
with:
|
|
48
|
+
python-version: ${{ matrix.python }}
|
|
49
|
+
- run: uv sync --locked
|
|
50
|
+
- run: uv run pytest -q -o faulthandler_timeout=60
|
|
51
|
+
mcp:
|
|
52
|
+
runs-on: ubuntu-latest
|
|
53
|
+
timeout-minutes: 10
|
|
54
|
+
steps:
|
|
55
|
+
- uses: actions/checkout@v4
|
|
56
|
+
- uses: astral-sh/setup-uv@v6
|
|
57
|
+
with:
|
|
58
|
+
python-version: '3.13'
|
|
59
|
+
- run: uv sync --locked --extra mcp --extra channels
|
|
60
|
+
- run: uv run --extra mcp --extra channels pytest -q -o faulthandler_timeout=60 tests/test_mcp.py tests/test_channels.py
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
tags: ['v*']
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
permissions:
|
|
7
|
+
contents: read
|
|
8
|
+
concurrency:
|
|
9
|
+
group: release-${{ github.ref }}
|
|
10
|
+
cancel-in-progress: false
|
|
11
|
+
jobs:
|
|
12
|
+
verify:
|
|
13
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
14
|
+
uses: ./.github/workflows/ci.yml
|
|
15
|
+
prepare:
|
|
16
|
+
needs: verify
|
|
17
|
+
runs-on: ubuntu-latest
|
|
18
|
+
steps:
|
|
19
|
+
- uses: actions/checkout@v4
|
|
20
|
+
with:
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
- uses: astral-sh/setup-uv@v6
|
|
23
|
+
with:
|
|
24
|
+
python-version: '3.13'
|
|
25
|
+
- uses: actions/download-artifact@v4
|
|
26
|
+
with:
|
|
27
|
+
name: python-package
|
|
28
|
+
path: dist/
|
|
29
|
+
- name: Validate the tag and exact tested distributions
|
|
30
|
+
env:
|
|
31
|
+
RELEASE_TAG: ${{ github.ref_name }}
|
|
32
|
+
run: uv run --no-project python scripts/release.py --tag "$RELEASE_TAG"
|
|
33
|
+
- uses: actions/upload-artifact@v4
|
|
34
|
+
with:
|
|
35
|
+
name: release-notes
|
|
36
|
+
path: release-notes.md
|
|
37
|
+
publish:
|
|
38
|
+
needs: prepare
|
|
39
|
+
runs-on: ubuntu-latest
|
|
40
|
+
environment:
|
|
41
|
+
name: pypi
|
|
42
|
+
url: https://pypi.org/p/muli-agent
|
|
43
|
+
permissions:
|
|
44
|
+
id-token: write
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/download-artifact@v4
|
|
47
|
+
with:
|
|
48
|
+
name: python-package
|
|
49
|
+
path: dist/
|
|
50
|
+
- name: Publish verified distributions with a short-lived OIDC credential
|
|
51
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
52
|
+
github-release:
|
|
53
|
+
needs: publish
|
|
54
|
+
runs-on: ubuntu-latest
|
|
55
|
+
permissions:
|
|
56
|
+
contents: write
|
|
57
|
+
steps:
|
|
58
|
+
- uses: actions/download-artifact@v4
|
|
59
|
+
with:
|
|
60
|
+
name: python-package
|
|
61
|
+
path: dist/
|
|
62
|
+
- uses: actions/download-artifact@v4
|
|
63
|
+
with:
|
|
64
|
+
name: release-notes
|
|
65
|
+
- name: Publish the same tested package files
|
|
66
|
+
env:
|
|
67
|
+
GH_TOKEN: ${{ github.token }}
|
|
68
|
+
GH_REPO: ${{ github.repository }}
|
|
69
|
+
RELEASE_TAG: ${{ github.ref_name }}
|
|
70
|
+
run: gh release create "$RELEASE_TAG" dist/*.whl dist/*.tar.gz --verify-tag --title "MuLi $RELEASE_TAG" --notes-file release-notes.md
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
|
|
12
|
+
*.log
|
|
13
|
+
config.json
|
|
14
|
+
history/
|
|
15
|
+
|
|
16
|
+
searxng/
|
|
17
|
+
.pytest_cache/
|
|
18
|
+
.mypy_cache/
|
|
19
|
+
.ruff_cache/
|
|
20
|
+
.coverage
|
|
21
|
+
htmlcov/
|
|
22
|
+
*.sqlite3
|
|
23
|
+
*.sqlite3-shm
|
|
24
|
+
*.sqlite3-wal
|
|
25
|
+
.muli/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
版本记录区分实际交付与历史回填;未完成验证的工作不作为发布完成的证据。
|
|
4
|
+
|
|
5
|
+
## [2.0.0] — 2026-10-20
|
|
6
|
+
|
|
7
|
+
- 修复子进程输出超限后管道背压可能阻塞回收的问题,清理时有界丢弃输出并关闭管道。
|
|
8
|
+
- 可选渠道加密依赖未安装时,仍能完成基础发行包的严格类型检查。
|
|
9
|
+
- 发行名改为 `muli-agent`,保留 `MuLi` / `muli` 命令;OIDC Trusted Publishing 复用完整 CI 的产物。
|
|
10
|
+
- 配置数据统一到 `~/MuLi`,交互初始化主模型、视觉、称呼、服务密码和只读源码参考;首次配置由主沐璃继续引导。
|
|
11
|
+
- 跨渠道稳定主会话、持久入站、消息安全边界投递、动态团队与后台分层压缩,实际参考 Codex 的生命周期实现。
|
|
12
|
+
- 原文优先的非阻塞分层 GraphRAG,规范实体、证据关系、社区、冲突、向量与重排服务、缓存和来源级遗忘。
|
|
13
|
+
- 无侧栏青瓷蓝界面、浅深主题、Q版SVG、登录门、附件上传与按需媒体读取、审批/队列恢复。
|
|
14
|
+
- 独立未完成工作账本、可验证自身配置计划、用户目录插件、启动版本检查与强制人工批准的更新入口。
|
|
15
|
+
- 可选 Telegram、OneBot/NapCat、QQ 官方机器人、微信 iLink 渠道,明确绑定主人与群、持久入站和出站账本、文件收发与不确定结果的人工重试。
|
|
16
|
+
- systemd、LaunchAgent、Windows 无窗口用户服务;交互初始化可直接进入后台运行。默认关闭的有界截图、录屏、语音唤醒与声纹命令桥接,复用 ASR/TTS 配置和统一附件库。
|
|
17
|
+
- chiliarch 0.5.0 自我介绍接入;每次连接首心跳发送用户配置的数字助手介绍。
|
|
18
|
+
- 系统注意事项收件箱将有证据的提醒、维护终态与新版通知在活动主任务结束后交给主沐璃,支持原子去重、离线持久和背压;独立只读回合不打断原任务,不继承历史渠道路由。
|
|
19
|
+
- 修复墙钟回拨的消息顺序、孙队友取消传播、等待审批时刷新丢显示、队内消息与配置重载竞态,以及热改监听地址后提前解除认证的问题。
|
|
20
|
+
- 修复单并行槽下摘要阻塞、最终回复后的摘要滞留、超额工具批次执行、渠道重投信封冲突、授权撤销竞态、语音嵌套回调取消、macOS 录屏误选音频及 Windows 自身重启问题。
|
|
21
|
+
- 修复异步 embedding/reranker 请求期间忘记或更正记忆后,旧证据重新进入结果和缓存的竞态;每次等待后核对记忆修订号,必要时返回当前本地投影。
|
|
22
|
+
- 更新保留已安装 extras,版本约束冲突会明确失败;新装插件立即进入管理清单并提示重启。高级配置、渠道发送账本、设备能力和维护计划均可在简洁设置页管理。
|
|
23
|
+
- 外部渠道、声学命令桥接与跨平台系统调用保留明确的可选依赖和验证边界;默认不启用录音、唤醒或屏幕采集,不自动下载本地模型。
|
|
24
|
+
|
|
25
|
+
## [1.0.0] — 2026-10-19
|
|
26
|
+
|
|
27
|
+
### 新增
|
|
28
|
+
|
|
29
|
+
- 本地网页管理工作台、流式会话、审批、设置、工作流、记忆和通知。
|
|
30
|
+
- Chat Completions、Responses、Anthropic 原生协议,流式与非流式、完整工具回放与有限重试。
|
|
31
|
+
- ask / auto / yolo 统一权限入口;auto 使用独立审查上下文。
|
|
32
|
+
- 有界多 agent DAG、角色模型、取消、失败传播与重启中断标记。
|
|
33
|
+
- chiliarch 原生配对、定向 SSE、持久化回执和事件驱动任务入口。
|
|
34
|
+
- SQLite 全历史记忆索引、来源、置信度、两跳关系检索、修订历史与级联忘记。
|
|
35
|
+
- 有界文件读写搜索、可恢复回收站、网页检索读取、Linux AT-SPI 电脑操作。
|
|
36
|
+
- systemd 用户服务生成与管理;可配置运行预算。
|
|
37
|
+
- 持久一次/重复提醒、停机漏期合并,无 AI 轮询。
|
|
38
|
+
- 可选 Linux 桌面通知,事件驱动、有界队列,复用已有 notify-send。
|
|
39
|
+
- 可选 MCP stdio / HTTP / SSE 工具与完整管理配置。
|
|
40
|
+
- 确定性上下文节选和原生协议回放保真,保留会话原始记录。
|
|
41
|
+
- 本地 API 文档、个人数据导出、桌面与手机布局。
|
|
42
|
+
|
|
43
|
+
### 可靠性
|
|
44
|
+
|
|
45
|
+
- 主会话与工作流未完成任务限额、共享并行、父子结果等待与取消传播。
|
|
46
|
+
- 配置变更与运行登记串行化;恢复时标记中断,不自动重做副作用。
|
|
47
|
+
- 网页地址固定防止 DNS 重绑定,文件并发串行和原子不覆盖写入。
|
|
48
|
+
- 有界子进程输出与进程组清理;AT-SPI 独立 stderr、快照时效与节点身份验证。
|
|
49
|
+
- 三协议回归、故障注入、权限/恢复测试,Ruff、严格类型检查和跨平台 CI。
|
|
50
|
+
|
|
51
|
+
### 重构
|
|
52
|
+
|
|
53
|
+
- 用显式工具注册和 src/muli 分层替代导入时自动扫描/启动。
|
|
54
|
+
- 默认依赖不再包含 Docker SDK、LangChain、OpenAI SDK、NumPy 或本地模型组件。
|
|
55
|
+
- 提示词定位为数字生命与私人助手,移除恋爱关系假设。
|
|
56
|
+
|
|
57
|
+
## [0.0.0] — 历史基线(回填)
|
|
58
|
+
|
|
59
|
+
对应重构前 6e22bf3 及其历史,不创建虚构的旧发布时间或标签。旧 pyproject 曾标记 0.1.0,本节按本次需求统一记为 v0.0.0 基线。
|
|
60
|
+
|
|
61
|
+
- Rich 终端聊天、OpenAI/DeepSeek 工具调用、JSON 会话历史及摘要压缩。
|
|
62
|
+
- FastMCP 客户端、基于模块标记的 Python 工具发现。
|
|
63
|
+
- SearXNG 搜索、Docker 命令与文件复制、天气与时间工具。
|
|
64
|
+
- 单会话原型;没有网页工作台、统一权限门、测试矩阵或服务生命周期管理。
|
muli_agent-2.0.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) [2025] [Null]
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: muli-agent
|
|
3
|
+
Version: 2.0.0
|
|
4
|
+
Summary: 沐璃:事件驱动的本地数字生命与私人多 agent 助手
|
|
5
|
+
Project-URL: Repository, https://github.com/69gg/MuLi
|
|
6
|
+
Project-URL: Documentation, https://github.com/69gg/MuLi/blob/main/README.md
|
|
7
|
+
Author-email: Null <pylindex@qq.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Requires-Python: >=3.12
|
|
11
|
+
Requires-Dist: fastapi<1,>=0.119
|
|
12
|
+
Requires-Dist: httpx<1,>=0.28
|
|
13
|
+
Requires-Dist: jsonschema<5,>=4.23
|
|
14
|
+
Requires-Dist: pydantic<3,>=2.12
|
|
15
|
+
Requires-Dist: uvicorn<1,>=0.38
|
|
16
|
+
Provides-Extra: channels
|
|
17
|
+
Requires-Dist: cryptography<48,>=43; extra == 'channels'
|
|
18
|
+
Provides-Extra: mcp
|
|
19
|
+
Requires-Dist: fastmcp<3,>=2.13; extra == 'mcp'
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
<div align="center">
|
|
23
|
+
|
|
24
|
+
# 沐璃 · MuLi
|
|
25
|
+
|
|
26
|
+
本地数字生命,与你一起把事情做好。
|
|
27
|
+
|
|
28
|
+
[](https://github.com/69gg/MuLi/actions/workflows/ci.yml)
|
|
29
|
+
[](https://www.python.org/)
|
|
30
|
+
[](LICENSE)
|
|
31
|
+
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
MuLi 是面向个人电脑的常驻助手:聊天、管理文件、搜索资料、记忆偏好、接收任务,以及让多个 agent 分工和复核。主要适配 Arch Linux 和其他 Linux;网页与核心服务支持 macOS / Windows,桌面操作和用户服务的能力按平台显示。
|
|
35
|
+
|
|
36
|
+
角色形象是十八岁的少女,定位为数字生命与本地助手,不设定恋爱关系。青瓷蓝工作台将对话放在中心,执行轨迹、审批和设置按需展开。
|
|
37
|
+
|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
## 能力
|
|
41
|
+
|
|
42
|
+
| 领域 | 当前实现 |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| 模型 | OpenAI Chat Completions、Responses、Anthropic 原生协议;流式/非流式、推理参数、工具回放、重试预算 |
|
|
45
|
+
| 协作 | 持续主身份、动态 spawn/send/wait/resume/stop 团队、依赖工作流;历史成员无固定上限,执行有资源预算 |
|
|
46
|
+
| 权限 | ask 每个工具调用询问;auto 独立审查 agent,风险操作交给用户;yolo 自动执行 |
|
|
47
|
+
| 文件 | 目录、读取、写入、精确编辑、搜索、复制、移动、可恢复回收站 |
|
|
48
|
+
| 搜索 | SearXNG / Brave / Tavily 可配服务,有限大小网页读取与来源链接 |
|
|
49
|
+
| 记忆 | 分层原文与后台提炼、关键词/embedding/关系图混合检索、reranker、来源证据、冲突修订、来源级忘记 |
|
|
50
|
+
| 电脑 | Linux AT-SPI 无障碍树、节点动作与文本编辑;可选有界截图、录屏与统一附件引用 |
|
|
51
|
+
| 渠道 | 可选 OneBot/NapCat、Telegram、QQ 官方机器人和微信 iLink;同一主身份、明确回复路由与本地文件收发 |
|
|
52
|
+
| 语音 | 默认关闭的中文声学唤醒与声纹桥接、录音参考、OpenAI 兼容 ASR/TTS;不附带本地模型 |
|
|
53
|
+
| 主动事件 | chiliarch 原生配对与 SSE 任务;持久提醒、维护结果与新版通知进入主会话,可选 Linux 桌面通知,无 AI 轮询 |
|
|
54
|
+
| 扩展 | 用户目录 Python 插件与可选 MCP;工具、提示词、模型、路由和生命周期可扩展 |
|
|
55
|
+
| 长任务 | 原始归档、后台分层压缩、协议回放、持久收件队列及未完成工作账本 |
|
|
56
|
+
| 管理 | 模型、权限、工具、目录、记忆、工作流、通知、服务状态与日志统一入口 |
|
|
57
|
+
|
|
58
|
+
## 启动
|
|
59
|
+
|
|
60
|
+
需要 Python 3.12+ 和 [uv](https://docs.astral.sh/uv/)。前端无需安装 Node 依赖或构建。默认运行不依赖 Docker、向量数据库或本地模型。
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uv tool install muli-agent
|
|
64
|
+
MuLi init
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
发行名称是 `muli-agent`,命令为 `MuLi` 或 `muli`。`init` 会询问称呼、主模型完整参数、视觉能力、监听地址和密码,然后安装当前用户的后台服务、启用登录启动并请求启动。可用 `--no-service` 跳过;`--defaults` 只创建默认配置。服务不可用时保留配置并给出 `MuLi serve` 前台启动方式。工作台默认 **http://127.0.0.1:8765**,沐璃会逐步协助配置其它能力。独立审查使用无工具上下文;工作、压缩和记忆提炼模型未单独配置时复用主模型。API key 可从环境变量读取。
|
|
68
|
+
|
|
69
|
+
默认所有内容集中在 `~/MuLi`:`config.json`、`data/`、`plugins/`、`prompts/`、`logs/` 和可选只读源码参考 `source/`。`MULI_HOME` 设置根目录,`MULI_CONFIG` / `MULI_DATA_DIR` 或 CLI `--config` / `--data-dir` 可单独覆盖。初始化不覆盖已有配置;旧路径不会被自动搬走。密钥不出现在配置读取 API;配置文件和数据库使用私人文件权限。
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
MuLi --config /path/config.json --data-dir /path/data serve --port 8766
|
|
73
|
+
MuLi doctor
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
模型连接尚未配置时,界面可用于管理,不会伪装产生模型回答。独立审查未配置或失败时,auto 转为人工审批。
|
|
77
|
+
|
|
78
|
+
QQ 官方机器人和微信 iLink 使用可选加密依赖:`uv tool install 'muli-agent[channels]'`;同时需要 MCP 时使用 `uv tool install 'muli-agent[mcp,channels]'`。默认安装不包含本地语音或 GPU 模型;平台接入方式见[渠道说明](docs/channels.md)。
|
|
79
|
+
|
|
80
|
+
## 后台服务
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
MuLi service print
|
|
84
|
+
MuLi service install
|
|
85
|
+
MuLi service enable
|
|
86
|
+
MuLi service start
|
|
87
|
+
MuLi service status
|
|
88
|
+
journalctl --user -u muli.service -f
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
也可在工作台的系统设置中安装、启动、停止、重启和启用登录启动。服务属于当前用户,不需要 root;内存、CPU 和进程数有 systemd 上限。配置修改后重启服务才能应用监听端口变化。
|
|
92
|
+
|
|
93
|
+
Linux 使用 systemd 用户服务;macOS 使用 LaunchAgent;Windows 使用当前用户计划任务及 `pythonw.exe`,不弹出命令窗口。它们通常随用户登录启动。Linux 退出登录后仍需运行时,可按系统策略启用 user lingering;MuLi 不更改系统登录策略。桌面权限与实际平台验证范围见[平台能力](docs/platforms.md)。
|
|
94
|
+
|
|
95
|
+
## 权限与资源
|
|
96
|
+
|
|
97
|
+
所有模型发起的工具调用经过同一个权限门,子 agent 继承模式,不得自行提升。工作目录列表是文件工具的访问范围;yolo 也不会取消配置的预算和工具禁用状态。shell 与桌面操作具有当前用户能力,auto 会交给用户确认;路径范围不是操作系统沙箱。
|
|
98
|
+
|
|
99
|
+
文件操作默认限于用户主目录,可在设置里修改。文件读取/写入、网页下载、命令输出、工作流节点与并行数均有上限。删除使用回收站,跨文件系统回收拒绝隐式复制大目录。重启后未完成任务标为中断,不盲目重复可能已有副作用的操作。
|
|
100
|
+
|
|
101
|
+
## 进一步阅读
|
|
102
|
+
|
|
103
|
+
- [架构与执行边界](docs/architecture.md)
|
|
104
|
+
- [模型协议与参数](docs/providers.md)
|
|
105
|
+
- [多 agent 工作流](docs/workflows.md)
|
|
106
|
+
- [上下文与长任务](docs/context.md)
|
|
107
|
+
- [个人记忆设计](docs/memory.md)
|
|
108
|
+
- [MCP 扩展](docs/mcp.md)
|
|
109
|
+
- [用户插件与自身管理](docs/self-management.md)
|
|
110
|
+
- [PyPI 与发布流程](docs/publishing.md)
|
|
111
|
+
- [桌面通知](docs/notifications.md)
|
|
112
|
+
- [系统注意事项与主会话唤醒](docs/attention.md)
|
|
113
|
+
- [chiliarch 接入](docs/chiliarch.md)
|
|
114
|
+
- [可选通讯渠道与本地文件收发](docs/channels.md)
|
|
115
|
+
- [跨平台服务、截图和录屏](docs/platforms.md)
|
|
116
|
+
- [中文唤醒与声纹桥接](docs/voice.md)
|
|
117
|
+
- [工作台交互](docs/frontend.md)
|
|
118
|
+
- [配置、迁移与运维](docs/operations.md)
|
|
119
|
+
- [迭代记录](docs/iterations.md)
|
|
120
|
+
- [版本变更](CHANGELOG.md)
|
|
121
|
+
|
|
122
|
+
## 开发与验证
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
git clone https://github.com/69gg/MuLi.git
|
|
126
|
+
cd MuLi
|
|
127
|
+
uv sync --locked
|
|
128
|
+
uv run MuLi init --no-source --no-service
|
|
129
|
+
uv run MuLi serve
|
|
130
|
+
uv run pytest -q
|
|
131
|
+
uv run ruff check .
|
|
132
|
+
uv run ruff format --check .
|
|
133
|
+
uv run mypy
|
|
134
|
+
node --test tests/frontend/*.test.mjs
|
|
135
|
+
uv build
|
|
136
|
+
uv run python scripts/check_wheel.py
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
测试使用临时目录、模拟 HTTP/SSE 与假模型,不使用真实模型额度、不点击真实桌面。CI 在 Linux、macOS、Windows 与 Python 3.12/3.13 上验证核心;操作系统特有测试按能力跳过。
|
|
140
|
+
|
|
141
|
+
协议测试通过不代表特定供应商已联调;AT-SPI 能否读取某个应用取决于桌面会话和应用的无障碍支持。参见各模块文档中的已验证边界。
|
|
142
|
+
|
|
143
|
+
旧版源代码保存在 Git 历史基线 `6e22bf3`。旧 `config.json`、历史数据及本地环境不会被启动程序自动覆盖。
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
<div align="center">
|
|
2
|
+
|
|
3
|
+
# 沐璃 · MuLi
|
|
4
|
+
|
|
5
|
+
本地数字生命,与你一起把事情做好。
|
|
6
|
+
|
|
7
|
+
[](https://github.com/69gg/MuLi/actions/workflows/ci.yml)
|
|
8
|
+
[](https://www.python.org/)
|
|
9
|
+
[](LICENSE)
|
|
10
|
+
|
|
11
|
+
</div>
|
|
12
|
+
|
|
13
|
+
MuLi 是面向个人电脑的常驻助手:聊天、管理文件、搜索资料、记忆偏好、接收任务,以及让多个 agent 分工和复核。主要适配 Arch Linux 和其他 Linux;网页与核心服务支持 macOS / Windows,桌面操作和用户服务的能力按平台显示。
|
|
14
|
+
|
|
15
|
+
角色形象是十八岁的少女,定位为数字生命与本地助手,不设定恋爱关系。青瓷蓝工作台将对话放在中心,执行轨迹、审批和设置按需展开。
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
## 能力
|
|
20
|
+
|
|
21
|
+
| 领域 | 当前实现 |
|
|
22
|
+
| --- | --- |
|
|
23
|
+
| 模型 | OpenAI Chat Completions、Responses、Anthropic 原生协议;流式/非流式、推理参数、工具回放、重试预算 |
|
|
24
|
+
| 协作 | 持续主身份、动态 spawn/send/wait/resume/stop 团队、依赖工作流;历史成员无固定上限,执行有资源预算 |
|
|
25
|
+
| 权限 | ask 每个工具调用询问;auto 独立审查 agent,风险操作交给用户;yolo 自动执行 |
|
|
26
|
+
| 文件 | 目录、读取、写入、精确编辑、搜索、复制、移动、可恢复回收站 |
|
|
27
|
+
| 搜索 | SearXNG / Brave / Tavily 可配服务,有限大小网页读取与来源链接 |
|
|
28
|
+
| 记忆 | 分层原文与后台提炼、关键词/embedding/关系图混合检索、reranker、来源证据、冲突修订、来源级忘记 |
|
|
29
|
+
| 电脑 | Linux AT-SPI 无障碍树、节点动作与文本编辑;可选有界截图、录屏与统一附件引用 |
|
|
30
|
+
| 渠道 | 可选 OneBot/NapCat、Telegram、QQ 官方机器人和微信 iLink;同一主身份、明确回复路由与本地文件收发 |
|
|
31
|
+
| 语音 | 默认关闭的中文声学唤醒与声纹桥接、录音参考、OpenAI 兼容 ASR/TTS;不附带本地模型 |
|
|
32
|
+
| 主动事件 | chiliarch 原生配对与 SSE 任务;持久提醒、维护结果与新版通知进入主会话,可选 Linux 桌面通知,无 AI 轮询 |
|
|
33
|
+
| 扩展 | 用户目录 Python 插件与可选 MCP;工具、提示词、模型、路由和生命周期可扩展 |
|
|
34
|
+
| 长任务 | 原始归档、后台分层压缩、协议回放、持久收件队列及未完成工作账本 |
|
|
35
|
+
| 管理 | 模型、权限、工具、目录、记忆、工作流、通知、服务状态与日志统一入口 |
|
|
36
|
+
|
|
37
|
+
## 启动
|
|
38
|
+
|
|
39
|
+
需要 Python 3.12+ 和 [uv](https://docs.astral.sh/uv/)。前端无需安装 Node 依赖或构建。默认运行不依赖 Docker、向量数据库或本地模型。
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
uv tool install muli-agent
|
|
43
|
+
MuLi init
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
发行名称是 `muli-agent`,命令为 `MuLi` 或 `muli`。`init` 会询问称呼、主模型完整参数、视觉能力、监听地址和密码,然后安装当前用户的后台服务、启用登录启动并请求启动。可用 `--no-service` 跳过;`--defaults` 只创建默认配置。服务不可用时保留配置并给出 `MuLi serve` 前台启动方式。工作台默认 **http://127.0.0.1:8765**,沐璃会逐步协助配置其它能力。独立审查使用无工具上下文;工作、压缩和记忆提炼模型未单独配置时复用主模型。API key 可从环境变量读取。
|
|
47
|
+
|
|
48
|
+
默认所有内容集中在 `~/MuLi`:`config.json`、`data/`、`plugins/`、`prompts/`、`logs/` 和可选只读源码参考 `source/`。`MULI_HOME` 设置根目录,`MULI_CONFIG` / `MULI_DATA_DIR` 或 CLI `--config` / `--data-dir` 可单独覆盖。初始化不覆盖已有配置;旧路径不会被自动搬走。密钥不出现在配置读取 API;配置文件和数据库使用私人文件权限。
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
MuLi --config /path/config.json --data-dir /path/data serve --port 8766
|
|
52
|
+
MuLi doctor
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
模型连接尚未配置时,界面可用于管理,不会伪装产生模型回答。独立审查未配置或失败时,auto 转为人工审批。
|
|
56
|
+
|
|
57
|
+
QQ 官方机器人和微信 iLink 使用可选加密依赖:`uv tool install 'muli-agent[channels]'`;同时需要 MCP 时使用 `uv tool install 'muli-agent[mcp,channels]'`。默认安装不包含本地语音或 GPU 模型;平台接入方式见[渠道说明](docs/channels.md)。
|
|
58
|
+
|
|
59
|
+
## 后台服务
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
MuLi service print
|
|
63
|
+
MuLi service install
|
|
64
|
+
MuLi service enable
|
|
65
|
+
MuLi service start
|
|
66
|
+
MuLi service status
|
|
67
|
+
journalctl --user -u muli.service -f
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
也可在工作台的系统设置中安装、启动、停止、重启和启用登录启动。服务属于当前用户,不需要 root;内存、CPU 和进程数有 systemd 上限。配置修改后重启服务才能应用监听端口变化。
|
|
71
|
+
|
|
72
|
+
Linux 使用 systemd 用户服务;macOS 使用 LaunchAgent;Windows 使用当前用户计划任务及 `pythonw.exe`,不弹出命令窗口。它们通常随用户登录启动。Linux 退出登录后仍需运行时,可按系统策略启用 user lingering;MuLi 不更改系统登录策略。桌面权限与实际平台验证范围见[平台能力](docs/platforms.md)。
|
|
73
|
+
|
|
74
|
+
## 权限与资源
|
|
75
|
+
|
|
76
|
+
所有模型发起的工具调用经过同一个权限门,子 agent 继承模式,不得自行提升。工作目录列表是文件工具的访问范围;yolo 也不会取消配置的预算和工具禁用状态。shell 与桌面操作具有当前用户能力,auto 会交给用户确认;路径范围不是操作系统沙箱。
|
|
77
|
+
|
|
78
|
+
文件操作默认限于用户主目录,可在设置里修改。文件读取/写入、网页下载、命令输出、工作流节点与并行数均有上限。删除使用回收站,跨文件系统回收拒绝隐式复制大目录。重启后未完成任务标为中断,不盲目重复可能已有副作用的操作。
|
|
79
|
+
|
|
80
|
+
## 进一步阅读
|
|
81
|
+
|
|
82
|
+
- [架构与执行边界](docs/architecture.md)
|
|
83
|
+
- [模型协议与参数](docs/providers.md)
|
|
84
|
+
- [多 agent 工作流](docs/workflows.md)
|
|
85
|
+
- [上下文与长任务](docs/context.md)
|
|
86
|
+
- [个人记忆设计](docs/memory.md)
|
|
87
|
+
- [MCP 扩展](docs/mcp.md)
|
|
88
|
+
- [用户插件与自身管理](docs/self-management.md)
|
|
89
|
+
- [PyPI 与发布流程](docs/publishing.md)
|
|
90
|
+
- [桌面通知](docs/notifications.md)
|
|
91
|
+
- [系统注意事项与主会话唤醒](docs/attention.md)
|
|
92
|
+
- [chiliarch 接入](docs/chiliarch.md)
|
|
93
|
+
- [可选通讯渠道与本地文件收发](docs/channels.md)
|
|
94
|
+
- [跨平台服务、截图和录屏](docs/platforms.md)
|
|
95
|
+
- [中文唤醒与声纹桥接](docs/voice.md)
|
|
96
|
+
- [工作台交互](docs/frontend.md)
|
|
97
|
+
- [配置、迁移与运维](docs/operations.md)
|
|
98
|
+
- [迭代记录](docs/iterations.md)
|
|
99
|
+
- [版本变更](CHANGELOG.md)
|
|
100
|
+
|
|
101
|
+
## 开发与验证
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
git clone https://github.com/69gg/MuLi.git
|
|
105
|
+
cd MuLi
|
|
106
|
+
uv sync --locked
|
|
107
|
+
uv run MuLi init --no-source --no-service
|
|
108
|
+
uv run MuLi serve
|
|
109
|
+
uv run pytest -q
|
|
110
|
+
uv run ruff check .
|
|
111
|
+
uv run ruff format --check .
|
|
112
|
+
uv run mypy
|
|
113
|
+
node --test tests/frontend/*.test.mjs
|
|
114
|
+
uv build
|
|
115
|
+
uv run python scripts/check_wheel.py
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
测试使用临时目录、模拟 HTTP/SSE 与假模型,不使用真实模型额度、不点击真实桌面。CI 在 Linux、macOS、Windows 与 Python 3.12/3.13 上验证核心;操作系统特有测试按能力跳过。
|
|
119
|
+
|
|
120
|
+
协议测试通过不代表特定供应商已联调;AT-SPI 能否读取某个应用取决于桌面会话和应用的无障碍支持。参见各模块文档中的已验证边界。
|
|
121
|
+
|
|
122
|
+
旧版源代码保存在 Git 历史基线 `6e22bf3`。旧 `config.json`、历史数据及本地环境不会被启动程序自动覆盖。
|