)]}'
{
  "log": [
    {
      "commit": "7795c7fd6b8940841c4f95199684c98c54c66762",
      "tree": "3da8a36109fd578d588bb88a0b2dbc184ca9c2d4",
      "parents": [
        "f5792baf84e064cc7b2d4c6397bc6ae177f8035a"
      ],
      "author": {
        "name": "Antonin LEPOLARD",
        "email": "ant@atolcd.com",
        "time": "Mon Mar 23 14:04:52 2026 +0100"
      },
      "committer": {
        "name": "Antonin LEPOLARD",
        "email": "ant@atolcd.com",
        "time": "Wed Apr 01 17:27:54 2026 +0200"
      },
      "message": "Bump version to 3.13.0\n\nConsume most recent 3.13.5 plugin API\n\nChange-Id: I0b4c597e23aa1a32d342ebf99e7d9ca7e64b3830\n"
    },
    {
      "commit": "f5792baf84e064cc7b2d4c6397bc6ae177f8035a",
      "tree": "8814d979b268761a0ebc159f1b1de12141cb10e2",
      "parents": [
        "d6bdde50af78e0d45af4b891f0883ce8b9c41585"
      ],
      "author": {
        "name": "Ewout Maertens",
        "email": "ewoutm@arista.com",
        "time": "Fri Sep 12 15:50:08 2025 +1000"
      },
      "committer": {
        "name": "Ewout Maertens",
        "email": "ewoutm@arista.com",
        "time": "Fri Sep 12 16:05:32 2025 +1000"
      },
      "message": "chatgpt: clean up temporary files during uploadRepoFiles\n\nWe noticed our gerrit instance running out of disk space and found a\nseries of json files generated under `/tmp`. The structure looked like:\n/tmp/\u003crepository_name\u003e\u003chash\u003e.json\n\nWe notice these temp files would get generated upon a CR change-merged\nevent:\n\"\u003ctimestamp \u0026 user\u003e INFO  com.googlesource.gerrit.plugins.aicodereview\n.listener.GerritListener : Processing event: com.google.gerrit.server\n.events.ChangeMergedEvent@commit-hash\"\n\nThe timestamp of this event would always match the timestamp of the\njson file created under `tmp`. These files also only get created for\nCRs merged in a repo where ai-code-review is created.\n\nWe pin-pointed the issue to createTempFileWithContent in this plugin.\nThere is a deleteOnExit() clause for this, but it does not seem to\ndelete the files in all situations.\n\nSome of these files are quite large, as they contain the whole content\nof a CR.\n\nThis change is a proposed fix for deleting a file in a finally clause\nin case it has not been removed yet and still exists.\n\nChange-Id: I1fb62f95c20b509cc756a0702d112e5eb44cc20a\n"
    },
    {
      "commit": "d6bdde50af78e0d45af4b891f0883ce8b9c41585",
      "tree": "5ed2addd94d818029a841ff567a553ac774fefb4",
      "parents": [
        "3c578d660f5da15bba0308869d562f41d12684d9"
      ],
      "author": {
        "name": "Rikard Almgren",
        "email": "rikardal@axis.com",
        "time": "Tue Jul 15 13:51:11 2025 +0200"
      },
      "committer": {
        "name": "Rikard Almgren",
        "email": "rikardal@axis.com",
        "time": "Tue Jul 22 12:10:45 2025 +0200"
      },
      "message": "Add aiUsePositiveSeed configuration option\n\nSome models f.i. Mistral requires a positive random_seed.\nhttps://docs.mistral.ai/api/#tag/chat/operation/chat_completion_v1_chat_completions_post\n\nChange-Id: I8847ac70aede4a7698df999befc8eb32980afabd\n"
    },
    {
      "commit": "3c578d660f5da15bba0308869d562f41d12684d9",
      "tree": "d2872575d070530d4a3b7951d8f23d1523153266",
      "parents": [
        "48a40a988b6c81ebe605c7271c91faf05aabda28"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Tue Apr 29 12:16:51 2025 +0100"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Tue Apr 29 12:16:51 2025 +0100"
      },
      "message": "Move master onto gerrit-3.12\n\nConsume most recent 3.12-rc4 plugin API.\nBump version forward.\nCreated stable-3.11 for stable release work.\n\nChange-Id: I8e71fc715650ec1dca69ccf704c5d32ed376794c\n"
    },
    {
      "commit": "48a40a988b6c81ebe605c7271c91faf05aabda28",
      "tree": "44115289c33d77db4c73578ca8279365d3ad7104",
      "parents": [
        "3e070970621a771427775d54916430ff917f3c69"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Mon Nov 18 18:12:09 2024 +0000"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Mon Nov 18 18:25:26 2024 +0000"
      },
      "message": "Adding google-formatter maven plugin support.\n\nFormatting the files using the fmt-maven-plugin which uses\nthe google-format rules by default.  It will update your source\nfiles during the process sources stage.\n\nChange-Id: I1e2a8c58b5e4d47b211e5ef7be1675ada433af84\n"
    },
    {
      "commit": "3e070970621a771427775d54916430ff917f3c69",
      "tree": "cb5bda16153f8c18935b27a3b3399762beca86c4",
      "parents": [
        "35923aa6df75e2e720a03a3855594bd0a35b0ac5"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Thu Nov 14 17:34:57 2024 +0000"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Mon Nov 18 14:55:54 2024 +0000"
      },
      "message": "Fix guice binding issue on GerritClientPatchSet\n\nFix confusion which happened due to concrete class and interface\nhaving the identical naming, which meant the refactor operation\nchanged some wrong fields.\n\nUpdated so that the interface has a clear name, which fixes the\nbinding issue.\n\nChange-Id: Id1bd9c06b104b73e4bbb1636d9669e809c94cf3c\n"
    },
    {
      "commit": "35923aa6df75e2e720a03a3855594bd0a35b0ac5",
      "tree": "b9e76c00f3fdfb1c138a8b290a37c312326a7024",
      "parents": [
        "01be179dd46f07802bb9fb5792c2cd54e7e26b60"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Fri Nov 08 19:41:44 2024 +0000"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Fri Nov 15 19:48:51 2024 +0000"
      },
      "message": "Completing refactor / rename on stateless ChatGPT items.\n\nGenerification of more of the model items to OpenAI specification.\nUpdate of the logging output to remove rename chatGPT references\nwhen it could be any model, to prefer the OpenAI specification.\n\nOllama OpenAI Spec:\nhttps://github.com/ollama/ollama/blob/main/docs/openai.md#v1chatcompletions\n\n\n- Stateless APIs and logging should now be fully updated.\n- Stateful APIs are still chatGPT specific.\n\nChange-Id: If5ab87d10fe7a86606d8de716289933047e59bae\n"
    },
    {
      "commit": "01be179dd46f07802bb9fb5792c2cd54e7e26b60",
      "tree": "25200b0451380f25e1c281a0075817921f2e2bdb",
      "parents": [
        "a7cb6766385de0fbe8a6cf38d6e9c69db9594a7c"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Wed Oct 30 19:00:47 2024 +0000"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Tue Nov 05 22:31:58 2024 +0000"
      },
      "message": "Moving master to build JDK21 by default.\n\nDependencies updated to allow JDK21 build.\nOnce tested, branch can be created for stable-3.11, and master can move forward.\n\nChange-Id: Ia50a852d5586abc46800d476a50602e114d94076\n"
    },
    {
      "commit": "a7cb6766385de0fbe8a6cf38d6e9c69db9594a7c",
      "tree": "71c356efd0cf2b87f75041973e218d2af4f04d4c",
      "parents": [
        "fa30a85d426a5e220c669eb5abbdf0d30765fb65",
        "fc789491fb11984eb2cc1c58357d5b6a198588d7"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@gmail.com",
        "time": "Sun Nov 03 22:06:42 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sun Nov 03 22:06:42 2024 +0000"
      },
      "message": "Merge changes I2c8adb06,I43613aa6,I3dde13c0\n\n* changes:\n  Use jgit @NonNull annotation\n  Add license headers\n  Format source code using google-java-format 1.24.0\n"
    },
    {
      "commit": "fc789491fb11984eb2cc1c58357d5b6a198588d7",
      "tree": "769e1dbe212825dc77e3c92870dedbd60a9f8a2e",
      "parents": [
        "9cba04942764eb68aa4359492ec6c52a8a06c16b"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Oct 31 00:15:49 2024 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Sun Nov 03 23:03:35 2024 +0100"
      },
      "message": "Use jgit @NonNull annotation\n\nUse the same null analysis annotations which are used in gerrit and\njgit.\n\nChange-Id: I2c8adb065793f27d9d3c144889e19ff8178e438a\n"
    },
    {
      "commit": "9cba04942764eb68aa4359492ec6c52a8a06c16b",
      "tree": "b60131d483b00bd2bc13afbe3bca0517ee0f5030",
      "parents": [
        "2ce259dde6d4fd2f3d19d10727c8cd76655a554f"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Sun Nov 03 23:03:05 2024 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Sun Nov 03 23:03:05 2024 +0100"
      },
      "message": "Add license headers\n\nChange-Id: I43613aa6ad6082624459b164a617fb2147041239\n"
    },
    {
      "commit": "fa30a85d426a5e220c669eb5abbdf0d30765fb65",
      "tree": "1ce9b5138f2caa698d9998c5a08de552f923ac8c",
      "parents": [
        "a755820030e8880518fe588e96f40b7591a7f5b4",
        "784959857c60d9ef23a3e69e0c2de7cc7617070c"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Thu Oct 31 16:20:29 2024 +0000"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Thu Oct 31 16:20:29 2024 +0000"
      },
      "message": "Merge remote-tracking branch \u0027origin/stable-3.8\u0027\n\nChange-Id: I4cd2adb1dddb262d9bace7236d8a5d5a8d2fce02\n"
    },
    {
      "commit": "784959857c60d9ef23a3e69e0c2de7cc7617070c",
      "tree": "1ce9b5138f2caa698d9998c5a08de552f923ac8c",
      "parents": [
        "a755820030e8880518fe588e96f40b7591a7f5b4"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Wed Oct 30 19:19:38 2024 +0000"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Wed Oct 30 23:42:56 2024 +0000"
      },
      "message": "Bump dependencies forward.\n\nKeep a stable-3.8 JDK17 build, which will work on all JDK17\ngerrit versions above this.  But we can also create additional\nversions that are pluginAPI specific if required.\n\nA new stable-3.11 branch will be created for the JDK21 + work.\n\nChange-Id: I90b9a8e7e856ca9c525dbb4e1d3b092fb4aa2e81\n"
    },
    {
      "commit": "2ce259dde6d4fd2f3d19d10727c8cd76655a554f",
      "tree": "eee1ebf1ec211cd47ee5e18c18e49074213e242e",
      "parents": [
        "a755820030e8880518fe588e96f40b7591a7f5b4"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Oct 30 21:49:57 2024 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed Oct 30 23:19:43 2024 +0100"
      },
      "message": "Format source code using google-java-format 1.24.0\n\nVersion 1.7 which was used in Gerrit core doesn\u0027t support Java 21\nfeatures used in this plugin. Change updating google-java-format in\nGerrit core is I8607721e9e83519fa2bab415462ace5255032068.\n\nChange-Id: I3dde13c0274027cb05c963f1172e93f4033bba51\n"
    },
    {
      "commit": "a755820030e8880518fe588e96f40b7591a7f5b4",
      "tree": "810cbaa2db01f75f3b04183be6b3009fb044d9a9",
      "parents": [
        "7ba7de3bae8c69a74b2284f7e1354bd2fdc17f70"
      ],
      "author": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Tue Oct 08 21:12:46 2024 +0100"
      },
      "committer": {
        "name": "Trevor Getty",
        "email": "trevor.getty@wandisco.com",
        "time": "Tue Oct 29 21:12:19 2024 +0000"
      },
      "message": "Extension of ChatGPT only plugin to support private ai services.\n\n- Creation of ai-code-review plugin.\n - Initial changes to this project will include renaming of the plugin\nto ai-code-review, along with its assets.\n - The new plugin version resides in plugins/ai-code-review and was\n performed to allow Open Source contributions, without impacting chatGPT specific development.\n - Items that overlap will be renamed from chatGPTXXX to chatAIXXX.\nConfiguration will be renamed where it can be from gptModel / gptToken to aiToken etc. as it is applicable to more than just chatGPT.\n - Creation of new aiType member to allow the switching between different\nauthorization headers, and API endpoints easily.\n\n- Adding plugin-repo-mvn jenkins build file, so it should build\n master for the submitted changes, and a verifier branch for code reviews.\n\nTesting:\naiType\u003dollama\naiModel\u003dqwen2.5-coder\n\nOLLAMA working with several models, current suggestion is\nto use the qwen-coder model ( note use the 7b model as the\n1.5b currently doesn\u0027t correctly use tools support ).\nThe current prereq for the models is that\nthey support \"tools\" so that the format_replies tool call\ncan be made which returns the replies object in JSON matching\nthe supplied schema, without this it would require much more\nparsing to change the response markdown-\u003ejson on the response.\n\n- Added a new quick start, for Ollama using a docker setup.  This will provide a local AI service instance using docker, running with the correct example model to begin testing.\n\n- Added tests covering new configuration elements, and exposed some\n of the keys to the mocking to ensure they use the same altered names.\n\nTODO:\n - Check what changes are required for Stateful OLLAMA reviews,\n it would appear the /assistants/v2 api from chatGPT is in beta\nso this area will need reworked as its not openAI compliant yet.\n - AzureOpenAI has not been tested - WIP.\n   - Auth header coded - using api-key.\n   - API item called: apiversion needs to be passed as part of the endpoint string currently but should be a seperate configuration option and added as a query param.  e.g. https://{endpoint}/openai/deployments/{deployment-id}/completions?api-version\u003d2024-06-01\n\nChange-Id: Ic3ddeff429fcb4786eea1ed346eafd76dd6d0976"
    },
    {
      "commit": "7ba7de3bae8c69a74b2284f7e1354bd2fdc17f70",
      "tree": "215ff686431ff6c79d0fb70c25a14a6d05a4c1cf",
      "parents": [
        "a54570998d26dcbd4b43f371f81854b5cf56efe0"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jul 01 11:01:40 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Aug 08 08:55:41 2024 +0200"
      },
      "message": "Refactor patch processing functions\n\nMoved functions for processing formatted patches from\nGerritClientPatchSetStateful to a newly created\nGerritClientPatchSetHelper class. This change improves code segregation\nand facilitates future reuse of these functions.\n\nChange-Id: I91fc56b11ad9a4879002cdd3b6ebcadcda026f21\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "a54570998d26dcbd4b43f371f81854b5cf56efe0",
      "tree": "ac8c3f649057e8b2ec332edc0d8e9a5804a1498b",
      "parents": [
        "b6e16fed4b3ca3821f1d16d6f39859f53f321a60"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 28 15:56:47 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Aug 08 08:55:41 2024 +0200"
      },
      "message": "Refactor code for prompt specialization\n\nThe ChatGptPromptStateful class has been restructured into an abstract\nbase class, ChatGptPromptStatefulBase, with two specialized subclasses:\nChatGptPromptStatefulReview for Patch Set review instructions, and\nChatGptPromptStatefulRequests for handling replies to comment requests.\nFurthermore, general stateful prompt items remain in\n`promptsStateful.json`, while specialized resources for reviews and\nrequests have been segregated into `promptsStatefulReview.json` and\n`promptsStatefulRequests.json` respectively.\nThis restructuring enhances code maintainability and prepares for\nfurther prompt specialization.\n\nChange-Id: I5d92d403a59df712acb74a534f230ce04e33ddba\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "b6e16fed4b3ca3821f1d16d6f39859f53f321a60",
      "tree": "dd1aecc3163c28f42434ff7e8774c1905ccf063f",
      "parents": [
        "12afc4241b2e66b08dd2c3ee679ab0ed7ecfa1b4"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 28 10:58:09 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Aug 08 08:55:41 2024 +0200"
      },
      "message": "Rename prompt-related entities\n\nDue to the distinction between \"system\" and \"user\" prompts being\nrelevant only in stateless mode, and misleading in some entities,\ncertain occurrences of the term \"UserPrompt\" have been renamed.\nThe term \"UserPrompt\" remains unchanged where it specifically refers to\nthe stateless user prompt. Where entities include entirely data,\n\"UserPrompt\" has been renamed to \"DataPrompt\". In all other instances,\nit has been simplified to \"Prompt\".\n\nChange-Id: I185d028e8ba5e993f94eb79b23c3ef163dfaf2c9\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "12afc4241b2e66b08dd2c3ee679ab0ed7ecfa1b4",
      "tree": "f093ef85ea21058dcc5e1a9743a332fa7ec5a220",
      "parents": [
        "361ddf5d08c19cf856e664c71f33517a075787a4"
      ],
      "author": {
        "name": "Michael Trimarchi",
        "email": "michael@amarulasolutions.com",
        "time": "Wed Aug 07 17:58:50 2024 +0200"
      },
      "committer": {
        "name": "Michael Trimarchi",
        "email": "michael@amarulasolutions.com",
        "time": "Wed Aug 07 17:58:50 2024 +0200"
      },
      "message": ".github: Update github action to java 17\n\nChange-Id: I92d97de354fc72421a9909af270a876f1151a8db\nSigned-off-by: Michael Trimarchi \u003cmichael@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "361ddf5d08c19cf856e664c71f33517a075787a4",
      "tree": "970e6f36215d93ae69acb3560cc400a304579145",
      "parents": [
        "df0b0f23a5110783bd162f19c5138efd59fe7846"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 21 15:10:17 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Bump to version 3.0.0\n\nMajor Updates:\n- Introduced Stateful mode: the plugin now supports stateful\ninteractions with ChatGPT alongside the previous Stateless mode,\nenhancing response quality and context while reducing payload.\n- Codebase Upload: In Stateful mode, the entire codebase from the git\nproject related to the Change Sets is uploaded, enabling ChatGPT to\nprovide fully contextual responses, even for code not in the Change Set.\n- Added support for GPT-4o models.\n- Refactoring: Integrated with new Gerrit APIs for improved performance.\n- Ensured compatibility with Gerrit v3.10.0-rc3.\n\nBehavioral Changes:\n- Change Set scores are no longer automatically reset after each ChatGPT\nreply.\n- Change Set scores are reset to zero if ChatGPT fails to provide review\ncomments adhering to set directives.\n\nMinor Updates:\n- Updated default ChatGPT model to `gpt-4o`.\n- Updated ChatGPT OpenAI assistant version to v2.\n- Introduced the `/configure` command to enable dynamic configuration\nvia command, specifically for testing and debugging purposes.\n- Added `enableMessageDebugging` configuration setting to enable the use\nof 1) the `/configure` command, and 2) the `--debug` option of the\n`/review` command.\n- System messages from the ChatGPT user now start with the prefix\n\"SYSTEM MESSAGE:\".\n\nFixes:\n- Resolved an OutOfBound line number error.\n- Corrected erroneous processing of commands not intended for ChatGPT.\n- Addressed issues with replies quoting messages to ChatGPT.\n\nChange-Id: I97aa93799fa931fa8ab243f907469454a3e9e173\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "df0b0f23a5110783bd162f19c5138efd59fe7846",
      "tree": "5b7be3eada83e03655c7eab17a702589f2229335",
      "parents": [
        "03911a3789dfe677d7ab254fbf9b20ab359a0dbe"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 16:25:56 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Update README for version 3 features\n\nThe README file has been refreshed to include all new features\nintroduced in version 3, with a particular emphasis on detailing the\ndifferences between stateless and stateful modes.\n\nChange-Id: I97be19f876746457499e6286d25abf54dced1661\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "03911a3789dfe677d7ab254fbf9b20ab359a0dbe",
      "tree": "7ade17884d8157ec2254e6a703366277ec1d28fd",
      "parents": [
        "a3cabb044fbb19b57f73f4be2341d702e5fdbd39"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 26 16:27:10 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Update ChatGPT default model\n\nThe default ChatGPT model is now set to the latest release, `gpt-4o`.\n\nChange-Id: I1e8ab469c3c72595570863491fda1267d7cec200\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "a3cabb044fbb19b57f73f4be2341d702e5fdbd39",
      "tree": "4a3247bc00945e6ebf5a67468a8ae785e1f3195a",
      "parents": [
        "649c3b26cdca3ca391d67a2f9046825e59bef1b2"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 26 10:42:11 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Fix: ignore replies quoting messages to ChatGPT\n\nThis fix addresses an issue where messages quoting another message\ndirected to ChatGPT were incorrectly treated as if they were addressed\nthemselves to ChatGPT.\n\nChange-Id: I021ea7e90b26eba74831c487761048102ecab96c\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "649c3b26cdca3ca391d67a2f9046825e59bef1b2",
      "tree": "11e85f4d936a1f6e162eaf6c0134c1b1cf19d43b",
      "parents": [
        "12d2244136734e226e637034cbfed426190c5f58"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 26 10:25:54 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Fix: processed commands not intended for ChatGPT\n\nResolved an issue where commands were being processed even when not\ndirected to ChatGPT, such as when mentioned in a comment to another\nuser.\n\nChange-Id: Id3746686d9b2cda62c1f3a59d3143514c30538a4\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "12d2244136734e226e637034cbfed426190c5f58",
      "tree": "f76d0cfe1f9cde3c876d39add6e668946faa9af0",
      "parents": [
        "f8c0c4d7b26d0a931490ede97a867b25113468d3"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 25 17:36:40 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Refactor access to dynamic configuration\n\nDirect access to dynamic configuration through the plugin data handler\nhas been replaced with access via DynamicConfiguration to enhance\nresponsibility segregation.\n\nChange-Id: I2776b9e762e434fadfaa0f5eb1423717d5eae02d\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "f8c0c4d7b26d0a931490ede97a867b25113468d3",
      "tree": "31c66b5fb589bf6243cf45d94e24118f869a37ac",
      "parents": [
        "2afad231055350f774895ad7cab88e2e50941749"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 25 17:13:45 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Optimize assistant reuse by properties\n\nThis commit implements a new approach to store ChatGPT assistant IDs,\nachieving several goals:\n- Fixes the issue where existing assistants retain old settings after a\nconfiguration change.\n- Addresses a similar issue where dynamically changed settings via the\n`/configure` command were not updated in existing assistants.\n- Reduces the creation of new assistants by reusing those with identical\nproperties.\n\nA hash key is now calculated based on the assistant\u0027s configurable\nproperties, and this key is used to store and retrieve the ChatGPT\nassistant ID.\n\nChange-Id: I226e28b7c24da12c05b8d8554c04bc0a79d99ae8\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "2afad231055350f774895ad7cab88e2e50941749",
      "tree": "a21e8cfd0c9492b61df44fd8d302fcb4b917e078",
      "parents": [
        "a270464536c460cbe8d42c54115f8346fd4fa3f9"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 25 12:20:19 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Code style update: convert enums to CamelCase\n\nThis change updates enum names from UPPER_SNAKE_CASE to CamelCase to\nalign with best practices in code styling.\n\nChange-Id: Ie30e8531cebabcdfb8594ea273b173dea1b59225\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "a270464536c460cbe8d42c54115f8346fd4fa3f9",
      "tree": "92bad8abf4238195ea5237cf84ade8ae27a92644",
      "parents": [
        "5d7c20aa88eb87e4ca992754b4ba9ed97f1af0d5"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 25 11:57:29 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:42 2024 +0200"
      },
      "message": "Retry requests when ChatGPT returns empty data\n\nOccasionally, in stateful mode, ChatGPT may return an empty data field\nwhile fetching run steps. This change implements a mechanism to resubmit\nthe request after a set interval and for a specified number of attempts.\n\nChange-Id: Ide011146f4d02787b89ea0f21fe647b6dd9d701a\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "5d7c20aa88eb87e4ca992754b4ba9ed97f1af0d5",
      "tree": "87b9075e7eff266a3e996b6bf58dba5243bde8d0",
      "parents": [
        "2b584b63eb3a995ff5eee698e5682eb5cdeb8117"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 24 10:02:18 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jul 05 16:18:09 2024 +0200"
      },
      "message": "Automatically refresh the codebase upon merging\n\nEach time changes are merged in Gerrit, the updated codebase is uploaded\nto ChatGPT to be accessible for new assistants.\n\nChange-Id: I968c9cf2f4aad070e2184b1d9222aca33f1bed59\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "2b584b63eb3a995ff5eee698e5682eb5cdeb8117",
      "tree": "2fdac9d0ef880cca4ef97bc2d3d346536bf12669",
      "parents": [
        "f07b6b726c512d304d76aab514f390b4023ad294"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 21 17:21:33 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Moved `interfaces` package to main directory level\n\nThe `interfaces` package has been moved up one level from the `mode`\npackage to the main directory. This change facilitates its broader use\nacross other packages beyond `mode`.\n\nChange-Id: I5a0ae81581fde9aeea3995ae9fc504e5330e8e26\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "f07b6b726c512d304d76aab514f390b4023ad294",
      "tree": "279b8af327f78f4faaa76250a4eaf32962323dd1",
      "parents": [
        "2b7af112a722b24c434424ae84af217837311b8f"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 20 12:18:02 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Fix errors with slashes in project names\n\nIssues has been fixed where the creation of storage and temporary files\nfor project-scoped persistent data would fail if the project name\nincluded slashes.\n\nChange-Id: Ic5b1e553ef97d768ba82af7ef9ebad73ea363599\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "2b7af112a722b24c434424ae84af217837311b8f",
      "tree": "3fdc756b02de22ea253c6470850764a3d1629f07",
      "parents": [
        "fc37ede05b5bdabcc8326f39c79b7db92fd8ac04"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 19 16:15:31 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Modified behavior: score persists through replies\n\nComment requests to ChatGPT and their replies may not always pertain to\nvoting. As a result, the score is no longer automatically cleared after\neach reply from ChatGPT. Instead, it will only be reset if the ChatGPT\nresponse includes a `score` field.\n\nChange-Id: I9b1a571726f3e066c4ad7f010d7c9b3ea82a27a2\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "fc37ede05b5bdabcc8326f39c79b7db92fd8ac04",
      "tree": "21050a7fd656670ded06226babc358abd4253156",
      "parents": [
        "a138e9c228d36e7b74b14c9eab5ae18740be85a7"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 19 15:37:28 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Apply file extension filter to git repo files\n\nTo prevent unnecessary increases in the size of git repo files uploaded\nto ChatGPT, the `enabledFileExtensions` filter used for patch review\nfiles is now also applied to the repo files.\n\nChange-Id: I0120d14f34192da6097b15c65f519f228996a7f8\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "a138e9c228d36e7b74b14c9eab5ae18740be85a7",
      "tree": "4007d535fce883e49b42271c5fb6c286d30fa99e",
      "parents": [
        "92d063b157165f1987d5c8bd645e6074f39dafa5"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 18 17:01:48 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Refactor text functionalities and constants\n\nA new `joinWithSpace` text method has been created in TextUtils to\nsegregate this functionality from ChatGptPrompt* classes. Additionally,\nthe class constants SPACE and DOT have been transferred to TextUtils.\n\nChange-Id: I29cf22dc53c7fbc5201284b24e8155799181a517\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "92d063b157165f1987d5c8bd645e6074f39dafa5",
      "tree": "e878f6341eea10283915915726e6e3e0030e1bb3",
      "parents": [
        "1c14db357c4a16261a920c7df16fc73f6397b689"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 18 16:09:58 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Streamline rule integration in stateful prompt\n\nThe rules within the stateful review prompt have been atomized, and\ntheir compilation into the prompt is now automated. This approach\nreduces duplication of prompt components and enhances overall prompt\nmanagement.\n\nChange-Id: I01e202e9b21977311714895d30b3fa05d3465b15\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "1c14db357c4a16261a920c7df16fc73f6397b689",
      "tree": "9481e198a94efdc7a6cf7fe62e2642ee604f6bf0",
      "parents": [
        "368d74d46c52c857f9fba201aa73bbc8f0ef08a0"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 18 15:01:55 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Enforce thread history lookup in stateful prompts\n\nA new rule has been implemented in both the review and request stateful\nprompts, explicitly requiring ChatGPT to consider the history of\nmessages exchanged in the thread. Additionally, a list of mandatory\nrules has been added to the review prompt to ensure adherence to each\nrequirement. Among these, the rule stipulating that responses must be\nprovided as a JSON object is reiterated.\n\nChange-Id: I2ed9b0372e7494fa967f7876f274f4b841c42c29\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "368d74d46c52c857f9fba201aa73bbc8f0ef08a0",
      "tree": "e49bd873d9276447cb4947932b862d4eae98eb8d",
      "parents": [
        "a7bdb5cf209a930e3fdd473052fccf4e15666b33"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 17 16:59:34 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Force ChatGPT to conduct codebase lookups\n\nThe prompt has been revised to require ChatGPT to look up the codebase\nprovided rather than speculate about missing code from the patch. This\nchange is based on the principle that the entire codebase is provided;\nthus, if something is missing, it is assumed not to exist elsewhere.\n\nChange-Id: I528fc70167ec85cb47030de0746cda4b40123ed8\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "a7bdb5cf209a930e3fdd473052fccf4e15666b33",
      "tree": "085ebb920b9d31eaeada560b65f7ef7671052efd",
      "parents": [
        "ff1003b61ee07e325846e8a241388ef863eca77c"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 17 16:50:38 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Switch from `code_interpreter` to `file_search`\n\nThe `code_interpreter` tool (hosted by OpenAI), exhibited a high failure\nrate during code lookups and has been replaced with file_search. This\nchange enables ChatGPT to more reliably perform codebase lookups to\nprovide context for its reviews.\nThe codebase is uploaded to ChatGPT and transformed into Vector Stores.\nThese stores are assigned permanent IDs for each project, allowing them\nto be reused whenever a new assistant is created.\n\nChange-Id: I333ffb8e0e42f681b57ca021591c2a30ccb4fbf1\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "ff1003b61ee07e325846e8a241388ef863eca77c",
      "tree": "11e9e17f765dcb6dafaaae73582c64c1fcc191ce",
      "parents": [
        "8e891e30a46e4a46be93da8a39023d298322ce40"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 17 11:42:51 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Centralize API version for stateful calls\n\nThe API version (currently \"v1\") used in stateful ChatGPT API calls has\nbeen centralized into a constant for improved management.\n\nChange-Id: Ifbfc0c056073d82b2a8e1c8f40c88312a5bfd18c\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "8e891e30a46e4a46be93da8a39023d298322ce40",
      "tree": "23af4351060dcfe8bd6ee114b30bac00084617e0",
      "parents": [
        "c69b7918bb797a98357e355db9e53703069a6720"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 17 09:45:18 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Ignore shell script files at root in .gitignore\n\nUpdated .gitignore to specifically exclude shell script files located in\nthe root directory.\n\nChange-Id: I0dc7873a5901815480a39b73728057da5f41af92\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "c69b7918bb797a98357e355db9e53703069a6720",
      "tree": "52f79eaee3e25bb86d678acee2988f1132166551",
      "parents": [
        "b9f10afcc2eb807363a0f177ce9f184c43772c9e"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 14 17:45:34 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Enforce ChatGPT response in JSON format\n\nThe prompt has been adjusted to emphasize that all responses from\nChatGPT, including those of \u0027message_creation\u0027 type, must be delivered\nin JSON format.\n\nChange-Id: If4ec54831d172f3a677a86a935d9ccf4f946305e\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "b9f10afcc2eb807363a0f177ce9f184c43772c9e",
      "tree": "fa279745ea5935cfd0aec74c1fc02470ae98d8c6",
      "parents": [
        "24d5501fb6b29561bf6a8831c27ab435443bd6da"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 13 11:17:13 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Handle \"message_creation\" responses in JSON format\n\nOccasionally, ChatGPT\u0027s \"message_creation\" response may include a\nJSON-structured output embedded within a plain text message. This update\nensures these cases are properly managed.\n\nChange-Id: I16ef37448cd65bbf10ba779636b74754ba2317f8\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "24d5501fb6b29561bf6a8831c27ab435443bd6da",
      "tree": "fd4292301b5b2dc639eaf4b7778d9f5baa0ffd8c",
      "parents": [
        "33f4a55cf9ca4e17496a68881d931c6528b28745"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 13 09:51:25 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Cancel \"zombie\" thread runs\n\nOccasionally, thread runs remain in an \"in_progress\" state even after\ndelivering the response. These \"zombie\" runs obstruct the addition of\nnew messages to the thread and must be manually cancelled once the run\nstep has been retrieved.\n\nChange-Id: I967da84bba66ed8b489b5fdc79001b62b8a9ec5d\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "33f4a55cf9ca4e17496a68881d931c6528b28745",
      "tree": "ffc21ee80058a1c36360c59480f19c9020d9ebb7",
      "parents": [
        "477711631c8c41127727ecc7401d1c94087459b5"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 12 10:00:49 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Implement task-specific assistants\n\nDifferent assistants are now specialized for various tasks within the\nsame thread. This commit introduces an assistant specialized in handling\nreviews and another dedicated to managing requests directed at ChatGPT.\nAdditionally, this commit modifies the instantiation of the review\nassistant, which previously occurred upon patchset creation. It is now\ninitialized during the run creation process, aligning with the setup for\nthe requests assistant.\n\nChange-Id: I50aa362fa56dbb095f653eeedb4a6788befc52e9\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "477711631c8c41127727ecc7401d1c94087459b5",
      "tree": "3a87b81cd72a32a190dba6d22c8d91f3ab6c0e66",
      "parents": [
        "6e43f18b327c8889910379edad3bc5d4ce0dc0b1"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 11 11:08:39 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:58:15 2024 +0200"
      },
      "message": "Fix issue with incorrect last message extraction\n\nOccasionally, the last message in a history (intended for forwarding to\nChatGPT in stateless mode) is from the assistant rather than the user.\nThis update ensures that the last message extracted and forwarded is\nalways the user\u0027s.\n\nChange-Id: I630b821188b8e7d9f4bbd49788edb4e6f05fe98a\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "6e43f18b327c8889910379edad3bc5d4ce0dc0b1",
      "tree": "870a289dc6150f46390074fc52961da5b9c9def1",
      "parents": [
        "bde6e10adab29d7db772793fcaeb4bfd1a006815"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 11 09:21:51 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 27 15:57:52 2024 +0200"
      },
      "message": "Handle \"message_creation\" ChatGPT response type\n\nSometimes, ChatGPT issues a \"message_creation\" response instead of\n\"tool_calls\" when responding to run-steps requests. This update ensures\nthat the newly created messages by the ChatGPT assistant are properly\nretrieved and processed in those cases as well.\nAdditionally, all functionalities related to thread messages have been\nconsolidated into the ChatGptThreadMessage class to enhance readability.\n\nChange-Id: I717de414f91249dc1ea581820681b56648c6c423\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "bde6e10adab29d7db772793fcaeb4bfd1a006815",
      "tree": "702d2c3759b5516a4d4169760b01e3823af318c0",
      "parents": [
        "960e3ce3e53ddddb5790205d094d70592b5d4ca5"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 10 12:00:16 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 13 09:59:55 2024 +0200"
      },
      "message": "Support request messages in stateful mode\n\nStateful mode now supports request messages, which are sent within the\nsame thread as the Change Set. This eliminates the need to send message\nhistory and improves the quality of ChatGPT responses.\n\nChange-Id: I37c8e821ae5f72f4cf950d13123b8675301f172c\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "960e3ce3e53ddddb5790205d094d70592b5d4ca5",
      "tree": "f50312123bbb353747a8ace820414e6cd6dce017",
      "parents": [
        "3a2921f56b14e951f1281eafec5e2756b08fcd1e"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 07 16:39:29 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 13 09:59:40 2024 +0200"
      },
      "message": "Initialize ChatGptClient with Configuration param\n\nThe ChatGptClient* classes are now initialized with a Configuration\nparameter, streamlining the code by eliminating the need to pass it with\neach `ask` method call.\n\nChange-Id: Iea77711825d8a4b859fc6db0d5788f3ab70a839d\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "3a2921f56b14e951f1281eafec5e2756b08fcd1e",
      "tree": "20b29dfcca03a16a834d50ff1c9b127bbd0b0ce8",
      "parents": [
        "9c0f68750f7b1be46178c988dffa51ee07dce6fb"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 16:57:30 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri Jun 07 10:14:24 2024 +0200"
      },
      "message": "Unique threads for requests on the same Change Set\n\nEach request pertaining to the same Change Set is handled within the\nsame thread, maximizing the benefits of ChatGPT\u0027s stateful approach.\n\nChange-Id: Ief0fc54a7eb1cc6b7406f8e533a56cf49a353175\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "9c0f68750f7b1be46178c988dffa51ee07dce6fb",
      "tree": "fc10c64c4424f6db3f8fe9cb8dd3dc13d5880de7",
      "parents": [
        "d249ab95bca496275a1b95c81fc7895735cea58c"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 11:16:05 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 17:23:21 2024 +0200"
      },
      "message": "Update the \"Commands\" section in README\n\nThe \"Commands\" section of the README has been reorganized and expanded\nto include a new subsection on the `configure` command, providing\ndetailed usage instructions.\n\nChange-Id: I9a57aa7b4b545e4dd322984c1a0514c61dddbb63\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "d249ab95bca496275a1b95c81fc7895735cea58c",
      "tree": "0e660a5290d19881ddea3dd21ea822523cce397a",
      "parents": [
        "419c79a71e24ff3b86738680f7e1663c553f3221"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 10:45:52 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 17:23:21 2024 +0200"
      },
      "message": "Introduce `reset` option to `configure` command\n\nThe `reset` option has been added to the `configure` command to revert\nmodified configuration settings to their default values. Usage is\noutlined as follows:\n- `/configure --reset` resets all modified settings to their default\nvalues.\n- `/configure --reset --\u003cCONFIG_KEY_1\u003e [...--\u003cCONFIG_KEY_N\u003e]` resets\nonly the specified key(s) to their default values.\n\nChange-Id: Iea1a98c27258585e0628afb7c746e373155ca22a\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "419c79a71e24ff3b86738680f7e1663c553f3221",
      "tree": "bf5b4e9c0cfd3385bb9ac59395c7f2d35fad880b",
      "parents": [
        "33177436c8c120366cb665adf5b004efb8d47336"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 03 16:53:11 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 17:23:21 2024 +0200"
      },
      "message": "Support spaces within command option values\n\nCommand options can now include space-containing strings if they are\nenclosed in double quotes. This enhancement allows for dynamic\nassignment of complex configurations, such as setting a custom system\nprompt through the `gptSystemPrompt` option of the `/configure` command.\n\nChange-Id: I749a7de39c8e9f92e3f3fcb1cea20692f0d49890\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "33177436c8c120366cb665adf5b004efb8d47336",
      "tree": "4a881422564f20f7a299013e36643a29605b9ac4",
      "parents": [
        "8fb0c81fef4d5e83529f00e5ff7a92f00e3a5a02"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Jun 03 10:29:46 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu Jun 06 17:23:04 2024 +0200"
      },
      "message": "Enable dynamic configuration via command\n\nPlugin configuration can now be dynamically modified through messages\naddressed to the ChatGPT user for testing/debugging purposes. This\nfunctionality is activated when the `enableMessageDebugging`\nconfiguration setting is set to true.\nThe command syntax is as follows:\n- `/configure` shows the changed settings and their dynamically changed\nvalues in a reply message.\n- `/configure --\u003cCONFIG_KEY_1\u003e\u003d\u003cCONFIG_VALUE_1\u003e [...\n--\u003cCONFIG_KEY_N\u003e\u003d\u003cCONFIG_VALUE_N\u003e]` allows assigning new value(s) to one\nor more configuration keys.\n\nChange-Id: Ia74f83a2b2cb3e8c36745e7d320fb65d4ff1eee4\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "8fb0c81fef4d5e83529f00e5ff7a92f00e3a5a02",
      "tree": "55c42335a13158ca967361be19f36b5732dbe065",
      "parents": [
        "72dfda2a87be430e165b7f627e6e509cbc8b2f2b"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 04 16:24:30 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 05 15:17:31 2024 +0200"
      },
      "message": "Fix overlapping data issues in stateful reviews\n\nPreviously, when reviewing multiple projects in stateful mode, ChatGPT\nassistant data retrieval for different projects would overwrite each\nother. To address this, `PluginDataHandlerProvider` has been decoupled\nfrom `PluginDataHandlerBaseProvider` and now supports multiple project\nscopes. Additionally, a new \u0027project\u0027 scope has been introduced to\nseparately manage persistent data for each project.\n\nChange-Id: I1279f86c181109640498e286e04d20a8b71fcb25\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "72dfda2a87be430e165b7f627e6e509cbc8b2f2b",
      "tree": "d8aa0394b11dce01a6782947001ef30db8c44d70",
      "parents": [
        "63caecd12b2f71b6cf8206212e2ff7b5d066b249"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Jun 04 14:53:39 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed Jun 05 15:05:30 2024 +0200"
      },
      "message": "Introduce `PluginDataHandlerProvider`\n\nTransition from `PluginDataHandler` to `PluginDataHandlerProvider` to\nbroaden the application of persistent plugin data across different\nscopes. Initially, only a Global scope is supported, but the addition of\nProject and Change Set scopes is planned in future commits to support\nongoing developments and issue resolutions.\n\nChange-Id: I1ed78760a6a86b5df89c27a1823b1940acd27b89\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "63caecd12b2f71b6cf8206212e2ff7b5d066b249",
      "tree": "9fdde912c6967bf85ada55111fdcaaa0fa570965",
      "parents": [
        "46a5618bd100e8895bd8b262a2e66d9f98676c7e"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 31 11:57:33 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 31 12:14:33 2024 +0200"
      },
      "message": "Refactor `DebugMessages` class\n\nThe static class `DebugMessages` has been refactored to\n`DebugCodeBlocksReview`, which now inherits from a new general-purpose\nclass `DebugCodeBlocks`.\nThis refactor aims to:\n- Generalize `DebugCodeBlocks` for future use in dynamic config settings\nfrom messages;\n- Improve the clarity of the class name;\n- Enable the use of localized text.\n\nChange-Id: I545e55803759b69183500bc7ff67af2956560fb9\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "46a5618bd100e8895bd8b262a2e66d9f98676c7e",
      "tree": "b32b24a5e46b31139a3c23253704b23312aab043",
      "parents": [
        "64569e6c9a4926d48a43c2117f9bc82fd23fabf4"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 30 15:12:23 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 30 15:21:51 2024 +0200"
      },
      "message": "Code style update: eliminate redundant new lines\n\nRedundant new lines preceding the opening or closing curly brackets in\ncertain classes have been removed.\n\nChange-Id: I71bce3e2848f135eff8be9098895e7e7ab87d738\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "64569e6c9a4926d48a43c2117f9bc82fd23fabf4",
      "tree": "67f746fa9fa9e307612b09c78ae6150dee34fd41",
      "parents": [
        "864b4d7cdaaf71189e8f76809e4f47ce6adb0972"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 30 12:42:33 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 30 12:43:04 2024 +0200"
      },
      "message": "Implement localization framework\n\nA comprehensive localization framework is introduced to the project,\ntransitioning from the use of hardcoded language constants in the\nSettings class to a dynamic, locale-specific ResourceBundle approach.\nThe changes include:\n\n- Creation of the Localizer class that is now injected through Guice to\nprovide dynamic language support based on user locale. This approach\nleverages the ResourceBundle mechanism for localization.\n- Addition of ResourceBundle property files for English (default),\norganized by specific namespaces to facilitate easy expansion and\nmaintenance.\n- Refactoring throughout the application to replace direct usage of\nlanguage-specific constants from the Settings class with calls to the\nLocalizer class. This shift enhances maintainability and flexibility in\nlanguage support.\n\nChange-Id: Ibe343fe6d2fee8cd799ab2196df22c6940335cc2\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "864b4d7cdaaf71189e8f76809e4f47ce6adb0972",
      "tree": "2a5c5e968f28789d197b1d74dfdffa0056399f86",
      "parents": [
        "38fb01a19252db98cb1965f71145bcf7a6b2e75b"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 29 10:58:10 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 29 10:58:10 2024 +0200"
      },
      "message": "Standardize resource subdirectory names\n\nResource subdirectories have been renamed to lowercase to adhere to Java\nnaming standards.\n\nChange-Id: I6836cae6dae123611ed63644c1082c8f2ae45f35\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "38fb01a19252db98cb1965f71145bcf7a6b2e75b",
      "tree": "8b10ac61098276b9f9f9587af7a0c8e44e66d328",
      "parents": [
        "1afa9c7e61c2e7e70178c7d677c1a56d07d10702"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 29 10:50:29 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 29 10:50:29 2024 +0200"
      },
      "message": "Prefix system messages from ChatGPT user\n\nSystem messages originating from the ChatGPT user will now include the\nprefix \"SYSTEM MESSAGE:\" following this change.\n\nChange-Id: I35a6e3226280a91f9984059a60758929bbc3b25d\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "1afa9c7e61c2e7e70178c7d677c1a56d07d10702",
      "tree": "71eed49135c4c12144371a7ecbbbb9dc46ade65d",
      "parents": [
        "4f0a78101f6ed31fc0e4f3b42d8a8aaae5e328bb"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 29 10:31:36 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 29 10:33:50 2024 +0200"
      },
      "message": "Add `enableMessageDebugging` configuration setting\n\nThe `enableMessageDebugging` configuration setting has been introduced\nto manage user access to debug functionalities via Gerrit messages. This\nsetting currently controls the usage of `--debug` option of the\n`/review` command.\n\nChange-Id: I199cf959eb9a423ae1628242f222dabefd96b075\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "4f0a78101f6ed31fc0e4f3b42d8a8aaae5e328bb",
      "tree": "1d012ef0c3a08f178f4b1731c56987146006f149",
      "parents": [
        "868cfa18a2a3682c7cc669fdd60b4206ebf603ca"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 16:45:58 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 24 10:52:41 2024 +0200"
      },
      "message": "Add support for GPT-4o models\n\nSupport has been added for responses from ChatGPT 4o models, which may\ninvolve multiple tool calls.\n\nChange-Id: I45b8988572898f2bad901e0902cc8b4e4f109a37\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "868cfa18a2a3682c7cc669fdd60b4206ebf603ca",
      "tree": "2137f8bb41724e78b2561d22c718b2bd52ea1041",
      "parents": [
        "872f90bfd78af21c688827130836782af4abd298"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue May 21 16:36:24 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:41:24 2024 +0200"
      },
      "message": "Enable commit message reviews in stateful requests\n\nCommit message reviews are now enabled for stateful review requests,\nbringing them in line with the functionality available for stateless\nrequests.\n\nChange-Id: I0128bd025e78fdf5d0e1ba763a9dd080fdda90ff\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "872f90bfd78af21c688827130836782af4abd298",
      "tree": "b947cfdf6225f3ed89e0f712505b97d903c1557d",
      "parents": [
        "f43fea2f60202979b52fe6fabd174a35c09a4abd"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 17 12:26:30 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:41:14 2024 +0200"
      },
      "message": "Enable inline code lookup for stateful requests\n\nInline code lookup for ChatGPT code snippets is now supported in\nstateful review requests, aligning with the existing functionality for\nstateless requests.\n\nChange-Id: I816b37d698950869137df16c8f8da4ed2175b910\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "f43fea2f60202979b52fe6fabd174a35c09a4abd",
      "tree": "70d3a4d9bada9cb77870153b8aed56e709e5c6e6",
      "parents": [
        "851a7899004b5fc190446a4d4d50fba02c15e17c"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 17 12:09:05 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:41:10 2024 +0200"
      },
      "message": "Update fallback revision base to zero\n\nChanged the fallback value for the revision base to zero. The previous\nvalue of -1 causes issues, eg, when retrieving patch set diffs in\nstateful mode, as addressed in the next commit.\n\nFixes: 3b49995 (\"Migrate GerritClientPatchSet to direct GerritApi\")\nChange-Id: I84bd3feb7fa2867e240071362f56751bc7e6b35f\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "851a7899004b5fc190446a4d4d50fba02c15e17c",
      "tree": "8dd7605a733c94270fcbbd1006b631513e2cedf3",
      "parents": [
        "6a1a3f7be66ad64d920a9687626bfe256f725712"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 17 11:00:10 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:41:07 2024 +0200"
      },
      "message": "Fix occasional inline code lookup issues:\n\nThis commit addresses a problem where ChatGPT code snippets might not\naccurately be identified within a patch set\u0027s codebase. The issue\ntypically arises when the patch set includes deletions at the beginning\nof files.\n\nChange-Id: I00fbde248ac5d218f13eea880f88740eeabfc900\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "6a1a3f7be66ad64d920a9687626bfe256f725712",
      "tree": "6a38db89f52635f8d9c6aed9681930f12ab9024f",
      "parents": [
        "51c99768b292af8968503b23e8626bef58c88c4b"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 17 10:56:44 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:41:04 2024 +0200"
      },
      "message": "Relocate mode-specific data test files to specific dirs\n\nData test files exclusively used in either stateless or stateful modes\nhave been relocated to directories named accordingly. This enhances\nreadability and accommodates files with identical names used in both\nmodes.\nNote: Files utilized by the `withBodyFile` method remain unchanged as\nthis method does not support subdirectories.\n\nChange-Id: I1e32ecc006a878a4cf805c4a67cfda41212b68e8\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "51c99768b292af8968503b23e8626bef58c88c4b",
      "tree": "0383a409635430c9fbdbc0b3349295ab4c20505c",
      "parents": [
        "0f6fcd23e17118ea1346c745fef00e41133572fc"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 15:35:57 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:41:00 2024 +0200"
      },
      "message": "Integrate stateful review into testing suite\n\nStateful patch set review has been incorporated into the testing suite.\nAfter testing, the accuracy of both the thread message and of the review\nreply is verified against expected values.\n\nChange-Id: I3a2b0252a55940187f00f1d0679392b677a625f7\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "0f6fcd23e17118ea1346c745fef00e41133572fc",
      "tree": "0399e41080130af78731532e877f430c1acd879d",
      "parents": [
        "e5e38bc9a9963e329b2283e79d35136167679e6e"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 15:10:30 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:55 2024 +0200"
      },
      "message": "Support full-cycle stateful review requests\n\nFull-cycle stateful patch-set review requests are now supported through\nthe implementation of the ChatGPT Run layer. Once the initial message is\ncommitted to a new ChatGPT thread, a ChatGPT run is created and linked\nto that thread.\nThis run is then polled at regular intervals (default: 1 second) until\ncompletion. Subsequently, the steps of the run are retrieved along with\nthe ChatGPT replies, which are processed similarly to the stateless\nmode.\nCurrently, the following stateless features are not yet supported in\nstateful mode:\n- Review of commit messages\n- Inline code lookup\n- Detection of repeated replies\n\nChange-Id: I84f7087d838f0cec9bc55c8e724519db4f17df72\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "e5e38bc9a9963e329b2283e79d35136167679e6e",
      "tree": "0983c040ef0d215b34d25ce49455b678a1486589",
      "parents": [
        "9fd23539ed1f0cd0188472002e12f23188b33012"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 12:30:59 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:47 2024 +0200"
      },
      "message": "Initiate ChatGPT thread for patch set review\n\nAt the Patch Set Review event, a ChatGPT thread for the assistant\nassociated with the Git Project of the Patch Set is initiated. The\nthread begins by posting a first message requesting a review of the\nformatted patch of the Patch Set.\n\nChange-Id: Idde4742d3df74ff9ec7cacf0218adb20db973855\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "9fd23539ed1f0cd0188472002e12f23188b33012",
      "tree": "1f4b8f5d4e8bb449279974e2fa178fe117d1bb1a",
      "parents": [
        "928b47dc8522de4a639056b87bda25e05142f306"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 12:17:19 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:42 2024 +0200"
      },
      "message": "Return formatted patch in stateful `getPatchSet`\n\nThe getPatchSet method in the GerritClientPatchSetStateful class now\ndelivers the formatted patch of the current change.\nThis approach, utilized in stateful mode instead of the patch-set diff\nin stateless mode, aims to reduce payload size by leveraging the\ncodebase context information stored in the assistant.\nAdditionally, partially omitting the formatted patch heading further\ndecreases the payload size.\n\nChange-Id: I5d1653466df1b068f0974cb2a40e5ca7224065fe\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "928b47dc8522de4a639056b87bda25e05142f306",
      "tree": "38660311b8a491908b1c40398f547bbc53d38030",
      "parents": [
        "53dafec4e368ec76eb0c7d540e1feb990755587a"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 11:39:22 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:35 2024 +0200"
      },
      "message": "Upgrade to ChatGPT OpenAI assistant version 2\n\nCompleted migration from OpenAI Assistant version 1 to 2. This upgrade\nrequired changes to how file IDs of the Git projects uploaded to ChatGPT\nare passed during assistant creation.\n\nChange-Id: I1c8e1be662445cf7a0eae92496d969e2a5c4c24f\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "53dafec4e368ec76eb0c7d540e1feb990755587a",
      "tree": "fc25ab861c8d25336e3d6e1f2474f5c6695460cd",
      "parents": [
        "ecd814af1805f6714947a0f5dd3614136aca15ba"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 11:23:11 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:32 2024 +0200"
      },
      "message": "Introduce `forceCreateAssistant` option\n\nAdded a configuration option, `forceCreateAssistant`, which forces the\ncreation of a new assistant at each stateful patch-set review request.\nThis option is primarily intended for debugging purposes.\n\nChange-Id: I3ebd2361cc48168318080a3157aa84eee808f5f6\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "ecd814af1805f6714947a0f5dd3614136aca15ba",
      "tree": "f56f7a053cc0323cfd51d363732ee75b497e03ff",
      "parents": [
        "3a1e88dd5dedc3ef2eb5dda5f1e57456ca7c74c5"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 10:54:11 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:28 2024 +0200"
      },
      "message": "Centralize ChatGPT stateful requests\n\nAll stateful requests for ChatGPT are now handled by the\nChatGptHttpClient class, which consistently applies the OpenAI\nassistant version HTTP header to every ChatGPT request.\n\nChange-Id: I43549936ffd85da238b021007e161b53f33f9289\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "3a1e88dd5dedc3ef2eb5dda5f1e57456ca7c74c5",
      "tree": "e0583d1526dd80805ab425e263e335f41cd2590e",
      "parents": [
        "7ca89ad8a6e1b9caf4aa93e069c7419baa199b3f"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 10:37:06 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:22 2024 +0200"
      },
      "message": "Remove unused ProjectData model\n\nRemoved the ProjectData model, which was introduced during the\ndevelopment of the \u0027Create assistant for Gerrit project\u0027 Change Set but\nis no longer used.\n\nChange-Id: I8e1d3d94e25362563181474cc32c0df42b6e819a\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "7ca89ad8a6e1b9caf4aa93e069c7419baa199b3f",
      "tree": "4874774740561767ef82f523ed9a2169faeee28e",
      "parents": [
        "d9e42ed991a2c14e9618b6bd173c790ce241dd06"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Wed May 08 10:04:57 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:40:14 2024 +0200"
      },
      "message": "Fix NullPointerException in test suite\n\nResolved a NullPointerException in Patch Set review tests that was still\nallowing the tests to pass. This exception was introduced with the\nmigration from GerritClientReview to direct GerritApi, due to the review\nresult not being properly mocked.\n\nFixes: d5e6a17 (\"Migrate GerritClientReview to direct GerritApi\")\nChange-Id: Ib963ea52b3bde64ebdf797325deefe9ceeae644f\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "d9e42ed991a2c14e9618b6bd173c790ce241dd06",
      "tree": "eed3d7196879220d1873545f518216bd26158e33",
      "parents": [
        "1490df66942ad57ac46686cf34e9f6fc00fab858"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Tue Apr 30 09:53:30 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Thu May 23 09:39:59 2024 +0200"
      },
      "message": "Fix OutOfBound line number issue\n\nThis fix handles scenarios where ChatGPT incorrectly returns a line\nnumber that exceeds the actual number of lines in the code.\nAdditionally, log clarity is enhanced by omitting the exception body\npreviously logged when the code range is not accurately retrieved.\n\nChange-Id: I31a3e8329b7daea8cf7fd08ff9c55dd1aa087d56\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "1490df66942ad57ac46686cf34e9f6fc00fab858",
      "tree": "7463fc519b3aecbbed5b48f179aa433390be98b0",
      "parents": [
        "0845b21a85515bed50fe4d6e762d4a1d3c8261d1"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 17 16:31:21 2024 +0200"
      },
      "committer": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Fri May 17 17:18:58 2024 +0200"
      },
      "message": "Fix regression: missing eventHandlerTask.MODULE\n\nA regression introduced removing `eventHandlerTask.MODULE`,\nwhich was introduced in commit 00ae2f5 (\"Decouple thread pool from event\nhandler\"), but not removing the call to install that module, has been\ncorrected.\n\nFixes: ec1cf3b (\"Bind GerritChange in event context\")\nChange-Id: I634de5a09bde7e0a3cfa2cb1e5b27618d0ae535b\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "0845b21a85515bed50fe4d6e762d4a1d3c8261d1",
      "tree": "f67263ed06b6a29c35873776303277e83335c3f3",
      "parents": [
        "09d2c0a65c617f3723945189f7dacf91ec7d23be"
      ],
      "author": {
        "name": "Patrizio",
        "email": "patrizio.gelosi@amarulasolutions.com",
        "time": "Mon Apr 29 13:00:56 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove system comments from assistant messages\n\nSystem comment prefixes like `Patch Set 1: ...\\n\\n(1 comment)` are also\nassociated with the assistant (eg, when updating votes), so these are\nnow removed from the assistant messages sent to ChatGPT in the message\nhistory as well.\n\nChange-Id: Iddb6c4863edd7fa59cf11feff1ae00e8f6a5b367\nSigned-off-by: Patrizio \u003cpatrizio.gelosi@amarulasolutions.com\u003e\n"
    },
    {
      "commit": "09d2c0a65c617f3723945189f7dacf91ec7d23be",
      "tree": "ddaaf1d25119ec24eff7e6dad2ca38161c1893c3",
      "parents": [
        "03b2f4066571f5b51b36d7071ef98738ebdb6381"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Mon Apr 29 09:29:41 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Use direct `accountCache` access instead if calling REST API\n\nIn `GerritClientAccount` and all derived classes get `Account.Id` from\ncache instead of calling GerritApi.\n\nNote that when classes are injected their constructor doesn\u0027t have to be\npublic unless they are created manually in tests. Such cases were marked\nwith `@VisibleForTesting` annotation.\n\nBug: Issue 336577745\nChange-Id: I6c72043960de0b45c6d265f93a20fc9614142507\n"
    },
    {
      "commit": "03b2f4066571f5b51b36d7071ef98738ebdb6381",
      "tree": "af2a1b218ff3fe7e4705ce5d4c325c3773b6c891",
      "parents": [
        "31757e127d184d6cdb07f6d78ad794d419b3be90"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Fri Apr 26 12:13:36 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Clean up tests\n\nChanges:\n* remove `ChatGptReviewStatefulTest` as it is not marked as test clas\n  and has no tests defined\n* remove `@Ignore` import from `ChatGptReviewStatelessTest` as it is not\n  used\n\nChange-Id: I9b217ae4ecc7a912c2d8367f4f3d8f54151f4dae\n"
    },
    {
      "commit": "31757e127d184d6cdb07f6d78ad794d419b3be90",
      "tree": "3d35363c39635a6d3048f4751be515abe44386c5",
      "parents": [
        "81d0fc3e079762e6fde0b5985b36de95fbf7473e"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Apr 25 22:59:56 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove gerrit[AuthBaseUrl|Password] from config\n\nGerrit data is accessed over the direct GerritApi calls therefore\nneither URL nor user password are required. Remove them from the\n`Configuration` and documentation.\n\nBug: Issue 336577745\nChange-Id: Ie377db71a0689adab7f70cacb7f02ae498fbc205\n"
    },
    {
      "commit": "81d0fc3e079762e6fde0b5985b36de95fbf7473e",
      "tree": "06b22feaae69c13066ee4016bf00e2369bedd4aa",
      "parents": [
        "01212cff7d705bf8a266bbb81f0de80b5bab4cc4"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Apr 25 22:45:17 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove HTTP client (and its components) from `GerritClientBase`\n\nBug: Issue 336577745\nChange-Id: I230c9672cd6cb6f97b7ca88248ef2bff23e367c9\n"
    },
    {
      "commit": "01212cff7d705bf8a266bbb81f0de80b5bab4cc4",
      "tree": "4a2857e3b54a5e131418d9aa5667ca4a24064cec",
      "parents": [
        "2bcf8bcd2c79d7e4828855e6df860b86bba74ce3"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Apr 25 22:42:24 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove `UriResourceLocator`\n\nAnd all URIs related to gerrit REST endpoints. Also clean-up remainding\nmocks in tests.\n\nBug: Issue 336577745\nChange-Id: I834298e22adde3bcadcd02378cf2ef92d3a1dda8\n"
    },
    {
      "commit": "2bcf8bcd2c79d7e4828855e6df860b86bba74ce3",
      "tree": "4bbe832db94aa3968c3f7d47eb7611104054ba54",
      "parents": [
        "5ff6be1fc33bf7c08c6ea187409202533ade4342"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Wed Apr 24 10:04:32 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Migrate GerritClientComments to direct GerritApi\n\nNote that test configuration has to be cleaned a bit so that Mockito was\nnot complayning about not used mocks...\n\nBug: Issue 336577745\nChange-Id: I06aeadfcd265c2794fda80d5bbbd115305266c00\n"
    },
    {
      "commit": "5ff6be1fc33bf7c08c6ea187409202533ade4342",
      "tree": "b07a9a931f7e47c7da34bed8a034750bf4553930",
      "parents": [
        "3b4999529458855da16ee927a944be8e856cccbe"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Apr 25 09:38:05 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Migrate GerritClientPatchSetStateless to direct GerritApi\n\nThe corresponing tests were updated to mock required GerritApi\nendpoints.\n\nBug: Issue 336577745\nChange-Id: I13cbfc773ae9e44ab74928144092f49fd26845b5\n"
    },
    {
      "commit": "3b4999529458855da16ee927a944be8e856cccbe",
      "tree": "c36284320390325d1b02b4513bf2f19c3f56290b",
      "parents": [
        "0edf69f1e8b43d5e6b8f33906b10617ae2693ed7"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Wed Apr 24 20:58:38 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Migrate GerritClientPatchSet to direct GerritApi\n\nWhen the change info is requested make sure that\nListChangesOption.ALL_REVISIONS option is added so that all reviewisions\nare returne.\n\nBug: Issue 336577745\nChange-Id: Ibf53eeece60ab5062d3f8cb6f97161e7a63db49c\n"
    },
    {
      "commit": "0edf69f1e8b43d5e6b8f33906b10617ae2693ed7",
      "tree": "6bfce506914b365bf9ff524977c36954d1510caf",
      "parents": [
        "a3c3e739e75f3ae30a07f3f1a90ad45424affca5"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Wed Apr 24 20:34:36 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Migrate GerritClientReview to direct GerritApi\n\nThe `GerritClientReview` uses ReviewInput to post ChatGPT review on a\nchange in question.\nNote that in order to maintain existing unit tests the expected\nbody content is read and converted back to compact JSON representation\nso that it is comparable with value that is captured from mock (that is\nalso turned to compact JSON) as `ReviewInput` has no `equals` method\nimplementation that could be used otherwise.\n\nBug: Isssue 336577745\nChange-Id: I41bd1ef4d1f978843b29bfbd4942dda5d96d135b\n"
    },
    {
      "commit": "a3c3e739e75f3ae30a07f3f1a90ad45424affca5",
      "tree": "600b60bd7e73cc079a4d5f36df3900e77a2d3d91",
      "parents": [
        "15639a648a7837543e27819ea762169f9e3b558f"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Tue Apr 23 20:45:06 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Use direct GerritApi calls in GerritClientAccount\n\nModify both `getAccountId` and `getAccountGroups` to use direct\n`GerritApi` calls. Note that it still extends the `GerritClientBase` as\nit is a parent for several implementations (that will be refactored\nlater).\n\nThe `ChatGptReviewTestBase` was modified to mock direct `GerritApi`\ncalls related to accounts. As a result all tests are still passing.\n\nBug: Issue 336577745\nChange-Id: Iaee041a4c38ae842ba4707841c782dd1fb33f664\n"
    },
    {
      "commit": "15639a648a7837543e27819ea762169f9e3b558f",
      "tree": "c265c2e30306dc308d962adf68f6293f032c130a",
      "parents": [
        "fdc07b561b413880b4e71289c10466bd60811fff"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Tue Apr 23 09:24:05 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Use direct GerritApi calls in GerritClientDetail\n\nThe `GerritClientDetail` used to call REST API in order to retrive the\nchange details and map them to the internal `GerritPatchSetDetail`\nrepresentation. Alter it to use direct `GerritApi` calls with the\nfollowing changes:\n* obtain user\u0027s `Account.Id` from the username and set it into the\n  `Configuration`\n* add `openRequestContext` function to `Configuration` that is\n  responsible for setting the user\u0027s context to the `GerritApi`\n* use `GerritApi` in order to retrieve `ChangeInfo`\n* map the `ChangeInfo` to `GerritPatchSetDetail`\n* load `__files/gerritPatchSetDetail.json` as `ChangeInfo` and mock\n  `GerritApi` in tests so that they are passing\n\nBug: Issue 336577745\nChange-Id: I5a24c6671529a9cc2c4a06c152fa638c684e99b7\n"
    },
    {
      "commit": "fdc07b561b413880b4e71289c10466bd60811fff",
      "tree": "6472e297d5afd8a89562e3dfd691373a0a89a67c",
      "parents": [
        "470da308510889f86f405e338afb58e253f5decb"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 20:44:53 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Ignore events from other instances\n\nIn a multisite setup, events are propagated across Gerrit nodes. This\ncould result in multiple comments being added by ChatGPT for a single\nrequest. To prevent that, we only process events comming from the\ncurrent node.\n\nBug: Issue 336648780\nChange-Id: I07f6b6f39cd00636c7952f069e7de88984ba6f26\n"
    },
    {
      "commit": "470da308510889f86f405e338afb58e253f5decb",
      "tree": "12ae3b77d4abd0db9d894fc512afedc001bcb791",
      "parents": [
        "7d30b533b09182da9799c8d46321541f2a0acea8"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 19:10:32 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove not used SingletonManager\n\nNow we fully relay on the Guice bindings and injections. Therefore we\ncan safely remove `SingletonManager`, `CustomClassLoader` and\n`ClassUtils`.\n\nChange-Id: I0d079135d358975e8fe5c8c049398bb54d2de03b\n"
    },
    {
      "commit": "7d30b533b09182da9799c8d46321541f2a0acea8",
      "tree": "5e84fd6e9bf222e397b8b05b13c1907307001400",
      "parents": [
        "94cb70b1f74e2dd9870deed2d5c2fe8070c4559d"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 19:07:56 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Do not \"dynamically register classes\"\n\nRemoves a leftovers, probably, required by `ModeClassLoader` that were\nmeant to _dynamically_ register classes. Now we relay on Guice bindings\nfor mode selection.\n\nChange-Id: I8000ad4c91fcdadcecddd21c515ff8030513c854\n"
    },
    {
      "commit": "94cb70b1f74e2dd9870deed2d5c2fe8070c4559d",
      "tree": "66794f5750edd938160d9816c20834fa93be4c2e",
      "parents": [
        "ec97c5fbc8d9bdc72ff8c021708903597f8177d7"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 18:57:03 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove ProjectDataHandler class\n\nUse Guice for creation of `PluginDataHandler` insted of using a static\nfield in `ProjectDataHandler`.\n\nAlso removes `ChatGptReviewStatefulTest.assistantCreated` test, as now\nassistant creation is delegated to Guice.\n\nChange-Id: Ie5a76de046058534c471d33b1eefd4107a3395b9\n"
    },
    {
      "commit": "ec97c5fbc8d9bdc72ff8c021708903597f8177d7",
      "tree": "be7dc7aa5423540d61cdada65a7b1baecacd0434",
      "parents": [
        "d6bc0770aa93ce2995e08616e50f9af63d3ff559"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 18:01:04 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove GitRepoFilesHandler\n\nFavor Guice injection over a static members and remove\n`GitRepoFilesHandler` that keept a single static instance of\n`GitRepoFiles` class.\n\nChange-Id: I72bc43728b27aa1757f096b55e38b79fa535724e\n"
    },
    {
      "commit": "d6bc0770aa93ce2995e08616e50f9af63d3ff559",
      "tree": "f8ca32e0bc1be8ccaf674aa7ae58bf5383746488",
      "parents": [
        "8aa62d1e41c723abf0d3c4d652f36f786a12eff1"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 17:46:13 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove ModeClassLoader\n\nInstead of dynamically loading mode related classes, use Guice bindings\nto select proper implementation based on configuration.\n\nChange-Id: I47d21062a249d03118b1e0f8575b0cb0b047a3ae\n"
    },
    {
      "commit": "8aa62d1e41c723abf0d3c4d652f36f786a12eff1",
      "tree": "80575717c2c9db38eee6d1cb602814d9b7fb92b3",
      "parents": [
        "573c23ce5cd3513003f8795031a906e337fde4b7"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 15:38:20 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Remove ChangeSetSingletonManager class\n\nInstead of relying on the `ChangeSetSingletonManager` class, lean on the\nGuice binding and injection.\n\nThis change only removes the singleton manager and propagate the\n`ChangeSetData` manually via consturctors and method arguments. Later we\ncan refactor code to use Guice injections and simplify it this way.\n\nChange-Id: Iacac3d620a00f7d1b6acb5151dc0db10ac4721f0\n"
    },
    {
      "commit": "573c23ce5cd3513003f8795031a906e337fde4b7",
      "tree": "a1e6945573ade0af3191027c3b721c1e7c57171d",
      "parents": [
        "ec1cf3b0519d03c30b8e2d74cf1033218e8628da"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 13:36:36 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Make GerritClient injectable\n\nThis also fixes `ChatGptReviewStatelessTest.gptMentionedInComment`, as\nwe don\u0027t relay on the manually cached `GerritClient` but let Guice\nmanage that instance for us.\n\nChange-Id: I6d8ec9abb516b18629c5e5d3f3fd0b50a726504a\n"
    },
    {
      "commit": "ec1cf3b0519d03c30b8e2d74cf1033218e8628da",
      "tree": "3d0c117b6379859b0713cb4f88712160dcf65ecf",
      "parents": [
        "5c25999bd558050b2c7294e1201414640b1c2f7d"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 13:26:28 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Bind GerritChange in event context\n\nChange-Id: I80ca16fdb760b19322ca2ad142c6e07fb3c47f1d\n"
    },
    {
      "commit": "5c25999bd558050b2c7294e1201414640b1c2f7d",
      "tree": "eea22b10fa46edb1137b2d26875e5a475cae399b",
      "parents": [
        "353490567027ffcbfd3c37e4f9818f413f911c8d"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 24 13:19:39 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 11 14:15:37 2024 +0100"
      },
      "message": "Inject Configuraiton object into PatchSetReviewer\n\nChange-Id: I8853a578068e107fdfeb488d0ec599a780cb9744\n"
    }
  ],
  "next": "353490567027ffcbfd3c37e4f9818f413f911c8d"
}
