diff --git a/.git-ai/lancedb.tar.gz b/.git-ai/lancedb.tar.gz index fd5a392..25a65af 100644 --- a/.git-ai/lancedb.tar.gz +++ b/.git-ai/lancedb.tar.gz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:387d4c098e48f08b2ba05e2f8b858130ec324e8b0e07934496d5e4c5f7a06269 -size 268076 +oid sha256:2398f5dd1592b08f6a39f43e197bf33a1e18d1060157206d441bb1d9c97a4438 +size 314362 diff --git a/README.md b/README.md index d6a42a9..a90dfa2 100644 --- a/README.md +++ b/README.md @@ -372,6 +372,9 @@ Then configure each agent to connect to `http://localhost:3000/mcp`. - Multiple concurrent sessions - Health check endpoint: `http://localhost:3000/health` - Session management with automatic cleanup +- Session persistence via `mcp-session-id` response header +- Comprehensive error handling with proper HTTP status codes +- Graceful shutdown with SIGTERM/SIGINT signal handlers - Optional stateless mode for load-balanced setups: `--stateless` Then restart Claude Desktop and start conversing: diff --git a/README.zh-CN.md b/README.zh-CN.md index 9e7bf01..ca1ed52 100644 --- a/README.zh-CN.md +++ b/README.zh-CN.md @@ -369,6 +369,9 @@ git-ai ai serve --http --port 3000 - 支持多个并发会话 - 健康检查端点:`http://localhost:3000/health` - 自动管理会话生命周期 +- 通过 `mcp-session-id` 响应头实现 Session 持久化 +- 完善的错误处理机制,返回正确的 HTTP 状态码 +- 支持 SIGTERM/SIGINT 信号,实现优雅关闭 - 可选无状态模式,用于负载均衡场景:`--stateless` 然后重启 Claude Desktop,即可开始对话: diff --git a/docs/mcp.md b/docs/mcp.md new file mode 100644 index 0000000..4eb0ed4 --- /dev/null +++ b/docs/mcp.md @@ -0,0 +1,280 @@ +# MCP Server Integration + +`git-ai` provides an MCP (Model Context Protocol) Server that can be integrated with AI Agents (such as Claude Desktop, Cursor, Trae, etc.), empowering them with "code understanding" capabilities. + +## Starting the Server + +### Stdio Mode (Default, Single Client) + +Run from any directory: + +```bash +git-ai ai serve +``` + +This starts the server in stdio mode (waiting for client connection). Configure it in MCP-compatible clients. Suitable for single Agent connection. + +### HTTP Mode (Multiple Clients) + +If you need multiple Agents to connect simultaneously (e.g., using Claude Code and Cursor together), use HTTP mode: + +```bash +git-ai ai serve --http --port 3000 +``` + +HTTP mode features: +- **Multi-client support**: Each connection gets an independent session +- **Health check endpoint**: `http://localhost:3000/health` returns server status +- **MCP endpoint**: `http://localhost:3000/mcp` for MCP protocol communication +- **Session management**: Automatic client session lifecycle management +- **Session persistence**: Session IDs returned in `mcp-session-id` response header for client reuse +- **Error handling**: Comprehensive error handling with proper HTTP status codes +- **Graceful shutdown**: SIGTERM/SIGINT signal handlers for clean shutdown + +#### Options + +| Option | Description | Default | +|--------|-------------|---------| +| `--http` | Enable HTTP transport (supports multiple clients) | No (uses stdio) | +| `--port ` | HTTP server port | 3000 | +| `--stateless` | Stateless mode (no session tracking, for load-balanced setups) | No | +| `--disable-mcp-log` | Disable MCP access logging | No | + +#### HTTP Mode Examples + +```bash +# Default port 3000 +git-ai ai serve --http + +# Custom port +git-ai ai serve --http --port 8080 + +# Stateless mode (for load-balanced scenarios) +git-ai ai serve --http --port 3000 --stateless + +# Disable access logging +git-ai ai serve --http --disable-mcp-log +``` + +#### Health Check + +```bash +curl http://localhost:3000/health +# {"status":"ok","sessions":2} +``` + +#### Session Management + +When connecting to the MCP endpoint, the server: +1. Creates a new session if no `mcp-session-id` header is provided +2. Returns the session ID in the `mcp-session-id` response header +3. Clients should include this header in subsequent requests to reuse the session +4. Sessions are automatically cleaned up when the connection closes + +Example session workflow: +```bash +# First request - new session created +curl -X POST http://localhost:3000/mcp \ + -H "Content-Type: application/json" \ + -H "Accept: application/json, text/event-stream" \ + -i # -i shows headers including mcp-session-id + +# Subsequent requests - reuse session +curl -X POST http://localhost:3000/mcp \ + -H "Content-Type: application/json" \ + -H "Accept: application/json, text/event-stream" \ + -H "mcp-session-id: " \ + ... +``` + +## Tool List + +### Repository Management +- `get_repo({ path })`: Returns repository root and scan root for specified `path` (debugging) + +### Index Management +- `check_index({ path })`: Check if index structure matches current version (rebuild if inconsistent) +- `rebuild_index({ path, dim?, overwrite? })`: Rebuild full index (writes to `.git-ai/`; Risk: high) +- `pack_index({ path, lfs? })`: Pack index to `.git-ai/lancedb.tar.gz` (optional git-lfs track) +- `unpack_index({ path })`: Unpack index archive + +### Retrieval +- `search_symbols({ path, query, mode?, case_insensitive?, max_candidates?, limit?, lang?, with_repo_map?, repo_map_max_files?, repo_map_max_symbols?, wiki_dir? })`: Symbol retrieval (lang: auto/all/java/ts/python/go/rust/c/markdown/yaml; optional repo_map) +- `semantic_search({ path, query, topk?, lang?, with_repo_map?, repo_map_max_files?, repo_map_max_symbols?, wiki_dir? })`: Semantic search based on LanceDB + SQ8 (lang: auto/all/java/ts/python/go/rust/c/markdown/yaml; optional repo_map) +- `repo_map({ path, max_files?, max_symbols?, wiki_dir? })`: Generate repo map (important files/symbols ranking, Wiki navigation) +- `ast_graph_find({ path, prefix, limit?, lang? })`: Find symbol definitions by name prefix (case-insensitive; lang: auto/all/java/ts) +- `ast_graph_children({ path, id, as_file? })`: List direct child nodes in containment hierarchy (file→top-level symbols, class→methods, etc.) +- `ast_graph_refs({ path, name, limit?, lang? })`: Find reference locations by name (call/new/type; lang: auto/all/java/ts) +- `ast_graph_callers({ path, name, limit?, lang? })`: Find callers by name (callee name; lang: auto/all/java/ts) +- `ast_graph_callees({ path, name, limit?, lang? })`: Find callees by name (caller name; lang: auto/all/java/ts) +- `ast_graph_chain({ path, name, direction?, max_depth?, limit?, lang? })`: Find call chain by name (upstream/downstream, max depth; lang: auto/all/java/ts) +- `ast_graph_query({ path, query, params? })`: Execute CozoScript query on AST graph database (advanced) + +### File Reading +- `list_files({ path, pattern?, limit? })`: List files by glob pattern (defaults ignore node_modules, .git, etc.) +- `read_file({ path, file, start_line?, end_line? })`: Read file segment by line numbers + +### DSR (Deterministic Semantic Record) +- `dsr_context({ path })`: Get repository Git context and DSR directory status + - Returns: commit_hash, repo_root, branch, detached, dsr_directory_state +- `dsr_generate({ path, commit })`: Generate DSR for specified commit + - Returns: commit_hash, file_path, existed, counts, semantic_change_type, risk_level +- `dsr_rebuild_index({ path })`: Rebuild index from DSR files for faster queries + - Returns: enabled, engine, dbPath, counts +- `dsr_symbol_evolution({ path, symbol, start?, all?, limit?, contains? })`: Trace symbol change history + - Returns: ok, hits (including commit_hash, semantic_change_type, risk_level, operations) + +## DSR Usage Examples + +Get repository Git status and DSR info: + +```js +dsr_context({ path: "/ABS/PATH/TO/REPO" }) +``` + +Generate DSR for recent commits: + +```js +dsr_generate({ path: "/ABS/PATH/TO/REPO", commit: "HEAD" }) +dsr_generate({ path: "/ABS/PATH/TO/REPO", commit: "HEAD~1" }) +``` + +Query function change history: + +```js +dsr_symbol_evolution({ path: "/ABS/PATH/TO/REPO", symbol: "handleRequest", limit: 50 }) +``` + +Fuzzy match symbol names: + +```js +dsr_symbol_evolution({ path: "/ABS/PATH/TO/REPO", symbol: "Request", contains: true, limit: 100 }) +``` + +## AST Graph Query Examples + +List top-level symbols in a file (recommended: no manual file_id calculation needed): + +```js +ast_graph_children({ path: "/ABS/PATH/TO/REPO", id: "src/mcp/server.ts", as_file: true }) +``` + +Query method/function callers (recommended: use callers/callees/chain, not manual CozoScript): + +```js +ast_graph_callers({ path: "/ABS/PATH/TO/REPO", name: "greet", limit: 50 }) +ast_graph_chain({ path: "/ABS/PATH/TO/REPO", name: "greet", direction: "upstream", max_depth: 3 }) +``` + +List top-level symbols in a file (advanced: direct CozoScript, requires file_id): + +```cozo +?[file_id] <- [[$file_id]] +?[child_id, name, kind, start_line, end_line] := + *ast_contains{parent_id: file_id, child_id}, + *ast_symbol{ref_id: child_id, file, name, kind, signature, start_line, end_line} +``` + +## Recommended Usage (Let Agent Pass Correct Path) +- MCP tools require `path` parameter: Every tool call must explicitly pass `path: "/ABS/PATH/TO/REPO"` (ensures call atomicity) + +## RepoMap Usage Tips + +Repo map provides Agents with a "global bird's-eye view + navigation entry points" (important files/symbols + Wiki associations). Recommended as a pre-analysis step: + +```js +repo_map({ path: "/ABS/PATH/TO/REPO", max_files: 20, max_symbols: 5 }) +``` + +If you want to include repo map in retrieval results (disabled by default to avoid output bloat): + +```js +search_symbols({ path: "/ABS/PATH/TO/REPO", query: "Foo", limit: 20, with_repo_map: true, repo_map_max_files: 20, repo_map_max_symbols: 5 }) +semantic_search({ path: "/ABS/PATH/TO/REPO", query: "where is auth handled", topk: 5, with_repo_map: true }) +``` + +## Agent Skills / Rules + +This repository provides Agent-ready Skill/Rule templates designed to help Agents follow best practices when using these tools. + +These template documents (Markdown/YAML) are indexed, making it easy for Agents to retrieve MCP guidelines and skill descriptions via `semantic_search`. + +### YAML Format Templates + +- **Skill**: [`templates/agents/common/skills/git-ai/skill.yaml`](../templates/agents/common/skills/git-ai/skill.yaml) - Guides Agents on using git-ai's Git-native semantic system (including DSR constraints) and MCP tools + - Includes: trigger conditions, workflow steps, tool definitions, output requirements, common pitfalls + +- **Rule**: [`templates/agents/common/rules/git-ai.yaml`](../templates/agents/common/rules/git-ai.yaml) - Constrains Agent behavior when using git-ai MCP + - Includes: must-follow rules, recommended strategies, prohibited actions, Git Hooks rules, Manifest Workspace rules + +### Markdown Templates (for easy reading/copying) + +- **Skill**: [`templates/agents/common/skills/git-ai-code-search/SKILL.md`](../templates/agents/common/skills/git-ai-code-search/SKILL.md) +- **Rule**: [`templates/agents/common/rules/git-ai-code-search/RULE.md`](../templates/agents/common/rules/git-ai-code-search/RULE.md) + +### Install to Trae + +Install Skills and Rules from this repository to your project's `.agents` directory (default): + +```bash +cd /path/to/your-repo +git-ai ai agent install +git-ai ai agent install --overwrite +git-ai ai agent install --to /custom/location/.agents +``` + +If you want to install to Trae's `.trae` directory: + +```bash +git-ai ai agent install --agent trae +``` + +### Skill Workflow Overview + +According to `skill.yaml`, recommended workflow: + +1. **First time in repository** - Use `repo_map` for global view +2. **Check index status** - Use `check_index`, `rebuild_index` if necessary +3. **Locate target code** - Use `search_symbols` or `semantic_search` +4. **Understand code relationships** - Use `ast_graph_callers/callees/chain` +5. **Trace change history** - Use `dsr_symbol_evolution` +6. **Read code carefully** - Use `read_file` to read key segments +7. **Provide suggestions** - Give modification suggestions based on complete understanding + +### Rule Constraints Overview + +According to `rule.yaml`, Agents must follow: + +- **explicit_path**: Every call must explicitly pass `path` parameter +- **check_index_first**: Must check index before symbol search +- **understand_before_modify**: Must understand implementation before modification +- **use_dsr_for_history**: Must use DSR tools for tracing history +- **respect_dsr_risk**: Take seriously DSR-reported high-risk changes + +Documentation/rule retrieval suggestions: +- When issues involve MCP/Skill/Rule, first use `semantic_search` to locate relevant documentation segments, then conclude. + +Prohibited actions include: +- Assuming symbol locations without searching +- Directly modifying unread files +- Manually parsing git history +- Performing symbol search when index is missing +- Omitting `path` parameter + +## DSR and MCP Relationship + +- **MCP tools** primarily cover "index (.git-ai) construction and retrieval", helping Agents efficiently locate evidence +- **DSR** is "per-commit semantic artifacts (.git-ai/dsr)", used for semantic history/evolution queries +- DSR is per-commit, immutable, deterministic, enabling precise symbol change tracing +- All historical traversal must start from Git DAG (DSR only enriches nodes, doesn't define edges) + +See DSR documentation for DSR-related commands: [DSR Documentation](./dsr.md) + +## Output Requirements + +Agents should follow these guidelines when using git-ai MCP tools: + +1. **Conclusion first, then evidence** - Summarize findings first, then provide detailed locations +2. **Use IDE-clickable links** - Format: `file:///path/to/file#L10-L20` +3. **Minimal change principle** - Avoid introducing new dependencies when suggesting modifications +4. **Evidence must be based on read_file** - Don't rely on assumptions or guesses diff --git a/docs/zh-CN/mcp.md b/docs/zh-CN/mcp.md index c17f69d..562b068 100644 --- a/docs/zh-CN/mcp.md +++ b/docs/zh-CN/mcp.md @@ -27,6 +27,9 @@ HTTP 模式特性: - **健康检查端点**:`http://localhost:3000/health` 返回服务状态 - **MCP 端点**:`http://localhost:3000/mcp` 用于 MCP 协议通信 - **Session 管理**:自动管理客户端 session 生命周期 +- **Session 持久化**:Session ID 通过 `mcp-session-id` 响应头返回,客户端可复用 +- **错误处理**:完善的错误处理机制,返回正确的 HTTP 状态码 +- **优雅关闭**:支持 SIGTERM/SIGINT 信号,实现优雅关闭 #### 选项说明 @@ -60,6 +63,30 @@ curl http://localhost:3000/health # {"status":"ok","sessions":2} ``` +#### Session 管理 + +连接到 MCP 端点时,服务器会: +1. 如果请求未提供 `mcp-session-id` 请求头,则创建新 session +2. 通过 `mcp-session-id` 响应头返回 session ID +3. 客户端应在后续请求中包含此头部以复用 session +4. Session 在连接关闭时自动清理 + +Session 使用示例: +```bash +# 第一次请求 - 创建新 session +curl -X POST http://localhost:3000/mcp \ + -H "Content-Type: application/json" \ + -H "Accept: application/json, text/event-stream" \ + -i # -i 显示响应头,包括 mcp-session-id + +# 后续请求 - 复用 session +curl -X POST http://localhost:3000/mcp \ + -H "Content-Type: application/json" \ + -H "Accept: application/json, text/event-stream" \ + -H "mcp-session-id: <第一次响应中的session-id>" \ + ... +``` + ## 工具列表 ### 仓库管理 diff --git a/package-lock.json b/package-lock.json index f9505a2..6cf65d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@mars167/git-ai", - "version": "2.3.0", + "version": "2.4.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@mars167/git-ai", - "version": "2.3.0", + "version": "2.4.0", "license": "MIT", "os": [ "darwin", @@ -20,7 +20,7 @@ "@types/node": "^25.0.9", "apache-arrow": "18.1.0", "commander": "^14.0.2", - "cozo-lib-wasm": "^0.7.6", + "cozo-node": "^0.7.6", "fs-extra": "^11.3.3", "glob": "^13.0.0", "onnxruntime-node": "^1.19.2", @@ -55,14 +55,11 @@ "@lancedb/lancedb-linux-x64-gnu": "0.22.3", "@lancedb/lancedb-linux-x64-musl": "0.22.3", "@lancedb/lancedb-win32-arm64-msvc": "0.22.3", - "@lancedb/lancedb-win32-x64-msvc": "0.22.3", - "cozo-node": "^0.7.6" + "@lancedb/lancedb-win32-x64-msvc": "0.22.3" } }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", - "resolved": "https://registry.npmmirror.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" @@ -73,8 +70,6 @@ }, "node_modules/@hono/node-server": { "version": "1.19.9", - "resolved": "https://registry.npmmirror.com/@hono/node-server/-/node-server-1.19.9.tgz", - "integrity": "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==", "license": "MIT", "engines": { "node": ">=18.14.1" @@ -85,8 +80,6 @@ }, "node_modules/@isaacs/balanced-match": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", "license": "MIT", "engines": { "node": "20 || >=22" @@ -94,8 +87,6 @@ }, "node_modules/@isaacs/brace-expansion": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" @@ -106,8 +97,6 @@ }, "node_modules/@isaacs/fs-minipass": { "version": "4.0.1", - "resolved": "https://registry.npmmirror.com/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", "license": "ISC", "dependencies": { "minipass": "^7.0.4" @@ -118,8 +107,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -127,14 +114,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.5", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", - "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -143,8 +126,6 @@ }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", "license": "MIT", "dependencies": { "debug": "^4.1.1" @@ -152,14 +133,10 @@ }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", "license": "MIT" }, "node_modules/@lancedb/lancedb": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb/-/lancedb-0.22.3.tgz", - "integrity": "sha512-nRC0fkg+d7dzCtudKHT+VH7znk6KUXRZyuS6HJYNnIrbvXBxaT6wAPjEbf70KTuqvP2znj48Zg+kiwRqkRnAJw==", "cpu": [ "x64", "arm64" @@ -192,7 +169,7 @@ }, "node_modules/@lancedb/lancedb-darwin-arm64": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-darwin-arm64/-/lancedb-darwin-arm64-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-darwin-arm64/-/lancedb-darwin-arm64-0.22.3.tgz", "integrity": "sha512-oP2Kic51nLqs27Xo+AzSVlcMgmmfZbU/PseQ3KBtU92rczO5DYU2St1Y7qDUWcjw+RF3H2v/DKzYed16h1wCBQ==", "cpu": [ "arm64" @@ -208,8 +185,6 @@ }, "node_modules/@lancedb/lancedb-darwin-x64": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-darwin-x64/-/lancedb-darwin-x64-0.22.3.tgz", - "integrity": "sha512-wOwgZkvBgQM8asjolz4NeyPa8W/AjZv4fwyQxJhTqKTGlB3ntrpdn1m84K5qncTmFFDcDfGgZ4DkNVkVK+ydoQ==", "cpu": [ "x64" ], @@ -224,7 +199,7 @@ }, "node_modules/@lancedb/lancedb-linux-arm64-gnu": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-linux-arm64-gnu/-/lancedb-linux-arm64-gnu-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-arm64-gnu/-/lancedb-linux-arm64-gnu-0.22.3.tgz", "integrity": "sha512-YUbFuBKQniTZOR9h2/es1f7lDzdHNt8qXs5GaqFmLQv2GNWpnvKXVA/vVffhCNpFB5nV132o1VhXW3KoMubPsw==", "cpu": [ "arm64" @@ -240,7 +215,7 @@ }, "node_modules/@lancedb/lancedb-linux-arm64-musl": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-linux-arm64-musl/-/lancedb-linux-arm64-musl-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-arm64-musl/-/lancedb-linux-arm64-musl-0.22.3.tgz", "integrity": "sha512-jVRMtXxxYaDlZSaclCIHB2N+NJvQ1Fj9EaPeBx+HxG2VqUg0vXKef+yiaD2aGo9sAH6mMmkKJsrPhwABpUC4rQ==", "cpu": [ "arm64" @@ -256,7 +231,7 @@ }, "node_modules/@lancedb/lancedb-linux-x64-gnu": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-linux-x64-gnu/-/lancedb-linux-x64-gnu-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-x64-gnu/-/lancedb-linux-x64-gnu-0.22.3.tgz", "integrity": "sha512-co7idTwvNAtbFoFHojhHlTpKsydOm5sZfbtAsQRdoa7g6a61yIrqrMm8D7Ngh756JfzZLFQBMkDUZEW3X4vP/g==", "cpu": [ "x64" @@ -272,7 +247,7 @@ }, "node_modules/@lancedb/lancedb-linux-x64-musl": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-linux-x64-musl/-/lancedb-linux-x64-musl-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-linux-x64-musl/-/lancedb-linux-x64-musl-0.22.3.tgz", "integrity": "sha512-+ipFsn5PCODK7mOMq1gZ5OAZWks5YlgmjAlnYMmU8XxvaK0b6lZdA3s1hTmBaBO9+wv+31ulO55oBN4/U8Yldg==", "cpu": [ "x64" @@ -288,7 +263,7 @@ }, "node_modules/@lancedb/lancedb-win32-arm64-msvc": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-win32-arm64-msvc/-/lancedb-win32-arm64-msvc-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-win32-arm64-msvc/-/lancedb-win32-arm64-msvc-0.22.3.tgz", "integrity": "sha512-E0XywJYnelIe4pzOlvog+aMHKt5ChW27tgmT2V80Z6PXcX6eN9I69Fj0Q6DK6z1YCTPIPu6Na1Hd6d4GqUNKPw==", "cpu": [ "arm64" @@ -304,7 +279,7 @@ }, "node_modules/@lancedb/lancedb-win32-x64-msvc": { "version": "0.22.3", - "resolved": "https://registry.npmmirror.com/@lancedb/lancedb-win32-x64-msvc/-/lancedb-win32-x64-msvc-0.22.3.tgz", + "resolved": "https://registry.npmjs.org/@lancedb/lancedb-win32-x64-msvc/-/lancedb-win32-x64-msvc-0.22.3.tgz", "integrity": "sha512-/1feFnjz5MIhzXOEU4+1OeGwpAFYczGfefuOGZRsmGWDdt4V6/fza7Hkkxyb2OnTzqpBfy6BdW2+iBguE1JMyQ==", "cpu": [ "x64" @@ -320,10 +295,7 @@ }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "license": "BSD-3-Clause", - "optional": true, "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -341,30 +313,21 @@ }, "node_modules/@mapbox/node-pre-gyp/node_modules/chownr": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "license": "ISC", - "optional": true, "engines": { "node": ">=10" } }, "node_modules/@mapbox/node-pre-gyp/node_modules/minipass": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "license": "ISC", - "optional": true, "engines": { "node": ">=8" } }, "node_modules/@mapbox/node-pre-gyp/node_modules/minizlib": { "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "license": "MIT", - "optional": true, "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -375,10 +338,7 @@ }, "node_modules/@mapbox/node-pre-gyp/node_modules/minizlib/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", - "optional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -388,10 +348,7 @@ }, "node_modules/@mapbox/node-pre-gyp/node_modules/tar": { "version": "6.2.1", - "resolved": "https://registry.npmmirror.com/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "license": "ISC", - "optional": true, "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -406,15 +363,10 @@ }, "node_modules/@mapbox/node-pre-gyp/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/@modelcontextprotocol/sdk": { "version": "1.25.2", - "resolved": "https://registry.npmmirror.com/@modelcontextprotocol/sdk/-/sdk-1.25.2.tgz", - "integrity": "sha512-LZFeo4F9M5qOhC/Uc1aQSrBHxMrvxett+9KLHt7OhcExtoiRN9DKgbZffMP/nxjutWDQpfMDfP3nkHI4X9ijww==", "license": "MIT", "dependencies": { "@hono/node-server": "^1.19.7", @@ -452,8 +404,6 @@ }, "node_modules/@swc/helpers": { "version": "0.5.18", - "resolved": "https://registry.npmmirror.com/@swc/helpers/-/helpers-0.5.18.tgz", - "integrity": "sha512-TXTnIcNJQEKwThMMqBXsZ4VGAza6bvN4pa41Rkqoio6QBKMvo+5lexeTMScGCIxtzgQJzElcvIltani+adC5PQ==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -461,44 +411,30 @@ }, "node_modules/@tsconfig/node10": { "version": "1.0.12", - "resolved": "https://registry.npmmirror.com/@tsconfig/node10/-/node10-1.0.12.tgz", - "integrity": "sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==", "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", - "resolved": "https://registry.npmmirror.com/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", "license": "MIT" }, "node_modules/@types/command-line-args": { "version": "5.2.3", - "resolved": "https://registry.npmmirror.com/@types/command-line-args/-/command-line-args-5.2.3.tgz", - "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", "license": "MIT" }, "node_modules/@types/command-line-usage": { "version": "5.0.4", - "resolved": "https://registry.npmmirror.com/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", - "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "11.0.4", - "resolved": "https://registry.npmmirror.com/@types/fs-extra/-/fs-extra-11.0.4.tgz", - "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "license": "MIT", "dependencies": { "@types/jsonfile": "*", @@ -507,8 +443,6 @@ }, "node_modules/@types/jsonfile": { "version": "6.1.4", - "resolved": "https://registry.npmmirror.com/@types/jsonfile/-/jsonfile-6.1.4.tgz", - "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -516,8 +450,6 @@ }, "node_modules/@types/node": { "version": "25.0.9", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-25.0.9.tgz", - "integrity": "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -525,15 +457,10 @@ }, "node_modules/abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/accepts": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", "license": "MIT", "dependencies": { "mime-types": "^3.0.0", @@ -545,8 +472,6 @@ }, "node_modules/acorn": { "version": "8.15.0", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -557,8 +482,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -569,10 +492,7 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "license": "MIT", - "optional": true, "dependencies": { "debug": "4" }, @@ -582,8 +502,6 @@ }, "node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -598,8 +516,6 @@ }, "node_modules/ajv-formats": { "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -615,18 +531,13 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", - "optional": true, "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -640,8 +551,6 @@ }, "node_modules/apache-arrow": { "version": "18.1.0", - "resolved": "https://registry.npmmirror.com/apache-arrow/-/apache-arrow-18.1.0.tgz", - "integrity": "sha512-v/ShMp57iBnBp4lDgV8Jx3d3Q5/Hac25FWmQ98eMahUiHPXcvwIMKJD0hBIgclm/FCG+LwPkAKtkRO1O/W0YGg==", "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.11", @@ -660,8 +569,6 @@ }, "node_modules/apache-arrow/node_modules/@types/node": { "version": "20.19.30", - "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.19.30.tgz", - "integrity": "sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==", "license": "MIT", "dependencies": { "undici-types": "~6.21.0" @@ -669,24 +576,15 @@ }, "node_modules/apache-arrow/node_modules/undici-types": { "version": "6.21.0", - "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/aproba": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/aproba/-/aproba-2.1.0.tgz", - "integrity": "sha512-tLIEcj5GuR2RSTnxNKdkK0dJ/GrC7P38sUkiDmDuHfsHmbagTFAxDVIBltoklXEVIQ/f14IL8IMJ5pn9Hez1Ew==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/are-we-there-yet": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "deprecated": "This package is no longer supported.", "license": "ISC", - "optional": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -697,14 +595,10 @@ }, "node_modules/arg": { "version": "4.1.3", - "resolved": "https://registry.npmmirror.com/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", "license": "MIT" }, "node_modules/array-back": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", "license": "MIT", "engines": { "node": ">=6" @@ -712,15 +606,10 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/body-parser": { "version": "2.2.2", - "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-2.2.2.tgz", - "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", @@ -743,10 +632,7 @@ }, "node_modules/brace-expansion": { "version": "1.1.12", - "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "license": "MIT", - "optional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -754,8 +640,6 @@ }, "node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -763,8 +647,6 @@ }, "node_modules/call-bind-apply-helpers": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -776,8 +658,6 @@ }, "node_modules/call-bound": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -792,8 +672,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -808,8 +686,6 @@ }, "node_modules/chalk-template": { "version": "0.4.0", - "resolved": "https://registry.npmmirror.com/chalk-template/-/chalk-template-0.4.0.tgz", - "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", "license": "MIT", "dependencies": { "chalk": "^4.1.2" @@ -823,8 +699,6 @@ }, "node_modules/chownr": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/chownr/-/chownr-3.0.0.tgz", - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -832,8 +706,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -844,24 +716,17 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/color-support": { "version": "1.1.3", - "resolved": "https://registry.npmmirror.com/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "license": "ISC", - "optional": true, "bin": { "color-support": "bin.js" } }, "node_modules/command-line-args": { "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", "license": "MIT", "dependencies": { "array-back": "^3.1.0", @@ -875,8 +740,6 @@ }, "node_modules/command-line-usage": { "version": "7.0.3", - "resolved": "https://registry.npmmirror.com/command-line-usage/-/command-line-usage-7.0.3.tgz", - "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", "license": "MIT", "dependencies": { "array-back": "^6.2.2", @@ -890,8 +753,6 @@ }, "node_modules/command-line-usage/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "license": "MIT", "engines": { "node": ">=12.17" @@ -899,8 +760,6 @@ }, "node_modules/command-line-usage/node_modules/typical": { "version": "7.3.0", - "resolved": "https://registry.npmmirror.com/typical/-/typical-7.3.0.tgz", - "integrity": "sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==", "license": "MIT", "engines": { "node": ">=12.17" @@ -908,8 +767,6 @@ }, "node_modules/commander": { "version": "14.0.2", - "resolved": "https://registry.npmmirror.com/commander/-/commander-14.0.2.tgz", - "integrity": "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==", "license": "MIT", "engines": { "node": ">=20" @@ -917,22 +774,14 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/content-disposition": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-1.0.1.tgz", - "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", "license": "MIT", "engines": { "node": ">=18" @@ -944,8 +793,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -953,8 +800,6 @@ }, "node_modules/cookie": { "version": "0.7.2", - "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -962,8 +807,6 @@ }, "node_modules/cookie-signature": { "version": "1.2.2", - "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", "engines": { "node": ">=6.6.0" @@ -971,8 +814,6 @@ }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmmirror.com/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "license": "MIT", "dependencies": { "object-assign": "^4", @@ -982,33 +823,20 @@ "node": ">= 0.10" } }, - "node_modules/cozo-lib-wasm": { - "version": "0.7.6", - "resolved": "https://registry.npmmirror.com/cozo-lib-wasm/-/cozo-lib-wasm-0.7.6.tgz", - "integrity": "sha512-JxM0JHF2EVY7/S+100FKHB1h+fBgcmtqbs/9gSka0TgD9YutDYFCgIE5I80fRmbjh0h2e+THEe2HooRIbML7dw==", - "license": "MPL-2.0" - }, "node_modules/cozo-node": { "version": "0.7.6", - "resolved": "https://registry.npmmirror.com/cozo-node/-/cozo-node-0.7.6.tgz", - "integrity": "sha512-St2I4A9mD1I9LmSQo0r/EuOZ0Y0dknSCidLx8+BU5HzjrhqSbgoScDZ0nL/2sXOcUfJnSOYKNOKFUrv10j3MHA==", "hasInstallScript": true, "license": "MIT", - "optional": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.10" } }, "node_modules/create-require": { "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "license": "MIT" }, "node_modules/cross-spawn": { "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -1021,8 +849,6 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1038,15 +864,10 @@ }, "node_modules/delegates": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -1054,18 +875,13 @@ }, "node_modules/detect-libc": { "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", - "optional": true, "engines": { "node": ">=8" } }, "node_modules/diff": { "version": "4.0.2", - "resolved": "https://registry.npmmirror.com/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -1073,8 +889,6 @@ }, "node_modules/dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", @@ -1087,21 +901,14 @@ }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -1109,8 +916,6 @@ }, "node_modules/es-define-property": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1118,8 +923,6 @@ }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1127,8 +930,6 @@ }, "node_modules/es-object-atoms": { "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -1139,14 +940,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -1154,8 +951,6 @@ }, "node_modules/eventsource": { "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-3.0.7.tgz", - "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", "license": "MIT", "dependencies": { "eventsource-parser": "^3.0.1" @@ -1166,8 +961,6 @@ }, "node_modules/eventsource-parser": { "version": "3.0.6", - "resolved": "https://registry.npmmirror.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz", - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==", "license": "MIT", "engines": { "node": ">=18.0.0" @@ -1175,8 +968,6 @@ }, "node_modules/express": { "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/express/-/express-5.2.1.tgz", - "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", @@ -1218,8 +1009,6 @@ }, "node_modules/express-rate-limit": { "version": "7.5.1", - "resolved": "https://registry.npmmirror.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz", - "integrity": "sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==", "license": "MIT", "engines": { "node": ">= 16" @@ -1233,14 +1022,10 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-uri": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "funding": [ { "type": "github", @@ -1255,8 +1040,6 @@ }, "node_modules/finalhandler": { "version": "2.1.1", - "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -1276,8 +1059,6 @@ }, "node_modules/find-replace": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", "license": "MIT", "dependencies": { "array-back": "^3.0.1" @@ -1288,14 +1069,10 @@ }, "node_modules/flatbuffers": { "version": "24.12.23", - "resolved": "https://registry.npmmirror.com/flatbuffers/-/flatbuffers-24.12.23.tgz", - "integrity": "sha512-dLVCAISd5mhls514keQzmEG6QHmUUsNuWsb4tFafIUwvvgDjXhtfAYSKOzt5SWOy+qByV5pbsDZ+Vb7HUOBEdA==", "license": "Apache-2.0" }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -1303,8 +1080,6 @@ }, "node_modules/fresh": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -1312,8 +1087,6 @@ }, "node_modules/fs-extra": { "version": "11.3.3", - "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -1326,10 +1099,7 @@ }, "node_modules/fs-minipass": { "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "license": "ISC", - "optional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -1339,10 +1109,7 @@ }, "node_modules/fs-minipass/node_modules/minipass": { "version": "3.3.6", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "license": "ISC", - "optional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -1352,22 +1119,14 @@ }, "node_modules/fs-minipass/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -1375,11 +1134,7 @@ }, "node_modules/gauge": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", "license": "ISC", - "optional": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -1397,8 +1152,6 @@ }, "node_modules/get-intrinsic": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", @@ -1421,8 +1174,6 @@ }, "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", @@ -1434,8 +1185,6 @@ }, "node_modules/glob": { "version": "13.0.0", - "resolved": "https://registry.npmmirror.com/glob/-/glob-13.0.0.tgz", - "integrity": "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==", "license": "BlueOak-1.0.0", "dependencies": { "minimatch": "^10.1.1", @@ -1451,8 +1200,6 @@ }, "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1463,14 +1210,10 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -1478,8 +1221,6 @@ }, "node_modules/has-symbols": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1490,15 +1231,10 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -1509,8 +1245,6 @@ }, "node_modules/hono": { "version": "4.11.4", - "resolved": "https://registry.npmmirror.com/hono/-/hono-4.11.4.tgz", - "integrity": "sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==", "license": "MIT", "peer": true, "engines": { @@ -1519,8 +1253,6 @@ }, "node_modules/http-errors": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { "depd": "~2.0.0", @@ -1539,10 +1271,7 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "license": "MIT", - "optional": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -1553,8 +1282,6 @@ }, "node_modules/iconv-lite": { "version": "0.7.2", - "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.7.2.tgz", - "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -1569,11 +1296,7 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", - "optional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1581,14 +1304,10 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -1596,30 +1315,21 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", - "optional": true, "engines": { "node": ">=8" } }, "node_modules/is-promise": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/jose": { "version": "6.1.3", - "resolved": "https://registry.npmmirror.com/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -1627,28 +1337,20 @@ }, "node_modules/json-bignum": { "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", "engines": { "node": ">=0.8" } }, "node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/json-schema-typed": { "version": "8.0.2", - "resolved": "https://registry.npmmirror.com/json-schema-typed/-/json-schema-typed-8.0.2.tgz", - "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", "license": "BSD-2-Clause" }, "node_modules/jsonfile": { "version": "6.2.0", - "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.2.0.tgz", - "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -1659,14 +1361,10 @@ }, "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", "license": "MIT" }, "node_modules/lru-cache": { "version": "11.2.4", - "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-11.2.4.tgz", - "integrity": "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -1674,10 +1372,7 @@ }, "node_modules/make-dir": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "license": "MIT", - "optional": true, "dependencies": { "semver": "^6.0.0" }, @@ -1690,24 +1385,17 @@ }, "node_modules/make-dir/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", - "optional": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/make-error": { "version": "1.3.6", - "resolved": "https://registry.npmmirror.com/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "license": "ISC" }, "node_modules/math-intrinsics": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1715,8 +1403,6 @@ }, "node_modules/media-typer": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -1724,8 +1410,6 @@ }, "node_modules/merge-descriptors": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { "node": ">=18" @@ -1736,8 +1420,6 @@ }, "node_modules/mime-db": { "version": "1.54.0", - "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -1745,8 +1427,6 @@ }, "node_modules/mime-types": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" @@ -1761,8 +1441,6 @@ }, "node_modules/minimatch": { "version": "10.1.1", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" @@ -1776,8 +1454,6 @@ }, "node_modules/minipass": { "version": "7.1.2", - "resolved": "https://registry.npmmirror.com/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" @@ -1785,8 +1461,6 @@ }, "node_modules/minizlib": { "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-3.1.0.tgz", - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "license": "MIT", "dependencies": { "minipass": "^7.1.2" @@ -1797,10 +1471,7 @@ }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "license": "MIT", - "optional": true, "bin": { "mkdirp": "bin/cmd.js" }, @@ -1810,14 +1481,10 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/negotiator": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -1825,8 +1492,6 @@ }, "node_modules/node-addon-api": { "version": "8.5.0", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-8.5.0.tgz", - "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", "license": "MIT", "engines": { "node": "^18 || ^20 || >= 21" @@ -1834,10 +1499,7 @@ }, "node_modules/node-fetch": { "version": "2.7.0", - "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "license": "MIT", - "optional": true, "dependencies": { "whatwg-url": "^5.0.0" }, @@ -1855,8 +1517,6 @@ }, "node_modules/node-gyp-build": { "version": "4.8.4", - "resolved": "https://registry.npmmirror.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz", - "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "license": "MIT", "bin": { "node-gyp-build": "bin.js", @@ -1866,10 +1526,7 @@ }, "node_modules/nopt": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "license": "ISC", - "optional": true, "dependencies": { "abbrev": "1" }, @@ -1882,11 +1539,7 @@ }, "node_modules/npmlog": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "deprecated": "This package is no longer supported.", "license": "ISC", - "optional": true, "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -1896,8 +1549,6 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -1905,8 +1556,6 @@ }, "node_modules/object-inspect": { "version": "1.13.4", - "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -1917,8 +1566,6 @@ }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -1929,8 +1576,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -1938,14 +1583,10 @@ }, "node_modules/onnxruntime-common": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.19.2.tgz", - "integrity": "sha512-a4R7wYEVFbZBlp0BfhpbFWqe4opCor3KM+5Wm22Az3NGDcQMiU2hfG/0MfnBs+1ZrlSGmlgWeMcXQkDk1UFb8Q==", "license": "MIT" }, "node_modules/onnxruntime-node": { "version": "1.19.2", - "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.19.2.tgz", - "integrity": "sha512-9eHMP/HKbbeUcqte1JYzaaRC8JPn7ojWeCeoyShO86TOR97OCyIyAIOGX3V95ErjslVhJRXY8Em/caIUc0hm1Q==", "hasInstallScript": true, "license": "MIT", "os": [ @@ -1960,8 +1601,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -1969,18 +1608,13 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", - "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -1988,8 +1622,6 @@ }, "node_modules/path-scurry": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", @@ -2004,8 +1636,6 @@ }, "node_modules/path-to-regexp": { "version": "8.3.0", - "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz", - "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", "license": "MIT", "funding": { "type": "opencollective", @@ -2014,8 +1644,6 @@ }, "node_modules/pkce-challenge": { "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/pkce-challenge/-/pkce-challenge-5.0.1.tgz", - "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", "license": "MIT", "engines": { "node": ">=16.20.0" @@ -2023,8 +1651,6 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -2036,8 +1662,6 @@ }, "node_modules/qs": { "version": "6.14.1", - "resolved": "https://registry.npmmirror.com/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.1.0" @@ -2051,8 +1675,6 @@ }, "node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -2060,8 +1682,6 @@ }, "node_modules/raw-body": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { "bytes": "~3.1.2", @@ -2075,10 +1695,7 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", - "optional": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2090,14 +1707,10 @@ }, "node_modules/reflect-metadata": { "version": "0.2.2", - "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.2.2.tgz", - "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", "license": "Apache-2.0" }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -2105,11 +1718,7 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", - "optional": true, "dependencies": { "glob": "^7.1.3" }, @@ -2122,11 +1731,7 @@ }, "node_modules/rimraf/node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", - "optional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2144,10 +1749,7 @@ }, "node_modules/rimraf/node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", - "optional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2157,8 +1759,6 @@ }, "node_modules/router": { "version": "2.2.0", - "resolved": "https://registry.npmmirror.com/router/-/router-2.2.0.tgz", - "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -2173,8 +1773,6 @@ }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -2189,21 +1787,15 @@ "url": "https://feross.org/support" } ], - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/semver": { "version": "7.7.3", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "license": "ISC", - "optional": true, "bin": { "semver": "bin/semver.js" }, @@ -2213,8 +1805,6 @@ }, "node_modules/send": { "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/send/-/send-1.2.1.tgz", - "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { "debug": "^4.4.3", @@ -2239,8 +1829,6 @@ }, "node_modules/serve-static": { "version": "2.2.1", - "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -2258,21 +1846,14 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -2283,8 +1864,6 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" @@ -2292,8 +1871,6 @@ }, "node_modules/side-channel": { "version": "1.1.0", - "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2311,8 +1888,6 @@ }, "node_modules/side-channel-list": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -2327,8 +1902,6 @@ }, "node_modules/side-channel-map": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -2345,8 +1918,6 @@ }, "node_modules/side-channel-weakmap": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "license": "MIT", "dependencies": { "call-bound": "^1.0.2", @@ -2364,15 +1935,10 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC", - "optional": true + "license": "ISC" }, "node_modules/simple-git": { "version": "3.30.0", - "resolved": "https://registry.npmmirror.com/simple-git/-/simple-git-3.30.0.tgz", - "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", @@ -2386,8 +1952,6 @@ }, "node_modules/statuses": { "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -2395,20 +1959,14 @@ }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", - "optional": true, "dependencies": { "safe-buffer": "~5.2.0" } }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", - "optional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2420,10 +1978,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", - "optional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2433,8 +1988,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -2445,8 +1998,6 @@ }, "node_modules/table-layout": { "version": "4.1.1", - "resolved": "https://registry.npmmirror.com/table-layout/-/table-layout-4.1.1.tgz", - "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", "license": "MIT", "dependencies": { "array-back": "^6.2.2", @@ -2458,8 +2009,6 @@ }, "node_modules/table-layout/node_modules/array-back": { "version": "6.2.2", - "resolved": "https://registry.npmmirror.com/array-back/-/array-back-6.2.2.tgz", - "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", "license": "MIT", "engines": { "node": ">=12.17" @@ -2467,8 +2016,6 @@ }, "node_modules/tar": { "version": "7.5.3", - "resolved": "https://registry.npmmirror.com/tar/-/tar-7.5.3.tgz", - "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", @@ -2483,8 +2030,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -2492,15 +2037,10 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/tree-sitter": { "version": "0.21.1", - "resolved": "https://registry.npmmirror.com/tree-sitter/-/tree-sitter-0.21.1.tgz", - "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2510,8 +2050,6 @@ }, "node_modules/tree-sitter-c": { "version": "0.21.4", - "resolved": "https://registry.npmmirror.com/tree-sitter-c/-/tree-sitter-c-0.21.4.tgz", - "integrity": "sha512-IahxFIhXiY15SUlrt2upBiKSBGdOaE1fjKLK1Ik5zxqGHf6T1rvr3IJrovbsE5sXhypx7Hnmf50gshsppaIihA==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2529,8 +2067,6 @@ }, "node_modules/tree-sitter-go": { "version": "0.21.2", - "resolved": "https://registry.npmmirror.com/tree-sitter-go/-/tree-sitter-go-0.21.2.tgz", - "integrity": "sha512-aMFwjsB948nWhURiIxExK8QX29JYKs96P/IfXVvluVMRJZpL04SREHsdOZHYqJr1whkb7zr3/gWHqqvlkczmvw==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2548,8 +2084,6 @@ }, "node_modules/tree-sitter-java": { "version": "0.21.0", - "resolved": "https://registry.npmmirror.com/tree-sitter-java/-/tree-sitter-java-0.21.0.tgz", - "integrity": "sha512-CKJiTo1uc3SUsgEcaZgufGx8my6dzihy8JR/JsJH40Tj3uSe2/eFLk+0q+fpbosGAyY4YiXJtEoFB2O4bS2yOw==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2567,8 +2101,6 @@ }, "node_modules/tree-sitter-python": { "version": "0.21.0", - "resolved": "https://registry.npmmirror.com/tree-sitter-python/-/tree-sitter-python-0.21.0.tgz", - "integrity": "sha512-IUKx7JcTVbByUx1iHGFS/QsIjx7pqwTMHL9bl/NGyhyyydbfNrpruo2C7W6V4KZrbkkCOlX8QVrCoGOFW5qecg==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2586,14 +2118,10 @@ }, "node_modules/tree-sitter-python/node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, "node_modules/tree-sitter-rust": { "version": "0.21.0", - "resolved": "https://registry.npmmirror.com/tree-sitter-rust/-/tree-sitter-rust-0.21.0.tgz", - "integrity": "sha512-unVr73YLn3VC4Qa/GF0Nk+Wom6UtI526p5kz9Rn2iZSqwIFedyCZ3e0fKCEmUJLIPGrTb/cIEdu3ZUNGzfZx7A==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2611,14 +2139,10 @@ }, "node_modules/tree-sitter-rust/node_modules/node-addon-api": { "version": "7.1.1", - "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", "license": "MIT" }, "node_modules/tree-sitter-typescript": { "version": "0.21.1", - "resolved": "https://registry.npmmirror.com/tree-sitter-typescript/-/tree-sitter-typescript-0.21.1.tgz", - "integrity": "sha512-emQMXz1CpVSkMUq1NEMrbJkUUdKyGrnIl++Mt4LjEeq7ttpOdotb4a2A6zSMs39ppVebFhpTlbSrAMDSEWEEjw==", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -2636,8 +2160,6 @@ }, "node_modules/ts-node": { "version": "10.9.2", - "resolved": "https://registry.npmmirror.com/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -2679,14 +2201,10 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/type-is": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", "license": "MIT", "dependencies": { "content-type": "^1.0.5", @@ -2699,8 +2217,6 @@ }, "node_modules/typescript": { "version": "5.9.3", - "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -2712,8 +2228,6 @@ }, "node_modules/typical": { "version": "4.0.0", - "resolved": "https://registry.npmmirror.com/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", "license": "MIT", "engines": { "node": ">=8" @@ -2721,14 +2235,10 @@ }, "node_modules/undici-types": { "version": "7.16.0", - "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "license": "MIT" }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -2736,8 +2246,6 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -2745,21 +2253,14 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -2767,17 +2268,11 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause", - "optional": true + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", - "optional": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -2785,8 +2280,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -2800,18 +2293,13 @@ }, "node_modules/wide-align": { "version": "1.1.5", - "resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "license": "ISC", - "optional": true, "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/wordwrapjs": { "version": "5.1.1", - "resolved": "https://registry.npmmirror.com/wordwrapjs/-/wordwrapjs-5.1.1.tgz", - "integrity": "sha512-0yweIbkINJodk27gX9LBGMzyQdBDan3s/dEAiwBOj+Mf0PPyWL6/rikalkv8EeD0E8jm4o5RXEOrFTP3NXbhJg==", "license": "MIT", "engines": { "node": ">=12.17" @@ -2819,14 +2307,10 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/yallist": { "version": "5.0.0", - "resolved": "https://registry.npmmirror.com/yallist/-/yallist-5.0.0.tgz", - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "license": "BlueOak-1.0.0", "engines": { "node": ">=18" @@ -2834,8 +2318,6 @@ }, "node_modules/yn": { "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "license": "MIT", "engines": { "node": ">=6" @@ -2843,8 +2325,6 @@ }, "node_modules/zod": { "version": "4.3.5", - "resolved": "https://registry.npmmirror.com/zod/-/zod-4.3.5.tgz", - "integrity": "sha512-k7Nwx6vuWx1IJ9Bjuf4Zt1PEllcwe7cls3VNzm4CQ1/hgtFUK2bRNG3rvnpPUhFjmqJKAKtjV576KnUkHocg/g==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" @@ -2852,8 +2332,6 @@ }, "node_modules/zod-to-json-schema": { "version": "3.25.1", - "resolved": "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz", - "integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==", "license": "ISC", "peerDependencies": { "zod": "^3.25 || ^4" diff --git a/src/core/symbolSearch.ts b/src/core/symbolSearch.ts index a7089e7..bbd694c 100644 --- a/src/core/symbolSearch.ts +++ b/src/core/symbolSearch.ts @@ -31,6 +31,44 @@ export function pickCoarseToken(query: string): string { return best; } +/** + * Strip common language keywords from queries to improve search results. + * Examples: "class Project" -> "Project", "function handleAuth" -> "handleAuth" + */ +const KEYWORD_PATTERNS = [ + // Type declarations + /^(?:class|interface|type|enum|struct|trait)\s+/i, + // Function declarations + /^(?:function|method|def|func|fn|async\s+function|export\s+function|export\s+async\s+function)\s+/i, + // Variable declarations + /^(?:const|let|var|val|export\s+const|export\s+let|export\s+var)\s+/i, + // Modifiers + /^(?:public|private|protected|static|readonly|abstract)\s+/i, +]; + +export function stripLanguageKeywords(query: string): string { + let q = query.trim(); + + // Apply patterns iteratively to handle multiple keywords + // e.g., "export const MY_VAR" -> "MY_VAR" + let changed = true; + let iterations = 0; + while (changed && iterations < 5) { + changed = false; + for (const pattern of KEYWORD_PATTERNS) { + const newQ = q.replace(pattern, ''); + if (newQ !== q) { + q = newQ.trim(); + changed = true; + break; + } + } + iterations++; + } + + return q; +} + export function buildCoarseWhere(params: SymbolSearchParams): string | null { const q = String(params.query ?? ''); const mode = inferSymbolSearchMode(q, params.mode); @@ -104,7 +142,9 @@ function fuzzySubsequenceScore(needle: string, haystack: string): number { } export function filterAndRankSymbolRows>(rows: T[], params: SymbolSearchParams): T[] { - const qRaw = String(params.query ?? ''); + // Strip language keywords from query for better matching + // e.g., "class Project" -> "Project", "function handleAuth" -> "handleAuth" + const qRaw = stripLanguageKeywords(String(params.query ?? '')); const mode = inferSymbolSearchMode(qRaw, params.mode); const limit = Math.max(1, Number(params.limit ?? 50)); const caseInsensitive = Boolean(params.caseInsensitive); diff --git a/src/mcp/handlers/searchHandlers.ts b/src/mcp/handlers/searchHandlers.ts index 26bfc5b..6ce1f2b 100644 --- a/src/mcp/handlers/searchHandlers.ts +++ b/src/mcp/handlers/searchHandlers.ts @@ -73,15 +73,76 @@ async function buildRepoMapAttachment( export const handleRepoMap: ToolHandler = async (args) => { const repoRoot = await resolveGitRoot(path.resolve(args.path)); + + const status = await checkIndex(repoRoot); + + if (!status.ok) { + return successResponse({ + repoRoot, + repo_map: { + enabled: false, + skippedReason: 'index_unavailable', + diagnostics: { + ok: status.ok, + problems: status.problems, + warnings: status.warnings, + hint: status.hint || 'Rebuild index with: git-ai ai index --overwrite' + } + } + }); + } + + const astGraphPath = path.join(repoRoot, '.git-ai', 'ast-graph.sqlite'); + if (!fs.existsSync(astGraphPath)) { + return successResponse({ + repoRoot, + repo_map: { + enabled: false, + skippedReason: 'missing_ast_graph', + hint: 'Index exists but AST graph is missing. Rebuild with: git-ai ai index --overwrite' + } + }); + } + const wikiDir = resolveWikiDirInsideRepo(repoRoot, args.wiki_dir ?? ''); const maxFiles = args.max_files ?? 20; const maxSymbolsPerFile = args.max_symbols ?? 5; - const repoMap = await buildRepoMapAttachment(repoRoot, wikiDir, maxFiles, maxSymbolsPerFile); - - return successResponse({ - repoRoot, - repo_map: repoMap - }); + + try { + const files = await generateRepoMap({ + repoRoot, + maxFiles, + maxSymbolsPerFile, + wikiDir: wikiDir || undefined + }); + + if (files.length === 0) { + return successResponse({ + repoRoot, + repo_map: { + enabled: false, + skippedReason: 'no_symbols_found', + hint: 'AST graph exists but no symbols found. This may indicate: (1) Empty repository, (2) Unsupported file types, or (3) Parsing errors. Check .git-ai/cozo.error.json for details.' + } + }); + } + + return successResponse({ + repoRoot, + repo_map: { enabled: true, wikiDir, files } + }); + + } catch (e: any) { + return successResponse({ + repoRoot, + repo_map: { + enabled: false, + skippedReason: 'generation_error', + error: String(e?.message ?? e), + hint: 'Check .git-ai/cozo.error.json for details' + } + }); + } }; export const handleSearchSymbols: ToolHandler = async (args) => { diff --git a/src/mcp/server.ts b/src/mcp/server.ts index 18c83d6..80e0621 100644 --- a/src/mcp/server.ts +++ b/src/mcp/server.ts @@ -110,14 +110,18 @@ export class GitAIV2MCPServer { this.registry.register(tool, schema); } - this.server.setRequestHandler(ListToolsRequestSchema, async () => { + this.attachServerHandlers(this.server); + } + + private attachServerHandlers(serverInstance: Server) { + serverInstance.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: this.registry.listTools() }; }); - this.server.setRequestHandler(CallToolRequestSchema, async (request) => { + serverInstance.setRequestHandler(CallToolRequestSchema, async (request) => { const name = request.params.name; const args = request.params.arguments ?? {}; - const callPath = typeof (args as any).path === 'string' ? String((args as any).path) : undefined; + const callPath = typeof (args as any).path === 'string' ? (args as any).path : undefined; const log = createLogger({ component: 'mcp', tool: name }); const startedAt = Date.now(); const context: ToolContext = { startDir: this.startDir, options: this.options }; @@ -131,7 +135,7 @@ export class GitAIV2MCPServer { }); } - async start() { + async start(): Promise { const log = createLogger({ component: 'mcp' }); const transport = this.options.transport ?? 'stdio'; @@ -142,108 +146,207 @@ export class GitAIV2MCPServer { await this.server.connect(stdioTransport); log.info('server_started', { startDir: this.startDir, transport: 'stdio' }); } + + // Keep process alive indefinitely - server runs until killed by signal + return new Promise(() => {}); } private async startHttp() { const log = createLogger({ component: 'mcp' }); const port = this.options.port ?? 3000; - const sessions = new Map(); + const sessions = new Map(); const httpServer = createServer(async (req: IncomingMessage, res: ServerResponse) => { - const url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`); - - if (url.pathname === '/health') { - res.writeHead(200, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ status: 'ok', sessions: sessions.size })); - return; - } + try { + let url: URL; + try { + url = new URL(req.url ?? '/', `http://${req.headers.host ?? 'localhost'}`); + } catch (urlError) { + log.error('invalid_url', { url: req.url, error: String(urlError) }); + res.writeHead(400, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Invalid request URL' })); + return; + } + + if (url.pathname === '/health') { + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ status: 'ok', sessions: sessions.size })); + return; + } - if (url.pathname !== '/mcp') { - res.writeHead(404, { 'Content-Type': 'application/json' }); - res.end(JSON.stringify({ error: 'Not found. Use /mcp for MCP endpoint or /health for health check.' })); - return; - } + if (url.pathname !== '/mcp') { + res.writeHead(404, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Not found. Use /mcp for MCP endpoint or /health for health check.' })); + return; + } - const sessionId = req.headers['mcp-session-id'] as string | undefined; - let transport: StreamableHTTPServerTransport; + const sessionId = req.headers['mcp-session-id'] as string | undefined; + let transport: StreamableHTTPServerTransport; + let responseSessionId: string | undefined; - if (sessionId && sessions.has(sessionId)) { - transport = sessions.get(sessionId)!; - } else if (this.options.stateless) { - transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: undefined, - }); - const serverInstance = new Server( - { name: 'git-ai-v2', version: '2.0.0' }, - { capabilities: { tools: {} } } - ); - this.setupServerHandlers(serverInstance); - await serverInstance.connect(transport); - } else { - const newSessionId = randomUUID(); - transport = new StreamableHTTPServerTransport({ - sessionIdGenerator: () => newSessionId, - }); - - const serverInstance = new Server( - { name: 'git-ai-v2', version: '2.0.0' }, - { capabilities: { tools: {} } } - ); - this.setupServerHandlers(serverInstance); - await serverInstance.connect(transport); - - sessions.set(newSessionId, transport); - log.info('session_created', { sessionId: newSessionId, totalSessions: sessions.size }); - - transport.onclose = () => { - sessions.delete(newSessionId); - log.info('session_closed', { sessionId: newSessionId, totalSessions: sessions.size }); - }; - } + if (sessionId && sessions.has(sessionId)) { + const session = sessions.get(sessionId); + if (!session) { + // Session was deleted between check and access (race condition) + log.warn('session_race_condition', { sessionId }); + res.writeHead(410, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Session expired or no longer exists' })); + return; + } + transport = session.transport; + responseSessionId = sessionId; + } else if (this.options.stateless) { + // Stateless mode: create a new server instance for each request + transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: undefined, + }); + const serverInstance = new Server( + { name: 'git-ai-v2', version: '2.0.0' }, + { capabilities: { tools: {} } } + ); + this.attachServerHandlers(serverInstance); + try { + await serverInstance.connect(transport); + } catch (err) { + log.error('stateless_server_connection_failed', { error: String(err) }); + // Clean up transport on connection failure + try { + await transport.close(); + } catch (closeErr) { + log.error('stateless_transport_cleanup_failed', { error: String(closeErr) }); + } + res.writeHead(500, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Failed to initialize MCP server connection' })); + return; + } + // No session ID in stateless mode + } else { + // Create a new session + const newSessionId = randomUUID(); + transport = new StreamableHTTPServerTransport({ + sessionIdGenerator: () => newSessionId, + }); + + const serverInstance = new Server( + { name: 'git-ai-v2', version: '2.0.0' }, + { capabilities: { tools: {} } } + ); + this.attachServerHandlers(serverInstance); + + try { + await serverInstance.connect(transport); + } catch (err) { + log.error('server_connection_failed', { sessionId: newSessionId, error: String(err) }); + // Clean up transport on connection failure + try { + await transport.close(); + } catch (closeErr) { + log.error('transport_cleanup_failed', { sessionId: newSessionId, error: String(closeErr) }); + } + res.writeHead(500, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Failed to initialize MCP server connection' })); + return; + } + + // Store session before setting up cleanup handlers + sessions.set(newSessionId, { transport, server: serverInstance }); + responseSessionId = newSessionId; + log.info('session_created', { sessionId: newSessionId, totalSessions: sessions.size }); + + // Set up cleanup handler for when transport closes + transport.onclose = () => { + if (sessions.has(newSessionId)) { + sessions.delete(newSessionId); + log.info('session_closed', { sessionId: newSessionId, totalSessions: sessions.size }); + } + }; + } + + // Set session ID in response header for client to reuse + if (responseSessionId) { + res.setHeader('mcp-session-id', responseSessionId); + } - await transport.handleRequest(req, res); + await transport.handleRequest(req, res); + } catch (err) { + log.error('http_request_handler_error', { error: String(err), stack: err instanceof Error ? err.stack : undefined }); + if (!res.headersSent) { + res.writeHead(500, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Internal server error' })); + } + } }); - httpServer.listen(port, () => { - log.info('server_started', { - startDir: this.startDir, - transport: 'http', - port, - endpoint: `http://localhost:${port}/mcp`, - health: `http://localhost:${port}/health`, - stateless: !!this.options.stateless, + // Store reference to http server for graceful shutdown + const serverStartPromise = new Promise((resolve, reject) => { + httpServer.once('error', reject); + httpServer.listen(port, () => { + log.info('server_started', { + startDir: this.startDir, + transport: 'http', + port, + endpoint: `http://localhost:${port}/mcp`, + health: `http://localhost:${port}/health`, + stateless: !!this.options.stateless, + }); + console.error(JSON.stringify({ + ts: new Date().toISOString(), + level: 'info', + msg: 'MCP HTTP server started', + port, + endpoint: `http://localhost:${port}/mcp`, + health: `http://localhost:${port}/health`, + })); + resolve(); }); - console.error(JSON.stringify({ - ts: new Date().toISOString(), - level: 'info', - msg: 'MCP HTTP server started', - port, - endpoint: `http://localhost:${port}/mcp`, - health: `http://localhost:${port}/health`, - })); }); - } - private setupServerHandlers(serverInstance: Server) { - serverInstance.setRequestHandler(ListToolsRequestSchema, async () => { - return { tools: this.registry.listTools() }; - }); + await serverStartPromise; - serverInstance.setRequestHandler(CallToolRequestSchema, async (request) => { - const name = request.params.name; - const args = request.params.arguments ?? {}; - const callPath = typeof (args as any).path === 'string' ? String((args as any).path) : undefined; - const log = createLogger({ component: 'mcp', tool: name }); - const startedAt = Date.now(); - const context: ToolContext = { startDir: this.startDir, options: this.options }; + // Keep process alive for HTTP server + // The server will run until a SIGTERM/SIGINT signal is received - const response = await this.registry.execute(name, args, context); + // Handle graceful shutdown + const shutdown = async () => { + log.info('server_shutting_down', { sessionsToClose: sessions.size }); + + // Close all active sessions and their transports + const closePromises: Promise[] = []; + for (const [sessionId, session] of sessions.entries()) { + const closePromise = (async () => { + try { + await session.transport.close(); + log.info('session_transport_closed', { sessionId }); + } catch (err) { + log.error('session_cleanup_error', { sessionId, error: String(err) }); + } + })(); + closePromises.push(closePromise); + } + + // Wait for all sessions to close + await Promise.allSettled(closePromises); + sessions.clear(); - log.info('tool_call', { ok: !response.isError, duration_ms: Date.now() - startedAt, path: callPath }); - const repoRootForLog = await this.resolveRepoRoot(callPath).catch(() => undefined); - await this.writeAccessLog(name, args, Date.now() - startedAt, !response.isError, repoRootForLog); - return response; + // Close HTTP server + await new Promise((resolve) => { + httpServer.close(() => { + log.info('server_stopped'); + resolve(); + }); + }); + }; + + // Register signal handlers for graceful shutdown (use once to prevent duplicates) + process.once('SIGTERM', async () => { + await shutdown(); + process.exit(0); + }); + + process.once('SIGINT', async () => { + await shutdown(); + process.exit(0); }); } } diff --git a/templates/agents/common/documents/Fix EISDIR error and enable multi-language indexing.md b/templates/agents/common/documents/Fix EISDIR error and enable multi-language indexing.md deleted file mode 100644 index ccffdd2..0000000 --- a/templates/agents/common/documents/Fix EISDIR error and enable multi-language indexing.md +++ /dev/null @@ -1,14 +0,0 @@ -The user encountered an `EISDIR: illegal operation on a directory, read` error when running `git-ai ai index`. This is caused by the file globbing logic inadvertently matching directories (likely due to a directory name matching the file extension pattern or default glob behavior), and then trying to read them as files. - -Additionally, the current indexer implementation (`src/core/indexer.ts` and `src/core/lancedb.ts`) only supports `java` and `ts`, missing the newly added languages (C, Go, Python, PHP, Rust). - -I will fix the error and enable full multi-language support by: - -1. **Updating `src/core/lancedb.ts`**: Expand the `IndexLang` type and `ALL_INDEX_LANGS` array to include `c`, `go`, `python`, `php`, and `rust`. -2. **Updating `src/core/indexer.ts`**: - * Modify the `glob` pattern to include extensions for all supported languages (`.c`, `.h`, `.go`, `.py`, `.php`, `.rs`). - * **Crucial Fix**: Add `nodir: true` to the `glob` options to ensure only files are returned, preventing the `EISDIR` error. - * Update `inferIndexLang` to correctly map file extensions to the new `IndexLang` types. - * Add an extra `fs.stat` check before parsing as a safety net. - -This will resolve the crash and enable indexing for the full polyglot stack. diff --git a/templates/agents/common/documents/Fix git-ai index error in CodaGraph directory.md b/templates/agents/common/documents/Fix git-ai index error in CodaGraph directory.md deleted file mode 100644 index 7f19ae7..0000000 --- a/templates/agents/common/documents/Fix git-ai index error in CodaGraph directory.md +++ /dev/null @@ -1,13 +0,0 @@ -The error is caused by `ts-node` (running in development mode) failing to find type definitions for `tree-sitter-php` when executed from the `CodaGraph` directory. This happens because `tree-sitter-php` (v0.20.0) does not include built-in TypeScript definitions, unlike the other language parsers (C, Go, Python, Rust) which are newer versions (v0.21+) or include types. - -Although `src/modules.d.ts` exists, `ts-node` is not picking it up correctly in this execution context. - -I will fix this by: -1. Explicitly referencing the type declaration file in `src/core/parser/php.ts` using a triple-slash directive. This ensures TypeScript always loads the definitions regardless of the working directory. -2. Updating `src/modules.d.ts` to remove unnecessary declarations for other languages (C, Go, Python, Rust) since they already provide official types, keeping only the necessary one for PHP. -3. Verifying the fix by running the index command again. - -Implementation Steps: -1. **Edit `src/core/parser/php.ts`**: Add `/// ` to the top of the file. -2. **Edit `src/modules.d.ts`**: Remove declarations for C, Go, Python, and Rust; keep only `tree-sitter-php`. -3. **Verify**: Run the index command in the `CodaGraph` directory to confirm success. diff --git a/templates/agents/common/rules/README.md b/templates/agents/common/rules/README.md new file mode 100644 index 0000000..d241244 --- /dev/null +++ b/templates/agents/common/rules/README.md @@ -0,0 +1,172 @@ +# Agent Rules for git-ai + +Agent rules define **mandatory behavioral constraints** for AI coding agents (Claude Code, OpenCode, Cursor, Windsurf, etc.) when working with git-ai indexed repositories. + +## Rules vs Skills + +| Aspect | **Rules** (this directory) | **Skills** (../skills) | +|--------|---------------------------|------------------------| +| **Purpose** | Enforce mandatory behaviors | Provide capabilities/knowledge | +| **Tone** | Prescriptive ("MUST", "NEVER") | Instructional ("Use X for Y") | +| **Violations** | Blocking/Critical | Guidance/Best practices | +| **Focus** | Tool selection priority, workflow order | Tool documentation, usage patterns | + +## Available Rules + +### 1. git-ai-priority + +**File:** [`git-ai-priority/RULE.md`](./git-ai-priority/RULE.md) + +**What it does:** Mandates git-ai MCP tools as the PRIMARY code retrieval mechanism, prohibiting agents from bypassing semantic search in favor of naive grep/glob operations. + +**Key enforcements:** +- ✅ MUST call `check_index` before any code search +- ✅ MUST attempt `semantic_search`/`search_symbols` before `grep` +- ✅ MUST use `repo_map` for architecture overview before `glob` +- ✅ MUST use `dsr_symbol_evolution` for history, not `git log` +- ✅ MUST use `ast_graph_*` for call relationships, not text search + +**Applies to:** All AI coding agents with git-ai MCP server access + +**Priority:** Critical + +--- + +## Installation + +### Option 1: Manual Installation + +Copy rule files to your agent's configuration directory: + +**Claude Code / OpenCode:** +```bash +mkdir -p .claude/rules +cp templates/agents/common/rules/git-ai-priority/RULE.md .claude/rules/ +``` + +**Cursor / Windsurf:** +```bash +# Add to .cursorrules or .windsurfrules +cat templates/agents/common/rules/git-ai-priority/RULE.md >> .cursorrules +``` + +### Option 2: Automated Installation + +Use the git-ai CLI agent installer: +```bash +git-ai ai agent install +``` + +This copies both skills and rules to your project. + +--- + +## Rule Development Guidelines + +When creating new rules: + +### 1. Structure (Required Sections) + +```markdown +--- +name: rule-name +description: | + Clear explanation of what this rule enforces +priority: critical|high|medium|low +applies_to: + - agent-name-1 + - agent-name-2 +--- + +# Rule Title + +## Core Principle +[One-sentence mandate] + +## Prohibited Patterns (BLOCKING) +[Table of violations and why they're wrong] + +## Mandatory Workflow +[Step-by-step required process] + +## Fallback Protocol +[When/how fallback is permitted] + +## Examples +[✅ CORRECT vs ❌ WRONG patterns] + +## Enforcement Checklist +[Verification steps] +``` + +### 2. Tone & Language + +- **Use imperatives:** "MUST", "NEVER", "ALWAYS", "PROHIBITED" +- **Be specific:** Exact tool names, parameters, sequences +- **Show violations:** Demonstrate WRONG patterns clearly +- **Justify strictness:** Explain WHY each rule exists + +### 3. Integration with Skills + +Rules REFERENCE skills but DON'T DUPLICATE them: + +**Rule (this directory):** +> "MUST use `semantic_search` before `grep`" + +**Skill (../skills):** +> "Use `semantic_search` for conceptual queries. Parameters: `path`, `query`, `topk`..." + +Rules enforce the "WHAT", skills document the "HOW". + +--- + +## Relationship to MCP Tools + +Rules leverage the git-ai MCP server's tools. Ensure the MCP server is configured: + +```json +// ~/.config/claude/claude_desktop_config.json +{ + "mcpServers": { + "git-ai": { + "command": "git-ai", + "args": ["ai", "serve"] + } + } +} +``` + +--- + +## Testing Rules + +Verify rule enforcement: + +1. **Manual test:** Follow the rule's examples, ensure agent behavior matches +2. **Violation test:** Deliberately violate a rule, check if agent prevents/warns +3. **Fallback test:** Create scenarios where fallback is legitimate, verify agent documents properly + +--- + +## Contributing + +To propose a new rule: + +1. Check if it should be a **rule** (mandatory) vs **skill** (guidance) +2. Use the structure template above +3. Include at least 3 ✅ CORRECT vs ❌ WRONG examples +4. Specify violation severity (critical/high/medium/low) +5. Test with at least one target agent (Claude Code, Cursor, etc.) + +--- + +## Related Documentation + +- **Skills Directory:** [`../skills/`](../skills/) - Agent capabilities and tool documentation +- **git-ai MCP Tools:** [`../skills/git-ai-code-search/references/tools.md`](../skills/git-ai-code-search/references/tools.md) +- **Constraints Reference:** [`../skills/git-ai-code-search/references/constraints.md`](../skills/git-ai-code-search/references/constraints.md) +- **Main README:** [`../../../../README.md`](../../../../README.md) + +--- + +**Last Updated:** 2026-02-05 diff --git a/templates/agents/common/rules/git-ai-priority/RULE.md b/templates/agents/common/rules/git-ai-priority/RULE.md new file mode 100644 index 0000000..f1f7c09 --- /dev/null +++ b/templates/agents/common/rules/git-ai-priority/RULE.md @@ -0,0 +1,401 @@ +--- +name: git-ai-priority +description: | + Enforce git-ai MCP tools as the PRIMARY code retrieval method for AI coding agents (Claude Code, OpenCode, Cursor, etc.). This rule mandates that agents MUST attempt git-ai tools FIRST before falling back to traditional file operations. Applies to: code search, symbol lookup, codebase understanding, architecture analysis, call graph tracing. +priority: critical +applies_to: + - claude-code + - opencode + - cursor + - windsurf + - continue-dev + - any-ai-coding-agent +--- + +# git-ai Priority Rule + +**Mandate git-ai MCP tools as PRIMARY code retrieval mechanism for all AI coding agents.** + +--- + +## 🎯 Core Principle + +> **When git-ai index exists, git-ai tools are NOT optional—they are MANDATORY FIRST ATTEMPT.** + +Traditional file operations (grep, find, read) are **fallback mechanisms only**, permitted when: +1. git-ai index is missing/incompatible AND rebuilding is infeasible +2. git-ai tools have been tried and explicitly failed +3. Task is non-code-related (config files, logs, etc.) + +--- + +## 🚫 Prohibited Patterns (BLOCKING) + +| Violation | Why It's Wrong | +|-----------|----------------| +| Using `grep` / `ripgrep` / `find` WITHOUT prior git-ai attempt | Bypasses semantic understanding | +| Reading files directly before `semantic_search` or `search_symbols` | Wastes context, misses relationships | +| Exploring codebase with `glob` / `ls` instead of `repo_map` | Lacks structural understanding | +| Manual git log parsing instead of `dsr_symbol_evolution` | Loses semantic change context | +| "I'll search for X" → immediately calls grep | No git-ai attempt made | + +--- + +## ✅ Mandatory Workflow + +### Phase 1: Verify Index (ALWAYS FIRST) + +```js +// MUST be first action when starting code-related task +check_index({ path: "/absolute/path/to/repo" }) +``` + +**Decision tree:** +``` +check_index result: +├─ compatible: true → Proceed to Phase 2 +├─ compatible: false → Attempt rebuild_index +│ ├─ Rebuild succeeds → Proceed to Phase 2 +│ └─ Rebuild fails → Document failure, MAY use fallback tools +└─ Index missing → Attempt rebuild_index (same as above) +``` + +--- + +### Phase 2: Code Retrieval (git-ai FIRST) + +#### For: "Find code that does X" / "Locate functionality Y" + +**CORRECT (git-ai priority):** +```js +// 1. Semantic understanding (PRIMARY) +semantic_search({ + path: "/repo", + query: "user authentication and session management", + topk: 10 +}) + +// 2. If semantic search insufficient, try symbol search +search_symbols({ + path: "/repo", + query: "authenticate", + mode: "substring" +}) + +// 3. ONLY if both fail, fallback to grep +// (Must document why git-ai was insufficient) +``` + +**WRONG (bypassing git-ai):** +```js +// ❌ NO git-ai attempt made! +grep("authenticate", { path: "/repo" }) +``` + +--- + +#### For: "Understand architecture" / "Get project overview" + +**CORRECT:** +```js +// 1. Start with structural overview +repo_map({ + path: "/repo", + max_files: 20, + max_symbols: 5 +}) + +// 2. Deep dive into key areas +semantic_search({ + path: "/repo", + query: "core business logic payment processing" +}) +``` + +**WRONG:** +```js +// ❌ Bypassing repo_map +glob("**/*.ts") +// Then manually reading files +``` + +--- + +#### For: "Who calls function X?" / "What does X call?" + +**CORRECT:** +```js +// 1. Call graph analysis (PRIMARY) +ast_graph_callers({ + path: "/repo", + name: "processPayment" +}) + +// 2. For complex flows, use chain +ast_graph_chain({ + path: "/repo", + name: "processPayment", + direction: "upstream", + max_depth: 3 +}) +``` + +**WRONG:** +```js +// ❌ Manual text search for function calls +grep("processPayment\\(", { path: "/repo" }) +``` + +--- + +#### For: "When/why did X change?" / "History of function Y" + +**CORRECT:** +```js +// 1. DSR-based history (PRIMARY) +dsr_symbol_evolution({ + path: "/repo", + symbol: "authenticateUser", + limit: 50 +}) +``` + +**WRONG:** +```js +// ❌ Manual git log parsing +bash("git log -p --all -S 'authenticateUser'") +``` + +--- + +### Phase 3: Read Files (AFTER LOCATION IDENTIFIED) + +Only AFTER git-ai tools locate relevant files: + +```js +// Now read specific files identified by search +read_file({ + path: "/repo", + file: "src/auth/service.ts", // From search results + start_line: 45, // From symbol location + end_line: 100 +}) +``` + +--- + +## 🔄 Fallback Protocol + +When git-ai tools fail or are unavailable: + +### 1. Document Failure +``` +Attempted git-ai tools: +- check_index: [result] +- rebuild_index: [attempted? result?] +- semantic_search: [tried? error?] + +Reason for fallback: [explain] +Fallback method: [grep/glob/etc.] +``` + +### 2. Permitted Fallbacks (with justification) + +| Scenario | Fallback Tool | Justification Required | +|----------|---------------|------------------------| +| Index rebuild fails in CI | grep | "Cannot rebuild in CI, read-only filesystem" | +| Non-code files (.env, logs) | read | "Config files, not indexed" | +| git-ai returns no results AND symbol definitely exists | grep | "Verified symbol X exists in file Y, possible index staleness" | + +--- + +## 📊 Tool Priority Matrix + +| Task Type | Priority 1 | Priority 2 | Priority 3 (Fallback) | +|-----------|-----------|-----------|----------------------| +| **Find by concept** | `semantic_search` | `search_symbols` | `grep` | +| **Find by name** | `search_symbols` | `ast_graph_find` | `grep` | +| **Call relationships** | `ast_graph_callers/callees` | `ast_graph_chain` | `grep` + manual | +| **Architecture overview** | `repo_map` | `semantic_search` | `glob` + read | +| **Change history** | `dsr_symbol_evolution` | `dsr_context` | `git log` | +| **Read specific file** | `read_file` (after locating) | N/A | N/A | + +--- + +## 🎓 Examples + +### Example 1: "Find authentication logic" + +**✅ CORRECT:** +``` +Agent: I need to find authentication logic in this codebase. + +Step 1: Check index +→ check_index({ path: "/repo" }) +→ Result: compatible: true + +Step 2: Semantic search +→ semantic_search({ + path: "/repo", + query: "user authentication login session management", + topk: 10 + }) +→ Found: src/auth/service.ts, src/middleware/auth.ts + +Step 3: Read specific files +→ read_file({ path: "/repo", file: "src/auth/service.ts" }) +``` + +**❌ WRONG:** +``` +Agent: I need to find authentication logic. + +Step 1: Text search +→ grep("authenticate|login", { path: "/repo" }) + [NO git-ai attempt made!] +``` + +--- + +### Example 2: "Who calls function processOrder?" + +**✅ CORRECT:** +``` +Step 1: Check index +→ check_index({ path: "/repo" }) + +Step 2: Call graph query +→ ast_graph_callers({ path: "/repo", name: "processOrder" }) +→ Found 3 callers: handleCheckout, retryOrder, adminPanel + +Step 3: If need full chain +→ ast_graph_chain({ + path: "/repo", + name: "processOrder", + direction: "upstream", + max_depth: 5 + }) +``` + +**❌ WRONG:** +``` +Step 1: Text search +→ grep("processOrder\\(", { include: "**/*.ts" }) + [Misses indirect calls, dynamic invocations] +``` + +--- + +### Example 3: "Understand project structure" + +**✅ CORRECT:** +``` +Step 1: Check index +→ check_index({ path: "/repo" }) + +Step 2: High-level overview +→ repo_map({ path: "/repo", max_files: 20 }) +→ Returns: Top 20 files, key symbols, wiki links + +Step 3: Deep dive into areas +→ semantic_search({ + path: "/repo", + query: "main application entry point" + }) +``` + +**❌ WRONG:** +``` +Step 1: List all files +→ glob("**/*") + [No semantic understanding, overwhelming output] + +Step 2: Read random files +→ read("package.json") +→ read("README.md") + [Lacks structure, trial-and-error] +``` + +--- + +## 🛡️ Enforcement Checklist + +Before ANY code search/retrieval operation, verify: + +- [ ] `check_index` called first? +- [ ] git-ai tools attempted before grep/glob/find? +- [ ] If fallback used, is failure documented? +- [ ] Using `repo_map` for architecture overview? +- [ ] Using `dsr_symbol_evolution` for history, not `git log`? +- [ ] Using `ast_graph_*` for relationships, not text search? + +--- + +## 🔗 Related Documentation + +- **Tools Reference**: [git-ai MCP Tools](../skills/git-ai-code-search/references/tools.md) +- **Behavioral Constraints**: [git-ai Constraints](../skills/git-ai-code-search/references/constraints.md) +- **Skill Guide**: [git-ai Code Search Skill](../skills/git-ai-code-search/SKILL.md) + +--- + +## 📝 Implementation Notes + +### For Agent Developers + +Add this rule to agent configuration: + +**Claude Code / OpenCode:** +```yaml +# .claude/rules/git-ai-priority.md +rules: + - file: templates/agents/common/rules/git-ai-priority/RULE.md + priority: critical +``` + +**Cursor / Windsurf:** +```json +// .cursorrules +{ + "rules": [ + { + "name": "git-ai-priority", + "file": "templates/agents/common/rules/git-ai-priority/RULE.md", + "enforce": true + } + ] +} +``` + +### For MCP Server Configuration + +Ensure git-ai MCP server is registered: + +```json +// claude_desktop_config.json +{ + "mcpServers": { + "git-ai": { + "command": "git-ai", + "args": ["ai", "serve"] + } + } +} +``` + +--- + +## 🚨 Violation Severity + +| Severity | Violation | Action | +|----------|-----------|--------| +| **Critical** | Using fallback tools WITHOUT git-ai attempt | Reject operation | +| **High** | Skipping `check_index` before search | Warning, require check | +| **Medium** | Using git-ai but not optimal tool (e.g., `search_symbols` for conceptual search) | Suggest `semantic_search` | +| **Low** | Not using `repo_map` for initial exploration | Recommend but allow | + +--- + +**Version:** 1.0.0 +**Last Updated:** 2026-02-05 +**Status:** Active