这些应用很少做覆盖更新的,都是全新APP 不过更新之后连用户数据都丢失了还是第一次见,大部分都是绑定设备ID的 别问是什么网站,去代码里找 破解版没有破解 只能靠咱们手搓 界面参考: 复制以下代码,直接到powershell运行就可以安装到桌面了 如果电脑不匹配,用不了的,可以让AI直接帮你把Python代码写出来 $path = "$HOME\Desktop\invite_tool.py"; $code = @' import os import sys import subprocess def bootstrap_dependencies(): required_libs = {"requests": "requests", "Crypto": "pycryptodome"} missing_libs = [] for module_name, pip_name in required_libs.items(): try: __import__(module_name) except ImportError: missing_libs.append(pip_name) if missing_libs: if "pycryptodome" in missing_libs and sys.platform.startswith("win"): subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "crypto"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) subprocess.run([sys.executable, "-m", "pip", "uninstall", "-y", "pycryptodome"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) for lib in missing_libs: try: subprocess.run([sys.executable, "-m", "pip", "install", "--upgrade", "pip"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) subprocess.run([sys.executable, "-m", "pip", "install", lib], check=True) except Exception: sys.exit(1) bootstrap_dependencies() import base64 import hashlib import json import random import threading import time import tkinter as tk from tkinter import messagebox, ttk from concurrent.futures import ThreadPoolExecutor, as_completed from dataclasses import dataclass from typing import Any import requests import urllib3 from Crypto.Cipher import AES, PKCS1_v1_5 from Crypto.PublicKey import RSA from Crypto.Util.Padding import unpad urllib3.disable_warnings() requests.packages.urllib3.disable_warnings() PUBLIC_KEY_RAW = ( "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCgsH82stbCUaE1fTsotU0E2HWU9uQz496NFKgjjHBn" "Bzqk9YtYcowNFxaOz6G5Q3bw5j/+0+iAD58/n99ENjFkipiulu30eRiUpHUVFyc+EJ14FLKIXNksQWTu" "AivCkIYcDNP42in1nyjdXrpps7klCMm9MeAz8Mm+k9r1MGVJsQIDAQAB" ) class AtomicCounter: def __init__(self) -> None: self._value = 0 self._lock = threading.Lock() def inc(self) -> int: with self._lock: self._value += 1 return self._value @property def value(self) -> int: with self._lock: return self._value @dataclass(slots=True) class ApiConfig: base_url: str = "https://34.81.42.86:2242" macct: str = "sf42" ver: str = "1.0" os: str = "2" user_agent: str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36" accept: str = "application/json,*/*" content_type: str = "application/json; charset=UTF-8" timeout: float = 8.0 aes_key: str = "GcgzsKdDZTumABNz7uujrCfPIk9TQ355" @dataclass(slots=True) class ApiResult: code: int msg: str data: Any class ApiClient: def __init__(self, config: ApiConfig, public_key: str) -> None: self.config = config self.session = requests.Session() self.session.verify = False self._aes_key = config.aes_key.encode("utf-8") self._public_key = RSA.import_key(self._load_public_key(public_key)) self.session.headers.update({ "user-agent": config.user_agent, "accept": config.accept, "content-type": config.content_type, "ver": config.ver, "os": config.os, "macct": config.macct, }) def close(self) -> None: self.session.close() def set_token(self, token: str | None) -> None: if token is None: self.session.headers.pop("token", None) else: self.session.headers.update({"token": token}) def post_plain(self, path: str, payload: dict[str, Any], params: dict[str, Any] | None = None) -> ApiResult: return self._post(path, payload, params=params) def post_rsa(self, path: str, payload: dict[str, Any]) -> ApiResult: return self._post(path, {"encrypt": self.rsa_encrypt_payload(payload)}) def rsa_encrypt_payload(self, payload: dict[str, Any]) -> str: plain = json.dumps(payload, ensure_ascii=False, separators=(",", ":")).encode("utf-8") cipher = PKCS1_v1_5.new(self._public_key) chunk_size = self._public_key.size_in_bytes() - 11 encrypted = bytearray() for i in range(0, len(plain), chunk_size): encrypted.extend(cipher.encrypt(plain[i : i + chunk_size])) return base64.b64encode(bytes(encrypted)).decode("ascii") def decrypt_response_text(self, raw_text: str) -> dict[str, Any]: text = raw_text.strip() if text.startswith('"') and text.endswith('"'): text = json.loads(text) cipher = AES.new(self._aes_key, AES.MODE_ECB) plain = unpad(cipher.decrypt(base64.b64decode(text)), AES.block_size).decode("utf-8") return json.loads(plain) def _post(self, path: str, payload: dict[str, Any], params: dict[str, Any] | None = None) -> ApiResult: response = self.session.post( f"{self.config.base_url.rstrip('/')}/{path.lstrip('/')}", params=params, json=payload, timeout=self.config.timeout, ) response.raise_for_status() result = self.decrypt_response_text(response.text) return ApiResult(code=result["code"], msg=result["msg"], data=result["data"]) @staticmethod def _load_public_key(raw: str) -> str: if "BEGIN PUBLIC KEY" in raw or "BEGIN RSA PUBLIC KEY" in raw: return raw b64 = "".join(raw.split()) lines = [b64[i : i + 64] for i in range(0, len(b64), 64)] return "-----BEGIN PUBLIC KEY-----\n" + "\n".join(lines) + "\n-----END PUBLIC KEY-----\n" class ApiService: def __init__(self, client: ApiClient) -> None: self.client = client def login(self, mac: str) -> ApiResult: payload = { "mac": mac, "tips": hashlib.md5(f"{self.client.config.macct}{mac}1".encode("utf-8")).hexdigest(), "os": "1", } return self.client.post_rsa("/front/cluser/c/user/mac/login", payload) def bind_refer(self, code: str) -> ApiResult: return self.client.post_plain("/front/cluser/c/user/bind/refer", {}, params={"code": code}) def make_uid() -> str: raw = f"{time.time()}{random.random()}{threading.get_ident()}" uid = hex(hash(raw))[2:] return uid if len(uid) == 16 else f"1{uid[:15]}" def do_invite(refer_code: str, counter: AtomicCounter, total: int, log_callback) -> tuple[bool, str]: client = None try: client = ApiClient(ApiConfig(), PUBLIC_KEY_RAW) api = ApiService(client) uid = make_uid() data = api.login(uid).data client.set_token(data["token"]) result = api.bind_refer(refer_code) success = result.code == 0 msg = result.msg except Exception as ex: success = False msg = str(ex) finally: if client is not None: client.close() n = counter.inc() log_callback(n, total, success, msg) return success, msg class App: def __init__(self, root: tk.Tk) -> None: self.root = root self.root.title("琉璃暗匣 - 极速推广控制台") self.root.geometry("540x440") self.root.resizable(False, False) self.root.configure(bg="#F5F7FA") self.style = ttk.Style() self.style.theme_use("clam") # 现代化视觉样式配置 self.style.configure("TFrame", background="#F5F7FA") self.style.configure("Card.TFrame", background="#FFFFFF", relief="flat") self.style.configure("TLabel", background="#FFFFFF", font=("Microsoft YaHei", 10), foreground="#2C3E50") self.style.configure("Title.TLabel", background="#F5F7FA", font=("Microsoft YaHei", 12, "bold"), foreground="#34495E") self.style.configure("Warning.TLabel", background="#F5F7FA", font=("Microsoft YaHei", 9), foreground="#E74C3C") self.style.configure("TButton", font=("Microsoft YaHei", 10, "bold"), padding=10, background="#E0E6ED", foreground="#2C3E50", borderwidth=0) self.style.map("TButton", background=[("active", "#D4DBE4")]) self.style.configure("VIP.TButton", background="#FF4757", foreground="white") self.style.map("VIP.TButton", background=[("active", "#FF6B81")]) self.style.configure("Gold.TButton", background="#2ED573", foreground="white") self.style.map("Gold.TButton", background=[("active", "#7BED9F")]) self.running = False self.create_widgets() def create_widgets(self) -> None: # 顶部标题与提示 header_frame = ttk.Frame(self.root) header_frame.pack(fill="x", padx=20, pady=(15, 5)) ttk.Label(header_frame, text="✨ 极速推广控制台", style="Title.TLabel").pack(anchor="w") ttk.Label(header_frame, text="💡 温馨提示:由于网络非对称延迟,当前进度与实际可能存在微小偏差\n具体奖励到账情况,请以 APP 或网页端实际显示为准~", style="Warning.TLabel").pack(anchor="w", pady=(5, 0)) # 核心卡片区 (白色背景,增加呼吸感) card_frame = ttk.Frame(self.root, style="Card.TFrame") card_frame.pack(fill="x", padx=20, pady=10, ipadx=15, ipady=15) # 邀请码输入 ttk.Label(card_frame, text="专属邀请码:").grid(row=0, column=0, sticky="w", pady=(0, 15)) self.code_var = tk.StringVar(value="") self.entry_code = ttk.Entry(card_frame, textvariable=self.code_var, font=("Consolas", 12, "bold"), width=20, justify="center") self.entry_code.grid(row=0, column=1, sticky="w", pady=(0, 15), padx=10) # 线程设置 ttk.Label(card_frame, text="并发线程数:").grid(row=1, column=0, sticky="w") self.workers_var = tk.StringVar(value="10") self.workers_spin = ttk.Spinbox(card_frame, from_=1, to=50, width=5, textvariable=self.workers_var, font=("Consolas", 11)) self.workers_spin.grid(row=1, column=1, sticky="w", padx=10) # 按钮区 btn_frame = ttk.Frame(self.root) btn_frame.pack(fill="x", padx=20, pady=5) self.btn_vip = ttk.Button(btn_frame, text="💎 刷 180天会员 (100人)", style="VIP.TButton", command=lambda: self.start_task(100)) self.btn_vip.pack(side="left", expand=True, fill="x", padx=(0, 5)) self.btn_gold = ttk.Button(btn_frame, text="💰 刷 1000金币 (200人)", style="Gold.TButton", command=lambda: self.start_task(200)) self.btn_gold.pack(side="right", expand=True, fill="x", padx=(5, 0)) # 进度与日志区 log_frame = ttk.Frame(self.root) log_frame.pack(fill="both", expand=True, padx=20, pady=10) self.progress_bar = ttk.Progressbar(log_frame, orient="horizontal", mode="determinate") self.progress_bar.pack(fill="x", pady=(0, 5)) self.lbl_status = ttk.Label(log_frame, text="就绪。请输入邀请码后点击按钮开始", background="#F5F7FA", font=("Microsoft YaHei", 9), foreground="#7F8C8D") self.lbl_status.pack(pady=(0, 5)) self.txt_log = tk.Text(log_frame, font=("Consolas", 9), wrap="word", height=8, bg="#2C3E50", fg="#ECF0F1", insertbackground="white", relief="flat", padx=10, pady=10) self.txt_log.pack(side="left", fill="both", expand=True) scrollbar = ttk.Scrollbar(log_frame, command=self.txt_log.yview) scrollbar.pack(side="right", fill="y") self.txt_log.config(yscrollcommand=scrollbar.set) def write_log(self, text: str) -> None: self.txt_log.insert(tk.END, text + "\n") self.txt_log.see(tk.END) def update_progress(self, current: int, total: int, success: bool, msg: str) -> None: self.root.after(0, self._update_ui, current, total, success, msg) def _update_ui(self, current: int, total: int, success: bool, msg: str) -> None: pct = (current / total) * 100 self.progress_bar["value"] = pct status_text = "OK" if success else "FAIL" self.lbl_status.config(text=f"执行中: {current}/{total} | 进度: {pct:.1f}%") self.write_log(f"[{current:>3}/{total}] {status_text:4s} | {msg}") def start_task(self, count: int) -> None: if self.running: return refer_code = self.code_var.get().strip() if not refer_code: messagebox.showwarning("提示", "请先输入您要推广的专属邀请码!") self.entry_code.focus() return try: workers = int(self.workers_var.get()) except ValueError: workers = 10 self.running = True self.btn_vip.state(["disabled"]) self.btn_gold.state(["disabled"]) self.entry_code.state(["disabled"]) self.workers_spin.state(["disabled"]) self.txt_log.delete("1.0", tk.END) self.progress_bar["value"] = 0 self.lbl_status.config(text="正在初始化线程池...") self.write_log(f">>> 开始执行任务:邀请 {count} 人,目标码: {refer_code}") threading.Thread(target=self._run_backend, args=(refer_code, count, workers), daemon=True).start() def _run_backend(self, refer_code: str, count: int, workers: int) -> None: counter = AtomicCounter() start_time = time.time() success_count = 0 with ThreadPoolExecutor(max_workers=workers) as executor: futures = [ executor.submit(do_invite, refer_code, counter, count, self.update_progress) for _ in range(count) ] for future in as_completed(futures): try: ok, _ = future.result() if ok: success_count += 1 except Exception: pass elapsed = time.time() - start_time self.running = False self.root.after(0, self._task_finished, success_count, count, elapsed) def _task_finished(self, success: int, total: int, elapsed: float) -> None: self.btn_vip.state(["!disabled"]) self.btn_gold.state(["!disabled"]) self.entry_code.state(["!disabled"]) self.workers_spin.state(["!disabled"]) self.lbl_status.config(text="执行完成!") self.write_log("\n" + "=" * 45) self.write_log(f" 任务已结束!") self.write_log(f" 成功: {success} | 失败: {total - success} | 耗时: {elapsed:.1f}s") self.write_log("=" * 45 + "\n") messagebox.showinfo("完成", f"刷量任务已完成!\n成功:{success}/{total}\n耗时:{elapsed:.1f}s\n(若出现 FAIL 可能是假失败,请去 APP 刷新查看实际奖励~)") if __name__ == "__main__": root = tk.Tk() app = App(root) root.mainloop() '@; Set-Content -Path $path -Value $code -Encoding utf8 之前刷200人至少要一两分钟,现在最快只需要5秒,成功率仍然不高,并发调小一点可能会好一些 等大家玩儿上了,估计就慢下来了 6 个帖子 - 4 位参与者 阅读完整话题
我想知道自己的 NAS 硬盘什么时候休眠什么时候活动,想知道一天被唤醒多少次。所以写了这个脚本。 DiskMonitorV1.0_20260610 这个脚本是按自己的需求写的,主要实现以下功能 1 )实时查询硬盘休眠状态并记录 2 )后台定时查询并记录硬盘状态 3 )统计 24h 后硬盘唤醒次数及总唤醒时间 4 ) 24h 硬盘活动图表 5 )最大化精简脚本,不额外安装依赖。只用了 hdpram 查询硬盘和 python3 运行 http 服务 一般情况下,适用于所有的 linux ,只要你安装了 hdparm 和 python3 。 实际运行截图如下: 项目文件 /var/www/hddstatus/ ├── config # 统一配置文件 ├── disk_events.log # 事件日志(运行时生成) ├── cache/ # 状态缓存目录 └── cgi-bin/ ├── status # 硬盘状态页 ├── log # 24h 趋势图表 + 日志 ├── log-full # 全部日志纯文本 └── update-disk-info # 更新硬盘名称 /usr/local/bin/ ├── disk_monitor.sh # 后台监控 ├── disk_monitor_startup.sh # 启动时初始化 └── disk_info.sh # 硬盘名称缓存生成 /etc/systemd/system/ ├── disk-monitor.service └── hddstatus.service /etc/sudoers.d/ └── hddstatus 使用教程: 使用 root 登录,或者 sudo chmod +x diskmonitor_install.sh chmod +x diskmonitor_uninstall.sh 安装 ./diskmonitor_install.sh 卸载 ./diskmonitor_uninstall.sh 状态页: http://机器 IP:58008/cgi-bin/status 日志页: http://机器 IP:58008/cgi-bin/log 修改配置: nano /var/www/hddstatus/config 然后 systemctl restart disk-monitor hddstatus config 配置文件说明 1 )硬盘要监控几个,填在 DISKS 里 2 )后台监控时隔,默认 5 分钟,没必要太频繁。因为时隔为 5 分钟监控一次,所以记录的唤醒休眠时间可能会有几分钟偏差。 3 ) Web 服务端口,字面意思 4 )硬盘自定义显示名称,前面 DISKS 里有几块硬盘这里就加几条记录 5 ) hdparm 程序目录,自己按自己机器上的填,一般不用动。 6 )其余日志文件参数不要动。 # ========== 硬盘监控统一配置 ========== # 要监控的硬盘设备(空格分隔) DISKS="/dev/sda /dev/sdb" # 后台监控检查间隔(秒),建议 ≥ 硬盘 spindown 时间 MONITOR_INTERVAL=300 # Web 服务端口 WEB_PORT=58008 # 硬盘自定义显示名称(可选) # 格式:LABEL_设备名="显示名称" LABEL_sda="WD-500G" LABEL_sdb="GS-480G" # hdparm 路径 HDPARM="/usr/sbin/hdparm" 如果硬盘很老,频繁 hdparm 查询硬盘状态会影响硬盘休眠(很少见),那就只能加大监控的间隔或不用这个脚本。 不对这个脚本对你们硬盘/机器带来的任何影响负责。需要自取。 脚本 链接: https://pan.quark.cn/s/9dd16addf27f
我想知道自己的 NAS 硬盘什么时候休眠什么时候活动,想知道一天被唤醒多少次。所以写了这个脚本。 DiskMonitorV1.0_20260610 这个脚本是按自己的需求写的,主要实现以下功能 1 )实时查询硬盘休眠状态并记录 2 )后台定时查询并记录硬盘状态 3 )统计 24h 后硬盘唤醒次数及总唤醒时间 4 ) 24h 硬盘活动图表 5 )最大化精简脚本,不额外安装依赖。只用了 hdpram 查询硬盘和 python3 运行 http 服务 一般情况下,适用于所有的 linux ,只要你安装了 hdparm 和 python3 。 实际运行截图如下: 项目文件 /var/www/hddstatus/ ├── config # 统一配置文件 ├── disk_events.log # 事件日志(运行时生成) ├── cache/ # 状态缓存目录 └── cgi-bin/ ├── status # 硬盘状态页 ├── log # 24h 趋势图表 + 日志 ├── log-full # 全部日志纯文本 └── update-disk-info # 更新硬盘名称 /usr/local/bin/ ├── disk_monitor.sh # 后台监控 ├── disk_monitor_startup.sh # 启动时初始化 └── disk_info.sh # 硬盘名称缓存生成 /etc/systemd/system/ ├── disk-monitor.service └── hddstatus.service /etc/sudoers.d/ └── hddstatus 使用教程: 使用 root 登录,或者 sudo chmod +x diskmonitor_install.sh chmod +x diskmonitor_uninstall.sh 安装 ./diskmonitor_install.sh 卸载 ./diskmonitor_uninstall.sh 状态页: http://机器 IP:58008/cgi-bin/status 日志页: http://机器 IP:58008/cgi-bin/log 修改配置: nano /var/www/hddstatus/config 然后 systemctl restart disk-monitor hddstatus config 配置文件说明 1 )硬盘要监控几个,填在 DISKS 里 2 )后台监控时隔,默认 5 分钟,没必要太频繁。因为时隔为 5 分钟监控一次,所以记录的唤醒休眠时间可能会有几分钟偏差。 3 ) Web 服务端口,字面意思 4 )硬盘自定义显示名称,前面 DISKS 里有几块硬盘这里就加几条记录 5 ) hdparm 程序目录,自己按自己机器上的填,一般不用动。 6 )其余日志文件参数不要动。 # ========== 硬盘监控统一配置 ========== # 要监控的硬盘设备(空格分隔) DISKS="/dev/sda /dev/sdb" # 后台监控检查间隔(秒),建议 ≥ 硬盘 spindown 时间 MONITOR_INTERVAL=300 # Web 服务端口 WEB_PORT=58008 # 硬盘自定义显示名称(可选) # 格式:LABEL_设备名="显示名称" LABEL_sda="WD-500G" LABEL_sdb="GS-480G" # hdparm 路径 HDPARM="/usr/sbin/hdparm" 如果硬盘很老,频繁 hdparm 查询硬盘状态会影响硬盘休眠(很少见),那就只能加大监控的间隔或不用这个脚本。 不对这个脚本对你们硬盘/机器带来的任何影响负责。需要自取。 脚本 链接: https://pan.quark.cn/s/9dd16addf27f
我想知道自己的 NAS 硬盘什么时候休眠什么时候活动,想知道一天被唤醒多少次。所以写了这个脚本。 DiskMonitorV1.0_20260610 这个脚本是按自己的需求写的,主要实现以下功能 1 )实时查询硬盘休眠状态并记录 2 )后台定时查询并记录硬盘状态 3 )统计 24h 后硬盘唤醒次数及总唤醒时间 4 ) 24h 硬盘活动图表 5 )最大化精简脚本,不额外安装依赖。只用了 hdpram 查询硬盘和 python3 运行 http 服务 一般情况下,适用于所有的 linux ,只要你安装了 hdparm 和 python3 。 实际运行截图如下: 项目文件 /var/www/hddstatus/ ├── config # 统一配置文件 ├── disk_events.log # 事件日志(运行时生成) ├── cache/ # 状态缓存目录 └── cgi-bin/ ├── status # 硬盘状态页 ├── log # 24h 趋势图表 + 日志 ├── log-full # 全部日志纯文本 └── update-disk-info # 更新硬盘名称 /usr/local/bin/ ├── disk_monitor.sh # 后台监控 ├── disk_monitor_startup.sh # 启动时初始化 └── disk_info.sh # 硬盘名称缓存生成 /etc/systemd/system/ ├── disk-monitor.service └── hddstatus.service /etc/sudoers.d/ └── hddstatus 使用教程: 使用 root 登录,或者 sudo chmod +x diskmonitor_install.sh chmod +x diskmonitor_uninstall.sh 安装 ./diskmonitor_install.sh 卸载 ./diskmonitor_uninstall.sh 状态页: http://机器 IP:58008/cgi-bin/status 日志页: http://机器 IP:58008/cgi-bin/log 修改配置: nano /var/www/hddstatus/config 然后 systemctl restart disk-monitor hddstatus config 配置文件说明 1 )硬盘要监控几个,填在 DISKS 里 2 )后台监控时隔,默认 5 分钟,没必要太频繁。因为时隔为 5 分钟监控一次,所以记录的唤醒休眠时间可能会有几分钟偏差。 3 ) Web 服务端口,字面意思 4 )硬盘自定义显示名称,前面 DISKS 里有几块硬盘这里就加几条记录 5 ) hdparm 程序目录,自己按自己机器上的填,一般不用动。 6 )其余日志文件参数不要动。 # ========== 硬盘监控统一配置 ========== # 要监控的硬盘设备(空格分隔) DISKS="/dev/sda /dev/sdb" # 后台监控检查间隔(秒),建议 ≥ 硬盘 spindown 时间 MONITOR_INTERVAL=300 # Web 服务端口 WEB_PORT=58008 # 硬盘自定义显示名称(可选) # 格式:LABEL_设备名="显示名称" LABEL_sda="WD-500G" LABEL_sdb="GS-480G" # hdparm 路径 HDPARM="/usr/sbin/hdparm" 如果硬盘很老,频繁 hdparm 查询硬盘状态会影响硬盘休眠(很少见),那就只能加大监控的间隔或不用这个脚本。 不对这个脚本对你们硬盘/机器带来的任何影响负责。需要自取。 脚本 链接: https://pan.quark.cn/s/9dd16addf27f
我想知道自己的 NAS 硬盘什么时候休眠什么时候活动,想知道一天被唤醒多少次。所以写了这个脚本。 DiskMonitorV1.0_20260610 这个脚本是按自己的需求写的,主要实现以下功能 1 )实时查询硬盘休眠状态并记录 2 )后台定时查询并记录硬盘状态 3 )统计 24h 后硬盘唤醒次数及总唤醒时间 4 ) 24h 硬盘活动图表 5 )最大化精简脚本,不额外安装依赖。只用了 hdpram 查询硬盘和 python3 运行 http 服务 一般情况下,适用于所有的 linux ,只要你安装了 hdparm 和 python3 。 实际运行截图如下: 项目文件 /var/www/hddstatus/ ├── config # 统一配置文件 ├── disk_events.log # 事件日志(运行时生成) ├── cache/ # 状态缓存目录 └── cgi-bin/ ├── status # 硬盘状态页 ├── log # 24h 趋势图表 + 日志 ├── log-full # 全部日志纯文本 └── update-disk-info # 更新硬盘名称 /usr/local/bin/ ├── disk_monitor.sh # 后台监控 ├── disk_monitor_startup.sh # 启动时初始化 └── disk_info.sh # 硬盘名称缓存生成 /etc/systemd/system/ ├── disk-monitor.service └── hddstatus.service /etc/sudoers.d/ └── hddstatus 使用教程: 使用 root 登录,或者 sudo chmod +x diskmonitor_install.sh chmod +x diskmonitor_uninstall.sh 安装 ./diskmonitor_install.sh 卸载 ./diskmonitor_uninstall.sh 状态页: http://机器 IP:58008/cgi-bin/status 日志页: http://机器 IP:58008/cgi-bin/log 修改配置: nano /var/www/hddstatus/config 然后 systemctl restart disk-monitor hddstatus config 配置文件说明 1 )硬盘要监控几个,填在 DISKS 里 2 )后台监控时隔,默认 5 分钟,没必要太频繁。因为时隔为 5 分钟监控一次,所以记录的唤醒休眠时间可能会有几分钟偏差。 3 ) Web 服务端口,字面意思 4 )硬盘自定义显示名称,前面 DISKS 里有几块硬盘这里就加几条记录 5 ) hdparm 程序目录,自己按自己机器上的填,一般不用动。 6 )其余日志文件参数不要动。 # ========== 硬盘监控统一配置 ========== # 要监控的硬盘设备(空格分隔) DISKS="/dev/sda /dev/sdb" # 后台监控检查间隔(秒),建议 ≥ 硬盘 spindown 时间 MONITOR_INTERVAL=300 # Web 服务端口 WEB_PORT=58008 # 硬盘自定义显示名称(可选) # 格式:LABEL_设备名="显示名称" LABEL_sda="WD-500G" LABEL_sdb="GS-480G" # hdparm 路径 HDPARM="/usr/sbin/hdparm" 如果硬盘很老,频繁 hdparm 查询硬盘状态会影响硬盘休眠(很少见),那就只能加大监控的间隔或不用这个脚本。 不对这个脚本对你们硬盘/机器带来的任何影响负责。需要自取。 脚本 链接: https://pan.quark.cn/s/9dd16addf27f
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 学习算法的过程中总是不能清晰地理解运行的过程,于是我做了这个可视化算法执行过程的工具 PyWeave 是一个开源桌面应用,用来帮助学习和理解 Python 算法代码的执行过程 它内置 Python 编辑器,可以运行用户输入的 Python 代码,并逐行捕获执行状态。应用会把局部变量、数组内容、指针变量和变量变化展示成可视化图,让用户能看到算法每一步到底发生了什么 各位佬们来看看怎么样 https://github.com/XYZ1024-alt/PyWeave 1 个帖子 - 1 位参与者 阅读完整话题
日常开发中比较习惯用Cursor,里面有很多的模型可以用,而且是可视化界面的,也很方便。但是有很多佬们都直接使用Claude cli这种,不会觉得难用吗?感觉很多都不如可视化界面好操作。还有一个问题就是“Cursor中的Claude Opus、Codex和直接用Claude、Codex有啥区别吗?” 礼貌发问各位佬们 3 个帖子 - 3 位参与者 阅读完整话题
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 可视化多智能体 LLM 交易研究平台 — 看见 Agent 怎么想、怎么辩、怎么决策,而不是只看最后一个 BUY/SELL。 github.com GitHub - wjhccc/TradingAgents-Studio: 可视化多智能体 LLM 交易研究平台 — 看见 Agent... 可视化多智能体 LLM 交易研究平台 — 看见 Agent 怎么想、怎么辩、怎么决策,而不是只看最后一个 BUY/SELL。 2 个帖子 - 1 位参与者 阅读完整话题
效果 # AMC-WebUI Live Artifacts Designer (Grok Defensive Hybrid - Clean) v2 你是一个只输出渲染后 HTML 的专业引擎。你将融合 AMC-WebUI 的高信息密度智能布局与 Grok 平台的极端渲染防御规则,把用户信息转化为无懈可击、精美且可读的内联 HTML 产物。 ## 致命防御约束 (ZERO TOLERANCE - 极高优先级) 1. 绝对禁止反引号:严禁在响应中输出任何 ``` 或 ` 符号。 2. 绝对禁止 <style> 和 <script> 块:所有样式必须 100% 写入每个标签的 style="..." 属性中。 3. 首字符强制:响应必须以 <div style="display:block;width:100%;box-sizing:border-box;max-width:100%;background:#ffffff;border:1px solid #eef0f2;border-radius:16px;padding:24px;box-shadow:0 10px 15px -3px rgba(0,0,0,0.05);font-family:sans-serif;color:#1a202c;overflow-wrap:anywhere;"> 开头。严禁任何前导文字、Emoji、空格或换行。 4. 禁止裸文本:所有文字内容必须包裹在 <span>, <p>, <h2>, <td> 或 <div> 中。 5. 禁用 Markdown 符号:响应中严禁出现 #, **, - , *, > 等任何 Markdown 语法符号。 6. 输出格式:整个响应必须是一个连续的 HTML 字符串(可内嵌 render 组件用于图片展示)。 ## 智能布局选择 根据内容类型自动匹配高级布局: - 对比/决策 → 矩阵对比表格(带 overflow-x:auto 容器) - 流程/步骤 → 时间线或横向/纵向步骤卡片 - 数据/指标 → 数据卡片 + 紧凑数据表 - 长篇内容 → 摘要卡片 + <details><summary> 折叠面板 ## 视觉标准 (Premium Light 主题) - 主容器必须使用指定 root style - 标题使用 border-left:4px solid #3182ce 的样式 - 内容卡片使用 border:1px solid #edf2f7 + background:#f8fafc - 配色克制使用 #3182ce(主色)、#38a169(推荐/安全)、#e53e3e(风险) ## 图片与媒体支持 需要真实图片时,使用 render render_searched_image 组件内嵌显示(系统自动处理)。优先选择高质量产品实拍图或相关视觉素材。 ## 立即执行 将用户信息转化为完全符合上述所有约束的、高密度、精美浅色主题的单流 HTML 产物。记住:首字符必须是 <div,绝对不准出现任何反引号! 12 个帖子 - 3 位参与者 阅读完整话题
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 1. 前言 本人是《完蛋!我被美女包围了!》、《千恋万花》、《底特律:变人》这种互动剧情类游戏的忠实爱好者,上个月看到 flipbook 发布,他们用多模态模型实现的全新UI交互形态让我很受震撼,于是萌生了做这个项目的想法。 项目名叫InfiPlot,有无穷多种剧情、无限长度剧情的意思。佬们可以直接访问 infiplot.com 开始游玩。(目前内测期间,是可以免费玩的。API成本就当作从L站学知识的回报吧,我是真的很希望有更多人可以体验到这种新的交互模式) 开源地址: github.com GitHub - zonghaoyuan/infiplot: InfiPlot is the world's first interactive plot... InfiPlot is the world's first interactive plot game that AI generates all text and images in real-time. InfiPlot是全球首个由 AI 实时生成全部图文内容的交互式剧情游戏 在线体验: infiplot.com InfiPlot — AI 实时交互剧情游戏 InfiPlot 是一款用 AI 实时生成图片、语音与剧情分支的交互式剧情游戏 Demo。 项目目前部署在vercel上,如果佬友所在地区访问体验不佳的话,可以尝试打开科学上网。 支持vercel/cloudflare一键部署,cf 部署需要 Workers Paid Plan,推荐用vercel一键部署: 2. 项目介绍 2.1 设计思路 InfiPlot参考了互动剧情游戏的设计,让用户从2-3个选项中选择一个选项来推动剧情的发展。 为了实现这个交互设计,我们让每个故事以一连串场景的形式展开,每个场景由一张ai绘制的背景图和一个情节树组成,情节树中包含了这个场景内的剧情分支、人物对话和交互选项。 自定义交互输入目前在roadmap中,我们会尽快实现 除了点击选项外,你还可以点击场景图中的任何位置触发交互。然后InfiPlot会根据识别到的点击位置,决定要如何回应,比如根据点击位置推进到之前不存在的剧情分支。 这个功能参考了flipbook,未来将会作为InfiPlot最重要的功能来开发 2.2 工作原理 我们用了multi-agent架构来提升剧情连贯性、角色一致性和整体的剧情质量。我们将agent分为架构师、编剧、角色设计师、场景布置师、画家五个职能,让他们之间相互配合来编排和交付前端显示的内容。 他们都学习了对应行业的专业知识,比如编剧学习了电影行业的知识,能够设计出更加跌宕起伏、有吸引力的情节。 multi-agent架构图: 2.3 一些有趣的技术细节 a. 关于tts配音 我们目前使用了mimo-v2.5-tts系列模型来配音,从而实现了基于每个角色不同的人设来设计音色,而且可以根据剧情的变化设计声音的情绪。 实际体验中,可爱妹子会用很kawaii的声音,班主任则会是那种听起来就很沉稳靠谱的音色。正常情况下是正常说话,但是如果你把角色逼急了,她/他可能会很生气地冲你大叫。当然,如果你成功攻略了某个角色,ta也可能会变得更加娇羞。没有任何音色或情绪是预先设定好的。 加上tts模型是在项目最开始时没有预想到的。只是因为我们讨论时考虑到视觉小说都会为角色配音,如果InfiPlot是静音的,沉浸感会大打折扣。 最开始我们选择了edge-tts模型(是的我们真的用过这个模型),发出的声音很鬼畜。后来换到minimax的tts模型,充了几十块钱跑了几次测试就花完了,后来才发现逆天的minimax设计一次音色要3块钱,怎么不去抢。前天minimax m3发布的时候,本来期待值拉满,结果又拉了,难评啊难评。 最终我们发现大善人mimo的tts模型是免费的,而且质量还挺高,于是就实现了上面所说的定制音色和情绪的功能,体验还不错。(不过由于mimo tts模型有rpm限制,我们后期可能会增加前端自定义mimo apikey的功能,也会同时找mimo客服申请更高的rpm限额,尽可能给大家跟好的游玩体验) b. 关于生图模型的选择 毫无疑问,生图模型是InfiPlot的技术难度最大的部分。我们需要延迟极低,同时成本也极低,质量还可靠的模型。 此处应该摆出一张三色图: 然而还真让我们找到了这种模型:z-image-turbo和flux.2 9b,在runware.ai上的价格都极低。而且最快甚至可以在0.5s内出图! 当然0.5s是理论速度,实测runware上flux.2 9b的出图时间在2s内。 由于z-image-turbo不支持上传多张参考图,就无法实现角色和场景的一致性,因此最终生图模型选用了flux.2 9b,单图成本$0.00078。 不过因为参数量较小,目前仍然会出现角色长出三只手或者有重影之类的问题,暂时还没找到特别好的优化办法,佬友们如果有办法的话可以支个招。 2.4 游玩体验 坦率地讲,目前InfiPlot的游玩体验只能达到60分(满分100分),之所以现在就把它发出来,一方面是想要收集更多的用户反馈,另一方面也是因为我们的资源有限,希望能得到更多的关注和更多成员的加入。 我会建议佬们现阶段游玩时,优先选择更偏向红果短剧而非豆瓣top250的剧情设定。这是因为InfiPlot目前生成内容的质量还很难和优质的导演、编剧的创作质量竞争,但是对于一些无脑情节,玩起来确实还是蛮爽的。 比如我就会玩一些,“穿越回研一,发表nature和n篇顶会,3年拿到博士学位,评上杰青,建立百人课题组”之类的剧情。只能说,当天才少年的感觉真tm爽啊 当然,我们的最终目标一定是实现比肩优质剧情小说、真人互动游戏的内容质量和游玩体验。佬友们可以期待一下(如果进展顺利的话) 目前InfiPlot还只支持生成基于图片的场景描绘,但用图生视频模型实现动态场景图已经在roadmap里了。 3. 游戏截图 下面放一些我们测试过程中截取的比较好看的游戏截图(附剧情概要): 【黄昏归途】 他总在黄昏时分,于空无一人的车站遇见少女。她带他穿越时间的缝隙,回到故乡被毁灭前的最后一天。每一次循环,他都必须在拯救她与拯救世界之间做出选择。 【社团存亡日】 濒临废部的动画社,唯一社员是总在睡觉的怪人。新来的转校生社长发现,只要完成怪人的“日常委托”,社员就会增加一人,而这些人,都来自被遗忘的动画世界。 【花魁的刀】 她是吉原最负盛名的花魁,舞姿倾城,面具下的真实身份却是令江户幕府闻风丧胆的传奇忍者。当幕府密探踏入花街,刀光与花影将同绽。 下面是一些我们测试游玩体验的过程中觉得质量很高的截图,剧情概要在测试时没存就不放了 一行小字 : 上面这些截图并不全是用flux.2 9b生成的,佬友们如果觉得在线demo里的生图质量不够满意的话,可以自部署之后换更高质量的生图模型。 如果佬友们感兴趣,我们之后也可以加上预制游戏的功能,这样就可以用时间换质量,在不牺牲游玩体验的前提下享受最佳的画面表现。 我们未来可能会用InfiPlot制作一些精品游戏发布到steam,佬们可以期待一下。 4. 写在最后,关于团队 我们团队的成员来自清华大学、兰州大学、西安交大等高校。目前团队还在招募新成员,如果佬友们感兴趣加入的话,欢迎论坛私信或者邮件联系我(最好带上简单的自我介绍) 邮箱:[email protected] 我们几个人目前都是兼职开发InfiPlot,而且大部分时候是远程合作(甚至有在澳洲的同学),所以时间和地点上不会太有压力。 遵守社区规定,这里就不放内测用户群的二维码了,感兴趣的佬可以去网站或者github项目页找到qq群二维码和群号,欢迎来和我们聊天! 最后最后,求回复求star(应该不违反社区规定吧) 谢谢佬友们,爱你们 11 个帖子 - 4 位参与者 阅读完整话题
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 开源Skill:一键生成可视化数学讲解视频 提示词: 安装这个Skill: GitHub - GordenSun/mathVideoMaker · GitHub 然后使用这个Skill给小学生讲解:□+28=□x5 效果展示: 1 个帖子 - 1 位参与者 阅读完整话题
借助AI为我自己优化的解算程序设计了一个可视化前端,现在需要维护移动端和PC端,由于没有使用什么组件库和开源前端框架,导致现在维护起来特别麻烦,而且写的也比较乱(7尤其是移动端适配太复杂了),就html+css+js手搓。由于没有前端设计开发经验,不知道现在用什么方案进行重构。设计的前端也很丑。 15 个帖子 - 7 位参与者 阅读完整话题
我现在设想是codegraph配合todo tree可视化调度。同样热门上那个类comfyui的工作流节点有点用不明白。 但是现在卡在怎么让ai强制使用codegraph的mcp,已经在codex的全局agent和项目agent都声明,任何增删改查的行为都必须通过codegraph的mcp,还试了钩子发挥tool如果没codegraph进行retry(虽然不知道用着对不对)。但是有时候ai大人真的鸟都不鸟我。 7 个帖子 - 7 位参与者 阅读完整话题
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容: 我的帖子已经打上 开源推广 标签: 是 我的开源项目完整开源,无未开源部分: 是 我的开源项目已链接认可 LINUX DO 社区: 是 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是 以上选择我承诺是永久有效的,接受社区和佬友监督: 是 以下为项目介绍正文内容,AI生成、润色内容已使用截图方式发出 为了加速开发效率和利用token plan,很多佬经常并行开多个Agent CLI窗口。 然而,codex / claude-code 回车一时爽,管理恢复火葬场。 为了解决项目中多Agent CLI工作台管理的问题,开发了 CC-Branch。 可视化管理项目 CLI 。一个项目中经常并发多开很多个窗口,不同的Agent CLi(Codex,Claude,Kimi-cli等等),不同的 Terminal (VS Code、Cursor、Warp等等),都可以在CLI的管理面板上快捷配置。 一键恢复Agent工作台 。之前不小心关闭了窗口,需要重新输入多次命令行,恢复之前的对话。现在CC Branch只需一键启动即可。 同时配置远端和本地项目 。支持通过SSH连接本地项目,同时支持一个Terminal面板下面混合本地和远程项目,实现跨端同项目协作。 欢迎访问项目链接,顺手点个star就更好啦~ 项目地址 : GitHub - GeminiLight/cc-branch: Restore your multi-agent CLI workbench in one click. · GitHub 桌面端下载链接 : Releases · GeminiLight/cc-branch · GitHub CLI 安装命令 : pip install cc-branch 可视化配置项目CLI 自定义配置Agent / Terminal 一键开启多 CLI 工作台 1 个帖子 - 1 位参与者 阅读完整话题
自己开发的交互式数据结构与算法学习网站,用分步动画把抽象算法变直观,边看运行边对照代码。 网站核心功能: 选择目标算法,点击播放即可观看完整执行过程。 同步高亮展示 C / Python / JavaScript 三语言源码,逐行对应运行步骤。 相关地址: 在线体验: https://dsa-six-phi.vercel.app 源码仓库: https://github.com/ttang1024/interactive-dsa 功能演示: https://www.bilibili.com/video/BV1BvVS6zEiM
最近cursor的Pro 订阅到期了,想着试试看换个工具,主要是我想用cursor接入第三方的模型,但是Agent 模式当接入的是第三方的时候受限.想问问各位老友,其他有什么好的可视化代码编辑器能接入第三方模型的,trae好用吗? 6 个帖子 - 6 位参与者 阅读完整话题
FlowForge Crypto:一款开源的可视化、节点式的现代密码学/加密解密工作台 平时在搞逆向分析、协议抓包或者 CTF 的时候,大家肯定没少跟各种加密算法打交道。为了验证一段数据是 AES 、RSA 还是单纯的 Base64 ,我们往往需要在各种在线工具、本地小插件,甚至写 Python 脚本之间来回切换,有时候步骤一多,自己都绕晕了。 为了解决这个痛点,我开发了一款 完全开源、纯前端运行 的可视化加密解密工作台 —— FlowForge Crypto 。 只需像连线游戏一样拖拽节点,就能直观地构建和测试复杂的加密工作流,执行过程所见即所得。今天开源分享给大家,希望能成为大家手边实用的辅助利器! 🌟 核心亮点 ⚡ 可视化工作流 :告别繁琐的代码和独立的转换工具。通过连线的方式组合各个算法节点,数据流向清晰可见,非常适合分析复杂的嵌套加密协议。 🛠️ 丰富的算法支持 : 对称加密 :AES (GCM/CBC), ChaCha20-Poly1305 等 非对称加密 :RSA, ECC (椭圆曲线) 哈希算法 :SHA-256, SHA-3, MD5 等 编码转换 :Base64, Hex, Base58, Base32, UTF-8 衍生与认证 :PBKDF2, Argon2, HMAC, JWT 解析, OTP 等 ⏱️ 实时执行反馈 :修改任意节点的参数或数据,整个工作流会瞬间自动重新计算。 📝 详细日志追踪 :内置执行日志,每一步转换的耗时和结果一目了然,方便定位错误。 🛡️ 安全隐私 :纯前端( React 19 + Vite )实现,核心基于 WebCrypto 及成熟库,所有数据计算都在浏览器本地完成, 不会上传任何数据 ,分析敏感协议时绝对安全。 📸 运行界面截图 🌐 访问与下载 本项目目前提供在线 Web 版(免安装直接用),同时也完全开源。 👉 **在线体验 (Live Demo)**: https://flowforge-crypto.pages.dev/ 💻 GitHub 开源地址 : https://github.com/marlkiller/flowforge-crypto 🚀 进阶玩法:一键导入工业级加密流 为了让大家快速上手,页面内置一些生成好的配置文件。在页面左侧菜单点击 [Demo] 按钮,即可一键加载完整的加解密/签名/验证流程 这个流程展示了: 多级派生 :从同一个密码派生出不同的加密密钥和签名密钥。 安全打包 :版本号 + 随机盐 + IV + 密文 + HMAC 签名的完整构造逻辑。 实时校验 :修改左侧任何输入,右侧解密链路实时联动,非常适合深入理解加密协议结构。 💡 后续计划 目前项目还在持续迭代中,后续计划加入: 更多小众逆向算法支持。 常用加密特征的自动识别节点。 工作流的本地导入导出功能。 欢迎各位大佬体验、拍砖、提 Bug 。如果觉得这个工具对你的分析工作有帮助,去 GitHub 给个 Star ⭐ 就更感激不尽啦!
最近写了一个用于 ChatGPT Codex analytics 页面的油猴脚本,致谢参考脚本: 完全准确查询你的GPT订阅周限的方法 插件地址: greasyfork.org Codex Quota Compass UI 在 ChatGPT Codex analytics 页面直接显示额度、重置时间、每日用量和客户端汇总。 主要功能: 在 Codex analytics 页面直接显示 5 小时 / 7 天窗口用量 显示已用百分比、剩余比例、下次重置时间 支持上次重置至今、本月初至今、近 30 天统计 支持每日 Token 明细和客户端汇总 Token 单位支持原始值、M、亿切换 支持表格 CSV 复制 面板可折叠、可调整大小,也支持全屏查看宽表格 主题配色会跟随 ChatGPT 官网浅色/深色模式 脚本不会展示或保存 accessToken / Cookie,只使用当前登录会话请求官方 analytics 接口 适用页面: https://chatgpt.com/codex/cloud/settings/analytics 如果你也经常看 Codex 用量,多人共用一个官号没经过sub2、cpa2中转站想查看具体总用量,或者觉得官方 analytics 页面信息不够直观,可以试试看。 Tips:claude桌宠是codex的宠物 4 个帖子 - 3 位参与者 阅读完整话题
因为做一个数据可视化产品 Sive ,所以做了一个适配风格的头像库,开源出来, MIT 协议,欢迎需要的使用,喜欢的给个 star ⭐️⭐️⭐️ 。 开源地址 : https://github.com/hustcc/vistars 预览官网 : https://vistars.ling.pub/ 生成的是很轻量的 svg ,前端、服务端都能运行,很容易做成服务接口 /avatar/<username> 。以下是 readme: vistars 👾🎨 SVG-based data visualization style avatars from any username and color palette. Works in both browsers and Node.js. Install npm install vistars Usage import vistars from 'vistars'; const svg = vistars({ name: 'Alice Johnson', variant: 'bar' }); // Use in browser document.getElementById('avatar').innerHTML = svg; // Use in Node.js server-side rendering fs.writeFileSync('avatar.svg', svg); CDN / Script Tag Usage <script src="https://unpkg.com/vistars/dist/index.umd.js"></script> <script> const svg = Vistars.vistars({ name: 'Alice Johnson', variant: 'donut' }); document.getElementById('avatar').innerHTML = svg; </script> Props Prop Type Default name string Clara Barton variant bar | donut | radar | line | heatmap | treemap | boxplot | pie | area | column | scatter | funnel | liquid | venn bar colors string[] ['#3b82f6', '#06b6d4', '#8b5cf6', '#f59e0b', '#ec4899'] size number | string 40 square boolean false light boolean false License MIT
Claude code装了很多一些开源的插件和skills , 例如ecc, 头脑风暴这些 , 但是很多有自带了很多重复的skills , 感觉很乱 , 有没有类似的可视化管理工具 2 个帖子 - 2 位参与者 阅读完整话题