Skip to content

Tuzfucius/opencode-continuous-loop

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔄 LoopCraft — OpenCode 自主编码循环插件

Plan → Execute → Inspect → Iterate

可以让 OpenCode 的 Agent 独立完成完整项目的自主编码引擎。 它不仅仅是一个工具集,更是一个拥有"宪法"和"自我纠错"能力的智能导演

License: MIT OpenCode Plugin


📖 目录


💡 核心理念

LoopCraft 的设计哲学是 "导演与演员" 模型:

  • OpenCode Agent (演员): 拥有强大的编码、工具使用和推理能力,但容易"迷路"或偏离目标。
  • LoopCraft Plugin (导演): 负责宏观调控。它不直接写代码,而是:
    1. 制定计划: 让 Agent 生成并遵循 ARCHITECTURE.md
    2. 审核质量: 在 Agent 提交代码前进行双重检查。
    3. 纠正偏差: 当 Agent 陷入死循环或错误时,强制介入。
    4. 管理资源: 控制 Token 消耗和步骤数量。

✨ 功能特性

功能模块 详细说明
自主闭环 自动执行 Plan-Execute-Inspect-Iterate 循环,无需人工每一步干预。
宪法注入 强制 Agent 生成并遵守 ARCHITECTURE.md,确保代码风格和架构一致性。
自纠正 遇到错误时自动尝试修复;若修复失败,自动回滚或请求人工介入。
振荡检测 智能识别 "修好了A却坏了B" 的逻辑死循环,及时熔断。
预算熔断 双重熔断机制:动作数 (防止死循环) + 预估费用 (防止 Token 爆炸)。
双重审查 Phase 1: 规则引擎 (ESLint/安全模式)
Phase 2: LLM 深度审查 (可选,检查架构一致性)。
断点续传 所有状态持久化到 .opencode/loop-state.json,随时暂停/恢复。
即时提示 支持在运行时通过 loop_hint 注入提示,不打断当前的执行流。

🏗️ Architecture

┌───────────────────────────────────────────────────────┐
│                    OpenCode Agent                      │
│  ┌─────────┐  ┌────────┐  ┌──────┐  ┌──────────────┐ │
│  │  Read    │  │ Write  │  │ Bash │  │ CodeSearch   │ │
│  └─────────┘  └────────┘  └──────┘  └──────────────┘ │
│  ┌─────────┐  ┌────────┐  ┌──────┐  ┌──────────────┐ │
│  │  Edit   │  │  Grep  │  │ Glob │  │ WebSearch    │ │
│  └─────────┘  └────────┘  └──────┘  └──────────────┘ │
└───────────────┬──────────────────────────┬────────────┘
                │ session.idle (事件)       │ tool 调用
                ▼                          ▼
┌───────────────────────────────────────────────────────┐
│                  LoopCraft Plugin                       │
│                                                        │
│  ┌──────────────────────────────────────────────────┐  │
│  │                 index.ts (入口)                    │  │
│  │  • 注册 9 个自定义工具                              │  │
│  │  • 注册 3 个 Hook                                  │  │
│  └──────────────────────┬───────────────────────────┘  │
│                         │                              │
│  ┌──────────────────────▼───────────────────────────┐  │
│  │              orchestrator.ts (编排)                │  │
│  │  • 事件驱动循环引擎                                 │  │
│  │  • Preflight 安全检查                               │  │
│  │  • 步骤推进 & 生命周期                              │  │
│  └────┬────────────┬───────────────┬────────────────┘  │
│       │            │               │                   │
│  ┌────▼────┐  ┌────▼─────┐  ┌─────▼──────┐            │
│  │state.ts │  │planner.ts│  │corrector.ts│            │
│  │状态持久化│  │Prompt生成│  │错误分析    │            │
│  │预算控制  │  │Plan解析  │  │振荡检测    │            │
│  └─────────┘  └──────────┘  └────────────┘            │
│       │                                                │
│  ┌────▼────────────────────────────────────┐           │
│  │  inspector.ts (审查)                     │           │
│  │  Phase 1: 规则引擎 (ESLint/Pattern)      │           │
│  │  Phase 2: LLM 架构一致性审查 (可选)       │           │
│  └─────────────────────────────────────────┘           │
└───────────────────────────────────────────────────────┘

核心设计理念

插件是「导演」,OpenCode Agent 是「演员」。

LoopCraft 不重新实现 LLM 调用或工具执行(那是 OpenCode 的核心能力),
而是通过 SDK (client.session.prompt()) 向 Agent 发送指令,
通过 Hooks 监听事件和注入上下文。

集成方式

机制 OpenCode API 用途
驱动循环 client.session.prompt() 向 Agent 发送编码指令
监听完成 event: session.idle Hook 检测 Agent 空闲,推进下一步
注入宪法 experimental.chat.system.transform Hook 将 ARCHITECTURE.md 注入 System Prompt
保持记忆 experimental.session.compacting Hook 上下文压缩时注入状态摘要
工具通信 自定义 tool 注册 Agent 通过工具向插件汇报进度/错误
搜索/读写 OpenCode 内置工具 不重复实现 (Read/Write/Grep/Bash)

📦 Installation

方式 本地开发

git clone https://github.com/your-username/opencode-loopcraft.git
cd opencode-loopcraft
bun install
bun run build

# 在 opencode.json 中使用本地路径
{
  "plugin": ["file:///path/to/opencode-loopcraft/dist/index.js"]
}

🚀 Usage

快速开始

在 OpenCode 中输入:

/loop_start Build a REST API with user authentication using Express and JWT

Agent 将自动:

  1. 分析环境 — 读取现有代码和配置
  2. 创建 ARCHITECTURE.md — 定义技术栈和规范
  3. 生成执行计划 — 有序的步骤列表
  4. 等待审批 — 你确认后才开始编码
  5. 自主执行 — 编码 → 测试 → 审查 → 提交
  6. 自纠正 — 遇错自动修复,大问题找你

可用命令

命令 说明
loop_start 启动自主循环(需要 goal 参数)
loop_status 查看当前进度、预算和阶段
loop_approve 审批计划并开始执行
loop_pause 暂停循环
loop_resume 恢复暂停的循环
loop_hint 注入提示(不打断循环)
loop_budget 开启/关闭/配置预算熔断

用户提示 (Hint)

运行时想给 Agent 一个提示但不想打断它?

/loop_hint 注意,那个 API 的参数格式变了,请参考 docs/api-v2.md

Agent 会在下一轮读取你的提示。


🔄 The Loop: 完整流程

🚀 Start
  │
  ▼
🏥 Health Check (git/node)
  │
  ▼
💾 State Exists? ──Yes──► 📂 Resume Session
  │ No                          │
  ▼                             │
📡 Create Session               │
  │                             │
  ▼                             │
📋 Planning Phase               │
  │ Agent generates             │
  │ ARCHITECTURE.md + Plan      │
  ▼                             │
👤 User Approval ◄──────────────┘
  │
  ▼
┌─────────────────────────────────┐
│        🔄 Main Loop             │
│                                 │
│  💰 Budget Check ──exceed──► ⏸  │
│  🛑 Interrupt? ──yes──────► ⏸  │
│  💡 User Hint? ──inject──►     │
│                                 │
│  📡 Send Coding Prompt          │
│    │                            │
│    ▼                            │
│  🤖 Agent Executes              │
│    │                            │
│    ▼                            │
│  ✅ Tests Pass?                 │
│    │ No ──► 🔧 Corrector        │
│    │          │                  │
│    │          ▼                  │
│    │        🌀 Oscillating?     │
│    │          │ Yes ──► 🔴 Stop │
│    │          │ No               │
│    │          ▼                  │
│    │        Retry < Max?        │
│    │          │ Yes ──► Retry   │
│    │          │ No ──► 🔴 Stop  │
│    │                            │
│    ▼                            │
│  🔍 Inspector                   │
│    │ Issues? ──► Fix & Retry   │
│    │                            │
│    ▼                            │
│  📦 Git Commit                  │
│    │                            │
│    ▼                            │
│  📋 More Steps? ──Yes──► Loop  │
│                                 │
└──── No ──► 🏁 Graceful Exit    │

🛡️ 安全机制

1. 预算熔断 (Budget Circuit Breaker)

为了防止 AI 消耗过多资源,LoopCraft 提供了双重预算控制。

注意: 默认情况下预算熔断是关闭的,需要手动开启。

# 开启预算 (默认: 200 动作 / $2.00)
/loop_budget action=on

# 自定义并开启
/loop_budget action=set maxActions=500 maxCostUsd=5.00
  • Max Actions: 限制 Agent 与环境交互的总次数。
  • Max Cost: 估算 Token 消耗费用 (基于 LLM 定价)。

2. 振荡检测 (Oscillation Detection)

如果 Agent 陷入了 "修复 Bug A 导致 Bug B,修复 Bug B 又导致 Bug A" 的死循环,Corrector 会介入。

  • 机制: 记录最近 20 次修复的 Hash(UserFile + ErrorMessage)
  • 触发: 如果同一错误组合在短时间内重复出现 3 次,循环自动暂停并请求人工介入。

3. Git 脏工作区保护

在执行每一步之前,Orchestrator 会检查 git status

  • 如果有未提交的更改,插件会自动创建一个 chore(loopcraft): auto-backup 的提交。
  • 这确保了如果 Agent 搞砸了代码,用户总是可以回滚到上一个干净的状态。

📦 安装与配置

1. 构建插件

cd opencode-loopcraft
npm install
npm run build

2. 配置 OpenCode

在你的目标项目根目录下创建 opencode.json

// .opencode/loop-state.json
{
  "budget": {
    "enabled": false,
    "actionsCount": 0,
    "maxActions": 200,
    "estimatedCostUsd": 0,
    "maxCostUsd": 2.00
  }
}

即使未开启熔断,动作数和费用仍然会被统计并可通过 loop_status 查看。

2. 振荡检测

追踪最近 6 次修复的 file + errorHash。如果同一组合出现 ≥ 3 次 → 强制中断。

3. 脏工作区保护

每步执行前检查 git status。如有未提交更改 → 自动创建备份 commit。

4. 宪法强制

ARCHITECTURE.md 通过 Hook 注入到每次 LLM 调用的 System Prompt 中,
Agent 无法"遗忘"技术规范。


📁 Project Structure

opencode-loopcraft/
├── package.json
├── tsconfig.json
├── .gitignore
├── README.md                  ← 你在这里
├── src/
│   ├── index.ts               # 🔌 Plugin Entry & Tool Registration
│   ├── types.ts               # 📐 Type Definitions
│   ├── orchestrator.ts        # 🧠 Event-Driven Loop Engine
│   ├── state.ts               # 💾 State Persistence & Budget
│   ├── planner.ts             # 📋 Prompt Templates & Plan Parsing
│   ├── corrector.ts           # 🔧 Error Analysis & Oscillation Detection
│   ├── inspector.ts           # 🔍 Two-Phase Quality Inspector
│   ├── logger.ts              # 📊 Structured Logging
│   ├── prompts/
│   │   ├── initializer.md     # Planning phase prompt
│   │   └── constitution.md    # System prompt injection template
│   └── README.md              # Source directory documentation
└── tests/                     # Unit & Integration Tests

🔧 Development

# 安装依赖
bun install

# 开发模式 (热编译)
bun run dev

# 构建
bun run build

# 测试
bun test

📄 License

MIT © LoopCraft Contributors

About

opencode plugins for continuous coding

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published