@kage-core/kage-graph-mcp 1.1.14 → 1.1.16

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 CHANGED
@@ -9,6 +9,28 @@ This package exposes two surfaces:
9
9
 
10
10
  ## Latest Release
11
11
 
12
+ `1.1.16` fixes the guarded release helper's npm verification step:
13
+
14
+ - exact-version `npm view` checks now retry with backoff after publish so npm
15
+ registry propagation does not make a successful publish look failed.
16
+ - the release helper is maintainer-only repo tooling: public package metadata no
17
+ longer exposes npm release scripts, and `dist/release.js` is excluded from the
18
+ published tarball.
19
+
20
+ `1.1.15` hardened the npm release path and memory-only review flow:
21
+
22
+ - the source-repo maintainer helper can run the guarded release checks without
23
+ publishing, or push/publish/smoke-test when explicitly invoked from a built
24
+ checkout.
25
+ - it requires a clean worktree, fetches the remote branch, verifies local `HEAD`
26
+ contains `origin/<branch>`, runs tests and `npm pack --dry-run`, pushes the
27
+ branch before publishing, publishes with `--access public`, verifies npm
28
+ registry metadata, and performs a smoke install.
29
+ - all git steps run with `GIT_EDITOR=true` so agent sessions cannot get stuck in
30
+ an interactive commit or rebase editor.
31
+ - `kage propose --from-diff` now includes repo memory packet-only changes from
32
+ `.agent_memory/packets/*.json` and `.agent_memory/pending/*.json`.
33
+
12
34
  `1.1.14` publishes the memory/code graph trust and retrieval pass:
13
35
 
14
36
  - recall now uses vectorless BM25 lexical ranking with graph, path/type/tag,
@@ -42,6 +64,21 @@ npm install
42
64
  npm run build
43
65
  ```
44
66
 
67
+ Publishing from the source repo should use the guarded maintainer helper after
68
+ the release commit is ready. It is intentionally not exposed as a public npm
69
+ script or included in the published tarball:
70
+
71
+ ```bash
72
+ npm run build --prefix mcp
73
+ cd mcp
74
+ node dist/release.js --dry-run
75
+ node dist/release.js --publish --push --smoke
76
+ ```
77
+
78
+ The script fetches the current branch and blocks if the remote branch is not an
79
+ ancestor of local `HEAD`, which prevents publishing an npm version from a branch
80
+ that cannot be pushed cleanly.
81
+
45
82
  ## CLI
46
83
 
47
84
  ```bash
package/dist/kernel.js CHANGED
@@ -911,7 +911,12 @@ const NOISE_PATH_PREFIXES = [
911
911
  ".pub-cache/",
912
912
  "elm-stuff/",
913
913
  ];
914
+ function isReviewableMemoryPath(filePath) {
915
+ return /^\.agent_memory\/(?:packets|pending)\/[^/]+\.json$/.test(filePath);
916
+ }
914
917
  function isNoisePath(filePath) {
918
+ if (isReviewableMemoryPath(filePath))
919
+ return false;
915
920
  return NOISE_PATH_PREFIXES.some((prefix) => filePath.startsWith(prefix));
916
921
  }
917
922
  function parsePorcelainStatus(status) {
@@ -926,7 +931,26 @@ function parsePorcelainPath(line) {
926
931
  const raw = line.length > 2 && line[2] === " " ? line.slice(3) : line.slice(2);
927
932
  return raw.trim();
928
933
  }
934
+ function branchDiffStat(projectDir, changedFiles) {
935
+ const diffStats = [
936
+ readGit(projectDir, ["diff", "--stat"]),
937
+ readGit(projectDir, ["diff", "--cached", "--stat"]),
938
+ ].filter(Boolean).join("\n").trim();
939
+ const untracked = new Set((readGit(projectDir, ["ls-files", "--others", "--exclude-standard"]) ?? "")
940
+ .split(/\r?\n/)
941
+ .map((path) => path.trim())
942
+ .filter(Boolean)
943
+ .filter((path) => changedFiles.includes(path)));
944
+ const untrackedStats = [...untracked]
945
+ .filter((file) => !diffStats.includes(file))
946
+ .map((file) => `${file} | untracked`)
947
+ .join("\n");
948
+ return [diffStats, untrackedStats].filter(Boolean).join("\n").trim()
949
+ || changedFiles.map((file) => `${file} | changed`).join("\n");
950
+ }
929
951
  function shouldSkipRepoMemoryPath(relativePath) {
952
+ if (isReviewableMemoryPath(relativePath))
953
+ return false;
930
954
  return isNoisePath(relativePath) || shouldSkipCodePath(relativePath);
931
955
  }
932
956
  function migrateLegacyMarkdown(projectDir) {
@@ -4822,7 +4846,7 @@ function proposeFromDiff(projectDir) {
4822
4846
  const changedFiles = parsePorcelainStatus(status);
4823
4847
  if (changedFiles.length === 0)
4824
4848
  return { ok: false, changedFiles: [], errors: ["No changed files found."] };
4825
- const stat = readGit(projectDir, ["diff", "--stat"]) || "Untracked or staged files changed; inspect git status for details.";
4849
+ const stat = branchDiffStat(projectDir, changedFiles);
4826
4850
  const branch = gitBranch(projectDir);
4827
4851
  const summary = {
4828
4852
  schema_version: 1,
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@kage-core/kage-graph-mcp",
3
- "version": "1.1.14",
3
+ "version": "1.1.16",
4
4
  "description": "Local-first repo memory, code graph, and recall MCP server for coding agents",
5
5
  "main": "dist/index.js",
6
6
  "files": [
7
7
  "dist/**/*.js",
8
8
  "!dist/**/*.test.js",
9
+ "!dist/release.js",
9
10
  "viewer/**/*",
10
11
  "!viewer/graphs/*.json",
11
12
  "README.md"