codesift-mcp 0.5.27 → 0.5.30

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.
Files changed (96) hide show
  1. package/dist/cli/commands.d.ts.map +1 -1
  2. package/dist/cli/commands.js +4 -1
  3. package/dist/cli/commands.js.map +1 -1
  4. package/dist/cli/git-hooks-installer.d.ts +29 -0
  5. package/dist/cli/git-hooks-installer.d.ts.map +1 -0
  6. package/dist/cli/git-hooks-installer.js +145 -0
  7. package/dist/cli/git-hooks-installer.js.map +1 -0
  8. package/dist/cli/help.d.ts.map +1 -1
  9. package/dist/cli/help.js +5 -0
  10. package/dist/cli/help.js.map +1 -1
  11. package/dist/cli/setup.d.ts +5 -0
  12. package/dist/cli/setup.d.ts.map +1 -1
  13. package/dist/cli/setup.js +15 -1
  14. package/dist/cli/setup.js.map +1 -1
  15. package/dist/register-tool-loaders.d.ts +1 -1
  16. package/dist/register-tool-loaders.d.ts.map +1 -1
  17. package/dist/register-tool-loaders.js +2 -2
  18. package/dist/register-tool-loaders.js.map +1 -1
  19. package/dist/register-tools.d.ts.map +1 -1
  20. package/dist/register-tools.js +125 -11
  21. package/dist/register-tools.js.map +1 -1
  22. package/dist/storage/index-store.d.ts.map +1 -1
  23. package/dist/storage/index-store.js +15 -14
  24. package/dist/storage/index-store.js.map +1 -1
  25. package/dist/storage/registry.d.ts +9 -0
  26. package/dist/storage/registry.d.ts.map +1 -1
  27. package/dist/storage/registry.js +28 -0
  28. package/dist/storage/registry.js.map +1 -1
  29. package/dist/tools/astro-content-collections.d.ts.map +1 -1
  30. package/dist/tools/astro-content-collections.js +1 -141
  31. package/dist/tools/astro-content-collections.js.map +1 -1
  32. package/dist/tools/astro-db-audit.d.ts +30 -0
  33. package/dist/tools/astro-db-audit.d.ts.map +1 -0
  34. package/dist/tools/astro-db-audit.js +244 -0
  35. package/dist/tools/astro-db-audit.js.map +1 -0
  36. package/dist/tools/astro-db-parser.d.ts +24 -0
  37. package/dist/tools/astro-db-parser.d.ts.map +1 -0
  38. package/dist/tools/astro-db-parser.js +150 -0
  39. package/dist/tools/astro-db-parser.js.map +1 -0
  40. package/dist/tools/astro-helpers.d.ts +13 -0
  41. package/dist/tools/astro-helpers.d.ts.map +1 -0
  42. package/dist/tools/astro-helpers.js +116 -0
  43. package/dist/tools/astro-helpers.js.map +1 -0
  44. package/dist/tools/astro-middleware.d.ts +26 -0
  45. package/dist/tools/astro-middleware.d.ts.map +1 -0
  46. package/dist/tools/astro-middleware.js +139 -0
  47. package/dist/tools/astro-middleware.js.map +1 -0
  48. package/dist/tools/astro-sessions.d.ts +26 -0
  49. package/dist/tools/astro-sessions.d.ts.map +1 -0
  50. package/dist/tools/astro-sessions.js +140 -0
  51. package/dist/tools/astro-sessions.js.map +1 -0
  52. package/dist/tools/constant-resolution-tools.d.ts.map +1 -1
  53. package/dist/tools/constant-resolution-tools.js +8 -4
  54. package/dist/tools/constant-resolution-tools.js.map +1 -1
  55. package/dist/tools/index-tools.d.ts.map +1 -1
  56. package/dist/tools/index-tools.js +16 -40
  57. package/dist/tools/index-tools.js.map +1 -1
  58. package/dist/tools/pattern-tools.d.ts.map +1 -1
  59. package/dist/tools/pattern-tools.js +20 -25
  60. package/dist/tools/pattern-tools.js.map +1 -1
  61. package/dist/tools/python-constants-tools.d.ts +3 -1
  62. package/dist/tools/python-constants-tools.d.ts.map +1 -1
  63. package/dist/tools/python-constants-tools.js +3 -2
  64. package/dist/tools/python-constants-tools.js.map +1 -1
  65. package/dist/tools/react-tools.d.ts +7 -1
  66. package/dist/tools/react-tools.d.ts.map +1 -1
  67. package/dist/tools/react-tools.js.map +1 -1
  68. package/dist/tools/sql-tools.d.ts +26 -0
  69. package/dist/tools/sql-tools.d.ts.map +1 -1
  70. package/dist/tools/sql-tools.js +84 -9
  71. package/dist/tools/sql-tools.js.map +1 -1
  72. package/dist/tools/status-tools.js +12 -19
  73. package/dist/tools/status-tools.js.map +1 -1
  74. package/dist/tools/typescript-constants-tools.d.ts +3 -0
  75. package/dist/tools/typescript-constants-tools.d.ts.map +1 -1
  76. package/dist/tools/typescript-constants-tools.js +53 -13
  77. package/dist/tools/typescript-constants-tools.js.map +1 -1
  78. package/dist/utils/constant-file-pattern.d.ts +6 -0
  79. package/dist/utils/constant-file-pattern.d.ts.map +1 -0
  80. package/dist/utils/constant-file-pattern.js +27 -0
  81. package/dist/utils/constant-file-pattern.js.map +1 -0
  82. package/dist/utils/import-graph.d.ts.map +1 -1
  83. package/dist/utils/import-graph.js +15 -9
  84. package/dist/utils/import-graph.js.map +1 -1
  85. package/dist/utils/ts-imports.d.ts +2 -1
  86. package/dist/utils/ts-imports.d.ts.map +1 -1
  87. package/dist/utils/ts-imports.js +8 -0
  88. package/dist/utils/ts-imports.js.map +1 -1
  89. package/dist/utils/tsconfig-paths.d.ts +5 -4
  90. package/dist/utils/tsconfig-paths.d.ts.map +1 -1
  91. package/dist/utils/tsconfig-paths.js +17 -14
  92. package/dist/utils/tsconfig-paths.js.map +1 -1
  93. package/hooks/hook-chain.sh +7 -0
  94. package/hooks/post-commit +8 -0
  95. package/hooks/post-commit-review-backlog.sh +107 -0
  96. package/package.json +2 -1
@@ -3,8 +3,9 @@
3
3
  * `tsconfig.json`, using `get-tsconfig` for `extends`-chain + paths handling.
4
4
  *
5
5
  * Two-level cache keeps long-running MCP server processes happy:
6
- * - `dirToConfigCache`: directory absolute path → nearest tsconfig.json path
7
- * (or null when none found up to repoRoot).
6
+ * - `dirToConfigCache`: importer directory absolute path → nearest tsconfig.json path
7
+ * (or null when none found up to repoRoot). Entries are per queried dir only
8
+ * so adding/removing tsconfig is visible after `clearTsconfigCache()`.
8
9
  * - `configCache`: tsconfig.json absolute path → parsed { matcher, baseUrl }.
9
10
  *
10
11
  * Both caches are cleared on `clearTsconfigCache()`. The graph builder calls
@@ -20,7 +21,7 @@
20
21
  * directory with `index.ts`.
21
22
  */
22
23
  import { existsSync, statSync } from "node:fs";
23
- import { dirname, join, resolve } from "node:path";
24
+ import { dirname, isAbsolute, join, relative, resolve, sep } from "node:path";
24
25
  import { getTsconfig, createPathsMatcher } from "get-tsconfig";
25
26
  const configCache = new Map();
26
27
  const dirToConfigCache = new Map();
@@ -43,25 +44,28 @@ export function clearTsconfigCache() {
43
44
  configCache.clear();
44
45
  dirToConfigCache.clear();
45
46
  }
47
+ /** True when `dir` resolves to `repoRoot` or a subdirectory of it. */
48
+ function isDirInsideRepo(repoRootAbs, dir) {
49
+ const abs = resolve(dir);
50
+ if (abs === repoRootAbs)
51
+ return true;
52
+ const rel = relative(repoRootAbs, abs);
53
+ return rel !== "" && !isAbsolute(rel) && !rel.startsWith(`..${sep}`) && !rel.startsWith("..");
54
+ }
46
55
  /** Walk up from `dir` to `repoRoot`, find nearest `tsconfig.json`.
47
56
  * Returns absolute path of the config file, or null if none found.
48
- * Caches every ancestor visited during the walk, not just the input dir,
49
- * so sibling lookups under the same parent are O(1). */
57
+ * Caches result only for the requested `dir` (not every ancestor) so late-added
58
+ * or removed tsconfig files are visible on the next lookup after cache clear. */
50
59
  function findNearestTsconfig(dir, repoRoot) {
51
60
  const cached = dirToConfigCache.get(dir);
52
61
  if (cached !== undefined)
53
62
  return cached;
54
63
  const repoRootAbs = resolve(repoRoot);
55
- const visited = [];
56
64
  let cur = resolve(dir);
57
- // `startsWith(repoRootAbs)` is true when cur === repoRootAbs, so the
58
- // explicit equality check would be redundant.
59
- while (cur.startsWith(repoRootAbs)) {
60
- visited.push(cur);
65
+ while (isDirInsideRepo(repoRootAbs, cur)) {
61
66
  const candidate = join(cur, "tsconfig.json");
62
67
  if (existsSync(candidate)) {
63
- for (const v of visited)
64
- dirToConfigCache.set(v, candidate);
68
+ dirToConfigCache.set(dir, candidate);
65
69
  return candidate;
66
70
  }
67
71
  const parent = dirname(cur);
@@ -69,8 +73,7 @@ function findNearestTsconfig(dir, repoRoot) {
69
73
  break;
70
74
  cur = parent;
71
75
  }
72
- for (const v of visited)
73
- dirToConfigCache.set(v, null);
76
+ dirToConfigCache.set(dir, null);
74
77
  return null;
75
78
  }
76
79
  /** Parse a tsconfig.json (with `extends` chain) and build a paths matcher.
@@ -1 +1 @@
1
- {"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tsconfig-paths.js","sourceRoot":"","sources":["../../src/utils/tsconfig-paths.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ HOOK_NAME=$(basename "$0")
3
+ PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)"
4
+ LOCAL_HOOK="$PROJECT_ROOT/.git/hooks/$HOOK_NAME"
5
+ if [ -x "$LOCAL_HOOK" ]; then
6
+ exec "$LOCAL_HOOK" "$@"
7
+ fi
@@ -0,0 +1,8 @@
1
+ #!/bin/bash
2
+ set +e
3
+ bash "$HOME/.claude/scripts/post-commit-review-backlog.sh" 2>/dev/null
4
+ PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)"
5
+ LOCAL_HOOK="$PROJECT_ROOT/.git/hooks/post-commit"
6
+ if [ -x "$LOCAL_HOOK" ] && [ "$LOCAL_HOOK" != "$0" ]; then
7
+ "$LOCAL_HOOK" "$@"
8
+ fi
@@ -0,0 +1,107 @@
1
+ #!/bin/bash
2
+ # Post-commit hook: adds new commit to review-backlog.md in Claude memory dir.
3
+ #
4
+ # Install per-project:
5
+ # cp ~/.claude/scripts/post-commit-review-backlog.sh .git/hooks/post-commit
6
+ # chmod +x .git/hooks/post-commit
7
+ #
8
+ # Or append to existing .git/hooks/post-commit:
9
+ # echo 'bash ~/.claude/scripts/post-commit-review-backlog.sh' >> .git/hooks/post-commit
10
+ #
11
+ # The hook computes the Claude memory directory from the project root path.
12
+ # Format: ~/.claude/projects/<sanitized-project-path>/memory/review-backlog.md
13
+
14
+ # Don't block commits if this fails
15
+ set +e
16
+
17
+ # Compute Claude memory directory from project root
18
+ PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null)" || exit 0
19
+ SANITIZED="$(echo "$PROJECT_ROOT" | tr '/' '-')"
20
+ MEMORY_DIR="$HOME/.claude/projects/${SANITIZED}/memory"
21
+ BACKLOG="$MEMORY_DIR/review-backlog.md"
22
+
23
+ # Get commit info
24
+ HASH=$(git rev-parse --short HEAD 2>/dev/null) || exit 0
25
+ FULL_HASH=$(git rev-parse HEAD 2>/dev/null) || exit 0
26
+ MESSAGE=$(git log -1 --format='%s' HEAD 2>/dev/null) || exit 0
27
+ AUTHOR=$(git log -1 --format='%an' HEAD 2>/dev/null) || exit 0
28
+ DATE=$(git log -1 --format='%ci' HEAD 2>/dev/null | cut -d' ' -f1) || exit 0
29
+ STAT=$(git diff --stat HEAD~1..HEAD 2>/dev/null | tail -1 | sed 's/^ *//' ) || STAT=""
30
+
31
+ # Create backlog file if it doesn't exist
32
+ if [ ! -f "$BACKLOG" ]; then
33
+ mkdir -p "$MEMORY_DIR"
34
+ cat > "$BACKLOG" << 'EOF'
35
+ # Review Backlog
36
+
37
+ Commits pending review. Managed by post-commit hook + /review skill.
38
+
39
+ ## Unreviewed
40
+
41
+ EOF
42
+ fi
43
+
44
+ # Add to backlog if not already there (e.g., skip on amend)
45
+ BACKLOG_DONE=0
46
+ if grep -q "^- \[ \] ${HASH} " "$BACKLOG" 2>/dev/null; then
47
+ BACKLOG_DONE=1
48
+ fi
49
+
50
+ if [ "$BACKLOG_DONE" -eq 0 ]; then
51
+ # Insert new entry after "## Unreviewed" + blank line
52
+ export CCT_HASH="$HASH"
53
+ export CCT_MSG="$MESSAGE"
54
+ TEMP=$(mktemp)
55
+
56
+ awk '
57
+ /^## Unreviewed$/ { found=1; print; next }
58
+ found && !inserted && /^$/ {
59
+ print
60
+ print "- [ ] " ENVIRON["CCT_HASH"] " " ENVIRON["CCT_MSG"]
61
+ inserted=1
62
+ next
63
+ }
64
+ found && !inserted && /^- / {
65
+ print "- [ ] " ENVIRON["CCT_HASH"] " " ENVIRON["CCT_MSG"]
66
+ inserted=1
67
+ }
68
+ { print }
69
+ END {
70
+ if (found && !inserted)
71
+ print "- [ ] " ENVIRON["CCT_HASH"] " " ENVIRON["CCT_MSG"]
72
+ }
73
+ ' "$BACKLOG" > "$TEMP" && mv "$TEMP" "$BACKLOG"
74
+ fi # BACKLOG_DONE
75
+
76
+ # ── Part 2: Project-local docs/review-queue.md (in-repo, visible) ──
77
+
78
+ QUEUE="$PROJECT_ROOT/docs/review-queue.md"
79
+
80
+ # Only write if docs/ dir exists (opt-in per project — create docs/ to enable)
81
+ if [ -d "$PROJECT_ROOT/docs" ]; then
82
+
83
+ # Create queue file if it doesn't exist
84
+ if [ ! -f "$QUEUE" ]; then
85
+ cat > "$QUEUE" << 'QEOF'
86
+ # Review Queue
87
+
88
+ Commits pending review. Auto-managed:
89
+ - post-commit hook → adds new commits
90
+ - `/review` after audit → removes reviewed commits
91
+ - `/review mark-reviewed` → removes in bulk
92
+
93
+ QEOF
94
+ fi
95
+
96
+ # Only add if NOT already reviewed and NOT already in queue
97
+ if git tag --points-at "$FULL_HASH" 2>/dev/null | grep -q '^review'; then
98
+ : # already reviewed — don't add
99
+ elif grep -q "${HASH}" "$QUEUE" 2>/dev/null; then
100
+ : # already in queue
101
+ else
102
+ echo "- ${HASH} (${DATE}) ${MESSAGE}" >> "$QUEUE"
103
+ fi
104
+
105
+ fi
106
+
107
+ exit 0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codesift-mcp",
3
- "version": "0.5.27",
3
+ "version": "0.5.30",
4
4
  "description": "MCP server for code intelligence — 146 tools for symbol search, call graph, semantic search, route tracing, community detection, LSP bridge, secret detection, conversation search, and Hono framework intelligence",
5
5
  "license": "BSL-1.1",
6
6
  "author": "Greg Laskowski",
@@ -13,6 +13,7 @@
13
13
  "files": [
14
14
  "dist",
15
15
  "rules",
16
+ "hooks",
16
17
  "src/parser/languages",
17
18
  "README.md",
18
19
  "LICENSE"