包含关键字 typecho 的文章

之前大家做轻量级博客一般都是用像 Hugo、AcademicPages 这些 Jekyll 的框架配上 GitHub Pages + CF 加速,但这种方法编辑不方便。此外,像 AstroPages 这种新的框架动画做的非常好看,值得一试。

我的博客:~/tosaki
模板仓库地址:GitHub - t0saki/AstroPages-Bilingual

核心特色

  • 优雅的阅读体验
    • 极简风格,支持亮色 / 暗色模式自动切换。
    • 中文字体优化:集成了思源宋体(Source Han Serif),不管是正文还是代码块,在各种屏幕上看着都很舒服。
  • 像 Notion 一样的写作后台
    • 内置了 Keystatic CMS,你可以直接在浏览器里由可视化界面写文章、传图片、配置 SEO 信息。
    • 点击 “保存” 会自动同步到 GitHub,完全不用碰命令行。
  • 原生双语支持
    • 不是简单的机器翻译插件,而是完整的双语内容结构。中英文文章独立管理,互不干扰。站长可以借助更强大的 AI 提前翻译好文章,或者直接修改几行去掉双语支持。
  • SEO 友好
    • 自动生成双语 Sitemap 和 RSS 订阅源,对搜索引擎极其友好。

📌 转载信息
原作者:
tosaki
转载时间:
2026/1/12 15:02:45

ClaudeCode 如何配置 LSP 在 windows Powershell 上

 { "name": "pyright-lsp", "description": "Python language server (Pyright) for type checking and code intelligence", "version": "1.0.0", "author": { "name": "Anthropic", "email": "support@anthropic.com" }, "source": "./plugins/pyright-lsp", "category": "development", "strict": false, "lspServers": { "pyright": { "command": "pyright-langserver", "args": [ "--stdio" ], "extensionToLanguage": { ".py": "python", ".pyi": "python" } } } }, 

~/.claude/plugins/marketplaces/.claude-plugin 文件夹下有一个 marketplace.json 文件如上所示,powershell 中需要 $env:ENABLE_LSP_TOOL=1 配置这个

PS D:\project\LTC-strategy3> where.exe pyright-langserver
D:\nvm-nodejs\pyright-langserver
D:\nvm-nodejs\pyright-langserver.cmd

D:\nvm-nodejs\pyright-langserver.cmd 路径替换 json 文件中的 command 变量,示例如下

    {
      "name": "pyright-lsp",
      "description": "Python language server (Pyright) for type checking and code intelligence",
      "version": "1.0.0",
      "author": {
        "name": "Anthropic",
        "email": "support@anthropic.com"
      },
      "source": "./plugins/pyright-lsp",
      "category": "development",
      "strict": false,
      "lspServers": {
        "pyright": {
          "command": "D:\\nvm-nodejs\\pyright-langserver.cmd",
          "args": [
            "--stdio"
          ],
          "extensionToLanguage": {
            ".py": "python",
            ".pyi": "python"
          }
        }
      }
    },

📌 转载信息
转载时间:
2026/1/12 15:02:02

最近启动了 Ally-Health 项目的可视化工作。

tips: 申请要个小

在这个可视化工作中我需要完成如下内容

  1. 套壳
  2. 能够正常交互到 claude code 的工具

遇到的问题

  1. 我没有购买 claude code 官方的计划 因此我需要解决中转
  2. 如何才可以读取到 某个目录下的 skill 或者斜杠命令

第一个问题的解决方案如下

# Claude API 配置 ANTHROPIC_API_KEY=GLM秘钥
ANTHROPIC_AUTH_TOKEN=GLM秘钥
ANTHROPIC_BASE_URL=https://api.z.ai/api/anthropic


# 工作目录(可选) WORKSPACE_DIR=/Users/zhangsan/cc-sdk-demo

第二个问题需要采用下面代码

const result = query({
      prompt: '/get-profile',
      // prompt: '项目里面有什么?',

      options: {
        settingSources: ["user", "project", "local"],
        cwd: config.workspaceDir,
        permissionMode: 'bypassPermissions',
        allowDangerouslySkipPermissions: true,
        allowedTools: [
          "Skill",
          "Bash",
          "WebSearch",
          "WebFetch",
          "Bash",
          "Write",
          "Read",
          "Glob",
          "Task",
          "Grep",
          "LS",
          "ExitPlanMode",
          "Edit",
          "MultiEdit",
          "NotebookEdit",
          "TodoWrite",
          "BashOutput",
          "KillBash"
        ],

      }
    });

这里特别说明:

  1. prompt: ‘/get-profile’, 是我们准备好的命令
  2.  cwd: config.workspaceDir, 是项目目录
    
  3. allowedTools 尽量按照上面的内容编写

验证

 for await (const message of result){

      if (message.type === "system" && message.subtype === "init") {
        console.log("Available commands:", message.slash_commands);
      }

套壳相关的就不具体展开讨论了~


📌 转载信息
原作者:
Zenf
转载时间:
2026/1/12 15:01:47

网络不是法外之地

因为大量用户在 APP 上与 AI 智能体 “聊黄”,APP 的主要开发和运营者被追究了刑责。2025 年 9 月,上海市徐汇区人民法院一审判决,两名被告人犯制作淫秽物品牟利罪,分别获刑四年、一年半。此案成为国内首起 AI 服务提供者涉黄获刑的案件。

案涉 APP Alien Chat(以下简称 AC)是一款 AI 伴侣聊天应用,定位是为年轻群体提供亲密陪伴和情感支持。用户在 AC 注册会员后,可与 AI 聊天。判决书披露,AC App 手机注册用户 11.6 万人,其中付费用户 2.4 万人。截至案发,共收取会员充值费 363 万余元。用户注册会员后,可以自行创建虚拟角色或者使用他人创建并公开的虚拟角色,通过软件与大语言模型进行交互聊天。

在 AC 某官方社交账号评论区,不少用户评价这款 AI 产品 “聪明”“限制少”,也有用户表示,其他用户和角色聊黄,“教坏” 了 AI 模型,从而影响了自己的聊天体验。

一审法院认为,AC 产生了 “大量具体描绘性行为或露骨宣扬色情的内容”,属于淫秽物品。

新京报记者获悉,两名被告人不服判决提出上诉,案件二审将于 1 月 14 日在上海市第一中级人民法院开庭





📌 转载信息
转载时间:
2026/1/12 15:01:34

2025 年最后一天能到的驾照,一月 4 号用我表妹的车在镇上开了十几公里,体验很差(省去一万个细节)挺打击信心,鼓起勇气想自己租一辆车来练练。周日晚上就定了这辆雅阁(十代半的版本),这是我最喜欢的一辆日系车。

周六早上出发,为了避开周五晚高峰。本来不打算走高速的,但是导航没设置好,被带到高速口,在副驾“鼓励”下,嗯,上高速了。第一次上高速全程跟在右二车道,跑起来竟然觉得没压力。

下午在我家后面跑山路,也是很崎岖,坡度特别大,但是开始有车感了。

第二天上午先去了一趟牛王寨(外婆家那边),据说是合肥第一高峰。打卡完就立马返回了,这一趟练够了窄路会车,说起来小时候去外婆家每次在这种小路会车都觉得好害怕。趁着吃饭前,我跑去了汤池镇,看了一眼稻田咖啡。这大概是我第一次上国道,国道红绿灯还是比较多的。

下午先去庐江南面的黄陂湖,看了芦苇荡和鸟。接着继续南下去了庐南川藏线,到达的时候快傍晚了,人不多,景区非常干净,那个网红云顶咖啡就在这里。最有印象的是六道坡真的开起来很有乐趣。返回的时候是我第二次走高速,这时候已经一点不害怕了,速度也飙上来(安全第一)。

第三天早上返回合肥,全程高速(速度也飙上上来了,安全第一)这次还在高速上练了很多次超车,特别容易把速度飙到自己的 bp (安全第一)。

到达合肥后去了一趟政务服务中心办了个事,第一次想进去的时候保安说地下车库满了,我问他哪里可以停车他又不告诉我,然后我就围着政务大楼转了一圈,再去的时候看到有车在门口等,出去一辆再放进去一辆,我也跟着等了。(这里才想起来是不是第一次也应该等一下?)

办好事,就去卡点还车了。取还车都是有专门的小哥和我联系,帮助处理任何相关问题。按照指示就行了。

这次租车两天+两小时,跑了 420 公里。用了 21 升油,油费¥74 ,包括在总费用账单里。因为购买无忧服务,所以不用管油。另外三趟高速费¥75 ,本次租车总费用 ¥516.07 。

这辆雅阁已经跑了 100000 公里,加满油可以跑 700 多公里,拿到车的时候看到剩余里程真的很心安。虽然没开过什么车,但是我完全能感受出来,这辆雅阁是真的好开。两天里,它陪我度过新手的试炼,陪我去看了山川湖海,陪我回家和返程,陪我去政务办事。

上路之前总是害怕自己搞不定,但最后我又总能鼓起勇气去尝试。

加载不出来的视频先放:

https://i.imgur.com/NfqwMXL.mp4


其他图片











最近站里各位佬的公益站 / 转发站越来越多,屯屯鼠本鼠余额也攒了不少。公益站稳定性不可预测,经常写着写着代码就得停下来换站点。

所以让 Claude 搓了这个:Claude Code Proxy

用了 N 周还算稳定,就一个 py 脚本,核心功能:

  • Web UI 切换供应商,自动拉取模型列表
  • 一键复制 URL/Key/Model、打开签到 / 福利站链接、保持账号活跃
  • 多终端统一出口 IP,避免多设备访问同一公益站被封号

快速开始

仓库地址: GitHub - QAA-Tools/ccproxy: 轻量级 Claude API 反向代理,Web UI 即时切换供应商,自动发现模型,批量测试保持账号活跃。Lightweight Claude API reverse proxy with Web UI for instant provider switching, auto model discovery, batch testing to keep accounts active.

使用文档: Claude Code Proxy - 轻量级 Claude 代理切换工具

  1. 复制配置文件:
copy config.in.json config.json
  1. 编辑 config.json,填入你的公益站信息:
{ "HOST": "0.0.0.0", "PORT": 3456, "APIKEY": "sk-your-local-ui-key", "Providers": [ { "name": "站点1", "api_base_url": "https://api.example.com/v1/messages", "api_key": "sk-provider-key-1", "models": [], "checkin": "https://example.com/console/personal" } ] } 
  1. 启动代理:
python ccproxy.py --config config.json
  1. 修改 Claude Code 配置(~/.claude/settings.json%USERPROFILE%\.claude\settings.json):
{ "env": { "ANTHROPIC_AUTH_TOKEN": "sk-your-local-ui-key", "ANTHROPIC_BASE_URL": "http://127.0.0.1:3456" } } 

注意: ANTHROPIC_AUTH_TOKEN 要和上面的 APIKEY 一致。改完重启 CC CC 支持热重载,不用重启。

  1. WebUI 地址 http://127.0.0.1:3456,用 APIKEY 作为密码登录(用户名随便填)

WebUI 使用

基础操作:

  • 下拉选择 provider,立即生效
  • Refresh 按钮自动拉取上游模型列表
  • 选模型后点 Copy,粘贴 /model xxx 命令到 CC 切换模型
  • 上游挂了就回网页换一个
  • 改了 config.jsonReload Config 重新载入,不用重启代理

保活操作:

  • Refresh & Test 按钮,屯屯鼠保活,测试结果显示为颜色:绿色(成功)/ 黑色(失败)
  • 若失败可查看输出日志排查原因
  • 签到 按钮快速跳转到站点签到页面领额度

进阶技巧:

  • 点击 settings.json 按钮,将剪贴板粘贴到 ~/.claude/settings.json 文件中,也可以不重启 Claude Code 立即切换供应商


本脚本的配置格式兼容 ccr,但不包含模型转换功能(只支持原生 Claude 格式的 API)。

(对比) 之前采用的 公益站 切换方案:

  • NewAPI:能自动拉模型列表,兼容 CC/Chat 等调用方式,适合佬们开公益站。但个人用来管理公益站 URL 的话,出问题排查太费事
  • ccr:功能很全,路由能力强(能把不同模型转换)。但模型列表要自己填,Web 界面改配置经常不生效,路由功能用不到
  • cc-switch:热重启切换,单机体验很好。但配置只能图形界面或 SQLite 改,我更习惯直接编辑 JSON

因为经常要在 Linux 服务器上跑,就想要个更简单的方案:JSON 配置 + 不重启 CC 就能切换 + 自动拉模型列表 + 定期保活避免被清号。

类似项目推荐


📌 转载信息
转载时间:
2026/1/12 11:38:58

前期回顾
https://linux.do/t/topic/776482
https://linux.do/t/topic/777708

封号时间:2025 年 8 月 8 日
封号原因:不断的绑卡,试卡,想白嫖谷歌云 300 刀,后面直接被谷歌封禁。

补救措施:被封控之后,我不断的尝试申诉登录,结果风控系统升级,之前绑定的二次验证,恢复邮箱和手机号码,备用码,包括 2fa 都用不了,必须要注册时的号码。

因为是接码平台注册,不能二次接码,进入死循环无法完成验证和申诉。

得出的结论:当被账号封控之后,我们不要做过多的尝试,尝试次数过多,封控会越来越强,最有效的方法就是晾着不管,等待一周,一个月,三个月或半年多,再尝试登陆谷歌会让你重新填一个号码。

gemini 告诉我,封控的账号有冷却时间,试过一次不成功就不要尝试了,得过 24 小时,要不然会加重封控。

这时要找长期稳定能接码的号码,家人或朋友的号码都可以,86 的也行的,说来也奇怪,我这个号码都绑定了很多账号的恢复号码和验证号码,那天可能是 ip 质量好,一填上去就能顺利接码,我猜测用于安全存储的安全验证号码,可能 2~3 个月才能接一次。

我还有两个谷歌靓号账号也是只要找稳定能接码的号码就能救回,在删号前救回就行了,如下图所示。

救号流程:我们输入邮箱和密码,过人机验证,验证 2fa,重新填一个新的接码号码,验证号码,这时候会提示你账号已经被封禁,“看起来这个账户的使用方式违反了谷歌的政策。
该账户已于 202x 年 x 月 x 日失效。自 202x 年 x 月 x 日起,该账户将被考虑删除。” 点击开始上述,申诉理由可以让 ai 写,内容大概是我是美国人,在中国工作,需要使用 vpn, ip 变动大,或者我是真实用户,机器审核的。然后填写一个通知邮箱,等待邮件通知,一般第 2 天就会收到。如果审核通过了,恢复了最好也要晾个一两天,找一个干净的 ip 登录。申诉不过的话,隔几天再重新申请。

这个时候你再登录,会让你重新接码验证,收到验证号码,填入就能登录,登录再修改一下密码和头像之类的,活跃一下账号。

保号养号措施:经常使用谷歌生态应用就行,尽可能的像真人使用,例如收发邮件,使用谷歌搜索,观看油管,使用谷歌硬盘之类的。

2026 年注册谷歌账号流程:
用没有注册过的安卓手机,平板或者苹果手机,在谷歌邮箱 app 或者谷歌商店里面添加账号注册就行,尽可能的模拟真实环境,提前几天修改手机的国家,时区还有语言,注册时要关掉手机定位,因为现在注册谷歌账号要求很高,有设备环境验证,ip 网络验证等,提前想好要注册的账号内容(名称,名字,生日,密码)准备好手机号码,为什么要提前准备?在账号注册过程中,如果反复尝试某个环节,谷歌就会将设备标记为不可靠。
账号注册成功之后可能会遇到立刻封号验证手机号码或者强制退出封控,现在这些都是正常的真人验证,按照相应的流程申诉就行,最好也要晾几天再申诉。

账号注册一点都不难,难的是没有那么多号码接码。


📌 转载信息
转载时间:
2026/1/12 11:26:26


如图,每次一轮对话完成进行 toast 提示 + 系统提示音

{ "alwaysThinkingEnabled": true, "env": { "ANTHROPIC_MODEL": "claude-sonnet-4-5-20250929", }, "hooks": { "Stop": [ { "hooks": [ { "command": "powershell -NoProfile -Command \"[Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null; $t=[Windows.UI.Notifications.ToastTemplateType]::ToastText02; $x=[Windows.UI.Notifications.ToastNotificationManager]::GetTemplateContent($t); $x.GetElementsByTagName('text')[0].AppendChild($x.CreateTextNode('Claude'))|Out-Null; $x.GetElementsByTagName('text')[1].AppendChild($x.CreateTextNode('Stop'))|Out-Null; $toast=[Windows.UI.Notifications.ToastNotification]::new($x); [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier('Windows PowerShell').Show($toast)\"", "type": "command" }, { "command": "powershell -NoProfile -Command \"[console]::Beep(1000,200)\"", "type": "command" } ] } ] } } 

📌 转载信息
转载时间:
2026/1/12 10:55:11

之前分享了一个自用的 docx-format skill, 发现能帮到不少佬友。在此分享一个自己更常用的 SKILL:code-style-review. 原理是把我平常的代码风格沉淀下来作为 SKILL:绝对避免防御性编程、绝对避免复杂性编程。感兴趣的佬友们可以二次开发反馈~

code-style-review.zip

贴一下 SKILL.md 文档:

---
name: code-style-review
description: Python code style guide for clean, maintainable code. Use when writing or reviewing Python code.
---

# Python Code Style Guide

## 必须 (Must)

### Naming
- Classes: `PascalCase` (e.g., `DataLoader`, `ConfigManager`)
- Functions/methods: `snake_case` with verb-first (e.g., `load_data`, `process_batch`)
- Constants: `UPPER_CASE` (e.g., `MAX_RETRIES`, `DEFAULT_TIMEOUT`)
- Math operations: single-letter variables allowed (N, D, x, y)

### Exception Handling
- Fail-fast: no defensive try/except, let errors crash early
- Use `logger.warning()` for recoverable issues, not exceptions

### Code Philosophy
- No over-engineering; keep it simple
- Comments in English only
- Follow Occam's Razor: no unnecessary complexity

## 尽量 (Should)

### Comments & Docs
- Minimal docstrings; only for complex logic
- Explain "why", not "what"
- Self-explanatory code needs no comments

### Imports
- Order: stdlib → third-party → local (blank lines between)
- Prefer absolute imports
- Explicit names, avoid `import *`

### Function Design
- Explicit parameters; avoid `**kwargs`
- Multiple returns: use tuple
- Avoid hidden global state

### Code Organization
- Layered architecture: low-level → high-level
- OOP for core logic
- Separation of concerns

### Aesthetics
- Clean alignment and simple naming
- Colorful output / progress bars for UX
- Use `logging` module

## 可选 (Optional)

### Type Annotations
- Python 3.10+ syntax: `list[int]`, `X | None`
- Annotate public methods and return types

### Assert
- Use sparingly for invariants; don't overuse

### Logging
- Optionally write logs to file (ask user first)

## 加分项 (Nice to Have)

### Data Structures
- Use `@dataclass` for configs
- Prefer simple containers (list, dict)

---

## Code Review (Codex)

All code review is delegated to Codex. Claude should NOT run scripts directly.

When invoking, Claude MUST replace placeholders with absolute paths:
- `{SKILL_DIR}` → absolute path to this skill directory (e.g., `/Users/xxx/.claude/skills/code-style-review`)
- `{TARGET}` → absolute path to file(s) or directory to review (supports multiple files or recursive directory scan)

```bash
codex exec -m gpt-5.2 \
  -c model_reasoning_effort="xhigh" \
  --dangerously-bypass-approvals-and-sandbox \
  --skip-git-repo-check \
  "You are a code style reviewer. Review the Python code for style compliance.

## Paths (absolute)
- Skill directory: {SKILL_DIR}
- Target to review: {TARGET}

## Setup (run once if tools missing)
bash {SKILL_DIR}/setup.sh

## Your Tasks
1. Read the style guide: cat {SKILL_DIR}/skill.md
2. Run automated linter: ruff check --config {SKILL_DIR}/ruff.toml {TARGET}
3. Run custom checker: python3 {SKILL_DIR}/style_check.py {TARGET}
4. Read and analyze the target code
5. Combine automated results with your own analysis

## Output Format
Provide a structured review:
- **Summary**: Overall assessment (pass/needs work/fail)
- **Automated Issues**: List violations from ruff and style_check.py
- **Manual Review**: Issues requiring human judgment (over-engineering, naming clarity, code aesthetics)
- **Suggestions**: Specific, actionable improvements with code examples

## Priority Levels
- 必须 (Must): Violations are errors, must fix
- 尽量 (Should): Violations are warnings, should fix
- 可选 (Optional): Suggestions for improvement
- 加分项 (Nice to Have): Optional enhancements" 2>/dev/null

📌 转载信息
转载时间:
2026/1/12 10:55:07

折腾了一圈衬线字体看书用,口味上偏楷书,目前最喜欢这两个。



霞鹜文楷规整清晰,偏旁部首倾泻而出;方正楷书则更顿挫,字字浑然一体。

V 友有没有推荐?

为什么做这个?

备考的日子里,我总是很难准确知道自己每天到底学了多少时间。

手动计时太麻烦,番茄钟又总是忘记开。坐在电脑前一整天,感觉学了很久,但实际有效学习时间可能只有几个小时。

于是我想:能不能让电脑自动帮我记录学习时间?

就像运动手环自动记录步数一样 —— 打开网课页面就自动开始计时,关掉就停止。不需要任何操作,专注学习就好。

快学点儿吧 就这样诞生了

功能亮点

功能说明
桌面程序基于 Tauri 的轻量应用,安静地待在系统托盘
浏览器扩展Chrome 扩展自动检测学习页面,无需手动操作
手机 APPFlutter 开发的 Android 应用,随时随地查看学习数据
云同步多设备数据无缝同步,电脑手机数据互通
数据统计直观的图表展示学习轨迹,日 / 周 / 月维度分析
目标管理设定每日目标,倒计时考试日期
智能通知学习里程碑提醒(可关闭,不打扰你)
开机启动随系统自动运行,打开电脑就开始守护

工作原理

┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│   Chrome 浏览器  │────▶│     桌面程序     │────▶│    手机 APP     │
│    (扩展程序)    │     │   (时间记录器)   │     │   (查看统计)    │
└─────────────────┘     └─────────────────┘     └─────────────────┘
  1. Chrome 扩展 监控你的浏览器标签页
  2. 当你访问的 URL 匹配某个课程时,通知桌面程序
  3. 桌面程序 开始计时,数据存储在本地 SQLite 数据库
  4. 可选同步 到云端,在手机上查看统计数据

演示图:

桌面程序

移动 APP:


📌 转载信息
原作者:
Ar3s
转载时间:
2026/1/12 10:39:05

今日为保稳定,遂开通,但感觉额度略少。以及倍率略高,遂以个人方法测试。
PS:仅使用个人语料库测试,算法各有不同,可保证复现

日期范围:2026-01-11

数据来源:/root/.codex/sessions/2026/01/11/rollout-*.jsonl

计算脚本:codex 倍率计算.py:1

重要说明

1. 本报告使用的是 Codex 本机 rollout 会话文件中 token_count 事件的累计 token 统计;不依赖任何主观估计。

2.“缓存折扣系数 α=0.1” 无法从日志中自动推断(日志只记录 cached_input_tokens 数量,不记录计费规则 / 账单),因此本报告把它作为 “外部配置输入” 参与计算。

3. 同一天如果继续使用 Codex,会新增 / 更新更多 rollout,导致 “当日汇总值” 变化;本报告反映的是运行脚本时刻在该目录内可解析到的结果。

  1. 计费配置(输入参数)
  • 输入单价 Pin = $0.8750 / 1M tokens

  • 输出单价 Pout = $7.0000 / 1M tokens

  • 输出 / 输入价格比 r = Pout / Pin = 8

  • 缓存折扣系数 α = 0.1(即缓存输入 token 按输入价的 10% 计费)

  • 有效工作量口径:W = U + O(新增输入 + 输出)

———

  1. 日志字段与符号定义(从 rollout 直接读取)

从每个 rollout-*.jsonl 的 event_msg.type=token_count 的 info.total_token_usage 取:

  • I = input_tokens(总输入 token)

  • C = cached_input_tokens(命中缓存的输入 token)

  • U = I - C(未命中 / 新增输入 token)

  • O = output_tokens(输出 token)

———

  1. 指标定义(“基准词 + 真实倍率”)

为把 “输出更贵、缓存更便宜” 的成本结构统一到一个尺度,采用 “等价输入 token” 折算:

  • 等价基准词(Equivalent Baseline Tokens)

    E = U + α*C + r*O

  • 有效工作词(Work Tokens)

    W = U + O

  • 真实倍率(Real Multiplier)

    M = E / W

并给出对应成本与 “有效单价”:

  • 输入成本 Cin = (U + α*C) / 1e6 * Pin

  • 输出成本 Cout = O / 1e6 * Pout

  • 总成本 Ctotal = Cin + Cout

  • 有效单价(每 1M 有效工作词)P_eff = Pin * M

———

  1. 取数范围与纳入情况(可复现)
  • 当天目录内存在多个 rollout-*.jsonl;脚本实际读取到 5 个包含可用 token_count 的 rollout 并纳入汇总。

  • 复现命令(本报告实际使用):

    python3 codex 倍率计算.py --date 2026-01-11 --pin 0.875 --pout 7 --alpha 0.1 --sessions-root /root/.codex/sessions --denom U+O --breakdown --classify

———

  1. 当日汇总结果(5 个 rollout 合计)

Token 汇总

  • I = 16,882,855

  • C = 16,058,496

  • U = 824,359

  • O = 145,980

  • 缓存命中率 C/I = 95.117182%

倍率汇总(α=0.1,W=U+O)

  • E = 3,598,048.6

  • W = 970,339

  • 真实倍率 M = 3.708033×

  • 有效单价 P_eff = $3.244528 / 1M 有效工作词

成本拆分(美元,按 α=0.1)

  • Cin = $2.1264325

  • Cout = $1.0218600

  • Ctotal = $3.1482925

  • 基准成本(把 W 全部按输入价计费):baseline_cost = $0.8490466

  • 成本倍率(与 M 一致):Ctotal /baseline_cost = 3.708033×

———

  1. 分会话(rollout)结果与 “模拟用户行为” 分类(基于日志回放)

说明:这里的 “模拟用户行为” 并非人工控制实验,而是对已有会话做回放式归类(依据:提示相似度 + 工具调用密度)。为对外展示,本报告不展示原始提示词全文,仅展示分类、token 与倍率。

  • rollout-2026-01-11T09-49-54-019baabe-e078-7fe2-9d1b-3a11c91e51ac.jsonl

    • 分类:cold_start

    • I/C/U/O = 34,663 / 33,664 / 999 / 88

    • 命中率:97.117964%

    • 真实倍率 M:4.663661×

  • rollout-2026-01-11T09-53-11-019baac1-e04c-72c3-a7df-d5c5d0eb98b2.jsonl

    • 分类:cold_start

    • I/C/U/O = 11,521 / 10,752 / 769 / 97

    • 命中率:93.325232%

    • 真实倍率 M:3.025635×

  • rollout-2026-01-11T09-55-03-019baac3-963c-7353-9849-2614a76f03b6.jsonl

    • 分类:tools_dense(工具调用密集)

    • 工具调用统计(来自 rollout):exec_command=156, update_plan=24, apply_patch=20, write_stdin=8

    • I/C/U/O = 11,633,072 / 11,147,008 / 486,064 / 73,377

    • 命中率:95.821706%

    • 真实倍率 M:3.910655×

  • rollout-2026-01-11T10-34-55-019baae8-149c-7e82-ac18-2de8db88bc1b.jsonl

    • 分类:tools_dense

    • 命中率:93.960516%

    • 真实倍率 M:3.433297×

  • rollout-2026-01-11T11-21-02-019bab12-4eef-7d83-96b4-6de8dc37feb6.jsonl

    • 分类:tools_dense

    • 工具调用统计:exec_command=44, write_stdin=8

    • I/C/U/O = 911,345 / 834,048 / 77,297 / 22,605

    • 命中率:91.518360%

    • 真实倍率 M:3.418768×

———


📌 转载信息
转载时间:
2026/1/12 10:38:09

给商店版来点好评吧,真的有用诶,审核确实变快了

同站点 Cookie 多账号支持:同站点多个 Cookie 账号也能和平共处

  • 支持同一站点下 多个 Cookie 认证账号共存,互不串号、功能也能正常用
  • Anyrouter 的 cookie 多账号已通过测试

模型情况更透明:各种可用性一测就知道

  • 模型列表新增 接口可用性检测(Beta)
    • 一次性测试常见能力:文本生成 / 工具调用 / 结构化输出(JSON)/ 联网搜索等
    • 每个检测项都有清晰结论:通过 / 失败 / 不支持,并能看到耗时,方便定位是接口问题还是模型问题
  • 模型列表新增 CLI 工具兼容性检测(Beta)
    • 直接模拟 Claude Code / Codex CLI / Gemini CLI 的调用
    • 提前判断 “在这些 CLI 里大概率能不能跑通”,少走很多弯路

兑换更省操作:批量兑换,失败重试

  • 兑换助手支持 批量兑换 功能,一次性解析并兑换多个兑换码,极大提升效率
  • 支持 单码重试:可以单个重试,失败的码不用整批重来

原生签到和外部签到站各走各路:再也不互斥

  • 拆分 “站点签到” 和 “自定义 / 外部签到” 的逻辑,互不干扰
  • 可以在原生签到的基础上,同时使用外部签到站 / 福利站,再也不用书签拉满(虽然其实原来就可以,但之前会互斥嘛

其他更顺手的优化

  • 侧边栏模式下会避免出现 “重复打开侧边栏” 的入口,减少误操作和干扰
  • CLIProxyAPI 导出时可以一起设置 代理 URL、以及 模型 name → alias 的映射列表,导出后更接近 “能直接用” 的状态

此为 3.0 - 3.2 的更新日志,更多内容请见: 更新日志 | All API Hub - 中转站管理器

完整插件介绍


📌 转载信息
原作者:
qi_xing_jk
转载时间:
2026/1/12 10:36:20

这两天死了么很火,作为小白的我也想试试,但是收费了,花钱不存在的。
纯小白,代码 ai 写的,我不会。简简单单的实现了功能,里面还可以加很多功能,注册用户,多用户通知,我就不为难 ai 了,交给你们这群程序员了~嘿嘿~

原理就是签到证明自己活着。

实现:每天都要充电,iPhone 用户插电运行快捷指令,访问固定域名,记录下来,然后到期没有再运行这个快捷指令就证明死了。发 bark 给接收人。

需要用到 Cloudflare 的 worker 和 kv,新建 kv 名称写 CLOCKIN_KV,里面的值是账号密码,照着抄就行。


worker 绑定要写对变量,如图:


worker 中设置运行时间,我设置的是一天两次 0 9,21 * * * 用的白嫖的域名。


iPhone 快捷指令就是一个简单的请求,我的用户名是 mengnimen 密码是 123456,到时候根据你自己在 kv 里设置的值自己改。

https://你的域名/clockin?user=mengnimen&pwd=123456

快捷新建一个 获取 URL 内容 即可。


在自动化中添加一个充电运行的,记得把立即运行打开

以后就是每次充电运行,记录你还活着,一天不记录,就会发通知给 bark 接收人

纯小白,代码 ai 写的,我不会。代码中需要添加 bark 地址,多长时间认为活着也可以改,自己看注释就行了。简简单单的实现了功能,里面还可以加很多功能,注册用户,多用户通知,我就不为难 ai 了,交给你们这群程序员了~嘿嘿

export default {
  async fetch(request, env, ctx) {
    const url = new URL(request.url);
    const path = url.pathname;

    try {
      if (path === "/" || path === "/health") return json({ ok: true });

      if (path === "/clockin") return await handleClockin(url, env);
      if (path === "/check") return await handleCheck(url, env);

      return json({ ok: false, error: "Not Found" }, 404);
    } catch (e) {
      return json({ ok: false, error: e?.message || String(e) }, 500);
    }
  },

  async scheduled(event, env, ctx) {
    ctx.waitUntil(runTimeoutCheck(env));
  },
};

const CONFIG = {
  ALERT_AFTER_DAYS: 1,
  MIN_ALERT_INTERVAL_HOURS: 6,
  DEFAULT_NOTIFY: { type: "bark", url: "" }, // 这里填默认 bark 或钉钉
  TITLE: "死了",
  NOTIFY_ON_CLOCKIN: false,
};

async function handleClockin(url, env) {
  const user = (url.searchParams.get("user") || "").trim();
  const pwd = (url.searchParams.get("pwd") || "").trim();
  if (!user || !pwd) return json({ ok: false, error: "Missing user or pwd" }, 400);

  const ok = await verifyUserPlain(user, pwd, env);
  if (!ok) return json({ ok: false, error: "Auth failed" }, 401);

  const now = Date.now();
  await env.CLOCKIN_KV.put(kLastTime(user), String(now));

  if (CONFIG.NOTIFY_ON_CLOCKIN) {
    await sendNotify(env, user, { title: "还活着", body: `已记录:${formatTime(now)}` });
  }

  return json({ ok: true, user, last_time: now, last_time_text: formatTime(now) });
}

async function handleCheck(url, env) {
  const user = (url.searchParams.get("user") || "").trim();
  const pwd = (url.searchParams.get("pwd") || "").trim();
  if (!user || !pwd) return json({ ok: false, error: "Missing user or pwd" }, 400);

  const ok = await verifyUserPlain(user, pwd, env);
  if (!ok) return json({ ok: false, error: "Auth failed" }, 401);

  const now = Date.now();
  const lastStr = await env.CLOCKIN_KV.get(kLastTime(user));
  const lastMs = lastStr ? Number(lastStr) : null;

  const thresholdMs = CONFIG.ALERT_AFTER_DAYS * 24 * 60 * 60 * 1000;
  return json({
    ok: true,
    user,
    now,
    now_text: formatTime(now),
    last_time: lastMs,
    last_time_text: lastMs ? formatTime(lastMs) : null,
    since_hours: lastMs ? round2((now - lastMs) / 3600000) : null,
    threshold_days: CONFIG.ALERT_AFTER_DAYS,
    is_timeout: lastMs ? (now - lastMs > thresholdMs) : true,
  });
}

async function runTimeoutCheck(env) {
  const now = Date.now();
  const thresholdMs = CONFIG.ALERT_AFTER_DAYS * 24 * 60 * 60 * 1000;
  const minIntervalMs = CONFIG.MIN_ALERT_INTERVAL_HOURS * 60 * 60 * 1000;

  let cursor = undefined;
  let checked = 0;
  let alerted = 0;

  while (true) {
    const listRes = await env.CLOCKIN_KV.list({ prefix: "user_pwd:", cursor });
    cursor = listRes.cursor;

    for (const k of listRes.keys) {
      const user = k.name.slice("user_pwd:".length);
      checked++;

      const lastStr = await env.CLOCKIN_KV.get(kLastTime(user));
      const lastMs = lastStr ? Number(lastStr) : 0;

      const timeout = !lastMs || (now - lastMs > thresholdMs);
      if (!timeout) continue;

      const lastAlertStr = await env.CLOCKIN_KV.get(kLastAlert(user));
      const lastAlertMs = lastAlertStr ? Number(lastAlertStr) : 0;
      if (lastAlertMs && (now - lastAlertMs < minIntervalMs)) continue;

      const hours = lastMs ? round2((now - lastMs) / 3600000) : null;
      const body = lastMs
        ? `你已超过 ${hours} 小时未进行“活着打卡”。\n上次记录:${formatTime(lastMs)}`
        : `未找到打卡记录,请连接充电器触发一次打卡。\n当前时间:${formatTime(now)}`;

      const ok = await sendNotify(env, user, { title: CONFIG.TITLE, body });
      if (ok) {
        alerted++;
        await env.CLOCKIN_KV.put(kLastAlert(user), String(now));
      }
    }

    if (listRes.list_complete) break;
  }

  await env.CLOCKIN_KV.put("meta:last_run", String(now));
  await env.CLOCKIN_KV.put("meta:last_run_summary", JSON.stringify({ now, checked, alerted }));
  return { checked, alerted, now };
}

/** 明文校验:KV 中 user_pwd:<user> 直接存明文 */
async function verifyUserPlain(user, pwd, env) {
  const stored = await env.CLOCKIN_KV.get(kUserPwd(user));
  if (!stored) return false;
  return stored === pwd;
}

async function sendNotify(env, user, msg) {
  let notify = null;
  const perUserStr = await env.CLOCKIN_KV.get(kNotify(user));
  if (perUserStr) {
    try { notify = JSON.parse(perUserStr); } catch {}
  }
  const type = notify?.type || CONFIG.DEFAULT_NOTIFY.type;
  const url = notify?.url || CONFIG.DEFAULT_NOTIFY.url;
  if (!url) return false;

  if (type === "dingtalk") return await sendDingTalk(url, msg);
  return await sendBark(url, msg);
}

async function sendBark(baseUrl, msg) {
  const title = encodeURIComponent(msg.title || "提醒");
  const body = encodeURIComponent(msg.body || "");
  const u = `${baseUrl.replace(/\/$/, "")}/${title}/${body}`;
  const r = await fetch(u, { method: "GET" });
  return r.ok;
}

async function sendDingTalk(webhookUrl, msg) {
  const payload = { msgtype: "text", text: { content: `${msg.title || "提醒"}\n\n${msg.body || ""}` } };
  const r = await fetch(webhookUrl, {
    method: "POST",
    headers: { "content-type": "application/json;charset=utf-8" },
    body: JSON.stringify(payload),
  });
  return r.ok;
}

const kUserPwd = (user) => `user_pwd:${user}`;
const kLastTime = (user) => `last_time:${user}`;
const kLastAlert = (user) => `last_alert:${user}`;
const kNotify = (user) => `notify:${user}`;

function json(obj, status = 200) {
  return new Response(JSON.stringify(obj, null, 2), {
    status,
    headers: { "content-type": "application/json; charset=utf-8" },
  });
}
function formatTime(ms) { return new Date(ms).toISOString(); }
function round2(n) { return Math.round(n * 100) / 100; }

📌 转载信息
转载时间:
2026/1/12 10:36:11

最近大家应该听说过一款叫 “死了么” 的 App。听说此 App 最近估值 1000 万了,相关新闻 “死了么” APP 下载量暴涨 100 倍!创始人:开发成本 1000 多元,计划以 100 万出让 10% 的股份

这么高估值的产品,需要 8 元才能使用,为了让人人都能用得起,我在此开源我花了 0.1 元(电费)与 72 秒开发的产品 ——Alive(活着呢)

如果您没有 1 分钟时间部署,也可以使用我部署好版本:活着呢

希望大家都能好好活着


📌 转载信息
原作者:
Amery2010
转载时间:
2026/1/12 10:35:49

排名不分先后,都是我用过的, 本文不做任何推荐

CC Switch 好像有个 bug, 余额查询的配置好像是不隔离的。

NewAPI 系列

以下几家中转站都是基于 NewAPI 搭建,所以查询余额较为简单

  • IKunCode
  • privnode
  • Duckcoding

配置步骤:

以 ikuncode 站为例,privnode/Duckcoding 步骤都一样

  1. 登录对应的网站,打开控制台 / 个人设置

  2. 点击安全设置,生成系统访问令牌

  3. 回到 CC-Switch, 配置用量查询,预设模板选择 NewAPI, 填入访问令牌和用户 ID

RightCode (订阅余额)

配置步骤:

  1. 预设模板选择 通用模板,填入请求地址 https://right.codes/subscriptions/list

  2. 登录网站 F12 控制台获取 bearer token(任意一个请求), 填入提取器代码(整个替换)

({
request: {
url: "https://right.codes/subscriptions/list",
method: "GET",
headers: {
Authorization: `f12控制台获取 bearer token`,
},
},
extractor: function (response) {
const now = new Date(); // 获取当前时间,用于比较 const results = response.subscriptions.reduce(
(acc, subscription, index) => {
// 解析过期时间 const expiredAt = new Date(subscription.expired_at);

// 判断是否过期:当前时间 > 过期时间,则跳过 if (now > expiredAt) {
return acc; // 跳过该项,直接返回已累积的数组
}

// 根据 reset_today 判断重置状态 const resetStatus = subscription.reset_today ? "已重置" : "未重置";
const extraInfo = `今天${resetStatus}`;

// 将符合条件的项添加到累积数组
acc.push({
id: subscription.id || `subscription_${index + 1}`,
remaining: subscription.remaining_quota,
planName: subscription.name,
unit: "USD",
// 新增的 extra 字段 extra: extraInfo,
});

return acc; // 返回更新后的累积数组
},
[],
); // 初始值为空数组 return results;
},
});

群里有个人开发了 vscode 插件可以更好的显示

cubence (余额)

配置步骤:

  1. 预设模板选择 通用模板,填入请求地址 https://cubence.com/api/v1/auth/me,并从网页端 F12 获取 cookie, 提取器代码填入以下代码:
({
  request: {
    url: "https://cubence.com/api/v1/auth/me",
    method: "GET",
    headers: {
      "Cookie": "token=<yourtoken>",
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0"
    }
  },
  extractor: function(response) {
    return {
      remaining: response.user.normal_balance / 1000000,
      unit: "USD"
    };
  }
})

Yescode

步骤:

  1. 预设模板选择 通用模板,填入请求地址 https://co.yes.vg/api/v1/user/balance,并从网页端 F12 获取 cookie, 提取器代码填入以下代码:
({
  request: {
    url: "https://co.yes.vg/api/v1/user/balance",
    method: "GET",
    headers: {
      Cookie:
        "your_cookie",
      "User-Agent":
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0",
    },
  },
  extractor: function (response) {
    return {
      remaining: response.balance,
      unit: "USD",
    };
  },
});

📌 转载信息
原作者:
unsafe
转载时间:
2026/1/12 10:35:17

前因

本人即将开启作为全栈工程师的个人职业生涯,但是鉴于之前 AI 开发的经历,开头一时爽快后,后面的代码缺乏各种文档和行之有效的项目迭代管理,导致 AI 开发的项目后面直接变成了屎山。于是本人就和 Claude 一顿头脑风暴,讨论 AI 时代的开发者如何进行迭代,能不能参考以前的敏捷开发的经验等等,忽略过程,最后我们输出这份 solo-agile-template

后果

这份模板采用前后端分离的方式,辅以 3m 原则和敏捷开发的思想,再搭配上各类低耦合的文档,让个人开发者拿到这个模板后只需要进行简单的本地化修改后就可以开始真正愉快的 coding 了。

我在这里抛砖引玉,欢迎佬友们一起来构建这个 template。


📌 转载信息
转载时间:
2026/1/12 10:35:05

测试一下港仔的 KDDI/au 5G Mobile VPS 产品,少数的日本蜂窩網絡 Mobile 家宽,ip 质量优秀,常规流媒体和本土流媒体基本全都解锁,机器性能强劲,i912900H 的 CPU 性能不错,IO 也不错。IPV4 三网不可直连,推荐中转,IPV6 部分地区可直连,带宽应该是 200Mbps,不过都买了这么贵的家宽了,应该不差这点中转费用了

这个机器为双 ip 策略

入口:idc V4入口或者KDDI家宽V6入 //可以自带IPV4入口,直接对接你的线路机器
出口:KDDI家宽V4出或者家宽V6出

测试配置为

2C2G 8GB 
CPE 5G蜂窩網絡Mobile 5G
IPv4 *1 & IPv6 /64 SLAAC
1T流量「工单免费重置」
98/

网络质量

IPV6 入

bestvm V4 入

测了一下日本本土互联,下载速度非常一般,这台前置貌似是限速了

BageVMBoil.5G PCE

23 packets transmitted, 23 received, 0% packet loss, time 22531ms
rtt min/avg/max/mdev = 0.321/0.405/0.507/0.046 ms

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  3.02 MBytes  25.3 Mbits/sec                  
[  5]   1.00-2.00   sec  4.07 MBytes  34.1 Mbits/sec                  
[  5]   2.00-3.00   sec  4.07 MBytes  34.2 Mbits/sec                  
[  5]   3.00-4.00   sec  2.11 MBytes  17.7 Mbits/sec                  
[  5]   4.00-5.00   sec  2.64 MBytes  22.2 Mbits/sec                  
[  5]   5.00-6.00   sec  4.36 MBytes  36.6 Mbits/sec                  
[  5]   6.00-7.00   sec  5.04 MBytes  42.2 Mbits/sec                  
[  5]   7.00-8.00   sec  11.9 MBytes   100 Mbits/sec                  
[  5]   8.00-9.00   sec  12.3 MBytes   103 Mbits/sec                  
[  5]   9.00-10.00  sec  1.54 MBytes  12.9 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-10.03  sec  51.3 MBytes  42.9 Mbits/sec  6051             sender
[  5]   0.00-10.00  sec  51.1 MBytes  42.8 Mbits/sec                  receiver

[ ID] Interval           Transfer     Bitrate
[  5]   0.00-1.00   sec  7.88 MBytes  66.1 Mbits/sec                  
[  5]   1.00-2.00   sec  9.15 MBytes  76.8 Mbits/sec                  
[  5]   2.00-3.00   sec  15.2 MBytes   127 Mbits/sec                  
[  5]   3.00-4.00   sec  11.3 MBytes  95.0 Mbits/sec                  
[  5]   4.00-5.00   sec  3.80 MBytes  31.9 Mbits/sec                  
[  5]   5.00-6.00   sec  2.58 MBytes  21.7 Mbits/sec                  
[  5]   6.00-7.00   sec  2.29 MBytes  19.2 Mbits/sec                  
[  5]   7.00-8.00   sec  15.2 MBytes   127 Mbits/sec                  
[  5]   8.00-9.00   sec  22.0 MBytes   185 Mbits/sec                  
[  5]   9.00-10.00  sec  8.12 MBytes  68.2 Mbits/sec                  
[  5]  10.00-11.00  sec  2.39 MBytes  20.1 Mbits/sec                  
[  5]  11.00-12.00  sec  2.94 MBytes  24.6 Mbits/sec                  
[  5]  12.00-13.00  sec  2.32 MBytes  19.4 Mbits/sec                  
[  5]  13.00-14.00  sec   786 KBytes  6.44 Mbits/sec                  
[  5]  14.00-15.00  sec   708 KBytes  5.80 Mbits/sec                  
[  5]  15.00-16.00  sec   499 KBytes  4.09 Mbits/sec                  
[  5]  16.00-17.00  sec   551 KBytes  4.52 Mbits/sec                  
[  5]  17.00-18.00  sec   955 KBytes  7.82 Mbits/sec                  
[  5]  18.00-19.00  sec  1.65 MBytes  13.8 Mbits/sec                  
[  5]  19.00-20.00  sec   878 KBytes  7.19 Mbits/sec                  
[  5]  20.00-21.00  sec   672 KBytes  5.51 Mbits/sec                  
[  5]  21.00-22.00  sec   414 KBytes  3.39 Mbits/sec                  
[  5]  22.00-23.00  sec   487 KBytes  3.99 Mbits/sec                  
[  5]  23.00-24.00  sec  1.46 MBytes  12.3 Mbits/sec                  
[  5]  24.00-25.00  sec  5.53 MBytes  46.4 Mbits/sec                  
[  5]  25.00-26.00  sec  1.12 MBytes  9.42 Mbits/sec                  
[  5]  26.00-27.00  sec  1.08 MBytes  9.07 Mbits/sec                  
[  5]  27.00-28.00  sec   554 KBytes  4.54 Mbits/sec                  
[  5]  28.00-29.00  sec   373 KBytes  3.06 Mbits/sec                  
[  5]  29.00-30.00  sec   313 KBytes  2.57 Mbits/sec                  
[  5]  30.00-31.00  sec  5.22 MBytes  43.8 Mbits/sec                  
[  5]  31.00-32.00  sec  1.83 MBytes  15.4 Mbits/sec                  
[  5]  32.00-33.00  sec  15.4 MBytes   130 Mbits/sec                  
[  5]  33.00-34.00  sec  7.77 MBytes  65.2 Mbits/sec                  
[  5]  34.00-35.00  sec  7.04 MBytes  59.0 Mbits/sec                  
[  5]  35.00-36.00  sec  4.08 MBytes  34.2 Mbits/sec                  
[  5]  36.00-37.00  sec  2.04 MBytes  17.1 Mbits/sec                  
[  5]  37.00-38.00  sec  1.27 MBytes  10.7 Mbits/sec                  
[  5]  38.00-39.00  sec   554 KBytes  4.54 Mbits/sec                  
[  5]  39.00-40.00  sec  1.16 MBytes  9.73 Mbits/sec                  
[  5]  40.00-41.00  sec  6.31 MBytes  52.9 Mbits/sec                  
[  5]  41.00-42.00  sec  5.74 MBytes  48.2 Mbits/sec                  
[  5]  42.00-43.00  sec  4.96 MBytes  41.7 Mbits/sec                  
[  5]  43.00-44.00  sec  3.92 MBytes  32.8 Mbits/sec                  
[  5]  44.00-45.00  sec  3.29 MBytes  27.6 Mbits/sec                  
[  5]  45.00-46.00  sec  2.29 MBytes  19.2 Mbits/sec                  
[  5]  46.00-47.00  sec  3.12 MBytes  26.2 Mbits/sec                  
[  5]  47.00-48.00  sec  8.99 MBytes  75.4 Mbits/sec                  
[  5]  48.00-49.00  sec  13.0 MBytes   109 Mbits/sec                  
[  5]  49.00-50.00  sec  5.77 MBytes  48.4 Mbits/sec                  
[  5]  50.00-51.00  sec  1.10 MBytes  9.25 Mbits/sec                  
[  5]  51.00-52.00  sec  2.92 MBytes  24.5 Mbits/sec                  
[  5]  52.00-53.00  sec  2.81 MBytes  23.6 Mbits/sec                  
[  5]  53.00-54.00  sec  1.82 MBytes  15.3 Mbits/sec                  
[  5]  54.00-55.00  sec   458 KBytes  3.75 Mbits/sec                  
[  5]  55.00-56.00  sec   509 KBytes  4.17 Mbits/sec                  
[  5]  56.00-57.00  sec   501 KBytes  4.10 Mbits/sec                  
[  5]  57.00-58.00  sec   559 KBytes  4.58 Mbits/sec                  
[  5]  58.00-59.00  sec   819 KBytes  6.71 Mbits/sec                  
[  5]  59.00-60.00  sec   665 KBytes  5.45 Mbits/sec                  
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval           Transfer     Bitrate         Retr
[  5]   0.00-60.03  sec   239 MBytes  33.4 Mbits/sec  28034             sender
[  5]   0.00-60.00  sec   239 MBytes  33.4 Mbits/sec                  receiver

ip 质量

TK 是解锁的啊,这个脚本有点问题

IPV4 质量

IPV6 质量

常见流媒体解锁

---------------流媒体解锁--感谢oneclickvirt/UnlockTests测试----------------
Can not detect IPv6 Address
测试时间:  2026-01-11 20:15:17
IPV4:
============[ 跨国平台 ]============
Apple                     YES (Region: JPN)
BingSearch                YES (Region: JP)
Claude                    YES
Dazn                      YES (Region: JP)
Disney+                   YES (Region: JP)
Gemini                    YES (Region: JP)
GoogleSearch              YES
Google Play Store         YES (Region: JP)
IQiYi                     YES (Region: JP)
Instagram Licensed Audio  YES
KOCOWA                    NO
MetaAI                    YES (Region: US)
Netflix                   YES (Region: JP)
Netflix CDN               JP
OneTrust                  YES (Region: JP TOKYO)
ChatGPT                   YES (Region: JP)
Paramount+                YES
Amazon Prime Video        YES (Region: JP)
Reddit                    YES
SonyLiv                   Banned
Sora                      YES (Region: JP)
Spotify Registration      NO
Steam Store               YES (Community Available) (Region: JP)
TVBAnywhere+              YES (Region: JP)
TikTok                    YES (Region: JP)
Viu.com                   YES
Wikipedia Editability     YES
YouTube Region            YES (Region: JP)
YouTube CDN               kddi - HND
---------------------TikTok解锁--感谢lmc999的源脚本---------------------
 Tiktok Region:         【JP】

细分流媒体解锁

 ** 正在测试 IPv4 解锁情况
--------------------------------
 ** 您的网络为: au one net (59.132.*.*)
============[ Multination ]============
 Dazn:                                  Yes (Region: JP)
 Disney+:                               Yes (Region: JP)
 Netflix:                               Yes (Region: JP)
 YouTube Premium:                       Yes (Region: JP)
 Amazon Prime Video:                    Yes (Region: JP)
 TVBAnywhere+:                          Yes
 Spotify Registration:                  No
 OneTrust Region:                       JP [Tokyo]
 iQyi Oversea Region:                   JP
 Bing Region:                           JP (Risky)
 Apple Region:                          JP
 YouTube CDN:                           [KDDI] in [Tokyo]
 Netflix Preferred CDN:                 Tokyo
 ChatGPT:                               Yes
 Google Gemini:                         Yes (Region: JPN)
 Claude:                                Yes
 Wikipedia Editability:                 Yes
 Google Play Store:                     Japan 
 Google Search CAPTCHA Free:            Yes
 Steam Currency:                        JPY
 ---Forum---
 Reddit:                                Yes
 ---Game---
 SD Gundam G Generation Eternal:        Yes
=======================================
===============[ Japan ]===============
 DMM:                                   Yes
 DMM TV:                                Yes
 Abema.TV:                              Yes (Region: JP)
 Niconico:                              Failed (Error: PAGE ERROR)
 Telasa:                                Yes
 U-NEXT:                                Yes
 Hulu Japan:                            Yes
 TVer:                                  Failed (Error: PAGE ERROR)
 Lemino:                                Yes
 AnimeFesta:                            Yes
 WOWOW:                                 Failed (Error: PAGE ERROR 1)
 VideoMarket:                           Yes
 D Anime Store:                         Yes
 FOD(Fuji TV):                          Yes
 Radiko:                                Yes (City: KAGOSHIMA)
 Karaoke@DAM:                           Yes
 J:com On Demand:                       Yes
 WATCHA:                                Yes
 Rakuten TV JP:                         Failed (Error: PAGE ERROR 1)
 ---Game---
 Kancolle Japan:                        Failed (Network Connection)
 Pretty Derby Japan:                    Yes
 Konosuba Fantastic Days:               Failed (Network Connection)
 Princess Connect Re:Dive Japan:        Yes
 Project Sekai: Colorful Stage:         Yes
 ---Music---
 Mora:                                  Yes
 music.jp:                              Yes
 ---Forum---
 EroGameSpace:                          Yes
=======================================

常见 IP 库结果

-------------IP质量检测--基于oneclickvirt/securityCheck使用--------------
数据仅作参考,不代表100%准确,如果和实际情况不一致请手动查询多个数据库比对
以下为各数据库编号,输出结果后将自带数据库来源对应的编号
ipinfo数据库  [0] | scamalytics数据库 [1] | virustotal数据库   [2] | abuseipdb数据库   [3] | ip2location数据库    [4]
ip-api数据库  [5] | ipwhois数据库     [6] | ipregistry数据库   [7] | ipdata数据库      [8] | db-ip数据库          [9]
ipapiis数据库 [A] | ipapicom数据库    [B] | bigdatacloud数据库 [C] | dkly数据库        [D] | ipqualityscore数据库 [E]
ipintel数据库 [F] | ipfighter数据库   [G] | fraudlogix数据库   [H] | cloudflare数据库  [I] |
IPV4:
安全得分:
信任得分(越高越好): 100 [8] 
VPN得分(越低越好): 0 [8] 
代理得分(越低越好): 0 [8] 
社区投票-无害: 0 [2] 
社区投票-恶意: 0 [2] 
威胁得分(越低越好): 0 [8] 
欺诈得分(越低越好): 28 [E] 
滥用得分(越低越好): 0 [3] 
威胁级别: low [9] 
流量占比: 真人(越高越好)96% [I] 机器人(越低越好)3% [I]
黑名单记录统计:(有多少黑名单网站有记录):
无害记录数: 0 [2]  恶意记录数: 0 [2] 可疑记录数: 0 [2]  无记录数: 93 [2] 
安全信息:
使用类型: unknown [C] business [9] cellular [3] isp [0 7 8]
公司类型: isp [0 7] 
浏览器类型: 主流37% 其他62% [I] 
设备类型: 桌面27% 移动72% 其他0% [I] 
操作系统类型: 主流98% 其他1% [I] 
是否云提供商: No [7 D] 
是否数据中心: No [0 5 8 C G] 
是否移动设备: No [5 G] Yes [C E]
是否代理: Yes [G] No [0 4 5 7 8 9 C D E]
是否VPN: No [0 7 C D E G] 
是否Tor: No [0 3 7 8 C D E] 
是否Tor出口: No [7 D] 
是否网络爬虫: No [9 E]
是否匿名: No [7 8 D] 
是否攻击者: No [7 8 D] 
是否滥用者: No [7 8 C D E] 
是否威胁: No [7 8 C D] 
是否中继: No [0 7 8 C D] 
是否Bogon: No [7 8 C D] 
是否机器人: No [E] 
Google搜索可行性:NO
------------邮件端口检测--基于oneclickvirt/portchecker开源------------
Platform  SMTP  SMTPS POP3  POP3S IMAP  IMAPS
LocalPort ✔     ✔     ✔     ✔     ✔     ✔    
QQ        ✔     ✔     ✔     ✘     ✔     ✘    
163       ✔     ✔     ✔     ✘     ✔     ✘    
Sohu      ✔     ✔     ✔     ✘     ✔     ✘    
Yandex    ✔     ✔     ✔     ✘     ✔     ✘    
Gmail     ✔     ✔     ✘     ✘     ✘     ✘    
Outlook   ✔     ✘     ✔     ✘     ✔     ✘    
Office365 ✔     ✘     ✔     ✘     ✔     ✘    
Yahoo     ✔     ✔     ✘     ✘     ✘     ✘    
MailCOM   ✔     ✔     ✔     ✘     ✔     ✘    
MailRU    ✔     ✔     ✘     ✘     ✔     ✘    
AOL       ✔     ✔     ✘     ✘     ✘     ✘    
GMX       ✔     ✔     ✔     ✘     ✔     ✘    
Sina      ✔     ✔     ✔     ✘     ✔     ✘    
Apple     ✘     ✘     ✘     ✘     ✘     ✘    
FastMail  ✘     ✔     ✘     ✘     ✘     ✘    
ProtonMail✘     ✘     ✘     ✘     ✘     ✘    
MXRoute   ✔     ✘     ✔     ✘     ✔     ✘    
Namecrane ✔     ✔     ✔     ✘     ✔     ✘    
XYAMail   ✘     ✘     ✘     ✘     ✘     ✘    
ZohoMail  ✘     ✔     ✘     ✘     ✘     ✘    
Inbox_eu  ✔     ✔     ✔     ✘     ✘     ✘    
Free_fr   ✘     ✔     ✔     ✘     ✔     ✘  

机器性能


📌 转载信息
原作者:
STALK
转载时间:
2026/1/12 10:34:35

效果图

先上个效果图

NewAPI 搭建的中转站

大部分的中转站都是基于 NewAPI 部署,一般可以在中转站底部 footer 看到是不是,那么可以使用接下来的两种用量查询方式

使用访问令牌

1. 获取用户 ID + 访问令牌:在 NewAPI 系统中转站 ,登录后找到 个人设置 -> 安全设置 -> 系统访问令牌,生成令牌。头像的旁边可以看到你的 ID

2. 填写配置:在 cc-switch 中进入用量查询配置页面,选择 NewAPI 模板,将请求地址、访问令牌、用户 ID 都填写上,注意这 3 个都是必填项。勾选启用用量查询 保存即可查询。


使用 APIKey

这个方式不用生成访问令牌,使用你填写的供应商 key 完成查询。使用 通用模板,在提取器代码输入框中输入以下脚本。

({
  request: {
    url: "{{baseUrl}}/api/usage/token",
    method: "GET",
    headers: {
      Authorization: "Bearer {{apiKey}}",
    },
  },
  extractor: function (response) {
    if (response.code) {
      if (response.data.unlimited_quota) {
        return {
          planName: response.data.name,
          total: -1,
          used: response.data.total_used / 500000,
          unit: "USD",
        };
      }
      return {
        isValid: true,
        planName: response.data.name,
        total: response.data.total_granted / 500000,
        used: response.data.total_used / 500000,
        remaining: response.data.total_available / 500000,
        unit: "USD",
      };
    }
    if (response.error) {
      return {
        isValid: false,
        invalidMessage: response.error.message,
      };
    }
  },
})

这个方式是查询你这个供应商 key 的用量情况,并非是你账号的,如果你的 key 生成时选择的无限额度,那么在 cc-switch 中只会显示这个 key 已经使用的用量,并不会显示剩余的。

其它

还有很多中转站是自研的系统,无法使用上述的方式进行查询,那么就要自己去写对应的查询脚本完成查询,这里我贴一个 88code 的,其它支持查询用量的站点,可以私聊我进行补充。

88code

和方式 2 一样,使用 通用模板 ,在提取器代码输入框中粘贴以下脚本。

({
  request: {
    url: "{{baseUrl}}/subscription",
    method: "POST",
    headers: {
      Authorization: "Bearer {{apiKey}}",
      "User-Agent": "cc-switch/1.0",
      Accept: "*/*",
    },
  },
  extractor: function (response) {
    if (response.error && response.msg == "No active subscription found") {
      throw new Error("该套餐暂无额度可使用");
    }
    if (response.error && response.msg == "API key not found") {
      throw new Error("该KEY无效");
    }
    const res = response.data // 成功处理:检查响应是否为非空数组 if (Array.isArray(res) && res.length > 0) {
      return res.filter(i => i.subscriptionStatus === "活跃中").map((i) => {
        let extraInfo = ""; // 初始化 extra 字段变量 // 判断是否有上次重置时间,以此来计算下次刷新时间 // lastCreditReset 字段存在且不为 null if (i.lastCreditReset) {
          // 1. 将上次重置时间的字符串转换为 Date 对象 const lastResetDate = new Date(i.lastCreditReset);
          // 2. 根据套餐描述,假设是每日重置,计算下次重置时间(加上24小时) // 86400000 毫秒 = 24 * 60 * 60 * 1000 const nextResetDate = new Date(lastResetDate.getTime() + 5*60*60*1000);
          // 3. 格式化日期为 "MM-DD HH:MM" const pad = (num) => String(num).padStart(2, "0");
          const month = pad(nextResetDate.getMonth() + 1); // 月份是从0开始的,所以+1 const day = pad(nextResetDate.getDate());
          const hours = pad(nextResetDate.getHours());
          const minutes = pad(nextResetDate.getMinutes());
          const formattedNextReset = `${month}-${day} ${hours}:${minutes}`;
          // 4. 拼接成最终的字符串
          extraInfo = `下次可刷新时间:${formattedNextReset}(${i.resetTimes})`;
        }
        // 对于按量付费(PAY_PER_USE)类型的套餐,提供特定信息 else if (i.subscriptionPlan.planType === "PAY_PER_USE") {
          extraInfo = "按量付费套餐,无固定刷新周期";
        }
        // 返回包含新字段的完整对象 return {
          isValid: true,
          planName: i.subscriptionPlan.subscriptionName,
          total: i.subscriptionPlan.creditLimit,
          remaining: i.currentCredits,
          unit: "USD",
          extra: extraInfo, // 将生成的 extra 信息添加到返回对象中
        };
      });
    }
  },
});

📌 转载信息
转载时间:
2026/1/12 10:34:08

为了体验一下 claude 的 skills,直接让 AI 阅读 claude 官方文档,生成了一个 skills
专门针对 PHP 项目的代码审查 skill ,试了下还不错,欢迎体验。


📌 转载信息
原作者:
love1024
转载时间:
2026/1/12 10:33:29

起因

今天打开活动监视器,发现内存压力已经黄了。

一看进程列表,好家伙,满屏的 node

排查

ps aux | grep node

输出让我沉默了:

node auggie --mcp -m default -w /Users/xxx/project
node auggie --mcp -m default -w /Users/xxx/project
node auggie --mcp -m default -w /Users/xxx/project
... (x34)

34 个 auggie --mcp 进程,全是 Augment 官方的 CLI 工具。

有些从 12月27日 就开始跑了,已经跑了两周了...

问题分析

Auggie 作为 MCP server 被 Claude Code / Cursor 等客户端调用时:

  1. 每次新会话都 fork 新进程 —— 这没问题
  2. 但是客户端断开后,进程不退出 —— 这就有问题了
  3. 没有任何清理机制 —— 进程就这么一直挂着
  4. 静默吃内存 —— 没有任何提示,用户完全无感知

结果就是:用一天,攒一堆僵尸进程,内存越来越少,直到你发现电脑开始卡了。

临时解决方案

# 一键清理所有 auggie 进程, 普通的 `pkill -f "auggie --mcp"` 居然杀不掉,必须用 `kill -9` 强制终止:
pkill -9 -f "auggie --mcp"

或者写个 alias 放到 .zshrc:

alias kill-auggie='pkill -9 -f "auggie --mcp" && echo "已清理 auggie 僵尸进程"' 

作为一个官方出品的 CLI 工具,进程生命周期管理这种基本功都没做好,属实有点说不过去。

ps: 可以用佬友 开发的 优化版… 官方这个属实有点坑了…


📌 转载信息
原作者:
cao_Jacker
转载时间:
2026/1/12 10:33:17

本来想做导航网站的,后来感觉做新标签页也不错,于是让 AI 也做了浏览器扩展版
网页: https://lumina.jkai.de/
扩展:

  1. 下载最新版本

    • 访问 Releases 页面
    • 下载 lumina-extension-v1.0.0.zip
    • 解压到任意文件夹
  2. 加载扩展

    • 打开 Chrome 浏览器,访问 chrome://extensions/
    • 开启右上角的 " 开发者模式 "
    • 点击 " 加载已解压的扩展程序 "
    • 选择解压后的文件夹



📌 转载信息
原作者:
qinmu
转载时间:
2026/1/12 10:32:48