Iflow补丁,修复第三方api无法自动压缩问题,增加功能

# iflow-boost

项目地址:tongkangyu/iflow-boost: 第三方 API 上下文自动压缩修复 + 增强工具包。纯 PowerShell 实现,零依赖

iFlow CLI 增强工具包 - 无代理版,直接使用 iflow 原生功能。

## 功能

| 功能 | 说明 |

|------|------|

| **countTokens 补丁** | 修复第三方 API 无法触发自动压缩的问题 |

| **结构化压缩摘要** | 压缩时生成包含 Scope/Tools/Files/Pending 的摘要 |

| **Git 上下文注入** | 自动注入 Git 分支、状态、最近提交信息 |

| **Skills 系统** | 根据关键词注入技能指令 |

| **成本追踪** | 记录 API 调用次数 |

## 快速开始

```powershell

# 1. 克隆或下载项目

git clone https://github.com/your-repo/iflow-boost.git

cd iflow-boost

# 2. 运行部署脚本

.\deploy.ps1

# 3. 完成!直接使用 iflow

iflow

```

就这么简单!无需启动代理,无需占用端口。

## 权限要求

部署脚本需要以下目录的写入权限:

| 路径 | 用途 |

|------|------|

| `%APPDATA%\npm\node_modules\@iflow-ai\iflow-cli\bundle\` | 修补 iflow.js |

| `%USERPROFILE%\.iflow\` | 部署 hooks、skills,更新 settings.json |

**Windows 用户:**

- 修补 iflow.js 需要****以管理员身份运行 PowerShell****

- ~/.iflow/ 目录通常不需要特殊权限(用户目录)

**如果没有管理员权限:**

- 脚本会自动检测权限问题并输出手动步骤

- 按照打印的指令手动完成配置即可

## 详细使用

### 步骤 1:部署

在 PowerShell 中运行部署脚本:

```powershell

.\deploy.ps1

```

脚本会自动:

1. 应用 countTokens 补丁到 iflow.js

2. 创建 `~/.iflow/hooks/` 和 `~/.iflow/skills/` 目录

3. 复制 hook 脚本到 `~/.iflow/hooks/`

4. 复制 skill JSON 文件到 `~/.iflow/skills/`

5. 更新 `~/.iflow/settings.json` 配置

### 步骤 2:验证配置

检查 `~/.iflow/settings.json`:

```powershell

cat ~/.iflow/settings.json

```

确保包含:

- `tokensLimit`:模型的上下文限制

- `compressionTokenThreshold`:0.8(在 80% 限制时压缩)

- `hooks`:Hook 配置

### 步骤 3:使用 iflow

直接正常使用 iflow:

```powershell

iflow

```

当上下文超过阈值时,会自动触发压缩。

### 步骤 4:卸载(可选)

恢复 iflow 原始状态:

```powershell

.\uninstall.ps1

```

这会:

1. 从备份还原 iflow.js

2. 移除 settings.json 中添加的配置

3. 清理 hook 脚本和 skill 文件

## 工作原理

```

┌────────────────────────────────────────────────────────────┐

│ iflow-boost (无代理版) │

├────────────────────────────────────────────────────────────┤

│ │

│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │

│ │ patch-iflow │ │ Hooks │ │ Skills │ │

│ │ countTokens │ │ 脚本目录 │ │ JSON 目录 │ │

│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │

│ │ │ │ │

│ ▼ ▼ ▼ │

│ ┌──────────────────────────────────────────────────────┐ │

│ │ iflow CLI 原生功能 │ │

│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │

│ │ │ Hooks 系统 │ │ 上下文发现 │ │ 压缩器 │ │ │

│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │

│ └──────────────────────────────────────────────────────┘ │

│ │

└────────────────────────────────────────────────────────────┘

```

## countTokens 补丁详解

### 问题背景

iFlow CLI 内置了自动压缩功能,当上下文超过阈值时会自动压缩。但使用第三方 API(如 OpenAI 兼容 API)时,压缩功能无法正常触发。

### 原因分析

iFlow 使用 `countTokens` 方法统计当前上下文的 token 数量:

```javascript

// iflow.js 中的 countTokens 方法

countTokens() {

const text = this.extractTextFromRequest(this.currentRequest);

return this.estimateTokens(text);

}

```

问题在于 `extractTextFromRequest` 方法只处理 iflow 原生格式(Claude API 格式),而第三方 API 使用的是 Gemini 格式的 `contents` 结构:

```javascript

// 第三方 API 的请求格式

{

“contents”: [

{ "role": "user", "parts": \[{ "text": "Hello" }\] },

{ "role": "assistant", "parts": \[{ "text": "Hi!" }\] }

]

}

```

`extractTextFromRequest` 无法识别这种格式,返回空字符串,导致 `countTokens` 返回 0,压缩流程被跳过。

### 补丁方案

补丁修改 `countTokens` 方法,在 `extractTextFromRequest` 返回空时,遍历 `contents` 结构提取文本:

```javascript

// 补丁后的 countTokens 方法

countTokens() {

let text = this.extractTextFromRequest(this.currentRequest);

let tokens = Math.ceil(text.length / 4);

// 如果 extractTextFromRequest 返回空,尝试从 contents 提取

if (tokens === 0 && this.currentRequest?.contents) {

for (const content of this.currentRequest.contents) {

  if (content.parts) {

    for (const part of content.parts) {

      if (part.text) tokens += Math.ceil(part.text.length / 4);

    }

  }

}

}

return { totalTokens: tokens || 1 };

}

```

### 支持的 API

补丁后支持所有使用 Gemini 格式的第三方 API:

| API | 兼容性 |

|-----|--------|

| OpenRouter | :white_check_mark: |

| DeepSeek | :white_check_mark: |

| Qwen (通义千问) | :white_check_mark: |

| Kimi (月之暗面) | :white_check_mark: |

| 智谱 AI | :white_check_mark: |

| 其他 OpenAI 兼容 API | :white_check_mark: |

## Hooks 系统

使用 iflow 原生的 Hooks 系统:

| Hook | 触发时机 | 功能 |

|------|---------|------|

| **SetUpEnvironment** | 会话开始时 | 注入 Git 上下文和 Skills 列表 |

| **SessionStart (compress)** | 压缩触发后 | 生成结构化摘要 |

| **PostToolUse** | 工具调用后 | 记录成本追踪 |

### 结构化压缩摘要

当上下文超过阈值触发压缩时,会自动生成结构化摘要:

```

## Context Summary

### Scope

- Total messages: 45

- User: 15, Assistant: 30

### Tools Used

- Edit: 12 times

- Bash: 8 times

- Read: 5 times

### Files Referenced

- src/main.ts

- src/utils.ts

- config.json

### Pending Tasks

- Fix bug in authentication

- Add tests for new feature

### Timeline

- Session: 10:30 → 11:45

```

## 文件结构

```

iflow-boost/

├── patch-iflow.ps1 # countTokens 补丁

├── deploy.ps1 # 部署脚本

├── uninstall.ps1 # 卸载脚本

├── hooks/

│ ├── git-context.ps1 # Git 上下文注入

│ ├── skills-inject.ps1 # Skills 注入

│ ├── compress-summary.ps1 # 结构化压缩摘要

│ └── cost-tracker.ps1 # 成本追踪

├── skills/ # Skills JSON 文件

│ ├── remember.json

│ ├── stuck.json

│ ├── verify.json

│ ├── simplify.json

│ ├── debug.json

│ └── skillify.json

└── README.md

```

## 配置

部署后 `~/.iflow/settings.json` 会被配置:

```json

{

“tokensLimit”: 256000,

“compressionTokenThreshold”: 0.8,

“contextFileName”: [“IFLOW.md”, “CLAUDE.md”],

“hooks”: {

"SetUpEnvironment": \[...\],

"SessionStart": \[...\],

"PostToolUse": \[...\]

}

}

```

### 配置参数说明

| 参数 | 说明 | 默认值 |

|------|------|--------|

| `tokensLimit` | 上下文 token 上限,超过此值触发压缩 | 256000 |

| `compressionTokenThreshold` | 压缩阈值比例,当 token 数超过 `tokensLimit * ratio` 时触发压缩 | 0.8 |

### 常用模型的 tokensLimit 参考

| 模型 | tokensLimit |

|------|------------|

| mimo-v2-flash | 256000 |

| deepseek-chat / deepseek-r1 | 128000 |

| gpt-4o | 128000 |

| claude-3.5-sonnet (Anthropic) | 200000 |

| qwen-max | 128000 |

## 故障排除

### 补丁失败

如果提示 “Could not find exact match”:

1. iflow 可能已更新

2. 检查 iflow.js 中是否存在 countTokens 方法

3. 可能需要手动修补

### 压缩未触发

1. 检查补丁是否应用:`.\deploy.ps1` 应显示 “[OK] Patch already applied!”

2. 检查 settings.json 中的 `tokensLimit` 是否匹配你的模型

3. 检查 `compressionTokenThreshold` 是否设置(默认 0.8)

### Hooks 不工作

1. 检查 hook 文件是否存在于 `~/.iflow/hooks/`

2. 检查 settings.json 中的 hooks 配置

3. 检查 PowerShell 执行策略:`Get-ExecutionPolicy`

## 注意事项

- iflow 更新后补丁会失效,需重新运行 `.\deploy.ps1`

- 补丁脚本会自动备份原始 `iflow.js` 为 `iflow.js.bak`

- `tokensLimit` 设置不当会导致压缩时机不对

- 本工具仅修改 `countTokens` 方法,不改变 iflow 的压缩逻辑

## 免责声明

本项目为非官方社区工具,与 iFlow 官方团队无任何关联。使用本工具修改 iflow.js 可能违反 iFlow 的使用条款,且 iflow 更新后补丁可能失效。使用本工具产生的任何问题(包括但不限于数据丢失、API 费用异常、服务中断),由使用者自行承担。请确保你理解本工具的工作原理后再使用。

## 致谢

- [iFlow CLI](GitHub - iflow-ai/iflow-cli: iFlow cli is a comprehensive command-line intelligence that embeds in your terminal, analyzes your repositories, does coding tasks, interprets your needs across contexts, and boosts efficiency by performing tasks from simple file operations to complex workflow automation. · GitHub) - 本工具所修补的原始项目

1 个赞

太强了

1 个赞