Files
16gagent/docs/AGENTS-PROTOCOL-FULL.md
2026-06-06 10:40:48 +08:00

459 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Execution Protocol — Planning Layer 🔵
> This is the execution engine. Every agent turn MUST follow this protocol.
> It replaces reactive execution with structured planning.
> No new code. No new agents. Pure protocol enforcement via this prompt.
### 0. Complexity Classification (MUST run first)
Before ANY action, classify the task:
**Simple → Direct Execution**
| Criteria (ANY ONE) | Example |
|--------------------|---------|
| Single file read/write | "Read schema.ts" |
| Single command | "npm test" |
| Pure query | "What time is it?" |
| Conversation | "Hello" |
**Complex → MUST Use Task Tree**
| Criteria (ANY ONE) | Example |
|--------------------|---------|
| 3+ files to modify | "Fix all FK references" |
| Multi-step workflow | "Generate project → install → build → test" |
| Schema/database change | "Add inspection_records table" |
| Cross-project operation | "Fix all 3 generated projects" |
| Auth/security change | "Add RBAC" |
| New feature | "Add file upload" |
| Bug root-cause analysis | "Why does FK constraint fail?" |
| 2+ tool categories (read+write+exec) | "Read schema, fix it, rebuild" |
| Estimated > 45 min or > 2 systems | "Epic-level task" |
**Decision rule: if uncertain → treat as Complex.**
---
### 1. Task Tree Construction (Complex Tasks ONLY — MANDATORY)
> ⚠️ Complex tasks MUST build a Task Tree BEFORE entering §2 PLAN.
> No flat task lists. Task Tree is the only valid entry to Planning.
#### 1a. Task Tree Definition
Task Tree is an **execution tree**, not a feature tree.
**Wrong (module tree):**
```
Project
├── User
├── Order
└── Payment
```
**Correct (execution tree):**
```
Project
├── T1 Architecture Setup
├── T2 Database Schema [depends_on: T1]
├── T3 Backend API [depends_on: T2]
├── T4 Frontend [depends_on: T3]
└── T5 Verification [depends_on: T4]
```
#### 1b. Mandatory Output Format
Before §2 PLAN, output:
```
### Task Tree
| Task ID | Name | Depends On | Parallelizable | Est. Size |
|---------|------|------------|----------------|-----------|
| T1 | Project Bootstrap | NONE | NO | Small |
| T2 | Database Schema | T1 | NO | Medium |
| T3 | Auth Service | T2 | YES | Medium |
| T4 | User Service | T2 | YES | Medium |
| T5 | API Gateway | T3,T4 | NO | Medium |
```
Each Task ID maps to a subtask in §2 PLAN.
#### 1c. Dependency Rules
**Hard Dependency** — upstream task MUST finish before starting:
```
T3 Backend API depends_on: T2 Database Schema
```
**Soft Dependency** — can start in parallel, must integrate before final:
```
T4 UI Pages depends_on: Design Tokens (soft)
```
#### 1d. Parallelism Optimization
Agent MUST identify parallelizable tasks. Output:
```
### Parallel Groups
**Group A (can run simultaneously):**
- T3 Auth Service
- T4 User Service
**Group B (can run simultaneously):**
- T6 Unit Tests
- T7 Integration Tests
```
If all tasks form a serial chain (T1→T2→T3→...), **must explain why** parallelism is impossible.
#### 1e. Learning Context Integration
For each task, inject relevant lessons from the Learning Loop:
```
### Per-Task Injected Risks
**T3: Backend Generator**
- [R1] AP-3 DDL Constraint Leakage — add isConstraintLine() before column parsing
Source: reflections/2026-06-05-ddl-leakage.md
- [R2] FK REPLACE → use ON CONFLICT DO UPDATE
Source: best-practices.md #11
```
#### 1f. Task Tree Quality Gate
Before proceeding to §2 PLAN, verify ALL:
- [ ] Root Task exists (exactly one task with depends_on: NONE)
- [ ] No orphan tasks (every non-root task has a valid parent chain to root)
- [ ] No circular dependency (A→B→C→A)
- [ ] No XL Task (if estimated > 4h, split into sub-tasks)
- [ ] No unjustified serial chain (if T1→T2→T3→T4 with no hard deps, explain or parallelize)
- [ ] Every task has Injected Risks populated (§1e)
- [ ] Agent can independently complete every task (no external human dependency)
**If ANY gate fails: do NOT proceed to §2 PLAN. Re-split the tree.**
---
### 2. Planning Protocol (Complex Tasks ONLY)
Before any tool call on a complex task:
```
## PLAN
### Goal
<one sentence>
### Subtasks
1. <step> → Verify: <how to check>
2. <step> → Verify: <how to check>
...
### Risks
- <potential pitfall>
- <dependency risk>
### Verification Strategy
- Build: <yes/no>
- Tests: <yes/no>
- Lint: <yes/no>
```
Then use `update_plan` if >3 subtasks. Then execute.
### 3. Pre-flight Check (Complex Tasks ONLY)
Before executing step 1, **MUST** complete ALL of the following:
#### 3a. Dependency Scan
- [ ] Which files/tables/modules are involved?
- [ ] What are their dependencies (FK, imports, types)?
- [ ] What's the blast radius if I get it wrong?
**Anti-pattern:** "I'll fix this FK error" → "Oh wait, here's another FK error" → "And another..."
**Correct pattern:** "Let me scan ALL FK references first, then fix them all at once."
#### 3b. Learning Context Injector (MANDATORY — 3 searches)
**Search 1: Similar failures**
```
ctx_search(queries: ["<task_type> failure pattern lesson"], source: "reflections", sort: "timeline")
```
**Search 2: Relevant best practices**
```
memory_search(query: "<task_domain> best practice checklist pattern")
```
**Search 3: Relevant playbook**
```
Check playbooks/ for matching task type
```
Inject top findings into PLAN > Risks. Format:
```
### Injected Risks (from Learning Context)
- [R1] <lesson from past failure> — source: <reflection/pattern file>
- [R2] <relevant best practice violation> — source: best-practices.md #N
- [R3] <playbook recommendation> — source: playbooks/<name>.md
```
#### 3c. Domain Checklist Injection
**Based on task type, append the relevant checklist to PLAN:**
**SQL / Schema tasks:**
- □ FK 引用:所有 FK 用 ON CONFLICT DO UPDATE,不用 REPLACESQLite REPLACE = DELETE+INSERT
- □ DDL 解析:PRIMARY KEY / CONSTRAINT 行不能当数据字段
- □ 迁移安全:先检查所有引用方,再改 schema
- □ WAL 模式:多进程读写不阻塞
**JavaScript / TypeScript tasks:**
- □ Falsy 陷阱:0、''、false 用 `??` 替代 `||`|| 会把 0 判为 falsy
- □ 类型生成:entity names 复数→单数(Albums→Album),但不碰 status/bus 等词根
- □ 模板语法:模板字面量内嵌反引号用 \` 转义或字符串拼接
- □ 启发式检测:必须 2+ 信号同时匹配,单信号不可靠
**Next.js / Frontend tasks:**
- □ 路径:Next.js App Router 用 `app/` 不是 `src/app/`
- □ Tailwind content 路径匹配实际目录
- □ tsconfig paths 匹配实际目录结构
- □ JSX:三元表达式嵌套使用括号包裹,避免 `{}` 嵌套错误
**Backend / API tasks:**
- □ generateTypes 必须包含 User 实体 → CreateUserInput 类型
- □ 所有 resource types 生成完整的 CRUD Input 类型
- □ route params 命名与 service 函数签名一致
**Generator / Builder tasks:**
- □ 输出路径:验证生成目录结构与实际 runtime 预期一致
- □ DDL→TSschema.ts 中 CONSTRAINT/FK 行不能被解析为 interface 字段
- □ Type mappingSQL types 到 TS types 的映射表完整
- □ Template safety:模板字面量不输出裸反引号
**Release / CI tasks:**
- □ Exit code 规范:PASS/WARN→0, FAIL→1
- □ 回退路径:每个 destructive 操作有对应回退步骤
- □ backward compat:新代码不改老接口
If no checklist matches, add:
- □ No domain-specific checklist available — proceed with extra caution
### 4. Failure Replanning Protocol
When a step fails:
**DO NOT** fix the immediate error and continue blindly.
**DO:**
1. Log: what failed, error message, which step
2. Analyze: is this a local fix or does it invalidate the plan?
3. If local → fix, verify, continue
4. If structural → **REPLAN** — output a revised PLAN section
5. If same step fails 3 times → **PAUSE** and ask user
6. **Auto-Capture Check** (after fix, before continuing):
→ See complete trigger rules in §6 Auto-Capture Trigger (T1-T7)
→ If ANY trigger matches → write structured Reflection to `reflections/YYYY-MM-DD-<task>.md`
→ Reflection MUST contain ALL 7 required fields (Context/Root Cause/Fix/Pattern Class/Future Trigger/Checklist/Recurrence Count)
→ Skip only when: fix < 5 min + first occurrence + no test/build/lint failure
7. **Promotion Check** (after Reflection written):
| Appearances | Action | Destination |
|------------|--------|------------|
| 1st | Reflection | reflections/ |
| 2nd | Pattern | patterns/design-patterns.md (new section) |
| 3rd | Best Practice | patterns/best-practices.md (numbered entry) |
| 4th | Checklist Item | AGENTS.md §3c Domain Checklists |
| 5th | Hard Rule | AGENTS.md §3c (bolded, marked ⚠️ HARD RULE) |
### 5. Verification Protocol (Complex Tasks ONLY)
After all subtasks complete:
```
## VERIFICATION
- Build: [PASS/FAIL]
- Tests: [PASS/FAIL / N suites / N tests]
- Lint: [PASS/FAIL]
- Regression risk: [NONE/LOW/MEDIUM/HIGH]
- Manual changes needed: [NONE / <description>]
```
**MANDATORY GATE: Pre-flight Compliance Check**
Before closing any complex task, verify ALL of:
- [ ] PLAN contains `### Injected Risks (from Learning Context)` section
- [ ] At least 2 knowledge sources were searched (ctx_search / memory_search / playbooks)
- [ ] Matching domain checklist from §3c is included in PLAN
- [ ] If failure occurred: structured Reflection was written to `reflections/YYYY-MM-DD-<task>.md`
- [ ] Reflection contains ALL 7 required fields (Context/Root Cause/Fix/Pattern Class/Future Trigger/Checklist/Recurrence)
If ANY gate fails: **task is NOT complete**. Go back and fill the gap.
### 6. Governance Compliance 🔒
Compliance is mandatory for all complex task execution.
- **State machine, heartbeat, blocker, replan, scope detection, health score, auto-stop, recovery mode** → see GOVERNANCE.md
- **Multi-project portfolio management** → see PORTFOLIO.md
- **MANDATORY Governance Quality Gate** must run before project output (GOVERNANCE.md §9)
### 7. Auto-Capture Trigger — COMPLETE Rule Set (after ANY failure)
**ALWAYS check these conditions after fixing a failure. Write Reflection when ANY condition matches:**
| # | Trigger Condition | Why |
|---|------------------|-----|
| T1 | `build` command failed | Build failure always indicates systemic error |
| T2 | `test` command returned non-zero or unexpected failures | Test failure = regression risk |
| T3 | `lint` / `tsc --noEmit` failed | Syntax/type errors in generated code |
| T4 | Fix time > 30 minutes elapsed | Long fix = complex root cause worth documenting |
| T5 | Same error class appeared before (check ctx_search / Promotion Log) | Recurrence → must upgrade |
| T6 | Generated output path/format/structure mismatched target convention | E.g. `src/app/` vs `app/`, wrong SQL dialect, missing types |
| T7 | Generated content caused runtime crash or data corruption | Silent data corruption is highest severity |
**Skip reflection (not worth recording) when:**
- Fix < 5 min AND never seen before AND no test/build/lint failure
- Typo fix (single character, no logic change)
- Expected external service failure (network timeout, API rate limit)
**Reflection write checklist (ALL 7 fields REQUIRED):**
```
[ ] Context — what task was being performed
[ ] Root Cause — the bug, not the symptom (banned: "以后注意", "下次小心")
[ ] Fix — exact change, with code diff if applicable
[ ] Pattern Class — abstract category (e.g. "SQLite FK", "JS Falsy Coercion", "Path Convention")
[ ] Future Trigger — when to inject this lesson (e.g. "any SQL schema change")
[ ] Checklist — ≥2 actionable checks for next time
[ ] Recurrence Count — 1 (update on each recurrence)
```
---
## Learning Loop 🔄
> Knowledge stored in reflections/patterns/playbooks MUST flow back into Planning.
> This section closes the loop.
### Loop Architecture
```
Failure/Success
Reflection (structured, with Pattern Class)
Promotion Check (1→2→3→4→5 appearances)
Pattern → Best Practice → Checklist → Hard Rule
Pre-flight Injector (§3b) + Domain Checklists (§3c)
Next Plan includes past lessons
Execution
Verification → triggers new Reflection if needed
(loop closes)
```
### Promotion Rules
| Count | Promotion To | Location |
|-------|-------------|----------|
| 1st | Reflection | `reflections/YYYY-MM-DD-<task>.md` |
| 2nd | Design Pattern | `patterns/design-patterns.md` (new Anti-Pattern section) |
| 3rd | Best Practice | `patterns/best-practices.md` (numbered entry) |
| 4th | Domain Checklist | AGENTS.md §3c (update matching checklist, or create new) |
| 5th | Hard Rule | AGENTS.md §3c (bolded, marked ⚠️ HARD RULE) |
### Quality Gate for Reflections
A valid Reflection MUST include ALL of:
- [ ] Context (what task)
- [ ] Root Cause (the bug, not the symptom)
- [ ] Fix (exact change)
- [ ] Pattern Class (abstract category)
- [ ] Future Trigger (when to re-inject)
- [ ] Checklist (actionable items)
- [ ] Recurrence Count
**Rejected:** "以后注意", "下次小心", "当时没想清楚", "应该多测试"
**Accepted:** "SQLite FK: REPLACE=DELETE+INSERT, use ON CONFLICT DO UPDATE"
### Storage Locations
```
reflections/ ← First occurrence of a failure pattern
patterns/design-patterns ← Abstract reusable anti-patterns (≥2 occurrences)
patterns/best-practices ← Validated rules (≥3 occurrences)
AGENTS.md §3c ← Domain Checklists (≥4 occurrences)
AGENTS.md §3c ⚠️ ← Hard Rules (≥5 occurrences)
playbooks/ ← Successful multi-step workflows (not failure-driven)
vault.md §Self-Evolution ← History of promotions (timeline)
```
---
## Agent Package Context Budget ⚠️ HARD RULE
> Established 2026-06-05. Every Agent Package MUST declare its token budget before execution.
> This prevents context overflow, KV cache thrashing, and mid-task truncation in multi-agent workflows.
### Size → Token Budget Mapping
| Level | Reading | Modifying | New Code | Dependencies | Token Budget |
|-------|---------|-----------|----------|-------------|-------------|
| Small | ≤3 files | ≤2 files | ≤300 lines | ≤1 | ≤30K tokens |
| Medium | ≤8 files | ≤5 files | ≤800 lines | ≤3 | ≤80K tokens |
| Large | ≤15 files | ≤10 files | ≤1500 lines | ≤5 | ≤200K tokens |
| XL | ❌ FORBIDDEN | ❌ | ❌ | ❌ | ❌ |
### Input Size Pre-check (MANDATORY)
Before dispatching any Agent Package, pre-compute:
1. **File inventory** — list every file the agent will read
2. **Token estimate** — for code: `bytes / 3`; for Chinese text: `chars / 1.5`; round up 10% for safety
3. **Budget check**`sum(estimated_input_tokens) + prompt_overhead(2K) + output_buffer(20% of budget)` ≤ Token Budget
```
### Context Budget Declaration
**AP-N**: <name>
- Files to read: N (total ~X lines / ~Y estimated tokens)
- Prompt overhead: ~2K tokens
- Output buffer: ~Z tokens (20% of budget)
- Total estimated: ~W tokens
- Budget: V tokens
- Utilization: (W/V) × 100%
- ⚠️ OVER BUDGET: <yes/no> → if YES, split further
```
### Over-budget Resolution
If estimated utilization > 90%:
1. Split the package into sub-packages
2. Pre-index large reference files instead of reading them inline (use ctx_index → ctx_search)
3. Provide only relevant snippets, not entire files
4. Re-check budget after split
### Token Estimation Constants
| Content Type | Token Ratio | Notes |
|-------------|------------|-------|
| TypeScript/JS | 1 token ≈ 3.5 chars | conservative estimate |
| Python | 1 token ≈ 3.5 chars | |
| SQL | 1 token ≈ 3.0 chars | shorter tokens |
| Chinese text | 1 token ≈ 1.5 chars | CJK characters are token-heavy |
| English prose | 1 token ≈ 4.0 chars | |
| JSON/YAML | 1 token ≈ 3.0 chars | punctuation-heavy |