Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
2386601
feat(hawk): production hardening — linter, CI, errcheck, dead code re…
Patel230 May 14, 2026
a20357a
feat(hawk): re-baseline to v0.2.0 + OSS standards (CoC, PR/issue temp…
Patel230 May 14, 2026
227232b
feat(hawk): additional hardening — fuzz tests, errcheck, daemon tests
Patel230 May 14, 2026
9b914c7
fix(hawk): restore chat_commands.go and fix remaining close errcheck
Patel230 May 14, 2026
365633a
feat(hawk): add mock LLM server, background agent tests, version tests
Patel230 May 14, 2026
0e36d4b
feat(hawk): reduce errcheck to 65 — fix cmd, engine, cmdhistory
Patel230 May 14, 2026
81f835d
feat(hawk): reduce errcheck to 35 — fix mcp, memory, onboarding, rema…
Patel230 May 14, 2026
3d430be
feat(hawk): reduce errcheck to 16 — near-zero unchecked errors
Patel230 May 14, 2026
8c280ce
feat(hawk): add engine tests — FileTracker, AdaptivePrompt
Patel230 May 14, 2026
10e0179
feat(hawk): golden test, diagnostics tests, coverage improvements
Patel230 May 14, 2026
e350deb
feat(hawk): tool metadata tests, registry tests, coverage push
Patel230 May 14, 2026
a7ba472
docs(hawk): add architecture documentation
Patel230 May 14, 2026
c3534cb
feat(hawk): concurrency stress tests for session package
Patel230 May 14, 2026
d56c4b5
feat(hawk): comprehensive onboarding + memory tests
Patel230 May 14, 2026
5c46025
feat(hawk): PR analysis tests, coverage 73.6% → 77.6%
Patel230 May 14, 2026
0ed09da
feat(hawk): API tests, final coverage improvements
Patel230 May 14, 2026
f711649
feat(hawk): fix flaky tests, add cost/timeout tests
Patel230 May 15, 2026
b4f7c18
chore: adopt eco-wide .editorconfig, CONTRIBUTING.md, Makefile templates
Patel230 May 15, 2026
354b5af
feat(hawk): introduce ChatClient interface for testable engine
Patel230 May 15, 2026
0aea1f6
feat(hawk): engine stream tests with mock client — coverage 73.8%
Patel230 May 15, 2026
25a39d2
chore: gitignore engine test state files
Patel230 May 15, 2026
31ef1a8
feat(hawk): cmd slash command tests, coverage 73.9%
Patel230 May 15, 2026
12c9679
feat(hawk): slash command handler tests, coverage 74.1%
Patel230 May 15, 2026
a89ad6a
feat(hawk): expand slash command test coverage
Patel230 May 15, 2026
628fece
feat(hawk): export mock client for cross-package testing
Patel230 May 15, 2026
028e4ef
feat(hawk): wire mock client into cmd tests, coverage 74.2%
Patel230 May 15, 2026
310bd05
chore: gitignore test state directories
Patel230 May 15, 2026
541725c
feat(hawk): add splitStatements test, adopt eco-wide CI/Makefile temp…
Patel230 May 15, 2026
7ece3a5
feat(hawk): add TaskStore tests, coverage plateau at 74.2%
Patel230 May 15, 2026
3e7d3d2
feat(hawk): fix splitStatements for triggers, add full SQLiteStore tests
Patel230 May 15, 2026
ab7b9d0
feat(hawk): cron scheduler tests, coverage 74.4%
Patel230 May 15, 2026
c3dc10b
feat(hawk): cron scheduler + splitStatements fix, coverage 74.4%
Patel230 May 15, 2026
d8aa33e
feat(hawk): extra tool tests, fix go.work for broken inspect dep
Patel230 May 15, 2026
2b526dc
feat(hawk): task/cron Execute tests, tool extra tests
Patel230 May 15, 2026
b3e7912
feat(hawk): cost tracker tests + splitStatements BEGIN/END fix — 74.6%
Patel230 May 15, 2026
b5f4458
feat(hawk): autosave/lock tests, coverage 74.6%
Patel230 May 15, 2026
2356571
feat(hawk): steering, fewshot, prompt tuner tests — coverage 74.8%
Patel230 May 15, 2026
6c38e35
feat(hawk): memory auto_capture tests, isTestCommand
Patel230 May 15, 2026
888b366
feat(hawk): callgraph tests + coverage 74.9%
Patel230 May 15, 2026
5db5281
feat(hawk): transfer learning tests — 74.9%
Patel230 May 15, 2026
194903d
feat(hawk): full engine loop integration tests
Patel230 May 15, 2026
8252300
feat(hawk): core memory + plan mode tests
Patel230 May 15, 2026
9767919
feat(hawk): config settings + memory confidence/sort tests
Patel230 May 15, 2026
17fc17c
feat(hawk): more cmd/config/memory tests — 74.9%
Patel230 May 15, 2026
07416d2
feat(hawk): session autosave tests — coverage breaks 75%
Patel230 May 15, 2026
e89d4e6
feat(hawk): export/redact + evolving memory tests — 75.0%
Patel230 May 15, 2026
0153540
feat(hawk): persist/integrity/stats/checksum tests — 75.1%
Patel230 May 15, 2026
906a90f
feat(hawk): task/cron metadata + delete tests — 75.1%
Patel230 May 15, 2026
747eccd
feat(hawk): tool metadata + review pipeline tests — 75.2%
Patel230 May 15, 2026
d73ab6a
feat(hawk): fingerprint dep counting tests, session persist/integrity
Patel230 May 15, 2026
d8febb3
feat(hawk): expand cmd command coverage with more handlers
Patel230 May 15, 2026
f265fde
feat(hawk): yaad bridge integration tests, memory 42%→47% — 75.3%
Patel230 May 15, 2026
035ff3a
feat(hawk): expand cmd handler tests to 30+ commands — 75.4%
Patel230 May 15, 2026
78b7307
feat(hawk): test 60+ slash commands — 75.7%
Patel230 May 15, 2026
89a1124
feat(hawk): streaming command tests (doctor, commit, review, etc.) — …
Patel230 May 15, 2026
c9fa822
feat(hawk): plugin manifest v2 tests — 75.7%
Patel230 May 15, 2026
6a5a721
feat(hawk): adopt task, cron, security, and session patterns from bit…
Patel230 May 15, 2026
abc2dfc
feat(hawk): adopt herm patterns — outline/git tools, background agent…
Patel230 May 15, 2026
d0fb1c2
feat: implement 80+ features from 10 OSS repos + research papers
Patel230 May 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
67 changes: 67 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# EditorConfig — https://editorconfig.org
# Canonical eco-wide template (.shared-templates/editorconfig.tmpl).

root = true

# Default for everything.
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4

# Go uses tabs by convention.
[*.go]
indent_style = tab
indent_size = 4

# Python — PEP 8.
[*.py]
indent_size = 4

# TypeScript / JavaScript — 2 spaces, ecosystem default.
[*.{ts,tsx,js,jsx,mjs,cjs}]
indent_size = 2

# Web assets.
[*.{html,css,scss}]
indent_size = 2

# YAML — 2 spaces (ecosystem standard, GitHub Actions, k8s, etc.).
[*.{yml,yaml}]
indent_size = 2

# JSON / JSONC.
[*.{json,jsonc}]
indent_size = 2

# TOML.
[*.toml]
indent_size = 2

# Markdown — 2 spaces, preserve trailing whitespace (used for line breaks).
[*.md]
trim_trailing_whitespace = false
indent_size = 2

# Shell scripts.
[*.{sh,bash,zsh,fish}]
indent_size = 4

# Makefiles must use tabs.
[{Makefile,*.mk}]
indent_style = tab

# Dockerfiles.
[Dockerfile*]
indent_size = 4

# GitHub Actions workflows — 2 spaces.
[.github/**/*.{yml,yaml}]
indent_size = 2

# Config files.
[*.{cfg,ini,conf}]
indent_size = 4
86 changes: 86 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Canonical eco-wide .gitattributes template (.shared-templates/gitattributes.tmpl).
# Auto-detect text files and normalise line endings to LF.

* text=auto eol=lf

# --- Source code -----------------------------------------------------------
*.go text eol=lf diff=golang
*.py text eol=lf diff=python
*.ts text eol=lf
*.tsx text eol=lf
*.js text eol=lf
*.jsx text eol=lf
*.mjs text eol=lf
*.cjs text eol=lf
*.rs text eol=lf diff=rust

# --- Shell + config --------------------------------------------------------
*.sh text eol=lf
*.bash text eol=lf
*.toml text eol=lf
*.yaml text eol=lf
*.yml text eol=lf
*.json text eol=lf linguist-language=JSON
*.jsonc text eol=lf linguist-language=JSON
*.cff text eol=lf

# --- Documentation ---------------------------------------------------------
*.md text eol=lf diff=markdown
*.txt text eol=lf

# --- Build / packaging ----------------------------------------------------
Makefile text eol=lf
*.mk text eol=lf
Dockerfile* text eol=lf
docker-compose*.yml text eol=lf
.github/**/*.yml text eol=lf
.github/**/*.yaml text eol=lf

# --- Generated artefacts (mark as such for diffs and language stats) ------
go.mod text eol=lf linguist-generated
go.sum text eol=lf linguist-generated
*.pb.go linguist-generated
*_generated.go linguist-generated
package-lock.json linguist-generated
pnpm-lock.yaml linguist-generated
yarn.lock linguist-generated

# --- Vendored / external sources ------------------------------------------
vendor/** linguist-vendored
node_modules/** linguist-vendored
testdata/** linguist-vendored
benchmarks/data/** linguist-vendored

# --- Binary files (do not text-normalise) ---------------------------------
*.exe binary
*.dll binary
*.so binary
*.dylib binary
*.a binary
*.o binary
*.db binary
*.sqlite binary
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.svg text eol=lf
*.pdf binary
*.zip binary
*.tar.gz binary
*.tgz binary
*.whl binary

# --- Source archive hygiene (excluded from `git archive`) -----------------
.github export-ignore
.shared-templates export-ignore
.gitattributes export-ignore
.gitignore export-ignore
.editorconfig export-ignore
.golangci.yml export-ignore
.goreleaser.yml export-ignore
.goreleaser.yaml export-ignore
testdata/ export-ignore
benchmarks/ export-ignore
e2e/ export-ignore
88 changes: 88 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
name: Bug report
description: Something is broken or behaving unexpectedly.
title: "bug: <one-line summary>"
labels: ["bug", "triage"]

body:
- type: markdown
attributes:
value: |
Thanks for taking the time to file a bug report. Please fill in as much
of the form as you can — the more we know, the faster we can fix it.

Before submitting:
- Search [existing issues](https://github.com/GrayCodeAI/hawk/issues) to avoid duplicates.
- If this is a security issue, please **do not** file a public issue. See `SECURITY.md`.

- type: textarea
id: what-happened
attributes:
label: What happened?
description: A clear, concise description of the bug.
placeholder: When I run `hawk ...`, I expected X but got Y.
validations:
required: true

- type: textarea
id: reproduce
attributes:
label: Steps to reproduce
description: Minimal steps that reliably reproduce the problem.
placeholder: |
1. Run `hawk ...`
2. Type `...`
3. See error `...`
validations:
required: true

- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen instead?
validations:
required: true

- type: input
id: hawk-version
attributes:
label: hawk version
description: Output of `hawk version` (or `hawk --version`).
placeholder: "0.2.0"
validations:
required: true

- type: input
id: os
attributes:
label: Operating system
description: e.g. macOS 14.5 (arm64), Ubuntu 24.04 (amd64), Windows 11 (amd64).
placeholder: "macOS 14.5 (arm64)"
validations:
required: true

- type: input
id: go-version
attributes:
label: Go version (if building from source)
description: Output of `go version`. Skip if you installed a pre-built binary.
placeholder: "go version go1.26.1 darwin/arm64"

- type: textarea
id: logs
attributes:
label: Logs / output
description: |
Paste any relevant output. If running interactively, re-run with `--verbose`
and include the output. **Redact any secrets, tokens, or private data first.**
render: shell

- type: checkboxes
id: confirm
attributes:
label: Confirmation
options:
- label: I searched existing issues and did not find a duplicate.
required: true
- label: I redacted any secrets, API keys, or private data from logs.
required: true
8 changes: 8 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: Security vulnerability
url: https://github.com/GrayCodeAI/hawk/security/advisories/new
about: Please report security issues privately via a GitHub Security Advisory. See SECURITY.md.
- name: Question / discussion
url: https://github.com/GrayCodeAI/hawk/discussions
about: Have a question or want to discuss an idea? Open a discussion instead of an issue.
62 changes: 62 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Feature request
description: Suggest an improvement or new capability for hawk.
title: "feat: <one-line summary>"
labels: ["enhancement", "triage"]

body:
- type: markdown
attributes:
value: |
Thanks for proposing a feature. hawk is built for **solo developers**, so
we evaluate every request against the question: _"would a single
developer working alone benefit from this?"_

Before submitting:
- Search [existing issues](https://github.com/GrayCodeAI/hawk/issues) to avoid duplicates.
- For large changes, consider opening a discussion first.

- type: textarea
id: problem
attributes:
label: What problem are you trying to solve?
description: Describe the user problem first. Solutions can come later.
placeholder: When I'm doing X, hawk makes me do Y, which is painful because Z.
validations:
required: true

- type: textarea
id: proposal
attributes:
label: Proposed solution
description: How would you like hawk to behave? CLI flags, output, config, etc.
validations:
required: true

- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: What did you try? What did other tools do? Why isn't that enough?

- type: dropdown
id: scope
attributes:
label: Scope
description: Roughly how big is this change?
options:
- "Small (a flag or output tweak)"
- "Medium (a new subcommand or behavior)"
- "Large (architectural / cross-package)"
validations:
required: true

- type: checkboxes
id: principles
attributes:
label: Solo-developer fit
description: hawk avoids enterprise scope. Confirm this feature respects that.
options:
- label: Works with zero configuration (sensible defaults).
- label: Works offline / does not require a cloud account.
- label: Stores data locally by default.
- label: Has an escape hatch (override via flag, env, or config).
49 changes: 49 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
<!--
Thanks for your contribution! Please fill out this template so reviewers can
understand the change quickly. Anything that does not apply can be left in
place; do not delete unanswered sections — write "n/a".
-->

## Summary

<!--
One paragraph describing what this PR does and why. Link the related
issue(s) with `Fixes #N` or `Refs #N` if applicable.
-->

## Changes

<!--
Bullet list of what changed, grouped by area (engine, tools, CLI, CI, etc.).
Reviewers should be able to skim this and know what to look at first.
-->

-

## Testing

<!--
Describe how you tested. Paste output of `make test` and `make lint`. If you
added new tests, list them. If you could not run something locally (e.g.
Linux-only sandbox tests on macOS), call that out.
-->

```text
$ make test
...
$ make lint
...
```

## Checklist

- [ ] My commits follow [Conventional Commits](https://www.conventionalcommits.org/)
(`feat(scope): …`, `fix(scope): …`, `docs(scope): …`, etc.)
- [ ] `make build` passes
- [ ] `make lint` passes (no new lint findings, no `nolint:…` without justification)
- [ ] `make test` passes locally with `-race` enabled
- [ ] New or changed code has tests (table-driven where appropriate)
- [ ] Public APIs have godoc comments and runnable examples where helpful
- [ ] `CHANGELOG.md` updated under `## [Unreleased]` if user-visible
- [ ] No secrets, tokens, or PII added to the repo
- [ ] No `Co-authored-by:` trailers (this is solo-developer work)
30 changes: 30 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
version: 2
updates:
- package-ecosystem: gomod
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 5
labels:
- dependencies
commit-message:
prefix: "deps"

- package-ecosystem: github-actions
directory: /
schedule:
interval: weekly
open-pull-requests-limit: 3
labels:
- ci
commit-message:
prefix: "ci"

- package-ecosystem: docker
directory: /
schedule:
interval: monthly
labels:
- docker
commit-message:
prefix: "docker"
Loading
Loading