Start working on make

This commit is contained in:
Greg Gauthier 2026-03-31 23:05:11 +01:00
parent 53c464bbdd
commit a7c7ec5aad

View File

@ -70,4 +70,46 @@ grokkit agent "Benchmark changes before commit"
| Verify | **make** ← new | | Verify | **make** ← new |
| Repo/log | tea/cnotes | | Repo/log | tea/cnotes |
Instant feedback elevates agent reliability. Instant feedback elevates agent reliability.## Work Plan
1. **Setup structure**: Create `internal/tools/make.go` and `internal/tools/make_test.go`. Add config flags in `internal/config/config.go` for `tools.make.enabled` (bool, default false) and `tools.make.timeout` (int, default 300).
2. **Implement whitelist**: Define `validTargets = []string{"test", "lint", "build", "test-cover", "install"}`. Add `isValidTarget(target string) bool` func.
3. **Implement `RunTarget`**:
- Check `tools.make.enabled`, Makefile exists (`os.Stat("Makefile")`), validate target.
- Use `exec.CommandContext` with timeout: `cd $PROJECT_DIR && make TARGET`.
- Capture stdout/stderr, return `{output: string, success: bool, exitCode: int}` as JSON.
- Error wrapping: `MakeError{target, output, exitCode}`.
4. **Add `DryRun` tool**: Simulate `make -n TARGET` (no-execute mode), same safety checks.
5. **Implement parsing helpers**:
- `ParseTestResult(output string) (pass bool, failures int)`: grep "PASS", "FAIL".
- `ParseCoverage(output string) (float64, error)`: regex for "%" coverage.
- `ParseErrors(output string) []string`: extract compiler/lint errors.
6. **Register tools**: In `internal/agent/tools.go`, add `makeRun` and `makeDryRun` tool schemas calling `RunTarget`/`DryRun`.
7. **Agent loop integration**: Update `internal/agent/run.go` post-edit: auto-call `make test` if Makefile exists, parse results, feed to next prompt ("Tests failed: ...").
8. **Safety hardening**:
- Set `exec.Dir = projectDir`, `Env` without `PATH` mods.
- Timeout enforcement, kill on ctx cancel.
- Log full output to `cnotes`.
9. **Tests** (table-driven in `make_test.go`):
- Mock `exec.Command` returns (success/fail outputs).
- Invalid target → error.
- Timeout simulation.
- Parsing: PASS/FAIL, coverage "92.3%", lint errors.
- Run `go test ./internal/tools -v`.
10. **Docs/Config**: Update README with tool examples. Add `[tools.make]` sample config.
11. **Commit**: `git commit -m "feat: grokkit agent make integration
- Add make tool wrappers (run_target, dry_run)
- Safety: whitelist, timeout, parsing for tests/cover
- Agent auto-verification loop
Closes #<todo-id>"`