@openez-graph/cli 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -26
- package/dist/CHANGELOG.md +43 -0
- package/dist/cli.cjs +3158 -2228
- package/dist/web/assets/{WorkspaceGraph-CjFEeMKT.js → WorkspaceGraph-D_mQPqES.js} +1 -1
- package/dist/web/assets/index-C43ewFKS.css +1 -0
- package/dist/web/assets/index-CrgdwyMi.js +362 -0
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/index-BU0-O6wh.js +0 -362
- package/dist/web/assets/index-vATP09x8.css +0 -1
package/README.md
CHANGED
|
@@ -69,19 +69,24 @@ openez setup codex # wire up Codex
|
|
|
69
69
|
openez setup opencode # wire up OpenCode
|
|
70
70
|
openez setup windsurf # wire up Windsurf / Devin Desktop
|
|
71
71
|
openez setup devin # wire up Devin CLI
|
|
72
|
+
openez config get [key] # show embedding config (all if no key)
|
|
73
|
+
openez config set <key> <value> # set embedding config value
|
|
74
|
+
openez config list # list all DB-stored config overrides
|
|
72
75
|
```
|
|
73
76
|
|
|
77
|
+
Valid config keys: `embedding.provider`, `embedding.openai_api_key`, `embedding.openai_base_url`, `embedding.openai_model`, `embedding.ollama_base_url`, `embedding.ollama_model`. API keys are encrypted at rest with AES-256-GCM.
|
|
78
|
+
|
|
74
79
|
## MCP Tools
|
|
75
80
|
|
|
76
|
-
| Tool
|
|
77
|
-
|
|
78
|
-
| `list_workspaces` | List all registered workspaces
|
|
79
|
-
| `code_query`
|
|
80
|
-
| `code_context`
|
|
81
|
-
| `graph_neighbors` | Traverse graph edges from a node or label
|
|
82
|
-
| `memory_recall`
|
|
83
|
-
| `memory_write`
|
|
84
|
-
| `index_workspace` | Trigger indexing for a workspace
|
|
81
|
+
| Tool | Description |
|
|
82
|
+
| ----------------- | --------------------------------------------------------------------- |
|
|
83
|
+
| `list_workspaces` | List all registered workspaces |
|
|
84
|
+
| `code_query` | Hybrid FTS/vector search + graph expansion over indexed code and docs |
|
|
85
|
+
| `code_context` | Get budgeted symbol context with callers, callees, and related files |
|
|
86
|
+
| `graph_neighbors` | Traverse graph edges from a node or label |
|
|
87
|
+
| `memory_recall` | Recall active memory entries and technical decisions |
|
|
88
|
+
| `memory_write` | Write a memory entry (notes, decisions, patterns) |
|
|
89
|
+
| `index_workspace` | Trigger indexing for a workspace |
|
|
85
90
|
|
|
86
91
|
`memory_query` is accepted as a deprecated compatibility alias for `code_query`, but is not advertised to new clients.
|
|
87
92
|
|
|
@@ -96,29 +101,36 @@ openez setup devin # wire up Devin CLI
|
|
|
96
101
|
|
|
97
102
|
## Supported languages
|
|
98
103
|
|
|
99
|
-
| Language
|
|
100
|
-
|
|
104
|
+
| Language | Indexing depth |
|
|
105
|
+
| ----------------------- | ------------------------------------------------------ |
|
|
101
106
|
| TypeScript / JavaScript | Richest — `ts-morph` symbol extraction, imports, calls |
|
|
102
|
-
| Python
|
|
103
|
-
| Go
|
|
104
|
-
| Rust
|
|
105
|
-
| YAML / JSON / TOML
|
|
106
|
-
| Markdown
|
|
107
|
+
| Python | Basic top-level symbol extraction |
|
|
108
|
+
| Go | Basic top-level symbol extraction |
|
|
109
|
+
| Rust | Basic top-level symbol extraction |
|
|
110
|
+
| YAML / JSON / TOML | Structure-aware chunking |
|
|
111
|
+
| Markdown | Section-oriented chunking |
|
|
107
112
|
|
|
108
113
|
## Retrieval quality
|
|
109
114
|
|
|
110
|
-
Benchmarked on
|
|
115
|
+
Benchmarked on 23 queries (17 keyword + 6 semantic) against the openez codebase (128 files, 810 chunks):
|
|
116
|
+
|
|
117
|
+
| Metric | FTS only | FTS + Embedding (bge-m3) |
|
|
118
|
+
| ---------------- | -------: | -----------------------: |
|
|
119
|
+
| Recall@5 | 91.30% | 95.65% |
|
|
120
|
+
| Keyword queries | 100.00% | 100.00% |
|
|
121
|
+
| Semantic queries | 66.67% | 83.33% |
|
|
122
|
+
| Avg latency | 5 ms | 249 ms |
|
|
123
|
+
|
|
124
|
+
**FTS-only is the default** — 100% recall on keyword queries, 50x faster. **Embedding adds semantic search with +16.67% semantic recall and no keyword regression** via full RRF fusion (FTS weight 2x, vector weight 1x).
|
|
111
125
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
| Duplicate path rate | 0% |
|
|
119
|
-
| Quality gate | PASS |
|
|
126
|
+
```bash
|
|
127
|
+
# Enable Ollama embeddings (bge-m3 recommended for code search)
|
|
128
|
+
openez config set embedding.provider ollama
|
|
129
|
+
openez config set embedding.ollama_model bge-m3
|
|
130
|
+
openez reindex .
|
|
131
|
+
```
|
|
120
132
|
|
|
121
|
-
|
|
133
|
+
See [BENCHMARK.md](https://github.com/asta-nguyen/openez-graph/blob/main/BENCHMARK.md) for full analysis.
|
|
122
134
|
|
|
123
135
|
## Web dashboard
|
|
124
136
|
|
|
@@ -127,6 +139,7 @@ openez serve --web
|
|
|
127
139
|
```
|
|
128
140
|
|
|
129
141
|
Opens a full web dashboard at `http://localhost:17881` with:
|
|
142
|
+
|
|
130
143
|
- Workspace overview (documents, chunks, nodes, edges)
|
|
131
144
|
- Graph explorer with force-directed layout
|
|
132
145
|
- Query interface for memory retrieval
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -5,19 +5,50 @@ All notable changes to OpenEZ Graph are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.10.0] - 2026-08-05
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- MCP stdio corruption: retrieval diagnostics now write to `stderr` instead of `stdout`, preserving JSON-RPC framing for `code_query` calls
|
|
13
|
+
- `lint-staged` downgraded from v17 to v16.4.0 for Node.js 20 compatibility (v17 requires Node >=22.22.1)
|
|
14
|
+
- Master key race condition: atomic exclusive file creation (`O_CREAT|O_EXCL`) prevents concurrent processes from generating different keys
|
|
15
|
+
- Master key malformed-file handling: invalid key content now throws an explicit error instead of silently overwriting the file
|
|
16
|
+
- Master key file permissions: existing key files are now `chmod`-ed to `0o600` on read if permissions are too open
|
|
17
|
+
- Embedding dedup: chunks skipped by `input_hash` match now receive a copied embedding row so they appear in vector search results
|
|
18
|
+
- Embedding dedup legacy cleanup: `ROW_NUMBER()` ordering (newest, non-null `input_hash` first) replaces `MIN(id)` to preserve the most useful embedding
|
|
19
|
+
- Composite index `(provider, model, input_hash)` added to speed up embedding dedup lookups on large workspaces
|
|
20
|
+
- `vectorSearch` now wraps `getEmbeddingProvider()` in the same `try` block so initialization failures fall back to FTS instead of aborting `codeQuery`
|
|
21
|
+
- Web API `PUT /api/settings/embedding` validates `embedding.provider` against `none`, `openai`, `ollama` (returns 400 for invalid values)
|
|
22
|
+
- Web API clearing a setting (empty value) now deletes the DB override instead of skipping it, restoring env/default fallback
|
|
23
|
+
- CLI `config get <key>` resolves the effective DB-plus-environment value and prints `not set` when absent
|
|
24
|
+
- CLI sensitive-key masking uses `isSensitiveKey()` consistently across all `config` commands
|
|
25
|
+
- Settings UI syncs external config to form state via `useEffect` instead of setState-during-render; form updates after save refetch
|
|
26
|
+
- Settings UI resets the "Saved!" indicator when any field is edited after a successful save
|
|
27
|
+
- RRF `identity()` function computed once per entry instead of twice (get + set)
|
|
28
|
+
- Benchmark test isolated from the user's real registry DB via temp `AI_MEMORY_REGISTRY_DB_PATH`
|
|
29
|
+
- Benchmark stats workspace path resolved from registry instead of `cwd` to match `codeQuery`
|
|
30
|
+
- `withRetry` dead code replaced with a type-safe unreachable return
|
|
31
|
+
|
|
32
|
+
### Changed
|
|
33
|
+
|
|
34
|
+
- README storage section updated from three to four local artifacts (added `master.key`)
|
|
35
|
+
|
|
8
36
|
## [0.9.0] - 2026-08-02
|
|
9
37
|
|
|
10
38
|
### Added
|
|
39
|
+
|
|
11
40
|
- MCP server version and Git build identity in the protocol handshake
|
|
12
41
|
- Token budgets for `code_query`, `code_context`, `graph_neighbors`, and `memory_recall`, with compact graph/context responses
|
|
13
42
|
- Live `code_query` token telemetry on the dashboard and benchmark page
|
|
14
43
|
- MCP contract tests for response budgets, multi-workspace attribution, graph context, and startup indexing
|
|
15
44
|
|
|
16
45
|
### Changed
|
|
46
|
+
|
|
17
47
|
- Multi-workspace retrieval now applies one global serialized-response budget and attributes delivered tokens exactly across workspaces
|
|
18
48
|
- CLI npm package now exposes the bundled entry point and installs only `better-sqlite3` at runtime
|
|
19
49
|
|
|
20
50
|
### Fixed
|
|
51
|
+
|
|
21
52
|
- Empty workspaces no longer re-index on every MCP server restart
|
|
22
53
|
- Very small token budgets are rejected instead of returning an oversized response
|
|
23
54
|
- Token-savings telemetry now uses selected full-file tokens minus the actual serialized response size
|
|
@@ -25,6 +56,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
25
56
|
## [0.8.0] - 2026-08-02
|
|
26
57
|
|
|
27
58
|
### Added
|
|
59
|
+
|
|
28
60
|
- Memory management UI at `/memories` with list, search, detail view, and create dialog
|
|
29
61
|
- Memory API routes: `GET /api/memories` (list + search), `GET /api/memories/:id`, `POST /api/memories`, `DELETE /api/memories/:id`
|
|
30
62
|
- Recent memories section on the dashboard now populated from the workspace database
|
|
@@ -33,12 +65,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
33
65
|
- Integration tests for hybrid retrieval ranking and registry operations
|
|
34
66
|
|
|
35
67
|
### Fixed
|
|
68
|
+
|
|
36
69
|
- Changelog page stuck loading — `findChangelogPath` now walks up from `serverDir` and `cwd` to locate `CHANGELOG.md` in the monorepo root
|
|
37
70
|
- Memory endpoints no longer fail when the first registered workspace has a stale root path
|
|
38
71
|
|
|
39
72
|
## [0.7.0] - 2026-08-01
|
|
40
73
|
|
|
41
74
|
### Added
|
|
75
|
+
|
|
42
76
|
- Web dashboard changelog page (`/changelog`) with structured rendering of release notes from `CHANGELOG.md`
|
|
43
77
|
- API endpoint `GET /api/changelog` serving the repo changelog
|
|
44
78
|
- Changelog link in CLI README for npm package page
|
|
@@ -47,16 +81,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
47
81
|
- `memory_recall` MCP tool for retrieving active technical decisions and learned notes written by `memory_write`
|
|
48
82
|
|
|
49
83
|
### Changed
|
|
84
|
+
|
|
50
85
|
- Renamed the public `memory_query` MCP tool to `code_query`; the old name remains a deprecated, hidden compatibility alias
|
|
51
86
|
- Code retrieval now fuses both FTS and vector results, and `code_context` supports result/token budgets
|
|
52
87
|
|
|
53
88
|
## [0.6.1] - 2026-08-01
|
|
54
89
|
|
|
55
90
|
### Added
|
|
91
|
+
|
|
56
92
|
- Syntax-highlighted context blocks in the web Query page (`prism-react-renderer`), with per-source file metadata (path, line range, score) and line numbers
|
|
57
93
|
- Markdown context blocks now render fenced code blocks with their own language highlighting (e.g. ` ```bash ` gets real bash highlighting)
|
|
58
94
|
|
|
59
95
|
### Fixed
|
|
96
|
+
|
|
60
97
|
- Dark boxes obscuring markdown inline code in context blocks (stripped token `backgroundColor` from the nightOwl theme)
|
|
61
98
|
|
|
62
99
|
## [0.6.0] - 2026-08-01
|
|
@@ -64,9 +101,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
64
101
|
Remediation release — index/graph correctness, data protection, and web flow fixes.
|
|
65
102
|
|
|
66
103
|
### Security
|
|
104
|
+
|
|
67
105
|
- Web API and CLI dashboard now bind to loopback (`127.0.0.1`) by default (FIX-01)
|
|
68
106
|
|
|
69
107
|
### Fixed
|
|
108
|
+
|
|
70
109
|
- Full reindex no longer wipes memories, query logs, and run history — only rebuildable index artifacts are reset (FIX-02)
|
|
71
110
|
- Incremental indexing preserves inbound graph edges (calls/imports) to symbols in changed files; symbol and file node identities are now stable across re-parses (FIX-03)
|
|
72
111
|
- Graph edges are deduplicated by `(from, to, type)` with a unique SQLite index and `ON CONFLICT DO NOTHING` inserts (FIX-04)
|
|
@@ -75,15 +114,19 @@ Remediation release — index/graph correctness, data protection, and web flow f
|
|
|
75
114
|
- Regenerated stale route tree referencing the deleted `/jobs` route; removed the CI lint no-op (`turbo run lint` with zero lint tasks) (FIX-08)
|
|
76
115
|
|
|
77
116
|
### Removed
|
|
117
|
+
|
|
78
118
|
- Jobs page and related API endpoints
|
|
79
119
|
|
|
80
120
|
## [0.5.1] - 2026-07-31
|
|
81
121
|
|
|
82
122
|
### Fixed
|
|
123
|
+
|
|
83
124
|
- Blazing-fast indexing for large codebases (batch transactions, optimized write mode)
|
|
84
125
|
- Error handling and validation for import path extraction
|
|
85
126
|
- CLI npm packaging
|
|
86
127
|
|
|
128
|
+
[0.10.0]: https://github.com/asta-nguyen/openez-graph/compare/fbcad4f...HEAD
|
|
129
|
+
[0.9.1]: https://github.com/asta-nguyen/openez-graph/compare/fbcad4f...HEAD
|
|
87
130
|
[0.9.0]: https://github.com/asta-nguyen/openez-graph/compare/fbcad4f...HEAD
|
|
88
131
|
[0.8.0]: https://github.com/asta-nguyen/openez-graph/compare/a7ce4df...849060b
|
|
89
132
|
[0.7.0]: https://github.com/asta-nguyen/openez-graph/compare/9b7cc78...a7ce4df
|