1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Framework Enrichment
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## What enrichment does
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
After ingestion, navegador's graph contains generic structural nodes: `Function`, `Class`, `File`, `Import`. Enrichment promotes those generic nodes to **semantic types** that reflect how the code is actually used.
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
For example, a Django view function becomes a `View` node. A pytest function becomes a `Test` node. A Flask route decorator triggers creation of a `Route` node with the URL pattern extracted.
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This lets you ask questions that wouldn't be possible from structure alone:
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# without enrichment: grep for "def test_"
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# with enrichment: query the graph by semantic type
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador query "MATCH (t:Test) RETURN t.name, t.file ORDER BY t.file"
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# find all API routes
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador query "MATCH (r:Route) RETURN r.method, r.path, r.handler ORDER BY r.path"
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## How it works
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Enrichment runs as a post-ingest pass. It reads existing nodes and edges, applies framework-specific pattern matching (decorator names, base class names, naming conventions), and:
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
1. Adds semantic labels to matched nodes (e.g., adds `View` label to Django view functions)
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
2. Creates typed edges where the framework implies relationships (e.g., `HANDLES` from a `Route` to its handler function)
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3. Extracts framework-specific properties (e.g., HTTP method and URL pattern from route decorators)
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Enrichment is **non-destructive** — it never removes or modifies existing nodes, only adds labels and edges.
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Supported frameworks
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Framework | Language | Detected patterns | Semantic types added |
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
|---|---|---|---|
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Django | Python | `View` subclasses, `urlpatterns`, `@login_required` | `View`, `Route`, `Model`, `Form`, `Middleware` |
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Flask | Python | `@app.route`, `@blueprint.route`, `MethodView` | `Route`, `View`, `Blueprint` |
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| FastAPI | Python | `@router.get/post/put/delete/patch`, `APIRouter` | `Route`, `Schema`, `Dependency` |
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| pytest | Python | `def test_*`, `@pytest.mark.*`, `conftest.py` | `Test`, `Fixture`, `TestSuite` |
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| SQLAlchemy | Python | `Base` subclasses, `Column`, `relationship()` | `Model`, `Column`, `Relation` |
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Next.js | TypeScript | `pages/`, `app/`, `getServerSideProps` | `Page`, `Route`, `ServerComponent` |
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| Express | JavaScript | `app.get/post/put/delete`, `Router` | `Route`, `Middleware` |
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| NestJS | TypeScript | `@Controller`, `@Injectable`, `@Module` | `Controller`, `Service`, `Module` |
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| **Terraform** | HCL | `main.tf`, `variables.tf`, `outputs.tf` | Cross-file module resolution, provider grouping |
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
| **Chef** | Ruby | `metadata.rb`, `Berksfile` | `chef_recipe`, `chef_resource`, `chef_cookbook`, `chef_include` |
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
!!! note
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Framework detection is automatic when `--framework auto` is used (the default). Navegador inspects imports and decorator patterns to identify which frameworks are present.
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Usage
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Auto-detect and enrich all frameworks
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador enrich ./src
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
This runs after ingestion and enriches everything it can detect automatically.
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Enrich immediately after ingestion
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ingest ./src && navegador enrich ./src
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!
Or use the `--enrich` flag on ingest:
71
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
72
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
73
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador ingest ./src --enrich
74
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
75
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
76
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### Target a specific framework
77
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
78
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
79
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador enrich ./src --framework django
80
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador enrich ./src --framework fastapi
81
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador enrich ./src --framework pytest
82
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
83
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
84
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Valid values: `django`, `flask`, `fastapi`, `pytest`, `sqlalchemy`, `nextjs`, `express`, `nestjs`, `terraform`, `chef`, `auto` (default).
85
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
86
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### JSON output
87
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
88
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
89
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador enrich ./src --json
90
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
91
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
92
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Returns a summary of labels and edges added per framework.
93
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
94
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
---
95
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
96
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
## Querying enriched nodes
97
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
98
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Once enriched, the semantic types are queryable via Cypher:
99
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
100
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
101
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# all FastAPI routes with their HTTP methods
102
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador query "MATCH (r:Route) RETURN r.method, r.path, r.handler ORDER BY r.path"
103
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
104
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# all SQLAlchemy models and their columns
105
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador query "MATCH (m:Model)-[:HAS_COLUMN]->(c:Column) RETURN m.name, c.name, c.type ORDER BY m.name"
106
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
107
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# all pytest tests that reference a specific function
108
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador query "MATCH (t:Test)-[:CALLS]->(f:Function {name: 'process_payment'}) RETURN t.name, t.file"
109
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
110
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# all Django views governed by a rule
111
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
navegador query "MATCH (r:Rule)-[:GOVERNS]->(v:View) RETURN r.name, v.name, v.file"
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!
## Adding custom enrichers
117
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
118
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Enrichers are subclasses of `FrameworkEnricher`. Create one to add support for an internal framework or library.
119
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
120
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### 1. Create the enricher
121
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
122
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
123
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# myproject/enrichers/celery.py
124
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.enrichment.base import FrameworkEnricher, EnrichmentResult
125
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.graph import GraphStore
126
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
127
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
class CeleryEnricher(FrameworkEnricher):
128
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
name = "celery"
129
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
130
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def detect(self, store: GraphStore) -> bool:
131
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"""Return True if this framework is present in the graph."""
132
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
results = store.query(
133
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"MATCH (i:Import {name: 'celery'}) RETURN count(i) AS n"
134
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
135
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return results[0]["n"] > 0
136
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
137
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
def enrich(self, store: GraphStore) -> EnrichmentResult:
138
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"""Add semantic labels and edges for Celery tasks."""
139
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# Find functions decorated with @shared_task or @app.task
140
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
tasks = store.query(
141
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"MATCH (d:Decorator)-[:DECORATES]->(f:Function) "
142
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"WHERE d.name IN ['shared_task', 'task'] "
143
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"RETURN f.id, f.name"
144
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
145
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
labels_added = 0
146
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
for row in tasks:
147
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store.query(
148
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"MATCH (f:Function) WHERE id(f) = $id "
149
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"SET f:Task",
150
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
params={"id": row["f.id"]}
151
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
152
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
labels_added += 1
153
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
154
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
return EnrichmentResult(labels_added=labels_added, edges_added=0)
155
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
156
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
157
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### 2. Register the enricher
158
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
159
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
160
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
# myproject/enrichers/__init__.py
161
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.enrichment.registry import register_enricher
162
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from .celery import CeleryEnricher
163
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
164
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
register_enricher(CeleryEnricher())
165
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
166
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
167
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
### 3. Load at startup
168
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
169
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Import the registration module before running enrichment. In a CLI wrapper or agent hook:
170
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
171
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```python
172
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import myproject.enrichers # registers the enricher
173
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.enrichment import run_enrichment
174
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
from navegador.graph import GraphStore
175
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
176
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
store = GraphStore.sqlite(".navegador/navegador.db")
177
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
result = run_enrichment(store, framework="celery")
178
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
print(f"Added {result.labels_added} labels")
179
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
180
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
181
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
Or pass the module path to the CLI via `NAVEGADOR_ENRICHERS`:
182
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
183
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```bash
184
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
NAVEGADOR_ENRICHERS=myproject.enrichers navegador enrich ./src --framework celery
185
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
```
186
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!