Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
753 commits
Select commit Hold shift + click to select a range
638ddea
chore(core-py-deps): bump lexical-core from 0.8 to 1.0 and update the…
goldmedal Oct 25, 2024
6655213
feat(core): introduce `PySessionContext` and the API for the availabl…
goldmedal Oct 29, 2024
de1a51c
feat(core): remove properties field from mdl and improve the error me…
goldmedal Oct 30, 2024
6c98525
feat(core): introduce the hidden column (#863)
goldmedal Oct 30, 2024
ed555e0
[maven-release-plugin] prepare release 0.11.2
Oct 31, 2024
0f2e6f8
[maven-release-plugin] prepare for next development iteration
Oct 31, 2024
754c569
fix(core): fix the remote column inferring and disable simplify expre…
goldmedal Nov 1, 2024
3f4f535
fix(core): disable `CountWildcardRule` for BigQuery source (#883)
goldmedal Nov 4, 2024
ad11528
feat(core): upgrade DataFusion to the required commit (#891)
goldmedal Nov 6, 2024
956cdac
deps(java): bump the all group across 1 directory with 10 updates (#888)
dependabot[bot] Nov 7, 2024
af04f0d
feat(core): introduce Timestamp Simplify rule to handle timezone (#901)
goldmedal Nov 12, 2024
7012151
deps(java): bump the all group with 3 updates (#898)
dependabot[bot] Nov 13, 2024
0d302b3
fix(core): disable pushdown filter to keep the casting for timestamp …
goldmedal Nov 14, 2024
048b71a
deps(core): update thiserror requirement from 1.0.61 to 2.0.3 in /wre…
dependabot[bot] Nov 14, 2024
592abd2
feat(core): register timestamptz type to DataFusion timestamp with ti…
goldmedal Nov 14, 2024
4529ed4
[maven-release-plugin] prepare release 0.12.0
Nov 15, 2024
5ccb476
[maven-release-plugin] prepare for next development iteration
Nov 15, 2024
94e7b03
feat(core): support to Array and Struct type (#914)
goldmedal Nov 18, 2024
d99b52a
deps(java): bump com.zaxxer:HikariCP from 6.1.0 to 6.2.1 in the all g…
dependabot[bot] Nov 19, 2024
971820f
fix(core): disable CommonSubexprEliminate to avoid generate invalid p…
goldmedal Nov 19, 2024
12cfe4b
deps(core): update sqllogictest requirement from 0.22.0 to 0.23.0 in …
dependabot[bot] Nov 19, 2024
c72ef65
feat(core): support to define param_names and param_types in the list…
goldmedal Nov 19, 2024
cd58bf2
feat(engine): handle target.* (#933)
grieve54706 Nov 21, 2024
2f61c51
[maven-release-plugin] prepare release 0.12.1
Nov 21, 2024
14ca1d0
[maven-release-plugin] prepare for next development iteration
Nov 21, 2024
9e868be
chore(core): remove unused `properties` field (#941)
goldmedal Nov 25, 2024
97ab5c6
[maven-release-plugin] prepare release 0.12.2
Nov 25, 2024
5e838fd
[maven-release-plugin] prepare for next development iteration
Nov 25, 2024
d23cc84
fix(core): make aggregate functions and window functions support zero…
grieve54706 Nov 26, 2024
41c2ce0
deps(java): bump the all group with 5 updates (#944)
dependabot[bot] Nov 26, 2024
19e9beb
feat(core): upgrade DataFusion to support the array of struct syntax …
goldmedal Nov 28, 2024
2131357
[maven-release-plugin] prepare release 0.12.3
Dec 2, 2024
300bfd0
[maven-release-plugin] prepare for next development iteration
Dec 2, 2024
dd83d7a
feat(core): disable `EliminateNestedUnion` (#960)
goldmedal Dec 3, 2024
e925b27
feat(core): use MySQL interval style for output format (#961)
goldmedal Dec 3, 2024
8ced8a7
deps(java): bump the all group across 1 directory with 6 updates (#966)
dependabot[bot] Dec 5, 2024
a5a2870
deps(core-py): bump the all group in /wren-core-py with 2 updates (#964)
dependabot[bot] Dec 5, 2024
c54cbf6
feat(core): avoid to generate unnamed subquery when planning calculat…
goldmedal Dec 5, 2024
a4f42dd
chore: add docker compose yaml (#971)
grieve54706 Dec 6, 2024
492522f
fix(core): fix the StatementAnalyzer for UNNEST and LATERAL query (#972)
goldmedal Dec 9, 2024
15ce44e
feat(wren-core-py): implement ManifestExtractor (#959)
grieve54706 Dec 9, 2024
eb81da9
deps(core-py): bump the all group in /wren-core-py with 2 updates (#975)
dependabot[bot] Dec 10, 2024
48afa22
feat(java): warm up java engine (#974)
grieve54706 Dec 10, 2024
ff7c8a6
[maven-release-plugin] prepare release 0.12.4
Dec 10, 2024
8ae18ec
[maven-release-plugin] prepare for next development iteration
Dec 10, 2024
c3a4d0c
chore(java): make manifest complex to warm more class up (#978)
grieve54706 Dec 12, 2024
7afa7cd
chore(core): upgrade pyo3 to 0.23.3 (#981)
goldmedal Dec 12, 2024
1b57475
feat(core): add `dataSource` field to MDL (#980)
goldmedal Dec 12, 2024
6ad114b
chore: merge just commands (#982)
grieve54706 Dec 13, 2024
f546f3b
deps(java): bump the all group with 3 updates (#976)
dependabot[bot] Dec 13, 2024
d2d9cdf
[maven-release-plugin] prepare release 0.12.5
Dec 13, 2024
12de007
[maven-release-plugin] prepare for next development iteration
Dec 13, 2024
4856f13
feat(core): support querying window function (#984)
grieve54706 Dec 13, 2024
cb9942d
fix(core): disable `SingleDistinctToGroupBy` for distinct aggregation…
goldmedal Dec 16, 2024
e346d50
deps(core-py): bump ruff from 0.8.2 to 0.8.3 in /wren-core-py in the …
dependabot[bot] Dec 17, 2024
3687ce9
deps(java): bump the all group with 2 updates (#991)
dependabot[bot] Dec 17, 2024
9691cd1
[maven-release-plugin] prepare release 0.12.6
Dec 17, 2024
a6b722a
[maven-release-plugin] prepare for next development iteration
Dec 17, 2024
06e64df
fix(core): remove unused check to fix union syntax (#993)
goldmedal Dec 18, 2024
514bc12
[maven-release-plugin] prepare release 0.12.7
Dec 19, 2024
c1a465b
[maven-release-plugin] prepare for next development iteration
Dec 19, 2024
1449143
feat(core): implement the dialect-specific function unparsing (#999)
goldmedal Dec 23, 2024
1c46922
refactor(core): introduce `wren-core-base` module to collect the comm…
goldmedal Dec 24, 2024
9d77e98
[maven-release-plugin] prepare release 0.13.0
Dec 25, 2024
bcded01
[maven-release-plugin] prepare for next development iteration
Dec 25, 2024
0e59b8d
feat(core): introduce data control attributes for wren MDL base (#1014)
goldmedal Dec 26, 2024
afb6791
deps(core-py): bump ruff from 0.8.3 to 0.8.4 in /wren-core-py in the …
dependabot[bot] Dec 26, 2024
d077ac1
deps(java): bump the all group with 3 updates (#1006)
dependabot[bot] Dec 26, 2024
ce22229
feat(core): sync DataFusion for the latest SQL syntax (#1017)
goldmedal Dec 27, 2024
125fcc2
[maven-release-plugin] prepare release 0.13.1
Jan 7, 2025
9f825f3
[maven-release-plugin] prepare for next development iteration
Jan 7, 2025
40c7860
feat(ibis): introduce Local file connector (#1029)
goldmedal Jan 7, 2025
4dc0863
[maven-release-plugin] prepare release 0.13.2
Jan 9, 2025
b4409e0
[maven-release-plugin] prepare for next development iteration
Jan 9, 2025
e169917
deps(java): bump the all group across 1 directory with 6 updates (#1045)
dependabot[bot] Feb 3, 2025
0c41a0b
deps(core): bump the all group across 1 directory with 3 updates (#1046)
dependabot[bot] Feb 3, 2025
b34dd05
deps(core-py): bump the all group across 1 directory with 2 updates (…
dependabot[bot] Feb 3, 2025
67a7cf7
deps(java): bump the all group with 5 updates (#1051)
dependabot[bot] Feb 4, 2025
d2adf49
[maven-release-plugin] prepare release 0.14.0
Feb 4, 2025
082b71c
[maven-release-plugin] prepare for next development iteration
Feb 4, 2025
e65fdbe
[maven-release-plugin] prepare release 0.14.1
Feb 5, 2025
b9e7865
[maven-release-plugin] prepare for next development iteration
Feb 5, 2025
4eeae2a
[maven-release-plugin] prepare release 0.14.2
Feb 6, 2025
ba4033f
[maven-release-plugin] prepare for next development iteration
Feb 6, 2025
f6499c1
deps(core-py): bump the all group in /wren-core-py with 2 updates (#1…
dependabot[bot] Feb 11, 2025
5e7cc1d
deps(java): bump the all group with 2 updates (#1057)
dependabot[bot] Feb 11, 2025
76a891a
deps(java): bump the all group across 1 directory with 6 updates (#1071)
dependabot[bot] Feb 25, 2025
550dfa7
deps(core-py): bump ruff from 0.9.6 to 0.9.7 in /wren-core-py in the …
dependabot[bot] Feb 25, 2025
27aba48
chore(java): fix the maven test dependency (#1073)
goldmedal Feb 26, 2025
3504fed
[maven-release-plugin] prepare release 0.14.3
Feb 26, 2025
1f767e0
[maven-release-plugin] prepare for next development iteration
Feb 26, 2025
31dd00b
[maven-release-plugin] prepare release 0.14.4
Mar 6, 2025
71511be
[maven-release-plugin] prepare for next development iteration
Mar 6, 2025
17307ee
fix(engine): exclude the CTE table when source node checking (#1083)
goldmedal Mar 10, 2025
14f16cf
[maven-release-plugin] prepare release 0.14.5
Mar 10, 2025
9a4d0ab
[maven-release-plugin] prepare for next development iteration
Mar 10, 2025
d56e3d4
feat(core): upgrade DataFusion to 46.0.0 (#1084)
goldmedal Mar 11, 2025
de40ba7
deps(java): bump the all group across 1 directory with 10 updates (#1…
dependabot[bot] Mar 12, 2025
6d14d6d
deps(core-py): bump the all group in /wren-core-py with 2 updates (#1…
dependabot[bot] Mar 12, 2025
735efb4
feat(ibis): pushdown the limit of the query request into SQL (#1082)
goldmedal Mar 13, 2025
02a646e
[maven-release-plugin] prepare release 0.14.6
Mar 17, 2025
b9ccb00
[maven-release-plugin] prepare for next development iteration
Mar 17, 2025
facacbe
deps(java): bump the all group across 1 directory with 8 updates (#1101)
dependabot[bot] Mar 25, 2025
095787b
deps(core-py): bump the all group in /wren-core-py with 2 updates (#1…
dependabot[bot] Mar 25, 2025
87c8be7
fix(core): add data source variant for file connectors (#1114)
goldmedal Mar 27, 2025
bd15521
fix(core): disable ScalarSubqueryToJoin (#1103)
goldmedal Mar 28, 2025
4c45563
fix(core): handle the unnest table factor for the specific dialect (#…
goldmedal Mar 28, 2025
13eebd1
deps(core): upgrade to datafusion 0.46.1 (#1124)
douenergy Mar 28, 2025
29b16e9
[maven-release-plugin] prepare release 0.14.7
Mar 19, 2025
7178376
[maven-release-plugin] prepare for next development iteration
Mar 19, 2025
8104fe7
[maven-release-plugin] prepare release 0.14.8
Mar 20, 2025
7729513
[maven-release-plugin] prepare for next development iteration
Mar 20, 2025
8c1a3d5
[maven-release-plugin] prepare release 0.14.9
Mar 27, 2025
11d2a8e
[maven-release-plugin] prepare for next development iteration
Mar 27, 2025
ae3f995
fix(ibis): refactor the available function list (#1112)
goldmedal Mar 31, 2025
672db5e
fix(ibis): fix the function white list of DuckDB (#1129)
goldmedal Apr 1, 2025
96659a4
[maven-release-plugin] prepare release 0.15.0
Apr 1, 2025
3f71c9d
[maven-release-plugin] prepare for next development iteration
Apr 1, 2025
c554acc
fix(core): simplify the available function lists (#1131)
goldmedal Apr 7, 2025
888d2d1
chore(deps): update pyo3 requirement from 0.23.3 to 0.24.1 in /wren-c…
dependabot[bot] Apr 7, 2025
5a82a21
[maven-release-plugin] prepare release 0.15.1
Apr 7, 2025
f1742f8
[maven-release-plugin] prepare for next development iteration
Apr 7, 2025
791340b
chore: Refine the project structure and readme (#1133)
goldmedal Apr 8, 2025
5f938fd
fix(core): expand the wildcard before Wren rewrite rules (#1145)
goldmedal Apr 10, 2025
e02727f
deps(core-py): bump ruff from 0.11.2 to 0.11.4 in /wren-core-py in th…
dependabot[bot] Apr 29, 2025
0b4a8d8
fix(core): fix the uppercase table name of the model tableReference (…
goldmedal Apr 29, 2025
b2894ae
deps(core-py): bump ruff from 0.11.7 to 0.11.8 in /wren-core-py in th…
dependabot[bot] May 6, 2025
ce02026
fix(core): add missing variant and fix quoted issue for Oracle (#1178)
goldmedal May 6, 2025
2d7e903
feat(core): introduce the row-level access control for the model (#1161)
goldmedal May 6, 2025
b6432ea
feat(core): add validation rule for the condition syntax check of row…
goldmedal May 12, 2025
30f6493
fix(core): ensure that the RLAC can be applied when the relationship …
goldmedal May 13, 2025
9f642ab
deps(core-py): bump the all group in /wren-core-py with 2 updates (#1…
dependabot[bot] May 27, 2025
1d9ae8d
fix(core): disable eliminating sort in subquery (#1206)
goldmedal May 28, 2025
a0d7483
feat(ibis): Add Athena connector (#1207)
douenergy Jun 4, 2025
b79a908
deps(core-py): bump the all group in /wren-core-py with 2 updates (#1…
dependabot[bot] Jun 4, 2025
d3a1a19
feat(core): implement column-level access control for the model (#1211)
goldmedal Jun 6, 2025
c12773e
deps(core-py): bump the all group in /wren-core-py with 2 updates (#1…
dependabot[bot] Jun 12, 2025
bd12c41
feat(ibis): Add Redshift connector (#1221)
douenergy Jun 16, 2025
80e0edd
fix(core): disable EliminateLimit rule (#1226)
goldmedal Jun 23, 2025
2a5eb97
deps(core-py): bump the all group in /wren-core-py with 3 updates (#1…
dependabot[bot] Jun 26, 2025
2eddb9d
fix(ibis): using DataFusion to format the query result (#1235)
goldmedal Jul 1, 2025
780f22d
feat(core): improve the scope analyzer for the used models (#1239)
goldmedal Jul 1, 2025
24646bd
fix(core-py): avoid to generate duplicate models after extracting man…
goldmedal Jul 8, 2025
aa8520f
fix(core): fix RLAC for model with an alias (#1245)
goldmedal Jul 8, 2025
f5755b9
feat(core): enhance the error message for CLAC failure (#1250)
goldmedal Jul 14, 2025
2477f43
feat(core): apply default nulls last policy for ordering (#1262)
goldmedal Jul 21, 2025
6137ce6
fix(core): fix count statement for BigQuery (#1274)
goldmedal Jul 30, 2025
a0032fb
chore(core): enhance error messages for access controls check (#1278)
goldmedal Aug 7, 2025
eae6a34
feat(core): add BigQuery EXTRACT function support and window frame va…
goldmedal Aug 14, 2025
5799b2a
fix(core): add quotes for the model subquery alias (#1283)
goldmedal Aug 15, 2025
e720258
fix(core): fix the required session properties for CLAC (#1287)
goldmedal Aug 20, 2025
ee73ea2
feat(core): bump DataFusion to 49.0.1 (#1293)
goldmedal Aug 22, 2025
3fc6990
fix(core): disable `ReplaceDistinctWithAggregate` rule (#1294)
goldmedal Aug 22, 2025
4e90f69
fix(core): fix access controls case-insensitive issue and disable fal…
goldmedal Aug 22, 2025
feb2f17
fix(core): disable DecorrelatePredicateSubquery rule (#1297)
goldmedal Aug 22, 2025
75b1704
fix(core): fix current_timestamp function and add datetime function f…
goldmedal Aug 22, 2025
2db6f88
fix(core): introduce `DATE_DIFF` function (#1303)
goldmedal Sep 2, 2025
087cb42
fix(core): fix the CLAC and scope analyze issues (#1304)
goldmedal Sep 3, 2025
7c6e357
fix(core): fix the default session time zone (#1306)
goldmedal Sep 3, 2025
45a3a1f
feat(core): disable `enable_ident_normalization` for case-sensitive i…
goldmedal Sep 3, 2025
b340d56
feat(core): implement TypePlanner to compatible common SQL types (#1314)
goldmedal Sep 11, 2025
8ddc839
fix(core): remove default window frame clause (#1315)
goldmedal Sep 11, 2025
4c6f696
deps(core-py): bump the all group across 1 directory with 3 updates (…
dependabot[bot] Sep 11, 2025
bd7f308
chore(ci): simplify the Rust test (#1322)
goldmedal Sep 16, 2025
ba6f5f1
fix(core): fix temporal add and sub function of BigQuery (#1323)
goldmedal Sep 22, 2025
9b740b7
feat(core): implement the customize type coercion rule for unparsing …
goldmedal Sep 23, 2025
761e9d4
fix(core-py): extract the used tables using the case-sensitive table …
goldmedal Sep 23, 2025
402b976
deps(core-py): bump ruff from 0.12.12 to 0.13.0 in /wren-core-py in t…
dependabot[bot] Sep 23, 2025
2418778
deps(core): bump the all group across 1 directory with 4 updates (#1307)
dependabot[bot] Sep 23, 2025
d3f772a
deps(core): bump the all group across 1 directory with 2 updates (#1310)
dependabot[bot] Sep 23, 2025
d8f1fa6
fix(core): allow the RLAC condition invoke the hidden columns (#1330)
goldmedal Sep 26, 2025
ccd040c
fix(core): normalize the name of session property (#1331)
goldmedal Sep 30, 2025
207e548
fix(core): generate `trim` for BigQuery (#1337)
goldmedal Oct 3, 2025
f96d11e
fix(core): support the Unicode literal for MSSQL (#1338)
goldmedal Oct 3, 2025
d06c9e5
refactor(core): self-manage the list of the core functions (#1346)
goldmedal Oct 16, 2025
a634f9f
feat(core): support `to_char` format numeric values (#1349)
goldmedal Oct 21, 2025
c782eaf
feat(ibis): enhance the function list of snowflake (#1350)
goldmedal Oct 21, 2025
fdf05d9
fix(core): disable EliminateCrossJoin rule (#1354)
goldmedal Oct 30, 2025
11a49b5
feat(core): support UNNEST syntax for Snowflake (#1357)
goldmedal Oct 30, 2025
8601c78
feat(ibis): introduce Databricks connector (#1361)
goldmedal Nov 7, 2025
586156f
feat(core): introduce dialect-specific function list and refactor Big…
goldmedal Nov 18, 2025
effcd87
feat(ibis): introduce the api to get the details of specfic function …
goldmedal Dec 8, 2025
3dec4b3
feat(knowledge): introduce the generic SQL knowledge (#1389)
goldmedal Dec 18, 2025
260eb68
feat(ibis): Add Spark connector (#1398)
douenergy Jan 9, 2026
a401c0b
fix(core): fix unparsing `EXTRACT` for MySQL (#1376)
goldmedal Jan 9, 2026
a5e711d
deps(core-py): bump cryptography from 0.3.44 to 0.3.47 in /wren-core-py
goldmedal Feb 12, 2026
d160a05
deps(core-py): bump bytes from 1.10.1 to 1.11.1 in /wren-core-py
goldmedal Feb 12, 2026
c65ab18
fix: implement ClickHouse dialect and enhance temporal function mappi…
MarceloNunesAlves Feb 26, 2026
b054331
feat(mcp-server): embed MCP server in Docker image with skills and qu…
goldmedal Mar 6, 2026
25c2134
feat(skills): add auto-update notification and skill versioning (#1427)
goldmedal Mar 6, 2026
564c926
feat: support connectionFilePath and skills overhaul for secrets mana…
goldmedal Mar 9, 2026
435246c
feat(skills): add Docker image update check to wren-mcp-setup (#1433)
goldmedal Mar 9, 2026
154d96a
docs: add Wren Engine documentation (#1437)
goldmedal Mar 10, 2026
a6cdfff
docs(skills): add file-based connector docs, venv setup, and fix path…
goldmedal Mar 10, 2026
185dbb0
feat(wren-engine): add Apache Doris connector support (#1430)
catpineapple Mar 10, 2026
516be5f
feat(mcp-server): add Web UI for connection info management with read…
goldmedal Mar 16, 2026
ec47ed4
docs: add MDL reference docs for Model, Relationship, and View (#1446)
goldmedal Mar 16, 2026
683be62
chore: free wren-core-py from Python 3.11 version lock (#1444)
goldmedal Mar 16, 2026
15e715b
fix(core): generate trim for MSSQL (#1378)
goldmedal Mar 16, 2026
f75f25a
docs: improve quickstart DuckDB setup to reduce user pitfalls (#1454)
goldmedal Mar 17, 2026
dc74777
docs(skills): enforce Web UI as sole method for connection info setup…
goldmedal Mar 17, 2026
d51c198
docs: add per-module .claude/CLAUDE.md and redirect AGENTS.md (#1466)
goldmedal Mar 20, 2026
ddc0ded
fix(skills): replace curl|bash with npx skills in update instructions…
goldmedal Mar 20, 2026
5bc9893
feat(wren): add standalone wren Python SDK package (#1471)
goldmedal Mar 23, 2026
24c7cb1
feat(skills): add Claude Code plugin manifest and marketplace (#1472)
goldmedal Mar 24, 2026
8407b49
chore: rename wren standalone package (#1477)
goldmedal Mar 24, 2026
1f639a8
feat(skills): add wren-http-api skill, rename generate-mdl, enhance f…
goldmedal Mar 25, 2026
7aa8d1a
fix(mcp-server,skills): fix onboarding blockers from test report (#1478)
goldmedal Mar 26, 2026
d70f789
feat(wren): CTE-based SQL planning with per-model expansion (#1479)
goldmedal Mar 26, 2026
d064db6
deps(wren): bump transitive deps for security patches
goldmedal Mar 26, 2026
6912e2a
deps(wren-core-py): bump lz4_flex 0.11.5 -> 0.11.6 for security patch
goldmedal Mar 26, 2026
c7e7133
feat(wren): extend standalone CLI with MySQL support and auto-discove…
douenergy Mar 27, 2026
760aac4
chore: add PyPI publishing infrastructure for wren-core-py (#1496)
goldmedal Apr 1, 2026
9defc5b
fix(ci): include README.md in wren-core-py Docker build context (#1498)
goldmedal Apr 1, 2026
d8c1511
feat(wren): add LanceDB-backed memory layer for schema and query retr…
goldmedal Apr 1, 2026
5724abf
fix(ci): disable Linux aarch64 wheel build temporarily (#1503)
goldmedal Apr 1, 2026
a230488
fix(oracle): replace ibis[oracle] with native oracledb cursor connect…
douenergy Apr 1, 2026
8754b36
chore(wren): prepare v0.1.0 for PyPI publishing (#1505)
goldmedal Apr 2, 2026
5be12a5
refactor(wren): unify datasource resolution from connection_info (#1506)
goldmedal Apr 2, 2026
6159d98
feat(wren): add `wren docs connection-info` CLI command (#1507)
goldmedal Apr 2, 2026
85ea8bb
feat(wren): add profile management for named connection profiles (#1509)
goldmedal Apr 3, 2026
b31a1c1
feat(wren): CLI 0.2.0 — context management, profiles, strict mode & m…
goldmedal Apr 7, 2026
72c4917
fix(wren): fix CLI 0.2.0 docs — description placement, install extras…
goldmedal Apr 7, 2026
5e37bfb
feat(skills): detect existing project in wren-generate-mdl skill (#1525)
goldmedal Apr 8, 2026
9990bc8
feat(wren): generate AGENTS.md during `wren context init` (#1526)
goldmedal Apr 8, 2026
0e45709
docs: restructure as single source of truth with auto-sync (#1530)
goldmedal Apr 8, 2026
af43a3a
chore(skills): add wren-dlt-connector skill v1.0 (#1535)
goldmedal Apr 9, 2026
1135c0c
fix(wren): suppress model-loading noise and improve memory CLI error …
goldmedal Apr 9, 2026
8660f58
feat(wren): add memory list, forget, dump & load commands (#1531)
goldmedal Apr 9, 2026
70571db
chore: prepare 0.2.1
goldmedal Apr 9, 2026
a28058d
fix(wren): address CodeRabbit review feedback
goldmedal Apr 9, 2026
b97b3bf
chore(wren): update wren uv lock
goldmedal Apr 10, 2026
0afaef7
feat(wren): preserve SELECT * in CTE rewriter (#1536)
goldmedal Apr 10, 2026
668957a
chore: migrate to release-please with independent release lines (#1539)
goldmedal Apr 14, 2026
815889c
feat(wren-core): add refSql model support (#1555)
goldmedal Apr 16, 2026
ba728c8
chore(main): release wren-core-py 0.2.0 (#1553)
github-actions[bot] Apr 16, 2026
cc7f4d9
chore(main): release wren-core-py 0.3.0 (#1567)
github-actions[bot] Apr 16, 2026
db2f0e4
feat: add MDL layout versioning and dialect field on Model and View (…
goldmedal Apr 16, 2026
15cf5f9
chore(main): release wren-core-py 0.4.0 (#1569)
github-actions[bot] Apr 16, 2026
5165a20
feat: add wren-core-wasm module with browser WASM support (#1568)
goldmedal Apr 20, 2026
29222bd
chore(main): release wren 0.3.0 (#1575)
github-actions[bot] Apr 20, 2026
72d18a8
feat(wren-core-base): replace Metric with Cube types and remove depre…
goldmedal Apr 21, 2026
bdd0758
feat(wren): .env-driven profile secrets, auto connection validation, …
PaulChen79 Apr 30, 2026
e594602
chore(main): release wren 0.4.0 (#1591)
github-actions[bot] Apr 30, 2026
01b5b6a
chore: import wren-engine into core/
goldmedal May 4, 2026
4efc324
chore: relocate wren-mdl, remove legacy WrenAI modules
goldmedal May 4, 2026
b18f1f6
docs: refresh .claude/CLAUDE.md for the Open Context Engine layout
goldmedal May 4, 2026
ba29e69
chore: remove obsolete examples/duckdb-tpch-example
goldmedal May 4, 2026
e5b25ee
chore: add root metadata, multi-license layout, READMEs (#2210)
goldmedal May 4, 2026
ad60975
doc: update README
goldmedal May 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
202 changes: 83 additions & 119 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,149 +1,113 @@
# CLAUDE.md

WrenAI is an open-source GenBI (Generative BI) agent that converts natural language questions into SQL queries and charts. It uses a semantic layer (MDL - Metadata Definition Language) to guide LLM-powered text-to-SQL generation via retrieval-augmented generation (RAG).
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Repository Structure

This is a monorepo with three main services:
## Project Overview

- **wren-ui/** — Next.js 14 frontend + Apollo GraphQL backend (TypeScript, Yarn 4.5.3)
- **wren-ai-service/** — AI/LLM service (Python 3.12, FastAPI, Poetry, Just command runner)
- **wren-launcher/** — CLI deployment tool (Go 1.18+, Make)
- **docker/** — Docker Compose configs for running all services together
- **deployment/** — Kubernetes/Kustomize manifests
- **wren-engine/** — SQL engine (git submodule, not developed here)
- **wren-mdl/** — MDL JSON schema definitions
Wren is an open-source semantic engine for MCP clients and AI agents. It translates SQL queries through a semantic layer (MDL — Modeling Definition Language) and executes them against 22+ data sources (PostgreSQL, BigQuery, Snowflake, Spark, etc.). The Rust engine is powered by Apache DataFusion (Canner fork).

## Build, Test, and Lint Commands
The previous WrenAI services (`wren-ui/`, `wren-ai-service/`, `wren-launcher/`, `docker/`, `deployment/`) were moved to the `legacy/v1` branch (tag `v1-final`) as of the wren-engine import. Active development is focused on the Open Context Engine.

### wren-ui (TypeScript/Next.js)
## Repository Structure

```bash
cd wren-ui
yarn install
yarn dev # Dev server on port 3000 (TZ=UTC)
yarn build # Production build (max-old-space-size=8192)
yarn lint # TypeScript type check + ESLint
yarn check-types # tsc --noEmit
yarn test # Jest unit tests
yarn test:e2e # Playwright E2E tests (installs chromium)
yarn migrate # Knex database migrations
yarn rollback # Knex migration rollback
yarn generate-gql # GraphQL codegen from codegen.yaml
```
core/
├── wren-core/ Rust semantic engine (Cargo workspace)
├── wren-core-base/ Shared Rust crate — manifest types (Model, Column, Metric, Relationship, View) + ManifestBuilder
├── wren-core-py/ PyO3 bindings exposing wren-core to Python (PyPI: wren-core)
├── wren-core-wasm/ WebAssembly build of wren-core for in-browser semantic SQL (npm: wren-core-wasm)
├── wren/ Python SDK and CLI — `wren` command, profile/context/memory management (PyPI: wren-engine)
└── wren-mdl/ MDL JSON schema definition

docs/core/ Module documentation
examples/ Example projects (placeholder — to be populated)
skills/ CLI-based agent skills (wren-generate-mdl, wren-usage, wren-dlt-connector, wren-onboarding)
scripts/ Repo helper scripts
```

Environment: set `DB_TYPE=sqlite` (default) or `DB_TYPE=pg` with PostgreSQL connection vars. The UI needs `WREN_ENGINE_ENDPOINT`, `WREN_AI_ENDPOINT`, and `IBIS_SERVER_ENDPOINT` to connect to backend services.

### wren-ai-service (Python/FastAPI)
## Build & Development Commands

### core/wren-core (Rust)
```bash
cd wren-ai-service
poetry install
just init # Creates config.yaml and .env.dev from examples
just up # Start dev Docker services (Qdrant, engine, etc.)
just start # Run AI service (poetry run python -m src.__main__)
just test # pytest (spins up Docker deps, ignores usecases)
just test [test_args] # e.g., just test tests/pytest/pipelines/
just test-usecases # Run use-case integration tests
just down # Stop Docker services
just load-test # Locust load tests
cd core/wren-core
cargo check --all-targets # compile check
cargo test --lib --tests --bins # tests (set RUST_MIN_STACK=8388608)
cargo fmt --all # format
cargo clippy --all-targets --all-features -- -D warnings # lint
taplo fmt # format Cargo.toml files
```

Configuration is via `config.yaml` (multi-document YAML with sections for LLM, embedder, engine, document_store, pipeline, and settings). Environment variables in `.env.dev` (API keys). Settings load order: defaults → env vars → .env.dev → config.yaml.
Most unit tests live in `core/wren-core/core/src/mdl/mod.rs`. SQL end-to-end tests use sqllogictest files in `core/wren-core/sqllogictest/test_files/`.

Pre-commit hooks: `poetry run pre-commit install` then `poetry run pre-commit run --all-files`
### core/wren-core-py (Python bindings)
```bash
cd core/wren-core-py
just install # poetry install
just develop # build dev wheel with maturin
just test-rs # Rust tests (cargo test --no-default-features)
just test-py # Python tests (pytest)
just test # both
just format # cargo fmt + ruff + taplo
```

### wren-launcher (Go)
### core/wren-core-wasm (WASM)
```bash
cd core/wren-core-wasm
just build # wasm-pack build (browser target)
just test # wasm-pack test
```
Outputs a ~68 MB WASM binary; distributed via npm and unpkg (jsDelivr's 50 MB per-file CDN limit blocks it).

### core/wren (SDK & CLI)
```bash
cd wren-launcher
make build # Cross-compile for macOS/Linux/Windows
make test # go test ./...
make check # fmt + vet + lint (golangci-lint)
make lint-fix # Auto-fix lint issues
cd core/wren
just install # build wren-core-py wheel + uv sync
just install-all # with all optional extras (incl. memory)
just install-extra <e> # e.g. just install-extra postgres
just install-memory # memory extra (lancedb + sentence-transformers)
just dev # run `wren` CLI
just test # pytest tests/
just test-memory # memory-specific tests
just lint # ruff format --check + ruff check
just format # ruff auto-fix
just build # uv build (produces wheel)
```

## Architecture
Uses `uv` (not Poetry). `pyproject.toml` uses `hatchling` as build backend. Optional extras: `postgres`, `mysql`, `bigquery`, `snowflake`, `clickhouse`, `trino`, `mssql`, `databricks`, `redshift`, `spark`, `athena`, `oracle`, `memory`, `all`, `dev`.

### Service Communication Flow
## Architecture: Query Flow

```
User → Wren UI (Next.js :3000)
↓ GraphQL (Apollo Server embedded in Next.js API routes)
Apollo Server → Wren AI Service (FastAPI :5556) [HTTP REST]
→ Wren Engine (:8080) [SQL validation/execution]
→ Ibis Server (:8000) [SQL abstraction for data sources]
Wren AI Service → Qdrant (:6333) [vector search for RAG]
→ LLM Provider (OpenAI/Azure/etc.) [text-to-SQL generation]
SQL query
→ wren CLI / wren-core-py
→ wren-core (Rust): MDL analysis → logical plan → optimization
→ DataFusion (query planning, Canner fork canner/v49.0.1)
→ connector-specific SQL (Ibis / sqlglot)
→ native execution on the target data source
```

### Wren UI Internal Architecture

The Next.js app embeds an Apollo GraphQL server in its API routes (`src/apollo/`):

- **`src/apollo/server/resolvers/`** — GraphQL resolvers (asking, model, project, dashboard, etc.)
- **`src/apollo/server/services/`** — Business logic layer (askingService, deployService, mdlService, queryService, etc.)
- **`src/apollo/server/repositories/`** — Data access layer using Knex (SQLite or PostgreSQL)
- **`src/apollo/server/adaptors/`** — External service adapters (AI service, engine)
- **`src/apollo/client/`** — Frontend GraphQL operations
- **`src/components/`** — React components organized by page (home, setup, modeling, knowledge)
- **`src/pages/`** — Next.js page routes
## Key Architecture Details

Path aliases: `@/*` → `./src/*`, `@server/*` → `./src/apollo/server/*`

### Wren AI Service Internal Architecture

The Python service uses a pipeline-based architecture:

- **`src/pipelines/`** — RAG pipeline implementations:
- `indexing/` — MDL schema, table descriptions, historical questions, SQL pairs → Qdrant
- `retrieval/` — Semantic search for relevant context from Qdrant
- `generation/` — SQL generation, chart generation, intent classification
- `ask/` — Orchestrates retrieval + generation for text-to-SQL
- `ask_details/` — SQL breakdown and explanation
- `semantics/` — Semantic processing helpers
- **`src/web/v1/services/`** — Service layer (AskService, SemanticsPreparationService, ChartService, SqlPairsService, etc.)
- **`src/web/v1/routers/`** — FastAPI route handlers
- **`src/core/`** — Base abstractions (pipeline, provider, engine interfaces)
- **`src/globals.py`** — ServiceContainer wiring all services and pipelines together
- **`src/config.py`** — Pydantic Settings with all configuration knobs

Pipelines are configured declaratively in `config.yaml`, wiring LLM providers, embedders, document stores, and engines to named pipeline components.

### Data Flow for "Ask" (Text-to-SQL)

1. User submits natural language question in UI
2. UI sends GraphQL mutation to Apollo Server
3. Apollo Server calls AI Service REST API
4. AI Service runs intent classification → retrieves relevant schema/context from Qdrant → generates SQL via LLM
5. Generated SQL is validated against Wren Engine
6. SQL corrections are attempted if validation fails (up to `max_sql_correction_retries`)
7. Results returned through the chain back to UI

### MDL (Metadata Definition Language)

The semantic layer that maps business concepts to database schema. Defines models, columns, relationships, metrics, and calculated fields. MDL is indexed into Qdrant as vector embeddings to provide context for LLM SQL generation. Schema defined in `wren-mdl/mdl.schema.json`.

## Docker Development

To run the full stack locally:
```bash
cd docker
cp .env.example .env.local # Configure API keys and ports
cp config.example.yaml config.yaml
docker compose --env-file .env.local up -d
```
**wren-core internals** (`core/wren-core/core/src/`):
- `mdl/` — Core MDL processing: `WrenMDL` (manifest + symbol table), `AnalyzedWrenMDL` (with lineage), function definitions per dialect (scalar/aggregate/window), type planning
- `logical_plan/analyze/` — DataFusion analyzer rules: `ModelAnalyzeRule` (TableScan → ModelPlanNode), scope tracking, access control (RLAC/CLAC), view expansion, relationship chain resolution
- `logical_plan/optimize/` — Optimization passes: type coercion, timestamp simplification
- `sql/` — SQL parsing and analysis

For developing a single service while others run in Docker, use `docker-compose-dev.yaml` in the AI service's `tools/dev/` directory.
**Manifest types** (`core/wren-core-base/src/mdl/`):
- `manifest.rs` — `Manifest`, `Model`, `Column`, `Metric`, `Relationship`, `View`, `RowLevelAccessControl`, `ColumnLevelAccessControl`
- `builder.rs` — Fluent `ManifestBuilder` API
- Uses `wren-manifest-macro` for auto-generating Pydantic-compatible Python classes

## Commit Convention
## Known wren-core Limitations

Follows conventional commits: `type(scope): description`
- Scopes: `wren-ui`, `wren-ai-service`, `wren-launcher`
- Types: `feat`, `fix`, `chore`, `refactor`
- Examples: `feat(wren-ui): add dashboard widget`, `fix(wren-ai-service): handle empty MDL`
**ModelAnalyzeRule — correlated subquery column resolution**: cannot resolve outer column references inside correlated subqueries; only sees the subquery's own table scope. Affects TPCH Q2, Q4, Q15, Q17, Q20, Q21, Q22.

## CI/CD
## Conventions

- PR labels trigger service-specific CI: `ci/ui` for UI tests/lint, `ci/ai-service` for AI service tests
- Docker images published to `ghcr.io/canner/`
- **Commits**: Conventional commits (`feat:`, `fix:`, `chore:`, `refactor:`, `test:`, `docs:`, `perf:`, `deps:`). Releases are automated via release-please with independent release lines per module.
- **Rust**: format with `cargo fmt`, lint with `clippy -D warnings`, TOML with `taplo`.
- **Python**: format and lint with `ruff` (line-length 88, target Python 3.11). `core/wren-core-py` uses Poetry; `core/wren` uses uv.
- **DataFusion fork**: `https://github.com/Canner/datafusion.git` branch `canner/v49.0.1`.
- **Snapshot testing**: wren-core uses `insta` for Rust snapshot tests.
- **CI**: Per-module path-filtered workflows trigger only on changes inside that module.
3 changes: 0 additions & 3 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -1,3 +0,0 @@
[submodule "wren-engine"]
path = wren-engine
url = git@github.com:Canner/wren-engine.git
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Changelog

This file tracks repository-level changes (layout, licensing, governance). Per-package release notes live in each package's own `CHANGELOG.md` (e.g. `core/wren/CHANGELOG.md`, `core/wren-core-py/CHANGELOG.md`) and are managed by release-please.

## 2026-Q2 — Repo consolidation

- **Imported** [`Canner/wren-engine`](https://github.com/Canner/wren-engine) into [`core/`](./core) via `git filter-repo` rewrite, preserving authorship and PR history (~5,300 commits across `core/wren-core`, `core/wren-core-base`, `core/wren-core-py`, `core/wren-core-wasm`, `core/wren`).
- **Relocated** the existing `wren-mdl/` schema to `core/wren-mdl/`.
- **Archived** the legacy WrenAI GenBI app (`wren-ai-service`, `wren-ui`, `wren-launcher`, `docker`, `deployment`) on the [`legacy/v1`](https://github.com/Canner/WrenAI/tree/legacy/v1) branch (tag `v1-final`).
- **Adopted** a multi-license layout (Apache 2.0 for code/skills/SDKs/examples; CC BY 4.0 for docs; AGPL 3.0 reserved for future modules). See [LICENSE](./LICENSE).
- **Added** root metadata: `README.md`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, this `CHANGELOG.md`.
Loading
Loading