@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.
Files changed (100) hide show
  1. package/.clang-tidy +28 -0
  2. package/.dockerignore +56 -0
  3. package/.env.example +29 -0
  4. package/.github/CODEOWNERS +2 -0
  5. package/.github/ISSUE_TEMPLATE/blank.md +27 -0
  6. package/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
  7. package/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
  8. package/.github/SECURITY.md +24 -0
  9. package/.github/codeql/codeql-config.yml +8 -0
  10. package/.github/dependabot.yml +14 -0
  11. package/.github/labeler.yml +50 -0
  12. package/.github/packaging/brand-cursor.png +0 -0
  13. package/.github/packaging/database/init.sql +48 -0
  14. package/.github/packaging/docker/Dockerfile +111 -0
  15. package/.github/packaging/docker/docker-compose.yml +56 -0
  16. package/.github/packaging/scripts/preflight.sh +413 -0
  17. package/.github/packaging/scripts/prepare-release.sh +141 -0
  18. package/.github/packaging/scripts/release.sh +22 -0
  19. package/.github/packaging/scripts/setup-git-hooks.sh +73 -0
  20. package/.github/pull_request_template.md +31 -0
  21. package/.github/signed.json +9 -0
  22. package/.github/workflows/README.md +23 -0
  23. package/.github/workflows/ci.yml +181 -0
  24. package/.github/workflows/cla.yml +33 -0
  25. package/.github/workflows/formula-sha.yml +63 -0
  26. package/.github/workflows/issue-response.yml +44 -0
  27. package/.github/workflows/labeler.yml +42 -0
  28. package/.github/workflows/pr-body.yml +49 -0
  29. package/.github/workflows/release.yml +176 -0
  30. package/.github/workflows/security.yml +94 -0
  31. package/.github/workflows/stale.yml +38 -0
  32. package/AGENTS.md +49 -0
  33. package/CHANGELOG.md +3 -0
  34. package/CMakeLists.txt +646 -0
  35. package/Formula/cursor.rb +46 -0
  36. package/LICENSE +201 -0
  37. package/Makefile +28 -0
  38. package/README.md +46 -0
  39. package/cli.js +16 -0
  40. package/include/agent.h +86 -0
  41. package/include/agent_mode.h +17 -0
  42. package/include/memory_manager.h +102 -0
  43. package/include/services/ai_service.h +31 -0
  44. package/include/services/auth_service.h +87 -0
  45. package/include/services/checkpoint_service.h +69 -0
  46. package/include/services/codebase_service.h +38 -0
  47. package/include/services/command_service.h +23 -0
  48. package/include/services/context_service.h +74 -0
  49. package/include/services/database_service.h +56 -0
  50. package/include/services/error_service.h +106 -0
  51. package/include/services/file_service.h +51 -0
  52. package/include/services/git_service.h +29 -0
  53. package/include/services/github_service.h +85 -0
  54. package/include/services/mcp_service.h +85 -0
  55. package/include/services/multi_file_service.h +93 -0
  56. package/include/services/sandbox_service.h +96 -0
  57. package/include/services/theme_service.h +67 -0
  58. package/include/services/web_service.h +52 -0
  59. package/include/utils/config.h +68 -0
  60. package/include/utils/memory_utils.h +79 -0
  61. package/include/utils/platform.h +56 -0
  62. package/include/utils/ui.h +43 -0
  63. package/include/utils/validation.h +63 -0
  64. package/include/utils/version.h.in +17 -0
  65. package/install.js +49 -0
  66. package/package.json +16 -0
  67. package/release/checksums.txt +3 -0
  68. package/release/cursor-linux/cursor_v0.1.7_linux_amd64.tar.gz +0 -0
  69. package/release/cursor-macos/cursor_v0.1.7_darwin_arm64.tar.gz +0 -0
  70. package/release/cursor-windows/cursor__windows_amd64.zip +0 -0
  71. package/src/agent.cpp +2026 -0
  72. package/src/main.cpp +97 -0
  73. package/src/memory_manager.cpp +814 -0
  74. package/src/services/ai_service.cpp +366 -0
  75. package/src/services/auth_service.cpp +779 -0
  76. package/src/services/checkpoint_service.cpp +465 -0
  77. package/src/services/codebase_service.cpp +233 -0
  78. package/src/services/command_service.cpp +82 -0
  79. package/src/services/context_service.cpp +348 -0
  80. package/src/services/database_service.cpp +148 -0
  81. package/src/services/error_service.cpp +438 -0
  82. package/src/services/file_service.cpp +349 -0
  83. package/src/services/git_service.cpp +148 -0
  84. package/src/services/github_service.cpp +435 -0
  85. package/src/services/mcp_service.cpp +481 -0
  86. package/src/services/multi_file_service.cpp +591 -0
  87. package/src/services/sandbox_service.cpp +678 -0
  88. package/src/services/theme_service.cpp +429 -0
  89. package/src/services/web_service.cpp +532 -0
  90. package/src/utils/config.cpp +77 -0
  91. package/src/utils/memory_utils.cpp +93 -0
  92. package/src/utils/ui.cpp +307 -0
  93. package/src/utils/validation.cpp +306 -0
  94. package/src/utils/version.cpp +175 -0
  95. package/tests/e2e/docker-compose.yml +195 -0
  96. package/tests/e2e/run_e2e_tests.sh +70 -0
  97. package/tests/e2e/run_tests_in_docker.sh +115 -0
  98. package/tests/main_test.cpp +16 -0
  99. package/tests/mocks/mock_ollama.py +98 -0
  100. 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