154 lines
7.7 KiB
Markdown
154 lines
7.7 KiB
Markdown
# Plugin Architecture & Execution Order
|
|
|
|
## Lifecycle
|
|
|
|
1. **SessionStart hook** — initializes Codex session state
|
|
2. **User triggers** `/codeflash-optimize start` (skill)
|
|
3. **Language router** (`codeflash`) — detects project language, delegates to language-specific router
|
|
4. **Language-specific router** (e.g., `codeflash-python`) — detects domain, asks user questions, launches setup
|
|
5. **Setup agent** (e.g., `codeflash-setup`) — detects env, installs deps/profilers, writes `.codeflash/setup.md`
|
|
6. **Router validates** setup, runs test suite, researches deps via context7
|
|
7. **Router creates team** and dispatches optimizer agent
|
|
|
|
## Optimization Loop
|
|
|
|
8. **Optimizer** (`codeflash-deep` or domain-specific: `-cpu`, `-memory`, `-async`, `-structure`) — profiles all dimensions, ranks targets
|
|
9. **Researcher** (`codeflash-researcher`) — launched alongside to analyze targets in parallel, sends findings back to optimizer
|
|
10. **Experiment cycle**: profile → reason → implement → test → benchmark → keep/discard → commit → re-profile → repeat
|
|
11. **Plateau detection** (3+ consecutive discards) → optimizer sends `[complete]`
|
|
|
|
## Review Gate
|
|
|
|
12. **Review agent** (`codeflash-review`) — 6-pass deep review (comprehension → correctness → safety → benchmark verification → quality → disclosure)
|
|
13. Writes `.codeflash/review-report.md` with verdict (APPROVE/REQUEST CHANGES/BLOCK)
|
|
|
|
## Cleanup
|
|
|
|
14. Router shuts down teammates, deletes team
|
|
15. Preserves `learnings.md`, `results.tsv`, `changelog.md`; deletes temp files
|
|
16. **SessionEnd hook** — finalizes Codex session
|
|
|
|
## Hooks
|
|
|
|
Defined in `plugin/hooks/hooks.json`, fire at session boundaries:
|
|
|
|
| Hook | When | What |
|
|
|------|------|------|
|
|
| **SessionStart** | New Claude session begins | Initializes Codex session state, records metadata |
|
|
| **SessionEnd** | Session ends | Cleans up Codex jobs, saves final state |
|
|
| **Stop** | User clicks Stop (900s timeout) | Optionally runs Codex adversarial review gate before allowing termination |
|
|
|
|
## Agents
|
|
|
|
### Language-agnostic (`plugin/agents/`)
|
|
|
|
| Agent | Role | Triggered by |
|
|
|-------|------|-------------|
|
|
| `codeflash` | Language router — detects language, delegates to language-specific router | `/codeflash-optimize` skill, user request |
|
|
| `codeflash-researcher` | Read-only research teammate | Domain agents, after baseline profiling |
|
|
| `codeflash-review` | Independent 6-pass deep review | `/codex-review`, post-optimization gate |
|
|
|
|
### Python-specific (`plugin/languages/python/agents/`)
|
|
|
|
| Agent | Role | Triggered by |
|
|
|-------|------|-------------|
|
|
| `codeflash-python` | Python domain router/team lead — orchestrates Python sessions | Language router after detecting Python |
|
|
| `codeflash-setup` | Environment detection & preparation | Python router, before first optimization |
|
|
| `codeflash-scan` | Quick cross-domain diagnosis | `/codeflash-optimize scan` or router recon |
|
|
| `codeflash-deep` | Primary optimizer (all dimensions) | Python router (default unless single-domain requested) |
|
|
| `codeflash-cpu` | CPU/runtime specialist | Python router or deep agent dispatch |
|
|
| `codeflash-memory` | Memory specialist | Python router or deep agent dispatch |
|
|
| `codeflash-async` | Async/concurrency specialist | Python router or deep agent dispatch |
|
|
| `codeflash-structure` | Import-time/module structure specialist | Python router or deep agent dispatch |
|
|
| `codeflash-ci` | CI mode agent for GitHub webhooks | CI service |
|
|
| `codeflash-pr-prep` | PR preparation agent | Post-session |
|
|
|
|
## Commands (`plugin/commands/`)
|
|
|
|
User-invocable anytime:
|
|
|
|
| Command | Purpose |
|
|
|---------|---------|
|
|
| `/codex-review` | Manual adversarial review via Codex companion |
|
|
| `/codex-setup` | Check/install Codex CLI, configure review gate |
|
|
| `/codex-status` | Check active and recent Codex jobs |
|
|
|
|
## Skills (`plugin/languages/python/skills/`)
|
|
|
|
| Skill | Purpose |
|
|
|-------|---------|
|
|
| `codeflash-optimize` | Entry point: `start\|resume\|status\|scan\|review` |
|
|
| `memray-profiling` | Advanced memory profiling utilities (used by codeflash-memory) |
|
|
|
|
## References
|
|
|
|
### Language-agnostic (`plugin/references/shared/`)
|
|
|
|
Methodology, templates, and frameworks that apply to any language:
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `agent-base-protocol.md` | Shared operational rules (experiment discipline, commit rules, stuck recovery) |
|
|
| `experiment-loop-base.md` | Shared experiment loop framework (keep/discard tree, guard, plateau) |
|
|
| `pre-submit-review.md` | Shared pre-submit checklist (resource ownership, concurrency, correctness) |
|
|
| `e2e-benchmarks.md` | Two-phase measurement concept (micro-benchmark → E2E) |
|
|
| `micro-benchmark.md` | A/B pre-screen pattern |
|
|
| `pr-body-templates.md` | Generic PR body structure and writing guidelines |
|
|
| `pr-preparation.md` | PR workflow (inventory, folding, conventions) |
|
|
| `adversarial-review.md` | Codex adversarial review methodology |
|
|
| `changelog-template.md` | Changelog generation structure |
|
|
| `handoff-template.md` | HANDOFF.md template |
|
|
| `learnings-template.md` | Cross-session learnings template |
|
|
|
|
### Python-specific (`plugin/languages/python/references/`)
|
|
|
|
Python implementations of shared protocols, plus domain-specific deep-dive docs:
|
|
|
|
| File/Dir | Purpose |
|
|
|----------|---------|
|
|
| `agent-base-protocol.md` | Python profilers (cProfile, tracemalloc, memray), test runners, package managers |
|
|
| `e2e-benchmarks.md` | `codeflash compare` usage, pytest-benchmark, fallback tools |
|
|
| `micro-benchmark.md` | Python A/B template (timeit, memray, asyncio), domain thresholds |
|
|
| `pre-submit-review.md` | Python checks (asyncio, .pyc, os.environ, monkey-patching) |
|
|
| `pr-body-templates.md` | Python PR variants (codeflash compare output, memray memory table) |
|
|
| `unified-profiling-script.py` | CPU+memory+GC profiling script for deep agent |
|
|
| `library-replacement.md` | Library boundary breaking guide |
|
|
| `async/` | Async domain: asyncio patterns, blocking detection, concurrency |
|
|
| `data-structures/` | CPU domain: containers, algorithms, bytecode, stdlib |
|
|
| `memory/` | Memory domain: tracemalloc, memray, leak detection, framework leaks |
|
|
| `structure/` | Structure domain: import time, module decomposition, circular deps |
|
|
|
|
## State Files
|
|
|
|
Created during execution in `.codeflash/`:
|
|
|
|
| File | Created by | Purpose |
|
|
|------|-----------|---------|
|
|
| `setup.md` | codeflash-setup | Environment summary |
|
|
| `scan-report.md` | codeflash-scan | Ranked targets + domain recommendations |
|
|
| `results.tsv` | optimizer agents | Experiment log (baseline, speedup, keep/discard) |
|
|
| `HANDOFF.md` | optimizer agents | Session state for resume |
|
|
| `conventions.md` | router | Binding constraints from maintainer feedback |
|
|
| `learnings.md` | router | Cross-session discoveries |
|
|
| `review-report.md` | codeflash-review | 6-pass review findings + verdict |
|
|
| `changelog.md` | router | PR-ready optimization summary |
|
|
|
|
## Ordering Guarantees
|
|
|
|
**Sequential:**
|
|
1. SessionStart hook fires before any agent acts
|
|
2. Language detection before domain routing
|
|
3. Setup agent completes before domain agents start
|
|
4. Baseline profiling before any optimization experiment
|
|
5. Re-profiling after every KEEP to update rankings
|
|
6. Review gate runs after optimizer `[complete]`, before cleanup
|
|
7. SessionEnd hook fires as session terminates
|
|
|
|
**Parallel allowed:**
|
|
- Researcher analyzes targets #2-5 while optimizer works on target #1
|
|
- Multiple domain agents can run in separate worktrees
|
|
- Deep agent can dispatch domain agents while continuing its own profiling
|
|
|
|
## Assembly
|
|
|
|
`make build-plugin` merges `plugin/` (base, excluding `languages/`) + `plugin/languages/python/` (overlay) into `dist/`. Set `LANG=javascript` to build for JS instead. Agent files use `${CLAUDE_PLUGIN_ROOT}` for references — paths differ between source and assembled output.
|