From fea98cde1e27c317041ffb1f7e1d9323b97536f5 Mon Sep 17 00:00:00 2001 From: Lakshman Patel Date: Mon, 31 Aug 2026 19:03:23 +0530 Subject: [PATCH 1/3] chore: bridge ecosystem branch onto main history --- .github/workflows/ci.yml | 39 ++++++++------ AGENTS.md | 10 +++- CHANGELOG.md | 4 +- README.md | 10 ++-- client/adapters/anthropic.go | 2 +- client/adapters/anthropic_base.go | 2 +- client/adapters/azure.go | 2 +- client/adapters/bedrock.go | 2 +- client/adapters/concentrate_responses.go | 2 +- client/adapters/gemini.go | 2 +- client/adapters/openai.go | 2 +- client/adapters/protocol_router.go | 2 +- client/adapters/protocol_router_test.go | 2 +- client/adapters/vertex.go | 2 +- client/aliases.go | 4 +- client/core/core.go | 6 +-- client/embeddings/cache_test.go | 2 +- client/extract.go | 2 +- client/token_utils.go | 2 +- config/discovery_status_test.go | 1 + docs/architecture/HOST-ENGINE-BOUNDARY.md | 13 ++--- docs/design/EYRIE-ENTERPRISE.md | 2 +- docs/guides/DYNAMIC-MODEL-DISCOVERY.md | 9 ++-- engine/contract_assert.go | 2 +- engine/control_plane.go | 2 +- engine/convert_test.go | 2 +- engine/doc.go | 2 +- engine/engine.go | 2 +- engine/engine_test.go | 2 +- engine/model_policy.go | 2 +- engine/model_policy_custom_test.go | 2 +- engine/types.go | 2 +- go.mod | 21 ++++---- go.sum | 64 +++++++++++------------ internal/observability/genai_semconv.go | 2 +- operationsgraph/operations_graph.go | 2 +- operationsgraph/projection.go | 4 +- operationsgraph/projection_test.go | 4 +- plans/client-package-decomposition.md | 5 +- scripts/check-ecosystem-boundaries.sh | 6 +-- scripts/check-no-replace-directives.sh | 2 +- 41 files changed, 136 insertions(+), 116 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ee9143..144d7da 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -23,6 +23,13 @@ env: GOPRIVATE: "github.com/GrayCodeAI/*" GONOSUMDB: "github.com/GrayCodeAI/*" GONOSUMCHECK: "1" + # CI must resolve the module versions pinned in go.mod/go.sum, not whatever + # sibling working trees a go.work workspace happens to point at. Go's own + # reference warns a committed go.work "may cause a continuous integration (CI) + # system to select and thus test the wrong versions of a module's + # dependencies" and that "CI systems should generally not be allowed to use + # the go.work file". + GOWORK: "off" jobs: # ------------------------------------------------------------------------- @@ -74,8 +81,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: go mod tidy run: | go mod tidy @@ -108,8 +115,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: go vet run: go vet ./... @@ -128,8 +135,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: Boundary guard run: | bash ./scripts/check-ecosystem-boundaries.sh @@ -154,8 +161,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: Boundary guard run: | bash ./scripts/check-ecosystem-boundaries.sh @@ -195,8 +202,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: govulncheck run: | go install golang.org/x/vuln/cmd/govulncheck@v1.1.4 @@ -220,8 +227,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: deadcode run: | go install golang.org/x/tools/cmd/deadcode@v0.30.0 @@ -283,8 +290,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: Run fuzz targets run: | go test -fuzz=FuzzSanitizeMessages -fuzztime=60s ./client @@ -315,8 +322,8 @@ jobs: cache: true - name: Clone ecosystem deps run: | - git clone --depth=1 https://github.com/GrayCodeAI/tok.git ../tok - git clone --depth=1 https://github.com/GrayCodeAI/hawk-core-contracts.git ../hawk-core-contracts + git clone --depth=1 https://github.com/GrayCodeAI/shrike.git ../shrike + git clone --depth=1 https://github.com/GrayCodeAI/eagle.git ../eagle - name: Build (library — cross-compile all packages) env: GOOS: ${{ matrix.goos }} diff --git a/AGENTS.md b/AGENTS.md index f28ce4f..736ba18 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -54,7 +54,10 @@ make ci # Full CI suite - `client.Provider` remains the lower-level compatibility boundary for other consumers; preserve its method set and the facade's type identity - Streaming tests need careful goroutine management -- `go.work` here should stay minimal; hawk's own `go.work` adds an `external/eyrie` replace so hawk can develop against a local eyrie checkout. Do not add extra local `replace` directives here without coordinating with hawk's workspace. +- `go.work` here should stay minimal; the parent `graycode-eco/go.work` + connects this independent `eyrie` checkout beside Hawk for local development. + Do not add extra local `replace` directives here without coordinating with + the parent workspace. ## Naming Conventions @@ -138,4 +141,7 @@ make ci # Full CI suite | Main test file | `client/client_test.go` (httptest servers, provider detection) | | Linter config | `.golangci.yml` (govet, ineffassign, misspell — minimal) | -This repo is a submodule of [hawk](https://github.com/GrayCodeAI/hawk) at `hawk/external/eyrie`. Work in the submodule (go.work picks it up), push, sync here, PR/merge, then pull main in the submodule. +This is an independent repository consumed by Hawk. In the local +`graycode-eco` parent workspace it is checked out beside `hawk` as `../eyrie` +and connected through the parent `go.work`; publish changes here, then update +Hawk's module pin through a separate PR. diff --git a/CHANGELOG.md b/CHANGELOG.md index 336b8e5..4be2f1e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,8 +90,8 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) · Versioning: 5. Whitespace collapse Reports aggregate `BytesSaved` and `PercentOff` across all tools in the slice. Safe to call concurrently. - Aligns eyrie with the rest of the hawk-eco ecosystem (`hawk`, `tok`, - `yaad`, `sight`, `inspect`). + Aligns eyrie with the rest of the hawk-eco ecosystem (`hawk`, `shrike`, + `harrier`, `kestrel`, `merlin`). ### Added - Output guardrails framework (PII, secrets, injection, harmful content) diff --git a/README.md b/README.md index 4a84745..f915d87 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,11 @@ provider packages. eyrie is a Hawk support engine. Keep the dependency edge one-way: -- host-facing DTOs and the `Provider` port live in `hawk-core-contracts/llm`; `engine/` re-exports them as aliases (`*Engine` implements `llm.Provider`) +- host-facing DTOs and the `Provider` port live in `eagle/llm`; `engine/` re-exports them as aliases (`*Engine` implements `llm.Provider`) - internal provider/transport types stay eyrie-scoped (not shared contracts) - do not import `hawk/internal/*` - do not import removed legacy path `hawk/shared/types` -- do not import other engines (`yaad`, `tok`, `trace`, `sight`, `inspect`) — engines are peers, not dependencies +- do not import other engines (`harrier`, `shrike`, `swift`, `kestrel`, `merlin`) — engines are peers, not dependencies ## Quick Start @@ -308,9 +308,9 @@ eyrie is part of the hawk-eco: |---|---|---| | **hawk** | [GrayCodeAI/hawk](https://github.com/GrayCodeAI/hawk) | AI coding agent | | **eyrie** | This repo | LLM provider runtime | -| **tok** | [GrayCodeAI/tok](https://github.com/GrayCodeAI/tok) | Tokenizer & compression | -| **yaad** | [GrayCodeAI/yaad](https://github.com/GrayCodeAI/yaad) | Graph-based memory | -| **trace** | [GrayCodeAI/trace](https://github.com/GrayCodeAI/trace) | Session capture | +| **shrike** | [GrayCodeAI/shrike](https://github.com/GrayCodeAI/shrike) | Tokenizer & compression | +| **harrier** | [GrayCodeAI/harrier](https://github.com/GrayCodeAI/harrier) | Graph-based memory | +| **swift** | [GrayCodeAI/swift](https://github.com/GrayCodeAI/swift) | Session capture | ## Development diff --git a/client/adapters/anthropic.go b/client/adapters/anthropic.go index a8c4abc..8ed1f2c 100644 --- a/client/adapters/anthropic.go +++ b/client/adapters/anthropic.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // maxAnthropicRequestSize is the maximum request body size for the Messages API (32 MB). diff --git a/client/adapters/anthropic_base.go b/client/adapters/anthropic_base.go index 24e048c..1e28660 100644 --- a/client/adapters/anthropic_base.go +++ b/client/adapters/anthropic_base.go @@ -4,7 +4,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // AnthropicBaseFromOpenAIV1 strips a trailing /v1 from an OpenAI-compatible base URL. diff --git a/client/adapters/azure.go b/client/adapters/azure.go index 4f7cf34..31177a6 100644 --- a/client/adapters/azure.go +++ b/client/adapters/azure.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) const ( diff --git a/client/adapters/bedrock.go b/client/adapters/bedrock.go index b2a51f4..5ba9556 100644 --- a/client/adapters/bedrock.go +++ b/client/adapters/bedrock.go @@ -19,7 +19,7 @@ import ( "time" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) const ( diff --git a/client/adapters/concentrate_responses.go b/client/adapters/concentrate_responses.go index a806587..80c8d7c 100644 --- a/client/adapters/concentrate_responses.go +++ b/client/adapters/concentrate_responses.go @@ -13,7 +13,7 @@ import ( "time" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // ConcentrateResponsesClient uses the Concentrate Responses API (the production-ready diff --git a/client/adapters/gemini.go b/client/adapters/gemini.go index 6839680..7b11d99 100644 --- a/client/adapters/gemini.go +++ b/client/adapters/gemini.go @@ -12,7 +12,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // geminiSharedParserEnvVar is the opt-out flag for the new diff --git a/client/adapters/openai.go b/client/adapters/openai.go index d533450..aed7aad 100644 --- a/client/adapters/openai.go +++ b/client/adapters/openai.go @@ -11,7 +11,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) const ( diff --git a/client/adapters/protocol_router.go b/client/adapters/protocol_router.go index b570d60..29e9704 100644 --- a/client/adapters/protocol_router.go +++ b/client/adapters/protocol_router.go @@ -6,7 +6,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // ChatProtocol selects which existing eyrie client handles a gateway request. diff --git a/client/adapters/protocol_router_test.go b/client/adapters/protocol_router_test.go index 2b29248..4c029cf 100644 --- a/client/adapters/protocol_router_test.go +++ b/client/adapters/protocol_router_test.go @@ -7,7 +7,7 @@ import ( "testing" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) func TestNewStreamWithReasoningFallbackChatFirst(t *testing.T) { diff --git a/client/adapters/vertex.go b/client/adapters/vertex.go index 2c514e5..226ab7d 100644 --- a/client/adapters/vertex.go +++ b/client/adapters/vertex.go @@ -10,7 +10,7 @@ import ( "net/http" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // maxVertexRequestSize is the maximum request body size for Vertex AI (30 MB). diff --git a/client/aliases.go b/client/aliases.go index 3c52a7c..9691bb4 100644 --- a/client/aliases.go +++ b/client/aliases.go @@ -8,7 +8,7 @@ import ( "github.com/GrayCodeAI/eyrie/client/adapters" "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eyrie/client/embeddings" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // The provider contract and request/response data types live in @@ -234,7 +234,7 @@ var ( // NewStreamResult creates a StreamResult with a cancel function for resource // cleanup. The request ID is optional; pass "" when it is not yet available. // The canonical constructor lives in -// github.com/GrayCodeAI/hawk-core-contracts/llm; this is a thin facade +// github.com/GrayCodeAI/eagle/llm; this is a thin facade // wrapper that keeps the public client API stable. func NewStreamResult(events <-chan EyrieStreamEvent, cancel context.CancelFunc) *StreamResult { return llm.NewStreamResult(events, "", cancel) diff --git a/client/core/core.go b/client/core/core.go index 8503917..43f2f34 100644 --- a/client/core/core.go +++ b/client/core/core.go @@ -4,7 +4,7 @@ // // core is a leaf package — it must not import any other eyrie/client // subpackage. The conversation DTOs below are aliases to the canonical -// hawk-core-contracts/llm definitions; core re-exports them so subpackages +// eagle/llm definitions; core re-exports them so subpackages // share the contract without an import cycle through the facade. The public // names remain available as aliases in github.com/GrayCodeAI/eyrie/client, // which is the API consumers should keep importing. @@ -15,7 +15,7 @@ package core import ( "context" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // Provider is the core interface for LLM providers. @@ -76,7 +76,7 @@ type EyrieStreamEvent = llm.EyrieStreamEvent // // StreamResult is aliased to the canonical contract type; its Close() // method and canonical constructor (NewStreamResult) live in -// github.com/GrayCodeAI/hawk-core-contracts/llm. +// github.com/GrayCodeAI/eagle/llm. type StreamResult = llm.StreamResult // ResponseFormat specifies the desired output format for the model response. diff --git a/client/embeddings/cache_test.go b/client/embeddings/cache_test.go index e073273..c184d70 100644 --- a/client/embeddings/cache_test.go +++ b/client/embeddings/cache_test.go @@ -7,7 +7,7 @@ import ( "testing" "github.com/GrayCodeAI/eyrie/client/core" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // echoMock is a minimal core.Provider that echoes the last user message and diff --git a/client/extract.go b/client/extract.go index 1ec8d31..b6c2ec2 100644 --- a/client/extract.go +++ b/client/extract.go @@ -76,7 +76,7 @@ Rules: // ExtractRelationships extracts subject-predicate-object triples from text using // schema-validated structured output with retry. It is a typed convenience layer -// over ChatWithStructuredOutput, modeled on CocoIndex's ExtractByLlm; yaad and +// over ChatWithStructuredOutput, modeled on CocoIndex's ExtractByLlm; Harrier and // other knowledge-graph consumers can call it instead of hand-rolling extraction // prompts and JSON parsing. func (c *EyrieClient) ExtractRelationships(ctx context.Context, text string, opts ExtractOptions) ([]Relationship, error) { diff --git a/client/token_utils.go b/client/token_utils.go index 142c1c8..07d7313 100644 --- a/client/token_utils.go +++ b/client/token_utils.go @@ -75,7 +75,7 @@ func fallbackTokenCount(text string) int { } // compressForSummary keeps PromptOptimizer self-contained. It performs a small -// whitespace-normalizing reduction instead of depending on tok's full pipeline. +// whitespace-normalizing reduction instead of depending on shrike's full pipeline. func compressForSummary(text string) string { text = strings.TrimSpace(text) if text == "" { diff --git a/config/discovery_status_test.go b/config/discovery_status_test.go index 2791b05..7640798 100644 --- a/config/discovery_status_test.go +++ b/config/discovery_status_test.go @@ -25,6 +25,7 @@ func (emptyCredentialStore) Get(context.Context, string) (string, error) { retur func (emptyCredentialStore) Delete(context.Context, string) error { return nil } func TestHasAnyConfiguredDeployment_RejectsPlaceholder(t *testing.T) { + t.Setenv("HAWK_CONFIG_DIR", t.TempDir()) credentials.SetDefaultStore(emptyCredentialStore{}) t.Cleanup(func() { credentials.SetDefaultStore(nil) }) diff --git a/docs/architecture/HOST-ENGINE-BOUNDARY.md b/docs/architecture/HOST-ENGINE-BOUNDARY.md index e6e122a..7aa5ccd 100644 --- a/docs/architecture/HOST-ENGINE-BOUNDARY.md +++ b/docs/architecture/HOST-ENGINE-BOUNDARY.md @@ -169,7 +169,7 @@ Preflight has two explicit modes: These modes must not be conflated: local readiness is suitable for startup and diagnostics; live readiness is an explicit network operation. -## Release and submodule order +## Release and sibling-repository order The boundary is delivered Eyrie-first: @@ -177,14 +177,15 @@ The boundary is delivered Eyrie-first: 1. Change and verify standalone Eyrie 2. Commit Eyrie and publish a resolvable release/commit 3. Update Hawk's Eyrie module version when required -4. Advance Hawk's Eyrie submodule pin to that exact commit +4. Update Hawk's Eyrie module pin to that exact published commit 5. Verify Hawk integration, boundary checks, and clean-clone/module builds -6. Commit Hawk's code and gitlink update together +6. Commit the Hawk module-pin update in Hawk's repository ``` -Hawk must never point at an uncommitted Eyrie worktree. A submodule pin proves -source identity; a resolvable module version is also required for workflows -that build Hawk with `GOWORK=off`. +Hawk must never depend on an uncommitted Eyrie worktree. The parent workspace +uses a sibling checkout for source identity during local development; a +resolvable published module version is also required for workflows that build +Hawk with `GOWORK=off`. ## Compatibility policy diff --git a/docs/design/EYRIE-ENTERPRISE.md b/docs/design/EYRIE-ENTERPRISE.md index b2746a3..29d2a28 100644 --- a/docs/design/EYRIE-ENTERPRISE.md +++ b/docs/design/EYRIE-ENTERPRISE.md @@ -418,7 +418,7 @@ These repos are privacy-first; the enterprise layer must not regress that. 1. **Single-tenant per binary vs. multi-org per binary?** This doc assumes multi-org within one operator's deployment. Is true cross-customer multi-tenancy ever in scope, or does that stay - a hawk-cloud concern (`TOP20_COMPARISON.md:33-34`)? + a graycode-cloud concern (`TOP20_COMPARISON.md:33-34`)? 2. **SSO scope:** OIDC only for P0, or do enterprise buyers require SAML (which needs a heavier dep)? SAML likely pushes to P2. 3. **Where does `session_id` originate?** From the OpenAI `user` field (`openai_proxy.go:41`), a diff --git a/docs/guides/DYNAMIC-MODEL-DISCOVERY.md b/docs/guides/DYNAMIC-MODEL-DISCOVERY.md index ff3340d..239d736 100644 --- a/docs/guides/DYNAMIC-MODEL-DISCOVERY.md +++ b/docs/guides/DYNAMIC-MODEL-DISCOVERY.md @@ -259,14 +259,15 @@ standalone Eyrie change --> signed Eyrie commit --> publish a resolvable Eyrie module release/commit --> update Hawk module dependency when needed - --> pin Hawk's Eyrie submodule to the same commit + --> update Hawk's Eyrie module pin to the same published commit --> Hawk integration + boundary + clean-clone verification (two passes) --> commit Hawk code and gitlink together ``` -The submodule must point to a committed Eyrie object, never working-tree-only -code. The published module and submodule must expose the same Engine contract -so both workspace builds and `GOWORK=off` builds are reproducible. +The parent workspace must use a committed Eyrie checkout, never working-tree- +only code, and Hawk's module pin must resolve to that same published commit. +Both workspace builds and `GOWORK=off` builds must expose the same Engine +contract. ## Related documentation diff --git a/engine/contract_assert.go b/engine/contract_assert.go index 6d4e275..9341aac 100644 --- a/engine/contract_assert.go +++ b/engine/contract_assert.go @@ -1,6 +1,6 @@ package engine -import "github.com/GrayCodeAI/hawk-core-contracts/llm" +import "github.com/GrayCodeAI/eagle/llm" // Compile-time assertions: the host facade implements the shared port. // If a method is added to llm.Provider (or EventStreamer), this file fails diff --git a/engine/control_plane.go b/engine/control_plane.go index 9236c2b..5230d28 100644 --- a/engine/control_plane.go +++ b/engine/control_plane.go @@ -10,7 +10,7 @@ import ( "github.com/GrayCodeAI/eyrie/catalog/registry" "github.com/GrayCodeAI/eyrie/config" "github.com/GrayCodeAI/eyrie/credentials" - llm "github.com/GrayCodeAI/hawk-core-contracts/llm" + llm "github.com/GrayCodeAI/eagle/llm" ) // ResolveCredential validates credential input and returns safe provider diff --git a/engine/convert_test.go b/engine/convert_test.go index e3463ab..8a5a7ce 100644 --- a/engine/convert_test.go +++ b/engine/convert_test.go @@ -4,7 +4,7 @@ import ( "testing" "github.com/GrayCodeAI/eyrie/client" - llm "github.com/GrayCodeAI/hawk-core-contracts/llm" + llm "github.com/GrayCodeAI/eagle/llm" ) func TestToClientMessages_ReturnsMessagesUnchanged(t *testing.T) { diff --git a/engine/doc.go b/engine/doc.go index 3915022..04bf685 100644 --- a/engine/doc.go +++ b/engine/doc.go @@ -9,6 +9,6 @@ // Eyrie owns credential, catalog, selection, routing, and model transport. // // Host-facing DTOs and the Provider port live in -// github.com/GrayCodeAI/hawk-core-contracts/llm; this package re-exports them +// github.com/GrayCodeAI/eagle/llm; this package re-exports them // as type aliases and *Engine implements llm.Provider (see contract_assert.go). package engine diff --git a/engine/engine.go b/engine/engine.go index 123c2b8..571ff3b 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -17,7 +17,7 @@ import ( "github.com/GrayCodeAI/eyrie/config" "github.com/GrayCodeAI/eyrie/credentials" "github.com/GrayCodeAI/eyrie/setup" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // ContractVersion is the compatibility version of the host-facing API. diff --git a/engine/engine_test.go b/engine/engine_test.go index 9cd6692..b4b734b 100644 --- a/engine/engine_test.go +++ b/engine/engine_test.go @@ -10,7 +10,7 @@ import ( "github.com/GrayCodeAI/eyrie/client" "github.com/GrayCodeAI/eyrie/config" "github.com/GrayCodeAI/eyrie/credentials" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) func TestNewUsesInjectedCredentialStore(t *testing.T) { diff --git a/engine/model_policy.go b/engine/model_policy.go index bd4841c..60960d3 100644 --- a/engine/model_policy.go +++ b/engine/model_policy.go @@ -6,7 +6,7 @@ import ( "strings" "github.com/GrayCodeAI/eyrie/catalog" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) func (e *Engine) policyCatalog(ctx context.Context) (*catalog.CompiledCatalog, error) { diff --git a/engine/model_policy_custom_test.go b/engine/model_policy_custom_test.go index ee5acf0..27d6ecb 100644 --- a/engine/model_policy_custom_test.go +++ b/engine/model_policy_custom_test.go @@ -9,7 +9,7 @@ import ( "github.com/GrayCodeAI/eyrie/catalog" "github.com/GrayCodeAI/eyrie/credentials" - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) func TestModelPolicyIncludesInvocationScopedCustomGateways(t *testing.T) { diff --git a/engine/types.go b/engine/types.go index 599cb78..704c49c 100644 --- a/engine/types.go +++ b/engine/types.go @@ -1,7 +1,7 @@ package engine import ( - "github.com/GrayCodeAI/hawk-core-contracts/llm" + "github.com/GrayCodeAI/eagle/llm" ) // Intent expresses a host's semantic preference without naming a provider. diff --git a/go.mod b/go.mod index e242d77..46bd5ec 100644 --- a/go.mod +++ b/go.mod @@ -3,35 +3,38 @@ module github.com/GrayCodeAI/eyrie go 1.26.6 require ( - github.com/GrayCodeAI/hawk-core-contracts v0.1.12 + github.com/GrayCodeAI/eagle v0.0.0-20260830103740-9d358dde4ad8 github.com/google/uuid v1.6.0 github.com/tiktoken-go/tokenizer v0.8.0 github.com/zalando/go-keyring v0.2.8 go.opentelemetry.io/otel v1.44.0 go.opentelemetry.io/otel/trace v1.44.0 - google.golang.org/grpc v1.81.1 + google.golang.org/grpc v1.82.1 modernc.org/sqlite v1.51.0 ) require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/danieljoos/wincred v1.2.3 // indirect - github.com/dlclark/regexp2/v2 v2.1.0 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/dlclark/regexp2/v2 v2.2.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect - github.com/mattn/go-isatty v0.0.22 // indirect + github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect + github.com/mattn/go-isatty v0.0.24 // indirect github.com/ncruces/go-strftime v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/stretchr/objx v0.5.3 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/otel/metric v1.44.0 // indirect - golang.org/x/net v0.53.0 // indirect - golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.36.0 // indirect - golang.org/x/tools v0.44.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 // indirect + go.opentelemetry.io/otel/sdk/metric v1.44.0 // indirect + golang.org/x/net v0.57.0 // indirect + golang.org/x/sys v0.47.0 // indirect + golang.org/x/text v0.41.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect google.golang.org/protobuf v1.36.11 // indirect modernc.org/libc v1.72.5 // indirect modernc.org/mathutil v1.7.1 // indirect diff --git a/go.sum b/go.sum index 99238cd..6bffd7d 100644 --- a/go.sum +++ b/go.sum @@ -1,13 +1,13 @@ -github.com/GrayCodeAI/hawk-core-contracts v0.1.12 h1:percfsd771JLmO9gMkrQtENEPBA9ZN3dG1Nc1moN3ZQ= -github.com/GrayCodeAI/hawk-core-contracts v0.1.12/go.mod h1:BXbh68YrCf+s9HVqND5F8DAvl2MnE5NcOwZZZB56HGA= +github.com/GrayCodeAI/eagle v0.0.0-20260830103740-9d358dde4ad8 h1:S/eA2E0bD82k1B0aYSZGC4c4Gx1Uo4/j6Fi5n8XPBmY= +github.com/GrayCodeAI/eagle v0.0.0-20260830103740-9d358dde4ad8/go.mod h1:wjWP4o2xfIAoPx2JdizFYvlsLMjufmKy7anToKjEj3U= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= github.com/danieljoos/wincred v1.2.3/go.mod h1:6qqX0WNrS4RzPZ1tnroDzq9kY3fu1KwE7MRLQK4X0bs= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dlclark/regexp2/v2 v2.1.0 h1:jHXRmHRZGbuQzDZjMlCAXOvQb75iv3HyLDzXGj5H1AY= -github.com/dlclark/regexp2/v2 v2.1.0/go.mod h1:Bz5TMy5d8fPK0ximH0Yi9KvsRHNnvXqUx9XG6a4wB+I= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0= +github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -21,18 +21,18 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e h1:ijClszYn+mADRFY17kjQEVQ1XRhq2/JR1M3sGqeJoxs= -github.com/google/pprof v0.0.0-20250317173921-a4b03ec1a45e/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/mattn/go-isatty v0.0.22 h1:j8l17JJ9i6VGPUFUYoTUKPSgKe/83EYU2zBC7YNKMw4= -github.com/mattn/go-isatty v0.0.22/go.mod h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4= +github.com/mattn/go-isatty v0.0.24 h1:tGZZoVgT/KiqK1c8ocVLeDS8BSWMRd47J3Lbz7vsReI= +github.com/mattn/go-isatty v0.0.24/go.mod h1:nMCL3Zebbrt45jsMDgnfIwz6ydEQApk5oEI3HqDio6A= github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= @@ -49,30 +49,30 @@ go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= -go.opentelemetry.io/otel/sdk v1.43.0 h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg= -go.opentelemetry.io/otel/sdk v1.43.0/go.mod h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg= -go.opentelemetry.io/otel/sdk/metric v1.43.0 h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw= -go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= -golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= -golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= -golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= +golang.org/x/mod v0.38.0 h1:MECBjubtXD7yj4HrhIUcywNaGeNVUdfVnxmPajOk4yk= +golang.org/x/mod v0.38.0/go.mod h1:V6Xz0pq8TQ3dGqVQ1FVHuelZpAL0uNhSkk9ogYP3c40= +golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE= +golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU= +golang.org/x/sync v0.22.0 h1:SZjpbeLmrCk4xhRSZFNZW5gFUeCeFgjekvI/+gfScek= +golang.org/x/sync v0.22.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/text v0.41.0 h1:vz/seA0lnX87Othu2f/0L24RcgrXD9/YFTSuGjj3rH8= +golang.org/x/text v0.41.0/go.mod h1:jvf1O8ajNzZqhSrQBPbutR/EB83Cc0CFrezNQIwbb5M= +golang.org/x/tools v0.48.0 h1:3+hClM1aLL5mjMKm5ovokw9epgRXPuu2tILgismM6RE= +golang.org/x/tools v0.48.0/go.mod h1:08xX0orndb/F7jJxGDicx061tyd5pcMto75YMAXr6lk= gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171 h1:ggcbiqK8WWh6l1dnltU4BgWGIGo+EVYxCaAPih/zQXQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260226221140-a57be14db171/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= -google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.82.1 h1:NnAxzGRA0677vCa4BUkOAnO5+FfQqVl9iUXeD0IqcGE= +google.golang.org/grpc v1.82.1/go.mod h1:yzTZ1TB1Z3SG+LIYaI+WiE8D5+PZ3ArnrSp8zF3+/ZA= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/internal/observability/genai_semconv.go b/internal/observability/genai_semconv.go index 03a87b8..4053efd 100644 --- a/internal/observability/genai_semconv.go +++ b/internal/observability/genai_semconv.go @@ -3,7 +3,7 @@ // These exported constants are the canonical, ecosystem-wide attribute keys for // describing LLM / AI agent operations. They follow the OpenTelemetry GenAI // semantic conventions (gen_ai.*) and are shared as the reference set that the -// other hawk-eco repos (hawk, yaad, tok, trace) should mirror when emitting +// other hawk-eco repos (hawk, harrier, shrike, swift) should mirror when emitting // spans, so dashboards and exporters can correlate cost/usage/identity across // the whole ecosystem. // diff --git a/operationsgraph/operations_graph.go b/operationsgraph/operations_graph.go index 7341c1b..b211f1d 100644 --- a/operationsgraph/operations_graph.go +++ b/operationsgraph/operations_graph.go @@ -6,7 +6,7 @@ import ( "sync" "time" - graphcontracts "github.com/GrayCodeAI/hawk-core-contracts/graph" + graphcontracts "github.com/GrayCodeAI/eagle/graph" ) // OperationNode represents a node in the operations graph. diff --git a/operationsgraph/projection.go b/operationsgraph/projection.go index 999296e..744bf9b 100644 --- a/operationsgraph/projection.go +++ b/operationsgraph/projection.go @@ -12,8 +12,8 @@ import ( "strings" "time" - graphcontracts "github.com/GrayCodeAI/hawk-core-contracts/graph" - llmcontracts "github.com/GrayCodeAI/hawk-core-contracts/llm" + graphcontracts "github.com/GrayCodeAI/eagle/graph" + llmcontracts "github.com/GrayCodeAI/eagle/llm" ) const SchemaVersion = "eyrie.graph/v1" diff --git a/operationsgraph/projection_test.go b/operationsgraph/projection_test.go index 805b812..adc95d7 100644 --- a/operationsgraph/projection_test.go +++ b/operationsgraph/projection_test.go @@ -7,8 +7,8 @@ import ( "time" "github.com/GrayCodeAI/eyrie/operationsgraph" - graphcontracts "github.com/GrayCodeAI/hawk-core-contracts/graph" - llmcontracts "github.com/GrayCodeAI/hawk-core-contracts/llm" + graphcontracts "github.com/GrayCodeAI/eagle/graph" + llmcontracts "github.com/GrayCodeAI/eagle/llm" ) func TestBuildPrivacySafeOperationsProjection(t *testing.T) { diff --git a/plans/client-package-decomposition.md b/plans/client-package-decomposition.md index e383b3f..0d0e868 100644 --- a/plans/client-package-decomposition.md +++ b/plans/client-package-decomposition.md @@ -3,7 +3,8 @@ **Status:** In Progress — Phases 1–3 implemented 2026-07-13; layering guard live **Author:** Claude (architecture review session) **Date:** 2026-07-12 -**Repos affected:** eyrie (all changes), hawk (no code changes required; re-pin external/eyrie) +**Repos affected:** eyrie (all changes), hawk (no code changes required; update +the published Eyrie module pin) ## Problem Statement @@ -196,7 +197,7 @@ Learned in Phases 1–2 (apply to later phases): | Hidden unexported coupling beyond the measured sets | med | Phases are one-cluster-at-a-time; the compiler finds every missed reference at move time; abort/expand `core` rather than weaken boundaries | | Type identity breakage for consumers doing type switches | high | Use aliases (`=`), never new named types, for everything that already exists | | Method sets split from their types | high | Methods move with their receiver's file into the same subpackage — never leave methods behind | -| external/eyrie pin drift in hawk during the refactor | low | Land phases as individual PRs; re-pin hawk after each; `make sync-external` reports drift | +| Eyrie module-pin drift in Hawk during the refactor | low | Land phases as individual PRs; update Hawk after each; `make sync` reports drift | | Facade grows stale re-exports | low | Phase 5 CI check + deprecation comments | ## References diff --git a/scripts/check-ecosystem-boundaries.sh b/scripts/check-ecosystem-boundaries.sh index af7ddc4..5d6d58b 100755 --- a/scripts/check-ecosystem-boundaries.sh +++ b/scripts/check-ecosystem-boundaries.sh @@ -5,10 +5,10 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT_DIR" # Eyrie is host-neutral: it must not depend on any Hawk package. Shared -# ecosystem vocabulary belongs in hawk-core-contracts, whose module path does +# ecosystem vocabulary belongs in eagle, whose module path does # not match this expression. FORBIDDEN_HAWK='github\.com/GrayCodeAI/hawk(/|")' -FORBIDDEN_ENGINES='github\.com/GrayCodeAI/(yaad|tok|trace|sight|inspect)(/|")' +FORBIDDEN_ENGINES='github\.com/GrayCodeAI/(harrier|shrike|swift|kestrel|merlin)(/|")' exit_code=0 @@ -24,7 +24,7 @@ if [[ -n "${violations}" ]]; then echo "forbidden Hawk imports found:" echo "${violations}" echo - echo "eyrie must use hawk-core-contracts or local contracts, never the Hawk product module" + echo "eyrie must use eagle or local contracts, never the Hawk product module" exit_code=1 fi diff --git a/scripts/check-no-replace-directives.sh b/scripts/check-no-replace-directives.sh index b813b15..8a8d844 100755 --- a/scripts/check-no-replace-directives.sh +++ b/scripts/check-no-replace-directives.sh @@ -8,7 +8,7 @@ if grep -qE '^replace .+ => \.\./' go.mod; then grep -nE '^replace .+ => \.\./' go.mod echo "" echo "Local replace directives must be removed before tagging a release." - echo "For a release, the published module version of hawk-core-contracts must be used." + echo "For a release, the published module version of eagle must be used." exit 1 fi echo "OK: no local replace directives in go.mod." From b0fed98f3a9fa8c0647b5e8dbea50b82f9639219 Mon Sep 17 00:00:00 2001 From: Lakshman Patel Date: Mon, 31 Aug 2026 19:06:04 +0530 Subject: [PATCH 2/3] style: apply gofumpt formatting --- client/adapters/anthropic.go | 2 +- client/adapters/anthropic_base.go | 2 +- client/adapters/azure.go | 2 +- client/adapters/bedrock.go | 2 +- client/adapters/concentrate_responses.go | 2 +- client/adapters/gemini.go | 2 +- client/adapters/openai.go | 2 +- client/adapters/protocol_router.go | 2 +- client/adapters/protocol_router_test.go | 2 +- client/adapters/vertex.go | 2 +- client/aliases.go | 2 +- client/embeddings/cache_test.go | 2 +- engine/control_plane.go | 2 +- engine/convert_test.go | 2 +- engine/engine.go | 2 +- engine/engine_test.go | 2 +- engine/model_policy.go | 2 +- engine/model_policy_custom_test.go | 2 +- operationsgraph/projection_test.go | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/client/adapters/anthropic.go b/client/adapters/anthropic.go index 8ed1f2c..7e618a5 100644 --- a/client/adapters/anthropic.go +++ b/client/adapters/anthropic.go @@ -10,8 +10,8 @@ import ( "net/http" "strings" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // maxAnthropicRequestSize is the maximum request body size for the Messages API (32 MB). diff --git a/client/adapters/anthropic_base.go b/client/adapters/anthropic_base.go index 1e28660..029367e 100644 --- a/client/adapters/anthropic_base.go +++ b/client/adapters/anthropic_base.go @@ -3,8 +3,8 @@ package adapters import ( "strings" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // AnthropicBaseFromOpenAIV1 strips a trailing /v1 from an OpenAI-compatible base URL. diff --git a/client/adapters/azure.go b/client/adapters/azure.go index 31177a6..68694aa 100644 --- a/client/adapters/azure.go +++ b/client/adapters/azure.go @@ -10,8 +10,8 @@ import ( "net/http" "strings" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) const ( diff --git a/client/adapters/bedrock.go b/client/adapters/bedrock.go index 5ba9556..52113c5 100644 --- a/client/adapters/bedrock.go +++ b/client/adapters/bedrock.go @@ -18,8 +18,8 @@ import ( "strings" "time" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) const ( diff --git a/client/adapters/concentrate_responses.go b/client/adapters/concentrate_responses.go index 80c8d7c..3bff29b 100644 --- a/client/adapters/concentrate_responses.go +++ b/client/adapters/concentrate_responses.go @@ -12,8 +12,8 @@ import ( "strings" "time" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // ConcentrateResponsesClient uses the Concentrate Responses API (the production-ready diff --git a/client/adapters/gemini.go b/client/adapters/gemini.go index 7b11d99..fb6f9ce 100644 --- a/client/adapters/gemini.go +++ b/client/adapters/gemini.go @@ -11,8 +11,8 @@ import ( "os" "strings" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // geminiSharedParserEnvVar is the opt-out flag for the new diff --git a/client/adapters/openai.go b/client/adapters/openai.go index aed7aad..031c5ac 100644 --- a/client/adapters/openai.go +++ b/client/adapters/openai.go @@ -10,8 +10,8 @@ import ( "net/http" "strings" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) const ( diff --git a/client/adapters/protocol_router.go b/client/adapters/protocol_router.go index 29e9704..bfe2f4b 100644 --- a/client/adapters/protocol_router.go +++ b/client/adapters/protocol_router.go @@ -5,8 +5,8 @@ import ( "fmt" "strings" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // ChatProtocol selects which existing eyrie client handles a gateway request. diff --git a/client/adapters/protocol_router_test.go b/client/adapters/protocol_router_test.go index 4c029cf..3d091d1 100644 --- a/client/adapters/protocol_router_test.go +++ b/client/adapters/protocol_router_test.go @@ -6,8 +6,8 @@ import ( "net/http" "testing" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) func TestNewStreamWithReasoningFallbackChatFirst(t *testing.T) { diff --git a/client/adapters/vertex.go b/client/adapters/vertex.go index 226ab7d..d724f92 100644 --- a/client/adapters/vertex.go +++ b/client/adapters/vertex.go @@ -9,8 +9,8 @@ import ( "log/slog" "net/http" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // maxVertexRequestSize is the maximum request body size for Vertex AI (30 MB). diff --git a/client/aliases.go b/client/aliases.go index 9691bb4..5210905 100644 --- a/client/aliases.go +++ b/client/aliases.go @@ -5,10 +5,10 @@ import ( "net/http" "time" + "github.com/GrayCodeAI/eagle/llm" "github.com/GrayCodeAI/eyrie/client/adapters" "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eyrie/client/embeddings" - "github.com/GrayCodeAI/eagle/llm" ) // The provider contract and request/response data types live in diff --git a/client/embeddings/cache_test.go b/client/embeddings/cache_test.go index c184d70..60c7d24 100644 --- a/client/embeddings/cache_test.go +++ b/client/embeddings/cache_test.go @@ -6,8 +6,8 @@ import ( "sync" "testing" - "github.com/GrayCodeAI/eyrie/client/core" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client/core" ) // echoMock is a minimal core.Provider that echoes the last user message and diff --git a/engine/control_plane.go b/engine/control_plane.go index 5230d28..88681dc 100644 --- a/engine/control_plane.go +++ b/engine/control_plane.go @@ -6,11 +6,11 @@ import ( "sort" "strings" + llm "github.com/GrayCodeAI/eagle/llm" "github.com/GrayCodeAI/eyrie/catalog" "github.com/GrayCodeAI/eyrie/catalog/registry" "github.com/GrayCodeAI/eyrie/config" "github.com/GrayCodeAI/eyrie/credentials" - llm "github.com/GrayCodeAI/eagle/llm" ) // ResolveCredential validates credential input and returns safe provider diff --git a/engine/convert_test.go b/engine/convert_test.go index 8a5a7ce..4c85419 100644 --- a/engine/convert_test.go +++ b/engine/convert_test.go @@ -3,8 +3,8 @@ package engine import ( "testing" - "github.com/GrayCodeAI/eyrie/client" llm "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/client" ) func TestToClientMessages_ReturnsMessagesUnchanged(t *testing.T) { diff --git a/engine/engine.go b/engine/engine.go index 571ff3b..8d8720b 100644 --- a/engine/engine.go +++ b/engine/engine.go @@ -11,13 +11,13 @@ import ( "sync" "time" + "github.com/GrayCodeAI/eagle/llm" "github.com/GrayCodeAI/eyrie/catalog" "github.com/GrayCodeAI/eyrie/catalog/registry" "github.com/GrayCodeAI/eyrie/client" "github.com/GrayCodeAI/eyrie/config" "github.com/GrayCodeAI/eyrie/credentials" "github.com/GrayCodeAI/eyrie/setup" - "github.com/GrayCodeAI/eagle/llm" ) // ContractVersion is the compatibility version of the host-facing API. diff --git a/engine/engine_test.go b/engine/engine_test.go index b4b734b..fda585e 100644 --- a/engine/engine_test.go +++ b/engine/engine_test.go @@ -6,11 +6,11 @@ import ( "path/filepath" "testing" + "github.com/GrayCodeAI/eagle/llm" "github.com/GrayCodeAI/eyrie/catalog" "github.com/GrayCodeAI/eyrie/client" "github.com/GrayCodeAI/eyrie/config" "github.com/GrayCodeAI/eyrie/credentials" - "github.com/GrayCodeAI/eagle/llm" ) func TestNewUsesInjectedCredentialStore(t *testing.T) { diff --git a/engine/model_policy.go b/engine/model_policy.go index 60960d3..7769de6 100644 --- a/engine/model_policy.go +++ b/engine/model_policy.go @@ -5,8 +5,8 @@ import ( "sort" "strings" - "github.com/GrayCodeAI/eyrie/catalog" "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/catalog" ) func (e *Engine) policyCatalog(ctx context.Context) (*catalog.CompiledCatalog, error) { diff --git a/engine/model_policy_custom_test.go b/engine/model_policy_custom_test.go index 27d6ecb..4caef12 100644 --- a/engine/model_policy_custom_test.go +++ b/engine/model_policy_custom_test.go @@ -7,9 +7,9 @@ import ( "slices" "testing" + "github.com/GrayCodeAI/eagle/llm" "github.com/GrayCodeAI/eyrie/catalog" "github.com/GrayCodeAI/eyrie/credentials" - "github.com/GrayCodeAI/eagle/llm" ) func TestModelPolicyIncludesInvocationScopedCustomGateways(t *testing.T) { diff --git a/operationsgraph/projection_test.go b/operationsgraph/projection_test.go index adc95d7..f9e9d0a 100644 --- a/operationsgraph/projection_test.go +++ b/operationsgraph/projection_test.go @@ -6,9 +6,9 @@ import ( "testing" "time" - "github.com/GrayCodeAI/eyrie/operationsgraph" graphcontracts "github.com/GrayCodeAI/eagle/graph" llmcontracts "github.com/GrayCodeAI/eagle/llm" + "github.com/GrayCodeAI/eyrie/operationsgraph" ) func TestBuildPrivacySafeOperationsProjection(t *testing.T) { From cf83260981b9df62fa28c031a5a5b285f2274d64 Mon Sep 17 00:00:00 2001 From: Lakshman Patel Date: Mon, 31 Aug 2026 19:37:58 +0530 Subject: [PATCH 3/3] chore: align eagle development revision --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 46bd5ec..fabae2a 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/GrayCodeAI/eyrie go 1.26.6 require ( - github.com/GrayCodeAI/eagle v0.0.0-20260830103740-9d358dde4ad8 + github.com/GrayCodeAI/eagle v0.0.0-20260831121050-12ea8cc11b16 github.com/google/uuid v1.6.0 github.com/tiktoken-go/tokenizer v0.8.0 github.com/zalando/go-keyring v0.2.8 diff --git a/go.sum b/go.sum index 6bffd7d..ceb2603 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -github.com/GrayCodeAI/eagle v0.0.0-20260830103740-9d358dde4ad8 h1:S/eA2E0bD82k1B0aYSZGC4c4Gx1Uo4/j6Fi5n8XPBmY= -github.com/GrayCodeAI/eagle v0.0.0-20260830103740-9d358dde4ad8/go.mod h1:wjWP4o2xfIAoPx2JdizFYvlsLMjufmKy7anToKjEj3U= +github.com/GrayCodeAI/eagle v0.0.0-20260831121050-12ea8cc11b16 h1:WGwrRrtWXZ9Vh93VAe1iit7kxG6nbpmqGhVDXAMPnK8= +github.com/GrayCodeAI/eagle v0.0.0-20260831121050-12ea8cc11b16/go.mod h1:wjWP4o2xfIAoPx2JdizFYvlsLMjufmKy7anToKjEj3U= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ=