codex-dev-mcp-suite 1.6.0 → 1.7.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.
@@ -0,0 +1,89 @@
1
+ # Provider Chain v1.1 Design
2
+
3
+ ## Goal
4
+
5
+ Add built-in optional provider fallback for `project-memory` and `devjournal` model calls while keeping local-first privacy guarantees and deterministic no-network override.
6
+
7
+ ## User-facing config
8
+
9
+ Use numbered provider slots so users can configure one provider or many without learning router syntax.
10
+
11
+ Recommended slots:
12
+
13
+ ```bash
14
+ MCP_PROVIDER_PRIMARY=groq
15
+ MCP_PROVIDER_PRIMARY_BASE_URL=https://api.groq.com/openai/v1
16
+ MCP_PROVIDER_PRIMARY_API_KEY=<groq-key>
17
+ MCP_PROVIDER_PRIMARY_MODEL=llama-3.3-70b-versatile
18
+
19
+ MCP_PROVIDER_CHAIN2=cerebras
20
+ MCP_PROVIDER_CHAIN2_BASE_URL=https://api.cerebras.ai/v1
21
+ MCP_PROVIDER_CHAIN2_API_KEY=<cerebras-key>
22
+ MCP_PROVIDER_CHAIN2_MODEL=llama-3.3-70b
23
+
24
+ MCP_PROVIDER_CHAIN3=openrouter
25
+ MCP_PROVIDER_CHAIN3_BASE_URL=https://openrouter.ai/api/v1
26
+ MCP_PROVIDER_CHAIN3_API_KEY=<openrouter-key>
27
+ MCP_PROVIDER_CHAIN3_MODEL=openai/gpt-4o-mini
28
+ ```
29
+
30
+ Rules:
31
+
32
+ - `MCP_PROVIDER_PRIMARY` is slot 1.
33
+ - `MCP_PROVIDER_CHAIN2`, `MCP_PROVIDER_CHAIN3`, ... are fallback slots.
34
+ - If only primary exists, use only primary.
35
+ - If users want more, they can add `MCP_PROVIDER_CHAIN4_*`, etc.
36
+ - Provider name is a label for logs/docs, not a lock-in. Any OpenAI-compatible provider works if `BASE_URL`, `API_KEY`, and `MODEL` are set.
37
+ - Existing `MCP_LLM_*`, `MCP_RERANK_*`, and `MCP_EMBED_*` remain supported as compatibility fallback.
38
+
39
+ ## Recommended providers
40
+
41
+ Docs recommend Groq, Cerebras, and OpenRouter because they commonly offer free/low-friction tiers and solid model quality. Users may use any provider/model ID.
42
+
43
+ ## Runtime behavior
44
+
45
+ For chat/rerank calls:
46
+
47
+ 1. If `MCP_DETERMINISTIC_FALLBACK=true`, make no network calls and return keyword/deterministic mode.
48
+ 2. Build provider list from numbered slots.
49
+ 3. Try providers in order with the existing timeout.
50
+ 4. On timeout, 429, 5xx, network error, or invalid JSON: try next provider.
51
+ 5. On auth error 401/403: log provider label as unavailable and try next provider, without printing key.
52
+ 6. If all fail: return `null` and let existing keyword fallback handle results.
53
+
54
+ For embeddings:
55
+
56
+ - Keep current explicit embedding config in v1.1 unless a provider slot declares an embedding model later.
57
+ - Do not guess embedding model from chat model.
58
+
59
+ ## Auto-import/probe
60
+
61
+ MVP probe is read-only and optional:
62
+
63
+ - Validate `/chat/completions` compatibility with a tiny low-token request.
64
+ - Detect model availability only if provider exposes a safe model list endpoint.
65
+ - Never store keys outside the user's MCP client env/config.
66
+ - Never send project content during probe.
67
+
68
+ Future CLI/import helper can generate `.env` snippets, but v1.1 runtime only reads env.
69
+
70
+ ## Privacy and observability
71
+
72
+ - Default remains offline keyword mode if no provider is configured.
73
+ - Deterministic mode overrides provider chain.
74
+ - Logs may show provider label and status, never prompts, snippets, API keys, or full response bodies.
75
+ - Docs must explain that query text/candidate snippets leave the machine only when provider slots or legacy model envs are configured.
76
+
77
+ ## Compatibility
78
+
79
+ - Existing installs using `MCP_LLM_BASE_URL`/`MCP_LLM_API_KEY` keep working.
80
+ - Existing `MCP_RERANK_*` continues to override generic LLM config for rerank if no numbered provider slots exist.
81
+ - Legacy `NINEROUTER_*`, `LLM_*`, `RERANK_*`, and `EMBED_*` aliases remain supported.
82
+
83
+ ## Out of scope for v1.1
84
+
85
+ - Hosted auth/dashboard.
86
+ - Persisted provider credentials.
87
+ - Automatic remote model selection based on benchmarks.
88
+ - Embedding provider chain.
89
+ - Publishing any telemetry.
@@ -0,0 +1,164 @@
1
+ # Trust Release Design
2
+
3
+ **Project:** Dev MCP Suite (`codex-dev-mcp-suite`)
4
+ **Target release:** `v1.0.1` trust release
5
+ **Future release:** `v1.1` built-in provider chain
6
+
7
+ ## Goal
8
+
9
+ Make Dev MCP Suite safe and understandable for new users by making privacy, local storage, optional model providers, and deterministic no-network behavior explicit.
10
+
11
+ ## Problem
12
+
13
+ Calon pengguna punya kegelisahan wajar:
14
+
15
+ 1. Mereka takut data proyek/memory/journal dikirim ke author/package owner.
16
+ 2. Mereka tidak selalu pakai Codex; client bisa Claude Code, Cursor, Gemini-compatible launcher, Hermes, atau MCP host lain.
17
+ 3. Mereka perlu rekomendasi provider model yang jelas kalau ingin recall/rerank lebih bagus.
18
+ 4. Mereka perlu mode deterministic/no-network yang eksplisit, bukan sekadar fallback implisit.
19
+
20
+ ## Principles
21
+
22
+ - **Local-first by default:** fresh install works without model provider or network calls.
23
+ - **No hidden telemetry:** package has no hosted backend and no built-in telemetry.
24
+ - **Opt-in remote model calls:** data leaves machine only if user configures external embedding/rerank provider.
25
+ - **Precise privacy claims:** avoid overclaiming; document exact data flow.
26
+ - **Client-agnostic:** docs refer to MCP clients/agents generally; Codex is one supported client, not the product identity.
27
+ - **Deterministic means no network:** if enabled, LLM/embedding/rerank calls are hard-disabled.
28
+
29
+ ## v1.0.1 Scope
30
+
31
+ ### Privacy documentation
32
+
33
+ Add `docs/privacy.md` with this core statement:
34
+
35
+ > Dev MCP Suite has no built-in telemetry and no hosted backend. Your project memory, journal, and checkpoints are stored as local files on your machine. Data leaves your machine only if you configure an external embedding or rerank provider.
36
+
37
+ The doc must explain:
38
+
39
+ - What is stored locally:
40
+ - project-memory notes
41
+ - devjournal entries/handoffs
42
+ - checkpoints
43
+ - context-pack reads only; it does not persist project files
44
+ - Who can access it:
45
+ - local OS user and tools with filesystem permission
46
+ - not the package author/owner
47
+ - When data leaves the machine:
48
+ - only external `MCP_*` model endpoints for embedding/rerank
49
+ - only the text sent for that feature call
50
+ - What never happens by default:
51
+ - no telemetry
52
+ - no hosted backend
53
+ - no automatic upload to repo/npm/author
54
+ - Security caveats:
55
+ - vault/journal/checkpoints are plaintext local files
56
+ - do not store secrets unless intentionally desired
57
+ - if using remote model providers, review their privacy policies
58
+
59
+ ### Deterministic mode
60
+
61
+ Add `MCP_DETERMINISTIC_FALLBACK=true`.
62
+
63
+ Behavior:
64
+
65
+ - In `project-memory`:
66
+ - `memory_recall` does not call embeddings.
67
+ - `memory_recall` does not call rerank LLM.
68
+ - `memory_reindex` should report deterministic/no-network mode instead of attempting embeddings.
69
+ - recall output uses `[deterministic]` label.
70
+ - In `devjournal`:
71
+ - `journal_search` does not call rerank LLM.
72
+ - search output uses `[deterministic]` label.
73
+ - Existing fallback behavior remains:
74
+ - if env is not true and no provider is configured, fallback remains `[keyword]`.
75
+ - if env is not true and provider fails, fallback remains `[keyword]`.
76
+
77
+ Accepted true values: `true`, `1`, `yes`, `on` case-insensitive.
78
+
79
+ ### Provider recommendation docs
80
+
81
+ Add provider setup section in `docs/configuration.md`:
82
+
83
+ Recommended external provider strategy for users who want better recall/rerank:
84
+
85
+ 1. **Groq** as primary fast rerank provider.
86
+ 2. **Cerebras** as secondary fast fallback.
87
+ 3. **OpenRouter** as broad model fallback.
88
+
89
+ For `v1.0.1`, this is docs-only. Users should wire the chain through an OpenAI-compatible gateway they control, such as LiteLLM or 9router, then point Dev MCP Suite at that gateway with:
90
+
91
+ ```env
92
+ MCP_LLM_BASE_URL=http://localhost:4000/v1
93
+ MCP_LLM_API_KEY=...
94
+ MCP_RERANK_MODEL=...
95
+ ```
96
+
97
+ Docs must say this chain is optional and disabled by default.
98
+
99
+ ### README updates
100
+
101
+ README must include:
102
+
103
+ - one local-first privacy paragraph
104
+ - link to `docs/privacy.md`
105
+ - link to provider config docs
106
+ - clear deterministic example:
107
+
108
+ ```env
109
+ MCP_DETERMINISTIC_FALLBACK=true
110
+ ```
111
+
112
+ ### Tests
113
+
114
+ Add tests for:
115
+
116
+ - `MCP_DETERMINISTIC_FALLBACK=true` disables project-memory embedding/rerank and labels recall `[deterministic]`.
117
+ - `MCP_DETERMINISTIC_FALLBACK=true` disables devjournal rerank and labels search `[deterministic]`.
118
+ - env parsing accepts `true`, `1`, `yes`, `on`.
119
+
120
+ ## v1.1 Future Scope: Built-In Provider Chain
121
+
122
+ Built-in chain is attractive but out of scope for `v1.0.1` because it expands the trust/security surface.
123
+
124
+ Future opt-in design:
125
+
126
+ ```env
127
+ MCP_PROVIDER_CHAIN=groq,cerebras,openrouter
128
+ GROQ_API_KEY=...
129
+ CEREBRAS_API_KEY=...
130
+ OPENROUTER_API_KEY=...
131
+ ```
132
+
133
+ Behavior:
134
+
135
+ 1. Try Groq.
136
+ 2. On rate limit/error/timeout, try Cerebras.
137
+ 3. On failure, try OpenRouter.
138
+ 4. On total failure, fallback deterministic local.
139
+
140
+ Requirements before v1.1 implementation:
141
+
142
+ - provider-specific default models
143
+ - retry/backoff and timeout policy
144
+ - redacted logging
145
+ - tests with mocked HTTP endpoints
146
+ - docs explaining exactly what text is sent to which provider
147
+ - opt-in only; no built-in chain unless `MCP_PROVIDER_CHAIN` is set
148
+
149
+ ## Non-Goals
150
+
151
+ - Do not publish under a new package name in `v1.0.1`.
152
+ - Do not add telemetry.
153
+ - Do not add a hosted backend.
154
+ - Do not implement built-in Groq/Cerebras/OpenRouter chain in `v1.0.1`.
155
+ - Do not make remote model calls by default.
156
+
157
+ ## Acceptance Criteria
158
+
159
+ - Fresh install works offline with deterministic/keyword local recall.
160
+ - Users can read a privacy doc and understand exactly where data is stored and when it leaves their machine.
161
+ - `MCP_DETERMINISTIC_FALLBACK=true` hard-disables all model network calls in suite recall/search paths.
162
+ - Tests pass.
163
+ - `npm pack --dry-run` includes public docs and excludes internal planning docs.
164
+ - Secret scan finds no real secrets.
@@ -0,0 +1,386 @@
1
+ # Dev MCP Suite v1.5.0 Knowledge Graph Design
2
+
3
+ ## Summary
4
+
5
+ `v1.5.0` introduces the first knowledge-graph layer for Dev MCP Suite. The release is intentionally narrow and focuses on three capabilities only:
6
+
7
+ - `memory_link`
8
+ - `memory_global_recall`
9
+ - `memory_dedup`
10
+
11
+ The goal is to improve note connectivity, cross-project discovery, and duplicate detection without making embeddings mandatory and without forcing existing users through a hard migration.
12
+
13
+ This release must remain backward-compatible with existing vaults and must degrade gracefully when semantic retrieval is unavailable.
14
+
15
+ ## Goals
16
+
17
+ - Add explicit note-to-note linking with resolvable references and backlinks.
18
+ - Add cross-project recall that still prefers the active project first.
19
+ - Add duplicate-note discovery with safe, reviewable suggestions.
20
+ - Keep retrieval useful even when no embeddings provider is configured.
21
+ - Avoid destructive automation in any dedup flow.
22
+ - Create a foundation that later releases can observe, score, and maintain.
23
+
24
+ ## Non-Goals
25
+
26
+ - Auto-merging or auto-deleting notes.
27
+ - Introducing a monolithic graph subsystem with many unrelated features.
28
+ - Requiring embeddings as a prerequisite for graph features.
29
+ - Shipping observability, lifecycle cleanup, or automated repair workflows in this release.
30
+ - Changing the existing public tool surface outside the three scoped tools unless strictly required for compatibility.
31
+
32
+ ## Release Scope
33
+
34
+ `v1.5.0` includes exactly these tools and behaviors:
35
+
36
+ 1. `memory_link`
37
+ 2. `memory_global_recall`
38
+ 3. `memory_dedup`
39
+
40
+ Future work is explicitly deferred:
41
+
42
+ - `v1.5.1`: Observability
43
+ - `v1.5.2`: Lifecycle
44
+
45
+ ## User Problems
46
+
47
+ Current retrieval is strong within a single project, but the suite still lacks a first-class model for relationships between notes. The main pain points are:
48
+
49
+ - users cannot explicitly connect notes and traverse those connections reliably;
50
+ - similarly named notes across projects are hard to distinguish and reuse safely;
51
+ - duplicate notes accumulate over time with no guided cleanup path;
52
+ - semantic recall quality depends too heavily on whether embeddings are configured.
53
+
54
+ The knowledge-graph release solves these by adding link awareness, global lookup, and safe dedup suggestions while keeping the existing retrieval architecture intact.
55
+
56
+ ## Design Principles
57
+
58
+ ### Backward-compatible first
59
+
60
+ Existing vaults must continue to function without manual migration. Graph metadata can be introduced lazily and rebuilt later if needed.
61
+
62
+ ### Safe by default
63
+
64
+ No destructive actions happen automatically. When ambiguity exists, the system should return candidates rather than silently guessing.
65
+
66
+ ### Embeddings are optional, not required
67
+
68
+ Graph features must still provide value with keyword and deterministic retrieval only. Semantic enhancements improve quality but are not a hard dependency.
69
+
70
+ ### Same-project bias
71
+
72
+ When resolving links or ranking recall results, the active project has priority. Global behavior is additive, not a replacement for project locality.
73
+
74
+ ### Rebuildable state
75
+
76
+ Any derived graph or link index must be reconstructible from note content and note metadata.
77
+
78
+ ## Capability 1: `memory_link`
79
+
80
+ ### Purpose
81
+
82
+ `memory_link` provides explicit note-link parsing, resolution, and backlink support.
83
+
84
+ ### Supported Link Syntax
85
+
86
+ The tool supports both:
87
+
88
+ - `[[id]]`
89
+ - `[[title]]`
90
+
91
+ It also supports explicit cross-project override syntax:
92
+
93
+ - `[[project:id]]`
94
+ - `[[project:title]]`
95
+
96
+ ### Resolution Rules
97
+
98
+ Link resolution follows this order:
99
+
100
+ 1. If the link contains an explicit project prefix, resolve within that target project.
101
+ 2. Otherwise, search the active project first.
102
+ 3. If no same-project match exists, fall back to global search.
103
+ 4. If multiple valid matches remain, return ambiguity information and candidate matches.
104
+ 5. If no match exists, return an unresolved-link result rather than fabricating one.
105
+
106
+ ### Backlinks
107
+
108
+ The tool must expose backlink information for a note so users can inspect inbound relationships. Backlinks are derived data and should not require separate manual authoring.
109
+
110
+ ### Expected Behavior
111
+
112
+ - Same-project linking should feel local and predictable.
113
+ - Title-based linking should remain ergonomic.
114
+ - Cross-project references should be explicit when needed.
115
+ - Ambiguous links should be surfaced clearly.
116
+
117
+ ## Capability 2: `memory_global_recall`
118
+
119
+ ### Purpose
120
+
121
+ `memory_global_recall` retrieves relevant notes across multiple projects while preserving a strong active-project bias.
122
+
123
+ ### Retrieval Strategy
124
+
125
+ Global recall should be layered rather than all-or-nothing:
126
+
127
+ 1. Search/rank the active project first.
128
+ 2. Expand to global candidates only as a fallback or augmentation layer.
129
+ 3. Apply graph-aware boost after candidate generation.
130
+ 4. Return results with enough metadata to explain where they came from.
131
+
132
+ ### Ranking Model
133
+
134
+ The ranking model should use a soft graph boost. Graph connectivity helps reorder candidates, but it must not act as a hard filter that hides otherwise relevant notes.
135
+
136
+ Possible ranking inputs:
137
+
138
+ - lexical/keyword match
139
+ - semantic similarity, if embeddings are available
140
+ - graph/link proximity
141
+ - same-project prior
142
+ - note freshness or other existing recall signals if already available in the current architecture
143
+
144
+ ### Behavior Without Embeddings
145
+
146
+ If no embeddings model is configured, `memory_global_recall` must still work by combining:
147
+
148
+ - keyword/deterministic candidate retrieval
149
+ - same-project prioritization
150
+ - graph-based soft boosting
151
+
152
+ This ensures cross-project recall remains usable in “zero semantic config” environments.
153
+
154
+ ### Output Expectations
155
+
156
+ The tool should make it clear whether a result came primarily from:
157
+
158
+ - active-project recall
159
+ - global fallback
160
+ - graph-supported re-ranking
161
+ - semantic retrieval, if enabled
162
+
163
+ That transparency matters for debugging user trust later, especially in `v1.5.1` observability.
164
+
165
+ ## Capability 3: `memory_dedup`
166
+
167
+ ### Purpose
168
+
169
+ `memory_dedup` identifies likely duplicate notes and suggests merge candidates.
170
+
171
+ ### Safety Policy
172
+
173
+ This tool is advisory only in `v1.5.0`.
174
+
175
+ It must:
176
+
177
+ - suggest possible duplicates;
178
+ - explain why the pair/group was flagged;
179
+ - avoid deleting or merging anything automatically.
180
+
181
+ It must not:
182
+
183
+ - auto-delete notes;
184
+ - auto-merge notes;
185
+ - rewrite content without an explicit future tool designed for that purpose.
186
+
187
+ ### Default Threshold
188
+
189
+ The default duplicate threshold is `0.90`.
190
+
191
+ That threshold should be overridable, but the default should favor precision over aggressive cleanup.
192
+
193
+ ### Matching Signals
194
+
195
+ Dedup suggestions may consider:
196
+
197
+ - normalized title similarity
198
+ - content overlap
199
+ - link neighborhood similarity
200
+ - semantic similarity if embeddings are available
201
+ - metadata similarity if cheap and already available
202
+
203
+ ### Output Expectations
204
+
205
+ The output should contain enough information for manual review, such as:
206
+
207
+ - note identifiers
208
+ - titles
209
+ - project locations
210
+ - similarity score or confidence
211
+ - a short explanation of why the pair was flagged
212
+
213
+ ## Backfill and Migration Strategy
214
+
215
+ ### Chosen Strategy
216
+
217
+ The backfill strategy is hybrid:
218
+
219
+ - lazy auto-backfill on first graph-tool use;
220
+ - explicit rebuild/backfill path available for repair and mass reindexing.
221
+
222
+ ### Why Hybrid
223
+
224
+ Pure manual backfill adds friction for existing users. Purely automatic migration hides too much state change and makes repair harder.
225
+
226
+ Hybrid gives the best trade-off:
227
+
228
+ - old vaults keep working immediately;
229
+ - derived graph state appears when needed;
230
+ - operators still have a deterministic rebuild path if state gets stale or corrupted.
231
+
232
+ ### Requirements
233
+
234
+ - First-time graph access must not require a full blocking migration unless unavoidable.
235
+ - Backfill must be resumable or rebuildable.
236
+ - Any rebuild path should produce the same derived state from the same note corpus.
237
+
238
+ ## Storage Model
239
+
240
+ ### Chosen Model
241
+
242
+ Storage is hybrid.
243
+
244
+ ### Intent
245
+
246
+ Per-note and per-project source data stays close to existing storage boundaries, while link/global lookup indexes may be maintained in a derived structure optimized for recall and traversal.
247
+
248
+ ### Requirements
249
+
250
+ - Graph state must be derived from canonical note content and metadata.
251
+ - Rebuilding graph state must be possible without manual note editing.
252
+ - Storage decisions should not break existing project isolation assumptions.
253
+ - Global lookup structures must still preserve project attribution for every note.
254
+
255
+ ## Tool Surface
256
+
257
+ The MCP surface remains separated into three tools:
258
+
259
+ - `memory_link`
260
+ - `memory_global_recall`
261
+ - `memory_dedup`
262
+
263
+ ### Why Separate Tools
264
+
265
+ Separate tools are easier to reason about, easier to test, and easier to evolve independently.
266
+
267
+ They also map cleanly to user intent:
268
+
269
+ - linking/traversal
270
+ - cross-project search
271
+ - duplicate analysis
272
+
273
+ A monolithic graph tool would complicate input/output contracts too early.
274
+
275
+ ## Fallback Behavior Matrix
276
+
277
+ ### Fully configured environment
278
+
279
+ If keyword, embeddings, and graph metadata are all available:
280
+
281
+ - use standard retrieval candidate generation;
282
+ - use semantic similarity where supported;
283
+ - apply graph-aware soft boosting;
284
+ - return explanatory provenance.
285
+
286
+ ### No embeddings configured
287
+
288
+ If embeddings are unavailable:
289
+
290
+ - use keyword/deterministic candidate generation;
291
+ - still use same-project bias and graph-aware boosting;
292
+ - maintain tool usability without surfacing provider errors as hard blockers.
293
+
294
+ ### No graph-derived state yet
295
+
296
+ If graph state is missing:
297
+
298
+ - trigger lazy backfill where appropriate;
299
+ - if backfill cannot complete immediately, fall back to non-graph retrieval behavior and explain that graph augmentation is incomplete.
300
+
301
+ ## Error Handling Expectations
302
+
303
+ ### Ambiguous links
304
+
305
+ Return candidate matches and ambiguity metadata.
306
+
307
+ ### Missing project target
308
+
309
+ Return a clear unresolved-reference result.
310
+
311
+ ### Missing embeddings provider
312
+
313
+ Do not fail the request if semantic retrieval is optional for that path.
314
+
315
+ ### Derived-state drift
316
+
317
+ Expose enough information for future rebuild/repair tooling rather than silently masking corruption.
318
+
319
+ ## Testing Implications
320
+
321
+ `v1.5.0` should add tests for at least:
322
+
323
+ - same-project `[[title]]` resolution
324
+ - same-project `[[id]]` resolution
325
+ - explicit cross-project override resolution
326
+ - ambiguous title resolution behavior
327
+ - unresolved link behavior
328
+ - global recall preferring same-project hits
329
+ - global recall fallback to other projects
330
+ - dedup suggestions with default threshold `0.90`
331
+ - dedup non-destructive behavior
332
+ - recall fallback behavior when embeddings are unavailable
333
+ - lazy backfill behavior for pre-existing vault state
334
+
335
+ ## Open Implementation Notes
336
+
337
+ These are implementation notes, not unresolved design questions:
338
+
339
+ - The graph layer should reuse as much existing note indexing infrastructure as practical.
340
+ - Derived state should be cheap to invalidate and rebuild.
341
+ - Output shapes should be designed for future observability fields, even if `v1.5.0` does not yet expose all diagnostics.
342
+ - Existing recall-mode behavior introduced in `v1.4.0` should remain conceptually compatible with the new global recall path.
343
+
344
+ ## Risks
345
+
346
+ ### Scope creep
347
+
348
+ Knowledge graph features can expand very quickly. The release avoids that by limiting scope to three tools only.
349
+
350
+ ### Ambiguity explosion
351
+
352
+ Title-based linking across projects can create ambiguity. This is handled with same-project bias and explicit project override syntax.
353
+
354
+ ### Over-dependence on semantic infrastructure
355
+
356
+ If graph quality depends too much on embeddings, many users lose value. This is mitigated by requiring a strong keyword/deterministic fallback path.
357
+
358
+ ### Hidden state issues
359
+
360
+ Any lazy derived-state system can drift or fail partially. This is mitigated by keeping state rebuildable and by preserving an explicit rebuild path.
361
+
362
+ ## Out of Scope for Later Releases
363
+
364
+ ### `v1.5.1` Observability
365
+
366
+ Likely follow-up concerns:
367
+
368
+ - graph/index health visibility
369
+ - recall provenance inspection
370
+ - stats/watch-style diagnostics
371
+ - duplicate trend metrics
372
+
373
+ ### `v1.5.2` Lifecycle
374
+
375
+ Likely follow-up concerns:
376
+
377
+ - cleanup workflows
378
+ - archival guidance
379
+ - merge-assist flows
380
+ - stale-link repair flows
381
+
382
+ ## Final Recommendation
383
+
384
+ Ship `v1.5.0` as a focused knowledge-graph release with three separate tools, hybrid backfill, safe dedup suggestions, and graph-aware recall that still works without embeddings.
385
+
386
+ This gives Dev MCP Suite a meaningful relationship layer without overcommitting the release to automation, destructive behavior, or provider-specific assumptions.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-dev-mcp-suite",
3
- "version": "1.6.0",
3
+ "version": "1.7.0",
4
4
  "description": "Four local, file-based MCP servers for solo devs/vibecoders: persistent project memory, session handoff/resume, git-independent file checkpoints, and token-efficient project briefings. Works with any MCP client.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -46,35 +46,22 @@
46
46
  },
47
47
  "files": [
48
48
  "bin/*.mjs",
49
- "bin/_meta.mjs",
50
49
  "project-memory/*.js",
51
- "project-memory/server.js",
52
- "project-memory/embedding.js",
53
- "project-memory/env.js",
54
- "project-memory/provider-chain.js",
55
- "project-memory/rerank.js",
56
50
  "project-memory/package.json",
57
51
  "devjournal/*.js",
58
- "devjournal/server.js",
59
- "devjournal/env.js",
60
- "devjournal/provider-chain.js",
61
- "devjournal/rerank.js",
62
52
  "devjournal/package.json",
63
53
  "checkpoint/*.js",
64
- "checkpoint/server.js",
65
54
  "checkpoint/package.json",
66
55
  "context-pack/*.js",
67
- "context-pack/server.js",
68
56
  "context-pack/package.json",
57
+ "lib/*.js",
69
58
  "backfill-sessions-v2.mjs",
70
- "docs/configuration.md",
71
- "docs/privacy.md",
72
- "docs/clients/*.md",
59
+ "run-tests.mjs",
60
+ "docs/**/*.md",
73
61
  "CODEX_DEV_MCP_GUIDE.md",
74
62
  "CHANGELOG.md",
75
63
  "README.md",
76
64
  "LICENSE",
77
- ".env.example",
78
- "lib/*.js"
65
+ ".env.example"
79
66
  ]
80
67
  }
@@ -77,7 +77,14 @@ export async function resolveLink({ vaultRoot, currentSlug, ref, project, kind }
77
77
  candidates = notes.filter((note) => note.id === ref);
78
78
  } else {
79
79
  const target = String(ref || "").trim().toLowerCase();
80
- candidates = notes.filter((note) => String(note.title || "").trim().toLowerCase() === target);
80
+ candidates = notes.filter((note) => {
81
+ if (String(note.title || "").trim().toLowerCase() === target) return true;
82
+ // Obsidian-style alias match
83
+ if (Array.isArray(note.aliases)) {
84
+ return note.aliases.some((a) => String(a).trim().toLowerCase() === target);
85
+ }
86
+ return false;
87
+ });
81
88
  }
82
89
 
83
90
  if (candidates.length === 0) return { status: "missing" };