bluera-knowledge 0.11.5 โ 0.11.7
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/.claude/settings.local.json.example +5 -0
- package/.claude-plugin/plugin.json +15 -2
- package/CHANGELOG.md +30 -0
- package/README.md +19 -2
- package/dist/index.js +63 -17
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/scripts/validate-npm-release.sh +211 -0
- package/src/cli/commands/plugin-api.test.ts +105 -43
- package/src/cli/commands/plugin-api.ts +42 -8
- package/src/mcp/plugin-mcp-config.test.ts +64 -0
- package/src/plugin/commands.ts +42 -17
- package/src/scripts/validate-npm-release.test.ts +34 -0
- package/.mcp.json +0 -13
- package/src/mcp/mcp-config.test.ts +0 -43
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bluera-knowledge",
|
|
3
|
-
"version": "0.11.
|
|
4
|
-
"description": "Clone repos, crawl docs, search locally. Fast, authoritative answers for AI coding agents."
|
|
3
|
+
"version": "0.11.7",
|
|
4
|
+
"description": "Clone repos, crawl docs, search locally. Fast, authoritative answers for AI coding agents.",
|
|
5
|
+
"mcpServers": {
|
|
6
|
+
"bluera-knowledge": {
|
|
7
|
+
"command": "node",
|
|
8
|
+
"args": [
|
|
9
|
+
"${CLAUDE_PLUGIN_ROOT}/dist/mcp/server.js"
|
|
10
|
+
],
|
|
11
|
+
"env": {
|
|
12
|
+
"PROJECT_ROOT": "${PWD}",
|
|
13
|
+
"DATA_DIR": ".bluera/bluera-knowledge/data",
|
|
14
|
+
"CONFIG_PATH": ".bluera/bluera-knowledge/config.json"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
5
18
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
## [0.11.7](https://github.com/blueraai/bluera-knowledge/compare/v0.11.6...v0.11.7) (2026-01-10)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **scripts:** add post-release npm validation script ([e4c29a0](https://github.com/blueraai/bluera-knowledge/commit/e4c29a0c83907de4bc293a69a58412629457fb22))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **cli:** plugin-api commands now respect global options ([d3cca02](https://github.com/blueraai/bluera-knowledge/commit/d3cca02ffc679ffc187b76c7682f3cc177eabdea))
|
|
16
|
+
* **scripts:** use mktemp for temp directories in validation script ([3107861](https://github.com/blueraai/bluera-knowledge/commit/3107861bd7a966016fde2a121469dd84756f39be))
|
|
17
|
+
|
|
18
|
+
## [0.11.6](https://github.com/blueraai/bluera-knowledge/compare/v0.10.0...v0.11.6) (2026-01-10)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Features
|
|
22
|
+
|
|
23
|
+
* add file logging to background worker for visibility ([6d7a751](https://github.com/blueraai/bluera-knowledge/commit/6d7a751de59a566c34b03b434c772ecde3770b2c))
|
|
24
|
+
* **analysis:** add custom language extensibility framework with ZIL adapter ([c4dc526](https://github.com/blueraai/bluera-knowledge/commit/c4dc526467c70dbc3fb28e7e5d7620a90cc3bf95))
|
|
25
|
+
* require env vars with no defaults (fail fast) ([b404cd6](https://github.com/blueraai/bluera-knowledge/commit/b404cd60374e0a7c5ace89f1ef0235bfc5c799fa))
|
|
26
|
+
* **sync:** add git-committable store definitions with sync command ([5cfa925](https://github.com/blueraai/bluera-knowledge/commit/5cfa92580397f193fda75ea61197fb4c9d9d4b0a))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
### Bug Fixes
|
|
30
|
+
|
|
31
|
+
* **crawl:** handle Claude CLI structured_output wrapper in intelligent crawl ([54ea74b](https://github.com/blueraai/bluera-knowledge/commit/54ea74bca6d4b7263ef11a8290416e0d66b8d37f))
|
|
32
|
+
* **test:** add timeout to flaky search test ([5848b76](https://github.com/blueraai/bluera-knowledge/commit/5848b7648a547510fc2333f283ae835a6ca9efef))
|
|
33
|
+
* use relative path in .mcp.json for project-level MCP config ([6d7a55e](https://github.com/blueraai/bluera-knowledge/commit/6d7a55ef86dd5ac5d568feafa3ab207faa843d46))
|
|
34
|
+
|
|
5
35
|
## [0.11.5](https://github.com/blueraai/bluera-knowledge/compare/v0.10.0...v0.11.5) (2026-01-10)
|
|
6
36
|
|
|
7
37
|
|
package/README.md
CHANGED
|
@@ -1147,7 +1147,7 @@ playwright install chromium
|
|
|
1147
1147
|
|
|
1148
1148
|
## ๐ MCP Integration
|
|
1149
1149
|
|
|
1150
|
-
The plugin includes a Model Context Protocol server that exposes search tools. This is configured in
|
|
1150
|
+
The plugin includes a Model Context Protocol server that exposes search tools. This is configured inline in `.claude-plugin/plugin.json`:
|
|
1151
1151
|
|
|
1152
1152
|
> [!IMPORTANT]
|
|
1153
1153
|
> **Commands vs MCP Tools**: You interact with the plugin using `/bluera-knowledge:` slash commands. Behind the scenes, these commands instruct Claude Code to use MCP tools (`mcp__bluera-knowledge__*`) which handle the actual operations. Commands provide the user interface, while MCP tools are the backend that AI agents use to access your knowledge stores.
|
|
@@ -1159,6 +1159,7 @@ The plugin includes a Model Context Protocol server that exposes search tools. T
|
|
|
1159
1159
|
"command": "node",
|
|
1160
1160
|
"args": ["${CLAUDE_PLUGIN_ROOT}/dist/mcp/server.js"],
|
|
1161
1161
|
"env": {
|
|
1162
|
+
"PROJECT_ROOT": "${PWD}",
|
|
1162
1163
|
"DATA_DIR": ".bluera/bluera-knowledge/data",
|
|
1163
1164
|
"CONFIG_PATH": ".bluera/bluera-knowledge/config.json"
|
|
1164
1165
|
}
|
|
@@ -1600,6 +1601,22 @@ Note: The version command runs full quality checks (format, lint, deadcode, type
|
|
|
1600
1601
|
|
|
1601
1602
|
> ๐ก **That's it!** No manual tagging needed. Just push to `main` and the release happens automatically when CI passes.
|
|
1602
1603
|
|
|
1604
|
+
### ๐ Post-Release Validation
|
|
1605
|
+
|
|
1606
|
+
After a release, validate the npm package works correctly:
|
|
1607
|
+
|
|
1608
|
+
```bash
|
|
1609
|
+
bun run validate:npm
|
|
1610
|
+
```
|
|
1611
|
+
|
|
1612
|
+
This script:
|
|
1613
|
+
- Installs the latest `bluera-knowledge` from npm globally
|
|
1614
|
+
- Exercises all CLI commands (stores, add-folder, search, index, delete)
|
|
1615
|
+
- Writes detailed logs to `logs/validation/npm-validation-*.log`
|
|
1616
|
+
- Returns exit code 0 on success, 1 on failure
|
|
1617
|
+
|
|
1618
|
+
Use this to catch any packaging or runtime issues after npm publish.
|
|
1619
|
+
|
|
1603
1620
|
### ๐งช Testing Locally
|
|
1604
1621
|
|
|
1605
1622
|
**Option 1: Development MCP Server (Recommended)**
|
|
@@ -1618,7 +1635,7 @@ cd /path/to/bluera-knowledge
|
|
|
1618
1635
|
claude --plugin-dir .
|
|
1619
1636
|
```
|
|
1620
1637
|
|
|
1621
|
-
The MCP config in `
|
|
1638
|
+
The MCP config in `plugin.json` is only loaded when the directory is loaded as a plugin (via `--plugin-dir` or marketplace install), so there's no conflict with project-level MCP config.
|
|
1622
1639
|
|
|
1623
1640
|
**Option 3: CLI Tool Testing**
|
|
1624
1641
|
|
package/dist/index.js
CHANGED
|
@@ -773,8 +773,12 @@ var RepoUrlResolver = class {
|
|
|
773
773
|
};
|
|
774
774
|
|
|
775
775
|
// src/plugin/commands.ts
|
|
776
|
-
async function handleAddRepo(args) {
|
|
777
|
-
const services = await createServices(
|
|
776
|
+
async function handleAddRepo(args, options = {}) {
|
|
777
|
+
const services = await createServices(
|
|
778
|
+
options.config,
|
|
779
|
+
options.dataDir,
|
|
780
|
+
options.projectRoot ?? process.env["PWD"]
|
|
781
|
+
);
|
|
778
782
|
const storeName = args.name ?? extractRepoName(args.url);
|
|
779
783
|
console.log(`Cloning ${args.url}...`);
|
|
780
784
|
const result = await services.store.create({
|
|
@@ -799,8 +803,12 @@ async function handleAddRepo(args) {
|
|
|
799
803
|
console.error(`Indexing failed: ${indexResult.error.message}`);
|
|
800
804
|
}
|
|
801
805
|
}
|
|
802
|
-
async function handleAddFolder(args) {
|
|
803
|
-
const services = await createServices(
|
|
806
|
+
async function handleAddFolder(args, options = {}) {
|
|
807
|
+
const services = await createServices(
|
|
808
|
+
options.config,
|
|
809
|
+
options.dataDir,
|
|
810
|
+
options.projectRoot ?? process.env["PWD"]
|
|
811
|
+
);
|
|
804
812
|
const { basename } = await import("path");
|
|
805
813
|
const storeName = args.name ?? basename(args.path);
|
|
806
814
|
console.log(`Adding folder: ${args.path}...`);
|
|
@@ -825,8 +833,12 @@ async function handleAddFolder(args) {
|
|
|
825
833
|
console.error(`Indexing failed: ${indexResult.error.message}`);
|
|
826
834
|
}
|
|
827
835
|
}
|
|
828
|
-
async function handleStores() {
|
|
829
|
-
const services = await createServices(
|
|
836
|
+
async function handleStores(options = {}) {
|
|
837
|
+
const services = await createServices(
|
|
838
|
+
options.config,
|
|
839
|
+
options.dataDir,
|
|
840
|
+
options.projectRoot ?? process.env["PWD"]
|
|
841
|
+
);
|
|
830
842
|
const stores = await services.store.list();
|
|
831
843
|
if (stores.length === 0) {
|
|
832
844
|
console.log("No stores found.");
|
|
@@ -850,10 +862,10 @@ async function handleStores() {
|
|
|
850
862
|
console.log(`| ${name} | ${type} | ${id.substring(0, 8)}... | ${source} |`);
|
|
851
863
|
}
|
|
852
864
|
}
|
|
853
|
-
async function handleSuggest() {
|
|
854
|
-
const projectRoot = process.env["PWD"] ?? process.cwd();
|
|
865
|
+
async function handleSuggest(options = {}) {
|
|
866
|
+
const projectRoot = options.projectRoot ?? process.env["PWD"] ?? process.cwd();
|
|
855
867
|
console.log("Analyzing project dependencies...\n");
|
|
856
|
-
const services = await createServices(
|
|
868
|
+
const services = await createServices(options.config, options.dataDir, projectRoot);
|
|
857
869
|
const analyzer = new DependencyUsageAnalyzer();
|
|
858
870
|
const resolver = new RepoUrlResolver();
|
|
859
871
|
const spinner = ora3("Scanning source files...").start();
|
|
@@ -910,24 +922,58 @@ async function handleSuggest() {
|
|
|
910
922
|
}
|
|
911
923
|
|
|
912
924
|
// src/cli/commands/plugin-api.ts
|
|
913
|
-
function createAddRepoCommand(
|
|
925
|
+
function createAddRepoCommand(getOptions) {
|
|
914
926
|
return new Command4("add-repo").description("Clone and index a library source repository").argument("<url>", "Git repository URL").option("--name <name>", "Store name (defaults to repo name)").option("--branch <branch>", "Git branch to clone").action(async (url, options) => {
|
|
915
|
-
|
|
927
|
+
const globalOpts = getOptions();
|
|
928
|
+
await handleAddRepo(
|
|
929
|
+
{ url, ...options },
|
|
930
|
+
{
|
|
931
|
+
config: globalOpts.config,
|
|
932
|
+
dataDir: globalOpts.dataDir,
|
|
933
|
+
projectRoot: globalOpts.projectRoot,
|
|
934
|
+
format: globalOpts.format,
|
|
935
|
+
quiet: globalOpts.quiet
|
|
936
|
+
}
|
|
937
|
+
);
|
|
916
938
|
});
|
|
917
939
|
}
|
|
918
|
-
function createAddFolderCommand(
|
|
940
|
+
function createAddFolderCommand(getOptions) {
|
|
919
941
|
return new Command4("add-folder").description("Index a local folder of reference material").argument("<path>", "Folder path to index").option("--name <name>", "Store name (defaults to folder name)").action(async (path, options) => {
|
|
920
|
-
|
|
942
|
+
const globalOpts = getOptions();
|
|
943
|
+
await handleAddFolder(
|
|
944
|
+
{ path, ...options },
|
|
945
|
+
{
|
|
946
|
+
config: globalOpts.config,
|
|
947
|
+
dataDir: globalOpts.dataDir,
|
|
948
|
+
projectRoot: globalOpts.projectRoot,
|
|
949
|
+
format: globalOpts.format,
|
|
950
|
+
quiet: globalOpts.quiet
|
|
951
|
+
}
|
|
952
|
+
);
|
|
921
953
|
});
|
|
922
954
|
}
|
|
923
|
-
function createStoresCommand(
|
|
955
|
+
function createStoresCommand(getOptions) {
|
|
924
956
|
return new Command4("stores").description("List all indexed library stores").action(async () => {
|
|
925
|
-
|
|
957
|
+
const globalOpts = getOptions();
|
|
958
|
+
await handleStores({
|
|
959
|
+
config: globalOpts.config,
|
|
960
|
+
dataDir: globalOpts.dataDir,
|
|
961
|
+
projectRoot: globalOpts.projectRoot,
|
|
962
|
+
format: globalOpts.format,
|
|
963
|
+
quiet: globalOpts.quiet
|
|
964
|
+
});
|
|
926
965
|
});
|
|
927
966
|
}
|
|
928
|
-
function createSuggestCommand(
|
|
967
|
+
function createSuggestCommand(getOptions) {
|
|
929
968
|
return new Command4("suggest").description("Suggest important dependencies to add to knowledge stores").action(async () => {
|
|
930
|
-
|
|
969
|
+
const globalOpts = getOptions();
|
|
970
|
+
await handleSuggest({
|
|
971
|
+
config: globalOpts.config,
|
|
972
|
+
dataDir: globalOpts.dataDir,
|
|
973
|
+
projectRoot: globalOpts.projectRoot,
|
|
974
|
+
format: globalOpts.format,
|
|
975
|
+
quiet: globalOpts.quiet
|
|
976
|
+
});
|
|
931
977
|
});
|
|
932
978
|
}
|
|
933
979
|
|