Start working on make
This commit is contained in:
parent
53c464bbdd
commit
a7c7ec5aad
@ -70,4 +70,46 @@ grokkit agent "Benchmark changes before commit"
|
||||
| Verify | **make** ← new |
|
||||
| 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>"`
|
||||
Loading…
Reference in New Issue
Block a user