@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.
Files changed (87) hide show
  1. package/dist/__tests__/helpers/test-setup.d.ts +33 -0
  2. package/dist/__tests__/helpers/test-setup.d.ts.map +1 -0
  3. package/dist/__tests__/helpers/test-setup.js +106 -0
  4. package/dist/__tests__/helpers/test-setup.js.map +1 -0
  5. package/dist/__tests__/helpers/types.d.ts +22 -0
  6. package/dist/__tests__/helpers/types.d.ts.map +1 -0
  7. package/dist/__tests__/helpers/types.js +5 -0
  8. package/dist/__tests__/helpers/types.js.map +1 -0
  9. package/dist/__tests__/mcp-server-basic.test.d.ts +16 -0
  10. package/dist/__tests__/mcp-server-basic.test.d.ts.map +1 -0
  11. package/dist/__tests__/mcp-server-basic.test.js +113 -0
  12. package/dist/__tests__/mcp-server-basic.test.js.map +1 -0
  13. package/dist/__tests__/server-lifecycle.test.d.ts +15 -0
  14. package/dist/__tests__/server-lifecycle.test.d.ts.map +1 -0
  15. package/dist/__tests__/server-lifecycle.test.js +171 -0
  16. package/dist/__tests__/server-lifecycle.test.js.map +1 -0
  17. package/dist/__tests__/server-state-transition-v2.test.d.ts +7 -0
  18. package/dist/__tests__/server-state-transition-v2.test.d.ts.map +1 -0
  19. package/dist/__tests__/server-state-transition-v2.test.js +182 -0
  20. package/dist/__tests__/server-state-transition-v2.test.js.map +1 -0
  21. package/dist/__tests__/server-state.test.d.ts +11 -0
  22. package/dist/__tests__/server-state.test.d.ts.map +1 -0
  23. package/dist/__tests__/server-state.test.js +123 -0
  24. package/dist/__tests__/server-state.test.js.map +1 -0
  25. package/dist/__tests__/state.test.d.ts +5 -0
  26. package/dist/__tests__/state.test.d.ts.map +1 -0
  27. package/dist/__tests__/state.test.js +114 -0
  28. package/dist/__tests__/state.test.js.map +1 -0
  29. package/dist/server-manager.d.ts +1 -1
  30. package/dist/server-manager.d.ts.map +1 -1
  31. package/dist/server-manager.js +68 -15
  32. package/dist/server-manager.js.map +1 -1
  33. package/dist/server-state-transition.test.d.ts +9 -0
  34. package/dist/server-state-transition.test.d.ts.map +1 -0
  35. package/dist/server-state-transition.test.js +267 -0
  36. package/dist/server-state-transition.test.js.map +1 -0
  37. package/dist/server.d.ts +4 -0
  38. package/dist/server.d.ts.map +1 -1
  39. package/dist/server.js +91 -270
  40. package/dist/server.js.map +1 -1
  41. package/dist/server.test.js +32 -1
  42. package/dist/server.test.js.map +1 -1
  43. package/dist/state.d.ts +42 -0
  44. package/dist/state.d.ts.map +1 -0
  45. package/dist/state.js +96 -0
  46. package/dist/state.js.map +1 -0
  47. package/dist/tools/__tests__/index-status.test.d.ts +5 -0
  48. package/dist/tools/__tests__/index-status.test.d.ts.map +1 -0
  49. package/dist/tools/__tests__/index-status.test.js +123 -0
  50. package/dist/tools/__tests__/index-status.test.js.map +1 -0
  51. package/dist/tools/get-document.d.ts +10 -0
  52. package/dist/tools/get-document.d.ts.map +1 -0
  53. package/dist/tools/get-document.js +73 -0
  54. package/dist/tools/get-document.js.map +1 -0
  55. package/dist/tools/index-status.d.ts +10 -0
  56. package/dist/tools/index-status.d.ts.map +1 -0
  57. package/dist/tools/index-status.js +51 -0
  58. package/dist/tools/index-status.js.map +1 -0
  59. package/dist/tools/index.d.ts +11 -0
  60. package/dist/tools/index.d.ts.map +1 -0
  61. package/dist/tools/index.js +12 -0
  62. package/dist/tools/index.js.map +1 -0
  63. package/dist/tools/init.d.ts +10 -0
  64. package/dist/tools/init.d.ts.map +1 -0
  65. package/dist/tools/init.js +71 -0
  66. package/dist/tools/init.js.map +1 -0
  67. package/dist/tools/search.d.ts +10 -0
  68. package/dist/tools/search.d.ts.map +1 -0
  69. package/dist/tools/search.js +92 -0
  70. package/dist/tools/search.js.map +1 -0
  71. package/dist/tools/server-control.d.ts +14 -0
  72. package/dist/tools/server-control.d.ts.map +1 -0
  73. package/dist/tools/server-control.js +121 -0
  74. package/dist/tools/server-control.js.map +1 -0
  75. package/dist/tools/system-status.d.ts +10 -0
  76. package/dist/tools/system-status.d.ts.map +1 -0
  77. package/dist/tools/system-status.js +68 -0
  78. package/dist/tools/system-status.js.map +1 -0
  79. package/dist/tools/types.d.ts +17 -0
  80. package/dist/tools/types.d.ts.map +1 -0
  81. package/dist/tools/types.js +5 -0
  82. package/dist/tools/types.js.map +1 -0
  83. package/dist/utils.d.ts +19 -0
  84. package/dist/utils.d.ts.map +1 -0
  85. package/dist/utils.js +36 -0
  86. package/dist/utils.js.map +1 -0
  87. 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":"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"}
@@ -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,5 @@
1
+ /**
2
+ * テスト用の型定義
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -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,7 @@
1
+ /**
2
+ * MCP Server 状態遷移とライフサイクル E2E Tests (リファクタリング版)
3
+ *
4
+ * テストヘルパーを使用して、各状態のテストを明確に分離
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=server-state-transition-v2.test.d.ts.map
@@ -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"}