From bc5e5fa0203756f36cf1f5bba2ebfd00f80ed229 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:46:15 +0000 Subject: [PATCH] chore(release): version packages v2.9.0 --- .changeset/yellow-penguins-cheat.md | 51 --------------------------- docs/CHANGELOG.md | 47 +++++++++++++++++++++++++ docs/package.json | 2 +- packages/javascript-sdk/CHANGELOG.md | 47 +++++++++++++++++++++++++ packages/javascript-sdk/package.json | 2 +- packages/mcp-server/CHANGELOG.md | 52 ++++++++++++++++++++++++++++ packages/mcp-server/package.json | 2 +- packages/skills/CHANGELOG.md | 47 +++++++++++++++++++++++++ packages/skills/package.json | 2 +- platform/core/CHANGELOG.md | 47 +++++++++++++++++++++++++ platform/core/package.json | 2 +- platform/dashboard/CHANGELOG.md | 52 ++++++++++++++++++++++++++++ platform/dashboard/package.json | 2 +- 13 files changed, 298 insertions(+), 57 deletions(-) delete mode 100644 .changeset/yellow-penguins-cheat.md diff --git a/.changeset/yellow-penguins-cheat.md b/.changeset/yellow-penguins-cheat.md deleted file mode 100644 index 8784ee10..00000000 --- a/.changeset/yellow-penguins-cheat.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -'@rushdb/javascript-sdk': minor -'@rushdb/mcp-server': minor -'@rushdb/skills': minor -'rushdb-core': minor -'rushdb-docs': minor -'rushdb-dashboard': minor ---- - -Add variable-length (multihop) traversal and cycle detection to SearchQuery - -**`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: - -```ts -db.records.find({ - labels: ['EMPLOYEE'], - where: { - EMPLOYEE: { - $alias: '$manager', - $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, - name: { $contains: 'Alice' } - } - } -}) -``` - -`hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. - -**`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): - -```ts -db.records.find({ - labels: ['ACCOUNT'], - where: { - RING: { - $cycle: true, - $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } - } - } -}) -``` - -A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. - -**Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. - -Also in this release: - -- New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. -- NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. -- Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index d5df8487..6e8afca7 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -1,5 +1,52 @@ # rushdb-docs +## 2.9.0 + +### Minor Changes + +- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery + + **`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: + + ```ts + db.records.find({ + labels: ['EMPLOYEE'], + where: { + EMPLOYEE: { + $alias: '$manager', + $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, + name: { $contains: 'Alice' } + } + } + }) + ``` + + `hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. + + **`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): + + ```ts + db.records.find({ + labels: ['ACCOUNT'], + where: { + RING: { + $cycle: true, + $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } + } + } + }) + ``` + + A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. + + **Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. + + Also in this release: + + - New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. + - NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. + - Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. + ## 2.8.1 ### Patch Changes diff --git a/docs/package.json b/docs/package.json index d186f905..84375fbe 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "rushdb-docs", - "version": "2.8.1", + "version": "2.9.0", "private": true, "license": "Apache-2.0", "scripts": { diff --git a/packages/javascript-sdk/CHANGELOG.md b/packages/javascript-sdk/CHANGELOG.md index 94849bf1..5bd5fc6f 100644 --- a/packages/javascript-sdk/CHANGELOG.md +++ b/packages/javascript-sdk/CHANGELOG.md @@ -1,5 +1,52 @@ # @rushdb/javascript-sdk +## 2.9.0 + +### Minor Changes + +- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery + + **`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: + + ```ts + db.records.find({ + labels: ['EMPLOYEE'], + where: { + EMPLOYEE: { + $alias: '$manager', + $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, + name: { $contains: 'Alice' } + } + } + }) + ``` + + `hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. + + **`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): + + ```ts + db.records.find({ + labels: ['ACCOUNT'], + where: { + RING: { + $cycle: true, + $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } + } + } + }) + ``` + + A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. + + **Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. + + Also in this release: + + - New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. + - NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. + - Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. + ## 2.8.1 ### Patch Changes diff --git a/packages/javascript-sdk/package.json b/packages/javascript-sdk/package.json index b3f62367..cb360db4 100644 --- a/packages/javascript-sdk/package.json +++ b/packages/javascript-sdk/package.json @@ -38,7 +38,7 @@ "rush-db" ], "license": "Apache-2.0", - "version": "2.8.1", + "version": "2.9.0", "type": "module", "files": [ "dist" diff --git a/packages/mcp-server/CHANGELOG.md b/packages/mcp-server/CHANGELOG.md index abbe5147..682832ee 100644 --- a/packages/mcp-server/CHANGELOG.md +++ b/packages/mcp-server/CHANGELOG.md @@ -1,5 +1,57 @@ # @rushdb/mcp-server +## 2.9.0 + +### Minor Changes + +- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery + + **`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: + + ```ts + db.records.find({ + labels: ['EMPLOYEE'], + where: { + EMPLOYEE: { + $alias: '$manager', + $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, + name: { $contains: 'Alice' } + } + } + }) + ``` + + `hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. + + **`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): + + ```ts + db.records.find({ + labels: ['ACCOUNT'], + where: { + RING: { + $cycle: true, + $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } + } + } + }) + ``` + + A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. + + **Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. + + Also in this release: + + - New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. + - NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. + - Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. + +### Patch Changes + +- Updated dependencies [d05e56c] + - @rushdb/javascript-sdk@2.9.0 + ## 2.8.1 ### Patch Changes diff --git a/packages/mcp-server/package.json b/packages/mcp-server/package.json index 841d9dfb..ed538fc6 100644 --- a/packages/mcp-server/package.json +++ b/packages/mcp-server/package.json @@ -15,7 +15,7 @@ "tools" ], "license": "Apache-2.0", - "version": "2.8.1", + "version": "2.9.0", "type": "module", "main": "./build/index.js", "bin": { diff --git a/packages/skills/CHANGELOG.md b/packages/skills/CHANGELOG.md index 94c255f8..62d72522 100644 --- a/packages/skills/CHANGELOG.md +++ b/packages/skills/CHANGELOG.md @@ -1,5 +1,52 @@ # @rushdb/skills +## 2.9.0 + +### Minor Changes + +- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery + + **`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: + + ```ts + db.records.find({ + labels: ['EMPLOYEE'], + where: { + EMPLOYEE: { + $alias: '$manager', + $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, + name: { $contains: 'Alice' } + } + } + }) + ``` + + `hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. + + **`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): + + ```ts + db.records.find({ + labels: ['ACCOUNT'], + where: { + RING: { + $cycle: true, + $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } + } + } + }) + ``` + + A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. + + **Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. + + Also in this release: + + - New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. + - NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. + - Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. + ## 2.8.1 ### Patch Changes diff --git a/packages/skills/package.json b/packages/skills/package.json index 48923fa2..79646fe4 100644 --- a/packages/skills/package.json +++ b/packages/skills/package.json @@ -16,7 +16,7 @@ "cursor" ], "license": "Apache-2.0", - "version": "2.8.1", + "version": "2.9.0", "files": [ "rushdb-query-builder", "rushdb-agent-memory", diff --git a/platform/core/CHANGELOG.md b/platform/core/CHANGELOG.md index c8842b44..1f8e14fa 100644 --- a/platform/core/CHANGELOG.md +++ b/platform/core/CHANGELOG.md @@ -1,5 +1,52 @@ # rushdb-core +## 2.9.0 + +### Minor Changes + +- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery + + **`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: + + ```ts + db.records.find({ + labels: ['EMPLOYEE'], + where: { + EMPLOYEE: { + $alias: '$manager', + $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, + name: { $contains: 'Alice' } + } + } + }) + ``` + + `hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. + + **`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): + + ```ts + db.records.find({ + labels: ['ACCOUNT'], + where: { + RING: { + $cycle: true, + $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } + } + } + }) + ``` + + A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. + + **Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. + + Also in this release: + + - New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. + - NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. + - Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. + ## 2.8.1 ### Patch Changes diff --git a/platform/core/package.json b/platform/core/package.json index ec98378f..629fa62f 100755 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -1,6 +1,6 @@ { "name": "rushdb-core", - "version": "2.8.1", + "version": "2.9.0", "description": "RushDB Core", "private": true, "license": "Elastic License 2.0", diff --git a/platform/dashboard/CHANGELOG.md b/platform/dashboard/CHANGELOG.md index 5b3ffb12..ef910b1d 100644 --- a/platform/dashboard/CHANGELOG.md +++ b/platform/dashboard/CHANGELOG.md @@ -1,5 +1,57 @@ # rushdb-dashboard +## 2.9.0 + +### Minor Changes + +- d05e56c: Add variable-length (multihop) traversal and cycle detection to SearchQuery + + **`$relation.hops`** — traverse a relationship pattern up to N hops in a single `where` block, without naming intermediate records: + + ```ts + db.records.find({ + labels: ['EMPLOYEE'], + where: { + EMPLOYEE: { + $alias: '$manager', + $relation: { type: 'REPORTS_TO', direction: 'out', hops: { min: 1, max: 4 } }, + name: { $contains: 'Alice' } + } + } + }) + ``` + + `hops` accepts an exact count (`hops: 3`) or a range (`{ min?, max? }`, `min` defaults to 1). `type` and `direction` apply to every hop; the nested label and its criteria constrain only the endpoint record. Omitting `type` traverses any relationship — RushDB's internal property metadata edges are automatically excluded, so untyped traversal never leaves the user's data model. + + **`$cycle`** — find records sitting on a closed path back to themselves (fraud rings, circular ownership, dependency cycles): + + ```ts + db.records.find({ + labels: ['ACCOUNT'], + where: { + RING: { + $cycle: true, + $relation: { type: 'TRANSFERRED_TO', direction: 'out', hops: { min: 2, max: 6 } } + } + } + }) + ``` + + A `$cycle` block requires `$relation` with `hops` (`min` ≥ 2, the default) and accepts no other keys; its label key is a display name. Combine with `$not` to select records not on a cycle. + + **Traversal depth policy** — `hops.max` is capped per deployment via `RUSHDB_MAX_TRAVERSAL_HOPS` (default 25) on the shared cloud connection. Self-hosted deployments (`RUSHDB_SELF_HOSTED=true`) and projects with a custom external Neo4j allow unbounded traversal (`max` omitted), guarded by the existing transaction timeout. + + Also in this release: + + - New SDK types: `TraversalHops` and `TraversalRelationOptions` (TypeScript); matching `TypedDict`s in the Python SDK. + - NL→query (smart search), the MCP server spec/tools, and the query-builder/data-modeling skills all understand `hops` and `$cycle`. + - Docs: full operator reference in Where Operators, updated hierarchy-modeling tutorial, and a new "Detecting Fraud Rings" tutorial. + +### Patch Changes + +- Updated dependencies [d05e56c] + - @rushdb/javascript-sdk@2.9.0 + ## 2.8.1 ### Patch Changes diff --git a/platform/dashboard/package.json b/platform/dashboard/package.json index 6673f688..375670d5 100644 --- a/platform/dashboard/package.json +++ b/platform/dashboard/package.json @@ -1,6 +1,6 @@ { "name": "rushdb-dashboard", - "version": "2.8.1", + "version": "2.9.0", "description": "RushDB Dashboard", "type": "module", "private": true,