2026年1月


Android ART虚拟机的编译能力是系统性能的核心支撑,其编译模块集中在art/compiler目录下,遵循“优化器+后端”的精简三段式架构,完美适配移动设备的性能与资源约束。在Android逆向层面,对Android编译时机的理解决定了是否可以进行更深层次的对抗。

一、art/compiler目录结构与核心定位

ART虚拟机省略了编译器前端(源码到Dex字节码的转换已在应用编译期完成),art/compiler目录聚焦优化器与后端实现,整体结构清晰,模块职责解耦,核心目录及功能如下:

核心目录
关键文件
核心功能
compiler/dex
dex_compilation_unit.ccdex_to_hir.cc
Dex字节码解析与处理,将Dex字节码转换为ART自定义中间表示(HIR,核心为HInstruction),是优化器的输入入口
compiler/optimizing
optimizing_compiler.cchir_optimizer.ccpass_manager.cc
优化器核心实现,包含HIR优化、Pass管理、寄存器分配等逻辑,是提升代码执行效率的核心模块
compiler/codegen
arm/x86/code_generator.cc
编译器后端,针对不同硬件架构(ARM、x86等)实现HIR到机器码的转换,适配硬件指令集与寄存器布局
compiler/jit
jit_compiler.ccjit_compilation_unit.cc
JIT编译核心逻辑,实现运行时动态编译、热点代码识别与优化,与AOT编译协同工作


核心定位:art/compiler通过“Dex字节码→HIR优化→机器码生成”的全流程实现,承载ART虚拟机JIT+AOT混合编译的核心能力,既保证预编译的性能优势,又通过动态编译平衡资源占用。

二、从源码看ART编译核心流程:Dex→HIR→机器码

ART编译的核心链路可概括为“Dex字节码解析→HIR生成与优化→机器码生成”,每个环节均有明确的源码实现支撑,以下结合关键代码片段拆解流程细节。

2.1 第一步:Dex字节码解析与HIR生成(dex→hir)

该环节由dex_to_hir.cc核心驱动,负责将Dex字节码转换为ART自定义的HIR(以HInstruction为基本单位),为后续优化提供标准化中间表示。

源码关键逻辑

compiler/dex/dex_to_hir.ccDexToHir::ConvertDexInstruction方法中,通过遍历Dex字节码指令,逐一转换为对应的HInstruction对象:

核心说明

Dex字节码的寄存器操作(如VRegA、VRegB)通过LoadRegister方法转换为HIR中的寄存器引用,实现Dex指令与HIR的语义对齐。

不同类型的Dex指令对应不同的HInstruction子类(如加法对应HAdd、常量对应HConst、赋值对应HAssign),HInstruction封装了指令的操作类型、操作数与数据类型,是优化器的核心处理对象。

该环节最终生成HIR图(Control Flow Graph,CFG),以图结构呈现指令间的依赖关系,为后续优化提供基础。

2.2 第二步:HIR优化(优化器核心)

优化器模块集中在compiler/optimizing目录,由PassManager管理优化任务(Pass)的执行顺序与逻辑,通过多轮Pass优化提升HIR的执行效率,核心优化手段均有对应的源码实现。

1. Pass管理机制(pass_manager.cc)

ART优化器通过PassManager::RunPasses方法调度各类优化Pass,严格控制执行顺序(如常量折叠先于死代码消除),部分源码逻辑如下:

此机制确保优化逻辑的有序执行,避免因顺序不当导致的优化失效(如先执行死代码消除,会遗漏常量折叠产生的无效代码)。

2. 核心优化Pass源码解析

常量折叠(ConstantFoldingPass):在compiler/optimizing/constant_folding.cc中实现,将常量表达式直接计算结果,替换原指令,减少运行时计算开销。

例如,Dex字节码中的10+20会被转换为HAdd指令,经常量折叠后直接替换为HConst(30),大幅简化指令。

死代码消除(DeadCodeEliminationPass):在compiler/optimizing/dead_code_elimination.cc中实现,删除未被引用或无效的HInstruction(如常量折叠后失效的加法指令),减少代码体积与执行冗余。

3. 寄存器分配(RegisterAllocationPass)

寄存器分配是优化器的关键环节,在compiler/optimizing/register_allocation.cc中实现,核心逻辑是将HIR中的虚拟寄存器映射到目标硬件的物理寄存器,未分配到物理寄存器的变量将被暂存到内存。ART采用线性扫描算法(Linear Scan Register Allocation)实现寄存器分配,兼顾效率与资源约束,适配移动设备的有限物理寄存器资源。

2.3 第三步:机器码生成(后端核心)

编译器后端集中在compiler/codegen目录,针对不同硬件架构(ARM、x86)实现CodeGenerator子类,将优化后的HIR转换为对应架构的机器码,核心逻辑由CodeGenerator::GenerateCode驱动。

ARM架构机器码生成示例

compiler/codegen/arm/code_generator_arm.cc中,针对HAdd指令生成ARM汇编指令(机器码的文本形式):

核心说明

后端通过GetArmRegister方法将HIR中的虚拟寄存器位置(Location)映射为ARM架构的物理寄存器(如r0、r1),适配硬件寄存器布局。

不同架构的指令集差异通过子类实现屏蔽,如x86架构在code_generator_x86.cc中生成对应的x86汇编指令,实现多硬件架构适配。

最终生成的机器码会被写入oat文件(AOT编译)或直接交付CPU执行(JIT编译),完成整个编译流程。

三、JIT+AOT混合编译的源码协同逻辑

Android 7.0后ART采用JIT+AOT混合编译,两者通过art/compiler目录下的模块协同工作,平衡性能与资源,核心协同逻辑如下:

AOT编译:应用安装时,由compiler/dex/compiler_driver.cc驱动,调用优化器与后端生成oat文件,将Dex字节码预编译为机器码,核心方法为CompilerDriver::CompileAll,适用于高频执行的核心代码。

JIT编译:运行时由compiler/jit/jit_compiler.ccJitCompiler::CompileMethod方法驱动,针对热点代码(通过热点计数器识别)动态编译,生成机器码并缓存,避免预编译带来的安装延迟与存储开销。

协同机制:JIT编译生成的优化机器码可被写入oat文件(即“profile-guided compilation”),后续应用启动时直接复用,实现“动态优化→静态复用”的闭环,进一步提升性能。



四、核心总结

art/compiler目录是ART编译机制的核心载体,通过“Dex解析→HIR优化→机器码生成”的模块化设计,实现JIT+AOT混合编译的全流程,适配移动设备的性能与资源需求。

HInstruction作为ART自定义IR的核心,是连接Dex字节码与机器码的关键,优化器通过多轮Pass对HIR进行改造

附:art/compiler核心源码片段合集

以下汇总了全文核心源码片段,按编译流程分类整理,标注对应路径,便于集中对照Android源码学习,片段均保留核心逻辑与关键注释。

一、Dex字节码解析与HIR生成

路径:art/compiler/dex/dex_to_hir.cc(Dex指令转HIR核心方法)

二、HIR优化核心片段

1. Pass管理机制

路径:art/compiler/optimizing/pass_manager.cc(优化任务调度核心)

2. 常量折叠优化

路径:art/compiler/optimizing/constant_folding.cc(常量表达式预计算)

三、机器码生成核心片段(ARM架构)

路径:art/compiler/codegen/arm/code_generator_arm.cc(HIR转ARM机器码)

四、JIT+AOT协同核心片段

1. AOT编译驱动(应用安装期)

路径:art/compiler/dex/compiler_driver.cc(全量编译入口)

2. JIT编译驱动(运行时)

路径:art/compiler/jit/jit_compiler.cc(热点代码动态编译)


用代码浇灌春天,最终必将见证万紫千红的生态盛景。

她说:“我愿在这群芳争艳的时代,绽放一抹‘吉祥’红!”

吉林银行作为吉林省经济发展的 “金融引擎”,在数字化转型浪潮中勇立潮头。其开发团队通过分布式架构重构、ArkUI-X 框架迁移及原子化服务开发等技术突破,历时 21 个自然日完成 HarmonyOS NEXT 核心功能版本适配。今天让我们采访一下吉林银行的鸿蒙开发者代表卢妍娆女士,一起听她讲讲应用适配 HarmonyOS NEXT 的故事。

自 22 年加入吉林银行以来,卢妍娆便先后投入到了新一代核心系统建设以及吉林银行手机银行 6.0 迭代建设。23 年年末吉林银行对应用鸿蒙化表示明确认可,认为鸿蒙生态适配不仅仅是吉林银行构建数字金融护城河的战略突破口,更是实现技术自主可控的关键战役,如春潮涌动时抢占滩头的先锋。

“我们非常期待能在 HarmonyOS NEXT 这个种满花卉的生态里,迅速绽放并共同成长,掌握一定的话语权。”

在“打仗”之前,吉林银行研发团队完成了鸿蒙开发的学习,并于 2024 年 2 月与华为达成鸿蒙适配的合作意向。“华为为我们提供了技术上的答疑指导,帮助我们打通开发道路,让后面的开发更加便利。”万事俱备只欠东风,2024 年 5 月底立项申请通过,项目正式启动,基于手机银行 6.0 功能及性能提升后的框架,6 月 18 日正式上架核心交易功能版本。

卢妍娆在 HDD 活动照片

“HarmonyOS NEXT 跟安卓不一样,是个全新的系统,也是全新的体验”

卢妍娆最初担心,吉林银行 App 适配鸿蒙的时候会很困难,因为原有的代码架构需要大规模重构。在鸿蒙声明式开发里,UI 是通过声明式语法描述的,需要重新编写大量的 UI 代码。事实上,开发过程真的很艰难吗?

“遇到技术难题的时候,你可以直接提出问题,鸿蒙的官方技术人员会回复,甚至提供样例代码手把手帮你解决问题。例如,我们开发团队在遇到微信分享无法获取 uicontext,自定义弹窗无法展示的问题时,华为团队提供了示例代码解决问题;由于医保缴费框架存在中断逻辑,导致页面存在多次跳转,华为团队根据每次 ID 的不同,提供样例代码规避了消费者界面多次跳转的问题;开发语音识别功能的时候,我们团队没有足够的经验,华为技术人员提供了语音识别代码 Demo 以及 UI 代码,帮助我们快速实现语音识别功能。”卢妍娆回忆道。相比安卓开发中依赖第三方论坛的“投石问路”,鸿蒙的这种开发者帮扶模式更高效更贴心。

应用适配鸿蒙生态架构

HarmonyOS SDK 接入:纯净之境,开启开发新篇章

“我们的手机银行集成第三方 SDK 有 18 个,HarmonyOS SDK 替代了部分,不仅协同加速,提升了我们开发的效率,还为我们节省了大量成本。” 卢妍娆跟我介绍她们的应用。

传统 SDK 在架构设计上往往存在冗余和复杂的问题,在接入时会引入大量不必要的代码和依赖库。而 HarmonyOS SDK 采用的原子化服务架构,将功能拆解为最小可复用单元,使用起来就像搭建积木一样,我们可以根据需求灵活选择和组合这些原子化服务。这种模块化设计使得代码更加简洁、清晰,如同月光下的水晶棱镜,每一个模块都剔透纯净。以一个简单的天气卡片组件为例,在 HarmonyOS SDK 中,开发者可以通过简洁的代码实现其功能,非常高效简洁。

小组开会研讨方案

"HarmonyOS NEXT 不是简单的系统升级,而是给开发者重新定义了工具类应用的魔法棒。当设备间的界限消失,我们才能真正聚焦于用户需求本身。"对于吉林银行来说,鸿蒙生态带来的意义不仅仅优先他人一步,更重要的是带来了万物互联的时代。

夜幕降临,金融街的灯火次第亮起。在这场由鸿蒙系统掀起的数字化浪潮中,银行正从传统的 "金融服务提供者" 转变为 "智能生态构建者"。当吉林银行以金融级安全纽带编织起千万用户的数字生活场景,既筑牢数字经济时代的安全护城河,又为银行生态的生长埋下战略伏笔;当意图框架读懂用户每一个潜在需求,各个企业正在书写属于自己的全场景智慧篇章。而这,仅仅是鸿蒙星河下的序章。

了解鸿蒙开发认证详情,探索鸿蒙开发者联盟丰富资源,点击链接:​​鸿蒙开发者联盟​​。​这里有开发文档、论坛、工具等,快加入,开启鸿蒙开发之旅!

Instant Melon (即刻瓜田)

一个专注于匿名故事分享与互动的开源平台。
“每个人都有故事,这里是你的树洞,也是你的瓜田。”

项目简介

最近闲来无事(忘记在哪刷到了一个类似的平台),就 A 了一个匿名吃瓜平台。
起因是想做一个纯粹的、无压力的吐槽和分享空间。项目目前已经开源,欢迎各位佬品鉴。

给我一些优化建议。如果觉得还不错,求一个宝贵的 Star

GitHub 地址: https://github.com/AIME-JF/Instant-Melon
在线地址:Instant-Melon


核心功能

  • 匿名发布:无需复杂的注册流程(匿名),保护隐私,畅所欲言。
  • 吃瓜互动:支持评论、双击点赞、表情互动,让吃瓜更有趣。
  • 清新 UI:精心设计的界面,适配移动端与桌面端,阅读体验极佳。
  • 内容管理:内置简单的审核机制,防止滥用。

  • 前端框架:Next.js (App Router) / Vue3
  • UI 组件:TailwindCSS / ShadcnUI
  • 后端 / 数据库: PostgreSQL / FastAPI

(PS:现在没啥内容在里面,因为根本没人玩 ,有几个内容是搬站内佬的)

快速开始 / 部署

  1. git clone [https://github.com/AIME-JF/Instant-Melon.git](https://github.com/AIME-JF/Instant-Melon.git)
    

📌 转载信息
转载时间:
2026/1/14 10:59:40

各位佬如果有去看过文档

它会告诉你默认的有 4 个 agent
主代理的 Plan 和 Build
子代理的 General 和 Explorer
这些里面说的都很清楚了,这里就不赘述了

还有三个内置的主代理 title summary 和 compaction
看名字大家应该能理解是干嘛用的


summary 就是左侧的内容 title 就是右侧的每次对话的小标
compaction 是上下文超限后执行压缩的代理

这三个都是主代理,但是设置为 hidden,所以默认无法自己选择

但是他们的系统提示词都是可以覆盖修改的
这就可以实现比如归纳总结都以中文输出的目的

以 title 为例
全局路径~/user/.config/opencode/agent/
项目路径 项目目录 /.opencode/agent/
编写 title.md

我用的是默认的内容调整为符合中文的形式,大家也可以随便改成符合自己需求的

---
description: 标题生成(中文输出)
---

你是一个标题生成器。你只输出一个对话标题。不输出其他任何内容。

<task>
生成一个简短的标题,帮助用户稍后找到此对话。

严格遵守 <rules> 中的所有规则。
参考 <examples> 了解什么样的标题是好的。
你的输出必须满足:
- 仅一行
- ≤ 50 个字符
- 必须使用中文输出
- 没有解释或多余的废话
</task>

<rules>
- 标题必须语法通顺,读起来自然,拒绝词语堆砌
- 绝不要在标题中包含工具名称(如 "read tool", "bash tool", "edit tool")
- 聚焦于用户想要检索的核心话题或问题
- 变换措辞——避免重复的模式(如总是以“分析”、“正在”开头)
- 当提到文件时,关注用户想对文件做什么,而不仅仅是他们提供了文件
- 保留关键信息:技术术语、数字、文件名、HTTP 状态码
- 移除无意义的虚词(如 the, this, my, a, an 等)
- 不要预设技术栈
- 不要调用任何工具
- 绝不回答用户的问题,只为对话生成标题
- 标题中不要包含“总结”或“生成”这类元描述词汇
- 即使输入很少,也要输出有意义的内容,不要抱怨输入无法生成
- 如果用户消息很短或属于闲聊(例如 "hello", "lol", "what's up", "hey"):
  → 创建一个反映用户语气或意图的标题(如:问候、快速确认、闲聊、开场白 等)
</rules>

<examples>
"debug 500 errors in production" → 调试生产环境 500 错误
"refactor user service" → 重构用户服务
"why is app.js failing" → 排查 app.js 故障
"implement rate limiting" → 实现速率限制
"how do I connect postgres to my API" → Postgres API 连接方法
"best practices for React hooks" → React hooks 最佳实践
"@src/auth.ts can you add refresh token support" → src/auth.ts 添加刷新令牌支持
"@utils/parser.ts this is broken" → 修复 utils/parser.ts 错误
"look at @config.json" → 审查 config.json 配置
"@App.tsx add dark mode toggle" → App.tsx 添加暗黑模式切换
</examples>

另外附上三个原本的内容,大家可以根据需要进行调整修改

title

You are a title generator. You output ONLY a thread title. Nothing else.

<task>
Generate a brief title that would help the user find this conversation later.

Follow all rules in <rules>
Use the <examples> so you know what a good title looks like.
Your output must be:
- A single line
- ≤50 characters
- No explanations
</task>

<rules>
- Title must be grammatically correct and read naturally - no word salad
- Never include tool names in the title (e.g. "read tool", "bash tool", "edit tool")
- Focus on the main topic or question the user needs to retrieve
- Vary your phrasing - avoid repetitive patterns like always starting with "Analyzing"
- When a file is mentioned, focus on WHAT the user wants to do WITH the file, not just that they shared it
- Keep exact: technical terms, numbers, filenames, HTTP codes
- Remove: the, this, my, a, an
- Never assume tech stack
- Never use tools
- NEVER respond to questions, just generate a title for the conversation
- The title should NEVER include "summarizing" or "generating" when generating a title
- DO NOT SAY YOU CANNOT GENERATE A TITLE OR COMPLAIN ABOUT THE INPUT
- Always output something meaningful, even if the input is minimal.
- If the user message is short or conversational (e.g. "hello", "lol", "what's up", "hey"):
  → create a title that reflects the user's tone or intent (such as Greeting, Quick check-in, Light chat, Intro message, etc.)
</rules>

<examples>
"debug 500 errors in production" → Debugging production 500 errors
"refactor user service" → Refactoring user service
"why is app.js failing" → app.js failure investigation
"implement rate limiting" → Rate limiting implementation
"how do I connect postgres to my API" → Postgres API connection
"best practices for React hooks" → React hooks best practices
"@src/auth.ts can you add refresh token support" → Auth refresh token support
"@utils/parser.ts this is broken" → Parser bug fix
"look at @config.json" → Config review
"@App.tsx add dark mode toggle" → Dark mode toggle in App
</examples>

summary

Summarize what was done in this conversation. Write like a pull request description.

Rules:
- 2-3 sentences max
- Describe the changes made, not the process
- Do not mention running tests, builds, or other validation steps
- Do not explain what the user asked for - Write in first person (I added..., I fixed...)
- Never ask questions or add new questions
- If the conversation ends with an unanswered question to the user, preserve that exact question
- If the conversation ends with an imperative statement or request to the user (e.g. "Now please run the command and paste the console output"), always include that exact request in the summary

compaction

You are a helpful AI assistant tasked with summarizing conversations.

When asked to summarize, provide a detailed but concise summary of the conversation. 
Focus on information that would be helpful for continuing the conversation, including:
- What was done - What is currently being worked on - Which files are being modified - What needs to be done next - Key user requests, constraints, or preferences that should persist - Important technical decisions and why they were made

Your summary should be comprehensive enough to provide context but concise enough to be quickly understood.

📌 转载信息
转载时间:
2026/1/14 10:59:25

相信很多人都知道反重力 opus4.5 是怎么用的

条件1:准备chrome会员账号,可以到闲鱼上购买

条件2: 下载 [反重力客户端](https://github.com/lbjlaq/Antigravity-Manager)

这边我不过多的介绍,大家自行搜索 + AI 研究

今天我要介绍的是一个高级玩法

cch 反代 Antigravity 的反代,下载后自行用 AI 研究下。

大家可以看到我发的 gemini 3 pro 也能用,这是怎么做到的尼

先看配置:

Antigravity 暴露的端口是 8045,我们用 docker 部署 claude-code-hub 后正常是访问不到电脑上 8045 端口的,必须把电脑上的 8045 端口暴露给 docker(这里不过多介绍,大家自行用 ai 研究)

然后看到我的截图中供应商类型是 Gemini (Google Gemini API), 这一步很关键,我们的 Gemini 的用法 不是在 gemini cli 之中使用的,而是通过 api 转发,转发给 opencode 使用的,opencode 是一款开源的类似 claude code cli 的脚手架,链接贴进来了,大家自行用 ai 研究一下,当然还可以用 oh my opencode 强化一下你的 cli

然后,更改一下配置

code ~/.config/opencode/opencode.json

provider 属性下新增

"google": { "options": { "baseURL": "http://127.0.0.1:13000", "apiKey": "your api key (在 http://localhost:23000/zh-CN/dashboard/users 新增用户后获取)" }, "models": { "antigravity-gemini-3-pro-high": { "name": "Gemini 3 Pro High (Antigravity)", "limit": { "context": 1048576, "output": 65535 }, "modalities": { "input": [ "text", "image", "pdf" ], "output": [ "text" ] } }, "antigravity-gemini-3-flash": { "name": "Gemini 3 Flash (Antigravity)", "limit": { "context": 1048576, "output": 65536 }, "modalities": { "input": [ "text", "image", "pdf" ], "output": [ "text" ] } } } } 

然后我们运行 opencode 输入 /models,将模型切到如下

最后看下效果


📌 转载信息
原作者:
carve
转载时间:
2026/1/14 10:59:17

Claude Code Workflow (CCW)


Claude Code Workflow (CCW) 是一个 JSON 驱动的多智能体开发框架,具有智能 CLI 编排(Gemini/Qwen/Codex)、上下文优先架构和自动化工作流执行。它将 AI 开发从简单的提示词链接转变为一个强大的编排系统。

项目地址:

catlog22/Claude-Code-Workflow: JSON-driven multi-agent development framework with intelligent CLI orchestration (Gemini/Qwen/Codex), context-first architecture, and automated workflow execution

安装方式:

npm install -g claude-code-workflow
ccw install #安装工作流
ccw view #打开看板 


个人理解

无论 Skills 还是 Slash command 本质都是规范化的提示词,Skill 可以看作有标准结构文件结构的提示词组合。渐进式披露是一种设计思路,并不是 Skill 的机制,slash command 也可实现。在 Skill 没有出来之前,CCW 的工作流命令已经采用类似的设计机制,将一个复杂的工作流转为链式调用 command,以提升命令遵循度。对于长序列任务,例如 /workflow:plan 在上下文收集阶段只关注于上下文收集,产出内容再调用任务生成命令,而不是将上下文探索和生成命令写到一起。

编写 Skill 也会遇到 command 执行过程中上下文被挤爆的问题,压缩后可能遗忘内容,进而影响执行指令。根据前面开发经验,总结了一些设计技巧,创建了 Skill-generator 专门为复杂工作流生成的 meta-Skill。


如何使用 CCW 进行 Skill 设计

总结起来就是三步:


执行流程

步骤 1: CLI 分析

提示词输入:


可以在 ccw view 界面查看流式输出:

步骤 2: 完成后进行 Review




步骤 3: 进行 Agent 修复


SKill.md

---
name: review-code
description: Multi-dimensional code review with structured reports. Analyzes correctness, readability, performance, security, testing, and architecture. Triggers on "review code", "code review", "审查代码", "代码审查".
allowed-tools: Task, AskUserQuestion, Read, Write, Glob, Grep, Bash, mcp__ace-tool__search_context, mcp__ide__getDiagnostics
---

# Review Code

Multi-dimensional code review skill that analyzes code across 6 key dimensions and generates structured review reports with actionable recommendations.

## Architecture Overview

┌─────────────────────────────────────────────────────────────────┐
│  ⚠️ Phase 0: Specification Study (强制前置)                       │
│              → 阅读 specs/review-dimensions.md                   │
│              → 理解审查维度和问题分类标准                          │
└───────────────┬─────────────────────────────────────────────────┘
                ↓
┌─────────────────────────────────────────────────────────────────┐
│           Orchestrator (状态驱动决策)                             │
│           → 读取状态 → 选择审查动作 → 执行 → 更新状态              │
└───────────────┬─────────────────────────────────────────────────┘
                │
    ┌───────────┼───────────┬───────────┬───────────┐
    ↓           ↓           ↓           ↓           ↓
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ Collect │ │ Quick   │ │ Deep    │ │ Report  │ │Complete │
│ Context │ │ Scan    │ │ Review  │ │ Generate│ │         │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
     ↓           ↓           ↓           ↓
┌─────────────────────────────────────────────────────────────────┐
│                     Review Dimensions                            │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐            │
│  │Correctness│ │Readability│ │Performance│ │ Security │            │
│  └──────────┘ └──────────┘ └──────────┘ └──────────┘            │
│  ┌──────────┐ ┌──────────┐                                       │
│  │ Testing  │ │Architecture│                                      │
│  └──────────┘ └──────────┘                                       │
└─────────────────────────────────────────────────────────────────┘


## Key Design Principles

1. **多维度审查**: 覆盖正确性、可读性、性能、安全性、测试覆盖、架构一致性六大维度
2. **分层执行**: 快速扫描识别高风险区域,深入审查聚焦关键问题
3. **结构化报告**: 按严重程度分类,提供文件位置和修复建议
4. **状态驱动**: 自主模式,根据审查进度动态选择下一步动作

---

## ⚠️ Mandatory Prerequisites (强制前置条件)

> **⛔ 禁止跳过**: 在执行任何审查操作之前,**必须**完整阅读以下文档。

### 规范文档 (必读)

| Document | Purpose | Priority |
|----------|---------|----------|
| [specs/review-dimensions.md](specs/review-dimensions.md) | 审查维度定义和检查点 | **P0 - 最高** |
| [specs/issue-classification.md](specs/issue-classification.md) | 问题分类和严重程度标准 | **P0 - 最高** |
| [specs/quality-standards.md](specs/quality-standards.md) | 审查质量标准 | P1 |

### 模板文件 (生成前必读)

| Document | Purpose |
|----------|---------|
| [templates/review-report.md](templates/review-report.md) | 审查报告模板 |
| [templates/issue-template.md](templates/issue-template.md) | 问题记录模板 |

---

## Execution Flow


┌─────────────────────────────────────────────────────────────────┐
│  Phase 0: Specification Study (强制前置 - 禁止跳过)               │
│  → Read: specs/review-dimensions.md                              │
│  → Read: specs/issue-classification.md                           │
│  → 理解审查标准和问题分类                                          │
├─────────────────────────────────────────────────────────────────┤
│  Action: collect-context                                         │
│  → 收集目标文件/目录                                               │
│  → 识别技术栈和语言                                                │
│  → Output: state.context (files, language, framework)            │
├─────────────────────────────────────────────────────────────────┤
│  Action: quick-scan                                              │
│  → 快速扫描整体结构                                                │
│  → 识别高风险区域                                                  │
│  → Output: state.risk_areas, state.scan_summary                  │
├─────────────────────────────────────────────────────────────────┤
│  Action: deep-review (per dimension)                             │
│  → 逐维度深入审查                                                  │
│  → 记录发现的问题                                                  │
│  → Output: state.findings[]                                      │
├─────────────────────────────────────────────────────────────────┤
│  Action: generate-report                                         │
│  → 汇总所有发现                                                    │
│  → 生成结构化报告                                                  │
│  → Output: review-report.md                                      │
├─────────────────────────────────────────────────────────────────┤
│  Action: complete                                                │
│  → 保存最终状态                                                    │
│  → 输出审查摘要                                                    │
└─────────────────────────────────────────────────────────────────┘


## Directory Setup


const timestamp = new Date().toISOString().slice(0,19).replace(/[-:T]/g, '');
const workDir = `.workflow/.scratchpad/review-code-${timestamp}`;

Bash(`mkdir -p "${workDir}"`);
Bash(`mkdir -p "${workDir}/findings"`);


## Output Structure


.workflow/.scratchpad/review-code-{timestamp}/
├── state.json                    # 审查状态
├── context.json                  # 目标上下文
├── findings/                     # 问题发现
│   ├── correctness.json
│   ├── readability.json
│   ├── performance.json
│   ├── security.json
│   ├── testing.json
│   └── architecture.json
└── review-report.md              # 最终审查报告


## Review Dimensions

| Dimension | Focus Areas | Key Checks |
|-----------|-------------|------------|
| **Correctness** | 逻辑正确性 | 边界条件、错误处理、null 检查 |
| **Readability** | 代码可读性 | 命名规范、函数长度、注释质量 |
| **Performance** | 性能效率 | 算法复杂度、I/O 优化、资源使用 |
| **Security** | 安全性 | 注入风险、敏感信息、权限控制 |
| **Testing** | 测试覆盖 | 测试充分性、边界覆盖、可维护性 |
| **Architecture** | 架构一致性 | 设计模式、分层结构、依赖管理 |

## Issue Severity Levels

| Level | Prefix | Description | Action Required |
|-------|--------|-------------|-----------------|
| **Critical** | [C] | 阻塞性问题,必须立即修复 | Must fix before merge |
| **High** | [H] | 重要问题,需要修复 | Should fix |
| **Medium** | [M] | 建议改进 | Consider fixing |
| **Low** | [L] | 可选优化 | Nice to have |
| **Info** | [I] | 信息性建议 | For reference |

## Reference Documents

| Document | Purpose |
|----------|---------|
| [phases/orchestrator.md](phases/orchestrator.md) | 审查编排器 |
| [phases/state-schema.md](phases/state-schema.md) | 状态结构定义 |
| [phases/actions/action-collect-context.md](phases/actions/action-collect-context.md) | 收集上下文 |
| [phases/actions/action-quick-scan.md](phases/actions/action-quick-scan.md) | 快速扫描 |
| [phases/actions/action-deep-review.md](phases/actions/action-deep-review.md) | 深入审查 |
| [phases/actions/action-generate-report.md](phases/actions/action-generate-report.md) | 生成报告 |
| [phases/actions/action-complete.md](phases/actions/action-complete.md) | 完成审查 |
| [specs/review-dimensions.md](specs/review-dimensions.md) | 审查维度规范 |
| [specs/issue-classification.md](specs/issue-classification.md) | 问题分类标准 |
| [specs/quality-standards.md](specs/quality-standards.md) | 质量标准 |
| [templates/review-report.md](templates/review-report.md) | 报告模板 |
| [templates/issue-template.md](templates/issue-template.md) | 问题模板 |

  review-code/
  ├── SKILL.md                  
  ├── phases/
  │   ├── orchestrator.md       # 编排器
  │   ├── state-schema.md       # 状态定义
  │   └── actions/
  │       ├── action-collect-context.md
  │       ├── action-quick-scan.md
  │       ├── action-deep-review.md
  │       ├── action-generate-report.md
  │       └── action-complete.md
  ├── specs/
  │   ├── review-dimensions.md  
  │   ├── issue-classification.md # 问题分类标准
  │   └── quality-standards.md  # 质量标准
  └── templates/
      ├── review-report.md      # 报告模板
      └── issue-template.md     # 问题模板 


总结

通过上述三个步骤生成一份规范化提示词。如需获得更优效果,需要观察执行过程,借助 cli 分析进行微调。


下贴预告


— 全文完 (采用 ccw text-formatter skill 进行格式化) —


📌 转载信息
转载时间:
2026/1/14 10:58:40

这个网站可以免费看新上映的电影和电视剧等


📌 转载信息
转载时间:
2026/1/14 10:58:31

前言

之前薅了某为云的 2c2g 鸡,一直吃着灰,反观我的另一台 1c1g 鸡跑了好几个服务,是时候迁移了,顺便也来试试传说中的 GitOps,做个步骤记录,欢迎佬们提提建议

迁移

首先在所有鸡上都安装上 docker

随后先是 Portainer 的迁移。

  1. 在旧机器上:

    • 登录 Portainer Web 界面。

    • 进入 SettingsBackup

    • 选择 Download backup file

    • 设置个密码(可选),点击 Download。你会得到一个 .tar.gz 文件。

  2. 在新机器上:

    • ssh 上去,拉起一个新的、空的 Portainer。

    • 第一次访问登录页面时,不要创建新管理员,点击下方的 Restore from file

    • 上传刚才下载的备份文件,然后配置都回来了

然后是 docker 的容器部分。首先确认卷名,找到你真正需要的数据卷

docker volume ls # 找到后停掉
docker stop <容器ID>

打包

sudo -i
# 进入 Docker 卷目录 cd /var/lib/docker/volumes/ 
# 把你需要迁移的卷打包
tar -czvf /root/migration.tar.gz gpt_load-data newapi-data sub-store_data
# 直接 scp 扔过去 # 这里我尝试了 Termius 的 SFTP,估计是走本机中转,速度只有几十 k
scp /root/migration.tar.gz root@<IP>:/var/lib/docker/volumes/
# 在另一台机子上 sudo -i
cd /var/lib/docker/volumes/
tar -xzvf migration.tar.gz
# 让 docker 认出来
docker volume create gpt_load-data 
docker volume create newapi-data 
docker volume create sub-store_data

仓库配置

你需要把你的所有 docker-compose 文件组织起来,初始化 Git 仓库里并上传,这里以上传到 GitHub 为例。

文件结构仅供参考:

│  renovate.json
│          
├─ai
│      docker-compose.yml
│      
├─cloudflare-imgbed
│      docker-compose.yml
│      wrangler.toml
│      
├─network
│  │  docker-compose.yml
│  │  
│  ├─conf
│  │      Caddyfile
│  │      
│  └─site
├─nezha-dashboard
│      docker-compose.yml
│      
├─portainer
│      docker-compose.yml
│      
└─sub-store
        docker-compose.yml

接下来所有的容器相关操作都来到 Portainer 里面进行。

Portainer 配置

去 Portainer 创建 stack,Build method 选择到仓库类型,照着填就行

注意,如果你的 compose 文件里还依赖于仓库里的其他文件,比如 .env,那么得把下图中最下面的 Enable relative path volumes 勾上,Portainer 会从你填写的目录里把你的整个仓库拉下来再执行 compose 命令。

Re-pull image 这里我没有测试未勾选的效果,Force redeployment 的效果是每次 Webhook 触发时都会让容器重新部署,我这里没有勾选。

然后我们来到 GitHub 仓库里,填入对应 Webhook 地址,Payload URL 填 Portainer 给的, Content type 两种都可以。

完成后点 Update 就可以了。如果你之前给 Portainer 配置过 ZeroTrust,测试不通可能是 cf 那里没有配置 bypass 策略,得加个策略放行一下。

Note

如果后续要给 Portainer 配置多节点,记得在 cf 那里还要放行一个 api/endpoints

不出意外的话就可以了。

一些可能的报错

ErrorFailureCould not get the contents of the file '**/docker-compose.yml
检查 compose 文件是否有误,比如是否写了正确的镜像名

Renovate 配置

现在我们只是实现了代码即基础设施,上了一辆定制的电动车,但是不踩油门不动,每个镜像都要手动改镜像版本再 git push,太麻烦了。接下来我们将引入Renovate 机器人,实现自动更新镜像。

Warning

我也没用过 WatchTower,几种方法也没有孰好孰坏之分,这里不展开讨论

首先我们来把机器人安装到我们的仓库里,直达链接。添加到新仓库后会跳转到新页面来配置。这里没有许可证,选第二个免费版。

下一步,选择 Scan and Alert,这样子就会自动提 PR 了。

配置完成会跳转到个人主页,这里还能看到对应仓库的每一次触发日志

等一会仓库会自动收到一条来自机器人的 PR,类似于下图:

这条 PR 里会列出你的所有 compose 文件以及更新提示,可以直接 Merge,也可以顺手直接用下面配置覆盖。合并之后会多出一个 Dependency Dashboard 的 issue,可以在这里进行快速操作。

关于 renovate 的配置,建议仔细阅读一遍官方文档,这里放几个可能会用到的

两条路

这里我让 Gemini 和 Claude 改了 2 份 renovate.json,第一份让机器人来管理合并的事,挂了快一周,实测小版本更新自动 commit 没有问题;第二份中 "platformAutomerge" 不填,默认为 true,托管给 GitHub 来管理自动合并。但是 GitHub 私人仓库的 AutoMerge 功能只对 Pro 用户开放,而且我死活调不出来,一个 PR 挂在那里一天了都没有触发自动合并,等一位大佬来帮我看看

作用是上游镜像推了个小更新,就自动 commit 掉,大版本更新提 PR 手动批准

可用配置

{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:recommended" ], "timezone": "Asia/Shanghai", "schedule": ["at any time"], "platformAutomerge": false, "automergeSchedule": ["at any time"], "ignoreTests": true, "packageRules": [ { "matchDatasources": ["docker"], "matchUpdateTypes": ["minor", "patch", "digest"], "automerge": true, "automergeType": "branch", "groupName": "all non-major docker updates" }, { "matchDatasources": ["docker"], "matchUpdateTypes": ["major"], "automerge": false, "addLabels": ["major-update-warning"] } ] } 

[未成功] GitHub Pro 用户配置

需要打开仓库设置里的 Allow auto-merge

在我这里未生效,仅供参考

{ "$schema": "https://docs.renovatebot.com/renovate-schema.json", "extends": [ "config:recommended" ], "timezone": "Asia/Shanghai", "schedule": ["at any time"], "packageRules": [ { "matchDatasources": ["docker"], "matchUpdateTypes": ["minor", "patch", "digest"], "automerge": true, "groupName": "all non-major docker updates" }, { "matchDatasources": ["docker"], "matchUpdateTypes": ["major"], "automerge": false, "addLabels": ["major-update-warning"] } ] } 

后记

修改完文件记得跑一下下方的检查命令:

npx --yes --package renovate -- renovate-config-validator renovate.json 

实测 bunx 不可用:

"err": { "code": "MODULE_NOT_FOUND", 

如果忘了也没关系,机器人会在 issue 里报错

要是没啥问题,机器人就能自动干活了:


📌 转载信息
转载时间:
2026/1/14 10:58:07

Baichuan-M3 是百川智能的新一代医疗强化大型语言模型,是继 Baichuan-M2 之后的一项重要里程碑。

与以往主要侧重静态问答或表面化角色扮演的方法不同,Baichuan-M3 被训练为显式建模临床决策过程,旨在提高在真实医疗实践中的可用性和可靠性。模型不仅仅生成 “听起来合理” 的答案或诸如 “你应尽快就医” 之类的高频模糊建议,而是被训练为主动获取关键临床信息、构建连贯的医疗推理路径,并系统性地约束易产生幻觉的行为。

核心亮点

  • 超越 GPT-5.2:在 HealthBench、HealthBench-Hard、幻觉评估和 SCAN-bench 上均优于 OpenAI 的最新模型,确立了医疗 AI 的新 SOTA(最佳水平)
  • 高保真临床询问:在 SCAN-bench 的三个维度 —— 临床询问、化验检测和诊断 —— 中唯一排名第一的模型
  • 低幻觉、高可靠性:通过 Fact-Aware 强化学习实现比 GPT-5.2 更低的幻觉率,即使在未使用外部工具的情况下也能保持高可靠性

与 Baichuan-M2 相比,Baichuan-M3 在 HealthBench-Hard 上提升了 28 个百分点,达到 44.4%,并且超过了 GPT-5.2。它在 HealthBench 总榜上也排名第一。
在幻觉评估方面,我们将长篇回答拆解为可细化、可验证的原子医学陈述,并将每一条与权威医学证据进行校验。即便在无外部工具的情况下,Baichuan-M3 的幻觉率仍低于 GPT-5.2。

Baichuan-M3 在所有三个核心维度中均排名第一,在 “临床询问” 维度上领先第二名 12.4 个百分点。

体验地址


📌 转载信息
原作者:
BunnHack
转载时间:
2026/1/14 10:57:08


前言

IDA-PRO-MCP是我经常用的一个工具,看爆漏洞了,于是来分析了一下,大家记得更新升级

漏洞概述

IDA Pro的Machine Control Protocol (MCP)在本地回环地址(`127.0.0.1:13337`)上暴露了一个未认证的JSON-RPC接口。当`py_eval`工具启用时,该接口可以执行任意Python代码。由于缺乏认证、CORS验证和浏览器来源保护,恶意网页可以通过DNS rebinding攻击实现远程代码执行(RCE)。

漏洞分析/复现

IDA PRO MCP

IDA Pro MCP是一个JSON-RPC over HTTP服务,默认监听在:http://127.0.0.1:13337/mcp

image.png



py_eval

py_eval是MCP提供的一个工具,允许通过JSON-RPC接口执行Python代码:

image.png



image.png



例如执行calc命令

image.png



DNS rebinding

DNS Rebinding是一种攻击技术,利用DNS解析的时间窗口:

1 初始解析:浏览器首次访问evil.com时,DNS返回攻击者控制的IP(如1.2.3.4

2 TTL过期:DNS记录的TTL(Time To Live)很短(如0秒)

3 重新绑定:浏览器再次解析时,DNS返回127.0.0.1

4 绕过同源策略:浏览器认为evil.com127.0.0.1是同源的(因为域名相同)

漏洞复现

使用在线网站生成域名

https://lock.cmpxchg8b.com/rebinder.html

image.png



通过DNS Rebinding技术启用py_eval

image.png



image.png



成功通过DNS Rebinding来执行命令

image.png



引用

https://github.com/taviso/rbndr

https://lock.cmpxchg8b.com/rebinder.html

https://github.com/mrexodia/ida-pro-mcp/issues/201





用了 openwebui 大半年了。从一开始的毛胚房到现在的精装修。踩了很多坑,也一步步的看着 openwebui 更强大更好用。我把我理解的各项功能的好用配置分享给大家交流一下

安装

我是在群晖上通过 docker 方式安装的

docker image prune
docker pull ghcr.io/open-webui/open-webui:main
docker pull ghcr.io/open-webui/mcpo:main

除了端口设置外就只有一个文件夹挂载,这是所有用户数据了。我更新的方式都是通过重置这个容器来升级。

本来是没有第一行的。直到我 200G 系统盘因此被占满 ……

添加模型服务器

通过管理员设置 - 外部链接 - 加号 - 把供应商的域名和 apikey 填进来就可以了

他默认会把所有的模型都以私有的方式给你添加到 owu 来。你可以选择禁用某些用不到的模型,让他们不在可选列表里面出现(比如 rag 相关的重拍、向量化模型),也可以用过将私有转公开的方式让其他用户可以使用该模型。最简单也可以通过环境变量 BYPASS_MODEL_ACCESS_CONTROL=True 来放开所有模型,不用单独设置。

我比较喜欢我的小房子 我去 cherrystudio 偷了一些图标美化我的小房子~

可以在管理员设置 - 模型 - 编辑单个模型去上传图标。

函数

我本地的函数比较简单。就配置了联网搜索以及本地事件的补充,告诉 ai 当前时间

当前时间的话如下。

Message Date And Time 函数代码
"""
title: Message Date And Time
author: benasraudys
author_url: https://github.com/benasraudys
funding_url: https://github.com/benasraudys
description: Gives model current date and time context for each message. Don't forget to adjust the timezone in the settings.
version: 0.1.1
required_open_webui_version: 0.6.4
"""

import datetime
import os
from pydantic import BaseModel, Field
from typing import Callable, Awaitable, Any, Optional


class Filter:
    class Valves(BaseModel):
        timezone_hours: int = Field(
            default=0,
            description="Timezone offset hours (e.g., 5 for UTC+5:30, -4 for UTC-4:00)",
        )
        timezone_minutes: int = Field(
            default=0,
            description="Timezone offset minutes (e.g., 30 for UTC+5:30, 45 for UTC-4:45)",
        )
        southern_hemisphere: bool = Field(
            default=False,
            description="Enable if you're in the Southern Hemisphere (Australia, South America, etc.)",
        )

    def __init__(self):
        self.valves = self.Valves(
            **{
                "timezone_hours": int(os.getenv("DATETIME_TIMEZONE_HOURS", "0")),
                "timezone_minutes": int(os.getenv("DATETIME_TIMEZONE_MINUTES", "0")),
                "southern_hemisphere": os.getenv(
                    "DATETIME_SOUTHERN_HEMISPHERE", "false"
                ).lower()
                == "true",
            }
        )

    def get_season(self, month, southern_hemisphere=False):
        if not southern_hemisphere:
            if 3 <= month <= 5:
                return "Spring"
            elif 6 <= month <= 8:
                return "Summer"
            elif 9 <= month <= 11:
                return "Autumn"
            else:
                return "Winter"
        else:
            if 3 <= month <= 5:
                return "Autumn"
            elif 6 <= month <= 8:
                return "Winter"
            elif 9 <= month <= 11:
                return "Spring"
            else:
                return "Summer"

    def get_time_of_day(self, hour):
        if 5 <= hour < 12:
            return "Morning"
        elif 12 <= hour < 17:
            return "Afternoon"
        elif 17 <= hour < 21:
            return "Evening"
        else:
            return "Night"

    async def inlet(
        self,
        body: dict,
        __event_emitter__: Callable[[Any], Awaitable[None]],
        __request__: Any,
        __user__: Optional[dict] = None,
        __model__: Optional[dict] = None,
    ) -> dict:
        now_utc = datetime.datetime.utcnow()

        timezone_hours = self.valves.timezone_hours
        timezone_minutes = self.valves.timezone_minutes
        total_offset_minutes = (timezone_hours * 60) + timezone_minutes

        now = now_utc + datetime.timedelta(minutes=total_offset_minutes)

        month = now.month
        hour = now.hour

        formatted_date = now.strftime("%B %d, %Y")
        formatted_time = now.strftime("%H:%M:%S")
        day_of_week = now.strftime("%A")

        hours_offset = abs(total_offset_minutes) // 60
        minutes_offset = abs(total_offset_minutes) % 60

        if minutes_offset == 0:
            if total_offset_minutes >= 0:
                timezone_str = f"UTC+{hours_offset}"
            else:
                timezone_str = f"UTC-{hours_offset}"
        else:
            if total_offset_minutes >= 0:
                timezone_str = f"UTC+{hours_offset}:{minutes_offset:02d}"
            else:
                timezone_str = f"UTC-{hours_offset}:{minutes_offset:02d}"

        season = self.get_season(month, self.valves.southern_hemisphere)
        time_of_day = self.get_time_of_day(hour)

        context = f"Current date is {day_of_week}, {formatted_date}, {season}, {time_of_day}, the user time is {formatted_time} {timezone_str}"

        datetime_message = {
            "role": "system",
            "content": f"Time context: {context}. ",
        }

        if "messages" in body and isinstance(body["messages"], list):
            body["messages"].insert(0, datetime_message)
        else:
            body["messages"] = [datetime_message]

        return body

联网搜索的话主要是基于各家模型自己的能力(大概也就是在消息接口参数里面注入模型对应的工具,但是一般都要额外付费,所以我现在基本不用了) 我了解到的,gemini 有这样的函数配置,以及 openai 流式接口也有。这个可以站内查对应工具直接使用。函数认准方块佬就对了。加个方块,搜索更快!

两个工具结合就能达到以下示例的效果

外部工具

这里主要是提供 mcp 的能力 说实话挺难用的。但是我刚好联网搜索走其他方式都有些不好用。我目前是通过 mcp 的方式来实现的。

部署 mcpo

我通过在本地 docker 部署 mcpo,镜像地址在一开始应该已经准备好了。

我群晖这边的部署操作主要是配置了端口为 38000 以及启动命令

mcpo --config /app/mcp-config.json --hot-reload

然后通过文件挂载 /app/mcp-config.json 这个配置文件

文件内容可以参考下面这个

{
    "mcpServers": {
      "grok-search": {
	      "type": "stdio",
	      "command": "npx",
	      "args": ["-y", "grok-search-mcp"],
	      "env": {
	        "GROK_API_URL": "https://-----/v1",
	        "GROK_API_KEY": "-----",
	        "GROK_MODEL": "grok-4-fast",
	        "DEBUG": "true"
	      }
      }
    }
  }

然后我们就可以直接访问 38000 这个端口就可以看到 json 返回了 也能知道你哪些工具启动成功了。

我们就能去管理员设置 - 外部工具 - 加号 新增工具服务器了

在配置完成之后我们可以在对话界面去勾选这个工具 对他进行一些询问。示例如下

当然你可能觉得每一次点都好费劲,当然我们也可以到 管理员设置 - 模型 - 对应模型去默认启动某些工具或其他功能

知识库

知识库我用的其实不多。但是我觉得效果还是不错的。就是遇到这个坑导致 rag 检索不符合预期

内容提取

首先提取引擎我推荐 mistral (主要可以白嫖) 效果也不错 我用过自部署的 tika。有些中文 pdf 会乱码 这个挺好的。但是我还是建议如果可以自己转 md 把

嵌入和检索

这一块我也是跟着 ai 配的。效果还是不错的。

上传合适的文档,结果也能够图文并茂

辅助功能

在管理员设置 - 界面 - 任务这边可以配置一些异步的小任务是否使用 ai 生成

我就开了这个标题自动生成(效果图如左上角),openai 每天免费的 nano 用不完就来这边干点活吧。有标题了也方便你到时候快速查询历史的对话。

图片生成

目前我觉得 owu 做的这个功能比较死板(主要问题是只能填入一个模型)

我有个朋友部署好了 comfy,等给我之后这边估计Pro 就要从对话模型里面选了。

通过这种方式配置好的话 体验和 openai 就很像了。对话勾选一下画图。描述需求就好了


画图也踩过一些坑,比如分享一个 openwebui 中生图模型 chunk too big 问题的解决办法 。里面也有其他佬遇到的其他坑和他们的解决方式。L 站真的是我见过 ai 相关信息最快的一个站了。在站内搜不到,我估计谷歌也搜不到

结语

以上就是我的配置心得。希望我的分享能给你一些启发,也欢迎大家交流各自的 “装修方案”。


📌 转载信息
原作者:
lie5860
转载时间:
2026/1/14 10:56:16

替换 antigravity 里面的一个文件,重启即可使用.

版本更新

1.2.1: 修复了 mermaid 提前渲染导致的截断问题.
1.2.0: 新增 Mermaid 流程图渲染功能
1.1.0: 来自 github 社区的提交,增加了 LaTeX 公式的渲染支持,增加了悬浮复制按钮,重构了代码.

1.0.0: 表格颜色增强,增加回复内容一键复制按钮.

图片展示:

1.2.0

原版 mermaid 图

增强渲染版 mermaid 图

1.1.0

原版公式

增强渲染版公式

1.0.0

初版展示效果

复制代码块格式的增强


📌 转载信息
转载时间:
2026/1/14 10:55:34

刚刚在推上看到的
ymcki 给 Kimi-Linear-48B-A3B 加上了 MLA KV cache
实测下来 1M 上下文 F16 KV cache 显存占用从 140G 降到 15G。
如果显存少一点的用户可以选择(with KV Quant )

  • q8_0: 7.9GB
  • q5_1: 5.6GB
  • q4_0: 4.2GB
    有兴趣可以玩看看

Kimi-Linear-48B 的效果


📌 转载信息
原作者:
josenlou
转载时间:
2026/1/14 10:54:29

接上回:Zotero 全面学习指南(黑板报画风)

今天是第二期,本期视频采用水彩画风教学,主要为科研小白扫除一些障碍,希望佬友们喜欢。研究生院官网已同步更新。

特此鸣谢佬友 @555hai 的大力支持!!!
直达链接:

后续规划内容已在路上,敬请期待:


📌 转载信息
原作者:
xuzhu123
转载时间:
2026/1/14 10:54:14

缘起是受𝕏上某个大佬的启发(忘记名字了,只能匿名感谢):要开发给小白用的工具。

所以 Vibe-Coding 了这个帮用户快速安装 Claude Code 并管理技能包(Skills)的桌面应用程序。

工具实现没啥难度,给 L 站大佬们一些启发。

工具可以:

  • 一键安装 Claude Code:自动检测环境、安装依赖、配置 npm,适配国内网络环境
  • 模型配置:支持配置 API Key、自定义模型端点、选择模型提供商
  • 技能管理
    • 从文件夹或 ZIP 包导入技能
    • 选择安装到项目级或全局技能目录
    • 查看安装历史记录
    • 管理全局技能

📌 转载信息
原作者:
comeonzhj
转载时间:
2026/1/14 10:53:55

习惯用浏览器上的截图插件直接截图了,之前用的一个越来越重了。索性自己弄一个。欢迎体验,还会逐步更新。
落地页和开源版本
谷歌浏览器应用市场上架了微软的在审核,链接:
谷歌浏览器应用市场
edge 审核慢一点,也可以直接使用开源版本开发者模式加载


开发者模式插件包可以 github 下载或者 PicKoala


📌 转载信息
原作者:
Rgoking
转载时间:
2026/1/14 10:53:38

演示站点:https://mirror.dal.ao

项目地址:dalao-org/MirrorOne

老项目重构求点 Star

前言

可能很多人还记得前几年的 Oneinstack/lnmp 脚本被收购后出现供应链投毒的问题。

OneInStack 疑似供应链投毒 Nginx

但是投毒的方式并不是在脚本本身进行了修改,而是在脚本依赖的 oneinstack 托管的软件包里直接进行了投毒。相当于是脚本下载了含木马的软件包。因此,在那之后我就写了一个 Python 脚本来爬取 Oneinstack 全部依赖的软件包的官方下载地址,并通过 GitHub Actions 自动运行,生成 Cloudflare/Netlify 支持的跳转脚本。当 lnmp 这一类脚本请求下载时,会被自动跳转到原始的官方链接。

当时的代码记录

举个例子

当你请求下载 MySQL 8.4.6 的时候,请求镜像地址 https://mirror.dal.ao/src/mysql-8.4.6-linux-glibc2.28-x86_64.tar.xz 会直接 302 跳转到 https://downloads.mysql.com/archives/get/p/23/file/mysql-8.4.6-linux-glibc2.28-x86_64.tar.xz

MirrorOne

这两天因为重新部署服务器,因此重新把这个项目拾起来重构了一番。将原本依赖 GitHub Actions 的运行方式彻底抛弃了,改为 FastAPI 后端 + 定时任务来处理。主要原因有以下几个:

  1. GitHub Actions 访问 PHP 的官方站点频繁出错
  2. Netlify 和 Cloudflare Pages 都有跳转规则数量上限
  3. 自托管可以处理局域网等受限网络的情况

新的特点

  1. 新增了 WebUI 界面,允许管理员进行设置,包括对抓取的软件包版本的限制、版本类型限制。避免了命令行程序设置的麻烦。
  1. 重定向和缓存的双重镜像模式。在默认的重定向模式下,对软件包下载的请求仍然会被重定向到官方下载链接;而缓存模式下,会从托管的服务器下载。但为了避免恶意利用,当系统在缓存模式下时,仍然可以通过 force_redirect=true 请求参数来强制使用重定向模式。
  2. 标准化的爬虫 Scraper 基类,可以更容易地添加更多软件包。

📌 转载信息
转载时间:
2026/1/14 10:53:34


该漏洞由 Patchstack 于 2025 年 11 月 21 日保留,影响插件 4.0.49 及之前的所有版本,核心成因是访问控制安全级别配置不当,导致攻击者可绕过权限验证,未授权调用插件新闻订阅相关 REST API 接口,实现用户订阅状态篡改、非法订阅/退订等操作。



一、漏洞概述

漏洞编号:CVE-2025-66128

漏洞名称:WooCommerce Brevo Sendinblue 插件授权缺失漏洞

漏洞类型:访问控制绕过(授权缺失)

受影响组件:WooCommerce Brevo Sendinblue 插件(≤ 4.0.49 版本)

影响环境:Kali Linux + Apache 2.4.65 + MariaDB 11.8.5 + PHP-FPM + WordPress

漏洞核心路径:/wp-json/sendinblue/v1/subscription/update-status

漏洞危害:未授权攻击者可篡改用户订阅状态、干扰营销活动,违反 GDPR 合规要求,损害用户隐私与品牌声誉





二、漏洞复现

利用CVE-2025-66128授权缺失漏洞,通过未授权POST请求直接调用目标API接口,验证漏洞可利用性:

直接触发目标漏洞路由

1. 无参数请求(验证参数校验缺失)

image.png







2. 非法参数格式请求(验证参数格式校验缺失)

image.png





3. 伪造Referer请求(验证Referer防护缺失)

image.png





4. 批量篡改订阅状态请求(验证批量操作无限制)

image.png





5. 路由无有效防护



image.png





6. 使用非授权IP,验证无IP限制

image.png







三、漏洞分析

CVE-2025-66128漏洞的核心根源在于ApiManager类的 add_rest_endpoints()方法中,所有REST API路由注册均未配置permission_callback权限验证回调函数,且回调逻辑内部无任何补充权限校验,导致未授权用户可直接调用各类敏感接口。



漏洞触发的关键逻辑链

1 路由注册触发:ApiManager类的add_hooks()方法(源码第45-84行)虽未直接注册路由,但结合主文件逻辑可知,插件初始化时会调用add_rest_endpoints()方法,完成所有API路由的注册;

2 权限校验缺失:WordPress REST API的register_rest_route()函数要求通过permission_callback参数定义权限校验逻辑,若未配置该参数,默认对所有用户(包括未授权游客)开放;

3 回调逻辑无补充校验:所有路由的回调函数(如save_settings()disconnect_connection()get_file_contents()等)内部均未添加用户登录状态、角色权限等校验逻辑,直接执行核心操作。



敏感接口无参数校验与权限隔离

get_file_contents()和 delete_attachment() 方法用于文件操作,虽做了基础文件名过滤,但未校验调用者权限,导致未授权用户可操作插件上传目录下的任意文件。





save_settings()email_settings()方法用于修改插件核心配置与邮件设置,仅执行“读取请求体-更新选项”的简单逻辑,无任何权限校验与参数合法性校验。





api-manager.php中虽存在validate_api_key()方法(源码第497-517行)用于API密钥校验,但该方法未被任何路由的permission_callback复用,且仅针对密钥验证,未覆盖所有敏感接口,导致权限校验逻辑形同虚设。



四、漏洞防御

1为所有路由数组添加 permission 字段,注册路由时补充 permission_callback 参数:



2. 权限回调内直接调用现有 validate_api_key 方法,叠加管理员权限校验:



3. 在 ApiManager 类顶部新增常量定义,统一键名:





参考链接

ERROR: The request could not be satisfied



WooCommerce Brevo Sendinblue 插件授权缺失漏洞 CVE-2025-66128 详解 - qife - 博客园



https://avd.aliyun.com/detail?id=AVD-2025-66128

一个轻量、高效的油猴脚本,致力于提升夸克网盘网页版播放器的观影体验。认为有帮助的话帮我点个赞,助我突破 L3。

脚本地址:夸克网盘视频默认最高画质

git 仓库:GitHub - Ry-Run/quark-automatic-quality


📌 转载信息
原作者:
_run
转载时间:
2026/1/14 10:53:04

最近有佬分享带有令牌的 outlook 邮箱;

正好手上也有一批号,想着做个管理和取件功能;

功能可能比较简单,简约风格;

这批有使用痕迹,不保证还有效哈。我试了几个是有效的;

增加了域名的临时邮箱功能,多种选择!

感谢佬提供的 API,暂时搞不到密钥,只能用默认的了;

400 + 域名的临时邮箱已就绪,API 已开放 (域名数量动态变化,以实际为准) - 资源荟萃 - LINUX DO


📌 转载信息
原作者:
Kongbai333
转载时间:
2026/1/14 10:48:57

KoalaLink
有三个版本
PRO:https://gokaola.top
Lite 演示站(后台密码 admin):https://go.dsi.mom
Nano:https://go.shanku.lol/
具体可以看演示站,已开源。PRO 版本还有点问题没有优化完。
GitHub - Bitkoala/KoalaLink: KoalaLink 考拉链 包含单文件以及自托管,极简单文件短链接跳转工具,零依赖、零配置,上传即用。轻量级短链接管理系统,内置品牌中转页与流量分析,基于 PHP + SQLite 开箱即用。




PRO 演示站点 vip 激活码


📌 转载信息
原作者:
Rgoking
转载时间:
2026/1/14 10:48:52