@bniladridas/cursor 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.clang-tidy +28 -0
- package/.dockerignore +56 -0
- package/.env.example +29 -0
- package/.github/CODEOWNERS +2 -0
- package/.github/ISSUE_TEMPLATE/blank.md +27 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
- package/.github/SECURITY.md +24 -0
- package/.github/codeql/codeql-config.yml +8 -0
- package/.github/dependabot.yml +14 -0
- package/.github/labeler.yml +50 -0
- package/.github/packaging/brand-cursor.png +0 -0
- package/.github/packaging/database/init.sql +48 -0
- package/.github/packaging/docker/Dockerfile +111 -0
- package/.github/packaging/docker/docker-compose.yml +56 -0
- package/.github/packaging/scripts/preflight.sh +413 -0
- package/.github/packaging/scripts/prepare-release.sh +141 -0
- package/.github/packaging/scripts/release.sh +22 -0
- package/.github/packaging/scripts/setup-git-hooks.sh +73 -0
- package/.github/pull_request_template.md +31 -0
- package/.github/signed.json +9 -0
- package/.github/workflows/README.md +23 -0
- package/.github/workflows/ci.yml +181 -0
- package/.github/workflows/cla.yml +33 -0
- package/.github/workflows/formula-sha.yml +63 -0
- package/.github/workflows/issue-response.yml +44 -0
- package/.github/workflows/labeler.yml +42 -0
- package/.github/workflows/pr-body.yml +49 -0
- package/.github/workflows/release.yml +176 -0
- package/.github/workflows/security.yml +94 -0
- package/.github/workflows/stale.yml +38 -0
- package/AGENTS.md +49 -0
- package/CHANGELOG.md +3 -0
- package/CMakeLists.txt +646 -0
- package/Formula/cursor.rb +46 -0
- package/LICENSE +201 -0
- package/Makefile +28 -0
- package/README.md +46 -0
- package/cli.js +16 -0
- package/include/agent.h +86 -0
- package/include/agent_mode.h +17 -0
- package/include/memory_manager.h +102 -0
- package/include/services/ai_service.h +31 -0
- package/include/services/auth_service.h +87 -0
- package/include/services/checkpoint_service.h +69 -0
- package/include/services/codebase_service.h +38 -0
- package/include/services/command_service.h +23 -0
- package/include/services/context_service.h +74 -0
- package/include/services/database_service.h +56 -0
- package/include/services/error_service.h +106 -0
- package/include/services/file_service.h +51 -0
- package/include/services/git_service.h +29 -0
- package/include/services/github_service.h +85 -0
- package/include/services/mcp_service.h +85 -0
- package/include/services/multi_file_service.h +93 -0
- package/include/services/sandbox_service.h +96 -0
- package/include/services/theme_service.h +67 -0
- package/include/services/web_service.h +52 -0
- package/include/utils/config.h +68 -0
- package/include/utils/memory_utils.h +79 -0
- package/include/utils/platform.h +56 -0
- package/include/utils/ui.h +43 -0
- package/include/utils/validation.h +63 -0
- package/include/utils/version.h.in +17 -0
- package/install.js +49 -0
- package/package.json +16 -0
- package/release/checksums.txt +3 -0
- package/release/cursor-linux/cursor_v0.1.7_linux_amd64.tar.gz +0 -0
- package/release/cursor-macos/cursor_v0.1.7_darwin_arm64.tar.gz +0 -0
- package/release/cursor-windows/cursor__windows_amd64.zip +0 -0
- package/src/agent.cpp +2026 -0
- package/src/main.cpp +97 -0
- package/src/memory_manager.cpp +814 -0
- package/src/services/ai_service.cpp +366 -0
- package/src/services/auth_service.cpp +779 -0
- package/src/services/checkpoint_service.cpp +465 -0
- package/src/services/codebase_service.cpp +233 -0
- package/src/services/command_service.cpp +82 -0
- package/src/services/context_service.cpp +348 -0
- package/src/services/database_service.cpp +148 -0
- package/src/services/error_service.cpp +438 -0
- package/src/services/file_service.cpp +349 -0
- package/src/services/git_service.cpp +148 -0
- package/src/services/github_service.cpp +435 -0
- package/src/services/mcp_service.cpp +481 -0
- package/src/services/multi_file_service.cpp +591 -0
- package/src/services/sandbox_service.cpp +678 -0
- package/src/services/theme_service.cpp +429 -0
- package/src/services/web_service.cpp +532 -0
- package/src/utils/config.cpp +77 -0
- package/src/utils/memory_utils.cpp +93 -0
- package/src/utils/ui.cpp +307 -0
- package/src/utils/validation.cpp +306 -0
- package/src/utils/version.cpp +175 -0
- package/tests/e2e/docker-compose.yml +195 -0
- package/tests/e2e/run_e2e_tests.sh +70 -0
- package/tests/e2e/run_tests_in_docker.sh +115 -0
- package/tests/main_test.cpp +16 -0
- package/tests/mocks/mock_ollama.py +98 -0
- package/tests/mocks/start_nginx.sh +64 -0
package/CMakeLists.txt
ADDED
|
@@ -0,0 +1,646 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.14)
|
|
2
|
+
|
|
3
|
+
# Get version from git tag if available, fallback to 0.1.6
|
|
4
|
+
find_package(Git)
|
|
5
|
+
if(GIT_FOUND)
|
|
6
|
+
execute_process(
|
|
7
|
+
COMMAND ${GIT_EXECUTABLE} describe --tags --abbrev=0
|
|
8
|
+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
9
|
+
OUTPUT_VARIABLE GIT_TAG
|
|
10
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
11
|
+
ERROR_QUIET
|
|
12
|
+
)
|
|
13
|
+
if(GIT_TAG)
|
|
14
|
+
string(REGEX REPLACE "^v" "" PROJECT_VERSION ${GIT_TAG})
|
|
15
|
+
else()
|
|
16
|
+
set(PROJECT_VERSION "0.1.6")
|
|
17
|
+
endif()
|
|
18
|
+
else()
|
|
19
|
+
set(PROJECT_VERSION "0.1.6")
|
|
20
|
+
endif()
|
|
21
|
+
|
|
22
|
+
project(cursor VERSION ${PROJECT_VERSION} LANGUAGES CXX)
|
|
23
|
+
|
|
24
|
+
# Configure version header
|
|
25
|
+
configure_file(include/utils/version.h.in include/version.h @ONLY)
|
|
26
|
+
|
|
27
|
+
# Include FetchContent for downloading dependencies
|
|
28
|
+
include(FetchContent)
|
|
29
|
+
|
|
30
|
+
# Set C++ standard
|
|
31
|
+
set(CMAKE_CXX_STANDARD 20)
|
|
32
|
+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
33
|
+
|
|
34
|
+
# Generate compile_commands.json for clang-tidy
|
|
35
|
+
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
36
|
+
|
|
37
|
+
# Build configuration
|
|
38
|
+
if(NOT CMAKE_BUILD_TYPE)
|
|
39
|
+
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
|
40
|
+
endif()
|
|
41
|
+
|
|
42
|
+
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
|
43
|
+
set(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
|
|
44
|
+
|
|
45
|
+
if(MSVC)
|
|
46
|
+
add_compile_options(/W4 /WX /MP /EHsc)
|
|
47
|
+
add_compile_definitions(_CRT_SECURE_NO_WARNINGS)
|
|
48
|
+
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:DebugDLL>")
|
|
49
|
+
else()
|
|
50
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
51
|
+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
52
|
+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
53
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
|
|
54
|
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fprofile-arcs -ftest-coverage")
|
|
55
|
+
endif()
|
|
56
|
+
endif()
|
|
57
|
+
|
|
58
|
+
# Clang-Tidy configuration (disabled due to libpqxx compatibility issues)
|
|
59
|
+
# find_program(CLANG_TIDY_EXE NAMES clang-tidy)
|
|
60
|
+
# if(CLANG_TIDY_EXE)
|
|
61
|
+
# set(CMAKE_CXX_CLANG_TIDY "${CLANG_TIDY_EXE};--config-file=${CMAKE_SOURCE_DIR}/.clang-tidy")
|
|
62
|
+
# message(STATUS "Clang-Tidy found: ${CLANG_TIDY_EXE}")
|
|
63
|
+
# else()
|
|
64
|
+
# message(STATUS "Clang-Tidy not found. Please install it via your system's package manager (e.g., 'brew install llvm' or 'apt install clang-tidy').")
|
|
65
|
+
# endif()
|
|
66
|
+
|
|
67
|
+
# Find dependencies
|
|
68
|
+
find_package(Threads REQUIRED)
|
|
69
|
+
|
|
70
|
+
# Find zlib with platform-specific logic, fallback to FetchContent
|
|
71
|
+
set(zlib_is_found FALSE)
|
|
72
|
+
if(APPLE)
|
|
73
|
+
# On macOS, prefer pkg-config as it's more reliable with Homebrew
|
|
74
|
+
find_package(PkgConfig QUIET)
|
|
75
|
+
if(PkgConfig_FOUND)
|
|
76
|
+
pkg_check_modules(ZLIB QUIET IMPORTED_TARGET zlib)
|
|
77
|
+
if(ZLIB_FOUND)
|
|
78
|
+
message(STATUS "Found zlib using pkg-config: ${ZLIB_LINK_LIBRARIES}")
|
|
79
|
+
set(ZLIB_TARGET PkgConfig::ZLIB)
|
|
80
|
+
set(zlib_is_found TRUE)
|
|
81
|
+
endif()
|
|
82
|
+
endif()
|
|
83
|
+
elseif(WIN32)
|
|
84
|
+
# On Windows, first try to find zlib via vcpkg
|
|
85
|
+
find_package(ZLIB QUIET)
|
|
86
|
+
if(ZLIB_FOUND)
|
|
87
|
+
message(STATUS "Found zlib via vcpkg: ${ZLIB_LIBRARIES}")
|
|
88
|
+
# Create an imported target for zlib if it doesn't exist
|
|
89
|
+
if(NOT TARGET zlib_imported)
|
|
90
|
+
add_library(zlib_imported INTERFACE IMPORTED)
|
|
91
|
+
target_link_libraries(zlib_imported INTERFACE ${ZLIB_LIBRARIES})
|
|
92
|
+
target_include_directories(zlib_imported INTERFACE ${ZLIB_INCLUDE_DIRS})
|
|
93
|
+
endif()
|
|
94
|
+
set(ZLIB_TARGET zlib_imported)
|
|
95
|
+
set(zlib_is_found TRUE)
|
|
96
|
+
endif()
|
|
97
|
+
else()
|
|
98
|
+
# Linux/other Unix-like systems
|
|
99
|
+
find_package(ZLIB QUIET)
|
|
100
|
+
if(ZLIB_FOUND)
|
|
101
|
+
set(ZLIB_TARGET ZLIB::ZLIB)
|
|
102
|
+
set(zlib_is_found TRUE)
|
|
103
|
+
else()
|
|
104
|
+
find_package(PkgConfig QUIET)
|
|
105
|
+
if(PkgConfig_FOUND)
|
|
106
|
+
pkg_check_modules(ZLIB QUIET IMPORTED_TARGET zlib)
|
|
107
|
+
if(ZLIB_FOUND)
|
|
108
|
+
set(ZLIB_TARGET PkgConfig::ZLIB)
|
|
109
|
+
set(zlib_is_found TRUE)
|
|
110
|
+
endif()
|
|
111
|
+
endif()
|
|
112
|
+
endif()
|
|
113
|
+
endif()
|
|
114
|
+
|
|
115
|
+
if(NOT zlib_is_found)
|
|
116
|
+
message(STATUS "zlib not found, downloading using FetchContent...")
|
|
117
|
+
FetchContent_Declare(
|
|
118
|
+
zlib
|
|
119
|
+
GIT_REPOSITORY https://github.com/madler/zlib.git
|
|
120
|
+
GIT_TAG v1.3
|
|
121
|
+
)
|
|
122
|
+
FetchContent_MakeAvailable(zlib)
|
|
123
|
+
set(ZLIB_TARGET zlib)
|
|
124
|
+
set(zlib_is_found TRUE)
|
|
125
|
+
endif()
|
|
126
|
+
|
|
127
|
+
# Find libcurl
|
|
128
|
+
find_package(CURL REQUIRED)
|
|
129
|
+
|
|
130
|
+
# Find OpenSSL, fallback to FetchContent
|
|
131
|
+
set(openssl_is_found FALSE)
|
|
132
|
+
if(APPLE)
|
|
133
|
+
set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "Build architectures for macOS" FORCE)
|
|
134
|
+
# Set deployment target based on environment
|
|
135
|
+
if(DEFINED ENV{CI} OR DEFINED ENV{GITHUB_ACTIONS})
|
|
136
|
+
# Use compatible version for CI environments
|
|
137
|
+
set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum macOS version" FORCE)
|
|
138
|
+
else()
|
|
139
|
+
# Use current system version to avoid linker warnings with Homebrew libraries
|
|
140
|
+
set(CMAKE_OSX_DEPLOYMENT_TARGET "14.0" CACHE STRING "Minimum macOS version" FORCE)
|
|
141
|
+
endif()
|
|
142
|
+
|
|
143
|
+
# Use Homebrew's OpenSSL on macOS/arm64
|
|
144
|
+
if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
|
|
145
|
+
# Try to find Homebrew's OpenSSL
|
|
146
|
+
find_program(HOMEBREW NAMES brew)
|
|
147
|
+
if(HOMEBREW)
|
|
148
|
+
execute_process(
|
|
149
|
+
COMMAND ${HOMEBREW} --prefix openssl@3
|
|
150
|
+
OUTPUT_VARIABLE OPENSSL_ROOT_DIR
|
|
151
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
152
|
+
)
|
|
153
|
+
if(EXISTS ${OPENSSL_ROOT_DIR})
|
|
154
|
+
set(OPENSSL_ROOT_DIR ${OPENSSL_ROOT_DIR} CACHE PATH "OpenSSL root directory")
|
|
155
|
+
find_package(OpenSSL QUIET)
|
|
156
|
+
if(OpenSSL_FOUND)
|
|
157
|
+
set(openssl_is_found TRUE)
|
|
158
|
+
message(STATUS "Using Homebrew's OpenSSL: ${OPENSSL_INCLUDE_DIR}")
|
|
159
|
+
endif()
|
|
160
|
+
endif()
|
|
161
|
+
|
|
162
|
+
# Also find Homebrew's curl if available
|
|
163
|
+
execute_process(
|
|
164
|
+
COMMAND ${HOMEBREW} --prefix curl
|
|
165
|
+
OUTPUT_VARIABLE CURL_ROOT_DIR
|
|
166
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
167
|
+
)
|
|
168
|
+
if(EXISTS ${CURL_ROOT_DIR})
|
|
169
|
+
set(CURL_INCLUDE_DIRS ${CURL_ROOT_DIR}/include)
|
|
170
|
+
set(CURL_LIBRARIES ${CURL_ROOT_DIR}/lib/libcurl.dylib)
|
|
171
|
+
message(STATUS "Using Homebrew's curl: ${CURL_ROOT_DIR}")
|
|
172
|
+
endif()
|
|
173
|
+
endif()
|
|
174
|
+
endif()
|
|
175
|
+
|
|
176
|
+
if(NOT openssl_is_found)
|
|
177
|
+
find_package(OpenSSL QUIET)
|
|
178
|
+
if(OpenSSL_FOUND)
|
|
179
|
+
set(openssl_is_found TRUE)
|
|
180
|
+
endif()
|
|
181
|
+
endif()
|
|
182
|
+
else()
|
|
183
|
+
# On other platforms, use system OpenSSL
|
|
184
|
+
find_package(OpenSSL QUIET)
|
|
185
|
+
if(OpenSSL_FOUND)
|
|
186
|
+
set(openssl_is_found TRUE)
|
|
187
|
+
endif()
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
endif()
|
|
191
|
+
|
|
192
|
+
if(NOT openssl_is_found)
|
|
193
|
+
message(STATUS "OpenSSL not found, downloading using FetchContent...")
|
|
194
|
+
FetchContent_Declare(
|
|
195
|
+
openssl
|
|
196
|
+
GIT_REPOSITORY https://github.com/openssl/openssl.git
|
|
197
|
+
GIT_TAG openssl-3.2.1
|
|
198
|
+
)
|
|
199
|
+
set(OPENSSL_BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
|
200
|
+
FetchContent_MakeAvailable(openssl)
|
|
201
|
+
add_library(OpenSSL::SSL ALIAS ssl)
|
|
202
|
+
add_library(OpenSSL::Crypto ALIAS crypto)
|
|
203
|
+
set(OPENSSL_INCLUDE_DIR ${openssl_SOURCE_DIR}/include)
|
|
204
|
+
set(openssl_is_found TRUE)
|
|
205
|
+
endif()
|
|
206
|
+
|
|
207
|
+
# Add compiler and linker flags for macOS
|
|
208
|
+
if(APPLE)
|
|
209
|
+
add_compile_options(-march=armv8.4-a+fp16+rcpc+dotprod+crypto)
|
|
210
|
+
add_link_options(-Wl,-no_weak_imports)
|
|
211
|
+
set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
|
|
212
|
+
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
213
|
+
set(CMAKE_MACOSX_RPATH TRUE)
|
|
214
|
+
endif()
|
|
215
|
+
|
|
216
|
+
# Make sure we have the curl include directory
|
|
217
|
+
if(NOT CURL_INCLUDE_DIRS)
|
|
218
|
+
set(CURL_INCLUDE_DIRS ${CURL_INCLUDE_DIR})
|
|
219
|
+
endif()
|
|
220
|
+
|
|
221
|
+
message(STATUS "Using curl: ${CURL_INCLUDE_DIRS} : ${CURL_LIBRARIES}")
|
|
222
|
+
|
|
223
|
+
# Find nlohmann_json
|
|
224
|
+
find_package(nlohmann_json 3.11.2 QUIET)
|
|
225
|
+
if(NOT nlohmann_json_FOUND)
|
|
226
|
+
message(STATUS "nlohmann_json not found, downloading using FetchContent...")
|
|
227
|
+
FetchContent_Declare(
|
|
228
|
+
nlohmann_json
|
|
229
|
+
GIT_REPOSITORY https://github.com/nlohmann/json.git
|
|
230
|
+
GIT_TAG v3.11.2
|
|
231
|
+
)
|
|
232
|
+
FetchContent_MakeAvailable(nlohmann_json)
|
|
233
|
+
endif()
|
|
234
|
+
|
|
235
|
+
# Find libpqxx (optional)
|
|
236
|
+
find_library(PQXX_LIBRARY pqxx)
|
|
237
|
+
find_path(PQXX_INCLUDE_DIR pqxx/pqxx)
|
|
238
|
+
if(PQXX_LIBRARY AND PQXX_INCLUDE_DIR)
|
|
239
|
+
set(HAVE_PQXX TRUE)
|
|
240
|
+
message(STATUS "Found libpqxx: ${PQXX_LIBRARY}")
|
|
241
|
+
else()
|
|
242
|
+
set(HAVE_PQXX FALSE)
|
|
243
|
+
message(WARNING "libpqxx not found. Database support will be disabled. Install libpqxx-dev to enable PostgreSQL support.")
|
|
244
|
+
endif()
|
|
245
|
+
|
|
246
|
+
# Find CPR - try to find the package first
|
|
247
|
+
set(CPR_MIN_VERSION "1.10.0")
|
|
248
|
+
set(CPR_FOUND FALSE)
|
|
249
|
+
|
|
250
|
+
# First try to find CPR using config mode
|
|
251
|
+
find_package(cpr ${CPR_MIN_VERSION} QUIET)
|
|
252
|
+
|
|
253
|
+
if(TARGET cpr::cpr)
|
|
254
|
+
message(STATUS "Found CPR (config mode): ${cpr_VERSION}")
|
|
255
|
+
set(CPR_FOUND TRUE)
|
|
256
|
+
else()
|
|
257
|
+
# If not found, try to find the library directly
|
|
258
|
+
find_library(CPR_LIBRARY NAMES cpr)
|
|
259
|
+
find_path(CPR_INCLUDE_DIR NAMES cpr/cpr.h)
|
|
260
|
+
|
|
261
|
+
if(CPR_LIBRARY AND CPR_INCLUDE_DIR)
|
|
262
|
+
message(STATUS "Found CPR (library): ${CPR_LIBRARY}")
|
|
263
|
+
add_library(cpr::cpr INTERFACE IMPORTED)
|
|
264
|
+
target_include_directories(cpr::cpr INTERFACE ${CPR_INCLUDE_DIR})
|
|
265
|
+
target_link_libraries(cpr::cpr INTERFACE
|
|
266
|
+
${CPR_LIBRARY}
|
|
267
|
+
CURL::libcurl
|
|
268
|
+
OpenSSL::SSL
|
|
269
|
+
OpenSSL::Crypto
|
|
270
|
+
${ZLIB_TARGET}
|
|
271
|
+
)
|
|
272
|
+
set(CPR_FOUND TRUE)
|
|
273
|
+
endif()
|
|
274
|
+
endif()
|
|
275
|
+
|
|
276
|
+
if(NOT CPR_FOUND)
|
|
277
|
+
# If still not found, try to fetch it using FetchContent
|
|
278
|
+
message(STATUS "CPR not found, downloading using FetchContent...")
|
|
279
|
+
include(FetchContent)
|
|
280
|
+
|
|
281
|
+
FetchContent_Declare(
|
|
282
|
+
cpr
|
|
283
|
+
GIT_REPOSITORY https://github.com/libcpr/cpr.git
|
|
284
|
+
GIT_TAG 1.10.5 # Updated to a more recent version
|
|
285
|
+
)
|
|
286
|
+
|
|
287
|
+
# Prevent building tests and examples
|
|
288
|
+
set(CPR_BUILD_TESTS OFF CACHE BOOL "")
|
|
289
|
+
set(CPR_BUILD_TESTS_SSL OFF CACHE BOOL "")
|
|
290
|
+
set(CPR_BUILD_TESTS_VERBOSE OFF CACHE BOOL "")
|
|
291
|
+
|
|
292
|
+
# Build CPR as static library for better linking compatibility
|
|
293
|
+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "")
|
|
294
|
+
|
|
295
|
+
# Add compiler flags to suppress deprecation warnings
|
|
296
|
+
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
|
297
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations")
|
|
298
|
+
endif()
|
|
299
|
+
|
|
300
|
+
# Make sure we're using a compatible version of CPR
|
|
301
|
+
set(CPR_CURL_NOSIGNAL ON CACHE BOOL "")
|
|
302
|
+
|
|
303
|
+
# Make the directory to suppress warnings about missing directory
|
|
304
|
+
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/_deps/cpr-build")
|
|
305
|
+
|
|
306
|
+
FetchContent_MakeAvailable(cpr)
|
|
307
|
+
|
|
308
|
+
# Add the include directory if it exists
|
|
309
|
+
if(EXISTS "${CMAKE_BINARY_DIR}/_deps/cpr-src/include")
|
|
310
|
+
target_include_directories(cpr PUBLIC "${CMAKE_BINARY_DIR}/_deps/cpr-src/include")
|
|
311
|
+
endif()
|
|
312
|
+
|
|
313
|
+
if(TARGET cpr::cpr)
|
|
314
|
+
message(STATUS "CPR downloaded and built from source")
|
|
315
|
+
set(CPR_FOUND TRUE)
|
|
316
|
+
else()
|
|
317
|
+
message(FATAL_ERROR "Failed to find or build CPR. Please install it manually or check your network connection.")
|
|
318
|
+
endif()
|
|
319
|
+
endif()
|
|
320
|
+
# Enable testing
|
|
321
|
+
enable_testing()
|
|
322
|
+
|
|
323
|
+
# Fetch Google Test
|
|
324
|
+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
325
|
+
|
|
326
|
+
# Only fetch and build gtest if not already found
|
|
327
|
+
if(NOT TARGET gtest)
|
|
328
|
+
message(STATUS "Downloading and building Google Test...")
|
|
329
|
+
FetchContent_Declare(
|
|
330
|
+
googletest
|
|
331
|
+
GIT_REPOSITORY https://github.com/google/googletest.git
|
|
332
|
+
GIT_TAG v1.14.0
|
|
333
|
+
GIT_SHALLOW TRUE
|
|
334
|
+
)
|
|
335
|
+
|
|
336
|
+
# For Windows: Prevent overriding the parent project's compiler/linker settings
|
|
337
|
+
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
|
338
|
+
|
|
339
|
+
# Build static libraries to avoid runtime dependencies
|
|
340
|
+
set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
|
|
341
|
+
|
|
342
|
+
# Make sure we're not overriding compiler flags
|
|
343
|
+
set(INSTALL_GTEST OFF CACHE BOOL "" FORCE)
|
|
344
|
+
set(BUILD_GMOCK ON CACHE BOOL "" FORCE)
|
|
345
|
+
set(BUILD_GTEST ON CACHE BOOL "" FORCE)
|
|
346
|
+
|
|
347
|
+
FetchContent_MakeAvailable(googletest)
|
|
348
|
+
|
|
349
|
+
# Create an interface library for gtest to make it easier to link
|
|
350
|
+
if(NOT TARGET gtest_all_tests)
|
|
351
|
+
add_library(gtest_all_tests INTERFACE)
|
|
352
|
+
target_link_libraries(gtest_all_tests
|
|
353
|
+
INTERFACE
|
|
354
|
+
GTest::GTest
|
|
355
|
+
GTest::Main
|
|
356
|
+
)
|
|
357
|
+
endif()
|
|
358
|
+
endif()
|
|
359
|
+
|
|
360
|
+
# Only set up the cpr target if we're building it ourselves
|
|
361
|
+
if(TARGET cpr)
|
|
362
|
+
# Ensure proper linking on all platforms for our local cpr build
|
|
363
|
+
target_link_libraries(cpr PRIVATE
|
|
364
|
+
OpenSSL::SSL
|
|
365
|
+
OpenSSL::Crypto
|
|
366
|
+
${ZLIB_TARGET} # Use the appropriate zlib target for this platform
|
|
367
|
+
)
|
|
368
|
+
endif()
|
|
369
|
+
|
|
370
|
+
# On macOS, add additional settings
|
|
371
|
+
if(APPLE)
|
|
372
|
+
# Set minimum deployment target (already set above)
|
|
373
|
+
# Use system version to avoid linker warnings with Homebrew libraries
|
|
374
|
+
|
|
375
|
+
# Set rpath
|
|
376
|
+
set(CMAKE_INSTALL_RPATH "@executable_path/../lib")
|
|
377
|
+
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
|
|
378
|
+
set(CMAKE_MACOSX_RPATH TRUE)
|
|
379
|
+
|
|
380
|
+
# Add compiler and linker flags to all targets
|
|
381
|
+
add_compile_options(
|
|
382
|
+
-march=armv8.4-a+fp16+rcpc+dotprod+crypto
|
|
383
|
+
-Wno-deprecated-declarations
|
|
384
|
+
)
|
|
385
|
+
|
|
386
|
+
add_link_options(
|
|
387
|
+
-Wl,-no_weak_imports
|
|
388
|
+
)
|
|
389
|
+
|
|
390
|
+
# Add these flags to the main target as well
|
|
391
|
+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=armv8.4-a+fp16+rcpc+dotprod+crypto -Wno-deprecated-declarations")
|
|
392
|
+
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-no_weak_imports")
|
|
393
|
+
|
|
394
|
+
# Add OpenSSL include directories to all targets
|
|
395
|
+
include_directories(${OPENSSL_INCLUDE_DIR})
|
|
396
|
+
|
|
397
|
+
# Add OpenSSL definitions to all targets
|
|
398
|
+
add_compile_definitions(
|
|
399
|
+
CURL_USE_OPENSSL=1
|
|
400
|
+
CURL_USE_DARWINSSL=0
|
|
401
|
+
CURL_USE_SECTRANSP=0
|
|
402
|
+
)
|
|
403
|
+
endif()
|
|
404
|
+
|
|
405
|
+
# Include directories
|
|
406
|
+
include_directories(include)
|
|
407
|
+
|
|
408
|
+
# Source files organized by modules
|
|
409
|
+
set(CORE_SOURCES
|
|
410
|
+
src/agent.cpp
|
|
411
|
+
)
|
|
412
|
+
|
|
413
|
+
set(SERVICE_SOURCES
|
|
414
|
+
src/services/command_service.cpp
|
|
415
|
+
src/services/file_service.cpp
|
|
416
|
+
src/services/web_service.cpp
|
|
417
|
+
src/services/ai_service.cpp
|
|
418
|
+
src/services/git_service.cpp
|
|
419
|
+
src/services/github_service.cpp
|
|
420
|
+
src/services/codebase_service.cpp
|
|
421
|
+
src/services/multi_file_service.cpp
|
|
422
|
+
src/services/context_service.cpp
|
|
423
|
+
src/services/checkpoint_service.cpp
|
|
424
|
+
src/services/mcp_service.cpp
|
|
425
|
+
src/services/theme_service.cpp
|
|
426
|
+
src/services/auth_service.cpp
|
|
427
|
+
src/services/error_service.cpp
|
|
428
|
+
src/services/sandbox_service.cpp
|
|
429
|
+
src/services/database_service.cpp
|
|
430
|
+
)
|
|
431
|
+
|
|
432
|
+
set(UTILS_SOURCES
|
|
433
|
+
src/utils/ui.cpp
|
|
434
|
+
src/utils/config.cpp
|
|
435
|
+
src/utils/memory_utils.cpp
|
|
436
|
+
src/utils/version.cpp
|
|
437
|
+
src/utils/validation.cpp
|
|
438
|
+
)
|
|
439
|
+
|
|
440
|
+
set(DATA_SOURCES
|
|
441
|
+
src/memory_manager.cpp
|
|
442
|
+
)
|
|
443
|
+
|
|
444
|
+
set(ALL_SOURCES
|
|
445
|
+
${CORE_SOURCES}
|
|
446
|
+
${SERVICE_SOURCES}
|
|
447
|
+
${UTILS_SOURCES}
|
|
448
|
+
${DATA_SOURCES}
|
|
449
|
+
)
|
|
450
|
+
|
|
451
|
+
# Create library with all sources
|
|
452
|
+
add_library(cursor_lib ${ALL_SOURCES})
|
|
453
|
+
target_include_directories(cursor_lib PUBLIC
|
|
454
|
+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
455
|
+
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
|
|
456
|
+
$<INSTALL_INTERFACE:include>
|
|
457
|
+
${CURL_INCLUDE_DIRS}
|
|
458
|
+
${OPENSSL_INCLUDE_DIR}
|
|
459
|
+
${ZLIB_INCLUDE_DIRS}
|
|
460
|
+
$<$<BOOL:${HAVE_PQXX}>:${PQXX_INCLUDE_DIR}>
|
|
461
|
+
)
|
|
462
|
+
|
|
463
|
+
# Set compile definitions for symbol visibility
|
|
464
|
+
target_compile_definitions(cursor_lib PRIVATE CURSOR_LIBRARY $<$<BOOL:${HAVE_PQXX}>:HAVE_PQXX>)
|
|
465
|
+
set_target_properties(cursor_lib PROPERTIES
|
|
466
|
+
CXX_VISIBILITY_PRESET hidden
|
|
467
|
+
VISIBILITY_INLINES_HIDDEN ON
|
|
468
|
+
CXX_STANDARD 20
|
|
469
|
+
CXX_STANDARD_REQUIRED ON
|
|
470
|
+
POSITION_INDEPENDENT_CODE ON
|
|
471
|
+
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
# Set platform-specific compiler flags
|
|
475
|
+
if(MSVC)
|
|
476
|
+
target_compile_options(cursor_lib PRIVATE /W4 /WX /EHsc)
|
|
477
|
+
target_compile_definitions(cursor_lib PRIVATE _CRT_SECURE_NO_WARNINGS)
|
|
478
|
+
set_target_properties(cursor_lib PROPERTIES
|
|
479
|
+
WINDOWS_EXPORT_ALL_SYMBOLS ON
|
|
480
|
+
CXX_VISIBILITY_PRESET default
|
|
481
|
+
)
|
|
482
|
+
target_compile_definitions(cursor_lib PUBLIC "CURSOR_API=__declspec(dllexport)")
|
|
483
|
+
else()
|
|
484
|
+
target_compile_options(cursor_lib PRIVATE -Wall -Wextra -Wpedantic)
|
|
485
|
+
target_compile_definitions(cursor_lib PUBLIC "CURSOR_API=__attribute__((visibility(\"default\")))")
|
|
486
|
+
endif()
|
|
487
|
+
|
|
488
|
+
# Link dependencies as PRIVATE to avoid exposing them
|
|
489
|
+
target_link_libraries(cursor_lib PUBLIC
|
|
490
|
+
nlohmann_json::nlohmann_json
|
|
491
|
+
)
|
|
492
|
+
|
|
493
|
+
target_link_libraries(cursor_lib PRIVATE
|
|
494
|
+
${CURL_LIBRARIES}
|
|
495
|
+
cpr::cpr
|
|
496
|
+
OpenSSL::SSL
|
|
497
|
+
OpenSSL::Crypto
|
|
498
|
+
${ZLIB_TARGET}
|
|
499
|
+
${CMAKE_DL_LIBS}
|
|
500
|
+
Threads::Threads
|
|
501
|
+
$<$<BOOL:${HAVE_PQXX}>:${PQXX_LIBRARY}>
|
|
502
|
+
)
|
|
503
|
+
|
|
504
|
+
# Set additional linker flags for macOS
|
|
505
|
+
if(APPLE)
|
|
506
|
+
target_link_options(cursor_lib PRIVATE -stdlib=libc++)
|
|
507
|
+
target_link_libraries(cursor_lib PRIVATE "-framework CoreFoundation" "-framework Security")
|
|
508
|
+
endif()
|
|
509
|
+
|
|
510
|
+
# Main executable
|
|
511
|
+
add_executable(cursor-agent src/main.cpp)
|
|
512
|
+
target_include_directories(cursor-agent PRIVATE
|
|
513
|
+
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
514
|
+
${CMAKE_CURRENT_BINARY_DIR}/include
|
|
515
|
+
)
|
|
516
|
+
target_link_libraries(cursor-agent PRIVATE
|
|
517
|
+
cursor_lib
|
|
518
|
+
)
|
|
519
|
+
|
|
520
|
+
# Test executable
|
|
521
|
+
add_executable(cursor-tests tests/main_test.cpp src/utils/version.cpp)
|
|
522
|
+
target_include_directories(cursor-tests PRIVATE
|
|
523
|
+
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
524
|
+
${CMAKE_CURRENT_BINARY_DIR}/include
|
|
525
|
+
)
|
|
526
|
+
target_link_libraries(cursor-tests PRIVATE
|
|
527
|
+
cursor_lib
|
|
528
|
+
gtest_main
|
|
529
|
+
gtest
|
|
530
|
+
)
|
|
531
|
+
add_test(NAME basic_tests COMMAND cursor-tests)
|
|
532
|
+
|
|
533
|
+
# Set target properties for test executable
|
|
534
|
+
set_target_properties(cursor-tests PROPERTIES
|
|
535
|
+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
|
|
536
|
+
MACOSX_RPATH ON
|
|
537
|
+
INSTALL_RPATH "@executable_path/lib"
|
|
538
|
+
BUILD_WITH_INSTALL_RPATH TRUE
|
|
539
|
+
)
|
|
540
|
+
|
|
541
|
+
# Set target properties
|
|
542
|
+
set_target_properties(cursor-agent PROPERTIES
|
|
543
|
+
OUTPUT_NAME "cursor-agent"
|
|
544
|
+
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
|
545
|
+
MACOSX_RPATH ON
|
|
546
|
+
INSTALL_RPATH "@executable_path/../lib"
|
|
547
|
+
BUILD_WITH_INSTALL_RPATH FALSE
|
|
548
|
+
SKIP_BUILD_RPATH FALSE
|
|
549
|
+
)
|
|
550
|
+
|
|
551
|
+
# On macOS, add additional settings
|
|
552
|
+
if(APPLE)
|
|
553
|
+
target_link_options(cursor-agent PRIVATE
|
|
554
|
+
-Wl,-rpath,@loader_path/../lib
|
|
555
|
+
-Wl,-rpath,/usr/local/lib
|
|
556
|
+
-Wl,-rpath,/opt/homebrew/lib
|
|
557
|
+
)
|
|
558
|
+
endif()
|
|
559
|
+
|
|
560
|
+
# Installation
|
|
561
|
+
install(TARGETS cursor-agent
|
|
562
|
+
RUNTIME DESTINATION bin
|
|
563
|
+
)
|
|
564
|
+
|
|
565
|
+
# Install configuration files (only if .env.example exists)
|
|
566
|
+
if(EXISTS "${CMAKE_SOURCE_DIR}/.env.example")
|
|
567
|
+
install(FILES .env.example
|
|
568
|
+
DESTINATION etc/cursor
|
|
569
|
+
RENAME config.env
|
|
570
|
+
)
|
|
571
|
+
endif()
|
|
572
|
+
|
|
573
|
+
# CPack configuration for package generation
|
|
574
|
+
set(CPACK_PACKAGE_NAME "cursor-agent")
|
|
575
|
+
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
|
|
576
|
+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Professional AI Agent with Command Execution")
|
|
577
|
+
set(CPACK_PACKAGE_DESCRIPTION "A powerful, modular AI agent built with modern C++ that provides seamless interaction with language models and comprehensive system operations.")
|
|
578
|
+
set(CPACK_PACKAGE_VENDOR "bniladridas")
|
|
579
|
+
set(CPACK_PACKAGE_CONTACT "bniladridas@gmail.com")
|
|
580
|
+
|
|
581
|
+
# Platform-specific packaging
|
|
582
|
+
if(APPLE)
|
|
583
|
+
set(CPACK_GENERATOR "DragNDrop")
|
|
584
|
+
elseif(UNIX)
|
|
585
|
+
set(CPACK_GENERATOR "DEB;RPM;TGZ")
|
|
586
|
+
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libcpr1, nlohmann-json3-dev")
|
|
587
|
+
set(CPACK_RPM_PACKAGE_REQUIRES "cpr-devel, json-devel")
|
|
588
|
+
elseif(WIN32)
|
|
589
|
+
set(CPACK_GENERATOR "NSIS;ZIP")
|
|
590
|
+
endif()
|
|
591
|
+
|
|
592
|
+
include(CPack)
|
|
593
|
+
|
|
594
|
+
|
|
595
|
+
|
|
596
|
+
# Add custom check target for testing and validation
|
|
597
|
+
add_custom_target(check
|
|
598
|
+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target cursor-agent
|
|
599
|
+
COMMAND echo "Running automated tests..."
|
|
600
|
+
COMMAND printf "2\\nversion\\nhelp\\nexit\\n" | ${CMAKE_BINARY_DIR}/bin/cursor-agent
|
|
601
|
+
COMMAND echo "Checking binary exists..."
|
|
602
|
+
COMMAND test -f ${CMAKE_BINARY_DIR}/bin/cursor-agent
|
|
603
|
+
COMMAND echo "Validating executable permissions..."
|
|
604
|
+
COMMAND test -x ${CMAKE_BINARY_DIR}/bin/cursor-agent
|
|
605
|
+
COMMAND echo "All checks passed!"
|
|
606
|
+
DEPENDS cursor-agent
|
|
607
|
+
COMMENT "Running comprehensive project validation"
|
|
608
|
+
)
|
|
609
|
+
|
|
610
|
+
# Add quick test target
|
|
611
|
+
add_custom_target(test-quick
|
|
612
|
+
COMMAND printf "2\\nexit\\n" | ${CMAKE_BINARY_DIR}/bin/cursor-agent
|
|
613
|
+
DEPENDS cursor-agent
|
|
614
|
+
COMMENT "Quick functionality test"
|
|
615
|
+
)
|
|
616
|
+
|
|
617
|
+
# Clang-Tidy target (disabled)
|
|
618
|
+
# if(CLANG_TIDY_EXE)
|
|
619
|
+
# add_custom_target(clang-tidy
|
|
620
|
+
# COMMAND ${CLANG_TIDY_EXE} --config-file=${CMAKE_SOURCE_DIR}/.clang-tidy -p ${CMAKE_BINARY_DIR} ${ALL_SOURCES}
|
|
621
|
+
# WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
|
622
|
+
# COMMENT "Running clang-tidy on all source files"
|
|
623
|
+
# )
|
|
624
|
+
# endif()
|
|
625
|
+
|
|
626
|
+
# Code coverage target (requires lcov)
|
|
627
|
+
find_program(LCOV_EXE lcov)
|
|
628
|
+
find_program(GENHTML_EXE genhtml)
|
|
629
|
+
if(LCOV_EXE)
|
|
630
|
+
add_custom_target(coverage
|
|
631
|
+
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/coverage
|
|
632
|
+
COMMAND ctest --output-on-failure
|
|
633
|
+
COMMAND ${LCOV_EXE} --capture --directory ${CMAKE_BINARY_DIR} --output-file ${CMAKE_BINARY_DIR}/coverage/coverage.info --exclude '/usr/*' --exclude '*/tests/*' --exclude '*/_deps/*'
|
|
634
|
+
COMMAND ${LCOV_EXE} --list ${CMAKE_BINARY_DIR}/coverage/coverage.info
|
|
635
|
+
COMMAND ${GENHTML_EXE} ${CMAKE_BINARY_DIR}/coverage/coverage.info --output-directory ${CMAKE_BINARY_DIR}/coverage/html
|
|
636
|
+
DEPENDS cursor-tests
|
|
637
|
+
COMMENT "Running tests and generating code coverage report"
|
|
638
|
+
)
|
|
639
|
+
endif()
|
|
640
|
+
|
|
641
|
+
# Add preflight target (comprehensive pre-deployment checks)
|
|
642
|
+
add_custom_target(preflight
|
|
643
|
+
COMMAND ${CMAKE_SOURCE_DIR}/.github/packaging/scripts/preflight.sh
|
|
644
|
+
DEPENDS cursor-agent
|
|
645
|
+
COMMENT "Running comprehensive preflight checks"
|
|
646
|
+
)
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class Cursor < Formula
|
|
2
|
+
desc "Professional AI agent with command execution and file operations"
|
|
3
|
+
homepage "https://github.com/bniladridas/cursor"
|
|
4
|
+
url "https://github.com/bniladridas/cursor/archive/refs/tags/v0.1.7.tar.gz"
|
|
5
|
+
sha256 "3bd73b2bde8ae719f84e0027b4e01588e6cdc786556a68c5db9aaaf9a8a9dfe1"
|
|
6
|
+
license "Apache-2.0"
|
|
7
|
+
|
|
8
|
+
depends_on "cmake" => :build
|
|
9
|
+
depends_on "cpr"
|
|
10
|
+
depends_on "nlohmann-json"
|
|
11
|
+
|
|
12
|
+
def install
|
|
13
|
+
system "cmake", "-S", ".", "-B", "build", *std_cmake_args
|
|
14
|
+
system "cmake", "--build", "build"
|
|
15
|
+
bin.install "build/bin/cursor-agent" => "cursor"
|
|
16
|
+
|
|
17
|
+
# Install configuration template
|
|
18
|
+
(etc/"cursor").install ".env.example" => "config.env"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def post_install
|
|
22
|
+
(var/"cursor").mkpath
|
|
23
|
+
unless (etc/"cursor/.env").exist?
|
|
24
|
+
cp etc/"cursor/config.env", etc/"cursor/.env"
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test do
|
|
29
|
+
system "#{bin}/cursor", "--version"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def caveats
|
|
33
|
+
<<~EOS
|
|
34
|
+
Configuration file is located at:
|
|
35
|
+
#{etc}/cursor/.env
|
|
36
|
+
|
|
37
|
+
Edit this file with your API keys:
|
|
38
|
+
- TOGETHER_API_KEY (for online mode)
|
|
39
|
+
- CEREBRAS_API_KEY (for Cerebras mode)
|
|
40
|
+
- SERPAPI_KEY (for web search)
|
|
41
|
+
|
|
42
|
+
Data directory:
|
|
43
|
+
#{var}/cursor/
|
|
44
|
+
EOS
|
|
45
|
+
end
|
|
46
|
+
end
|