重构仓库目录为统一的 runtime 分层并清理历史 openclaw 残留。

本次迁移将网关/通道/工具/技能/脚本与协议资源集中到新结构,统一路径常量与脚本转发机制,减少顶层噪音并保证运行与测试行为一致。

Made-with: Cursor
This commit is contained in:
oliver 2026-04-25 01:24:23 +08:00
parent ba3836f00f
commit 4a23b715a2
498 changed files with 2760 additions and 2200 deletions

View file

@ -0,0 +1,27 @@
from .api import (
MODELSTUDIO_BASE_URL,
QWEN_36_PLUS_MODEL_ID,
QWEN_BASE_URL,
QWEN_DEFAULT_MODEL_ID,
QWEN_DEFAULT_MODEL_REF,
apply_qwen_native_streaming_usage_compat,
build_modelstudio_provider,
build_qwen_provider,
is_qwen_coding_plan_base_url,
)
from .index import build_qwen_plugin_entry, plugin_entry, register_qwen_plugin
__all__ = [
"MODELSTUDIO_BASE_URL",
"QWEN_36_PLUS_MODEL_ID",
"QWEN_BASE_URL",
"QWEN_DEFAULT_MODEL_ID",
"QWEN_DEFAULT_MODEL_REF",
"apply_qwen_native_streaming_usage_compat",
"build_modelstudio_provider",
"build_qwen_plugin_entry",
"build_qwen_provider",
"is_qwen_coding_plan_base_url",
"plugin_entry",
"register_qwen_plugin",
]

View file

@ -0,0 +1,32 @@
from __future__ import annotations
QWEN_BASE_URL = "https://dashscope.aliyuncs.com/compatible-mode/v1"
QWEN_DEFAULT_MODEL_ID = "qwen3.5-plus"
QWEN_DEFAULT_MODEL_REF = f"qwen/{QWEN_DEFAULT_MODEL_ID}"
QWEN_36_PLUS_MODEL_ID = "qwen3.6-plus"
MODELSTUDIO_BASE_URL = QWEN_BASE_URL
def is_qwen_coding_plan_base_url(base_url: str | None) -> bool:
v = str(base_url or "").lower()
return "coding." in v
def build_qwen_provider(*, base_url: str | None = None) -> dict:
return {
"id": "qwen",
"base_url": base_url or QWEN_BASE_URL,
"default_model": QWEN_DEFAULT_MODEL_ID,
}
def build_modelstudio_provider(*, base_url: str | None = None) -> dict:
return {
"id": "modelstudio",
"base_url": base_url or MODELSTUDIO_BASE_URL,
"default_model": QWEN_DEFAULT_MODEL_ID,
}
def apply_qwen_native_streaming_usage_compat(provider_config: dict) -> dict:
return dict(provider_config or {})

View file

@ -0,0 +1,23 @@
from __future__ import annotations
from .api import QWEN_BASE_URL, build_qwen_provider
from oclaw.runtime.extensions.plugin_api import PluginEntry, define_plugin_entry
PROVIDER_ID = "qwen"
def register_qwen_plugin(api) -> None:
if hasattr(api, "register_provider"):
api.register_provider(build_qwen_provider(base_url=QWEN_BASE_URL))
def build_qwen_plugin_entry() -> PluginEntry:
return define_plugin_entry(
id=PROVIDER_ID,
name="Qwen Provider",
description="Bundled Qwen Cloud provider plugin",
register=register_qwen_plugin,
)
plugin_entry = build_qwen_plugin_entry()