# gt_bridge v0.19.2 - Table of Contents

A bridge between Glamorous Toolkit (GT) and the BEAM VM, enabling remote code evaluation, object inspection, and Phlow view rendering.

## Modules

- [EvaluationSupervisor](EvaluationSupervisor.md): I supervise children that evaluate arbitrary Elixir code (Similar to IEx).
- [Examples.EAnalysis](Examples.EAnalysis.md): I am examples for GtBridge.Analysis, the static analysis module.

- [Examples.ECodeMonitor](Examples.ECodeMonitor.md): I am examples for `GtBridge.CodeMonitor`, the sole publisher of
`%ModuleEvent{kind: :recompiled}` on the bridge's EventBroker bus.
- [Examples.ECompletion](Examples.ECompletion.md): I am examples for the Elixir autocompletion system.

- [Examples.EDocumentation](Examples.EDocumentation.md): I am examples for GtBridge.Documentation, the module doc extractor.

- [Examples.EEval](Examples.EEval.md): I am examples for GtBridge.Eval, the evaluation GenServer.

- [Examples.EHotReload](Examples.EHotReload.md): I test the hot-reload system end-to-end against a real dependency.
- [Examples.EInterfaces](Examples.EInterfaces.md): I am examples for GtBridge.Analysis.Interfaces, the behaviour and
protocol listing.

- [Examples.EModuleCreator](Examples.EModuleCreator.md): I am examples for `GtBridge.ModuleCreator`.
- [Examples.EModuleCreatorScratch](Examples.EModuleCreatorScratch.md)
- [Examples.EMondrian](Examples.EMondrian.md): I am examples for the Mondrian graph view shim.

- [Examples.ESerialization](Examples.ESerialization.md): I am examples for the GtBridge serializer.

- [Examples.ETcp](Examples.ETcp.md): I am examples for the framed TCP transport.
- [Examples.EViews](Examples.EViews.md): I am examples for the Phlow view system. I also define a sample
struct with two views to exercise view registration and rendering.

- [GtBridge](GtBridge.md): I am the OTP application entry point: I start the supervision tree,
register Phlow views, and start the TCP listener GT connects to.

- [GtBridge.Analysis](GtBridge.Analysis.md): I provide static analysis data for GT visualization.
- [GtBridge.Analysis.CallSites](GtBridge.Analysis.CallSites.md): I resolve call sites for GT's inline `|>` expander: which calls in
a source buffer point at real functions or types, resolved through
the context module's aliases, imports, and its own defs. Name-set
and alias/import lookups are md5-cached per module.

- [GtBridge.Analysis.Graph](GtBridge.Analysis.Graph.md): I answer the xref-backed graph questions: module dependency edges,
callers and callees, implementors of a named function (with
default-arg arities resolved to their defining clause), and call
references across loaded applications.

- [GtBridge.Analysis.Interfaces](GtBridge.Analysis.Interfaces.md): I list the behaviours and protocols an application defines, each
with the modules implementing it.
- [GtBridge.Analysis.LoadedModules](GtBridge.Analysis.LoadedModules.md): I maintain the set of every loaded module, keyed by its name as
`inspect/1` renders it ("GtBridge.Eval", ":erlang") and carrying its
module atom and owning application.  I am populated initially from
`:application.get_key/2` for every loaded application plus whatever
the VM has already loaded, and maintained additively by EventBroker
`%ModuleEvent{}` events.
- [GtBridge.Analysis.Source](GtBridge.Analysis.Source.md): I am the pure source-text half of Analysis: function/type entry
extraction (strict and lenient), module scoping for multi-module
files, and the canonical source-edit splices (swap/replace/append).
I never touch the code server; beam-side merging stays in
`GtBridge.Analysis`.

- [GtBridge.Analysis.Walker](GtBridge.Analysis.Walker.md): I walk Elixir AST and extract call sites.
- [GtBridge.Beam](GtBridge.Beam.md): I read beam-file chunks directly.
- [GtBridge.CacheReaper](GtBridge.CacheReaper.md): I own the named ETS table that backs all GtBridge derived-state caches and
invalidate per-module entries when the module recompiles.
- [GtBridge.CodeMonitor](GtBridge.CodeMonitor.md): I am the sole publisher of `%ModuleEvent{kind: :recompiled}` events.
- [GtBridge.Completion](GtBridge.Completion.md): I provide code completion for Elixir source fragments.
- [GtBridge.DepGraph](GtBridge.DepGraph.md): I expose application-level dependency graph queries to GT.
- [GtBridge.Documentation](GtBridge.Documentation.md): I provide structured access to Elixir module and function documentation.
- [GtBridge.Eval](GtBridge.Eval.md): I am a per-session evaluation GenServer.
- [GtBridge.Eval.Env](GtBridge.Eval.Env.md): I capture a Macro.Env with built-in helpers available.
- [GtBridge.Eval.Error](GtBridge.Eval.Error.md): I reprsent an error in evaluation
- [GtBridge.Eval.Preamble](GtBridge.Eval.Preamble.md): I prime an evaluation session with a module's preamble (alias /
import / require declarations) so completion + eval work in the
module's namespace context.
- [GtBridge.EvalRegistry](GtBridge.EvalRegistry.md): I map session IDs to `GtBridge.Eval` processes.
- [GtBridge.Events](GtBridge.Events.md): I define the EventBroker filters and the broadcast helper for GtBridge's
module-event bus.
- [GtBridge.Events.AnyModuleEvent](GtBridge.Events.AnyModuleEvent.md): I am the GtBridge.Events.AnyModuleEvent filter generated by deffilter in GtBridge.Events.

- [GtBridge.Events.ModuleEvent](GtBridge.Events.ModuleEvent.md): I am the body of an EventBroker event announcing a change to a BEAM module.
- [GtBridge.GtViewedObject](GtBridge.GtViewedObject.md): Helper module for getting view declarations for Elixir objects.
- [GtBridge.HotReload](GtBridge.HotReload.md): I drive the hot-reload pipeline: write source to disk, compile,
persist beam files, broadcast events, and return a payload that
GT-side subscribers can re-render from directly.
- [GtBridge.Mix](GtBridge.Mix.md): I am the shared mix-project introspection helpers used across
hot_reload, module_creator, and code_monitor.
- [GtBridge.Mnesia](GtBridge.Mnesia.md): I expose Mnesia table introspection to GT.
- [GtBridge.ModuleCreator](GtBridge.ModuleCreator.md): I create a fresh Elixir source file for a module name and recompile.
- [GtBridge.ObjectRegistry](GtBridge.ObjectRegistry.md): I am a Registry for objects that are referenced from GT.
- [GtBridge.Phlow.Builder](GtBridge.Phlow.Builder.md): Builder for creating Phlow views.
- [GtBridge.Phlow.Column](GtBridge.Phlow.Column.md): A column definition for columned list and tree views.

- [GtBridge.Phlow.ColumnedList](GtBridge.Phlow.ColumnedList.md): A Phlow columned list view specification.
- [GtBridge.Phlow.ColumnedTree](GtBridge.Phlow.ColumnedTree.md): A Phlow columned tree view specification.
- [GtBridge.Phlow.Empty](GtBridge.Phlow.Empty.md): An empty Phlow view specification.
- [GtBridge.Phlow.List](GtBridge.Phlow.List.md): A Phlow list view specification.
- [GtBridge.Phlow.Mondrian](GtBridge.Phlow.Mondrian.md): I am a Phlow Mondrian (graph) view specification.
- [GtBridge.Phlow.Text](GtBridge.Phlow.Text.md): A Phlow text editor view specification.
- [GtBridge.Resolve](GtBridge.Resolve.md)
- [GtBridge.Serializer](GtBridge.Serializer.md)
- [GtBridge.Supervision](GtBridge.Supervision.md): I expose process-supervision introspection to GT.
- [GtBridge.Supervisor](GtBridge.Supervisor.md)
- [GtBridge.View](GtBridge.View.md): Helper macros for declaring Phlow views on typed structs.
- [GtBridge.Views](GtBridge.Views.md): I hold views for various types, please query me to find out views you are interested in.

- [GtBridge.Views.MapGraph](GtBridge.Views.MapGraph.md): I display a map as a tree graph where each key points to its
value, and nested maps expand recursively.

- [GtBridge.Xref](GtBridge.Xref.md): I am a long-lived wrapper around OTP's `:xref` cross-reference server.
- [Tcp.Connection](Tcp.Connection.md): I serve one GT connection over a length-framed socket.
- [Tcp.Dispatch](Tcp.Dispatch.md): I turn one decoded request frame into the reply frame for it.
- [Tcp.Listener](Tcp.Listener.md): I am a TCP listener. I listen on a given interface and port for incoming connections.
- [Tcp.Supervisor](Tcp.Supervisor.md): I supervise the framed-transport `Tcp.Listener` and its `Tcp.Connection`
children.  I start empty; `start_listener/1` brings a listener up.

