diff options
Diffstat (limited to 'continuedev')
| -rw-r--r-- | continuedev/src/continuedev/core/autopilot.py | 4 | ||||
| -rw-r--r-- | continuedev/src/continuedev/libs/util/telemetry.py | 4 | ||||
| -rw-r--r-- | continuedev/src/continuedev/server/ide.py | 30 | ||||
| -rw-r--r-- | continuedev/src/continuedev/server/ide_protocol.py | 4 | ||||
| -rw-r--r-- | continuedev/src/continuedev/steps/feedback.py | 5 | 
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}) | 
