-
Notifications
You must be signed in to change notification settings - Fork 92
week 1-7 tasks done #81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
Kreesh Modi (kreeeesh17)
wants to merge
83
commits into
Rippling:main
Choose a base branch
from
kreeeesh17:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
83 commits
Select commit
Hold shift + click to select a range
b29c196
Add hello API endpoint
kreesh09 6481bc1
GET API using hexagonal architecture
kreesh09 3bbcdc4
readme updated
kreeeesh17 22a3450
week2- REST API product model created
kreeeesh17 f3609e4
week2- REST API product model created
kreeeesh17 3f6e12e
readme updated
kreeeesh17 58b4c0a
readme updated
kreeeesh17 e9c17fb
readme updated
kreeeesh17 653a89c
readme updated
kreeeesh17 dc274bf
readme updated
kreeeesh17 47b7ee0
week-3 updated
kreeeesh17 a6f021d
week-3 updated
kreeeesh17 55b9222
week-3 updated
kreeeesh17 a95e8e6
week-3 updated
kreeeesh17 9360c5b
week-3 updated
kreeeesh17 1b66261
week-3 updated
kreeeesh17 7c98808
readme-updated
kreeeesh17 5dd0990
readme-updated
kreeeesh17 7e48682
readme-updated
kreeeesh17 72c453d
week-3 completed
kreeeesh17 075af12
week4- started
kreeeesh17 1a7b211
week2 - Pagination added
kreeeesh17 7ec0fd7
week3 - completed
kreeeesh17 646e039
week4 - updated
kreeeesh17 07efff7
week4 - updated
kreeeesh17 2cbd900
week4 - csv_helper created
kreeeesh17 c516a71
week4 - csv_helper created
kreeeesh17 d7401c9
week4 - models created
kreeeesh17 e322336
week4 - repository created
kreeeesh17 d4540df
week4 - serializers created
kreeeesh17 430e651
week4 - serializers created
kreeeesh17 abc449f
week4 - service updated
kreeeesh17 61a7c9c
week4 - service updated
kreeeesh17 2693623
week4 - service completed
kreeeesh17 a015fa5
week4 - service completed
kreeeesh17 01d0d1e
week4 - pagination completed
kreeeesh17 9d23472
week4 - views completed
kreeeesh17 b0ac418
week4 - views completed
kreeeesh17 ce1256d
week4 - urls completed
kreeeesh17 5c9cd9d
week4 - updated
kreeeesh17 0b3058c
week4 - completed
kreeeesh17 4e223cb
migration script completed
kreeeesh17 ceae03b
migration script completed
kreeeesh17 33815cd
week4 - updated
kreeeesh17 0393964
readme updated
kreeeesh17 d96527d
readme updated
kreeeesh17 4a19e05
week4 - seeding added
kreeeesh17 09e11ff
readme updated
kreeeesh17 c32479d
readme updated
kreeeesh17 d36ceb3
week5 - started
kreeeesh17 40ea1c6
week5 - dashboard created
kreeeesh17 42e2925
week5 - dashboard created
kreeeesh17 65b3e04
week5 - notebook created
kreeeesh17 7b5d733
week5 - completed
kreeeesh17 5c29375
readme updated
kreeeesh17 7fe0051
readme updated
kreeeesh17 d4f68bc
week6 - api key added
kreeeesh17 6523706
week6 - task1 completed
kreeeesh17 5ec5995
readme updated
kreeeesh17 98da952
week6 - schema added
kreeeesh17 f9b9336
week6 - task 2 and 3 completed
kreeeesh17 a576ad7
week6 - task 4 completed
kreeeesh17 5e9a913
readme updated
kreeeesh17 3224195
adv task completed
kreeeesh17 08ea835
week7 - embeddings created
kreeeesh17 a68b3b9
week7 - semantic search created
kreeeesh17 50f166b
week7 - task_2 completed
kreeeesh17 1bae749
week7 - task_3 completed
kreeeesh17 fd71b65
week7 - task_4 completed
kreeeesh17 eea9485
week7 - adv_task completed
kreeeesh17 f798ca2
week7 - adv_tasks completed
kreeeesh17 8b30275
readme updated
kreeeesh17 2361e92
week8 - started
kreeeesh17 2ddb334
week8 - updated
kreeeesh17 e2553a2
week8 - rag pipeline created
kreeeesh17 ad38401
week8 - updated
kreeeesh17 a393e3e
week8 - task 5 completed
kreeeesh17 c3d1d02
week8 - completed
kreeeesh17 724adc7
readme updated
kreeeesh17 b6260b8
week9_10 - task_1 completed
kreeeesh17 6813ee1
week9_10 - agent created
kreeeesh17 75e67ca
week9_10 - eval and langsmith added
kreeeesh17 37fe4fb
week9_10 - readme updated
kreeeesh17 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,6 @@ | ||
| from django.urls import path | ||
| from .views import hello_world | ||
|
|
||
| urlpatterns = [ | ||
| path("hello-world/", hello_world, name="hello-world") | ||
| ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| from django.http import JsonResponse | ||
| from django_app.application.greeter_service import greet | ||
|
|
||
|
|
||
| def hello_world(request): | ||
| # url is /hello-world/?name="Kreesh" it returns Kreesh | ||
| name = request.GET.get("name") | ||
| message = greet(name) | ||
| return JsonResponse({"message": message}) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| # implement port contract using domain logic | ||
| # use case, what should happen when someone calls this feature | ||
|
|
||
| from django_app.domain.greeting import greeting | ||
|
|
||
|
|
||
| def greet(name): | ||
| return greeting(name) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| # domain : core logic | ||
|
|
||
| def greeting(name): | ||
| if name == None: | ||
| name = "" | ||
| name = name.strip() | ||
| if (name == ""): | ||
| return "Hello, World!" | ||
| else: | ||
| return "Hello, "+name+"!" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| # ports : core sys communicates with outside world | ||
|
|
||
| def greet(name): | ||
| return "PORT ONLY - implement in application" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,11 +1,28 @@ | ||
| # django_app/urls.py | ||
|
|
||
| from django.contrib import admin | ||
| from django.urls import path | ||
| from django.http import HttpResponse | ||
| from django.urls import path, include | ||
| from django.http import JsonResponse | ||
|
|
||
|
|
||
| def hello_name(request): | ||
| """ | ||
| A simple view that returns 'Hello, {name}' in JSON format. | ||
| Uses a query parameter named 'name'. | ||
| """ | ||
| # Get 'name' from the query string, default to 'World' if missing | ||
| name = request.GET.get("name", "World") | ||
| return JsonResponse({"message": f"Hello, {name}!"}) | ||
|
|
||
| def hello_world(request): | ||
| return HttpResponse("Hello, world! This is our interneers-lab Django server.") | ||
|
|
||
| urlpatterns = [ | ||
| path('admin/', admin.site.urls), | ||
| path('hello/', hello_world), | ||
| path('hello/', hello_name), | ||
| # Example usage: /hello/?name=Bob | ||
| # returns {"message": "Hello, Bob!"} | ||
| path("", include("django_app.adapters.api.urls")), | ||
| path("week2/", include("week2.urls")), | ||
| path("week3/", include("week3.urls")), | ||
| path("week4/", include("week4.urls")), | ||
|
|
||
| ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,2 +1,20 @@ | ||
| Django==6.0.2 | ||
| pymongo==4.16.0 | ||
| streamlit | ||
| pandas | ||
| numpy | ||
| matplotlib | ||
| scikit-learn | ||
| sentence-transformers | ||
| mongoengine | ||
| python-dotenv | ||
| google-genai | ||
| pydantic | ||
| langchain | ||
| langchain-core | ||
| langchain-community | ||
| langchain-text-splitters | ||
| langchain-chroma | ||
| langsmith | ||
| chromadb | ||
| langchain-google-genai |
Empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| from django.contrib import admin | ||
|
|
||
| # Register your models here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| from django.apps import AppConfig | ||
|
|
||
|
|
||
| class Week2Config(AppConfig): | ||
| name = "week2" |
Empty file.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,24 @@ | ||
| from django.db import models | ||
| from decimal import Decimal | ||
|
|
||
|
|
||
| class Product: | ||
| def __init__(self, id, name, description, category, price, brand, quantity): | ||
| self.id = id | ||
| self.name = name | ||
| self.description = description | ||
| self.category = category | ||
| self.price = Decimal(str(price)) | ||
| self.brand = brand | ||
| self.quantity = quantity | ||
|
|
||
| def to_dict(self): | ||
| return { | ||
| "id": self.id, | ||
| "name": self.name, | ||
| "description": self.description, | ||
| "category": self.category, | ||
| "price": str(self.price), | ||
| "brand": self.brand, | ||
| "quantity": self.quantity, | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| # serializer : | ||
| # 1.> validate incoming API data | ||
| # 2.> converts data into clean python format | ||
|
|
||
|
|
||
| from rest_framework import serializers | ||
|
|
||
|
|
||
| class ProductSerializer(serializers.Serializer): | ||
| # id is generated by store therefore read only therefore user should not send ID | ||
| id = serializers.IntegerField(read_only=True) | ||
| name = serializers.CharField(max_length=200) | ||
| description = serializers.CharField() | ||
| category = serializers.CharField(max_length=100) | ||
| price = serializers.DecimalField(max_digits=10, decimal_places=2) | ||
| # brand is optional even if client sends {brand = ""} then also it will work | ||
| brand = serializers.CharField( | ||
| max_length=100, required=False, allow_blank=True) | ||
| quantity = serializers.IntegerField() | ||
|
|
||
| # custom validations | ||
|
|
||
| # {name = { }} should be rejected | ||
| def validate_name(self, value): | ||
| if not value.strip(): | ||
| raise serializers.ValidationError("Name cannot be empty") | ||
| return value | ||
|
|
||
| def validate_category(self, value): | ||
| if not value.strip(): | ||
| raise serializers.ValidationError("Category cannot be empty.") | ||
| return value | ||
|
|
||
| def validate_price(self, value): | ||
| if value <= 0: | ||
| raise serializers.ValidationError("Price must be greater than 0.") | ||
| return value | ||
|
|
||
| def validate_quantity(self, value): | ||
| if value < 0: | ||
| raise serializers.ValidationError("Quantity cannot be negative.") | ||
| return value | ||
|
|
||
| def validate_brand(self, value): | ||
| if value != "" and not value.strip(): | ||
| raise serializers.ValidationError("Brand cannot be only spaces.") | ||
| return value |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,61 @@ | ||
| # store.py : temporary in-memory database | ||
|
|
||
| from .models import Product | ||
|
|
||
|
|
||
| class ProductStore: | ||
| def __init__(self): | ||
| self.products = {} | ||
| self.next_id = 1 | ||
|
|
||
| # creating new data | ||
|
|
||
| def create(self, data): | ||
| # it is python object not JSON | ||
| product = Product( | ||
| id=self.next_id, | ||
| name=data["name"], | ||
| description=data["description"], | ||
| category=data["category"], | ||
| price=data["price"], | ||
| brand=data.get("brand", ""), | ||
| quantity=data["quantity"], | ||
| ) | ||
| self.products[self.next_id] = product | ||
| self.next_id += 1 | ||
| return product | ||
|
|
||
| # getting existing data | ||
|
|
||
| def get(self, product_id): | ||
| return self.products.get(product_id) | ||
|
|
||
| # listing all data | ||
|
|
||
| def list_all(self): | ||
| return list(self.products.values()) | ||
|
|
||
| # updating data | ||
|
|
||
| def update(self, product_id, data): | ||
| product = self.products.get(product_id) | ||
| if not product: | ||
| return None | ||
| product.name = data["name"] | ||
| product.description = data["description"] | ||
| product.category = data["category"] | ||
| product.price = data["price"] | ||
| product.brand = data.get("brand", "") | ||
| product.quantity = data["quantity"] | ||
| return product | ||
|
|
||
| # deleting data | ||
|
|
||
| def delete(self, product_id): | ||
| if product_id in self.products: | ||
| del self.products[product_id] | ||
| return True | ||
| return False | ||
|
|
||
|
|
||
| product_store = ProductStore() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,3 @@ | ||
| from django.test import TestCase | ||
|
|
||
| # Create your tests here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| from django.urls import path | ||
|
|
||
| from .views import ProductDetailAPIView, ProductListCreateAPIView | ||
|
|
||
| urlpatterns = [ | ||
| path("products/", ProductListCreateAPIView.as_view(), | ||
| name="product-list-create"), | ||
| path("products/<int:product_id>/", | ||
| ProductDetailAPIView.as_view(), name="product-detail"), | ||
| ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,117 @@ | ||
| # view : code that runs when a client hits an endpoint i.e receives http request and decides what to do | ||
| # eg GET/products/, PUT/products/1 | ||
|
|
||
| from rest_framework import status | ||
| from rest_framework.response import Response | ||
| from rest_framework.views import APIView | ||
| from .serializers import ProductSerializer | ||
| from .store import product_store | ||
|
|
||
|
|
||
| class ProductListCreateAPIView(APIView): | ||
| # list all product | ||
| def get(self, request): | ||
| products = product_store.list_all() | ||
| # manual pagination | ||
| page = request.query_params.get("page", "1") | ||
| page_size = request.query_params.get("page_size", "5") | ||
| if not page.isdigit() or not page_size.isdigit(): | ||
| return Response( | ||
| {"error": "page and page_size must be integers"}, status=status.HTTP_400_BAD_REQUEST | ||
| ) | ||
|
|
||
| page = int(page) | ||
| page_size = int(page_size) | ||
| if page <= 0 or page_size <= 0: | ||
| return Response( | ||
| {"error": "page and page_size must be greater than 0"}, status=status.HTTP_400_BAD_REQUEST | ||
| ) | ||
|
|
||
| total_items = len(products) | ||
| start = (page-1)*page_size | ||
| end = start + page_size | ||
| paginated_products = products[start: end] | ||
| product_data = [] | ||
|
|
||
| for product in paginated_products: | ||
| product_data.append(product.to_dict()) | ||
|
|
||
| serializer = ProductSerializer(product_data, many=True) | ||
|
|
||
| if end < total_items: | ||
| next_page = page + 1 | ||
| else: | ||
| next_page = None | ||
|
|
||
| if page > 1: | ||
| previous_page = page-1 | ||
| else: | ||
| previous_page = None | ||
|
|
||
| return Response( | ||
| { | ||
| "count": total_items, | ||
| "page": page, | ||
| "page_size": page_size, | ||
| "next_page": next_page, | ||
| "previous_page": previous_page, | ||
| "results": serializer.data, | ||
| }, status=status.HTTP_200_OK | ||
| ) | ||
|
|
||
| # product_data = [] | ||
| # for product in products: | ||
| # product_data.append(product.to_dict()) | ||
| # # output serialisation | ||
| # # without many = true DRF would expect one product | ||
| # serializer = ProductSerializer(product_data, many=True) | ||
| # # Response(product_data, status=status.HTTP_200_OK) is also valid | ||
| # return Response(serializer.data, status=status.HTTP_200_OK) | ||
|
|
||
| # create a product | ||
|
|
||
| def post(self, request): | ||
| # input serialisation | ||
| serializer = ProductSerializer(data=request.data) | ||
| if serializer.is_valid(): | ||
| product = product_store.create(serializer.validated_data) | ||
| response_serializer = ProductSerializer(product.to_dict()) | ||
| return Response(response_serializer.data, status=status.HTTP_201_CREATED) | ||
| else: | ||
| return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) | ||
|
|
||
|
|
||
| class ProductDetailAPIView(APIView): | ||
| # get specific product | ||
| def get(self, request, product_id): | ||
| product = product_store.get(product_id) | ||
| if not product: | ||
| return Response({"error": "Product not found"}, status=status.HTTP_404_NOT_FOUND) | ||
| else: | ||
| serializer = ProductSerializer(product.to_dict()) | ||
| return Response(serializer.data, status=status.HTTP_200_OK) | ||
|
|
||
| # update one product | ||
| def put(self, request, product_id): | ||
| existing_product = product_store.get(product_id) | ||
| if not existing_product: | ||
| return Response({"error": "Product not found"}, status=status.HTTP_404_NOT_FOUND,) | ||
| else: | ||
| # validate new data first | ||
| serializer = ProductSerializer(data=request.data) | ||
| if (serializer.is_valid()): | ||
| updated_product = product_store.update( | ||
| product_id, serializer.validated_data) | ||
| response_serializer = ProductSerializer( | ||
| updated_product.to_dict()) | ||
| return Response(response_serializer.data, status=status.HTTP_200_OK) | ||
| else: | ||
| return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) | ||
|
|
||
| # delete data | ||
| def delete(self, request, product_id): | ||
| deleted = product_store.delete(product_id) | ||
| if not deleted: | ||
| return Response({"error": "Product not found."}, status=status.HTTP_404_NOT_FOUND,) | ||
| else: | ||
| return Response(status=status.HTTP_204_NO_CONTENT) |
1 change: 1 addition & 0 deletions
1
backend/python/week3/.cph/.db_connection.py_e2e76d89979cabfcefabda2cc23e759c.prob
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| {"name":"Local: db_connection","url":"c:\\Users\\Kreesh\\OneDrive\\Desktop\\Rippling\\interneers-lab\\backend\\python\\week3\\db_connection.py","tests":[{"id":1773758364094,"input":"","output":""}],"interactive":false,"memoryLimit":1024,"timeLimit":3000,"srcPath":"c:\\Users\\Kreesh\\OneDrive\\Desktop\\Rippling\\interneers-lab\\backend\\python\\week3\\db_connection.py","group":"local","local":true} | ||
Empty file.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
IDE debug file accidentally committed to repository
Low Severity
A Competitive Programming Helper (CPH) VS Code extension file was accidentally committed. It contains local filesystem paths (e.g.,
c:\\Users\\Kreesh\\OneDrive\\Desktop\\Rippling\\...) exposing the developer's personal directory structure. This file serves no purpose in the repository and leaks local environment details.Reviewed by Cursor Bugbot for commit 8b30275. Configure here.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bugbot Autofix determined this is a false positive.
The
.cphdebug file and its containingweek3path are not tracked or present in this repository.You can send follow-ups to the cloud agent here.