Skip to content

Releases: zzet/gortex

v0.11.0

19 Apr 19:23

Choose a tag to compare

Changelog

  • 3a7ff57 Adjust view for the process list to make it more compact
  • e4c5d31 Bump version to v0.11.0
  • 2dd0ebc Graph views now consume real data
  • 6122e5d Split product processed from tests processes
  • 7388c14 agents: install Gortex instructions file into every detected agent
  • 285f91c caveats: cross-repo reach, actionable advice, working inspector
  • 2da79c4 caveats: scope filter (yours/tests/deps/all) + drop vendored dirs
  • c63f8ba contracts: extract request/response shapes and diff provider↔consumer drift
  • bea1253 contracts: graph-aware type tracing, side-by-side UI, broader language coverage
  • f9f8dd6 contracts: own/external + type filters, expandable detail, highlighted source
  • 9f2758b contracts: persist per-repo registries across daemon restarts; add project/ref filters
  • 40f94fc fix flaky test
  • aa1b9e6 fix web links
  • e1899e4 init: split install + init, fold skills, drop per-repo tool-usage
  • 1dd5588 mcp: add row-based GCX encoders for contracts, editing_context, smart_context
  • d0dc98f mcp: add winnow_symbols multi-axis structured retrieval
  • f663865 note for agents for future
  • 276d1a6 parser+resolver: attribute external calls to their import path
  • 054cd66 processes: call-tree steps, collapsible tree UI, graph race fix
  • 53839f8 return source code for the symbol in web
  • d086558 server: add bearer-token auth + localhost-only default bind
  • 94ee2ba server: add server_id, extend /v1/stats, accept format on /v1/tools
  • 7208e77 server: drop --web, salvage /v1/graph + /v1/events, delete internal/web
  • e2e684e server: move all HTTP routes under /v1 prefix
  • b636a0a server: rename gortex bridgeserver and gortex servemcp
  • 3ec5884 web + server: wire UI to real /v1 data, delete remaining mocks
  • 16acdb1 web: redesign UI from Claude Design handoff; add /v1 dashboard endpoints
  • 02ae8d7 web: replace seed mocks with /v1/* hooks; add UI-shaped server endpoints

v0.10.2

18 Apr 14:27

Choose a tag to compare

Changelog

  • 5625425 Bump version to v0.10.2
  • c0accce Fix tests on ci
  • 4b87b49 init: extract 15-agent adapter package, audit schemas, add init doctor
  • b1630a6 update README

v0.10.1

18 Apr 12:58

Choose a tag to compare

Changelog

  • 3cff24e Bump version to v0.10.1
  • 56d6133 search: fix Bleve auto-upgrade memory blowup and vector loss

v0.10.0

18 Apr 11:39

Choose a tag to compare

Important

Fixed a sad bug with a graph duplication. Required to recreate the index.

$ gortex daemon stop
$ rm ~/.cache/gortex/daemon.gob.gz
$ gortex daemon start --detach

Changelog

  • 9311153 Bump version to v0.10.0
  • f9461ee Update readme - make less verbose
  • 4ca6483 daemon: self-heal graph on restart, offline edits, and branch switches
  • bd4dd7c docs(gcx): teach agents and users about the GCX1 wire-format opt-in
  • 01d42c3 feat(parser): add 15 languages — F#, Julia, Tcl, Shaders, Perl, Raku, Crystal, Nim, Pascal, COBOL, Ada, PowerShell, VimScript, Emacs Lisp, Racket
  • f54b214 feat(parser): add 36 languages — template engines, build/shell, blockchain, scientific, emerging, legacy
  • 50b3314 feat(parser): add 8 languages — Verse, AL, AutoHotkey, Assembly, GDScript, Nix, Fortran, Solidity
  • 26040cc fix linter issues

v0.9.1

17 Apr 23:09

Choose a tag to compare

Changelog

  • b7ff95f Bump version to v0.9.1
  • 66da966 feat(mcp): advertise format:"gcx" on remaining GCX-wired tool schemas

v0.9.0

17 Apr 22:47

Choose a tag to compare

Changelog

  • 871b240 Bump version to v0.9.0
  • dc7f48c feat(wire): add GCX1 compact wire format, benchmark harness, and TS decoder
  • 0d2ec39 pre-release

v0.8.0

17 Apr 00:47

Choose a tag to compare

Changelog

  • fa428cf Bump version to v0.8.0
  • 0289977 daemon: fix nested hybrid leak, plumb embedder, add pprof
  • 4dcff01 daemon: persist track, memory breakdown, skip low-value embeds

v0.7.0

16 Apr 19:48

Choose a tag to compare

Changelog

  • 986067a Add VirusTotal badge to README
  • e8312dc Bump version to v0.7.0
  • 980cbed fix linter issue
  • e14f277 unify index/watch excludes and add gortex config exclude CLI

v0.6.1

15 Apr 23:24

Choose a tag to compare

Changelog

  • afeaa37 Bump version to v0.6.1
  • ee1d3fe Linter
  • f635c3b fix(contracts): support Go 1.22 stdlib mux + persist inlined wrappers across reconciles
  • 92fa580 fix: prevent daemon crash on concurrent file events; polish HTTP provider extraction

v0.6.0

15 Apr 22:27

Choose a tag to compare

Gortex v0.6.0 — End-to-End Cross-Service Request Tracing

TL;DR

This release delivers end-to-end cross-service request tracing across all contract types. get_call_chain and get_callers now traverse service boundaries for HTTP, gRPC, topics, GraphQL, WebSocket, and OpenAPI-defined APIs. In
multi-repo workspaces, call-graph resolution works properly for the first time.

If you've been using Gortex in multi-repo mode, restart the daemon and clear the cache (steps below) — prior snapshots carry stale state that the old bugs accumulated, and a clean restart gives you the full benefit immediately.

What's New

Cross-service bridging works for every contract type

EdgeMatches edges now form between consumer and provider symbols across repositories. get_call_chain(consumerFn) reaches the actual handler on the provider side without manually hopping through contracts check.

Contract type Example scenario
HTTP Go http.Get or TS fetch(`${API_URL}/path`) → Gin/Echo/Express handler
gRPC pb.NewUsersClient(conn).GetUser(...)UsersServer.GetUser via .proto binding
Topics Kafka p.Publish("user.created", ...)c.Subscribe("user.created", ...)
GraphQL TS query { user } → schema-declared Query.user resolver
WebSocket socket.emit("event")socket.on("event")
OpenAPI YAML/JSON spec declaring get /users → Go Gin r.GET("/users", listUsers)

Method inference (GET / POST / PATCH / DELETE) is preserved through HTTP wrapper chains. Template literals (`${API_URL}/v1/tucks`) normalize to canonical paths. Dart dio.post('/path/$id') is supported.

Big fix: multi-repo call-graph resolution

applyRepoPrefix was polluting the resolver's unresolved:: sentinel, so in multi-repo workspaces every function-call edge ended up dangling, across every language. get_callers returned empty even for heavily-used functions. Fixed.

HTTP wrapper inlining

Frontends that funnel 30 endpoints through request(path, ...) now produce 30 specific consumer contracts (one per caller) instead of a single unresolvable parametric one. BFS-propagates through chains like fetchX → request → doFetch → fetch.

Other notable fixes

  • contracts list / check reflects runtime-tracked repos (was showing empty even when nodes existed).
  • Duplicate Go nodes from prior-version indexing bugs are dropped on snapshot load.
  • track_repositoryactive_project state drift auto-reconciles on next operation.
  • First-repo-tracked-at-daemon-warmup correctly gets a repo prefix.

Breaking Changes

Most users will not be affected. Flagging for completeness.

gRPC consumer contract ID format

Format
Before grpc::Users — service-level only, from the pb.NewUsersClient construction site
After grpc::Users::GetUser — per-method, from the client.GetUser(...) call site

A service-level fallback is still emitted when no method calls resolve. If you were filtering contracts or building tools on top of the old grpc::Service ID shape, the new shape matches provider IDs (which were already
grpc::Service::Method) and you now get real matcher pairs.

OpenAPI provider contract ID format

Format
Before openapi::GET::/users
After http::GET::/users

Type: ContractOpenAPI is retained, so contracts list --type openapi still filters correctly. Only users matching raw ID strings need to update.

Upgrade Steps

# 1. Pull latest and build.
cd <gortex repo>
git pull
go build -o gortex ./cmd/gortex/

# 2. Stop the running daemon so it loads the new binary.
./gortex daemon stop
# or: kill "$(cat ~/.cache/gortex/daemon.pid)"

# 3. Recommended: clear the cached snapshot. Prior runs may have
#    stored stale Go duplicate nodes, orphan unresolved call edges,
#    or abs-path IDs from buggy prior versions. A fresh graph is
#    guaranteed correct.
rm -f ~/.cache/gortex/daemon.gob.gz

# 4. Restart. Your MCP client (Claude Code, etc.) will spawn the new
#    daemon on its next call, or you can pre-warm:
./gortex daemon start

After restart, the first query takes a few seconds longer while Gortex re-indexes your tracked repos fresh. Subsequent queries are back to normal latency.

▎ Note: If you'd rather keep the old snapshot, the load path now auto-drops nodes with absolute-filesystem-path IDs and reconciles tracked-repo drift against active_project, so a restart alone still works. Clearing is the cleanest option, not
▎ a requirement.

Verify the Upgrade

Once restarted, try these against your actual multi-repo workspace:

  # Show every cross-service bridge in the project.
  contracts action:"check"
  # Expect nonzero matched_pairs, distinguishing cross-repo hits.

  # Pick a well-known handler; you should see frontend / worker /
  # mobile callers across repo boundaries.
  get_callers id:"<provider-repo>/path/handler.go::HandleCreate"

  # Pick a consumer function; chain should cross into the provider repo.
  get_call_chain id:"<consumer-repo>/lib/api.ts::createThing"

  # List gRPC contracts — should include grpc::Service::Method
  # (not just grpc::Service).
  contracts action:"list" type:"grpc"

Known Limitations

Not fixed in this release — flagging so you don't hunt for them:

  • Function-as-value references (TS). useQuery({ queryFn: fetchUser }) passes fetchUser as a value, not a call. No call edge is emitted; the consumer side of the chain starts at fetchUser rather than at the component that imports it. Future
    work needs function-reference tracking (EdgeReferences on identifiers in non-call positions).
  • Dynamic-URL HTTP consumers. Worker code using http.NewRequestWithContext(ctx, method, urlVar, nil) with a variable URL cannot yield a path. These get no consumer contract. Typically these are calls to external services (media downloads,
    oEmbed, etc.), not internal APIs — the absence is usually correct.
  • gRPC binding ambiguity. If your server types don't follow the {Service}Server naming convention and you have multiple methods of the same name in a repo, the binder skips rather than guesses. A .gortex.yaml option for custom server-type
    suffixes is a future addition.
  • Wrapper inlining is HTTP-only. A publishEvent(topic, payload) helper in Go won't have its callers inlined. HTTP is where this pattern is endemic; gRPC / topic wrappers are rarer.
  • Env-var bridges don't form. Providers (.env, docker-compose.yaml) aren't function symbols. get_dependencies(handler) still traces env-var reads correctly via the contract node — no EdgeMatches is emitted because it would be a category error.
  • OpenAPI binding heuristic. Falls back to operationId or the last path segment matched to a function name in the same repo. Unusual handler-naming conventions may not bind; the consumer still reaches the OpenAPI contract node, just not the
    handler method.

Troubleshooting

Did you restart the daemon? Old binary, old behavior. Check ps aux | grep gortex and verify the modified time matches your build.

If you never cleared the snapshot, stale nodes may have been dropped silently on load. ~/.cache/gortex/daemon.log will note stale_nodes_dropped=N. Re-index the affected repo(s) or clear the cache.

Confirm the server type matches the {Service}Server convention. Run search_symbols query:"{Service}Server" to verify. If your convention differs, file an issue — the binder's tier list can be extended.

The drift-reconcile path handles this automatically on the next index_repository call. If it persists, check ~/.cache/gortex/daemon.log for warnings about auto-track failures.

Changelog

  • 856aa67 Bump version to v0.6.0
  • 4ef6312 Merge pull request #1 from zzet/dependabot/go_modules/go-minor-patch-e88dfb2ff4
  • b5cb68a Merge pull request #2 from zzet/dependabot/github_actions/actions-minor-patch-2337bbc86d
  • 9d4839b Merge pull request #3 from zzet/dependabot/github_actions/crazy-max/ghaction-virustotal-5
  • 166ea4d Merge pull request #4 from zzet/dependabot/github_actions/softprops/action-gh-release-3
  • feb814b Merge pull request #5 from zzet/dependabot/github_actions/actions/upload-artifact-7
  • 2d2c565 Merge pull request #6 from zzet/dependabot/github_actions/github/codeql-action-4
  • eea0add ci(deps): bump actions/upload-artifact from 4 to 7
  • 3c153f1 ci(deps): bump crazy-max/ghaction-virustotal from 4 to 5
  • 61547de ci(deps): bump github/codeql-action from 3 to 4
  • b5a9297 ci(deps): bump softprops/action-gh-release from 2 to 3
  • 68c2a1a ci(deps): bump the actions-minor-patch group with 2 updates
  • 048cc50 ci, docs: add supply-chain badges, OpenSSF Scorecard, Dependabot
  • 08ebd50 deps(deps): bump github.com/mark3labs/mcp-go in the go-minor-patch group
  • 3855c45 feat(contracts): bridge services in call-chain via matcher edges
  • 5f0ad98 feat(contracts): detect Dart HTTP consumers and bridge to Go providers
  • ee07821 feat(contracts): full cross-service bridging for gRPC, topics, GraphQL, WebSocket, env, OpenAPI
  • 700c6d1 feat(contract...
Read more