Skip to content

Releases: dahai80/fusion-plugins-ecosystem

v0.4.1 — 仓库治理补丁 (Repository Hygiene Patch)

Choose a tag to compare

@dahai80 dahai80 released this 01 Sep 00:25
671be5e

v0.4.1 — 仓库治理补丁 (Repository Hygiene Patch)

本补丁版本自 v0.4.0-rc.1 起进行仓库治理收尾,无运行时代码改动(代码冻结于 RC,536 测试全绿、CI 8/8 维持)。

变更

  • Issue 清零:关闭 #13(DeskRuntime distributed_state handle)——已由 PR #22 cluster_bridge.py 落地(vRAM 跨节点账本 + 插件状态同步 + 节点心跳 failover + 5 个集群查询方法 + 9 项回归测试)。附详细修复说明评论,标注上游依赖 fusion-cowork#79 仍待 cowork 侧 handle wiring。
  • 分支清理:删除 13 个已合并的过期远程分支 + 1 个本地分支。远程现仅 origin/main,无残留。
  • 版本号0.4.0rc10.4.1(PEP 440)。

鉴定状态(沿用 RC,无回归)

维度 状态
审计 P0-P3 ✅ 全清零
测试 ✅ 536 passed
CI ✅ 8/8 green (main @ 5123e9d)
Lint + Format ✅ ruff clean, 49 files formatted
Open Issues ✅ 0
Open PRs ✅ 0
过期分支 ✅ 0

⚠️ 部署前置条件(沿用 RC,ops 侧)

  1. 多节点 CI 未覆盖(tests/test_cluster_bridge.pyimportorskip("fusion_cowork"),CI 单仓跳过)——生产前须在 monorepo 环境跑一次确认集群桥生效。
  2. Soak 实测仅 60s——生产前须 scripts/soak_mlx.py --duration 86400 跑 24h 确认无慢泄漏。

已知边界(沿用 RC)

  • 多节点 HA quorum/脑裂在 fusion-cowork 侧,本仓只桥接状态。
  • 系统级吞吐受 fusion-mlx 单引擎约束,多并发需多引擎/多节点分摊。

测试

536 passed, CI 8/8 green on main.


Full Changelog: v0.4.0-rc.1...v0.4.1

v0.4.0-rc.1 — 企业级生产发布候选 (Enterprise Release Candidate)

Choose a tag to compare

@dahai80 dahai80 released this 31 Aug 03:35
5123e9d

v0.4.0-rc.1 — 企业级生产发布候选(Enterprise Release Candidate)

本次 RC 在 v0.3.3 基础上落地完整企业级演进路线图(审计 P0-P3 全清零 + 6 步路线图全合并),代码与测试层面具备企业级生产商用发布条件。

RC 说明:代码冻结候选。发布前须 ops 补两项确认(见下方「部署前置条件」),确认后转 v0.4.0 正式版。

鉴定结论

维度 状态
审计 P0-P3 ✅ 全清零(PR #17/#24),无阻断缺陷
测试 ✅ 536 全绿,CI 8/8
企业级路线图 ✅ 6 步全合并
发布判定 代码层面具备企业级生产商用发布条件

路线图(6 步,2026-08-31)

  1. P2 收尾(PR #17)— 幂等键去重(_idempotency_key TTL 600s,防客户端断连重复副作用)+ infra_log 双流汇集(基础层错误桥接至环形缓冲,运维可查)。
  2. 可观测性(PR #19/#20)— 新增 metrics.py(Prometheus 文本暴露,纯进程内注册表零外部依赖)。计数器 plugin_executions_total/plugin_errors_total/mcp_tool_calls_total/mcp_tool_errors_total/sandbox_spawns_total;瞬时 gauge active_plugins/active_sessions/vram_used_mb。transport 未鉴权 GET /metrics 短路(text/plain; version=0.0.4),供 Prometheus/K8s scrape。493 测试,CI 8/8。
  3. 压测(PR #21)— (a) 确定性并发安全回归 tests/test_load.py(8 项入 CI):50 路并发 execute 无丢失 + max_concurrent 限流;指标 8 线程×500 inc 零竞态;token-meter 1000 条高频无丢失;沙箱 spawn 风暴 10 轮零泄漏。(b) live MLX 吞吐基准 scripts/bench_mlx_load.py:concurrency 8/16 → 6.25 req/s 持平、延迟线性涨 → 瓶颈在下游单引擎,插件层零开销。501 测试,CI 8/8。
  4. 多节点(PR #22)— 新增 cluster_bridge.py 桥接 fusion-cowork 分布式状态层。插件 enabled/disabled + vRAM 跨节点同步;节点心跳 + 失效 failover(stale 节点 evict 清理状态/vRAM)。降级语义:FUSION_CLUSTER_ENABLED 未启用或 cowork 缺失时全 no-op,单机行为不变。9 项回归测试。510 测试,CI 8/8。
  5. 长时稳定性 soak(PR #23)— (a) 确定性长时回归 tests/test_soak.py(8 项入 CI):token-meter 50k record 容量封顶、日志缓冲 10k 封顶、会话 2000 LRU 封顶、计数器 100k 单调无溢出。(b) live MLX soak scripts/soak_mlx.py(60s):23 调用,RSS 50.0→50.3MB 后半段 plateau delta 0.1MB 无泄漏,exec_total==calls,err_total=0。verdict: STABLE。518 测试,CI 8/8。
  6. P3 工程化清理(PR #24)— (a) TokenMeter WAL 追加写(JSON Lines O(batch) + 周期压缩 snapshot,seq 单调去重防崩溃恢复重复,旧版 list 向后兼容)。(b) cpu_limit 默认 0.0=不限(RLIMIT_CPU 累计秒,1.0 会 SIGXCPU 杀合法计算)。(c) 结构化 JSON 日志 logging_setup.pycorrelation_id ContextVar 全链路关联)+ SSE 队列 maxsize=256 满队丢弃不阻塞 + _enable_with_retry 仅 vRAM 暂态重试。18 项回归测试。518→536 测试,CI 8/8。

安全

  • Bearer 鉴权 + 非 loopback 绑定强制 token(FUSION_PLUGIN_AUTH_TOKEN),拒绝对外裸奔
  • API 密钥 Fernet 加密存储
  • 会话上限 LRU(256),错误响应脱敏截断(300 字符)
  • 远程传输鉴权拒绝走 stderr 收窄改动面

运维闭环

  • 看门狗心跳判死 + atexit 兜底回收(防子进程孤儿)
  • token WAL 崩溃恢复(停机 flush→单文件可恢复)
  • 结构化 JSON 日志便于 ELK/Loki 聚合

⚠️ 部署前置条件(ops 侧,非代码阻断)

  1. 多节点 CI 未覆盖tests/test_cluster_bridge.pypytest.importorskip("fusion_cowork"),CI 单仓环境无 fusion_cowork → 9 项测试静默跳过。生产前须在含 fusion_cowork 的 monorepo 环境跑一次该文件,确认集群桥真实生效(本地已验证 510 绿)。
  2. Soak 实测仅 60s生产前须运维延长 scripts/soak_mlx.py --duration 86400 跑 24h,确认无慢泄漏(second-half plateau delta 法)。

两项均为「发布前 ops 跑一次确认」,非代码缺陷。确认后转 v0.4.0 正式版。

已知边界

  • 多节点 HA 的 quorum/脑裂配置在 fusion-cowork 侧,本仓 cluster_bridge 只桥接状态,不解决分布式共识(超本仓范围)。
  • 系统级吞吐上限受 fusion-mlx 单引擎约束(吞吐 8→16 并发持平 ~6.25 req/s),多并发场景需多引擎/多节点分摊。

测试

536 passed, CI 8/8 green on main.


Full Changelog: v0.3.3...v0.4.0-rc.1

v0.3.3

Choose a tag to compare

@dahai80 dahai80 released this 07 Aug 17:10
c622561

v0.3.3 — fusion-desk → fusion-cowork 重命名 + 三个非阻断项落地

关键修复

上游底座实为 fusion-coworkimport fusion_cowork,已装 v0.2.5),不存在 fusion-desk
旧代码 try: import fusion_desk 始终失败,FUSION_DESK_AVAILABLE 恒为 False
集成处于静默降级态(隐藏的 P1 集成缺陷)。本次更正后 FUSION_COWORK_AVAILABLE=True
集成恢复。

三个非阻断项

  1. server.py 覆盖率 43% → 补 6 个冒烟测试:MCPServer start/stop 生命周期(SSE 真实启停、幂等 start、安全 stop、stdio 信号停止)+ CLI main()(argparse 启停、KeyboardInterrupt 分支)
  2. PROCESS 沙箱约束文档:CLAUDE.md 入口契约补充——PROCESS 模式下入口必须为模块级可导入属性,闭包/lambda/局部函数(<locals>)无法在子进程 importlib.import_module 导入,会在 spawn 时失败
  3. 全工程 fusion-desk 残留清理:desk_runtime.py / mcp_exporter.py / claude_gateway.py / init.py / pyproject.toml / README.md / README_CN.md / CLAUDE.md 全部 desk → cowork,DeskContext → DeskRuntime,移除已不存在的 desk_context.py / test_desk_context.py

测试稳定性

  • 修复 test_mcp_server_stdio_signal_stop 在 Linux CI 挂死:SelectorEventLoop 自身实现 add_signal_handler 遮蔽类级 patch → 改实例级 patch + wait_for 兜底
  • CI 增加 pytest-timeout --timeout=120 兜底,防止未来测试挂起阻塞 CI

验证

  • pytest tests/ -q420 passed(+6)
  • ruff check --select=F,E711,E712,E721,E741,W 无问题
  • ruff format --check 全绿
  • CI:3.11/3.12/3.13 + lint 全绿

Full Changelog: v0.3.2...v0.3.3

v0.3.2 — 生产商用发布阻断修复

Choose a tag to compare

@dahai80 dahai80 released this 07 Aug 14:34

补丁版本

修复阻断生产商用发布的全部缺陷,12 项核心特性达到生产可用标准。

P0 阻断级 — 沙箱 worker 侧

  • 入口签名对齐 inline 契约 entry(desk, params),desk 为 _DeskProxy
  • 日志改走 stdout IPC,避免 stderr PIPE 写满阻塞子进程
  • stdout 输出加锁,心跳线程与主循环不再交错

P0 阻断级 — 沙箱宿主侧

  • call() 增加单次超时,避免永久挂起
  • 进程退出/kill 时解析所有 pending future

P1 严重

  • skill_adapter.export_all 过滤条件改为 CLAUDE_SKILL
  • _transition 非法转换拒绝并抛错

P2 配置联动

  • config.sandbox_default_mode 接入 lifecycle 默认沙箱模式

测试

  • 411 passed,新增 4 个真实子进程端到端测试
  • CI/lint 全绿

🤖 Generated with Claude Code

v0.3.1

Choose a tag to compare

@dahai80 dahai80 released this 03 Aug 12:37
  • fix(#3): make fusion-desk optional with FUSION_DESK_AVAILABLE flag + graceful fallback

v0.3.0

Choose a tag to compare

@dahai80 dahai80 released this 02 Aug 13:31

v0.3.0 — Feature Completeness Release

New Features

Item Description
REG-03 Dependency topological sort — resolve_load_order() + lifecycle auto-dep loading with cycle detection
REG-04 Version conflict detection — same-id different-version rejected, same version idempotent
LIF-02 Per-plugin config — max_restart and timeout_seconds from manifest override globals
LIF-05 State query API — get_state(), list_by_state() on PluginLifecycle
C12 MCP session management — session tracking, prune, list in MCPHandler
C13 Per-plugin rate limiting — configurable rate_limit_per_minute
C14 outputSchema + mcp_annotations — on PluginManifest, surfaced in tools/list
CLD-04 Agent model selection — agent_model field on manifest for subagent routing
CLD-05 HookAdapter — maps PluginCapability → Claude Code Plugin hooks (PreToolUse/PostToolUse/Notification/Stop/SubagentStop)
CLD-07 MCP namespace — tool names use mcp__plugin__<id> convention
B12 acquire_vram resize semantics — same plugin_id replaces allocation instead of accumulating

Issues Filed

  • fusion-studio #78–84: GUI-01~07 (plugin marketplace, config panel, status monitor, token dashboard, vRAM viz, log viewer, MCP connection mgmt)

Stats

  • 407 tests passing (+36 from v0.2.0)
  • 17 files changed, 854 insertions

v0.2.0 — Architecture Compliance Refactor

Choose a tag to compare

@dahai80 dahai80 released this 02 Aug 11:58
0f11be0

What Changed

Full architecture refactoring of fusion-plugins-ecosystem based on Claude Code Plugin ecosystem deep-dive.

Phase 0: Foundation rebuild

  • Frozen PluginManifest + PluginParam (immutable, hashable)
  • PluginState state machine (REGISTERED→LOADED→ENABLED→DISABLED/CRASHED/TIMEOUT)
  • schema.py — shared enums (PluginParamType, SandboxMode, MCPAnnotations)
  • config.py validation + observer pattern

Phase 1: MCP protocol stack

  • transport.py — StdioTransport, SSETransport, HTTPTransport
  • jsonrpc.py — MCPHandler with JSON-RPC 2.0
  • server.py — MCPServer + fusion-plugin-server CLI

Phase 2: Plugin sandbox

  • sandbox.py — PluginSandbox with process isolation
  • SandboxMode: INLINE / PROCESS
  • ResourceLimits + SandboxHealth

Phase 3: Claude Code Plugin adapters

  • skill_adapter.py, agent_adapter.py, plugin_bundle.py
  • .claude-plugin/ directory generation

Phase 4: Token metering + config enhancement

  • TokenMeter persistence, EcosystemConfig new fields

Phase 5: Desk Bridge cleanup

  • desk_context.py removed (merged into desk_runtime.py)

Phase 6: Test rebuild

  • 371 tests, all passing (was 222)
  • 12 end-to-end integration flows

Cross-project

  • to_dict() serialization for Swift/TS consumers
  • fusion-desk moved to optional [desk] dependency
  • CI workflow (pytest 3.11/3.12/3.13 + ruff lint + ruff format)
  • 8 upstream/downstream GitHub issues filed

Full Changelog: v0.1.0...v0.2.0