---
title: Dive Services
author:
date: 2023-02-15
...

# Dive Services {#dive-services}

## plugins.dive.range (`DATA`) {#range}

Parametrization of the exploration range.


> [`range`](#range)  `::= {` _fields…_ `}`
  

| Field | Format | Description |
|:------|:------:|:------------|
| `"backward"` (opt.) | _number_ | range for the write dependencies |
| `"forward"` (opt.) | _number_ | range for the read dependencies |


## plugins.dive.explorationWindow (`DATA`) {#explorationwindow}

Global parametrization of the exploration.


> [`explorationWindow`](#explorationwindow)  `::= {` _fields…_ `}`
  

| Field | Format | Description |
|:------|:------:|:------------|
| `"perception"` | [`range`](.md#range)  | how far dive will explore from root nodes ; must be a finite range |
| `"horizon"` | [`range`](.md#range)  | range beyond which the nodes must be hidden |


## plugins.dive.nodeId (`DATA`) {#nodeid}

A node identifier in the graph


> [`nodeId`](#nodeid)  `::=` _number_
  

## plugins.dive.callsite (`DATA`) {#callsite}

A callsite


> [`callsite`](#callsite)  `::=` `{` `"fun"` `:` _string_ , `"instr"` `:`
  _number_ | _string_ `}`
  

## plugins.dive.callstack (`DATA`) {#callstack}

The callstack context for a node


> [`callstack`](#callstack)  `::=` [`callsite`](.md#callsite)  `[]`
  

## plugins.dive.nodeLocality (`DATA`) {#nodelocality}

The description of a node locality


> [`nodeLocality`](#nodelocality)  `::=` `{` `"file"` `:` _string_ ,
  `"callstack"` `:?` [`callstack`](.md#callstack)  `}`
  

## plugins.dive.node (`DATA`) {#node}

A graph node


> [`node`](#node)  `::=` `{` `"id"` `:` [`nodeId`](.md#nodeid)  , `"label"`
  `:` _string_ , `"kind"` `:` _string_ , `"locality"` `:`
  [`nodeLocality`](.md#nodelocality)  , `"is_root"` `:` _boolean_ ,
  `"backward_explored"` `:` _string_ , `"forward_explored"` `:` _string_ ,
  `"writes"` `:` [`location`](../../kernel/ast.md#location)  `[]` ,
  `"values"` `:?` _string_ , `"range"` `:` _number_ | _string_ , `"type"`
  `:?` _string_ , `"taint"` `:?` `"direct"` | `"indirect"` | `"untainted"`
  `}`
  

## plugins.dive.dependency (`DATA`) {#dependency}

The dependency between two nodes


> [`dependency`](#dependency)  `::=` `{` `"id"` `:` _number_ , `"src"` `:`
  [`nodeId`](.md#nodeid)  , `"dst"` `:` [`nodeId`](.md#nodeid)  , `"kind"`
  `:` _string_ , `"origins"` `:` [`location`](../../kernel/ast.md#location) 
  `[]` `}`
  

## plugins.dive.graphData (`DATA`) {#graphdata}

The whole graph being built


> [`graphData`](#graphdata)  `::=` `{` `"nodes"` `:` [`node`](.md#node)  `[]`
  , `"deps"` `:` [`dependency`](.md#dependency)  `[]` `}`
  

## plugins.dive.diffData (`DATA`) {#diffdata}

Graph differences from the last action.


> [`diffData`](#diffdata)  `::=` `{` `"root"` `:?` [`nodeId`](.md#nodeid)  ,
  `"add"` `:` `{` `"nodes"` `:` [`node`](.md#node)  `[]` , `"deps"` `:`
  [`dependency`](.md#dependency)  `[]` `}` , `"sub"` `:`
  [`nodeId`](.md#nodeid)  `[]` `}`
  

## plugins.dive.window (`SET`) {#window}

Set the exploration window


> _input_ `::=` [`explorationWindow`](.md#explorationwindow) 
  

> _output_ `::=` _null_
  

## plugins.dive.graph (`GET`) {#graph}

Retrieve the whole graph


> _input_ `::=` _null_
  

> _output_ `::=` [`graphData`](.md#graphdata) 
  

## plugins.dive.clear (`EXEC`) {#clear}

Erase the graph and start over with an empty one


> _input_ `::=` _null_
  

> _output_ `::=` _null_
  

## plugins.dive.add (`EXEC`) {#add}

Add a node to the graph


> _input_ `::=` [`marker`](../../kernel/ast.md#marker) 
  

> _output_ `::=` [`diffData`](.md#diffdata) 
  

## plugins.dive.explore (`EXEC`) {#explore}

Explore the graph starting from an existing vertex


> _input_ `::=` [`nodeId`](.md#nodeid) 
  

> _output_ `::=` [`diffData`](.md#diffdata) 
  

## plugins.dive.show (`EXEC`) {#show}

Show the dependencies of an existing vertex


> _input_ `::=` [`nodeId`](.md#nodeid) 
  

> _output_ `::=` [`diffData`](.md#diffdata) 
  

## plugins.dive.hide (`EXEC`) {#hide}

Hide the dependencies of an existing vertex


> _input_ `::=` [`nodeId`](.md#nodeid) 
  

> _output_ `::=` [`diffData`](.md#diffdata) 
  