1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Graph API
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.graph import GraphStore
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.context import ContextLoader, ContextBundle, ContextNode
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## GraphStore
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The database abstraction layer. Both SQLite and Redis backends implement this interface.
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class GraphStore:
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@classmethod
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def sqlite(cls, path: str | Path = "navegador.db") -> "GraphStore": ...
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@classmethod
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def redis(cls, url: str = "redis://localhost:6379") -> "GraphStore": ...
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def query(
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
cypher: str,
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
params: dict | None = None,
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> list[dict]: ...
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def create_node(
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
label: str,
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties: dict,
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> str: ... # returns node ID
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def merge_node(
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
label: str,
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
match_properties: dict,
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
set_properties: dict | None = None,
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> str: ... # upsert by match_properties, returns node ID
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def create_edge(
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from_id: str,
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to_id: str,
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
edge_type: str,
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties: dict | None = None,
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> None: ...
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def merge_edge(
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from_label: str,
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from_match: dict,
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to_label: str,
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to_match: dict,
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
edge_type: str,
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties: dict | None = None,
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> None: ...
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def clear(self) -> None: ...
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def close(self) -> None: ...
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def export_jsonl(self, fp: IO[str]) -> None: ...
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"""Write all nodes and edges to a JSONL stream."""
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def import_jsonl(self, fp: IO[str]) -> None: ...
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"""Read nodes and edges from a JSONL stream and merge into the graph."""
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
69
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
70
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Usage
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# SQLite (local dev)
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store = GraphStore.sqlite(".navegador/navegador.db")
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Redis (production)
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store = GraphStore.redis("redis://localhost:6379")
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# raw Cypher query
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
results = store.query(
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"MATCH (f:Function {name: $name}) RETURN f",
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
params={"name": "validate_token"}
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# create a node
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
node_id = store.create_node("Concept", {
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"name": "Idempotency",
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"description": "Operations safe to retry"
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
})
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# upsert a node (match by name, update description)
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
node_id = store.merge_node(
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"Concept",
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
match_properties={"name": "Idempotency"},
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
set_properties={"description": "Updated description"}
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# create an edge
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store.create_edge(from_id, to_id, "ANNOTATES")
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# wipe the graph
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store.clear()
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Context manager
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
`GraphStore` implements the context manager protocol:
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
with GraphStore.sqlite(".navegador/navegador.db") as store:
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
results = store.query("MATCH (n) RETURN count(n) AS total")
112
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
113
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
114
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
115
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
116
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## ContextLoader
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Builds structured context bundles from graph queries. Each method corresponds to a CLI command.
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class ContextLoader:
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def __init__(self, store: GraphStore) -> None: ...
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def load_file(self, path: str) -> ContextBundle: ...
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def load_function(
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: str,
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*,
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file: str = "",
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
depth: int = 1,
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> ContextBundle: ...
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def load_class(
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: str,
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*,
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file: str = "",
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> ContextBundle: ...
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def explain(
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: str,
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*,
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
file: str = "",
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> ContextBundle: ...
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def load_concept(self, name: str) -> ContextBundle: ...
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def load_domain(self, name: str) -> ContextBundle: ...
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def search(
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
query: str,
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*,
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
all_layers: bool = False,
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
docs_only: bool = False,
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
limit: int = 20,
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> list[ContextNode]: ...
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def search_by_docstring(
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
query: str,
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
*,
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
limit: int = 20,
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> list[ContextNode]: ...
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def decorated_by(
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
self,
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
decorator: str,
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
) -> list[ContextNode]: ...
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Usage
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store = GraphStore.sqlite(".navegador/navegador.db")
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
loader = ContextLoader(store)
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# file context
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.load_file("src/auth/service.py")
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# function with 2-hop call graph
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.load_function("validate_token", depth=2)
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# class hierarchy
187
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.load_class("PaymentProcessor", file="src/payments/processor.py")
188
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
189
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# universal explain
190
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.explain("AuthService")
191
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
192
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# concept with annotated code
193
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.load_concept("Idempotency")
194
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
195
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# domain overview
196
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.load_domain("Payments")
197
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
198
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# search
199
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
nodes = loader.search("rate limit", all_layers=True, limit=10)
200
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
201
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# all @login_required functions
202
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
nodes = loader.decorated_by("login_required")
203
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
204
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
205
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
206
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
207
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## ContextBundle
208
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
209
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The structured result type returned by `ContextLoader` methods.
210
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
211
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
212
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@dataclass
213
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class ContextBundle:
214
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
root: ContextNode
215
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
nodes: list[ContextNode]
216
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
edges: list[ContextEdge]
217
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
metadata: dict
218
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
219
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def to_json(self) -> str: ...
220
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def to_markdown(self) -> str: ...
221
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def to_dict(self) -> dict: ...
222
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
223
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
224
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
225
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
226
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## ContextNode
227
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
228
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
A single node in a context bundle.
229
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
230
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
231
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@dataclass
232
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class ContextNode:
233
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
id: str
234
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
label: str # e.g. "Function", "Concept"
235
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name: str
236
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties: dict # all node properties
237
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
layer: str # "code" or "knowledge"
238
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
239
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
240
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
241
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
242
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## ContextEdge
243
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
244
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
245
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
@dataclass
246
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class ContextEdge:
247
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from_id: str
248
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
to_id: str
249
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
edge_type: str # e.g. "CALLS", "ANNOTATES"
250
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
properties: dict
251
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
252
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
253
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
254
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
255
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Schema migrations
256
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
257
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
258
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.graph import migrate
259
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
260
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store = GraphStore.sqlite(".navegador/navegador.db")
261
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
migrate(store) # applies any pending schema migrations; idempotent
262
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
263
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
264
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
The `migrate()` function is safe to call on every startup. It compares the stored migration version against the current schema and applies only missing migrations.
265
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
266
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
267
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
268
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Formatting output
269
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
270
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
271
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
bundle = loader.load_function("validate_token")
272
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
273
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# JSON string
274
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(bundle.to_json())
275
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
276
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Markdown string (for agent consumption)
277
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(bundle.to_markdown())
278
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
279
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Python dict (for further processing)
280
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
data = bundle.to_dict()
281
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
282
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!