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.
@@ -7,6 +7,11 @@
7
7
  "Bash(npm run lint:*)",
8
8
  "Bash(npm run typecheck:*)",
9
9
  "Bash(bun run precommit:*)"
10
+ ],
11
+ "deny": [
12
+ "Bash(*validate-npm-release*)",
13
+ "Bash(bun run validate:*)",
14
+ "Bash(npm run validate:*)"
10
15
  ]
11
16
  },
12
17
  "hooks": {
@@ -1,5 +1,18 @@
1
1
  {
2
2
  "name": "bluera-knowledge",
3
- "version": "0.11.5",
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 `mcp.plugin.json`:
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 `mcp.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.
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(void 0, void 0, process.env["PWD"]);
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(void 0, void 0, process.env["PWD"]);
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(void 0, void 0, process.env["PWD"]);
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(void 0, void 0, projectRoot);
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(_getOptions) {
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
- await handleAddRepo({ url, ...options });
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(_getOptions) {
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
- await handleAddFolder({ path, ...options });
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(_getOptions) {
955
+ function createStoresCommand(getOptions) {
924
956
  return new Command4("stores").description("List all indexed library stores").action(async () => {
925
- await handleStores();
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(_getOptions) {
967
+ function createSuggestCommand(getOptions) {
929
968
  return new Command4("suggest").description("Suggest important dependencies to add to knowledge stores").action(async () => {
930
- await handleSuggest();
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