🔄 卡若AI 同步 2026-04-28 16:10 | 更新:总索引与入口、金仓、卡木、运营中枢工作台 | 排除 >20MB: 43 个
This commit is contained in:
31
.gitignore
vendored
31
.gitignore
vendored
@@ -105,10 +105,39 @@ _大文件外置/财务管理_data/chat.snapshot_收集.db
|
||||
01_卡资(金)/金仓_存储备份/服务器管理/scripts/.venv_aliyun_dns/lib/python3.14/site-packages/cryptography/hazmat/bindings/_rust.abi3.so
|
||||
01_卡资(金)/金仓_存储备份/服务器管理/scripts/.venv_tat/lib/python3.14/site-packages/cryptography/hazmat/bindings/_rust.abi3.so
|
||||
01_卡资(金)/金仓_存储备份/聊天记录管理/日志/chat_sync_incremental.log
|
||||
03_卡木(木)/木叶_视频内容/AutoClip/.git/objects/pack/pack-70a3b297686d837b3fcbc11a649a49aba88a5321.pack
|
||||
03_卡木(木)/木叶_视频内容/AutoClip/data/projects/3eb11260-ae24-4b35-9363-69f9b063f91d/raw/input.mp4
|
||||
03_卡木(木)/木叶_视频内容/AutoClip/data/projects/684757e6-ca47-48d1-b5a8-ac8434f0daa9/raw/input.mp4
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/.git/objects/pack/pack-da92ddd64a7b00fb9646d8028157b06db20d432a.pack
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait/base_models/motion_extractor.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait/base_models/spade_generator.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait/base_models/warping_module.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait/landmark.onnx
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/base_models/motion_extractor.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/base_models/spade_generator.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/base_models/warping_module.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/base_models_v1.1/motion_extractor.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/base_models_v1.1/spade_generator.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/base_models_v1.1/warping_module.pth
|
||||
03_卡木(木)/木叶_视频内容/本地_LivePortrait/pretrained_weights/liveportrait_animals/xpose.pth
|
||||
03_卡木(木)/木叶_视频内容/视频切片.zip
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/node_modules/.cache/webpack/remotion-production-4.0.427/a233e9cccba253c3b0157f54cad843b8/0.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/node_modules/.cache/webpack/remotion-production-4.0.427/2d7789a587366d4de1d7934058623192/0.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/node_modules/.cache/webpack/remotion-production-4.0.438/1c992637525ba0d1715ad818fed6b161/0.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/node_modules/.cache/webpack/remotion-production-4.0.438/1c992637525ba0d1715ad818fed6b161/1.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/node_modules/.remotion/chrome-headless-shell/mac-x64/chrome-headless-shell-mac-x64/chrome-headless-shell
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/node_modules/@rspack/binding-darwin-x64/rspack.darwin-x64.node
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/public/v3_inputs_300s/soul146_01.mp4
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/public/v3_inputs_300s/soul146_06.mp4
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/public/v3_inputs_300s/soul146_13.mp4
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/public/v3_inputs_300s/soul146_14.mp4
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/10秒视频/public/v3_inputs_300s/soul146_28.mp4
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/assets/fonts/NotoSerifCJKsc-Bold.otf
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/node_modules/.cache/webpack/remotion-development-4.0.438/017aca0a37345bef08c53faacd322597/0.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/node_modules/.cache/webpack/remotion-development-4.0.438/996b7ed73dc3ed0da8f32169d9229738/0.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/node_modules/.cache/webpack/remotion-development-4.0.438/996b7ed73dc3ed0da8f32169d9229738/3.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/node_modules/.cache/webpack/remotion-production-4.0.438/71a4eb822c0d73cd9a7e39902252f155/0.pack
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/node_modules/.remotion/chrome-headless-shell/mac-x64/chrome-headless-shell-mac-x64/chrome-headless-shell
|
||||
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer/node_modules/@rspack/binding-darwin-x64/rspack.darwin-x64.node
|
||||
03_卡木(木)/木果_项目模板/PPT制作/.venv/lib/python3.14/site-packages/playwright/driver/node
|
||||
03_卡木(木)/木果_项目模板/PPT制作/脚本/.venv_ppt/lib/python3.14/site-packages/playwright/driver/node
|
||||
# === 自动排除结束 ===
|
||||
|
||||
@@ -1,7 +1,47 @@
|
||||
{
|
||||
"updated": "2026-04-02T11:38:23.145048+00:00",
|
||||
"updated": "2026-04-28T06:02:00.312488+00:00",
|
||||
"conversations": [
|
||||
{
|
||||
"对话ID": "557be7c6-b260-4896-ae6a-947776bfeb28",
|
||||
"名称": "腾讯云 API 获取",
|
||||
"项目": "卡若AI",
|
||||
"首条消息": "给我腾讯云的api。找卡若ai拿",
|
||||
"创建时间": "2026-04-28T04:58:07.470000+00:00",
|
||||
"消息数量": 17
|
||||
},
|
||||
{
|
||||
"对话ID": "cedc944e-d5c5-49d2-ba87-a9f25556a59f",
|
||||
"名称": "Xmind 应用损坏问题",
|
||||
"项目": "未分类",
|
||||
"首条消息": "/Applications/Xmind.app 继续处理",
|
||||
"创建时间": "2026-04-28T04:43:19.759000+00:00",
|
||||
"消息数量": 2
|
||||
},
|
||||
{
|
||||
"对话ID": "b3db4335-7766-4dc4-a798-4b942094d825",
|
||||
"名称": "AI skills and Apple color packaging",
|
||||
"项目": "未分类",
|
||||
"首条消息": "把卡路AI相应的Skills包括V0 V0以及苹果的配色的相应的 的内容相应的skill帮我 打一个包方便其他的AI很快速的学习 打个压缩包 所有的前端配色还有V0相关的 把苹果配上",
|
||||
"创建时间": "2026-04-27T09:51:52.902000+00:00",
|
||||
"消息数量": 35
|
||||
},
|
||||
{
|
||||
"对话ID": "a006fd83-ccf1-4c68-bf0c-3cdda7eac1ce",
|
||||
"名称": "Open relay configuration and usage documentation",
|
||||
"项目": "卡若AI",
|
||||
"首条消息": "下载open relay 并写一个配置和使用文档",
|
||||
"创建时间": "2026-04-26T01:18:31.853000+00:00",
|
||||
"消息数量": 13
|
||||
},
|
||||
{
|
||||
"对话ID": "f531fbe6-a4e7-4830-9b63-28cb7a1c4436",
|
||||
"名称": "Douyin content download",
|
||||
"项目": "未分类",
|
||||
"首条消息": "https://www.douyin.com/user/self?from_tab_name=main&modal_id=7600395096903771363&showSubTab=video&showTab=record 下载抖",
|
||||
"创建时间": "2026-04-25T00:03:17.049000+00:00",
|
||||
"消息数量": 157
|
||||
},
|
||||
{
|
||||
"对话ID": "7674f983-ce97-46a3-826d-f1150b144b6f",
|
||||
"名称": "腾讯云密钥请求",
|
||||
"项目": "卡若AI",
|
||||
@@ -200,46 +240,6 @@
|
||||
"首条消息": "3.53 复制打开抖音,看看【银雾的作品】海贼王:终于知道伊姆是谁了!# 伊姆 # 鹰眼 #... https://v.douyin.com/HwSEkdWrIec/ j@p.Qk yTy:/ 10/25 到底是谁?",
|
||||
"创建时间": "2026-03-31T09:40:06.370000+00:00",
|
||||
"消息数量": 212
|
||||
},
|
||||
{
|
||||
"对话ID": "7f808b4f-cc1b-4916-8652-ea9890ab1611",
|
||||
"名称": "V0 account registration",
|
||||
"项目": "卡若AI",
|
||||
"首条消息": "https://v0.app/ref/WQ9P9N 卡若ai 注册v0的账号",
|
||||
"创建时间": "2026-03-31T09:05:00.276000+00:00",
|
||||
"消息数量": 4
|
||||
},
|
||||
{
|
||||
"对话ID": "22e60e8d-88a7-4cd5-8446-ffd053de574a",
|
||||
"名称": "生成一张 过引咖啡和mbti神仙团队的海报图片 了解自己/如何找工作/职业规划 再扩展一些核心关键字做出这张海报",
|
||||
"项目": "开发",
|
||||
"首条消息": "生成一张 过引咖啡和mbti神仙团队的海报图片 了解自己/如何找工作/职业规划 再扩展一些核心关键字做出这张海报\n你自己设计方案 以过引咖啡为核心logo 送咖啡,分享有收益等,把这个海报做出来",
|
||||
"创建时间": "2026-03-31T07:30:08.153000+00:00",
|
||||
"消息数量": 130
|
||||
},
|
||||
{
|
||||
"对话ID": "d99f62df-2e38-4201-a800-04593018b9d9",
|
||||
"名称": "Ten heavenly stems and five elements classification",
|
||||
"项目": "工具维护",
|
||||
"首条消息": "十天干(甲乙丙丁戊己庚辛壬癸) 用五行分类",
|
||||
"创建时间": "2026-03-31T06:40:57.404000+00:00",
|
||||
"消息数量": 3
|
||||
},
|
||||
{
|
||||
"对话ID": "caf51e22-9f37-4353-a670-6f529c124bbb",
|
||||
"名称": "运营-视频切片-流程优化",
|
||||
"项目": "Soul创业",
|
||||
"首条消息": "运营-视频切片流程优化\n/Users/karuo/Documents/个人/卡若AI/03_卡木(木)/木叶_视频内容/视频切片/Soul派对成片工作流_从零到片尾.md",
|
||||
"创建时间": "2026-03-31T06:16:02.697000+00:00",
|
||||
"消息数量": 147
|
||||
},
|
||||
{
|
||||
"对话ID": "8b43ca17-423f-4e6e-a728-55fd5ace7bb4",
|
||||
"名称": "硬盘清理",
|
||||
"项目": "工具维护",
|
||||
"首条消息": "清理一下硬盘",
|
||||
"创建时间": "2026-03-31T04:21:13.153000+00:00",
|
||||
"消息数量": 39
|
||||
}
|
||||
]
|
||||
}
|
||||
1
03_卡木(木)/木叶_视频内容/AutoClip
Submodule
1
03_卡木(木)/木叶_视频内容/AutoClip
Submodule
Submodule 03_卡木(木)/木叶_视频内容/AutoClip added at dafae474fd
1
03_卡木(木)/木叶_视频内容/本地_LivePortrait
Submodule
1
03_卡木(木)/木叶_视频内容/本地_LivePortrait
Submodule
Submodule 03_卡木(木)/木叶_视频内容/本地_LivePortrait added at 49784e8798
@@ -249,6 +249,48 @@ python3 脚本/soul_vertical_crop.py --dir "/path/to/clips_enhanced" --suffix "_
|
||||
**Soul 竖屏场景**:见 `Soul竖屏切片_SKILL.md` 第九节「AI 生成与 LTX 可选集成」。
|
||||
**约定**:LTX 生成的片段统一经 soul_enhance(封面+字幕+竖屏)输出,与录播成片一致。
|
||||
|
||||
### 即梦(Dreamina)CLI 集成(新增,默认可用)
|
||||
|
||||
当用户明确提到「即梦 / jimeng / Dreamina」时,允许在本技能内直接走 `jimeng`(已映射到 `dreamina`)做图生视频、文生视频或多模态视频生成,再并入 Soul 成片流程。
|
||||
|
||||
**本机命令约定**:
|
||||
|
||||
```bash
|
||||
# 统一入口(本机已安装)
|
||||
jimeng -h
|
||||
|
||||
# 首次登录(会输出 verification_uri 和 user_code)
|
||||
jimeng login
|
||||
|
||||
# 余额查询
|
||||
jimeng user_credit
|
||||
```
|
||||
|
||||
**推荐生产链(即梦生成 → Soul 成片)**:
|
||||
|
||||
```bash
|
||||
# 1) 生成视频(示例:文生视频)
|
||||
jimeng text2video --prompt "一个人在舞台上讲创业,镜头稳,写实风格"
|
||||
|
||||
# 2) 记录 submit_id 后轮询结果(异步任务)
|
||||
jimeng query_result --submit_id "<submit_id>"
|
||||
|
||||
# 3) 下载/定位视频文件后,接入既有增强流程
|
||||
python3 soul_enhance.py -c clips/ -l highlights.json -t transcript.srt -o clips_enhanced/
|
||||
```
|
||||
|
||||
**对话框回传规则(强制)**:
|
||||
|
||||
1. 每次即梦提交后,必须回传:命令类型、`submit_id`、`gen_status`、是否扣点。
|
||||
2. 每次结果查询后,必须回传:成功/失败、失败原因(如有)、视频可用路径或 URL。
|
||||
3. 进入成片后,必须回传:输出目录、最终可发布文件名(如 `*_enhanced.mp4`)。
|
||||
|
||||
**失败兜底**:
|
||||
|
||||
- 若返回 `AigcComplianceConfirmationRequired`,提示用户先去即梦网页完成一次授权,再重试同命令。
|
||||
- 若队列慢,先停止长轮询,改为短轮询(2~5 秒间隔)并持续回传状态。
|
||||
- 若即梦不可用,回退 LTX 或原录播切片链路,不中断产出。
|
||||
|
||||
---
|
||||
|
||||
## 📹 通用视频处理
|
||||
|
||||
1
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer
Submodule
1
03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer
Submodule
Submodule 03_卡木(木)/木叶_视频内容/视频切片/切片动效包装/remotion-captioneer added at 400f22b319
@@ -0,0 +1,129 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
持续注册(已成功平台优先)守护脚本
|
||||
|
||||
目标:
|
||||
1) 自动识别 accounts.db 中“已成功拿到 API Key”的 provider;
|
||||
2) 周期性执行 import-accounts + check + sync-site-mongo;
|
||||
3) 持续把可用 Key 同步到 karuo_site.gateways,供网站实时读取。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
import signal
|
||||
import sqlite3
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime
|
||||
from pathlib import Path
|
||||
|
||||
SCRIPT_DIR = Path(__file__).resolve().parent
|
||||
ACCOUNTS_DB = SCRIPT_DIR / "accounts.db"
|
||||
KEY_POOL_MANAGER = SCRIPT_DIR / "key_pool_manager.py"
|
||||
SITE_ENV_LOCAL_DEFAULT = Path("/Users/karuo/Documents/开发/3、自营项目/卡若ai网站/site/.env.local")
|
||||
|
||||
STOP = False
|
||||
|
||||
|
||||
def _sig_handler(_sig, _frame):
|
||||
global STOP
|
||||
STOP = True
|
||||
print("[success-loop] 收到退出信号,将在本轮结束后退出", flush=True)
|
||||
|
||||
|
||||
def load_site_env(path: Path) -> None:
|
||||
if not path.is_file():
|
||||
return
|
||||
for line in path.read_text(encoding="utf-8").splitlines():
|
||||
s = line.strip()
|
||||
if not s or s.startswith("#") or "=" not in s:
|
||||
continue
|
||||
k, v = s.split("=", 1)
|
||||
k = k.strip()
|
||||
v = v.strip().strip('"').strip("'")
|
||||
if k and v and k not in os.environ:
|
||||
os.environ[k] = v
|
||||
|
||||
|
||||
def successful_providers() -> list[str]:
|
||||
if not ACCOUNTS_DB.exists():
|
||||
return []
|
||||
with sqlite3.connect(str(ACCOUNTS_DB)) as conn:
|
||||
rows = conn.execute(
|
||||
"""
|
||||
SELECT provider
|
||||
FROM accounts
|
||||
WHERE api_key IS NOT NULL AND trim(api_key) <> ''
|
||||
GROUP BY provider
|
||||
ORDER BY provider
|
||||
"""
|
||||
).fetchall()
|
||||
return [str(r[0]) for r in rows if r and r[0]]
|
||||
|
||||
|
||||
def run_cmd(args: list[str], extra_env: dict[str, str] | None = None) -> int:
|
||||
env = os.environ.copy()
|
||||
if extra_env:
|
||||
env.update(extra_env)
|
||||
print(f"[success-loop] >> {' '.join(args)}", flush=True)
|
||||
p = subprocess.run(args, cwd=str(SCRIPT_DIR), env=env)
|
||||
return int(p.returncode or 0)
|
||||
|
||||
|
||||
def one_round() -> None:
|
||||
providers = successful_providers()
|
||||
if providers:
|
||||
print(f"[success-loop] 已成功平台: {', '.join(providers)}", flush=True)
|
||||
else:
|
||||
print("[success-loop] 尚无成功平台,继续执行导入+同步以等待新增", flush=True)
|
||||
|
||||
# 兼容当前 key_pool_manager 版本:走健康检查 + 自动补池 + 同步。
|
||||
run_cmd([sys.executable, str(KEY_POOL_MANAGER), "check"])
|
||||
# 若历史成功平台包含 cerebras,则尝试自动补池;其它平台由外部注册流程补充到 accounts.db 后再导入。
|
||||
if "cerebras" in providers:
|
||||
run_cmd([sys.executable, str(KEY_POOL_MANAGER), "auto-fill", "-n", "1"])
|
||||
run_cmd([sys.executable, str(KEY_POOL_MANAGER), "sync-site-mongo"])
|
||||
run_cmd([sys.executable, str(KEY_POOL_MANAGER), "status"])
|
||||
|
||||
|
||||
def main() -> None:
|
||||
signal.signal(signal.SIGINT, _sig_handler)
|
||||
signal.signal(signal.SIGTERM, _sig_handler)
|
||||
|
||||
site_env = Path(os.environ.get("KARUO_SITE_ENV_LOCAL", str(SITE_ENV_LOCAL_DEFAULT)))
|
||||
load_site_env(site_env)
|
||||
|
||||
interval = int(os.environ.get("KARUO_SUCCESS_LOOP_INTERVAL_SEC", "600") or "600")
|
||||
max_rounds = int(os.environ.get("KARUO_SUCCESS_LOOP_MAX_ROUNDS", "0") or "0")
|
||||
trust = os.environ.get("KARUO_POOL_IMPORT_TRUST_PROVIDERS", "gemini").strip()
|
||||
|
||||
os.environ["KARUO_POOL_IMPORT_TRUST_PROVIDERS"] = trust
|
||||
|
||||
print(
|
||||
f"[success-loop] 启动 interval={interval}s max_rounds={max_rounds or '∞'} trust={trust}",
|
||||
flush=True,
|
||||
)
|
||||
|
||||
i = 0
|
||||
while not STOP:
|
||||
i += 1
|
||||
if max_rounds and i > max_rounds:
|
||||
print(f"[success-loop] 达到 MAX_ROUNDS={max_rounds},退出", flush=True)
|
||||
break
|
||||
print(f"\n[success-loop] ===== round {i} @ {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} =====", flush=True)
|
||||
try:
|
||||
one_round()
|
||||
except Exception as e:
|
||||
print(f"[success-loop] round {i} 异常: {e}", flush=True)
|
||||
for _ in range(interval):
|
||||
if STOP:
|
||||
break
|
||||
time.sleep(1)
|
||||
|
||||
print("[success-loop] 已停止", flush=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -169,7 +169,7 @@
|
||||
"group": "水",
|
||||
"triggers": "整理文件、外置硬盘",
|
||||
"oneLiner": "文件分类、去重、归档",
|
||||
"updated": "2026-03-14T10:10:54.709Z"
|
||||
"updated": "2026-04-25T10:26:02.792Z"
|
||||
},
|
||||
{
|
||||
"id": "W02",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
# Mac 本机:Docker Desktop 登录后兜底——等待引擎就绪后按依赖顺序 docker start。
|
||||
# Mac 本机:Docker Desktop 登录后兜底——仅用 open -a Docker,避免 AppleEvent 超时。
|
||||
# 与 compose 中 restart: always 叠加;策略「引擎已起但容器没落」时补一刀。
|
||||
set -euo pipefail
|
||||
export PATH="/usr/local/bin:/opt/homebrew/bin:$PATH"
|
||||
@@ -19,8 +19,12 @@ wait_docker() {
|
||||
}
|
||||
|
||||
if ! wait_docker 120; then
|
||||
log "Docker 引擎 120s 内未就绪,跳过(请打开 Docker Desktop 或勾选登录时启动)"
|
||||
exit 0
|
||||
log "引擎未就绪,尝试 open -a Docker 再等待..."
|
||||
open -a Docker >/dev/null 2>&1 || true
|
||||
if ! wait_docker 180; then
|
||||
log "Docker 引擎仍未就绪,跳过(请检查 Docker Desktop)"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
log "Docker 就绪,按序启动容器…"
|
||||
@@ -33,16 +37,19 @@ for c in \
|
||||
datacenter_mysql \
|
||||
cunkebao-redis \
|
||||
cunkebao-mysql \
|
||||
website-cliproxyapi \
|
||||
website-shensheshou \
|
||||
website-wanzhi-web \
|
||||
website-n8n \
|
||||
website-douyin-api \
|
||||
website-feishu-toolbox \
|
||||
website-karuo-site \
|
||||
website-karuo-key-maintainer \
|
||||
website-openclaw-gateway \
|
||||
cunkebao-server \
|
||||
cunkebao-web \
|
||||
touchkebao-web \
|
||||
wantui \
|
||||
workphone-sdk \
|
||||
workphone-website \
|
||||
portainer
|
||||
|
||||
Reference in New Issue
Block a user