@comate/zulu 1.4.1 → 1.4.3

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 (25) hide show
  1. package/comate-engine/assets/skills/code-security/SKILL.md +254 -63
  2. package/comate-engine/assets/skills/code-security/references/credential_hosting.md +263 -97
  3. package/comate-engine/assets/skills/code-security/references/framework_detection.md +91 -0
  4. package/comate-engine/assets/skills/code-security/references/vul_repair_sensitive.md +143 -74
  5. package/comate-engine/assets/skills/code-security/scripts/credential_hosting.py +12 -3
  6. package/comate-engine/assets/skills/code-security/scripts/credential_open_page.py +3 -3
  7. package/comate-engine/assets/skills/code-security/scripts/credential_poll.py +1 -1
  8. package/comate-engine/assets/skills/code-security/scripts/credential_print_url.py +43 -0
  9. package/comate-engine/assets/skills/code-security/scripts/credential_url.py +22 -2
  10. package/comate-engine/assets/skills/code-security/scripts/dodo/dodo_session.sh +183 -0
  11. package/comate-engine/assets/skills/code-security/scripts/ducc/get_claude_session_id.sh +8 -4
  12. package/comate-engine/assets/skills/code-security/scripts/ducc/open_browser.py +15 -18
  13. package/comate-engine/assets/skills/code-security/scripts/http_client.py +2 -3
  14. package/comate-engine/assets/skills/code-security/scripts/repair_vulnerability.py +3 -3
  15. package/comate-engine/assets/skills/code-security/scripts/report_chat.py +2 -2
  16. package/comate-engine/assets/skills/code-security/scripts/scan_vulnerability.py +7 -7
  17. package/comate-engine/assets/skills/code-security/scripts/utils.py +26 -11
  18. package/comate-engine/node_modules/better-sqlite3/node_modules/.bin/prebuild-install +2 -2
  19. package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build +2 -2
  20. package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-optional +2 -2
  21. package/comate-engine/node_modules/tree-sitter-bash/node_modules/.bin/node-gyp-build-test +2 -2
  22. package/comate-engine/package.json +2 -0
  23. package/comate-engine/server.js +26 -26
  24. package/dist/bundle/index.js +3 -3
  25. package/package.json +1 -1
@@ -17,6 +17,7 @@ import os
17
17
  import subprocess
18
18
  import socket
19
19
  import sys
20
+ import tempfile
20
21
 
21
22
  # 导入公共 URL 构建模块
22
23
  sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
@@ -42,22 +43,21 @@ def find_kernel_socket() -> str | None:
42
43
  适用于 DUCC/Comate 两种环境:无论脚本由哪个父进程调用,
43
44
  都能找到当前 VSCode 窗口对应的 kernel socket。
44
45
  """
45
- tmpdir = os.environ.get("TMPDIR", "/tmp").rstrip("/")
46
+ tmpdir = tempfile.gettempdir()
46
47
  pid = os.getpid()
47
48
  for _ in range(20): # 最多向上追溯 20 层
48
49
  pid = get_parent_pid(pid)
49
50
  if not pid or pid == 1:
50
51
  break
51
- for sock_dir in [tmpdir, "/tmp"]:
52
- sock_path = f"{sock_dir}/comate-kernel-{pid}.sock"
53
- if os.path.exists(sock_path):
54
- return sock_path
52
+ sock_path = f"{tmpdir}/comate-kernel-{pid}.sock"
53
+ if os.path.exists(sock_path):
54
+ return sock_path
55
55
  return None
56
56
 
57
57
 
58
58
  def open_url(url: str, pid: str = None, title: str = "网页") -> bool:
59
59
  """在当前 DUCC 聊天框所在 VSCode 窗口的内嵌浏览器中打开 URL"""
60
- tmpdir = os.environ.get("TMPDIR", "/tmp").rstrip("/")
60
+ tmpdir = tempfile.gettempdir()
61
61
 
62
62
  body = json.dumps({
63
63
  "action": "executeVirtualEditor",
@@ -92,22 +92,20 @@ def open_url(url: str, pid: str = None, title: str = "网页") -> bool:
92
92
 
93
93
  # 如果指定了 PID,直接使用
94
94
  if pid:
95
- for sock_dir in [tmpdir, "/tmp"]:
96
- sock_path = f"{sock_dir}/comate-kernel-{pid}.sock"
97
- if os.path.exists(sock_path) and send_request(sock_path):
98
- print(f"✅ 已在内嵌浏览器中打开 (PID: {pid})")
99
- return True
95
+ sock_path = f"{tmpdir}/comate-kernel-{pid}.sock"
96
+ if os.path.exists(sock_path) and send_request(sock_path):
97
+ print(f"✅ 已在内嵌浏览器中打开 (PID: {pid})")
98
+ return True
100
99
  print(f"❌ 连接失败 (PID: {pid})")
101
100
  return False
102
101
 
103
102
  # 优先使用 init_env.sh 在 shell 层检测到的 kernel PID
104
103
  env_kernel_pid = os.environ.get("_KERNEL_PID", "").strip()
105
104
  if env_kernel_pid:
106
- for sock_dir in [tmpdir, "/tmp"]:
107
- sock_path = f"{sock_dir}/comate-kernel-{env_kernel_pid}.sock"
108
- if os.path.exists(sock_path) and send_request(sock_path):
109
- print(f"✅ 已在内嵌浏览器中打开 (当前窗口 PID: {env_kernel_pid})")
110
- return True
105
+ sock_path = f"{tmpdir}/comate-kernel-{env_kernel_pid}.sock"
106
+ if os.path.exists(sock_path) and send_request(sock_path):
107
+ print(f"✅ 已在内嵌浏览器中打开 (当前窗口 PID: {env_kernel_pid})")
108
+ return True
111
109
 
112
110
  # 次选:Python 进程树向上查找
113
111
  kernel_sock = find_kernel_socket()
@@ -124,8 +122,7 @@ def open_url(url: str, pid: str = None, title: str = "网页") -> bool:
124
122
  except Exception:
125
123
  return False
126
124
 
127
- socket_candidates = set(glob.glob(f"{tmpdir}/comate-kernel-*.sock") +
128
- glob.glob("/tmp/comate-kernel-*.sock"))
125
+ socket_candidates = set(glob.glob(f"{tmpdir}/comate-kernel-*.sock"))
129
126
 
130
127
  active_sockets = []
131
128
  for sock_path in socket_candidates:
@@ -12,6 +12,7 @@ import json
12
12
  import logging
13
13
  import os
14
14
  import subprocess
15
+ import tempfile
15
16
 
16
17
  try:
17
18
  import ssl
@@ -26,9 +27,7 @@ except ImportError:
26
27
  from urllib2 import Request, urlopen, HTTPError, URLError
27
28
 
28
29
  # ---- 统一日志配置 ----
29
- _scripts_dir = os.path.dirname(os.path.abspath(__file__))
30
- _skill_dir = os.path.dirname(_scripts_dir)
31
- _log_dir = os.path.join(_skill_dir, "logs")
30
+ _log_dir = os.path.join(tempfile.gettempdir(), ".code-security", "logs")
32
31
  os.makedirs(_log_dir, exist_ok=True)
33
32
 
34
33
  # 清理超过 7 天的日志文件
@@ -25,7 +25,7 @@ import os
25
25
  import sys
26
26
  import time
27
27
 
28
- import http_client # noqa: F401 (triggers shared logging config)
28
+ import http_client
29
29
  import utils
30
30
 
31
31
  logger = logging.getLogger("repair")
@@ -113,7 +113,7 @@ def upload_files_for_repair(root_path, missing_files, username, user_id, chat_id
113
113
  print("警告: 读取文件失败 {}: {}".format(file_path, e), file=sys.stderr)
114
114
 
115
115
  http_client.put(
116
- "{}/api/v1/upload".format(utils.HOST),
116
+ utils.build_url("/api/v1/upload"),
117
117
  headers=utils.build_headers(username, user_id, chat_id),
118
118
  json_body=payload,
119
119
  )
@@ -131,7 +131,7 @@ def repair_vulnerability(root_path, vulnerability_info, username, user_id, chat_
131
131
  repair_type = vulnerability_info.get("type", 2)
132
132
  file_count = len(vulnerability_info.get("files", []))
133
133
  logger.info("repair start: type=%d, files=%d", repair_type, file_count)
134
- api_url = "{}/api/v2/repair_file".format(utils.HOST)
134
+ api_url = utils.build_url("/api/v2/repair_file")
135
135
  print("开始修复...", file=sys.stderr)
136
136
 
137
137
  poll_count = 0
@@ -16,7 +16,7 @@ import logging
16
16
  import os
17
17
  import sys
18
18
 
19
- import http_client # noqa: F401 (triggers shared logging config)
19
+ import http_client
20
20
  import utils
21
21
 
22
22
  logger = logging.getLogger("report")
@@ -95,7 +95,7 @@ def report_chat(chat_id, scan_result, git_url, git_branch, ide, query, root_path
95
95
  headers = utils.build_headers(username, user_id, chat_id)
96
96
  logger.info("report_chat: chat_id=%s, vuls_count=%d, git_url=%s, git_branch=%s",
97
97
  chat_id, len(vuls), git_url, git_branch)
98
- return http_client.post("{}/api/v1/chats".format(utils.HOST), headers=headers, json_body=body)
98
+ return http_client.post(utils.build_url("/api/v1/chats"), headers=headers, json_body=body)
99
99
 
100
100
 
101
101
  def main():
@@ -97,7 +97,7 @@ def is_ignored(path, gitignore_patterns, root_dir):
97
97
 
98
98
 
99
99
  def walk_dir(directory, extensions=None, gitignore_patterns=None):
100
- # type: (str, list | None, list | None) -> list
100
+ # type: (str, list or None, list or None) -> list
101
101
  """递归遍历目录,按扩展名过滤并排除 .gitignore 中的文件。"""
102
102
  files = []
103
103
  resolved_dir = os.path.realpath(directory)
@@ -131,7 +131,7 @@ def get_settings(username, user_id):
131
131
  # type: (str, str) -> dict
132
132
  """获取扫描配置。"""
133
133
  return http_client.get(
134
- "{}/api/v2/analysis/settings".format(utils.HOST),
134
+ utils.build_url("/api/v2/analysis/settings", utils.SCAN_API_HOST),
135
135
  headers=utils.build_headers(username, user_id),
136
136
  )
137
137
 
@@ -140,7 +140,7 @@ def create_bundle(file_hashes, username, user_id):
140
140
  # type: (dict, str, str) -> tuple
141
141
  """创建扫描 bundle,返回 (bundle_hash, missing_files)。"""
142
142
  data = http_client.post(
143
- "{}/api/v1/bundle".format(utils.HOST),
143
+ utils.build_url("/api/v1/bundle", utils.SCAN_API_HOST),
144
144
  headers=utils.build_headers(username, user_id),
145
145
  json_body=file_hashes,
146
146
  )
@@ -166,9 +166,9 @@ def upload_files(bundle_hash, root_path, missing_files, file_hashes, username, u
166
166
  print("警告: 读取文件失败 {}: {}".format(file_path, e), file=sys.stderr)
167
167
 
168
168
  if upload_type == "scan":
169
- url = "{}/api/v1/bundle/{}".format(utils.HOST, bundle_hash)
169
+ url = utils.build_url("/api/v1/bundle/{}".format(bundle_hash), utils.SCAN_API_HOST)
170
170
  else:
171
- url = "{}/api/v1/upload".format(utils.HOST)
171
+ url = utils.build_url("/api/v1/upload", utils.SCAN_API_HOST)
172
172
 
173
173
  data = http_client.put(url, headers=utils.build_headers(username, user_id), json_body=payload)
174
174
 
@@ -276,7 +276,7 @@ def _poll_ai_analysis(scan_info, chat_id, username, user_id, ai_analysis_timeout
276
276
  time.sleep(poll_interval)
277
277
 
278
278
  result = http_client.post(
279
- "{}/api/v2/analysis".format(utils.HOST),
279
+ utils.build_url("/api/v2/analysis", utils.SCAN_API_HOST),
280
280
  headers=utils.build_headers(username, user_id, chat_id),
281
281
  json_body=scan_info,
282
282
  )
@@ -347,7 +347,7 @@ def scan_vulnerability(root_path, chat_id="", username="", user_id="", wait_ai=T
347
347
  poll_count = 0
348
348
  while poll_count < MAX_SCAN_POLLS:
349
349
  result = http_client.post(
350
- "{}/api/v2/analysis".format(utils.HOST), headers=headers, json_body=scan_info
350
+ utils.build_url("/api/v2/analysis", utils.SCAN_API_HOST), headers=headers, json_body=scan_info
351
351
  )
352
352
  if result.get("status") != 1:
353
353
  break
@@ -8,13 +8,28 @@ import hashlib
8
8
  import os
9
9
  import shutil
10
10
  import subprocess
11
+ import tempfile
11
12
  import time
12
13
  import uuid
13
14
  from typing import Optional
14
15
 
15
- HOST = "https://comate-sec.baidu-int.com"
16
+
17
+ SCAN_API_HOST = "https://comate-sec.baidu-int.com"
18
+ API_HOST = "https://comate-sec.baidu-int.com"
19
+ FE_HOST = "https://comate-sec.baidu-int.com"
16
20
  WS_HOST = "wss://comate-sec.baidu-int.com"
17
21
 
22
+ def build_url(path, api_host=None):
23
+ # type: (str, str) -> str
24
+ """根据路径构建完整 URL。
25
+
26
+ 当 path 以 /api 开头时使用 api_host(默认 API_HOST),否则使用 FE_HOST。
27
+ """
28
+ if path.startswith("/api"):
29
+ return (api_host or API_HOST) + path
30
+ else:
31
+ return FE_HOST + path
32
+
18
33
  # 常见应跳过的大目录(即使 .gitignore 未列出)
19
34
  SKIP_DIRS = {".git", ".svn", ".hg", "node_modules", "__pycache__", "vendor", ".idea", ".vscode"}
20
35
 
@@ -101,27 +116,26 @@ def get_git_info(root_path):
101
116
 
102
117
  def get_output_dir(root_path, output_dir=None):
103
118
  # type: (str, Optional[str]) -> str
104
- """获取输出目录,默认为 skill 临时目录下的项目隔离子目录。
119
+ """获取输出目录,默认为 <tempdir>/.code-security/<项目名>_<哈希>/ 下的项目隔离子目录。
105
120
 
106
121
  每次调用时自动清理超过 24 小时的过期临时数据。
107
122
  """
108
- skill_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
123
+ base_dir = os.path.join(tempfile.gettempdir(), ".code-security")
109
124
  project_name = os.path.basename(os.path.realpath(root_path))
110
125
  path_hash = hashlib.md5(os.path.realpath(root_path).encode("utf-8")).hexdigest()[:8]
111
- default_output = os.path.join(skill_dir, ".tmp", "{}_{}".format(project_name, path_hash))
126
+ default_output = os.path.join(base_dir, "{}_{}".format(project_name, path_hash))
112
127
  result = os.path.realpath(output_dir) if output_dir else default_output
113
128
 
114
129
  # 清理过期临时数据
115
- _cleanup_expired_tmp(skill_dir)
130
+ _cleanup_expired_tmp(base_dir)
116
131
 
117
132
  os.makedirs(result, exist_ok=True)
118
133
  return result
119
134
 
120
135
 
121
- def _cleanup_expired_tmp(skill_dir):
136
+ def _cleanup_expired_tmp(tmp_dir):
122
137
  # type: (str) -> None
123
- """清理 .tmp 目录下超过 24 小时的子目录。"""
124
- tmp_dir = os.path.join(skill_dir, ".tmp")
138
+ """清理临时目录下超过 24 小时的子目录。"""
125
139
  if not os.path.isdir(tmp_dir):
126
140
  return
127
141
 
@@ -143,10 +157,11 @@ def _cleanup_expired_tmp(skill_dir):
143
157
 
144
158
  def safe_rmtree(dir_path):
145
159
  # type: (str) -> None
146
- """安全删除临时目录,校验路径位于 .tmp 下防止误删。"""
160
+ """安全删除临时目录,校验路径位于 <tempdir>/.code-security/ 下防止误删。"""
147
161
  dir_path = os.path.realpath(dir_path)
148
- # 安全校验:确保路径在 .tmp 目录下
149
- if ".tmp" not in dir_path.split(os.sep):
162
+ # 安全校验:确保路径在临时目录的 .code-security 目录下
163
+ tmp_base = os.path.join(tempfile.gettempdir(), ".code-security")
164
+ if not dir_path.startswith(tmp_base + os.sep):
150
165
  return
151
166
  if not os.path.isdir(dir_path):
152
167
  return
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules/prebuild-install/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules/prebuild-install/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules/prebuild-install/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules/prebuild-install/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/prebuild-install@7.1.3/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../../../../../prebuild-install@7.1.3/node_modules/prebuild-install/bin.js" "$@"
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../../../../../node-gyp-build@4.8.4/node_modules/node-gyp-build/bin.js" "$@"
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../../../../../node-gyp-build@4.8.4/node_modules/node-gyp-build/optional.js" "$@"
@@ -6,9 +6,9 @@ case `uname` in
6
6
  esac
7
7
 
8
8
  if [ -z "$NODE_PATH" ]; then
9
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
9
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules"
10
10
  else
11
- export NODE_PATH="/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/Projects/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
11
+ export NODE_PATH="/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules/node-gyp-build/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node-gyp-build@4.8.4/node_modules:/Users/wangshenyu/baidu/ide/comate-plugin-host/node_modules/.pnpm/node_modules:$NODE_PATH"
12
12
  fi
13
13
  if [ -x "$basedir/node" ]; then
14
14
  exec "$basedir/node" "$basedir/../../../../../node-gyp-build@4.8.4/node_modules/node-gyp-build/build-test.js" "$@"
@@ -81,6 +81,7 @@
81
81
  "qs": "^6.11.2",
82
82
  "reflect-metadata": "^0.1.13",
83
83
  "region-vanilla": "^12.0.0",
84
+ "proper-lockfile": "^4.1.2",
84
85
  "simple-git": "^3.33.0",
85
86
  "sqlite-vec": "0.1.7-alpha.2",
86
87
  "sqlite-vec-darwin-arm64": "0.1.7-alpha.2",
@@ -122,6 +123,7 @@
122
123
  "@types/js-yaml": "^4.0.9",
123
124
  "@types/node": "18.15.3",
124
125
  "@types/picomatch": "^4.0.0",
126
+ "@types/proper-lockfile": "^4.1.4",
125
127
  "@types/which": "^3.0.4",
126
128
  "@types/ws": "^8.18.1",
127
129
  "rollup": "^4.9.2",