From 652ae13356779a94a160439cafa32bb981a1f493 Mon Sep 17 00:00:00 2001 From: doni108 <185000818+doni108108doni@users.noreply.github.com> Date: Fri, 31 Oct 2025 05:28:10 +0000 Subject: [PATCH 01/11] ci(Mergify): configuration update Signed-off-by: doni108 --- .mergify.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .mergify.yml diff --git a/.mergify.yml b/.mergify.yml new file mode 100644 index 0000000..4fb75e3 --- /dev/null +++ b/.mergify.yml @@ -0,0 +1,14 @@ +pull_request_rules: + - name: Notify when a PR is removed from the queue + description: Notify the PR author when its pull request is removed from the merge queue. + conditions: + - queue-dequeue-reason != none + - queue-dequeue-reason != pr-merged + actions: + comment: + message: > + Hey @{{author}}, your pull request has been dequeued due to the + following reason: {{queue_dequeue_reason}}. + + Sorry about that, but you can requeue the PR by using `@mergifyio + requeue` if you think this was a mistake. From 2183920f879329203b56b401f442b9c10113a201 Mon Sep 17 00:00:00 2001 From: doni108 <185000818+doni108108doni@users.noreply.github.com> Date: Fri, 31 Oct 2025 05:55:43 +0000 Subject: [PATCH 02/11] ci(Mergify): configuration update Signed-off-by: doni108 From 8d0bc80145388bed41b8c09a1e68282e399d063c Mon Sep 17 00:00:00 2001 From: doni108 <185000818+doni108108doni@users.noreply.github.com> Date: Sat, 1 Nov 2025 15:04:02 +0300 Subject: [PATCH 03/11] Create my-agent.md with basic metadata Add initial structure for my-agent.md --- .github/agents/my-agent.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .github/agents/my-agent.md diff --git a/.github/agents/my-agent.md b/.github/agents/my-agent.md new file mode 100644 index 0000000..44522c1 --- /dev/null +++ b/.github/agents/my-agent.md @@ -0,0 +1,8 @@ +--- +name: +description: +--- + +# My Agent + +Describe what your agent does here... From f1fb83be919f2d3b33de28b58a184e8f66e75169 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Nov 2025 21:00:03 +0000 Subject: [PATCH 04/11] Initial plan From c4d87a13a00b449bbed7b8a05e9ff1217b6910a3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Nov 2025 21:02:57 +0000 Subject: [PATCH 05/11] Initial plan for setup script Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- plugin.zip | Bin 24600 -> 24600 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/plugin.zip b/plugin.zip index 395c97d0d5a2a26a8fc4d40571ad05fd52e22b6d..70cb483e2c70cfc033896b8971f2ec34a20b56c8 100644 GIT binary patch delta 99 zcmbPnfN{nFM&1B#W)?064h9B>@D({5dCx^K1L@88B6c%^8FQkRgBg?EVw}MOJu$gV dAjafBamHZUDBcWAXUCg>=|%D8VERtH4FJ)KB>4aU delta 99 zcmbPnfN{nFM&1B#W)?064h9B>NkM!YdCx^K1L@88B6c%^8FQkRgBg?EVw}MOJu$gV dAjafBamHZUDBcWAXUCg>=|%D8VERtH4FC*AAU^;A From 3f65c46d9b4fb5c8de2fcab7d8451e14d6f3814d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Nov 2025 21:04:14 +0000 Subject: [PATCH 06/11] Add setup script with npm, Zed, and acodex_server installation Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- .gitignore | 3 ++- readme.md | 15 +++++++++++ setup.sh | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100755 setup.sh diff --git a/.gitignore b/.gitignore index db400be..cc00f61 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ node_modules yarn.lock dist.zip -dist \ No newline at end of file +dist +acodex_server \ No newline at end of file diff --git a/readme.md b/readme.md index c7dad79..481fa91 100644 --- a/readme.md +++ b/readme.md @@ -2,6 +2,21 @@ Read acode plugin [documentation](https://docs.acode.app/docs/) to develop plugin for acode editor. +## Setup + +For a quick setup of the development environment, run: + +```bash +./setup.sh +``` + +This script will: +- Install npm (if not already installed) +- Install Zed editor (if not already installed) +- Clone the acodex_server repository +- Install project dependencies +- Build the project + ## Usage Use this for debug build: diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..37a9eac --- /dev/null +++ b/setup.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Setup script for Acode Plugin Development Environment +# This script installs required tools and dependencies + +set -e # Exit on error + +echo "==========================================" +echo "Acode Plugin Development Setup" +echo "==========================================" +echo "" + +# Function to check if a command exists +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +# Install npm if not already installed +echo "Step 1: Checking npm installation..." +if command_exists npm; then + echo "✓ npm is already installed (version: $(npm --version))" +else + echo "Installing npm..." + curl -qL https://www.npmjs.com/install.sh | sh + echo "✓ npm installed successfully" +fi +echo "" + +# Install Zed editor if not already installed +echo "Step 2: Checking Zed editor installation..." +if command_exists zed; then + echo "✓ Zed editor is already installed" +else + echo "Installing Zed editor..." + curl -f https://zed.dev/install.sh | sh + echo "✓ Zed editor installed successfully" +fi +echo "" + +# Clone acodex_server repository if it doesn't exist +echo "Step 3: Checking acodex_server repository..." +if [ -d "acodex_server" ]; then + echo "✓ acodex_server repository already exists" + echo " Updating repository..." + cd acodex_server + git pull + cd .. +else + echo "Cloning acodex_server repository..." + if command_exists gh; then + gh repo clone bajrangCoder/acodex_server + else + git clone https://github.com/bajrangCoder/acodex_server.git + fi + echo "✓ acodex_server repository cloned successfully" +fi +echo "" + +# Install project dependencies +echo "Step 4: Installing project dependencies..." +npm install +echo "✓ Dependencies installed successfully" +echo "" + +# Build the project +echo "Step 5: Building the project..." +npm run build +echo "✓ Project built successfully" +echo "" + +echo "==========================================" +echo "Setup completed successfully!" +echo "==========================================" +echo "" +echo "You can now start development with:" +echo " npm run dev - Start development server" +echo " npm run build - Build for production" +echo "" From 02eef36e8301464e019913a583136c00a4d2f5c7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Nov 2025 21:05:41 +0000 Subject: [PATCH 07/11] Add plugin.zip to .gitignore to exclude build artifacts Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index cc00f61..c71b037 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ node_modules yarn.lock dist.zip dist -acodex_server \ No newline at end of file +acodex_server +plugin.zip \ No newline at end of file From 98cf5aa2a7d8f062679f9a4e742dcd664b552d95 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Nov 2025 21:06:40 +0000 Subject: [PATCH 08/11] Remove plugin.zip from git tracking (build artifact) Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- plugin.zip | Bin 24600 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 plugin.zip diff --git a/plugin.zip b/plugin.zip deleted file mode 100644 index 70cb483e2c70cfc033896b8971f2ec34a20b56c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24600 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 From 4c4f54f19187dcf09c1ec3b35fa296b49aee6fc7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 17 Nov 2025 00:42:18 +0000 Subject: [PATCH 09/11] Address code review feedback: improve security and error handling Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- readme.md | 1 + setup.sh | 23 ++++++++++++++++++----- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index 481fa91..2fc3a59 100644 --- a/readme.md +++ b/readme.md @@ -7,6 +7,7 @@ Read acode plugin [documentation](https://docs.acode.app/docs/) to develop plugi For a quick setup of the development environment, run: ```bash +chmod +x setup.sh ./setup.sh ``` diff --git a/setup.sh b/setup.sh index 37a9eac..41c68ca 100755 --- a/setup.sh +++ b/setup.sh @@ -20,9 +20,17 @@ echo "Step 1: Checking npm installation..." if command_exists npm; then echo "✓ npm is already installed (version: $(npm --version))" else - echo "Installing npm..." - curl -qL https://www.npmjs.com/install.sh | sh - echo "✓ npm installed successfully" + echo "npm is not installed." + echo "For security reasons, this script does not install npm automatically." + echo "Please install Node.js and npm using your system's package manager or a version manager like nvm." + echo "" + echo "Examples:" + echo " On Ubuntu/Debian: sudo apt update && sudo apt install nodejs npm" + echo " On macOS: brew install node" + echo " Using nvm: https://github.com/nvm-sh/nvm" + echo "" + echo "After installing Node.js and npm, re-run this setup script." + exit 1 fi echo "" @@ -33,7 +41,12 @@ if command_exists zed; then else echo "Installing Zed editor..." curl -f https://zed.dev/install.sh | sh - echo "✓ Zed editor installed successfully" + if command_exists zed; then + echo "✓ Zed editor installed successfully" + else + echo "✗ Zed editor installation failed. Please check your system and try again." >&2 + exit 1 + fi fi echo "" @@ -43,7 +56,7 @@ if [ -d "acodex_server" ]; then echo "✓ acodex_server repository already exists" echo " Updating repository..." cd acodex_server - git pull + git pull || echo "Warning: Could not update repository" cd .. else echo "Cloning acodex_server repository..." From 0a095e96f099e9a8b53e041c9c79f676460149a8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 00:13:14 +0000 Subject: [PATCH 10/11] Address code review: fix security inconsistency, improve error handling and documentation Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- readme.md | 6 ++++-- setup.sh | 34 +++++++++++++++++++++------------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/readme.md b/readme.md index 2fc3a59..c490271 100644 --- a/readme.md +++ b/readme.md @@ -12,12 +12,14 @@ chmod +x setup.sh ``` This script will: -- Install npm (if not already installed) -- Install Zed editor (if not already installed) +- Check for npm (if not found, provides manual installation instructions) +- Check for Zed editor (if not found, provides manual installation instructions) - Clone the acodex_server repository - Install project dependencies - Build the project +**Note:** The script requires npm and Zed editor to be installed manually for security reasons. It will not automatically install these tools. + ## Usage Use this for debug build: diff --git a/setup.sh b/setup.sh index 41c68ca..7280395 100755 --- a/setup.sh +++ b/setup.sh @@ -15,7 +15,7 @@ command_exists() { command -v "$1" >/dev/null 2>&1 } -# Install npm if not already installed +# Check npm installation echo "Step 1: Checking npm installation..." if command_exists npm; then echo "✓ npm is already installed (version: $(npm --version))" @@ -34,19 +34,18 @@ else fi echo "" -# Install Zed editor if not already installed +# Check Zed editor installation echo "Step 2: Checking Zed editor installation..." if command_exists zed; then echo "✓ Zed editor is already installed" else - echo "Installing Zed editor..." - curl -f https://zed.dev/install.sh | sh - if command_exists zed; then - echo "✓ Zed editor installed successfully" - else - echo "✗ Zed editor installation failed. Please check your system and try again." >&2 - exit 1 - fi + echo "Zed editor is not installed." + echo "For security reasons, this script does not install Zed editor automatically." + echo "Please install Zed editor manually from the official website:" + echo " https://zed.dev/download" + echo "" + echo "After installing Zed editor, re-run this setup script." + exit 1 fi echo "" @@ -56,8 +55,17 @@ if [ -d "acodex_server" ]; then echo "✓ acodex_server repository already exists" echo " Updating repository..." cd acodex_server - git pull || echo "Warning: Could not update repository" - cd .. + if ! git pull 2>git_pull_error.log; then + echo "✗ Could not update repository. See details below:" >&2 + cat git_pull_error.log >&2 + echo "Please manually review the repository for issues such as merge conflicts, network problems, or uncommitted changes." >&2 + echo "You may need to resolve these issues before continuing." >&2 + rm -f git_pull_error.log + cd .. || { echo "Error: Failed to change directory from acodex_server to parent directory."; exit 1; } + exit 1 + fi + rm -f git_pull_error.log + cd .. || { echo "Error: Failed to change directory from acodex_server to parent directory."; exit 1; } else echo "Cloning acodex_server repository..." if command_exists gh; then @@ -86,6 +94,6 @@ echo "Setup completed successfully!" echo "==========================================" echo "" echo "You can now start development with:" -echo " npm run dev - Start development server" +echo " npm run dev - Start development build (esbuild serve mode)" echo " npm run build - Build for production" echo "" From 7e4c89c6a899bfed44b8bfbd0817236b0e52f523 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 23 Nov 2025 00:15:29 +0000 Subject: [PATCH 11/11] Refactor git pull error handling to reduce code duplication Co-authored-by: doni108108doni <185000818+doni108108doni@users.noreply.github.com> --- setup.sh | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/setup.sh b/setup.sh index 7280395..7c7950b 100755 --- a/setup.sh +++ b/setup.sh @@ -54,18 +54,21 @@ echo "Step 3: Checking acodex_server repository..." if [ -d "acodex_server" ]; then echo "✓ acodex_server repository already exists" echo " Updating repository..." - cd acodex_server - if ! git pull 2>git_pull_error.log; then - echo "✗ Could not update repository. See details below:" >&2 - cat git_pull_error.log >&2 - echo "Please manually review the repository for issues such as merge conflicts, network problems, or uncommitted changes." >&2 - echo "You may need to resolve these issues before continuing." >&2 - rm -f git_pull_error.log - cd .. || { echo "Error: Failed to change directory from acodex_server to parent directory."; exit 1; } + ( + cd acodex_server || exit 1 + if ! git pull 2>../git_pull_error.log; then + echo "✗ Could not update repository. See details below:" >&2 + cat ../git_pull_error.log >&2 + echo "Please manually review the repository for issues such as merge conflicts, network problems, or uncommitted changes." >&2 + echo "You may need to resolve these issues before continuing." >&2 + exit 1 + fi + ) + exit_code=$? + rm -f git_pull_error.log + if [ $exit_code -ne 0 ]; then exit 1 fi - rm -f git_pull_error.log - cd .. || { echo "Error: Failed to change directory from acodex_server to parent directory."; exit 1; } else echo "Cloning acodex_server repository..." if command_exists gh; then