Skip to content

Commit b02acbf

Browse files
wrsmith108ruvnetclaude
authored
feat(doc-retrieval-mcp): SMI-4417 Wave 2 — thin semantic-search MCP server (#722)
* feat(doc-retrieval-mcp): SMI-4417 Wave 2 — thin semantic-search MCP server Phase 1 of SMI-4416 / ADR-117. Ships a 3-tool MCP server that wraps @ruvector/core with Skillsmith's existing EmbeddingService for token- efficient semantic retrieval over the Skillsmith doc corpus. Components: - packages/doc-retrieval-mcp/: workspace package - server.ts: 3 tools — skill_docs_search, skill_docs_reindex, skill_docs_status (stdio, <500 LOC, minimal tool surface) - indexer.ts + indexer.helpers.ts: heading-aware chunker (H2/H3, 240-token target, 48-token overlap — sized for all-MiniLM-L6-v2's 256-token / 1000-char embedding cap; plan's 500-token target was infeasible with this model, deferred to Phase 3 / SMI-4419) - embedding.ts: singleton wrapper over @skillsmith/core EmbeddingService (single pipeline for index + query, raw 384-dim vectors into VectorDB — RuVector's own ONNX is never invoked) - metadata-store.ts: JSON-backed chunk metadata keyed by vector id - search.ts: cosine-similarity scoring with optional glob scoping - config.ts: CI-refuse guard, safe-path check, submodule-init guard - cli.ts + status.ts: reindex/status entry points for post-commit hook - tests/: 19 unit tests covering chunker, metadata-store, config guards Wiring: - .mcp.json: adds skillsmith-doc-retrieval local-stdio server + disabledTools block-list of 37 Ruflo tools per SMI-4420 audit (agentdb_*, hive-mind_memory/broadcast/consensus/spawn, transfer_*, memory_store/search/migrate, swarm_init, claims_handoff, etc.) - .gitignore: .ruvector/ + *.rvf (local-only, never in CI) - .husky/post-commit: background incremental reindex with GIT_OPTIONAL_LOCKS=0 + --no-optional-locks (SMI-2536 hazard mitigation). Non-blocking, failure non-fatal, skips if .rvf absent - eslint.config.js: registers doc-retrieval-mcp tsconfig Tooling: - scripts/token-delta-harness.mjs: Wave 2 Step 6 gate harness — invokes claude --print --output-format stream-json, parses usage.input_tokens per turn, computes baseline vs measured delta (gate: ≥40% median reduction across 3 reproducible tasks) - scripts/ruvector-harness-tasks.json: 3 baseline tasks - .claude/development/ruvector-dev-tooling.md: setup, privacy boundary, troubleshooting - CLAUDE.md: Sub-Documentation row Verification: - docker exec -w /app/.worktrees/smi-4416 skillsmith-dev-1 \ npm test -w packages/doc-retrieval-mcp → 19/19 pass - npm run typecheck / build / lint / audit:standards / preflight → all clean (0 errors, pre-existing warnings unchanged) SMI-4416 / SMI-4417 / SMI-4420. Co-Authored-By: claude-flow <ruv@ruv.net> Co-Authored-By: Claude <noreply@anthropic.com> * ci: SMI-4417 add doc-retrieval-mcp to workflow package lists Fixes TS7016 glob module resolution in CI. The `Extract node_modules from Docker image` step copies per-package node_modules via an explicit list that missed the new @skillsmith/doc-retrieval-mcp workspace. CI's turbo build resolved `import('glob')` against the hoisted root glob@7.2.3 (no types) instead of our nested glob@11.1.0. Same class as SMI-4361 — CI workflow pattern drift where a hardcoded package list lags behind actual workspace additions. Local build passed because the worktree had the nested install from `npm install`. Changes: - .github/workflows/ci.yml:696,756,778 — add doc-retrieval-mcp to the per-package extract loops (node_modules, dist, .turbo) - .github/workflows/ci.yml:738 — add packages/doc-retrieval-mcp/dist to the build-output cache paths - .github/workflows/e2e-tests.yml:118 — match ci.yml pattern publish.yml intentionally unchanged — its per-package loop at line 411 lists only publishable packages (core, mcp-server, cli, enterprise). doc-retrieval-mcp is "private": true internal dev-tooling. SMI-4417. Co-Authored-By: claude-flow <ruv@ruv.net> Co-Authored-By: Claude <noreply@anthropic.com> * ci: SMI-4417 add doc-retrieval-mcp package.json to Dockerfile COPY Root cause of ALL 11 CI test failures on PR #722. Dockerfile's `deps` stage (line 51-57) hardcodes per-package `COPY packages/*/package*.json` that missed doc-retrieval-mcp. `npm ci` on line 63 therefore skipped `glob: 11.1.0` (declared only in doc-retrieval-mcp's package.json), and the subsequent builder-stage `npm run build` silently failed because line 89 has `|| echo "Build completed with warnings"` masking the exit. Every Test job that downloaded the Docker image then re-ran `tsc` on doc-retrieval-mcp without the fallback and surfaced the TS7016 error resolving `import('glob')` against root-hoisted glob@7.2.3 (no types) instead of the nested 11.1.0. Adding packages/doc-retrieval-mcp to the deps-stage COPY list brings it under `npm ci` so glob@11.1.0 gets installed (nested, since root has 7.2.3 hoisted from vsce). prod-deps stage intentionally unchanged — doc-retrieval-mcp is private dev-tooling, never in prod image. dev-stage COPY packages/ on line 101 is a blanket copy, unaffected. SMI-4417. Co-Authored-By: claude-flow <ruv@ruv.net> Co-Authored-By: Claude <noreply@anthropic.com> * feat(doc-retrieval-mcp): SMI-4426 runtime guards + scaffold status Wave 2 Step 6 prep surfaced material API mismatches between the Wave 2 Step 1 scaffold and @ruvector/core@0.1.30's actual runtime surface: - Named export is `VectorDb` (not `VectorDB`) - Static factory `VectorDb.withDimensions(n)` (not `new VectorDB({...})`) - No `storagePath` parameter — opaque built-in persistence - All methods async (return Promises) - Score is distance-like (~0 = best), not cosine similarity - Native binding per platform (darwin-arm64 absent on Mac host) ESM importing `VectorDB` from the CJS module throws a SyntaxError at module load — before any guard could fire. Token-delta gate (Wave 2 Step 6) therefore cannot run until the integration is fixed. Shipping this commit makes PR #722 an honest scaffold merge: - `runIndexer` and `search` throw with a clear SMI-4426 pointer at the API seam. Agents and the post-commit hook fail loudly, not silently - Broken imports deleted; the original wiring (git-diff incremental mode, VectorDB insert/delete calls, glob corpus walker) is preserved in git history for SMI-4426 to resurrect - `skill_docs_status` (metadata-only, no VectorDb) still works — fixed a pre-existing build bug where `corpus.config.json` wasn't copied into `dist/` (`postbuild` now does the cp) - Banner on ruvector-dev-tooling.md declares runtime status BLOCKED on SMI-4426 so the rest of the guide reads as intended spec, not lies - Unit tests (chunker, metadata-store, config guards) remain 19/19 SMI-4426 (P2) filed with full API-mismatch table, repro, scope, and definition-of-done. Marked as blocker of SMI-4417. Wave 2 Step 6 (token-delta gate) + Wave 3 (SMI-4418 Phase 2) remain blocked on SMI-4426. SMI-4417 / SMI-4426. Co-Authored-By: claude-flow <ruv@ruv.net> Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Ryan Smith <wrsmith108@users.noreply.github.com> Co-authored-by: claude-flow <ruv@ruv.net> Co-authored-by: Claude <noreply@anthropic.com>
1 parent a3fe19d commit b02acbf

29 files changed

Lines changed: 1656 additions & 47 deletions
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
# RuVector Dev Tooling — `skillsmith-doc-retrieval` MCP
2+
3+
> ⚠️ **Runtime status: BLOCKED on [SMI-4426](https://linear.app/smith-horn-group/issue/SMI-4426)**
4+
>
5+
> Wave 2 Step 1 ([PR #722](https://github.com/smith-horn/skillsmith/pull/722))
6+
> ships this package as a **scaffold**. Unit tests cover chunker, metadata
7+
> store, and config guards (19/19 green), but the `@ruvector/core@0.1.30`
8+
> integration surface has **not** been runtime-validated. `skill_docs_search`
9+
> and `skill_docs_reindex` will throw a clear SMI-4426 error at invocation
10+
> rather than NPE. `skill_docs_status` works (metadata-only). The rest of
11+
> this guide documents the *intended* end-state — treat it as a spec until
12+
> SMI-4426 lands.
13+
>
14+
> See SMI-4426 for the API mismatch findings (`VectorDb` vs `VectorDB`,
15+
> `withDimensions(n)` factory, opaque persistence, distance-like scores,
16+
> platform native bindings).
17+
18+
Local, private semantic search over the Skillsmith doc corpus. Wraps
19+
`@ruvector/core` with Skillsmith's existing `EmbeddingService` so agents can
20+
hit 3 tools (`skill_docs_search`, `skill_docs_reindex`, `skill_docs_status`)
21+
instead of `Read`-ing whole guides.
22+
23+
Phase 1 of [SMI-4416](https://linear.app/smith-horn-group/issue/SMI-4416) /
24+
[SMI-4417](https://linear.app/smith-horn-group/issue/SMI-4417). See ADR-117
25+
for the design rationale and alternatives considered.
26+
27+
---
28+
29+
## Setup (first run)
30+
31+
```bash
32+
docker compose --profile dev up -d
33+
docker exec skillsmith-dev-1 npm install
34+
docker exec skillsmith-dev-1 npm run build -w packages/doc-retrieval-mcp
35+
36+
# Build the initial .rvf — runs on host because we do not index CI artifacts
37+
git submodule update --init # required: docs/internal must be present
38+
node packages/doc-retrieval-mcp/dist/src/cli.js reindex --full
39+
```
40+
41+
Output lands at `.ruvector/skillsmith-docs.rvf` +
42+
`.ruvector/metadata.json` + `.ruvector/.index-state.json`. All three are
43+
git-ignored. `.git-crypt-ignore` is **not** needed — smudge/clean filters
44+
never run on untracked files.
45+
46+
Restart Claude Code so it picks up the new `.mcp.json` entry.
47+
48+
---
49+
50+
## Tools
51+
52+
| Tool | Purpose | Shape |
53+
|------|---------|-------|
54+
| `skill_docs_search` | Semantic doc search | `{ query, k?, min_score?, scope_globs? } → { chunks: [{ id, file_path, line_start, line_end, heading_chain, text, score }] }` |
55+
| `skill_docs_reindex` | Rebuild / refresh | `{ mode: 'full' \| 'incremental' }` |
56+
| `skill_docs_status` | Index health check | `{} → { chunkCount, fileCount, lastIndexedSha, lastRunAt, rvfPath, corpusVersion }` |
57+
58+
### Score semantics
59+
60+
Cosine similarity, ∈ `[0, 1]`, higher is better. Default `min_score = 0.30`.
61+
62+
| Range | Meaning |
63+
|-------|---------|
64+
| `< 0.25` | Noise |
65+
| `0.25–0.40` | Weakly related |
66+
| `0.40–0.60` | Loosely relevant |
67+
| `0.60–0.80` | Strongly relevant |
68+
| `> 0.80` | Near-duplicate / exact |
69+
70+
---
71+
72+
## Corpus
73+
74+
Defined in
75+
[`packages/doc-retrieval-mcp/src/corpus.config.json`](../../packages/doc-retrieval-mcp/src/corpus.config.json):
76+
`CLAUDE.md`, `CONTRIBUTING.md`, `README.md`, `.claude/development/**`,
77+
`.claude/skills/**/SKILL.md`, `.claude/templates/**`, `docs/internal/**`,
78+
`packages/*/README.md`. The indexer refuses to start if the
79+
`docs/internal/` submodule is uninitialized — it would silently omit
80+
private content otherwise.
81+
82+
## Chunk sizing — design note
83+
84+
`all-MiniLM-L6-v2` has a **256-token hard cap** and `EmbeddingService.embed`
85+
further truncates input to 1000 chars (~250 tokens). Chunks target
86+
240 tokens (≈960 chars), overlap 48 tokens. The original plan targeted
87+
500-token chunks, which was infeasible with this model — the second half
88+
of every chunk would have been ignored by the encoder. Phase 3
89+
([SMI-4419](https://linear.app/smith-horn-group/issue/SMI-4419)) revisits
90+
this if we adopt a longer-context model.
91+
92+
---
93+
94+
## Privacy boundary
95+
96+
1. `.ruvector/` is **git-ignored** and **CI-refused**. The indexer exits
97+
non-zero if `CI=true` or `SKILLSMITH_CI=true`. It also refuses to write
98+
outside `$REPO_ROOT/.ruvector/`.
99+
2. `.mcp.json` carries an explicit `disabledTools` block listing 37 Ruflo
100+
tools with remote-persistence surfaces (AgentDB, hive-mind_memory,
101+
transfer_*, memory_store, etc.). Authoritative list lives in
102+
[`docs/internal/architecture/ruflo-tool-classification.md`](../../docs/internal/architecture/ruflo-tool-classification.md)
103+
(SMI-4420). Re-audit when Ruflo bumps a minor version.
104+
3. The corpus includes `docs/internal/**/*.md` (private submodule). The
105+
resulting `.rvf` is a searchable index of that content — treat it with
106+
the same confidentiality as the submodule itself.
107+
108+
---
109+
110+
## Post-commit hook
111+
112+
`.husky/post-commit` runs an incremental re-index in the background when:
113+
114+
- `$REPO_ROOT/.ruvector/skillsmith-docs.rvf` exists (first run is manual).
115+
- `packages/doc-retrieval-mcp/dist/src/cli.js` exists (package is built).
116+
- `CI` and `SKILLSMITH_CI` are unset.
117+
118+
The indexer uses `GIT_OPTIONAL_LOCKS=0` and passes
119+
`--no-optional-locks` to every `git diff` invocation, avoiding the
120+
SMI-2536 smudge-filter branch-switch hazard. Hook failure is non-fatal
121+
and non-blocking.
122+
123+
To disable the auto-reindex: delete the `.rvf` (first-run branch skips),
124+
or unset the cli by removing `packages/doc-retrieval-mcp/dist/`.
125+
126+
---
127+
128+
## Operations
129+
130+
### Rebuild from scratch
131+
132+
```bash
133+
rm -rf .ruvector/
134+
node packages/doc-retrieval-mcp/dist/src/cli.js reindex --full
135+
```
136+
137+
### Verify a query end-to-end
138+
139+
```bash
140+
node packages/doc-retrieval-mcp/dist/src/cli.js status
141+
node -e "import('./packages/doc-retrieval-mcp/dist/src/search.js').then(m => m.search({ query: 'git-crypt worktrees', k: 3 })).then(r => console.log(JSON.stringify(r, null, 2)))"
142+
```
143+
144+
### Token-delta measurement (Wave 2 Step 6 gate)
145+
146+
```bash
147+
node scripts/token-delta-harness.mjs run --mode baseline
148+
node scripts/token-delta-harness.mjs run --mode measured
149+
node scripts/token-delta-harness.mjs compare
150+
```
151+
152+
Pass = ≥40% median input-token reduction across the three tasks in
153+
[`scripts/ruvector-harness-tasks.json`](../../scripts/ruvector-harness-tasks.json).
154+
Fail = Phase 2 abandoned, retro filed.
155+
156+
---
157+
158+
## Troubleshooting
159+
160+
| Symptom | Fix |
161+
|---------|-----|
162+
| `index not built` error from `skill_docs_search` | `node packages/doc-retrieval-mcp/dist/src/cli.js reindex --full` |
163+
| `required submodule 'docs/internal' is not initialized` | `git submodule update --init` |
164+
| `refusing to run in CI` | Expected — indexer never runs in CI. |
165+
| MCP server doesn't appear in Claude Code | Restart Claude Code after editing `.mcp.json`. Run the package build first: `docker exec skillsmith-dev-1 npm run build -w packages/doc-retrieval-mcp`. |
166+
| Stale results after many edits | `rm -rf .ruvector && node packages/doc-retrieval-mcp/dist/src/cli.js reindex --full` |
167+
168+
---
169+
170+
## Deferred
171+
172+
Phase 2 promotes `skill_docs_search` into `@skillsmith/mcp-server` with
173+
an `installed`/`registry` scope split (registry side uses pgvector on
174+
Supabase, not RuVector — Deno cannot load the native module). Phase 3
175+
evaluates longer-context embedding models and potentially replaces the
176+
HNSW brute-force fallback in `packages/core/src/embeddings/hnsw-store.ts`
177+
(SMI-1519 / SMI-4419).

.github/workflows/ci.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ jobs:
693693
# Copy nested workspace node_modules (for non-hoisted dependencies)
694694
# docker cp works on stopped containers - no need for docker exec
695695
# NOTE: Package list must stay consistent with extract-builds step below
696-
for pkg in core mcp-server cli enterprise vscode-extension website; do
696+
for pkg in core mcp-server cli enterprise vscode-extension website doc-retrieval-mcp; do
697697
mkdir -p /tmp/packages/$pkg
698698
if docker cp extract-deps:/app/packages/$pkg/node_modules /tmp/packages/$pkg/ 2>/dev/null; then
699699
echo "✓ Copied packages/$pkg/node_modules"
@@ -734,6 +734,7 @@ jobs:
734734
packages/cli/dist
735735
packages/enterprise/dist
736736
packages/vscode-extension/dist
737+
packages/doc-retrieval-mcp/dist
737738
packages/website/.astro
738739
.turbo
739740
packages/*/.turbo
@@ -752,7 +753,7 @@ jobs:
752753
docker create --name extract-builds skillsmith-ci:${{ github.sha }}
753754
754755
# Extract dist/ from each package (consistent list with node_modules extraction)
755-
for pkg in core mcp-server cli enterprise vscode-extension website; do
756+
for pkg in core mcp-server cli enterprise vscode-extension website doc-retrieval-mcp; do
756757
mkdir -p packages/$pkg
757758
if docker cp extract-builds:/app/packages/$pkg/dist packages/$pkg/ 2>/dev/null; then
758759
echo "✓ Extracted packages/$pkg/dist"
@@ -774,7 +775,7 @@ jobs:
774775
if docker cp extract-builds:/app/.turbo ./ 2>/dev/null; then
775776
echo "✓ Extracted root .turbo cache"
776777
fi
777-
for pkg in core mcp-server cli enterprise vscode-extension website; do
778+
for pkg in core mcp-server cli enterprise vscode-extension website doc-retrieval-mcp; do
778779
if docker cp extract-builds:/app/packages/$pkg/.turbo packages/$pkg/ 2>/dev/null; then
779780
echo "✓ Extracted packages/$pkg/.turbo"
780781
fi

.github/workflows/e2e-tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ jobs:
115115
docker cp extract-deps:/app/node_modules /tmp/node_modules
116116
117117
# Copy nested workspace node_modules (for non-hoisted dependencies)
118-
for pkg in core mcp-server cli enterprise vscode-extension website; do
118+
for pkg in core mcp-server cli enterprise vscode-extension website doc-retrieval-mcp; do
119119
mkdir -p /tmp/packages/$pkg
120120
if docker cp extract-deps:/app/packages/$pkg/node_modules /tmp/packages/$pkg/ 2>/dev/null; then
121121
echo "✓ Copied packages/$pkg/node_modules"

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ node_modules/
66
agentdb.rvf
77
agentdb.rvf.lock
88

9+
# SMI-4417: doc-retrieval-mcp — local-only .rvf corpus index + metadata.
10+
# Never committed, never built in CI. .rvf is untracked, so smudge/clean
11+
# filters never run on it — no .git-crypt-ignore entry is needed.
12+
.ruvector/
13+
*.rvf
14+
915
# Build outputs
1016
dist/
1117
*.tsbuildinfo

.husky/post-commit

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,19 @@ fi
5050
# SMI-710: Sync Linear issues from commit messages (background, non-blocking)
5151
node "$(dirname "$0")/../scripts/linear-hook.mjs" post-commit &
5252

53+
# SMI-4417: Background incremental re-index of doc corpus.
54+
# Non-blocking, failure non-fatal, skipped if .rvf absent (first run manual)
55+
# or in CI. GIT_OPTIONAL_LOCKS=0 + --no-optional-locks inside the indexer
56+
# prevent SMI-2536 smudge-filter hazards during `git diff` against the index.
57+
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
58+
if [ -n "$REPO_ROOT" ] && [ -z "$CI" ] && [ -z "$SKILLSMITH_CI" ] \
59+
&& [ -f "$REPO_ROOT/.ruvector/skillsmith-docs.rvf" ] \
60+
&& [ -f "$REPO_ROOT/packages/doc-retrieval-mcp/dist/src/cli.js" ]; then
61+
(
62+
cd "$REPO_ROOT" || exit 0
63+
GIT_OPTIONAL_LOCKS=0 nohup node packages/doc-retrieval-mcp/dist/src/cli.js reindex --incremental --quiet \
64+
>/dev/null 2>&1 &
65+
)
66+
fi
67+
5368
exit 0

.mcp.json

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,61 @@
55
"command": "node",
66
"args": ["./packages/mcp-server/dist/src/index.js"]
77
},
8+
"skillsmith-doc-retrieval": {
9+
"type": "stdio",
10+
"command": "node",
11+
"args": ["./packages/doc-retrieval-mcp/dist/src/server.js"],
12+
"env": {
13+
"SKILLSMITH_REPO_ROOT": "."
14+
}
15+
},
816
"ruflo": {
917
"type": "stdio",
1018
"command": "npx",
1119
"args": ["ruflo@3.5.51", "mcp", "start"],
1220
"env": {
1321
"CLAUDE_FLOW_LOG_LEVEL": "info",
1422
"CLAUDE_FLOW_MEMORY_BACKEND": "sqlite"
15-
}
23+
},
24+
"disabledTools": [
25+
"mcp__ruflo__agentdb_pattern-store",
26+
"mcp__ruflo__agentdb_pattern-search",
27+
"mcp__ruflo__agentdb_hierarchical-store",
28+
"mcp__ruflo__agentdb_hierarchical-recall",
29+
"mcp__ruflo__agentdb_causal-edge",
30+
"mcp__ruflo__agentdb_batch",
31+
"mcp__ruflo__agentdb_context-synthesize",
32+
"mcp__ruflo__agentdb_semantic-route",
33+
"mcp__ruflo__agentdb_feedback",
34+
"mcp__ruflo__agentdb_consolidate",
35+
"mcp__ruflo__hive-mind_memory",
36+
"mcp__ruflo__hive-mind_broadcast",
37+
"mcp__ruflo__hive-mind_consensus",
38+
"mcp__ruflo__hive-mind_spawn",
39+
"mcp__ruflo__hive-mind_join",
40+
"mcp__ruflo__hive-mind_init",
41+
"mcp__ruflo__transfer_store-search",
42+
"mcp__ruflo__transfer_store-download",
43+
"mcp__ruflo__transfer_store-featured",
44+
"mcp__ruflo__transfer_store-info",
45+
"mcp__ruflo__transfer_store-trending",
46+
"mcp__ruflo__transfer_plugin-search",
47+
"mcp__ruflo__transfer_plugin-featured",
48+
"mcp__ruflo__transfer_plugin-official",
49+
"mcp__ruflo__transfer_plugin-info",
50+
"mcp__ruflo__transfer_ipfs-resolve",
51+
"mcp__ruflo__hooks_intelligence_pattern-store",
52+
"mcp__ruflo__hooks_intelligence_pattern-search",
53+
"mcp__ruflo__memory_store",
54+
"mcp__ruflo__memory_search",
55+
"mcp__ruflo__memory_search_unified",
56+
"mcp__ruflo__memory_migrate",
57+
"mcp__ruflo__swarm_init",
58+
"mcp__ruflo__claims_handoff",
59+
"mcp__ruflo__claims_accept-handoff",
60+
"mcp__ruflo__hooks_post-task",
61+
"mcp__ruflo__hooks_model-outcome"
62+
]
1663
}
1764
}
1865
}

CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Detailed guides extracted via progressive disclosure. CLAUDE.md contains essenti
1515
| [vscode-publishing-guide.md](.claude/development/vscode-publishing-guide.md) | VS Code Marketplace publishing, local/CI workflow, PAT rotation |
1616
| [subagent-tool-permissions-guide.md](.claude/development/subagent-tool-permissions-guide.md) | Subagent tool access by type, foreground/background behavior, skill author checklist |
1717
| [supabase-migration-safety.md](.claude/development/supabase-migration-safety.md) | Pre/post-apply query catalog, ACCESS EXCLUSIVE lock discipline, rollback convention, pooler rules. Invoke via `supabase-migration-reviewer` skill for automated review. |
18+
| [ruvector-dev-tooling.md](.claude/development/ruvector-dev-tooling.md) | `skillsmith-doc-retrieval` MCP — local semantic doc search (SMI-4417). Setup, tool surface, privacy boundary, post-commit hook, token-delta gate. |
1819

1920
**Implementation plan template**: [.claude/templates/implementation-plan.md](.claude/templates/implementation-plan.md) — use this structure for all plans in `docs/internal/implementation/`.
2021

Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ COPY packages/mcp-server/package*.json ./packages/mcp-server/
5555
COPY packages/cli/package*.json ./packages/cli/
5656
COPY packages/vscode-extension/package*.json ./packages/vscode-extension/
5757
COPY packages/website/package*.json ./packages/website/
58+
COPY packages/doc-retrieval-mcp/package*.json ./packages/doc-retrieval-mcp/
5859

5960
# Install ALL dependencies (including devDependencies for building)
6061
# Using npm ci for reproducible builds from package-lock.json

eslint.config.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ const tsConfig = tseslint.config(
5555
'./packages/cli/tsconfig.json',
5656
'./packages/enterprise/tsconfig.json',
5757
'./packages/vscode-extension/tsconfig.json',
58+
'./packages/doc-retrieval-mcp/tsconfig.json',
5859
],
5960
tsconfigRootDir: import.meta.dirname,
6061
},

0 commit comments

Comments
 (0)