# `GenAI.Graph.NodeProtocol.DefaultProvider`

Default provider for GenAI.Graph.NodeProtocol.
Uses function_exported? to invoke the passed module's implementation if any for calls.

# `apply_node_directives`

Apply/process a node. check/update fingerprint and add any appropriate directives to state.

# `build_handle_lookup`

# `build_node_lookup`

# `description`

```elixir
@spec description(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.description(), GenAI.Types.details())
```

# `description`

```elixir
@spec description(GenAI.Types.Graph.graph_node(), GenAI.Types.description()) ::
  GenAI.Types.result(GenAI.Types.description(), GenAI.Types.details())
```

# `do_description`

```elixir
@spec do_description(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.description(), GenAI.Types.details())
```

# `do_description`

```elixir
@spec do_description(GenAI.Types.Graph.graph_node(), GenAI.Types.description()) ::
  GenAI.Types.result(GenAI.Types.description(), GenAI.Types.details())
```

# `do_handle`

```elixir
@spec do_handle(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.handle(), GenAI.Types.details())
```

# `do_handle`

```elixir
@spec do_handle(GenAI.Types.Graph.graph_node(), GenAI.Types.handle()) ::
  GenAI.Types.result(GenAI.Types.handle(), GenAI.Types.details())
```

# `do_handle_record`

```elixir
@spec do_handle_record(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.handle(), GenAI.Types.details())
```

# `do_id`

```elixir
@spec do_id(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node_id(), GenAI.Types.details())
```

# `do_inbound_links`

```elixir
@spec do_inbound_links(
  GenAI.Types.Graph.graph_node(),
  GenAI.Types.Graph.graph(),
  map()
) ::
  {:ok, map()} | {:error, term()}
```

# `do_name`

```elixir
@spec do_name(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.name(), GenAI.Types.details())
```

# `do_name`

```elixir
@spec do_name(GenAI.Types.Graph.graph_node(), GenAI.Types.name()) ::
  GenAI.Types.result(GenAI.Types.name(), GenAI.Types.details())
```

# `do_new`

```elixir
@spec do_new(module(), any()) :: any()
```

# `do_node_type`

```elixir
@spec do_node_type(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node_id(), GenAI.Types.details())
```

# `do_outbound_links`

```elixir
@spec do_outbound_links(
  GenAI.Types.Graph.graph_node(),
  GenAI.Types.Graph.graph(),
  map()
) ::
  {:ok, map()} | {:error, term()}
```

# `do_process_node`

# `do_process_node_response`

# `do_register_link`

```elixir
@spec do_register_link(
  GenAI.Types.Graph.graph_node(),
  GenAI.Types.Graph.graph(),
  GenAI.Types.Graph.graph_link(),
  map()
) :: GenAI.Types.result(GenAI.Types.Graph.graph_node(), GenAI.Types.details())
```

# `do_with_id`

```elixir
@spec do_with_id(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node(), GenAI.Types.details())
```

# `do_with_id!`

```elixir
@spec do_with_id!(GenAI.Types.Graph.graph_node()) :: GenAI.Types.Graph.graph_node()
```

# `handle`

```elixir
@spec handle(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.handle(), GenAI.Types.details())
```

# `handle`

```elixir
@spec handle(GenAI.Types.Graph.graph_node(), GenAI.Types.handle()) ::
  GenAI.Types.result(GenAI.Types.handle(), GenAI.Types.details())
```

# `handle_record`

```elixir
@spec handle_record(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.handle(), GenAI.Types.details())
```

# `id`

```elixir
@spec id(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node_id(), GenAI.Types.details())
```

# `inbound_links`

```elixir
@spec inbound_links(GenAI.Types.Graph.graph_node(), GenAI.Types.Graph.graph(), map()) ::
  {:ok, map()} | {:error, term()}
```

# `inspect_custom_details`

# `inspect_full_detail`

# `inspect_high_detail`

# `inspect_low_detail`

# `inspect_medium_detail`

# `name`

```elixir
@spec name(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.name(), GenAI.Types.details())
```

# `name`

```elixir
@spec name(GenAI.Types.Graph.graph_node(), GenAI.Types.name()) ::
  GenAI.Types.result(GenAI.Types.name(), GenAI.Types.details())
```

# `new`

```elixir
@spec new(module(), any()) :: struct()
```

# `node`

```elixir
@spec node(GenAI.Types.Graph.graph_node(), term()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node_id(), GenAI.Types.details())
```

# `node_type`

```elixir
@spec node_type(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node_id(), GenAI.Types.details())
```

# `nodes`

```elixir
@spec nodes(GenAI.Types.Graph.graph_node(), term()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node_id(), GenAI.Types.details())
```

# `outbound_links`

```elixir
@spec outbound_links(GenAI.Types.Graph.graph_node(), GenAI.Types.Graph.graph(), map()) ::
  {:ok, map()} | {:error, term()}
```

# `process_node`

Apply/process a node. check/update fingerprint and add any appropriate directives to state.

# `process_node_response`

Apply/process a node. check/update fingerprint and add any appropriate directives to state.

# `register_link`

```elixir
@spec register_link(
  GenAI.Types.Graph.graph_node(),
  GenAI.Types.Graph.graph(),
  GenAI.Types.Graph.graph_link(),
  map()
) :: GenAI.Types.result(GenAI.Types.Graph.graph_node(), GenAI.Types.details())
```

# `with_id`

```elixir
@spec with_id(GenAI.Types.Graph.graph_node()) ::
  GenAI.Types.result(GenAI.Types.Graph.graph_node(), GenAI.Types.details())
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
