summaryrefslogtreecommitdiff
path: root/continuedev
diff options
context:
space:
mode:
Diffstat (limited to 'continuedev')
-rw-r--r--continuedev/src/continuedev/core/autopilot.py4
-rw-r--r--continuedev/src/continuedev/libs/util/telemetry.py4
-rw-r--r--continuedev/src/continuedev/server/ide.py30
-rw-r--r--continuedev/src/continuedev/server/ide_protocol.py4
-rw-r--r--continuedev/src/continuedev/steps/feedback.py5
5 files changed, 40 insertions, 7 deletions
diff --git a/continuedev/src/continuedev/core/autopilot.py b/continuedev/src/continuedev/core/autopilot.py
index 0874bbc5..703a73af 100644
--- a/continuedev/src/continuedev/core/autopilot.py
+++ b/continuedev/src/continuedev/core/autopilot.py
@@ -102,8 +102,8 @@ class Autopilot(ContinueBaseModel):
await self.update_subscribers()
async def _run_singular_step(self, step: "Step", is_future_step: bool = False) -> Coroutine[Observation, None, None]:
- capture_event(
- 'step run', {'step_name': step.name, 'params': step.dict()})
+ capture_event(self.continue_sdk.ide.unique_id, 'step run', {
+ 'step_name': step.name, 'params': step.dict()})
if not is_future_step:
# Check manual edits buffer, clear out if needed by creating a ManualEditStep
diff --git a/continuedev/src/continuedev/libs/util/telemetry.py b/continuedev/src/continuedev/libs/util/telemetry.py
index d6345c25..03ec93c6 100644
--- a/continuedev/src/continuedev/libs/util/telemetry.py
+++ b/continuedev/src/continuedev/libs/util/telemetry.py
@@ -6,7 +6,7 @@ posthog = Posthog('phc_JS6XFROuNbhJtVCEdTSYk6gl5ArRrTNMpCcguAXlSPs',
host='https://app.posthog.com')
-def capture_event(event_name, event_properties):
+def capture_event(unique_id: str, event_name, event_properties):
config = load_config('.continue/config.json')
if config.allow_anonymous_telemetry:
- posthog.capture("not distinct :(", event_name, event_properties)
+ posthog.capture(unique_id, event_name, event_properties)
diff --git a/continuedev/src/continuedev/server/ide.py b/continuedev/src/continuedev/server/ide.py
index f4ea1071..c53149d8 100644
--- a/continuedev/src/continuedev/server/ide.py
+++ b/continuedev/src/continuedev/server/ide.py
@@ -81,9 +81,29 @@ class RunCommandResponse(BaseModel):
output: str
+class UniqueIdResponse(BaseModel):
+ uniqueId: str
+
+
T = TypeVar("T", bound=BaseModel)
+class cached_property_no_none:
+ def __init__(self, func):
+ self.func = func
+
+ def __get__(self, instance, owner):
+ if instance is None:
+ return self
+ value = self.func(instance)
+ if value is not None:
+ setattr(instance, self.func.__name__, value)
+ return value
+
+ def __repr__(self):
+ return f"<cached_property_no_none '{self.func.__name__}'>"
+
+
class IdeProtocolServer(AbstractIdeProtocolServer):
websocket: WebSocket
session_manager: SessionManager
@@ -115,7 +135,7 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
fileEdits = list(
map(lambda d: FileEditWithFullContents.parse_obj(d), data["fileEdits"]))
self.onFileEdits(fileEdits)
- elif message_type in ["highlightedCode", "openFiles", "readFile", "editFile", "workspaceDirectory", "getUserSecret", "runCommand"]:
+ elif message_type in ["highlightedCode", "openFiles", "readFile", "editFile", "workspaceDirectory", "getUserSecret", "runCommand", "uniqueId"]:
self.sub_queue.post(message_type, data)
else:
raise ValueError("Unknown message type", message_type)
@@ -200,10 +220,18 @@ class IdeProtocolServer(AbstractIdeProtocolServer):
resp = await self._send_and_receive_json({}, WorkspaceDirectoryResponse, "workspaceDirectory")
return resp.workspaceDirectory
+ async def get_unique_id(self) -> str:
+ resp = await self._send_and_receive_json({}, UniqueIdResponse, "uniqueId")
+ return resp.uniqueId
+
@cached_property
def workspace_directory(self) -> str:
return asyncio.run(self.getWorkspaceDirectory())
+ @cached_property_no_none
+ def unique_id(self) -> str:
+ return asyncio.run(self.get_unique_id())
+
async def getHighlightedCode(self) -> List[RangeInFile]:
resp = await self._send_and_receive_json({}, HighlightedCodeResponse, "highlightedCode")
return resp.highlightedCode
diff --git a/continuedev/src/continuedev/server/ide_protocol.py b/continuedev/src/continuedev/server/ide_protocol.py
index a937ad75..1d98f4a1 100644
--- a/continuedev/src/continuedev/server/ide_protocol.py
+++ b/continuedev/src/continuedev/server/ide_protocol.py
@@ -94,3 +94,7 @@ class AbstractIdeProtocolServer(ABC):
@abstractproperty
def workspace_directory(self) -> str:
"""Get the workspace directory"""
+
+ @abstractproperty
+ def unique_id(self) -> str:
+ """Get a unique ID for this IDE"""
diff --git a/continuedev/src/continuedev/steps/feedback.py b/continuedev/src/continuedev/steps/feedback.py
index 96081756..6f6a9b15 100644
--- a/continuedev/src/continuedev/steps/feedback.py
+++ b/continuedev/src/continuedev/steps/feedback.py
@@ -10,7 +10,8 @@ class FeedbackStep(Step):
name = "Thanks for your feedback!"
async def describe(self, models: Models):
- return f"`{self.user_input}`\n\nWe'll see your feedback and make improvements as soon as possible. If you'd like to directly email us, you can send an email to [nate@continue.dev](mailto:nate@continue.dev?subject=Feedback%20On%20Continue)."
+ return f"`{self.user_input}`\n\nWe'll see your feedback and make improvements as soon as possible. If you'd like to directly email us, you can contact [nate@continue.dev](mailto:nate@continue.dev?subject=Feedback%20On%20Continue)."
async def run(self, sdk: ContinueSDK):
- capture_event("feedback", {"feedback": self.user_input})
+ capture_event(sdk.ide.unique_id, "feedback",
+ {"feedback": self.user_input})