kiri-mcp-server 0.22.2 → 0.22.3
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 +3 -3
- package/dist/package.json +2 -1
- package/dist/src/indexer/pipeline/filters/denylist.d.ts +20 -2
- package/dist/src/indexer/pipeline/filters/denylist.d.ts.map +1 -1
- package/dist/src/indexer/pipeline/filters/denylist.js +64 -98
- package/dist/src/indexer/pipeline/filters/denylist.js.map +1 -1
- package/package.json +2 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> Intelligent code context extraction for LLMs via Model Context Protocol
|
|
4
4
|
|
|
5
|
-
[](package.json)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
[](https://www.typescriptlang.org/)
|
|
8
8
|
[](https://modelcontextprotocol.io/)
|
|
@@ -139,10 +139,10 @@ See [CHANGELOG.md](CHANGELOG.md) for release notes.
|
|
|
139
139
|
|
|
140
140
|
**Recent highlights:**
|
|
141
141
|
|
|
142
|
+
- **v0.22.3**: Denylist filter using node-ignore library for proper gitignore compliance (Issue #154)
|
|
142
143
|
- **v0.22.2**: files_search path_prefix filter fix (Issue #162)
|
|
143
144
|
- **v0.22.1**: FTS index WAL visibility fix (Issue #158)
|
|
144
145
|
- **v0.21.0**: Daemon Watch Mode (`--watch` flag for auto re-indexing)
|
|
145
|
-
- **v0.20.2**: Build artifact fix (dist/ contained stale Japanese text)
|
|
146
146
|
|
|
147
147
|
---
|
|
148
148
|
|
|
@@ -221,4 +221,4 @@ Built with [Model Context Protocol](https://modelcontextprotocol.io/), [DuckDB](
|
|
|
221
221
|
|
|
222
222
|
---
|
|
223
223
|
|
|
224
|
-
**Status**: v0.22.
|
|
224
|
+
**Status**: v0.22.3 (Beta) - Production-ready for MCP clients
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kiri-mcp-server",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.3",
|
|
4
4
|
"description": "KIRI context extraction platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@9.0.0",
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"csv-parse": "^5.5.6",
|
|
85
85
|
"fast-deep-equal": "^3.1.3",
|
|
86
86
|
"gpt-tokenizer": "^3.2.0",
|
|
87
|
+
"ignore": "^7.0.5",
|
|
87
88
|
"p-queue": "^9.0.0",
|
|
88
89
|
"tree-sitter": "^0.22.0",
|
|
89
90
|
"tree-sitter-java": "^0.23.2",
|
|
@@ -6,10 +6,28 @@ export interface DenylistFilter {
|
|
|
6
6
|
diff(): string[];
|
|
7
7
|
}
|
|
8
8
|
/**
|
|
9
|
-
* denylist.ymlを読み込む
|
|
10
|
-
* ファイルが存在しない場合は空のパターン配列を返す(.gitignoreのみで動作可能にする)
|
|
9
|
+
* denylist.yml を読み込む
|
|
10
|
+
* ファイルが存在しない場合は空のパターン配列を返す(.gitignore のみで動作可能にする)
|
|
11
11
|
* ファイルが存在するが内容が無効な場合はエラーを投げる(設定ミスを検出可能にする)
|
|
12
12
|
*/
|
|
13
13
|
export declare function loadDenylistConfig(configPath?: string): DenylistConfig;
|
|
14
|
+
/**
|
|
15
|
+
* denylist フィルターを作成する
|
|
16
|
+
*
|
|
17
|
+
* `ignore` ライブラリ (node-ignore) を使用して gitignore 互換のフィルタリングを行う。
|
|
18
|
+
* 注意: ルートの .gitignore のみ読み込む簡易ローダ実装。
|
|
19
|
+
*
|
|
20
|
+
* gitignore 互換の動作:
|
|
21
|
+
* - ディレクトリにマッチした場合、その配下のファイルも自動的に除外
|
|
22
|
+
* - 先頭スラッシュ(/node_modules)はルート直下のみマッチ
|
|
23
|
+
* - スラッシュなし(node_modules)は任意の深さでマッチ
|
|
24
|
+
*
|
|
25
|
+
* セキュリティ: denylist.yml のパターンは .gitignore より優先される(後から適用)。
|
|
26
|
+
* denylist.yml では否定パターン(!pattern)は禁止。
|
|
27
|
+
*
|
|
28
|
+
* @param repoRoot リポジトリルートの絶対パス
|
|
29
|
+
* @param configPath オプションの denylist.yml パス
|
|
30
|
+
* @returns DenylistFilter インターフェース
|
|
31
|
+
*/
|
|
14
32
|
export declare function createDenylistFilter(repoRoot: string, configPath?: string): DenylistFilter;
|
|
15
33
|
//# sourceMappingURL=denylist.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"denylist.d.ts","sourceRoot":"","sources":["../../../../../src/indexer/pipeline/filters/denylist.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"denylist.d.ts","sourceRoot":"","sources":["../../../../../src/indexer/pipeline/filters/denylist.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,IAAI,IAAI,MAAM,EAAE,CAAC;CAClB;AAkBD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CAwBtE;AAwBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,CA0C1F"}
|
|
@@ -1,100 +1,11 @@
|
|
|
1
1
|
import { existsSync, readFileSync } from "node:fs";
|
|
2
2
|
import { resolve } from "node:path";
|
|
3
|
+
import ignore from "ignore";
|
|
3
4
|
import { parseSimpleYaml } from "../../../shared/utils/simpleYaml.js";
|
|
4
5
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* Gitignore rules:
|
|
8
|
-
* - No slash: matches at any depth (e.g., node_modules, *.log)
|
|
9
|
-
* - Trailing slash only: matches directory at any depth (e.g., node_modules/)
|
|
10
|
-
* - Leading slash: matches only at root (e.g., /node_modules/)
|
|
11
|
-
* - Intermediate slash: matches relative path (e.g., src/generated/)
|
|
12
|
-
*
|
|
13
|
-
* @param pattern Glob pattern string
|
|
14
|
-
* @returns Pattern classification result
|
|
15
|
-
*/
|
|
16
|
-
function classifyPattern(pattern) {
|
|
17
|
-
const hasTrailingSlash = pattern.endsWith("/");
|
|
18
|
-
const trimmed = hasTrailingSlash ? pattern.slice(0, -1) : pattern;
|
|
19
|
-
// 先頭スラッシュあり: ルート相対
|
|
20
|
-
if (trimmed.startsWith("/")) {
|
|
21
|
-
return {
|
|
22
|
-
type: "rooted",
|
|
23
|
-
hasTrailingSlash,
|
|
24
|
-
normalizedPattern: trimmed.slice(1),
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
// Intermediate slash: relative path (gitignore spec)
|
|
28
|
-
// Patterns starting with **/ are treated as "anywhere" type
|
|
29
|
-
if (trimmed.includes("/") && !trimmed.startsWith("**/")) {
|
|
30
|
-
return {
|
|
31
|
-
type: "relative",
|
|
32
|
-
hasTrailingSlash,
|
|
33
|
-
normalizedPattern: trimmed,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
// No slash, or starts with **/: matches at any depth
|
|
37
|
-
// For **/ prefix patterns, strip the **/ and let the "anywhere" prefix handle depth
|
|
38
|
-
const strippedPattern = trimmed.startsWith("**/") ? trimmed.slice(3) : trimmed;
|
|
39
|
-
return {
|
|
40
|
-
type: "anywhere",
|
|
41
|
-
hasTrailingSlash,
|
|
42
|
-
normalizedPattern: strippedPattern,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Globパターンを正規表現に変換(ReDoS対策済み、gitignore仕様準拠)
|
|
47
|
-
*
|
|
48
|
-
* gitignore仕様:
|
|
49
|
-
* - スラッシュなし/末尾スラッシュのみ: 任意の深さでマッチ
|
|
50
|
-
* 例: node_modules/ → ルートでもサブディレクトリでもマッチ
|
|
51
|
-
* - 先頭スラッシュあり: ルートのみマッチ
|
|
52
|
-
* 例: /node_modules/ → ルート直下のみ
|
|
53
|
-
* - 中間スラッシュあり: 相対パスとして解釈
|
|
54
|
-
* 例: src/generated/ → src/generated/ にのみマッチ
|
|
55
|
-
* - 末尾スラッシュ: ディレクトリのみマッチ(サブパスも含む)
|
|
56
|
-
*
|
|
57
|
-
* @param pattern Globパターン文字列
|
|
58
|
-
* @returns コンパイル済み正規表現
|
|
59
|
-
* @throws パターンが長すぎる、または複雑すぎる場合
|
|
6
|
+
* .gitignore ファイルを読み込んでパターン配列を返す
|
|
7
|
+
* ファイルが存在しない場合は空配列を返す
|
|
60
8
|
*/
|
|
61
|
-
function toRegex(pattern) {
|
|
62
|
-
// ReDoS対策: パターン長の制限
|
|
63
|
-
if (pattern.length > 500) {
|
|
64
|
-
throw new Error("Denylist pattern exceeds maximum length. Simplify the pattern.");
|
|
65
|
-
}
|
|
66
|
-
// 空パターンや過度に広いパターンを拒否
|
|
67
|
-
if (!pattern || pattern === "/" || pattern === "**" || pattern === "**/") {
|
|
68
|
-
throw new Error("Empty or overly broad denylist pattern. Provide a specific pattern.");
|
|
69
|
-
}
|
|
70
|
-
const { type, hasTrailingSlash, normalizedPattern } = classifyPattern(pattern);
|
|
71
|
-
// 正規表現用にエスケープ(**は後で処理するためプレースホルダに)
|
|
72
|
-
const escaped = normalizedPattern
|
|
73
|
-
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
74
|
-
.replace(/\*\*/g, "::DOUBLESTAR::");
|
|
75
|
-
// Convert wildcards to regex
|
|
76
|
-
// IMPORTANT: Replace single * before doublestar placeholder
|
|
77
|
-
// to avoid .* having its * replaced with [^/]*
|
|
78
|
-
const withWildcards = escaped
|
|
79
|
-
.replace(/\*/g, "[^/]*")
|
|
80
|
-
.replace(/::DOUBLESTAR::/g, ".*")
|
|
81
|
-
.replace(/\?/g, "[^/]");
|
|
82
|
-
// ディレクトリの場合のサフィックス(サブパスにもマッチ)
|
|
83
|
-
const suffix = hasTrailingSlash ? "(?:/.*)?" : "";
|
|
84
|
-
// パターンタイプに応じてプレフィックス決定
|
|
85
|
-
// - anywhere: 任意の深さでマッチ(先頭または任意のディレクトリ境界から)
|
|
86
|
-
// - rooted/relative: ルートからのみマッチ
|
|
87
|
-
const prefix = type === "anywhere" ? "(?:^|.*/)" : "^";
|
|
88
|
-
const finalPattern = `${prefix}${withWildcards}${suffix}$`;
|
|
89
|
-
// ReDoS対策: 最終パターンの複雑度チェック(ネストした量指定子)
|
|
90
|
-
// [^/]* は bounded なので安全、.* のみを危険なパターンとしてカウント
|
|
91
|
-
// [^/]* を除去してから危険な量指定子をチェック
|
|
92
|
-
const withoutBounded = finalPattern.replace(/\[\^\/\]\*/g, "");
|
|
93
|
-
if (/(\.\*|\w\+|\{\d+,\}).*(\.\*|\w\+|\{\d+,\}).*(\.\*|\w\+|\{\d+,\})/.test(withoutBounded)) {
|
|
94
|
-
throw new Error("Denylist pattern is too complex. Use simpler glob patterns.");
|
|
95
|
-
}
|
|
96
|
-
return new RegExp(finalPattern);
|
|
97
|
-
}
|
|
98
9
|
function loadGitignore(repoRoot) {
|
|
99
10
|
try {
|
|
100
11
|
const raw = readFileSync(resolve(repoRoot, ".gitignore"), "utf8");
|
|
@@ -108,8 +19,8 @@ function loadGitignore(repoRoot) {
|
|
|
108
19
|
}
|
|
109
20
|
}
|
|
110
21
|
/**
|
|
111
|
-
* denylist.ymlを読み込む
|
|
112
|
-
* ファイルが存在しない場合は空のパターン配列を返す(.gitignoreのみで動作可能にする)
|
|
22
|
+
* denylist.yml を読み込む
|
|
23
|
+
* ファイルが存在しない場合は空のパターン配列を返す(.gitignore のみで動作可能にする)
|
|
113
24
|
* ファイルが存在するが内容が無効な場合はエラーを投げる(設定ミスを検出可能にする)
|
|
114
25
|
*/
|
|
115
26
|
export function loadDenylistConfig(configPath) {
|
|
@@ -131,17 +42,72 @@ export function loadDenylistConfig(configPath) {
|
|
|
131
42
|
}
|
|
132
43
|
return { patterns };
|
|
133
44
|
}
|
|
45
|
+
// Validate patterns and throw error for overly broad or negation patterns.
|
|
46
|
+
// Overly broad patterns match all files and are likely configuration mistakes.
|
|
47
|
+
// Negation patterns are forbidden in denylist for security (denylist must always deny).
|
|
48
|
+
function validatePatterns(patterns) {
|
|
49
|
+
const overlyBroadPatterns = new Set(["", "**", "**/", "/"]);
|
|
50
|
+
for (const pattern of patterns) {
|
|
51
|
+
if (overlyBroadPatterns.has(pattern)) {
|
|
52
|
+
throw new Error(`Overly broad denylist pattern: "${pattern}". ` +
|
|
53
|
+
"Use a more specific pattern or remove this entry.");
|
|
54
|
+
}
|
|
55
|
+
// 否定パターンはdenylistでは禁止(セキュリティ上の理由)
|
|
56
|
+
if (pattern.startsWith("!")) {
|
|
57
|
+
throw new Error(`Negation pattern in denylist: "${pattern}". ` +
|
|
58
|
+
"Denylist patterns must always deny; negation is not allowed.");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* denylist フィルターを作成する
|
|
64
|
+
*
|
|
65
|
+
* `ignore` ライブラリ (node-ignore) を使用して gitignore 互換のフィルタリングを行う。
|
|
66
|
+
* 注意: ルートの .gitignore のみ読み込む簡易ローダ実装。
|
|
67
|
+
*
|
|
68
|
+
* gitignore 互換の動作:
|
|
69
|
+
* - ディレクトリにマッチした場合、その配下のファイルも自動的に除外
|
|
70
|
+
* - 先頭スラッシュ(/node_modules)はルート直下のみマッチ
|
|
71
|
+
* - スラッシュなし(node_modules)は任意の深さでマッチ
|
|
72
|
+
*
|
|
73
|
+
* セキュリティ: denylist.yml のパターンは .gitignore より優先される(後から適用)。
|
|
74
|
+
* denylist.yml では否定パターン(!pattern)は禁止。
|
|
75
|
+
*
|
|
76
|
+
* @param repoRoot リポジトリルートの絶対パス
|
|
77
|
+
* @param configPath オプションの denylist.yml パス
|
|
78
|
+
* @returns DenylistFilter インターフェース
|
|
79
|
+
*/
|
|
134
80
|
export function createDenylistFilter(repoRoot, configPath) {
|
|
135
81
|
const { patterns } = loadDenylistConfig(configPath);
|
|
82
|
+
// denylist.yml のパターンのみバリデーション(.gitignore はユーザーコントロール外の可能性があるため)
|
|
83
|
+
validatePatterns(patterns);
|
|
136
84
|
const gitignorePatterns = loadGitignore(repoRoot);
|
|
137
|
-
|
|
138
|
-
const
|
|
139
|
-
const diffEntries = gitignorePatterns.filter((pattern) => !
|
|
85
|
+
// diff() 用: .gitignore にあって denylist.yml にないパターン
|
|
86
|
+
const patternSet = new Set(patterns);
|
|
87
|
+
const diffEntries = gitignorePatterns.filter((pattern) => !patternSet.has(pattern));
|
|
88
|
+
// ignore インスタンスを作成
|
|
89
|
+
// 重要: gitignore を先に追加し、denylist を後に追加することで denylist が優先される
|
|
90
|
+
// (ignore ライブラリは「後勝ち」セマンティクス)
|
|
91
|
+
const ig = ignore().add(gitignorePatterns).add(patterns);
|
|
140
92
|
return {
|
|
93
|
+
/**
|
|
94
|
+
* 指定されたパスが除外対象かどうかを判定
|
|
95
|
+
* @param path リポジトリルートからの相対パス
|
|
96
|
+
* @returns 除外対象の場合 true
|
|
97
|
+
*/
|
|
141
98
|
isDenied(path) {
|
|
99
|
+
// ignore ライブラリは先頭スラッシュなしのパスを期待する
|
|
142
100
|
const normalized = path.startsWith("/") ? path.slice(1) : path;
|
|
143
|
-
|
|
101
|
+
// 空パスはルートディレクトリ自体を表すので除外しない
|
|
102
|
+
if (normalized === "") {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
return ig.ignores(normalized);
|
|
144
106
|
},
|
|
107
|
+
/**
|
|
108
|
+
* .gitignore に含まれていて denylist.yml に含まれていないパターンを返す
|
|
109
|
+
* デバッグや差分確認用
|
|
110
|
+
*/
|
|
145
111
|
diff() {
|
|
146
112
|
return diffEntries;
|
|
147
113
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"denylist.js","sourceRoot":"","sources":["../../../../../src/indexer/pipeline/filters/denylist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,
|
|
1
|
+
{"version":3,"file":"denylist.js","sourceRoot":"","sources":["../../../../../src/indexer/pipeline/filters/denylist.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kiri-mcp-server",
|
|
3
|
-
"version": "0.22.
|
|
3
|
+
"version": "0.22.3",
|
|
4
4
|
"description": "KIRI context extraction platform",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"packageManager": "pnpm@9.0.0",
|
|
@@ -84,6 +84,7 @@
|
|
|
84
84
|
"csv-parse": "^5.5.6",
|
|
85
85
|
"fast-deep-equal": "^3.1.3",
|
|
86
86
|
"gpt-tokenizer": "^3.2.0",
|
|
87
|
+
"ignore": "^7.0.5",
|
|
87
88
|
"p-queue": "^9.0.0",
|
|
88
89
|
"tree-sitter": "^0.22.0",
|
|
89
90
|
"tree-sitter-java": "^0.23.2",
|