@search-docs/mcp-server 1.0.14 → 1.0.15
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/dist/__tests__/helpers/test-setup.d.ts +33 -0
- package/dist/__tests__/helpers/test-setup.d.ts.map +1 -0
- package/dist/__tests__/helpers/test-setup.js +106 -0
- package/dist/__tests__/helpers/test-setup.js.map +1 -0
- package/dist/__tests__/helpers/types.d.ts +22 -0
- package/dist/__tests__/helpers/types.d.ts.map +1 -0
- package/dist/__tests__/helpers/types.js +5 -0
- package/dist/__tests__/helpers/types.js.map +1 -0
- package/dist/__tests__/mcp-server-basic.test.d.ts +16 -0
- package/dist/__tests__/mcp-server-basic.test.d.ts.map +1 -0
- package/dist/__tests__/mcp-server-basic.test.js +113 -0
- package/dist/__tests__/mcp-server-basic.test.js.map +1 -0
- package/dist/__tests__/server-lifecycle.test.d.ts +15 -0
- package/dist/__tests__/server-lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/server-lifecycle.test.js +171 -0
- package/dist/__tests__/server-lifecycle.test.js.map +1 -0
- package/dist/__tests__/server-state-transition-v2.test.d.ts +7 -0
- package/dist/__tests__/server-state-transition-v2.test.d.ts.map +1 -0
- package/dist/__tests__/server-state-transition-v2.test.js +182 -0
- package/dist/__tests__/server-state-transition-v2.test.js.map +1 -0
- package/dist/__tests__/server-state.test.d.ts +11 -0
- package/dist/__tests__/server-state.test.d.ts.map +1 -0
- package/dist/__tests__/server-state.test.js +123 -0
- package/dist/__tests__/server-state.test.js.map +1 -0
- package/dist/__tests__/state.test.d.ts +5 -0
- package/dist/__tests__/state.test.d.ts.map +1 -0
- package/dist/__tests__/state.test.js +114 -0
- package/dist/__tests__/state.test.js.map +1 -0
- package/dist/server-manager.d.ts +1 -1
- package/dist/server-manager.d.ts.map +1 -1
- package/dist/server-manager.js +68 -15
- package/dist/server-manager.js.map +1 -1
- package/dist/server-state-transition.test.d.ts +9 -0
- package/dist/server-state-transition.test.d.ts.map +1 -0
- package/dist/server-state-transition.test.js +267 -0
- package/dist/server-state-transition.test.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +91 -270
- package/dist/server.js.map +1 -1
- package/dist/server.test.js +32 -1
- package/dist/server.test.js.map +1 -1
- package/dist/state.d.ts +42 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +96 -0
- package/dist/state.js.map +1 -0
- package/dist/tools/__tests__/index-status.test.d.ts +5 -0
- package/dist/tools/__tests__/index-status.test.d.ts.map +1 -0
- package/dist/tools/__tests__/index-status.test.js +123 -0
- package/dist/tools/__tests__/index-status.test.js.map +1 -0
- package/dist/tools/get-document.d.ts +10 -0
- package/dist/tools/get-document.d.ts.map +1 -0
- package/dist/tools/get-document.js +73 -0
- package/dist/tools/get-document.js.map +1 -0
- package/dist/tools/index-status.d.ts +10 -0
- package/dist/tools/index-status.d.ts.map +1 -0
- package/dist/tools/index-status.js +51 -0
- package/dist/tools/index-status.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/init.d.ts +10 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +71 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/search.d.ts +10 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +92 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/server-control.d.ts +14 -0
- package/dist/tools/server-control.d.ts.map +1 -0
- package/dist/tools/server-control.js +121 -0
- package/dist/tools/server-control.js.map +1 -0
- package/dist/tools/system-status.d.ts +10 -0
- package/dist/tools/system-status.d.ts.map +1 -0
- package/dist/tools/system-status.js +68 -0
- package/dist/tools/system-status.js.map +1 -0
- package/dist/tools/types.d.ts +17 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +5 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/utils.d.ts +19 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +36 -0
- package/dist/utils.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* テストヘルパー - テスト環境のセットアップとティアダウン
|
|
3
|
+
*/
|
|
4
|
+
import { MCPServiceE2ETester } from '@coeiro-operator/mcp-debug';
|
|
5
|
+
/**
|
|
6
|
+
* テスト環境のオプション
|
|
7
|
+
*/
|
|
8
|
+
export interface TestEnvironmentOptions {
|
|
9
|
+
/** テストディレクトリ名のプレフィックス */
|
|
10
|
+
prefix?: string;
|
|
11
|
+
/** 設定ファイルを作成するか */
|
|
12
|
+
createConfig?: boolean;
|
|
13
|
+
/** サーバポート */
|
|
14
|
+
port?: number;
|
|
15
|
+
/** インデックスディレクトリを作成するか(auto-start用) */
|
|
16
|
+
createIndexDir?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* テスト環境
|
|
20
|
+
*/
|
|
21
|
+
export interface TestEnvironment {
|
|
22
|
+
/** テストディレクトリのパス */
|
|
23
|
+
testDir: string;
|
|
24
|
+
/** MCPテスター */
|
|
25
|
+
tester: MCPServiceE2ETester;
|
|
26
|
+
/** クリーンアップ関数 */
|
|
27
|
+
cleanup: () => Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* テスト環境をセットアップ
|
|
31
|
+
*/
|
|
32
|
+
export declare function setupTestEnvironment(options?: TestEnvironmentOptions): Promise<TestEnvironment>;
|
|
33
|
+
//# sourceMappingURL=test-setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/test-setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAmB,MAAM,4BAA4B,CAAC;AAQlF;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mBAAmB;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,MAAM,EAAE,mBAAmB,CAAC;IAC5B,gBAAgB;IAChB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,eAAe,CAAC,CAyG1B"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* テストヘルパー - テスト環境のセットアップとティアダウン
|
|
3
|
+
*/
|
|
4
|
+
import { createMCPTester } from '@coeiro-operator/mcp-debug';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
10
|
+
/**
|
|
11
|
+
* テスト環境をセットアップ
|
|
12
|
+
*/
|
|
13
|
+
export async function setupTestEnvironment(options = {}) {
|
|
14
|
+
const { prefix = 'search-docs-test', createConfig = false, port = 54321, createIndexDir = false, } = options;
|
|
15
|
+
// テスト用ディレクトリを作成
|
|
16
|
+
const testDir = path.join('/tmp', `${prefix}-${Date.now()}`);
|
|
17
|
+
await fs.mkdir(testDir, { recursive: true });
|
|
18
|
+
// 設定ファイルを作成(必要な場合)
|
|
19
|
+
if (createConfig) {
|
|
20
|
+
const configPath = path.join(testDir, '.search-docs.json');
|
|
21
|
+
const config = {
|
|
22
|
+
version: '1.0',
|
|
23
|
+
project: {
|
|
24
|
+
name: 'test-project',
|
|
25
|
+
root: '.',
|
|
26
|
+
},
|
|
27
|
+
files: {
|
|
28
|
+
include: ['**/*.md'],
|
|
29
|
+
exclude: ['**/node_modules/**'],
|
|
30
|
+
ignoreGitignore: true,
|
|
31
|
+
},
|
|
32
|
+
indexing: {
|
|
33
|
+
maxTokensPerSection: 2000,
|
|
34
|
+
minTokensForSplit: 100,
|
|
35
|
+
maxDepth: 3,
|
|
36
|
+
vectorDimension: 256,
|
|
37
|
+
embeddingModel: 'cl-nagoya/ruri-v3-30m',
|
|
38
|
+
},
|
|
39
|
+
search: {
|
|
40
|
+
defaultLimit: 10,
|
|
41
|
+
maxLimit: 100,
|
|
42
|
+
includeCleanOnly: false,
|
|
43
|
+
},
|
|
44
|
+
server: {
|
|
45
|
+
host: 'localhost',
|
|
46
|
+
port,
|
|
47
|
+
protocol: 'json-rpc',
|
|
48
|
+
},
|
|
49
|
+
storage: {
|
|
50
|
+
documentsPath: '.search-docs/documents',
|
|
51
|
+
indexPath: '.search-docs/index',
|
|
52
|
+
cachePath: '.search-docs/cache',
|
|
53
|
+
},
|
|
54
|
+
worker: {
|
|
55
|
+
enabled: true,
|
|
56
|
+
interval: 5000,
|
|
57
|
+
maxConcurrent: 3,
|
|
58
|
+
},
|
|
59
|
+
watcher: {
|
|
60
|
+
enabled: true,
|
|
61
|
+
debounceMs: 1000,
|
|
62
|
+
awaitWriteFinishMs: 2000,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
await fs.writeFile(configPath, JSON.stringify(config, null, 2), 'utf-8');
|
|
66
|
+
}
|
|
67
|
+
// インデックスディレクトリを作成(auto-startをトリガーする場合)
|
|
68
|
+
if (createIndexDir) {
|
|
69
|
+
const indexPath = path.join(testDir, '.search-docs', 'index');
|
|
70
|
+
await fs.mkdir(indexPath, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
// MCPサーバーを起動
|
|
73
|
+
const serverPath = path.resolve(__dirname, '../../../dist/server.js');
|
|
74
|
+
const tester = await createMCPTester({
|
|
75
|
+
serverPath,
|
|
76
|
+
args: ['--project-dir', testDir],
|
|
77
|
+
});
|
|
78
|
+
await tester.waitUntilReady();
|
|
79
|
+
// クリーンアップ関数
|
|
80
|
+
const cleanup = async () => {
|
|
81
|
+
// サーバが起動している場合は停止
|
|
82
|
+
if (tester) {
|
|
83
|
+
try {
|
|
84
|
+
await tester.callTool('server_stop', {});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
// サーバが既に停止している場合はエラーを無視
|
|
88
|
+
console.error('Note: server_stop failed (may already be stopped):', error);
|
|
89
|
+
}
|
|
90
|
+
await tester.cleanup();
|
|
91
|
+
}
|
|
92
|
+
// テストディレクトリを削除
|
|
93
|
+
try {
|
|
94
|
+
await fs.rm(testDir, { recursive: true, force: true });
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
console.error('Failed to cleanup test directory:', error);
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
return {
|
|
101
|
+
testDir,
|
|
102
|
+
tester,
|
|
103
|
+
cleanup,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=test-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/test-setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAuB,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClF,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AA4B3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAkC,EAAE;IAEpC,MAAM,EACJ,MAAM,GAAG,kBAAkB,EAC3B,YAAY,GAAG,KAAK,EACpB,IAAI,GAAG,KAAK,EACZ,cAAc,GAAG,KAAK,GACvB,GAAG,OAAO,CAAC;IAEZ,gBAAgB;IAChB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,mBAAmB;IACnB,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC;QAC3D,MAAM,MAAM,GAAG;YACb,OAAO,EAAE,KAAK;YACd,OAAO,EAAE;gBACP,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,GAAG;aACV;YACD,KAAK,EAAE;gBACL,OAAO,EAAE,CAAC,SAAS,CAAC;gBACpB,OAAO,EAAE,CAAC,oBAAoB,CAAC;gBAC/B,eAAe,EAAE,IAAI;aACtB;YACD,QAAQ,EAAE;gBACR,mBAAmB,EAAE,IAAI;gBACzB,iBAAiB,EAAE,GAAG;gBACtB,QAAQ,EAAE,CAAC;gBACX,eAAe,EAAE,GAAG;gBACpB,cAAc,EAAE,uBAAuB;aACxC;YACD,MAAM,EAAE;gBACN,YAAY,EAAE,EAAE;gBAChB,QAAQ,EAAE,GAAG;gBACb,gBAAgB,EAAE,KAAK;aACxB;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,WAAW;gBACjB,IAAI;gBACJ,QAAQ,EAAE,UAAU;aACrB;YACD,OAAO,EAAE;gBACP,aAAa,EAAE,wBAAwB;gBACvC,SAAS,EAAE,oBAAoB;gBAC/B,SAAS,EAAE,oBAAoB;aAChC;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,CAAC;aACjB;YACD,OAAO,EAAE;gBACP,OAAO,EAAE,IAAI;gBACb,UAAU,EAAE,IAAI;gBAChB,kBAAkB,EAAE,IAAI;aACzB;SACF,CAAC;QAEF,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED,uCAAuC;IACvC,IAAI,cAAc,EAAE,CAAC;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;QAC9D,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,aAAa;IACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;QACnC,UAAU;QACV,IAAI,EAAE,CAAC,eAAe,EAAE,OAAO,CAAC;KACjC,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,cAAc,EAAE,CAAC;IAE9B,YAAY;IACZ,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;QACzB,kBAAkB;QAClB,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wBAAwB;gBACxB,OAAO,CAAC,KAAK,CAAC,oDAAoD,EAAE,KAAK,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAED,eAAe;QACf,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,OAAO;QACP,MAAM;QACN,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* テスト用の型定義
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* MCP型定義
|
|
6
|
+
*/
|
|
7
|
+
export interface MCPTool {
|
|
8
|
+
name: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
inputSchema?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface MCPToolsListResponse {
|
|
13
|
+
tools: MCPTool[];
|
|
14
|
+
}
|
|
15
|
+
export interface MCPTextContent {
|
|
16
|
+
type: 'text';
|
|
17
|
+
text: string;
|
|
18
|
+
}
|
|
19
|
+
export interface MCPToolResult {
|
|
20
|
+
content?: MCPTextContent[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/__tests__/helpers/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/__tests__/helpers/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server経由のserver start/stop 基本動作テスト
|
|
3
|
+
*
|
|
4
|
+
* 目的: MCPサーバ経由でのserver_start/server_stopツールの基本動作を確認する
|
|
5
|
+
*
|
|
6
|
+
* テスト内容:
|
|
7
|
+
* 1. MCPサーバを起動(search-docsサーバは起動しない)
|
|
8
|
+
* 2. server_startツールを呼び出し
|
|
9
|
+
* 3. PIDファイルが作成される
|
|
10
|
+
* 4. search-docsサーバプロセスが実行中
|
|
11
|
+
* 5. server_stopツールを呼び出し
|
|
12
|
+
* 6. search-docsサーバプロセスが停止する
|
|
13
|
+
* 7. PIDファイルが削除される
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=mcp-server-basic.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-basic.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/mcp-server-basic.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server経由のserver start/stop 基本動作テスト
|
|
3
|
+
*
|
|
4
|
+
* 目的: MCPサーバ経由でのserver_start/server_stopツールの基本動作を確認する
|
|
5
|
+
*
|
|
6
|
+
* テスト内容:
|
|
7
|
+
* 1. MCPサーバを起動(search-docsサーバは起動しない)
|
|
8
|
+
* 2. server_startツールを呼び出し
|
|
9
|
+
* 3. PIDファイルが作成される
|
|
10
|
+
* 4. search-docsサーバプロセスが実行中
|
|
11
|
+
* 5. server_stopツールを呼び出し
|
|
12
|
+
* 6. search-docsサーバプロセスが停止する
|
|
13
|
+
* 7. PIDファイルが削除される
|
|
14
|
+
*/
|
|
15
|
+
import { describe, test, expect, afterEach } from 'vitest';
|
|
16
|
+
import { setupTestEnvironment } from './helpers/test-setup.js';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
import * as fs from 'fs/promises';
|
|
19
|
+
describe('MCP Server経由 server start/stop 基本動作', () => {
|
|
20
|
+
let env = null;
|
|
21
|
+
afterEach(async () => {
|
|
22
|
+
if (env) {
|
|
23
|
+
// PIDファイルが残っていたら、プロセスを停止
|
|
24
|
+
const pidFilePath = path.join(env.testDir, '.search-docs', 'server.pid');
|
|
25
|
+
try {
|
|
26
|
+
const pidContent = await fs.readFile(pidFilePath, 'utf-8');
|
|
27
|
+
const pidData = JSON.parse(pidContent);
|
|
28
|
+
// プロセスが生きていたら強制終了
|
|
29
|
+
try {
|
|
30
|
+
process.kill(pidData.pid, 0); // プロセス存在確認
|
|
31
|
+
process.kill(pidData.pid, 'SIGTERM'); // 停止
|
|
32
|
+
await new Promise((resolve) => setTimeout(resolve, 1000)); // 停止待機
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
// プロセスが既に停止している場合は無視
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
// PIDファイルがない場合は無視
|
|
40
|
+
}
|
|
41
|
+
await env.cleanup();
|
|
42
|
+
env = null;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
test('server_start→PIDファイル作成→server_stop→PIDファイル削除の完全なライフサイクル', async () => {
|
|
46
|
+
// テスト環境をセットアップ(search-docsサーバは起動しない)
|
|
47
|
+
env = await setupTestEnvironment({
|
|
48
|
+
prefix: 'mcp-basic',
|
|
49
|
+
createConfig: true,
|
|
50
|
+
port: 54410,
|
|
51
|
+
createIndexDir: false, // auto-startしない
|
|
52
|
+
});
|
|
53
|
+
const pidFilePath = path.join(env.testDir, '.search-docs', 'server.pid');
|
|
54
|
+
// 1. server_startツールを呼び出し
|
|
55
|
+
const startResult = await env.tester.callTool('server_start', {});
|
|
56
|
+
expect(startResult.success).toBe(true);
|
|
57
|
+
const startContent = startResult.result?.content?.[0]?.text;
|
|
58
|
+
expect(startContent).toContain('✅ サーバを起動しました');
|
|
59
|
+
// サーバ起動を待機
|
|
60
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
61
|
+
// 2. PIDファイルが作成されていることを確認
|
|
62
|
+
const pidFileExists = await fs
|
|
63
|
+
.access(pidFilePath)
|
|
64
|
+
.then(() => true)
|
|
65
|
+
.catch(() => false);
|
|
66
|
+
expect(pidFileExists).toBe(true);
|
|
67
|
+
// 3. PIDファイルの内容を確認
|
|
68
|
+
const pidContent = await fs.readFile(pidFilePath, 'utf-8');
|
|
69
|
+
const pidData = JSON.parse(pidContent);
|
|
70
|
+
expect(pidData).toHaveProperty('pid');
|
|
71
|
+
expect(pidData).toHaveProperty('port');
|
|
72
|
+
expect(pidData.port).toBe(54410);
|
|
73
|
+
expect(pidData).toHaveProperty('projectRoot');
|
|
74
|
+
// macOSでは/tmpは/private/tmpへのシンボリックリンクなので、両方を許容
|
|
75
|
+
const normalizedProjectRoot = pidData.projectRoot.replace('/private', '');
|
|
76
|
+
const normalizedTestDir = env.testDir.replace('/private', '');
|
|
77
|
+
expect(normalizedProjectRoot).toBe(normalizedTestDir);
|
|
78
|
+
// 4. プロセスが実行中であることを確認
|
|
79
|
+
let processExists = false;
|
|
80
|
+
try {
|
|
81
|
+
process.kill(pidData.pid, 0); // シグナル0で存在確認のみ
|
|
82
|
+
processExists = true;
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
processExists = false;
|
|
86
|
+
}
|
|
87
|
+
expect(processExists).toBe(true);
|
|
88
|
+
// 5. server_stopツールを呼び出し
|
|
89
|
+
const stopResult = await env.tester.callTool('server_stop', {});
|
|
90
|
+
expect(stopResult.success).toBe(true);
|
|
91
|
+
const stopContent = stopResult.result?.content?.[0]?.text;
|
|
92
|
+
expect(stopContent).toContain('✅ サーバを停止しました');
|
|
93
|
+
// 停止完了を待機
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
95
|
+
// 6. プロセスが停止していることを確認
|
|
96
|
+
let processStopped = false;
|
|
97
|
+
try {
|
|
98
|
+
process.kill(pidData.pid, 0);
|
|
99
|
+
processStopped = false;
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
processStopped = true;
|
|
103
|
+
}
|
|
104
|
+
expect(processStopped).toBe(true);
|
|
105
|
+
// 7. PIDファイルが削除されていることを確認
|
|
106
|
+
const pidFileDeleted = await fs
|
|
107
|
+
.access(pidFilePath)
|
|
108
|
+
.then(() => false)
|
|
109
|
+
.catch(() => true);
|
|
110
|
+
expect(pidFileDeleted).toBe(true);
|
|
111
|
+
}, 30000); // 30秒のタイムアウト
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=mcp-server-basic.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server-basic.test.js","sourceRoot":"","sources":["../../src/__tests__/mcp-server-basic.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server ライフサイクルテスト
|
|
3
|
+
*
|
|
4
|
+
* 目的: search-docsサーバの起動・停止、状態遷移の操作が正しく動作するかを確認する。
|
|
5
|
+
*
|
|
6
|
+
* 特徴: search-docsサーバを実際に起動/停止する動的なテスト
|
|
7
|
+
* 各テストは独立した一時ディレクトリとポート番号を使用
|
|
8
|
+
*
|
|
9
|
+
* テストのコンセプト:
|
|
10
|
+
* - テストの単位とプロセスの寿命を合わせる
|
|
11
|
+
* - 操作(init, server_start/stop)の動作を検証
|
|
12
|
+
* - 各テスト後に確実にsearch-docsサーバを停止
|
|
13
|
+
*/
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=server-lifecycle.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-lifecycle.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/server-lifecycle.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server ライフサイクルテスト
|
|
3
|
+
*
|
|
4
|
+
* 目的: search-docsサーバの起動・停止、状態遷移の操作が正しく動作するかを確認する。
|
|
5
|
+
*
|
|
6
|
+
* 特徴: search-docsサーバを実際に起動/停止する動的なテスト
|
|
7
|
+
* 各テストは独立した一時ディレクトリとポート番号を使用
|
|
8
|
+
*
|
|
9
|
+
* テストのコンセプト:
|
|
10
|
+
* - テストの単位とプロセスの寿命を合わせる
|
|
11
|
+
* - 操作(init, server_start/stop)の動作を検証
|
|
12
|
+
* - 各テスト後に確実にsearch-docsサーバを停止
|
|
13
|
+
*/
|
|
14
|
+
import { describe, test, expect, afterEach } from 'vitest';
|
|
15
|
+
import { setupTestEnvironment } from './helpers/test-setup.js';
|
|
16
|
+
import * as fs from 'fs/promises';
|
|
17
|
+
import * as path from 'path';
|
|
18
|
+
describe('MCP Server ライフサイクルテスト', () => {
|
|
19
|
+
let env = null;
|
|
20
|
+
afterEach(async () => {
|
|
21
|
+
if (env) {
|
|
22
|
+
// search-docsサーバが起動している可能性があるため、
|
|
23
|
+
// server_stopを試みてからクリーンアップ
|
|
24
|
+
try {
|
|
25
|
+
await env.tester.callTool('server_stop', {});
|
|
26
|
+
// 停止完了を待機
|
|
27
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
// 既に停止している、または起動していない場合は無視
|
|
31
|
+
}
|
|
32
|
+
await env.cleanup();
|
|
33
|
+
env = null;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
describe('init操作', () => {
|
|
37
|
+
test('initツールで設定ファイルを作成できる', async () => {
|
|
38
|
+
env = await setupTestEnvironment({
|
|
39
|
+
prefix: 'lifecycle-init',
|
|
40
|
+
createConfig: false,
|
|
41
|
+
port: 54330,
|
|
42
|
+
});
|
|
43
|
+
const result = await env.tester.callTool('init', {
|
|
44
|
+
port: 54330,
|
|
45
|
+
});
|
|
46
|
+
expect(result.success).toBe(true);
|
|
47
|
+
const content = result.result?.content?.[0]?.text;
|
|
48
|
+
expect(content).toContain('✅ 設定ファイルの初期化が完了しました');
|
|
49
|
+
expect(content).toContain('📝 設定ファイルの重要な項目');
|
|
50
|
+
// 設定ファイルが実際に作成されたことを確認
|
|
51
|
+
const configPath = path.join(env.testDir, '.search-docs.json');
|
|
52
|
+
const configExists = await fs
|
|
53
|
+
.access(configPath)
|
|
54
|
+
.then(() => true)
|
|
55
|
+
.catch(() => false);
|
|
56
|
+
expect(configExists).toBe(true);
|
|
57
|
+
// 設定内容を確認
|
|
58
|
+
const configContent = await fs.readFile(configPath, 'utf-8');
|
|
59
|
+
const config = JSON.parse(configContent);
|
|
60
|
+
expect(config.server.port).toBe(54330);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('サーバ起動・停止', () => {
|
|
64
|
+
test('server_startでサーバを起動し、server_stopで停止できる', async () => {
|
|
65
|
+
env = await setupTestEnvironment({
|
|
66
|
+
prefix: 'lifecycle-start-stop',
|
|
67
|
+
createConfig: true,
|
|
68
|
+
port: 54331,
|
|
69
|
+
createIndexDir: false,
|
|
70
|
+
});
|
|
71
|
+
// 1. サーバを起動
|
|
72
|
+
const startResult = await env.tester.callTool('server_start', {});
|
|
73
|
+
expect(startResult.success).toBe(true);
|
|
74
|
+
const startContent = startResult.result?.content?.[0]?.text;
|
|
75
|
+
expect(startContent).toContain('✅ サーバを起動しました');
|
|
76
|
+
// サーバ起動を待機
|
|
77
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
78
|
+
// 2. 起動後の状態確認
|
|
79
|
+
const statusAfterStart = await env.tester.callTool('get_system_status', {});
|
|
80
|
+
const statusContent = statusAfterStart.result?.content?.[0]?.text;
|
|
81
|
+
expect(statusContent).toContain('状態: 稼働中');
|
|
82
|
+
// 3. サーバを停止
|
|
83
|
+
const stopResult = await env.tester.callTool('server_stop', {});
|
|
84
|
+
expect(stopResult.success).toBe(true);
|
|
85
|
+
const stopContent = stopResult.result?.content?.[0]?.text;
|
|
86
|
+
expect(stopContent).toContain('✅ サーバを停止しました');
|
|
87
|
+
// サーバ停止を待機
|
|
88
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
89
|
+
// 4. 停止後の状態確認
|
|
90
|
+
const statusAfterStop = await env.tester.callTool('get_system_status', {});
|
|
91
|
+
const statusAfterStopContent = statusAfterStop.result?.content?.[0]
|
|
92
|
+
?.text;
|
|
93
|
+
expect(statusAfterStopContent).toContain('状態: 設定済み・サーバ停止中');
|
|
94
|
+
}, 30000); // 30秒のタイムアウト
|
|
95
|
+
test('停止後に再度server_startで起動できる', async () => {
|
|
96
|
+
env = await setupTestEnvironment({
|
|
97
|
+
prefix: 'lifecycle-restart',
|
|
98
|
+
createConfig: true,
|
|
99
|
+
port: 54332,
|
|
100
|
+
createIndexDir: false,
|
|
101
|
+
});
|
|
102
|
+
// 1. 初回起動
|
|
103
|
+
await env.tester.callTool('server_start', {});
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
105
|
+
// 2. 停止
|
|
106
|
+
await env.tester.callTool('server_stop', {});
|
|
107
|
+
await new Promise((resolve) => setTimeout(resolve, 2000));
|
|
108
|
+
// 3. 再起動
|
|
109
|
+
const restartResult = await env.tester.callTool('server_start', {});
|
|
110
|
+
expect(restartResult.success).toBe(true);
|
|
111
|
+
const restartContent = restartResult.result?.content?.[0]?.text;
|
|
112
|
+
expect(restartContent).toContain('✅ サーバを起動しました');
|
|
113
|
+
// 再起動を待機
|
|
114
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
115
|
+
// 4. 再起動後の状態確認
|
|
116
|
+
const statusAfterRestart = await env.tester.callTool('get_system_status', {});
|
|
117
|
+
const statusContent = statusAfterRestart.result?.content?.[0]?.text;
|
|
118
|
+
expect(statusContent).toContain('状態: 稼働中');
|
|
119
|
+
}, 40000); // 40秒のタイムアウト
|
|
120
|
+
test('サーバ起動中にserver_startを実行すると既に起動中のメッセージ', async () => {
|
|
121
|
+
env = await setupTestEnvironment({
|
|
122
|
+
prefix: 'lifecycle-already-running',
|
|
123
|
+
createConfig: true,
|
|
124
|
+
port: 54333,
|
|
125
|
+
createIndexDir: false,
|
|
126
|
+
});
|
|
127
|
+
// 1. サーバを起動
|
|
128
|
+
await env.tester.callTool('server_start', {});
|
|
129
|
+
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
130
|
+
// 2. 既に起動中の状態でserver_startを実行
|
|
131
|
+
const result = await env.tester.callTool('server_start', {});
|
|
132
|
+
expect(result.success).toBe(true);
|
|
133
|
+
const content = result.result?.content?.[0]?.text;
|
|
134
|
+
expect(content).toContain('サーバは既に起動しています');
|
|
135
|
+
}, 30000); // 30秒のタイムアウト
|
|
136
|
+
});
|
|
137
|
+
describe('auto-start機能', () => {
|
|
138
|
+
test('インデックス存在時に自動起動される', async () => {
|
|
139
|
+
env = await setupTestEnvironment({
|
|
140
|
+
prefix: 'lifecycle-autostart',
|
|
141
|
+
createConfig: true,
|
|
142
|
+
port: 54334,
|
|
143
|
+
createIndexDir: true, // インデックスあり = auto-start
|
|
144
|
+
});
|
|
145
|
+
// auto-start完了を待機
|
|
146
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
147
|
+
// auto-start後はRUNNING状態になる
|
|
148
|
+
const result = await env.tester.callTool('get_system_status', {});
|
|
149
|
+
expect(result.success).toBe(true);
|
|
150
|
+
const content = result.result?.content?.[0]?.text;
|
|
151
|
+
expect(content).toContain('状態: 稼働中');
|
|
152
|
+
expect(content).toContain('サーバURL:');
|
|
153
|
+
}, 40000); // 40秒のタイムアウト(auto-start health check 30s + buffer)
|
|
154
|
+
test('auto-start後にserver_startを実行すると既に起動中のメッセージ', async () => {
|
|
155
|
+
env = await setupTestEnvironment({
|
|
156
|
+
prefix: 'lifecycle-autostart-then-start',
|
|
157
|
+
createConfig: true,
|
|
158
|
+
port: 54335,
|
|
159
|
+
createIndexDir: true,
|
|
160
|
+
});
|
|
161
|
+
// auto-start完了を待機
|
|
162
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
|
163
|
+
// auto-start後にserver_startを実行
|
|
164
|
+
const result = await env.tester.callTool('server_start', {});
|
|
165
|
+
expect(result.success).toBe(true);
|
|
166
|
+
const content = result.result?.content?.[0]?.text;
|
|
167
|
+
expect(content).toContain('サーバは既に起動しています');
|
|
168
|
+
}, 40000); // 40秒のタイムアウト
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
//# sourceMappingURL=server-lifecycle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-lifecycle.test.js","sourceRoot":"","sources":["../../src/__tests__/server-lifecycle.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-state-transition-v2.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/server-state-transition-v2.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|